borders for no image selection menu
mob damage difficulty setting is lower recycling now flashes green when it heals merged cancel and research bars for single column selection added some dark grey borders for no images selection mode new images with midJourney V5 spores, pilot wave, standing wave bug fixes
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 79 KiB |
@@ -106,6 +106,7 @@
|
|||||||
<option value="staircase">
|
<option value="staircase">
|
||||||
<option value="perplex">
|
<option value="perplex">
|
||||||
<option value="n-gon">
|
<option value="n-gon">
|
||||||
|
<option value="buttonbutton">
|
||||||
<option value="vats">
|
<option value="vats">
|
||||||
<option value="yingYang">
|
<option value="yingYang">
|
||||||
<option value="basement">
|
<option value="basement">
|
||||||
|
|||||||
299
js/bullet.js
93
js/index.js
@@ -14,7 +14,7 @@ Math.hash = s => {
|
|||||||
|
|
||||||
document.getElementById("seed").placeholder = Math.initialSeed = String(Math.floor(Date.now() % 100000))
|
document.getElementById("seed").placeholder = Math.initialSeed = String(Math.floor(Date.now() % 100000))
|
||||||
Math.seed = Math.abs(Math.hash(Math.initialSeed)) //update randomizer seed in case the player changed it
|
Math.seed = Math.abs(Math.hash(Math.initialSeed)) //update randomizer seed in case the player changed it
|
||||||
Math.seededRandom = function(min = 0, max = 1) { // in order to work 'Math.seed' must NOT be undefined
|
Math.seededRandom = function (min = 0, max = 1) { // in order to work 'Math.seed' must NOT be undefined
|
||||||
Math.seed = (Math.seed * 9301 + 49297) % 233280;
|
Math.seed = (Math.seed * 9301 + 49297) % 233280;
|
||||||
return min + Math.seed / 233280 * (max - min);
|
return min + Math.seed / 233280 * (max - min);
|
||||||
}
|
}
|
||||||
@@ -100,7 +100,7 @@ let color = { //light
|
|||||||
//difficulty is 0 easy, 1 normal, 2 hard, 4 why
|
//difficulty is 0 easy, 1 normal, 2 hard, 4 why
|
||||||
function getUrlVars() {
|
function getUrlVars() {
|
||||||
let vars = {};
|
let vars = {};
|
||||||
window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m, k, v) {
|
window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, k, v) {
|
||||||
vars[k] = v;
|
vars[k] = v;
|
||||||
});
|
});
|
||||||
return vars;
|
return vars;
|
||||||
@@ -201,7 +201,7 @@ const ctx = canvas.getContext("2d");
|
|||||||
document.body.style.backgroundColor = "#fff";
|
document.body.style.backgroundColor = "#fff";
|
||||||
|
|
||||||
//disable pop up menu on right click
|
//disable pop up menu on right click
|
||||||
document.oncontextmenu = function() {
|
document.oncontextmenu = function () {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,18 +287,18 @@ const build = {
|
|||||||
localSettings.isHideImages = !localSettings.isHideImages
|
localSettings.isHideImages = !localSettings.isHideImages
|
||||||
if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
if (from === 'experiment') {
|
if (from === 'experiment') {
|
||||||
// build.startExperiment()
|
|
||||||
// openExperimentMenu()
|
|
||||||
build.reset();
|
build.reset();
|
||||||
// build.populateGrid();
|
|
||||||
// build.choosePowerUp(null, 'none')
|
|
||||||
} else if (from === 'pause') {
|
} else if (from === 'pause') {
|
||||||
build.unPauseGrid()
|
build.unPauseGrid()
|
||||||
build.pauseGrid() //redraw pause text with images
|
build.pauseGrid() //redraw pause text with images
|
||||||
} else { //settings
|
|
||||||
//nothing needs to be here I think
|
|
||||||
}
|
}
|
||||||
|
if (localSettings.isHideImages) {
|
||||||
|
document.getElementById("choose-grid").classList.add('choose-grid-no-images');
|
||||||
|
document.getElementById("choose-grid").classList.remove('choose-grid');
|
||||||
|
} else {
|
||||||
|
document.getElementById("choose-grid").classList.add('choose-grid');
|
||||||
|
document.getElementById("choose-grid").classList.remove('choose-grid-no-images');
|
||||||
|
}
|
||||||
document.getElementById("hide-images").checked = localSettings.isHideImages
|
document.getElementById("hide-images").checked = localSettings.isHideImages
|
||||||
// console.log(localSettings.isHideImages, from)
|
// console.log(localSettings.isHideImages, from)
|
||||||
},
|
},
|
||||||
@@ -331,30 +331,30 @@ const build = {
|
|||||||
</svg><span style="font-size:1.5em;font-weight: 600; float: right;">PAUSED</span>
|
</svg><span style="font-size:1.5em;font-weight: 600; float: right;">PAUSED</span>
|
||||||
<br>
|
<br>
|
||||||
<label for="hide-images-pause" title="hide images for fields, guns, and tech" style="font-size:1.3em;" >hide images:</label>
|
<label for="hide-images-pause" title="hide images for fields, guns, and tech" style="font-size:1.3em;" >hide images:</label>
|
||||||
<input onclick="build.showImages('pause')" type="checkbox" id="hide-images-pause" name="hide-images-pause" ${localSettings.isHideImages? "checked": ""}>
|
<input onclick="build.showImages('pause')" type="checkbox" id="hide-images-pause" name="hide-images-pause" ${localSettings.isHideImages ? "checked" : ""}>
|
||||||
<span style="float: right;">press ${input.key.pause} to resume</span>
|
<span style="float: right;">press ${input.key.pause} to resume</span>
|
||||||
<br>
|
<br>
|
||||||
<br><strong class='color-d'>damage</strong>: ${((tech.damageFromTech())).toPrecision(4)} difficulty: ${((m.dmgScale)).toPrecision(4)}
|
<br><strong class='color-d'>damage</strong>: ${((tech.damageFromTech())).toPrecision(4)} difficulty: ${((m.dmgScale)).toPrecision(4)}
|
||||||
<br><strong class='color-defense'>defense</strong>: ${tech.isEnergyHealth ? (1-Math.pow(m.defense(), 0.13)).toPrecision(5) : (1-m.defense()).toPrecision(5) } difficulty: ${(1/simulation.dmgScale).toPrecision(4)}
|
<br><strong class='color-defense'>defense</strong>: ${tech.isEnergyHealth ? (1 - Math.pow(m.defense(), 0.13)).toPrecision(5) : (1 - m.defense()).toPrecision(5)} difficulty: ${(1 / simulation.dmgScale).toPrecision(4)}
|
||||||
<br><strong><em>fire rate</em></strong>: ${((1-b.fireCDscale)*100).toFixed(b.fireCDscale < 0.1 ? 2 : 0)}%
|
<br><strong><em>fire rate</em></strong>: ${((1 - b.fireCDscale) * 100).toFixed(b.fireCDscale < 0.1 ? 2 : 0)}%
|
||||||
${tech.duplicationChance() ? `<br><strong class='color-dup'>duplication</strong>: ${(tech.duplicationChance()*100).toFixed(0)}%`: ""}
|
${tech.duplicationChance() ? `<br><strong class='color-dup'>duplication</strong>: ${(tech.duplicationChance() * 100).toFixed(0)}%` : ""}
|
||||||
${m.coupling ? `<br><strong class='color-coupling'>coupling</strong>: ${(m.coupling).toFixed(2)} <span style = 'font-size:90%;'>`+m.couplingDescription()+"</span>": ""}
|
${m.coupling ? `<br><strong class='color-coupling'>coupling</strong>: ${(m.coupling).toFixed(2)} <span style = 'font-size:90%;'>` + m.couplingDescription() + "</span>" : ""}
|
||||||
${botText}
|
${botText}
|
||||||
<br>
|
<br>
|
||||||
<br><strong class='color-h'>health</strong>: (${(m.health*100).toFixed(0)} / ${(m.maxHealth*100).toFixed(0)})
|
<br><strong class='color-h'>health</strong>: (${(m.health * 100).toFixed(0)} / ${(m.maxHealth * 100).toFixed(0)})
|
||||||
<span style="float: right;">mass: ${player.mass.toFixed(1)}</span>
|
<span style="float: right;">mass: ${player.mass.toFixed(1)}</span>
|
||||||
<br><strong class='color-f'>energy</strong>: (${(m.energy*100).toFixed(0)} / ${(m.maxEnergy*100).toFixed(0)}) +(${(m.fieldRegen*6000).toFixed(0)}/s)
|
<br><strong class='color-f'>energy</strong>: (${(m.energy * 100).toFixed(0)} / ${(m.maxEnergy * 100).toFixed(0)}) + (${(m.fieldRegen * 6000).toFixed(0)}/s)
|
||||||
<span style="float: right;">position: (${player.position.x.toFixed(1)}, ${player.position.y.toFixed(1)})</span>
|
<span style="float: right;">position: (${player.position.x.toFixed(1)}, ${player.position.y.toFixed(1)})</span>
|
||||||
<br><strong class='color-g'>gun</strong>: ${b.activeGun === null || b.activeGun === undefined ? "undefined":b.guns[b.activeGun].name} <strong class='color-g'>ammo</strong>: ${b.activeGun === null || b.activeGun === undefined ? "0":b.guns[b.activeGun].ammo}
|
<br><strong class='color-g'>gun</strong>: ${b.activeGun === null || b.activeGun === undefined ? "undefined" : b.guns[b.activeGun].name} <strong class='color-g'>ammo</strong>: ${b.activeGun === null || b.activeGun === undefined ? "0" : b.guns[b.activeGun].ammo}
|
||||||
<span style="float: right;">mouse: (${simulation.mouseInGame.x.toFixed(1)}, ${simulation.mouseInGame.y.toFixed(1)})</span>
|
<span style="float: right;">mouse: (${simulation.mouseInGame.x.toFixed(1)}, ${simulation.mouseInGame.y.toFixed(1)})</span>
|
||||||
<br><strong class='color-m'>tech</strong>: ${tech.totalCount} <strong class='color-r'>research</strong>: ${powerUps.research.count}
|
<br><strong class='color-m'>tech</strong>: ${tech.totalCount} <strong class='color-r'>research</strong>: ${powerUps.research.count}
|
||||||
<span style="float: right;">velocity: (${player.velocity.x.toFixed(3)}, ${player.velocity.y.toFixed(3)})</span>
|
<span style="float: right;">velocity: (${player.velocity.x.toFixed(3)}, ${player.velocity.y.toFixed(3)})</span>
|
||||||
${junkCount ? `<br><strong class='color-junk'>JUNK</strong>: ${(junkCount / totalCount * 100).toFixed(1)}% `: ""}
|
${junkCount ? `<br><strong class='color-junk'>JUNK</strong>: ${(junkCount / totalCount * 100).toFixed(1)}% ` : ""}
|
||||||
<br>
|
<br>
|
||||||
<br>level: ${level.levelsCleared} ${level.levels[level.onLevel]} (${level.difficultyText()})
|
<br>level: ${level.levelsCleared} ${level.levels[level.onLevel]} (${level.difficultyText()})
|
||||||
<br>seed: ${Math.initialSeed} ${m.cycle} cycles
|
<br>seed: ${Math.initialSeed} ${m.cycle} cycles
|
||||||
<br>mobs: ${mob.length} blocks: ${body.length} bullets: ${bullet.length} power ups: ${powerUp.length}
|
<br>mobs: ${mob.length} blocks: ${body.length} bullets: ${bullet.length} power ups: ${powerUp.length}
|
||||||
${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
${simulation.isCheating ? "<br><br><em>lore disabled</em>" : ""}
|
||||||
</span></div>`;
|
</span></div>`;
|
||||||
// deaths: ${mobs.mobDeaths}
|
// deaths: ${mobs.mobDeaths}
|
||||||
if (tech.isPauseSwitchField && !simulation.isChoosing) {
|
if (tech.isPauseSwitchField && !simulation.isChoosing) {
|
||||||
@@ -415,7 +415,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
const style = (localSettings.isHideImages || tech.tech[i].isJunk || tech.tech[i].isLore) ? `style="height:auto;"` : `style = "background-image: url('img/${tech.tech[i].name}.webp');"`
|
const style = (localSettings.isHideImages || tech.tech[i].isJunk || tech.tech[i].isLore) ? `style="height:auto;"` : `style = "background-image: url('img/${tech.tech[i].name}.webp');"`
|
||||||
const techCountText = tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : "";
|
const techCountText = tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : "";
|
||||||
if (tech.tech[i].isNonRefundable) {
|
if (tech.tech[i].isNonRefundable) {
|
||||||
text += `<div class="pause-grid-module" id ="${i}-pause-tech" style = "border: 0px; opacity:0.5; font-size: 60%; line-height: 130%; margin: 1px; padding: 6px;"><div class="grid-title">${tech.tech[i].link} ${techCountText}</div>${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div></div>`
|
text += `<div class="pause-grid-module" id ="${i}-pause-tech" style = "border: 0px; opacity:0.5; font-size: 60%; line-height: 130%; margin: 1px; padding: 6px;"><div class="grid-title">${tech.tech[i].link} ${techCountText}</div>${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() : tech.tech[i].description}</div></div>`
|
||||||
// } else if (tech.tech[i].isLore) {
|
// } else if (tech.tech[i].isLore) {
|
||||||
// text += `<div class="pause-grid-module"><div class="grid-title lore-text"><div class="circle-grid lore"></div> ${tech.tech[i].name} ${techCountText}</div>${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div></div>`
|
// text += `<div class="pause-grid-module"><div class="grid-title lore-text"><div class="circle-grid lore"></div> ${tech.tech[i].name} ${techCountText}</div>${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div></div>`
|
||||||
} else if (tech.tech[i].isFieldTech) {
|
} else if (tech.tech[i].isFieldTech) {
|
||||||
@@ -432,7 +432,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
text += build.techText(i) + "</div>"
|
text += build.techText(i) + "</div>"
|
||||||
}
|
}
|
||||||
} else if (tech.tech[i].isLost) {
|
} else if (tech.tech[i].isLost) {
|
||||||
text += `<div class="pause-grid-module" style="text-decoration: line-through;"><div class="grid-title">${tech.tech[i].link}</div>${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div></div>`
|
text += `<div class="pause-grid-module" style="text-decoration: line-through;"><div class="grid-title">${tech.tech[i].link}</div>${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() : tech.tech[i].description}</div></div>`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
el = document.getElementById("pause-grid-right")
|
el = document.getElementById("pause-grid-right")
|
||||||
@@ -478,7 +478,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
techText(i) {
|
techText(i) {
|
||||||
return `<div class="card-text" >
|
return `<div class="card-text" >
|
||||||
<div class="grid-title" ><div class="circle-grid tech"></div> ${build.nameLink(tech.tech[i].name)} ${tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : ""}</div>
|
<div class="grid-title" ><div class="circle-grid tech"></div> ${build.nameLink(tech.tech[i].name)} ${tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : ""}</div>
|
||||||
${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>`
|
${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() : tech.tech[i].description}</div>`
|
||||||
},
|
},
|
||||||
skinTechText(i) {
|
skinTechText(i) {
|
||||||
return `<div class="card-text"> <div class="grid-title">
|
return `<div class="card-text"> <div class="grid-title">
|
||||||
@@ -486,7 +486,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
<div class="circle-grid-skin"></div>
|
<div class="circle-grid-skin"></div>
|
||||||
<div class="circle-grid-skin-eye"></div>
|
<div class="circle-grid-skin-eye"></div>
|
||||||
</span> ${build.nameLink(tech.tech[i].name)} ${tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : ""}</div>
|
</span> ${build.nameLink(tech.tech[i].name)} ${tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : ""}</div>
|
||||||
${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>`
|
${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() : tech.tech[i].description}</div>`
|
||||||
},
|
},
|
||||||
gunTechText(i) {
|
gunTechText(i) {
|
||||||
return `<div class="card-text"> <div class="grid-title">
|
return `<div class="card-text"> <div class="grid-title">
|
||||||
@@ -494,7 +494,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
<div class="circle-grid tech" style="position:absolute; top:0; left:0;opacity:0.8;"></div>
|
<div class="circle-grid tech" style="position:absolute; top:0; left:0;opacity:0.8;"></div>
|
||||||
<div class="circle-grid gun" style="position:absolute; top:0; left:10px; opacity:0.65;"></div>
|
<div class="circle-grid gun" style="position:absolute; top:0; left:10px; opacity:0.65;"></div>
|
||||||
</span> ${build.nameLink(tech.tech[i].name)} ${tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : ""}</div>
|
</span> ${build.nameLink(tech.tech[i].name)} ${tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : ""}</div>
|
||||||
${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>`
|
${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() : tech.tech[i].description}</div>`
|
||||||
},
|
},
|
||||||
fieldTechText(i) {
|
fieldTechText(i) {
|
||||||
return `<div class="card-text"><div class="grid-title">
|
return `<div class="card-text"><div class="grid-title">
|
||||||
@@ -502,12 +502,12 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
<div class="circle-grid tech" style="position:absolute; top:0; left:0;opacity:0.8;"></div>
|
<div class="circle-grid tech" style="position:absolute; top:0; left:0;opacity:0.8;"></div>
|
||||||
<div class="circle-grid field" style="position:absolute; top:0; left:10px;opacity:0.65;"></div>
|
<div class="circle-grid field" style="position:absolute; top:0; left:10px;opacity:0.65;"></div>
|
||||||
</span> ${build.nameLink(tech.tech[i].name)} ${tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : ""}</div>
|
</span> ${build.nameLink(tech.tech[i].name)} ${tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : ""}</div>
|
||||||
${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>`
|
${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() : tech.tech[i].description}</div>`
|
||||||
},
|
},
|
||||||
junkTechText(i) {
|
junkTechText(i) {
|
||||||
return `<div class="card-text">
|
return `<div class="card-text">
|
||||||
<div class="grid-title"><div class="circle-grid junk"></div> ${build.nameLink(tech.tech[i].name)} ${tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : ""}</div>
|
<div class="grid-title"><div class="circle-grid junk"></div> ${build.nameLink(tech.tech[i].name)} ${tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : ""}</div>
|
||||||
${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>`
|
${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() : tech.tech[i].description}</div>`
|
||||||
},
|
},
|
||||||
choosePowerUp(index, type, isAllowed = false) {
|
choosePowerUp(index, type, isAllowed = false) {
|
||||||
if (type === "gun") {
|
if (type === "gun") {
|
||||||
@@ -594,7 +594,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
techID.setAttribute("onClick", `javascript: build.choosePowerUp(${i},'tech')`);
|
techID.setAttribute("onClick", `javascript: build.choosePowerUp(${i},'tech')`);
|
||||||
}
|
}
|
||||||
} else { //disabled color for disabled tech
|
} else { //disabled color for disabled tech
|
||||||
techID.innerHTML = `<div class="grid-title">${tech.tech[i].name}</div>${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() :tech.tech[i].description}</div>`
|
techID.innerHTML = `<div class="grid-title">${tech.tech[i].name}</div>${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() : tech.tech[i].description}</div>`
|
||||||
if (!techID.classList.contains("experiment-grid-disabled")) {
|
if (!techID.classList.contains("experiment-grid-disabled")) {
|
||||||
techID.classList.add("experiment-grid-disabled");
|
techID.classList.add("experiment-grid-disabled");
|
||||||
techID.onclick = null
|
techID.onclick = null
|
||||||
@@ -630,7 +630,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label for="hide-images-experiment" title="reload experiment with no images for fields, guns, and tech">hide images:</label>
|
<label for="hide-images-experiment" title="reload experiment with no images for fields, guns, and tech">hide images:</label>
|
||||||
<input onclick="build.showImages('experiment')" type="checkbox" id="hide-images-experiment" name="hide-images-experiment" style="width:17px; height:17px; margin-bottom: 15px;" ${localSettings.isHideImages? "checked": ""}>
|
<input onclick="build.showImages('experiment')" type="checkbox" id="hide-images-experiment" name="hide-images-experiment" style="width:17px; height:17px; margin-bottom: 15px;" ${localSettings.isHideImages ? "checked" : ""}>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<svg class="SVG-button" onclick="build.reset()" width="50" height="25">
|
<svg class="SVG-button" onclick="build.reset()" width="50" height="25">
|
||||||
@@ -775,17 +775,17 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
}
|
}
|
||||||
console.log('n-gon build URL copied to clipboard.\nPaste into browser address bar.')
|
console.log('n-gon build URL copied to clipboard.\nPaste into browser address bar.')
|
||||||
console.log(url)
|
console.log(url)
|
||||||
navigator.clipboard.writeText(url).then(function() {
|
navigator.clipboard.writeText(url).then(function () {
|
||||||
/* clipboard successfully set */
|
/* clipboard successfully set */
|
||||||
if (isCustom) {
|
if (isCustom) {
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
alert('n-gon build URL copied to clipboard.\nPaste into browser address bar.')
|
alert('n-gon build URL copied to clipboard.\nPaste into browser address bar.')
|
||||||
}, 300);
|
}, 300);
|
||||||
}
|
}
|
||||||
}, function() {
|
}, function () {
|
||||||
/* clipboard write failed */
|
/* clipboard write failed */
|
||||||
if (isCustom) {
|
if (isCustom) {
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
alert('copy failed')
|
alert('copy failed')
|
||||||
}, 300);
|
}, 300);
|
||||||
}
|
}
|
||||||
@@ -1013,14 +1013,14 @@ document.getElementById("control-table").addEventListener('click', (event) => {
|
|||||||
window.addEventListener("keydown", input.setKeys);
|
window.addEventListener("keydown", input.setKeys);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
document.getElementById("control-details").addEventListener("toggle", function() {
|
document.getElementById("control-details").addEventListener("toggle", function () {
|
||||||
input.controlTextUpdate()
|
input.controlTextUpdate()
|
||||||
input.endKeySensing();
|
input.endKeySensing();
|
||||||
})
|
})
|
||||||
|
|
||||||
document.getElementById("control-reset").addEventListener('click', input.setDefault);
|
document.getElementById("control-reset").addEventListener('click', input.setDefault);
|
||||||
|
|
||||||
window.addEventListener("keyup", function(event) {
|
window.addEventListener("keyup", function (event) {
|
||||||
switch (event.code) {
|
switch (event.code) {
|
||||||
case input.key.right:
|
case input.key.right:
|
||||||
case "ArrowRight":
|
case "ArrowRight":
|
||||||
@@ -1047,7 +1047,7 @@ window.addEventListener("keyup", function(event) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
window.addEventListener("keydown", function(event) {
|
window.addEventListener("keydown", function (event) {
|
||||||
// console.log(event.code)
|
// console.log(event.code)
|
||||||
switch (event.code) {
|
switch (event.code) {
|
||||||
case input.key.right:
|
case input.key.right:
|
||||||
@@ -1081,7 +1081,7 @@ window.addEventListener("keydown", function(event) {
|
|||||||
case input.key.pause:
|
case input.key.pause:
|
||||||
if (!simulation.isChoosing && input.isPauseKeyReady && m.alive) {
|
if (!simulation.isChoosing && input.isPauseKeyReady && m.alive) {
|
||||||
input.isPauseKeyReady = false
|
input.isPauseKeyReady = false
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
input.isPauseKeyReady = true
|
input.isPauseKeyReady = true
|
||||||
}, 300);
|
}, 300);
|
||||||
if (simulation.paused) {
|
if (simulation.paused) {
|
||||||
@@ -1110,7 +1110,7 @@ window.addEventListener("keydown", function(event) {
|
|||||||
}
|
}
|
||||||
m.energy = energy //return to current energy
|
m.energy = energy //return to current energy
|
||||||
// document.getElementById("pause-field").innerHTML = `<div class="grid-title"><div class="circle-grid field"></div> ${m.fieldUpgrades[m.fieldMode].name}</div> ${m.fieldUpgrades[m.fieldMode].description}`
|
// document.getElementById("pause-field").innerHTML = `<div class="grid-title"><div class="circle-grid field"></div> ${m.fieldUpgrades[m.fieldMode].name}</div> ${m.fieldUpgrades[m.fieldMode].description}`
|
||||||
document.getElementById("pause-field").style.backgroundImage = `url('img/field/${m.fieldUpgrades[m.fieldMode].name}${m.fieldMode === 0 ? Math.floor(Math.random()*10) : ""}.webp')`
|
document.getElementById("pause-field").style.backgroundImage = `url('img/field/${m.fieldUpgrades[m.fieldMode].name}${m.fieldMode === 0 ? Math.floor(Math.random() * 10) : ""}.webp')`
|
||||||
document.getElementById("pause-field").innerHTML = `
|
document.getElementById("pause-field").innerHTML = `
|
||||||
<div class="card-text" style = "animation: fieldColorCycle 1s linear infinite alternate;">
|
<div class="card-text" style = "animation: fieldColorCycle 1s linear infinite alternate;">
|
||||||
<div class="grid-title"><div class="circle-grid field"></div> ${build.nameLink(m.fieldUpgrades[m.fieldMode].name)}</div>
|
<div class="grid-title"><div class="circle-grid field"></div> ${build.nameLink(m.fieldUpgrades[m.fieldMode].name)}</div>
|
||||||
@@ -1310,7 +1310,7 @@ window.addEventListener("keydown", function(event) {
|
|||||||
break
|
break
|
||||||
case "b":
|
case "b":
|
||||||
tech.isRerollDamage = true
|
tech.isRerollDamage = true
|
||||||
powerUps.research.changeRerolls(100000)
|
powerUps.research.changeRerolls(1000000)
|
||||||
break
|
break
|
||||||
case "r":
|
case "r":
|
||||||
m.resetHistory();
|
m.resetHistory();
|
||||||
@@ -1564,10 +1564,10 @@ document.getElementById("difficulty-select").addEventListener("input", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
document.getElementById("updates").addEventListener("toggle", function() {
|
document.getElementById("updates").addEventListener("toggle", function () {
|
||||||
function loadJSON(path, success, error) { //generic function to get JSON
|
function loadJSON(path, success, error) { //generic function to get JSON
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
xhr.onreadystatechange = function() {
|
xhr.onreadystatechange = function () {
|
||||||
if (xhr.readyState === XMLHttpRequest.DONE) {
|
if (xhr.readyState === XMLHttpRequest.DONE) {
|
||||||
if (xhr.status === 200) {
|
if (xhr.status === 200) {
|
||||||
if (success)
|
if (success)
|
||||||
@@ -1586,7 +1586,7 @@ document.getElementById("updates").addEventListener("toggle", function() {
|
|||||||
|
|
||||||
/// https://api.github.com/repos/landgreen/n-gon/stats/commit_activity
|
/// https://api.github.com/repos/landgreen/n-gon/stats/commit_activity
|
||||||
loadJSON('https://api.github.com/repos/landgreen/n-gon/commits',
|
loadJSON('https://api.github.com/repos/landgreen/n-gon/commits',
|
||||||
function(data) {
|
function (data) {
|
||||||
// console.log(data)
|
// console.log(data)
|
||||||
for (let i = 0, len = 20; i < len; i++) {
|
for (let i = 0, len = 20; i < len; i++) {
|
||||||
text += "<strong>" + data[i].commit.author.date.substr(0, 10) + "</strong> - "; //+ "<br>"
|
text += "<strong>" + data[i].commit.author.date.substr(0, 10) + "</strong> - "; //+ "<br>"
|
||||||
@@ -1595,14 +1595,14 @@ document.getElementById("updates").addEventListener("toggle", function() {
|
|||||||
}
|
}
|
||||||
document.getElementById("updates-div").innerHTML = text.replace(/\n/g, "<br />")
|
document.getElementById("updates-div").innerHTML = text.replace(/\n/g, "<br />")
|
||||||
},
|
},
|
||||||
function(xhr) {
|
function (xhr) {
|
||||||
console.error(xhr);
|
console.error(xhr);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
const sound = {
|
const sound = {
|
||||||
tone(frequency, end = 1000, gain = 0.05) {
|
tone(frequency, end = 1000, gain = 0.05) {
|
||||||
const audioCtx = new(window.AudioContext || window.webkitAudioContext)(); //setup audio context
|
const audioCtx = new (window.AudioContext || window.webkitAudioContext)(); //setup audio context
|
||||||
const oscillator = audioCtx.createOscillator();
|
const oscillator = audioCtx.createOscillator();
|
||||||
const gainNode = audioCtx.createGain();
|
const gainNode = audioCtx.createGain();
|
||||||
gainNode.gain.value = gain; //controls volume
|
gainNode.gain.value = gain; //controls volume
|
||||||
@@ -1618,7 +1618,7 @@ const sound = {
|
|||||||
// return audioCtx
|
// return audioCtx
|
||||||
},
|
},
|
||||||
portamento(frequency, end = 1000, shiftRate = 10, gain = 0.05) {
|
portamento(frequency, end = 1000, shiftRate = 10, gain = 0.05) {
|
||||||
const audioCtx = new(window.AudioContext || window.webkitAudioContext)(); //setup audio context
|
const audioCtx = new (window.AudioContext || window.webkitAudioContext)(); //setup audio context
|
||||||
const oscillator = audioCtx.createOscillator();
|
const oscillator = audioCtx.createOscillator();
|
||||||
const gainNode = audioCtx.createGain();
|
const gainNode = audioCtx.createGain();
|
||||||
gainNode.gain.value = gain; //controls volume
|
gainNode.gain.value = gain; //controls volume
|
||||||
@@ -1681,6 +1681,9 @@ if (!localSettings.isHideImages) {
|
|||||||
}
|
}
|
||||||
// console.log(urls, images)
|
// console.log(urls, images)
|
||||||
});
|
});
|
||||||
|
document.getElementById("choose-grid").classList.add('choose-grid');
|
||||||
|
} else {
|
||||||
|
document.getElementById("choose-grid").classList.add('choose-grid-no-images');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
1349
js/level.js
24
js/lore.js
@@ -2,15 +2,7 @@ const lore = {
|
|||||||
techCount: 0,
|
techCount: 0,
|
||||||
techGoal: 7,
|
techGoal: 7,
|
||||||
setTechGoal() {
|
setTechGoal() {
|
||||||
if (simulation.difficultyMode === 1) {
|
this.techGoal = Math.max(1, Math.floor(8 - 1.5 * simulation.difficultyMode))
|
||||||
this.techGoal = 8
|
|
||||||
} else if (simulation.difficultyMode === 2) {
|
|
||||||
this.techGoal = 5
|
|
||||||
} else if (simulation.difficultyMode === 4) {
|
|
||||||
this.techGoal = 2
|
|
||||||
} else if (simulation.difficultyMode === 6) {
|
|
||||||
this.techGoal = 1
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
talkingColor: "#dff", //set color of graphic on level.null
|
talkingColor: "#dff", //set color of graphic on level.null
|
||||||
isSpeech: false,
|
isSpeech: false,
|
||||||
@@ -55,8 +47,8 @@ const lore = {
|
|||||||
trainer: {
|
trainer: {
|
||||||
color: "#f20",
|
color: "#f20",
|
||||||
voice: undefined,
|
voice: undefined,
|
||||||
text: function(say) {
|
text: function (say) {
|
||||||
simulation.makeTextLog(`input.audio(<span style="color:#888; font-size: 70%;">${(Date.now()/1000).toFixed(0)} s</span>)<span class='color-symbol'>:</span> "<span style="color:${this.color};">${say}</span>"`, Infinity);
|
simulation.makeTextLog(`input.audio(<span style="color:#888; font-size: 70%;">${(Date.now() / 1000).toFixed(0)} s</span>)<span class='color-symbol'>:</span> "<span style="color:${this.color};">${say}</span>"`, Infinity);
|
||||||
lore.talkingColor = this.color
|
lore.talkingColor = this.color
|
||||||
const utterance = new SpeechSynthesisUtterance(say);
|
const utterance = new SpeechSynthesisUtterance(say);
|
||||||
utterance.lang = "en-AU" //"en-IN"; //de-DE en-GB fr-FR en-US en-AU
|
utterance.lang = "en-AU" //"en-IN"; //de-DE en-GB fr-FR en-US en-AU
|
||||||
@@ -67,9 +59,9 @@ const lore = {
|
|||||||
anand: {
|
anand: {
|
||||||
color: "#e0c",
|
color: "#e0c",
|
||||||
voice: undefined,
|
voice: undefined,
|
||||||
text: function(say) {
|
text: function (say) {
|
||||||
if (level.levels[level.onLevel] === undefined) { //only talk if on the lore level (which is undefined because it is popped out of the level.levels array)
|
if (level.levels[level.onLevel] === undefined) { //only talk if on the lore level (which is undefined because it is popped out of the level.levels array)
|
||||||
simulation.makeTextLog(`input.audio(<span style="color:#888; font-size: 70%;">${(Date.now()/1000).toFixed(0)} s</span>)<span class='color-symbol'>:</span> "<span style="color:${this.color};">${say}</span>"`, Infinity);
|
simulation.makeTextLog(`input.audio(<span style="color:#888; font-size: 70%;">${(Date.now() / 1000).toFixed(0)} s</span>)<span class='color-symbol'>:</span> "<span style="color:${this.color};">${say}</span>"`, Infinity);
|
||||||
lore.talkingColor = this.color
|
lore.talkingColor = this.color
|
||||||
if (lore.isSpeech) {
|
if (lore.isSpeech) {
|
||||||
const utterance = new SpeechSynthesisUtterance(say);
|
const utterance = new SpeechSynthesisUtterance(say);
|
||||||
@@ -101,9 +93,9 @@ const lore = {
|
|||||||
},
|
},
|
||||||
miriam: {
|
miriam: {
|
||||||
color: "#f20",
|
color: "#f20",
|
||||||
text: function(say) {
|
text: function (say) {
|
||||||
if (level.levels[level.onLevel] === undefined) { //only talk if on the lore level (which is undefined because it is popped out of the level.levels array)
|
if (level.levels[level.onLevel] === undefined) { //only talk if on the lore level (which is undefined because it is popped out of the level.levels array)
|
||||||
simulation.makeTextLog(`input.audio(<span style="color:#888; font-size: 70%;">${(Date.now()/1000).toFixed(0)} s</span>)<span class='color-symbol'>:</span> "<span style="color:${this.color};">${say}</span>"`, Infinity);
|
simulation.makeTextLog(`input.audio(<span style="color:#888; font-size: 70%;">${(Date.now() / 1000).toFixed(0)} s</span>)<span class='color-symbol'>:</span> "<span style="color:${this.color};">${say}</span>"`, Infinity);
|
||||||
lore.talkingColor = this.color
|
lore.talkingColor = this.color
|
||||||
if (lore.isSpeech) {
|
if (lore.isSpeech) {
|
||||||
utterance = new SpeechSynthesisUtterance(say);
|
utterance = new SpeechSynthesisUtterance(say);
|
||||||
@@ -116,7 +108,7 @@ const lore = {
|
|||||||
lore.isSpeech = false
|
lore.isSpeech = false
|
||||||
lore.nextSentence()
|
lore.nextSentence()
|
||||||
}
|
}
|
||||||
speechFrozen = setTimeout(function() { // speech frozen after 10 seconds of no end
|
speechFrozen = setTimeout(function () { // speech frozen after 10 seconds of no end
|
||||||
console.log('speech frozen')
|
console.log('speech frozen')
|
||||||
lore.isSpeech = false
|
lore.isSpeech = false
|
||||||
lore.nextSentence()
|
lore.nextSentence()
|
||||||
|
|||||||
186
js/player.js
@@ -193,7 +193,7 @@ const m = {
|
|||||||
lastGroundedPositionY: 0,
|
lastGroundedPositionY: 0,
|
||||||
// mouseZoom: 0,
|
// mouseZoom: 0,
|
||||||
lookSmoothing: 0.07, //1 is instant jerky, 0.001 is slow smooth zoom, 0.07 is standard
|
lookSmoothing: 0.07, //1 is instant jerky, 0.001 is slow smooth zoom, 0.07 is standard
|
||||||
look() {}, //set to lookDefault()
|
look() { }, //set to lookDefault()
|
||||||
lookDefault() {
|
lookDefault() {
|
||||||
//always on mouse look
|
//always on mouse look
|
||||||
m.angle = Math.atan2(
|
m.angle = Math.atan2(
|
||||||
@@ -415,7 +415,7 @@ const m = {
|
|||||||
m.health = 1;
|
m.health = 1;
|
||||||
// m.addHealth(1)
|
// m.addHealth(1)
|
||||||
|
|
||||||
simulation.wipe = function() { //set wipe to have trails
|
simulation.wipe = function () { //set wipe to have trails
|
||||||
ctx.fillStyle = "rgba(255,255,255,0)";
|
ctx.fillStyle = "rgba(255,255,255,0)";
|
||||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||||
}
|
}
|
||||||
@@ -425,8 +425,8 @@ const m = {
|
|||||||
m.switchWorlds()
|
m.switchWorlds()
|
||||||
const swapPeriod = 1000
|
const swapPeriod = 1000
|
||||||
for (let i = 0, len = 5; i < len; i++) {
|
for (let i = 0, len = 5; i < len; i++) {
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
simulation.wipe = function() { //set wipe to have trails
|
simulation.wipe = function () { //set wipe to have trails
|
||||||
ctx.fillStyle = "rgba(255,255,255,0)";
|
ctx.fillStyle = "rgba(255,255,255,0)";
|
||||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||||
}
|
}
|
||||||
@@ -436,14 +436,14 @@ const m = {
|
|||||||
simulation.isTextLogOpen = true;
|
simulation.isTextLogOpen = true;
|
||||||
simulation.makeTextLog(`simulation.amplitude <span class='color-symbol'>=</span> 0.${len - i - 1}`, swapPeriod);
|
simulation.makeTextLog(`simulation.amplitude <span class='color-symbol'>=</span> 0.${len - i - 1}`, swapPeriod);
|
||||||
simulation.isTextLogOpen = false;
|
simulation.isTextLogOpen = false;
|
||||||
simulation.wipe = function() { //set wipe to have trails
|
simulation.wipe = function () { //set wipe to have trails
|
||||||
ctx.fillStyle = `rgba(255,255,255,${(i + 1) * (i + 1) * 0.006})`;
|
ctx.fillStyle = `rgba(255,255,255,${(i + 1) * (i + 1) * 0.006})`;
|
||||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||||
}
|
}
|
||||||
}, (i + 1) * swapPeriod);
|
}, (i + 1) * swapPeriod);
|
||||||
}
|
}
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
simulation.wipe = function() { //set wipe to normal
|
simulation.wipe = function () { //set wipe to normal
|
||||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
}
|
}
|
||||||
simulation.isTextLogOpen = true;
|
simulation.isTextLogOpen = true;
|
||||||
@@ -461,7 +461,7 @@ const m = {
|
|||||||
document.getElementById("text-log").style.display = "none"
|
document.getElementById("text-log").style.display = "none"
|
||||||
document.getElementById("fade-out").style.opacity = 0.9; //slowly fade to 90% white on top of canvas
|
document.getElementById("fade-out").style.opacity = 0.9; //slowly fade to 90% white on top of canvas
|
||||||
// build.shareURL(false)
|
// build.shareURL(false)
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
Composite.clear(engine.world);
|
Composite.clear(engine.world);
|
||||||
Engine.clear(engine);
|
Engine.clear(engine);
|
||||||
simulation.splashReturn();
|
simulation.splashReturn();
|
||||||
@@ -644,7 +644,7 @@ const m = {
|
|||||||
if (m.immuneCycle < m.cycle + m.collisionImmuneCycles) m.immuneCycle = m.cycle + m.collisionImmuneCycles; //player is immune to damage for 30 cycles
|
if (m.immuneCycle < m.cycle + m.collisionImmuneCycles) m.immuneCycle = m.cycle + m.collisionImmuneCycles; //player is immune to damage for 30 cycles
|
||||||
|
|
||||||
let isDrawPlayer = true
|
let isDrawPlayer = true
|
||||||
const shortPause = function() {
|
const shortPause = function () {
|
||||||
if (m.defaultFPSCycle < m.cycle) { //back to default values
|
if (m.defaultFPSCycle < m.cycle) { //back to default values
|
||||||
simulation.fpsCap = simulation.fpsCapDefault
|
simulation.fpsCap = simulation.fpsCapDefault
|
||||||
simulation.fpsInterval = 1000 / simulation.fpsCap;
|
simulation.fpsInterval = 1000 / simulation.fpsCap;
|
||||||
@@ -717,13 +717,13 @@ const m = {
|
|||||||
for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x + 100 * (Math.random() - 0.5), m.pos.y + 100 * (Math.random() - 0.5), "heal", false);
|
for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x + 100 * (Math.random() - 0.5), m.pos.y + 100 * (Math.random() - 0.5), "heal", false);
|
||||||
m.energy = m.maxEnergy
|
m.energy = m.maxEnergy
|
||||||
if (m.immuneCycle < m.cycle + 300) m.immuneCycle = m.cycle + 300 //disable this.immuneCycle bonus seconds
|
if (m.immuneCycle < m.cycle + 300) m.immuneCycle = m.cycle + 300 //disable this.immuneCycle bonus seconds
|
||||||
simulation.wipe = function() { //set wipe to have trails
|
simulation.wipe = function () { //set wipe to have trails
|
||||||
ctx.fillStyle = "rgba(255,255,255,0.03)";
|
ctx.fillStyle = "rgba(255,255,255,0.03)";
|
||||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||||
}
|
}
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
tech.maxDuplicationEvent()
|
tech.maxDuplicationEvent()
|
||||||
simulation.wipe = function() { //set wipe to normal
|
simulation.wipe = function () { //set wipe to normal
|
||||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
}
|
}
|
||||||
}, 3000);
|
}, 3000);
|
||||||
@@ -746,13 +746,13 @@ const m = {
|
|||||||
<br>${powerUps.research.count}`)
|
<br>${powerUps.research.count}`)
|
||||||
for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x + 100 * (Math.random() - 0.5), m.pos.y + 100 * (Math.random() - 0.5), "heal", false);
|
for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x + 100 * (Math.random() - 0.5), m.pos.y + 100 * (Math.random() - 0.5), "heal", false);
|
||||||
if (m.immuneCycle < m.cycle + 300) m.immuneCycle = m.cycle + 300 //disable this.immuneCycle bonus seconds
|
if (m.immuneCycle < m.cycle + 300) m.immuneCycle = m.cycle + 300 //disable this.immuneCycle bonus seconds
|
||||||
simulation.wipe = function() { //set wipe to have trails
|
simulation.wipe = function () { //set wipe to have trails
|
||||||
ctx.fillStyle = "rgba(255,255,255,0.03)";
|
ctx.fillStyle = "rgba(255,255,255,0.03)";
|
||||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||||
}
|
}
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
tech.maxDuplicationEvent()
|
tech.maxDuplicationEvent()
|
||||||
simulation.wipe = function() { //set wipe to normal
|
simulation.wipe = function () { //set wipe to normal
|
||||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
}
|
}
|
||||||
}, 3000);
|
}, 3000);
|
||||||
@@ -772,7 +772,7 @@ const m = {
|
|||||||
if (dmg > 0.06 / m.holdingMassScale) m.drop(); //drop block if holding // m.holdingMassScale = 0.5 for most fields
|
if (dmg > 0.06 / m.holdingMassScale) m.drop(); //drop block if holding // m.holdingMassScale = 0.5 for most fields
|
||||||
if (m.isCloak) m.fireCDcycle = m.cycle //forced exit cloak
|
if (m.isCloak) m.fireCDcycle = m.cycle //forced exit cloak
|
||||||
}
|
}
|
||||||
const normalFPS = function() {
|
const normalFPS = function () {
|
||||||
if (m.defaultFPSCycle < m.cycle) { //back to default values
|
if (m.defaultFPSCycle < m.cycle) { //back to default values
|
||||||
simulation.fpsCap = simulation.fpsCapDefault
|
simulation.fpsCap = simulation.fpsCapDefault
|
||||||
simulation.fpsInterval = 1000 / simulation.fpsCap;
|
simulation.fpsInterval = 1000 / simulation.fpsCap;
|
||||||
@@ -814,7 +814,7 @@ const m = {
|
|||||||
// *********************************************
|
// *********************************************
|
||||||
// ****** drawing player and skins *************
|
// ****** drawing player and skins *************
|
||||||
// *********************************************
|
// *********************************************
|
||||||
drawLeg(stroke) {},
|
drawLeg(stroke) { },
|
||||||
calcLeg(cycle_offset, offset) {
|
calcLeg(cycle_offset, offset) {
|
||||||
m.hip.x = 12 + offset;
|
m.hip.x = 12 + offset;
|
||||||
m.hip.y = 24 + offset;
|
m.hip.y = 24 + offset;
|
||||||
@@ -834,7 +834,7 @@ const m = {
|
|||||||
m.knee.x = (l / d) * (m.foot.x - m.hip.x) - (h / d) * (m.foot.y - m.hip.y) + m.hip.x + offset;
|
m.knee.x = (l / d) * (m.foot.x - m.hip.x) - (h / d) * (m.foot.y - m.hip.y) + m.hip.x + offset;
|
||||||
m.knee.y = (l / d) * (m.foot.y - m.hip.y) + (h / d) * (m.foot.x - m.hip.x) + m.hip.y;
|
m.knee.y = (l / d) * (m.foot.y - m.hip.y) + (h / d) * (m.foot.x - m.hip.x) + m.hip.y;
|
||||||
},
|
},
|
||||||
draw() {},
|
draw() { },
|
||||||
isAltSkin: false,
|
isAltSkin: false,
|
||||||
resetSkin() {
|
resetSkin() {
|
||||||
m.yOffWhen.jump = 70
|
m.yOffWhen.jump = 70
|
||||||
@@ -847,7 +847,7 @@ const m = {
|
|||||||
light: 100,
|
light: 100,
|
||||||
}
|
}
|
||||||
m.setFillColors();
|
m.setFillColors();
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
ctx.save();
|
ctx.save();
|
||||||
@@ -870,7 +870,7 @@ const m = {
|
|||||||
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||||
powerUps.boost.draw()
|
powerUps.boost.draw()
|
||||||
}
|
}
|
||||||
m.drawLeg = function(stroke) {
|
m.drawLeg = function (stroke) {
|
||||||
// if (simulation.mouseInGame.x > m.pos.x) {
|
// if (simulation.mouseInGame.x > m.pos.x) {
|
||||||
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
||||||
m.flipLegs = 1;
|
m.flipLegs = 1;
|
||||||
@@ -927,7 +927,7 @@ const m = {
|
|||||||
// light: 55,
|
// light: 55,
|
||||||
// }
|
// }
|
||||||
// m.setFillColors();
|
// m.setFillColors();
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
ctx.save();
|
ctx.save();
|
||||||
ctx.globalAlpha = (m.immuneCycle < m.cycle) ? 1 : 0.5 //|| (m.cycle % 40 > 20)
|
ctx.globalAlpha = (m.immuneCycle < m.cycle) ? 1 : 0.5 //|| (m.cycle % 40 > 20)
|
||||||
@@ -949,7 +949,7 @@ const m = {
|
|||||||
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||||
powerUps.boost.draw()
|
powerUps.boost.draw()
|
||||||
}
|
}
|
||||||
m.drawLeg = function(stroke) {
|
m.drawLeg = function (stroke) {
|
||||||
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
||||||
m.flipLegs = 1;
|
m.flipLegs = 1;
|
||||||
} else {
|
} else {
|
||||||
@@ -1012,7 +1012,7 @@ const m = {
|
|||||||
light: 85,
|
light: 85,
|
||||||
}
|
}
|
||||||
m.setFillColors();
|
m.setFillColors();
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
ctx.save();
|
ctx.save();
|
||||||
@@ -1040,7 +1040,7 @@ const m = {
|
|||||||
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||||
powerUps.boost.draw()
|
powerUps.boost.draw()
|
||||||
}
|
}
|
||||||
m.drawLeg = function(stroke) {
|
m.drawLeg = function (stroke) {
|
||||||
// if (simulation.mouseInGame.x > m.pos.x) {
|
// if (simulation.mouseInGame.x > m.pos.x) {
|
||||||
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
||||||
m.flipLegs = 1;
|
m.flipLegs = 1;
|
||||||
@@ -1107,7 +1107,7 @@ const m = {
|
|||||||
// grdRad.addColorStop(0.5, `rgba(210,210,210,0)`);
|
// grdRad.addColorStop(0.5, `rgba(210,210,210,0)`);
|
||||||
m.bodyGradient = grd
|
m.bodyGradient = grd
|
||||||
|
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
ctx.save();
|
ctx.save();
|
||||||
@@ -1140,7 +1140,7 @@ const m = {
|
|||||||
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||||
powerUps.boost.draw()
|
powerUps.boost.draw()
|
||||||
}
|
}
|
||||||
m.drawLeg = function(stroke) {
|
m.drawLeg = function (stroke) {
|
||||||
// if (simulation.mouseInGame.x > m.pos.x) {
|
// if (simulation.mouseInGame.x > m.pos.x) {
|
||||||
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
||||||
m.flipLegs = 1;
|
m.flipLegs = 1;
|
||||||
@@ -1231,7 +1231,7 @@ const m = {
|
|||||||
m.bodyGradient = grd
|
m.bodyGradient = grd
|
||||||
|
|
||||||
|
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
ctx.save();
|
ctx.save();
|
||||||
@@ -1254,7 +1254,7 @@ const m = {
|
|||||||
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||||
powerUps.boost.draw()
|
powerUps.boost.draw()
|
||||||
}
|
}
|
||||||
m.drawLeg = function(stroke) {
|
m.drawLeg = function (stroke) {
|
||||||
// if (simulation.mouseInGame.x > m.pos.x) {
|
// if (simulation.mouseInGame.x > m.pos.x) {
|
||||||
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
||||||
m.flipLegs = 1;
|
m.flipLegs = 1;
|
||||||
@@ -1302,7 +1302,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
dilate() {
|
dilate() {
|
||||||
m.isAltSkin = true
|
m.isAltSkin = true
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
const amplitude = 8 + 4 * Math.sin(m.cycle * 0.0075)
|
const amplitude = 8 + 4 * Math.sin(m.cycle * 0.0075)
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
@@ -1334,7 +1334,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
dilate2() {
|
dilate2() {
|
||||||
m.isAltSkin = true
|
m.isAltSkin = true
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
const amplitude = Math.sin(m.cycle * 0.0075)
|
const amplitude = Math.sin(m.cycle * 0.0075)
|
||||||
|
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
@@ -1366,7 +1366,7 @@ const m = {
|
|||||||
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||||
powerUps.boost.draw()
|
powerUps.boost.draw()
|
||||||
}
|
}
|
||||||
m.drawLeg = function(stroke) {
|
m.drawLeg = function (stroke) {
|
||||||
// if (simulation.mouseInGame.x > m.pos.x) {
|
// if (simulation.mouseInGame.x > m.pos.x) {
|
||||||
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
||||||
m.flipLegs = 1;
|
m.flipLegs = 1;
|
||||||
@@ -1424,7 +1424,7 @@ const m = {
|
|||||||
// grd.addColorStop(1, m.fillColor);
|
// grd.addColorStop(1, m.fillColor);
|
||||||
m.bodyGradient = grd
|
m.bodyGradient = grd
|
||||||
|
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
ctx.save();
|
ctx.save();
|
||||||
@@ -1448,7 +1448,7 @@ const m = {
|
|||||||
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||||
powerUps.boost.draw()
|
powerUps.boost.draw()
|
||||||
}
|
}
|
||||||
m.drawLeg = function(stroke) {
|
m.drawLeg = function (stroke) {
|
||||||
// if (simulation.mouseInGame.x > m.pos.x) {
|
// if (simulation.mouseInGame.x > m.pos.x) {
|
||||||
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
||||||
m.flipLegs = 1;
|
m.flipLegs = 1;
|
||||||
@@ -1492,7 +1492,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
stubs() {
|
stubs() {
|
||||||
m.isAltSkin = true
|
m.isAltSkin = true
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
ctx.save();
|
ctx.save();
|
||||||
@@ -1515,7 +1515,7 @@ const m = {
|
|||||||
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||||
powerUps.boost.draw()
|
powerUps.boost.draw()
|
||||||
}
|
}
|
||||||
m.drawLeg = function(stroke) {
|
m.drawLeg = function (stroke) {
|
||||||
// if (simulation.mouseInGame.x > m.pos.x) {
|
// if (simulation.mouseInGame.x > m.pos.x) {
|
||||||
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
if (m.angle > -Math.PI / 2 && m.angle < Math.PI / 2) {
|
||||||
m.flipLegs = 1;
|
m.flipLegs = 1;
|
||||||
@@ -1536,7 +1536,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
Sleipnir() {
|
Sleipnir() {
|
||||||
m.isAltSkin = true
|
m.isAltSkin = true
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
ctx.save();
|
ctx.save();
|
||||||
@@ -1561,7 +1561,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
diegesis() {
|
diegesis() {
|
||||||
m.isAltSkin = true
|
m.isAltSkin = true
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
|
|
||||||
@@ -1588,7 +1588,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
cat() {
|
cat() {
|
||||||
m.isAltSkin = true
|
m.isAltSkin = true
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
ctx.save();
|
ctx.save();
|
||||||
@@ -1656,7 +1656,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
pareidolia() {
|
pareidolia() {
|
||||||
m.isAltSkin = true
|
m.isAltSkin = true
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
ctx.save();
|
ctx.save();
|
||||||
@@ -1711,7 +1711,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
flipFlop() {
|
flipFlop() {
|
||||||
m.isAltSkin = true
|
m.isAltSkin = true
|
||||||
m.draw = function() {
|
m.draw = function () {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
m.walk_cycle += m.flipLegs * m.Vx;
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
|
|
||||||
@@ -1877,7 +1877,7 @@ const m = {
|
|||||||
ctx.fillRect(xOff, yOff, range * m.energy, 10);
|
ctx.fillRect(xOff, yOff, range * m.energy, 10);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
drawRegenEnergyCloaking: function() {
|
drawRegenEnergyCloaking: function () {
|
||||||
if (m.energy < m.maxEnergy) { // replaces m.drawRegenEnergy() with custom code
|
if (m.energy < m.maxEnergy) { // replaces m.drawRegenEnergy() with custom code
|
||||||
m.regenEnergy();
|
m.regenEnergy();
|
||||||
const xOff = m.pos.x - m.radius * m.maxEnergy
|
const xOff = m.pos.x - m.radius * m.maxEnergy
|
||||||
@@ -1895,13 +1895,15 @@ const m = {
|
|||||||
},
|
},
|
||||||
setFieldRegen() {
|
setFieldRegen() {
|
||||||
if (m.fieldMode === 6) {
|
if (m.fieldMode === 6) {
|
||||||
m.fieldRegen = 0.002333 //14 energy per second
|
m.fieldRegen = 0.002 //12 energy per second for time dilation
|
||||||
} else if (m.fieldMode === 2) {
|
} else if (m.fieldMode === 2) {
|
||||||
m.fieldRegen = 0.000833 //5 energy per second
|
m.fieldRegen = 0.000833 //5 energy per second perfect dia
|
||||||
} else if (m.fieldMode === 4) {
|
} else if (m.fieldMode === 4) {
|
||||||
m.fieldRegen = 0.002 //12 energy per second
|
m.fieldRegen = 0.002 //12 energy per second molecular assembler
|
||||||
} else if (m.fieldMode === 5) {
|
} else if (m.fieldMode === 5) {
|
||||||
m.fieldRegen = 0.001667 //10 energy per second
|
m.fieldRegen = 0.001667 //10 energy per second plasma torch
|
||||||
|
} else if (m.fieldMode === 8) {
|
||||||
|
m.fieldRegen = 0.001667 //10 energy per second pilot wave
|
||||||
} else {
|
} else {
|
||||||
m.fieldRegen = 0.001 //6 energy per second
|
m.fieldRegen = 0.001 //6 energy per second
|
||||||
}
|
}
|
||||||
@@ -1913,11 +1915,11 @@ const m = {
|
|||||||
m.fieldRegen *= 0.6
|
m.fieldRegen *= 0.6
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
regenEnergy: function() { //used in drawRegenEnergy // rewritten by some tech
|
regenEnergy: function () { //used in drawRegenEnergy // rewritten by some tech
|
||||||
if (m.immuneCycle < m.cycle) m.energy += m.fieldRegen;
|
if (m.immuneCycle < m.cycle) m.energy += m.fieldRegen;
|
||||||
if (m.energy < 0) m.energy = 0
|
if (m.energy < 0) m.energy = 0
|
||||||
},
|
},
|
||||||
regenEnergyDefault: function() {
|
regenEnergyDefault: function () {
|
||||||
if (m.immuneCycle < m.cycle) m.energy += m.fieldRegen;
|
if (m.immuneCycle < m.cycle) m.energy += m.fieldRegen;
|
||||||
if (m.energy < 0) m.energy = 0
|
if (m.energy < 0) m.energy = 0
|
||||||
},
|
},
|
||||||
@@ -2102,7 +2104,7 @@ const m = {
|
|||||||
m.holdingTarget.friction = m.holdingTarget.frictionStatic = m.holdingTarget.frictionAir = 0.001
|
m.holdingTarget.friction = m.holdingTarget.frictionStatic = m.holdingTarget.frictionAir = 0.001
|
||||||
}
|
}
|
||||||
//check every second to see if player is away from thrown body, and make solid
|
//check every second to see if player is away from thrown body, and make solid
|
||||||
const solid = function(that) {
|
const solid = function (that) {
|
||||||
const dx = that.position.x - player.position.x;
|
const dx = that.position.x - player.position.x;
|
||||||
const dy = that.position.y - player.position.y;
|
const dy = that.position.y - player.position.y;
|
||||||
// if (that.speed < 3 && dx * dx + dy * dy > 10000 && that !== m.holdingTarget) {
|
// if (that.speed < 3 && dx * dx + dy * dy > 10000 && that !== m.holdingTarget) {
|
||||||
@@ -2135,7 +2137,7 @@ const m = {
|
|||||||
m.definePlayerMass() //return to normal player mass
|
m.definePlayerMass() //return to normal player mass
|
||||||
|
|
||||||
if (tech.isAddBlockMass) {
|
if (tech.isAddBlockMass) {
|
||||||
const expand = function(that, massLimit) {
|
const expand = function (that, massLimit) {
|
||||||
if (that.mass < massLimit) {
|
if (that.mass < massLimit) {
|
||||||
const scale = 1.05;
|
const scale = 1.05;
|
||||||
Matter.Body.scale(that, scale, scale);
|
Matter.Body.scale(that, scale, scale);
|
||||||
@@ -2423,7 +2425,7 @@ const m = {
|
|||||||
// wake(powerUp);
|
// wake(powerUp);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
hold() {},
|
hold() { },
|
||||||
couplingDescription(couple = m.coupling) {
|
couplingDescription(couple = m.coupling) {
|
||||||
switch (m.fieldMode) {
|
switch (m.fieldMode) {
|
||||||
case 0: //field emitter
|
case 0: //field emitter
|
||||||
@@ -2434,19 +2436,19 @@ const m = {
|
|||||||
return `<span style = 'font-size:95%;'><strong>deflecting</strong> condenses +${couple.toFixed(1)} <strong class='color-s'>ice IX</strong></span>`
|
return `<span style = 'font-size:95%;'><strong>deflecting</strong> condenses +${couple.toFixed(1)} <strong class='color-s'>ice IX</strong></span>`
|
||||||
// return `<span style = 'font-size:89%;'><strong>invulnerable</strong> <strong>+${2*couple}</strong> seconds post collision</span>`
|
// return `<span style = 'font-size:89%;'><strong>invulnerable</strong> <strong>+${2*couple}</strong> seconds post collision</span>`
|
||||||
case 3: //negative mass
|
case 3: //negative mass
|
||||||
return `<strong>+${((1-0.73 ** couple)*100).toFixed(1)}%</strong> <strong class='color-defense'>defense</strong>`
|
return `<strong>+${((1 - 0.73 ** couple) * 100).toFixed(1)}%</strong> <strong class='color-defense'>defense</strong>`
|
||||||
case 4: //assembler
|
case 4: //assembler
|
||||||
return `generate <strong>${(8*couple).toFixed(0)}</strong> <strong class='color-f'>energy</strong> per second`
|
return `generate <strong>${(8 * couple).toFixed(0)}</strong> <strong class='color-f'>energy</strong> per second`
|
||||||
case 5: //plasma
|
case 5: //plasma
|
||||||
return `<strong>+${(15*couple).toFixed(0)}%</strong> <strong class='color-d'>damage</strong>`
|
return `<strong>+${(15 * couple).toFixed(0)}%</strong> <strong class='color-d'>damage</strong>`
|
||||||
case 6: //time dilation
|
case 6: //time dilation
|
||||||
return `<strong>+${(50*couple).toFixed(0)}%</strong> longer <strong style='letter-spacing: 2px;'>stopped time</strong>` //<strong>movement</strong>, <strong>jumping</strong>, and
|
return `<strong>+${(50 * couple).toFixed(0)}%</strong> longer <strong style='letter-spacing: 2px;'>stopped time</strong>` //<strong>movement</strong>, <strong>jumping</strong>, and
|
||||||
case 7: //cloaking
|
case 7: //cloaking
|
||||||
return `<strong>+${(33*couple).toFixed(0)}%</strong> ambush <strong class='color-d'>damage</strong>`
|
return `<strong>+${(33 * couple).toFixed(0)}%</strong> ambush <strong class='color-d'>damage</strong>`
|
||||||
case 8: //pilot wave
|
case 8: //pilot wave
|
||||||
return `<strong>+${(40*couple).toFixed(0)}%</strong> <strong class='color-block'>block</strong> collision <strong class='color-d'>damage</strong>`
|
return `<strong>+${(40 * couple).toFixed(0)}%</strong> <strong class='color-block'>block</strong> collision <strong class='color-d'>damage</strong>`
|
||||||
case 9: //wormhole
|
case 9: //wormhole
|
||||||
return `<span style = 'font-size:89%;'>after eating <strong class='color-block'>blocks</strong> <strong>+${(20*couple).toFixed(0)}</strong> <strong class='color-f'>energy</strong></span>`
|
return `<span style = 'font-size:89%;'>after eating <strong class='color-block'>blocks</strong> <strong>+${(20 * couple).toFixed(0)}</strong> <strong class='color-f'>energy</strong></span>`
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
couplingChange(change = 0) {
|
couplingChange(change = 0) {
|
||||||
@@ -2523,7 +2525,7 @@ const m = {
|
|||||||
description: `use <strong class='color-f'>energy</strong> to <strong>deflect</strong> mobs
|
description: `use <strong class='color-f'>energy</strong> to <strong>deflect</strong> mobs
|
||||||
<br>generate <strong>6</strong> <strong class='color-f'>energy</strong> per second`, // <br><strong>100</strong> max <strong class='color-f'>energy</strong>
|
<br>generate <strong>6</strong> <strong class='color-f'>energy</strong> per second`, // <br><strong>100</strong> max <strong class='color-f'>energy</strong>
|
||||||
effect: () => {
|
effect: () => {
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
if (m.isHolding) {
|
if (m.isHolding) {
|
||||||
m.drawHold(m.holdingTarget);
|
m.drawHold(m.holdingTarget);
|
||||||
m.holding();
|
m.holding();
|
||||||
@@ -2621,7 +2623,7 @@ const m = {
|
|||||||
} else {
|
} else {
|
||||||
m.harmonicShield = m.harmonicAtomic
|
m.harmonicShield = m.harmonicAtomic
|
||||||
}
|
}
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
if (m.isHolding) {
|
if (m.isHolding) {
|
||||||
m.drawHold(m.holdingTarget);
|
m.drawHold(m.holdingTarget);
|
||||||
m.holding();
|
m.holding();
|
||||||
@@ -2801,7 +2803,7 @@ const m = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
const wave = Math.sin(m.cycle * 0.022);
|
const wave = Math.sin(m.cycle * 0.022);
|
||||||
m.fieldRange = 180 + 12 * wave + 100 * tech.isBigField
|
m.fieldRange = 180 + 12 * wave + 100 * tech.isBigField
|
||||||
m.fieldArc = 0.35 + 0.045 * wave + 0.065 * tech.isBigField //run calculateFieldThreshold after setting fieldArc, used for powerUp grab and mobPush with lookingAt(mob)
|
m.fieldArc = 0.35 + 0.045 * wave + 0.065 * tech.isBigField //run calculateFieldThreshold after setting fieldArc, used for powerUp grab and mobPush with lookingAt(mob)
|
||||||
@@ -2911,7 +2913,7 @@ const m = {
|
|||||||
m.fieldHarmReduction = 0.45; //55% reduction
|
m.fieldHarmReduction = 0.45; //55% reduction
|
||||||
m.fieldDrawRadius = 0;
|
m.fieldDrawRadius = 0;
|
||||||
|
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
m.airSpeedLimit = 125 //5 * player.mass * player.mass
|
m.airSpeedLimit = 125 //5 * player.mass * player.mass
|
||||||
m.FxAir = 0.016
|
m.FxAir = 0.016
|
||||||
if (m.isHolding) {
|
if (m.isHolding) {
|
||||||
@@ -3061,7 +3063,7 @@ const m = {
|
|||||||
effect: () => {
|
effect: () => {
|
||||||
m.fieldMeterColor = "#ff0"
|
m.fieldMeterColor = "#ff0"
|
||||||
m.eyeFillColor = m.fieldMeterColor
|
m.eyeFillColor = m.fieldMeterColor
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
if (m.energy > m.maxEnergy - 0.02 && m.fieldCDcycle < m.cycle && !input.field && bullet.length < 300 && (m.cycle % 2)) {
|
if (m.energy > m.maxEnergy - 0.02 && m.fieldCDcycle < m.cycle && !input.field && bullet.length < 300 && (m.cycle % 2)) {
|
||||||
if (simulation.molecularMode === 0) {
|
if (simulation.molecularMode === 0) {
|
||||||
if (tech.isSporeFlea) {
|
if (tech.isSporeFlea) {
|
||||||
@@ -3448,7 +3450,7 @@ const m = {
|
|||||||
|
|
||||||
Composite.add(engine.world, m.plasmaBall);
|
Composite.add(engine.world, m.plasmaBall);
|
||||||
// m.plasmaBall.startingVertices = m.plasmaBall.vertices.slice();
|
// m.plasmaBall.startingVertices = m.plasmaBall.vertices.slice();
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
if (m.isHolding) {
|
if (m.isHolding) {
|
||||||
m.drawHold(m.holdingTarget);
|
m.drawHold(m.holdingTarget);
|
||||||
m.holding();
|
m.holding();
|
||||||
@@ -3539,7 +3541,7 @@ const m = {
|
|||||||
m.plasmaBall.do()
|
m.plasmaBall.do()
|
||||||
}
|
}
|
||||||
} else if (tech.isExtruder) {
|
} else if (tech.isExtruder) {
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
b.isExtruderOn = false
|
b.isExtruderOn = false
|
||||||
if (m.isHolding) {
|
if (m.isHolding) {
|
||||||
m.drawHold(m.holdingTarget);
|
m.drawHold(m.holdingTarget);
|
||||||
@@ -3581,7 +3583,7 @@ const m = {
|
|||||||
ctx.stroke();
|
ctx.stroke();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
if (m.isHolding) {
|
if (m.isHolding) {
|
||||||
m.drawHold(m.holdingTarget);
|
m.drawHold(m.holdingTarget);
|
||||||
m.holding();
|
m.holding();
|
||||||
@@ -3608,7 +3610,7 @@ const m = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "time dilation",
|
name: "time dilation",
|
||||||
description: "use <strong class='color-f'>energy</strong> to <strong style='letter-spacing: 2px;'>stop time</strong><br><strong>+20%</strong> movement and <strong><em>fire rate</em></strong><br>generate <strong>14</strong> <strong class='color-f'>energy</strong> per second",
|
description: "use <strong class='color-f'>energy</strong> to <strong style='letter-spacing: 2px;'>stop time</strong><br><strong>+20%</strong> movement and <strong><em>fire rate</em></strong><br>generate <strong>12</strong> <strong class='color-f'>energy</strong> per second",
|
||||||
set() {
|
set() {
|
||||||
// m.fieldMeterColor = "#0fc"
|
// m.fieldMeterColor = "#0fc"
|
||||||
// m.fieldMeterColor = "#ff0"
|
// m.fieldMeterColor = "#ff0"
|
||||||
@@ -3645,7 +3647,7 @@ const m = {
|
|||||||
if (tech.isRewindField) {
|
if (tech.isRewindField) {
|
||||||
this.rewindCount = 0
|
this.rewindCount = 0
|
||||||
m.grabPowerUpRange2 = 300000
|
m.grabPowerUpRange2 = 300000
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
// console.log(m.fieldCDcycle)
|
// console.log(m.fieldCDcycle)
|
||||||
m.grabPowerUp();
|
m.grabPowerUp();
|
||||||
// //grab power ups
|
// //grab power ups
|
||||||
@@ -3741,7 +3743,7 @@ const m = {
|
|||||||
} else {
|
} else {
|
||||||
m.fieldFire = true;
|
m.fieldFire = true;
|
||||||
m.isBodiesAsleep = false;
|
m.isBodiesAsleep = false;
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
if (m.isHolding) {
|
if (m.isHolding) {
|
||||||
m.wakeCheck();
|
m.wakeCheck();
|
||||||
m.drawHold(m.holdingTarget);
|
m.drawHold(m.holdingTarget);
|
||||||
@@ -3808,7 +3810,7 @@ const m = {
|
|||||||
m.isSneakAttack = true;
|
m.isSneakAttack = true;
|
||||||
m.sneakAttackCycle = 0;
|
m.sneakAttackCycle = 0;
|
||||||
m.enterCloakCycle = 0;
|
m.enterCloakCycle = 0;
|
||||||
m.drawCloak = function() {
|
m.drawCloak = function () {
|
||||||
m.fieldPhase += 0.007
|
m.fieldPhase += 0.007
|
||||||
const wiggle = 0.15 * Math.sin(m.fieldPhase * 0.5)
|
const wiggle = 0.15 * Math.sin(m.fieldPhase * 0.5)
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
@@ -3822,7 +3824,7 @@ const m = {
|
|||||||
ctx.globalCompositeOperation = "source-over";
|
ctx.globalCompositeOperation = "source-over";
|
||||||
ctx.clip();
|
ctx.clip();
|
||||||
}
|
}
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
if (m.isHolding) {
|
if (m.isHolding) {
|
||||||
m.drawHold(m.holdingTarget);
|
m.drawHold(m.holdingTarget);
|
||||||
m.holding();
|
m.holding();
|
||||||
@@ -4075,7 +4077,7 @@ const m = {
|
|||||||
//<br><strong class='color-block'>blocks</strong> can't <strong>collide</strong> with <strong>intangible</strong> mobs
|
//<br><strong class='color-block'>blocks</strong> can't <strong>collide</strong> with <strong>intangible</strong> mobs
|
||||||
//field <strong>radius</strong> decreases out of <strong>line of sight</strong>
|
//field <strong>radius</strong> decreases out of <strong>line of sight</strong>
|
||||||
//<strong>unlock</strong> <strong class='color-m'>tech</strong> from other <strong class='color-f'>fields</strong>
|
//<strong>unlock</strong> <strong class='color-m'>tech</strong> from other <strong class='color-f'>fields</strong>
|
||||||
description: "use <strong class='color-f'>energy</strong> to guide <strong class='color-block'>blocks</strong><br><strong class='color-m'>tech</strong>, <strong class='color-f'>fields</strong>, and <strong class='color-g'>guns</strong> have <strong>+1</strong> <strong>choice</strong><br>generate <strong>6</strong> <strong class='color-f'>energy</strong> per second",
|
description: "use <strong class='color-f'>energy</strong> to guide <strong class='color-block'>blocks</strong><br><strong class='color-m'>tech</strong>, <strong class='color-f'>fields</strong>, and <strong class='color-g'>guns</strong> have <strong>+1</strong> <strong>choice</strong><br>generate <strong>10</strong> <strong class='color-f'>energy</strong> per second",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
m.fieldMeterColor = "#333"
|
m.fieldMeterColor = "#333"
|
||||||
m.eyeFillColor = m.fieldMeterColor
|
m.eyeFillColor = m.fieldMeterColor
|
||||||
@@ -4092,7 +4094,7 @@ const m = {
|
|||||||
m.fieldOn = false;
|
m.fieldOn = false;
|
||||||
m.fieldRadius = 0;
|
m.fieldRadius = 0;
|
||||||
m.drop();
|
m.drop();
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
if (input.field) {
|
if (input.field) {
|
||||||
if (m.fieldCDcycle < m.cycle) {
|
if (m.fieldCDcycle < m.cycle) {
|
||||||
const scale = 25
|
const scale = 25
|
||||||
@@ -4276,7 +4278,7 @@ const m = {
|
|||||||
//<strong class='color-worm'>wormholes</strong> attract <strong class='color-block'>blocks</strong> and power ups<br>
|
//<strong class='color-worm'>wormholes</strong> attract <strong class='color-block'>blocks</strong> and power ups<br>
|
||||||
description: "use <strong class='color-f'>energy</strong> to <strong>tunnel</strong> through a <strong class='color-worm'>wormhole</strong><br><strong>+3%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong><br>generate <strong>6</strong> <strong class='color-f'>energy</strong> per second", //<br>bullets may also traverse <strong class='color-worm'>wormholes</strong>
|
description: "use <strong class='color-f'>energy</strong> to <strong>tunnel</strong> through a <strong class='color-worm'>wormhole</strong><br><strong>+3%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong><br>generate <strong>6</strong> <strong class='color-f'>energy</strong> per second", //<br>bullets may also traverse <strong class='color-worm'>wormholes</strong>
|
||||||
drain: 0,
|
drain: 0,
|
||||||
effect: function() {
|
effect: function () {
|
||||||
m.fieldMeterColor = "#bbf" //"#0c5"
|
m.fieldMeterColor = "#bbf" //"#0c5"
|
||||||
m.eyeFillColor = m.fieldMeterColor
|
m.eyeFillColor = m.fieldMeterColor
|
||||||
|
|
||||||
@@ -4284,7 +4286,7 @@ const m = {
|
|||||||
m.fieldRange = 0
|
m.fieldRange = 0
|
||||||
powerUps.setDupChance(); //needed after adjusting duplication chance
|
powerUps.setDupChance(); //needed after adjusting duplication chance
|
||||||
|
|
||||||
m.hold = function() {
|
m.hold = function () {
|
||||||
// m.hole = { //this is reset with each new field, but I'm leaving it here for reference
|
// m.hole = { //this is reset with each new field, but I'm leaving it here for reference
|
||||||
// isOn: false,
|
// isOn: false,
|
||||||
// isReady: true,
|
// isReady: true,
|
||||||
@@ -4609,6 +4611,40 @@ const m = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if (true && m.energy > 0.5) { //teleport away low mass mobs
|
||||||
|
// // && !(m.cycle % 1)
|
||||||
|
// const hit = Matter.Query.region(mob, {
|
||||||
|
// min: {
|
||||||
|
// x: m.pos.x - 80,
|
||||||
|
// y: m.pos.y - 80
|
||||||
|
// },
|
||||||
|
// max: {
|
||||||
|
// x: m.pos.x + 80,
|
||||||
|
// y: m.pos.y + 160
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
|
||||||
|
// // find incoming mob with low mass
|
||||||
|
// for (let i = 0; i < hit.length; i++) {
|
||||||
|
// if (hit[i].mass < 4 && m.energy > hit[i].mass * 0.06) {
|
||||||
|
// //is the mob moving towards the player?
|
||||||
|
|
||||||
|
// // console.log('found one', hit[i].mass)
|
||||||
|
// const unit = Vector.normalise(hit[i].velocity)
|
||||||
|
// const jump = Vector.mult(unit, 200)
|
||||||
|
// const where = Vector.add(hit[i].position, jump)
|
||||||
|
// if (Matter.Query.ray(map, hit[i].position, where).length === 0) { // check if space 180 from mob is clear of body and map
|
||||||
|
// // m.energy -= hit[i].mass * 0.06
|
||||||
|
// // m.fieldCDcycle = m.cycle + 30;
|
||||||
|
// simulation.drawList.push({ x: hit[i].position.x, y: hit[i].position.y, radius: 20, color: "#fff", time: 16 });
|
||||||
|
// Matter.Body.setPosition(hit[i], where);
|
||||||
|
// simulation.drawList.push({ x: hit[i].position.x, y: hit[i].position.y, radius: 20, color: "#fff", time: 16 });
|
||||||
|
// }
|
||||||
|
// // break
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
// if (input.field && m.fieldCDcycle < m.cycle) { //not hold but field button is pressed
|
// if (input.field && m.fieldCDcycle < m.cycle) { //not hold but field button is pressed
|
||||||
// const justPastMouse = Vector.add(Vector.mult(Vector.normalise(Vector.sub(simulation.mouseInGame, m.pos)), 50), simulation.mouseInGame)
|
// const justPastMouse = Vector.add(Vector.mult(Vector.normalise(Vector.sub(simulation.mouseInGame, m.pos)), 50), simulation.mouseInGame)
|
||||||
@@ -5042,7 +5078,7 @@ const m = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//fix collisions
|
//fix collisions
|
||||||
collisionChecks = function(event) {
|
collisionChecks = function (event) {
|
||||||
const pairs = event.pairs;
|
const pairs = event.pairs;
|
||||||
for (let i = 0, j = pairs.length; i != j; i++) {
|
for (let i = 0, j = pairs.length; i != j; i++) {
|
||||||
//mob + (player,bullet,body) collisions
|
//mob + (player,bullet,body) collisions
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
let text = '<span style="position:relative;">'
|
let text = '<span style="position:relative;">'
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
text += `<div class="research-circle" style="position:absolute; top:1.5px; left:${i*8}px;"></div>`
|
text += `<div class="research-circle" style="position:absolute; top:1.5px; left:${i * 8}px;"></div>`
|
||||||
}
|
}
|
||||||
text += '</span> '
|
text += '</span> '
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
@@ -90,7 +90,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
let text = '<span style="position:relative;">'
|
let text = '<span style="position:relative;">'
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
text += `<div class="ammo-circle" style="position:absolute; top:1.5px; left:${i*8}px;"></div>`
|
text += `<div class="ammo-circle" style="position:absolute; top:1.5px; left:${i * 8}px;"></div>`
|
||||||
}
|
}
|
||||||
text += '</span> '
|
text += '</span> '
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
@@ -106,7 +106,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
let text = '<span style="position:relative;">'
|
let text = '<span style="position:relative;">'
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
text += `<div class="heal-circle-energy" style="position:absolute; top:1px; left:${i*10}px;"></div>`
|
text += `<div class="heal-circle-energy" style="position:absolute; top:1px; left:${i * 10}px;"></div>`
|
||||||
}
|
}
|
||||||
text += '</span> '
|
text += '</span> '
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
@@ -120,7 +120,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
let text = '<span style="position:relative;">'
|
let text = '<span style="position:relative;">'
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
text += `<div class="heal-circle" style="position:absolute; top:1px; left:${i*10}px;"></div>`
|
text += `<div class="heal-circle" style="position:absolute; top:1px; left:${i * 10}px;"></div>`
|
||||||
}
|
}
|
||||||
text += '</span> '
|
text += '</span> '
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
@@ -139,7 +139,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
let text = '<span style="position:relative;">'
|
let text = '<span style="position:relative;">'
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
text += `<div class="coupling-circle" style="position:absolute; top:1.5px; left:${i*6}px;"></div>`
|
text += `<div class="coupling-circle" style="position:absolute; top:1.5px; left:${i * 6}px;"></div>`
|
||||||
}
|
}
|
||||||
text += '</span> '
|
text += '</span> '
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
@@ -154,7 +154,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
let text = '<span style="position:relative;">'
|
let text = '<span style="position:relative;">'
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
text += `<div class="boost-circle" style="position:absolute; top:1.5px; left:${i*8}px;"></div>`
|
text += `<div class="boost-circle" style="position:absolute; top:1.5px; left:${i * 8}px;"></div>`
|
||||||
}
|
}
|
||||||
text += '</span> '
|
text += '</span> '
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
@@ -164,7 +164,7 @@ const powerUps = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
totalPowerUps: 0, //used for tech that count power ups at the end of a level
|
totalPowerUps: 0, //used for tech that count power ups at the end of a level
|
||||||
do() {},
|
do() { },
|
||||||
setDupChance() {
|
setDupChance() {
|
||||||
if (tech.duplicationChance() > 0 || tech.isAnthropicTech) {
|
if (tech.duplicationChance() > 0 || tech.isAnthropicTech) {
|
||||||
if (tech.isPowerUpsVanish) {
|
if (tech.isPowerUpsVanish) {
|
||||||
@@ -639,6 +639,8 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
cancelText(type) {
|
cancelText(type) {
|
||||||
|
// if (localSettings.isHideImages) { }
|
||||||
|
|
||||||
if (tech.isSuperDeterminism) {
|
if (tech.isSuperDeterminism) {
|
||||||
return `<div></div>`
|
return `<div></div>`
|
||||||
} else if (tech.isCancelTech) {
|
} else if (tech.isCancelTech) {
|
||||||
@@ -655,18 +657,54 @@ const powerUps = {
|
|||||||
text += `<div onclick="powerUps.research.use('${type}')" class='research-card'>` // style = "margin-left: 192px; margin-right: -192px;"
|
text += `<div onclick="powerUps.research.use('${type}')" class='research-card'>` // style = "margin-left: 192px; margin-right: -192px;"
|
||||||
tech.junkResearchNumber = Math.ceil(4 * Math.random())
|
tech.junkResearchNumber = Math.ceil(4 * Math.random())
|
||||||
text += `<div><div> <span style="position:relative;">`
|
text += `<div><div> <span style="position:relative;">`
|
||||||
for (let i = 0; i < tech.junkResearchNumber; i++) text += `<div class="circle-grid junk" style="position:absolute; top:0; left:${15*i}px ;opacity:0.8; border: 1px #fff solid;width: 1.15em;height: 1.15em;"></div>`
|
for (let i = 0; i < tech.junkResearchNumber; i++) {
|
||||||
|
text += `<div class="circle-grid junk" style="position:absolute; top:0; left:${15 * i}px ;opacity:0.8; border: 1px #fff solid;width: 1.15em;height: 1.15em;"></div>`
|
||||||
|
}
|
||||||
text += `</span> <span class='research-select'>pseudoscience</span></div></div></div>`
|
text += `</span> <span class='research-select'>pseudoscience</span></div></div></div>`
|
||||||
} else if (powerUps.research.count > 0) {
|
} else if (powerUps.research.count > 0) {
|
||||||
text += `<div onclick="powerUps.research.use('${type}')" class='research-card' >` // style = "margin-left: 192px; margin-right: -192px;"
|
text += `<div onclick="powerUps.research.use('${type}')" class='research-card' >` // style = "margin-left: 192px; margin-right: -192px;"
|
||||||
text += `<div><div><span style="position:relative;">`
|
text += `<div><div><span style="position:relative;">`
|
||||||
for (let i = 0, len = Math.min(powerUps.research.count, 30); i < len; i++) text += `<div class="circle-grid research" style="font-size:0.82em; position:absolute; top:0; left:${(18 - len*0.21)*i}px ;opacity:0.8; border: 1px #fff solid;"></div>`
|
for (let i = 0, len = Math.min(powerUps.research.count, 30); i < len; i++) text += `<div class="circle-grid research" style="font-size:0.82em; position:absolute; top:0; left:${(18 - len * 0.21) * i}px ;opacity:0.8; border: 1px #fff solid;"></div>`
|
||||||
text += `</span> <span class='research-select'>${tech.isResearchReality?"<span class='alt'>alternate reality</span>": "research"}</span></div></div></div>`
|
text += `</span> <span class='research-select'>${tech.isResearchReality ? "<span class='alt'>alternate reality</span>" : "research"}</span></div></div></div>`
|
||||||
} else {
|
} else {
|
||||||
text += `<div></div>`
|
text += `<div></div>`
|
||||||
}
|
}
|
||||||
return text
|
return text
|
||||||
},
|
},
|
||||||
|
researchAndCancelText(type) {
|
||||||
|
let text = `<div class='research-cancel'>`
|
||||||
|
if (type === "entanglement") {
|
||||||
|
text += `<span class='research-card entanglement flipX' style="width: 275px;"><span style="letter-spacing: 6px;">entanglement</span></span>` //‌
|
||||||
|
} else if (tech.isJunkResearch && powerUps.research.currentRerollCount < 3) {
|
||||||
|
text += `<span onclick="powerUps.research.use('${type}')" class='research-card' style="width: 275px;float: left;">` // style = "margin-left: 192px; margin-right: -192px;"
|
||||||
|
tech.junkResearchNumber = Math.ceil(4 * Math.random())
|
||||||
|
text += `<div><div><span style="position:relative;">`
|
||||||
|
for (let i = 0, len = tech.junkResearchNumber; i < len; i++) {
|
||||||
|
text += `<div class="circle-grid junk" style="position:absolute; top:0; left:${15 * i}px ;opacity:0.8; border: 1px #fff solid;width: 1.15em;height: 1.15em;"></div>`
|
||||||
|
}
|
||||||
|
text += `</span> <span class='research-select'>${tech.isResearchReality ? "<span class='alt'>alternate reality</span>" : "research"}</span></div></div></span>`
|
||||||
|
} else if (powerUps.research.count > 0) {
|
||||||
|
text += `<span onclick="powerUps.research.use('${type}')" class='research-card' style="width: 275px;float: left;">` // style = "margin-left: 192px; margin-right: -192px;"
|
||||||
|
text += `<div><div><span style="position:relative;">`
|
||||||
|
let researchCap = 18
|
||||||
|
if (tech.isCancelTech) researchCap -= 2
|
||||||
|
if (canvas.width < 1951) researchCap -= 3
|
||||||
|
if (canvas.width < 1711) researchCap -= 4
|
||||||
|
for (let i = 0, len = Math.min(powerUps.research.count, researchCap); i < len; i++) {
|
||||||
|
text += `<div class="circle-grid research" style="font-size:0.82em; position:absolute; top:0; left:${(18 - len * 0.21) * i}px ;opacity:0.8; border: 1px #fff solid;"></div>`
|
||||||
|
}
|
||||||
|
text += `</span> <span class='research-select'>${tech.isResearchReality ? "<span class='alt'>alternate reality</span>" : "research"}</span></div></div></span>`
|
||||||
|
} else {
|
||||||
|
text += `<span class='research-card' style="width: 275px;float: right; background-color: #bbb;">research</span>` //‌
|
||||||
|
}
|
||||||
|
if (tech.isCancelTech) {
|
||||||
|
text += `<span class='cancel-card' onclick='powerUps.endDraft("${type}",true)' style="width: 115px;float: right;font-size:0.9em;padding-top:5px">randomize</span>`
|
||||||
|
} else {
|
||||||
|
text += `<span class='cancel-card' onclick='powerUps.endDraft("${type}",true)' style="width: 95px;float: right;">cancel</span>`
|
||||||
|
}
|
||||||
|
|
||||||
|
return text + "</div>"
|
||||||
|
},
|
||||||
buildColumns(totalChoices, type) {
|
buildColumns(totalChoices, type) {
|
||||||
let width
|
let width
|
||||||
if (canvas.width < 1710) {
|
if (canvas.width < 1710) {
|
||||||
@@ -676,18 +714,17 @@ const powerUps = {
|
|||||||
} else {
|
} else {
|
||||||
width = "384px"
|
width = "384px"
|
||||||
}
|
}
|
||||||
// if (canvas.width < 1500) {
|
|
||||||
// width = "340px"
|
|
||||||
// } else if (canvas.width < 1950) {
|
|
||||||
// width = "360px"
|
|
||||||
// } else {
|
|
||||||
// width = "384px"
|
|
||||||
// }
|
|
||||||
let text = ""
|
let text = ""
|
||||||
if (totalChoices === 1 || localSettings.isHideImages || canvas.width < 1200) {
|
if (localSettings.isHideImages) {
|
||||||
document.getElementById("choose-grid").style.gridTemplateColumns = width
|
document.getElementById("choose-grid").style.gridTemplateColumns = width
|
||||||
text += powerUps.cancelText(type)
|
text += powerUps.researchAndCancelText(type)
|
||||||
text += powerUps.researchText(type)
|
} else if (totalChoices === 1 || canvas.width < 1200) {
|
||||||
|
document.getElementById("choose-grid").style.gridTemplateColumns = width
|
||||||
|
text += powerUps.researchAndCancelText(type)
|
||||||
|
// console.log('hi')
|
||||||
|
// text += powerUps.cancelText(type)
|
||||||
|
// text += powerUps.researchText(type)
|
||||||
} else if (totalChoices === 2) {
|
} else if (totalChoices === 2) {
|
||||||
document.getElementById("choose-grid").style.gridTemplateColumns = `repeat(2, ${width})`
|
document.getElementById("choose-grid").style.gridTemplateColumns = `repeat(2, ${width})`
|
||||||
text += powerUps.researchText(type)
|
text += powerUps.researchText(type)
|
||||||
@@ -727,14 +764,14 @@ const powerUps = {
|
|||||||
${b.guns[choose].description}</div></div>`
|
${b.guns[choose].description}</div></div>`
|
||||||
},
|
},
|
||||||
fieldText(choose, click) {
|
fieldText(choose, click) {
|
||||||
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/field/${m.fieldUpgrades[choose].name}${choose === 0 ? Math.floor(Math.random()*10) : ""}.webp');"`
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/field/${m.fieldUpgrades[choose].name}${choose === 0 ? Math.floor(Math.random() * 10) : ""}.webp');"`
|
||||||
return `<div class="choose-grid-module card-background" onclick="${click}" onauxclick="${click}"${style}>
|
return `<div class="choose-grid-module card-background" onclick="${click}" onauxclick="${click}"${style}>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
<div class="grid-title"><div class="circle-grid field"></div> ${m.fieldUpgrades[choose].name}</div>
|
<div class="grid-title"><div class="circle-grid field"></div> ${m.fieldUpgrades[choose].name}</div>
|
||||||
${m.fieldUpgrades[choose].description}</div></div>`
|
${m.fieldUpgrades[choose].description}</div></div>`
|
||||||
},
|
},
|
||||||
techText(choose, click) {
|
techText(choose, click) {
|
||||||
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
const style = localSettings.isHideImages || tech.tech[choose].isLore ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
const style = localSettings.isHideImages || tech.tech[choose].isLore ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
||||||
return `<div class="choose-grid-module card-background" onclick="${click}" onauxclick="${click}"${style}>
|
return `<div class="choose-grid-module card-background" onclick="${click}" onauxclick="${click}"${style}>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
@@ -742,7 +779,7 @@ const powerUps = {
|
|||||||
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
||||||
},
|
},
|
||||||
skinTechText(choose, click) {
|
skinTechText(choose, click) {
|
||||||
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
||||||
return `<div class="choose-grid-module card-background" onclick="${click}" onauxclick="${click}"${style}>
|
return `<div class="choose-grid-module card-background" onclick="${click}" onauxclick="${click}"${style}>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
@@ -755,7 +792,7 @@ const powerUps = {
|
|||||||
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
||||||
},
|
},
|
||||||
fieldTechText(choose, click) {
|
fieldTechText(choose, click) {
|
||||||
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
||||||
return `<div class="choose-grid-module card-background" onclick="${click}" onauxclick="${click}"${style}>
|
return `<div class="choose-grid-module card-background" onclick="${click}" onauxclick="${click}"${style}>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
@@ -768,7 +805,7 @@ const powerUps = {
|
|||||||
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
||||||
},
|
},
|
||||||
gunTechText(choose, click) {
|
gunTechText(choose, click) {
|
||||||
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
||||||
return `<div class="choose-grid-module card-background" onclick="${click}" onauxclick="${click}"${style}>
|
return `<div class="choose-grid-module card-background" onclick="${click}" onauxclick="${click}"${style}>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
@@ -781,7 +818,7 @@ const powerUps = {
|
|||||||
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
||||||
},
|
},
|
||||||
junkTechText(choose, click) {
|
junkTechText(choose, click) {
|
||||||
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-size: contain;background-repeat: no-repeat;background-image: url('img/junk.webp');"`
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-size: contain;background-repeat: no-repeat;background-image: url('img/junk.webp');"`
|
||||||
if (!localSettings.isHideImages) {
|
if (!localSettings.isHideImages) {
|
||||||
setTimeout(() => { //delay so that the html element exists
|
setTimeout(() => { //delay so that the html element exists
|
||||||
@@ -873,7 +910,7 @@ const powerUps = {
|
|||||||
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
||||||
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div>${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div>${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
||||||
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
||||||
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
||||||
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
@@ -938,7 +975,7 @@ const powerUps = {
|
|||||||
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
||||||
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div>${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div>${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
||||||
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
||||||
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
||||||
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
@@ -1021,7 +1058,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
removeOption(choose) //move from future options pool to avoid repeats on this selection
|
removeOption(choose) //move from future options pool to avoid repeats on this selection
|
||||||
tech.tech[choose].isRecentlyShown = true //this flag prevents this option from being shown the next time you pick up a tech power up
|
tech.tech[choose].isRecentlyShown = true //this flag prevents this option from being shown the next time you pick up a tech power up
|
||||||
const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
if (tech.tech[choose].isFieldTech) {
|
if (tech.tech[choose].isFieldTech) {
|
||||||
text += powerUps.fieldTechText(choose, `powerUps.choose('tech',${choose})`)
|
text += powerUps.fieldTechText(choose, `powerUps.choose('tech',${choose})`)
|
||||||
} else if (tech.tech[choose].isGunTech) {
|
} else if (tech.tech[choose].isGunTech) {
|
||||||
@@ -1045,7 +1082,7 @@ const powerUps = {
|
|||||||
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
||||||
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div> ${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div> ${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
||||||
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
||||||
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
||||||
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
@@ -1162,7 +1199,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
for (let i = 0; i < localSettings.entanglement.techIndexes.length; i++) { //add tech
|
for (let i = 0; i < localSettings.entanglement.techIndexes.length; i++) { //add tech
|
||||||
let choose = localSettings.entanglement.techIndexes[i]
|
let choose = localSettings.entanglement.techIndexes[i]
|
||||||
const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
|
|
||||||
if (choose === null || tech.tech[choose].count + 1 > tech.tech[choose].maxCount || !tech.tech[choose].allowed()) {
|
if (choose === null || tech.tech[choose].count + 1 > tech.tech[choose].maxCount || !tech.tech[choose].allowed()) {
|
||||||
// text += `<div class="choose-grid-module" style = "background-color: #efeff5; border: 0px; opacity:0.5; font-size: 60%; line-height: 130%; margin: 1px; padding-top: 6px; padding-bottom: 6px;"><div class="grid-title">${tech.tech[choose].name} <span style = "color: #aaa;font-weight: normal;font-size:80%;">- incoherent</span></div></div>`
|
// text += `<div class="choose-grid-module" style = "background-color: #efeff5; border: 0px; opacity:0.5; font-size: 60%; line-height: 130%; margin: 1px; padding-top: 6px; padding-bottom: 6px;"><div class="grid-title">${tech.tech[choose].name} <span style = "color: #aaa;font-weight: normal;font-size:80%;">- incoherent</span></div></div>`
|
||||||
|
|||||||
@@ -1137,31 +1137,16 @@ const simulation = {
|
|||||||
// },
|
// },
|
||||||
checks() {
|
checks() {
|
||||||
if (!(m.cycle % 15)) { //4 times a second
|
if (!(m.cycle % 15)) { //4 times a second
|
||||||
//update defense bar
|
const defense = m.defense() //update defense bar
|
||||||
const defense = m.defense()
|
|
||||||
if (m.lastCalculatedDefense !== defense) {
|
if (m.lastCalculatedDefense !== defense) {
|
||||||
document.getElementById("defense-bar").style.width = Math.floor(300 * m.maxHealth * (1 - defense)) + "px";
|
document.getElementById("defense-bar").style.width = Math.floor(300 * m.maxHealth * (1 - defense)) + "px";
|
||||||
|
|
||||||
// if (m.lastCalculatedDefense === 1) document.getElementById("defense-bar").style.display = "inline"
|
|
||||||
// if (defense === 1) document.getElementById("defense-bar").style.display = "none"
|
|
||||||
// Math.pow(m.defense(), 0.13)
|
|
||||||
m.lastCalculatedDefense = defense
|
m.lastCalculatedDefense = defense
|
||||||
// console.log(defense)
|
|
||||||
}
|
}
|
||||||
|
const damage = tech.damageFromTech() //update damage bar
|
||||||
//update damage bar
|
|
||||||
const damage = tech.damageFromTech()
|
|
||||||
if (m.lastCalculatedDamage !== damage) {
|
if (m.lastCalculatedDamage !== damage) {
|
||||||
canvas.width
|
document.getElementById("damage-bar").style.height = Math.floor(Math.atan(0.25 * damage - 0.25) / 1.65 * canvas.height) + "px";
|
||||||
// document.getElementById("damage-bar").style.width = Math.floor(Math.atan(damage - 1) / 6.28 * canvas.width) + "px";
|
|
||||||
document.getElementById("damage-bar").style.height = Math.floor(Math.atan(damage - 1) / 3.14 * canvas.height) + "px";
|
|
||||||
|
|
||||||
m.lastCalculatedDamage = damage
|
m.lastCalculatedDamage = damage
|
||||||
console.log(damage)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
if (!(m.cycle % 60)) { //once a second
|
if (!(m.cycle % 60)) { //once a second
|
||||||
//energy overfill
|
//energy overfill
|
||||||
@@ -1211,7 +1196,17 @@ const simulation = {
|
|||||||
if (isNaN(player.position.x)) m.death();
|
if (isNaN(player.position.x)) m.death();
|
||||||
if (m.lastKillCycle + 300 > m.cycle) { //effects active for 5 seconds after killing a mob
|
if (m.lastKillCycle + 300 > m.cycle) { //effects active for 5 seconds after killing a mob
|
||||||
if (tech.isEnergyRecovery && m.immuneCycle < m.cycle) m.energy += m.maxEnergy * 0.05
|
if (tech.isEnergyRecovery && m.immuneCycle < m.cycle) m.energy += m.maxEnergy * 0.05
|
||||||
if (tech.isHealthRecovery) m.addHealth(0.005 * m.maxHealth)
|
if (tech.isHealthRecovery) {
|
||||||
|
const heal = 0.005 * m.maxHealth
|
||||||
|
m.addHealth(heal)
|
||||||
|
simulation.drawList.push({ //add dmg to draw queue
|
||||||
|
x: m.pos.x,
|
||||||
|
y: m.pos.y,
|
||||||
|
radius: Math.sqrt(heal) * 150,
|
||||||
|
color: "rgba(0,255,200,0.6)",
|
||||||
|
time: 8
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(m.cycle % 420)) { //once every 7 seconds
|
if (!(m.cycle % 420)) { //once every 7 seconds
|
||||||
|
|||||||
526
js/spawn.js
232
js/tech.js
@@ -242,7 +242,7 @@ const tech = {
|
|||||||
if (tech.isDamageForGuns) dmg *= 1 + 0.22 * Math.max(0, b.inventory.length - 1)
|
if (tech.isDamageForGuns) dmg *= 1 + 0.22 * Math.max(0, b.inventory.length - 1)
|
||||||
if (tech.isOneGun && b.inventory.length < 2) dmg *= 1.25
|
if (tech.isOneGun && b.inventory.length < 2) dmg *= 1.25
|
||||||
if (tech.isAcidDmg && m.health > 1) dmg *= 1.35;
|
if (tech.isAcidDmg && m.health > 1) dmg *= 1.35;
|
||||||
if (tech.isRerollDamage) dmg *= 1 + 0.03 * powerUps.research.count
|
if (tech.isRerollDamage) dmg *= 1 + Math.max(0, 0.03 * powerUps.research.count)
|
||||||
if (tech.isBotDamage) dmg *= 1 + 0.06 * b.totalBots()
|
if (tech.isBotDamage) dmg *= 1 + 0.06 * b.totalBots()
|
||||||
if (tech.restDamage > 1 && player.speed < 1) dmg *= tech.restDamage
|
if (tech.restDamage > 1 && player.speed < 1) dmg *= tech.restDamage
|
||||||
if (tech.isLowEnergyDamage) dmg *= 1 + 0.7 * Math.max(0, 1 - m.energy)
|
if (tech.isLowEnergyDamage) dmg *= 1 + 0.7 * Math.max(0, 1 - m.energy)
|
||||||
@@ -479,7 +479,7 @@ const tech = {
|
|||||||
// description: "<strong>charge</strong>, <strong>parity</strong>, and <strong>time</strong> invert to undo <strong class='color-defense'>defense</strong><br><strong class='color-rewind'>rewind</strong> <strong>(1.5—5)</strong> seconds for <strong>(66—220)</strong> <strong class='color-f'>energy</strong>",
|
// description: "<strong>charge</strong>, <strong>parity</strong>, and <strong>time</strong> invert to undo <strong class='color-defense'>defense</strong><br><strong class='color-rewind'>rewind</strong> <strong>(1.5—5)</strong> seconds for <strong>(66—220)</strong> <strong class='color-f'>energy</strong>",
|
||||||
// description: "after losing <strong class='color-h'>health</strong>, if you have <strong>full</strong> <strong class='color-f'>energy</strong><br><strong>rewind</strong> time for <strong>44</strong> <strong class='color-f'>energy</strong> per second",
|
// description: "after losing <strong class='color-h'>health</strong>, if you have <strong>full</strong> <strong class='color-f'>energy</strong><br><strong>rewind</strong> time for <strong>44</strong> <strong class='color-f'>energy</strong> per second",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `after losing <strong class='color-h'>health</strong>, if you have <strong>${(100*Math.min(100,m.maxEnergy)).toFixed(0)}</strong> <strong class='color-f'>energy</strong><br><strong>rewind</strong> time for <strong>40</strong> <strong class='color-f'>energy</strong> per second`
|
return `after losing <strong class='color-h'>health</strong>, if you have <strong>${(100 * Math.min(100, m.maxEnergy)).toFixed(0)}</strong> <strong class='color-f'>energy</strong><br><strong>rewind</strong> time for <strong>40</strong> <strong class='color-f'>energy</strong> per second`
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -614,7 +614,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "applied science",
|
name: "applied science",
|
||||||
@@ -659,12 +659,12 @@ const tech = {
|
|||||||
}
|
}
|
||||||
simulation.boldActiveGunHUD();
|
simulation.boldActiveGunHUD();
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "arsenal",
|
name: "arsenal",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `<strong>+22%</strong> <strong class='color-d'>damage</strong> per unequipped <strong class='color-g'>gun</strong> <em>(${(22 * Math.max(0, b.inventory.length-1)).toFixed(0)}%)</em>`
|
return `<strong>+22%</strong> <strong class='color-d'>damage</strong> per unequipped <strong class='color-g'>gun</strong> <em>(${(22 * Math.max(0, b.inventory.length - 1)).toFixed(0)}%)</em>`
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -682,7 +682,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "active cooling",
|
name: "active cooling",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `<strong>+28%</strong> <em>fire rate</em> per unequipped <strong class='color-g'>gun</strong> <em>(${(28 * Math.max(0, b.inventory.length-1)).toFixed(0)}%)</em>`
|
return `<strong>+28%</strong> <em>fire rate</em> per unequipped <strong class='color-g'>gun</strong> <em>(${(28 * Math.max(0, b.inventory.length - 1)).toFixed(0)}%)</em>`
|
||||||
}, //<br>but not including your equipped <strong class='color-g'>gun</strong>` },
|
}, //<br>but not including your equipped <strong class='color-g'>gun</strong>` },
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -2119,7 +2119,7 @@ const tech = {
|
|||||||
description: `toggle <strong class="color-flop">ON</strong> and <strong class="color-flop">OFF</strong> after a <strong>collision</strong><br>unlock advanced <strong class='color-m'>tech</strong> that runs if <strong class="color-flop">ON</strong>`,
|
description: `toggle <strong class="color-flop">ON</strong> and <strong class="color-flop">OFF</strong> after a <strong>collision</strong><br>unlock advanced <strong class='color-m'>tech</strong> that runs if <strong class="color-flop">ON</strong>`,
|
||||||
nameInfo: "<span id = 'tech-flip-flop'></span>",
|
nameInfo: "<span id = 'tech-flip-flop'></span>",
|
||||||
addNameInfo() {
|
addNameInfo() {
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
if (document.getElementById("tech-flip-flop")) {
|
if (document.getElementById("tech-flip-flop")) {
|
||||||
if (tech.isFlipFlopOn) {
|
if (tech.isFlipFlopOn) {
|
||||||
document.getElementById("tech-flip-flop").innerHTML = ` = <strong>ON</strong>`
|
document.getElementById("tech-flip-flop").innerHTML = ` = <strong>ON</strong>`
|
||||||
@@ -2271,7 +2271,7 @@ const tech = {
|
|||||||
description: `toggle <strong class="color-flop">ON</strong> and <strong class="color-flop">OFF</strong> after picking up a <strong>power up</strong><br>unlock advanced <strong class='color-m'>tech</strong> that runs if <strong class="color-flop">ON</strong>`,
|
description: `toggle <strong class="color-flop">ON</strong> and <strong class="color-flop">OFF</strong> after picking up a <strong>power up</strong><br>unlock advanced <strong class='color-m'>tech</strong> that runs if <strong class="color-flop">ON</strong>`,
|
||||||
nameInfo: "<span id = 'tech-switch'></span>",
|
nameInfo: "<span id = 'tech-switch'></span>",
|
||||||
addNameInfo() {
|
addNameInfo() {
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
if (document.getElementById("tech-switch")) {
|
if (document.getElementById("tech-switch")) {
|
||||||
if (tech.isFlipFlopOn) {
|
if (tech.isFlipFlopOn) {
|
||||||
document.getElementById("tech-switch").innerHTML = ` = <strong>ON</strong>`
|
document.getElementById("tech-switch").innerHTML = ` = <strong>ON</strong>`
|
||||||
@@ -2363,7 +2363,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "first derivative",
|
name: "first derivative",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `while your <strong>first</strong> <strong class='color-g'>gun</strong> is equipped<br><strong>+15%</strong> <strong class='color-defense'>defense</strong> per <strong class='color-g'>gun</strong> <em>(${(100*(1-0.85 ** b.inventory.length)).toFixed(0)}%)</em>`
|
return `while your <strong>first</strong> <strong class='color-g'>gun</strong> is equipped<br><strong>+15%</strong> <strong class='color-defense'>defense</strong> per <strong class='color-g'>gun</strong> <em>(${(100 * (1 - 0.85 ** b.inventory.length)).toFixed(0)}%)</em>`
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -2553,7 +2553,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "electronegativity",
|
name: "electronegativity",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `<strong>+0.1%</strong> <strong class='color-d'>damage</strong> per current stored <strong class='color-f'>energy</strong><br><em>(+${(10*m.energy).toFixed(0)}%)</em>`
|
return `<strong>+0.1%</strong> <strong class='color-d'>damage</strong> per current stored <strong class='color-f'>energy</strong><br><em>(+${(10 * m.energy).toFixed(0)}%)</em>`
|
||||||
},
|
},
|
||||||
// description: "<strong>+1%</strong> <strong class='color-d'>damage</strong> per <strong>8</strong> stored <strong class='color-f'>energy</strong>",
|
// description: "<strong>+1%</strong> <strong class='color-d'>damage</strong> per <strong>8</strong> stored <strong class='color-f'>energy</strong>",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
@@ -2715,7 +2715,7 @@ const tech = {
|
|||||||
requires: "not parasitism",
|
requires: "not parasitism",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isCrouchRegen = true; //only used to check for requirements
|
tech.isCrouchRegen = true; //only used to check for requirements
|
||||||
m.regenEnergy = function() {
|
m.regenEnergy = function () {
|
||||||
if (m.immuneCycle < m.cycle && m.crouch) m.energy += 7 * m.fieldRegen;
|
if (m.immuneCycle < m.cycle && m.crouch) m.energy += 7 * m.fieldRegen;
|
||||||
if (m.energy < 0) m.energy = 0
|
if (m.energy < 0) m.energy = 0
|
||||||
}
|
}
|
||||||
@@ -2756,7 +2756,7 @@ const tech = {
|
|||||||
requires: "not inductive charging",
|
requires: "not inductive charging",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isDamageAfterKillNoRegen = true;
|
tech.isDamageAfterKillNoRegen = true;
|
||||||
m.regenEnergy = function() {
|
m.regenEnergy = function () {
|
||||||
if (m.immuneCycle < m.cycle && (m.lastKillCycle + 300 < m.cycle)) m.energy += m.fieldRegen;
|
if (m.immuneCycle < m.cycle && (m.lastKillCycle + 300 < m.cycle)) m.energy += m.fieldRegen;
|
||||||
if (m.energy < 0) m.energy = 0
|
if (m.energy < 0) m.energy = 0
|
||||||
}
|
}
|
||||||
@@ -2824,7 +2824,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "homeostasis",
|
name: "homeostasis",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `for each <strong class='color-h'>health</strong> below <strong>100</strong><br><strong>+0.8%</strong> <strong class='color-defense'>defense</strong> <em>(${(100*(Math.max(0, 1 - m.health) * 0.8)).toFixed(0)}%)</em>`
|
return `for each <strong class='color-h'>health</strong> below <strong>100</strong><br><strong>+0.8%</strong> <strong class='color-defense'>defense</strong> <em>(${(100 * (Math.max(0, 1 - m.health) * 0.8)).toFixed(0)}%)</em>`
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -2844,7 +2844,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "negative feedback",
|
name: "negative feedback",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `for each ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>": "<strong class='color-h'>health</strong>"} below <strong>100</strong><br><strong>+0.7%</strong> <strong class='color-d'>damage</strong> <em>(${(70*Math.max(0, 1 - (tech.isEnergyHealth ? m.energy : m.health))).toFixed(0)}%)</em>`
|
return `for each ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} below <strong>100</strong><br><strong>+0.7%</strong> <strong class='color-d'>damage</strong> <em>(${(70 * Math.max(0, 1 - (tech.isEnergyHealth ? m.energy : m.health))).toFixed(0)}%)</em>`
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -2864,7 +2864,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "Zenos paradox",
|
name: "Zenos paradox",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `<strong>+85%</strong> <strong class='color-defense'>defense</strong><br><strong>–5%</strong> of current ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>": "<strong class='color-h'>health</strong>"} every <strong>5</strong> seconds`
|
return `<strong>+85%</strong> <strong class='color-defense'>defense</strong><br><strong>–5%</strong> of current ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} every <strong>5</strong> seconds`
|
||||||
},
|
},
|
||||||
// description: "<strong>+85%</strong> <strong class='color-defense'>defense</strong><br><strong>–5%</strong> of current <strong class='color-h'>health</strong> every <strong>5</strong> seconds",
|
// description: "<strong>+85%</strong> <strong class='color-defense'>defense</strong><br><strong>–5%</strong> of current <strong class='color-h'>health</strong> every <strong>5</strong> seconds",
|
||||||
// description: "every <strong>5</strong> seconds remove <strong>1/10</strong> of your <strong class='color-h'>health</strong><br>reduce <strong class='color-defense'>defense</strong> by <strong>90%</strong>",
|
// description: "every <strong>5</strong> seconds remove <strong>1/10</strong> of your <strong class='color-h'>health</strong><br>reduce <strong class='color-defense'>defense</strong> by <strong>90%</strong>",
|
||||||
@@ -2886,7 +2886,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "antiscience",
|
name: "antiscience",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `<strong>+66%</strong> <strong class='color-d'>damage</strong><br><strong>–10</strong> ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>": "<strong class='color-h'>health</strong>"} after picking up a <strong class='color-m'>tech</strong>`
|
return `<strong>+66%</strong> <strong class='color-d'>damage</strong><br><strong>–10</strong> ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} after picking up a <strong class='color-m'>tech</strong>`
|
||||||
},
|
},
|
||||||
// description: "<strong>+66%</strong> <strong class='color-d'>damage</strong><br><strong>–10</strong> <strong class='color-h'>health</strong> after picking up a <strong class='color-m'>tech</strong>",
|
// description: "<strong>+66%</strong> <strong class='color-d'>damage</strong><br><strong>–10</strong> <strong class='color-h'>health</strong> after picking up a <strong class='color-m'>tech</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
@@ -3031,7 +3031,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "negative entropy",
|
name: "negative entropy",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `at the start of each <strong>level</strong><br>for every <strong>33%</strong> missing ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>": "<strong class='color-h'>health</strong>"} spawn ${powerUps.orb.heal()}`
|
return `at the start of each <strong>level</strong><br>for every <strong>33%</strong> missing ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} spawn ${powerUps.orb.heal()}`
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -3091,13 +3091,13 @@ const tech = {
|
|||||||
if (tech.tech[i].isHealTech) tech.tech[i].frequency *= 2
|
if (tech.tech[i].isHealTech) tech.tech[i].frequency *= 2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "anthropic principle",
|
name: "anthropic principle",
|
||||||
nameInfo: "<span id = 'tech-anthropic'></span>",
|
nameInfo: "<span id = 'tech-anthropic'></span>",
|
||||||
addNameInfo() {
|
addNameInfo() {
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
powerUps.research.changeRerolls(0)
|
powerUps.research.changeRerolls(0)
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
@@ -3116,7 +3116,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
tech.isDeathAvoid = true;
|
tech.isDeathAvoid = true;
|
||||||
tech.isDeathAvoidedThisLevel = false;
|
tech.isDeathAvoidedThisLevel = false;
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
powerUps.research.changeRerolls(0)
|
powerUps.research.changeRerolls(0)
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
@@ -3332,7 +3332,7 @@ const tech = {
|
|||||||
name: "Bayesian statistics",
|
name: "Bayesian statistics",
|
||||||
// description: `for each ${powerUps.orb.research(1)} in your inventory<br><strong>+3.8%</strong> <strong class='color-d'>damage</strong>`,
|
// description: `for each ${powerUps.orb.research(1)} in your inventory<br><strong>+3.8%</strong> <strong class='color-d'>damage</strong>`,
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `spawn ${powerUps.orb.research(this.bonusResearch)}<br><strong>+3%</strong> <strong class='color-d'>damage</strong> per ${powerUps.orb.research(1)} <em>(${(3*powerUps.research.count).toFixed(0)}%)</em>`
|
return `spawn ${powerUps.orb.research(this.bonusResearch)}<br><strong>+3%</strong> <strong class='color-d'>damage</strong> per ${powerUps.orb.research(1)} <em>(${(3 * powerUps.research.count).toFixed(0)}%)</em>`
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -3513,7 +3513,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "technical debt",
|
name: "technical debt",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `<strong>+300%</strong> <strong class='color-d'>damage</strong> <strong>–15%</strong> <strong class='color-d'>damage</strong><br>for each <strong class='color-m'>tech</strong> you have learned <em>(${(Math.floor(100*(Math.min(Math.pow(0.85, tech.totalCount-20), 4 - 0.15 * tech.totalCount)))-100)}%)</em>`
|
return `<strong>+300%</strong> <strong class='color-d'>damage</strong> <strong>–15%</strong> <strong class='color-d'>damage</strong><br>for each <strong class='color-m'>tech</strong> you have learned <em>(${(Math.floor(100 * (Math.min(Math.pow(0.85, tech.totalCount - 20), 4 - 0.15 * tech.totalCount))) - 100)}%)</em>`
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -3594,7 +3594,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "exciton",
|
name: "exciton",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `<span style = 'font-size:94%;'>after mobs <strong>die</strong> they have a <strong>16%</strong> chance to<br>spawn ${powerUps.orb.boost(1)} that give <strong>+${(powerUps.boost.damage*100).toFixed(0)}%</strong> <strong class='color-d'>damage</strong> for <strong>${(powerUps.boost.duration/60).toFixed(0)}</strong> seconds</span>`
|
return `<span style = 'font-size:94%;'>after mobs <strong>die</strong> they have a <strong>16%</strong> chance to<br>spawn ${powerUps.orb.boost(1)} that give <strong>+${(powerUps.boost.damage * 100).toFixed(0)}%</strong> <strong class='color-d'>damage</strong> for <strong>${(powerUps.boost.duration / 60).toFixed(0)}</strong> seconds</span>`
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -3699,7 +3699,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "field coupling",
|
name: "field coupling",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `spawn ${powerUps.orb.coupling(10)}<br>that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong><br>${ m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}`
|
return `spawn ${powerUps.orb.coupling(10)}<br>that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong>` //<br>${m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}
|
||||||
},
|
},
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -3730,7 +3730,7 @@ const tech = {
|
|||||||
} else {
|
} else {
|
||||||
orbText = powerUps.orb.coupling(converted)
|
orbText = powerUps.orb.coupling(converted)
|
||||||
}
|
}
|
||||||
return `use all your ${powerUps.orb.research(1)} to spawn <strong>${orbText}</strong><br>that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong><br>${ m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}`
|
return `use all your ${powerUps.orb.research(1)} to spawn <strong>${orbText}</strong><br>that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong>`//<br>${m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -3775,7 +3775,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "virtual particles",
|
name: "virtual particles",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `after mobs <strong>die</strong> they have a <strong>17%</strong> chance to<br>spawn ${powerUps.orb.coupling(1)} that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong><br>${m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}`
|
return `after mobs <strong>die</strong> they have a <strong>17%</strong> chance to<br>spawn ${powerUps.orb.coupling(1)} that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong>` //<br>${m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -3793,7 +3793,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "fine-structure constant",
|
name: "fine-structure constant",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `spawn ${this.value} ${powerUps.orb.coupling(1)} that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong><br><strong>-0.5</strong> <strong class='color-coupling'>coupling</strong> after mob <strong>collisions</strong><br>${m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}`
|
return `spawn ${this.value} ${powerUps.orb.coupling(1)} that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong><br><strong>-0.5</strong> <strong class='color-coupling'>coupling</strong> after mob <strong>collisions</strong>`//<br>${m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -3817,7 +3817,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "residual dipolar coupling",
|
name: "residual dipolar coupling",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `clicking <strong class='color-cancel'>cancel</strong> for a <strong class='color-f'>field</strong>, <strong class='color-m'>tech</strong>, or <strong class='color-g'>gun</strong><br>spawns ${powerUps.orb.coupling(5)}that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong><br>${ m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}`
|
return `clicking <strong class='color-cancel'>cancel</strong> for a <strong class='color-f'>field</strong>, <strong class='color-m'>tech</strong>, or <strong class='color-g'>gun</strong><br>spawns ${powerUps.orb.coupling(5)}that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong>`//<br>${m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4052,13 +4052,13 @@ const tech = {
|
|||||||
for (let i = 0; i < count; i++) powerUps.spawn(m.pos.x + 100 * (Math.random() - 0.5), m.pos.y + 100 * (Math.random() - 0.5), "tech"); // spawn new tech power ups
|
for (let i = 0; i < count; i++) powerUps.spawn(m.pos.x + 100 * (Math.random() - 0.5), m.pos.y + 100 * (Math.random() - 0.5), "tech"); // spawn new tech power ups
|
||||||
//have state is checked in m.death()
|
//have state is checked in m.death()
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
name: "Occams razor",
|
name: "Occams razor",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `randomly remove <strong>half</strong> your <strong class='color-m'>tech</strong><br>for each removed <strong>+${this.damagePerRemoved * 100 }%</strong> <strong class='color-d'>damage</strong> <em>(~${(this.count === 0) ? this.damagePerRemoved * 50 * tech.totalCount : this.damage*100}%)</em>`
|
return `randomly remove <strong>half</strong> your <strong class='color-m'>tech</strong><br>for each removed <strong>+${this.damagePerRemoved * 100}%</strong> <strong class='color-d'>damage</strong> <em>(~${(this.count === 0) ? this.damagePerRemoved * 50 * tech.totalCount : this.damage * 100}%)</em>`
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4118,7 +4118,7 @@ const tech = {
|
|||||||
tech.tech[choose].isLost = true
|
tech.tech[choose].isLost = true
|
||||||
simulation.updateTechHUD();
|
simulation.updateTechHUD();
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Monte Carlo method",
|
name: "Monte Carlo method",
|
||||||
@@ -4137,12 +4137,12 @@ const tech = {
|
|||||||
const removeTotal = tech.removeTech()
|
const removeTotal = tech.removeTech()
|
||||||
for (let i = 0; i < removeTotal + 1; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "tech");
|
for (let i = 0; i < removeTotal + 1; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "tech");
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "strange attractor",
|
name: "strange attractor",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `use ${powerUps.orb.research(2)} to spawn <strong>1</strong> <strong class='color-m'>tech</strong> with<br><strong>double</strong> your <strong class='color-dup'>duplication</strong> chance <em>(${(2*tech.duplicationChance()*100).toFixed(0)}%)</em>`
|
return `use ${powerUps.orb.research(2)} to spawn <strong>1</strong> <strong class='color-m'>tech</strong> with<br><strong>double</strong> your <strong class='color-dup'>duplication</strong> chance <em>(${(2 * tech.duplicationChance() * 100).toFixed(0)}%)</em>`
|
||||||
},
|
},
|
||||||
// description: `use ${powerUps.orb.research(2)} to spawn <strong>1</strong> <strong class='color-m'>tech</strong> with <strong>double</strong><br>your <strong class='color-dup'>duplication</strong> chance <em>(${(2*tech.duplicationChance()*100).toFixed(0)}%)</em>`,
|
// description: `use ${powerUps.orb.research(2)} to spawn <strong>1</strong> <strong class='color-m'>tech</strong> with <strong>double</strong><br>your <strong class='color-dup'>duplication</strong> chance <em>(${(2*tech.duplicationChance()*100).toFixed(0)}%)</em>`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
@@ -4161,7 +4161,7 @@ const tech = {
|
|||||||
powerUps.directSpawn(m.pos.x, m.pos.y, "tech");
|
powerUps.directSpawn(m.pos.x, m.pos.y, "tech");
|
||||||
if (Math.random() < tech.duplicationChance() * 2) powerUps.directSpawn(m.pos.x + 10, m.pos.y + 5, "tech");
|
if (Math.random() < tech.duplicationChance() * 2) powerUps.directSpawn(m.pos.x + 10, m.pos.y + 5, "tech");
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "reinforcement learning",
|
name: "reinforcement learning",
|
||||||
@@ -5939,7 +5939,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "junk DNA",
|
name: "junk DNA",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `<strong>+53%</strong> ${b.guns[6].nameString()} <strong class='color-d'>damage</strong> per <strong class='color-junk'>JUNK</strong><strong class='color-m'>tech</strong> <em>(${(53*tech.junkCount).toFixed(0)}%)</em><br><strong>+50%</strong> <strong class='color-junk'>JUNK</strong> to <strong class='color-m'>tech</strong> pool`
|
return `<strong>+53%</strong> ${b.guns[6].nameString()} <strong class='color-d'>damage</strong> per <strong class='color-junk'>JUNK</strong><strong class='color-m'>tech</strong> <em>(${(53 * tech.junkCount).toFixed(0)}%)</em><br><strong>+50%</strong> <strong class='color-junk'>JUNK</strong> to <strong class='color-m'>tech</strong> pool`
|
||||||
},
|
},
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
@@ -6730,7 +6730,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "UHMWPE",
|
name: "UHMWPE",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `+${(b.guns[9].ammo*1.25).toFixed(0)}% <strong>harpoon</strong> <strong>rope</strong> <strong>length</strong><br><em>(1/80 of harpoon <strong class='color-ammo'>ammo</strong>)</em>`
|
return `+${(b.guns[9].ammo * 1.25).toFixed(0)}% <strong>harpoon</strong> <strong>rope</strong> <strong>length</strong><br><em>(1/80 of harpoon <strong class='color-ammo'>ammo</strong>)</em>`
|
||||||
},
|
},
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
@@ -6770,7 +6770,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "quasiparticles",
|
name: "quasiparticles",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `convert current and future ${powerUps.orb.ammo(1)} into ${powerUps.orb.boost(1)} which<br>give <strong>+${(powerUps.boost.damage*100).toFixed(0)}%</strong> <strong class='color-d'>damage</strong> for <strong>${(powerUps.boost.duration/60).toFixed(0)}</strong> seconds`
|
return `convert current and future ${powerUps.orb.ammo(1)} into ${powerUps.orb.boost(1)} which<br>give <strong>+${(powerUps.boost.damage * 100).toFixed(0)}%</strong> <strong class='color-d'>damage</strong> for <strong>${(powerUps.boost.duration / 60).toFixed(0)}</strong> seconds`
|
||||||
},
|
},
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
@@ -7234,7 +7234,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "triple point",
|
name: "triple point",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `<strong>+1.5</strong> second <strong class='color-s'>ice IX</strong> freeze effect<br>spawn ${powerUps.orb.coupling(10)} that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong><br>${ m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}`
|
return `<strong>+1.5</strong> second <strong class='color-s'>ice IX</strong> freeze effect<br>spawn ${powerUps.orb.coupling(10)} that each give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong>` //<br>${m.couplingDescription(1)} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}
|
||||||
},
|
},
|
||||||
isFieldTech: true,
|
isFieldTech: true,
|
||||||
maxCount: 3,
|
maxCount: 3,
|
||||||
@@ -7397,7 +7397,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "dynamic equilibrium",
|
name: "dynamic equilibrium",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `increase <strong class='color-d'>damage</strong> by your <strong class='color-defense'>defense</strong> and<br><strong>5%</strong> of your last ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} loss <em style = 'font-size:94%;'>(+${(100*Math.max(5,tech.lastHitDamage) * m.lastHit * (2 - m.defense())).toFixed(0)}% damage)</em>`
|
return `increase <strong class='color-d'>damage</strong> by your <strong class='color-defense'>defense</strong> and<br><strong>5%</strong> of your last ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} loss <em style = 'font-size:94%;'>(+${(100 * Math.max(5, tech.lastHitDamage) * m.lastHit * (2 - m.defense())).toFixed(0)}% damage)</em>`
|
||||||
}, // = <strong>+${10*m.defense()}%</strong>
|
}, // = <strong>+${10*m.defense()}%</strong>
|
||||||
// descriptionFunction() { return `increase <strong class='color-d'>damage</strong> by your last ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} loss<br><strong style = 'font-size:90%;'>(${(tech.lastHitDamage).toFixed(0)}%)(${(100*m.lastHit).toFixed(0)} ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"})(${2 - m.defense()} <strong class='color-defense'>defense</strong>) = ${(100*tech.lastHitDamage * m.lastHit * (2 - m.defense())).toFixed(0)}% <strong class='color-d'>damage</strong></strong> ` }, // = <strong>+${10*m.defense()}%</strong>
|
// descriptionFunction() { return `increase <strong class='color-d'>damage</strong> by your last ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} loss<br><strong style = 'font-size:90%;'>(${(tech.lastHitDamage).toFixed(0)}%)(${(100*m.lastHit).toFixed(0)} ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"})(${2 - m.defense()} <strong class='color-defense'>defense</strong>) = ${(100*tech.lastHitDamage * m.lastHit * (2 - m.defense())).toFixed(0)}% <strong class='color-d'>damage</strong></strong> ` }, // = <strong>+${10*m.defense()}%</strong>
|
||||||
isFieldTech: true,
|
isFieldTech: true,
|
||||||
@@ -7543,7 +7543,7 @@ const tech = {
|
|||||||
b.randomBot()
|
b.randomBot()
|
||||||
b.randomBot()
|
b.randomBot()
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "bot prototypes",
|
name: "bot prototypes",
|
||||||
@@ -7618,7 +7618,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
notUpgradedBots[Math.floor(Math.random() * notUpgradedBots.length)]() //choose random function from the array and run it
|
notUpgradedBots[Math.floor(Math.random() * notUpgradedBots.length)]() //choose random function from the array and run it
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "mycelium manufacturing",
|
// name: "mycelium manufacturing",
|
||||||
@@ -8066,7 +8066,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "quantum eraser",
|
name: "quantum eraser",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `<span style = 'font-size:90%;'>for each mob left <strong>alive</strong> after you exit a <strong>level</strong><br><strong>kill</strong> a mob as they spawn at <strong>+${100-1.6*simulation.difficultyMode**2}%</strong> <strong class='color-dup'>duplication</strong></span>`
|
return `<span style = 'font-size:90%;'>for each mob left <strong>alive</strong> after you exit a <strong>level</strong><br><strong>kill</strong> a mob as they spawn at <strong>+${100 - 1.6 * simulation.difficultyMode ** 2}%</strong> <strong class='color-dup'>duplication</strong></span>`
|
||||||
},
|
},
|
||||||
// description: `<span style = 'font-size:90%;'>for each mob left <strong>alive</strong> after you exit a <strong>level</strong><br><strong>kill</strong> a mob as they spawn at <strong>100%</strong> <strong class='color-dup'>duplication</strong></span>`,
|
// description: `<span style = 'font-size:90%;'>for each mob left <strong>alive</strong> after you exit a <strong>level</strong><br><strong>kill</strong> a mob as they spawn at <strong>100%</strong> <strong class='color-dup'>duplication</strong></span>`,
|
||||||
isFieldTech: true,
|
isFieldTech: true,
|
||||||
@@ -8605,7 +8605,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||||
tech.tech[i].isJunk = !tech.tech[i].isJunk
|
tech.tech[i].isJunk = !tech.tech[i].isJunk
|
||||||
if (tech.tech[i].isJunk) {} else {}
|
if (tech.tech[i].isJunk) { } else { }
|
||||||
|
|
||||||
if (tech.tech[i].frequency > 0) {
|
if (tech.tech[i].frequency > 0) {
|
||||||
tech.tech[i].frequency = 0
|
tech.tech[i].frequency = 0
|
||||||
@@ -8614,7 +8614,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "pocket dimension",
|
// name: "pocket dimension",
|
||||||
@@ -8642,7 +8642,7 @@ const tech = {
|
|||||||
const loop = () => {
|
const loop = () => {
|
||||||
if ((simulation.isChoosing) && m.alive && !build.isExperimentSelection) {
|
if ((simulation.isChoosing) && m.alive && !build.isExperimentSelection) {
|
||||||
const dmg = Math.floor(27 * Math.random()) * 0.01
|
const dmg = Math.floor(27 * Math.random()) * 0.01
|
||||||
this.text = `<strong style = "font-family: 'Courier New', monospace;">+${(dmg*100).toFixed(0).padStart(2, '0')}%</strong> <strong class='color-d'>damage</strong>`
|
this.text = `<strong style = "font-family: 'Courier New', monospace;">+${(dmg * 100).toFixed(0).padStart(2, '0')}%</strong> <strong class='color-d'>damage</strong>`
|
||||||
this.damage = 1 + dmg
|
this.damage = 1 + dmg
|
||||||
if (document.getElementById(`damage-JUNK-id${this.id}`)) document.getElementById(`damage-JUNK-id${this.id}`).innerHTML = this.text
|
if (document.getElementById(`damage-JUNK-id${this.id}`)) document.getElementById(`damage-JUNK-id${this.id}`).innerHTML = this.text
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@@ -8686,7 +8686,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
powerUps.spawnDelay("boost", this.spawnCount)
|
powerUps.spawnDelay("boost", this.spawnCount)
|
||||||
},
|
},
|
||||||
remove() {},
|
remove() { },
|
||||||
id: 0,
|
id: 0,
|
||||||
text: "",
|
text: "",
|
||||||
delay: 100,
|
delay: 100,
|
||||||
@@ -8698,7 +8698,7 @@ const tech = {
|
|||||||
count += 4.5
|
count += 4.5
|
||||||
const waves = 2 * Math.sin(count * 0.0133) + Math.sin(count * 0.013) + 0.5 * Math.sin(count * 0.031) + 0.33 * Math.sin(count * 0.03)
|
const waves = 2 * Math.sin(count * 0.0133) + Math.sin(count * 0.013) + 0.5 * Math.sin(count * 0.031) + 0.33 * Math.sin(count * 0.03)
|
||||||
this.spawnCount = Math.floor(100 * Math.abs(waves))
|
this.spawnCount = Math.floor(100 * Math.abs(waves))
|
||||||
this.text = `spawn <strong style = "font-family: 'Courier New', monospace;">${this.spawnCount.toLocaleString(undefined, {minimumIntegerDigits:3})}</strong> ${powerUps.orb.boost(1)}<br>that give <strong>+${(powerUps.boost.damage*100).toFixed(0)}%</strong> <strong class='color-d'>damage</strong> for <strong>${(powerUps.boost.duration/60).toFixed(0)}</strong> seconds</span>`
|
this.text = `spawn <strong style = "font-family: 'Courier New', monospace;">${this.spawnCount.toLocaleString(undefined, { minimumIntegerDigits: 3 })}</strong> ${powerUps.orb.boost(1)}<br>that give <strong>+${(powerUps.boost.damage * 100).toFixed(0)}%</strong> <strong class='color-d'>damage</strong> for <strong>${(powerUps.boost.duration / 60).toFixed(0)}</strong> seconds</span>`
|
||||||
if (document.getElementById(`boost-JUNK-id${this.id}`)) document.getElementById(`boost-JUNK-id${this.id}`).innerHTML = this.text
|
if (document.getElementById(`boost-JUNK-id${this.id}`)) document.getElementById(`boost-JUNK-id${this.id}`).innerHTML = this.text
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
loop()
|
loop()
|
||||||
@@ -8724,7 +8724,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
if (Math.random() < 0.1) tech.damage *= 8.77
|
if (Math.random() < 0.1) tech.damage *= 8.77
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "universal healthcare",
|
name: "universal healthcare",
|
||||||
@@ -8738,7 +8738,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
tech.damage *= -1
|
tech.damage *= -1
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "synchrotron",
|
// name: "synchrotron",
|
||||||
@@ -8771,7 +8771,7 @@ const tech = {
|
|||||||
level.onLevel = 0
|
level.onLevel = 0
|
||||||
simulation.clearNow = true //end current level
|
simulation.clearNow = true //end current level
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "panpsychism",
|
name: "panpsychism",
|
||||||
@@ -8795,7 +8795,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}, 6000);
|
}, 6000);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "meteor shower",
|
name: "meteor shower",
|
||||||
@@ -8810,7 +8810,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
|
|
||||||
fireBlock = function(xPos, yPos) {
|
fireBlock = function (xPos, yPos) {
|
||||||
const index = body.length
|
const index = body.length
|
||||||
spawn.bodyRect(xPos, yPos, 20 + 50 * Math.random(), 20 + 50 * Math.random());
|
spawn.bodyRect(xPos, yPos, 20 + 50 * Math.random(), 20 + 50 * Math.random());
|
||||||
const bodyBullet = body[index]
|
const bodyBullet = body[index]
|
||||||
@@ -8838,7 +8838,7 @@ const tech = {
|
|||||||
|
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "startle response",
|
name: "startle response",
|
||||||
@@ -8864,7 +8864,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}, 2000);
|
}, 2000);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "closed timelike curve",
|
name: "closed timelike curve",
|
||||||
@@ -8896,7 +8896,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
requestAnimationFrame(loop);
|
requestAnimationFrame(loop);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "translate",
|
// name: "translate",
|
||||||
@@ -8958,7 +8958,7 @@ const tech = {
|
|||||||
tech.giveRandomJUNK()
|
tech.giveRandomJUNK()
|
||||||
tech.giveRandomJUNK()
|
tech.giveRandomJUNK()
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "hi",
|
// name: "hi",
|
||||||
@@ -9010,7 +9010,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
requestAnimationFrame(loop);
|
requestAnimationFrame(loop);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "harvest",
|
name: "harvest",
|
||||||
@@ -9037,7 +9037,7 @@ const tech = {
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "brainstorm",
|
name: "brainstorm",
|
||||||
@@ -9077,7 +9077,7 @@ const tech = {
|
|||||||
for (let i = 0; i < b.guns.length; i++) b.guns[i].ammo = b.guns[i].ammo * Math.pow(2, 10)
|
for (let i = 0; i < b.guns.length; i++) b.guns[i].ammo = b.guns[i].ammo * Math.pow(2, 10)
|
||||||
simulation.updateGunHUD();
|
simulation.updateGunHUD();
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "palantír",
|
name: "palantír",
|
||||||
@@ -9159,7 +9159,7 @@ const tech = {
|
|||||||
const index = Math.min(level.levels.length - 1, level.onLevel)
|
const index = Math.min(level.levels.length - 1, level.onLevel)
|
||||||
level.levels.splice(index, 0, level.levels[index]);
|
level.levels.splice(index, 0, level.levels[index]);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "negative friction",
|
name: "negative friction",
|
||||||
@@ -9395,7 +9395,7 @@ const tech = {
|
|||||||
effect: () => {
|
effect: () => {
|
||||||
//setup audio context
|
//setup audio context
|
||||||
function tone(frequency) {
|
function tone(frequency) {
|
||||||
const audioCtx = new(window.AudioContext || window.webkitAudioContext)();
|
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
|
||||||
const oscillator1 = audioCtx.createOscillator();
|
const oscillator1 = audioCtx.createOscillator();
|
||||||
const gainNode1 = audioCtx.createGain();
|
const gainNode1 = audioCtx.createGain();
|
||||||
gainNode1.gain.value = 0.5; //controls volume
|
gainNode1.gain.value = 0.5; //controls volume
|
||||||
@@ -9409,7 +9409,7 @@ const tech = {
|
|||||||
// let sound = tone(1050)
|
// let sound = tone(1050)
|
||||||
|
|
||||||
function EBS() {
|
function EBS() {
|
||||||
const audioCtx = new(window.AudioContext || window.webkitAudioContext)();
|
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
|
||||||
|
|
||||||
const oscillator1 = audioCtx.createOscillator();
|
const oscillator1 = audioCtx.createOscillator();
|
||||||
const gainNode1 = audioCtx.createGain();
|
const gainNode1 = audioCtx.createGain();
|
||||||
@@ -9474,7 +9474,7 @@ const tech = {
|
|||||||
}, delay);
|
}, delay);
|
||||||
}, delay);
|
}, delay);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "automatic",
|
name: "automatic",
|
||||||
@@ -9518,7 +9518,7 @@ const tech = {
|
|||||||
document.getElementById("defense-bar").style.display = "none"
|
document.getElementById("defense-bar").style.display = "none"
|
||||||
for (let i = 0; i < 20; i++) powerUps.spawn(m.pos.x + 160 * (Math.random() - 0.5), m.pos.y + 160 * (Math.random() - 0.5), "heal");
|
for (let i = 0; i < 20; i++) powerUps.spawn(m.pos.x + 160 * (Math.random() - 0.5), m.pos.y + 160 * (Math.random() - 0.5), "heal");
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "not a bug",
|
name: "not a bug",
|
||||||
@@ -9545,7 +9545,7 @@ const tech = {
|
|||||||
|
|
||||||
// for (;;) {} //freezes the tab
|
// for (;;) {} //freezes the tab
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "spinor",
|
name: "spinor",
|
||||||
@@ -9560,7 +9560,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
m.look = function() {
|
m.look = function () {
|
||||||
//always on mouse look
|
//always on mouse look
|
||||||
m.angle = (((m.pos.x + m.pos.y) / 100 + Math.PI) % Math.PI * 2) - Math.PI
|
m.angle = (((m.pos.x + m.pos.y) / 100 + Math.PI) % Math.PI * 2) - Math.PI
|
||||||
//smoothed mouse look translations
|
//smoothed mouse look translations
|
||||||
@@ -9596,7 +9596,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "decomposers",
|
name: "decomposers",
|
||||||
@@ -9639,7 +9639,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}, 1000); //every 1 seconds
|
}, 1000); //every 1 seconds
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "inverted mouse",
|
// name: "inverted mouse",
|
||||||
@@ -9708,7 +9708,7 @@ const tech = {
|
|||||||
simulation.makeGunHUD()
|
simulation.makeGunHUD()
|
||||||
powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "gun");
|
powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "gun");
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "probability",
|
name: "probability",
|
||||||
@@ -9739,7 +9739,7 @@ const tech = {
|
|||||||
tech.tech[index].frequency = 100
|
tech.tech[index].frequency = 100
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "encryption",
|
name: "encryption",
|
||||||
@@ -9754,7 +9754,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
String.prototype.shuffle = function() {
|
String.prototype.shuffle = function () {
|
||||||
var a = this.split(""),
|
var a = this.split(""),
|
||||||
n = a.length;
|
n = a.length;
|
||||||
|
|
||||||
@@ -9769,7 +9769,7 @@ const tech = {
|
|||||||
|
|
||||||
for (let i = 0, len = tech.tech.length; i < len; i++) tech.tech[i].name = tech.tech[i].name.shuffle()
|
for (let i = 0, len = tech.tech.length; i < len; i++) tech.tech[i].name = tech.tech[i].name.shuffle()
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "quantum leap",
|
name: "quantum leap",
|
||||||
@@ -9789,7 +9789,7 @@ const tech = {
|
|||||||
simulation.trails()
|
simulation.trails()
|
||||||
}, 20000); //every 30 seconds
|
}, 20000); //every 30 seconds
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "score",
|
name: "score",
|
||||||
@@ -9809,7 +9809,7 @@ const tech = {
|
|||||||
simulation.makeTextLog(`simulation.score <span class='color-symbol'>=</span> ${score.toFixed(0)}`);
|
simulation.makeTextLog(`simulation.score <span class='color-symbol'>=</span> ${score.toFixed(0)}`);
|
||||||
}, 10000); //every 10 seconds
|
}, 10000); //every 10 seconds
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "pop-ups",
|
name: "pop-ups",
|
||||||
@@ -9828,7 +9828,7 @@ const tech = {
|
|||||||
alert(`The best combo is ${tech.tech[Math.floor(Math.random() * tech.tech.length)].name} with ${tech.tech[Math.floor(Math.random() * tech.tech.length)].name}!`);
|
alert(`The best combo is ${tech.tech[Math.floor(Math.random() * tech.tech.length)].name} with ${tech.tech[Math.floor(Math.random() * tech.tech.length)].name}!`);
|
||||||
}, 30000); //every 30 seconds
|
}, 30000); //every 30 seconds
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "music",
|
name: "music",
|
||||||
@@ -9845,7 +9845,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
window.open('https://www.youtube.com/watch?v=lEbHeSdmS-k&list=PL9Z5wjoBiPKEDhwCW2RN-VZoCpmhIojdn', '_blank')
|
window.open('https://www.youtube.com/watch?v=lEbHeSdmS-k&list=PL9Z5wjoBiPKEDhwCW2RN-VZoCpmhIojdn', '_blank')
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "performance",
|
name: "performance",
|
||||||
@@ -9860,9 +9860,9 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
(function() {
|
(function () {
|
||||||
var script = document.createElement('script');
|
var script = document.createElement('script');
|
||||||
script.onload = function() {
|
script.onload = function () {
|
||||||
var stats = new Stats();
|
var stats = new Stats();
|
||||||
document.body.appendChild(stats.dom);
|
document.body.appendChild(stats.dom);
|
||||||
requestAnimationFrame(function loop() {
|
requestAnimationFrame(function loop() {
|
||||||
@@ -9879,7 +9879,7 @@ const tech = {
|
|||||||
document.getElementById("defense-bar").style.left = "86px"
|
document.getElementById("defense-bar").style.left = "86px"
|
||||||
document.getElementById("damage-bar").style.left = "86px"
|
document.getElementById("damage-bar").style.left = "86px"
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "repartitioning",
|
name: "repartitioning",
|
||||||
@@ -9903,7 +9903,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x, m.pos.y, "tech");
|
for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x, m.pos.y, "tech");
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "defragment",
|
name: "defragment",
|
||||||
@@ -9922,7 +9922,7 @@ const tech = {
|
|||||||
if (tech.tech[i].isJunk) tech.tech[i].frequency = 0
|
if (tech.tech[i].isJunk) tech.tech[i].frequency = 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "lubrication",
|
// name: "lubrication",
|
||||||
@@ -9962,7 +9962,7 @@ const tech = {
|
|||||||
if (!simulation.paused) ctx.rotate(0.001 * Math.sin(simulation.cycle * 0.01))
|
if (!simulation.paused) ctx.rotate(0.001 * Math.sin(simulation.cycle * 0.01))
|
||||||
}, 16);
|
}, 16);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "umbra",
|
name: "umbra",
|
||||||
@@ -9980,7 +9980,7 @@ const tech = {
|
|||||||
ctx.shadowColor = '#06f';
|
ctx.shadowColor = '#06f';
|
||||||
ctx.shadowBlur = 25;
|
ctx.shadowBlur = 25;
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "lighter",
|
name: "lighter",
|
||||||
@@ -9997,7 +9997,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
ctx.globalCompositeOperation = "lighter";
|
ctx.globalCompositeOperation = "lighter";
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "rewind",
|
name: "rewind",
|
||||||
@@ -10020,7 +10020,7 @@ const tech = {
|
|||||||
// setTimeout(() => { m.rewind(120) }, i * 5000);
|
// setTimeout(() => { m.rewind(120) }, i * 5000);
|
||||||
// }
|
// }
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "undo",
|
name: "undo",
|
||||||
@@ -10040,7 +10040,7 @@ const tech = {
|
|||||||
m.energy += 0.2
|
m.energy += 0.2
|
||||||
}, 4000);
|
}, 4000);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "energy to mass conversion",
|
name: "energy to mass conversion",
|
||||||
@@ -10072,7 +10072,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "level.nextLevel()",
|
name: "level.nextLevel()",
|
||||||
@@ -10089,7 +10089,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
level.nextLevel();
|
level.nextLevel();
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "reincarnation",
|
name: "reincarnation",
|
||||||
@@ -10115,7 +10115,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "expert system",
|
name: "expert system",
|
||||||
@@ -10133,7 +10133,7 @@ const tech = {
|
|||||||
powerUps.spawn(m.pos.x, m.pos.y, "tech");
|
powerUps.spawn(m.pos.x, m.pos.y, "tech");
|
||||||
tech.addJunkTechToPool(0.64)
|
tech.addJunkTechToPool(0.64)
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "energy investment",
|
name: "energy investment",
|
||||||
@@ -10158,7 +10158,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}, 10000);
|
}, 10000);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "missile launching system",
|
name: "missile launching system",
|
||||||
@@ -10183,7 +10183,7 @@ const tech = {
|
|||||||
}, i * 1000);
|
}, i * 1000);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "grenade production",
|
name: "grenade production",
|
||||||
@@ -10212,7 +10212,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}, 2000);
|
}, 2000);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "stubs",
|
name: "stubs",
|
||||||
@@ -10305,7 +10305,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
m.draw = () => {}
|
m.draw = () => { }
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
if (this.count) m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
@@ -10367,7 +10367,7 @@ const tech = {
|
|||||||
if (m.onGround && !m.crouch) m.yOffGoal = m.yOffWhen.stand
|
if (m.onGround && !m.crouch) m.yOffGoal = m.yOffWhen.stand
|
||||||
}, 100);
|
}, 100);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "prism",
|
name: "prism",
|
||||||
@@ -10387,12 +10387,12 @@ const tech = {
|
|||||||
sat: 100,
|
sat: 100,
|
||||||
light: 50
|
light: 50
|
||||||
}
|
}
|
||||||
setInterval(function() {
|
setInterval(function () {
|
||||||
m.color.hue++
|
m.color.hue++
|
||||||
m.setFillColors()
|
m.setFillColors()
|
||||||
}, 10);
|
}, 10);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "microtransactions",
|
// name: "microtransactions",
|
||||||
@@ -10433,7 +10433,7 @@ const tech = {
|
|||||||
if (tech.tech[i].name === "relativistic rotation") tech.tech[i].frequency = 10
|
if (tech.tech[i].name === "relativistic rotation") tech.tech[i].frequency = 10
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "circular symmetry",
|
name: "circular symmetry",
|
||||||
@@ -10463,7 +10463,7 @@ const tech = {
|
|||||||
ctx.translate(-canvas.width2, -canvas.height2); //center
|
ctx.translate(-canvas.width2, -canvas.height2); //center
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "assimilation",
|
name: "assimilation",
|
||||||
@@ -10521,7 +10521,7 @@ const tech = {
|
|||||||
const index = Math.floor(Math.random() * bots.length)
|
const index = Math.floor(Math.random() * bots.length)
|
||||||
for (let i = 0; i < total; i++) bots[index]()
|
for (let i = 0; i < total; i++) bots[index]()
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "growth hacking",
|
name: "growth hacking",
|
||||||
@@ -10538,7 +10538,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
level.difficultyIncrease(simulation.difficultyMode)
|
level.difficultyIncrease(simulation.difficultyMode)
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "stun",
|
name: "stun",
|
||||||
@@ -10555,7 +10555,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
for (let i = 0; i < mob.length; i++) mobs.statusStun(mob[i], 480)
|
for (let i = 0; i < mob.length; i++) mobs.statusStun(mob[i], 480)
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "translucent",
|
name: "translucent",
|
||||||
@@ -10581,9 +10581,9 @@ const tech = {
|
|||||||
// if (b.guns[i].ammo !== Infinity) b.guns[i].ammo = 0;
|
// if (b.guns[i].ammo !== Infinity) b.guns[i].ammo = 0;
|
||||||
// }
|
// }
|
||||||
// simulation.makeGunHUD(); //update gun HUD
|
// simulation.makeGunHUD(); //update gun HUD
|
||||||
b.bulletDraw = () => {}; //make bullets invisible
|
b.bulletDraw = () => { }; //make bullets invisible
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "re-research",
|
name: "re-research",
|
||||||
@@ -10601,7 +10601,7 @@ const tech = {
|
|||||||
powerUps.spawnDelay("research", powerUps.research.count);
|
powerUps.spawnDelay("research", powerUps.research.count);
|
||||||
powerUps.research.count = 0
|
powerUps.research.count = 0
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "black hole",
|
name: "black hole",
|
||||||
@@ -10621,7 +10621,7 @@ const tech = {
|
|||||||
powerUps.research.changeRerolls(-4)
|
powerUps.research.changeRerolls(-4)
|
||||||
simulation.makeTextLog(`<span class='color-var'>m</span>.<span class='color-r'>research</span> <span class='color-symbol'>--</span><br>${powerUps.research.count}`)
|
simulation.makeTextLog(`<span class='color-var'>m</span>.<span class='color-r'>research</span> <span class='color-symbol'>--</span><br>${powerUps.research.count}`)
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "black hole cluster",
|
name: "black hole cluster",
|
||||||
@@ -10648,7 +10648,7 @@ const tech = {
|
|||||||
// who.damageReduction = 0.2
|
// who.damageReduction = 0.2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "rule 30",
|
name: "rule 30",
|
||||||
@@ -10660,8 +10660,8 @@ const tech = {
|
|||||||
return !build.isExperimentSelection
|
return !build.isExperimentSelection
|
||||||
},
|
},
|
||||||
requires: "NOT EXPERIMENT MODE",
|
requires: "NOT EXPERIMENT MODE",
|
||||||
effect() {},
|
effect() { },
|
||||||
remove() {},
|
remove() { },
|
||||||
state: [
|
state: [
|
||||||
[false, false, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, false, false, false, false, false, true, false, false, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, Math.random() > 0.8, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, false, false, false, false, false]
|
[false, false, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, false, false, false, false, false, true, false, false, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, Math.random() > 0.8, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, false, false, false, false, false]
|
||||||
],
|
],
|
||||||
@@ -10732,8 +10732,8 @@ const tech = {
|
|||||||
return !build.isExperimentSelection
|
return !build.isExperimentSelection
|
||||||
},
|
},
|
||||||
requires: "NOT EXPERIMENT MODE",
|
requires: "NOT EXPERIMENT MODE",
|
||||||
effect() {},
|
effect() { },
|
||||||
remove() {},
|
remove() { },
|
||||||
state: [
|
state: [
|
||||||
[false, false, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, false, false, false, false, false, true, true, false, false, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, Math.random() > 0.8, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, false, false, false, false]
|
[false, false, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, false, false, false, false, false, true, true, false, false, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, Math.random() > 0.8, false, Math.random() > 0.8, false, false, false, Math.random() > 0.8, false, false, false, false, false, false, false, false]
|
||||||
],
|
],
|
||||||
@@ -10830,7 +10830,7 @@ const tech = {
|
|||||||
}, 1250);
|
}, 1250);
|
||||||
}, 1000 * 5 * 60);
|
}, 1000 * 5 * 60);
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "planetesimals",
|
name: "planetesimals",
|
||||||
@@ -10853,7 +10853,7 @@ const tech = {
|
|||||||
const bc = new BroadcastChannel('planetesimals');
|
const bc = new BroadcastChannel('planetesimals');
|
||||||
bc.activated = false
|
bc.activated = false
|
||||||
|
|
||||||
bc.onmessage = function(ev) {
|
bc.onmessage = function (ev) {
|
||||||
if (ev.data === 'tech') powerUps.directSpawn(m.pos.x, m.pos.y, "tech");
|
if (ev.data === 'tech') powerUps.directSpawn(m.pos.x, m.pos.y, "tech");
|
||||||
if (ev.data === 'death') {
|
if (ev.data === 'death') {
|
||||||
m.death()
|
m.death()
|
||||||
@@ -10865,7 +10865,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "tinker",
|
name: "tinker",
|
||||||
@@ -10884,7 +10884,7 @@ const tech = {
|
|||||||
localSettings.isJunkExperiment = true
|
localSettings.isJunkExperiment = true
|
||||||
if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "NFT",
|
name: "NFT",
|
||||||
@@ -10902,7 +10902,7 @@ const tech = {
|
|||||||
localSettings.personalSeeds.push(Math.initialSeed)
|
localSettings.personalSeeds.push(Math.initialSeed)
|
||||||
if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() { }
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "rule 90",
|
// name: "rule 90",
|
||||||
|
|||||||
65
style.css
@@ -161,7 +161,7 @@ summary {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#choose-grid {
|
.choose-grid {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
@@ -180,9 +180,34 @@ summary {
|
|||||||
transition: opacity 0.25s linear;
|
transition: opacity 0.25s linear;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
-ms-overflow-style: none;
|
-ms-overflow-style: none;
|
||||||
/* IE and Edge */
|
|
||||||
scrollbar-width: none;
|
scrollbar-width: none;
|
||||||
/* Firefox */
|
}
|
||||||
|
|
||||||
|
.choose-grid-no-images {
|
||||||
|
border-radius: 12px;
|
||||||
|
border: 10px solid #444;
|
||||||
|
gap: 10px;
|
||||||
|
background-color: #444;
|
||||||
|
/* padding: 10px 1px; */
|
||||||
|
|
||||||
|
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
margin: 0px;
|
||||||
|
z-index: 12;
|
||||||
|
max-height: 99vh;
|
||||||
|
font-size: 1.3em;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 384px;
|
||||||
|
align-items: stretch;
|
||||||
|
visibility: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.25s linear;
|
||||||
|
overflow: auto;
|
||||||
|
-ms-overflow-style: none;
|
||||||
|
scrollbar-width: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#choose-grid::-webkit-scrollbar {
|
#choose-grid::-webkit-scrollbar {
|
||||||
@@ -356,6 +381,7 @@ summary {
|
|||||||
margin-right: -1px;
|
margin-right: -1px;
|
||||||
font-size: 0.92em;
|
font-size: 0.92em;
|
||||||
min-height: 88px;
|
min-height: 88px;
|
||||||
|
/* border-radius: 5px; */
|
||||||
}
|
}
|
||||||
|
|
||||||
.cancel-card {
|
.cancel-card {
|
||||||
@@ -390,19 +416,31 @@ summary {
|
|||||||
background-color: var(--hover-card-color);
|
background-color: var(--hover-card-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.research-cancel {
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
line-height: 160%;
|
||||||
|
/* background-color: var(--card-color); */
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
/* keeps 5 columns at 1440px */
|
/* keeps 5 columns at 1440px */
|
||||||
@media (min-width: 1710px) and (max-width: 1950px) {
|
@media (min-width: 1710px) and (max-width: 1950px) {
|
||||||
|
|
||||||
.experiment-grid-module,
|
.experiment-grid-module,
|
||||||
.choose-grid-module,
|
.choose-grid-module,
|
||||||
.pause-grid-module {
|
.pause-grid-module,
|
||||||
|
.research-cancel {
|
||||||
line-height: 143%;
|
line-height: 143%;
|
||||||
font-size: 0.68em;
|
font-size: 0.68em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.research-cancel {
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
|
||||||
#experiment-grid,
|
#experiment-grid,
|
||||||
#choose-grid,
|
.choose-grid,
|
||||||
.pause-grid {
|
.pause-grid {
|
||||||
grid-template-columns: repeat(auto-fit, 340px);
|
grid-template-columns: repeat(auto-fit, 340px);
|
||||||
}
|
}
|
||||||
@@ -426,8 +464,12 @@ summary {
|
|||||||
font-size: 0.58em;
|
font-size: 0.58em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.research-cancel {
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
#experiment-grid,
|
#experiment-grid,
|
||||||
#choose-grid,
|
.choose-grid,
|
||||||
.pause-grid {
|
.pause-grid {
|
||||||
grid-template-columns: repeat(auto-fit, 285px);
|
grid-template-columns: repeat(auto-fit, 285px);
|
||||||
}
|
}
|
||||||
@@ -512,7 +554,7 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.experiment-grid-disabled[data-descr]:hover::after {
|
.experiment-grid-disabled[data-descr]:hover::after {
|
||||||
content: '\a \00a0 \00a0 \00a0 REQUIRES:\a \00a0 \00a0 \00a0 'attr(data-descr);
|
content: '\a \00a0 \00a0 \00a0 REQUIRES:\a \00a0 \00a0 \00a0 ' attr(data-descr);
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0;
|
left: 0;
|
||||||
@@ -564,7 +606,7 @@ summary {
|
|||||||
right: 4px;
|
right: 4px;
|
||||||
height: 0px;
|
height: 0px;
|
||||||
width: 7px;
|
width: 7px;
|
||||||
transition: height 0.15s linear;
|
transition: height 0.25s linear;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
@@ -580,7 +622,7 @@ summary {
|
|||||||
left: 15px;
|
left: 15px;
|
||||||
height: 7px;
|
height: 7px;
|
||||||
width: 0px;
|
width: 0px;
|
||||||
transition: width 0.3s linear;
|
transition: width 0.25s linear;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
@@ -588,18 +630,21 @@ summary {
|
|||||||
border-right: 1.5px solid #777;
|
border-right: 1.5px solid #777;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#health {
|
#health {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 15px;
|
top: 15px;
|
||||||
left: 15px;
|
left: 15px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
width: 0px;
|
width: 0px;
|
||||||
transition: width 1s ease-out; z-index: 2;
|
transition: width 1s ease-out;
|
||||||
|
z-index: 2;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
background-color: rgb(9, 245, 166);
|
background-color: rgb(9, 245, 166);
|
||||||
border-right: 2px solid rgb(51, 162, 125);
|
border-right: 2px solid rgb(51, 162, 125);
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#health-bg {
|
#health-bg {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 15px;
|
top: 15px;
|
||||||
|
|||||||
68
todo.txt
@@ -1,13 +1,23 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
added defense bar to HUD
|
mob damage difficulty setting is lower
|
||||||
new community map commandeer by Desboot
|
recycling now flashes green when it heals
|
||||||
|
|
||||||
|
merged cancel and research bars for single column selection
|
||||||
|
added some dark grey borders for no images selection mode
|
||||||
|
|
||||||
|
new images with midJourney V5
|
||||||
|
spores, pilot wave, standing wave
|
||||||
|
|
||||||
bug fixes
|
bug fixes
|
||||||
|
|
||||||
*********************************************************** TODO *****************************************************
|
*********************************************************** TODO *****************************************************
|
||||||
|
|
||||||
switch to prettier formatter or remove beautify
|
wormhole tech - teleport away mobs with mass below 3 when they get too near the player
|
||||||
|
short CD, small energy cost, only mobs below a mass
|
||||||
|
|
||||||
|
foam gun could have a knock back effect
|
||||||
|
maybe with pressure vessel?
|
||||||
|
|
||||||
extend brainstorming animation timers to fps cap?
|
extend brainstorming animation timers to fps cap?
|
||||||
will it be smoother or choppier?
|
will it be smoother or choppier?
|
||||||
@@ -22,59 +32,12 @@ level element - mover, transport
|
|||||||
extend uncertainty to superballs
|
extend uncertainty to superballs
|
||||||
maybe make aiming them more random?
|
maybe make aiming them more random?
|
||||||
|
|
||||||
live updating defense and damage HUD?
|
|
||||||
makes more sense for defense
|
|
||||||
for damage many effects only apply to one type of damage so it would show up
|
|
||||||
update frequency
|
|
||||||
per s
|
|
||||||
every cycle? (only if canvas)
|
|
||||||
don't include difficulty effects
|
|
||||||
draw in canvas or html?
|
|
||||||
add border for readability
|
|
||||||
a number
|
|
||||||
bars
|
|
||||||
horizontal
|
|
||||||
vertical
|
|
||||||
circles
|
|
||||||
defense
|
|
||||||
color: grey, white
|
|
||||||
scales from 0-1
|
|
||||||
wrapped around health bar like armor
|
|
||||||
what about mass-energy which has no health bar
|
|
||||||
at defense = 1 outlines health bar fully
|
|
||||||
health bar
|
|
||||||
color: keep red (green?)
|
|
||||||
red is the same as mob health bars
|
|
||||||
damage
|
|
||||||
color: red if not used for health
|
|
||||||
scales from 1-infinity maps to 0->1
|
|
||||||
1-1/(1+damage)
|
|
||||||
diagetic UI Elements
|
|
||||||
ammo number?
|
|
||||||
doesn't text look choppy when camera moves?
|
|
||||||
health bar could be rendered similarly to energy bar
|
|
||||||
what about 2 bezier curves on left and right of player head that looks like 1/3 circleRadiusScale
|
|
||||||
rotate the curves as the head rotates
|
|
||||||
what about 2 bezier both above player
|
|
||||||
as the total energy and health increases the curses could asymptotically approach a maximum length as max energy/health goes to infinity
|
|
||||||
|
|
||||||
|
|
||||||
foam gun could have a knock back effect
|
|
||||||
maybe with pressure vessel?
|
|
||||||
|
|
||||||
perfect diamagnatism could bounce on mobs, or even map elements?
|
perfect diamagnatism could bounce on mobs, or even map elements?
|
||||||
could work like a rocket jump?
|
could work like a rocket jump?
|
||||||
|
|
||||||
field tech: negative mass, wormhole?
|
|
||||||
tech: do 60% damage when not touching ground
|
|
||||||
tech: 50% defense when not touching ground
|
|
||||||
|
|
||||||
Tech: Von Neuman probes - Drones will consume blocks to replicate themselves
|
Tech: Von Neuman probes - Drones will consume blocks to replicate themselves
|
||||||
it's a little too similar to the drone repair tech, but I kinda like it better. drones that eat blocks and spit out more drones is cool
|
it's a little too similar to the drone repair tech, but I kinda like it better. drones that eat blocks and spit out more drones is cool
|
||||||
|
|
||||||
when gaining ammo have the ammo test quickly count up by Math.floor(1/20x) of the total ammo given
|
|
||||||
maybe bold, flash the text for a second after
|
|
||||||
|
|
||||||
tech: parry - immune to harm for 0.25-0.5 seconds after pressing field button
|
tech: parry - immune to harm for 0.25-0.5 seconds after pressing field button
|
||||||
needs a 5 second CD?
|
needs a 5 second CD?
|
||||||
|
|
||||||
@@ -95,7 +58,6 @@ tech - after standing wave runs out of energy from blocking, gain a buff
|
|||||||
aoe damage like railgun
|
aoe damage like railgun
|
||||||
push mobs away
|
push mobs away
|
||||||
|
|
||||||
|
|
||||||
level: lock
|
level: lock
|
||||||
should there be something in the top part of the map?
|
should there be something in the top part of the map?
|
||||||
add alt versions of left and right sides
|
add alt versions of left and right sides
|
||||||
@@ -1242,14 +1204,16 @@ if pause is pressed while selecting power ups, display pause menu on top of sele
|
|||||||
metamaterial cloaking - Scientific photography by Miki Asai, by Bruce Munro
|
metamaterial cloaking - Scientific photography by Miki Asai, by Bruce Munro
|
||||||
molecular assembler - by Laurie Greasley 16-bit Isometric
|
molecular assembler - by Laurie Greasley 16-bit Isometric
|
||||||
wormhole - by Tim White
|
wormhole - by Tim White
|
||||||
|
pilot wave -
|
||||||
|
|
||||||
nail gun - Screenprint
|
nail gun - Screenprint
|
||||||
shotgun - blueprint by Dan McPharlin
|
shotgun - blueprint by Dan McPharlin
|
||||||
grenades, missiles, explosions - by Victo Ngai
|
grenades, missiles, explosions - by Victo Ngai
|
||||||
spores - by Ernst Haeckel
|
spores - turquoise black spores on a white background full color scientific anatomy by Ernst Haeckel
|
||||||
drones - tilt-shift photography
|
drones - tilt-shift photography
|
||||||
super balls - By Akari Toriyama
|
super balls - By Akari Toriyama
|
||||||
wave - sound wave oscilloscope by Paul Catherall, concentric circles by Paul Catherall
|
wave - sound wave oscilloscope by Paul Catherall, concentric circles by Paul Catherall
|
||||||
|
Barbara Takenaga's painting depicting a clean sound wave on aoscilloscope device --ar 3:2 --v 5
|
||||||
foam - black blobs Ink doodle
|
foam - black blobs Ink doodle
|
||||||
harpoon - by Eiichiro Oda
|
harpoon - by Eiichiro Oda
|
||||||
mine - by Dan McPharlin
|
mine - by Dan McPharlin
|
||||||
|
|||||||