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>
|
<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" />
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
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
|
//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> ${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> ${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> ${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> ${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> ${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',
|
||||||
|
|||||||
62
js/level.js
62
js/level.js
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
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
|
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) {
|
||||||
|
|||||||
135
js/tech.js
135
js/tech.js
@@ -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: "",
|
||||||
|
|||||||
23
todo.txt
23
todo.txt
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user