tinker
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:
12
index.html
12
index.html
@@ -2,18 +2,6 @@
|
||||
<html>
|
||||
|
||||
<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 http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
@@ -349,7 +349,7 @@ const b = {
|
||||
// radius = Math.max(0, Math.min(radius, (distanceToPlayer - 70) / b.explosionRange()))
|
||||
|
||||
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.isSmallExplosion) {
|
||||
color = "rgba(255,0,30,0.7)"
|
||||
@@ -5322,7 +5322,7 @@ const b = {
|
||||
do() {}, //do is set in b.setGrenadeMode()
|
||||
fire() {
|
||||
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 SPREAD = input.down ? 0.12 : 0.2
|
||||
let angle = m.angle - SPREAD * (tech.missileCount - 1) / 2;
|
||||
|
||||
29
js/index.js
29
js/index.js
@@ -352,7 +352,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
||||
//update tech text //disable not allowed tech
|
||||
for (let i = 0, len = tech.tech.length; i < len; 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) {
|
||||
// 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)` : "";
|
||||
@@ -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> ${build.nameLink(b.guns[i].name)}</div> ${b.guns[i].description}</div>`
|
||||
}
|
||||
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].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].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 || localSettings.isJunkExperiment)) { // || tech.tech[i].name === "+1 cardinality") { //|| tech.tech[i].name === "leveraged investment"
|
||||
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>`
|
||||
} 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> ${tech.tech[i].link}</div> ${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>`
|
||||
} 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> ${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
|
||||
document.getElementById("experiment-button").addEventListener("click", () => { //setup build run
|
||||
let field = 0;
|
||||
let inventory = [];
|
||||
let techList = [];
|
||||
if (!simulation.firstRun) {
|
||||
field = m.fieldMode
|
||||
inventory = [...b.inventory]
|
||||
for (let i = 0; i < tech.tech.length; i++) {
|
||||
techList.push(tech.tech[i].count)
|
||||
}
|
||||
}
|
||||
// let field = 0;
|
||||
// let inventory = [];
|
||||
// let techList = [];
|
||||
// if (!simulation.firstRun) {
|
||||
// field = m.fieldMode
|
||||
// inventory = [...b.inventory]
|
||||
// for (let i = 0; i < tech.tech.length; i++) {
|
||||
// techList.push(tech.tech[i].count)
|
||||
// }
|
||||
// }
|
||||
openExperimentMenu();
|
||||
});
|
||||
|
||||
@@ -1154,6 +1156,7 @@ if (localSettings) {
|
||||
document.getElementById("fps-select").value = localSettings.fpsCapDefault
|
||||
} else {
|
||||
localSettings = {
|
||||
isJunkExperiment: false,
|
||||
isCommunityMaps: false,
|
||||
difficultyMode: '2',
|
||||
fpsCapDefault: 'max',
|
||||
|
||||
62
js/level.js
62
js/level.js
@@ -20,7 +20,7 @@ const level = {
|
||||
// m.setField("time dilation")
|
||||
// b.giveGuns("harpoon")
|
||||
// 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");
|
||||
// tech.giveTech("charmed baryons")
|
||||
// tech.giveTech("tinsellated flagella")
|
||||
@@ -31,7 +31,7 @@ const level = {
|
||||
// tech.tech[297].frequency = 100
|
||||
|
||||
// simulation.enableConstructMode() //used to build maps in testing mode
|
||||
// level.vats();
|
||||
// level.pavilion();
|
||||
// level.testing(); //not in rotation, used for testing
|
||||
|
||||
if (simulation.isTraining) { level.walk(); } else { level.intro(); }
|
||||
@@ -321,7 +321,7 @@ const level = {
|
||||
player.position.y < level.exit.y - 40 &&
|
||||
player.velocity.y < 0.1
|
||||
) {
|
||||
level.exitCount += 2
|
||||
level.exitCount += input.down ? 8 : 2
|
||||
} else if (level.exitCount > 0) {
|
||||
level.exitCount -= 2
|
||||
}
|
||||
@@ -484,7 +484,7 @@ const level = {
|
||||
const who = body[body.length] = Bodies.rectangle(x, isAtTop ? maxHeight : y, width, height, {
|
||||
collisionFilter: {
|
||||
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,
|
||||
inertia: Infinity, //prevents rotation
|
||||
@@ -2557,7 +2557,7 @@ const level = {
|
||||
// spawn.slashBoss(1900, -500)
|
||||
// spawn.launcherBoss(3200, -500)
|
||||
// spawn.laserTargetingBoss(1700, -500)
|
||||
// spawn.powerUpBoss(3200, -500)
|
||||
spawn.powerUpBoss(1900, -500)
|
||||
// spawn.powerUpBossBaby(3200, -500)
|
||||
// spawn.snakeBoss(1700, -500)
|
||||
// spawn.streamBoss(3200, -500)
|
||||
@@ -2575,7 +2575,7 @@ const level = {
|
||||
// spawn.tetherBoss(1700, -500) //go to actual level?
|
||||
// spawn.revolutionBoss(1900, -500)
|
||||
// spawn.bomberBoss(1400, -500)
|
||||
spawn.cellBossCulture(1600, -500)
|
||||
// spawn.cellBossCulture(1600, -500)
|
||||
// spawn.shieldingBoss(1700, -500)
|
||||
|
||||
// for (let i = 0; i < 10; ++i) spawn.bodyRect(1600 + 5, -500, 30, 40);
|
||||
@@ -3298,25 +3298,30 @@ const level = {
|
||||
//bottom floor
|
||||
//entrance
|
||||
spawn.mapRect(-200, -750, 1500, 100);
|
||||
spawn.mapRect(-575, 0, 3275, 500);
|
||||
spawn.mapRect(-1275, 275, 875, 225);
|
||||
spawn.mapRect(-575, 0, 2150, 500);
|
||||
// spawn.mapRect(-1275, 275, 875, 225);
|
||||
spawn.mapRect(-1275, 275, 3975, 225);
|
||||
spawn.mapRect(-1050, 0, 325, 50);
|
||||
spawn.mapRect(-775, 0, 50, 140);
|
||||
vanish.push(level.vanish(-725, 13, 150, 25))
|
||||
|
||||
spawn.mapRect(-200, -750, 100, 648);
|
||||
spawn.mapRect(1200, -750, 100, 648);
|
||||
spawn.mapRect(-200, -750, 100, 600);
|
||||
// spawn.mapRect(1200, -750, 100, 600);
|
||||
vanish.push(level.vanish(-350, -225, 150, 225))
|
||||
vanish.push(level.vanish(-350, -450, 150, 223))
|
||||
spawn.mapRect(2475, -1800, 250, 2300);
|
||||
vanish.push(level.vanish(1300, -225, 150, 225))
|
||||
vanish.push(level.vanish(1300, -450, 150, 223))
|
||||
powerUps.spawnStartingPowerUps(550, -100);
|
||||
// vanish.push(level.vanish(1300, -375, 150, 225))
|
||||
// vanish.push(level.vanish(1300, -450, 150, 223))
|
||||
// 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(175, -25, 750, 50);
|
||||
|
||||
|
||||
spawn.bodyRect(1350, -175, 150, 175, 0.5);
|
||||
spawn.bodyRect(1350, -600, 125, 225, 0.2);
|
||||
//entrance
|
||||
// vanish.push(level.vanish(-300, -500, 100, 25))
|
||||
// vanish.push(level.vanish(-450, -200, 100, 25))
|
||||
@@ -3334,14 +3339,20 @@ const level = {
|
||||
spawn.mapRect(500, -1350, 525, 497);
|
||||
spawn.mapRect(25, -1050, 300, 150);
|
||||
}
|
||||
vanish.push(level.vanish(550, -1575, 50, 225))
|
||||
vanish.push(level.vanish(925, -1575, 50, 225))
|
||||
if (Math.random() < 0.5) {
|
||||
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))
|
||||
|
||||
spawn.bodyRect(225, -850, 50, 100, 0.4);
|
||||
spawn.mapRect(600, -1800, 325, 225);
|
||||
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) {
|
||||
vanish.push(level.vanish(1400, -1000, 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(1575, -1250, 175, 175))
|
||||
}
|
||||
vanish.push(level.vanish(1100, -1800, 225, 25))
|
||||
vanish.push(level.vanish(1500, -1800, 225, 25))
|
||||
vanish.push(level.vanish(-50, -1800, 400, 25))
|
||||
vanish.push(level.vanish(1125, -1800, 625, 25))
|
||||
|
||||
// vanish.push(level.vanish(1500, -1800, 225, 25))
|
||||
vanish.push(level.vanish(-50, -1800, 450, 25))
|
||||
|
||||
//exit
|
||||
spawn.mapRect(-1050, -1450, 700, 25);
|
||||
@@ -3384,7 +3396,7 @@ const level = {
|
||||
ctx.fillStyle = "#d0d3d9"
|
||||
ctx.fillRect(-2500, -1800, 3575, 2100);
|
||||
ctx.fillStyle = "#c0c3c9"
|
||||
ctx.fillRect(-2075, -1475, 25, 1500);
|
||||
ctx.fillRect(-2075, -1475, 25, 1800);
|
||||
ctx.fillStyle = "#cff" //exit
|
||||
ctx.fillRect(550, -1800, 525, 350)
|
||||
|
||||
@@ -3394,6 +3406,7 @@ const level = {
|
||||
level.customTopLayer = () => {
|
||||
//shadow
|
||||
ctx.fillStyle = "rgba(0,10,30,0.1)"
|
||||
ctx.fillRect(-1450, -300, 150, 325);
|
||||
ctx.fillRect(-1300, -650, 1500, 650)
|
||||
ctx.fillRect(725, 50, 325, 225)
|
||||
ctx.fillRect(-325, -950, 300, 225)
|
||||
@@ -3407,7 +3420,7 @@ const level = {
|
||||
ctx.fillStyle = "#d0d3d9"
|
||||
ctx.fillRect(-1075, -1800, 3575, 2100);
|
||||
ctx.fillStyle = "#c0c3c9"
|
||||
ctx.fillRect(2050, -1475, 25, 1500);
|
||||
ctx.fillRect(2050, -1475, 25, 1800);
|
||||
ctx.fillStyle = "#cff" //exit
|
||||
ctx.fillRect(-1050, -1800, 525, 350)
|
||||
|
||||
@@ -3417,6 +3430,7 @@ const level = {
|
||||
level.customTopLayer = () => {
|
||||
//shadow
|
||||
ctx.fillStyle = "rgba(0,10,30,0.1)"
|
||||
ctx.fillRect(1300, -300, 150, 325);
|
||||
ctx.fillRect(-200, -675, 1500, 700)
|
||||
ctx.fillRect(500, -950, 525, 225);
|
||||
ctx.fillRect(600, -1600, 325, 275);
|
||||
|
||||
@@ -553,6 +553,7 @@ const m = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let history = m.history[(m.cycle - steps) % 600]
|
||||
Matter.Body.setPosition(player, history.position);
|
||||
Matter.Body.setVelocity(player, { x: history.velocity.x, y: history.velocity.y });
|
||||
@@ -598,6 +599,7 @@ const m = {
|
||||
if (isDrawPlayer) {
|
||||
isDrawPlayer = false
|
||||
ctx.save();
|
||||
ctx.globalCompositeOperation = "lighter";
|
||||
ctx.translate(canvas.width2, canvas.height2); //center
|
||||
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
|
||||
|
||||
@@ -513,8 +513,10 @@ const simulation = {
|
||||
bodies[i].force.y += bodies[i].mass * magnitude;
|
||||
}
|
||||
}
|
||||
addGravity(powerUp, simulation.g);
|
||||
addGravity(body, simulation.g);
|
||||
if (!m.isBodiesAsleep) {
|
||||
addGravity(powerUp, simulation.g);
|
||||
addGravity(body, simulation.g);
|
||||
}
|
||||
player.force.y += player.mass * simulation.g;
|
||||
},
|
||||
firstRun: true,
|
||||
|
||||
78
js/spawn.js
78
js/spawn.js
@@ -1301,7 +1301,48 @@ const spawn = {
|
||||
}
|
||||
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() {
|
||||
this.stroke = `hsl(0,0%,${80 + 25 * Math.sin(simulation.cycle * 0.01)}%)`
|
||||
// if (this.isInvulnerable) {
|
||||
// if (this.invulnerabilityCountDown > 0) {
|
||||
// this.invulnerabilityCountDown--
|
||||
@@ -1318,16 +1359,19 @@ const spawn = {
|
||||
// this.damageReduction = this.startingDamageReduction
|
||||
// }
|
||||
// }
|
||||
this.stroke = `hsl(0,0%,${80 + 25 * Math.sin(simulation.cycle * 0.01)}%)`
|
||||
//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++) {
|
||||
powerUp[i].collisionFilter.mask = 0
|
||||
Matter.Body.setPosition(powerUp[i], this.vertices[i])
|
||||
Matter.Body.setVelocity(powerUp[i], {
|
||||
x: 0,
|
||||
y: 0
|
||||
})
|
||||
Matter.Body.setVelocity(powerUp[i], { x: 0, y: 0 })
|
||||
}
|
||||
|
||||
this.seePlayerCheckByDistance();
|
||||
this.attraction();
|
||||
this.checkStatus();
|
||||
@@ -1624,25 +1668,16 @@ const spawn = {
|
||||
});
|
||||
}
|
||||
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();
|
||||
// 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
|
||||
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
|
||||
ctx.beginPath();
|
||||
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.fill();
|
||||
}
|
||||
// }
|
||||
}
|
||||
},
|
||||
suckerBoss(x, y, radius = 25) {
|
||||
|
||||
135
js/tech.js
135
js/tech.js
@@ -605,7 +605,7 @@ const tech = {
|
||||
frequency: 1,
|
||||
frequencyDefault: 1,
|
||||
allowed() {
|
||||
return build.isExperimentSelection
|
||||
return true
|
||||
},
|
||||
requires: "",
|
||||
effect() {
|
||||
@@ -7323,7 +7323,6 @@ const tech = {
|
||||
// count: 0,
|
||||
// frequency: 0,
|
||||
// isNonRefundable: true,
|
||||
// isExperimentHide: true,
|
||||
// isJunk: true,
|
||||
// allowed() {
|
||||
// return true
|
||||
@@ -7334,6 +7333,25 @@ const tech = {
|
||||
// },
|
||||
// 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",
|
||||
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,
|
||||
frequency: 0,
|
||||
frequencyDefault: 0,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return true
|
||||
@@ -7364,7 +7381,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return !tech.isFallingDamage && !tech.isOverHeal && !tech.isEnergyHealth },
|
||||
requires: "not quenching, tungsten carbide, mass-energy",
|
||||
@@ -7378,12 +7394,11 @@ const tech = {
|
||||
},
|
||||
{
|
||||
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,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -7419,7 +7434,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
// isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -7449,7 +7463,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
// isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -7476,12 +7489,11 @@ const tech = {
|
||||
},
|
||||
{
|
||||
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,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -7515,7 +7527,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -7530,7 +7541,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -7547,7 +7557,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -7564,7 +7573,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -7609,7 +7617,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -7669,7 +7676,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -7743,7 +7749,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
isNonRefundable: true,
|
||||
allowed() { return true },
|
||||
@@ -7838,7 +7843,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return !tech.isFireMoveLock
|
||||
@@ -7862,7 +7866,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return !tech.isEnergyHealth
|
||||
@@ -7877,12 +7880,11 @@ const tech = {
|
||||
},
|
||||
{
|
||||
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,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -7894,7 +7896,7 @@ const tech = {
|
||||
setTimeout(() => {
|
||||
simulation.drawCircle = savedfunction
|
||||
canvas.width = canvas.width //clears the canvas // works on chrome at least
|
||||
}, 5000);
|
||||
}, 10000);
|
||||
|
||||
// for (;;) {} //freezes the tab
|
||||
},
|
||||
@@ -7906,7 +7908,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return !m.isShipMode
|
||||
@@ -7925,7 +7926,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
isNonRefundable: true,
|
||||
allowed() {
|
||||
@@ -7946,7 +7946,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isNonRefundable: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
@@ -7976,7 +7975,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isNonRefundable: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
@@ -7996,7 +7994,6 @@ const tech = {
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isNonRefundable: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
@@ -8039,11 +8036,10 @@ const tech = {
|
||||
// },
|
||||
{
|
||||
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,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return !m.isShipMode
|
||||
@@ -8071,7 +8067,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return b.inventory.length > 0
|
||||
@@ -8091,7 +8086,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8121,7 +8115,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8150,7 +8143,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8166,7 +8158,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8185,7 +8176,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8204,7 +8194,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8222,7 +8211,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8238,7 +8226,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8269,7 +8256,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8292,7 +8278,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8310,7 +8295,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return !m.isShipMode && m.fieldUpgrades[m.fieldMode].name !== "negative mass"
|
||||
@@ -8350,7 +8334,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8366,7 +8349,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8383,7 +8365,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return m.fieldUpgrades[m.fieldMode].name !== "negative mass"
|
||||
@@ -8396,19 +8377,34 @@ const tech = {
|
||||
},
|
||||
{
|
||||
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,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
effect() {
|
||||
for (let i = 0; i < 24; i++) {
|
||||
setTimeout(() => { m.rewind(120) }, i * 5000);
|
||||
}
|
||||
setInterval(() => { m.rewind(120) }, 10000);
|
||||
// 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() {}
|
||||
},
|
||||
@@ -8419,7 +8415,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8447,7 +8442,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8463,7 +8457,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8480,7 +8473,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8499,17 +8491,16 @@ const tech = {
|
||||
},
|
||||
{
|
||||
name: "missile Launching System",
|
||||
description: "fire missiles for the next 60 seconds",
|
||||
description: "fire missiles for the next 120 seconds",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
effect() {
|
||||
for (let i = 0; i < 60; i++) {
|
||||
for (let i = 0; i < 120; i++) {
|
||||
setTimeout(() => {
|
||||
const where = {
|
||||
x: m.pos.x,
|
||||
@@ -8523,26 +8514,23 @@ const tech = {
|
||||
},
|
||||
{
|
||||
name: "grenade production",
|
||||
description: "drop grenades for the next 120 seconds",
|
||||
description: "drop a grenade every 2 seconds",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
effect() {
|
||||
for (let i = 0; i < 120; i++) {
|
||||
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
|
||||
const who = bullet[bullet.length - 1]
|
||||
Matter.Body.setVelocity(who, {
|
||||
x: who.velocity.x * 0.1,
|
||||
y: who.velocity.y * 0.1
|
||||
});
|
||||
}, i * 1000);
|
||||
}
|
||||
setInterval(() => {
|
||||
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]
|
||||
Matter.Body.setVelocity(who, {
|
||||
x: who.velocity.x * 0.1,
|
||||
y: who.velocity.y * 0.1
|
||||
});
|
||||
}, 2000);
|
||||
},
|
||||
remove() {}
|
||||
},
|
||||
@@ -8577,7 +8565,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return !m.isShipMode
|
||||
@@ -8623,7 +8610,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return !m.isShipMode
|
||||
@@ -8664,7 +8650,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return !m.isShipMode
|
||||
@@ -8733,7 +8718,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8758,7 +8742,6 @@ const tech = {
|
||||
frequency: 0,
|
||||
isBotTech: true,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return b.totalBots() > 2
|
||||
@@ -8816,7 +8799,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8832,7 +8814,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
@@ -8848,7 +8829,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return b.inventory.length > 0
|
||||
@@ -8876,7 +8856,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return powerUps.research.count > 3
|
||||
@@ -8898,7 +8877,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return powerUps.research.count > 3
|
||||
@@ -8919,7 +8897,6 @@ const tech = {
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() { return true },
|
||||
requires: "",
|
||||
|
||||
23
todo.txt
23
todo.txt
@@ -1,16 +1,29 @@
|
||||
******************************************************** 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 ********************************************************
|
||||
|
||||
mobs that are given the players location at the start can get confused if the map is reversed
|
||||
suckers
|
||||
add anticipation to more mob attacks
|
||||
stabber
|
||||
striker
|
||||
|
||||
boss that fires giant bullets, that bounce around and chases you
|
||||
|
||||
can mob bullets damage other mob?
|
||||
maybe if they switch collisions and classType === "body" or obj.classType === "bullet"
|
||||
|
||||
grenade gun seems weak
|
||||
|
||||
path finding system
|
||||
|
||||
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
|
||||
|
||||
might have to nerf upgraded bots
|
||||
|
||||
variant of Occam's razor - remove 50% of your tech for each removed get:
|
||||
2 bots?
|
||||
50 energy max
|
||||
|
||||
Reference in New Issue
Block a user