unified field theory
duplication bug fix renaming custom mode -> experimental mode experimental mode is available again even without completing lore mob: sneaker is a bit faster and stronger (the invisible one that attacks from stealth) tech: unified field theory - switching guns uses a reroll to cycle your field
This commit is contained in:
@@ -81,16 +81,16 @@
|
|||||||
<!-- ********** intro page ***********************************************
|
<!-- ********** intro page ***********************************************
|
||||||
******************************************************************************* -->
|
******************************************************************************* -->
|
||||||
<div id="choose-grid"></div>
|
<div id="choose-grid"></div>
|
||||||
<div id="build-grid"></div>
|
<div id="experiment-grid"></div>
|
||||||
<div style="position: absolute; top:0;left:0;">
|
<div style="position: absolute; top:0;left:0;">
|
||||||
<div id="pause-grid-left" class="pause-grid"></div>
|
<div id="pause-grid-left" class="pause-grid"></div>
|
||||||
</div>
|
</div>
|
||||||
<div style="position: absolute; top:0;right:0;">
|
<div style="position: absolute; top:0;right:0;">
|
||||||
<div id="pause-grid-right" class="pause-grid"></div>
|
<div id="pause-grid-right" class="pause-grid"></div>
|
||||||
</div>
|
</div>
|
||||||
<svg class="SVG-button" id="build-button" width="110" height="40" style="border: 2px #333 solid;">
|
<svg class="SVG-button" id="experiment-button" width="155" height="40" style="border: 2px #333 solid;">
|
||||||
<g stroke='none' fill='#333' stroke-width="2" font-size="28px" font-family="Arial, sans-serif">
|
<g stroke='none' fill='#333' stroke-width="2" font-size="28px" font-family="Arial, sans-serif">
|
||||||
<text x="10" y="30">custom</text>
|
<text x="10" y="30">experiment</text>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
<div id='info'>
|
<div id='info'>
|
||||||
|
|||||||
78
js/index.js
78
js/index.js
@@ -38,7 +38,7 @@ if (screen.height < 800) {
|
|||||||
|
|
||||||
|
|
||||||
//**********************************************************************
|
//**********************************************************************
|
||||||
// check for URL parameters to load a custom game
|
// check for URL parameters to load an experimental game
|
||||||
//**********************************************************************
|
//**********************************************************************
|
||||||
|
|
||||||
//example https://landgreen.github.io/sidescroller/index.html?
|
//example https://landgreen.github.io/sidescroller/index.html?
|
||||||
@@ -61,8 +61,8 @@ function getUrlVars() {
|
|||||||
window.addEventListener('load', (event) => {
|
window.addEventListener('load', (event) => {
|
||||||
const set = getUrlVars()
|
const set = getUrlVars()
|
||||||
if (Object.keys(set).length !== 0) {
|
if (Object.keys(set).length !== 0) {
|
||||||
openCustomBuildMenu();
|
openExperimentMenu();
|
||||||
//add custom selections based on url
|
//add experimental selections based on url
|
||||||
for (const property in set) {
|
for (const property in set) {
|
||||||
set[property] = set[property].replace(/%20/g, " ")
|
set[property] = set[property].replace(/%20/g, " ")
|
||||||
set[property] = set[property].replace(/%CE%A8/g, "Ψ")
|
set[property] = set[property].replace(/%CE%A8/g, "Ψ")
|
||||||
@@ -100,7 +100,7 @@ window.addEventListener('load', (event) => {
|
|||||||
}
|
}
|
||||||
if (property === "difficulty") {
|
if (property === "difficulty") {
|
||||||
simulation.difficultyMode = Number(set[property])
|
simulation.difficultyMode = Number(set[property])
|
||||||
document.getElementById("difficulty-select-custom").value = Number(set[property])
|
document.getElementById("difficulty-select-experiment").value = Number(set[property])
|
||||||
}
|
}
|
||||||
if (property === "level") {
|
if (property === "level") {
|
||||||
document.getElementById("starting-level").value = Number(set[property])
|
document.getElementById("starting-level").value = Number(set[property])
|
||||||
@@ -146,7 +146,7 @@ window.onresize = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//**********************************************************************
|
//**********************************************************************
|
||||||
// custom build grid display and pause
|
// experimental build grid display and pause
|
||||||
//**********************************************************************
|
//**********************************************************************
|
||||||
const build = {
|
const build = {
|
||||||
onLoadPowerUps() {
|
onLoadPowerUps() {
|
||||||
@@ -253,7 +253,7 @@ const build = {
|
|||||||
document.getElementById("pause-grid-right").style.display = "none"
|
document.getElementById("pause-grid-right").style.display = "none"
|
||||||
window.scrollTo(0, 0);
|
window.scrollTo(0, 0);
|
||||||
},
|
},
|
||||||
isCustomSelection: true,
|
isExperimentSelection: true,
|
||||||
choosePowerUp(who, index, type, isAllowed = false) {
|
choosePowerUp(who, index, type, isAllowed = false) {
|
||||||
if (type === "gun") {
|
if (type === "gun") {
|
||||||
let isDeselect = false
|
let isDeselect = false
|
||||||
@@ -318,14 +318,14 @@ const build = {
|
|||||||
techID.innerHTML = `<div class="grid-title"><div class="circle-grid tech"></div> ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div>`
|
techID.innerHTML = `<div class="grid-title"><div class="circle-grid tech"></div> ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div>`
|
||||||
}
|
}
|
||||||
|
|
||||||
if (techID.classList.contains("build-grid-disabled")) {
|
if (techID.classList.contains("experiment-grid-disabled")) {
|
||||||
techID.classList.remove("build-grid-disabled");
|
techID.classList.remove("experiment-grid-disabled");
|
||||||
techID.setAttribute("onClick", `javascript: build.choosePowerUp(this,${i},'tech')`);
|
techID.setAttribute("onClick", `javascript: build.choosePowerUp(this,${i},'tech')`);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
techID.innerHTML = `<div class="grid-title"> ${tech.tech[i].name}</div><span style="color:#666;">requires: ${tech.tech[i].requires}</span></div>`
|
techID.innerHTML = `<div class="grid-title"> ${tech.tech[i].name}</div><span style="color:#666;">requires: ${tech.tech[i].requires}</span></div>`
|
||||||
if (!techID.classList.contains("build-grid-disabled")) {
|
if (!techID.classList.contains("experiment-grid-disabled")) {
|
||||||
techID.classList.add("build-grid-disabled");
|
techID.classList.add("experiment-grid-disabled");
|
||||||
techID.onclick = null
|
techID.onclick = null
|
||||||
}
|
}
|
||||||
if (tech.tech[i].count > 0) tech.removeTech(i)
|
if (tech.tech[i].count > 0) tech.removeTech(i)
|
||||||
@@ -337,7 +337,7 @@ const build = {
|
|||||||
populateGrid() {
|
populateGrid() {
|
||||||
let text = `
|
let text = `
|
||||||
<div style="display: flex; justify-content: space-around; align-items: center;">
|
<div style="display: flex; justify-content: space-around; align-items: center;">
|
||||||
<svg class="SVG-button" onclick="build.startBuildRun()" width="115" height="51">
|
<svg class="SVG-button" onclick="build.startExperiment()" width="115" height="51">
|
||||||
<g stroke='none' fill='#333' stroke-width="2" font-size="40px" font-family="Ariel, sans-serif">
|
<g stroke='none' fill='#333' stroke-width="2" font-size="40px" font-family="Ariel, sans-serif">
|
||||||
<text x="18" y="38">start</text>
|
<text x="18" y="38">start</text>
|
||||||
</g>
|
</g>
|
||||||
@@ -357,7 +357,7 @@ const build = {
|
|||||||
<div>starting level: <input id='starting-level' type="number" step="1" value="0" min="0" max="99"></div>
|
<div>starting level: <input id='starting-level' type="number" step="1" value="0" min="0" max="99"></div>
|
||||||
<div>
|
<div>
|
||||||
<label for="difficulty-select" title="effects: number of mobs, damage done by mobs, damage done to mobs, mob speed, heal effects">difficulty:</label>
|
<label for="difficulty-select" title="effects: number of mobs, damage done by mobs, damage done to mobs, mob speed, heal effects">difficulty:</label>
|
||||||
<select name="difficulty-select" id="difficulty-select-custom">
|
<select name="difficulty-select" id="difficulty-select-experiment">
|
||||||
<option value="1">easy</option>
|
<option value="1">easy</option>
|
||||||
<option value="2" selected>normal</option>
|
<option value="2" selected>normal</option>
|
||||||
<option value="4">hard</option>
|
<option value="4">hard</option>
|
||||||
@@ -370,34 +370,34 @@ const build = {
|
|||||||
</div>
|
</div>
|
||||||
</div>`
|
</div>`
|
||||||
for (let i = 0, len = mech.fieldUpgrades.length; i < len; i++) {
|
for (let i = 0, len = mech.fieldUpgrades.length; i < len; i++) {
|
||||||
text += `<div id ="field-${i}" class="build-grid-module" onclick="build.choosePowerUp(this,${i},'field')"><div class="grid-title"><div class="circle-grid field"></div> ${mech.fieldUpgrades[i].name}</div> ${mech.fieldUpgrades[i].description}</div>`
|
text += `<div id ="field-${i}" class="experiment-grid-module" onclick="build.choosePowerUp(this,${i},'field')"><div class="grid-title"><div class="circle-grid field"></div> ${mech.fieldUpgrades[i].name}</div> ${mech.fieldUpgrades[i].description}</div>`
|
||||||
}
|
}
|
||||||
for (let i = 0, len = b.guns.length; i < len; i++) {
|
for (let i = 0, len = b.guns.length; i < len; i++) {
|
||||||
text += `<div id = "gun-${i}" class="build-grid-module" onclick="build.choosePowerUp(this,${i},'gun')"><div class="grid-title"><div class="circle-grid gun"></div> ${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> ${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].isCustomHide) {
|
if (!tech.tech[i].isCustomHide) {
|
||||||
if (!tech.tech[i].allowed()) { // || tech.tech[i].name === "+1 cardinality") { //|| tech.tech[i].name === "leveraged investment"
|
if (!tech.tech[i].allowed()) { // || tech.tech[i].name === "+1 cardinality") { //|| tech.tech[i].name === "leveraged investment"
|
||||||
text += `<div id="tech-${i}" class="build-grid-module build-grid-disabled"><div class="grid-title">${tech.tech[i].name}</div><span style="color:#666;">requires: ${tech.tech[i].requires}</span></div>`
|
text += `<div id="tech-${i}" class="experiment-grid-module experiment-grid-disabled"><div class="grid-title">${tech.tech[i].name}</div><span style="color:#666;">requires: ${tech.tech[i].requires}</span></div>`
|
||||||
// } else if (tech.tech[i].count > 1) {
|
// } else if (tech.tech[i].count > 1) {
|
||||||
// text += `<div id="tech-${i}" class="build-grid-module" onclick="build.choosePowerUp(this,${i},'tech')"><div class="grid-title"><div class="circle-grid tech"></div> ${tech.tech[i].name} (${tech.tech[i].count}x)</div> ${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].name} (${tech.tech[i].count}x)</div> ${tech.tech[i].description}</div>`
|
||||||
} else {
|
} else {
|
||||||
text += `<div id="tech-${i}" class="build-grid-module" onclick="build.choosePowerUp(this,${i},'tech')"><div class="grid-title"><div class="circle-grid tech"></div> ${tech.tech[i].name}</div> ${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].name}</div> ${tech.tech[i].description}</div>`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
document.getElementById("build-grid").innerHTML = text
|
document.getElementById("experiment-grid").innerHTML = text
|
||||||
document.getElementById("difficulty-select-custom").value = document.getElementById("difficulty-select").value
|
document.getElementById("difficulty-select-experiment").value = document.getElementById("difficulty-select").value
|
||||||
document.getElementById("difficulty-select-custom").addEventListener("input", () => {
|
document.getElementById("difficulty-select-experiment").addEventListener("input", () => {
|
||||||
simulation.difficultyMode = Number(document.getElementById("difficulty-select-custom").value)
|
simulation.difficultyMode = Number(document.getElementById("difficulty-select-experiment").value)
|
||||||
localSettings.difficultyMode = Number(document.getElementById("difficulty-select-custom").value)
|
localSettings.difficultyMode = Number(document.getElementById("difficulty-select-experiment").value)
|
||||||
document.getElementById("difficulty-select").value = document.getElementById("difficulty-select-custom").value
|
document.getElementById("difficulty-select").value = document.getElementById("difficulty-select-experiment").value
|
||||||
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
reset() {
|
reset() {
|
||||||
build.isCustomSelection = true;
|
build.isExperimentSelection = true;
|
||||||
mech.setField(0)
|
mech.setField(0)
|
||||||
|
|
||||||
b.inventory = []; //removes guns and ammo
|
b.inventory = []; //removes guns and ammo
|
||||||
@@ -412,7 +412,7 @@ const build = {
|
|||||||
tech.setupAllTech();
|
tech.setupAllTech();
|
||||||
build.populateGrid();
|
build.populateGrid();
|
||||||
document.getElementById("field-0").classList.add("build-field-selected");
|
document.getElementById("field-0").classList.add("build-field-selected");
|
||||||
document.getElementById("build-grid").style.display = "grid"
|
document.getElementById("experiment-grid").style.display = "grid"
|
||||||
},
|
},
|
||||||
shareURL(isCustom = false) {
|
shareURL(isCustom = false) {
|
||||||
let url = "https://landgreen.github.io/sidescroller/index.html?"
|
let url = "https://landgreen.github.io/sidescroller/index.html?"
|
||||||
@@ -445,8 +445,8 @@ const build = {
|
|||||||
console.log(url)
|
console.log(url)
|
||||||
simulation.copyToClipBoard(url)
|
simulation.copyToClipBoard(url)
|
||||||
},
|
},
|
||||||
startBuildRun() {
|
startExperiment() {
|
||||||
build.isCustomSelection = false;
|
build.isExperimentSelection = false;
|
||||||
spawn.setSpawnList(); //gives random mobs, not starter mobs
|
spawn.setSpawnList(); //gives random mobs, not starter mobs
|
||||||
spawn.setSpawnList();
|
spawn.setSpawnList();
|
||||||
if (b.inventory.length > 0) {
|
if (b.inventory.length > 0) {
|
||||||
@@ -476,27 +476,27 @@ const build = {
|
|||||||
tech.removeLoreTechFromPool();
|
tech.removeLoreTechFromPool();
|
||||||
document.body.style.cursor = "none";
|
document.body.style.cursor = "none";
|
||||||
document.body.style.overflow = "hidden"
|
document.body.style.overflow = "hidden"
|
||||||
document.getElementById("build-grid").style.display = "none"
|
document.getElementById("experiment-grid").style.display = "none"
|
||||||
simulation.paused = false;
|
simulation.paused = false;
|
||||||
requestAnimationFrame(cycle);
|
requestAnimationFrame(cycle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function openCustomBuildMenu() {
|
function openExperimentMenu() {
|
||||||
document.getElementById("build-button").style.display = "none";
|
document.getElementById("experiment-button").style.display = "none";
|
||||||
const el = document.getElementById("build-grid")
|
const el = document.getElementById("experiment-grid")
|
||||||
el.style.display = "grid"
|
el.style.display = "grid"
|
||||||
document.body.style.overflowY = "scroll";
|
document.body.style.overflowY = "scroll";
|
||||||
document.body.style.overflowX = "hidden";
|
document.body.style.overflowX = "hidden";
|
||||||
document.getElementById("info").style.display = 'none'
|
document.getElementById("info").style.display = 'none'
|
||||||
simulation.startGame(true); //starts game, but pauses it
|
simulation.startGame(true); //starts game, but pauses it
|
||||||
build.isCustomSelection = true;
|
build.isExperimentSelection = true;
|
||||||
simulation.paused = true;
|
simulation.paused = true;
|
||||||
build.reset();
|
build.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
//record settings so they can be reproduced in the custom menu
|
//record settings so they can be reproduced in the experimental menu
|
||||||
document.getElementById("build-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 = [];
|
||||||
@@ -507,7 +507,7 @@ document.getElementById("build-button").addEventListener("click", () => { //setu
|
|||||||
techList.push(tech.tech[i].count)
|
techList.push(tech.tech[i].count)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
openCustomBuildMenu();
|
openExperimentMenu();
|
||||||
});
|
});
|
||||||
|
|
||||||
// ************************************************************************************************
|
// ************************************************************************************************
|
||||||
@@ -952,6 +952,10 @@ if (localSettings) {
|
|||||||
input.setDefault()
|
input.setDefault()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (localSettings.loreCount === undefined) {
|
||||||
|
localSettings.loreCount = 0
|
||||||
|
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
|
}
|
||||||
|
|
||||||
simulation.isCommunityMaps = localSettings.isCommunityMaps
|
simulation.isCommunityMaps = localSettings.isCommunityMaps
|
||||||
document.getElementById("community-maps").checked = localSettings.isCommunityMaps
|
document.getElementById("community-maps").checked = localSettings.isCommunityMaps
|
||||||
@@ -981,7 +985,7 @@ if (localSettings) {
|
|||||||
document.getElementById("fps-select").value = localSettings.fpsCapDefault
|
document.getElementById("fps-select").value = localSettings.fpsCapDefault
|
||||||
}
|
}
|
||||||
document.getElementById("control-testing").style.visibility = (localSettings.loreCount === 0) ? "hidden" : "visible"
|
document.getElementById("control-testing").style.visibility = (localSettings.loreCount === 0) ? "hidden" : "visible"
|
||||||
document.getElementById("build-button").style.visibility = (localSettings.loreCount === 0) ? "hidden" : "visible"
|
// document.getElementById("experiment-button").style.visibility = (localSettings.loreCount === 0) ? "hidden" : "visible"
|
||||||
|
|
||||||
input.controlTextUpdate()
|
input.controlTextUpdate()
|
||||||
|
|
||||||
@@ -1005,7 +1009,7 @@ document.getElementById("community-maps").addEventListener("input", () => {
|
|||||||
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
});
|
});
|
||||||
|
|
||||||
// difficulty-select-custom event listener is set in build.makeGrid
|
// difficulty-select-experiment event listener is set in build.makeGrid
|
||||||
document.getElementById("difficulty-select").addEventListener("input", () => {
|
document.getElementById("difficulty-select").addEventListener("input", () => {
|
||||||
simulation.difficultyMode = Number(document.getElementById("difficulty-select").value)
|
simulation.difficultyMode = Number(document.getElementById("difficulty-select").value)
|
||||||
localSettings.difficultyMode = simulation.difficultyMode
|
localSettings.difficultyMode = simulation.difficultyMode
|
||||||
|
|||||||
14
js/level.js
14
js/level.js
@@ -53,9 +53,9 @@ const level = {
|
|||||||
// for (let i = 0; i < 150; i++) tech.addLoreTechToPool();
|
// for (let i = 0; i < 150; i++) tech.addLoreTechToPool();
|
||||||
// tech.giveTech("undefined")
|
// tech.giveTech("undefined")
|
||||||
// lore.techCount = 1
|
// lore.techCount = 1
|
||||||
// localSettings.loreCount = 0;
|
// localSettings.loreCount = 2;
|
||||||
// simulation.isCheating = true;
|
// simulation.isCheating = true;
|
||||||
// localSettings.loreCount = 0;
|
// localSettings.loreCount = undefined;
|
||||||
// localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
// localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
// level.null()
|
// level.null()
|
||||||
} else {
|
} else {
|
||||||
@@ -113,7 +113,7 @@ const level = {
|
|||||||
null() {
|
null() {
|
||||||
level.levels.pop(); //remove lore level from rotation
|
level.levels.pop(); //remove lore level from rotation
|
||||||
//start a conversation based on the number of conversations seen
|
//start a conversation based on the number of conversations seen
|
||||||
if (!simulation.isCheating) lore.conversation[localSettings.loreCount % lore.conversation.length]()
|
if (!simulation.isCheating && localSettings.loreCount < lore.conversation.length) lore.conversation[localSettings.loreCount]()
|
||||||
|
|
||||||
const hazardSlime = level.hazard(-1800, 150, 3600, 650, 0.01, "hsla(160, 100%, 35%,0.75)")
|
const hazardSlime = level.hazard(-1800, 150, 3600, 650, 0.01, "hsla(160, 100%, 35%,0.75)")
|
||||||
const circle = {
|
const circle = {
|
||||||
@@ -225,12 +225,8 @@ const level = {
|
|||||||
// spawn.mapRect(450, -820, 50, 25); //edge shelf ceiling
|
// spawn.mapRect(450, -820, 50, 25); //edge shelf ceiling
|
||||||
// spawn.bodyRect(1540, -1110, 300, 25, 0.9);
|
// spawn.bodyRect(1540, -1110, 300, 25, 0.9);
|
||||||
|
|
||||||
|
|
||||||
// spawn.mapRect(-50, -500, 100, 100); //center square
|
// spawn.mapRect(-50, -500, 100, 100); //center square
|
||||||
// setTimeout(() => { simulation.makeTextLog(`test`) }, 3000);
|
// setTimeout(() => { simulation.makeTextLog(`test`) }, 3000);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
testing() {
|
testing() {
|
||||||
const button = level.button(200, -700)
|
const button = level.button(200, -700)
|
||||||
@@ -295,8 +291,8 @@ const level = {
|
|||||||
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 100); //exit bump
|
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 100); //exit bump
|
||||||
// spawn.boost(1500, 0, 900);
|
// spawn.boost(1500, 0, 900);
|
||||||
|
|
||||||
spawn.starter(1900, -500, 200) //big boy
|
// spawn.starter(1900, -500, 200) //big boy
|
||||||
// spawn.exploder(2900, -500)
|
spawn.sneaker(2900, -500)
|
||||||
// spawn.launcherBoss(1200, -500)
|
// spawn.launcherBoss(1200, -500)
|
||||||
// spawn.laserTargetingBoss(1600, -400)
|
// spawn.laserTargetingBoss(1600, -400)
|
||||||
// spawn.striker(1600, -500)
|
// spawn.striker(1600, -500)
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ const lore = {
|
|||||||
localSettings.loreCount = 1
|
localSettings.loreCount = 1
|
||||||
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
document.getElementById("control-testing").style.visibility = (localSettings.loreCount === 0) ? "hidden" : "visible"
|
document.getElementById("control-testing").style.visibility = (localSettings.loreCount === 0) ? "hidden" : "visible"
|
||||||
document.getElementById("build-button").style.visibility = (localSettings.loreCount === 0) ? "hidden" : "visible"
|
document.getElementById("experiment-button").style.visibility = (localSettings.loreCount === 0) ? "hidden" : "visible"
|
||||||
}
|
}
|
||||||
let delay = 6000
|
let delay = 6000
|
||||||
setTimeout(() => { lore.miriam.text("I've never seen it generate this level before.", true) }, delay);
|
setTimeout(() => { lore.miriam.text("I've never seen it generate this level before.", true) }, delay);
|
||||||
|
|||||||
@@ -325,7 +325,7 @@ const simulation = {
|
|||||||
// SVGleftMouse: '<svg viewBox="750 0 200 765" class="mouse-icon" width="40px" height = "60px" stroke-linecap="round" stroke-linejoin="round" stroke-width="25px" stroke="#000" fill="none"> <path fill="#fff" stroke="none" d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" /> <path d="M832.41,106.64 V323.55 H651.57 V256.64 c0-82.5,67.5-150,150-150 Z" fill="#149" stroke="none" /> <path fill="none" d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" /> <path d="M657 317 h 340 h-170 v-207" /> <ellipse fill="#fff" cx="827.57" cy="218.64" rx="29" ry="68" /> </svg>',
|
// SVGleftMouse: '<svg viewBox="750 0 200 765" class="mouse-icon" width="40px" height = "60px" stroke-linecap="round" stroke-linejoin="round" stroke-width="25px" stroke="#000" fill="none"> <path fill="#fff" stroke="none" d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" /> <path d="M832.41,106.64 V323.55 H651.57 V256.64 c0-82.5,67.5-150,150-150 Z" fill="#149" stroke="none" /> <path fill="none" d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" /> <path d="M657 317 h 340 h-170 v-207" /> <ellipse fill="#fff" cx="827.57" cy="218.64" rx="29" ry="68" /> </svg>',
|
||||||
// SVGrightMouse: '<svg viewBox="750 0 200 765" class="mouse-icon" width="40px" height = "60px" stroke-linecap="round" stroke-linejoin="round" stroke-width="25px" stroke="#000" fill="none"> <path fill="#fff" stroke="none" d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" /> <path d="M827,112 h30 a140,140,0,0,1,140,140 v68 h-167 z" fill="#0cf" stroke="none" /> <path fill="none" d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" /> <path d="M657 317 h 340 h-170 v-207" /> <ellipse fill="#fff" cx="827.57" cy="218.64" rx="29" ry="68" /> </svg>',
|
// SVGrightMouse: '<svg viewBox="750 0 200 765" class="mouse-icon" width="40px" height = "60px" stroke-linecap="round" stroke-linejoin="round" stroke-width="25px" stroke="#000" fill="none"> <path fill="#fff" stroke="none" d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" /> <path d="M827,112 h30 a140,140,0,0,1,140,140 v68 h-167 z" fill="#0cf" stroke="none" /> <path fill="none" d="M827,112 h30 a140,140,0,0,1,140,140 v268 a140,140,0,0,1-140,140 h-60 a140,140,0,0,1-140-140v-268 a140,140,0,0,1,140-140h60" /> <path d="M657 317 h 340 h-170 v-207" /> <ellipse fill="#fff" cx="827.57" cy="218.64" rx="29" ry="68" /> </svg>',
|
||||||
makeTextLog(text, time = 120) {
|
makeTextLog(text, time = 120) {
|
||||||
if (simulation.isTextLogOpen && !build.isCustomSelection) {
|
if (simulation.isTextLogOpen && !build.isExperimentSelection) {
|
||||||
if (simulation.lastLogTime > mech.cycle) { //if there is an older message
|
if (simulation.lastLogTime > mech.cycle) { //if there is an older message
|
||||||
document.getElementById("text-log").innerHTML = document.getElementById("text-log").innerHTML + '<br>' + text;
|
document.getElementById("text-log").innerHTML = document.getElementById("text-log").innerHTML + '<br>' + text;
|
||||||
simulation.lastLogTime = mech.cycle + time;
|
simulation.lastLogTime = mech.cycle + time;
|
||||||
@@ -363,6 +363,24 @@ const simulation = {
|
|||||||
simulation.updateGunHUD();
|
simulation.updateGunHUD();
|
||||||
simulation.boldActiveGunHUD();
|
simulation.boldActiveGunHUD();
|
||||||
// mech.drop();
|
// mech.drop();
|
||||||
|
if (true && powerUps.research.count > 0) {
|
||||||
|
powerUps.research.changeRerolls(-1)
|
||||||
|
const energy = mech.energy
|
||||||
|
mech.setField((mech.fieldMode === mech.fieldUpgrades.length - 1) ? 1 : mech.fieldMode + 1) //cycle to next field
|
||||||
|
mech.energy = energy //field swap sets energy to max, this undoes that
|
||||||
|
|
||||||
|
//update text to show next field
|
||||||
|
for (let i = tech.tech.length - 1; i > 0; i--) {
|
||||||
|
if (tech.tech[i].name === "unified field theory") {
|
||||||
|
const index = (mech.fieldMode === mech.fieldUpgrades.length - 1) ? 1 : mech.fieldMode + 1
|
||||||
|
tech.tech[i].description = `after switching <strong>guns</strong><br>use a <strong class='color-r'>research</strong> to cycle your <strong class='color-f'>field</strong>
|
||||||
|
<br>(next <strong class='color-f'>field</strong>: ${mech.fieldUpgrades[index].name})`
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
},
|
},
|
||||||
zoom: null,
|
zoom: null,
|
||||||
zoomScale: 1000,
|
zoomScale: 1000,
|
||||||
@@ -467,8 +485,8 @@ const simulation = {
|
|||||||
};
|
};
|
||||||
document.getElementById("choose-grid").style.display = "none"
|
document.getElementById("choose-grid").style.display = "none"
|
||||||
document.getElementById("info").style.display = "inline";
|
document.getElementById("info").style.display = "inline";
|
||||||
document.getElementById("build-button").style.display = "inline"
|
document.getElementById("experiment-button").style.display = "inline"
|
||||||
document.getElementById("build-grid").style.display = "none"
|
document.getElementById("experiment-grid").style.display = "none"
|
||||||
document.getElementById("pause-grid-left").style.display = "none"
|
document.getElementById("pause-grid-left").style.display = "none"
|
||||||
document.getElementById("pause-grid-right").style.display = "none"
|
document.getElementById("pause-grid-right").style.display = "none"
|
||||||
document.getElementById("splash").style.display = "inline";
|
document.getElementById("splash").style.display = "inline";
|
||||||
@@ -479,15 +497,15 @@ const simulation = {
|
|||||||
fpsInterval: 0, //set in startGame
|
fpsInterval: 0, //set in startGame
|
||||||
then: null,
|
then: null,
|
||||||
startGame(isBuildRun = false) {
|
startGame(isBuildRun = false) {
|
||||||
if (!isBuildRun) { //if a build run logic flow returns to "build-button").addEventListener
|
if (!isBuildRun) { //if a build run logic flow returns to "experiment-button").addEventListener
|
||||||
document.body.style.cursor = "none";
|
document.body.style.cursor = "none";
|
||||||
document.body.style.overflow = "hidden"
|
document.body.style.overflow = "hidden"
|
||||||
}
|
}
|
||||||
simulation.onTitlePage = false;
|
simulation.onTitlePage = false;
|
||||||
document.getElementById("choose-grid").style.display = "none"
|
document.getElementById("choose-grid").style.display = "none"
|
||||||
document.getElementById("build-grid").style.display = "none"
|
document.getElementById("experiment-grid").style.display = "none"
|
||||||
document.getElementById("info").style.display = "none";
|
document.getElementById("info").style.display = "none";
|
||||||
document.getElementById("build-button").style.display = "none";
|
document.getElementById("experiment-button").style.display = "none";
|
||||||
document.getElementById("splash").onclick = null; //removes the onclick effect so the function only runs once
|
document.getElementById("splash").onclick = null; //removes the onclick effect so the function only runs once
|
||||||
document.getElementById("splash").style.display = "none"; //hides the element that spawned the function
|
document.getElementById("splash").style.display = "none"; //hides the element that spawned the function
|
||||||
document.getElementById("dmg").style.display = "inline";
|
document.getElementById("dmg").style.display = "inline";
|
||||||
@@ -510,6 +528,7 @@ const simulation = {
|
|||||||
b.removeAllGuns();
|
b.removeAllGuns();
|
||||||
simulation.isNoPowerUps = false;
|
simulation.isNoPowerUps = false;
|
||||||
tech.setupAllTech(); //sets tech to default values
|
tech.setupAllTech(); //sets tech to default values
|
||||||
|
tech.cancelCount = 0;
|
||||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||||
if (b.guns[i].name === "laser") b.guns[i].chooseFireMethod()
|
if (b.guns[i].name === "laser") b.guns[i].chooseFireMethod()
|
||||||
if (b.guns[i].name === "nail gun") b.guns[i].chooseFireMethod()
|
if (b.guns[i].name === "nail gun") b.guns[i].chooseFireMethod()
|
||||||
@@ -553,7 +572,7 @@ const simulation = {
|
|||||||
simulation.CDScale = 1;
|
simulation.CDScale = 1;
|
||||||
simulation.difficulty = 0;
|
simulation.difficulty = 0;
|
||||||
simulation.difficultyMode = Number(document.getElementById("difficulty-select").value)
|
simulation.difficultyMode = Number(document.getElementById("difficulty-select").value)
|
||||||
build.isCustomSelection = false;
|
build.isExperimentSelection = false;
|
||||||
|
|
||||||
simulation.clearNow = true;
|
simulation.clearNow = true;
|
||||||
document.getElementById("text-log").style.opacity = 0;
|
document.getElementById("text-log").style.opacity = 0;
|
||||||
|
|||||||
@@ -1653,11 +1653,13 @@ const spawn = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
sneaker(x, y, radius = 15 + Math.ceil(Math.random() * 25)) {
|
sneaker(x, y, radius = 15 + Math.ceil(Math.random() * 20)) {
|
||||||
let me;
|
let me;
|
||||||
mobs.spawn(x, y, 5, radius, "transparent");
|
mobs.spawn(x, y, 5, radius, "transparent");
|
||||||
me = mob[mob.length - 1];
|
me = mob[mob.length - 1];
|
||||||
me.accelMag = 0.0007 * simulation.accelScale;
|
Matter.Body.setDensity(me, 0.002); //extra dense //normal is 0.001 //makes effective life much larger
|
||||||
|
me.accelMag = 0.001 * simulation.accelScale;
|
||||||
|
me.frictionAir = 0.01;
|
||||||
me.g = 0.0002; //required if using 'gravity'
|
me.g = 0.0002; //required if using 'gravity'
|
||||||
me.stroke = "transparent"; //used for drawSneaker
|
me.stroke = "transparent"; //used for drawSneaker
|
||||||
me.alpha = 1; //used in drawSneaker
|
me.alpha = 1; //used in drawSneaker
|
||||||
@@ -1680,7 +1682,7 @@ const spawn = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.alpha > 0) {
|
if (this.alpha > 0) {
|
||||||
if (this.alpha > 0.95) {
|
if (this.alpha > 0.7) {
|
||||||
this.healthBar();
|
this.healthBar();
|
||||||
if (!this.canTouchPlayer) {
|
if (!this.canTouchPlayer) {
|
||||||
this.canTouchPlayer = true;
|
this.canTouchPlayer = true;
|
||||||
|
|||||||
53
js/tech.js
53
js/tech.js
@@ -77,7 +77,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
haveGunCheck(name) {
|
haveGunCheck(name) {
|
||||||
if (
|
if (
|
||||||
!build.isCustomSelection &&
|
!build.isExperimentSelection &&
|
||||||
b.inventory.length > 2 &&
|
b.inventory.length > 2 &&
|
||||||
name !== b.guns[b.activeGun].name &&
|
name !== b.guns[b.activeGun].name &&
|
||||||
Math.random() > 2 / (b.inventory.length + tech.isGunCycle * 3) //lower chance of tech specific to a gun if you have lots of guns
|
Math.random() > 2 / (b.inventory.length + tech.isGunCycle * 3) //lower chance of tech specific to a gun if you have lots of guns
|
||||||
@@ -928,7 +928,7 @@ const tech = {
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return powerUps.research.count > 5 || build.isCustomSelection
|
return powerUps.research.count > 5 || build.isExperimentSelection
|
||||||
},
|
},
|
||||||
requires: "at least 6 research",
|
requires: "at least 6 research",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -1489,7 +1489,7 @@ const tech = {
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return mech.health < 0.5 || build.isCustomSelection
|
return mech.health < 0.5 || build.isExperimentSelection
|
||||||
},
|
},
|
||||||
requires: "health below 60",
|
requires: "health below 60",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -1622,7 +1622,7 @@ const tech = {
|
|||||||
maxCount: 3,
|
maxCount: 3,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return (mech.health < 0.7 || build.isCustomSelection) && !tech.isEnergyHealth
|
return (mech.health < 0.7 || build.isExperimentSelection) && !tech.isEnergyHealth
|
||||||
},
|
},
|
||||||
requires: "not mass-energy equivalence",
|
requires: "not mass-energy equivalence",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -1660,7 +1660,7 @@ const tech = {
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return powerUps.research.count > 0 || build.isCustomSelection
|
return powerUps.research.count > 0 || build.isExperimentSelection
|
||||||
},
|
},
|
||||||
requires: "at least 1 research",
|
requires: "at least 1 research",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -1680,7 +1680,7 @@ const tech = {
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return powerUps.research.count > 1 || build.isCustomSelection
|
return powerUps.research.count > 1 || build.isExperimentSelection
|
||||||
},
|
},
|
||||||
requires: "at least 2 research",
|
requires: "at least 2 research",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -1985,13 +1985,43 @@ const tech = {
|
|||||||
tech.manyWorlds = false;
|
tech.manyWorlds = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "unified field theory",
|
||||||
|
description: "after switching <strong>guns</strong><br>use a <strong class='color-r'>research</strong> to cycle your <strong class='color-f'>field</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return (powerUps.research.count > 1 && b.inventory.length > 1) || build.isExperimentSelection
|
||||||
|
},
|
||||||
|
requires: "at least 2 guns, and 2 research",
|
||||||
|
effect() {
|
||||||
|
tech.isGunSwitchField = true;
|
||||||
|
for (let i = tech.tech.length - 1; i > 0; i--) {
|
||||||
|
if (tech.tech[i].name === "unified field theory") {
|
||||||
|
const index = (mech.fieldMode === mech.fieldUpgrades.length - 1) ? 1 : mech.fieldMode + 1
|
||||||
|
tech.tech[i].description = `after switching <strong>guns</strong><br>use a <strong class='color-r'>research</strong> to cycle your <strong class='color-f'>field</strong>
|
||||||
|
<br>(next <strong class='color-f'>field</strong>: ${mech.fieldUpgrades[index].name})`
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isGunSwitchField = false;
|
||||||
|
for (let i = tech.tech.length - 1; i > 0; i--) {
|
||||||
|
if (tech.tech[i].name === "unified field theory") {
|
||||||
|
tech.tech[i].description = "after switching <strong>guns</strong><br>use a <strong class='color-r'>research</strong> to cycle your <strong class='color-f'>field</strong>"
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "renormalization",
|
name: "renormalization",
|
||||||
description: "using a <strong class='color-r'>research</strong> for <strong>any</strong> purpose<br>has a <strong>37%</strong> chance to spawn a <strong class='color-r'>research</strong>",
|
description: "using a <strong class='color-r'>research</strong> for <strong>any</strong> purpose<br>has a <strong>37%</strong> chance to spawn a <strong class='color-r'>research</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return (powerUps.research.count > 1 || build.isCustomSelection) && !tech.isSuperDeterminism && !tech.isRerollHaste
|
return (powerUps.research.count > 1 || build.isExperimentSelection) && !tech.isSuperDeterminism && !tech.isRerollHaste
|
||||||
},
|
},
|
||||||
requires: "not superdeterminism or Ψ(t) collapse<br>at least 2 research",
|
requires: "not superdeterminism or Ψ(t) collapse<br>at least 2 research",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -2007,7 +2037,7 @@ const tech = {
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return (powerUps.research.count > 2 || build.isCustomSelection) && !tech.isDeterminism
|
return (powerUps.research.count > 2 || build.isExperimentSelection) && !tech.isDeterminism
|
||||||
},
|
},
|
||||||
requires: "not determinism, at least 3 research",
|
requires: "not determinism, at least 3 research",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -2027,7 +2057,7 @@ const tech = {
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return powerUps.research.count > 4 || build.isCustomSelection
|
return powerUps.research.count > 4 || build.isExperimentSelection
|
||||||
},
|
},
|
||||||
requires: "at least 5 research",
|
requires: "at least 5 research",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -2095,7 +2125,7 @@ const tech = {
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return (tech.totalBots() > 5 || mech.fieldUpgrades[mech.fieldMode].name === "nano-scale manufacturing" || mech.fieldUpgrades[mech.fieldMode].name === "plasma torch" || mech.fieldUpgrades[mech.fieldMode].name === "pilot wave") && !tech.isEnergyHealth && !tech.isRewindAvoidDeath //build.isCustomSelection ||
|
return (tech.totalBots() > 5 || mech.fieldUpgrades[mech.fieldMode].name === "nano-scale manufacturing" || mech.fieldUpgrades[mech.fieldMode].name === "plasma torch" || mech.fieldUpgrades[mech.fieldMode].name === "pilot wave") && !tech.isEnergyHealth && !tech.isRewindAvoidDeath //build.isExperimentSelection ||
|
||||||
},
|
},
|
||||||
requires: "bots > 5, plasma torch, nano-scale, pilot wave, not mass-energy equivalence, CPT",
|
requires: "bots > 5, plasma torch, nano-scale, pilot wave, not mass-energy equivalence, CPT",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -4212,5 +4242,6 @@ const tech = {
|
|||||||
isFireMoveLock: null,
|
isFireMoveLock: null,
|
||||||
isRivets: null,
|
isRivets: null,
|
||||||
isNeedles: null,
|
isNeedles: null,
|
||||||
isExplodeRadio: null
|
isExplodeRadio: null,
|
||||||
|
isGunSwitchField: null
|
||||||
}
|
}
|
||||||
16
style.css
16
style.css
@@ -103,7 +103,7 @@ summary {
|
|||||||
background-color: #e8e8ee;
|
background-color: #e8e8ee;
|
||||||
}
|
}
|
||||||
|
|
||||||
#build-button {
|
#experiment-button {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 3px;
|
bottom: 3px;
|
||||||
right: 3px;
|
right: 3px;
|
||||||
@@ -217,7 +217,7 @@ summary {
|
|||||||
font-size: 0.65em;
|
font-size: 0.65em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#build-grid {
|
#experiment-grid {
|
||||||
/* align-content: space-between; */
|
/* align-content: space-between; */
|
||||||
padding: 1px;
|
padding: 1px;
|
||||||
/* padding: 16px; */
|
/* padding: 16px; */
|
||||||
@@ -238,7 +238,7 @@ summary {
|
|||||||
font-size: 1.3em;
|
font-size: 1.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.build-grid-module {
|
.experiment-grid-module {
|
||||||
margin: -1px;
|
margin: -1px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
line-height: 170%;
|
line-height: 170%;
|
||||||
@@ -256,7 +256,7 @@ summary {
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.build-grid-module:hover {
|
.experiment-grid-module:hover {
|
||||||
background-color: #efeff5;
|
background-color: #efeff5;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,14 +284,14 @@ summary {
|
|||||||
background-color: hsl(253, 100%, 81%);
|
background-color: hsl(253, 100%, 81%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.build-grid-disabled {
|
.experiment-grid-disabled {
|
||||||
/* opacity: 0.5; */
|
/* opacity: 0.5; */
|
||||||
background-color: var(--build-bg-color);
|
background-color: var(--build-bg-color);
|
||||||
color: rgba(0, 0, 0, 0.2);
|
color: rgba(0, 0, 0, 0.2);
|
||||||
/* transition: background-color 1s, color 1s; */
|
/* transition: background-color 1s, color 1s; */
|
||||||
}
|
}
|
||||||
|
|
||||||
.build-grid-disabled:hover {
|
.experiment-grid-disabled:hover {
|
||||||
/* background-color: #fff; */
|
/* background-color: #fff; */
|
||||||
background-color: var(--build-bg-color);
|
background-color: var(--build-bg-color);
|
||||||
}
|
}
|
||||||
@@ -461,7 +461,7 @@ summary {
|
|||||||
color: hsl(218, 100%, 58%);
|
color: hsl(218, 100%, 58%);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* colors for pause, selection and custom */
|
/* colors for pause, selection and experiment */
|
||||||
|
|
||||||
/* #text-log {
|
/* #text-log {
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
@@ -665,7 +665,7 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.lore {
|
.lore {
|
||||||
animation: bgColor 10s linear infinite;
|
animation: bgColor 6s linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes bgColor {
|
@keyframes bgColor {
|
||||||
|
|||||||
28
todo.txt
28
todo.txt
@@ -1,15 +1,14 @@
|
|||||||
******************************************************** NEXT PATCH ********************************************************
|
******************************************************** NEXT PATCH ********************************************************
|
||||||
|
|
||||||
lore: chapter 1 and 2 are now somewhere in the game
|
duplication bug fix
|
||||||
lore is the same for all difficulty levels
|
|
||||||
|
|
||||||
testing mode and custom are now locked by default until you reach chapter 1
|
renaming custom mode -> experimental mode
|
||||||
or just hack the game to skip the lore and enable testing and custom
|
experimental mode is available again even without completing lore
|
||||||
localSettings.loreCount = Infinity;
|
|
||||||
localStorage.setItem("localSettings", JSON.stringify(localSettings));
|
|
||||||
|
|
||||||
bug fix: performance greatly improved on drawing multiple duplicated power ups
|
mob: sneaker is a bit faster and stronger
|
||||||
|
(the invisible one that attacks from stealth)
|
||||||
|
|
||||||
|
tech: unified field theory - switching guns uses a reroll to cycle your field
|
||||||
|
|
||||||
******************************************************** BUGS ********************************************************
|
******************************************************** BUGS ********************************************************
|
||||||
|
|
||||||
@@ -31,8 +30,6 @@ bug fix: performance greatly improved on drawing multiple duplicated power ups
|
|||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
chapter 3: why is the bot attacking things?
|
|
||||||
|
|
||||||
mechanic: use gun swap as an active ability
|
mechanic: use gun swap as an active ability
|
||||||
this effect is spammable, so it needs a cost or a cooldown
|
this effect is spammable, so it needs a cost or a cooldown
|
||||||
tech:
|
tech:
|
||||||
@@ -42,6 +39,13 @@ mechanic: use gun swap as an active ability
|
|||||||
rewind, still uses energy
|
rewind, still uses energy
|
||||||
cycle to next field, uses a reroll
|
cycle to next field, uses a reroll
|
||||||
|
|
||||||
|
chapter 3: why is the bot attacking things?
|
||||||
|
voice singing with pitch?
|
||||||
|
|
||||||
|
bot: ice blast, long CD AOE freeze
|
||||||
|
|
||||||
|
RPG default or tech: grenades detonate on your cursor / where your cursor was when they were fired
|
||||||
|
|
||||||
tech: double your rerolls
|
tech: double your rerolls
|
||||||
set your duplication chance to zero
|
set your duplication chance to zero
|
||||||
requires 5 rerolls and 20% duplication chance
|
requires 5 rerolls and 20% duplication chance
|
||||||
@@ -210,12 +214,6 @@ tech- foam is attracted to mobs
|
|||||||
name - static cling
|
name - static cling
|
||||||
could also do bremsstrahlung radiation like damage on attachment
|
could also do bremsstrahlung radiation like damage on attachment
|
||||||
|
|
||||||
field - one block orbits you, it can protect you a bit and do collision damage
|
|
||||||
use field to fire and press field again to pull it back
|
|
||||||
tech- more blocks
|
|
||||||
tech- attach a permanent neutron bomb to the block
|
|
||||||
lowers energy regen, but it can damage mobs
|
|
||||||
|
|
||||||
repeat map in vertical and horizontal space
|
repeat map in vertical and horizontal space
|
||||||
or at least vertical space
|
or at least vertical space
|
||||||
camera looks strange when you teleport player with a high velocity
|
camera looks strange when you teleport player with a high velocity
|
||||||
|
|||||||
Reference in New Issue
Block a user