JUNK tech: tinker - unlock JUNK tech in experiment mode
  this effect is stored for future visits on the same browser
several JUNK tech text have been cleaned up

your explosions do 8% more damage, but not more harm
grenade gun fires 5% faster
ruins/pavilion map is adjusted to be a bit easier to move around
crouching speeds up exit door animation

removed google analytics
bug fix with power ups and frozen time
bug fix with elevators and map collision
This commit is contained in:
landgreen
2022-01-22 07:39:05 -08:00
parent 083eb83e69
commit 53392df55e
10 changed files with 191 additions and 160 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -2,18 +2,6 @@
<html> <html>
<head> <head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-113454647-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'UA-113454647-1');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />

View File

@@ -349,7 +349,7 @@ const b = {
// radius = Math.max(0, Math.min(radius, (distanceToPlayer - 70) / b.explosionRange())) // radius = Math.max(0, Math.min(radius, (distanceToPlayer - 70) / b.explosionRange()))
let dist, sub, knock; let dist, sub, knock;
let dmg = radius * 0.017 * (tech.isExplosionStun ? 0.7 : 1); //* 0.013 * (tech.isExplosionStun ? 0.7 : 1); let dmg = radius * 0.019 * (tech.isExplosionStun ? 0.7 : 1); //* 0.013 * (tech.isExplosionStun ? 0.7 : 1);
if (tech.isExplosionHarm) radius *= 1.8 // 1/sqrt(2) radius -> area if (tech.isExplosionHarm) radius *= 1.8 // 1/sqrt(2) radius -> area
if (tech.isSmallExplosion) { if (tech.isSmallExplosion) {
color = "rgba(255,0,30,0.7)" color = "rgba(255,0,30,0.7)"
@@ -5322,7 +5322,7 @@ const b = {
do() {}, //do is set in b.setGrenadeMode() do() {}, //do is set in b.setGrenadeMode()
fire() { fire() {
const countReduction = Math.pow(0.93, tech.missileCount) const countReduction = Math.pow(0.93, tech.missileCount)
m.fireCDcycle = m.cycle + Math.floor((input.down ? 40 : 30) * b.fireCDscale / countReduction); // cool down m.fireCDcycle = m.cycle + Math.floor((input.down ? 35 : 27) * b.fireCDscale / countReduction); // cool down
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 SPREAD = input.down ? 0.12 : 0.2 const SPREAD = input.down ? 0.12 : 0.2
let angle = m.angle - SPREAD * (tech.missileCount - 1) / 2; let angle = m.angle - SPREAD * (tech.missileCount - 1) / 2;

View File

@@ -352,7 +352,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
//update tech text //disable not allowed tech //update tech text //disable not allowed tech
for (let i = 0, len = tech.tech.length; i < len; i++) { for (let i = 0, len = tech.tech.length; i < len; i++) {
const techID = document.getElementById("tech-" + i) const techID = document.getElementById("tech-" + i)
if (!tech.tech[i].isExperimentHide && (!tech.tech[i].isNonRefundable || tech.tech[i].isExperimentalMode)) { if (!tech.tech[i].isExperimentHide && (!tech.tech[i].isNonRefundable || tech.tech[i].isExperimentalMode || (localSettings.isJunkExperiment && tech.tech[i].isJunk))) {
if (tech.tech[i].allowed() || isAllowed || tech.tech[i].count > 0) { if (tech.tech[i].allowed() || isAllowed || tech.tech[i].count > 0) {
// console.log(tech.tech[i].name, isAllowed, tech.tech[i].count, tech.haveGunCheck("nail gun")) // console.log(tech.tech[i].name, isAllowed, tech.tech[i].count, tech.haveGunCheck("nail gun"))
const isCount = tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : ""; const isCount = tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : "";
@@ -456,10 +456,12 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
text += `<div id = "gun-${i}" class="experiment-grid-module" onclick="build.choosePowerUp(this,${i},'gun')"><div class="grid-title"><div class="circle-grid gun"></div> &nbsp; ${build.nameLink(b.guns[i].name)}</div> ${b.guns[i].description}</div>` text += `<div id = "gun-${i}" class="experiment-grid-module" onclick="build.choosePowerUp(this,${i},'gun')"><div class="grid-title"><div class="circle-grid gun"></div> &nbsp; ${build.nameLink(b.guns[i].name)}</div> ${b.guns[i].description}</div>`
} }
for (let i = 0, len = tech.tech.length; i < len; i++) { for (let i = 0, len = tech.tech.length; i < len; i++) {
if (!tech.tech[i].isExperimentHide) { //&& (!tech.tech[i].isNonRefundable || tech.tech[i].isExperimentalMode)) { if (!tech.tech[i].isExperimentHide && (!tech.tech[i].isJunk || localSettings.isJunkExperiment)) { //&& (!tech.tech[i].isNonRefundable || tech.tech[i].isExperimentalMode)) {
if (tech.tech[i].allowed() && (!tech.tech[i].isNonRefundable || tech.tech[i].isExperimentalMode)) { // || tech.tech[i].name === "+1 cardinality") { //|| tech.tech[i].name === "leveraged investment" if (tech.tech[i].allowed() && (!tech.tech[i].isNonRefundable || tech.tech[i].isExperimentalMode || localSettings.isJunkExperiment)) { // || tech.tech[i].name === "+1 cardinality") { //|| tech.tech[i].name === "leveraged investment"
if (tech.tech[i].isExperimentalMode) { if (tech.tech[i].isExperimentalMode) {
text += `<div id="tech-${i}" class="experiment-grid-module" onclick="build.choosePowerUp(this,${i},'tech')"><div class="grid-title">${tech.tech[i].name}</div> ${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>` text += `<div id="tech-${i}" class="experiment-grid-module" onclick="build.choosePowerUp(this,${i},'tech')"><div class="grid-title">${tech.tech[i].name}</div> ${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>`
} else if (tech.tech[i].isJunk) {
text += `<div id="tech-${i}" class="experiment-grid-module" onclick="build.choosePowerUp(this,${i},'tech')"><div class="grid-title"><div class="circle-grid junk"></div> &nbsp; ${tech.tech[i].link}</div> ${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>`
} else { } else {
text += `<div id="tech-${i}" class="experiment-grid-module" onclick="build.choosePowerUp(this,${i},'tech')"><div class="grid-title"><div class="circle-grid tech"></div> &nbsp; ${tech.tech[i].link}</div> ${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>` text += `<div id="tech-${i}" class="experiment-grid-module" onclick="build.choosePowerUp(this,${i},'tech')"><div class="grid-title"><div class="circle-grid tech"></div> &nbsp; ${tech.tech[i].link}</div> ${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>`
} }
@@ -633,16 +635,16 @@ function openExperimentMenu() {
//record settings so they can be reproduced in the experimental menu //record settings so they can be reproduced in the experimental menu
document.getElementById("experiment-button").addEventListener("click", () => { //setup build run document.getElementById("experiment-button").addEventListener("click", () => { //setup build run
let field = 0; // let field = 0;
let inventory = []; // let inventory = [];
let techList = []; // let techList = [];
if (!simulation.firstRun) { // if (!simulation.firstRun) {
field = m.fieldMode // field = m.fieldMode
inventory = [...b.inventory] // inventory = [...b.inventory]
for (let i = 0; i < tech.tech.length; i++) { // for (let i = 0; i < tech.tech.length; i++) {
techList.push(tech.tech[i].count) // techList.push(tech.tech[i].count)
} // }
} // }
openExperimentMenu(); openExperimentMenu();
}); });
@@ -1154,6 +1156,7 @@ if (localSettings) {
document.getElementById("fps-select").value = localSettings.fpsCapDefault document.getElementById("fps-select").value = localSettings.fpsCapDefault
} else { } else {
localSettings = { localSettings = {
isJunkExperiment: false,
isCommunityMaps: false, isCommunityMaps: false,
difficultyMode: '2', difficultyMode: '2',
fpsCapDefault: 'max', fpsCapDefault: 'max',

View File

@@ -20,7 +20,7 @@ const level = {
// m.setField("time dilation") // m.setField("time dilation")
// b.giveGuns("harpoon") // b.giveGuns("harpoon")
// for (let i = 0; i < 9; i++) tech.giveTech("slow light") // for (let i = 0; i < 9; i++) tech.giveTech("slow light")
// tech.giveTech("boson composite") // tech.giveTech("grenade production")
// for (let i = 0; i < 2; i++) powerUps.directSpawn(0, 0, "tech"); // for (let i = 0; i < 2; i++) powerUps.directSpawn(0, 0, "tech");
// tech.giveTech("charmed baryons") // tech.giveTech("charmed baryons")
// tech.giveTech("tinsellated flagella") // tech.giveTech("tinsellated flagella")
@@ -31,7 +31,7 @@ const level = {
// tech.tech[297].frequency = 100 // tech.tech[297].frequency = 100
// simulation.enableConstructMode() //used to build maps in testing mode // simulation.enableConstructMode() //used to build maps in testing mode
// level.vats(); // level.pavilion();
// level.testing(); //not in rotation, used for testing // level.testing(); //not in rotation, used for testing
if (simulation.isTraining) { level.walk(); } else { level.intro(); } if (simulation.isTraining) { level.walk(); } else { level.intro(); }
@@ -321,7 +321,7 @@ const level = {
player.position.y < level.exit.y - 40 && player.position.y < level.exit.y - 40 &&
player.velocity.y < 0.1 player.velocity.y < 0.1
) { ) {
level.exitCount += 2 level.exitCount += input.down ? 8 : 2
} else if (level.exitCount > 0) { } else if (level.exitCount > 0) {
level.exitCount -= 2 level.exitCount -= 2
} }
@@ -484,7 +484,7 @@ const level = {
const who = body[body.length] = Bodies.rectangle(x, isAtTop ? maxHeight : y, width, height, { const who = body[body.length] = Bodies.rectangle(x, isAtTop ? maxHeight : y, width, height, {
collisionFilter: { collisionFilter: {
category: cat.map, category: cat.map,
mask: cat.player | cat.body | cat.bullet | cat.powerUp | cat.mob | cat.mobBullet mask: cat.map | cat.player | cat.body | cat.bullet | cat.powerUp | cat.mob | cat.mobBullet
}, },
isNoSetCollision: true, isNoSetCollision: true,
inertia: Infinity, //prevents rotation inertia: Infinity, //prevents rotation
@@ -2557,7 +2557,7 @@ const level = {
// spawn.slashBoss(1900, -500) // spawn.slashBoss(1900, -500)
// spawn.launcherBoss(3200, -500) // spawn.launcherBoss(3200, -500)
// spawn.laserTargetingBoss(1700, -500) // spawn.laserTargetingBoss(1700, -500)
// spawn.powerUpBoss(3200, -500) spawn.powerUpBoss(1900, -500)
// spawn.powerUpBossBaby(3200, -500) // spawn.powerUpBossBaby(3200, -500)
// spawn.snakeBoss(1700, -500) // spawn.snakeBoss(1700, -500)
// spawn.streamBoss(3200, -500) // spawn.streamBoss(3200, -500)
@@ -2575,7 +2575,7 @@ const level = {
// spawn.tetherBoss(1700, -500) //go to actual level? // spawn.tetherBoss(1700, -500) //go to actual level?
// spawn.revolutionBoss(1900, -500) // spawn.revolutionBoss(1900, -500)
// spawn.bomberBoss(1400, -500) // spawn.bomberBoss(1400, -500)
spawn.cellBossCulture(1600, -500) // spawn.cellBossCulture(1600, -500)
// spawn.shieldingBoss(1700, -500) // spawn.shieldingBoss(1700, -500)
// for (let i = 0; i < 10; ++i) spawn.bodyRect(1600 + 5, -500, 30, 40); // for (let i = 0; i < 10; ++i) spawn.bodyRect(1600 + 5, -500, 30, 40);
@@ -3298,25 +3298,30 @@ const level = {
//bottom floor //bottom floor
//entrance //entrance
spawn.mapRect(-200, -750, 1500, 100); spawn.mapRect(-200, -750, 1500, 100);
spawn.mapRect(-575, 0, 3275, 500); spawn.mapRect(-575, 0, 2150, 500);
spawn.mapRect(-1275, 275, 875, 225); // spawn.mapRect(-1275, 275, 875, 225);
spawn.mapRect(-1275, 275, 3975, 225);
spawn.mapRect(-1050, 0, 325, 50); spawn.mapRect(-1050, 0, 325, 50);
spawn.mapRect(-775, 0, 50, 140); spawn.mapRect(-775, 0, 50, 140);
vanish.push(level.vanish(-725, 13, 150, 25)) vanish.push(level.vanish(-725, 13, 150, 25))
spawn.mapRect(-200, -750, 100, 600);
spawn.mapRect(-200, -750, 100, 648); // spawn.mapRect(1200, -750, 100, 600);
spawn.mapRect(1200, -750, 100, 648);
vanish.push(level.vanish(-350, -225, 150, 225)) vanish.push(level.vanish(-350, -225, 150, 225))
vanish.push(level.vanish(-350, -450, 150, 223)) vanish.push(level.vanish(-350, -450, 150, 223))
spawn.mapRect(2475, -1800, 250, 2300); spawn.mapRect(2475, -1800, 250, 2300);
vanish.push(level.vanish(1300, -225, 150, 225)) // vanish.push(level.vanish(1300, -375, 150, 225))
vanish.push(level.vanish(1300, -450, 150, 223)) // vanish.push(level.vanish(1300, -450, 150, 223))
powerUps.spawnStartingPowerUps(550, -100); // spawn.mapRect(1200, -375, 250, 50);
// spawn.mapRect(1200, -375, 250, 225);
// spawn.mapRect(1200, -375, 175, 25);
spawn.mapRect(1200, -750, 100, 450);
spawn.mapRect(1200, -375, 250, 75);
powerUps.spawnStartingPowerUps(550, -100);
spawn.mapRect(125, -12, 850, 50); spawn.mapRect(125, -12, 850, 50);
spawn.mapRect(175, -25, 750, 50); spawn.mapRect(175, -25, 750, 50);
spawn.bodyRect(1350, -175, 150, 175, 0.5);
spawn.bodyRect(1350, -600, 125, 225, 0.2);
//entrance //entrance
// vanish.push(level.vanish(-300, -500, 100, 25)) // vanish.push(level.vanish(-300, -500, 100, 25))
// vanish.push(level.vanish(-450, -200, 100, 25)) // vanish.push(level.vanish(-450, -200, 100, 25))
@@ -3334,14 +3339,20 @@ const level = {
spawn.mapRect(500, -1350, 525, 497); spawn.mapRect(500, -1350, 525, 497);
spawn.mapRect(25, -1050, 300, 150); spawn.mapRect(25, -1050, 300, 150);
} }
vanish.push(level.vanish(550, -1575, 50, 225)) if (Math.random() < 0.5) {
vanish.push(level.vanish(925, -1575, 50, 225)) vanish.push(level.vanish(400, -1600, 175, 25))
vanish.push(level.vanish(950, -1600, 175, 25))
} else {
vanish.push(level.vanish(550, -1575, 50, 225))
vanish.push(level.vanish(925, -1575, 50, 225))
}
// vanish.push(level.vanish(575, -1575, 375, 225)) // vanish.push(level.vanish(575, -1575, 375, 225))
spawn.bodyRect(225, -850, 50, 100, 0.4); spawn.bodyRect(225, -850, 50, 100, 0.4);
spawn.mapRect(600, -1800, 325, 225); spawn.mapRect(600, -1800, 325, 225);
spawn.mapRect(1900, -1500, 325, 25); spawn.mapRect(1900, -1500, 325, 25);
spawn.bodyRect(1000, -1825, 250, 20, 0.2); spawn.bodyRect(1050, -1825, 250, 20, 0.2);
if (Math.random() < 0.5) { if (Math.random() < 0.5) {
vanish.push(level.vanish(1400, -1000, 200, 25)) vanish.push(level.vanish(1400, -1000, 200, 25))
vanish.push(level.vanish(1625, -1250, 200, 25)) vanish.push(level.vanish(1625, -1250, 200, 25))
@@ -3349,9 +3360,10 @@ const level = {
vanish.push(level.vanish(1400, -1075, 175, 175)) vanish.push(level.vanish(1400, -1075, 175, 175))
vanish.push(level.vanish(1575, -1250, 175, 175)) vanish.push(level.vanish(1575, -1250, 175, 175))
} }
vanish.push(level.vanish(1100, -1800, 225, 25)) vanish.push(level.vanish(1125, -1800, 625, 25))
vanish.push(level.vanish(1500, -1800, 225, 25))
vanish.push(level.vanish(-50, -1800, 400, 25)) // vanish.push(level.vanish(1500, -1800, 225, 25))
vanish.push(level.vanish(-50, -1800, 450, 25))
//exit //exit
spawn.mapRect(-1050, -1450, 700, 25); spawn.mapRect(-1050, -1450, 700, 25);
@@ -3384,7 +3396,7 @@ const level = {
ctx.fillStyle = "#d0d3d9" ctx.fillStyle = "#d0d3d9"
ctx.fillRect(-2500, -1800, 3575, 2100); ctx.fillRect(-2500, -1800, 3575, 2100);
ctx.fillStyle = "#c0c3c9" ctx.fillStyle = "#c0c3c9"
ctx.fillRect(-2075, -1475, 25, 1500); ctx.fillRect(-2075, -1475, 25, 1800);
ctx.fillStyle = "#cff" //exit ctx.fillStyle = "#cff" //exit
ctx.fillRect(550, -1800, 525, 350) ctx.fillRect(550, -1800, 525, 350)
@@ -3394,6 +3406,7 @@ const level = {
level.customTopLayer = () => { level.customTopLayer = () => {
//shadow //shadow
ctx.fillStyle = "rgba(0,10,30,0.1)" ctx.fillStyle = "rgba(0,10,30,0.1)"
ctx.fillRect(-1450, -300, 150, 325);
ctx.fillRect(-1300, -650, 1500, 650) ctx.fillRect(-1300, -650, 1500, 650)
ctx.fillRect(725, 50, 325, 225) ctx.fillRect(725, 50, 325, 225)
ctx.fillRect(-325, -950, 300, 225) ctx.fillRect(-325, -950, 300, 225)
@@ -3407,7 +3420,7 @@ const level = {
ctx.fillStyle = "#d0d3d9" ctx.fillStyle = "#d0d3d9"
ctx.fillRect(-1075, -1800, 3575, 2100); ctx.fillRect(-1075, -1800, 3575, 2100);
ctx.fillStyle = "#c0c3c9" ctx.fillStyle = "#c0c3c9"
ctx.fillRect(2050, -1475, 25, 1500); ctx.fillRect(2050, -1475, 25, 1800);
ctx.fillStyle = "#cff" //exit ctx.fillStyle = "#cff" //exit
ctx.fillRect(-1050, -1800, 525, 350) ctx.fillRect(-1050, -1800, 525, 350)
@@ -3417,6 +3430,7 @@ const level = {
level.customTopLayer = () => { level.customTopLayer = () => {
//shadow //shadow
ctx.fillStyle = "rgba(0,10,30,0.1)" ctx.fillStyle = "rgba(0,10,30,0.1)"
ctx.fillRect(1300, -300, 150, 325);
ctx.fillRect(-200, -675, 1500, 700) ctx.fillRect(-200, -675, 1500, 700)
ctx.fillRect(500, -950, 525, 225); ctx.fillRect(500, -950, 525, 225);
ctx.fillRect(600, -1600, 325, 275); ctx.fillRect(600, -1600, 325, 275);

View File

@@ -553,6 +553,7 @@ const m = {
} }
} }
} }
let history = m.history[(m.cycle - steps) % 600] let history = m.history[(m.cycle - steps) % 600]
Matter.Body.setPosition(player, history.position); Matter.Body.setPosition(player, history.position);
Matter.Body.setVelocity(player, { x: history.velocity.x, y: history.velocity.y }); Matter.Body.setVelocity(player, { x: history.velocity.x, y: history.velocity.y });
@@ -598,6 +599,7 @@ const m = {
if (isDrawPlayer) { if (isDrawPlayer) {
isDrawPlayer = false isDrawPlayer = false
ctx.save(); ctx.save();
ctx.globalCompositeOperation = "lighter";
ctx.translate(canvas.width2, canvas.height2); //center ctx.translate(canvas.width2, canvas.height2); //center
ctx.scale(simulation.zoom / simulation.edgeZoomOutSmooth, simulation.zoom / simulation.edgeZoomOutSmooth); //zoom in once centered ctx.scale(simulation.zoom / simulation.edgeZoomOutSmooth, simulation.zoom / simulation.edgeZoomOutSmooth); //zoom in once centered
ctx.translate(-canvas.width2 + m.transX, -canvas.height2 + m.transY); //translate ctx.translate(-canvas.width2 + m.transX, -canvas.height2 + m.transY); //translate

View File

@@ -513,8 +513,10 @@ const simulation = {
bodies[i].force.y += bodies[i].mass * magnitude; bodies[i].force.y += bodies[i].mass * magnitude;
} }
} }
addGravity(powerUp, simulation.g); if (!m.isBodiesAsleep) {
addGravity(body, simulation.g); addGravity(powerUp, simulation.g);
addGravity(body, simulation.g);
}
player.force.y += player.mass * simulation.g; player.force.y += player.mass * simulation.g;
}, },
firstRun: true, firstRun: true,

View File

@@ -1301,7 +1301,48 @@ const spawn = {
} }
for (let i = 0; i < powerUp.length; i++) powerUp[i].collisionFilter.mask = cat.map | cat.powerUp for (let i = 0; i < powerUp.length; i++) powerUp[i].collisionFilter.mask = cat.map | cat.powerUp
}; };
//steal all power ups
// for (let i = 0; i < Math.min(powerUp.length, this.vertices.length); i++) {
// powerUp[i].collisionFilter.mask = 0
// Matter.Body.setPosition(powerUp[i], this.vertices[i])
// Matter.Body.setVelocity(powerUp[i], {
// x: 0,
// y: 0
// })
// }
// me.powerUpList = []
// me.constrainPowerUps = function() {
// for (let i = 0; i < Math.min(powerUp.length, this.vertices.length); i++) {
// //remove other constraints on power up
// for (let i = 0, len = cons.length; i < len; ++i) {
// if (cons[i].bodyB === powerUp[i] || cons[i].bodyA === powerUp[i]) {
// Matter.Composite.remove(engine.world, cons[i]);
// cons.splice(i, 1);
// break;
// }
// }
// //add to list
// this.powerUpList.push(powerUp[i])
// //position and stop
// powerUp[i].collisionFilter.mask = 0
// Matter.Body.setPosition(powerUp[i], this.vertices[i])
// Matter.Body.setVelocity(powerUp[i], { x: 0, y: 0 })
// //add constraint
// cons[cons.length] = Constraint.create({
// pointA: this.vertices[i],
// bodyB: powerUp[i],
// stiffness: 1,
// damping: 1
// });
// Composite.add(engine.world, cons[cons.length - 1]);
// }
// for (let i = 0; i < this.powerUpList.length; i++) {}
// }
// me.constrainPowerUps()
me.do = function() { me.do = function() {
this.stroke = `hsl(0,0%,${80 + 25 * Math.sin(simulation.cycle * 0.01)}%)`
// if (this.isInvulnerable) { // if (this.isInvulnerable) {
// if (this.invulnerabilityCountDown > 0) { // if (this.invulnerabilityCountDown > 0) {
// this.invulnerabilityCountDown-- // this.invulnerabilityCountDown--
@@ -1318,16 +1359,19 @@ const spawn = {
// this.damageReduction = this.startingDamageReduction // this.damageReduction = this.startingDamageReduction
// } // }
// } // }
this.stroke = `hsl(0,0%,${80 + 25 * Math.sin(simulation.cycle * 0.01)}%)`
//steal all power ups //steal all power ups
// for (let i = 0; i < Math.min(powerUp.length, this.vertices.length); i++) {
// powerUp[i].collisionFilter.mask = 0
// Matter.Body.setPosition(powerUp[i], this.vertices[i])
// Matter.Body.setVelocity(powerUp[i], { x: 0, y: 0 })
// }
for (let i = 0; i < Math.min(powerUp.length, this.vertices.length); i++) { for (let i = 0; i < Math.min(powerUp.length, this.vertices.length); i++) {
powerUp[i].collisionFilter.mask = 0 powerUp[i].collisionFilter.mask = 0
Matter.Body.setPosition(powerUp[i], this.vertices[i]) Matter.Body.setPosition(powerUp[i], this.vertices[i])
Matter.Body.setVelocity(powerUp[i], { Matter.Body.setVelocity(powerUp[i], { x: 0, y: 0 })
x: 0,
y: 0
})
} }
this.seePlayerCheckByDistance(); this.seePlayerCheckByDistance();
this.attraction(); this.attraction();
this.checkStatus(); this.checkStatus();
@@ -1624,25 +1668,16 @@ const spawn = {
}); });
} }
this.seePlayerCheckByDistance() this.seePlayerCheckByDistance()
// if (!(simulation.cycle % this.seePlayerFreq)) {
// if (this.distanceToPlayer2() < this.seeAtDistance2) { // ignore cloak for black holes
// this.locatePlayer();
// if (!this.seePlayer.yes) this.seePlayer.yes = true;
// } else if (this.seePlayer.recall) {
// this.lostPlayer();
// }
// }
this.checkStatus(); this.checkStatus();
// if (this.seePlayer.recall) { //accelerate towards the player
if (this.seePlayer.recall) {
const forceMag = this.accelMag * this.mass;
const angle = Math.atan2(this.seePlayer.position.y - this.position.y, this.seePlayer.position.x - this.position.x);
this.force.x += forceMag * Math.cos(angle);
this.force.y += forceMag * Math.sin(angle);
}
//eventHorizon waves in and out //eventHorizon waves in and out
const eventHorizon = this.eventHorizon * (0.93 + 0.17 * Math.sin(simulation.cycle * 0.011)) const eventHorizon = this.eventHorizon * (0.93 + 0.17 * Math.sin(simulation.cycle * 0.011))
//accelerate towards the player
const forceMag = this.accelMag * this.mass;
const angle = Math.atan2(this.seePlayer.position.y - this.position.y, this.seePlayer.position.x - this.position.x);
this.force.x += forceMag * Math.cos(angle);
this.force.y += forceMag * Math.sin(angle);
//draw darkness //draw darkness
ctx.beginPath(); ctx.beginPath();
ctx.arc(this.position.x, this.position.y, eventHorizon * 0.25, 0, 2 * Math.PI); ctx.arc(this.position.x, this.position.y, eventHorizon * 0.25, 0, 2 * Math.PI);
@@ -1678,7 +1713,6 @@ const spawn = {
ctx.fillStyle = "rgba(0,0,0,0.3)"; ctx.fillStyle = "rgba(0,0,0,0.3)";
ctx.fill(); ctx.fill();
} }
// }
} }
}, },
suckerBoss(x, y, radius = 25) { suckerBoss(x, y, radius = 25) {

View File

@@ -605,7 +605,7 @@ const tech = {
frequency: 1, frequency: 1,
frequencyDefault: 1, frequencyDefault: 1,
allowed() { allowed() {
return build.isExperimentSelection return true
}, },
requires: "", requires: "",
effect() { effect() {
@@ -7323,7 +7323,6 @@ const tech = {
// count: 0, // count: 0,
// frequency: 0, // frequency: 0,
// isNonRefundable: true, // isNonRefundable: true,
// isExperimentHide: true,
// isJunk: true, // isJunk: true,
// allowed() { // allowed() {
// return true // return true
@@ -7334,6 +7333,25 @@ const tech = {
// }, // },
// remove() {} // remove() {}
// }, // },
{
name: "tinker",
description: "<strong>permanently</strong> unlock <strong class='color-j'>JUNK</strong> <strong class='color-m'>tech</strong> in experiment mode<br><em>this effect is stored for future visits</em>",
maxCount: 1,
count: 0,
frequency: 0,
frequencyDefault: 0,
isJunk: true,
isNonRefundable: true,
allowed() {
return !localSettings.isJunkExperiment
},
requires: "",
effect() {
localSettings.isJunkExperiment = true
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
},
remove() {}
},
{ {
name: "brainstorm", name: "brainstorm",
description: "the <strong class='color-m'>tech</strong> choice menu <strong>randomizes</strong><br>every <strong>0.5</strong> seconds for <strong>10</strong> seconds", description: "the <strong class='color-m'>tech</strong> choice menu <strong>randomizes</strong><br>every <strong>0.5</strong> seconds for <strong>10</strong> seconds",
@@ -7341,7 +7359,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
frequencyDefault: 0, frequencyDefault: 0,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return true return true
@@ -7364,7 +7381,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return !tech.isFallingDamage && !tech.isOverHeal && !tech.isEnergyHealth }, allowed() { return !tech.isFallingDamage && !tech.isOverHeal && !tech.isEnergyHealth },
requires: "not quenching, tungsten carbide, mass-energy", requires: "not quenching, tungsten carbide, mass-energy",
@@ -7378,12 +7394,11 @@ const tech = {
}, },
{ {
name: "density", name: "density",
description: `<strong class='color-block'>block</strong> are <strong>10</strong> times less <strong>dense</strong>`, description: `<strong class='color-block'>blocks</strong> are <strong>10</strong> times less <strong>dense</strong>`,
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -7419,7 +7434,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
// isNonRefundable: true, // isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -7449,7 +7463,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
// isNonRefundable: true, // isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -7476,12 +7489,11 @@ const tech = {
}, },
{ {
name: "planetesimals", name: "planetesimals",
description: `play <strong>planetesimals</strong><br><em>(an annoying asteroids game with Newtonian physics)</em><br>clearing a <strong>level</strong> in <strong>planetesimals</strong> spawns a <strong class='color-m'>tech</strong> in <strong>n-gon</strong><br>but, if you <strong style="color:red;">die</strong> in <strong>planetesimals</strong> you <strong style="color:red;">die</strong> in <strong>n-gon</strong>`, description: `play <strong>planetesimals</strong> <em style = 'font-size:80%;'>(an asteroids-like game)</em><br>clear <strong>levels</strong> in <strong>planetesimals</strong> to spawn <strong class='color-m'>tech</strong><br>if you <strong style="color:red;">die</strong> in <strong>planetesimals</strong> you <strong style="color:red;">die</strong> in <strong>n-gon</strong>`,
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -7515,7 +7527,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -7530,7 +7541,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -7547,7 +7557,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -7564,7 +7573,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -7609,7 +7617,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -7669,7 +7676,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -7743,7 +7749,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isJunk: true, isJunk: true,
isNonRefundable: true, isNonRefundable: true,
allowed() { return true }, allowed() { return true },
@@ -7838,7 +7843,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return !tech.isFireMoveLock return !tech.isFireMoveLock
@@ -7862,7 +7866,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return !tech.isEnergyHealth return !tech.isEnergyHealth
@@ -7877,12 +7880,11 @@ const tech = {
}, },
{ {
name: "not a bug", name: "not a bug",
description: "initiate a totally safe game crash for 5 seconds", description: "initiate a totally safe game crash for 10 seconds",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -7894,7 +7896,7 @@ const tech = {
setTimeout(() => { setTimeout(() => {
simulation.drawCircle = savedfunction simulation.drawCircle = savedfunction
canvas.width = canvas.width //clears the canvas // works on chrome at least canvas.width = canvas.width //clears the canvas // works on chrome at least
}, 5000); }, 10000);
// for (;;) {} //freezes the tab // for (;;) {} //freezes the tab
}, },
@@ -7906,7 +7908,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return !m.isShipMode return !m.isShipMode
@@ -7925,7 +7926,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isJunk: true, isJunk: true,
isNonRefundable: true, isNonRefundable: true,
allowed() { allowed() {
@@ -7946,7 +7946,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isNonRefundable: true, isNonRefundable: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
@@ -7976,7 +7975,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isNonRefundable: true, isNonRefundable: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
@@ -7996,7 +7994,6 @@ const tech = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isNonRefundable: true, isNonRefundable: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
@@ -8039,11 +8036,10 @@ const tech = {
// }, // },
{ {
name: "Fourier analysis", name: "Fourier analysis",
description: "your aiming is now controlled by this equation:<br>2sin(0.0133t) + sin(0.013t) + 0.5sin(0.031t)+ 0.33sin(0.03t)", description: "your aiming is now controlled by this equation:<br><span style = 'font-size:80%;'>2sin(0.0133t) + sin(0.013t) + 0.5sin(0.031t)+ 0.33sin(0.03t)</span>",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 0, frequency: 0,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return !m.isShipMode return !m.isShipMode
@@ -8071,7 +8067,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return b.inventory.length > 0 return b.inventory.length > 0
@@ -8091,7 +8086,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8121,7 +8115,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8150,7 +8143,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8166,7 +8158,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8185,7 +8176,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8204,7 +8194,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8222,7 +8211,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8238,7 +8226,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8269,7 +8256,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8292,7 +8278,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8310,7 +8295,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return !m.isShipMode && m.fieldUpgrades[m.fieldMode].name !== "negative mass" return !m.isShipMode && m.fieldUpgrades[m.fieldMode].name !== "negative mass"
@@ -8350,7 +8334,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8366,7 +8349,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8383,7 +8365,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return m.fieldUpgrades[m.fieldMode].name !== "negative mass" return m.fieldUpgrades[m.fieldMode].name !== "negative mass"
@@ -8396,19 +8377,34 @@ const tech = {
}, },
{ {
name: "rewind", name: "rewind",
description: "every 5 seconds <strong class='color-rewind'>rewind</strong> <strong>2</strong> seconds<br>lasts 120 seconds", description: "every 10 seconds <strong class='color-rewind'>rewind</strong> <strong>2</strong> seconds",
maxCount: 9, maxCount: 9,
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
effect() { effect() {
for (let i = 0; i < 24; i++) { setInterval(() => { m.rewind(120) }, 10000);
setTimeout(() => { m.rewind(120) }, i * 5000); // for (let i = 0; i < 24; i++) {
} // setTimeout(() => { m.rewind(120) }, i * 5000);
// }
},
remove() {}
},
{
name: "undo",
description: "every 4 seconds <strong class='color-rewind'>rewind</strong> <strong>1/2</strong> a second",
maxCount: 9,
count: 0,
frequency: 0,
isNonRefundable: true,
isJunk: true,
allowed() { return true },
requires: "",
effect() {
setInterval(() => { m.rewind(30) }, 4000);
}, },
remove() {} remove() {}
}, },
@@ -8419,7 +8415,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8447,7 +8442,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8463,7 +8457,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8480,7 +8473,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8499,17 +8491,16 @@ const tech = {
}, },
{ {
name: "missile Launching System", name: "missile Launching System",
description: "fire missiles for the next 60 seconds", description: "fire missiles for the next 120 seconds",
maxCount: 9, maxCount: 9,
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
effect() { effect() {
for (let i = 0; i < 60; i++) { for (let i = 0; i < 120; i++) {
setTimeout(() => { setTimeout(() => {
const where = { const where = {
x: m.pos.x, x: m.pos.x,
@@ -8523,26 +8514,23 @@ const tech = {
}, },
{ {
name: "grenade production", name: "grenade production",
description: "drop grenades for the next 120 seconds", description: "drop a grenade every 2 seconds",
maxCount: 9, maxCount: 9,
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
effect() { effect() {
for (let i = 0; i < 120; i++) { setInterval(() => {
setTimeout(() => { b.grenade(Vector.add(m.pos, { x: 10 * (Math.random() - 0.5), y: 10 * (Math.random() - 0.5) }), -Math.PI / 2) //fire different angles for each grenade
b.grenade(Vector.add(m.pos, { x: 10 * (Math.random() - 0.5), y: 10 * (Math.random() - 0.5) }), -Math.PI / 2) //fire different angles for each grenade const who = bullet[bullet.length - 1]
const who = bullet[bullet.length - 1] Matter.Body.setVelocity(who, {
Matter.Body.setVelocity(who, { x: who.velocity.x * 0.1,
x: who.velocity.x * 0.1, y: who.velocity.y * 0.1
y: who.velocity.y * 0.1 });
}); }, 2000);
}, i * 1000);
}
}, },
remove() {} remove() {}
}, },
@@ -8577,7 +8565,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return !m.isShipMode return !m.isShipMode
@@ -8623,7 +8610,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return !m.isShipMode return !m.isShipMode
@@ -8664,7 +8650,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return !m.isShipMode return !m.isShipMode
@@ -8733,7 +8718,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8758,7 +8742,6 @@ const tech = {
frequency: 0, frequency: 0,
isBotTech: true, isBotTech: true,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return b.totalBots() > 2 return b.totalBots() > 2
@@ -8816,7 +8799,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8832,7 +8814,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",
@@ -8848,7 +8829,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return b.inventory.length > 0 return b.inventory.length > 0
@@ -8876,7 +8856,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return powerUps.research.count > 3 return powerUps.research.count > 3
@@ -8898,7 +8877,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { allowed() {
return powerUps.research.count > 3 return powerUps.research.count > 3
@@ -8919,7 +8897,6 @@ const tech = {
count: 0, count: 0,
frequency: 0, frequency: 0,
isNonRefundable: true, isNonRefundable: true,
isExperimentHide: true,
isJunk: true, isJunk: true,
allowed() { return true }, allowed() { return true },
requires: "", requires: "",

View File

@@ -1,16 +1,29 @@
******************************************************** NEXT PATCH ************************************************** ******************************************************** NEXT PATCH **************************************************
JUNK tech: tinker - unlock JUNK tech in experiment mode
this effect is stored for future visits on the same browser
several JUNK tech text have been cleaned up
your explosions do 8% more damage, but not more harm
grenade gun fires 5% faster
ruins/pavilion map is adjusted to be a bit easier to move around
crouching speeds up exit door animation
removed google analytics
bug fix with power ups and frozen time
bug fix with elevators and map collision
******************************************************** TODO ******************************************************** ******************************************************** TODO ********************************************************
mobs that are given the players location at the start can get confused if the map is reversed add anticipation to more mob attacks
suckers stabber
striker
boss that fires giant bullets, that bounce around and chases you
can mob bullets damage other mob? can mob bullets damage other mob?
maybe if they switch collisions and classType === "body" or obj.classType === "bullet" maybe if they switch collisions and classType === "body" or obj.classType === "bullet"
grenade gun seems weak
path finding system path finding system
figure out how to get friction effects on map/body to apply to player figure out how to get friction effects on map/body to apply to player
@@ -19,8 +32,6 @@ vertical reversed version of reservoir level, start at top and press buttons to
growBoss and cellBoss are too similar growBoss and cellBoss are too similar
might have to nerf upgraded bots
variant of Occam's razor - remove 50% of your tech for each removed get: variant of Occam's razor - remove 50% of your tech for each removed get:
2 bots? 2 bots?
50 energy max 50 energy max