community level run
new community level "run" (by iSuggestedThatAlready / iNoobBoi)!!!!!! try it out by enabling community levels in the settings more training levels: "trainingNailGun", "trainingShotGun", "trainingSuperBall", "trainingMatterWave", "trainingMissile" no power ups check box in experiment mode now disables all types of power ups, not just tech simulation.isNoPowerUps powerUps can no longer move through doors this might lead to problems that I haven't thought about, but let's see adiabatic healing now updates active heal power ups as well as future ones fixed bug with undefined tech not showing up
This commit is contained in:
86
js/bullet.js
86
js/bullet.js
@@ -5391,49 +5391,6 @@ const b = {
|
|||||||
angle += SPREAD
|
angle += SPREAD
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}, {
|
|
||||||
name: "mine",
|
|
||||||
description: "toss a <strong>proximity</strong> mine that <strong>sticks</strong> to walls<br>refund <strong>undetonated</strong> mines on <strong>exiting</strong> a level", //fires <strong>nails</strong> at mobs within range
|
|
||||||
ammo: 0,
|
|
||||||
ammoPack: 1.25,
|
|
||||||
have: false,
|
|
||||||
do() {
|
|
||||||
if (!input.field && input.down && !tech.isLaserMine) {
|
|
||||||
const cycles = 60 //30
|
|
||||||
const speed = 40
|
|
||||||
const v = { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) } //m.Vy / 2 + removed to make the path less jerky
|
|
||||||
ctx.strokeStyle = "rgba(68, 68, 68, 0.2)" //color.map
|
|
||||||
ctx.lineWidth = 2
|
|
||||||
ctx.beginPath()
|
|
||||||
for (let i = 1.5, len = 19; i < len + 1; i++) {
|
|
||||||
const time = cycles * i / len
|
|
||||||
ctx.lineTo(m.pos.x + time * v.x, m.pos.y + time * v.y + 0.34 * time * time)
|
|
||||||
}
|
|
||||||
ctx.stroke()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
fire() {
|
|
||||||
if (input.down) {
|
|
||||||
if (tech.isLaserMine) {
|
|
||||||
const speed = 30
|
|
||||||
const velocity = { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) }
|
|
||||||
b.laserMine(m.pos, velocity)
|
|
||||||
m.fireCDcycle = m.cycle + Math.floor(65 * b.fireCDscale); // cool down
|
|
||||||
} else {
|
|
||||||
const pos = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }
|
|
||||||
let speed = 36
|
|
||||||
if (Matter.Query.point(map, pos).length > 0) speed = -2 //don't launch if mine will spawn inside map
|
|
||||||
b.mine(pos, { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) }, 0)
|
|
||||||
m.fireCDcycle = m.cycle + Math.floor(55 * b.fireCDscale); // cool down
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const pos = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }
|
|
||||||
let speed = 23
|
|
||||||
if (Matter.Query.point(map, pos).length > 0) speed = -2 //don't launch if mine will spawn inside map
|
|
||||||
b.mine(pos, { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) }, 0)
|
|
||||||
m.fireCDcycle = m.cycle + Math.floor(35 * b.fireCDscale); // cool down
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, {
|
}, {
|
||||||
name: "spores",
|
name: "spores",
|
||||||
description: "fire a <strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> that discharges <strong class='color-p' style='letter-spacing: 2px;'>spores</strong><br><strong class='color-p' style='letter-spacing: 2px;'>spores</strong> seek out nearby mobs",
|
description: "fire a <strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> that discharges <strong class='color-p' style='letter-spacing: 2px;'>spores</strong><br><strong class='color-p' style='letter-spacing: 2px;'>spores</strong> seek out nearby mobs",
|
||||||
@@ -5981,6 +5938,49 @@ const b = {
|
|||||||
player.force.y -= recoil.y
|
player.force.y -= recoil.y
|
||||||
tech.harpoonDensity = 0.008
|
tech.harpoonDensity = 0.008
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
name: "mine",
|
||||||
|
description: "toss a <strong>proximity</strong> mine that <strong>sticks</strong> to walls<br>refund <strong>undetonated</strong> mines on <strong>exiting</strong> a level", //fires <strong>nails</strong> at mobs within range
|
||||||
|
ammo: 0,
|
||||||
|
ammoPack: 1.25,
|
||||||
|
have: false,
|
||||||
|
do() {
|
||||||
|
if (!input.field && input.down && !tech.isLaserMine) {
|
||||||
|
const cycles = 60 //30
|
||||||
|
const speed = 40
|
||||||
|
const v = { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) } //m.Vy / 2 + removed to make the path less jerky
|
||||||
|
ctx.strokeStyle = "rgba(68, 68, 68, 0.2)" //color.map
|
||||||
|
ctx.lineWidth = 2
|
||||||
|
ctx.beginPath()
|
||||||
|
for (let i = 1.5, len = 19; i < len + 1; i++) {
|
||||||
|
const time = cycles * i / len
|
||||||
|
ctx.lineTo(m.pos.x + time * v.x, m.pos.y + time * v.y + 0.34 * time * time)
|
||||||
|
}
|
||||||
|
ctx.stroke()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fire() {
|
||||||
|
if (input.down) {
|
||||||
|
if (tech.isLaserMine) {
|
||||||
|
const speed = 30
|
||||||
|
const velocity = { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) }
|
||||||
|
b.laserMine(m.pos, velocity)
|
||||||
|
m.fireCDcycle = m.cycle + Math.floor(65 * b.fireCDscale); // cool down
|
||||||
|
} else {
|
||||||
|
const pos = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }
|
||||||
|
let speed = 36
|
||||||
|
if (Matter.Query.point(map, pos).length > 0) speed = -2 //don't launch if mine will spawn inside map
|
||||||
|
b.mine(pos, { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) }, 0)
|
||||||
|
m.fireCDcycle = m.cycle + Math.floor(55 * b.fireCDscale); // cool down
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const pos = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }
|
||||||
|
let speed = 23
|
||||||
|
if (Matter.Query.point(map, pos).length > 0) speed = -2 //don't launch if mine will spawn inside map
|
||||||
|
b.mine(pos, { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) }, 0)
|
||||||
|
m.fireCDcycle = m.cycle + Math.floor(35 * b.fireCDscale); // cool down
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "railgun",
|
// name: "railgun",
|
||||||
|
|||||||
1096
js/level.js
1096
js/level.js
File diff suppressed because it is too large
Load Diff
@@ -667,6 +667,7 @@ const mobs = {
|
|||||||
y: this.position.y + seeRange * Math.sin(this.angle)
|
y: this.position.y + seeRange * Math.sin(this.angle)
|
||||||
};
|
};
|
||||||
vertexCollision(this.position, look, map);
|
vertexCollision(this.position, look, map);
|
||||||
|
vertexCollision(this.position, look, body);
|
||||||
if (best.dist2 != Infinity) {
|
if (best.dist2 != Infinity) {
|
||||||
this.springTarget.x = best.x;
|
this.springTarget.x = best.x;
|
||||||
this.springTarget.y = best.y;
|
this.springTarget.y = best.y;
|
||||||
|
|||||||
@@ -1103,7 +1103,7 @@ const powerUps = {
|
|||||||
if (
|
if (
|
||||||
(!tech.isSuperDeterminism || (target !== 'research')) &&
|
(!tech.isSuperDeterminism || (target !== 'research')) &&
|
||||||
!(tech.isEnergyNoAmmo && target === 'ammo') &&
|
!(tech.isEnergyNoAmmo && target === 'ammo') &&
|
||||||
(!simulation.isNoPowerUps || (target === 'research' || target === 'heal' || target === 'ammo'))
|
(!simulation.isNoPowerUps)
|
||||||
) {
|
) {
|
||||||
powerUps.directSpawn(x, y, target, moving, mode, size)
|
powerUps.directSpawn(x, y, target, moving, mode, size)
|
||||||
if (Math.random() < tech.duplicationChance()) {
|
if (Math.random() < tech.duplicationChance()) {
|
||||||
|
|||||||
@@ -1443,6 +1443,7 @@ const spawn = {
|
|||||||
me.delay = 120 * simulation.CDScale;
|
me.delay = 120 * simulation.CDScale;
|
||||||
me.randomHopFrequency = 200 + Math.floor(Math.random() * 150);
|
me.randomHopFrequency = 200 + Math.floor(Math.random() * 150);
|
||||||
me.randomHopCD = simulation.cycle + me.randomHopFrequency;
|
me.randomHopCD = simulation.cycle + me.randomHopFrequency;
|
||||||
|
Matter.Body.rotate(me, Math.random() * Math.PI);
|
||||||
spawn.shield(me, x, y);
|
spawn.shield(me, x, y);
|
||||||
me.do = function() {
|
me.do = function() {
|
||||||
this.gravity();
|
this.gravity();
|
||||||
|
|||||||
10
js/tech.js
10
js/tech.js
@@ -16,7 +16,7 @@ const tech = {
|
|||||||
//remove lore if it's your first time playing since it's confusing
|
//remove lore if it's your first time playing since it's confusing
|
||||||
//also remove lore if cheating
|
//also remove lore if cheating
|
||||||
lore.techCount = 0;
|
lore.techCount = 0;
|
||||||
if (simulation.isCheating || localSettings.runCount > 1) { //simulation.isCommunityMaps ||
|
if (simulation.isCheating || localSettings.runCount < 1) { //simulation.isCommunityMaps ||
|
||||||
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||||
if (tech.tech[i].isLore) {
|
if (tech.tech[i].isLore) {
|
||||||
tech.tech[i].frequency = 0;
|
tech.tech[i].frequency = 0;
|
||||||
@@ -228,7 +228,7 @@ const tech = {
|
|||||||
if (tech.isEnergyLoss) dmg *= 1.55;
|
if (tech.isEnergyLoss) dmg *= 1.55;
|
||||||
if (tech.isAcidDmg && m.health > 1) dmg *= 1.35;
|
if (tech.isAcidDmg && m.health > 1) dmg *= 1.35;
|
||||||
if (tech.restDamage > 1 && player.speed < 1) dmg *= tech.restDamage
|
if (tech.restDamage > 1 && player.speed < 1) dmg *= tech.restDamage
|
||||||
if (tech.isEnergyDamage) dmg *= 1 + m.energy * 0.1;
|
if (tech.isEnergyDamage) dmg *= 1 + m.energy * 0.11;
|
||||||
if (tech.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.007
|
if (tech.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.007
|
||||||
if (tech.isRerollDamage) dmg *= 1 + 0.037 * powerUps.research.count
|
if (tech.isRerollDamage) dmg *= 1 + 0.037 * powerUps.research.count
|
||||||
if (tech.isOneGun && b.inventory.length < 2) dmg *= 1.25
|
if (tech.isOneGun && b.inventory.length < 2) dmg *= 1.25
|
||||||
@@ -2225,7 +2225,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "electronegativity",
|
name: "electronegativity",
|
||||||
description: "increase <strong class='color-d'>damage</strong> by <strong>1%</strong><br>for every <strong>10</strong> stored <strong class='color-f'>energy</strong>",
|
description: "increase <strong class='color-d'>damage</strong> by <strong>1%</strong><br>for every <strong>9</strong> stored <strong class='color-f'>energy</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -2617,6 +2617,10 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
tech.largerHeals++;
|
tech.largerHeals++;
|
||||||
this.refundAmount += tech.addJunkTechToPool(0.05)
|
this.refundAmount += tech.addJunkTechToPool(0.05)
|
||||||
|
//update current heals
|
||||||
|
for (let i = 0; i < powerUp.length; i++) {
|
||||||
|
if (powerUp[i].name === "heal") powerUp[i].size = powerUps.heal.size()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
refundAmount: 0,
|
refundAmount: 0,
|
||||||
remove() {
|
remove() {
|
||||||
|
|||||||
@@ -131,12 +131,13 @@ summary {
|
|||||||
|
|
||||||
#training-button {
|
#training-button {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 4px;
|
/* bottom: 4px; */
|
||||||
right: 0px;
|
/* right: 0px;
|
||||||
left: 0px;
|
left: 0px;
|
||||||
margin: auto;
|
margin: auto; */
|
||||||
/* bottom: 58px; */
|
/* bottom: 58px; */
|
||||||
/* right: 4px; */
|
top: 4px;
|
||||||
|
right: 4px;
|
||||||
z-index: 12;
|
z-index: 12;
|
||||||
transition: opacity 5s ease-in;
|
transition: opacity 5s ease-in;
|
||||||
|
|
||||||
|
|||||||
68
todo.txt
68
todo.txt
@@ -1,42 +1,81 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
more training levels: "trainingWalk", "trainingCrouch", "trainingJump", "trainingHold", "trainingThrow", "trainingHit", "trainingHeal", "trainingFire", "trainingDeflect"
|
new community level "run" (by iSuggestedThatAlready / iNoobBoi)!!!!!!
|
||||||
|
try it out by enabling community levels in the settings
|
||||||
|
|
||||||
tech: Bose Einstein condensate is removed until I can balance it
|
more training levels: "trainingNailGun", "trainingShotGun", "trainingSuperBall", "trainingMatterWave", "trainingMissile"
|
||||||
|
|
||||||
bug fixes
|
no power ups check box in experiment mode now disables all types of power ups, not just tech
|
||||||
|
simulation.isNoPowerUps
|
||||||
|
powerUps can no longer move through doors
|
||||||
|
this might lead to problems that I haven't thought about, but let's see
|
||||||
|
adiabatic healing now updates active heal power ups as well as future ones
|
||||||
|
|
||||||
|
fixed bug with undefined tech not showing up
|
||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
balance time dilation with bose einstein (you can freeze everything and take no damage)
|
decoherence rewrite with flags instead of a banish array, to fix bugs
|
||||||
code is still there, need to balance
|
|
||||||
balance with energy drain?
|
|
||||||
|
|
||||||
training
|
training
|
||||||
make the button more obvious if the account has only played 1-2 times
|
save training level progress as local variable
|
||||||
|
reset progress to zero if you clear all training levels
|
||||||
|
maybe only save progress if you made if past the trainingHeal level
|
||||||
|
make the training button more obvious if the account has only played 1-2 times
|
||||||
uses the lore voice/text code?
|
uses the lore voice/text code?
|
||||||
add vertical tunnels for power ups spawns like in intro?
|
replace all mob clear triggers with button triggers?
|
||||||
tutorial rooms:
|
tutorial rooms:
|
||||||
done walk forwards and backwards
|
done walk forwards and backwards
|
||||||
done crouch through tunnel
|
done crouch through tunnel
|
||||||
done jump over wall and gap
|
done jump over wall and gap
|
||||||
|
look around with your mouse
|
||||||
done pick up a block an drop onto a button to open door
|
done pick up a block an drop onto a button to open door
|
||||||
done fire block at button to open door
|
done fire block at button to open door
|
||||||
done fire block at mob to open door
|
done fire block at mob to open door
|
||||||
|
done use field to deflect bullets
|
||||||
done pick up heal power ups with field to open door
|
done pick up heal power ups with field to open door
|
||||||
done use a gun to kill a mob and use it's block body to activate a button to open a door
|
done use a gun to kill a mob and use it's block body to activate a button to open a door
|
||||||
done use field to deflect bullets
|
gun rooms: (different mobs type in each room)
|
||||||
use field to pick up a field and research
|
different mobs in each room
|
||||||
research once to open door
|
how to introduce shields?
|
||||||
puzzle rooms
|
"hopper" "slasher" "shooter "grenadier" "striker" "laser" "stabber" "springer" "pulsar" "launcher" "launcherOne" "exploder" "sneaker" "sucker" "sniper" "spinner" "grower" "beamer" "focuser" "spawner" "ghoster"
|
||||||
save training level progress as local variable if puzzles are added
|
done nailgun - start with no ammo collect ammo and shoot at mobs
|
||||||
|
done shotgun - some simple close range combat
|
||||||
|
done superball - use 1 ammo to take out several mobs
|
||||||
|
done matter wave - kill a mob inside a map element
|
||||||
|
done missiles - take out mobs that are around corner and have them drop on a button
|
||||||
|
grenades - use 1 ammo to take out several mobs at once
|
||||||
|
spores - use 1 ammo to take out several mobs at once
|
||||||
|
drones - use mouse to bring drones around a corner
|
||||||
|
foam - slow boss mob, and run away
|
||||||
|
harpoon - kill one close mob, pick up ammo that is out of reach, first at several far away mobs with crouch
|
||||||
|
mine - built kill zone, get mobs to follow into mine kill zone
|
||||||
|
laser - reflect off walls to hit mob
|
||||||
|
field rooms:
|
||||||
|
standing wave - bullets come from every direction
|
||||||
|
perfect diamagnetism - drop field to rapid stream of bullets and fire gun at them
|
||||||
|
negative mass - fly over a bunch of ground based mobs , hoppers
|
||||||
|
molecular assembler - guide drones around the corner
|
||||||
|
plasma torch - nothing fancy, just kill mobs
|
||||||
|
time dilation - get past some mobs
|
||||||
|
cloaking - sneak past mobs to collect some heals
|
||||||
|
pilot wave - toss blocks at mobs
|
||||||
|
worm hole - teleport past lasers
|
||||||
|
puzzle rooms:
|
||||||
|
close a door to trigger a button
|
||||||
combat rooms:
|
combat rooms:
|
||||||
|
kill so many mobs that the mob bodies pile up and you can get over a wall by jumping on them
|
||||||
boss gauntlet, spawn with nothing but a few power ups and fight 10 bosses
|
boss gauntlet, spawn with nothing but a few power ups and fight 10 bosses
|
||||||
|
use no gun, just bots to kil stuff
|
||||||
|
|
||||||
JUNK tech disable level exit for 5 minutes
|
JUNK tech disable level exit for 5 minutes
|
||||||
level.disableExit = true
|
level.disableExit = true
|
||||||
setTimeout( () => {level.disableExit = false;}, 5*60000);
|
setTimeout( () => {level.disableExit = false;}, 5*60000);
|
||||||
|
|
||||||
|
balance time dilation with bose einstein (you can freeze everything and take no damage)
|
||||||
|
code is still there, need to balance
|
||||||
|
balance with energy drain?
|
||||||
|
|
||||||
tech: basic research - heal power ups spawn as research power ups instead, and using research heals you (needs to be pretty low, like 3% health)
|
tech: basic research - heal power ups spawn as research power ups instead, and using research heals you (needs to be pretty low, like 3% health)
|
||||||
tech: maintenance - heals no longer spawn, but using research heals you 100%
|
tech: maintenance - heals no longer spawn, but using research heals you 100%
|
||||||
|
|
||||||
@@ -44,6 +83,9 @@ tech reversed regression - mobs take less damage after each time you hit them,
|
|||||||
maybe a gun tech only?
|
maybe a gun tech only?
|
||||||
what gun?
|
what gun?
|
||||||
|
|
||||||
|
foam tech - make it move slower, last much longer, and push away other foam bullets
|
||||||
|
not sure about bouncing off walls, but that might be fun too
|
||||||
|
|
||||||
tech extend fracture analysis to give bonus damage to frozen also, but reduce the 400%->300%?
|
tech extend fracture analysis to give bonus damage to frozen also, but reduce the 400%->300%?
|
||||||
|
|
||||||
pulsar mobs retarget too easily
|
pulsar mobs retarget too easily
|
||||||
|
|||||||
Reference in New Issue
Block a user