` // style = "margin-left: 192px; margin-right: -192px;"
+ text += `
` // style = "margin-left: 192px; margin-right: -192px;"
text += `
`
for (let i = 0, len = Math.min(powerUps.research.count, 30); i < len; i++) text += ``
text += ` ${tech.isResearchReality?"alternate reality": "research"} `
@@ -644,21 +644,29 @@ const powerUps = {
return text
},
buildColumns(totalChoices, type) {
+ let width
+ if (canvas.width < 1500) {
+ width = "340px"
+ } else if (canvas.width < 1950) {
+ width = "360px"
+ } else {
+ width = "384px"
+ }
let text = ""
if (localSettings.isHideImages || canvas.width < 1200) {
- document.getElementById("choose-grid").style.gridTemplateColumns = "384px"
+ document.getElementById("choose-grid").style.gridTemplateColumns = width
text += powerUps.cancelText(type)
text += powerUps.researchText(type)
} else if (totalChoices === 2) {
- document.getElementById("choose-grid").style.gridTemplateColumns = "384px 384px"
+ document.getElementById("choose-grid").style.gridTemplateColumns = `repeat(2, ${width})`
text += powerUps.researchText(type)
text += powerUps.cancelText(type)
} else if (totalChoices === 1) {
- document.getElementById("choose-grid").style.gridTemplateColumns = "384px"
+ document.getElementById("choose-grid").style.gridTemplateColumns = width
text += powerUps.cancelText(type)
text += powerUps.researchText(type)
} else {
- document.getElementById("choose-grid").style.gridTemplateColumns = "384px 384px 384px"
+ document.getElementById("choose-grid").style.gridTemplateColumns = `repeat(3, ${width})`
text += "
"
text += powerUps.researchText(type)
text += powerUps.cancelText(type)
diff --git a/js/tech.js b/js/tech.js
index f4b2565..665fe8b 100644
--- a/js/tech.js
+++ b/js/tech.js
@@ -299,7 +299,7 @@ const tech = {
},
tech: [{
name: "ordnance",
- description: "double the
frequency of finding
guntechspawn a
gun and
+7% JUNK to
tech pool",
+ description: "
double the
frequency of finding
guntechspawn a
gun and
+7% JUNK to
tech pool",
maxCount: 1,
count: 0,
frequency: 1,
@@ -509,7 +509,7 @@ const tech = {
{
name: "supply chain",
descriptionFunction() {
- return `double your current
ammo+4% JUNK to
tech pool`
+ return `double your current
ammo+4% JUNK to
tech pool`
},
maxCount: 9,
count: 0,
@@ -2512,7 +2512,7 @@ const tech = {
},
{
name: "overcharge",
- description: "
+66 maximum
energy+6% JUNK to
tech pool",
+ description: "
+66 maximum
energy+6% JUNK to
tech pool",
maxCount: 9,
count: 0,
frequency: 1,
@@ -2538,7 +2538,7 @@ const tech = {
},
{
name: "Maxwells demon",
- description: "
energy above your max decays
96% slower
+5% JUNK to
tech pool",
+ description: "
energy above your max decays
96% slower
+5% JUNK to
tech pool",
maxCount: 1,
count: 0,
frequency: 2,
@@ -2846,7 +2846,7 @@ const tech = {
{
name: "adiabatic healing",
descriptionFunction() {
- return `${powerUps.orb.heal()} have
+100% effect
+5% JUNK to
tech pool`
+ return `${powerUps.orb.heal()} have
+100% effect
+5% JUNK to
tech pool`
},
maxCount: 3,
count: 0,
@@ -3234,7 +3234,7 @@ const tech = {
},
{
name: "pseudoscience",
- description: "
when selecting a power up, research 3 timesfor
free, but add
1-4% JUNK to the
tech pool",
+ description: "
when selecting a power up, research 3 timesfor
free, but add
1-4% JUNK to the
tech pool",
maxCount: 1,
count: 0,
frequency: 1,
@@ -3292,7 +3292,7 @@ const tech = {
{
name: "emergence",
description: "
tech,
fields, and
guns have
+1 choice+8% damage",
- // description: "
tech,
fields, and
guns have
+2 choices+3% JUNK to
tech pool",
+ // description: "
tech,
fields, and
guns have
+2 choices+3% JUNK to
tech pool",
maxCount: 9,
count: 0,
frequency: 1,
@@ -3319,7 +3319,7 @@ const tech = {
{
name: "path integral",
link: `
path integral`,
- description: "your next
tech choice has all possible
options+5% JUNK to
tech pool",
+ description: "your next
tech choice has all possible
options+5% JUNK to
tech pool",
maxCount: 1,
count: 0,
frequency: 1,
@@ -3410,8 +3410,8 @@ const tech = {
},
{
name: "abiogenesis",
- // description: `use ${powerUps.orb.research(4)}(or
49% JUNK to the
tech pool if you can't) to add a 2nd
boss to each level`,
- description: `
as a level begins spawn a 2nd boss using ${powerUps.orb.research(4)}
(+49% JUNK to the tech pool if you can't pay)`,
+ // description: `use ${powerUps.orb.research(4)}(or
49% JUNK to the
tech pool if you can't) to add a 2nd
boss to each level`,
+ description: `
as a level begins spawn a 2nd boss using ${powerUps.orb.research(4)}
(+49% JUNK to the tech pool if you can't pay)`,
maxCount: 1,
count: 0,
frequency: 2,
@@ -3429,7 +3429,7 @@ const tech = {
},
{
name: "meta-analysis",
- description: `if you choose a
JUNKtech you instead get a
random normal
tech and spawn ${powerUps.orb.research(2)}`,
+ description: `if you choose a
JUNKtech you instead get a
random normal
tech and spawn ${powerUps.orb.research(2)}`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -3447,7 +3447,7 @@ const tech = {
},
{
name: "dark patterns",
- description: "
+38% damage+53% JUNK to
tech pool",
+ description: "
+38% damage+53% JUNK to
tech pool",
maxCount: 1,
count: 0,
frequency: 1,
@@ -3776,7 +3776,7 @@ const tech = {
},
{
name: "replication",
- description: "
+10% chance to
duplicate spawned
power ups+33% JUNK to
tech pool",
+ description: "
+10% chance to
duplicate spawned
power ups+33% JUNK to
tech pool",
maxCount: 9,
count: 0,
frequency: 1,
@@ -4669,7 +4669,7 @@ const tech = {
frequency: 1,
frequencyDefault: 1,
allowed() {
- return (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIceShot && !tech.isRivets && !tech.isFoamShot && !tech.isSporeWorm && !tech.isSporeFlea && !tech.isNeedles) || (tech.haveGunCheck("super balls") && !tech.isFoamBall && !tech.isSuperHarm) || (tech.isRivets && !tech.isNailCrit) || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 3) || (tech.haveGunCheck("drones") && !tech.isForeverDrones && !tech.isDroneRadioactive && !tech.isDroneTeleport)
+ return (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIceShot && !tech.isRivets && !tech.isFoamShot && !tech.isSporeWorm && !tech.isSporeFlea && !tech.isNeedles) || (tech.haveGunCheck("super balls") && !tech.isFoamBall && !tech.superHarm) || (tech.isRivets && !tech.isNailCrit) || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 3) || (tech.haveGunCheck("drones") && !tech.isForeverDrones && !tech.isDroneRadioactive && !tech.isDroneTeleport)
},
requires: "shotgun, super balls, rivets, drones, not irradiated drones, burst drones, polyurethane, Zectron",
effect() {
@@ -4708,9 +4708,9 @@ const tech = {
},
{
name: "Zectron",
- description: `
+100% super ball density and
damageafter colliding with
super balls lose health`,
+ description: `
+80% super ball density and
damage, but
after colliding with
super balls lose health`,
isGunTech: true,
- maxCount: 1,
+ maxCount: 9,
count: 0,
frequency: 2,
frequencyDefault: 2,
@@ -4719,10 +4719,10 @@ const tech = {
},
requires: "super balls not incendiary ammunition",
effect() {
- tech.isSuperHarm = true
+ tech.superHarm++
},
remove() {
- tech.isSuperHarm = false
+ tech.superHarm = 0
}
},
{
@@ -5521,7 +5521,7 @@ const tech = {
},
{
name: "booby trap",
- description: "
60% chance to drop a
mine from
power ups+46% JUNK to
tech pool",
+ description: "
60% chance to drop a
mine from
power ups+46% JUNK to
tech pool",
isGunTech: true,
maxCount: 1,
count: 0,
@@ -5626,25 +5626,25 @@ const tech = {
tech.isSporeGrowth = false
}
},
- {
- name: "cordyceps",
- description: "mobs infected by
sporangiumresurrect and attack other mobs",
- isGunTech: true,
- maxCount: 1,
- count: 0,
- frequency: 2,
- frequencyDefault: 2,
- allowed() {
- return tech.haveGunCheck("spores")
- },
- requires: "spores",
- effect() {
- tech.isZombieMobs = true
- },
- remove() {
- tech.isZombieMobs = false
- }
- },
+ // {
+ // name: "cordyceps",
+ // description: "mobs infected by
sporangiumresurrect and attack other mobs",
+ // isGunTech: true,
+ // maxCount: 1,
+ // count: 0,
+ // frequency: 2,
+ // frequencyDefault: 2,
+ // allowed() {
+ // return tech.haveGunCheck("spores")
+ // },
+ // requires: "spores",
+ // effect() {
+ // tech.isZombieMobs = true
+ // },
+ // remove() {
+ // tech.isZombieMobs = false
+ // }
+ // },
{
name: "colony",
description: "
+50% sporangium discharge
40% chance to discharge something different",
@@ -5712,7 +5712,7 @@ const tech = {
{
name: "junk DNA",
descriptionFunction() {
- return `
+53% ${b.guns[6].nameString()}
damage per
JUNKtech (${(53*tech.junkCount).toFixed(0)}%)+50% JUNK to
tech pool`
+ return `
+53% ${b.guns[6].nameString()}
damage per
JUNKtech (${(53*tech.junkCount).toFixed(0)}%)+50% JUNK to
tech pool`
},
isGunTech: true,
maxCount: 1,
@@ -5739,7 +5739,7 @@ const tech = {
// {
// name: "junk DNA",
// //increase damage by 10% for each JUNK tech percent in the tech pool, remove all JUNK tech,
- // descriptionFunction() { return `
+50% ${b.guns[6].nameString()}
damage+15% JUNK to
tech pool` },
+ // descriptionFunction() { return `
+50% ${b.guns[6].nameString()}
damage+15% JUNK to
tech pool` },
// isGunTech: true,
// maxCount: 1,
// count: 0,
@@ -5863,7 +5863,9 @@ const tech = {
},
{
name: "path integration",
- description: "
drones,
spores,
fleas, and
wormstravel with you through
levels",
+ descriptionFunction() {
+ return `
drones and ${b.guns[6].nameString("s")}
travel with you through
levels`
+ },
isGunTech: true,
maxCount: 1,
count: 0,
@@ -6520,7 +6522,7 @@ const tech = {
{
name: "UHMWPE",
descriptionFunction() {
- return `+${(b.guns[9].ammo).toFixed(0)}%
harpoon rope length(1/80 of harpoon ammo)`
+ return `+${(b.guns[9].ammo*1.25).toFixed(0)}%
harpoon rope length(1/80 of harpoon ammo)`
},
isGunTech: true,
maxCount: 1,
@@ -8363,7 +8365,7 @@ const tech = {
// },
{
name: "swap meet",
- description: "normal
tech become
JUNKand
JUNK become normal
tech",
+ description: "normal
tech become
JUNKand
JUNK become normal
tech",
maxCount: 1,
count: 0,
frequency: 0,
@@ -8412,7 +8414,7 @@ const tech = {
const delay = 333
const loop = () => {
if ((simulation.isChoosing) && m.alive && !build.isExperimentSelection) {
- const dmg = Math.floor(33 * Math.random()) * 0.01
+ const dmg = Math.floor(27 * Math.random()) * 0.01
this.text = `
+${(dmg*100).toFixed(0).padStart(2, '0')}% damage `
this.damage = 1 + dmg
if (document.getElementById(`damage-JUNK-id${this.id}`)) document.getElementById(`damage-JUNK-id${this.id}`).innerHTML = this.text
@@ -8686,7 +8688,7 @@ const tech = {
// },
{
name: "discount",
- description: "get 3 random
JUNKtech for the price of 1!
",
+ description: "get 3 random
JUNKtech for the price of 1!
",
maxCount: 1,
count: 0,
frequency: 0,
@@ -9324,13 +9326,13 @@ const tech = {
frequency: 0,
isNonRefundable: true,
isJunk: true,
- allowed() {return true},
+ allowed() { return true },
requires: "",
effect() {
m.health = 0.01 //set health to 1
m.displayHealth();
for (let i = mob.length - 1; i > -1; i--) { //replace mobs with zombies
- if (mob[i].isDropPowerUp && !mob[i].isBoss && mob[i].alive) {
+ if (mob[i].isDropPowerUp && !mob[i].isBoss && mob[i].alive) {
mob[i].isSoonZombie = true
mob[i].death()
}
@@ -9431,6 +9433,20 @@ const tech = {
if (this.count) m.look = m.lookDefault
}
},
+ {
+ name: "iFrames",
+ description: "you are
invulnerablewhen you aren't taking damage",
+ maxCount: 1,
+ count: 0,
+ frequency: 0,
+ isJunk: true,
+ allowed() {
+ return true
+ },
+ requires: "",
+ effect() {},
+ remove() {}
+ },
{
name: "disintegrated armament",
description: "spawn a
gunremove your active
gun",
@@ -9645,7 +9661,7 @@ const tech = {
},
{
name: "defragment",
- description: "set the
frequency of finding
JUNKtech to zero
",
+ description: "set the
frequency of finding
JUNKtech to zero
",
maxCount: 1,
count: 0,
frequency: 0,
@@ -9857,7 +9873,7 @@ const tech = {
},
{
name: "expert system",
- description: "spawn a
tech power up
+64% JUNK to
tech pool",
+ description: "spawn a
tech power up
+64% JUNK to
tech pool",
maxCount: 9,
count: 0,
frequency: 0,
@@ -10772,7 +10788,7 @@ const tech = {
},
{
name: "tinker",
- description: "
permanently unlock
JUNKtech in experiment mode
this effect is stored for future visits",
+ description: "
permanently unlock
JUNKtech in experiment mode
this effect is stored for future visits",
maxCount: 1,
count: 0,
frequency: 0,
@@ -11306,6 +11322,6 @@ const tech = {
buffedGun: 0,
isGunChoice: null,
railChargeRate: null,
- isSuperHarm: null,
+ superHarm: null,
isZombieMobs: null
}
\ No newline at end of file
diff --git a/style.css b/style.css
index 6475be7..7b7565c 100644
--- a/style.css
+++ b/style.css
@@ -177,6 +177,7 @@ summary {
display: grid;
grid-template-columns: repeat(3, 384px);
align-items: stretch;
+ /* align-items: start; */
/* align-content: start; */
/* grid-auto-rows: minmax(auto, 140px); */
visibility: hidden;
@@ -221,6 +222,7 @@ summary {
/* grid-template-columns: repeat(auto-fit, minmax(310px, 1fr)); */
grid-auto-rows: minmax(auto, auto);
align-content: start;
+ align-items: start;
/* align-content: space-between; */
/* gap: 10px; */
z-index: 2;
@@ -264,7 +266,7 @@ summary {
border-radius: 8px;
background-color: #fff;
font-size: 0.65em; */
- padding: 5px;
+ /* padding: 5px; */
line-height: 160%;
/* border-radius: 8px; */
background-color: #fafcfd;
@@ -280,6 +282,8 @@ summary {
display: flex;
justify-content: center;
/* align-content: space-between; */
+ /* align-items: start; */
+ /* align-items: stretch; */
/* padding-top: 10px; */
/* padding: 16px; */
padding: 10px 1px;
@@ -307,7 +311,8 @@ summary {
}
.experiment-grid-module {
- padding: 5px;
+ /* padding: 0.1em; */
+ /* padding: 5px; */
line-height: 160%;
/* border-radius: 8px; */
background-color: #fafcfd;
@@ -322,6 +327,7 @@ summary {
.grid-title {
padding-bottom: 6px;
+ padding-top: 4px;
font-size: 1.4em;
font-weight: 600;
}
@@ -337,19 +343,22 @@ summary {
background-repeat: no-repeat;
display: flex;
justify-content:flex-end;
- flex-direction: column;
- padding:0px;
+ flex-direction: column;
+ /* margin: 5px; */
}
.card-text {
background-color: rgba(255,255,255,1);
/* border-radius: 8px; */
- padding: 11px 13px;
+ /* padding: 11px 13px; */
+ padding: 0.5em 1em;
/* border-top: 1px solid var(--build-bg-color); */
border: 1px solid #444;
margin-top: -1px;
margin-right: -1px;
font-size: 0.92em;
+ min-height: 88px;
+ /* height:78px; */
}
.cancel-card {
text-align: center;
@@ -360,6 +369,9 @@ summary {
margin-top: -1px;
margin-right: -1px;
padding: 1px;
+
+ line-height: 160%;
+ background-color: #fafcfd;
}
.research-card {
font-size: 1.1em;
@@ -368,36 +380,42 @@ summary {
margin-top: -1px;
margin-right: -1px;
padding: 1px 0px 1px 10px;
+ line-height: 160%;
+ background-color: #fafcfd;
}
/* media rules for smaller screens
4->3 at 1550
*/
-@media (width < 0px) {
- .experiment-grid-module {
- line-height: 140%;
- font-size: 0.65em;
+@media (1500px <= width < 1950px) {
+ .experiment-grid-module, .choose-grid-module, .pause-grid-module {
+ line-height: 150%;
+ font-size: 0.72em;
}
- .choose-grid-module{
- line-height: 140%;
- font-size: 0.65em;
- }
- .pause-grid-module {
- line-height: 140%;
- font-size: 0.65em;
+ #experiment-grid, #choose-grid, .pause-grid{
+ grid-template-columns: repeat(auto-fit, 360px);
}
.card-background{
- height:270px;
+ height:315px;
}
- #experiment-grid{
- grid-template-columns: repeat(auto-fit, 360px);
+ .card-text {
+ min-height: 82px;
}
- #choose-grid{
- grid-template-columns: repeat(auto-fit, 360px);
+}
+@media (width < 1500px) {
+ .experiment-grid-module, .choose-grid-module, .pause-grid-module {
+ line-height: 143%;
+ font-size: 0.68em;
}
- .pause-grid{
- grid-template-columns: repeat(auto-fit, 360px);
+ #experiment-grid, #choose-grid, .pause-grid{
+ grid-template-columns: repeat(auto-fit, 340px);
+ }
+ .card-background{
+ height:290px;
+ }
+ .card-text {
+ min-height: 75px;
}
}
@@ -855,15 +873,14 @@ summary {
}
.color-cancel {
background-color: #fafcfd;
- border: 2px #444 solid;
- padding: 4px;
- border-radius: 4px;
+ border: 0.15em #444 solid;
+ padding: 0.2em;
+ border-radius: 0.2em;
font-weight: 800;
- line-height: 160%;
font-size: 1em;
}
-.color-j {
+.color-junk {
letter-spacing: 1px;
/* font-weight: 100; */
font-family: Lucida Console, Courier, monospace;
@@ -907,6 +924,11 @@ summary {
margin-bottom: -0.3em;
}
+.junk {
+ background-color: hsl(254, 44%, 75%);
+ border-radius: 25%;
+}
+
.research-circle {
width: 0.9em;
height: 0.9em;
@@ -983,11 +1005,7 @@ summary {
box-shadow: 0 0 0 3px #025;
} */
-.junk {
- background-color: hsl(254, 44%, 75%);
- border-radius: 25%;
- /* animation: 3s linear infinite alternate pulse; */
-}
+
@keyframes pulse {
0% {
diff --git a/todo.txt b/todo.txt
index a9099a4..514c3ff 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,34 +1,29 @@
******************************************************** NEXT PATCH **************************************************
-adjust card size based on window width for smaller screens
- switched from px to em css units for many elements
-
-some image updates
-single column power up choice for small screens or no image setting
+card images and text scale based on browser width for smaller screens
tech Zectron - super ball can damage you, but they do more damage to mobs
superBall bullets are converted to run off generic b.superBall()
- !!still needs testing for balance
-tech: cordyceps - sporangium infect mobs, making them fight for you
- zombies might attack player if there are no mob targets
- !!still needs testing for balance
-
-sneakers - after taking damage if sneakers are low on life they teleport to a random point on the player history and sneak attack again
+sneakers - after taking damage if sneakers are low on life they teleport to a random point from the player's history and they sneak attack again
sneakBoss - a large sneaker that can hide several times before it dies
bug fixes
*********************************************************** TODO *****************************************************
+tech: cordyceps - sporangium infect mobs, making them fight for you
+ zombies might attack player if there are no mob targets
+ !! needs to explore when there are no targets
+ !! mechanics are confusing
+ !! still needs testing for balance
+ it's targeting player even when there are mobs
tech - all mobs return as zombies?
-set media rules for smaller screens
- should fit 4 tech per row on my laptop
- smaller card size
- set font to 0.8em
- set card width to 384*0.8
- and set background images to fit
+Now that super balls are generic maybe something else should produce them
+ super-bot
+ molecular fabricator - how to aim?
+ shotgun - too similar to super ball gun
set mob health bar colors based on status effects?
make mob damage immunity a mob status effect?
@@ -36,7 +31,6 @@ set mob health bar colors based on status effects?
physics notes: add link to double slit content
https://www.youtube.com/watch?v=v_uBaBuarEM
-
tech: rail gun area damage effect, but for all harpoon mode
laser momentum pushed back on player?
@@ -1162,6 +1156,7 @@ if pause is pressed while selecting power ups, display pause menu on top of sele
***maybe redo***
dynamical systems
harpoon gun
+ Eiichiro Oda --niji
nail-bot
homeostasis
heuristics