dark patterns
tech cloning requires > 25% dup chance, and is now only 2x (was 3x) your dup chance for a second boss playing with the 4 community levels now removes 4 random levels from the level list tech: dark patterns - reduce combat difficulty by 1 level and add 16 junk tech to the potential tech pool
This commit is contained in:
@@ -2281,8 +2281,9 @@ const b = {
|
|||||||
botType: "dynamo",
|
botType: "dynamo",
|
||||||
friction: 0,
|
friction: 0,
|
||||||
frictionStatic: 0,
|
frictionStatic: 0,
|
||||||
frictionAir: 1,
|
frictionAir: 0.02,
|
||||||
isStatic: true,
|
spin: 0.07 * (Math.random() < 0.5 ? -1 : 1),
|
||||||
|
// isStatic: true,
|
||||||
isSensor: true,
|
isSensor: true,
|
||||||
restitution: 0,
|
restitution: 0,
|
||||||
dmg: 0, // 0.14 //damage done in addition to the damage from momentum
|
dmg: 0, // 0.14 //damage done in addition to the damage from momentum
|
||||||
@@ -2308,7 +2309,7 @@ const b = {
|
|||||||
// }
|
// }
|
||||||
if (!((m.cycle + this.phase) % 30)) { //twice a second
|
if (!((m.cycle + this.phase) % 30)) { //twice a second
|
||||||
if (Vector.magnitude(Vector.sub(this.position, m.pos)) < 250) { //give energy
|
if (Vector.magnitude(Vector.sub(this.position, m.pos)) < 250) { //give energy
|
||||||
// Matter.Body.setAngularVelocity(this, 10)
|
Matter.Body.setAngularVelocity(this, this.spin)
|
||||||
if (this.isUpgraded) {
|
if (this.isUpgraded) {
|
||||||
m.energy += 0.06
|
m.energy += 0.06
|
||||||
simulation.drawList.push({ //add dmg to draw queue
|
simulation.drawList.push({ //add dmg to draw queue
|
||||||
@@ -2344,6 +2345,7 @@ const b = {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
for (let i = 0; i < q.length; i++) {
|
for (let i = 0; i < q.length; i++) {
|
||||||
|
Matter.Body.setAngularVelocity(this, this.spin)
|
||||||
// mobs.statusStun(q[i], 180)
|
// mobs.statusStun(q[i], 180)
|
||||||
// const dmg = 0.5 * b.dmgScale * (this.isUpgraded ? 2.5 : 1)
|
// const dmg = 0.5 * b.dmgScale * (this.isUpgraded ? 2.5 : 1)
|
||||||
const dmg = 0.5 * b.dmgScale
|
const dmg = 0.5 * b.dmgScale
|
||||||
|
|||||||
27
js/index.js
27
js/index.js
@@ -65,6 +65,7 @@ window.addEventListener('load', (event) => {
|
|||||||
//add experimental selections based on url
|
//add experimental selections based on url
|
||||||
for (const property in set) {
|
for (const property in set) {
|
||||||
set[property] = set[property].replace(/%20/g, " ")
|
set[property] = set[property].replace(/%20/g, " ")
|
||||||
|
set[property] = set[property].replace(/%27/g, "'")
|
||||||
set[property] = set[property].replace(/%CE%A8/g, "Ψ")
|
set[property] = set[property].replace(/%CE%A8/g, "Ψ")
|
||||||
if (property === "field") {
|
if (property === "field") {
|
||||||
let found = false
|
let found = false
|
||||||
@@ -744,45 +745,45 @@ window.addEventListener("keydown", function(event) {
|
|||||||
tech.removeLoreTechFromPool();
|
tech.removeLoreTechFromPool();
|
||||||
}
|
}
|
||||||
simulation.makeTextLog(
|
simulation.makeTextLog(
|
||||||
`<table id="control-table">
|
`<table class="pause-table">
|
||||||
<tr>
|
<tr>
|
||||||
<td class='key-input'>T</td>
|
<td class='key-input-pause'>T</td>
|
||||||
<td class='key-used'><strong>enter / exit testing mode</strong></td>
|
<td class='key-used'><strong>toggle testing</strong></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class='key-input'>R</td>
|
<td class='key-input-pause'>R</td>
|
||||||
<td class='key-used'>teleport to mouse</td>
|
<td class='key-used'>teleport to mouse</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class='key-input'>F</td>
|
<td class='key-input-pause'>F</td>
|
||||||
<td class='key-used'>cycle field</td>
|
<td class='key-used'>cycle field</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class='key-input'>G</td>
|
<td class='key-input-pause'>G</td>
|
||||||
<td class='key-used'>all guns</td>
|
<td class='key-used'>all guns</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class='key-input'>H</td>
|
<td class='key-input-pause'>H</td>
|
||||||
<td class='key-used'>fill health and energy</td>
|
<td class='key-used'>fill health, energy</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class='key-input'>Y</td>
|
<td class='key-input-pause'>Y</td>
|
||||||
<td class='key-used'>random tech</td>
|
<td class='key-used'>random tech</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class='key-input'>U</td>
|
<td class='key-input-pause'>U</td>
|
||||||
<td class='key-used'>next level</td>
|
<td class='key-used'>next level</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class='key-input'>I/O</td>
|
<td class='key-input-pause'>I/O</td>
|
||||||
<td class='key-used'>zoom in / out</td>
|
<td class='key-used'>zoom in / out</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class='key-input'>1-8</td>
|
<td class='key-input-pause'>1-8</td>
|
||||||
<td class='key-used'>spawn things</td>
|
<td class='key-used'>spawn things</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class='key-input'>⇧X</td>
|
<td class='key-input-pause'>⇧X</td>
|
||||||
<td class='key-used'>restart</td>
|
<td class='key-used'>restart</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>`, Infinity);
|
</table>`, Infinity);
|
||||||
|
|||||||
1552
js/level.js
1552
js/level.js
File diff suppressed because it is too large
Load Diff
@@ -515,6 +515,7 @@ const simulation = {
|
|||||||
level.levels.push("basement");
|
level.levels.push("basement");
|
||||||
level.levels.push("detours");
|
level.levels.push("detours");
|
||||||
level.levels.push("house");
|
level.levels.push("house");
|
||||||
|
level.levels.splice(0, 4); //remove 4 random levels to make up for adding the 4 community levels
|
||||||
}
|
}
|
||||||
level.levels = shuffle(level.levels); //shuffles order of maps
|
level.levels = shuffle(level.levels); //shuffles order of maps
|
||||||
level.levels.unshift("intro"); //add level to the start of the randomized levels list
|
level.levels.unshift("intro"); //add level to the start of the randomized levels list
|
||||||
|
|||||||
402
js/tech.js
402
js/tech.js
@@ -7,6 +7,7 @@ const tech = {
|
|||||||
tech.tech[i].count = 0
|
tech.tech[i].count = 0
|
||||||
}
|
}
|
||||||
lore.techCount = 0;
|
lore.techCount = 0;
|
||||||
|
tech.removeJunkTechFromPool();
|
||||||
tech.removeLoreTechFromPool();
|
tech.removeLoreTechFromPool();
|
||||||
tech.addLoreTechToPool();
|
tech.addLoreTechToPool();
|
||||||
tech.armorFromPowerUps = 0;
|
tech.armorFromPowerUps = 0;
|
||||||
@@ -19,18 +20,15 @@ const tech = {
|
|||||||
simulation.updateTechHUD();
|
simulation.updateTechHUD();
|
||||||
},
|
},
|
||||||
removeLoreTechFromPool() {
|
removeLoreTechFromPool() {
|
||||||
// for (let i = 0, len = tech.tech.length; i < len; i++) {
|
|
||||||
// if (tech.tech[i].isLore) {
|
|
||||||
// console.log('found one')
|
|
||||||
// tech.tech.splice(i, 1)
|
|
||||||
// tech.removeLoreTechFromPool();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
for (let i = tech.tech.length - 1; i > 0; i--) {
|
for (let i = tech.tech.length - 1; i > 0; i--) {
|
||||||
if (tech.tech[i].isLore && tech.tech[i].count === 0) tech.tech.splice(i, 1)
|
if (tech.tech[i].isLore && tech.tech[i].count === 0) tech.tech.splice(i, 1)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
removeJunkTechFromPool() {
|
||||||
|
for (let i = tech.tech.length - 1; i > 0; i--) {
|
||||||
|
if (tech.tech[i].isJunk && tech.tech[i].count === 0) tech.tech.splice(i, 1)
|
||||||
|
}
|
||||||
|
},
|
||||||
giveTech(index = 'random') {
|
giveTech(index = 'random') {
|
||||||
if (index === 'random') {
|
if (index === 'random') {
|
||||||
let options = [];
|
let options = [];
|
||||||
@@ -935,7 +933,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "dynamo-bot upgrade",
|
name: "dynamo-bot upgrade",
|
||||||
description: "dynamo-bots <strong>regen</strong> <strong>12</strong> <strong class='color-f'>energy</strong> per second<br><em>applies to all current and future orbit-bots</em>",
|
description: "dynamo-bots <strong>regen</strong> <strong>12</strong> <strong class='color-f'>energy</strong> per second<br><em>applies to all current and future dynamo-bots</em>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -1782,7 +1780,7 @@ const tech = {
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.duplicationChance() > 0
|
return tech.duplicationChance() > 0.15
|
||||||
},
|
},
|
||||||
requires: "some duplication chance",
|
requires: "some duplication chance",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -1794,11 +1792,11 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "cloning",
|
name: "cloning",
|
||||||
description: "each level has a chance to spawn a <strong>level boss</strong><br>equal to <strong>triple</strong> your <strong class='color-dup'>duplication</strong> chance",
|
description: "each level has a chance to spawn a <strong>level boss</strong><br>equal to <strong>double</strong> your <strong class='color-dup'>duplication</strong> chance",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.duplicationChance() > 0
|
return tech.duplicationChance() > 0.25
|
||||||
},
|
},
|
||||||
requires: "some duplication chance",
|
requires: "some duplication chance",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -1974,6 +1972,23 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "dark patterns",
|
||||||
|
description: "reduce combat <strong>difficulty</strong> by <strong>1 level</strong><br>add <strong>16</strong> junk <strong class='color-m'>tech</strong> to the potential pool",
|
||||||
|
maxCount: 1,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isCustomHide: true,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return powerUps.research.count === 0 && level.onLevel < 6
|
||||||
|
},
|
||||||
|
requires: "no research, and in the first 5 levels",
|
||||||
|
effect() {
|
||||||
|
level.difficultyDecrease(simulation.difficultyMode)
|
||||||
|
for (let i = 0; i < 160; i++) tech.tech.push(tech.junk[Math.floor(Math.random() * tech.junk.length)])
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "cardinality",
|
name: "cardinality",
|
||||||
description: "<strong class='color-m'>tech</strong>, <strong class='color-f'>fields</strong>, and <strong class='color-g'>guns</strong> have <strong>5</strong> <strong>choices</strong>",
|
description: "<strong class='color-m'>tech</strong>, <strong class='color-f'>fields</strong>, and <strong class='color-g'>guns</strong> have <strong>5</strong> <strong>choices</strong>",
|
||||||
@@ -2002,9 +2017,8 @@ const tech = {
|
|||||||
requires: "not cardinality, not futures or commodities exchanges",
|
requires: "not cardinality, not futures or commodities exchanges",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
tech.isDeterminism = true;
|
tech.isDeterminism = true;
|
||||||
for (let i = 0; i < 5; i++) { //if you change the six also change it in Born rule
|
//if you change the six also change it in Born rule
|
||||||
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() {
|
||||||
tech.isDeterminism = false;
|
tech.isDeterminism = false;
|
||||||
@@ -3311,7 +3325,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
if (tech.isWideLaser) {
|
if (tech.isWideLaser) {
|
||||||
tech.wideLaser = 0
|
// tech.wideLaser = 0
|
||||||
tech.isWideLaser = false;
|
tech.isWideLaser = false;
|
||||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||||
if (b.guns[i].name === "laser") b.guns[i].chooseFireMethod()
|
if (b.guns[i].name === "laser") b.guns[i].chooseFireMethod()
|
||||||
@@ -4034,9 +4048,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
for (let i = 0; i < 6; i++) {
|
for (let i = 0; i < 6; i++) powerUps.spawn(m.pos.x, m.pos.y, "heal");
|
||||||
powerUps.spawn(m.pos.x, m.pos.y, "heal");
|
|
||||||
}
|
|
||||||
this.count--
|
this.count--
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() {}
|
||||||
@@ -4053,9 +4065,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "not exciton lattice",
|
requires: "not exciton lattice",
|
||||||
effect() {
|
effect() {
|
||||||
for (let i = 0; i < 6; i++) {
|
for (let i = 0; i < 6; i++) powerUps.spawn(m.pos.x, m.pos.y, "ammo");
|
||||||
powerUps.spawn(m.pos.x, m.pos.y, "ammo");
|
|
||||||
}
|
|
||||||
this.count--
|
this.count--
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() {}
|
||||||
@@ -4072,9 +4082,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "not superdeterminism",
|
requires: "not superdeterminism",
|
||||||
effect() {
|
effect() {
|
||||||
for (let i = 0; i < 4; i++) {
|
for (let i = 0; i < 4; i++) powerUps.spawn(m.pos.x, m.pos.y, "research");
|
||||||
powerUps.spawn(m.pos.x, m.pos.y, "research");
|
|
||||||
}
|
|
||||||
this.count--
|
this.count--
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() {}
|
||||||
@@ -4143,6 +4151,348 @@ const tech = {
|
|||||||
remove() {}
|
remove() {}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
junk: [
|
||||||
|
// {
|
||||||
|
// name: "junk",
|
||||||
|
// description: "",
|
||||||
|
// maxCount: 9,
|
||||||
|
// count: 0,
|
||||||
|
// isNonRefundable: true,
|
||||||
|
// isCustomHide: true,
|
||||||
|
// isJunk: true,
|
||||||
|
// allowed() {
|
||||||
|
// return true
|
||||||
|
// },
|
||||||
|
// requires: "",
|
||||||
|
// effect() {
|
||||||
|
|
||||||
|
// },
|
||||||
|
// remove() {}
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
name: "Sleipnir",
|
||||||
|
description: "grow more legs",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isCustomHide: true,
|
||||||
|
isJunk: true,
|
||||||
|
allowed() {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
m.draw = function() {
|
||||||
|
ctx.fillStyle = m.fillColor;
|
||||||
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
|
|
||||||
|
//draw body
|
||||||
|
ctx.save();
|
||||||
|
ctx.globalAlpha = (m.immuneCycle < m.cycle) ? 1 : 0.5
|
||||||
|
ctx.translate(m.pos.x, m.pos.y);
|
||||||
|
for (let i = 0; i < 16; i++) {
|
||||||
|
m.calcLeg(Math.PI * i / 8, -3 * i / 16)
|
||||||
|
m.drawLeg("#444")
|
||||||
|
}
|
||||||
|
ctx.rotate(m.angle);
|
||||||
|
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(0, 0, 30, 0, 2 * Math.PI);
|
||||||
|
let grd = ctx.createLinearGradient(-30, 0, 30, 0);
|
||||||
|
grd.addColorStop(0, m.fillColorDark);
|
||||||
|
grd.addColorStop(1, m.fillColor);
|
||||||
|
ctx.fillStyle = grd;
|
||||||
|
ctx.fill();
|
||||||
|
ctx.arc(15, 0, 4, 0, 2 * Math.PI);
|
||||||
|
ctx.strokeStyle = "#333";
|
||||||
|
ctx.lineWidth = 2;
|
||||||
|
ctx.stroke();
|
||||||
|
// ctx.beginPath();
|
||||||
|
// ctx.arc(15, 0, 3, 0, 2 * Math.PI);
|
||||||
|
// ctx.fillStyle = '#0cf';
|
||||||
|
// ctx.fill()
|
||||||
|
ctx.restore();
|
||||||
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||||
|
}
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "pareidolia",
|
||||||
|
description: "don't",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isCustomHide: true,
|
||||||
|
isJunk: true,
|
||||||
|
allowed() {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
m.draw = function() {
|
||||||
|
ctx.fillStyle = m.fillColor;
|
||||||
|
m.walk_cycle += m.flipLegs * m.Vx;
|
||||||
|
ctx.save();
|
||||||
|
ctx.globalAlpha = (m.immuneCycle < m.cycle) ? 1 : 0.7
|
||||||
|
ctx.translate(m.pos.x, m.pos.y);
|
||||||
|
m.calcLeg(Math.PI, -3);
|
||||||
|
m.drawLeg("#4a4a4a");
|
||||||
|
m.calcLeg(0, 0);
|
||||||
|
m.drawLeg("#333");
|
||||||
|
ctx.rotate(m.angle);
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(0, 0, 30, 0, 2 * Math.PI);
|
||||||
|
let grd = ctx.createLinearGradient(-30, 0, 30, 0);
|
||||||
|
grd.addColorStop(0, m.fillColorDark);
|
||||||
|
grd.addColorStop(1, m.fillColor);
|
||||||
|
ctx.fillStyle = grd;
|
||||||
|
ctx.fill();
|
||||||
|
ctx.strokeStyle = "#333";
|
||||||
|
ctx.lineWidth = 2;
|
||||||
|
if (!(m.angle > -Math.PI / 2 && m.angle < Math.PI / 2)) ctx.scale(1, -1); //here is the flip
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(2, -6, 7, 0, 2 * Math.PI);
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(25, -6, 7, 0.25 * Math.PI, 1.6 * Math.PI);
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(2, -10, 9, 1.25 * Math.PI, 1.75 * Math.PI);
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(25, -10, 9, 1.25 * Math.PI, 1.4 * Math.PI);
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(18, 13, 10, 0, 2 * Math.PI);
|
||||||
|
ctx.fillStyle = grd;
|
||||||
|
ctx.fill();
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(18, 13, 6, 0, 2 * Math.PI);
|
||||||
|
ctx.fillStyle = "#555";
|
||||||
|
ctx.fill();
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(3, -6, 3, 0, 2 * Math.PI);
|
||||||
|
ctx.fill();
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(26, -6, 3, 0, 2 * Math.PI);
|
||||||
|
ctx.fill();
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.restore();
|
||||||
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "prism",
|
||||||
|
description: "you cycle through different <strong>colors</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isCustomHide: true,
|
||||||
|
isJunk: true,
|
||||||
|
allowed() {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
m.color = {
|
||||||
|
hue: 0,
|
||||||
|
sat: 100,
|
||||||
|
light: 50
|
||||||
|
}
|
||||||
|
setInterval(function() {
|
||||||
|
m.color.hue++
|
||||||
|
m.setFillColors()
|
||||||
|
}, 10);
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "assimilation",
|
||||||
|
description: "all your <strong>bots</strong> are converted to the <strong>same</strong> random model",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isCustomHide: true,
|
||||||
|
isJunk: true,
|
||||||
|
allowed() {
|
||||||
|
return tech.totalBots() > 2
|
||||||
|
},
|
||||||
|
requires: "at least 3 bots",
|
||||||
|
effect() {
|
||||||
|
const total = tech.totalBots();
|
||||||
|
tech.dynamoBotCount = 0;
|
||||||
|
tech.nailBotCount = 0;
|
||||||
|
tech.laserBotCount = 0;
|
||||||
|
tech.orbitBotCount = 0;
|
||||||
|
tech.foamBotCount = 0;
|
||||||
|
tech.boomBotCount = 0;
|
||||||
|
tech.plasmaBotCount = 0;
|
||||||
|
tech.missileBotCount = 0;
|
||||||
|
for (let i = 0; i < bullet.length; i++) {
|
||||||
|
if (bullet[i].botType) bullet[i].endCycle = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
const bots = [
|
||||||
|
() => {
|
||||||
|
b.nailBot();
|
||||||
|
tech.nailBotCount++;
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
b.foamBot();
|
||||||
|
tech.foamBotCount++;
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
b.boomBot();
|
||||||
|
tech.boomBotCount++;
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
b.laserBot();
|
||||||
|
tech.laserBotCount++;
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
b.orbitBot();
|
||||||
|
tech.orbitBotCount++
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
b.dynamoBot();
|
||||||
|
tech.dynamoBotCount++
|
||||||
|
}
|
||||||
|
]
|
||||||
|
const index = Math.floor(Math.random() * bots.length)
|
||||||
|
for (let i = 0; i < total; i++) bots[index]()
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "growth hacking",
|
||||||
|
description: "increase combat <strong>difficulty</strong> by <strong>1 level</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isCustomHide: true,
|
||||||
|
isJunk: true,
|
||||||
|
allowed() {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
level.difficultyIncrease(simulation.difficultyMode)
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "stun",
|
||||||
|
description: "<strong>stun</strong> all mobs for up to <strong>10</strong> seconds",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isCustomHide: true,
|
||||||
|
isJunk: true,
|
||||||
|
allowed() {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
for (let i = 0; i < mob.length; i++) mobs.statusStun(mob[i], 600)
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "re-arm",
|
||||||
|
description: "<strong>eject</strong> all your <strong class='color-g'>guns</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isCustomHide: true,
|
||||||
|
isJunk: true,
|
||||||
|
allowed() {
|
||||||
|
return b.inventory.length > 0
|
||||||
|
},
|
||||||
|
requires: "at least 1 gun",
|
||||||
|
effect() {
|
||||||
|
for (let i = 0; i < b.inventory.length; i++) powerUps.spawn(m.pos.x, m.pos.y, "gun");
|
||||||
|
|
||||||
|
//removes guns and ammo
|
||||||
|
b.inventory = [];
|
||||||
|
b.activeGun = null;
|
||||||
|
b.inventoryGun = 0;
|
||||||
|
for (let i = 0, len = b.guns.length; i < len; ++i) {
|
||||||
|
b.guns[i].have = false;
|
||||||
|
if (b.guns[i].ammo !== Infinity) b.guns[i].ammo = 0;
|
||||||
|
}
|
||||||
|
simulation.makeGunHUD(); //update gun HUD
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "re-research",
|
||||||
|
description: "<strong>eject</strong> all your <strong class='color-r'>research</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isCustomHide: true,
|
||||||
|
isJunk: true,
|
||||||
|
allowed() {
|
||||||
|
return powerUps.research.count > 3
|
||||||
|
},
|
||||||
|
requires: "at least 4 research",
|
||||||
|
effect() {
|
||||||
|
for (let i = 0; i < powerUps.research.count; i++) powerUps.spawn(m.pos.x, m.pos.y, "research");
|
||||||
|
powerUps.research.count = 0
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "quantum black hole",
|
||||||
|
description: "use all your <strong class='color-f'>energy</strong> to<br><strong>spawn</strong> inside the event horizon of a <strong>black hole boss</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isCustomHide: true,
|
||||||
|
isJunk: true,
|
||||||
|
allowed() {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
m.energy = 0
|
||||||
|
spawn.suckerBoss(m.pos.x, m.pos.y - 1000)
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "black hole cluster",
|
||||||
|
description: "spawn <strong>2</strong> <strong class='color-r'>research</strong><br><strong>spawn</strong> 40 nearby <strong>black holes</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isCustomHide: true,
|
||||||
|
isJunk: true,
|
||||||
|
allowed() {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
for (let i = 0; i < 2; i++) powerUps.spawn(m.pos.x, m.pos.y, "research");
|
||||||
|
const unit = {
|
||||||
|
x: 1,
|
||||||
|
y: 0
|
||||||
|
}
|
||||||
|
for (let i = 0; i < 40; i++) {
|
||||||
|
const where = Vector.add(m.pos, Vector.mult(Vector.rotate(unit, Math.random() * 2 * Math.PI), 600 + 800 * Math.random()))
|
||||||
|
spawn.sucker(where.x, where.y)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
|
],
|
||||||
//variables use for gun tech upgrades
|
//variables use for gun tech upgrades
|
||||||
fireRate: null,
|
fireRate: null,
|
||||||
bulletSize: null,
|
bulletSize: null,
|
||||||
@@ -4337,5 +4687,5 @@ const tech = {
|
|||||||
isGunSwitchField: null,
|
isGunSwitchField: null,
|
||||||
isNeedleShieldPierce: null,
|
isNeedleShieldPierce: null,
|
||||||
isDuplicateBoss: null,
|
isDuplicateBoss: null,
|
||||||
isDynamoBotUpgrade: null
|
isDynamoBotUpgrade: null,
|
||||||
}
|
}
|
||||||
13
style.css
13
style.css
@@ -84,6 +84,19 @@ td {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pause-table {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.key-input-pause {
|
||||||
|
width: 15px;
|
||||||
|
padding: 0px 2px;
|
||||||
|
border: 2px solid #333;
|
||||||
|
/* border-radius: 50px; */
|
||||||
|
background-color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
.key-used {
|
.key-used {
|
||||||
color: #777;
|
color: #777;
|
||||||
font-size: 80%;
|
font-size: 80%;
|
||||||
|
|||||||
50
todo.txt
50
todo.txt
@@ -1,5 +1,9 @@
|
|||||||
******************************************************** NEXT PATCH ********************************************************
|
******************************************************** NEXT PATCH ********************************************************
|
||||||
|
|
||||||
|
tech cloning requires > 25% dup chance, and is now only 2x (was 3x) your dup chance for a second boss
|
||||||
|
playing with the 4 community levels now removes 4 random levels from the level list
|
||||||
|
|
||||||
|
tech: dark patterns - reduce combat difficulty by 1 level and add 16 junk tech to the potential tech pool
|
||||||
|
|
||||||
******************************************************** BUGS ********************************************************
|
******************************************************** BUGS ********************************************************
|
||||||
|
|
||||||
@@ -27,7 +31,23 @@
|
|||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
smooth history following for dynamo-bot?
|
reduce 3 difficulty, randomize all mods when you...
|
||||||
|
take damage
|
||||||
|
switch guns
|
||||||
|
pick up a tech
|
||||||
|
|
||||||
|
add back in gamepad support
|
||||||
|
https://github.com/landgreen/landgreen.github.io/search?q=gamepadconnected
|
||||||
|
|
||||||
|
mechanic: gain damage when there are fewer bullets
|
||||||
|
|
||||||
|
mechanic: untested tech
|
||||||
|
negative effect (one time effects are better to avoid code clutter)
|
||||||
|
change the player draw to some of the dumb stuff in discord console
|
||||||
|
convert your bots to research (requires you to have some bots)
|
||||||
|
your bots are changed to random bots
|
||||||
|
|
||||||
|
rename intro level to something lore related
|
||||||
|
|
||||||
give undefined tech different effects at different localSettings.loreCount values
|
give undefined tech different effects at different localSettings.loreCount values
|
||||||
or just random effects
|
or just random effects
|
||||||
@@ -52,11 +72,6 @@ bot: ice blast, long CD AOE freeze
|
|||||||
|
|
||||||
RPG default or tech: grenades detonate on your cursor / where your cursor was when they were fired
|
RPG default or tech: grenades detonate on your cursor / where your cursor was when they were fired
|
||||||
|
|
||||||
tech: double your research
|
|
||||||
set your duplication chance to zero
|
|
||||||
requires 5 rerolls and 20% duplication chance
|
|
||||||
might want to use a single variable for all duplication
|
|
||||||
|
|
||||||
tech: dodge chance for cloaking, harmonic fields, also pilot wave
|
tech: dodge chance for cloaking, harmonic fields, also pilot wave
|
||||||
20% chance up to 3 stacks, not additive
|
20% chance up to 3 stacks, not additive
|
||||||
0.8^count
|
0.8^count
|
||||||
@@ -74,25 +89,6 @@ tech: time dilation - when you exit time dilation rewind to the state you entere
|
|||||||
|
|
||||||
mob ability bombs/bullets that suck in player
|
mob ability bombs/bullets that suck in player
|
||||||
|
|
||||||
mechanic: technological dead end - add tech to the tech pool with a dumb effect
|
|
||||||
don't show up in custom?
|
|
||||||
negative effect (one time effects are better to avoid code clutter)
|
|
||||||
make the player rainbow colors
|
|
||||||
m.color = {
|
|
||||||
hue: 0,
|
|
||||||
sat: 100,
|
|
||||||
light: 50
|
|
||||||
}
|
|
||||||
setInterval(function(){
|
|
||||||
m.color.hue++
|
|
||||||
m.setFillColors()
|
|
||||||
}, 10);
|
|
||||||
remove all your energy
|
|
||||||
eject all your rerolls (not bad with dup)
|
|
||||||
teleport to the start of the level
|
|
||||||
remove your bots (requires you to have some bots)
|
|
||||||
your bots are changed to random bots
|
|
||||||
|
|
||||||
tech that requires integrated armament
|
tech that requires integrated armament
|
||||||
|
|
||||||
mechanic - Your energy regen is only active when field and gun have not been used for 5 seconds.
|
mechanic - Your energy regen is only active when field and gun have not been used for 5 seconds.
|
||||||
@@ -109,8 +105,6 @@ tech power up magnetism - power ups drift towards player
|
|||||||
super balls start at 3, not 4
|
super balls start at 3, not 4
|
||||||
have to balance damage
|
have to balance damage
|
||||||
|
|
||||||
RPG might need a buff, now that it disables the other cool grenade tech
|
|
||||||
|
|
||||||
make different move methods
|
make different move methods
|
||||||
tech crouch charge jump
|
tech crouch charge jump
|
||||||
tech double jump
|
tech double jump
|
||||||
@@ -143,8 +137,6 @@ mob vision: look at player history
|
|||||||
|
|
||||||
wormhole - make it clear when the wormhole can and can't teleport to a location before the player clicks
|
wormhole - make it clear when the wormhole can and can't teleport to a location before the player clicks
|
||||||
|
|
||||||
time dilation - slow down the game engine by 1/2, but run an extra player cycle to simulate slow motion
|
|
||||||
|
|
||||||
flavor - your bullets destroy blocks
|
flavor - your bullets destroy blocks
|
||||||
this isn't really a bonus, so maybe just add this as flavor to another tech field/gun
|
this isn't really a bonus, so maybe just add this as flavor to another tech field/gun
|
||||||
a chance for destroyed blocks to drop stuff
|
a chance for destroyed blocks to drop stuff
|
||||||
|
|||||||
Reference in New Issue
Block a user