From 69fec1cde78ceb01d10e86a07698e4ecdf90ac4d Mon Sep 17 00:00:00 2001 From: landgreen Date: Sun, 30 May 2021 14:14:29 -0700 Subject: [PATCH] metamaterial cloaking now does 300% more damage added 50% chance for elevators on warehouse level metamaterial cloaking now does 300% more damage if a mob has not died in the last 4 seconds removed: tech: combinatorial optimization - increase damage by 66% if a mob hasn't died in the last 5 seconds fixed bug with experiment not loading tech --- .DS_Store | Bin 6148 -> 6148 bytes js/index.js | 22 ++++++++++ js/level.js | 111 ++++++++++++++++++++++++++++++----------------- js/player.js | 23 +++++++--- js/simulation.js | 2 +- js/tech.js | 41 +++++++++-------- todo.txt | 27 +++++++++--- 7 files changed, 153 insertions(+), 73 deletions(-) diff --git a/.DS_Store b/.DS_Store index 29517cacfd527fa980fcf76b7df0cac49c78fa3a..237e5dc5711144c8f1e159f254b44cdabdcd49de 100644 GIT binary patch delta 15 WcmZoMXffEJ#mrRoVzUnO4G{n { //return energy + // who.classList.add("build-tech-selected") + // }, 50); + + // } + // } + + + //update tech text //disable not allowed tech for (let i = 0, len = tech.tech.length; i < len; i++) { const techID = document.getElementById("tech-" + i) diff --git a/js/level.js b/js/level.js index b9d66df..a2e6fa7 100644 --- a/js/level.js +++ b/js/level.js @@ -16,7 +16,7 @@ const level = { // level.difficultyIncrease(30) // simulation.zoomScale = 1000; // simulation.setZoom(); - // m.setField("pilot wave") + // m.setField("metamaterial cloaking") // b.giveGuns("laser") // tech.isExplodeRadio = true // tech.giveTech("WIMPs") @@ -52,7 +52,7 @@ const level = { // level.coliseum() //community level // level.crossfire() //community level // level.vats() //community level - // level.n_gon() //community level + // level["n-gon"]() //community level // powerUps.directSpawn(simulation.mouseInGame.x, simulation.mouseInGame.y, "tech"); // tech.giveTech("undefined") @@ -2934,46 +2934,77 @@ const level = { // spawn.mapRect(-1950, -400, 100, 25); spawn.mapRect(-3150, 50, 775, 100); spawn.mapRect(-2600, -250, 775, 100); - spawn.bodyRect(-1450, -125, 125, 125, 1, spawn.propsSlide); //weight - spawn.bodyRect(-1800, 0, 300, 100, 1, spawn.propsHoist); //hoist - cons[cons.length] = Constraint.create({ - pointA: { - x: -1650, - y: -500 - }, - bodyB: body[body.length - 1], - stiffness: 0.0001815, - length: 1 - }); - World.add(engine.world, cons[cons.length - 1]); - spawn.bodyRect(600, 525, 125, 125, 1, spawn.propsSlide); //weight - spawn.bodyRect(800, 600, 300, 100, 1, spawn.propsHoist); //hoist - cons[cons.length] = Constraint.create({ - pointA: { - x: 950, - y: 100 - }, - bodyB: body[body.length - 1], - stiffness: 0.0001815, - length: 1 - }); - World.add(engine.world, cons[cons.length - 1]); + if (Math.random() < 0.5) { + const elevator1 = level.elevator(-1780, 500, 260, 40, 7, 0.0003) + const elevator2 = level.elevator(820, 1300, 260, 40, 607, 0.0003) + const elevator3 = level.elevator(-2755, 1260, 160, 40, 1000, 0.006) + spawn.bodyRect(-2375, 1300, 100, 100); + spawn.bodyRect(-2325, 1250, 50, 50); + spawn.bodyRect(-2275, 1350, 125, 50); - spawn.bodyRect(-2700, 1150, 100, 160, 1, spawn.propsSlide); //weight - spawn.bodyRect(-2550, 1150, 200, 100, 1, spawn.propsSlide); //weight - spawn.bodyRect(-2775, 1300, 400, 100, 1, spawn.propsHoist); //hoist - cons[cons.length] = Constraint.create({ - pointA: { - x: -2575, - y: 150 - }, - bodyB: body[body.length - 1], - stiffness: 0.0005, - length: 566 - }); - World.add(engine.world, cons[cons.length - 1]); + level.custom = () => { + elevator1.move(); + elevator1.drawTrack(); + elevator2.move(); + elevator2.drawTrack(); + elevator3.move(); + elevator3.drawTrack(); + ctx.fillStyle = "#444" //light fixtures + ctx.fillRect(-920, -505, 40, 10) + ctx.fillRect(-920, 95, 40, 10) + ctx.fillRect(180, 95, 40, 10) + ctx.fillRect(-20, 695, 40, 10) + ctx.fillRect(-2320, 945, 40, 10) + + ctx.fillStyle = "#cff" //exit + ctx.fillRect(300, -250, 350, 250) + level.playerExitCheck(); + level.exit.draw(); + level.enter.draw(); + }; + } else { + spawn.bodyRect(-1450, -125, 125, 125, 1, spawn.propsSlide); //weight + spawn.bodyRect(-1800, 0, 300, 100, 1, spawn.propsHoist); //hoist + cons[cons.length] = Constraint.create({ + pointA: { + x: -1650, + y: -500 + }, + bodyB: body[body.length - 1], + stiffness: 0.0001815, + length: 1 + }); + World.add(engine.world, cons[cons.length - 1]); + + spawn.bodyRect(600, 525, 125, 125, 1, spawn.propsSlide); //weight + spawn.bodyRect(800, 600, 300, 100, 1, spawn.propsHoist); //hoist + cons[cons.length] = Constraint.create({ + pointA: { + x: 950, + y: 100 + }, + bodyB: body[body.length - 1], + stiffness: 0.0001815, + length: 1 + }); + World.add(engine.world, cons[cons.length - 1]); + + spawn.bodyRect(-2700, 1150, 100, 160, 1, spawn.propsSlide); //weight + spawn.bodyRect(-2550, 1150, 200, 100, 1, spawn.propsSlide); //weight + spawn.bodyRect(-2775, 1300, 400, 100, 1, spawn.propsHoist); //hoist + cons[cons.length] = Constraint.create({ + pointA: { + x: -2575, + y: 150 + }, + bodyB: body[body.length - 1], + stiffness: 0.0005, + length: 566 + }); + World.add(engine.world, cons[cons.length - 1]); + } @@ -5418,7 +5449,7 @@ const level = { portal2[2].draw() } }, - n_gon() { // Made by Oranger on Discord + "n-gon"() { // Made by Oranger on Discord let needGravity = []; let s = { //mech statue x: -200, diff --git a/js/player.js b/js/player.js index e5d555b..792da85 100644 --- a/js/player.js +++ b/js/player.js @@ -943,7 +943,8 @@ const m = { isFieldActive: false, fieldRange: 155, fieldShieldingScale: 1, - fieldDamage: 1, + // fieldDamage: 1, + isSneakAttack: false, duplicateChance: 0, energy: 0, fieldRegen: 0, @@ -976,7 +977,7 @@ const m = { m.fieldShieldingScale = 1; m.fieldBlockCD = 10; m.fieldHarmReduction = 1; - m.fieldDamage = 1 + m.isSneakAttack = false m.duplicateChance = 0 powerUps.setDo(); m.grabPowerUpRange2 = 156000; @@ -1952,7 +1953,7 @@ const m = { }, { name: "metamaterial cloaking", //"weak photonic coupling" "electromagnetically induced transparency" "optical non-coupling" "slow light field" "electro-optic transparency" - description: "cloak after not using your gun or field
while cloaked mobs can't see you
increase damage by 146%", + description: "when not firing activate a cloaking effect
if a mob has not died in the last 4 seconds
increase damage by 300%", effect: () => { m.fieldFire = true; m.fieldMeterColor = "#333"; @@ -1960,8 +1961,9 @@ const m = { // m.eyeFillColor = '#333' m.fieldPhase = 0; m.isCloak = false - m.fieldDamage = 2.46 // 1 + 146/100 + // m.fieldDamage = 2.46 // 1 + 146/100 m.fieldDrawRadius = 0 + m.isSneakAttack = true; const drawRadius = 1000 m.hold = function() { @@ -2080,9 +2082,9 @@ const m = { if (m.energy < 0) m.energy = 0 const xOff = m.pos.x - m.radius * m.maxEnergy const yOff = m.pos.y - 50 - ctx.fillStyle = "rgba(0, 0, 0, 0.3)"; + ctx.fillStyle = "rgba(0, 0, 0, 0.3)" // ctx.fillRect(xOff, yOff, 60 * m.maxEnergy, 10); - ctx.fillStyle = "#fff"; + ctx.fillStyle = "#fff" //m.cycle > m.lastKillCycle + 300 ? "#000" : "#fff" //"#fff"; ctx.fillRect(xOff, yOff, 60 * m.energy, 10); ctx.beginPath() ctx.rect(xOff, yOff, 60 * m.maxEnergy, 10); @@ -2090,6 +2092,15 @@ const m = { ctx.lineWidth = 1; ctx.stroke(); } + //show sneak attack status + + if (m.cycle > m.lastKillCycle + 300) { + ctx.strokeStyle = "rgba(0,0,0,0.4)" //m.fieldMeterColor; //"rgba(255,255,0,0.2)" //ctx.strokeStyle = `rgba(0,0,255,${0.5+0.5*Math.random()})` + ctx.beginPath(); + ctx.arc(m.pos.x, m.pos.y, 28, 0, 2 * Math.PI); + ctx.lineWidth = 2 + ctx.stroke(); + } } } }, diff --git a/js/simulation.js b/js/simulation.js index f72b54c..193ab50 100644 --- a/js/simulation.js +++ b/js/simulation.js @@ -525,7 +525,7 @@ const simulation = { level.levels.push("basement"); level.levels.push("crossfire"); level.levels.push("vats") - level.levels.push("n_gon") + level.levels.push("n-gon") level.levels.push("house"); level.levels.push("perplex"); level.levels.push("coliseum"); diff --git a/js/tech.js b/js/tech.js index ca7da8c..978d1aa 100644 --- a/js/tech.js +++ b/js/tech.js @@ -147,11 +147,11 @@ return false }, damageFromTech() { - let dmg = m.fieldDamage + let dmg = 1 //m.fieldDamage if (tech.isFlipFlopDamage && tech.isFlipFlopOn) dmg *= 1.45 if (tech.isAnthropicDamage && tech.isDeathAvoidedThisLevel) dmg *= 2.3703599 if (tech.isDamageAfterKill) dmg *= (m.lastKillCycle + 300 > m.cycle) ? 1.5 : 0.85 - if (tech.isSneakAttack && m.cycle > m.lastKillCycle + 300) dmg *= 1.66 + if (m.isSneakAttack && m.cycle > m.lastKillCycle + 240) dmg *= 4 if (tech.isTechDamage) dmg *= 1.9 if (tech.isDupDamage) dmg *= 1 + Math.min(1, tech.duplicationChance()) if (tech.isLowEnergyDamage) dmg *= 1 + Math.max(0, 1 - m.energy) * 0.5 @@ -170,7 +170,6 @@ if (tech.isNoFireDamage && m.cycle > m.fireCDcycle + 120) dmg *= 1.9 if (tech.isSpeedDamage) dmg *= 1 + Math.min(0.43, player.speed * 0.015) if (tech.isBotDamage) dmg *= 1 + 0.05 * b.totalBots() - return dmg * tech.slowFire * tech.aimDamage }, duplicationChance() { @@ -5106,24 +5105,24 @@ tech.isCloakStun = false; } }, - { - name: "combinatorial optimization", - description: "increase damage by 66%
if a mob has not died in the last 5 seconds", - isFieldTech: true, - maxCount: 1, - count: 0, - frequency: 2, - allowed() { - return m.fieldUpgrades[m.fieldMode].name === "metamaterial cloaking" - }, - requires: "metamaterial cloaking or pilot wave", - effect() { - tech.isSneakAttack = true; - }, - remove() { - tech.isSneakAttack = false; - } - }, + // { + // name: "combinatorial optimization", + // description: "increase damage by 66%
if a mob has not died in the last 5 seconds", + // isFieldTech: true, + // maxCount: 1, + // count: 0, + // frequency: 2, + // allowed() { + // return m.fieldUpgrades[m.fieldMode].name === "metamaterial cloaking" + // }, + // requires: "metamaterial cloaking or pilot wave", + // effect() { + // tech.isSneakAttack = true; + // }, + // remove() { + // tech.isSneakAttack = false; + // } + // }, { name: "discrete optimization", description: "increase damage by 50%
50% increased delay after firing", diff --git a/todo.txt b/todo.txt index b511c2a..be615dc 100644 --- a/todo.txt +++ b/todo.txt @@ -1,12 +1,11 @@ ******************************************************** NEXT PATCH ******************************************************** -"cloak" and "alternate reality" now have styled text +added 50% chance for elevators on warehouse level -metamaterial field damage increased to 146% (was 121%) -tech: combinatorial optimization - increase damage by 66% if a mob hasn't died in the last 5 seconds +metamaterial cloaking now does 300% more damage if a mob has not died in the last 4 seconds + removed: tech: combinatorial optimization - increase damage by 66% if a mob hasn't died in the last 5 seconds -fix bugs where some shared build URLs were crashing on some unusual tech, like lore tech and nonrefundable tech -junk tech: not a bug - crashes the game +fixed bug with experiment not loading tech ******************************************************** BUGS ******************************************************** @@ -36,6 +35,24 @@ is there a way to check if the player is stuck inside the map or block ******************************************************** TODO ******************************************************** +MACHOs might clash with cloaking field graphic + + + things to avoid when designing a map: +avoid a single path through the map + instead have multiple paths through the map + or randomize parts of the map +avoid isolated floating rectangles + instead imagine what story you are trying to tell about the buildings and tell that story + draw: shadows, color inside of buildings, structural support, pillars, ... +avoid simple repetitive platforms + instead of - -- - try -:_-L -_ +avoid large flat areas; this doesn't produce fun combat + instead produce complex places for the player to hide +break these rules when its important to make a statement in your level + + + flip left right on some maps some mobs use the original x parameter in their loop, but it doesn't get flipped manually edit each mob's logic