mass production
new community levels: tlinat by Richard0820 ruins by SiddhUPe tech: mass production - tech have +3 choices to spawn ammo, research, or heals
This commit is contained in:
BIN
img/ammo.webp
Normal file
BIN
img/ammo.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
BIN
img/heals.webp
Normal file
BIN
img/heals.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 41 KiB |
BIN
img/mass production.webp
Normal file
BIN
img/mass production.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
BIN
img/research.webp
Normal file
BIN
img/research.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 28 KiB |
80
js/bullet.js
80
js/bullet.js
@@ -912,7 +912,7 @@ const b = {
|
|||||||
x: m.Vx / 2 + speed * Math.cos(angle),
|
x: m.Vx / 2 + speed * Math.cos(angle),
|
||||||
y: m.Vy / 2 + speed * Math.sin(angle)
|
y: m.Vy / 2 + speed * Math.sin(angle)
|
||||||
});
|
});
|
||||||
bullet[me].endCycle = simulation.cycle + Math.floor(m.crouch ? 120 : 80) * tech.isBulletsLastLonger;
|
bullet[me].endCycle = simulation.cycle + Math.floor(m.crouch ? 120 : 80) * tech.bulletsLastLonger;
|
||||||
bullet[me].restitution = 0.4;
|
bullet[me].restitution = 0.4;
|
||||||
bullet[me].do = function () {
|
bullet[me].do = function () {
|
||||||
this.force.y += this.mass * 0.0025; //extra gravity for harder arcs
|
this.force.y += this.mass * 0.0025; //extra gravity for harder arcs
|
||||||
@@ -939,7 +939,7 @@ const b = {
|
|||||||
});
|
});
|
||||||
Composite.add(engine.world, bullet[me]); //add bullet to world
|
Composite.add(engine.world, bullet[me]); //add bullet to world
|
||||||
|
|
||||||
bullet[me].endCycle = simulation.cycle + 70 * tech.isBulletsLastLonger;
|
bullet[me].endCycle = simulation.cycle + 70 * tech.bulletsLastLonger;
|
||||||
bullet[me].frictionAir = 0.07;
|
bullet[me].frictionAir = 0.07;
|
||||||
const MAG = 0.015
|
const MAG = 0.015
|
||||||
bullet[me].thrust = {
|
bullet[me].thrust = {
|
||||||
@@ -973,7 +973,7 @@ const b = {
|
|||||||
y: m.Vy / 2 + speed * Math.sin(angle)
|
y: m.Vy / 2 + speed * Math.sin(angle)
|
||||||
});
|
});
|
||||||
Composite.add(engine.world, bullet[me]); //add bullet to world
|
Composite.add(engine.world, bullet[me]); //add bullet to world
|
||||||
bullet[me].endCycle = simulation.cycle + 70 * tech.isBulletsLastLonger;
|
bullet[me].endCycle = simulation.cycle + 70 * tech.bulletsLastLonger;
|
||||||
bullet[me].frictionAir = 0.07;
|
bullet[me].frictionAir = 0.07;
|
||||||
bullet[me].suckCycles = 40
|
bullet[me].suckCycles = 40
|
||||||
const MAG = 0.015
|
const MAG = 0.015
|
||||||
@@ -1096,7 +1096,7 @@ const b = {
|
|||||||
speed = 35
|
speed = 35
|
||||||
// speed = m.crouch ? 43 : 32
|
// speed = m.crouch ? 43 : 32
|
||||||
|
|
||||||
bullet[me].endCycle = simulation.cycle + 70 * tech.isBulletsLastLonger;
|
bullet[me].endCycle = simulation.cycle + 70 * tech.bulletsLastLonger;
|
||||||
if (m.crouch) {
|
if (m.crouch) {
|
||||||
speed += 9
|
speed += 9
|
||||||
bullet[me].endCycle += 20;
|
bullet[me].endCycle += 20;
|
||||||
@@ -1124,7 +1124,7 @@ const b = {
|
|||||||
bullet[me].minDmgSpeed = 0;
|
bullet[me].minDmgSpeed = 0;
|
||||||
bullet[me].damageRadius = 100;
|
bullet[me].damageRadius = 100;
|
||||||
bullet[me].maxDamageRadius = 450 * size + 130 * tech.isNeutronSlow //+ 150 * Math.random()
|
bullet[me].maxDamageRadius = 450 * size + 130 * tech.isNeutronSlow //+ 150 * Math.random()
|
||||||
bullet[me].radiusDecay = (0.81 + 0.15 * tech.isNeutronSlow) / tech.isBulletsLastLonger
|
bullet[me].radiusDecay = (0.81 + 0.15 * tech.isNeutronSlow) / tech.bulletsLastLonger
|
||||||
bullet[me].stuckTo = null;
|
bullet[me].stuckTo = null;
|
||||||
bullet[me].stuckToRelativePosition = null;
|
bullet[me].stuckToRelativePosition = null;
|
||||||
if (tech.isRPG) {
|
if (tech.isRPG) {
|
||||||
@@ -1546,7 +1546,7 @@ const b = {
|
|||||||
b.targetedNail(this.vertices[2], tech.fragments * Math.floor(2 + Math.random()))
|
b.targetedNail(this.vertices[2], tech.fragments * Math.floor(2 + Math.random()))
|
||||||
}
|
}
|
||||||
if (tech.isFoamBall) {
|
if (tech.isFoamBall) {
|
||||||
for (let i = 0, len = 4 * this.mass; i < len; i++) {
|
for (let i = 0, len = 3 * this.mass; i < len; i++) {
|
||||||
const radius = 5 + 8 * Math.random()
|
const radius = 5 + 8 * Math.random()
|
||||||
const velocity = {
|
const velocity = {
|
||||||
x: Math.max(0.5, 2 - radius * 0.1),
|
x: Math.max(0.5, 2 - radius * 0.1),
|
||||||
@@ -2192,7 +2192,7 @@ const b = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tech.isFoamBall) {
|
if (tech.isFoamBall) {
|
||||||
for (let i = 0, len = Math.min(50, 3 + 4 * Math.sqrt(this.mass)); i < len; i++) {
|
for (let i = 0, len = Math.min(50, 2.5 + 3 * Math.sqrt(this.mass)); i < len; i++) {
|
||||||
const radius = 5 + 8 * Math.random()
|
const radius = 5 + 8 * Math.random()
|
||||||
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)
|
||||||
@@ -2410,7 +2410,7 @@ const b = {
|
|||||||
frictionAir: 0.045,
|
frictionAir: 0.045,
|
||||||
dmg: 0, //damage done in addition to the damage from momentum
|
dmg: 0, //damage done in addition to the damage from momentum
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
endCycle: simulation.cycle + Math.floor((230 + 40 * Math.random()) * tech.isBulletsLastLonger + 120 * tech.isMissileBiggest + 60 * tech.isMissileBig),
|
endCycle: simulation.cycle + Math.floor((230 + 40 * Math.random()) * tech.bulletsLastLonger + 120 * tech.isMissileBiggest + 60 * tech.isMissileBig),
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
category: cat.bullet,
|
category: cat.bullet,
|
||||||
mask: cat.map | cat.body | cat.mob | cat.mobBullet | cat.mobShield
|
mask: cat.map | cat.body | cat.mob | cat.mobBullet | cat.mobShield
|
||||||
@@ -3215,7 +3215,7 @@ const b = {
|
|||||||
category: cat.bullet,
|
category: cat.bullet,
|
||||||
mask: cat.map | cat.mob | cat.mobBullet | cat.mobShield //no collide with body
|
mask: cat.map | cat.mob | cat.mobBullet | cat.mobShield //no collide with body
|
||||||
},
|
},
|
||||||
endCycle: simulation.cycle + Math.floor((600 + Math.floor(Math.random() * 420)) * tech.isBulletsLastLonger),
|
endCycle: simulation.cycle + Math.floor((600 + Math.floor(Math.random() * 420)) * tech.bulletsLastLonger),
|
||||||
minDmgSpeed: 0,
|
minDmgSpeed: 0,
|
||||||
playerOffPosition: { //used when moving towards player to keep spores separate
|
playerOffPosition: { //used when moving towards player to keep spores separate
|
||||||
x: 100 * (Math.random() - 0.5),
|
x: 100 * (Math.random() - 0.5),
|
||||||
@@ -3227,7 +3227,7 @@ const b = {
|
|||||||
if (!who.alive) {
|
if (!who.alive) {
|
||||||
for (let i = 0; i < 3; i++) { //spawn 3 more
|
for (let i = 0; i < 3; i++) { //spawn 3 more
|
||||||
b.worm(this.position)
|
b.worm(this.position)
|
||||||
bullet[bullet.length - 1].endCycle = Math.min(simulation.cycle + Math.floor(420 * tech.isBulletsLastLonger), this.endCycle + 180 + Math.floor(60 * Math.random())) //simulation.cycle + Math.floor(420 * tech.isBulletsLastLonger)
|
bullet[bullet.length - 1].endCycle = Math.min(simulation.cycle + Math.floor(420 * tech.bulletsLastLonger), this.endCycle + 180 + Math.floor(60 * Math.random())) //simulation.cycle + Math.floor(420 * tech.bulletsLastLonger)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.endCycle = 0; //bullet ends cycle after doing damage
|
this.endCycle = 0; //bullet ends cycle after doing damage
|
||||||
@@ -3332,7 +3332,7 @@ const b = {
|
|||||||
category: cat.bullet,
|
category: cat.bullet,
|
||||||
mask: cat.map | cat.mob | cat.mobBullet | cat.mobShield //no collide with body
|
mask: cat.map | cat.mob | cat.mobBullet | cat.mobShield //no collide with body
|
||||||
},
|
},
|
||||||
endCycle: simulation.cycle + Math.floor((540 + Math.floor(Math.random() * 420)) * tech.isBulletsLastLonger),
|
endCycle: simulation.cycle + Math.floor((540 + Math.floor(Math.random() * 420)) * tech.bulletsLastLonger),
|
||||||
minDmgSpeed: 0,
|
minDmgSpeed: 0,
|
||||||
playerOffPosition: { //used when moving towards player to keep spores separate
|
playerOffPosition: { //used when moving towards player to keep spores separate
|
||||||
x: 100 * (Math.random() - 0.5),
|
x: 100 * (Math.random() - 0.5),
|
||||||
@@ -3449,7 +3449,7 @@ const b = {
|
|||||||
const me = bullet.length;
|
const me = bullet.length;
|
||||||
const THRUST = 0.0018
|
const THRUST = 0.0018
|
||||||
const RADIUS = 18
|
const RADIUS = 18
|
||||||
const SCALE = 1 - 0.12 / tech.isBulletsLastLonger
|
const SCALE = 1 - 0.12 / tech.bulletsLastLonger
|
||||||
bullet[me] = Bodies.polygon(where.x, where.y, 3, RADIUS, {
|
bullet[me] = Bodies.polygon(where.x, where.y, 3, RADIUS, {
|
||||||
angle: dir - Math.PI,
|
angle: dir - Math.PI,
|
||||||
// inertia: Infinity,
|
// inertia: Infinity,
|
||||||
@@ -3459,7 +3459,7 @@ const b = {
|
|||||||
restitution: 0.9,
|
restitution: 0.9,
|
||||||
dmg: 1.3, //damage done in addition to the damage from momentum
|
dmg: 1.3, //damage done in addition to the damage from momentum
|
||||||
lookFrequency: 14 + Math.floor(8 * Math.random()),
|
lookFrequency: 14 + Math.floor(8 * Math.random()),
|
||||||
endCycle: simulation.cycle + 65 * tech.isBulletsLastLonger + Math.floor(25 * Math.random()),
|
endCycle: simulation.cycle + 65 * tech.bulletsLastLonger + Math.floor(25 * Math.random()),
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
category: cat.bullet,
|
category: cat.bullet,
|
||||||
@@ -3534,7 +3534,7 @@ const b = {
|
|||||||
restitution: 0,
|
restitution: 0,
|
||||||
density: 0.0005, // 0.001 is normal density
|
density: 0.0005, // 0.001 is normal density
|
||||||
lookFrequency: 19 + Math.floor(7 * Math.random()),
|
lookFrequency: 19 + Math.floor(7 * Math.random()),
|
||||||
endCycle: simulation.cycle + Math.floor((900 * tech.isBulletsLastLonger + 420 * Math.random()) + Math.max(0, 150 - bullet.length)), // 13 - 19s
|
endCycle: simulation.cycle + Math.floor((900 * tech.bulletsLastLonger + 420 * Math.random()) + Math.max(0, 150 - bullet.length)), // 13 - 19s
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
category: cat.bullet,
|
category: cat.bullet,
|
||||||
@@ -3664,7 +3664,7 @@ const b = {
|
|||||||
const SCALE = 2.25
|
const SCALE = 2.25
|
||||||
Matter.Body.scale(who, SCALE, SCALE);
|
Matter.Body.scale(who, SCALE, SCALE);
|
||||||
who.lookFrequency = 30 + Math.floor(11 * Math.random());
|
who.lookFrequency = 30 + Math.floor(11 * Math.random());
|
||||||
who.endCycle += 3000 * tech.droneCycleReduction * tech.isBulletsLastLonger
|
who.endCycle += 3000 * tech.droneCycleReduction * tech.bulletsLastLonger
|
||||||
deliveryCount--
|
deliveryCount--
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3690,7 +3690,7 @@ const b = {
|
|||||||
density: 0.0005, // 0.001 is normal density
|
density: 0.0005, // 0.001 is normal density
|
||||||
dmg: 0.34 + 0.12 * tech.isDroneTeleport + 0.15 * tech.isDroneFastLook, //damage done in addition to the damage from momentum
|
dmg: 0.34 + 0.12 * tech.isDroneTeleport + 0.15 * tech.isDroneFastLook, //damage done in addition to the damage from momentum
|
||||||
lookFrequency: (tech.isDroneFastLook ? 20 : 70) + Math.floor(17 * Math.random()),
|
lookFrequency: (tech.isDroneFastLook ? 20 : 70) + Math.floor(17 * Math.random()),
|
||||||
endCycle: simulation.cycle + Math.floor((950 + 400 * Math.random()) * tech.isBulletsLastLonger * tech.droneCycleReduction) + 5 * RADIUS + Math.max(0, 150 - bullet.length),
|
endCycle: simulation.cycle + Math.floor((950 + 400 * Math.random()) * tech.bulletsLastLonger * tech.droneCycleReduction) + 5 * RADIUS + Math.max(0, 150 - bullet.length),
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
isDrone: true,
|
isDrone: true,
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
@@ -3870,7 +3870,7 @@ const b = {
|
|||||||
const SCALE = 2.25
|
const SCALE = 2.25
|
||||||
Matter.Body.scale(this, SCALE, SCALE);
|
Matter.Body.scale(this, SCALE, SCALE);
|
||||||
this.lookFrequency = 30 + Math.floor(11 * Math.random());
|
this.lookFrequency = 30 + Math.floor(11 * Math.random());
|
||||||
this.endCycle += 3000 * tech.droneCycleReduction * tech.isBulletsLastLonger
|
this.endCycle += 3000 * tech.droneCycleReduction * tech.bulletsLastLonger
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -3902,7 +3902,7 @@ const b = {
|
|||||||
const SCALE = 2.25
|
const SCALE = 2.25
|
||||||
Matter.Body.scale(this, SCALE, SCALE);
|
Matter.Body.scale(this, SCALE, SCALE);
|
||||||
this.lookFrequency = 30 + Math.floor(11 * Math.random());
|
this.lookFrequency = 30 + Math.floor(11 * Math.random());
|
||||||
this.endCycle += 3000 * tech.droneCycleReduction * tech.isBulletsLastLonger
|
this.endCycle += 3000 * tech.droneCycleReduction * tech.bulletsLastLonger
|
||||||
// this.frictionAir = 0
|
// this.frictionAir = 0
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -3960,7 +3960,7 @@ const b = {
|
|||||||
restitution: 0.4 + 0.199 * Math.random(),
|
restitution: 0.4 + 0.199 * Math.random(),
|
||||||
dmg: 0, //0.24 damage done in addition to the damage from momentum and radiation
|
dmg: 0, //0.24 damage done in addition to the damage from momentum and radiation
|
||||||
lookFrequency: 120 + Math.floor(23 * Math.random()),
|
lookFrequency: 120 + Math.floor(23 * Math.random()),
|
||||||
endCycle: simulation.cycle + Math.floor((900 + 110 * Math.random()) * tech.isBulletsLastLonger / tech.droneRadioDamage) + 5 * RADIUS + Math.max(0, 150 - 2 * bullet.length),
|
endCycle: simulation.cycle + Math.floor((900 + 110 * Math.random()) * tech.bulletsLastLonger / tech.droneRadioDamage) + 5 * RADIUS + Math.max(0, 150 - 2 * bullet.length),
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
isDrone: true,
|
isDrone: true,
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
@@ -4113,7 +4113,7 @@ const b = {
|
|||||||
const SCALE = 2.25
|
const SCALE = 2.25
|
||||||
Matter.Body.scale(this, SCALE, SCALE);
|
Matter.Body.scale(this, SCALE, SCALE);
|
||||||
this.lookFrequency = 30 + Math.floor(11 * Math.random());
|
this.lookFrequency = 30 + Math.floor(11 * Math.random());
|
||||||
this.endCycle += 1000 * tech.isBulletsLastLonger
|
this.endCycle += 1000 * tech.bulletsLastLonger
|
||||||
this.maxRadioRadius *= 1.25
|
this.maxRadioRadius *= 1.25
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -4146,7 +4146,7 @@ const b = {
|
|||||||
const SCALE = 2.25
|
const SCALE = 2.25
|
||||||
Matter.Body.scale(this, SCALE, SCALE);
|
Matter.Body.scale(this, SCALE, SCALE);
|
||||||
this.lookFrequency = 30 + Math.floor(11 * Math.random());
|
this.lookFrequency = 30 + Math.floor(11 * Math.random());
|
||||||
this.endCycle += 1000 * tech.isBulletsLastLonger
|
this.endCycle += 1000 * tech.bulletsLastLonger
|
||||||
this.maxRadioRadius *= 1.25
|
this.maxRadioRadius *= 1.25
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -4244,7 +4244,7 @@ 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.isFoamBall) {
|
if (tech.isFoamBall) {
|
||||||
for (let i = 0, len = 6 * this.mass; i < len; i++) {
|
for (let i = 0, len = 5 * this.mass; i < len; i++) {
|
||||||
const radius = 5 + 8 * Math.random()
|
const radius = 5 + 8 * Math.random()
|
||||||
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)
|
||||||
@@ -4360,7 +4360,7 @@ const b = {
|
|||||||
// frictionAir: 0.003,
|
// frictionAir: 0.003,
|
||||||
// dmg: 0, //damage on impact
|
// dmg: 0, //damage on impact
|
||||||
// damage: 0, //damage done over time
|
// damage: 0, //damage done over time
|
||||||
// scale: 1 - 0.006 / tech.isBulletsLastLonger,
|
// scale: 1 - 0.006 / tech.bulletsLastLonger,
|
||||||
// classType: "bullet",
|
// classType: "bullet",
|
||||||
// collisionFilter: {
|
// collisionFilter: {
|
||||||
// category: cat.bullet,
|
// category: cat.bullet,
|
||||||
@@ -4432,7 +4432,7 @@ const b = {
|
|||||||
// // Matter.Body.setAngularVelocity(this.target, this.target.angularVelocity * 0.9)
|
// // Matter.Body.setAngularVelocity(this.target, this.target.angularVelocity * 0.9)
|
||||||
// if (this.target.isShielded) {
|
// if (this.target.isShielded) {
|
||||||
// this.target.damage(m.dmgScale * this.damage, true); //shield damage bypass
|
// this.target.damage(m.dmgScale * this.damage, true); //shield damage bypass
|
||||||
// const SCALE = 1 - 0.004 / tech.isBulletsLastLonger //shrink if mob is shielded
|
// const SCALE = 1 - 0.004 / tech.bulletsLastLonger //shrink if mob is shielded
|
||||||
// Matter.Body.scale(this, SCALE, SCALE);
|
// Matter.Body.scale(this, SCALE, SCALE);
|
||||||
// this.radius *= SCALE;
|
// this.radius *= SCALE;
|
||||||
// } else {
|
// } else {
|
||||||
@@ -4523,7 +4523,7 @@ const b = {
|
|||||||
frictionAir: 0.003,
|
frictionAir: 0.003,
|
||||||
dmg: 0, //damage on impact
|
dmg: 0, //damage on impact
|
||||||
damage: tech.foamDamage * (tech.isFastFoam ? 2.8 : 1) * (tech.isBulletTeleport ? 1.53 : 1), //damage done over time
|
damage: tech.foamDamage * (tech.isFastFoam ? 2.8 : 1) * (tech.isBulletTeleport ? 1.53 : 1), //damage done over time
|
||||||
scale: 1 - 0.006 / tech.isBulletsLastLonger * (tech.isFastFoam ? 1.65 : 1),
|
scale: 1 - 0.006 / tech.bulletsLastLonger * (tech.isFastFoam ? 1.65 : 1),
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
category: cat.bullet,
|
category: cat.bullet,
|
||||||
@@ -4602,7 +4602,7 @@ const b = {
|
|||||||
// Matter.Body.setAngularVelocity(this.target, this.target.angularVelocity * 0.9)
|
// Matter.Body.setAngularVelocity(this.target, this.target.angularVelocity * 0.9)
|
||||||
if (this.target.isShielded) {
|
if (this.target.isShielded) {
|
||||||
this.target.damage(m.dmgScale * this.damage, true); //shield damage bypass
|
this.target.damage(m.dmgScale * this.damage, true); //shield damage bypass
|
||||||
const SCALE = 1 - 0.004 / tech.isBulletsLastLonger //shrink if mob is shielded
|
const SCALE = 1 - 0.004 / tech.bulletsLastLonger //shrink if mob is shielded
|
||||||
Matter.Body.scale(this, SCALE, SCALE);
|
Matter.Body.scale(this, SCALE, SCALE);
|
||||||
this.radius *= SCALE;
|
this.radius *= SCALE;
|
||||||
} else {
|
} else {
|
||||||
@@ -5566,11 +5566,11 @@ const b = {
|
|||||||
restitution: 0.6 * (1 + 0.5 * Math.random()),
|
restitution: 0.6 * (1 + 0.5 * Math.random()),
|
||||||
dmg: 0, // 0.14 //damage done in addition to the damage from momentum
|
dmg: 0, // 0.14 //damage done in addition to the damage from momentum
|
||||||
minDmgSpeed: 2,
|
minDmgSpeed: 2,
|
||||||
lookFrequency: 17 + Math.floor(7 * Math.random()) - 10 * tech.isSoundBotUpgrade,
|
lookFrequency: 17 + Math.floor(7 * Math.random()) - 5 * tech.isSoundBotUpgrade,
|
||||||
cd: 0,
|
cd: 0,
|
||||||
fireCount: 0,
|
fireCount: 0,
|
||||||
fireLimit: 5 + 3 * tech.isSoundBotUpgrade,
|
fireLimit: 5 + 2 * tech.isSoundBotUpgrade,
|
||||||
delay: Math.floor((90 + (tech.isSoundBotUpgrade ? 0 : 90)) * b.fireCDscale),// + 30 - 20 * tech.isFoamBotUpgrade,//20 + Math.floor(85 * b.fireCDscale) - 20 * tech.isFoamBotUpgrade,
|
delay: Math.floor((120 + (tech.isSoundBotUpgrade ? 0 : 70)) * b.fireCDscale),// + 30 - 20 * tech.isFoamBotUpgrade,//20 + Math.floor(85 * b.fireCDscale) - 20 * tech.isFoamBotUpgrade,
|
||||||
acceleration: 0.005 * (1 + 0.5 * Math.random()),
|
acceleration: 0.005 * (1 + 0.5 * Math.random()),
|
||||||
range: 60 * (1 + 0.3 * Math.random()) + 3 * b.totalBots(), //how far from the player the bot will move
|
range: 60 * (1 + 0.3 * Math.random()) + 3 * b.totalBots(), //how far from the player the bot will move
|
||||||
endCycle: Infinity,
|
endCycle: Infinity,
|
||||||
@@ -5594,7 +5594,7 @@ const b = {
|
|||||||
arc: halfArc * 2,
|
arc: halfArc * 2,
|
||||||
radius: 25,
|
radius: 25,
|
||||||
resonanceCount: 0,
|
resonanceCount: 0,
|
||||||
dmg: (tech.isUpgraded ? 3 : 1.5) * m.dmgScale * tech.wavePacketDamage * tech.waveBeamDamage * (tech.isBulletTeleport ? 1.5 : 1),
|
dmg: (tech.isUpgraded ? 4 : 1.5) * m.dmgScale * tech.wavePacketDamage * tech.waveBeamDamage * (tech.isBulletTeleport ? 1.5 : 1),
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
fire() {
|
fire() {
|
||||||
@@ -5634,7 +5634,7 @@ const b = {
|
|||||||
ctx.strokeStyle = "rgba(0,0,0,0.6)" //"000";
|
ctx.strokeStyle = "rgba(0,0,0,0.6)" //"000";
|
||||||
ctx.lineWidth = 2 * tech.wavePacketDamage
|
ctx.lineWidth = 2 * tech.wavePacketDamage
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
const end = 1200 * tech.isBulletsLastLonger
|
const end = 1200 * Math.sqrt(tech.bulletsLastLonger)
|
||||||
//this does less damage than the player phonon waves 2.3 -> 2
|
//this does less damage than the player phonon waves 2.3 -> 2
|
||||||
for (let i = this.waves.length - 1; i > -1; i--) {
|
for (let i = this.waves.length - 1; i > -1; i--) {
|
||||||
const v1 = Vector.add(this.waves[i].position, Vector.mult(this.waves[i].unit1, this.waves[i].radius))
|
const v1 = Vector.add(this.waves[i].position, Vector.mult(this.waves[i].unit1, this.waves[i].radius))
|
||||||
@@ -5649,7 +5649,7 @@ const b = {
|
|||||||
if (!who.isShielded) {
|
if (!who.isShielded) {
|
||||||
who.force.x += 0.01 * (Math.random() - 0.5) * who.mass
|
who.force.x += 0.01 * (Math.random() - 0.5) * who.mass
|
||||||
who.force.y += 0.01 * (Math.random() - 0.5) * who.mass
|
who.force.y += 0.01 * (Math.random() - 0.5) * who.mass
|
||||||
Matter.Body.setVelocity(who, { x: who.velocity.x * 0.95, y: who.velocity.y * 0.95 });
|
Matter.Body.setVelocity(who, { x: who.velocity.x * 0.98, y: who.velocity.y * 0.98 });
|
||||||
let vertices = who.vertices;
|
let vertices = who.vertices;
|
||||||
const vibe = 50 + who.radius * 0.15
|
const vibe = 50 + who.radius * 0.15
|
||||||
ctx.moveTo(vertices[0].x + vibe * (Math.random() - 0.5), vertices[0].y + vibe * (Math.random() - 0.5));
|
ctx.moveTo(vertices[0].x + vibe * (Math.random() - 0.5), vertices[0].y + vibe * (Math.random() - 0.5));
|
||||||
@@ -5687,8 +5687,8 @@ const b = {
|
|||||||
for (let j = 0, len = Math.min(30, hits.length); j < len; j++) {
|
for (let j = 0, len = Math.min(30, hits.length); j < len; j++) {
|
||||||
const who = hits[j].body
|
const who = hits[j].body
|
||||||
//make them shake around
|
//make them shake around
|
||||||
who.force.x += 0.01 * (Math.random() - 0.5) * who.mass
|
who.force.x += 0.005 * (Math.random() - 0.5) * who.mass
|
||||||
who.force.y += (0.01 * (Math.random() - 0.5) - simulation.g * 0.25) * who.mass //remove force of gravity
|
who.force.y += (0.005 * (Math.random() - 0.5) - simulation.g * 0.1) * who.mass //remove force of gravity
|
||||||
let vertices = who.vertices;
|
let vertices = who.vertices;
|
||||||
const vibe = 25
|
const vibe = 25
|
||||||
ctx.moveTo(vertices[0].x + vibe * (Math.random() - 0.5), vertices[0].y + vibe * (Math.random() - 0.5));
|
ctx.moveTo(vertices[0].x + vibe * (Math.random() - 0.5), vertices[0].y + vibe * (Math.random() - 0.5));
|
||||||
@@ -6742,13 +6742,13 @@ const b = {
|
|||||||
x: SPEED * Math.cos(dir),
|
x: SPEED * Math.cos(dir),
|
||||||
y: SPEED * Math.sin(dir)
|
y: SPEED * Math.sin(dir)
|
||||||
});
|
});
|
||||||
bullet[me].endCycle = simulation.cycle + 40 * tech.isBulletsLastLonger
|
bullet[me].endCycle = simulation.cycle + 40 * tech.bulletsLastLonger
|
||||||
bullet[me].minDmgSpeed = 15
|
bullet[me].minDmgSpeed = 15
|
||||||
if (tech.isShotgunReversed) Matter.Body.setDensity(bullet[me], 0.0015)
|
if (tech.isShotgunReversed) Matter.Body.setDensity(bullet[me], 0.0015)
|
||||||
// bullet[me].restitution = 0.4
|
// bullet[me].restitution = 0.4
|
||||||
bullet[me].frictionAir = 0.034;
|
bullet[me].frictionAir = 0.034;
|
||||||
bullet[me].do = function () {
|
bullet[me].do = function () {
|
||||||
const scale = 1 - 0.034 / tech.isBulletsLastLonger
|
const scale = 1 - 0.034 / tech.bulletsLastLonger
|
||||||
Matter.Body.scale(this, scale, scale);
|
Matter.Body.scale(this, scale, scale);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -6820,7 +6820,7 @@ const b = {
|
|||||||
const me = bullet.length;
|
const me = bullet.length;
|
||||||
bullet[me] = Bodies.rectangle(m.pos.x + 50 * Math.cos(m.angle), m.pos.y + 50 * Math.sin(m.angle), 17, 4, b.fireAttributes(dir));
|
bullet[me] = Bodies.rectangle(m.pos.x + 50 * Math.cos(m.angle), m.pos.y + 50 * Math.sin(m.angle), 17, 4, b.fireAttributes(dir));
|
||||||
const end = END + Math.random() * 4
|
const end = END + Math.random() * 4
|
||||||
bullet[me].endCycle = 2 * end * tech.isBulletsLastLonger + simulation.cycle
|
bullet[me].endCycle = 2 * end * tech.bulletsLastLonger + simulation.cycle
|
||||||
const speed = 25 * end / END
|
const speed = 25 * end / END
|
||||||
const dirOff = dir + (Math.random() - 0.5) * spread
|
const dirOff = dir + (Math.random() - 0.5) * spread
|
||||||
Matter.Body.setVelocity(bullet[me], {
|
Matter.Body.setVelocity(bullet[me], {
|
||||||
@@ -7066,7 +7066,7 @@ const b = {
|
|||||||
ctx.strokeStyle = "rgba(0,0,0,0.6)" //"000";
|
ctx.strokeStyle = "rgba(0,0,0,0.6)" //"000";
|
||||||
ctx.lineWidth = 2 * tech.wavePacketDamage
|
ctx.lineWidth = 2 * tech.wavePacketDamage
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
const end = 700 * Math.sqrt(tech.isBulletsLastLonger)
|
const end = 700 * Math.sqrt(tech.bulletsLastLonger)
|
||||||
const damage = 2.3 * m.dmgScale * tech.wavePacketDamage * tech.waveBeamDamage * (tech.isBulletTeleport ? 1.43 : 1) * (tech.isInfiniteWaveAmmo ? 0.75 : 1) //damage is lower for large radius mobs, since they feel the waves longer
|
const damage = 2.3 * m.dmgScale * tech.wavePacketDamage * tech.waveBeamDamage * (tech.isBulletTeleport ? 1.43 : 1) * (tech.isInfiniteWaveAmmo ? 0.75 : 1) //damage is lower for large radius mobs, since they feel the waves longer
|
||||||
|
|
||||||
for (let i = this.waves.length - 1; i > -1; i--) {
|
for (let i = this.waves.length - 1; i > -1; i--) {
|
||||||
@@ -7163,7 +7163,7 @@ const b = {
|
|||||||
ctx.strokeStyle = "rgba(0,0,0,0.6)" //"000";
|
ctx.strokeStyle = "rgba(0,0,0,0.6)" //"000";
|
||||||
ctx.lineWidth = 2 * tech.wavePacketDamage
|
ctx.lineWidth = 2 * tech.wavePacketDamage
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
const end = 1100 * tech.isBulletsLastLonger
|
const end = 1100 * tech.bulletsLastLonger
|
||||||
const damage = 2.3 * m.dmgScale * tech.wavePacketDamage * tech.waveBeamDamage * (tech.isBulletTeleport ? 1.4 : 1) * (tech.isInfiniteWaveAmmo ? 0.75 : 1) //damage is lower for large radius mobs, since they feel the waves longer
|
const damage = 2.3 * m.dmgScale * tech.wavePacketDamage * tech.waveBeamDamage * (tech.isBulletTeleport ? 1.4 : 1) * (tech.isInfiniteWaveAmmo ? 0.75 : 1) //damage is lower for large radius mobs, since they feel the waves longer
|
||||||
for (let i = this.waves.length - 1; i > -1; i--) {
|
for (let i = this.waves.length - 1; i > -1; i--) {
|
||||||
const v1 = Vector.add(this.waves[i].position, Vector.mult(this.waves[i].unit1, this.waves[i].radius))
|
const v1 = Vector.add(this.waves[i].position, Vector.mult(this.waves[i].unit1, this.waves[i].radius))
|
||||||
@@ -7270,7 +7270,7 @@ const b = {
|
|||||||
// }
|
// }
|
||||||
},
|
},
|
||||||
fireTransverse() {
|
fireTransverse() {
|
||||||
totalCycles = Math.floor((3.5) * 35 * tech.waveReflections * tech.isBulletsLastLonger / Math.sqrt(tech.waveReflections * 0.5))
|
totalCycles = Math.floor((3.5) * 35 * tech.waveReflections * tech.bulletsLastLonger / Math.sqrt(tech.waveReflections * 0.5))
|
||||||
const me = bullet.length;
|
const me = bullet.length;
|
||||||
bullet[me] = Bodies.polygon(m.pos.x + 25 * Math.cos(m.angle), m.pos.y + 25 * Math.sin(m.angle), 5, 4, {
|
bullet[me] = Bodies.polygon(m.pos.x + 25 * Math.cos(m.angle), m.pos.y + 25 * Math.sin(m.angle), 5, 4, {
|
||||||
angle: m.angle,
|
angle: m.angle,
|
||||||
|
|||||||
1477
js/level.js
1477
js/level.js
File diff suppressed because it is too large
Load Diff
@@ -922,13 +922,13 @@ const powerUps = {
|
|||||||
if (botTech.length > 0) { //pick random bot tech
|
if (botTech.length > 0) { //pick random bot tech
|
||||||
// const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
// const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
||||||
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
||||||
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div>${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div>${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
||||||
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
||||||
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
||||||
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
<div class="grid-title"><span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${techCountText}</div>
|
<div class="grid-title"><span style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${techCountText}</div>
|
||||||
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -987,13 +987,13 @@ const powerUps = {
|
|||||||
if (botTech.length > 0) { //pick random bot tech
|
if (botTech.length > 0) { //pick random bot tech
|
||||||
// const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
// const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
||||||
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
||||||
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div>${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div>${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
||||||
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
||||||
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
||||||
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
<div class="grid-title"><span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${techCountText}</div>
|
<div class="grid-title"><span style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${techCountText}</div>
|
||||||
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1093,17 +1093,39 @@ const powerUps = {
|
|||||||
if (botTech.length > 0) { //pick random bot tech
|
if (botTech.length > 0) { //pick random bot tech
|
||||||
// const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
// const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
||||||
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
// const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
|
||||||
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div> ${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"> <span style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${isCount}</div> ${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div>`
|
||||||
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
const choose = botTech[Math.floor(Math.random() * botTech.length)];
|
||||||
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
const techCountText = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count + 1}x)` : "";
|
||||||
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
||||||
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
<div class="grid-title"><span id = "cellular-rule-id${this.id}" style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${techCountText}</div>
|
<div class="grid-title"><span style = "font-size: 150%;font-family: 'Courier New', monospace;">⭓▸●■</span> ${tech.tech[choose].name} ${techCountText}</div>
|
||||||
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (tech.isMassProduction) {
|
||||||
|
// const techOptions = [] //make an array of bot options
|
||||||
|
// for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||||
|
// if (tech.tech[i].isMassProduction) techOptions.push(i)
|
||||||
|
// }
|
||||||
|
// if (techOptions.length > 0) { //pick random bot tech
|
||||||
|
// const choose = techOptions[Math.floor(Math.random() * techOptions.length)];
|
||||||
|
// const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[choose].name}.webp');"`
|
||||||
|
// text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${choose})" ${style}>
|
||||||
|
// <div class="card-text">
|
||||||
|
// <div class="grid-title">${tech.tech[choose].name}</div>
|
||||||
|
// ${tech.tech[choose].descriptionFunction ? tech.tech[choose].descriptionFunction() : tech.tech[choose].description}</div></div>`
|
||||||
|
// }
|
||||||
|
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||||
|
if (tech.tech[i].isMassProduction) {
|
||||||
|
const style = localSettings.isHideImages ? powerUps.hideStyle : `style="background-image: url('img/${tech.tech[i].name}.webp');"`
|
||||||
|
text += `<div class="choose-grid-module card-background" onclick="powerUps.choose('tech',${i})" ${style}>
|
||||||
|
<div class="card-text">
|
||||||
|
<div class="grid-title">${tech.tech[i].name}</div>
|
||||||
|
${tech.tech[i].descriptionFunction ? tech.tech[i].descriptionFunction() : tech.tech[i].description}</div></div>`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (tech.isExtraGunField) {
|
if (tech.isExtraGunField) {
|
||||||
if (Math.random() > 0.5 && b.inventory.length < b.guns.length) {
|
if (Math.random() > 0.5 && b.inventory.length < b.guns.length) {
|
||||||
let gunOptions = [];
|
let gunOptions = [];
|
||||||
|
|||||||
@@ -117,9 +117,9 @@ const spawn = {
|
|||||||
tech.isScaleMobsWithDuplication = false
|
tech.isScaleMobsWithDuplication = false
|
||||||
return true
|
return true
|
||||||
} else if (tech.isResearchBoss) {
|
} else if (tech.isResearchBoss) {
|
||||||
if (powerUps.research.count > 3) {
|
if (powerUps.research.count > 2) {
|
||||||
powerUps.research.changeRerolls(-4)
|
powerUps.research.changeRerolls(-3)
|
||||||
simulation.makeTextLog(`<span class='color-var'>m</span>.<span class='color-r'>research</span> <span class='color-symbol'>-=</span> 4<br>${powerUps.research.count}`)
|
simulation.makeTextLog(`<span class='color-var'>m</span>.<span class='color-r'>research</span> <span class='color-symbol'>-=</span> 3<br>${powerUps.research.count}`)
|
||||||
} else {
|
} else {
|
||||||
tech.addJunkTechToPool(0.49)
|
tech.addJunkTechToPool(0.49)
|
||||||
}
|
}
|
||||||
|
|||||||
87
js/tech.js
87
js/tech.js
@@ -1169,10 +1169,10 @@ const tech = {
|
|||||||
allowed: () => true,
|
allowed: () => true,
|
||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isBulletsLastLonger += 0.3
|
tech.bulletsLastLonger += 0.3
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isBulletsLastLonger = 1;
|
tech.bulletsLastLonger = 1;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1520,7 +1520,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "sound-bot upgrade",
|
name: "sound-bot upgrade",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">sound-bot upgrade</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">sound-bot upgrade</a>`,
|
||||||
description: "<strong>convert</strong> your bots to <strong>sound-bots</strong><br><strong>+200%</strong> wave <strong>fire rate</strong> and <strong>+100%</strong> <strong class='color-d'>damage</strong>",
|
description: "<strong>convert</strong> your bots to <strong>sound-bots</strong><br><strong>+150%</strong> wave <strong>fire rate</strong> and <strong>+150%</strong> <strong class='color-d'>damage</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 3,
|
frequency: 3,
|
||||||
@@ -3452,6 +3452,70 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "mass production",
|
||||||
|
description: `<strong class='color-m'>tech</strong> always have <strong>+3</strong> choices to spawn<br>${powerUps.orb.research(5)} ${powerUps.orb.ammo(8)} or ${powerUps.orb.heal(8)}`,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 1,
|
||||||
|
frequencyDefault: 1,
|
||||||
|
allowed() { return true },
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
tech.isMassProduction = true
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isMassProduction = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "research",
|
||||||
|
description: `spawn ${powerUps.orb.research(5)}`,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 0,
|
||||||
|
frequencyDefault: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isMassProduction: true,
|
||||||
|
allowed() { return true },
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
powerUps.spawnDelay("research", 5);
|
||||||
|
},
|
||||||
|
remove() { }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ammo",
|
||||||
|
description: `spawn ${powerUps.orb.ammo(8)}`,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 0,
|
||||||
|
frequencyDefault: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isMassProduction: true,
|
||||||
|
allowed() { return true },
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
powerUps.spawnDelay("ammo", 8);
|
||||||
|
},
|
||||||
|
remove() { }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "heals",
|
||||||
|
description: `spawn ${powerUps.orb.heal(8)}`,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 0,
|
||||||
|
frequencyDefault: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isMassProduction: true,
|
||||||
|
allowed() { return true },
|
||||||
|
requires: "mass production",
|
||||||
|
effect() {
|
||||||
|
powerUps.spawnDelay("heal", 8);
|
||||||
|
},
|
||||||
|
remove() { }
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "pseudoscience",
|
name: "pseudoscience",
|
||||||
description: "<span style = 'font-size:94%;'>when <strong>selecting</strong> a power up, <strong class='color-r'>research</strong> <strong>3</strong> times</span><br>for <strong>free</strong>, but add <strong>1-4%</strong> <strong class='color-junk'>JUNK</strong> to the <strong class='color-m'>tech</strong> pool",
|
description: "<span style = 'font-size:94%;'>when <strong>selecting</strong> a power up, <strong class='color-r'>research</strong> <strong>3</strong> times</span><br>for <strong>free</strong>, but add <strong>1-4%</strong> <strong class='color-junk'>JUNK</strong> to the <strong class='color-m'>tech</strong> pool",
|
||||||
@@ -3632,15 +3696,15 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "abiogenesis",
|
name: "abiogenesis",
|
||||||
// description: `use ${powerUps.orb.research(4)}(or <strong>49%</strong> <strong class='color-junk'>JUNK</strong> to the <strong class='color-m'>tech</strong> pool if you can't) to add a 2nd <strong>boss</strong> to each level`,
|
// description: `use ${powerUps.orb.research(4)}(or <strong>49%</strong> <strong class='color-junk'>JUNK</strong> to the <strong class='color-m'>tech</strong> pool if you can't) to add a 2nd <strong>boss</strong> to each level`,
|
||||||
description: `<span style = 'font-size:94%;'>as a level begins spawn a 2nd <strong>boss</strong> using ${powerUps.orb.research(4)}<br>(<strong>+49%</strong> <strong class='color-junk'>JUNK</strong> to the <strong class='color-m'>tech</strong> pool if you can't pay)</span>`,
|
description: `<span style = 'font-size:94%;'>as a level begins spawn a 2nd <strong>boss</strong> using ${powerUps.orb.research(3)}<br>(<strong>+49%</strong> <strong class='color-junk'>JUNK</strong> to the <strong class='color-m'>tech</strong> pool if you can't pay)</span>`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return (build.isExperimentSelection || powerUps.research.count > 3) && !tech.isDuplicateBoss
|
return (build.isExperimentSelection || powerUps.research.count > 2) && !tech.isDuplicateBoss
|
||||||
},
|
},
|
||||||
requires: "at least 4 research, not parthenogenesis",
|
requires: "at least 3 research, not parthenogenesis",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isResearchBoss = true;
|
tech.isResearchBoss = true;
|
||||||
},
|
},
|
||||||
@@ -6440,7 +6504,7 @@ const tech = {
|
|||||||
frequency: 1,
|
frequency: 1,
|
||||||
frequencyDefault: 1,
|
frequencyDefault: 1,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("drones", false) && !tech.isDroneRespawn && tech.isBulletsLastLonger === 1 && !tech.isDronesTravel && (build.isExperimentSelection || powerUps.research.count > 1)
|
return tech.haveGunCheck("drones", false) && !tech.isDroneRespawn && tech.bulletsLastLonger === 1 && !tech.isDronesTravel && (build.isExperimentSelection || powerUps.research.count > 1)
|
||||||
},
|
},
|
||||||
requires: "drones, not drone repair, anti-shear topology, autonomous navigation",
|
requires: "drones, not drone repair, anti-shear topology, autonomous navigation",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -11244,9 +11308,7 @@ const tech = {
|
|||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
isLore: true,
|
isLore: true,
|
||||||
// isExperimentHide: true,
|
// isExperimentHide: true,
|
||||||
allowed() {
|
allowed() { return !build.isExperimentSelection },
|
||||||
return !build.isExperimentSelection
|
|
||||||
},
|
|
||||||
requires: "NOT EXPERIMENT MODE",
|
requires: "NOT EXPERIMENT MODE",
|
||||||
effect() {
|
effect() {
|
||||||
if (localSettings.loreCount > lore.conversation.length - 1) { //reward for people done with lore chapters (or on the final chapter)
|
if (localSettings.loreCount > lore.conversation.length - 1) { //reward for people done with lore chapters (or on the final chapter)
|
||||||
@@ -11341,7 +11403,7 @@ const tech = {
|
|||||||
energySiphon: null,
|
energySiphon: null,
|
||||||
healthDrain: null,
|
healthDrain: null,
|
||||||
crouchAmmoCount: null,
|
crouchAmmoCount: null,
|
||||||
isBulletsLastLonger: null,
|
bulletsLastLonger: null,
|
||||||
isImmortal: null,
|
isImmortal: null,
|
||||||
sporesOnDeath: null,
|
sporesOnDeath: null,
|
||||||
isImmuneExplosion: null,
|
isImmuneExplosion: null,
|
||||||
@@ -11677,5 +11739,6 @@ const tech = {
|
|||||||
isFoamCavitation: null,
|
isFoamCavitation: null,
|
||||||
isHealAttract: null,
|
isHealAttract: null,
|
||||||
isLaserField: null,
|
isLaserField: null,
|
||||||
isHealBrake: null
|
isHealBrake: null,
|
||||||
|
isMassProduction: null,
|
||||||
}
|
}
|
||||||
1
lib/decomp.min.js
vendored
1
lib/decomp.min.js
vendored
File diff suppressed because one or more lines are too long
57
todo.txt
57
todo.txt
@@ -1,53 +1,16 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
new community level: dojo by weird_pusheen
|
new community levels:
|
||||||
|
tlinat by Richard0820
|
||||||
|
ruins by SiddhUPe
|
||||||
|
|
||||||
sound-bot: makes phonon waves
|
tech: mass production - tech have +3 choices to spawn ammo, research, or heals
|
||||||
|
|
||||||
updated tech
|
|
||||||
drone repair -> von Neumann probe - if a drones ends near a block it will use that block to repair
|
|
||||||
quantum eraser -> metamaterial absorber: for each mob left alive after you exit a level there is a 17% chance to spawn a power up
|
|
||||||
uncertainty principle: extended to super balls
|
|
||||||
aperture: camera zooms in and out along with the skin animation
|
|
||||||
|
|
||||||
balanced tech:
|
|
||||||
cordyceps: zombies are much smarter, faster, do more damage, and last longer
|
|
||||||
negative entropy -> self-assembly: 1 heal per 33->25% missing health on each new level
|
|
||||||
renormalization: 44 -> 46% and +3% JUNK tech to pool
|
|
||||||
parasitism: 60 -> 83% damage
|
|
||||||
non-renewables: 67 -> 78% damage
|
|
||||||
ground state: 200 -> 266 max energy
|
|
||||||
dark patterns: 17 -> 22% damage and JUNK
|
|
||||||
eternalism: 30 -> 24% damage
|
|
||||||
stimulated emission 15 -> 17% duplication
|
|
||||||
nitinol 30 -> 22% defense
|
|
||||||
|
|
||||||
bug fixes
|
|
||||||
|
|
||||||
*********************************************************** TODO *****************************************************
|
*********************************************************** TODO *****************************************************
|
||||||
|
|
||||||
make a mob similar to slasher
|
make a mob similar to slasher
|
||||||
because it's just a very well made mob.
|
because it's just a very well made mob.
|
||||||
|
|
||||||
sound-bot: makes phonon waves
|
|
||||||
works with
|
|
||||||
other bot tech - done?
|
|
||||||
phonon - no
|
|
||||||
frequency - no
|
|
||||||
bound state - no
|
|
||||||
phase velocity - no
|
|
||||||
isotropic - no
|
|
||||||
maybe, but reduce fire rate?
|
|
||||||
|
|
||||||
uncertainty principle - done
|
|
||||||
propagation - done
|
|
||||||
amplitude - done
|
|
||||||
sympathetic resonance - done
|
|
||||||
mechanical resonance - done
|
|
||||||
|
|
||||||
remove reflection from phonon?
|
|
||||||
but return it with isotropic?
|
|
||||||
|
|
||||||
super-bot: fires super balls
|
super-bot: fires super balls
|
||||||
|
|
||||||
tech - only allow 1,2 turrets at time. spawning a new mine removes the oldest mine
|
tech - only allow 1,2 turrets at time. spawning a new mine removes the oldest mine
|
||||||
@@ -61,15 +24,6 @@ tech: after a needle hits a mobs
|
|||||||
reset your fire CD?
|
reset your fire CD?
|
||||||
2x damage for each consecutive mob hit?
|
2x damage for each consecutive mob hit?
|
||||||
|
|
||||||
tech: mass production - add a few selection options to all tech, gun, fields to do something:
|
|
||||||
this would work similar to the tech that adds a bot themed tech to every tech choice
|
|
||||||
options
|
|
||||||
spawn: ammo, heals, research, coupling?
|
|
||||||
random amounts?
|
|
||||||
make each option a full tech with images?
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
improve flatland performance?
|
improve flatland performance?
|
||||||
|
|
||||||
mob non-combat behaviors, like Rain World
|
mob non-combat behaviors, like Rain World
|
||||||
@@ -1145,7 +1099,7 @@ possible names for tech
|
|||||||
hypergraph
|
hypergraph
|
||||||
SQUID (for superconducting quantum interference device) is a very sensitive magnetometer used to measure extremely subtle magnetic fields, based on superconducting loops containing Josephson junctions.
|
SQUID (for superconducting quantum interference device) is a very sensitive magnetometer used to measure extremely subtle magnetic fields, based on superconducting loops containing Josephson junctions.
|
||||||
nuclear pasta - hard matter in neutron star
|
nuclear pasta - hard matter in neutron star
|
||||||
nonlocal: maybe use for pilot wave
|
nonlocal, nonlocality: maybe use for pilot wave
|
||||||
fine-tuned universe
|
fine-tuned universe
|
||||||
nonperturbative
|
nonperturbative
|
||||||
D-branes
|
D-branes
|
||||||
@@ -1171,6 +1125,7 @@ possible names for tech
|
|||||||
memetics
|
memetics
|
||||||
magnetorquers - produce spin by pushing on earth's magnetic field
|
magnetorquers - produce spin by pushing on earth's magnetic field
|
||||||
|
|
||||||
|
|
||||||
******************************************************** 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
|
||||||
|
|||||||
Reference in New Issue
Block a user