downpour and buttonbutton community maps

community map downpour by DesBoot
community map buttonbutton by ||Destabilized E||

rounded borders on no-image mode selection cards
foam gun has some recoil
new superball gun image

bug fixes
This commit is contained in:
landgreen
2023-03-24 19:50:45 -07:00
parent e2bf9aae66
commit 3ea8bfd638
9 changed files with 70 additions and 26 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -106,6 +106,7 @@
<option value="staircase"> <option value="staircase">
<option value="perplex"> <option value="perplex">
<option value="n-gon"> <option value="n-gon">
<option value="downpour">
<option value="buttonbutton"> <option value="buttonbutton">
<option value="vats"> <option value="vats">
<option value="yingYang"> <option value="yingYang">
@@ -132,6 +133,8 @@
stronghold stronghold
commandeer commandeer
stereoMadness stereoMadness
buttonbutton
downpour
house house
dripp dripp
crossfire crossfire

View File

@@ -7143,6 +7143,7 @@ const b = {
have: false, have: false,
charge: 0, charge: 0,
isDischarge: false, isDischarge: false,
knockBack: 0.001,
chooseFireMethod() { chooseFireMethod() {
if (tech.isFoamPressure) { if (tech.isFoamPressure) {
this.do = this.doCharges this.do = this.doCharges
@@ -7170,6 +7171,9 @@ const b = {
y: m.pos.y + 30 * Math.sin(m.angle) y: m.pos.y + 30 * Math.sin(m.angle)
} }
b.foam(position, Vector.rotate(velocity, spread), radius) b.foam(position, Vector.rotate(velocity, spread), radius)
//knock back player
player.force.x -= this.knockBack * velocity.x
player.force.y -= this.knockBack * velocity.y
m.fireCDcycle = m.cycle + Math.floor(1.5 * b.fireCDscale); m.fireCDcycle = m.cycle + Math.floor(1.5 * b.fireCDscale);
}, },
doCharges() { doCharges() {
@@ -7196,6 +7200,9 @@ const b = {
y: m.pos.y + 30 * Math.sin(m.angle) y: m.pos.y + 30 * Math.sin(m.angle)
} }
b.foam(position, Vector.rotate(velocity, spread), radius) b.foam(position, Vector.rotate(velocity, spread), radius)
//knock back player
player.force.x -= this.knockBack * velocity.x
player.force.y -= this.knockBack * velocity.y
this.charge -= 0.75 this.charge -= 0.75
m.fireCDcycle = m.cycle + 2; //disable firing and adding more charge until empty m.fireCDcycle = m.cycle + 2; //disable firing and adding more charge until empty
} else if (!input.fire) { } else if (!input.fire) {
@@ -7241,6 +7248,9 @@ const b = {
// } else { // } else {
// } // }
b.foam(position, Vector.rotate(velocity, spread), radius) b.foam(position, Vector.rotate(velocity, spread), radius)
//knock back player
player.force.x -= this.knockBack * velocity.x
player.force.y -= this.knockBack * velocity.y
m.fireCDcycle = m.cycle + Math.floor(1.5 * b.fireCDscale); m.fireCDcycle = m.cycle + Math.floor(1.5 * b.fireCDscale);
this.charge += 1 + tech.isCapacitor this.charge += 1 + tech.isCapacitor
}, },

View File

@@ -107,7 +107,7 @@ function collisionChecks(event) {
!mob[k].isSlowed && !mob[k].isStunned !mob[k].isSlowed && !mob[k].isStunned
) { ) {
let dmg = Math.min(Math.max(0.025 * Math.sqrt(mob[k].mass), 0.05), 0.3) * simulation.dmgScale; //player damage is capped at 0.3*dmgScale of 1.0 let dmg = Math.min(Math.max(0.025 * Math.sqrt(mob[k].mass), 0.05), 0.3) * simulation.dmgScale; //player damage is capped at 0.3*dmgScale of 1.0
if (m.isCloak) dmg *= 0.75 if (m.isCloak) dmg *= 0.5
mob[k].foundPlayer(); mob[k].foundPlayer();
if (tech.isRewindAvoidDeath && (m.energy + 0.05) > Math.min(0.95, m.maxEnergy) && dmg > 0.01) { //CPT reversal runs in m.damage, but it stops the rest of the collision code here too if (tech.isRewindAvoidDeath && (m.energy + 0.05) > Math.min(0.95, m.maxEnergy) && dmg > 0.01) { //CPT reversal runs in m.damage, but it stops the rest of the collision code here too
m.damage(dmg); m.damage(dmg);
@@ -336,15 +336,15 @@ function collisionChecks(event) {
} }
//determine if player is on the ground //determine if player is on the ground
Events.on(engine, "collisionStart", function(event) { Events.on(engine, "collisionStart", function (event) {
playerOnGroundCheck(event); playerOnGroundCheck(event);
// playerHeadCheck(event); // playerHeadCheck(event);
collisionChecks(event); collisionChecks(event);
}); });
Events.on(engine, "collisionActive", function(event) { Events.on(engine, "collisionActive", function (event) {
playerOnGroundCheck(event); playerOnGroundCheck(event);
// playerHeadCheck(event); // playerHeadCheck(event);
}); });
Events.on(engine, "collisionEnd", function(event) { Events.on(engine, "collisionEnd", function (event) {
playerOffGroundCheck(event); playerOffGroundCheck(event);
}); });

View File

@@ -10,7 +10,7 @@ const level = {
// playableLevels: ["pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion"], // playableLevels: ["pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion"],
//see level.populateLevels: (intro, ... , reservoir or factory, reactor, ... , gauntlet, final) added later //see level.populateLevels: (intro, ... , reservoir or factory, reactor, ... , gauntlet, final) added later
playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber", "pavilion", "lock"], playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber", "pavilion", "lock"],
communityLevels: ["stronghold", "basement", "crossfire", "vats", "run", "n-gon", "house", "perplex", "coliseum", "tunnel", "islands", "temple", "dripp", "biohazard", "stereoMadness", "yingYang", "staircase", "fortress", "commandeer", "clock", "buttonbutton"], communityLevels: ["stronghold", "basement", "crossfire", "vats", "run", "n-gon", "house", "perplex", "coliseum", "tunnel", "islands", "temple", "dripp", "biohazard", "stereoMadness", "yingYang", "staircase", "fortress", "commandeer", "clock", "buttonbutton", "downpour"],
trainingLevels: ["walk", "crouch", "jump", "hold", "throw", "throwAt", "deflect", "heal", "fire", "nailGun", "shotGun", "superBall", "matterWave", "missile", "stack", "mine", "grenades", "harpoon"], trainingLevels: ["walk", "crouch", "jump", "hold", "throw", "throwAt", "deflect", "heal", "fire", "nailGun", "shotGun", "superBall", "matterWave", "missile", "stack", "mine", "grenades", "harpoon"],
levels: [], levels: [],
start() { start() {
@@ -27,14 +27,14 @@ const level = {
// m.immuneCycle = Infinity //you can't take damage // m.immuneCycle = Infinity //you can't take damage
// tech.tech[297].frequency = 100 // tech.tech[297].frequency = 100
// m.couplingChange(5) // m.couplingChange(5)
// m.setField("wormhole") //1 standing wave 2 perfect diamagnetism 3 negative mass 4 molecular assembler 5 plasma torch 6 time dilation 7 metamaterial cloaking 8 pilot wave 9 wormhole // m.setField("metamaterial cloaking") //1 standing wave 2 perfect diamagnetism 3 negative mass 4 molecular assembler 5 plasma torch 6 time dilation 7 metamaterial cloaking 8 pilot wave 9 wormhole
// simulation.molecularMode = 2 // simulation.molecularMode = 2
// m.damage(0.1); // m.damage(0.1);
// b.giveGuns("nail gun") //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("nail gun") //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("wave") //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("foam") //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[3].ammo = 100000000 // b.guns[3].ammo = 100000000
// tech.giveTech("recycling") // tech.giveTech("recycling")
// tech.giveTech("dead reckoning") // tech.giveTech("pressure vessel")
// for (let i = 0; i < 1; ++i) tech.giveTech("pseudoscience") // for (let i = 0; i < 1; ++i) tech.giveTech("pseudoscience")
// for (let i = 0; i < 1; ++i) tech.giveTech("options exchange") // for (let i = 0; i < 1; ++i) tech.giveTech("options exchange")
// for (let i = 0; i < 1; i++) tech.giveTech("laser-bot") // for (let i = 0; i < 1; i++) tech.giveTech("laser-bot")
@@ -42,7 +42,7 @@ const level = {
// for (let i = 0; i < 3; i++) powerUps.directSpawn(450, -50, "tech"); // for (let i = 0; i < 3; 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");
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "coupling"); // for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "coupling");
// level.testing(); // level.downpour();
// spawn.nodeGroup(3200, -300, "sniper") // spawn.nodeGroup(3200, -300, "sniper")
// spawn.nodeGroup(2200, -300, "sniper") // spawn.nodeGroup(2200, -300, "sniper")
// spawn.nodeGroup(2200, -300, "sniper") // spawn.nodeGroup(2200, -300, "sniper")
@@ -18166,6 +18166,7 @@ const level = {
}, },
downpour() { downpour() {
simulation.makeTextLog(`<strong>Downpour</strong> by <span class='color-var'>DesBoot</span>`); simulation.makeTextLog(`<strong>Downpour</strong> by <span class='color-var'>DesBoot</span>`);
simulation.makeTextLog(`<span class='color-var'>level</span>.onLevel = "Downpour"`);
let mobsspawned = 0 let mobsspawned = 0
const laser = level.hazard(7492, -2612, 10, 500, 0.3) //laserintro const laser = level.hazard(7492, -2612, 10, 500, 0.3) //laserintro
@@ -18205,7 +18206,7 @@ const level = {
do { do {
ctx.beginPath() ctx.beginPath()
// ctx.fillStyle = "rgba(30,150,117,255)" ctx.fillStyle = "rgba(30,150,117,255)"
ctx.rect(Math.random() * 4500 - 2000, -5000, Math.random() * 3 + 2.5, 5000) ctx.rect(Math.random() * 4500 - 2000, -5000, Math.random() * 3 + 2.5, 5000)
ctx.rect(Math.random() * 4500 - 2000, -5000, Math.random() * 3 + 2.5, 5000) ctx.rect(Math.random() * 4500 - 2000, -5000, Math.random() * 3 + 2.5, 5000)
ctx.rect(Math.random() * 4500 - 2000, -5000, Math.random() * 3 + 2.5, 5000) ctx.rect(Math.random() * 4500 - 2000, -5000, Math.random() * 3 + 2.5, 5000)

View File

@@ -3841,7 +3841,7 @@ const m = {
//not shooting (or using field) enable cloak //not shooting (or using field) enable cloak
if (m.energy < 0.05 && m.fireCDcycle < m.cycle && !input.fire) m.fireCDcycle = m.cycle if (m.energy < 0.05 && m.fireCDcycle < m.cycle && !input.fire) m.fireCDcycle = m.cycle
if (m.fireCDcycle + 30 < m.cycle && !input.fire) { //automatically cloak if not firing if (m.fireCDcycle + 30 < m.cycle && !input.fire) { //automatically cloak if not firing
const drain = 0.03 const drain = 0.02
if (!m.isCloak && m.energy > drain + 0.03) { if (!m.isCloak && m.energy > drain + 0.03) {
m.energy -= drain m.energy -= drain
m.isCloak = true //enter cloak m.isCloak = true //enter cloak
@@ -3878,7 +3878,7 @@ const m = {
if (tech.isCloakStun) { //stun nearby mobs after exiting cloak if (tech.isCloakStun) { //stun nearby mobs after exiting cloak
let isMobsAround = false let isMobsAround = false
const stunRange = m.fieldDrawRadius * 1.5 const stunRange = m.fieldDrawRadius * 1.5
const drain = 0.15 const drain = 0.14
if (m.energy > drain) { if (m.energy > drain) {
for (let i = 0, len = mob.length; i < len; ++i) { for (let i = 0, len = mob.length; i < len; ++i) {
if (Vector.magnitude(Vector.sub(mob[i].position, m.pos)) < stunRange && Matter.Query.ray(map, mob[i].position, m.pos).length === 0 && !mob[i].isBadTarget) { if (Vector.magnitude(Vector.sub(mob[i].position, m.pos)) < stunRange && Matter.Query.ray(map, mob[i].position, m.pos).length === 0 && !mob[i].isBadTarget) {
@@ -3900,7 +3900,7 @@ const m = {
} }
} }
if (m.isCloak) { if (m.isCloak) {
m.fieldRange = m.fieldRange * 0.85 + 115 m.fieldRange = m.fieldRange * 0.85 + 130
m.fieldDrawRadius = m.fieldRange * 1.1 //* 0.88 //* Math.min(1, 0.3 + 0.5 * Math.min(1, energy * energy)); m.fieldDrawRadius = m.fieldRange * 1.1 //* 0.88 //* Math.min(1, 0.3 + 0.5 * Math.min(1, energy * energy));
m.drawCloak() m.drawCloak()
} else if (m.fieldRange < 4000) { } else if (m.fieldRange < 4000) {

View File

@@ -5799,7 +5799,7 @@ const tech = {
frequency: 2, frequency: 2,
frequencyDefault: 2, frequencyDefault: 2,
allowed() { allowed() {
return tech.haveGunCheck("mine") && !tech.isFoamMine return tech.haveGunCheck("mine")
}, },
requires: "mines, not elephants toothpaste", requires: "mines, not elephants toothpaste",
effect() { effect() {
@@ -6520,6 +6520,27 @@ const tech = {
b.guns[8].chooseFireMethod() b.guns[8].chooseFireMethod()
} }
}, },
// {
// name: "cavitation",
// description: "increase <strong>foam</strong> <strong class='color-g'>gun</strong> <strong>recoil</strong> by <strong>300%</strong><br>",
// isGunTech: true,
// maxCount: 1,
// count: 0,
// frequency: 2,
// frequencyDefault: 2,
// allowed() {
// return tech.haveGunCheck("foam")
// },
// requires: "foam",
// effect() {
// tech.isFoamCavitation = true;
// b.guns[8].knockBack = 0.003
// },
// remove() {
// tech.isFoamCavitation = false;
// b.guns[8].knockBack = 0.001
// }
// },
{ {
name: "capacitor bank", name: "capacitor bank",
// description: "<strong>charge</strong> effects build up almost <strong>instantly</strong><br><em style = 'font-size:97%;'>throwing <strong class='color-block'>blocks</strong>, foam, railgun, pulse, tokamak</em>", // description: "<strong>charge</strong> effects build up almost <strong>instantly</strong><br><em style = 'font-size:97%;'>throwing <strong class='color-block'>blocks</strong>, foam, railgun, pulse, tokamak</em>",
@@ -11413,5 +11434,6 @@ const tech = {
hardLanding: null, hardLanding: null,
isNoGroundDamage: null, isNoGroundDamage: null,
isSuperBounce: null, isSuperBounce: null,
isDivisor: null isDivisor: null,
isFoamCavitation: null,
} }

View File

@@ -184,7 +184,7 @@ summary {
} }
.choose-grid-no-images { .choose-grid-no-images {
border-radius: 12px; border-radius: 8px;
border: 10px solid #444; border: 10px solid #444;
gap: 10px; gap: 10px;
background-color: #444; background-color: #444;
@@ -210,6 +210,7 @@ summary {
scrollbar-width: none; scrollbar-width: none;
} }
#choose-grid::-webkit-scrollbar { #choose-grid::-webkit-scrollbar {
display: none; display: none;
} }
@@ -483,6 +484,13 @@ summary {
} }
} }
/* .card-text */
.choose-grid-no-images .card-text,
.choose-grid-no-images .research-card,
.choose-grid-no-images .cancel-card {
border-radius: 5px;
}
/* keeps 4 columns at 1440px */ /* keeps 4 columns at 1440px */
/* @media (1500px <= width < 1950px) { /* @media (1500px <= width < 1950px) {
.experiment-grid-module, .choose-grid-module, .pause-grid-module { .experiment-grid-module, .choose-grid-module, .pause-grid-module {

View File

@@ -1,24 +1,24 @@
******************************************************** NEXT PATCH ************************************************** ******************************************************** NEXT PATCH **************************************************
mob damage difficulty setting is lower community map downpour by DesBoot
recycling now flashes green when it heals community map buttonbutton by ||Destabilized E||
merged cancel and research bars for single column selection rounded borders on no-image mode selection cards
added some dark grey borders for no images selection mode foam gun has some recoil
new superball gun image
new images with midJourney V5
spores, pilot wave, standing wave
bug fixes bug fixes
*********************************************************** TODO ***************************************************** *********************************************************** TODO *****************************************************
foam gun tech cavitation - a knock back effect, and 1 out of 5 foam bullets are larger and faster?
Tech: Turbine - Energy generation is proportional to your speed up to +X% energy generation at 40 speed
Tech: "Electric Reactive Armor": Defeanse increases by 2% for each 1 energy generation you have
wormhole tech - teleport away mobs with mass below 3 when they get too near the player wormhole tech - teleport away mobs with mass below 3 when they get too near the player
short CD, small energy cost, only mobs below a mass short CD, small energy cost, only mobs below a mass
foam gun could have a knock back effect
maybe with pressure vessel?
extend brainstorming animation timers to fps cap? extend brainstorming animation timers to fps cap?
will it be smoother or choppier? will it be smoother or choppier?
anything else needs to hit limited fps on a high fps monitor? anything else needs to hit limited fps on a high fps monitor?