sentry tech
tech: cordyceps - sporangium infect mobs, making them fight for you as zombies tech: blast ball - mines fire super balls tech: extended magazine - sentry fires 50% more shots sentry works with foam, nails, or super balls dark patterns - stacks to 9 38->15% damage, 53->15% JUNK electronegativity - stacks to 9 0.12->0.1% damage per energy bug fixes
BIN
img/blast ball.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
img/extended magazine.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 40 KiB |
174
js/bullet.js
@@ -2714,58 +2714,31 @@ const b = {
|
|||||||
range: 700 - 300 * tech.isFoamMine,
|
range: 700 - 300 * tech.isFoamMine,
|
||||||
beforeDmg() {},
|
beforeDmg() {},
|
||||||
onEnd() {
|
onEnd() {
|
||||||
|
if (this.isArmed && !tech.isMineSentry) {
|
||||||
if (tech.isFoamMine) {
|
if (tech.isFoamMine) {
|
||||||
for (let i = 0; i < 14; i++) {
|
//send 14 in random directions slowly
|
||||||
|
for (let i = 0; i < 12; i++) {
|
||||||
const radius = 13 + 8 * Math.random()
|
const radius = 13 + 8 * Math.random()
|
||||||
const velocity = {
|
const velocity = { x: 0.5 + 5.5 * Math.random(), y: 0 }
|
||||||
x: 5.5 * Math.random(),
|
|
||||||
y: 0
|
|
||||||
}
|
|
||||||
b.foam(this.position, Vector.rotate(velocity, this.angle + 1.57 + 3 * (Math.random() - 0.5)), radius) //6.28 * Math.random()
|
b.foam(this.position, Vector.rotate(velocity, this.angle + 1.57 + 3 * (Math.random() - 0.5)), radius) //6.28 * Math.random()
|
||||||
}
|
}
|
||||||
|
//send 40 targeted
|
||||||
let count = 0
|
let count = 0
|
||||||
let cycle = () => {
|
let cycle = () => {
|
||||||
if (count < 40) {
|
if (count < 50) {
|
||||||
if (!simulation.paused && !simulation.isChoosing) { //!(simulation.cycle % 1) &&
|
if (!simulation.paused && !simulation.isChoosing) { //!(simulation.cycle % 1) &&
|
||||||
count++
|
count++
|
||||||
|
b.targetedFoam(this.position)
|
||||||
const targets = [] //target nearby mobs
|
|
||||||
for (let i = 0, len = mob.length; i < len; i++) {
|
|
||||||
if (
|
|
||||||
Vector.magnitude(Vector.sub(this.position, mob[i].position)) < this.range + mob[i].radius + 300 &&
|
|
||||||
!mob[i].isBadTarget && //|| mob[i].isMobBullet
|
|
||||||
Matter.Query.ray(map, this.position, mob[i].position).length === 0 &&
|
|
||||||
!mob[i].isInvulnerable
|
|
||||||
) {
|
|
||||||
// targets.push(Vector.add(mob[i].position, Vector.mult(mob[i].velocity, dist / 50))) //predict where the mob will be in a few cycles
|
|
||||||
targets.push(mob[i]) //predict where the mob will be in a few cycles
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (targets.length > 0) { // aim near a random target in array
|
|
||||||
const index = Math.floor(Math.random() * targets.length) //pick random target from list
|
|
||||||
const radius = 7 + 10 * Math.random()
|
|
||||||
const SPEED = 23 + 6 * Math.random() - radius * 0.3 + 0.5 * targets[index].speed
|
|
||||||
const predict = Vector.mult(targets[index].velocity, Vector.magnitude(Vector.sub(this.position, targets[index].position)) / 60)
|
|
||||||
const where = Vector.add(targets[index].position, predict)
|
|
||||||
const velocity = Vector.mult(Vector.normalise(Vector.sub(where, this.position)), SPEED)
|
|
||||||
b.foam(this.position, Vector.rotate(velocity, 0.2 * (Math.random() - 0.5)), radius)
|
|
||||||
} else {
|
|
||||||
const radius = 7 + 10 * Math.random()
|
|
||||||
const velocity = {
|
|
||||||
x: 10 + 8 * Math.random(),
|
|
||||||
y: 0
|
|
||||||
}
|
|
||||||
b.foam(this.position, Vector.rotate(velocity, this.angle + 1.57 + 2.8 * (Math.random() - 0.5)), radius) //6.28 * Math.random()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
requestAnimationFrame(cycle);
|
requestAnimationFrame(cycle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
requestAnimationFrame(cycle)
|
requestAnimationFrame(cycle)
|
||||||
|
} else if (tech.isSuperMine) {
|
||||||
} else if (this.isArmed && !tech.isMineSentry) {
|
b.targetedBall(this.position, 22 + 2 * tech.extraSuperBalls)
|
||||||
b.targetedNail(this.position, tech.isMineSentry ? 7 : 22, 40 + 10 * Math.random(), 1200, true, 2.2) //targetedNail(position, num = 1, speed = 40 + 10 * Math.random(), range = 1200, isRandomAim = true, damage = 1.4) {
|
} else {
|
||||||
|
b.targetedNail(this.position, 22, 40 + 10 * Math.random(), 1200, true, 2.2) //targetedNail(position, num = 1, speed = 40 + 10 * Math.random(), range = 1200, isRandomAim = true, damage = 1.4) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
do() {
|
do() {
|
||||||
@@ -2779,8 +2752,7 @@ const b = {
|
|||||||
y: 0
|
y: 0
|
||||||
})
|
})
|
||||||
Matter.Body.setAngle(this, Math.atan2(collide[i].tangent.y, collide[i].tangent.x))
|
Matter.Body.setAngle(this, Math.atan2(collide[i].tangent.y, collide[i].tangent.x))
|
||||||
//move until touching map again after rotation
|
for (let j = 0; j < 10; j++) { //move until touching map again after rotation
|
||||||
for (let j = 0; j < 10; j++) {
|
|
||||||
if (Matter.Query.collides(this, map).length > 0) { //touching map
|
if (Matter.Query.collides(this, map).length > 0) { //touching map
|
||||||
if (angle > -0.2 || angle < -1.5) { //don't stick to level ground
|
if (angle > -0.2 || angle < -1.5) { //don't stick to level ground
|
||||||
Matter.Body.setVelocity(this, {
|
Matter.Body.setVelocity(this, {
|
||||||
@@ -2798,7 +2770,6 @@ const b = {
|
|||||||
Matter.Body.setAngularVelocity(this, 0)
|
Matter.Body.setAngularVelocity(this, 0)
|
||||||
}
|
}
|
||||||
this.arm();
|
this.arm();
|
||||||
|
|
||||||
//sometimes the mine can't attach to map and it just needs to be reset
|
//sometimes the mine can't attach to map and it just needs to be reset
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (Matter.Query.collides(this, map).length === 0 || Matter.Query.point(map, this.position).length > 0) {
|
if (Matter.Query.collides(this, map).length === 0 || Matter.Query.point(map, this.position).length > 0) {
|
||||||
@@ -2809,8 +2780,7 @@ const b = {
|
|||||||
}, 100);
|
}, 100);
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
//move until you are touching the wall
|
Matter.Body.setPosition(this, Vector.add(this.position, Vector.mult(collide[i].normal, 2))) //move until you are touching the wall
|
||||||
Matter.Body.setPosition(this, Vector.add(this.position, Vector.mult(collide[i].normal, 2)))
|
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -2848,13 +2818,25 @@ const b = {
|
|||||||
) {
|
) {
|
||||||
if (tech.isStun) b.AoEStunEffect(this.position, this.range + mob[i].radius + random); //AoEStunEffect(where, range, cycles = 90 + 60 * Math.random()) {
|
if (tech.isStun) b.AoEStunEffect(this.position, this.range + mob[i].radius + random); //AoEStunEffect(where, range, cycles = 90 + 60 * Math.random()) {
|
||||||
if (tech.isMineSentry) {
|
if (tech.isMineSentry) {
|
||||||
this.lookFrequency = 6
|
this.lookFrequency = 15 + 10 * (tech.oneSuperBall && tech.isSuperMine) + Math.floor(3 * Math.random())
|
||||||
this.endCycle = simulation.cycle + 1020
|
// this.endCycle = Infinity
|
||||||
|
this.shots = tech.sentryAmmo
|
||||||
this.do = function() { //overwrite the do method for this bullet
|
this.do = function() { //overwrite the do method for this bullet
|
||||||
this.force.y += this.mass * 0.002; //extra gravity
|
this.force.y += this.mass * 0.002; //extra gravity
|
||||||
if (!(simulation.cycle % this.lookFrequency)) { //find mob targets
|
if (!(simulation.cycle % this.lookFrequency)) { //find mob targets
|
||||||
this.endCycle -= 5
|
if (tech.isFoamMine) {
|
||||||
b.targetedNail(this.position, 1, 45 + 5 * Math.random(), 1100, false, 2.3) //targetedNail(position, num = 1, speed = 40 + 10 * Math.random(), range = 1200, isRandomAim = true, damage = 1.4) {
|
this.shots -= 0.6 * b.targetedFoam(this.position, 1, 21 + 7 * Math.random(), 1200, false)
|
||||||
|
b.targetedFoam(this.position, 1, 21 + 7 * Math.random(), 1200, false)
|
||||||
|
} else if (tech.isSuperMine) {
|
||||||
|
const cost = tech.oneSuperBall ? 2 : 0.7
|
||||||
|
this.shots -= cost * b.targetedBall(this.position, 1, 42 + 12 * Math.random(), 1200, false)
|
||||||
|
for (let i = 0, len = tech.extraSuperBalls / 4; i < len; i++) {
|
||||||
|
if (Math.random() < 0.33) b.targetedBall(this.position, 1, 42 + 12 * Math.random(), 1200, false)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.shots -= b.targetedNail(this.position, 1, 45 + 5 * Math.random(), 1100, false, 2.3) //targetedNail(position, num = 1, speed = 40 + 10 * Math.random(), range = 1200, isRandomAim = true, damage = 1.4) {
|
||||||
|
}
|
||||||
|
if (this.shots < 0) this.endCycle = 0
|
||||||
if (!(simulation.cycle % (this.lookFrequency * 6))) {
|
if (!(simulation.cycle % (this.lookFrequency * 6))) {
|
||||||
simulation.drawList.push({
|
simulation.drawList.push({
|
||||||
x: this.position.x,
|
x: this.position.x,
|
||||||
@@ -3769,7 +3751,7 @@ const b = {
|
|||||||
bullet[me] = Bodies.polygon(where.x, where.y, 12, radius, b.fireAttributes(dir, false));
|
bullet[me] = Bodies.polygon(where.x, where.y, 12, radius, b.fireAttributes(dir, false));
|
||||||
Composite.add(engine.world, bullet[me]); //add bullet to world
|
Composite.add(engine.world, bullet[me]); //add bullet to world
|
||||||
Matter.Body.setVelocity(bullet[me], velocity);
|
Matter.Body.setVelocity(bullet[me], velocity);
|
||||||
Matter.Body.setDensity(bullet[me], 0.0001 + 0.001 * tech.superHarm);
|
Matter.Body.setDensity(bullet[me], 0.0008 + 0.0008 * tech.superHarm);
|
||||||
bullet[me].endCycle = simulation.cycle + Math.floor(300 + 90 * Math.random());
|
bullet[me].endCycle = simulation.cycle + Math.floor(300 + 90 * Math.random());
|
||||||
bullet[me].minDmgSpeed = 0;
|
bullet[me].minDmgSpeed = 0;
|
||||||
bullet[me].restitution = 1;
|
bullet[me].restitution = 1;
|
||||||
@@ -3786,7 +3768,7 @@ const b = {
|
|||||||
bullet[me].collidePlayerDo = function() {
|
bullet[me].collidePlayerDo = function() {
|
||||||
if (Matter.Query.collides(this, [player]).length) {
|
if (Matter.Query.collides(this, [player]).length) {
|
||||||
this.endCycle = 0
|
this.endCycle = 0
|
||||||
let dmg = 0.03 * this.mass * tech.superHarm
|
let dmg = 0.02 * this.mass * tech.superHarm
|
||||||
m.damage(dmg);
|
m.damage(dmg);
|
||||||
simulation.drawList.push({ //add dmg to draw queue
|
simulation.drawList.push({ //add dmg to draw queue
|
||||||
x: this.position.x,
|
x: this.position.x,
|
||||||
@@ -3811,24 +3793,81 @@ const b = {
|
|||||||
}
|
}
|
||||||
bullet[me].beforeDmg = function(who) {
|
bullet[me].beforeDmg = function(who) {
|
||||||
if (tech.oneSuperBall) mobs.statusStun(who, 120) // (2.3) * 2 / 14 ticks (2x damage over 7 seconds)
|
if (tech.oneSuperBall) mobs.statusStun(who, 120) // (2.3) * 2 / 14 ticks (2x damage over 7 seconds)
|
||||||
// if (tech.isIncendiary) {
|
|
||||||
// b.explosion(this.position, this.mass * (240+70 * Math.random()) ); //makes bullet do explosive damage at end
|
|
||||||
// this.endCycle = 0
|
|
||||||
// }
|
|
||||||
if (tech.isFoamBall) {
|
if (tech.isFoamBall) {
|
||||||
for (let i = 0, len = 6 * this.mass; i < len; i++) {
|
for (let i = 0, len = 6 * this.mass; i < len; i++) {
|
||||||
const radius = 5 + 8 * Math.random()
|
const radius = 5 + 8 * Math.random()
|
||||||
// const velocity = { x: Math.max(2, 10 - radius * 0.25), y: 0 }
|
const velocity = { x: Math.max(0.5, 2 - radius * 0.1), y: 0 }
|
||||||
const velocity = {
|
|
||||||
x: Math.max(0.5, 2 - radius * 0.1),
|
|
||||||
y: 0
|
|
||||||
}
|
|
||||||
b.foam(this.position, Vector.rotate(velocity, 6.28 * Math.random()), radius)
|
b.foam(this.position, Vector.rotate(velocity, 6.28 * Math.random()), radius)
|
||||||
}
|
}
|
||||||
this.endCycle = 0
|
this.endCycle = 0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
targetedBall(position, num = 1, speed = 42 + 12 * Math.random(), range = 1200, isRandomAim = true) {
|
||||||
|
let shotsFired = 0
|
||||||
|
const targets = [] //target nearby mobs
|
||||||
|
for (let i = 0, len = mob.length; i < len; i++) {
|
||||||
|
const dist = Vector.magnitude(Vector.sub(position, mob[i].position));
|
||||||
|
if (
|
||||||
|
dist < range + mob[i].radius &&
|
||||||
|
!mob[i].isBadTarget &&
|
||||||
|
Matter.Query.ray(map, position, mob[i].position).length === 0 &&
|
||||||
|
Matter.Query.ray(body, position, mob[i].position).length === 0 &&
|
||||||
|
!mob[i].isInvulnerable
|
||||||
|
) {
|
||||||
|
targets.push(Vector.add(mob[i].position, Vector.mult(mob[i].velocity, dist / 60))) //predict where the mob will be in a few cycles
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const radius = (11 + 10 * tech.oneSuperBall) * tech.bulletSize
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
if (targets.length > 0) { // aim near a random target in array
|
||||||
|
const index = Math.floor(Math.random() * targets.length)
|
||||||
|
const SPREAD = 160 / targets.length
|
||||||
|
const WHERE = {
|
||||||
|
x: targets[index].x + SPREAD * (Math.random() - 0.5),
|
||||||
|
y: targets[index].y + SPREAD * (Math.random() - 0.5)
|
||||||
|
}
|
||||||
|
b.superBall(position, Vector.mult(Vector.normalise(Vector.sub(WHERE, position)), speed), radius)
|
||||||
|
shotsFired++
|
||||||
|
} else if (isRandomAim) { // aim in random direction
|
||||||
|
const ANGLE = 2 * Math.PI * Math.random()
|
||||||
|
b.superBall(position, { x: speed * Math.cos(ANGLE), y: speed * Math.sin(ANGLE) }, radius)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return shotsFired
|
||||||
|
},
|
||||||
|
targetedFoam(position, num = 1, speed = 21 + 7 * Math.random(), range = 1200, isRandomAim = true) {
|
||||||
|
let shotsFired = 0
|
||||||
|
const targets = [] //target nearby mobs
|
||||||
|
for (let i = 0, len = mob.length; i < len; i++) {
|
||||||
|
const dist = Vector.magnitude(Vector.sub(position, mob[i].position));
|
||||||
|
if (
|
||||||
|
dist < range + mob[i].radius &&
|
||||||
|
!mob[i].isBadTarget && //|| mob[i].isMobBullet
|
||||||
|
Matter.Query.ray(map, position, mob[i].position).length === 0 &&
|
||||||
|
!mob[i].isInvulnerable
|
||||||
|
) {
|
||||||
|
targets.push(Vector.add(mob[i].position, Vector.mult(mob[i].velocity, dist / 60))) //predict where the mob will be in a few cycles
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
if (targets.length > 0) { // aim near a random target in array
|
||||||
|
const SPREAD = 160 / targets.length
|
||||||
|
const index = Math.floor(Math.random() * targets.length)
|
||||||
|
const radius = 11 + 12 * Math.random()
|
||||||
|
const where = {
|
||||||
|
x: targets[index].x + SPREAD * (Math.random() - 0.5),
|
||||||
|
y: targets[index].y + SPREAD * (Math.random() - 0.5)
|
||||||
|
}
|
||||||
|
b.foam(position, Vector.mult(Vector.normalise(Vector.sub(where, position)), speed - radius * 0.25), radius)
|
||||||
|
shotsFired++
|
||||||
|
} else if (isRandomAim) { // aim in random direction
|
||||||
|
const ANGLE = 2 * Math.PI * Math.random()
|
||||||
|
b.foam(position, { x: speed * Math.cos(ANGLE), y: speed * Math.sin(ANGLE) }, 8 + 11 * Math.random())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return shotsFired
|
||||||
|
},
|
||||||
// plasmaBall(position, velocity, radius) {
|
// plasmaBall(position, velocity, radius) {
|
||||||
// // radius *= Math.sqrt(tech.bulletSize)
|
// // radius *= Math.sqrt(tech.bulletSize)
|
||||||
// const me = bullet.length;
|
// const me = bullet.length;
|
||||||
@@ -4186,6 +4225,7 @@ const b = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
targetedNail(position, num = 1, speed = 40 + 10 * Math.random(), range = 1200, isRandomAim = true, damage = 1.4) {
|
targetedNail(position, num = 1, speed = 40 + 10 * Math.random(), range = 1200, isRandomAim = true, damage = 1.4) {
|
||||||
|
let shotsFired = 0
|
||||||
const targets = [] //target nearby mobs
|
const targets = [] //target nearby mobs
|
||||||
for (let i = 0, len = mob.length; i < len; i++) {
|
for (let i = 0, len = mob.length; i < len; i++) {
|
||||||
const dist = Vector.magnitude(Vector.sub(position, mob[i].position));
|
const dist = Vector.magnitude(Vector.sub(position, mob[i].position));
|
||||||
@@ -4208,14 +4248,17 @@ const b = {
|
|||||||
y: targets[index].y + SPREAD * (Math.random() - 0.5)
|
y: targets[index].y + SPREAD * (Math.random() - 0.5)
|
||||||
}
|
}
|
||||||
b.nail(position, Vector.mult(Vector.normalise(Vector.sub(WHERE, position)), speed), damage)
|
b.nail(position, Vector.mult(Vector.normalise(Vector.sub(WHERE, position)), speed), damage)
|
||||||
|
shotsFired++
|
||||||
} else if (isRandomAim) { // aim in random direction
|
} else if (isRandomAim) { // aim in random direction
|
||||||
const ANGLE = 2 * Math.PI * Math.random()
|
const ANGLE = 2 * Math.PI * Math.random()
|
||||||
b.nail(position, {
|
b.nail(position, {
|
||||||
x: speed * Math.cos(ANGLE),
|
x: speed * Math.cos(ANGLE),
|
||||||
y: speed * Math.sin(ANGLE)
|
y: speed * Math.sin(ANGLE)
|
||||||
}, damage)
|
}, damage)
|
||||||
|
shotsFired++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return shotsFired
|
||||||
},
|
},
|
||||||
crit(mob, bullet) {
|
crit(mob, bullet) {
|
||||||
if (!mob.shield && Vector.dot(Vector.normalise(Vector.sub(mob.position, bullet.position)), Vector.normalise(bullet.velocity)) > 0.999 - 1 / mob.radius) {
|
if (!mob.shield && Vector.dot(Vector.normalise(Vector.sub(mob.position, bullet.position)), Vector.normalise(bullet.velocity)) > 0.999 - 1 / mob.radius) {
|
||||||
@@ -4263,9 +4306,9 @@ const b = {
|
|||||||
bullet[me].dmg = tech.isNailRadiation ? 0 : dmg
|
bullet[me].dmg = tech.isNailRadiation ? 0 : dmg
|
||||||
bullet[me].beforeDmg = function(who) { //beforeDmg is rewritten with ice crystal tech
|
bullet[me].beforeDmg = function(who) { //beforeDmg is rewritten with ice crystal tech
|
||||||
if (tech.isNailRadiation) mobs.statusDoT(who, dmg * (tech.isFastRadiation ? 1.3 : 0.44), tech.isSlowRadiation ? 360 : (tech.isFastRadiation ? 60 : 180)) // one tick every 30 cycles
|
if (tech.isNailRadiation) mobs.statusDoT(who, dmg * (tech.isFastRadiation ? 1.3 : 0.44), tech.isSlowRadiation ? 360 : (tech.isFastRadiation ? 60 : 180)) // one tick every 30 cycles
|
||||||
if (tech.isNailCrit) {
|
if (tech.isNailCrit) { //makes bullet do explosive damage if it hits center
|
||||||
if (!who.shield && Vector.dot(Vector.normalise(Vector.sub(who.position, this.position)), Vector.normalise(this.velocity)) > 0.97 - 1 / who.radius) {
|
if (!who.shield && Vector.dot(Vector.normalise(Vector.sub(who.position, this.position)), Vector.normalise(this.velocity)) > 0.97 - 1 / who.radius) {
|
||||||
b.explosion(this.position, 150 + 30 * Math.random()); //makes bullet do explosive damage at end
|
b.explosion(this.position, 80 + 90 * (b.activeGun === 0) + 30 * Math.random()); //larger explosions for human aimed nail gun, smaller for auto aimed sources, like bots, and mine
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.ricochet(who)
|
this.ricochet(who)
|
||||||
@@ -7463,6 +7506,15 @@ const b = {
|
|||||||
ammo: 0,
|
ammo: 0,
|
||||||
ammoPack: 1.7,
|
ammoPack: 1.7,
|
||||||
have: false,
|
have: false,
|
||||||
|
nameString(suffix = "") {
|
||||||
|
if (tech.isFoamMine) {
|
||||||
|
return `<strong>foam</strong>`
|
||||||
|
} else if (tech.isSuperMine) {
|
||||||
|
return `<strong>super ball${suffix}</strong>`
|
||||||
|
} else {
|
||||||
|
return `<strong>nail${suffix}</strong>`
|
||||||
|
}
|
||||||
|
},
|
||||||
do() {
|
do() {
|
||||||
if (!input.field && input.down && !tech.isLaserMine) {
|
if (!input.field && input.down && !tech.isLaserMine) {
|
||||||
const cycles = 60 //30
|
const cycles = 60 //30
|
||||||
|
|||||||
16
js/level.js
@@ -18,7 +18,7 @@ const level = {
|
|||||||
// simulation.enableConstructMode() //tech.giveTech('motion sickness') //used to build maps in testing mode
|
// simulation.enableConstructMode() //tech.giveTech('motion sickness') //used to build maps in testing mode
|
||||||
// simulation.isHorizontalFlipped = true
|
// simulation.isHorizontalFlipped = true
|
||||||
// tech.giveTech("performance")
|
// tech.giveTech("performance")
|
||||||
// level.difficultyIncrease(30 * 4) //30 is near max on hard //60 is near max on why
|
// level.difficultyIncrease(10 * 4) //30 is near max on hard //60 is near max on why
|
||||||
// m.maxHealth = m.health = 100
|
// m.maxHealth = m.health = 100
|
||||||
// tech.isRerollDamage = true
|
// tech.isRerollDamage = true
|
||||||
// powerUps.research.changeRerolls(10)
|
// powerUps.research.changeRerolls(10)
|
||||||
@@ -28,15 +28,16 @@ const level = {
|
|||||||
// m.setField("perfect diamagnetism") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass pilot wave plasma torch
|
// m.setField("perfect diamagnetism") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass pilot wave plasma torch
|
||||||
// simulation.molecularMode = 2
|
// simulation.molecularMode = 2
|
||||||
// m.damage(0.1);
|
// m.damage(0.1);
|
||||||
// b.giveGuns("super balls") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
// b.giveGuns("mine") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
||||||
// b.giveGuns("spores") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
// b.giveGuns("spores") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
||||||
// b.guns[0].ammo = 10000
|
// b.guns[0].ammo = 10000
|
||||||
// tech.giveTech("cordyceps")
|
// tech.giveTech("blast ball")
|
||||||
// tech.giveTech("Zectron")
|
// tech.giveTech("elephants toothpaste")
|
||||||
|
// tech.giveTech("sentry gun")
|
||||||
// for (let i = 0; i < 1; ++i) tech.giveTech("super ball")
|
// for (let i = 0; i < 1; ++i) tech.giveTech("super ball")
|
||||||
// tech.isFoamBall = true
|
// tech.isFoamBall = true
|
||||||
// for (let i = 0; i < 1; ++i) tech.giveTech("incendiary ammunition")
|
// for (let i = 0; i < 1; ++i) tech.giveTech("super ball")
|
||||||
// for (let i = 0; i < 2; i++) tech.giveTech("unified field theory")
|
// for (let i = 0; i < 1; i++) tech.giveTech("irradiated nails")
|
||||||
// for (let i = 0; i < 1; i++) tech.giveTech("colony")
|
// for (let i = 0; i < 1; i++) tech.giveTech("colony")
|
||||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(450, -50, "tech");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(450, -50, "tech");
|
||||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "boost");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "boost");
|
||||||
@@ -47,7 +48,8 @@ const level = {
|
|||||||
// spawn.starter(1900, -500, 25)
|
// spawn.starter(1900, -500, 25)
|
||||||
// spawn.sneaker(1900, -500, 25)
|
// spawn.sneaker(1900, -500, 25)
|
||||||
// spawn.hopper(2538, -950)
|
// spawn.hopper(2538, -950)
|
||||||
// for (let i = 0; i < 2; ++i) spawn.starter(1000 + 1000 * Math.random(), -500 + 300 * Math.random())
|
// spawn.zombie(1000 + 1000 * Math.random(), -500 + 300 * Math.random(), 30, 5, "white") // zombie(x, y, radius, sides, color)
|
||||||
|
// for (let i = 0; i < 20; ++i) spawn.starter(1000 + 1000 * Math.random(), -500 + 300 * Math.random())
|
||||||
// tech.addJunkTechToPool(2)
|
// tech.addJunkTechToPool(2)
|
||||||
// tech.tech[322].frequency = 100
|
// tech.tech[322].frequency = 100
|
||||||
// spawn.tetherBoss(1900, -500, { x: 1900, y: -500 })
|
// spawn.tetherBoss(1900, -500, { x: 1900, y: -500 })
|
||||||
|
|||||||
@@ -1194,7 +1194,7 @@ const mobs = {
|
|||||||
if (this.isDropPowerUp) {
|
if (this.isDropPowerUp) {
|
||||||
if (this.isSoonZombie) { //spawn zombie on death
|
if (this.isSoonZombie) { //spawn zombie on death
|
||||||
this.leaveBody = false;
|
this.leaveBody = false;
|
||||||
let count = 45 //delay spawn cycles
|
let count = 5 //delay spawn cycles
|
||||||
let cycle = () => {
|
let cycle = () => {
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
if (m.alive) requestAnimationFrame(cycle);
|
if (m.alive) requestAnimationFrame(cycle);
|
||||||
|
|||||||
@@ -1992,7 +1992,7 @@ const m = {
|
|||||||
//
|
//
|
||||||
const angleReduction = 0.1 + (Math.PI / 2 - Math.min(Math.PI / 2, Math.abs(m.angle + Math.PI / 2)))
|
const angleReduction = 0.1 + (Math.PI / 2 - Math.min(Math.PI / 2, Math.abs(m.angle + Math.PI / 2)))
|
||||||
if (player.velocity.y > 1) {
|
if (player.velocity.y > 1) {
|
||||||
player.force.y -= angleReduction * (tech.isBigField ? 0.87 : 0.7) * player.mass * simulation.g;
|
player.force.y -= angleReduction * (tech.isBigField ? 0.9 : 0.7) * player.mass * simulation.g;
|
||||||
Matter.Body.setVelocity(player, {
|
Matter.Body.setVelocity(player, {
|
||||||
x: player.velocity.x,
|
x: player.velocity.x,
|
||||||
y: 0.98 * player.velocity.y
|
y: 0.98 * player.velocity.y
|
||||||
|
|||||||
@@ -645,13 +645,20 @@ const powerUps = {
|
|||||||
},
|
},
|
||||||
buildColumns(totalChoices, type) {
|
buildColumns(totalChoices, type) {
|
||||||
let width
|
let width
|
||||||
if (canvas.width < 1500) {
|
if (canvas.width < 1710) {
|
||||||
width = "340px"
|
width = "285px"
|
||||||
} else if (canvas.width < 1950) {
|
} else if (canvas.width < 1950) {
|
||||||
width = "360px"
|
width = "340px"
|
||||||
} 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 (localSettings.isHideImages || canvas.width < 1200) {
|
if (localSettings.isHideImages || canvas.width < 1200) {
|
||||||
document.getElementById("choose-grid").style.gridTemplateColumns = width
|
document.getElementById("choose-grid").style.gridTemplateColumns = width
|
||||||
@@ -1150,7 +1157,7 @@ const powerUps = {
|
|||||||
powerUps.research.currentRerollCount = 0
|
powerUps.research.currentRerollCount = 0
|
||||||
if (tech.isTechDamage && who.name === "tech") m.damage(0.1)
|
if (tech.isTechDamage && who.name === "tech") m.damage(0.1)
|
||||||
if (tech.isMassEnergy) m.energy += 2;
|
if (tech.isMassEnergy) m.energy += 2;
|
||||||
if (tech.isMineDrop && bullet.length < 150 && Math.random() < 0.6) {
|
if (tech.isMineDrop && bullet.length < 150 && Math.random() < 0.5) {
|
||||||
if (tech.isLaserMine && input.down) {
|
if (tech.isLaserMine && input.down) {
|
||||||
b.laserMine(who.position)
|
b.laserMine(who.position)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -447,9 +447,10 @@ const simulation = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tech.crouchAmmoCount) tech.crouchAmmoCount = 1 //this prevents hacking the tech by switching guns
|
if (tech.crouchAmmoCount) tech.crouchAmmoCount = 1 //this prevents hacking the tech by switching guns
|
||||||
|
if (b.inventory.length > 0) {
|
||||||
b.activeGun = b.inventory[b.inventoryGun];
|
b.activeGun = b.inventory[b.inventoryGun];
|
||||||
if (b.guns[b.activeGun].charge) b.guns[b.activeGun].charge = 0; //if switching into foam set charge to 0
|
if (b.guns[b.activeGun].charge) b.guns[b.activeGun].charge = 0; //if switching into foam set charge to 0
|
||||||
|
}
|
||||||
simulation.updateGunHUD();
|
simulation.updateGunHUD();
|
||||||
simulation.boldActiveGunHUD();
|
simulation.boldActiveGunHUD();
|
||||||
},
|
},
|
||||||
@@ -895,7 +896,7 @@ const simulation = {
|
|||||||
if (tech.isMutualism && !tech.isEnergyHealth) {
|
if (tech.isMutualism && !tech.isEnergyHealth) {
|
||||||
for (let i = 0; i < bullet.length; i++) {
|
for (let i = 0; i < bullet.length; i++) {
|
||||||
if (bullet[i].isMutualismActive) {
|
if (bullet[i].isMutualismActive) {
|
||||||
m.health += 0.01 + 0.01 * ((bullet[i].isSpore || bullet[i].isFlea) ? 0: 1)
|
m.health += 0.01 + 0.01 * ((bullet[i].isSpore || bullet[i].isFlea) ? 0 : 1)
|
||||||
if (m.health > m.maxHealth) m.health = m.maxHealth;
|
if (m.health > m.maxHealth) m.health = m.maxHealth;
|
||||||
m.displayHealth();
|
m.displayHealth();
|
||||||
}
|
}
|
||||||
@@ -1168,18 +1169,6 @@ const simulation = {
|
|||||||
m.energy -= 0.1 * simulation.difficultyMode
|
m.energy -= 0.1 * simulation.difficultyMode
|
||||||
}
|
}
|
||||||
if (isNaN(player.position.x)) m.death();
|
if (isNaN(player.position.x)) m.death();
|
||||||
|
|
||||||
// if (tech.isEnergyDamage) {
|
|
||||||
// document.getElementById("tech-capacitor").innerHTML = `(+${(m.energy/0.05).toFixed(0)}%)`
|
|
||||||
// }
|
|
||||||
// if (tech.restDamage) {
|
|
||||||
// if (player.speed < 1) {
|
|
||||||
// document.getElementById("tech-rest").innerHTML = `(+20%)`
|
|
||||||
// } else {
|
|
||||||
// document.getElementById("tech-rest").innerHTML = `(+0%)`
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
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) m.addHealth(0.005 * m.maxHealth)
|
||||||
|
|||||||
86
js/spawn.js
@@ -1542,14 +1542,15 @@ const spawn = {
|
|||||||
zombie(x, y, radius, sides, color) { //mob that attacks other mobs
|
zombie(x, y, radius, sides, color) { //mob that attacks other mobs
|
||||||
mobs.spawn(x, y, sides, radius, color);
|
mobs.spawn(x, y, sides, radius, color);
|
||||||
let me = mob[mob.length - 1];
|
let me = mob[mob.length - 1];
|
||||||
me.damageReduction = 0 //take NO damage until targeting player, but also slowly lose health
|
me.damageReduction = 0 //take NO damage, but also slowly lose health
|
||||||
|
Matter.Body.setDensity(me, 0.0001) // normal density is 0.001 // this reduces life by half and decreases knockback
|
||||||
me.isZombie = true
|
me.isZombie = true
|
||||||
me.isBadTarget = true;
|
me.isBadTarget = true;
|
||||||
me.isDropPowerUp = false;
|
me.isDropPowerUp = false;
|
||||||
me.showHealthBar = false;
|
me.showHealthBar = false;
|
||||||
me.stroke = "#83a"
|
me.stroke = "#83a"
|
||||||
me.accelMag = 0.0015
|
me.accelMag = 0.001
|
||||||
me.frictionAir = 0.01
|
me.frictionAir = 0.005
|
||||||
me.collisionFilter.mask = cat.player | cat.map | cat.body | cat.mob
|
me.collisionFilter.mask = cat.player | cat.map | cat.body | cat.mob
|
||||||
me.seeAtDistance2 = 1000000 //1000 vision range
|
me.seeAtDistance2 = 1000000 //1000 vision range
|
||||||
// me.onDeath = function() {
|
// me.onDeath = function() {
|
||||||
@@ -1577,39 +1578,36 @@ const spawn = {
|
|||||||
me.mobSearchIndex = 0;
|
me.mobSearchIndex = 0;
|
||||||
me.target = null
|
me.target = null
|
||||||
me.lookForMobTargets = function() {
|
me.lookForMobTargets = function() {
|
||||||
if (!(simulation.cycle % 10)) {
|
if (this.target === null && mob.length > 1 && !(simulation.cycle % this.seePlayerFreq)) { //find mob targets
|
||||||
if (this.target === null) { //if you have no target
|
let closeDist = Infinity;
|
||||||
this.mobSearchIndex++ //look for a different mob index every time
|
for (let i = 0, len = mob.length; i < len; ++i) {
|
||||||
if (this.mobSearchIndex > mob.length - 1) this.mobSearchIndex = 0
|
|
||||||
if (
|
if (
|
||||||
mob.length > 1 &&
|
!mob[i].isZombie &&
|
||||||
!mob[this.mobSearchIndex].isZombie &&
|
!mob[i].isUnblockable &&
|
||||||
(Vector.magnitudeSquared(Vector.sub(this.position, mob[this.mobSearchIndex].position)) < this.seeAtDistance2 && Matter.Query.ray(map, this.position, mob[this.mobSearchIndex].position).length === 0)
|
Matter.Query.ray(map, this.position, mob[i].position).length === 0 &&
|
||||||
|
Matter.Query.ray(body, this.position, mob[i].position).length === 0
|
||||||
|
// !mob[i].isBadTarget &&
|
||||||
|
// !mob[i].isInvulnerable &&
|
||||||
|
// (Vector.magnitudeSquared(Vector.sub(this.position, mob[this.mobSearchIndex].position)) < this.seeAtDistance2)
|
||||||
) {
|
) {
|
||||||
this.target = mob[this.mobSearchIndex]
|
const DIST = Vector.magnitude(Vector.sub(this.position, mob[i].position));
|
||||||
} else if (Math.random() < 0.005 * player.speed && (Vector.magnitudeSquared(Vector.sub(this.position, player.position)) < this.seeAtDistance2 || Matter.Query.ray(map, this.position, player.position).length === 0)) {
|
if (DIST < closeDist) {
|
||||||
this.target = player
|
closeDist = DIST;
|
||||||
this.isBadTarget = false;
|
this.target = mob[i]
|
||||||
this.damageReduction = 0.5
|
|
||||||
me.collisionFilter.mask = cat.player | cat.map | cat.body | cat.bullet | cat.mob
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//chance to forget target
|
} else if (
|
||||||
if (!(simulation.cycle % this.memory) && this.target) {
|
!(simulation.cycle % this.memory) &&
|
||||||
if (
|
this.target &&
|
||||||
(this.target && this.target !== player && !this.target.alive) ||
|
(!this.target.alive || Matter.Query.ray(map, this.position, this.target.position).length !== 0)
|
||||||
Vector.magnitudeSquared(Vector.sub(this.position, this.target.position)) > this.seeAtDistance2 ||
|
|
||||||
Matter.Query.ray(map, this.position, this.target.position).length !== 0
|
|
||||||
) {
|
) {
|
||||||
this.target = null
|
this.target = null //chance to forget target
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
me.zombieHealthBar = function() {
|
me.zombieHealthBar = function() {
|
||||||
this.health -= 0.0005 //decay
|
this.health -= 0.0004 //decay
|
||||||
if ((this.health < 0.01 || isNaN(this.health)) && this.alive) this.death();
|
if ((this.health < 0.01 || isNaN(this.health)) && this.alive) this.death();
|
||||||
|
|
||||||
const h = this.radius * 0.3;
|
const h = this.radius * 0.3;
|
||||||
const w = this.radius * 2;
|
const w = this.radius * 2;
|
||||||
const x = this.position.x - w / 2;
|
const x = this.position.x - w / 2;
|
||||||
@@ -1624,14 +1622,18 @@ const spawn = {
|
|||||||
if (this.hitCD < simulation.cycle) {
|
if (this.hitCD < simulation.cycle) {
|
||||||
if (this.target) {
|
if (this.target) {
|
||||||
this.force = Vector.mult(Vector.normalise(Vector.sub(this.target.position, this.position)), this.accelMag * this.mass)
|
this.force = Vector.mult(Vector.normalise(Vector.sub(this.target.position, this.position)), this.accelMag * this.mass)
|
||||||
|
} else { //wonder around
|
||||||
|
this.torque += 0.0000003 * this.inertia;
|
||||||
|
const mag = 0.00015 * this.mass
|
||||||
|
this.force.x += mag * Math.cos(this.angle)
|
||||||
|
this.force.y += mag * Math.sin(this.angle)
|
||||||
|
}
|
||||||
if (this.speed > 6) { // speed cap instead of friction to give more agility
|
if (this.speed > 6) { // speed cap instead of friction to give more agility
|
||||||
Matter.Body.setVelocity(this, {
|
Matter.Body.setVelocity(this, {
|
||||||
x: this.velocity.x * 0.97,
|
x: this.velocity.x * 0.93,
|
||||||
y: this.velocity.y * 0.97
|
y: this.velocity.y * 0.93
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const hit = (who) => {
|
const hit = (who) => {
|
||||||
if (!who.isZombie && who.damageReduction) {
|
if (!who.isZombie && who.damageReduction) {
|
||||||
this.hitCD = simulation.cycle + 15
|
this.hitCD = simulation.cycle + 15
|
||||||
@@ -1641,7 +1643,7 @@ const spawn = {
|
|||||||
this.force.y -= force.y;
|
this.force.y -= force.y;
|
||||||
this.target = null //look for a new target
|
this.target = null //look for a new target
|
||||||
|
|
||||||
const dmg = 0.2 * m.dmgScale
|
const dmg = 1.3 * m.dmgScale
|
||||||
who.damage(dmg);
|
who.damage(dmg);
|
||||||
who.locatePlayer();
|
who.locatePlayer();
|
||||||
simulation.drawList.push({
|
simulation.drawList.push({
|
||||||
@@ -1662,8 +1664,6 @@ const spawn = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// me.onDamage = function(dmg) {
|
|
||||||
// }
|
|
||||||
},
|
},
|
||||||
starter(x, y, radius = Math.floor(15 + 20 * Math.random())) { //easy mob for on level 1
|
starter(x, y, radius = Math.floor(15 + 20 * Math.random())) { //easy mob for on level 1
|
||||||
mobs.spawn(x, y, 8, radius, "#9ccdc6");
|
mobs.spawn(x, y, 8, radius, "#9ccdc6");
|
||||||
@@ -5736,9 +5736,9 @@ const spawn = {
|
|||||||
me.collisionFilter.mask = cat.map | cat.body | cat.bullet | cat.mob //can't touch player
|
me.collisionFilter.mask = cat.map | cat.body | cat.bullet | cat.mob //can't touch player
|
||||||
me.showHealthBar = false;
|
me.showHealthBar = false;
|
||||||
me.memory = 30;
|
me.memory = 30;
|
||||||
me.vanishesLeft = 2+simulation.difficultyMode
|
me.vanishesLeft = 2 + simulation.difficultyMode
|
||||||
me.onDamage = function() {
|
me.onDamage = function() {
|
||||||
if (this.vanishesLeft>0 && this.health < 0.1){ //if health is below 10% teleport to a random spot on player history, heal, and cloak
|
if (this.vanishesLeft > 0 && this.health < 0.1) { //if health is below 10% teleport to a random spot on player history, heal, and cloak
|
||||||
this.vanishesLeft--
|
this.vanishesLeft--
|
||||||
|
|
||||||
// const scale = 0.95;
|
// const scale = 0.95;
|
||||||
@@ -5746,20 +5746,20 @@ const spawn = {
|
|||||||
// this.radius *= scale;
|
// this.radius *= scale;
|
||||||
|
|
||||||
//flash screen to hide vanish
|
//flash screen to hide vanish
|
||||||
for(let i=0; i<8; i++){
|
for (let i = 0; i < 8; i++) {
|
||||||
simulation.drawList.push({
|
simulation.drawList.push({
|
||||||
x: this.position.x,
|
x: this.position.x,
|
||||||
y: this.position.y,
|
y: this.position.y,
|
||||||
radius: 3000,
|
radius: 3000,
|
||||||
color: `rgba(0, 0, 0,${1-0.1*i})`,
|
color: `rgba(0, 0, 0,${1-0.1*i})`,
|
||||||
time: (i+1)*3
|
time: (i + 1) * 3
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
//teleport to near the end of player history
|
//teleport to near the end of player history
|
||||||
const index = Math.floor( (m.history.length-1)*(0.66+0.2*Math.random() ))
|
const index = Math.floor((m.history.length - 1) * (0.66 + 0.2 * Math.random()))
|
||||||
let history = m.history[(m.cycle - index) % 600]
|
let history = m.history[(m.cycle - index) % 600]
|
||||||
Matter.Body.setPosition(this, history.position)
|
Matter.Body.setPosition(this, history.position)
|
||||||
Matter.Body.setVelocity(this, {x: 0,y: 0});
|
Matter.Body.setVelocity(this, { x: 0, y: 0 });
|
||||||
|
|
||||||
this.seePlayer.recall = 0
|
this.seePlayer.recall = 0
|
||||||
this.cloak();
|
this.cloak();
|
||||||
@@ -5828,13 +5828,13 @@ const spawn = {
|
|||||||
me.memory = 240;
|
me.memory = 240;
|
||||||
me.isVanished = false;
|
me.isVanished = false;
|
||||||
me.onDamage = function() {
|
me.onDamage = function() {
|
||||||
if (!this.isVanished && this.health < 0.1){ //if health is below 10% teleport to a random spot on player history, heal, and cloak
|
if (!this.isVanished && this.health < 0.1 && !this.isStunned && !this.isSlowed) { //if health is below 10% teleport to a random spot on player history, heal, and cloak
|
||||||
this.health = 1;
|
this.health = 1;
|
||||||
this.isVanished = true
|
this.isVanished = true
|
||||||
this.cloak();
|
this.cloak();
|
||||||
//teleport to near the end of player history
|
//teleport to near the end of player history
|
||||||
Matter.Body.setPosition(this, m.history[Math.floor((m.history.length-1)*(0.66+0.33*Math.random()))].position)
|
Matter.Body.setPosition(this, m.history[Math.floor((m.history.length - 1) * (0.66 + 0.33 * Math.random()))].position)
|
||||||
Matter.Body.setVelocity(this, {x: 0,y: 0});
|
Matter.Body.setVelocity(this, { x: 0, y: 0 });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
me.cloak = function() {
|
me.cloak = function() {
|
||||||
@@ -5847,7 +5847,7 @@ const spawn = {
|
|||||||
}
|
}
|
||||||
me.do = function() {
|
me.do = function() {
|
||||||
this.gravity();
|
this.gravity();
|
||||||
this.seePlayerByHistory(15);
|
this.seePlayerByHistory(25);
|
||||||
this.checkStatus();
|
this.checkStatus();
|
||||||
this.attraction();
|
this.attraction();
|
||||||
//draw
|
//draw
|
||||||
|
|||||||
366
js/tech.js
@@ -236,7 +236,7 @@ const tech = {
|
|||||||
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)
|
||||||
if (tech.isEnergyDamage) dmg *= 1 + m.energy * 0.125;
|
if (tech.energyDamage) dmg *= 1 + m.energy * 0.1 * tech.energyDamage;
|
||||||
if (tech.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.007
|
if (tech.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.007
|
||||||
if (tech.isNoFireDamage && m.cycle > m.fireCDcycle + 120) dmg *= 2
|
if (tech.isNoFireDamage && m.cycle > m.fireCDcycle + 120) dmg *= 2
|
||||||
if (tech.isSpeedDamage) dmg *= 1 + Math.min(0.66, player.speed * 0.0165)
|
if (tech.isSpeedDamage) dmg *= 1 + Math.min(0.66, player.speed * 0.0165)
|
||||||
@@ -396,7 +396,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
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><br> `
|
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,
|
||||||
@@ -414,7 +414,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><br> `
|
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,
|
||||||
@@ -886,7 +886,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "anti-shear topology",
|
name: "anti-shear topology",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Topology' class="link">anti-shear topology</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Topology' class="link">anti-shear topology</a>`,
|
||||||
description: "<strong>+30%</strong> projectile <strong>duration</strong><br> ", //<br><em style = 'font-size: 83%'>drone spore worm flea missile foam wave neutron ice</em>",
|
description: "<strong>+30%</strong> projectile <strong>duration</strong>", //<br><em style = 'font-size: 83%'>drone spore worm flea missile foam wave neutron ice</em>",
|
||||||
maxCount: 3,
|
maxCount: 3,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -1019,7 +1019,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "reaction inhibitor",
|
name: "reaction inhibitor",
|
||||||
description: "<strong>-12%</strong> maximum mob <strong>health</strong><br> ", //<strong class='color-h'>health</strong>
|
description: "<strong>-12%</strong> maximum mob <strong>health</strong>", //<strong class='color-h'>health</strong>
|
||||||
maxCount: 3,
|
maxCount: 3,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -1084,7 +1084,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "nail-bot",
|
name: "nail-bot",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">nail-bot</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">nail-bot</a>`,
|
||||||
description: "a <strong class='color-bot'>bot</strong> fires <strong>nails</strong> at mobs in line of sight<br> ",
|
description: "a <strong class='color-bot'>bot</strong> fires <strong>nails</strong> at mobs in line of sight",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -1142,7 +1142,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "foam-bot",
|
name: "foam-bot",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">foam-bot</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">foam-bot</a>`,
|
||||||
description: "a <strong class='color-bot'>bot</strong> fires <strong>foam</strong> at nearby mobs<br> ",
|
description: "a <strong class='color-bot'>bot</strong> fires <strong>foam</strong> at nearby mobs",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -1683,7 +1683,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "mass driver",
|
name: "mass driver",
|
||||||
description: "<strong>+300%</strong> <strong class='color-block'>block</strong> collision <strong class='color-d'>damage</strong><br> ",
|
description: "<strong>+300%</strong> <strong class='color-block'>block</strong> collision <strong class='color-d'>damage</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -2345,7 +2345,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "mass-energy equivalence",
|
name: "mass-energy equivalence",
|
||||||
// description: "<strong class='color-f'>energy</strong> protects you instead of <strong class='color-h'>health</strong><br>√ of <strong class='color-defense'>defense</strong> <strong>reduction</strong> reduces max <strong class='color-f'>energy</strong>",
|
// description: "<strong class='color-f'>energy</strong> protects you instead of <strong class='color-h'>health</strong><br>√ of <strong class='color-defense'>defense</strong> <strong>reduction</strong> reduces max <strong class='color-f'>energy</strong>",
|
||||||
description: "<strong class='color-f'>energy</strong> protects you instead of <strong class='color-h'>health</strong><br>exponentially <strong>reduced</strong> <strong class='color-defense'>defense</strong> <em>(x^0.1)</em>",
|
description: "<strong class='color-f'>energy</strong> protects you instead of <strong class='color-h'>health</strong><br>exponentially <strong>reduced</strong> <strong class='color-defense'>defense</strong> <em>(~ x^0.1)</em>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -2411,10 +2411,10 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "electronegativity",
|
name: "electronegativity",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `<strong>+1%</strong> <strong class='color-d'>damage</strong> per <strong>8</strong> stored <strong class='color-f'>energy</strong><br><em>(${(12.5*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: 1,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
frequencyDefault: 1,
|
frequencyDefault: 1,
|
||||||
@@ -2423,10 +2423,10 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isEnergyDamage = true
|
tech.energyDamage++
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isEnergyDamage = false;
|
tech.energyDamage = 0;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2585,7 +2585,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "energy conservation",
|
name: "energy conservation",
|
||||||
description: "<strong>5%</strong> of <strong class='color-d'>damage</strong> done recovered as <strong class='color-f'>energy</strong><br> ",
|
description: "<strong>5%</strong> of <strong class='color-d'>damage</strong> done recovered as <strong class='color-f'>energy</strong>",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -3447,8 +3447,8 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "dark patterns",
|
name: "dark patterns",
|
||||||
description: "<strong>+38%</strong> <strong class='color-d'>damage</strong><br><strong>+53%</strong> <strong class='color-junk'>JUNK</strong> to <strong class='color-m'>tech</strong> pool",
|
description: "<strong>+15%</strong> <strong class='color-d'>damage</strong><br><strong>+15%</strong> <strong class='color-junk'>JUNK</strong> to <strong class='color-m'>tech</strong> pool",
|
||||||
maxCount: 1,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
frequencyDefault: 1,
|
frequencyDefault: 1,
|
||||||
@@ -3456,10 +3456,10 @@ const tech = {
|
|||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
requires: "",
|
requires: "",
|
||||||
damage: 1.38,
|
damage: 1.15,
|
||||||
effect() {
|
effect() {
|
||||||
tech.damage *= this.damage
|
tech.damage *= this.damage
|
||||||
this.refundAmount += tech.addJunkTechToPool(0.53)
|
this.refundAmount += tech.addJunkTechToPool(0.15)
|
||||||
},
|
},
|
||||||
refundAmount: 0,
|
refundAmount: 0,
|
||||||
remove() {
|
remove() {
|
||||||
@@ -3511,7 +3511,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "eternalism",
|
name: "eternalism",
|
||||||
description: "<strong>+34%</strong> <strong class='color-d'>damage</strong><br><strong>time</strong> can't be <strong>paused</strong> <em>(time can be dilated)</em>",
|
description: "<strong>+30%</strong> <strong class='color-d'>damage</strong><br><strong>time</strong> can't be <strong>paused</strong> <em>(time can be dilated)</em>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -3520,7 +3520,7 @@ const tech = {
|
|||||||
return !tech.isPauseSwitchField && !tech.isPauseEjectTech && !tech.isWormHolePause
|
return !tech.isPauseSwitchField && !tech.isPauseEjectTech && !tech.isWormHolePause
|
||||||
},
|
},
|
||||||
requires: "not unified field theory, paradigm shift, invariant",
|
requires: "not unified field theory, paradigm shift, invariant",
|
||||||
damage: 1.34,
|
damage: 1.3,
|
||||||
effect() {
|
effect() {
|
||||||
tech.damage *= this.damage
|
tech.damage *= this.damage
|
||||||
tech.isNoDraftPause = true
|
tech.isNoDraftPause = true
|
||||||
@@ -3845,7 +3845,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "correlated damage",
|
name: "correlated damage",
|
||||||
description: "<strong class='color-dup'>duplication</strong> increases <strong class='color-d'>damage</strong><br> ",
|
description: "<strong class='color-dup'>duplication</strong> increases <strong class='color-d'>damage</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -4153,7 +4153,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "needle gun",
|
name: "needle gun",
|
||||||
description: "<strong>nail gun</strong> and <strong>shotgun</strong> fire mob piercing <strong>needles</strong><br> ",
|
description: "<strong>nail gun</strong> and <strong>shotgun</strong> fire mob piercing <strong>needles</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4211,7 +4211,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "rivet gun",
|
name: "rivet gun",
|
||||||
description: "<strong>nail gun</strong> and <strong>shotgun</strong> slowly lob a heavy <strong>rivet</strong><br> ",
|
description: "<strong>nail gun</strong> and <strong>shotgun</strong> slowly lob a heavy <strong>rivet</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4337,7 +4337,7 @@ const tech = {
|
|||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.isMineDrop + tech.isNailBotUpgrade + tech.fragments + tech.nailsDeathMob + (tech.haveGunCheck("super balls") + (tech.haveGunCheck("mine") && !(tech.isLaserMine || tech.isFoamMine)) + (tech.haveGunCheck("nail gun")) + tech.isNeedles + tech.isNailShot + tech.isRivets) * 2 > 1
|
return tech.isMineDrop + tech.isNailBotUpgrade + tech.fragments + tech.nailsDeathMob + (tech.haveGunCheck("super balls") + (tech.haveGunCheck("mine") && !(tech.isFoamMine || tech.isSuperMine)) + (tech.haveGunCheck("nail gun")) + tech.isNeedles + tech.isNailShot + tech.isRivets) * 2 > 1
|
||||||
},
|
},
|
||||||
requires: "nails, nail gun, rivets, shotgun, super balls, mine",
|
requires: "nails, nail gun, rivets, shotgun, super balls, mine",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -4356,9 +4356,9 @@ const tech = {
|
|||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return (tech.isNailShot || tech.isNeedles || tech.isNailBotUpgrade || tech.haveGunCheck("nail gun") || tech.isRivets) && !tech.isIncendiary && !tech.isCritKill
|
return (tech.isNailShot || tech.isNeedles || tech.isNailBotUpgrade || tech.haveGunCheck("nail gun") || tech.isRivets || (tech.haveGunCheck("mine") && !(tech.isFoamMine || tech.isSuperMine))) && !tech.isIncendiary && !tech.isCritKill
|
||||||
},
|
},
|
||||||
requires: "nail gun, needles, nails, rivets, not incendiary, stress concentration",
|
requires: "nail gun, mine, needles, nails, rivets, not incendiary, stress concentration",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isNailCrit = true
|
tech.isNailCrit = true
|
||||||
},
|
},
|
||||||
@@ -4376,7 +4376,7 @@ const tech = {
|
|||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.isMineDrop || tech.isNailBotUpgrade || tech.fragments || tech.nailsDeathMob || (tech.haveGunCheck("mine") && !(tech.isLaserMine || tech.isFoamMine)) || (tech.haveGunCheck("nail gun") && !tech.isShieldPierce) || (tech.haveGunCheck("shotgun") && (tech.isNeedles || tech.isNailShot))
|
return tech.isMineDrop || tech.isNailBotUpgrade || tech.fragments || tech.nailsDeathMob || (tech.haveGunCheck("mine") && !(tech.isFoamMine || tech.isSuperMine)) || (tech.haveGunCheck("nail gun") && !tech.isShieldPierce) || (tech.haveGunCheck("shotgun") && (tech.isNeedles || tech.isNailShot))
|
||||||
},
|
},
|
||||||
requires: "nail gun, nails, rivets, mine, not ceramic needles",
|
requires: "nail gun, nails, rivets, mine, not ceramic needles",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -4468,7 +4468,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Newtons 3rd law",
|
name: "Newtons 3rd law",
|
||||||
description: "<strong>+66%</strong> <strong>shotgun</strong> <strong><em>fire rate</em></strong> and <strong>recoil</strong><br> ",
|
description: "<strong>+66%</strong> <strong>shotgun</strong> <strong><em>fire rate</em></strong> and <strong>recoil</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4508,7 +4508,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "nail-shot",
|
name: "nail-shot",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Nail_(fastener)' class="link">nail-shot</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Nail_(fastener)' class="link">nail-shot</a>`,
|
||||||
description: "<strong>shotgun</strong> drives a long clip of <strong>nails</strong><br> ",
|
description: "<strong>shotgun</strong> drives a long clip of <strong>nails</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4528,7 +4528,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "foam-shot",
|
name: "foam-shot",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Foam' class="link">foam-shot</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Foam' class="link">foam-shot</a>`,
|
||||||
description: "<strong>shotgun</strong> sprays sticky <strong>foam</strong> bubbles<br> ",
|
description: "<strong>shotgun</strong> sprays sticky <strong>foam</strong> bubbles",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4548,7 +4548,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "ice-shot",
|
name: "ice-shot",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Ice-nine_(disambiguation)' class="link">ice-shot</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Ice-nine_(disambiguation)' class="link">ice-shot</a>`,
|
||||||
description: "<strong>shotgun</strong> grows freezing <strong class='color-s'>ice IX</strong> crystals<br> ",
|
description: "<strong>shotgun</strong> grows freezing <strong class='color-s'>ice IX</strong> crystals",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4567,7 +4567,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "freezer burn",
|
name: "freezer burn",
|
||||||
description: "mobs <strong class='color-s'>frozen</strong> while below <strong>33%</strong> durability <strong>die</strong><br> ",
|
description: "mobs <strong class='color-s'>frozen</strong> while below <strong>33%</strong> durability <strong>die</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4669,7 +4669,7 @@ const tech = {
|
|||||||
frequency: 1,
|
frequency: 1,
|
||||||
frequencyDefault: 1,
|
frequencyDefault: 1,
|
||||||
allowed() {
|
allowed() {
|
||||||
return (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIceShot && !tech.isRivets && !tech.isFoamShot && !tech.isSporeWorm && !tech.isSporeFlea && !tech.isNeedles) || (tech.haveGunCheck("super balls") && !tech.isFoamBall && !tech.superHarm) || (tech.isRivets && !tech.isNailCrit) || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 3) || (tech.haveGunCheck("drones") && !tech.isForeverDrones && !tech.isDroneRadioactive && !tech.isDroneTeleport)
|
return (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIceShot && !tech.isRivets && !tech.isFoamShot && !tech.isSporeWorm && !tech.isSporeFlea && !tech.isNeedles) || ((tech.haveGunCheck("super balls") || tech.isSuperMine) && !tech.isFoamBall && !tech.superHarm) || (tech.isRivets && !tech.isNailCrit) || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 3) || (tech.haveGunCheck("drones") && !tech.isForeverDrones && !tech.isDroneRadioactive && !tech.isDroneTeleport)
|
||||||
},
|
},
|
||||||
requires: "shotgun, super balls, rivets, drones, not irradiated drones, burst drones, polyurethane, Zectron",
|
requires: "shotgun, super balls, rivets, drones, not irradiated drones, burst drones, polyurethane, Zectron",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -4679,6 +4679,44 @@ const tech = {
|
|||||||
tech.isIncendiary = false;
|
tech.isIncendiary = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Zectron",
|
||||||
|
description: `<strong>+80%</strong> <strong>super ball</strong> density and <strong class='color-d'>damage</strong>, but<br>after colliding with <strong>super balls</strong> <strong>lose</strong> <strong class='color-h'>health</strong>`,
|
||||||
|
isGunTech: true,
|
||||||
|
maxCount: 9,
|
||||||
|
count: 0,
|
||||||
|
frequency: 2,
|
||||||
|
frequencyDefault: 2,
|
||||||
|
allowed() {
|
||||||
|
return (tech.haveGunCheck("super balls") || tech.isSuperMine) && !tech.isIncendiary
|
||||||
|
},
|
||||||
|
requires: "super balls not incendiary ammunition",
|
||||||
|
effect() {
|
||||||
|
tech.superHarm++
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.superHarm = 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "polyurethane foam",
|
||||||
|
description: "<strong>super balls</strong> and <strong>harpoons</strong> colliding with <strong>mobs</strong><br>catalyzes a reaction that yields <strong>foam</strong> bubbles",
|
||||||
|
isGunTech: true,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 2,
|
||||||
|
frequencyDefault: 2,
|
||||||
|
allowed() {
|
||||||
|
return (tech.haveGunCheck("super balls") || tech.isSuperMine) || (tech.haveGunCheck("harpoon") && !tech.fragments)
|
||||||
|
},
|
||||||
|
requires: "super balls, harpoon, not fragmentation",
|
||||||
|
effect() {
|
||||||
|
tech.isFoamBall = true;
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isFoamBall = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "autocannon",
|
name: "autocannon",
|
||||||
description: "fire <strong>+1</strong> extra <strong>super ball</strong><br><strong>balls</strong> are quickly released in same direction",
|
description: "fire <strong>+1</strong> extra <strong>super ball</strong><br><strong>balls</strong> are quickly released in same direction",
|
||||||
@@ -4706,39 +4744,20 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "Zectron",
|
|
||||||
description: `<strong>+80%</strong> <strong>super ball</strong> density and <strong class='color-d'>damage</strong>, but<br>after colliding with <strong>super balls</strong> <strong>lose</strong> <strong class='color-h'>health</strong>`,
|
|
||||||
isGunTech: true,
|
|
||||||
maxCount: 9,
|
|
||||||
count: 0,
|
|
||||||
frequency: 2,
|
|
||||||
frequencyDefault: 2,
|
|
||||||
allowed() {
|
|
||||||
return tech.haveGunCheck("super balls") && !tech.isIncendiary
|
|
||||||
},
|
|
||||||
requires: "super balls not incendiary ammunition",
|
|
||||||
effect() {
|
|
||||||
tech.superHarm++
|
|
||||||
},
|
|
||||||
remove() {
|
|
||||||
tech.superHarm = 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "super duper",
|
name: "super duper",
|
||||||
description: `randomly fire <strong>+0</strong>, <strong>+1</strong>, or <strong>+2</strong> extra <strong>super balls</strong><br> `,
|
description: `randomly fire <strong>+0</strong>, <strong>+1</strong>, <strong>+2</strong>, or <strong>+3</strong> extra <strong>super balls</strong>`,
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("super balls") && !tech.oneSuperBall
|
return (tech.haveGunCheck("super balls") || tech.isSuperMine) && !tech.oneSuperBall
|
||||||
},
|
},
|
||||||
requires: "super balls, not super ball",
|
requires: "super balls, not super ball",
|
||||||
effect() {
|
effect() {
|
||||||
tech.extraSuperBalls += 3
|
tech.extraSuperBalls += 4
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.extraSuperBalls = 0;
|
tech.extraSuperBalls = 0;
|
||||||
@@ -4753,7 +4772,7 @@ const tech = {
|
|||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("super balls") && !tech.extraSuperBalls && !tech.superBallDelay
|
return (tech.haveGunCheck("super balls") || tech.isSuperMine) && !tech.extraSuperBalls && !tech.superBallDelay
|
||||||
},
|
},
|
||||||
requires: "super balls, not super duper or autocannon",
|
requires: "super balls, not super duper or autocannon",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -4771,26 +4790,6 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "polyurethane foam",
|
|
||||||
description: "<strong>super balls</strong> and <strong>harpoons</strong> colliding with <strong>mobs</strong><br>catalyzes a reaction that yields <strong>foam</strong> bubbles",
|
|
||||||
isGunTech: true,
|
|
||||||
maxCount: 1,
|
|
||||||
count: 0,
|
|
||||||
frequency: 2,
|
|
||||||
frequencyDefault: 2,
|
|
||||||
allowed() {
|
|
||||||
return tech.haveGunCheck("super balls") || (tech.haveGunCheck("harpoon") && !tech.fragments)
|
|
||||||
},
|
|
||||||
requires: "super balls, harpoon, not fragmentation",
|
|
||||||
effect() {
|
|
||||||
tech.isFoamBall = true;
|
|
||||||
},
|
|
||||||
remove() {
|
|
||||||
tech.isFoamBall = false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//
|
|
||||||
{
|
{
|
||||||
name: "phase velocity",
|
name: "phase velocity",
|
||||||
description: "wave particles <strong>propagate</strong> faster as <strong>solids</strong><br><strong>+35%</strong> wave <strong class='color-d'>damage</strong>",
|
description: "wave particles <strong>propagate</strong> faster as <strong>solids</strong><br><strong>+35%</strong> wave <strong class='color-d'>damage</strong>",
|
||||||
@@ -5145,7 +5144,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "ammonium nitrate",
|
name: "ammonium nitrate",
|
||||||
description: "<strong>+24%</strong> <strong class='color-e'>explosive</strong> <strong class='color-d'>damage</strong>, radius<br> ",
|
description: "<strong>+24%</strong> <strong class='color-e'>explosive</strong> <strong class='color-d'>damage</strong>, radius",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -5508,7 +5507,7 @@ const tech = {
|
|||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
// return (tech.haveGunCheck("nail gun") && !tech.isRivets && !tech.isNeedles) || (tech.haveGunCheck("mines"))
|
// return (tech.haveGunCheck("nail gun") && !tech.isRivets && !tech.isNeedles) || (tech.haveGunCheck("mines"))
|
||||||
return tech.isMineDrop || tech.isNailBotUpgrade || tech.fragments || tech.nailsDeathMob || (tech.haveGunCheck("mine") && !(tech.isLaserMine || tech.isFoamMine)) || (tech.haveGunCheck("nail gun") && !tech.isRivets && !tech.isNeedles) || (tech.haveGunCheck("shotgun") && (tech.isNeedles || tech.isNailShot) && !tech.isRivets && !tech.isNeedles)
|
return tech.isMineDrop || tech.isNailBotUpgrade || tech.fragments || tech.nailsDeathMob || (tech.haveGunCheck("mine") && !(tech.isLaserMine || tech.isFoamMine || tech.isSuperMine)) || (tech.haveGunCheck("nail gun") && !tech.isRivets && !tech.isNeedles) || (tech.haveGunCheck("shotgun") && (tech.isNeedles || tech.isNailShot) && !tech.isRivets && !tech.isNeedles)
|
||||||
},
|
},
|
||||||
//
|
//
|
||||||
requires: "nail gun, not rotary cannon, rivets, or needles",
|
requires: "nail gun, not rotary cannon, rivets, or needles",
|
||||||
@@ -5521,7 +5520,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "booby trap",
|
name: "booby trap",
|
||||||
description: "<strong>60%</strong> chance to drop a <strong>mine</strong> from <strong>power ups</strong><br><strong>+46%</strong> <strong class='color-junk'>JUNK</strong> to <strong class='color-m'>tech</strong> pool",
|
description: "<strong>50%</strong> chance to drop a <strong>mine</strong> from <strong>power ups</strong><br><strong>+36%</strong> <strong class='color-junk'>JUNK</strong> to <strong class='color-m'>tech</strong> pool",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -5537,7 +5536,7 @@ const tech = {
|
|||||||
x: 0,
|
x: 0,
|
||||||
y: 0
|
y: 0
|
||||||
}, 0)
|
}, 0)
|
||||||
this.refundAmount += tech.addJunkTechToPool(0.46)
|
this.refundAmount += tech.addJunkTechToPool(0.36)
|
||||||
},
|
},
|
||||||
refundAmount: 0,
|
refundAmount: 0,
|
||||||
remove() {
|
remove() {
|
||||||
@@ -5550,16 +5549,16 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "elephants toothpaste",
|
name: "elephants toothpaste",
|
||||||
description: "<strong>mines</strong> catalyze a reaction<br>that yields <strong>foam</strong> bubbles",
|
description: "instead of nails <strong>mines</strong> catalyze a reaction<br>that yields <strong>foam</strong> bubbles",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("mine") && !tech.isMineSentry
|
return tech.haveGunCheck("mine") && !tech.isSuperMine && !tech.isRicochet && !tech.isNailRadiation && !tech.isNailCrit
|
||||||
},
|
},
|
||||||
requires: "mines, not sentry",
|
requires: "mines, not blast ball, ricochet, irradiated nails, supercritical fission",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isFoamMine = true;
|
tech.isFoamMine = true;
|
||||||
},
|
},
|
||||||
@@ -5567,6 +5566,27 @@ const tech = {
|
|||||||
tech.isFoamMine = false;
|
tech.isFoamMine = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "blast ball",
|
||||||
|
descriptionFunction() {
|
||||||
|
return `instead of nails <strong>mines</strong> fire bouncy ${b.guns[10].nameString('s')}`
|
||||||
|
},
|
||||||
|
isGunTech: true,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 2,
|
||||||
|
frequencyDefault: 2,
|
||||||
|
allowed() {
|
||||||
|
return tech.haveGunCheck("mine") && !tech.isFoamMine && !tech.isRicochet && !tech.isNailRadiation && !tech.isNailCrit
|
||||||
|
},
|
||||||
|
requires: "mines, not elephants toothpaste, ricochet, irradiated nails, supercritical fission",
|
||||||
|
effect() {
|
||||||
|
tech.isSuperMine = true;
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isSuperMine = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "laser-mines",
|
name: "laser-mines",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Laser' class="link">laser-mines</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Laser' class="link">laser-mines</a>`,
|
||||||
@@ -5588,8 +5608,10 @@ const tech = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "sentry",
|
name: "sentry gun",
|
||||||
description: "instead of detonating, <strong>mines</strong> <strong>target</strong> mobs<br>with a stream of nails for about <strong>17</strong> seconds",
|
descriptionFunction() {
|
||||||
|
return `<strong>mines</strong> fire one ${b.guns[10].nameString()} at a time<br><strong>mines</strong> fire <strong>50%</strong> more ${b.guns[10].nameString('s')}`
|
||||||
|
},
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -5606,6 +5628,27 @@ const tech = {
|
|||||||
tech.isMineSentry = false;
|
tech.isMineSentry = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "extended magazine",
|
||||||
|
descriptionFunction() {
|
||||||
|
return `sentry <strong>mines</strong> fire <strong>50%</strong> more ${b.guns[10].nameString('s')}`
|
||||||
|
},
|
||||||
|
isGunTech: true,
|
||||||
|
maxCount: 9,
|
||||||
|
count: 0,
|
||||||
|
frequency: 2,
|
||||||
|
frequencyDefault: 2,
|
||||||
|
allowed() {
|
||||||
|
return tech.haveGunCheck("mine") && tech.isMineSentry
|
||||||
|
},
|
||||||
|
requires: "mines, sentry",
|
||||||
|
effect() {
|
||||||
|
tech.sentryAmmo += 17;
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.sentryAmmo = 33;
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "mycelial fragmentation",
|
name: "mycelial fragmentation",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Fungus' class="link">mycelial fragmentation</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Fungus' class="link">mycelial fragmentation</a>`,
|
||||||
@@ -5626,25 +5669,28 @@ const tech = {
|
|||||||
tech.isSporeGrowth = false
|
tech.isSporeGrowth = false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// {
|
{
|
||||||
// name: "cordyceps",
|
name: "cordyceps",
|
||||||
// description: "mobs infected by <strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong><br><strong>resurrect</strong> and attack other mobs",
|
// descriptionFunction() {
|
||||||
// isGunTech: true,
|
// return `mobs infected by ${b.guns[6].nameString('s')} have a <strong>5%</strong> chance<br>to <strong>resurrect</strong> and attack other mobs`
|
||||||
// maxCount: 1,
|
|
||||||
// count: 0,
|
|
||||||
// frequency: 2,
|
|
||||||
// frequencyDefault: 2,
|
|
||||||
// allowed() {
|
|
||||||
// return tech.haveGunCheck("spores")
|
|
||||||
// },
|
|
||||||
// requires: "spores",
|
|
||||||
// effect() {
|
|
||||||
// tech.isZombieMobs = true
|
|
||||||
// },
|
|
||||||
// remove() {
|
|
||||||
// tech.isZombieMobs = false
|
|
||||||
// }
|
|
||||||
// },
|
// },
|
||||||
|
description: "<strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> <strong>infect</strong> mobs they attach to<br><strong>infected</strong> mobs <strong>resurrect</strong> and attack other mobs",
|
||||||
|
isGunTech: true,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 2,
|
||||||
|
frequencyDefault: 2,
|
||||||
|
allowed() {
|
||||||
|
return tech.haveGunCheck("spores")
|
||||||
|
},
|
||||||
|
requires: "spores",
|
||||||
|
effect() {
|
||||||
|
tech.isZombieMobs = true
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isZombieMobs = false
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "colony",
|
name: "colony",
|
||||||
description: "<strong>+50%</strong> <strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> discharge<br><strong>40%</strong> chance to discharge something different",
|
description: "<strong>+50%</strong> <strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> discharge<br><strong>40%</strong> chance to discharge something different",
|
||||||
@@ -5805,7 +5851,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "siphonaptera",
|
name: "siphonaptera",
|
||||||
description: "<strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> and <strong>shotgun</strong> hatch <strong class='color-p' style='letter-spacing: -0.8px;'>fleas</strong><br> ",
|
description: "<strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> and <strong>shotgun</strong> hatch <strong class='color-p' style='letter-spacing: -0.8px;'>fleas</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -5825,7 +5871,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "nematodes",
|
name: "nematodes",
|
||||||
description: "<strong>shotgun</strong> and <strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> hatch <strong class='color-p' style='letter-spacing: -0.8px;'>worms</strong><br> ",
|
description: "<strong>shotgun</strong> and <strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> hatch <strong class='color-p' style='letter-spacing: -0.8px;'>worms</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -6209,7 +6255,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "surface tension",
|
name: "surface tension",
|
||||||
description: "<strong>+43%</strong> <strong>foam</strong> <strong class='color-d'>damage</strong><br> ",
|
description: "<strong>+43%</strong> <strong>foam</strong> <strong class='color-d'>damage</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -6417,7 +6463,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "alternator",
|
name: "alternator",
|
||||||
description: "<strong>+90%</strong> <strong>harpoon</strong> <strong class='color-f'>energy</strong> efficiency<br> ",
|
description: "<strong>+90%</strong> <strong>harpoon</strong> <strong class='color-f'>energy</strong> efficiency",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -6652,7 +6698,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "relativistic momentum",
|
name: "relativistic momentum",
|
||||||
description: "<strong class='color-laser'>lasers</strong> push <strong>mobs</strong> and <strong class='color-block'>blocks</strong><br> ",
|
description: "<strong class='color-laser'>lasers</strong> push <strong>mobs</strong> and <strong class='color-block'>blocks</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -6737,7 +6783,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "specular reflection",
|
name: "specular reflection",
|
||||||
description: "<strong>+2</strong> <strong class='color-laser'>laser</strong> beam reflections<br> ",
|
description: "<strong>+2</strong> <strong class='color-laser'>laser</strong> beam reflections",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 3,
|
maxCount: 3,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -6756,7 +6802,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "diffraction grating",
|
name: "diffraction grating",
|
||||||
description: `<strong>+1</strong> diverging <strong class='color-laser'>laser</strong> <strong class='color-g'>gun</strong> beam<br> `,
|
description: `<strong>+1</strong> diverging <strong class='color-laser'>laser</strong> <strong class='color-g'>gun</strong> beam`,
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -7794,7 +7840,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "time crystals",
|
name: "time crystals",
|
||||||
description: "<strong>+200%</strong> passive <strong class='color-f'>energy</strong> generation<br> ",
|
description: "<strong>+200%</strong> passive <strong class='color-f'>energy</strong> generation",
|
||||||
isFieldTech: true,
|
isFieldTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -8415,7 +8461,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><br> `
|
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(() => {
|
||||||
@@ -8542,7 +8588,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "meteor shower",
|
name: "meteor shower",
|
||||||
description: "take a shower, but meteors instead of water<br> ",
|
description: "take a shower, but meteors instead of water",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -8688,7 +8734,7 @@ const tech = {
|
|||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "discount",
|
name: "discount",
|
||||||
description: "get 3 random <strong class='color-junk'>JUNK</strong><strong class='color-m'>tech</strong> for the price of 1!<br> ",
|
description: "get 3 random <strong class='color-junk'>JUNK</strong><strong class='color-m'>tech</strong> for the price of 1!",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -8757,7 +8803,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "harvest",
|
name: "harvest",
|
||||||
description: "convert all the mobs on this level into <strong class='color-ammo'>ammo</strong><br> ",
|
description: "convert all the mobs on this level into <strong class='color-ammo'>ammo</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -8824,7 +8870,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "palantír",
|
name: "palantír",
|
||||||
description: `see far away lands<br> `,
|
description: `see far away lands`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -8855,7 +8901,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "motion sickness",
|
name: "motion sickness",
|
||||||
description: `disable camera smoothing<br> `,
|
description: `disable camera smoothing`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -8888,7 +8934,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "facsimile",
|
name: "facsimile",
|
||||||
description: `inserts a copy of your current level into the level list<br> `,
|
description: `inserts a copy of your current level into the level list`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -8924,7 +8970,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "bounce",
|
name: "bounce",
|
||||||
description: "you bounce off things. It's annoying, but not that bad.<br> ",
|
description: "you bounce off things. It's annoying, but not that bad.",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -8942,7 +8988,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "mouth",
|
name: "mouth",
|
||||||
description: "mobs have a non functional mouth<br> ",
|
description: "mobs have a non functional mouth",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -8988,7 +9034,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "all-stars",
|
name: "all-stars",
|
||||||
description: "make all mobs look like stars<br> ",
|
description: "make all mobs look like stars",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9049,7 +9095,7 @@ const tech = {
|
|||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "true colors",
|
name: "true colors",
|
||||||
description: `set all power ups to their real world colors<br> `,
|
description: `set all power ups to their real world colors`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9264,7 +9310,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "not a bug",
|
name: "not a bug",
|
||||||
description: "initiate a totally safe game crash for 10 seconds<br> ",
|
description: "initiate a totally safe game crash for 10 seconds",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9291,7 +9337,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "spinor",
|
name: "spinor",
|
||||||
description: "the direction you aim is determined by your position<br> ",
|
description: "the direction you aim is determined by your position",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9320,7 +9366,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "p-zombie",
|
name: "p-zombie",
|
||||||
description: "set your <strong class='color-h'>health</strong> to <strong>1</strong><br>all mobs die and <strong>resurrect</strong> as zombies",
|
description: "set your <strong class='color-h'>health</strong> to <strong>1</strong><br>all mobs, not bosses, die and <strong>resurrect</strong> as zombies",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9342,7 +9388,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "decomposers",
|
name: "decomposers",
|
||||||
description: "after they die <strong>mobs</strong> leave behind <strong>spawns</strong><br> ",
|
description: "after they die <strong>mobs</strong> leave behind <strong>spawns</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9361,7 +9407,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "panopticon",
|
name: "panopticon",
|
||||||
description: "<strong>mobs</strong> can always see you<br> ",
|
description: "<strong>mobs</strong> can always see you",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9433,20 +9479,6 @@ const tech = {
|
|||||||
if (this.count) m.look = m.lookDefault
|
if (this.count) m.look = m.lookDefault
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "iFrames",
|
|
||||||
description: "you are <strong>invulnerable</strong><br>when you aren't taking damage",
|
|
||||||
maxCount: 1,
|
|
||||||
count: 0,
|
|
||||||
frequency: 0,
|
|
||||||
isJunk: true,
|
|
||||||
allowed() {
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
requires: "",
|
|
||||||
effect() {},
|
|
||||||
remove() {}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "disintegrated armament",
|
name: "disintegrated armament",
|
||||||
description: "spawn a <strong class='color-g'>gun</strong><br><strong>remove</strong> your active <strong class='color-g'>gun</strong>",
|
description: "spawn a <strong class='color-g'>gun</strong><br><strong>remove</strong> your active <strong class='color-g'>gun</strong>",
|
||||||
@@ -9499,7 +9531,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "encryption",
|
name: "encryption",
|
||||||
description: "secure <strong class='color-m'>tech</strong> information<br> ",
|
description: "secure <strong class='color-m'>tech</strong> information",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9549,7 +9581,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "score",
|
name: "score",
|
||||||
description: "Add a score to n-gon!<br> ",
|
description: "Add a score to n-gon!",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9588,7 +9620,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "music",
|
name: "music",
|
||||||
description: "add music to n-gon<br> ",
|
description: "add music to n-gon",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9605,7 +9637,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "performance",
|
name: "performance",
|
||||||
description: "display performance stats to n-gon<br> ",
|
description: "display performance stats to n-gon",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9661,7 +9693,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "defragment",
|
name: "defragment",
|
||||||
description: "set the <strong class='flicker'>frequency</strong> of finding <strong class='color-junk'>JUNK</strong><strong class='color-m'>tech</strong> to zero<br> ",
|
description: "set the <strong class='flicker'>frequency</strong> of finding <strong class='color-junk'>JUNK</strong><strong class='color-m'>tech</strong> to zero",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9701,7 +9733,7 @@ const tech = {
|
|||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "pitch",
|
name: "pitch",
|
||||||
description: "oscillate the pitch of your world<br> ",
|
description: "oscillate the pitch of your world",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9738,7 +9770,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "lighter",
|
name: "lighter",
|
||||||
description: `ctx.globalCompositeOperation = "lighter"<br> `,
|
description: `ctx.globalCompositeOperation = "lighter"`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9755,7 +9787,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "rewind",
|
name: "rewind",
|
||||||
description: "every 10 seconds <strong class='color-rewind'>rewind</strong> <strong>2</strong> seconds<br> ",
|
description: "every 10 seconds <strong class='color-rewind'>rewind</strong> <strong>2</strong> seconds",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9778,7 +9810,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "undo",
|
name: "undo",
|
||||||
description: "every 4 seconds <strong class='color-rewind'>rewind</strong> <strong>1/2</strong> a second<br> ",
|
description: "every 4 seconds <strong class='color-rewind'>rewind</strong> <strong>1/2</strong> a second",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9798,7 +9830,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "energy to mass conversion",
|
name: "energy to mass conversion",
|
||||||
description: "convert your <strong class='color-f'>energy</strong> into <strong class='color-block'>blocks</strong><br> ",
|
description: "convert your <strong class='color-f'>energy</strong> into <strong class='color-block'>blocks</strong>",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9830,7 +9862,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "level.nextLevel()",
|
name: "level.nextLevel()",
|
||||||
description: "advance to the next level<br> ",
|
description: "advance to the next level",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9916,7 +9948,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "missile launching system",
|
name: "missile launching system",
|
||||||
description: "fire missiles for the next 120 seconds<br> ",
|
description: "fire missiles for the next 120 seconds",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9941,7 +9973,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "grenade production",
|
name: "grenade production",
|
||||||
description: "drop a grenade every 2 seconds<br> ",
|
description: "drop a grenade every 2 seconds",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -9994,7 +10026,7 @@ const tech = {
|
|||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "Sleipnir",
|
name: "Sleipnir",
|
||||||
description: "grow more legs<br> ",
|
description: "grow more legs",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -10081,7 +10113,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "🐱",
|
name: "🐱",
|
||||||
description: "🐈<br> ",
|
description: "🐈",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -10181,7 +10213,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "posture",
|
name: "posture",
|
||||||
description: "stand a bit taller<br> ",
|
description: "stand a bit taller",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -10200,7 +10232,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "rhythm",
|
name: "rhythm",
|
||||||
description: "you oscillate up and down<br> ",
|
description: "you oscillate up and down",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -10221,7 +10253,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "pareidolia",
|
name: "pareidolia",
|
||||||
description: "don't<br> ",
|
description: "don't",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -10290,7 +10322,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "prism",
|
name: "prism",
|
||||||
description: "you cycle through different <strong>colors</strong><br> ",
|
description: "you cycle through different <strong>colors</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -10444,7 +10476,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "growth hacking",
|
name: "growth hacking",
|
||||||
description: "increase combat <strong>difficulty</strong> by <strong>1 level</strong><br> ",
|
description: "increase combat <strong>difficulty</strong> by <strong>1 level</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -10461,7 +10493,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "stun",
|
name: "stun",
|
||||||
description: "<strong>stun</strong> all mobs for up to <strong>8</strong> seconds<br> ",
|
description: "<strong>stun</strong> all mobs for up to <strong>8</strong> seconds",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -10506,7 +10538,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "re-research",
|
name: "re-research",
|
||||||
description: `<strong>eject</strong> all your ${powerUps.orb.research(1)}<br> `,
|
description: `<strong>eject</strong> all your ${powerUps.orb.research(1)}`,
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -10544,7 +10576,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "black hole cluster",
|
name: "black hole cluster",
|
||||||
description: `spawn <strong>30</strong> nearby <strong>black holes</strong><br> `,
|
description: `spawn <strong>30</strong> nearby <strong>black holes</strong>`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 0,
|
frequency: 0,
|
||||||
@@ -11049,7 +11081,7 @@ const tech = {
|
|||||||
isVacuumBomb: null,
|
isVacuumBomb: null,
|
||||||
renormalization: null,
|
renormalization: null,
|
||||||
fragments: null,
|
fragments: null,
|
||||||
isEnergyDamage: null,
|
energyDamage: null,
|
||||||
botSpawner: null,
|
botSpawner: null,
|
||||||
isBotSpawnerReset: null,
|
isBotSpawnerReset: null,
|
||||||
isSporeFollow: null,
|
isSporeFollow: null,
|
||||||
@@ -11323,5 +11355,7 @@ const tech = {
|
|||||||
isGunChoice: null,
|
isGunChoice: null,
|
||||||
railChargeRate: null,
|
railChargeRate: null,
|
||||||
superHarm: null,
|
superHarm: null,
|
||||||
isZombieMobs: null
|
isZombieMobs: null,
|
||||||
|
isSuperMine: null,
|
||||||
|
sentryAmmo: null,
|
||||||
}
|
}
|
||||||
292
style.css
@@ -85,7 +85,6 @@ td {
|
|||||||
.key-input {
|
.key-input {
|
||||||
padding: 3px 8px;
|
padding: 3px 8px;
|
||||||
border: 2px solid #333;
|
border: 2px solid #333;
|
||||||
/* border-radius: 50px; */
|
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
@@ -98,7 +97,6 @@ td {
|
|||||||
width: 15px;
|
width: 15px;
|
||||||
padding: 0px 2px;
|
padding: 0px 2px;
|
||||||
border: 2px solid #333;
|
border: 2px solid #333;
|
||||||
/* border-radius: 50px; */
|
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
@@ -165,21 +163,15 @@ summary {
|
|||||||
top: 50%;
|
top: 50%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -50%);
|
||||||
|
|
||||||
padding: 10px 1px;
|
padding: 10px 1px;
|
||||||
/* gap: 1px; */
|
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
border: 0px;
|
border: 0px;
|
||||||
z-index: 12;
|
z-index: 12;
|
||||||
max-height: 99vh;
|
max-height: 99vh;
|
||||||
font-size: 1.3em;
|
font-size: 1.3em;
|
||||||
|
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(3, 384px);
|
grid-template-columns: repeat(3, 384px);
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
/* align-items: start; */
|
|
||||||
/* align-content: start; */
|
|
||||||
/* grid-auto-rows: minmax(auto, 140px); */
|
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: opacity 0.25s linear;
|
transition: opacity 0.25s linear;
|
||||||
@@ -192,13 +184,9 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.choose-grid-module {
|
.choose-grid-module {
|
||||||
/* padding: 5px; */
|
|
||||||
line-height: 160%;
|
line-height: 160%;
|
||||||
/* border-radius: 8px; */
|
|
||||||
background-color: #fafcfd;
|
background-color: #fafcfd;
|
||||||
font-size: 0.75em;
|
font-size: 0.75em;
|
||||||
/* border: 1px #444 solid; */
|
|
||||||
/* box-shadow: 0px 0px 10px 5px rgba(0, 0, 0, 0.25); */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.choose-grid-module:hover {
|
.choose-grid-module:hover {
|
||||||
@@ -216,15 +204,11 @@ summary {
|
|||||||
.pause-grid {
|
.pause-grid {
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
|
|
||||||
display: none;
|
display: none;
|
||||||
grid-template-columns: 384px;
|
grid-template-columns: 384px;
|
||||||
/* grid-template-columns: repeat(auto-fit, minmax(310px, 1fr)); */
|
|
||||||
grid-auto-rows: minmax(auto, auto);
|
grid-auto-rows: minmax(auto, auto);
|
||||||
align-content: start;
|
align-content: start;
|
||||||
align-items: start;
|
align-items: start;
|
||||||
/* align-content: space-between; */
|
|
||||||
/* gap: 10px; */
|
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
font-size: 1.3em;
|
font-size: 1.3em;
|
||||||
}
|
}
|
||||||
@@ -259,19 +243,9 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.pause-grid-module {
|
.pause-grid-module {
|
||||||
/* margin: -1px;
|
|
||||||
padding: 10px;
|
|
||||||
line-height: 160%;
|
line-height: 160%;
|
||||||
border: 1px #333 solid;
|
|
||||||
border-radius: 8px;
|
|
||||||
background-color: #fff;
|
|
||||||
font-size: 0.65em; */
|
|
||||||
/* padding: 5px; */
|
|
||||||
line-height: 160%;
|
|
||||||
/* border-radius: 8px; */
|
|
||||||
background-color: #fafcfd;
|
background-color: #fafcfd;
|
||||||
font-size: 0.75em;
|
font-size: 0.75em;
|
||||||
/* border: 2px #444 solid; */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.pause-eject .card-text {
|
.pause-eject .card-text {
|
||||||
@@ -281,24 +255,14 @@ summary {
|
|||||||
#experiment-grid {
|
#experiment-grid {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
/* align-content: space-between; */
|
|
||||||
/* align-items: start; */
|
|
||||||
/* align-items: stretch; */
|
|
||||||
/* padding-top: 10px; */
|
|
||||||
/* padding: 16px; */
|
|
||||||
padding: 10px 1px;
|
padding: 10px 1px;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
border: 0px;
|
border: 0px;
|
||||||
background-color: var(--build-bg-color);
|
background-color: var(--build-bg-color);
|
||||||
/* background-color: #444; */
|
|
||||||
|
|
||||||
display: none;
|
display: none;
|
||||||
/* grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); */
|
|
||||||
grid-template-columns: repeat(auto-fit, 384px);
|
grid-template-columns: repeat(auto-fit, 384px);
|
||||||
grid-auto-flow: row;
|
grid-auto-flow: row;
|
||||||
grid-auto-rows: minmax(auto, auto);
|
grid-auto-rows: minmax(auto, auto);
|
||||||
/* gap: 1px; */
|
|
||||||
|
|
||||||
position: relative;
|
position: relative;
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
@@ -311,14 +275,9 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.experiment-grid-module {
|
.experiment-grid-module {
|
||||||
/* padding: 0.1em; */
|
|
||||||
/* padding: 5px; */
|
|
||||||
line-height: 160%;
|
line-height: 160%;
|
||||||
/* border-radius: 8px; */
|
|
||||||
background-color: #fafcfd;
|
background-color: #fafcfd;
|
||||||
font-size: 0.75em;
|
font-size: 0.75em;
|
||||||
/* border: 1px #444 solid; */
|
|
||||||
/* margin: -0.5px; */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.experiment-grid-hide {
|
.experiment-grid-hide {
|
||||||
@@ -337,28 +296,22 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.card-background {
|
.card-background {
|
||||||
/* width:288; */
|
|
||||||
height:340px;
|
height:340px;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content:flex-end;
|
justify-content:flex-end;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
/* margin: 5px; */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-text {
|
.card-text {
|
||||||
background-color: rgba(255,255,255,1);
|
background-color: rgba(255,255,255,1);
|
||||||
/* border-radius: 8px; */
|
|
||||||
/* padding: 11px 13px; */
|
|
||||||
padding: 0.5em 1em;
|
padding: 0.5em 1em;
|
||||||
/* border-top: 1px solid var(--build-bg-color); */
|
|
||||||
border: 1px solid #444;
|
border: 1px solid #444;
|
||||||
margin-top: -1px;
|
margin-top: -1px;
|
||||||
margin-right: -1px;
|
margin-right: -1px;
|
||||||
font-size: 0.92em;
|
font-size: 0.92em;
|
||||||
min-height: 88px;
|
min-height: 88px;
|
||||||
/* height:78px; */
|
|
||||||
}
|
}
|
||||||
.cancel-card {
|
.cancel-card {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -369,7 +322,6 @@ summary {
|
|||||||
margin-top: -1px;
|
margin-top: -1px;
|
||||||
margin-right: -1px;
|
margin-right: -1px;
|
||||||
padding: 1px;
|
padding: 1px;
|
||||||
|
|
||||||
line-height: 160%;
|
line-height: 160%;
|
||||||
background-color: #fafcfd;
|
background-color: #fafcfd;
|
||||||
}
|
}
|
||||||
@@ -385,10 +337,39 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* media rules for smaller screens
|
/* keeps 5 columns at 1440px */
|
||||||
4->3 at 1550
|
@media (1710px <= width < 1950px) {
|
||||||
*/
|
.experiment-grid-module, .choose-grid-module, .pause-grid-module {
|
||||||
@media (1500px <= width < 1950px) {
|
line-height: 143%;
|
||||||
|
font-size: 0.68em;
|
||||||
|
}
|
||||||
|
#experiment-grid, #choose-grid, .pause-grid{
|
||||||
|
grid-template-columns: repeat(auto-fit, 340px);
|
||||||
|
}
|
||||||
|
.card-background{
|
||||||
|
height:290px;
|
||||||
|
}
|
||||||
|
.card-text {
|
||||||
|
min-height: 75px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (width < 1710px) {
|
||||||
|
.experiment-grid-module, .choose-grid-module, .pause-grid-module {
|
||||||
|
line-height: 139%;
|
||||||
|
font-size: 0.58em;
|
||||||
|
}
|
||||||
|
#experiment-grid, #choose-grid, .pause-grid{
|
||||||
|
grid-template-columns: repeat(auto-fit, 285px);
|
||||||
|
}
|
||||||
|
.card-background{
|
||||||
|
height:240px;
|
||||||
|
}
|
||||||
|
.card-text {
|
||||||
|
min-height: 64px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* keeps 4 columns at 1440px */
|
||||||
|
/* @media (1500px <= width < 1950px) {
|
||||||
.experiment-grid-module, .choose-grid-module, .pause-grid-module {
|
.experiment-grid-module, .choose-grid-module, .pause-grid-module {
|
||||||
line-height: 150%;
|
line-height: 150%;
|
||||||
font-size: 0.72em;
|
font-size: 0.72em;
|
||||||
@@ -417,59 +398,6 @@ summary {
|
|||||||
.card-text {
|
.card-text {
|
||||||
min-height: 75px;
|
min-height: 75px;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* default
|
|
||||||
.experiment-grid-module {
|
|
||||||
line-height: 160%;
|
|
||||||
font-size: 0.75em;
|
|
||||||
}
|
|
||||||
.card-background {
|
|
||||||
height:340px;
|
|
||||||
}
|
|
||||||
#experiment-grid{
|
|
||||||
grid-template-columns: repeat(auto-fit, 384px);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* .no-image-cards{
|
|
||||||
border: 1px solid #444;
|
|
||||||
} */
|
|
||||||
/* .card-text:hover {
|
|
||||||
background-color: #efeff5;
|
|
||||||
} */
|
|
||||||
|
|
||||||
|
|
||||||
/* .build-field-selected {
|
|
||||||
background-color: hsl(193, 100%, 75%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.build-field-selected:hover {
|
|
||||||
background-color: hsl(193, 100%, 68%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.build-gun-selected {
|
|
||||||
background-color: hsl(218, 100%, 81%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.build-gun-selected:hover {
|
|
||||||
background-color: hsl(218, 100%, 76%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.build-tech-selected .card-text{
|
|
||||||
background-color: hsl(253, 100%, 84%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.build-tech-selected:hover .card-text{
|
|
||||||
background-color: hsl(253, 100%, 81%);
|
|
||||||
} */
|
|
||||||
|
|
||||||
/* .experiment-grid-module:hover .card-text:not(.build-tech-selected, .build-field-selected, .build-gun-selected) {
|
|
||||||
background-color: #efeff5;
|
|
||||||
} */
|
} */
|
||||||
|
|
||||||
.experiment-grid-module:hover .card-text {
|
.experiment-grid-module:hover .card-text {
|
||||||
@@ -495,17 +423,13 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.experiment-grid-disabled {
|
.experiment-grid-disabled {
|
||||||
/* opacity: 0.5; */
|
|
||||||
background-color: var(--build-bg-color);
|
background-color: var(--build-bg-color);
|
||||||
/* color: rgba(0, 0, 0, 0.9); */
|
|
||||||
color: #000;
|
color: #000;
|
||||||
opacity: 0.25;
|
opacity: 0.25;
|
||||||
/* transition: background-color 1s, color 1s; */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.experiment-grid-disabled[data-descr] {
|
.experiment-grid-disabled[data-descr] {
|
||||||
position: relative;
|
position: relative;
|
||||||
/* opacity: 0; */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.experiment-grid-disabled[data-descr]:hover::after {
|
.experiment-grid-disabled[data-descr]:hover::after {
|
||||||
@@ -535,7 +459,6 @@ summary {
|
|||||||
padding: 10px;
|
padding: 10px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
border: 2px #333 solid;
|
border: 2px #333 solid;
|
||||||
/* background-color: #eee; */
|
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -670,12 +593,9 @@ summary {
|
|||||||
transition: opacity 0.25s;
|
transition: opacity 0.25s;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
/* white-space: pre;
|
|
||||||
font-family: 'Menlo', 'Monaco', monospace; */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* color for in game console output */
|
/* color for in game console output */
|
||||||
|
|
||||||
.color-text {
|
.color-text {
|
||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
@@ -697,32 +617,6 @@ summary {
|
|||||||
background-color: #ff0;
|
background-color: #ff0;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
}
|
}
|
||||||
/* colors for pause, selection and experiment */
|
|
||||||
|
|
||||||
/* #text-log {
|
|
||||||
z-index: 2;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 4px;
|
|
||||||
left: 6px;
|
|
||||||
line-height: 130%;
|
|
||||||
font-size: 1.2em;
|
|
||||||
color: rgb(237, 15, 148);
|
|
||||||
transition: opacity 1s;
|
|
||||||
pointer-events: none;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.color-text {
|
|
||||||
color: rgb(0, 164, 164);
|
|
||||||
}
|
|
||||||
|
|
||||||
.color-symbol {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.color-f {
|
.color-f {
|
||||||
color: #0ad;
|
color: #0ad;
|
||||||
@@ -769,44 +663,11 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.color-dup {
|
.color-dup {
|
||||||
/* color: hsl(243, 100%, 38%); */
|
|
||||||
font-variant: small-caps;
|
font-variant: small-caps;
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
text-shadow: 1.5px -1.5px hsla(243, 100%, 38%, 0.2);
|
text-shadow: 1.5px -1.5px hsla(243, 100%, 38%, 0.2);
|
||||||
/* text-decoration: underline; */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* .mob {
|
|
||||||
text-shadow: 0px 1px, 1px 0px, 1px 1px;
|
|
||||||
} */
|
|
||||||
|
|
||||||
/* @keyframes bounce-munch {
|
|
||||||
0% {
|
|
||||||
vertical-align: -40px;
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
vertical-align: 4px;
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
vertical-align: 40px;
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
|
|
||||||
|
|
||||||
/* .color-bot { */
|
|
||||||
/* background-color: #eee; */
|
|
||||||
/* color: #555; */
|
|
||||||
/* letter-spacing: -1.5px; */
|
|
||||||
/* text-transform: uppercase; */
|
|
||||||
/* font-variant: all-caps; */
|
|
||||||
/* text-decoration: underline solid; */
|
|
||||||
/* border: 1px solid #000; */
|
|
||||||
/* padding: 10px; */
|
|
||||||
/* border-radius: 10%; */
|
|
||||||
/* font-family: Lucida Console, Courier, monospace; */
|
|
||||||
/* color: #777; */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
.color-cloaked {
|
.color-cloaked {
|
||||||
letter-spacing: 2px;
|
letter-spacing: 2px;
|
||||||
animation: cloak 6s linear infinite alternate;
|
animation: cloak 6s linear infinite alternate;
|
||||||
@@ -832,10 +693,6 @@ summary {
|
|||||||
|
|
||||||
.color-laser {
|
.color-laser {
|
||||||
color: #f02;
|
color: #f02;
|
||||||
/* color: #000bff; */
|
|
||||||
/* color: #83f; */
|
|
||||||
/* text-shadow: 0px 0px 2px rgba(255, 0, 119, 0.3); */
|
|
||||||
/* text-shadow: 0px 0px 1.5px rgba(0, 0, 0, 1), 0px 0px 5px rgba(255, 0, 0, 1); */
|
|
||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
letter-spacing: -0.8px;
|
letter-spacing: -0.8px;
|
||||||
}
|
}
|
||||||
@@ -852,12 +709,9 @@ summary {
|
|||||||
.color-worm {
|
.color-worm {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-shadow: 1px 0px 2px #234;
|
text-shadow: 1px 0px 2px #234;
|
||||||
/* letter-spacing: 2px; */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.color-defense {
|
.color-defense {
|
||||||
/* color: */
|
|
||||||
/* text-shadow: #FC0 1px 0 10px; */
|
|
||||||
background-color: hsla(227, 9%, 71%, 0.279);
|
background-color: hsla(227, 9%, 71%, 0.279);
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
@@ -882,18 +736,9 @@ summary {
|
|||||||
|
|
||||||
.color-junk {
|
.color-junk {
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
/* font-weight: 100; */
|
|
||||||
font-family: Lucida Console, Courier, monospace;
|
font-family: Lucida Console, Courier, monospace;
|
||||||
/* transform: rotate(-90deg); */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* .color-rewind {
|
|
||||||
background-image: linear-gradient(to left, #fff, #bbb);
|
|
||||||
border-radius: 5px;
|
|
||||||
padding: 2px;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
} */
|
|
||||||
|
|
||||||
.color-r {
|
.color-r {
|
||||||
color: #f7b;
|
color: #f7b;
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
@@ -993,20 +838,6 @@ summary {
|
|||||||
margin-bottom: -0.5px;
|
margin-bottom: -0.5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* .circle-grid-shadow {
|
|
||||||
width: 43px;
|
|
||||||
height: 43px;
|
|
||||||
border-radius: 50%;
|
|
||||||
display: inline-block;
|
|
||||||
margin-bottom: -15px;
|
|
||||||
} */
|
|
||||||
|
|
||||||
/* .circle-gun-tech {
|
|
||||||
box-shadow: 0 0 0 3px #025;
|
|
||||||
} */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@keyframes pulse {
|
@keyframes pulse {
|
||||||
0% {
|
0% {
|
||||||
border-radius: 0%;
|
border-radius: 0%;
|
||||||
@@ -1017,31 +848,14 @@ summary {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* .circle-grid-gun {
|
|
||||||
width: 10px;
|
|
||||||
height: 10px;
|
|
||||||
border-radius: 50%;
|
|
||||||
display: inline-block;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
background: #025;
|
|
||||||
box-shadow: 0 0 0 8px hsl(253, 80%, 67%);
|
|
||||||
} */
|
|
||||||
|
|
||||||
.field {
|
.field {
|
||||||
background-color: #0cf;
|
background-color: #0cf;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tech {
|
.tech {
|
||||||
/* background: rgb(116, 102, 238); */
|
|
||||||
/* background: hsl(253, 57%, 52%); */
|
|
||||||
background-color: hsl(255, 100%, 71%);
|
background-color: hsl(255, 100%, 71%);
|
||||||
/* background: hsl(282, 100%, 64%); */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* .grey {
|
|
||||||
background: #afb6c2;
|
|
||||||
} */
|
|
||||||
|
|
||||||
.gun {
|
.gun {
|
||||||
background-color: rgb(0, 80, 218);
|
background-color: rgb(0, 80, 218);
|
||||||
}
|
}
|
||||||
@@ -1051,7 +865,6 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.research {
|
.research {
|
||||||
/* #f84 #f99*/
|
|
||||||
background-color: #f7b;
|
background-color: #f7b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1059,7 +872,6 @@ summary {
|
|||||||
animation: alt 8s linear infinite alternate;
|
animation: alt 8s linear infinite alternate;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
/* color: rgba(0, 0, 0, 0.5) */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes alt {
|
@keyframes alt {
|
||||||
@@ -1096,35 +908,11 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.color-coupling {
|
.color-coupling {
|
||||||
/* animation: coupling 1000ms linear infinite alternate; */
|
|
||||||
/* animation: vibrate 500ms linear infinite alternate;
|
|
||||||
display: inline-block; */
|
|
||||||
/* text-shadow: 0px 0px 2px #0cf; */
|
|
||||||
/* text-shadow: 0px 0px 1.5px #0cf; */
|
|
||||||
text-shadow: 0px 0px 1.5px #0cf;
|
text-shadow: 0px 0px 1.5px #0cf;
|
||||||
/* color: hsl(255, 82%, 59%); */
|
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @keyframes coupling{
|
|
||||||
0%{
|
|
||||||
letter-spacing: 0.5px;
|
|
||||||
}
|
|
||||||
100%{
|
|
||||||
letter-spacing: 1px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes vibrate{
|
|
||||||
0% {
|
|
||||||
transform: translateY(-0.25px)
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
transform: translateY(0.25px)
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
|
|
||||||
.box {
|
.box {
|
||||||
padding: 3px 8px 3px 8px;
|
padding: 3px 8px 3px 8px;
|
||||||
border: 2px solid #444;
|
border: 2px solid #444;
|
||||||
@@ -1157,13 +945,11 @@ summary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.entanglement {
|
.entanglement {
|
||||||
/* color: #456; */
|
|
||||||
font-size: 1.1em;
|
font-size: 1.1em;
|
||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
letter-spacing: 10px;
|
letter-spacing: 10px;
|
||||||
border: none;
|
border: none;
|
||||||
/* border-radius: 50%; */
|
|
||||||
background-color: #efeff5;
|
background-color: #efeff5;
|
||||||
}
|
}
|
||||||
.flipX {
|
.flipX {
|
||||||
@@ -1299,16 +1085,4 @@ summary {
|
|||||||
|
|
||||||
.link:hover {
|
.link:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
/* color: #0ad; */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* #console {
|
|
||||||
font-family: monospace;
|
|
||||||
font-size: 1.5em;
|
|
||||||
width: 300px;
|
|
||||||
height: 50px;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 10px;
|
|
||||||
right: 10px;
|
|
||||||
z-index: 3;
|
|
||||||
} */
|
|
||||||
40
todo.txt
@@ -1,29 +1,29 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
card images and text scale based on browser width for smaller screens
|
tech: cordyceps - sporangium infect mobs, making them fight for you as zombies
|
||||||
|
|
||||||
tech Zectron - super ball can damage you, but they do more damage to mobs
|
tech: blast ball - mines fire super balls
|
||||||
superBall bullets are converted to run off generic b.superBall()
|
tech: extended magazine - sentry fires 50% more shots
|
||||||
|
sentry works with foam, nails, or super balls
|
||||||
|
|
||||||
sneakers - after taking damage if sneakers are low on life they teleport to a random point from the player's history and they sneak attack again
|
dark patterns - stacks to 9
|
||||||
sneakBoss - a large sneaker that can hide several times before it dies
|
38->15% damage, 53->15% JUNK
|
||||||
|
electronegativity - stacks to 9
|
||||||
|
0.12->0.1% damage per energy
|
||||||
|
|
||||||
bug fixes
|
bug fixes
|
||||||
|
|
||||||
*********************************************************** TODO *****************************************************
|
*********************************************************** TODO *****************************************************
|
||||||
|
|
||||||
tech: cordyceps - sporangium infect mobs, making them fight for you
|
super-bot
|
||||||
zombies might attack player if there are no mob targets
|
|
||||||
!! needs to explore when there are no targets
|
|
||||||
!! mechanics are confusing
|
|
||||||
!! still needs testing for balance
|
|
||||||
it's targeting player even when there are mobs
|
|
||||||
tech - all mobs return as zombies?
|
|
||||||
|
|
||||||
Now that super balls are generic maybe something else should produce them
|
tech - shotgun triple shot, but a bit longer of a delay
|
||||||
super-bot
|
|
||||||
molecular fabricator - how to aim?
|
tech - after standing wave runs out of energy from blocking, gain a buff
|
||||||
shotgun - too similar to super ball gun
|
buff: defense, damage?
|
||||||
|
|
||||||
|
make super balls with Zectron deflectable with field
|
||||||
|
but is there a simple way to do this?
|
||||||
|
|
||||||
set mob health bar colors based on status effects?
|
set mob health bar colors based on status effects?
|
||||||
make mob damage immunity a mob status effect?
|
make mob damage immunity a mob status effect?
|
||||||
@@ -87,6 +87,8 @@ hookBoss fires a hook that pulls player towards it
|
|||||||
finalBoss
|
finalBoss
|
||||||
add synergies between modes:
|
add synergies between modes:
|
||||||
new modes:
|
new modes:
|
||||||
|
something that needs to be killed quickly
|
||||||
|
if you don't kill it boss gets a shield
|
||||||
rotating quadrant immunity shield, can't take damage from that quadrant
|
rotating quadrant immunity shield, can't take damage from that quadrant
|
||||||
maybe also attack player near that quadrant
|
maybe also attack player near that quadrant
|
||||||
but how to tell the angle of incoming damage
|
but how to tell the angle of incoming damage
|
||||||
@@ -1136,7 +1138,7 @@ possible names for tech
|
|||||||
|
|
||||||
******************************************************** CARS IMAGES ********************************************************
|
******************************************************** CARS IMAGES ********************************************************
|
||||||
|
|
||||||
process: discord midjourney prompts -> "pixelmator pro" -> adjust color, repair, scale to 384x256, export PNG -> webP? -> place in /img folder
|
process: discord midjourney prompts -> "pixelmator pro" adjust color, repair, scale to 384x256, export PNG -> webP? -> place in /img folder
|
||||||
make n-gon a progressive web app to manage image downloads, cache
|
make n-gon a progressive web app to manage image downloads, cache
|
||||||
wave function collapse opens the pause menu after it triggers alternate reality
|
wave function collapse opens the pause menu after it triggers alternate reality
|
||||||
this is actually good, maybe reuse this code to get pause menu to open at any time
|
this is actually good, maybe reuse this code to get pause menu to open at any time
|
||||||
@@ -1155,16 +1157,12 @@ if pause is pressed while selecting power ups, display pause menu on top of sele
|
|||||||
***major themes missing***
|
***major themes missing***
|
||||||
***maybe redo***
|
***maybe redo***
|
||||||
dynamical systems
|
dynamical systems
|
||||||
harpoon gun
|
|
||||||
Eiichiro Oda --niji
|
|
||||||
nail-bot
|
nail-bot
|
||||||
homeostasis
|
homeostasis
|
||||||
heuristics
|
heuristics
|
||||||
thermal runaway - infrared maybe?
|
thermal runaway - infrared maybe?
|
||||||
redo the energy tech images with by Laurie Greasley
|
redo the energy tech images with by Laurie Greasley
|
||||||
now that you can use --ar 3:2 --stylize 1000 and photo repair
|
now that you can use --ar 3:2 --stylize 1000 and photo repair
|
||||||
in general too many black background
|
|
||||||
redo fractal tech with white background
|
|
||||||
***past style themes***
|
***past style themes***
|
||||||
field emitter - isometric, clean white robot spherical gun turret on bird legs, blender 3d, style of artstation and behance, Disney Pixar, cute
|
field emitter - isometric, clean white robot spherical gun turret on bird legs, blender 3d, style of artstation and behance, Disney Pixar, cute
|
||||||
standing wave - concentric transparent blue geometric circles science
|
standing wave - concentric transparent blue geometric circles science
|
||||||
|
|||||||