diff --git a/.gitignore b/.gitignore index 176124a48..51ddde2a8 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ strings/last-strings.json node_modules/* docs dist -*.map \ No newline at end of file +*.map +silly/* \ No newline at end of file diff --git a/buildEvolve.js b/buildEvolve.js index fb3baebe4..5fca46863 100644 --- a/buildEvolve.js +++ b/buildEvolve.js @@ -1,3 +1,5 @@ +const vue = require("esbuild-plugin-vue3"); + require("esbuild") .build({ logLevel: "info", @@ -5,5 +7,9 @@ require("esbuild") bundle: true, minify: true, outfile: "evolve/main.js", + alias: { vue: "./src/vue-cdn-shim.js" }, + define: { "import.meta.env.BASE_URL": '""' }, + loader: { ".less": "empty" }, + plugins: [vue()], }) .catch(() => process.exit(1)); diff --git a/buildEvolveDebug.js b/buildEvolveDebug.js index 984cd2ba1..56ad95072 100644 --- a/buildEvolveDebug.js +++ b/buildEvolveDebug.js @@ -1,10 +1,16 @@ +const vue = require("esbuild-plugin-vue3"); + require("esbuild") .build({ logLevel: "debug", entryPoints: ["./src/main.js"], bundle: true, minify: false, - sourcemap : true, + sourcemap: true, outfile: "evolve/main.js", + alias: { vue: "./src/vue-cdn-shim.js" }, + define: { "import.meta.env.BASE_URL": '""' }, + loader: { ".less": "empty" }, + plugins: [vue()], }) .catch(() => process.exit(1)); diff --git a/buildWiki.js b/buildWiki.js index 34e9ae8ad..f45d0f2ce 100644 --- a/buildWiki.js +++ b/buildWiki.js @@ -1,3 +1,5 @@ +const vue = require("esbuild-plugin-vue3"); + require("esbuild") .build({ logLevel: "info", @@ -5,5 +7,8 @@ require("esbuild") bundle: true, minify: true, outfile: "wiki/wiki.js", + alias: { vue: "./src/vue-cdn-shim.js" }, + loader: { ".less": "empty" }, + plugins: [vue()], }) .catch(() => process.exit(1)); diff --git a/buildWikiDebug.js b/buildWikiDebug.js index 7ddea9041..0d1ac1fc9 100644 --- a/buildWikiDebug.js +++ b/buildWikiDebug.js @@ -1,10 +1,15 @@ +const vue = require("esbuild-plugin-vue3"); + require("esbuild") .build({ logLevel: "debug", entryPoints: ["./src/wiki/wiki.js"], bundle: true, minify: false, - sourcemap : true, + sourcemap: true, outfile: "wiki/wiki.js", + alias: { vue: "./src/vue-cdn-shim.js" }, + loader: { ".less": "empty" }, + plugins: [vue()], }) .catch(() => process.exit(1)); diff --git a/evolve/evolve-un.css b/evolve/evolve-un.css new file mode 100644 index 000000000..39d582f66 --- /dev/null +++ b/evolve/evolve-un.css @@ -0,0 +1,5649 @@ +/* +Searchable terms: +[TYPE] [Search Term] +Themes ------> Dark theme + Light theme + Night theme + Red Green CB theme + Dark Night theme + Orange Soda Theme + Dracula Theme +Theme colors -> Theme colors +Components --> .has-text-xxx + .popper + .fool + .tabs + .button + .basic-button + .Label + .checkbox + .dropdown + .b-tooltip + Trade + UI Bars + .meter + .main + .fort + .market-item + .modalBox + .industry + Stars + -webkit-scrollbar + .pop-desc +Misc ---------> Main template + Base CSS +*/ +:root { + --theme-html-background: #fff; + --theme-primary-border: #000; + --theme-secondary-border: #000; + --theme-primary-color: #000; + --theme-secondary-color: #000; + --theme-link: #000; + --theme-link-hover: #fff; + --theme-enabled: #fff; + --theme-disabled: #fff; + --theme-has-text-advanced: #000; + --theme-has-text-alert: #000; + --theme-has-text-caution: #000; + --theme-has-text-danger: #000; + --theme-has-text-fade: #000; + --theme-has-text-flair: #000; + --theme-has-text-label: #000; + --theme-has-text-special: #000; + --theme-has-text-info: #000; + --theme-has-text-success: #000; + --theme-has-text-warning: #000; + --theme-popper: #fff; + --theme-popper-has-text-label: #fff; + --theme-popper-has-text-success: #fff; + --theme-popper-has-text-warning: #fff; + --theme-modal-child-popper-background: #fff; + --theme-modal-child-popper-border: #fff; + /* AFP 2021 + // .fool + --theme-fool-has-text-danger: #fff; + --theme-fool-has-text-success: #fff; + --theme-fool-popper-has-text-danger: #fff; + --theme-fool-span-on: #fff; + --theme-fool-span-off: #fff; + */ + --theme-tabs-li-is-active-link-border: #fff; + --theme-tabs-li-is-active-link: #fff; + --theme-button-background: #fff; + --theme-button: #fff; + --theme-button-hover-background: #fff; + --theme-button-hover: #fff; + --theme-button-focus-border: #fff; + --theme-basic-button-border-hover-background: #fff; + --theme-basic-button-border-hover: #fff; + --theme-label: #fff; + --theme-checkbox-hover: #fff; + --theme-dropdown-content-background: #fff; + --theme-b-tooltip-accent: #fff; + --theme-b-tooltip-is-primary-background: #fff; + --theme-b-tooltip-is-primary-border: #fff; + --theme-b-tooltip-is-primary: #fff; + --theme-bars-background: #fff; + --theme-meter-low: #fff; + --theme-meter-neutral: #fff; + --theme-meter-high: #fff; + --theme-div-special-border: #fff; + --theme-div-special-gear-fill: #fff; + --theme-div-special-hover-border: #fff; + --theme-div-special-hover-gear-fill: #fff; + --theme-span-on-border: #fff; + --theme-span-on: #fff; + --theme-span-on-warn: #fff; + --theme-span-off-border: #fff; + --theme-span-off: #fff; + --theme-span-on-off-hover-border: #fff; + --theme-hl-button-border: #fff; + --theme-link-button-background: #fff; + --theme-special-on-off-border: #fff; + --theme-oldTech: #fff; + --theme-cnam-aTitle: #fff; + --theme-fort-patrol-check-background: #fff; + --theme-market-item-background: #fff; + --theme-market-item-order-hover-background: #fff; + --theme-market-item-order-hover-border: #fff; + --theme-resource-overlay-color: #fff; + --theme-resource-overlay-color-alt: #fff; + --theme-modalBox-background: #fff; + --theme-star-2-fill: #fff; + --theme-star-3-fill: #fff; + --theme-star-4-fill: #fff; + --theme-star-5-fill: #fff; + --theme-webkit-scrollbar-background: #fff; + --theme-webkit-scrollbar-thumb-background: #fff; +} +#city-gift .hgift { + background-color: initial; + background-image: repeating-linear-gradient(90deg, firebrick, firebrick 10px, beige 0, beige 12px, forestgreen 0, forestgreen 18px, gold 0, gold 20px, crimson 0, crimson 30px), repeating-linear-gradient(firebrick, firebrick 10px, beige 0, beige 12px, forestgreen 0, forestgreen 18px, gold 0, gold 20px, crimson 0, crimson 30px); + background-blend-mode: multiply; +} +#city-gift .hgift > span { + color: #ebdbb2; + text-shadow: 2px 2px #000; +} +html { + overflow-y: hidden; + box-sizing: border-box; + font-size: 16px; +} +html.theme { + /* AFP 2021 + // .fool + @fool-has-text-danger: var(--theme-fool-has-text-danger); + @fool-has-text-success: var(--theme-fool-has-text-success); + @fool-popper-has-text-danger: var(--theme-fool-popper-has-text-danger); + @fool-span-on: var(--theme-fool-span-on); + @fool-span-off: var(--theme-fool-span-off); + */ + background-color: var(--theme-html-background); + /* AFP 2020 + // .fool + .fool { + .has-text-advanced { + color: @has-text-caution; + } + + .has-text-caution { + color: @has-text-advanced; + } + + .has-text-danger { + color: @fool-has-text-danger; + } + + .has-text-success { + color: @fool-has-text-success; + } + + .popper { + .has-text-success { + color: @fool-has-text-success; + } + + .has-text-danger { + color: @fool-popper-has-text-danger; + } + } + + .main { + .content { + .action { + span.on { + color: @fool-span-on; + } + + span.off { + color: @fool-span-off; + } + } + } + } + } + */ +} +html.theme body { + color: var(--theme-primary-color); +} +html.theme h2, +html.theme h3 { + color: var(--theme-primary-color); +} +html.theme a { + color: var(--theme-link); +} +html.theme .button.has-text-advanced, +html.theme .has-text-advanced { + color: var(--theme-has-text-advanced); +} +html.theme .button.has-text-alert, +html.theme .has-text-alert { + color: var(--theme-has-text-alert); +} +html.theme .button.has-text-caution, +html.theme .has-text-caution { + color: var(--theme-has-text-caution); +} +html.theme .button.has-text-danger, +html.theme .has-text-danger { + color: var(--theme-has-text-danger); +} +html.theme .has-text-fade { + color: var(--theme-has-text-fade); +} +html.theme .has-text-flair { + color: var(--theme-has-text-flair); +} +html.theme .button.has-text-info, +html.theme .has-text-info { + color: var(--theme-has-text-info); +} +html.theme .has-text-label { + color: var(--theme-has-text-label); +} +html.theme .button.has-text-special, +html.theme .has-text-special { + color: var(--theme-has-text-special); +} +html.theme .button.has-text-success, +html.theme .has-text-success { + color: var(--theme-has-text-success); +} +html.theme .button.has-text-warning, +html.theme .has-text-warning { + color: var(--theme-has-text-warning); +} +html.theme .has-text-danger-pulse { + color: var(--theme-has-text-warning); + -webkit-animation: color-change 5s infinite; + -moz-animation: color-change 5s infinite; + -o-animation: color-change 5s infinite; + -ms-animation: color-change 5s infinite; + animation: color-change 5s infinite; +} +@keyframes color-change { + 0% { + color: var(--theme-has-text-warning); + } + 50% { + color: var(--theme-has-text-danger); + } + 100% { + color: var(--theme-has-text-warning); + } +} +html.theme .challenge .simButton { + border-color: var(--theme-has-text-success); +} +html.theme .challenge .configList { + display: flex; + flex-flow: wrap; + justify-content: space-around; +} +html.theme .challenge .configList > div { + margin: 0 0.25rem; + width: 10rem; +} +html.theme .challenge .configList > div > input { + height: 1.25rem; + text-align: center; + padding: 0; +} +html.theme .popper .has-text-label { + color: var(--theme-popper-has-text-label); +} +html.theme .popper .has-text-success { + color: var(--theme-popper-has-text-success); +} +html.theme .popper .has-text-warning { + color: var(--theme-popper-has-text-warning); +} +html.theme .popper .divide-line { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .main > div.popper, +html.theme body .modal > div.popper { + background-color: var(--theme-modal-child-popper-background); + border: 0.0625rem solid var(--theme-modal-child-popper-border); + color: var(--theme-popper); +} +html.theme .main > div.popper > div, +html.theme body .modal > div.popper > div { + border-top: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme .main > div.popper > div:first-child, +html.theme body .modal > div.popper > div:first-child { + border-top: none; +} +html.theme .main > div.popper .has-text-dark, +html.theme body .modal > div.popper .has-text-dark { + color: var(--theme-popper); +} +html.theme .main > div.popper .split, +html.theme body .modal > div.popper .split { + display: flex; +} +html.theme .main > div.popper .split > div, +html.theme body .modal > div.popper .split > div { + flex-wrap: nowrap; +} +html.theme .main > div.popper .split > div:nth-of-type(2), +html.theme body .modal > div.popper .split > div:nth-of-type(2) { + border-left: solid 0.0625rem var(--theme-modal-child-popper-border); + margin-left: 0.375rem; + padding-left: 0.375rem; +} +html.theme .shipPopper .divider { + border-bottom: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme .sliderbar > span { + position: relative; + display: inline-block; + width: 5%; + bottom: 1.125rem; + margin: 0 0.375rem; +} +html.theme .sliderbar .b-slider { + display: inline-block; + width: 80%; +} +html.theme .sliderbar .b-slider .b-slider-track { + height: 1rem; +} +html.theme .sliderbar .is-primary .b-slider-fill { + background: var(--theme-has-text-success); +} +html.theme .sliderbar.thin > span { + bottom: 0.625rem; +} +html.theme .sliderbar.thin .b-slider { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} +html.theme .tabs a, +html.theme .msgQueueFilters span { + color: var(--theme-primary-color); +} +html.theme .tabs li.is-active a, +html.theme .msgQueueFilters span.is-active { + border-bottom-color: var(--theme-tabs-li-is-active-link-border); + color: var(--theme-tabs-li-is-active-link); +} +html.theme .tabs a:hover, +html.theme .msgQueueFilters span:hover { + border-bottom-color: var(--theme-link-hover); + color: var(--theme-link-hover); +} +html.theme .tabs > ul { + border-bottom: solid 0.0625rem; +} +html.theme .button { + background-color: var(--theme-button-background); + color: var(--theme-button); +} +html.theme .button.is-light { + background-color: var(--theme-primary-color); +} +html.theme .button.is-hovered, +html.theme .button:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme .button.is-focused, +html.theme .button:focus { + border-color: var(--theme-button-focus-border); +} +html.theme .basic-button { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme .basic-button:hover { + border: var(--theme-basic-button-border-hover) solid 0.0625rem; + background-color: var(--theme-basic-button-border-hover-background); +} +html.theme .text-button:hover { + cursor: pointer; + color: var(--theme-link-hover); + text-decoration: underline; +} +html.theme .label { + color: var(--theme-label); +} +html.theme .checkbox:hover, +html.theme .radio:hover { + color: var(--theme-checkbox-hover); +} +html.theme .dropdown-content { + background-color: var(--theme-dropdown-content-background); +} +html.theme .b-tooltip.is-right:before { + border-right: 5px solid var(--theme-b-tooltip-accent); +} +html.theme .b-tooltip.is-left:before { + border-left: 5px solid var(--theme-b-tooltip-accent); +} +html.theme .b-tooltip.is-bottom:before { + border-bottom: 5px solid var(--theme-b-tooltip-accent); +} +html.theme .b-tooltip.is-primary .tooltip-content { + background: var(--theme-b-tooltip-is-primary-background); + border: 0.0625rem solid var(--theme-b-tooltip-is-primary-border); + color: var(--theme-b-tooltip-is-primary); +} +html.theme .add, +html.theme .sub { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme .add:hover, +html.theme .sub:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme .current { + border-top: var(--theme-primary-border) solid 0.0625rem; + border-bottom: var(--theme-primary-border) solid 0.0625rem; +} +html.theme .current.infoOnly { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme .topBar, +html.theme .promoBar, +html.theme #mobileNav { + background-color: var(--theme-bars-background); +} +html.theme .play { + display: inline-block; + position: relative; + cursor: pointer; + bottom: 0.125rem; + width: 0; + height: 0; + border-top: 0.25rem solid transparent; + border-left: 0.375rem solid var(--theme-has-text-success); + border-bottom: 0.25rem solid transparent; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme .pause { + display: inline-block; + position: relative; + cursor: pointer; + box-sizing: content-box; + bottom: 0.0625rem; + width: 0.125rem; + height: 0.625rem; + border-right: 0.125rem solid var(--theme-has-text-danger); + border-left: 0.125rem solid var(--theme-has-text-danger); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme .meter.low { + color: var(--theme-meter-low); +} +html.theme .meter.neutral { + color: var(--theme-meter-neutral); +} +html.theme .meter.high { + color: var(--theme-meter-high); +} +html.theme .buildList .hl-ca { + color: var(--theme-enabled); +} +html.theme .buildList .hl-cna { + color: var(--theme-disabled); +} +html.theme .msgQueue span.special .gear, +html.theme .graphContainer span.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme .msgQueue span.special:hover .gear, +html.theme .graphContainer span.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme .main .content .action a.button.hl-ca .aTitle, +html.theme .modal .action a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme .main .content .action a.button.hl-cna .aTitle, +html.theme .modal .action a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme .main .content .action a.button span.count, +html.theme .modal .action a.button span.count { + background: var(--theme-html-background); +} +html.theme .main .content .action div.special, +html.theme .modal .action div.special { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-div-special-border); +} +html.theme .main .content .action div.special .gear, +html.theme .modal .action div.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme .main .content .action div.special:hover, +html.theme .modal .action div.special:hover { + border: 0.0625rem solid var(--theme-div-special-hover-border); +} +html.theme .main .content .action div.special:hover .gear, +html.theme .modal .action div.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme .main .content .action span.on, +html.theme .modal .action span.on { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-on-border); + color: var(--theme-span-on); +} +html.theme .main .content .action span.on.warn, +html.theme .main .content .action span.on.altwarn, +html.theme .modal .action span.on.warn, +html.theme .modal .action span.on.altwarn { + color: var(--theme-span-on-warn); +} +html.theme .main .content .action span.off, +html.theme .modal .action span.off { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-off-border); + color: var(--theme-span-off); +} +html.theme .main .content .action span.on:hover, +html.theme .main .content .action span.off:hover, +html.theme .modal .action span.on:hover, +html.theme .modal .action span.off:hover { + border: 0.0625rem solid var(--theme-span-on-off-hover-border); +} +html.theme .main .content .action.hl .button, +html.theme .modal .action.hl .button { + border: solid 1px var(--theme-hl-button-border); +} +html.theme .main .content .action.cna a.button, +html.theme .modal .action.cna a.button { + background: var(--theme-link-button-background); +} +html.theme .main .content .action.cna a.button.hl-ca .aTitle, +html.theme .modal .action.cna a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme .main .content .action.cna a.button.hl-cna .aTitle, +html.theme .modal .action.cna a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme .main .content .action.cna .special, +html.theme .main .content .action.cna .on, +html.theme .main .content .action.cna .off, +html.theme .modal .action.cna .special, +html.theme .modal .action.cna .on, +html.theme .modal .action.cna .off { + border-color: var(--theme-special-on-off-border); +} +html.theme .main .content .action.cna .oldTech span.aTitle, +html.theme .modal .action.cna .oldTech span.aTitle { + color: var(--theme-oldTech); +} +html.theme .main .content .action.cnam span.aTitle, +html.theme .modal .action.cnam span.aTitle { + color: var(--theme-cnam-aTitle); +} +html.theme .main .content .enemyFortress { + background-color: var(--theme-button-background); +} +html.theme .main .content .divider h2 { + background: var(--theme-html-background); +} +html.theme .main .content .green, +html.theme .main .content .synth { + box-shadow: 0 0 6px var(--theme-has-text-success); +} +html.theme .main .content .green > span, +html.theme .main .content .synth > span { + text-shadow: 1px 1px var(--theme-has-text-success); +} +html.theme .main .content .red { + box-shadow: 0 0 6px var(--theme-has-text-danger); +} +html.theme .main .content .red > span { + text-shadow: 1px 1px var(--theme-has-text-danger); +} +html.theme .main .content .yellow { + box-shadow: 0 0 6px var(--theme-has-text-warning); +} +html.theme .main .content .yellow > span { + text-shadow: 1px 1px var(--theme-has-text-warning); +} +html.theme .main .content .orange { + box-shadow: 0 0 6px var(--theme-has-text-caution); +} +html.theme .main .content .orange > span { + text-shadow: 1px 1px var(--theme-has-text-caution); +} +html.theme .main .content .purple { + box-shadow: 0 0 6px var(--theme-has-text-special); +} +html.theme .main .content .purple > span { + text-shadow: 1px 1px var(--theme-has-text-special); +} +html.theme .main .content .blue, +html.theme .main .content .precog { + box-shadow: 0 0 6px var(--theme-has-text-info); +} +html.theme .main .content .blue > span, +html.theme .main .content .precog > span { + text-shadow: 1px 1px var(--theme-has-text-info); +} +html.theme .main .content .cna .precog > span { + text-shadow: none; +} +html.theme .main .government .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme .main .garrison .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme .main .market-header { + border-bottom: var(--theme-secondary-border) solid 1px; +} +html.theme .main .galaxyTrade { + border-top: var(--theme-secondary-border) solid 1px; +} +html.theme .powerGrid { + display: flex; + flex-wrap: wrap; + margin-left: 1rem; +} +html.theme .powerGrid .circuit { + min-width: 18.5rem; + cursor: pointer; +} +html.theme .powerGrid .circuit.inactive { + display: none; +} +html.theme .powerGrid .circuit > span { + display: inline-block; +} +html.theme .powerGrid .circuit > span:first-child { + width: 1.5rem; +} +html.theme .powerGrid .circuit .struct { + width: 12rem; +} +html.theme .powerGrid .circuit .off, +html.theme .powerGrid .circuit .on { + min-width: 2rem; + text-align: center; +} +html.theme .powerGrid .circuit .off { + color: var(--theme-has-text-danger); +} +html.theme .powerGrid .circuit .on { + color: var(--theme-has-text-success); +} +html.theme .gridHeader { + border-top: var(--theme-secondary-border) solid 0.0625rem; + margin: 0.25rem 0 0.25rem 1rem; + padding-top: 0.25rem; +} +html.theme .powerGridHead { + display: flex; + justify-content: space-between; +} +html.theme .powerGridHeader { + margin-left: 1rem; + margin-bottom: 0.5rem; +} +html.theme .resetPowerGrid { + margin-left: 1rem; + margin-top: 0.75rem; +} +html.theme .resetPowerGrid .button { + height: 1.5rem; +} +html.theme .fort .patrol .check { + background-color: var(--theme-fort-patrol-check-background); +} +html.theme .market-item .order { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme .market-item .order:hover { + border: var(--theme-market-item-order-hover-border) solid 0.0625rem; + background-color: var(--theme-market-item-order-hover-background); +} +html.theme .market-item.prime, +html.theme .resource.prime { + background-color: transparent; +} +html.theme .market-item.alt, +html.theme .resource.alt { + background-color: var(--theme-market-item-background); +} +html.theme .market-item.showBar.prime, +html.theme .resource.showBar.prime { + background: linear-gradient(to right, transparent 0%, transparent var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme .market-item.showBar.alt, +html.theme .resource.showBar.alt { + background: linear-gradient(to right, var(--theme-market-item-background) 0%, var(--theme-market-item-background) var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme .resource .bar { + cursor: pointer; +} +html.theme .inactive-row { + background-color: var(--theme-market-item-background); +} +html.theme .modal .actionSpace { + background-color: var(--theme-html-background); +} +html.theme .modal-card-head, +html.theme .modal-card-body, +html.theme .modal-card-foot { + background-color: var(--theme-modalBox-background); +} +html.theme .modal-card-head p { + color: var(--theme-has-text-warning); +} +html.theme .modalBox, +html.theme .industry { + background: var(--theme-modalBox-background); +} +html.theme .modalBox p, +html.theme .industry p { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .modalBox .market-item, +html.theme .industry .market-item { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .modalBox .divide, +html.theme .industry .divide { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .modalBox .smelting, +html.theme .industry .smelting { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .industry { + background: none; +} +html.theme .industry .header { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .industry .avail span { + margin: 0 2.5rem 0 2.125rem; +} +html.theme .govTask { + margin-top: 0.25rem; +} +html.theme .govTask .button { + height: 1.5rem; + margin-left: 0.5rem; +} +html.theme .fileImport { + background-color: var(--theme-html-background); +} +html.theme .star1 { + fill: var(--theme-html-background); + stroke: var(--theme-star-2-fill); +} +html.theme .star1 path { + stroke: var(--theme-star-2-fill); +} +html.theme .star1 path.bolden { + stroke-width: 8px; +} +html.theme .star2 { + fill: var(--theme-star-2-fill); +} +html.theme .star3 { + fill: var(--theme-star-3-fill); +} +html.theme .star4 { + fill: var(--theme-star-4-fill); +} +html.theme .star5 { + fill: var(--theme-star-5-fill); +} +html.theme .refresh svg { + fill: var(--theme-has-text-advanced); +} +html.theme .hscroll::-webkit-scrollbar-track, +html.theme .vscroll::-webkit-scrollbar-track, +html.theme .sticky::-webkit-scrollbar-track, +html.theme .resTabs > section::-webkit-scrollbar-track, +html.theme .resTabs > .tabs::-webkit-scrollbar-track, +html.theme .bldQueue::-webkit-scrollbar-track, +html.theme .dropdown-content::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme .vscroll::-webkit-scrollbar, +html.theme .sticky::-webkit-scrollbar, +html.theme .resTabs > section::-webkit-scrollbar, +html.theme .resTabs > .tabs::-webkit-scrollbar, +html.theme .bldQueue::-webkit-scrollbar, +html.theme .dropdown-content::-webkit-scrollbar { + width: 6px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme .hscroll::-webkit-scrollbar { + height: 8px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme .vscroll::-webkit-scrollbar-thumb, +html.theme .hscroll::-webkit-scrollbar-thumb, +html.theme .sticky::-webkit-scrollbar-thumb, +html.theme .resTabs > section::-webkit-scrollbar-thumb, +html.theme .resTabs > .tabs::-webkit-scrollbar-thumb, +html.theme .bldQueue::-webkit-scrollbar-thumb, +html.theme .dropdown-content::-webkit-scrollbar-thumb { + background-color: var(--theme-webkit-scrollbar-thumb-background); +} +@supports (scrollbar-color: auto) { + html.theme .vscroll, + html.theme .hscroll, + html.theme .sticky, + html.theme .resTabs > section, + html.theme .resTabs > .tabs, + html.theme .bldQueue { + scrollbar-color: var(--theme-webkit-scrollbar-thumb-background) var(--theme-webkit-scrollbar-background); + } +} +html.theme .buttonList .is-selected { + border-color: var(--theme-enabled); +} +html.theme.dark .pop-desc .has-text-caution { + color: #a30500; +} +html.theme.light body { + font-weight: 500; +} +html.theme.light .button, +html.theme.light .button:hover { + border: solid 0.0625rem #000; +} +html.theme.light .topBar .calendar .wi-thermometer-exterior { + color: #00d6b2; +} +html.theme.light .topBar .calendar .wi-day-sunny, +html.theme.light .topBar .calendar .wi-day-windy { + color: #fffb00; +} +html.theme.light .topBar .calendar .wi-cloud, +html.theme.light .topBar .calendar .wi-cloudy-gusts { + color: #dfe2d3; +} +html.theme.light .topBar .calendar .wi-rain, +html.theme.light .topBar .calendar .wi-storm-showers { + color: #00b0e6; +} +html.theme.light .topBar .calendar .wi-snow, +html.theme.light .topBar .calendar .wi-snow-wind { + color: #fff; +} +html.theme.light .main .content .action a.button span.count, +html.theme.light .modal .action a.button span.count { + border-bottom: 0.0625rem solid #000; + border-left: 0.0625rem solid #000; +} +html.theme.light .main .content .action.cna:not(.cnam) span.aTitle, +html.theme.light .modal .action.cna:not(.cnam) span.aTitle { + color: #282828; +} +html.theme.light .industry { + background: none; +} +html.theme.light .industry .smelting { + border-top: 0; +} +html.theme.light .industry .header { + border-bottom: #4e4e4e solid 0.0625rem; +} +html.theme.light .progress::-webkit-progress-value, +html.theme.light .progress::-moz-progress-bar { + background-color: #898989; +} +html.theme.redgreen { + /* AFP 2021 + // .fool + @fool-has-text-danger: var(--theme-fool-has-text-danger); + @fool-has-text-success: var(--theme-fool-has-text-success); + @fool-popper-has-text-danger: var(--theme-fool-popper-has-text-danger); + @fool-span-on: var(--theme-fool-span-on); + @fool-span-off: var(--theme-fool-span-off); + */ + background-color: var(--theme-html-background); + /* AFP 2020 + // .fool + .fool { + .has-text-advanced { + color: @has-text-caution; + } + + .has-text-caution { + color: @has-text-advanced; + } + + .has-text-danger { + color: @fool-has-text-danger; + } + + .has-text-success { + color: @fool-has-text-success; + } + + .popper { + .has-text-success { + color: @fool-has-text-success; + } + + .has-text-danger { + color: @fool-popper-has-text-danger; + } + } + + .main { + .content { + .action { + span.on { + color: @fool-span-on; + } + + span.off { + color: @fool-span-off; + } + } + } + } + } + */ +} +html.theme.redgreen body { + color: var(--theme-primary-color); +} +html.theme.redgreen h2, +html.theme.redgreen h3 { + color: var(--theme-primary-color); +} +html.theme.redgreen a { + color: var(--theme-link); +} +html.theme.redgreen .button.has-text-advanced, +html.theme.redgreen .has-text-advanced { + color: var(--theme-has-text-advanced); +} +html.theme.redgreen .button.has-text-alert, +html.theme.redgreen .has-text-alert { + color: var(--theme-has-text-alert); +} +html.theme.redgreen .button.has-text-caution, +html.theme.redgreen .has-text-caution { + color: var(--theme-has-text-caution); +} +html.theme.redgreen .button.has-text-danger, +html.theme.redgreen .has-text-danger { + color: var(--theme-has-text-danger); +} +html.theme.redgreen .has-text-fade { + color: var(--theme-has-text-fade); +} +html.theme.redgreen .has-text-flair { + color: var(--theme-has-text-flair); +} +html.theme.redgreen .button.has-text-info, +html.theme.redgreen .has-text-info { + color: var(--theme-has-text-info); +} +html.theme.redgreen .has-text-label { + color: var(--theme-has-text-label); +} +html.theme.redgreen .button.has-text-special, +html.theme.redgreen .has-text-special { + color: var(--theme-has-text-special); +} +html.theme.redgreen .button.has-text-success, +html.theme.redgreen .has-text-success { + color: var(--theme-has-text-success); +} +html.theme.redgreen .button.has-text-warning, +html.theme.redgreen .has-text-warning { + color: var(--theme-has-text-warning); +} +html.theme.redgreen .has-text-danger-pulse { + color: var(--theme-has-text-warning); + -webkit-animation: color-change 5s infinite; + -moz-animation: color-change 5s infinite; + -o-animation: color-change 5s infinite; + -ms-animation: color-change 5s infinite; + animation: color-change 5s infinite; +} +@keyframes color-change { + 0% { + color: var(--theme-has-text-warning); + } + 50% { + color: var(--theme-has-text-danger); + } + 100% { + color: var(--theme-has-text-warning); + } +} +html.theme.redgreen .challenge .simButton { + border-color: var(--theme-has-text-success); +} +html.theme.redgreen .challenge .configList { + display: flex; + flex-flow: wrap; + justify-content: space-around; +} +html.theme.redgreen .challenge .configList > div { + margin: 0 0.25rem; + width: 10rem; +} +html.theme.redgreen .challenge .configList > div > input { + height: 1.25rem; + text-align: center; + padding: 0; +} +html.theme.redgreen .popper .has-text-label { + color: var(--theme-popper-has-text-label); +} +html.theme.redgreen .popper .has-text-success { + color: var(--theme-popper-has-text-success); +} +html.theme.redgreen .popper .has-text-warning { + color: var(--theme-popper-has-text-warning); +} +html.theme.redgreen .popper .divide-line { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .main > div.popper, +html.theme.redgreen body .modal > div.popper { + background-color: var(--theme-modal-child-popper-background); + border: 0.0625rem solid var(--theme-modal-child-popper-border); + color: var(--theme-popper); +} +html.theme.redgreen .main > div.popper > div, +html.theme.redgreen body .modal > div.popper > div { + border-top: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme.redgreen .main > div.popper > div:first-child, +html.theme.redgreen body .modal > div.popper > div:first-child { + border-top: none; +} +html.theme.redgreen .main > div.popper .has-text-dark, +html.theme.redgreen body .modal > div.popper .has-text-dark { + color: var(--theme-popper); +} +html.theme.redgreen .main > div.popper .split, +html.theme.redgreen body .modal > div.popper .split { + display: flex; +} +html.theme.redgreen .main > div.popper .split > div, +html.theme.redgreen body .modal > div.popper .split > div { + flex-wrap: nowrap; +} +html.theme.redgreen .main > div.popper .split > div:nth-of-type(2), +html.theme.redgreen body .modal > div.popper .split > div:nth-of-type(2) { + border-left: solid 0.0625rem var(--theme-modal-child-popper-border); + margin-left: 0.375rem; + padding-left: 0.375rem; +} +html.theme.redgreen .shipPopper .divider { + border-bottom: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme.redgreen .sliderbar > span { + position: relative; + display: inline-block; + width: 5%; + bottom: 1.125rem; + margin: 0 0.375rem; +} +html.theme.redgreen .sliderbar .b-slider { + display: inline-block; + width: 80%; +} +html.theme.redgreen .sliderbar .b-slider .b-slider-track { + height: 1rem; +} +html.theme.redgreen .sliderbar .is-primary .b-slider-fill { + background: var(--theme-has-text-success); +} +html.theme.redgreen .sliderbar.thin > span { + bottom: 0.625rem; +} +html.theme.redgreen .sliderbar.thin .b-slider { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} +html.theme.redgreen .tabs a, +html.theme.redgreen .msgQueueFilters span { + color: var(--theme-primary-color); +} +html.theme.redgreen .tabs li.is-active a, +html.theme.redgreen .msgQueueFilters span.is-active { + border-bottom-color: var(--theme-tabs-li-is-active-link-border); + color: var(--theme-tabs-li-is-active-link); +} +html.theme.redgreen .tabs a:hover, +html.theme.redgreen .msgQueueFilters span:hover { + border-bottom-color: var(--theme-link-hover); + color: var(--theme-link-hover); +} +html.theme.redgreen .tabs > ul { + border-bottom: solid 0.0625rem; +} +html.theme.redgreen .button { + background-color: var(--theme-button-background); + color: var(--theme-button); +} +html.theme.redgreen .button.is-light { + background-color: var(--theme-primary-color); +} +html.theme.redgreen .button.is-hovered, +html.theme.redgreen .button:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme.redgreen .button.is-focused, +html.theme.redgreen .button:focus { + border-color: var(--theme-button-focus-border); +} +html.theme.redgreen .basic-button { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.redgreen .basic-button:hover { + border: var(--theme-basic-button-border-hover) solid 0.0625rem; + background-color: var(--theme-basic-button-border-hover-background); +} +html.theme.redgreen .text-button:hover { + cursor: pointer; + color: var(--theme-link-hover); + text-decoration: underline; +} +html.theme.redgreen .label { + color: var(--theme-label); +} +html.theme.redgreen .checkbox:hover, +html.theme.redgreen .radio:hover { + color: var(--theme-checkbox-hover); +} +html.theme.redgreen .dropdown-content { + background-color: var(--theme-dropdown-content-background); +} +html.theme.redgreen .b-tooltip.is-right:before { + border-right: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.redgreen .b-tooltip.is-left:before { + border-left: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.redgreen .b-tooltip.is-bottom:before { + border-bottom: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.redgreen .b-tooltip.is-primary .tooltip-content { + background: var(--theme-b-tooltip-is-primary-background); + border: 0.0625rem solid var(--theme-b-tooltip-is-primary-border); + color: var(--theme-b-tooltip-is-primary); +} +html.theme.redgreen .add, +html.theme.redgreen .sub { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme.redgreen .add:hover, +html.theme.redgreen .sub:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme.redgreen .current { + border-top: var(--theme-primary-border) solid 0.0625rem; + border-bottom: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.redgreen .current.infoOnly { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.redgreen .topBar, +html.theme.redgreen .promoBar, +html.theme.redgreen #mobileNav { + background-color: var(--theme-bars-background); +} +html.theme.redgreen .play { + display: inline-block; + position: relative; + cursor: pointer; + bottom: 0.125rem; + width: 0; + height: 0; + border-top: 0.25rem solid transparent; + border-left: 0.375rem solid var(--theme-has-text-success); + border-bottom: 0.25rem solid transparent; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme.redgreen .pause { + display: inline-block; + position: relative; + cursor: pointer; + box-sizing: content-box; + bottom: 0.0625rem; + width: 0.125rem; + height: 0.625rem; + border-right: 0.125rem solid var(--theme-has-text-danger); + border-left: 0.125rem solid var(--theme-has-text-danger); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme.redgreen .meter.low { + color: var(--theme-meter-low); +} +html.theme.redgreen .meter.neutral { + color: var(--theme-meter-neutral); +} +html.theme.redgreen .meter.high { + color: var(--theme-meter-high); +} +html.theme.redgreen .buildList .hl-ca { + color: var(--theme-enabled); +} +html.theme.redgreen .buildList .hl-cna { + color: var(--theme-disabled); +} +html.theme.redgreen .msgQueue span.special .gear, +html.theme.redgreen .graphContainer span.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme.redgreen .msgQueue span.special:hover .gear, +html.theme.redgreen .graphContainer span.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme.redgreen .main .content .action a.button.hl-ca .aTitle, +html.theme.redgreen .modal .action a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme.redgreen .main .content .action a.button.hl-cna .aTitle, +html.theme.redgreen .modal .action a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme.redgreen .main .content .action a.button span.count, +html.theme.redgreen .modal .action a.button span.count { + background: var(--theme-html-background); +} +html.theme.redgreen .main .content .action div.special, +html.theme.redgreen .modal .action div.special { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-div-special-border); +} +html.theme.redgreen .main .content .action div.special .gear, +html.theme.redgreen .modal .action div.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme.redgreen .main .content .action div.special:hover, +html.theme.redgreen .modal .action div.special:hover { + border: 0.0625rem solid var(--theme-div-special-hover-border); +} +html.theme.redgreen .main .content .action div.special:hover .gear, +html.theme.redgreen .modal .action div.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme.redgreen .main .content .action span.on, +html.theme.redgreen .modal .action span.on { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-on-border); + color: var(--theme-span-on); +} +html.theme.redgreen .main .content .action span.on.warn, +html.theme.redgreen .main .content .action span.on.altwarn, +html.theme.redgreen .modal .action span.on.warn, +html.theme.redgreen .modal .action span.on.altwarn { + color: var(--theme-span-on-warn); +} +html.theme.redgreen .main .content .action span.off, +html.theme.redgreen .modal .action span.off { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-off-border); + color: var(--theme-span-off); +} +html.theme.redgreen .main .content .action span.on:hover, +html.theme.redgreen .main .content .action span.off:hover, +html.theme.redgreen .modal .action span.on:hover, +html.theme.redgreen .modal .action span.off:hover { + border: 0.0625rem solid var(--theme-span-on-off-hover-border); +} +html.theme.redgreen .main .content .action.hl .button, +html.theme.redgreen .modal .action.hl .button { + border: solid 1px var(--theme-hl-button-border); +} +html.theme.redgreen .main .content .action.cna a.button, +html.theme.redgreen .modal .action.cna a.button { + background: var(--theme-link-button-background); +} +html.theme.redgreen .main .content .action.cna a.button.hl-ca .aTitle, +html.theme.redgreen .modal .action.cna a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme.redgreen .main .content .action.cna a.button.hl-cna .aTitle, +html.theme.redgreen .modal .action.cna a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme.redgreen .main .content .action.cna .special, +html.theme.redgreen .main .content .action.cna .on, +html.theme.redgreen .main .content .action.cna .off, +html.theme.redgreen .modal .action.cna .special, +html.theme.redgreen .modal .action.cna .on, +html.theme.redgreen .modal .action.cna .off { + border-color: var(--theme-special-on-off-border); +} +html.theme.redgreen .main .content .action.cna .oldTech span.aTitle, +html.theme.redgreen .modal .action.cna .oldTech span.aTitle { + color: var(--theme-oldTech); +} +html.theme.redgreen .main .content .action.cnam span.aTitle, +html.theme.redgreen .modal .action.cnam span.aTitle { + color: var(--theme-cnam-aTitle); +} +html.theme.redgreen .main .content .enemyFortress { + background-color: var(--theme-button-background); +} +html.theme.redgreen .main .content .divider h2 { + background: var(--theme-html-background); +} +html.theme.redgreen .main .content .green, +html.theme.redgreen .main .content .synth { + box-shadow: 0 0 6px var(--theme-has-text-success); +} +html.theme.redgreen .main .content .green > span, +html.theme.redgreen .main .content .synth > span { + text-shadow: 1px 1px var(--theme-has-text-success); +} +html.theme.redgreen .main .content .red { + box-shadow: 0 0 6px var(--theme-has-text-danger); +} +html.theme.redgreen .main .content .red > span { + text-shadow: 1px 1px var(--theme-has-text-danger); +} +html.theme.redgreen .main .content .yellow { + box-shadow: 0 0 6px var(--theme-has-text-warning); +} +html.theme.redgreen .main .content .yellow > span { + text-shadow: 1px 1px var(--theme-has-text-warning); +} +html.theme.redgreen .main .content .orange { + box-shadow: 0 0 6px var(--theme-has-text-caution); +} +html.theme.redgreen .main .content .orange > span { + text-shadow: 1px 1px var(--theme-has-text-caution); +} +html.theme.redgreen .main .content .purple { + box-shadow: 0 0 6px var(--theme-has-text-special); +} +html.theme.redgreen .main .content .purple > span { + text-shadow: 1px 1px var(--theme-has-text-special); +} +html.theme.redgreen .main .content .blue, +html.theme.redgreen .main .content .precog { + box-shadow: 0 0 6px var(--theme-has-text-info); +} +html.theme.redgreen .main .content .blue > span, +html.theme.redgreen .main .content .precog > span { + text-shadow: 1px 1px var(--theme-has-text-info); +} +html.theme.redgreen .main .content .cna .precog > span { + text-shadow: none; +} +html.theme.redgreen .main .government .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme.redgreen .main .garrison .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme.redgreen .main .market-header { + border-bottom: var(--theme-secondary-border) solid 1px; +} +html.theme.redgreen .main .galaxyTrade { + border-top: var(--theme-secondary-border) solid 1px; +} +html.theme.redgreen .powerGrid { + display: flex; + flex-wrap: wrap; + margin-left: 1rem; +} +html.theme.redgreen .powerGrid .circuit { + min-width: 18.5rem; + cursor: pointer; +} +html.theme.redgreen .powerGrid .circuit.inactive { + display: none; +} +html.theme.redgreen .powerGrid .circuit > span { + display: inline-block; +} +html.theme.redgreen .powerGrid .circuit > span:first-child { + width: 1.5rem; +} +html.theme.redgreen .powerGrid .circuit .struct { + width: 12rem; +} +html.theme.redgreen .powerGrid .circuit .off, +html.theme.redgreen .powerGrid .circuit .on { + min-width: 2rem; + text-align: center; +} +html.theme.redgreen .powerGrid .circuit .off { + color: var(--theme-has-text-danger); +} +html.theme.redgreen .powerGrid .circuit .on { + color: var(--theme-has-text-success); +} +html.theme.redgreen .gridHeader { + border-top: var(--theme-secondary-border) solid 0.0625rem; + margin: 0.25rem 0 0.25rem 1rem; + padding-top: 0.25rem; +} +html.theme.redgreen .powerGridHead { + display: flex; + justify-content: space-between; +} +html.theme.redgreen .powerGridHeader { + margin-left: 1rem; + margin-bottom: 0.5rem; +} +html.theme.redgreen .resetPowerGrid { + margin-left: 1rem; + margin-top: 0.75rem; +} +html.theme.redgreen .resetPowerGrid .button { + height: 1.5rem; +} +html.theme.redgreen .fort .patrol .check { + background-color: var(--theme-fort-patrol-check-background); +} +html.theme.redgreen .market-item .order { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme.redgreen .market-item .order:hover { + border: var(--theme-market-item-order-hover-border) solid 0.0625rem; + background-color: var(--theme-market-item-order-hover-background); +} +html.theme.redgreen .market-item.prime, +html.theme.redgreen .resource.prime { + background-color: transparent; +} +html.theme.redgreen .market-item.alt, +html.theme.redgreen .resource.alt { + background-color: var(--theme-market-item-background); +} +html.theme.redgreen .market-item.showBar.prime, +html.theme.redgreen .resource.showBar.prime { + background: linear-gradient(to right, transparent 0%, transparent var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme.redgreen .market-item.showBar.alt, +html.theme.redgreen .resource.showBar.alt { + background: linear-gradient(to right, var(--theme-market-item-background) 0%, var(--theme-market-item-background) var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme.redgreen .resource .bar { + cursor: pointer; +} +html.theme.redgreen .inactive-row { + background-color: var(--theme-market-item-background); +} +html.theme.redgreen .modal .actionSpace { + background-color: var(--theme-html-background); +} +html.theme.redgreen .modal-card-head, +html.theme.redgreen .modal-card-body, +html.theme.redgreen .modal-card-foot { + background-color: var(--theme-modalBox-background); +} +html.theme.redgreen .modal-card-head p { + color: var(--theme-has-text-warning); +} +html.theme.redgreen .modalBox, +html.theme.redgreen .industry { + background: var(--theme-modalBox-background); +} +html.theme.redgreen .modalBox p, +html.theme.redgreen .industry p { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .modalBox .market-item, +html.theme.redgreen .industry .market-item { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .modalBox .divide, +html.theme.redgreen .industry .divide { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .modalBox .smelting, +html.theme.redgreen .industry .smelting { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .industry { + background: none; +} +html.theme.redgreen .industry .header { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .industry .avail span { + margin: 0 2.5rem 0 2.125rem; +} +html.theme.redgreen .govTask { + margin-top: 0.25rem; +} +html.theme.redgreen .govTask .button { + height: 1.5rem; + margin-left: 0.5rem; +} +html.theme.redgreen .fileImport { + background-color: var(--theme-html-background); +} +html.theme.redgreen .star1 { + fill: var(--theme-html-background); + stroke: var(--theme-star-2-fill); +} +html.theme.redgreen .star1 path { + stroke: var(--theme-star-2-fill); +} +html.theme.redgreen .star1 path.bolden { + stroke-width: 8px; +} +html.theme.redgreen .star2 { + fill: var(--theme-star-2-fill); +} +html.theme.redgreen .star3 { + fill: var(--theme-star-3-fill); +} +html.theme.redgreen .star4 { + fill: var(--theme-star-4-fill); +} +html.theme.redgreen .star5 { + fill: var(--theme-star-5-fill); +} +html.theme.redgreen .refresh svg { + fill: var(--theme-has-text-advanced); +} +html.theme.redgreen .hscroll::-webkit-scrollbar-track, +html.theme.redgreen .vscroll::-webkit-scrollbar-track, +html.theme.redgreen .sticky::-webkit-scrollbar-track, +html.theme.redgreen .resTabs > section::-webkit-scrollbar-track, +html.theme.redgreen .resTabs > .tabs::-webkit-scrollbar-track, +html.theme.redgreen .bldQueue::-webkit-scrollbar-track, +html.theme.redgreen .dropdown-content::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.redgreen .vscroll::-webkit-scrollbar, +html.theme.redgreen .sticky::-webkit-scrollbar, +html.theme.redgreen .resTabs > section::-webkit-scrollbar, +html.theme.redgreen .resTabs > .tabs::-webkit-scrollbar, +html.theme.redgreen .bldQueue::-webkit-scrollbar, +html.theme.redgreen .dropdown-content::-webkit-scrollbar { + width: 6px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.redgreen .hscroll::-webkit-scrollbar { + height: 8px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.redgreen .vscroll::-webkit-scrollbar-thumb, +html.theme.redgreen .hscroll::-webkit-scrollbar-thumb, +html.theme.redgreen .sticky::-webkit-scrollbar-thumb, +html.theme.redgreen .resTabs > section::-webkit-scrollbar-thumb, +html.theme.redgreen .resTabs > .tabs::-webkit-scrollbar-thumb, +html.theme.redgreen .bldQueue::-webkit-scrollbar-thumb, +html.theme.redgreen .dropdown-content::-webkit-scrollbar-thumb { + background-color: var(--theme-webkit-scrollbar-thumb-background); +} +@supports (scrollbar-color: auto) { + html.theme.redgreen .vscroll, + html.theme.redgreen .hscroll, + html.theme.redgreen .sticky, + html.theme.redgreen .resTabs > section, + html.theme.redgreen .resTabs > .tabs, + html.theme.redgreen .bldQueue { + scrollbar-color: var(--theme-webkit-scrollbar-thumb-background) var(--theme-webkit-scrollbar-background); + } +} +html.theme.redgreen .buttonList .is-selected { + border-color: var(--theme-enabled); +} +html.theme.redgreen .main > div.popper .has-text-danger, +html.theme.redgreen body .modal > div.popper .has-text-danger { + color: #aa00aa; +} +html.theme.redgreen #powerStatus .has-text-warning { + color: #9900cc; +} +html.theme.redgreen .trade .has-text-danger { + color: #167df0; + color: #aa00ff; +} +html.theme.redgreen .trade .has-text-warning { + color: #fff; +} +html.theme.redgreen .topBar .calendar .wi-thermometer-exterior { + color: #00e6d2; +} +html.theme.redgreen .topBar .calendar .wi-thermometer { + color: #fffb00; +} +html.theme.redgreen .mad { + background: repeating-linear-gradient(45deg, #8a8b49, #8a8b49 10px, #000000 10px, #000000 20px); +} +html.theme.redgreen .armed .mad { + background: repeating-linear-gradient(45deg, #fbfd84, #fbfd84 10px, #000000 10px, #000000 20px); +} +html.theme.darkNight input, +html.theme.darkNight select, +html.theme.darkNight textarea { + background: var(--theme-primary-color); +} +html.theme.gruvboxLight input, +html.theme.gruvboxLight select, +html.theme.gruvboxLight textarea, +html.theme.gruvboxLight .notification { + background: var(--theme-secondary-color); +} +html.theme.gruvboxDark input, +html.theme.gruvboxDark select, +html.theme.gruvboxDark textarea, +html.theme.gruvboxDark .notification { + background: var(--theme-primary-color); +} +html.theme.gruvboxDark .add, +html.theme.gruvboxDark .sub { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDark .current { + border-top: var(--theme-secondary-border) solid 0.0625rem; + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDark .current.infoOnly { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG { + /* AFP 2021 + // .fool + @fool-has-text-danger: var(--theme-fool-has-text-danger); + @fool-has-text-success: var(--theme-fool-has-text-success); + @fool-popper-has-text-danger: var(--theme-fool-popper-has-text-danger); + @fool-span-on: var(--theme-fool-span-on); + @fool-span-off: var(--theme-fool-span-off); + */ + background-color: var(--theme-html-background); + /* AFP 2020 + // .fool + .fool { + .has-text-advanced { + color: @has-text-caution; + } + + .has-text-caution { + color: @has-text-advanced; + } + + .has-text-danger { + color: @fool-has-text-danger; + } + + .has-text-success { + color: @fool-has-text-success; + } + + .popper { + .has-text-success { + color: @fool-has-text-success; + } + + .has-text-danger { + color: @fool-popper-has-text-danger; + } + } + + .main { + .content { + .action { + span.on { + color: @fool-span-on; + } + + span.off { + color: @fool-span-off; + } + } + } + } + } + */ +} +html.theme.gruvboxDarkRG body { + color: var(--theme-primary-color); +} +html.theme.gruvboxDarkRG h2, +html.theme.gruvboxDarkRG h3 { + color: var(--theme-primary-color); +} +html.theme.gruvboxDarkRG a { + color: var(--theme-link); +} +html.theme.gruvboxDarkRG .button.has-text-advanced, +html.theme.gruvboxDarkRG .has-text-advanced { + color: var(--theme-has-text-advanced); +} +html.theme.gruvboxDarkRG .button.has-text-alert, +html.theme.gruvboxDarkRG .has-text-alert { + color: var(--theme-has-text-alert); +} +html.theme.gruvboxDarkRG .button.has-text-caution, +html.theme.gruvboxDarkRG .has-text-caution { + color: var(--theme-has-text-caution); +} +html.theme.gruvboxDarkRG .button.has-text-danger, +html.theme.gruvboxDarkRG .has-text-danger { + color: var(--theme-has-text-danger); +} +html.theme.gruvboxDarkRG .has-text-fade { + color: var(--theme-has-text-fade); +} +html.theme.gruvboxDarkRG .has-text-flair { + color: var(--theme-has-text-flair); +} +html.theme.gruvboxDarkRG .button.has-text-info, +html.theme.gruvboxDarkRG .has-text-info { + color: var(--theme-has-text-info); +} +html.theme.gruvboxDarkRG .has-text-label { + color: var(--theme-has-text-label); +} +html.theme.gruvboxDarkRG .button.has-text-special, +html.theme.gruvboxDarkRG .has-text-special { + color: var(--theme-has-text-special); +} +html.theme.gruvboxDarkRG .button.has-text-success, +html.theme.gruvboxDarkRG .has-text-success { + color: var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .button.has-text-warning, +html.theme.gruvboxDarkRG .has-text-warning { + color: var(--theme-has-text-warning); +} +html.theme.gruvboxDarkRG .has-text-danger-pulse { + color: var(--theme-has-text-warning); + -webkit-animation: color-change 5s infinite; + -moz-animation: color-change 5s infinite; + -o-animation: color-change 5s infinite; + -ms-animation: color-change 5s infinite; + animation: color-change 5s infinite; +} +@keyframes color-change { + 0% { + color: var(--theme-has-text-warning); + } + 50% { + color: var(--theme-has-text-danger); + } + 100% { + color: var(--theme-has-text-warning); + } +} +html.theme.gruvboxDarkRG .challenge .simButton { + border-color: var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .challenge .configList { + display: flex; + flex-flow: wrap; + justify-content: space-around; +} +html.theme.gruvboxDarkRG .challenge .configList > div { + margin: 0 0.25rem; + width: 10rem; +} +html.theme.gruvboxDarkRG .challenge .configList > div > input { + height: 1.25rem; + text-align: center; + padding: 0; +} +html.theme.gruvboxDarkRG .popper .has-text-label { + color: var(--theme-popper-has-text-label); +} +html.theme.gruvboxDarkRG .popper .has-text-success { + color: var(--theme-popper-has-text-success); +} +html.theme.gruvboxDarkRG .popper .has-text-warning { + color: var(--theme-popper-has-text-warning); +} +html.theme.gruvboxDarkRG .popper .divide-line { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .main > div.popper, +html.theme.gruvboxDarkRG body .modal > div.popper { + background-color: var(--theme-modal-child-popper-background); + border: 0.0625rem solid var(--theme-modal-child-popper-border); + color: var(--theme-popper); +} +html.theme.gruvboxDarkRG .main > div.popper > div, +html.theme.gruvboxDarkRG body .modal > div.popper > div { + border-top: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme.gruvboxDarkRG .main > div.popper > div:first-child, +html.theme.gruvboxDarkRG body .modal > div.popper > div:first-child { + border-top: none; +} +html.theme.gruvboxDarkRG .main > div.popper .has-text-dark, +html.theme.gruvboxDarkRG body .modal > div.popper .has-text-dark { + color: var(--theme-popper); +} +html.theme.gruvboxDarkRG .main > div.popper .split, +html.theme.gruvboxDarkRG body .modal > div.popper .split { + display: flex; +} +html.theme.gruvboxDarkRG .main > div.popper .split > div, +html.theme.gruvboxDarkRG body .modal > div.popper .split > div { + flex-wrap: nowrap; +} +html.theme.gruvboxDarkRG .main > div.popper .split > div:nth-of-type(2), +html.theme.gruvboxDarkRG body .modal > div.popper .split > div:nth-of-type(2) { + border-left: solid 0.0625rem var(--theme-modal-child-popper-border); + margin-left: 0.375rem; + padding-left: 0.375rem; +} +html.theme.gruvboxDarkRG .shipPopper .divider { + border-bottom: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme.gruvboxDarkRG .sliderbar > span { + position: relative; + display: inline-block; + width: 5%; + bottom: 1.125rem; + margin: 0 0.375rem; +} +html.theme.gruvboxDarkRG .sliderbar .b-slider { + display: inline-block; + width: 80%; +} +html.theme.gruvboxDarkRG .sliderbar .b-slider .b-slider-track { + height: 1rem; +} +html.theme.gruvboxDarkRG .sliderbar .is-primary .b-slider-fill { + background: var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .sliderbar.thin > span { + bottom: 0.625rem; +} +html.theme.gruvboxDarkRG .sliderbar.thin .b-slider { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} +html.theme.gruvboxDarkRG .tabs a, +html.theme.gruvboxDarkRG .msgQueueFilters span { + color: var(--theme-primary-color); +} +html.theme.gruvboxDarkRG .tabs li.is-active a, +html.theme.gruvboxDarkRG .msgQueueFilters span.is-active { + border-bottom-color: var(--theme-tabs-li-is-active-link-border); + color: var(--theme-tabs-li-is-active-link); +} +html.theme.gruvboxDarkRG .tabs a:hover, +html.theme.gruvboxDarkRG .msgQueueFilters span:hover { + border-bottom-color: var(--theme-link-hover); + color: var(--theme-link-hover); +} +html.theme.gruvboxDarkRG .tabs > ul { + border-bottom: solid 0.0625rem; +} +html.theme.gruvboxDarkRG .button { + background-color: var(--theme-button-background); + color: var(--theme-button); +} +html.theme.gruvboxDarkRG .button.is-light { + background-color: var(--theme-primary-color); +} +html.theme.gruvboxDarkRG .button.is-hovered, +html.theme.gruvboxDarkRG .button:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme.gruvboxDarkRG .button.is-focused, +html.theme.gruvboxDarkRG .button:focus { + border-color: var(--theme-button-focus-border); +} +html.theme.gruvboxDarkRG .basic-button { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .basic-button:hover { + border: var(--theme-basic-button-border-hover) solid 0.0625rem; + background-color: var(--theme-basic-button-border-hover-background); +} +html.theme.gruvboxDarkRG .text-button:hover { + cursor: pointer; + color: var(--theme-link-hover); + text-decoration: underline; +} +html.theme.gruvboxDarkRG .label { + color: var(--theme-label); +} +html.theme.gruvboxDarkRG .checkbox:hover, +html.theme.gruvboxDarkRG .radio:hover { + color: var(--theme-checkbox-hover); +} +html.theme.gruvboxDarkRG .dropdown-content { + background-color: var(--theme-dropdown-content-background); +} +html.theme.gruvboxDarkRG .b-tooltip.is-right:before { + border-right: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.gruvboxDarkRG .b-tooltip.is-left:before { + border-left: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.gruvboxDarkRG .b-tooltip.is-bottom:before { + border-bottom: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.gruvboxDarkRG .b-tooltip.is-primary .tooltip-content { + background: var(--theme-b-tooltip-is-primary-background); + border: 0.0625rem solid var(--theme-b-tooltip-is-primary-border); + color: var(--theme-b-tooltip-is-primary); +} +html.theme.gruvboxDarkRG .add, +html.theme.gruvboxDarkRG .sub { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme.gruvboxDarkRG .add:hover, +html.theme.gruvboxDarkRG .sub:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme.gruvboxDarkRG .current { + border-top: var(--theme-primary-border) solid 0.0625rem; + border-bottom: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .current.infoOnly { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .topBar, +html.theme.gruvboxDarkRG .promoBar, +html.theme.gruvboxDarkRG #mobileNav { + background-color: var(--theme-bars-background); +} +html.theme.gruvboxDarkRG .play { + display: inline-block; + position: relative; + cursor: pointer; + bottom: 0.125rem; + width: 0; + height: 0; + border-top: 0.25rem solid transparent; + border-left: 0.375rem solid var(--theme-has-text-success); + border-bottom: 0.25rem solid transparent; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme.gruvboxDarkRG .pause { + display: inline-block; + position: relative; + cursor: pointer; + box-sizing: content-box; + bottom: 0.0625rem; + width: 0.125rem; + height: 0.625rem; + border-right: 0.125rem solid var(--theme-has-text-danger); + border-left: 0.125rem solid var(--theme-has-text-danger); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme.gruvboxDarkRG .meter.low { + color: var(--theme-meter-low); +} +html.theme.gruvboxDarkRG .meter.neutral { + color: var(--theme-meter-neutral); +} +html.theme.gruvboxDarkRG .meter.high { + color: var(--theme-meter-high); +} +html.theme.gruvboxDarkRG .buildList .hl-ca { + color: var(--theme-enabled); +} +html.theme.gruvboxDarkRG .buildList .hl-cna { + color: var(--theme-disabled); +} +html.theme.gruvboxDarkRG .msgQueue span.special .gear, +html.theme.gruvboxDarkRG .graphContainer span.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme.gruvboxDarkRG .msgQueue span.special:hover .gear, +html.theme.gruvboxDarkRG .graphContainer span.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme.gruvboxDarkRG .main .content .action a.button.hl-ca .aTitle, +html.theme.gruvboxDarkRG .modal .action a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme.gruvboxDarkRG .main .content .action a.button.hl-cna .aTitle, +html.theme.gruvboxDarkRG .modal .action a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme.gruvboxDarkRG .main .content .action a.button span.count, +html.theme.gruvboxDarkRG .modal .action a.button span.count { + background: var(--theme-html-background); +} +html.theme.gruvboxDarkRG .main .content .action div.special, +html.theme.gruvboxDarkRG .modal .action div.special { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-div-special-border); +} +html.theme.gruvboxDarkRG .main .content .action div.special .gear, +html.theme.gruvboxDarkRG .modal .action div.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme.gruvboxDarkRG .main .content .action div.special:hover, +html.theme.gruvboxDarkRG .modal .action div.special:hover { + border: 0.0625rem solid var(--theme-div-special-hover-border); +} +html.theme.gruvboxDarkRG .main .content .action div.special:hover .gear, +html.theme.gruvboxDarkRG .modal .action div.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme.gruvboxDarkRG .main .content .action span.on, +html.theme.gruvboxDarkRG .modal .action span.on { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-on-border); + color: var(--theme-span-on); +} +html.theme.gruvboxDarkRG .main .content .action span.on.warn, +html.theme.gruvboxDarkRG .main .content .action span.on.altwarn, +html.theme.gruvboxDarkRG .modal .action span.on.warn, +html.theme.gruvboxDarkRG .modal .action span.on.altwarn { + color: var(--theme-span-on-warn); +} +html.theme.gruvboxDarkRG .main .content .action span.off, +html.theme.gruvboxDarkRG .modal .action span.off { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-off-border); + color: var(--theme-span-off); +} +html.theme.gruvboxDarkRG .main .content .action span.on:hover, +html.theme.gruvboxDarkRG .main .content .action span.off:hover, +html.theme.gruvboxDarkRG .modal .action span.on:hover, +html.theme.gruvboxDarkRG .modal .action span.off:hover { + border: 0.0625rem solid var(--theme-span-on-off-hover-border); +} +html.theme.gruvboxDarkRG .main .content .action.hl .button, +html.theme.gruvboxDarkRG .modal .action.hl .button { + border: solid 1px var(--theme-hl-button-border); +} +html.theme.gruvboxDarkRG .main .content .action.cna a.button, +html.theme.gruvboxDarkRG .modal .action.cna a.button { + background: var(--theme-link-button-background); +} +html.theme.gruvboxDarkRG .main .content .action.cna a.button.hl-ca .aTitle, +html.theme.gruvboxDarkRG .modal .action.cna a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme.gruvboxDarkRG .main .content .action.cna a.button.hl-cna .aTitle, +html.theme.gruvboxDarkRG .modal .action.cna a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme.gruvboxDarkRG .main .content .action.cna .special, +html.theme.gruvboxDarkRG .main .content .action.cna .on, +html.theme.gruvboxDarkRG .main .content .action.cna .off, +html.theme.gruvboxDarkRG .modal .action.cna .special, +html.theme.gruvboxDarkRG .modal .action.cna .on, +html.theme.gruvboxDarkRG .modal .action.cna .off { + border-color: var(--theme-special-on-off-border); +} +html.theme.gruvboxDarkRG .main .content .action.cna .oldTech span.aTitle, +html.theme.gruvboxDarkRG .modal .action.cna .oldTech span.aTitle { + color: var(--theme-oldTech); +} +html.theme.gruvboxDarkRG .main .content .action.cnam span.aTitle, +html.theme.gruvboxDarkRG .modal .action.cnam span.aTitle { + color: var(--theme-cnam-aTitle); +} +html.theme.gruvboxDarkRG .main .content .enemyFortress { + background-color: var(--theme-button-background); +} +html.theme.gruvboxDarkRG .main .content .divider h2 { + background: var(--theme-html-background); +} +html.theme.gruvboxDarkRG .main .content .green, +html.theme.gruvboxDarkRG .main .content .synth { + box-shadow: 0 0 6px var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .main .content .green > span, +html.theme.gruvboxDarkRG .main .content .synth > span { + text-shadow: 1px 1px var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .main .content .red { + box-shadow: 0 0 6px var(--theme-has-text-danger); +} +html.theme.gruvboxDarkRG .main .content .red > span { + text-shadow: 1px 1px var(--theme-has-text-danger); +} +html.theme.gruvboxDarkRG .main .content .yellow { + box-shadow: 0 0 6px var(--theme-has-text-warning); +} +html.theme.gruvboxDarkRG .main .content .yellow > span { + text-shadow: 1px 1px var(--theme-has-text-warning); +} +html.theme.gruvboxDarkRG .main .content .orange { + box-shadow: 0 0 6px var(--theme-has-text-caution); +} +html.theme.gruvboxDarkRG .main .content .orange > span { + text-shadow: 1px 1px var(--theme-has-text-caution); +} +html.theme.gruvboxDarkRG .main .content .purple { + box-shadow: 0 0 6px var(--theme-has-text-special); +} +html.theme.gruvboxDarkRG .main .content .purple > span { + text-shadow: 1px 1px var(--theme-has-text-special); +} +html.theme.gruvboxDarkRG .main .content .blue, +html.theme.gruvboxDarkRG .main .content .precog { + box-shadow: 0 0 6px var(--theme-has-text-info); +} +html.theme.gruvboxDarkRG .main .content .blue > span, +html.theme.gruvboxDarkRG .main .content .precog > span { + text-shadow: 1px 1px var(--theme-has-text-info); +} +html.theme.gruvboxDarkRG .main .content .cna .precog > span { + text-shadow: none; +} +html.theme.gruvboxDarkRG .main .government .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme.gruvboxDarkRG .main .garrison .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme.gruvboxDarkRG .main .market-header { + border-bottom: var(--theme-secondary-border) solid 1px; +} +html.theme.gruvboxDarkRG .main .galaxyTrade { + border-top: var(--theme-secondary-border) solid 1px; +} +html.theme.gruvboxDarkRG .powerGrid { + display: flex; + flex-wrap: wrap; + margin-left: 1rem; +} +html.theme.gruvboxDarkRG .powerGrid .circuit { + min-width: 18.5rem; + cursor: pointer; +} +html.theme.gruvboxDarkRG .powerGrid .circuit.inactive { + display: none; +} +html.theme.gruvboxDarkRG .powerGrid .circuit > span { + display: inline-block; +} +html.theme.gruvboxDarkRG .powerGrid .circuit > span:first-child { + width: 1.5rem; +} +html.theme.gruvboxDarkRG .powerGrid .circuit .struct { + width: 12rem; +} +html.theme.gruvboxDarkRG .powerGrid .circuit .off, +html.theme.gruvboxDarkRG .powerGrid .circuit .on { + min-width: 2rem; + text-align: center; +} +html.theme.gruvboxDarkRG .powerGrid .circuit .off { + color: var(--theme-has-text-danger); +} +html.theme.gruvboxDarkRG .powerGrid .circuit .on { + color: var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .gridHeader { + border-top: var(--theme-secondary-border) solid 0.0625rem; + margin: 0.25rem 0 0.25rem 1rem; + padding-top: 0.25rem; +} +html.theme.gruvboxDarkRG .powerGridHead { + display: flex; + justify-content: space-between; +} +html.theme.gruvboxDarkRG .powerGridHeader { + margin-left: 1rem; + margin-bottom: 0.5rem; +} +html.theme.gruvboxDarkRG .resetPowerGrid { + margin-left: 1rem; + margin-top: 0.75rem; +} +html.theme.gruvboxDarkRG .resetPowerGrid .button { + height: 1.5rem; +} +html.theme.gruvboxDarkRG .fort .patrol .check { + background-color: var(--theme-fort-patrol-check-background); +} +html.theme.gruvboxDarkRG .market-item .order { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme.gruvboxDarkRG .market-item .order:hover { + border: var(--theme-market-item-order-hover-border) solid 0.0625rem; + background-color: var(--theme-market-item-order-hover-background); +} +html.theme.gruvboxDarkRG .market-item.prime, +html.theme.gruvboxDarkRG .resource.prime { + background-color: transparent; +} +html.theme.gruvboxDarkRG .market-item.alt, +html.theme.gruvboxDarkRG .resource.alt { + background-color: var(--theme-market-item-background); +} +html.theme.gruvboxDarkRG .market-item.showBar.prime, +html.theme.gruvboxDarkRG .resource.showBar.prime { + background: linear-gradient(to right, transparent 0%, transparent var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme.gruvboxDarkRG .market-item.showBar.alt, +html.theme.gruvboxDarkRG .resource.showBar.alt { + background: linear-gradient(to right, var(--theme-market-item-background) 0%, var(--theme-market-item-background) var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme.gruvboxDarkRG .resource .bar { + cursor: pointer; +} +html.theme.gruvboxDarkRG .inactive-row { + background-color: var(--theme-market-item-background); +} +html.theme.gruvboxDarkRG .modal .actionSpace { + background-color: var(--theme-html-background); +} +html.theme.gruvboxDarkRG .modal-card-head, +html.theme.gruvboxDarkRG .modal-card-body, +html.theme.gruvboxDarkRG .modal-card-foot { + background-color: var(--theme-modalBox-background); +} +html.theme.gruvboxDarkRG .modal-card-head p { + color: var(--theme-has-text-warning); +} +html.theme.gruvboxDarkRG .modalBox, +html.theme.gruvboxDarkRG .industry { + background: var(--theme-modalBox-background); +} +html.theme.gruvboxDarkRG .modalBox p, +html.theme.gruvboxDarkRG .industry p { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .modalBox .market-item, +html.theme.gruvboxDarkRG .industry .market-item { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .modalBox .divide, +html.theme.gruvboxDarkRG .industry .divide { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .modalBox .smelting, +html.theme.gruvboxDarkRG .industry .smelting { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .industry { + background: none; +} +html.theme.gruvboxDarkRG .industry .header { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .industry .avail span { + margin: 0 2.5rem 0 2.125rem; +} +html.theme.gruvboxDarkRG .govTask { + margin-top: 0.25rem; +} +html.theme.gruvboxDarkRG .govTask .button { + height: 1.5rem; + margin-left: 0.5rem; +} +html.theme.gruvboxDarkRG .fileImport { + background-color: var(--theme-html-background); +} +html.theme.gruvboxDarkRG .star1 { + fill: var(--theme-html-background); + stroke: var(--theme-star-2-fill); +} +html.theme.gruvboxDarkRG .star1 path { + stroke: var(--theme-star-2-fill); +} +html.theme.gruvboxDarkRG .star1 path.bolden { + stroke-width: 8px; +} +html.theme.gruvboxDarkRG .star2 { + fill: var(--theme-star-2-fill); +} +html.theme.gruvboxDarkRG .star3 { + fill: var(--theme-star-3-fill); +} +html.theme.gruvboxDarkRG .star4 { + fill: var(--theme-star-4-fill); +} +html.theme.gruvboxDarkRG .star5 { + fill: var(--theme-star-5-fill); +} +html.theme.gruvboxDarkRG .refresh svg { + fill: var(--theme-has-text-advanced); +} +html.theme.gruvboxDarkRG .hscroll::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .vscroll::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .sticky::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .resTabs > section::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .resTabs > .tabs::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .bldQueue::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .dropdown-content::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.gruvboxDarkRG .vscroll::-webkit-scrollbar, +html.theme.gruvboxDarkRG .sticky::-webkit-scrollbar, +html.theme.gruvboxDarkRG .resTabs > section::-webkit-scrollbar, +html.theme.gruvboxDarkRG .resTabs > .tabs::-webkit-scrollbar, +html.theme.gruvboxDarkRG .bldQueue::-webkit-scrollbar, +html.theme.gruvboxDarkRG .dropdown-content::-webkit-scrollbar { + width: 6px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.gruvboxDarkRG .hscroll::-webkit-scrollbar { + height: 8px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.gruvboxDarkRG .vscroll::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .hscroll::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .sticky::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .resTabs > section::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .resTabs > .tabs::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .bldQueue::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .dropdown-content::-webkit-scrollbar-thumb { + background-color: var(--theme-webkit-scrollbar-thumb-background); +} +@supports (scrollbar-color: auto) { + html.theme.gruvboxDarkRG .vscroll, + html.theme.gruvboxDarkRG .hscroll, + html.theme.gruvboxDarkRG .sticky, + html.theme.gruvboxDarkRG .resTabs > section, + html.theme.gruvboxDarkRG .resTabs > .tabs, + html.theme.gruvboxDarkRG .bldQueue { + scrollbar-color: var(--theme-webkit-scrollbar-thumb-background) var(--theme-webkit-scrollbar-background); + } +} +html.theme.gruvboxDarkRG .buttonList .is-selected { + border-color: var(--theme-enabled); +} +html.theme.gruvboxDarkRG input, +html.theme.gruvboxDarkRG select, +html.theme.gruvboxDarkRG textarea, +html.theme.gruvboxDarkRG .notification { + background: var(--theme-primary-color); +} +html.theme.gruvboxDarkRG .add, +html.theme.gruvboxDarkRG .sub { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .current { + border-top: var(--theme-secondary-border) solid 0.0625rem; + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .current.infoOnly { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.orangeSoda .modal .action a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme.orangeSoda .modal .action a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme.orangeSoda .modal .action a.button span.count { + background: var(--theme-html-background); +} +html.theme.orangeSoda .modal .action div.special { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-div-special-border); +} +html.theme.orangeSoda .modal .action div.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme.orangeSoda .modal .action div.special:hover { + border: 0.0625rem solid var(--theme-div-special-hover-border); +} +html.theme.orangeSoda .modal .action div.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme.orangeSoda .modal .action span.on { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-on-border); + color: var(--theme-span-on); +} +html.theme.orangeSoda .modal .action span.on.warn, +html.theme.orangeSoda .modal .action span.on.altwarn { + color: var(--theme-span-on-warn); +} +html.theme.orangeSoda .modal .action span.off { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-off-border); + color: var(--theme-span-off); +} +html.theme.orangeSoda .modal .action span.on:hover, +html.theme.orangeSoda .modal .action span.off:hover { + border: 0.0625rem solid var(--theme-span-on-off-hover-border); +} +html.theme.orangeSoda .modal .action.hl .button { + border: solid 1px var(--theme-hl-button-border); +} +html.theme.orangeSoda .has-text-info { + color: #F09D51; +} +html.theme.orangeSoda .pop-desc .has-text-caution { + color: var(--theme-has-text-danger); +} +html.theme.orangeSoda input, +html.theme.orangeSoda select, +html.theme.orangeSoda textarea, +html.theme.orangeSoda .notification { + background: var(--theme-primary-color); +} +html.theme.dracula input, +html.theme.dracula select, +html.theme.dracula textarea, +html.theme.dracula .notification { + background: var(--theme-primary-color); +} +html.theme.dracula .add, +html.theme.dracula .sub { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.dracula .current { + border-top: var(--theme-secondary-border) solid 0.0625rem; + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.dracula .current.infoOnly { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html .themeColorPicker { + position: absolute; + z-index: 999; + cursor: move; + user-select: none; + padding-top: 0.5rem; + border: 0.06225rem solid; + border-radius: 0.375rem; + background: var(--theme-html-background); + display: flex; + align-items: center; + flex-direction: column; +} +html .theme_color { + width: 100%; +} +html .themeWarning { + padding-left: 0.375rem; + align-items: center; + display: flex; + flex-direction: column; +} +html .colorPicker { + display: flex; + width: 100%; + justify-content: center; +} +html .themeEditor .importExport { + padding: 0.375rem; + border: 1px solid var(--theme-primary-border); + border-radius: 0.375rem; +} +body, +button, +input, +select, +textarea { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; +} +body { + line-height: initial; + touch-action: manipulation; +} +html.large_all { + font-size: 18px; +} +h2, +h3, +.content h2, +.content h3 { + font-size: 1rem; + font-weight: normal; + display: inline-block; + margin-bottom: 0; +} +.is-sr-only { + margin: 0; +} +span, +div { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} +.button { + transition: all 200ms ease; +} +.button.right { + float: right; + margin-right: 0.1rem; +} +a { + cursor: pointer; + text-decoration: none; + transition: all 200ms ease; +} +.tabs a { + border-bottom: none; + padding: 0.5em 1em; + vertical-align: top; +} +.content li { + margin-top: 0; +} +.block:not(:last-child), +.box:not(:last-child), +.breadcrumb:not(:last-child), +.content:not(:last-child), +.highlight:not(:last-child), +.level:not(:last-child), +.list:not(:last-child), +.message:not(:last-child), +.notification:not(:last-child), +.progress:not(:last-child), +.subtitle:not(:last-child), +.table-container:not(:last-child), +.table:not(:last-child), +.title:not(:last-child) { + margin-bottom: 1rem; +} +.tabs:not(:last-child) { + margin-bottom: 0.5rem; + overflow: hidden; +} +.modal .animation-content { + overflow: hidden; +} +.zoom-out-enter-from { + opacity: 0; +} +.zoom-out-enter-from .animation-content { + transform: scale(1.05); +} +.zoom-in-enter-from { + opacity: 0; +} +.zoom-in-enter-from .animation-content { + transform: scale(0.95); +} +.fade-enter-from { + opacity: 0; +} +.zoom-out-leave-active { + opacity: 1; +} +.zoom-out-leave-active .animation-content { + transform: none; +} +.zoom-out-leave-to { + opacity: 0; +} +.zoom-out-leave-to .animation-content { + transform: scale(1.05); +} +.zoom-in-leave-active { + opacity: 1; +} +.zoom-in-leave-active .animation-content { + transform: none; +} +.zoom-in-leave-to { + opacity: 0; +} +.zoom-in-leave-to .animation-content { + transform: scale(0.95); +} +.modal.is-active.is-leaving { + animation: modal-ghost-leave 150ms ease-out forwards; + pointer-events: none; +} +.modal.is-active.is-leaving .animation-content { + animation: modal-ghost-leave-content 150ms ease-out forwards; +} +@keyframes modal-ghost-leave { + from { + opacity: 1; + } + to { + opacity: 0; + } +} +@keyframes modal-ghost-leave-content { + from { + transform: scale(1); + } + to { + transform: scale(1.05); + } +} +@media only screen and (max-width: 113rem) { + .actionWidth { + max-width: 38rem; + } +} +@media only screen and (max-width: 88.5rem) { + .actionWidth { + max-width: 51rem; + } +} +@media only screen and (max-width: 76.375rem) { + .actionWidth { + max-width: 38rem; + } +} +@media only screen and (max-width: 59rem) { + .actionWidth { + max-width: 25rem; + } +} +@media only screen and (max-width: 48rem) { + .actionWidth { + max-width: 38rem; + } +} +@media only screen and (max-width: 45rem) { + .actionWidth { + max-width: 25rem; + } +} +@media only screen and (max-width: 32rem) { + .actionWidth { + max-width: 12rem; + } +} +.msgInput, +.keyMap { + width: 7.5rem; + display: inline-block; + height: 1.25rem; + margin-bottom: 0.25rem; + text-align: center; +} +.msgInput input, +.keyMap input { + height: 1.25rem; + line-height: 1.25rem; + text-align: center; +} +.add { + display: inline-block; + margin-right: 0.25rem; + padding: 0 0.375rem; + border-radius: 0 0.375rem 0.375rem 0; + line-height: 1rem; + cursor: pointer; +} +.add span:first-child { + position: relative; + bottom: 0.0625rem; +} +.sub { + outline: none; + display: inline-block; + margin-left: 0.125rem; + padding: 0 0.375rem; + border-radius: 0.375rem 0 0 0.375rem; + line-height: 1rem; + cursor: pointer; +} +.sub span:first-child { + position: relative; + bottom: 0.0625rem; +} +.current { + min-width: 5rem; + text-align: center; + display: inline-block; + font-size: 0.875rem; + line-height: 1rem; + padding: 0 0.125rem; + cursor: default; +} +.current.infoOnly { + border-radius: 0.375rem; + padding: 0 0.5rem; +} +.factory .current svg { + width: unset; +} +.zero { + cursor: pointer; + margin-left: 0.75rem; +} +.zero:hover { + text-decoration: underline; +} +.localization { + margin-bottom: 1rem; +} +.basic-button { + display: inline-block; + font-size: 0.875rem; + margin: 0 0.25rem; + padding-top: 0.125rem; + border-radius: 0.375rem; + line-height: 1rem; + height: 1.375rem; + min-width: 4rem; + text-align: center; + cursor: pointer; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tradeOffer .trade-offer { + margin: 0; + padding: 0.125rem 0; +} +.tradeOffer .trade-offer .offer-item { + width: 7.5rem; +} +.tradeOffer .trade-offer .offer-vol { + width: 4.5rem; + border-right: 1px solid; + margin-right: 0.125rem; +} +#egg4 { + right: 0; +} +.doublePane { + display: flex; + align-items: center; + justify-content: center; + margin-top: 0.5rem; +} +.doublePane > div { + width: 50%; +} +.doublePane > div.left { + width: 70%; +} +.doublePane > div.right { + width: 30%; +} +.topPad { + margin-top: 0.5rem; +} +.main { + margin: 1rem 1rem 1.25rem; + overflow-y: hidden; + /* give each subtab panel their own fixed-height scroll container, + to prevent jarring page-jump animations when switching between + subtabs of different content heights */ + /* Outer main tabs section: clip horizontal slide animations without + affecting vertical scrolling of inner resTabs sections */ + /* Push non-subtab content down a bit so stuff like the settings tab doesn't scrape against the main navigation bar */ + /* Pull inner subtab navigation bars up so they negate the 0.75rem padding applied above, keeping them a comfortable distance from the main tabs */ + /* Firefox specifically suffers from sub-pixel rendering shimmies during transform animations + This change forces it to use hardware rasterization layers to fix it, but causes blurry text in Chrome + so for now we strictly isolate this fix to Firefox, and add other browsers or platforms as needed if they get the same issues */ + /* Vue 3 Buefy slide animations, switched to CSS grid stacking approach + all .tab-items are placed in the same grid cell (grid-area: 1/1) so both + the entering and leaving tab stay in normal flow during the animation + container height is always the taller of the two, so it never collapses to zero, + and overflow-x: clip on the container properly does its job */ + /* Webkit-specific slim, translucent scrollbars for inner sub-tabs that should avoid re-wraps */ + /* govTabs2 .tab-content > .tab-item is handled above in the resTabs block instead */ +} +.main .leftColumn { + height: calc(100vh - 2.25rem); +} +.main .leftColumn .colHeader { + display: flex; + justify-content: space-between; +} +.main > .columns { + margin-bottom: 0; +} +.main .queue, +.main .theme, +.main .localization { + margin-bottom: 1rem; +} +.main .queue i, +.main .theme i, +.main .localization i { + margin-left: 0.25rem; + padding-bottom: 0.25rem; +} +.main .queue .dropdown button, +.main .theme .dropdown button, +.main .localization .dropdown button { + height: 1.5rem; + padding: 0 0.75rem; +} +.main > .columns > :first-child { + min-width: 18rem; +} +.main .sep { + margin: 0 0.5rem; +} +.main .race { + position: relative; + margin-top: 1rem; + margin-bottom: 0; + width: 100%; +} +.main .race > span { + cursor: default; +} +.main .race .power { + text-align: right; +} +.main .race .morale-contain { + text-align: center; +} +.main .race .morale { + text-align: center; +} +.main .queueCol div.bldQueue:first-child { + margin-top: 2.625rem; +} +.main .bldQueue, +.main .msgQueue { + resize: vertical; + height: 7rem; + border-top: solid 0.0625rem; + border-bottom: solid 0.0625rem; + overflow-y: auto; +} +.main .bldQueue.right, +.main .msgQueue.right { + height: auto; + border-bottom: none; + padding: 1rem; +} +.main .msgQueue { + font-size: 0.75rem; +} +.main .msgQueue.right { + height: calc(100vh - 9rem); +} +.main #msgQueueHeader .special { + cursor: pointer; +} +.main #msgQueueHeader h2 { + border-bottom: solid 0.0625rem; +} +.main #msgQueueHeader span { + font-size: 1rem; + margin-left: 1rem; +} +.main #msgQueueFilters { + padding: 0.25rem 0; + border-bottom: solid 0.0625rem; + font-size: 0.875rem; +} +.main #msgQueueFilters span { + cursor: pointer; +} +.main #msgQueueFilters span:not(:last-child) { + margin-right: 2rem; +} +.main #pausequeue, +.main #pauserqueue { + margin-left: 1rem; +} +.main .bldQueue, +.main .bldQueue.right { + padding-top: 0.25rem; +} +.main .bldQueue h2, +.main .bldQueue.right h2 { + border-bottom: solid 0.0625rem; +} +.main .bldQueue li, +.main .bldQueue.right li { + display: inline-block; + height: 1rem; + padding: 0 0.25rem 0 0; +} +.main .bldQueue li:not(:last-child) .queued:after, +.main .bldQueue.right li:not(:last-child) .queued:after { + content: " -> "; +} +.main .bldQueue li:not(:last-child) .qany:after, +.main .bldQueue.right li:not(:last-child) .qany:after { + content: ", "; +} +.main .resQueue h2 { + border-bottom: solid 0.0625rem; +} +.main .resQueue h2, +.main .resQueue .buildList { + margin-left: 2rem; + margin-top: 0; +} +.main .resQueue .buildList li { + display: inline-block; + height: 1rem; + padding: 0 0.25rem 0 0; +} +.main .resQueue .buildList li:not(:last-child) .queued:after { + content: " -> "; +} +.main .resQueue .buildList li:not(:last-child) .qany:after { + content: ", "; +} +.main .resTabs .tab-content > .tab-item { + height: calc(100vh - 8rem); + overflow-y: auto; + overflow-x: hidden; +} +@supports (scrollbar-width: auto) { + .main .resTabs .tab-content > .tab-item { + scrollbar-width: thin; + } +} +.main .govTabs2 .tab-content > .tab-item { + height: calc(100vh - 12.3rem); + padding-right: 0; + overflow: visible; + align-self: start; +} +.main #mainTabs > .tab-content { + overflow-x: clip; + min-height: calc(100vh); +} +.main .b-tabs .tabs { + margin-bottom: 0 !important; +} +.main .b-tabs .tab-content { + position: relative; + /* Migrate all padding to children to prevent absolute positioning offsets */ + padding: 0 !important; +} +.main .b-tabs .tab-content > .tab-item { + width: 100%; + /* Preserve exact left/right padding so layouts match */ + padding-left: 1rem; + padding-right: 0.15rem; + padding-top: 0; + padding-bottom: 0; +} +.main #mainTabs > .tab-content > .tab-item { + padding-top: 0.75rem !important; + height: calc(100vh - 5rem); + padding-bottom: 3%; + top: 0; +} +.main .b-tabs .tab-content > .tab-item.sticky { + position: relative; +} +.main .resTabs { + margin-top: -0.75rem; +} +.main .resTabs > .tab-content { + margin-top: 0.5rem; +} +@-moz-document url-prefix() { + .main .b-tabs .tab-content > .tab-item { + will-change: transform; + } +} +.main .b-tabs .tab-content { + display: grid; +} +.main .b-tabs .tab-content > .tab-item { + grid-area: 1 / 1; + /* prevent grid's default align-self:stretch from forcing a tab-item taller than + its content important for tabs like Industry whose tab-item is also a flex + container (class="industryTab"), since a stretch-forced height would cascade + into the flex children and make them grow to fill the extra space. */ + align-self: start; + padding-bottom: 0.85rem; +} +.main .b-tabs .tab-content > .slide-next-enter-active, +.main .b-tabs .tab-content > .slide-next-leave-active, +.main .b-tabs .tab-content > .slide-prev-enter-active, +.main .b-tabs .tab-content > .slide-prev-leave-active, +.main .b-tabs .tab-content > .slide-down-enter-active, +.main .b-tabs .tab-content > .slide-down-leave-active, +.main .b-tabs .tab-content > .slide-up-enter-active, +.main .b-tabs .tab-content > .slide-up-leave-active { + transition-duration: 225ms !important; +} +.main .resTabs > section::-webkit-scrollbar { + width: 6px; + background: transparent; +} +.main .resTabs > section::-webkit-scrollbar-track { + background: transparent; +} +.main .resTabs > section::-webkit-scrollbar-thumb { + background: rgba(128, 128, 128, 0.4); + border-radius: 3px; +} +.main .resTabs > section::-webkit-scrollbar-thumb:hover { + background: rgba(128, 128, 128, 0.8); +} +.main .b-tabs .tab-content > .slide-next-enter-from, +.main .b-tabs .tab-content > .slide-prev-leave-to { + transform: translate3d(-100%, 0, 0); +} +.main .b-tabs .tab-content > .slide-next-leave-to, +.main .b-tabs .tab-content > .slide-prev-enter-from { + transform: translate3d(100%, 0, 0); +} +.main .b-tabs .tab-content > .slide-down-enter-from, +.main .b-tabs .tab-content > .slide-up-leave-to { + transform: translate3d(0, -100%, 0); +} +.main .b-tabs .tab-content > .slide-down-leave-to, +.main .b-tabs .tab-content > .slide-up-enter-from { + transform: translate3d(0, 100%, 0); +} +.main #mTabSettings { + padding-right: 0.5rem; +} +.main #tech.tab-item { + padding-bottom: 2rem !important; +} +.main .resources { + margin-top: 0.25rem; + padding-right: 0.25rem; + height: calc(100vh - 5rem); +} +@media only screen and (max-width: 88.5rem) { + .main .resources { + height: calc(100vh - 16.5rem); + } +} +@media only screen and (max-width: 48rem) { + .main .resources { + position: relative; + } +} +.main .resources .resource { + display: flex; + cursor: default; +} +.main .resources .resource div { + width: 70%; + display: flex; + justify-content: space-between; +} +.main .resources .resource > :nth-child(2) { + text-align: center; + width: 4%; +} +.main .resources .resource .interact { + cursor: pointer; +} +.main .resources .resource > :nth-child(3) { + text-align: right; + width: 26%; +} +.main .resources .resource .craftable { + width: 30%; + text-align: right; +} +.main .resources .resource .craftable > span { + display: inline; + margin-left: 0.25rem; +} +.main .evolving { + margin-top: 1rem; + max-width: 51rem; +} +@media only screen and (max-width: 113rem) { + .main .evolving { + max-width: 38rem; + } +} +@media only screen and (max-width: 88.5rem) { + .main .evolving { + max-width: 51rem; + } +} +@media only screen and (max-width: 76.375rem) { + .main .evolving { + max-width: 38rem; + } +} +@media only screen and (max-width: 59rem) { + .main .evolving { + max-width: 25rem; + } +} +@media only screen and (max-width: 48rem) { + .main .evolving { + max-width: 38rem; + } +} +@media only screen and (max-width: 45rem) { + .main .evolving { + max-width: 25rem; + } +} +@media only screen and (max-width: 32rem) { + .main .evolving { + max-width: 12rem; + } +} +.main .evolving .progress { + height: 1.2rem; +} +.main .evolving::after { + display: block; + position: relative; + top: -1.375rem; + content: "Evolving"; + text-align: center; + color: #af8d07; + margin-bottom: -1.25rem; +} +.main .content .settings { + margin-left: 1rem; + height: calc(100vh - 6.5rem); +} +.main .content .tab-content { + padding: 0 0.25rem 0 0; +} +.main .content > .tab-content { + padding: 0 0.25rem 0 1rem; +} +.main .content .tab-item { + padding: 0 0 0 1rem; +} +.main .content .tabs ul { + margin-top: 0.5rem; +} +.main .content #oldTech { + margin-bottom: 4rem; + padding-bottom: 2rem !important; +} +.main .content .mtab { + height: calc(100vh - 10rem); +} +.main .content .action, +.modal .action { + display: inline-block; + position: relative; +} +.main .content .action .aTitle, +.modal .action .aTitle { + overflow-wrap: break-word; + white-space: normal; + line-height: 1rem; +} +.main .content .action a.button, +.main .content .action span.oldTech, +.modal .action a.button, +.modal .action span.oldTech { + width: 12.625rem; + margin: 0.375rem 0.375rem 0 0; +} +.main .content .action a.button span.count, +.main .content .action span.oldTech span.count, +.modal .action a.button span.count, +.modal .action span.oldTech span.count { + position: absolute; + top: 0; + right: 0; + display: inline-block; + height: 1.0625rem; + line-height: 0.875rem; + padding: 0 0.25rem; + border-radius: 0 0.25rem 0 0.4375rem; + overflow: hidden; +} +.main .content .action span.oldTech, +.modal .action span.oldTech { + cursor: default; + display: inline-flex; + margin: 0 1rem 0 0; +} +.main .content .action div.special, +.main .content .action span.on, +.main .content .action span.off, +.modal .action div.special, +.modal .action span.on, +.modal .action span.off { + position: absolute; + cursor: pointer; + display: block; + height: 1.0625rem; + line-height: 0.8125rem; + padding: 0 0.25rem; + overflow: hidden; +} +.main .content .action div.special, +.modal .action div.special { + height: 1.125rem; + line-height: 0.9375rem; + top: 0.5rem; + left: 0; + border-radius: 0.25rem 0 0.4375rem 0; + width: 1.1875rem; +} +.main .content .action div.special svg, +.modal .action div.special svg { + position: relative; + left: -0.125rem; +} +.main .content .action span.on, +.modal .action span.on { + bottom: 0; + right: 0.375rem; + border-radius: 0.4375rem 0 0.25rem 0; +} +.main .content .action span.on .flair, +.modal .action span.on .flair { + position: relative; + left: 0.25rem; + top: 0; +} +.main .content .action span.off, +.modal .action span.off { + bottom: 0; + left: 0; + border-radius: 0 0.4375rem 0 0.25rem; +} +.main .content .action span.off .flair, +.modal .action span.off .flair { + position: relative; + left: 0.125rem; + top: 0; +} +.main .content .action div.repair, +.modal .action div.repair { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 0.25rem; +} +.main .content .action div.repair .progress, +.modal .action div.repair .progress { + height: 0.25rem; + background: transparent; +} +.main .content .action .flair, +.modal .action .flair { + position: absolute; + right: 0.625rem; + top: 0.5rem; + height: 0.5rem; + line-height: 0.5rem; + margin: 0; + padding: 0; +} +.main .content .action .flair:nth-of-type(2), +.modal .action .flair:nth-of-type(2) { + right: 0.625rem; + top: 1.1875rem; +} +.main .content .action .flair:nth-of-type(3), +.modal .action .flair:nth-of-type(3) { + right: 0.625rem; + top: 1.875rem; +} +.main .content .action .flair:nth-of-type(4), +.modal .action .flair:nth-of-type(4) { + right: 1.3125rem; + top: 0.5rem; +} +.main .content .action .flair:nth-of-type(5), +.modal .action .flair:nth-of-type(5) { + right: 1.3125rem; + top: 1.1875rem; +} +.main .content .action .flair:nth-of-type(6), +.modal .action .flair:nth-of-type(6) { + right: 1.3125rem; + top: 1.875rem; +} +.main .content .action.disabled, +.modal .action.disabled { + display: none; +} +.main .content .enemyFortress { + display: inline-block; + position: relative; + min-width: 17.375rem; + height: 3.125rem; + margin: 0.375rem 0.375rem 0 0; + border-radius: 0.25rem; +} +.main .content .enemyFortress .fortRow > span { + display: inline-block; +} +.main .content .enemyFortress .fortRow :first-child { + margin-left: 0.5rem; + margin-right: 0; + float: left; +} +.main .content .enemyFortress .fortRow :last-child { + margin-left: 0.25rem; + margin-right: 0.5rem; + float: right; +} +.main .content .enemyFortress .second { + line-height: 2rem; +} +.main .content .enemyFortress .second a.button { + height: 1.5rem; + margin-top: 0.25rem; + padding-left: 0.25rem; + padding-right: 0.25rem; + min-width: 4.5rem; +} +.main .content .geck { + width: 100%; + text-align: center; +} +.main .content .challenge { + width: 100%; + text-align: center; +} +@media only screen and (max-width: 113rem) { + .main .content .challenge { + max-width: 38rem; + } +} +@media only screen and (max-width: 88.5rem) { + .main .content .challenge { + max-width: 51rem; + } +} +@media only screen and (max-width: 76.375rem) { + .main .content .challenge { + max-width: 38rem; + } +} +@media only screen and (max-width: 59rem) { + .main .content .challenge { + max-width: 25rem; + } +} +@media only screen and (max-width: 48rem) { + .main .content .challenge { + max-width: 38rem; + } +} +@media only screen and (max-width: 45rem) { + .main .content .challenge { + max-width: 25rem; + } +} +@media only screen and (max-width: 32rem) { + .main .content .challenge { + max-width: 12rem; + } +} +.main .content .challenge .simButton { + margin-top: 0.5rem; +} +.main .content .divider { + width: 100%; + text-align: center; + border-bottom: 0.0625rem solid; + margin: 0.625rem 0 0.625rem; +} +.main .content .divider h2 { + position: relative; + bottom: -0.5rem; + padding: 0 0.625rem; +} +.main .jobList { + max-width: 19rem; +} +.main .job { + margin-left: 0.5rem; + display: flex; + min-width: 18rem; + align-items: center; +} +.main .job .controls { + margin-bottom: 1px; +} +.main .job .controls .sub { + border-right: 0; +} +.main .job .job_label { + cursor: default; + display: flex; + align-items: center; +} +.main .job .job_label span { + display: inline-block; +} +.main .job .job_label :first-child { + margin-right: 0.5rem; + margin-bottom: 0; + width: 10rem; + font-size: 1rem; + font-weight: normal; + display: inline-block; +} +.main .job .job_label :nth-child(2) { + min-width: 4.5rem; + text-align: center; +} +.main .job .job_label .count > span { + margin-left: 1rem; + width: 1rem; +} +.main .job .job_label .count svg { + width: 1rem; +} +.main .sshifter { + margin-left: 1rem; +} +.main .sshifter button { + height: 1.5rem; + margin-left: 0.25rem; +} +.main .foundry { + margin-top: 1rem; +} +.main #civics { + padding: 0.5rem; +} +.main .civics { + padding: 0; +} +.main .civics .revolution { + margin-left: 0.375rem; +} +.main .government { + margin-bottom: 0; +} +.main .government .header { + margin-bottom: 0.5rem; +} +.main .government .govType { + margin-bottom: 0.25rem; + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} +.main .government .govType > div:first-child { + margin-right: 0.5rem; +} +.main .government .govType button { + margin-top: 0.25rem; + height: 1.75rem; + line-height: 1.75rem; + padding: 0 0.5rem; +} +.main .government .taxRate { + height: 1.25rem; + display: flex; +} +.main .government .taxRate :first-child { + cursor: default; + display: inline-block; + line-height: 1.25rem; +} +.main .government .foreign { + margin-bottom: 1rem; +} +.main .government .foreign .gaction { + display: inline-block; + width: 8rem; +} +.main .government .foreign .glabel { + display: inline-block; + width: 9rem; +} +.main .government .foreign .glevel { + display: inline-block; + width: 8rem; +} +.main .government .foreign button { + margin-top: 0.25rem; + height: 1.75rem; + line-height: 1.75rem; + padding: 0 0.5rem; +} +.main .fort { + width: 100%; + min-height: 1rem; + margin: 0.25rem 0; + padding: 0.25rem 0; + border-top: 1px solid; + border-bottom: 1px solid; +} +.main .fort .current { + position: relative; + bottom: 0.0625rem; +} +.main .fort > div { + margin-top: 0.25rem; +} +.main .fort > div:first-child { + margin-top: 0; +} +.main .fort > div:first-child span:nth-child(1) { + margin-right: 0.5rem; +} +.main .fort .defense { + margin-right: 0.5rem; +} +.main .fort .training span { + display: inline-block; +} +.main .fort .training progress { + display: inline-block; + width: 90%; +} +.main .fort .patrol { + position: relative; + top: 4px; + left: 4px; +} +.main .fort .merctip { + margin-top: 0.25rem; +} +.main .fort .observe, +.main .fort .merc { + height: 1.25rem; + margin-left: 0.25rem; + line-height: 0rem; +} +.main .fort .training .observe { + bottom: 0.25rem; +} +.main .fort .bunks { + margin: 0.25rem 0 0.125rem; +} +.main .garrison .header { + margin-bottom: 0.5rem; +} +.main .garrison .bunks { + margin: 0.75rem 0.75rem 0; +} +.main .garrison .bunk { + margin-bottom: 0; + margin-right: 0.5rem; +} +.main .garrison .bunk > div { + padding-bottom: 0; +} +.main .garrison .bunk .hire { + padding-left: 0; + margin-top: 1rem; +} +.main .garrison .barracks { + margin-bottom: 0.25rem; +} +.main .garrison .training { + margin-bottom: 0.75rem; +} +.main .garrison .training > span { + display: inline-block; +} +.main .garrison .training > progress { + display: inline-block; + width: calc(100% - 4rem); +} +.main .garrison button { + height: 2rem; + line-height: 1rem; +} +.main .garrison button.first { + margin-right: 0.5rem; +} +.main .garrison .war { + padding-right: 0; + margin: 0.75rem 0.75rem 0; +} +.main .garrison .war .tactics { + margin: 0.5rem 0; + height: 1.25rem; + display: flex; +} +.main .garrison .war .tactics > :first-child { + display: inline-block; + line-height: 1.125rem; + width: 4.75rem; +} +.main .garrison .launch { + min-width: 10rem; + margin-top: 0.75rem; + margin-right: 0.5rem; + text-align: center; +} +.main .garrison .launch .campaign { + width: 10rem; + white-space: normal; + margin-top: 0.5rem; +} +.main #c_garrison.garrison { + margin-top: 0.25rem; +} +.main #c_garrison.garrison > div:nth-child(2) { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} +.main .armHead > span { + margin-left: 1rem; +} +.main .fleet { + display: flex; + flex-wrap: wrap; + width: 100%; + min-height: 1rem; + margin: 0.25rem 0; + padding: 0.25rem 0; + border-top: 1px solid; + border-bottom: 1px solid; +} +.main .fleet .area { + width: 8rem; +} +.main .fleet .area > span { + display: inline-block; + min-width: 8rem; + white-space: nowrap; +} +.main .fleet .area .ship { + text-align: center; +} +.main .fleet .area .ship .current { + min-width: 2.5rem; + width: 2.5rem; + font-size: 1rem; +} +.main .pirate { + margin-right: 0.75rem; + margin-left: 0.75rem; +} +.main .militaryTab .garrison .battle { + margin-bottom: 0.5rem; +} +.main .militaryTab .garrison .battle .war, +.main .militaryTab .garrison .battle .launch { + margin: 0.25rem 0 0 0.75rem; +} +.main .militaryTab .garrison .columns { + flex-wrap: wrap; +} +.main .militaryTab, +.main .mechTab { + margin-left: 1rem; +} +.main #hellTabs > section { + height: 100vh; +} +.main .hellReports { + display: flex; + justify-content: space-between; +} +.main .hellReports > div { + height: calc(100vh - 10rem); +} +.main .hellReports .reportList { + top: 0; + width: 25%; + box-sizing: border-box; + border-right: 0.0625rem solid; + margin-right: 1rem; +} +.main .hellReports .reportDisplay { + width: 75%; + font-size: 0.9rem; +} +.main .hellReports .reportDisplay span:not(:last-child) { + margin-right: 0.5rem; +} +.main .hellReports .reportDisplay p { + margin-bottom: 0; +} +.main .hellReports .reportDisplay .reportStats { + padding-bottom: 0.5rem; + border-bottom: 0.0625rem solid; + margin-bottom: 0.5rem; +} +.main .hellReports .reportDisplay .reportStats h2 { + margin-top: 0; +} +.main .hellReports .reportDisplay .reportStats h2:not(:last-child) { + margin-right: 1rem; +} +.main .hellReports .right { + margin-left: 0.5rem; + padding-left: 0.5rem; + border-left: 0.0625rem solid; +} +.main .hellAnalysis { + display: flex; + justify-content: space-between; + width: 100%; +} +.main .hellAnalysis .analysisColumn { + width: 50%; + margin: 0 10px; +} +.main .hellAnalysis .analysisColumn:not(:last-child) { + border-right: 0.0625rem solid; +} +.main .hellAnalysis h2:not(:first-child) { + margin: 0 0 0 1rem; +} +.main #hellAnalysis { + height: calc(100vh - 10rem); +} +.main #hellAnalysis > div:not(:last-child) { + margin-bottom: 0.5rem; + border-bottom: 0.0625rem solid; + padding-bottom: 0.5rem; +} +.main .graphingArea { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; + width: 100%; +} +.main .graphContainer { + width: 45%; +} +.main .graphControls div { + display: flex; + justify-content: space-between; +} +.main .graphControls div h2 { + margin: 0; +} +.main .graphControls .graphTitle { + justify-content: center; +} +.main .graph { + margin: 1%; + padding: 3%; + border: 0.0625rem solid; +} +.main .mechAssembly { + padding-bottom: 0.5rem; + border-bottom: 0.0625rem solid; +} +.main .mechAssembly .button { + height: 2rem; +} +.main .mechAssembly .bayOptions { + margin-top: 0.5rem; +} +.main .mechAssembly .bayOptions .dropdown { + margin: 0 0.5rem 0.25rem 0; +} +.main .mechAssembly .mechAssemble { + margin: 1rem 0 0 0; +} +.main .mechAssembly .checkbox { + margin-left: 0.5rem; + bottom: -0.25rem; +} +.main .mechList .mechRow .gearList { + display: inline-flex; +} +.main .mechList .mechRow .gearList.titan { + display: inline-grid; +} +.main .mechList .mechRow .gearList > div { + margin: 0 0.125rem; +} +.main #mechLab { + display: flex; + flex-direction: column; + overflow-y: hidden; +} +.main #mechLab #mechList { + flex: 1 1 0; + min-height: 0; + height: auto; + padding-bottom: 0.5rem; + padding-top: 0.5rem; +} +.main .gFort { + padding-top: 0.5rem; + border-bottom: 0; + margin-top: 0.5rem; +} +.main .gFort .pad { + margin-right: 0.25rem; +} +.main .mad { + margin-top: 1rem; + max-width: 28rem; + padding: 1rem; + border: 0.0625rem solid #fff; + border-radius: 0.5rem; + background: repeating-linear-gradient(45deg, #fbfd84, #fbfd84 10px, #000000 10px, #000000 20px); +} +.main .mad .warn { + background: #000; + color: #fff; + border-radius: 0.5rem; + padding: 0.25rem; + font-size: 0.75rem; + text-align: center; + margin-bottom: 0.25rem; +} +.main .mad .defcon { + display: inline-block; + width: 50%; + text-align: center; +} +.main .armed .mad { + border-color: #8f0000; + background: repeating-linear-gradient(45deg, #8f0000, #8f0000 10px, #000000 10px, #000000 20px); +} +.main .pad { + margin-left: 1rem; +} +.main .market-header { + padding-bottom: 0.5rem; + margin: 0.5rem 1rem; +} +.main .market-header .trade { + position: relative; + bottom: -0.125rem; + margin-left: 1rem; +} +.main .market-header .b-numberinput { + width: 100%; +} +.main .market-header .market { + margin-left: 1rem; + margin-right: 1rem; +} +.main .market-header .market .button { + height: 1.6875rem; +} +.main .market-header .market input { + height: 1.6875rem; +} +.main .market-header .help { + margin-left: 1rem; +} +.main .galaxyTrade { + margin-right: 0; +} +.main .trade-header { + margin: 0.5rem 0; + justify-content: center; +} +.main .trade-offer { + margin: 0; + padding: 0.125rem 0; +} +.main .trade-offer .offer-item { + width: 7.5rem; +} +.main .trade-offer .offer-vol { + width: 4.5rem; + border-right: 1px solid; + margin-right: 0.125rem; +} +.main .setting { + margin: 0 0.25rem 0.5rem 0; +} +.main .importExport, +.main .stringPack { + margin-top: 1rem; + padding-right: 0.3rem; +} +.main #customFile, +.main #stringPackFile { + margin-top: 0.75rem; +} +.main .reset { + margin-top: 3rem; +} +.main .reset .notification { + margin-top: 0.5rem; +} +.main .cstat { + margin-top: 1rem; +} +.main #achievePanel > div { + width: 100%; +} +.main .achievement { + position: relative; + border: 0.0625rem solid; + padding: 0.125rem; + margin: 0.125rem 0; + width: 100%; +} +.main .achievement span { + display: inline-block; +} +.main .achievement span > span.row { + display: block; +} +.main .achievement > :first-child { + margin-left: 0.5rem; + width: 100%; +} +.main .achievement > :nth-child(2), +.main .achievement > div.perk { + margin-left: 0.5rem; +} +.main .achievement .flair { + display: block; + position: absolute; + right: 0.1875rem; + top: 0.1875rem; + height: 0.5rem; + line-height: 0.5rem; + margin: 0; + padding: 0; +} +.main .achievement .flair:nth-of-type(2) { + right: 0.1875rem; + top: 1.375rem; +} +.main .achievement .flair:nth-of-type(3) { + right: 1.3125rem; + top: 0.1875rem; +} +.main .achievement .flair:nth-of-type(4) { + right: 1.3125rem; + top: 1.375rem; +} +.main .achievement .flair:nth-of-type(5) { + right: 2.4375rem; + top: 0.1875rem; +} +.main .achievement .flair:nth-of-type(6) { + right: 2.4375rem; + top: 1.375rem; +} +.main .achievement .star1, +.main .achievement .star2, +.main .achievement .star3, +.main .achievement .star4, +.main .achievement .star5 { + width: 1rem; +} +.main .governor.candidates { + display: table; + width: 100%; +} +.main .governor .appoint { + display: table-row; +} +.main .governor .appoint > span { + display: table-cell; +} +.main .governor .appoint.header > span { + padding-bottom: 0.5rem; +} +.main .governor .appoint button { + height: 1.5rem; + margin-bottom: 0.25rem; +} +.main .govOffice .head { + display: flex; + justify-content: space-between; + align-items: center; +} +.main .govOffice .head .fire button { + display: block; + line-height: 1rem; + padding: 0 0.5rem; +} +.main .govOffice .tConfig { + margin-top: 0.5rem; +} +.main .govOffice .spyopConfig { + margin-left: 0; +} +.main .govOffice .spyopConfig li { + cursor: pointer; + display: inline-block; + height: 1rem; + padding: 0 0.25rem 0 0; +} +.main .govOffice .spyopConfig li:not(:last-child):after { + content: " -> "; +} +.main .govOffice .options { + margin-top: 1rem; +} +.main .govOffice .options .storage { + display: flex; + clear: right; +} +.main .govOffice .options .storage > div { + width: 50%; +} +.main .govOffice .options .storage .control { + margin-right: 1rem; +} +.main .govOffice .options .storage .control input { + height: 1.5rem; +} +.main .govOffice .options .hRow > :first-child, +.main .govOffice .options .hRow > :nth-child(2) { + display: inline-block; +} +.main .govOffice .options .hRow > :nth-child(2) { + float: right; +} +.main .govOffice .options .bal_storage { + display: inline-flex; + flex-wrap: wrap; +} +.main .govOffice .options .bal_storage .ccmOption { + display: flex; + justify-content: space-between; + align-items: center; + position: relative; + width: 50%; +} +.main .govOffice .options .bal_storage .ccmOption > span { + display: inline-block; + width: 7.5rem; + overflow-wrap: anywhere; + line-height: 1rem; +} +.main .govOffice .options .bal_storage .ccmOption .field-body .field { + display: flex; + flex-wrap: wrap; + width: 5rem; +} +.main .govOffice .options .bal_storage .ccmOption .field-body .control { + width: 0.5625rem; + margin-right: 1rem; +} +.main .govOffice .options .bal_storage .ccmOption .field-body .control label { + height: 1.5rem; + padding: 0 0.75rem; +} +.main .govOffice .options .bal_storage .ccmOption:not(.m) .field-body .b3 label { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.main .govOffice .options .bal_storage .ccmOption:not(.m) .field-body .b5 label { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.main .govOffice .options .bal_storage .ccmOption.m { + height: 2.125rem; + line-height: 2.125rem; +} +.main .govOffice .options .bal_storage .ccmOption.m .field-body .control label { + height: 1rem; + font-size: 0.75rem; +} +.main .govOffice .options .bal_storage .ccmOption.m .field-body .b1 label { + border-bottom-left-radius: 0; +} +.main .govOffice .options .bal_storage .ccmOption.m .field-body .b3 label { + border-top-right-radius: 4px; +} +.main .govOffice .options .bal_storage .ccmOption.m .field-body .b4 label { + border-bottom-left-radius: 4px; +} +.main .govOffice .options .bal_storage .ccmOption.m .field-body .b6 label { + border-top-right-radius: 0; +} +.main .govOffice .options .trash .has-addons { + display: initial; +} +.main .govOffice .options .trash .has-addons .trashButton { + cursor: pointer; +} +.main #perksPanel .achievement { + margin: 0.25rem 0; +} +.main .space, +.main .city, +.main .tech { + margin-top: 0.625rem; +} +.main .space:nth-child(2), +.main .city:first-child, +.main .tech:first-child { + margin-top: 0; +} +.main .regionControl, +.main .regionSupport { + margin-left: 0.5rem; +} +.main .space { + display: flex; +} +.main .space .syndThreat { + margin-left: 1rem; +} +.large_log .main .msgQueue { + font-size: 1rem; +} +.large_all .main .content .action a.button, +.large_all .main .content .action span.oldTech, +.large_all .modal .action a.button, +.large_all .modal .action span.oldTech { + width: 11.75rem; + margin: 0.25rem 0.25rem 0 0; +} +.large_all .main .content .action span.on, +.large_all .modal .action span.on { + right: 0.25rem; +} +.large_all .main .content .action div.special, +.large_all .modal .action div.special { + top: 0.25rem; +} +.large_all .main .msgQueue { + font-size: 0.9rem; +} +.graphCreator > div:not(:last-child) { + margin-bottom: 0.5rem; + border-bottom: 0.0625rem solid; + padding-bottom: 0.5rem; +} +.pylon .current { + width: 5.25rem; +} +.modalBody .gap { + margin: 0 0.25rem 0.5rem; +} +.modalBody.max40 { + max-width: 40rem; +} +.modalBody .wrap { + max-width: 25.5rem; + margin: 0 auto; +} +.popper { + z-index: 100000; +} +.popper .craft-elm { + white-space: nowrap; +} +.popper .grad-from-left, +.popper .grad-from-left-warn, +.popper .grad-from-right { + background-size: 100%; + -webkit-background-clip: text; + -moz-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + -moz-text-fill-color: transparent; +} +.storage-header { + margin-bottom: 0.25rem; +} +.storage-header button { + font-size: 0.875rem; +} +.storage-header .crate { + margin-left: 13rem; +} +.storage-header .container { + margin-left: 3rem; +} +.market-item { + margin: 0.125rem 0 0 1rem; + display: flex; + cursor: default; +} +.market-item .res { + display: inline-flex; + cursor: default; + margin-right: 0.5rem; + width: 8rem; +} +.market-item .buy { + display: inline-flex; +} +.market-item .sell { + display: inline-flex; + margin-left: 0.5rem; +} +.market-item .route { + position: relative; + bottom: 1px; +} +.market-item .order { + display: inline-block; + font-size: 0.875rem; + margin: 0 0.25rem; + padding-top: 0.125rem; + border-radius: 0.375rem; + line-height: 1rem; + height: 1.375rem; + min-width: 4rem; + text-align: center; + cursor: pointer; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + min-width: 4.5rem; +} +.market-item .trade { + margin-left: 1rem; + min-width: 9.375rem; +} +.market-item .trade .current { + width: 3rem; +} +.market-item .trade .add, +.market-item .trade .sub { + position: relative; + top: 0.0625rem; + padding: 0 0.375rem; + line-height: 1rem; +} +.market-item .trade .mass { + margin-left: 1rem; +} +.market-item .crtTotal { + margin-left: 11.5rem; +} +.market-item .cntTotal { + margin-left: 2.0625rem; +} +.market-item .crtTotal span:nth-child(2), +.market-item .cntTotal span:nth-child(2) { + display: inline-block; + width: 6rem; + text-align: center; +} +.market-item .tradeTotal { + margin-left: 23.25rem; +} +.market-item .tradeTotal.nt { + margin-left: 11.5rem; +} +.modal .actionSpace { + padding: 0.25rem; + min-width: 38rem; + border-radius: 0.5rem; +} +.modal .actionSpace .action a.button { + margin: 0.25rem; +} +.modal .modalBody { + max-height: calc(100vh - 5rem); +} +.modal .msgInput .checkbox { + margin: 0 3rem; +} +.modal .msgInput .checkbox .control-label { + padding: 0; +} +.modal .msgInputApply { + margin-top: 1rem; +} +.modal .modal-background { + background-color: rgba(10, 10, 10, 0); +} +.modal .modal-content { + box-shadow: 0px 0px 1rem black; + border-radius: 1rem; +} +.modal .genus_selection > section { + display: flex; + flex-wrap: wrap; + flex-direction: row; + justify-content: space-between; +} +.main > div.popper, +body .modal > div.popper { + margin-top: 0.125rem; + text-align: center; + padding: 0.5rem 0.75rem; + max-width: 18rem; + border-radius: 0.25rem; + line-height: 1.3125rem; +} +.main > div.popper div.aTable, +body .modal > div.popper div.aTable { + columns: 2; +} +.main > div.popper div.aTable span, +body .modal > div.popper div.aTable span { + display: flex; +} +.main > div.popper.breakdown, +body .modal > div.popper.breakdown { + max-width: initial; +} +.main > div.popper .modal_bd, +body .modal > div.popper .modal_bd { + display: table; + width: 100%; +} +.main > div.popper .modal_bd :first-child, +body .modal > div.popper .modal_bd :first-child { + display: table-cell; + text-align: left; + padding-right: 0.5rem; +} +.main > div.popper .modal_bd :nth-child(2), +body .modal > div.popper .modal_bd :nth-child(2) { + display: table-cell; + text-align: right; +} +.main > div.popper .modal_bd.sum, +body .modal > div.popper .modal_bd.sum { + border-top: 0.0625rem solid; +} +.main > div.popper .resBreakdown .parent, +body .modal > div.popper .resBreakdown .parent { + display: flex; +} +.main > div.popper .resBreakdown .parent div.col, +body .modal > div.popper .resBreakdown .parent div.col { + padding-left: 0.5rem; + margin-left: 0.5rem; + border-left: 1px solid; +} +.main > div.popper > .flair, +body .modal > div.popper > .flair { + margin-top: 0.5rem; + font-size: 0.75rem; + text-align: right; + line-height: 0.75rem; +} +.main > div.popper.flair, +body .modal > div.popper.flair { + padding-bottom: 0.25rem; +} +.main > div.popper .flexAround, +body .modal > div.popper .flexAround { + display: flex; + flex-wrap: wrap; + justify-content: space-around; +} +.main > div.popper .example, +body .modal > div.popper .example { + text-align: left; + white-space: pre; +} +.main > div.popper .pGeoList .pGeo, +body .modal > div.popper .pGeoList .pGeo { + min-width: 49%; +} +.infoBox { + max-width: 50rem; + margin-bottom: 0.5rem; + margin-right: 0.5rem; + padding: 0.25rem 0.5rem; +} +.infoBox h2 { + margin-bottom: 0.25rem; + border-bottom: 0.0625rem solid; +} +.infoBox div { + margin-bottom: 0.5rem; + clear: both; +} +.infoBox .type { + display: flex; + justify-content: space-between; +} +.infoBox .type > span:nth-child(1) { + display: block; + text-align: left; +} +.infoBox .type > span:nth-child(2) { + display: block; + text-align: right; +} +.infoBox .desc { + text-align: left; +} +.infoBox .condense { + margin: 0; +} +.main > div.popper.wide, +body .modal > div.popper.wide { + max-width: initial; +} +.arpa ul, +.resTabs ul { + margin-top: 0; +} +.arpa .tabs > ul, +.resTabs .tabs > ul { + margin-left: 1rem; +} +.arpa .tabs, +.resTabs .tabs { + overflow-x: auto; +} +.modalBox, +.industry { + padding: 1rem; + border-radius: 1rem; + text-align: center; + min-height: 9.5rem; +} +.modalBox p, +.industry p { + margin-bottom: 0.5rem; +} +.modalBox .market-item, +.industry .market-item { + display: block; + margin-top: 0.5rem; + padding-top: 0.5rem; + margin-left: 0; +} +.modalBox .crates .crateHead, +.industry .crates .crateHead { + margin-bottom: 0.5rem; +} +.modalBox .crates .crateHead :first-child, +.industry .crates .crateHead :first-child { + margin-right: 1rem; +} +.modalBox .crates .crateHead :last-child, +.industry .crates .crateHead :last-child { + margin-left: 1rem; +} +.modalBox .crates button, +.industry .crates button { + font-size: 0.875rem; + margin: 0 0.25rem; + height: 1.8rem; +} +.modalBox .divide, +.industry .divide { + margin-top: 0.5rem; + padding-top: 0.5rem; +} +.modalBox .current, +.industry .current { + position: relative; + bottom: 0.0625rem; +} +.modalBox .smelting, +.industry .smelting { + margin: 0.5rem 0 0.75rem; + padding-top: 0.5rem; +} +.modalBox .smelting button, +.industry .smelting button { + font-size: 0.875rem; + margin: 0 0.25rem; + height: 1.8rem; +} +.modalBox .smelting .button.steel, +.industry .smelting .button.steel { + white-space: pre; +} +.modalBox .factory :first-child, +.industry .factory :first-child { + display: inline-block; + width: 8rem; + text-align: left; +} +.modalBox .crateModal, +.industry .crateModal { + margin-bottom: 1.25rem; +} +.modalBox .flexAround, +.industry .flexAround { + margin-top: 0.25rem; + display: flex; + justify-content: space-evenly; +} +.modalBox .flexWrap, +.industry .flexWrap { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; +} +.modalBox .flexWrap > div, +.industry .flexWrap > div { + margin-bottom: 0.25rem; +} +.modalBox .fanatic section, +.industry .fanatic section { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; +} +button[disabled] { + pointer-events: none; + cursor: not-allowed; +} +span.inline { + display: inline-block; +} +.modalBox .trade-offer { + margin: 0; + padding: 0.125rem 0; +} +.modalBox .trade-offer .offer-item { + width: 7.5rem; +} +.modalBox .trade-offer .offer-vol { + width: 4.5rem; + border-right: 1px solid; + margin-right: 0.125rem; +} +.modalBox .market-item { + display: flex; + justify-content: center; +} +.modalBox .trade-header { + border-top: 0; + padding-top: 0; +} +.industryTab, +.psychicTab, +.supernaturalTab { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-content: flex-start; + align-items: flex-start; +} +.industry { + margin-bottom: 0.5rem; + border-bottom: 0.0625rem solid; + border-top: 0.0625rem solid; + width: 27.5rem; +} +.industry .header { + margin-bottom: 0.25rem; + padding-bottom: 0.25rem; + width: 100%; +} +.industry .gap { + margin-top: 0.5rem; + width: 100%; +} +.topBar, +.promoBar { + display: inline-flex; + height: 1.2rem; + line-height: 1.2rem; + width: 100%; + position: fixed; +} +.topBar { + top: 0; + z-index: 10; +} +.topBar .calendar { + margin: 0 auto; +} +.topBar .calendar .temp { + margin-left: 0.125rem; + font-size: 0.875rem; +} +.topBar .calendar .weather { + font-size: 0.8125rem; +} +.topBar .calendar .moon { + font-size: 0.875rem; + color: #fff; +} +.topBar .calendar .wi-thermometer-exterior { + color: #00d6b2; +} +.topBar .calendar .wi-thermometer { + color: #f10202; +} +.topBar .calendar .wi-day-sunny, +.topBar .calendar .wi-day-windy { + color: #d0ff00; +} +.topBar .calendar .wi-cloud, +.topBar .calendar .wi-cloudy-gusts { + color: #9ea387; +} +.topBar .calendar .wi-rain, +.topBar .calendar .wi-storm-showers { + color: #00d6b2; + position: relative; + bottom: 0.125rem; +} +.topBar .calendar .wi-snow, +.topBar .calendar .wi-snow-wind { + color: #fff; + position: relative; + bottom: 0.125rem; +} +.topBar .calendar .atime { + margin-left: 1rem; +} +.topBar .calendar .infoTimer { + margin-right: 1rem; +} +.topBar .calendar .astro { + font-size: 0.8125rem; + margin-right: 0.25rem; +} +.topBar .planetWrap { + margin-left: 1rem; +} +.topBar .planetWrap .universe, +.topBar .planetWrap .simulation, +.topBar .planetWrap .pet { + border-left: 1px solid; + margin-left: 0.75rem; + padding-left: 0.75rem; +} +.topBar .planetWrap .pet { + cursor: pointer; +} +.topBar .flair { + display: inline-block; + text-align: left; +} +.topBar .flair svg { + position: relative; + top: 0.125rem; + left: 0.25rem; +} +.topBar .pet .black { + fill: #000000; + filter: drop-shadow(0px 0px 2px #fff); +} +.topBar .pet .black.stripe { + fill: url(#PetGradient); +} +.topBar .pet .black.stripe #PetGradient .stop1 { + stop-color: #000; +} +.topBar .pet .black.stripe #PetGradient .stop2 { + stop-color: #4e4e4e; +} +.topBar .pet .black.patched { + fill: url(#PetGradient); +} +.topBar .pet .black.patched #PetGradient .stop1 { + stop-color: #000; +} +.topBar .pet .black.patched #PetGradient .stop2 { + stop-color: #424242; +} +.topBar .pet .orange { + fill: #e25f08; + filter: drop-shadow(0px 0px 2px #000); +} +.topBar .pet .orange.stripe { + fill: url(#PetGradient); +} +.topBar .pet .orange.stripe #PetGradient .stop1 { + stop-color: #e25f08; +} +.topBar .pet .orange.stripe #PetGradient .stop2 { + stop-color: #ccb9ad; +} +.topBar .pet .gray { + fill: #575757; + filter: drop-shadow(0px 0px 2px #000); +} +.topBar .pet .gray.stripe { + fill: url(#PetGradient); +} +.topBar .pet .gray.stripe #PetGradient .stop1 { + stop-color: #575757; +} +.topBar .pet .gray.stripe #PetGradient .stop2 { + stop-color: #202020; +} +.topBar .pet .gray.patched { + fill: url(#PetGradient); +} +.topBar .pet .gray.patched #PetGradient .stop1 { + stop-color: #575757; +} +.topBar .pet .gray.patched #PetGradient .stop2 { + stop-color: #665237; +} +.topBar .pet .white { + fill: #f0efef; + filter: drop-shadow(0px 0px 2px #000); +} +.topBar .pet .white.stripe { + fill: url(#PetGradient); +} +.topBar .pet .white.stripe #PetGradient .stop1 { + stop-color: #f0efef; +} +.topBar .pet .white.stripe #PetGradient .stop2 { + stop-color: #f5dec4; +} +.topBar .pet .white.patched { + fill: url(#PetGradient); +} +.topBar .pet .white.patched #PetGradient .stop1 { + stop-color: #f0efef; +} +.topBar .pet .white.patched #PetGradient .stop2 { + stop-color: #b8ab9b; +} +.topBar .pet .cream { + fill: #bd8754; + filter: drop-shadow(0px 0px 2px #000); +} +.topBar .pet .cream.stripe { + fill: url(#PetGradient); +} +.topBar .pet .cream.stripe #PetGradient .stop1 { + stop-color: #bd8754; +} +.topBar .pet .cream.stripe #PetGradient .stop2 { + stop-color: #f5dec4; +} +.topBar .pet .brown { + fill: #996f48; + filter: drop-shadow(0px 0px 2px #000); +} +.topBar .pet .brown.patched { + fill: url(#PetGradient); +} +.topBar .pet .brown.patched #PetGradient .stop1 { + stop-color: #996f48; +} +.topBar .pet .brown.patched #PetGradient .stop2 { + stop-color: #af9a85; +} +.topBar .version { + margin-right: 1rem; +} +.promoBar { + bottom: 0; +} +.promoBar .left { + display: inline-block; + width: 15rem; + margin-left: 0.25rem; +} +.promoBar .right { + position: absolute; + display: inline-block; + text-align: right; + margin-right: 1rem; + right: 0; +} +.promoBar .right span { + margin: 0 0.5rem; +} +.promoBar .right .external-links li { + display: inline-block; +} +.promoBar .right .external-links li + li:before { + content: ' | '; +} +.arpaProject { + display: inline-block; + border: solid 0.0625rem; + padding: 0.5rem; + width: 20rem; + margin: 0 1rem 1rem 0; +} +.arpaProject .head { + margin-bottom: 0.25rem; + padding-bottom: 0.5rem; + border-bottom: solid 0.0625rem; +} +.arpaProject .head > span { + display: inline-block; + width: 40%; +} +.arpaProject .head > span:first-child { + display: inline-block; + width: 60%; +} +.arpaProject .head .rank { + text-align: right; +} +.arpaProject .head .pbar { + position: relative; + margin-top: 0.5rem; +} +.arpaProject .head .pbar .progress { + margin-bottom: 0; +} +.arpaProject .head .pbar .progress-value { + position: absolute; + display: block; + top: -0.1875rem; + left: 49%; +} +.arpaProject .buy { + text-align: center; +} +.arpaProject .buy .button { + height: 1.5rem; + width: 19%; + line-height: 0.75rem; +} +.arpaProject .buy :first-child { + width: 24%; +} +.ShipYardTab { + margin-left: 1rem; + display: flex; + flex-direction: column; + overflow-y: hidden; +} +.ShipYardTab .button { + height: 2rem; +} +.ShipYardTab .stats { + display: flex; +} +.ShipYardTab .stats > div { + margin-left: 0.5rem; +} +.ShipYardTab .registry { + line-height: 1.25rem; +} +.ShipYardTab .registry .nameplate { + display: inline-block; + width: 8rem; + height: 1.25rem; +} +.ShipYardTab .registry .nameplate input { + height: 1.25rem; +} +.ShipYardTab #shipYardCosts { + margin-left: 0.5rem; +} +.ShipYardTab .shipBayOptions .dropdown { + margin-left: 0.5rem; + margin-top: 0.25rem; +} +.ShipYardTab #shipList { + margin-top: 0.25rem; + flex: 1 1 0; + min-height: 0; + height: auto; + padding-bottom: 0.5rem; +} +.ShipYardTab #shipList .shipRow { + display: grid; + padding-top: 0.25rem; + margin-top: 0.25rem; + margin-left: 0.5rem; + border-top: 1px solid; + grid-template-columns: auto 10rem; +} +.ShipYardTab #shipList .shipRow .name { + display: inline-block; + min-width: 5rem; +} +.ShipYardTab #shipList .shipRow .row1, +.ShipYardTab #shipList .shipRow .row2, +.ShipYardTab #shipList .shipRow .row3 { + grid-column-start: 1; +} +.ShipYardTab #shipList .shipRow .location { + grid-column-start: 2; + grid-row-start: 1; + grid-row-end: 3; +} +.ShipYardTab #shipList .shipRow .pad { + margin: 0 0.5rem 0 0; +} +.ShipYardTab #shipList .compact button { + height: 1rem; +} +.ShipYardTab .assemble { + margin: 1rem 0 0 0.5rem; + line-height: 2rem; +} +.ShipYardTab .assemble > span { + margin-left: 1rem; +} +.ShipYardTab .assemble > span > label.checkbox { + margin-right: 0; + top: 0.25rem; +} +.ShipYardTab .solarMap { + float: right; + margin-right: 1rem; +} +.genome { + margin-bottom: 1rem; +} +.genome .progress { + margin-top: 0.25rem; + margin-bottom: 0.5rem; +} +.genome button { + margin-left: 0.5rem; +} +.genome button.seq { + margin-left: 0; +} +.geneticTraits .trait.major { + margin-top: 0.5rem; +} +.geneticTraits .trait .gene { + min-width: 5rem; + padding-bottom: 0.125rem; +} +.geneticTraits .trait.indent { + margin-left: 4.5rem; +} +.geneticTraits .traitListing { + display: flex; + flex-wrap: wrap; +} +.geneticTraits .traitListing > .traitRow { + width: 25rem; +} +.geneticTraits .traitRow > span { + vertical-align: middle; +} +.geneticTraits .traitRow .basic-button { + height: 100%; +} +.main > div.popper.wide.w22, +body .modal > div.popper.wide.w22 { + max-width: 22rem; +} +.main > div.popper.wide.w25, +body .modal > div.popper.wide.w25 { + max-width: 25rem; +} +.main > div.popper.wide.w30, +body .modal > div.popper.wide.w30 { + max-width: 30rem; +} +#trick6 { + width: 4rem; + text-align: center; +} +body.nuke { + color: #000; + transition: color 2s, text-shadow 3s; + text-shadow: 0px -2px 4px #fff, 0px -2px 10px #FF3, 0px -10px 20px #F90, 0px -20px 40px #C33; +} +div.nuke, +div.mininuke { + position: fixed; + width: 100%; + height: 100%; + z-index: 10; + top: 0; + left: 0; + transition: all 2s; + opacity: 0; +} +div.nuke.burn, +div.mininuke.burn { + opacity: 1; +} +div.nuke.burn::before, +div.mininuke.burn::before { + content: ""; + display: block; + width: 10px; + height: 10px; + position: absolute; + top: 60%; + left: 30%; + background: #000; + border-radius: 50%; +} +div.nuke.burn.b::before, +div.mininuke.burn.b::before { + transition: width 3s, height 3s, top 3s, left 3s; + background: #000; + width: 180%; + height: 180%; + top: -30%; + left: -30%; + box-shadow: 0px -2px 4px #fff, 0px -2px 10px #FF3, 0px -10px 20px #F90, 0px -20px 40px #C33, inset 0px -20px 40px #fff, inset 0px -20px 100px #FF3, inset 0px -40px 200px #F90, inset 0px -80px 400px #C33; +} +div.nuke.burn { + background: #000; +} +div.mininuke { + position: absolute; + overflow: hidden; +} +div.mininuke.burn.b::before { + transition: width 2s, height 2s, top 2s, left 2s; +} +div.mininuke.burn.c::before { + visibility: hidden; + opacity: 0; + transition: visibility 0s 2s, opacity 2s linear; +} +div.bigbang { + position: fixed; + width: 100%; + height: 100%; + z-index: 10; + top: 0; + left: 0; + transition: all 1s; + opacity: 0; +} +div.bigbang.burn { + opacity: 1; +} +div.bigbang.burn::before { + content: ""; + display: block; + width: 10px; + height: 10px; + position: absolute; + top: 50%; + left: 50%; + background: #fff; + border-radius: 50%; +} +div.bigbang.burn.b::before { + transition: width 2s, height 2s, top 2s, left 2s; + background: #fff; + width: 180%; + height: 180%; + top: -30%; + left: -30%; + box-shadow: 0px -2px 4px #fff, 0px -2px 10px #FF3, 0px -10px 20px #F90, 0px -20px 40px #C33, inset 0px -20px 40px #fff, inset 0px -20px 100px #FF3, inset 0px -40px 200px #F90, inset 0px -80px 400px #C33; +} +div.bigbang.burn.c::before { + transition: width 2s, height 2s, top 2s, left 2s, background-color 2s; + background: #000; + width: 180%; + height: 180%; + top: -30%; + left: -30%; + box-shadow: 0px -2px 4px #000, 0px -2px 10px #000, 0px -10px 20px #000, 0px -20px 40px #000, inset 0px -20px 40px #000, inset 0px -20px 100px #000, inset 0px -40px 200px #000, inset 0px -80px 400px #000; +} +.earthquake { + animation: 3.8s shake infinite alternate; +} +@keyframes shake { + 0% { + transform: skewX(-1deg); + } + 5% { + transform: skewX(1deg); + } + 10% { + transform: skewX(-1deg); + } + 15% { + transform: skewX(1deg); + } + 20% { + transform: skewX(0deg); + } + 100% { + transform: skewX(0deg); + } + 10%, + 90% { + transform: translate3d(-1px, 0, 0); + } + 20%, + 80% { + transform: translate3d(2px, 0, 0); + } + 30%, + 50%, + 70% { + transform: translate3d(-4px, 0, 0); + } + 40%, + 60% { + transform: translate3d(4px, 0, 0); + } +} +.celestialLab .fields { + margin-top: 0.5rem; +} +.celestialLab .fields .name { + display: inline-block; + width: 10rem; + margin-right: 1rem; +} +.celestialLab .fields .entity { + display: inline-block; + width: 20rem; + margin-right: 1rem; +} +.celestialLab .fields .control { + margin: 0.25rem 0; +} +.celestialLab .fields .help { + margin-top: 0; + position: absolute; + right: 0.25rem; + top: -1rem; +} +.celestialLab .sequence { + display: flex; + margin-top: 0.5rem; +} +.celestialLab .sequence .genus_selection { + width: 10rem; +} +.celestialLab .sequence .genus_selection section { + margin-top: 0.5rem; +} +.celestialLab .sequence .genus_selection button { + padding: 1rem 0.5rem; +} +.celestialLab .sequence .trait_selection { + margin-top: 0.5rem; + display: flex; + flex-wrap: wrap; +} +.celestialLab .sequence .trait_selection > div { + width: 11.5rem; +} +.celestialLab .sequence .trait_selection.summary > div { + width: 23rem; +} +.celestialLab .sequence .trait_selection.summary .field { + display: flex; + justify-content: space-between; + padding-right: 0.5rem; +} +.celestialLab .sequence .trait_selection.summary .field .rc { + display: inline-block; + min-width: 7rem; + text-align: center; +} +.celestialLab .sequence .planet_selection { + margin-left: 2rem; +} +.celestialLab .sequence .planet_selection section { + margin-top: 0.5rem; +} +.celestialLab .sequence .planet_selection section > div { + width: 11.5rem; +} +.celestialLab .sequence .res_selection { + margin-left: 2rem; +} +.celestialLab .sequence .res_selection section { + margin-top: 0.5rem; +} +.celestialLab .sequence .res_selection section > div { + display: flex; + justify-content: space-between; +} +.celestialLab .sequence .res_selection section > div > div:first-child { + margin-right: 0.25rem; +} +.celestialLab .sequence > div .field:not(:last-child) { + margin-bottom: 0; +} +.celestialLab .buttons { + display: flex; + justify-content: space-evenly; +} +.celestialLab .create { + margin-top: 1rem; + text-align: center; +} +.celestialLab .genus, +.celestialLab .resetLab { + margin-bottom: 0.75rem; + text-align: center; +} +.celestialLab .genus > button, +.celestialLab .resetLab > button { + margin-top: 0.25rem; + width: 8.5rem; +} +.celestialLab .b-tabs .tabs { + overflow-x: visible; +} +.celestialLab .b-tabs .tabs ul { + flex-wrap: nowrap; +} +.celestialLab .b-tabs .tabs li a { + padding-left: 0.75em; + padding-right: 0.75em; +} +#main.custom-lab-active > .columns > .leftColumn { + display: none !important; +} +#main.custom-lab-active > .columns > #mainColumn { + width: 78% !important; +} +.modalBody .genus_selection, +.modalBody .fanatic { + display: flex; + flex-wrap: wrap; +} +.modalBody .genus_selection > .field, +.modalBody .fanatic > .field { + margin-right: 1rem; + margin-bottom: 0.25rem; +} +.listqueuestyle.bldQueue li, +.listqueuestyle.bldQueue.right li, +.numberedlistqueuestyle.bldQueue li, +.numberedlistqueuestyle.bldQueue.right li, +.bulletlistqueuestyle.bldQueue li, +.bulletlistqueuestyle.bldQueue.right li { + margin: 0.25rem 0; + display: list-item; +} +.listqueuestyle.bldQueue li:not(:last-child) .queued:after, +.listqueuestyle.bldQueue.right li:not(:last-child) .queued:after, +.numberedlistqueuestyle.bldQueue li:not(:last-child) .queued:after, +.numberedlistqueuestyle.bldQueue.right li:not(:last-child) .queued:after, +.bulletlistqueuestyle.bldQueue li:not(:last-child) .queued:after, +.bulletlistqueuestyle.bldQueue.right li:not(:last-child) .queued:after { + content: ""; +} +.numberedlistqueuestyle.bldQueue li, +.numberedlistqueuestyle.bldQueue.right li { + list-style-type: numeric; + list-style-position: inside; +} +.bulletlistqueuestyle.bldQueue li, +.bulletlistqueuestyle.bldQueue.right li { + list-style-type: disc; + list-style-position: inside; +} +.sticky { + position: sticky; + top: 1rem; + bottom: 0; + height: 100vh; + overflow-y: auto; + overflow-x: hidden; +} +@supports (scrollbar-width: auto) { + .sticky { + scrollbar-width: thin; + } +} +.vscroll { + overflow-x: hidden; + overflow-y: auto; + top: 1rem; + bottom: 0; +} +@supports (scrollbar-width: auto) { + .vscroll { + scrollbar-width: thin; + } +} +.hscroll { + overflow-x: auto; + overflow-y: hidden; + white-space: nowrap; +} +@supports (scrollbar-width: auto) { + .hscroll { + scrollbar-width: thin; + } +} +@supports (scrollbar-width: auto) { + .resTabs > section, + .resTabs > .tabs, + .bldQueue { + scrollbar-width: thin; + } +} +.modal .modal-content { + width: initial; + min-width: 42rem; +} +.modal .modal-content .fuels { + margin-top: 0.5rem; +} +.modal .modal-content .avail span { + margin: 0 2.5rem 0 2.125rem; +} +.popper { + pointer-events: none; +} +.popper .touchButton { + pointer-events: all; + height: 1.25rem; + margin-bottom: 0.25rem; +} +.popper .soldierEvaluation > div { + display: flex; + justify-content: space-between; +} +.popper .soldierEvaluation > div :first-child { + margin-right: 1rem; +} +.popper .soldierEvaluation > div.head { + display: block; + text-align: center; +} +#powerStatus { + white-space: nowrap; +} +.pyro > .before, +.pyro > .after { + position: absolute; + display: block; + width: 5px; + height: 5px; + border-radius: 50%; + box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff; + -moz-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + -webkit-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + -o-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + -ms-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; +} +.pyro > .after { + -moz-animation-delay: 1.25s, 1.25s, 1.25s; + -webkit-animation-delay: 1.25s, 1.25s, 1.25s; + -o-animation-delay: 1.25s, 1.25s, 1.25s; + -ms-animation-delay: 1.25s, 1.25s, 1.25s; + animation-delay: 1.25s, 1.25s, 1.25s; + -moz-animation-duration: 1.25s, 1.25s, 6.25s; + -webkit-animation-duration: 1.25s, 1.25s, 6.25s; + -o-animation-duration: 1.25s, 1.25s, 6.25s; + -ms-animation-duration: 1.25s, 1.25s, 6.25s; + animation-duration: 1.25s, 1.25s, 6.25s; +} +@keyframes bang { + to { + box-shadow: -154px -131.66666667px #00ffcc, -243px -325.66666667px #ff0d00, 71px -294.66666667px #77ff00, 154px 7.33333333px #00ff73, 159px 65.33333333px #ff00f7, 191px -207.66666667px #ffd000, 123px -232.66666667px #0059ff, -96px 18.33333333px #2600ff, 93px 76.33333333px #00eaff, -94px -388.66666667px #00ff59, -92px -107.66666667px #ff8400, -7px -20.66666667px #3c00ff, 37px -197.66666667px #ea00ff, 249px -148.66666667px #ff0022, -112px -249.66666667px #ff0040, -191px -374.66666667px #ff7300, 249px -12.66666667px #3300ff, -238px -366.66666667px #00fffb, -76px -186.66666667px #00ffe6, 242px 60.33333333px #00d5ff, -69px -217.66666667px #0095ff, 222px -155.66666667px #0037ff, 164px -410.66666667px #ff004d, -228px 2.33333333px #ff9d00, -201px -352.66666667px #ff00dd, 75px -378.66666667px #00ff6a, -141px -375.66666667px #ff0077, -75px -362.66666667px #8000ff, -162px -287.66666667px #00ff88, -152px -260.66666667px #00b3ff, 180px -205.66666667px #005eff, -110px -16.66666667px #ff00d5, -128px -298.66666667px #00ffc4, 141px -197.66666667px #00f7ff, 73px -109.66666667px #ff6600, 164px -347.66666667px #00c8ff, -178px -307.66666667px #0026ff, 133px 0.33333333px #bbff00, 13px 37.33333333px #7bff00, -168px -198.66666667px #00ddff, -155px -70.66666667px #8800ff, 167px -111.66666667px #ffc800, 98px -353.66666667px #00fffb, 65px -235.66666667px #ff0059, 186px -122.66666667px #ff0009, -124px -385.66666667px #ff007b, 6px -251.66666667px #ff00bf, 66px -309.66666667px #0dff00, 169px -119.66666667px #ff4800, -232px -137.66666667px #5eff00, 171px -173.66666667px #ff0055; + } +} +@keyframes gravity { + to { + -moz-transform: translateY(200px); + -webkit-transform: translateY(200px); + -o-transform: translateY(200px); + -ms-transform: translateY(200px); + transform: translateY(200px); + opacity: 0; + } +} +@keyframes position { + 0%, + 19.9% { + margin-top: 10%; + margin-left: 40%; + } + 20%, + 39.9% { + margin-top: 40%; + margin-left: 30%; + } + 40%, + 59.9% { + margin-top: 20%; + margin-left: 70%; + } + 60%, + 79.9% { + margin-top: 30%; + margin-left: 20%; + } + 80%, + 99.9% { + margin-top: 30%; + margin-left: 80%; + } +} +.noise { + position: absolute; + top: -500px; + right: -500px; + bottom: -500px; + left: -500px; + background: transparent url(/lib/noise.png) 0 0; + background-size: 320px 320px; + opacity: 0.35; + animation: noise 1s steps(8, end) infinite both; +} +.noise-wrapper { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 1; + overflow: hidden; + z-index: 10; +} +.noise-wrapper:after { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: radial-gradient(ellipse at center, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.75) 100%); +} +@keyframes noise { + 0% { + transform: translateX(0px, 0px); + } + 10% { + transform: translate(-100px, 100px); + } + 20% { + transform: translate(150px, -100px); + } + 30% { + transform: translate(-100px, 100px); + } + 40% { + transform: translate(100px, -150px); + } + 50% { + transform: translate(-100px, 200px); + } + 60% { + transform: translate(-200px, -100px); + } + 70% { + transform: translateY(50px, 100px); + } + 80% { + transform: translate(100px, -150px); + } + 90% { + transform: translate(0px, 200px); + } + 100% { + transform: translate(-100px, 100px); + } +} +.signal-lost-top { + width: 100%; + height: 0%; + opacity: 0.9; + background: black; + position: absolute; + top: 0; + z-index: 100; +} +.signal-lost-bottom { + width: 100%; + height: 0%; + opacity: 0.9; + background: black; + position: absolute; + bottom: 0; + z-index: 100; +} +.refresh { + position: relative; + display: inline-block; + height: 1rem; + width: 1rem; + font-size: 1rem; + cursor: pointer; + margin-left: 0.5rem; + top: 0.2rem; +} +.font-overlay { + z-index: 999; + position: absolute; + top: 1rem; +} +#mobileNav { + display: none; +} +@media only screen and (max-width: 48rem) { + html { + font-size: clamp(12px, 4.2vw, 16px) !important; + -moz-text-size-adjust: none; + -webkit-text-size-adjust: none; + text-size-adjust: none; + } + .promoBar { + bottom: 0; + } + #mobileNav { + display: flex; + position: fixed; + bottom: 1.2rem; + left: 0; + right: 0; + z-index: 30; + height: 2.4rem; + border-top: 1px solid; + } + #mobileNav .mobile-nav-btn { + flex: 1; + cursor: pointer; + font-size: 1rem; + font-weight: 800; + letter-spacing: 0.04em; + border: none; + border-top: 2px solid transparent; + background: transparent; + color: inherit; + opacity: 0.75; + transition: opacity 0.15s; + text-shadow: 0 0 5px rgba(0, 0, 0, 0.7); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + #mobileNav .mobile-nav-btn.is-active { + opacity: 1; + border-top-color: currentColor; + } + .main { + margin: 0.75rem; + overflow-y: unset; + } + .main .content .settings { + margin-left: 0; + } + .main .content .tabs ul { + width: calc(100vw - 2rem); + } + .main .tabs ul { + margin-left: 0; + } + .main .race { + padding-top: 0.75rem; + } + .main .resources { + margin-top: -0.75rem; + height: calc(100vh - 6.9rem); + padding-top: 0.75rem; + padding-bottom: 0.5rem; + } + .main .resources .vscroll { + top: 0.5rem; + } + .main .resTabs > section { + top: 0.75rem; + height: calc(100vh - 10.1rem); + } + .main .resTabs > .tab-content { + padding-bottom: 0.5rem !important; + } + .main .civics { + padding: 0; + } + .main #mainTabs > .tab-content #settings { + padding-bottom: 1rem !important; + } + #r_civics nav.tabs { + overflow-x: clip; + } + .main > .columns { + display: block; + } + .main > .columns > :first-child { + min-width: unset; + } + .leftColumn, + #mainColumn, + #queueColumn { + width: 100% !important; + min-width: unset !important; + } + .b-tabs .tab-content > .tab-item { + padding-left: 0 !important; + padding-right: 0 !important; + } + #mainTabs > .tab-content > .tab-item { + padding-top: 0.25rem !important; + } + .resTabs { + margin-top: -0.25rem; + } + .b-tabs .tabs ul { + flex-wrap: nowrap; + } + .b-tabs .tabs li, + .b-tabs .tabs a { + white-space: nowrap; + } + .bldQueue, + .msgQueue { + resize: none; + } + .leftColumn { + display: block; + height: auto; + padding-bottom: 3.7rem; + } + .leftColumn #sideQueue { + display: none; + } + #mainColumn, + #queueColumn { + display: none; + } + #main.mobile-panel-game .leftColumn { + display: none; + } + #main.mobile-panel-game #mainColumn { + display: block; + padding-bottom: 3.7rem; + } + #main.mobile-panel-queue .leftColumn { + display: block; + height: auto; + padding-top: 0.75rem; + padding-bottom: 3.7rem; + } + #main.mobile-panel-queue .leftColumn #race, + #main.mobile-panel-queue .leftColumn #resources { + display: none; + } + #main.mobile-panel-queue .leftColumn #sideQueue { + display: block; + } + #main.mobile-panel-queue .leftColumn #sideQueue #msgQueue { + height: auto; + overflow-y: visible; + } + #main.mobile-panel-queue #mainColumn { + display: none; + } + .resources { + height: calc(100svh - 8rem); + } +} diff --git a/evolve/evolve-unminified.css b/evolve/evolve-unminified.css new file mode 100644 index 000000000..39d582f66 --- /dev/null +++ b/evolve/evolve-unminified.css @@ -0,0 +1,5649 @@ +/* +Searchable terms: +[TYPE] [Search Term] +Themes ------> Dark theme + Light theme + Night theme + Red Green CB theme + Dark Night theme + Orange Soda Theme + Dracula Theme +Theme colors -> Theme colors +Components --> .has-text-xxx + .popper + .fool + .tabs + .button + .basic-button + .Label + .checkbox + .dropdown + .b-tooltip + Trade + UI Bars + .meter + .main + .fort + .market-item + .modalBox + .industry + Stars + -webkit-scrollbar + .pop-desc +Misc ---------> Main template + Base CSS +*/ +:root { + --theme-html-background: #fff; + --theme-primary-border: #000; + --theme-secondary-border: #000; + --theme-primary-color: #000; + --theme-secondary-color: #000; + --theme-link: #000; + --theme-link-hover: #fff; + --theme-enabled: #fff; + --theme-disabled: #fff; + --theme-has-text-advanced: #000; + --theme-has-text-alert: #000; + --theme-has-text-caution: #000; + --theme-has-text-danger: #000; + --theme-has-text-fade: #000; + --theme-has-text-flair: #000; + --theme-has-text-label: #000; + --theme-has-text-special: #000; + --theme-has-text-info: #000; + --theme-has-text-success: #000; + --theme-has-text-warning: #000; + --theme-popper: #fff; + --theme-popper-has-text-label: #fff; + --theme-popper-has-text-success: #fff; + --theme-popper-has-text-warning: #fff; + --theme-modal-child-popper-background: #fff; + --theme-modal-child-popper-border: #fff; + /* AFP 2021 + // .fool + --theme-fool-has-text-danger: #fff; + --theme-fool-has-text-success: #fff; + --theme-fool-popper-has-text-danger: #fff; + --theme-fool-span-on: #fff; + --theme-fool-span-off: #fff; + */ + --theme-tabs-li-is-active-link-border: #fff; + --theme-tabs-li-is-active-link: #fff; + --theme-button-background: #fff; + --theme-button: #fff; + --theme-button-hover-background: #fff; + --theme-button-hover: #fff; + --theme-button-focus-border: #fff; + --theme-basic-button-border-hover-background: #fff; + --theme-basic-button-border-hover: #fff; + --theme-label: #fff; + --theme-checkbox-hover: #fff; + --theme-dropdown-content-background: #fff; + --theme-b-tooltip-accent: #fff; + --theme-b-tooltip-is-primary-background: #fff; + --theme-b-tooltip-is-primary-border: #fff; + --theme-b-tooltip-is-primary: #fff; + --theme-bars-background: #fff; + --theme-meter-low: #fff; + --theme-meter-neutral: #fff; + --theme-meter-high: #fff; + --theme-div-special-border: #fff; + --theme-div-special-gear-fill: #fff; + --theme-div-special-hover-border: #fff; + --theme-div-special-hover-gear-fill: #fff; + --theme-span-on-border: #fff; + --theme-span-on: #fff; + --theme-span-on-warn: #fff; + --theme-span-off-border: #fff; + --theme-span-off: #fff; + --theme-span-on-off-hover-border: #fff; + --theme-hl-button-border: #fff; + --theme-link-button-background: #fff; + --theme-special-on-off-border: #fff; + --theme-oldTech: #fff; + --theme-cnam-aTitle: #fff; + --theme-fort-patrol-check-background: #fff; + --theme-market-item-background: #fff; + --theme-market-item-order-hover-background: #fff; + --theme-market-item-order-hover-border: #fff; + --theme-resource-overlay-color: #fff; + --theme-resource-overlay-color-alt: #fff; + --theme-modalBox-background: #fff; + --theme-star-2-fill: #fff; + --theme-star-3-fill: #fff; + --theme-star-4-fill: #fff; + --theme-star-5-fill: #fff; + --theme-webkit-scrollbar-background: #fff; + --theme-webkit-scrollbar-thumb-background: #fff; +} +#city-gift .hgift { + background-color: initial; + background-image: repeating-linear-gradient(90deg, firebrick, firebrick 10px, beige 0, beige 12px, forestgreen 0, forestgreen 18px, gold 0, gold 20px, crimson 0, crimson 30px), repeating-linear-gradient(firebrick, firebrick 10px, beige 0, beige 12px, forestgreen 0, forestgreen 18px, gold 0, gold 20px, crimson 0, crimson 30px); + background-blend-mode: multiply; +} +#city-gift .hgift > span { + color: #ebdbb2; + text-shadow: 2px 2px #000; +} +html { + overflow-y: hidden; + box-sizing: border-box; + font-size: 16px; +} +html.theme { + /* AFP 2021 + // .fool + @fool-has-text-danger: var(--theme-fool-has-text-danger); + @fool-has-text-success: var(--theme-fool-has-text-success); + @fool-popper-has-text-danger: var(--theme-fool-popper-has-text-danger); + @fool-span-on: var(--theme-fool-span-on); + @fool-span-off: var(--theme-fool-span-off); + */ + background-color: var(--theme-html-background); + /* AFP 2020 + // .fool + .fool { + .has-text-advanced { + color: @has-text-caution; + } + + .has-text-caution { + color: @has-text-advanced; + } + + .has-text-danger { + color: @fool-has-text-danger; + } + + .has-text-success { + color: @fool-has-text-success; + } + + .popper { + .has-text-success { + color: @fool-has-text-success; + } + + .has-text-danger { + color: @fool-popper-has-text-danger; + } + } + + .main { + .content { + .action { + span.on { + color: @fool-span-on; + } + + span.off { + color: @fool-span-off; + } + } + } + } + } + */ +} +html.theme body { + color: var(--theme-primary-color); +} +html.theme h2, +html.theme h3 { + color: var(--theme-primary-color); +} +html.theme a { + color: var(--theme-link); +} +html.theme .button.has-text-advanced, +html.theme .has-text-advanced { + color: var(--theme-has-text-advanced); +} +html.theme .button.has-text-alert, +html.theme .has-text-alert { + color: var(--theme-has-text-alert); +} +html.theme .button.has-text-caution, +html.theme .has-text-caution { + color: var(--theme-has-text-caution); +} +html.theme .button.has-text-danger, +html.theme .has-text-danger { + color: var(--theme-has-text-danger); +} +html.theme .has-text-fade { + color: var(--theme-has-text-fade); +} +html.theme .has-text-flair { + color: var(--theme-has-text-flair); +} +html.theme .button.has-text-info, +html.theme .has-text-info { + color: var(--theme-has-text-info); +} +html.theme .has-text-label { + color: var(--theme-has-text-label); +} +html.theme .button.has-text-special, +html.theme .has-text-special { + color: var(--theme-has-text-special); +} +html.theme .button.has-text-success, +html.theme .has-text-success { + color: var(--theme-has-text-success); +} +html.theme .button.has-text-warning, +html.theme .has-text-warning { + color: var(--theme-has-text-warning); +} +html.theme .has-text-danger-pulse { + color: var(--theme-has-text-warning); + -webkit-animation: color-change 5s infinite; + -moz-animation: color-change 5s infinite; + -o-animation: color-change 5s infinite; + -ms-animation: color-change 5s infinite; + animation: color-change 5s infinite; +} +@keyframes color-change { + 0% { + color: var(--theme-has-text-warning); + } + 50% { + color: var(--theme-has-text-danger); + } + 100% { + color: var(--theme-has-text-warning); + } +} +html.theme .challenge .simButton { + border-color: var(--theme-has-text-success); +} +html.theme .challenge .configList { + display: flex; + flex-flow: wrap; + justify-content: space-around; +} +html.theme .challenge .configList > div { + margin: 0 0.25rem; + width: 10rem; +} +html.theme .challenge .configList > div > input { + height: 1.25rem; + text-align: center; + padding: 0; +} +html.theme .popper .has-text-label { + color: var(--theme-popper-has-text-label); +} +html.theme .popper .has-text-success { + color: var(--theme-popper-has-text-success); +} +html.theme .popper .has-text-warning { + color: var(--theme-popper-has-text-warning); +} +html.theme .popper .divide-line { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .main > div.popper, +html.theme body .modal > div.popper { + background-color: var(--theme-modal-child-popper-background); + border: 0.0625rem solid var(--theme-modal-child-popper-border); + color: var(--theme-popper); +} +html.theme .main > div.popper > div, +html.theme body .modal > div.popper > div { + border-top: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme .main > div.popper > div:first-child, +html.theme body .modal > div.popper > div:first-child { + border-top: none; +} +html.theme .main > div.popper .has-text-dark, +html.theme body .modal > div.popper .has-text-dark { + color: var(--theme-popper); +} +html.theme .main > div.popper .split, +html.theme body .modal > div.popper .split { + display: flex; +} +html.theme .main > div.popper .split > div, +html.theme body .modal > div.popper .split > div { + flex-wrap: nowrap; +} +html.theme .main > div.popper .split > div:nth-of-type(2), +html.theme body .modal > div.popper .split > div:nth-of-type(2) { + border-left: solid 0.0625rem var(--theme-modal-child-popper-border); + margin-left: 0.375rem; + padding-left: 0.375rem; +} +html.theme .shipPopper .divider { + border-bottom: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme .sliderbar > span { + position: relative; + display: inline-block; + width: 5%; + bottom: 1.125rem; + margin: 0 0.375rem; +} +html.theme .sliderbar .b-slider { + display: inline-block; + width: 80%; +} +html.theme .sliderbar .b-slider .b-slider-track { + height: 1rem; +} +html.theme .sliderbar .is-primary .b-slider-fill { + background: var(--theme-has-text-success); +} +html.theme .sliderbar.thin > span { + bottom: 0.625rem; +} +html.theme .sliderbar.thin .b-slider { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} +html.theme .tabs a, +html.theme .msgQueueFilters span { + color: var(--theme-primary-color); +} +html.theme .tabs li.is-active a, +html.theme .msgQueueFilters span.is-active { + border-bottom-color: var(--theme-tabs-li-is-active-link-border); + color: var(--theme-tabs-li-is-active-link); +} +html.theme .tabs a:hover, +html.theme .msgQueueFilters span:hover { + border-bottom-color: var(--theme-link-hover); + color: var(--theme-link-hover); +} +html.theme .tabs > ul { + border-bottom: solid 0.0625rem; +} +html.theme .button { + background-color: var(--theme-button-background); + color: var(--theme-button); +} +html.theme .button.is-light { + background-color: var(--theme-primary-color); +} +html.theme .button.is-hovered, +html.theme .button:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme .button.is-focused, +html.theme .button:focus { + border-color: var(--theme-button-focus-border); +} +html.theme .basic-button { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme .basic-button:hover { + border: var(--theme-basic-button-border-hover) solid 0.0625rem; + background-color: var(--theme-basic-button-border-hover-background); +} +html.theme .text-button:hover { + cursor: pointer; + color: var(--theme-link-hover); + text-decoration: underline; +} +html.theme .label { + color: var(--theme-label); +} +html.theme .checkbox:hover, +html.theme .radio:hover { + color: var(--theme-checkbox-hover); +} +html.theme .dropdown-content { + background-color: var(--theme-dropdown-content-background); +} +html.theme .b-tooltip.is-right:before { + border-right: 5px solid var(--theme-b-tooltip-accent); +} +html.theme .b-tooltip.is-left:before { + border-left: 5px solid var(--theme-b-tooltip-accent); +} +html.theme .b-tooltip.is-bottom:before { + border-bottom: 5px solid var(--theme-b-tooltip-accent); +} +html.theme .b-tooltip.is-primary .tooltip-content { + background: var(--theme-b-tooltip-is-primary-background); + border: 0.0625rem solid var(--theme-b-tooltip-is-primary-border); + color: var(--theme-b-tooltip-is-primary); +} +html.theme .add, +html.theme .sub { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme .add:hover, +html.theme .sub:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme .current { + border-top: var(--theme-primary-border) solid 0.0625rem; + border-bottom: var(--theme-primary-border) solid 0.0625rem; +} +html.theme .current.infoOnly { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme .topBar, +html.theme .promoBar, +html.theme #mobileNav { + background-color: var(--theme-bars-background); +} +html.theme .play { + display: inline-block; + position: relative; + cursor: pointer; + bottom: 0.125rem; + width: 0; + height: 0; + border-top: 0.25rem solid transparent; + border-left: 0.375rem solid var(--theme-has-text-success); + border-bottom: 0.25rem solid transparent; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme .pause { + display: inline-block; + position: relative; + cursor: pointer; + box-sizing: content-box; + bottom: 0.0625rem; + width: 0.125rem; + height: 0.625rem; + border-right: 0.125rem solid var(--theme-has-text-danger); + border-left: 0.125rem solid var(--theme-has-text-danger); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme .meter.low { + color: var(--theme-meter-low); +} +html.theme .meter.neutral { + color: var(--theme-meter-neutral); +} +html.theme .meter.high { + color: var(--theme-meter-high); +} +html.theme .buildList .hl-ca { + color: var(--theme-enabled); +} +html.theme .buildList .hl-cna { + color: var(--theme-disabled); +} +html.theme .msgQueue span.special .gear, +html.theme .graphContainer span.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme .msgQueue span.special:hover .gear, +html.theme .graphContainer span.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme .main .content .action a.button.hl-ca .aTitle, +html.theme .modal .action a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme .main .content .action a.button.hl-cna .aTitle, +html.theme .modal .action a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme .main .content .action a.button span.count, +html.theme .modal .action a.button span.count { + background: var(--theme-html-background); +} +html.theme .main .content .action div.special, +html.theme .modal .action div.special { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-div-special-border); +} +html.theme .main .content .action div.special .gear, +html.theme .modal .action div.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme .main .content .action div.special:hover, +html.theme .modal .action div.special:hover { + border: 0.0625rem solid var(--theme-div-special-hover-border); +} +html.theme .main .content .action div.special:hover .gear, +html.theme .modal .action div.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme .main .content .action span.on, +html.theme .modal .action span.on { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-on-border); + color: var(--theme-span-on); +} +html.theme .main .content .action span.on.warn, +html.theme .main .content .action span.on.altwarn, +html.theme .modal .action span.on.warn, +html.theme .modal .action span.on.altwarn { + color: var(--theme-span-on-warn); +} +html.theme .main .content .action span.off, +html.theme .modal .action span.off { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-off-border); + color: var(--theme-span-off); +} +html.theme .main .content .action span.on:hover, +html.theme .main .content .action span.off:hover, +html.theme .modal .action span.on:hover, +html.theme .modal .action span.off:hover { + border: 0.0625rem solid var(--theme-span-on-off-hover-border); +} +html.theme .main .content .action.hl .button, +html.theme .modal .action.hl .button { + border: solid 1px var(--theme-hl-button-border); +} +html.theme .main .content .action.cna a.button, +html.theme .modal .action.cna a.button { + background: var(--theme-link-button-background); +} +html.theme .main .content .action.cna a.button.hl-ca .aTitle, +html.theme .modal .action.cna a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme .main .content .action.cna a.button.hl-cna .aTitle, +html.theme .modal .action.cna a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme .main .content .action.cna .special, +html.theme .main .content .action.cna .on, +html.theme .main .content .action.cna .off, +html.theme .modal .action.cna .special, +html.theme .modal .action.cna .on, +html.theme .modal .action.cna .off { + border-color: var(--theme-special-on-off-border); +} +html.theme .main .content .action.cna .oldTech span.aTitle, +html.theme .modal .action.cna .oldTech span.aTitle { + color: var(--theme-oldTech); +} +html.theme .main .content .action.cnam span.aTitle, +html.theme .modal .action.cnam span.aTitle { + color: var(--theme-cnam-aTitle); +} +html.theme .main .content .enemyFortress { + background-color: var(--theme-button-background); +} +html.theme .main .content .divider h2 { + background: var(--theme-html-background); +} +html.theme .main .content .green, +html.theme .main .content .synth { + box-shadow: 0 0 6px var(--theme-has-text-success); +} +html.theme .main .content .green > span, +html.theme .main .content .synth > span { + text-shadow: 1px 1px var(--theme-has-text-success); +} +html.theme .main .content .red { + box-shadow: 0 0 6px var(--theme-has-text-danger); +} +html.theme .main .content .red > span { + text-shadow: 1px 1px var(--theme-has-text-danger); +} +html.theme .main .content .yellow { + box-shadow: 0 0 6px var(--theme-has-text-warning); +} +html.theme .main .content .yellow > span { + text-shadow: 1px 1px var(--theme-has-text-warning); +} +html.theme .main .content .orange { + box-shadow: 0 0 6px var(--theme-has-text-caution); +} +html.theme .main .content .orange > span { + text-shadow: 1px 1px var(--theme-has-text-caution); +} +html.theme .main .content .purple { + box-shadow: 0 0 6px var(--theme-has-text-special); +} +html.theme .main .content .purple > span { + text-shadow: 1px 1px var(--theme-has-text-special); +} +html.theme .main .content .blue, +html.theme .main .content .precog { + box-shadow: 0 0 6px var(--theme-has-text-info); +} +html.theme .main .content .blue > span, +html.theme .main .content .precog > span { + text-shadow: 1px 1px var(--theme-has-text-info); +} +html.theme .main .content .cna .precog > span { + text-shadow: none; +} +html.theme .main .government .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme .main .garrison .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme .main .market-header { + border-bottom: var(--theme-secondary-border) solid 1px; +} +html.theme .main .galaxyTrade { + border-top: var(--theme-secondary-border) solid 1px; +} +html.theme .powerGrid { + display: flex; + flex-wrap: wrap; + margin-left: 1rem; +} +html.theme .powerGrid .circuit { + min-width: 18.5rem; + cursor: pointer; +} +html.theme .powerGrid .circuit.inactive { + display: none; +} +html.theme .powerGrid .circuit > span { + display: inline-block; +} +html.theme .powerGrid .circuit > span:first-child { + width: 1.5rem; +} +html.theme .powerGrid .circuit .struct { + width: 12rem; +} +html.theme .powerGrid .circuit .off, +html.theme .powerGrid .circuit .on { + min-width: 2rem; + text-align: center; +} +html.theme .powerGrid .circuit .off { + color: var(--theme-has-text-danger); +} +html.theme .powerGrid .circuit .on { + color: var(--theme-has-text-success); +} +html.theme .gridHeader { + border-top: var(--theme-secondary-border) solid 0.0625rem; + margin: 0.25rem 0 0.25rem 1rem; + padding-top: 0.25rem; +} +html.theme .powerGridHead { + display: flex; + justify-content: space-between; +} +html.theme .powerGridHeader { + margin-left: 1rem; + margin-bottom: 0.5rem; +} +html.theme .resetPowerGrid { + margin-left: 1rem; + margin-top: 0.75rem; +} +html.theme .resetPowerGrid .button { + height: 1.5rem; +} +html.theme .fort .patrol .check { + background-color: var(--theme-fort-patrol-check-background); +} +html.theme .market-item .order { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme .market-item .order:hover { + border: var(--theme-market-item-order-hover-border) solid 0.0625rem; + background-color: var(--theme-market-item-order-hover-background); +} +html.theme .market-item.prime, +html.theme .resource.prime { + background-color: transparent; +} +html.theme .market-item.alt, +html.theme .resource.alt { + background-color: var(--theme-market-item-background); +} +html.theme .market-item.showBar.prime, +html.theme .resource.showBar.prime { + background: linear-gradient(to right, transparent 0%, transparent var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme .market-item.showBar.alt, +html.theme .resource.showBar.alt { + background: linear-gradient(to right, var(--theme-market-item-background) 0%, var(--theme-market-item-background) var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme .resource .bar { + cursor: pointer; +} +html.theme .inactive-row { + background-color: var(--theme-market-item-background); +} +html.theme .modal .actionSpace { + background-color: var(--theme-html-background); +} +html.theme .modal-card-head, +html.theme .modal-card-body, +html.theme .modal-card-foot { + background-color: var(--theme-modalBox-background); +} +html.theme .modal-card-head p { + color: var(--theme-has-text-warning); +} +html.theme .modalBox, +html.theme .industry { + background: var(--theme-modalBox-background); +} +html.theme .modalBox p, +html.theme .industry p { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .modalBox .market-item, +html.theme .industry .market-item { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .modalBox .divide, +html.theme .industry .divide { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .modalBox .smelting, +html.theme .industry .smelting { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .industry { + background: none; +} +html.theme .industry .header { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme .industry .avail span { + margin: 0 2.5rem 0 2.125rem; +} +html.theme .govTask { + margin-top: 0.25rem; +} +html.theme .govTask .button { + height: 1.5rem; + margin-left: 0.5rem; +} +html.theme .fileImport { + background-color: var(--theme-html-background); +} +html.theme .star1 { + fill: var(--theme-html-background); + stroke: var(--theme-star-2-fill); +} +html.theme .star1 path { + stroke: var(--theme-star-2-fill); +} +html.theme .star1 path.bolden { + stroke-width: 8px; +} +html.theme .star2 { + fill: var(--theme-star-2-fill); +} +html.theme .star3 { + fill: var(--theme-star-3-fill); +} +html.theme .star4 { + fill: var(--theme-star-4-fill); +} +html.theme .star5 { + fill: var(--theme-star-5-fill); +} +html.theme .refresh svg { + fill: var(--theme-has-text-advanced); +} +html.theme .hscroll::-webkit-scrollbar-track, +html.theme .vscroll::-webkit-scrollbar-track, +html.theme .sticky::-webkit-scrollbar-track, +html.theme .resTabs > section::-webkit-scrollbar-track, +html.theme .resTabs > .tabs::-webkit-scrollbar-track, +html.theme .bldQueue::-webkit-scrollbar-track, +html.theme .dropdown-content::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme .vscroll::-webkit-scrollbar, +html.theme .sticky::-webkit-scrollbar, +html.theme .resTabs > section::-webkit-scrollbar, +html.theme .resTabs > .tabs::-webkit-scrollbar, +html.theme .bldQueue::-webkit-scrollbar, +html.theme .dropdown-content::-webkit-scrollbar { + width: 6px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme .hscroll::-webkit-scrollbar { + height: 8px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme .vscroll::-webkit-scrollbar-thumb, +html.theme .hscroll::-webkit-scrollbar-thumb, +html.theme .sticky::-webkit-scrollbar-thumb, +html.theme .resTabs > section::-webkit-scrollbar-thumb, +html.theme .resTabs > .tabs::-webkit-scrollbar-thumb, +html.theme .bldQueue::-webkit-scrollbar-thumb, +html.theme .dropdown-content::-webkit-scrollbar-thumb { + background-color: var(--theme-webkit-scrollbar-thumb-background); +} +@supports (scrollbar-color: auto) { + html.theme .vscroll, + html.theme .hscroll, + html.theme .sticky, + html.theme .resTabs > section, + html.theme .resTabs > .tabs, + html.theme .bldQueue { + scrollbar-color: var(--theme-webkit-scrollbar-thumb-background) var(--theme-webkit-scrollbar-background); + } +} +html.theme .buttonList .is-selected { + border-color: var(--theme-enabled); +} +html.theme.dark .pop-desc .has-text-caution { + color: #a30500; +} +html.theme.light body { + font-weight: 500; +} +html.theme.light .button, +html.theme.light .button:hover { + border: solid 0.0625rem #000; +} +html.theme.light .topBar .calendar .wi-thermometer-exterior { + color: #00d6b2; +} +html.theme.light .topBar .calendar .wi-day-sunny, +html.theme.light .topBar .calendar .wi-day-windy { + color: #fffb00; +} +html.theme.light .topBar .calendar .wi-cloud, +html.theme.light .topBar .calendar .wi-cloudy-gusts { + color: #dfe2d3; +} +html.theme.light .topBar .calendar .wi-rain, +html.theme.light .topBar .calendar .wi-storm-showers { + color: #00b0e6; +} +html.theme.light .topBar .calendar .wi-snow, +html.theme.light .topBar .calendar .wi-snow-wind { + color: #fff; +} +html.theme.light .main .content .action a.button span.count, +html.theme.light .modal .action a.button span.count { + border-bottom: 0.0625rem solid #000; + border-left: 0.0625rem solid #000; +} +html.theme.light .main .content .action.cna:not(.cnam) span.aTitle, +html.theme.light .modal .action.cna:not(.cnam) span.aTitle { + color: #282828; +} +html.theme.light .industry { + background: none; +} +html.theme.light .industry .smelting { + border-top: 0; +} +html.theme.light .industry .header { + border-bottom: #4e4e4e solid 0.0625rem; +} +html.theme.light .progress::-webkit-progress-value, +html.theme.light .progress::-moz-progress-bar { + background-color: #898989; +} +html.theme.redgreen { + /* AFP 2021 + // .fool + @fool-has-text-danger: var(--theme-fool-has-text-danger); + @fool-has-text-success: var(--theme-fool-has-text-success); + @fool-popper-has-text-danger: var(--theme-fool-popper-has-text-danger); + @fool-span-on: var(--theme-fool-span-on); + @fool-span-off: var(--theme-fool-span-off); + */ + background-color: var(--theme-html-background); + /* AFP 2020 + // .fool + .fool { + .has-text-advanced { + color: @has-text-caution; + } + + .has-text-caution { + color: @has-text-advanced; + } + + .has-text-danger { + color: @fool-has-text-danger; + } + + .has-text-success { + color: @fool-has-text-success; + } + + .popper { + .has-text-success { + color: @fool-has-text-success; + } + + .has-text-danger { + color: @fool-popper-has-text-danger; + } + } + + .main { + .content { + .action { + span.on { + color: @fool-span-on; + } + + span.off { + color: @fool-span-off; + } + } + } + } + } + */ +} +html.theme.redgreen body { + color: var(--theme-primary-color); +} +html.theme.redgreen h2, +html.theme.redgreen h3 { + color: var(--theme-primary-color); +} +html.theme.redgreen a { + color: var(--theme-link); +} +html.theme.redgreen .button.has-text-advanced, +html.theme.redgreen .has-text-advanced { + color: var(--theme-has-text-advanced); +} +html.theme.redgreen .button.has-text-alert, +html.theme.redgreen .has-text-alert { + color: var(--theme-has-text-alert); +} +html.theme.redgreen .button.has-text-caution, +html.theme.redgreen .has-text-caution { + color: var(--theme-has-text-caution); +} +html.theme.redgreen .button.has-text-danger, +html.theme.redgreen .has-text-danger { + color: var(--theme-has-text-danger); +} +html.theme.redgreen .has-text-fade { + color: var(--theme-has-text-fade); +} +html.theme.redgreen .has-text-flair { + color: var(--theme-has-text-flair); +} +html.theme.redgreen .button.has-text-info, +html.theme.redgreen .has-text-info { + color: var(--theme-has-text-info); +} +html.theme.redgreen .has-text-label { + color: var(--theme-has-text-label); +} +html.theme.redgreen .button.has-text-special, +html.theme.redgreen .has-text-special { + color: var(--theme-has-text-special); +} +html.theme.redgreen .button.has-text-success, +html.theme.redgreen .has-text-success { + color: var(--theme-has-text-success); +} +html.theme.redgreen .button.has-text-warning, +html.theme.redgreen .has-text-warning { + color: var(--theme-has-text-warning); +} +html.theme.redgreen .has-text-danger-pulse { + color: var(--theme-has-text-warning); + -webkit-animation: color-change 5s infinite; + -moz-animation: color-change 5s infinite; + -o-animation: color-change 5s infinite; + -ms-animation: color-change 5s infinite; + animation: color-change 5s infinite; +} +@keyframes color-change { + 0% { + color: var(--theme-has-text-warning); + } + 50% { + color: var(--theme-has-text-danger); + } + 100% { + color: var(--theme-has-text-warning); + } +} +html.theme.redgreen .challenge .simButton { + border-color: var(--theme-has-text-success); +} +html.theme.redgreen .challenge .configList { + display: flex; + flex-flow: wrap; + justify-content: space-around; +} +html.theme.redgreen .challenge .configList > div { + margin: 0 0.25rem; + width: 10rem; +} +html.theme.redgreen .challenge .configList > div > input { + height: 1.25rem; + text-align: center; + padding: 0; +} +html.theme.redgreen .popper .has-text-label { + color: var(--theme-popper-has-text-label); +} +html.theme.redgreen .popper .has-text-success { + color: var(--theme-popper-has-text-success); +} +html.theme.redgreen .popper .has-text-warning { + color: var(--theme-popper-has-text-warning); +} +html.theme.redgreen .popper .divide-line { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .main > div.popper, +html.theme.redgreen body .modal > div.popper { + background-color: var(--theme-modal-child-popper-background); + border: 0.0625rem solid var(--theme-modal-child-popper-border); + color: var(--theme-popper); +} +html.theme.redgreen .main > div.popper > div, +html.theme.redgreen body .modal > div.popper > div { + border-top: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme.redgreen .main > div.popper > div:first-child, +html.theme.redgreen body .modal > div.popper > div:first-child { + border-top: none; +} +html.theme.redgreen .main > div.popper .has-text-dark, +html.theme.redgreen body .modal > div.popper .has-text-dark { + color: var(--theme-popper); +} +html.theme.redgreen .main > div.popper .split, +html.theme.redgreen body .modal > div.popper .split { + display: flex; +} +html.theme.redgreen .main > div.popper .split > div, +html.theme.redgreen body .modal > div.popper .split > div { + flex-wrap: nowrap; +} +html.theme.redgreen .main > div.popper .split > div:nth-of-type(2), +html.theme.redgreen body .modal > div.popper .split > div:nth-of-type(2) { + border-left: solid 0.0625rem var(--theme-modal-child-popper-border); + margin-left: 0.375rem; + padding-left: 0.375rem; +} +html.theme.redgreen .shipPopper .divider { + border-bottom: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme.redgreen .sliderbar > span { + position: relative; + display: inline-block; + width: 5%; + bottom: 1.125rem; + margin: 0 0.375rem; +} +html.theme.redgreen .sliderbar .b-slider { + display: inline-block; + width: 80%; +} +html.theme.redgreen .sliderbar .b-slider .b-slider-track { + height: 1rem; +} +html.theme.redgreen .sliderbar .is-primary .b-slider-fill { + background: var(--theme-has-text-success); +} +html.theme.redgreen .sliderbar.thin > span { + bottom: 0.625rem; +} +html.theme.redgreen .sliderbar.thin .b-slider { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} +html.theme.redgreen .tabs a, +html.theme.redgreen .msgQueueFilters span { + color: var(--theme-primary-color); +} +html.theme.redgreen .tabs li.is-active a, +html.theme.redgreen .msgQueueFilters span.is-active { + border-bottom-color: var(--theme-tabs-li-is-active-link-border); + color: var(--theme-tabs-li-is-active-link); +} +html.theme.redgreen .tabs a:hover, +html.theme.redgreen .msgQueueFilters span:hover { + border-bottom-color: var(--theme-link-hover); + color: var(--theme-link-hover); +} +html.theme.redgreen .tabs > ul { + border-bottom: solid 0.0625rem; +} +html.theme.redgreen .button { + background-color: var(--theme-button-background); + color: var(--theme-button); +} +html.theme.redgreen .button.is-light { + background-color: var(--theme-primary-color); +} +html.theme.redgreen .button.is-hovered, +html.theme.redgreen .button:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme.redgreen .button.is-focused, +html.theme.redgreen .button:focus { + border-color: var(--theme-button-focus-border); +} +html.theme.redgreen .basic-button { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.redgreen .basic-button:hover { + border: var(--theme-basic-button-border-hover) solid 0.0625rem; + background-color: var(--theme-basic-button-border-hover-background); +} +html.theme.redgreen .text-button:hover { + cursor: pointer; + color: var(--theme-link-hover); + text-decoration: underline; +} +html.theme.redgreen .label { + color: var(--theme-label); +} +html.theme.redgreen .checkbox:hover, +html.theme.redgreen .radio:hover { + color: var(--theme-checkbox-hover); +} +html.theme.redgreen .dropdown-content { + background-color: var(--theme-dropdown-content-background); +} +html.theme.redgreen .b-tooltip.is-right:before { + border-right: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.redgreen .b-tooltip.is-left:before { + border-left: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.redgreen .b-tooltip.is-bottom:before { + border-bottom: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.redgreen .b-tooltip.is-primary .tooltip-content { + background: var(--theme-b-tooltip-is-primary-background); + border: 0.0625rem solid var(--theme-b-tooltip-is-primary-border); + color: var(--theme-b-tooltip-is-primary); +} +html.theme.redgreen .add, +html.theme.redgreen .sub { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme.redgreen .add:hover, +html.theme.redgreen .sub:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme.redgreen .current { + border-top: var(--theme-primary-border) solid 0.0625rem; + border-bottom: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.redgreen .current.infoOnly { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.redgreen .topBar, +html.theme.redgreen .promoBar, +html.theme.redgreen #mobileNav { + background-color: var(--theme-bars-background); +} +html.theme.redgreen .play { + display: inline-block; + position: relative; + cursor: pointer; + bottom: 0.125rem; + width: 0; + height: 0; + border-top: 0.25rem solid transparent; + border-left: 0.375rem solid var(--theme-has-text-success); + border-bottom: 0.25rem solid transparent; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme.redgreen .pause { + display: inline-block; + position: relative; + cursor: pointer; + box-sizing: content-box; + bottom: 0.0625rem; + width: 0.125rem; + height: 0.625rem; + border-right: 0.125rem solid var(--theme-has-text-danger); + border-left: 0.125rem solid var(--theme-has-text-danger); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme.redgreen .meter.low { + color: var(--theme-meter-low); +} +html.theme.redgreen .meter.neutral { + color: var(--theme-meter-neutral); +} +html.theme.redgreen .meter.high { + color: var(--theme-meter-high); +} +html.theme.redgreen .buildList .hl-ca { + color: var(--theme-enabled); +} +html.theme.redgreen .buildList .hl-cna { + color: var(--theme-disabled); +} +html.theme.redgreen .msgQueue span.special .gear, +html.theme.redgreen .graphContainer span.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme.redgreen .msgQueue span.special:hover .gear, +html.theme.redgreen .graphContainer span.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme.redgreen .main .content .action a.button.hl-ca .aTitle, +html.theme.redgreen .modal .action a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme.redgreen .main .content .action a.button.hl-cna .aTitle, +html.theme.redgreen .modal .action a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme.redgreen .main .content .action a.button span.count, +html.theme.redgreen .modal .action a.button span.count { + background: var(--theme-html-background); +} +html.theme.redgreen .main .content .action div.special, +html.theme.redgreen .modal .action div.special { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-div-special-border); +} +html.theme.redgreen .main .content .action div.special .gear, +html.theme.redgreen .modal .action div.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme.redgreen .main .content .action div.special:hover, +html.theme.redgreen .modal .action div.special:hover { + border: 0.0625rem solid var(--theme-div-special-hover-border); +} +html.theme.redgreen .main .content .action div.special:hover .gear, +html.theme.redgreen .modal .action div.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme.redgreen .main .content .action span.on, +html.theme.redgreen .modal .action span.on { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-on-border); + color: var(--theme-span-on); +} +html.theme.redgreen .main .content .action span.on.warn, +html.theme.redgreen .main .content .action span.on.altwarn, +html.theme.redgreen .modal .action span.on.warn, +html.theme.redgreen .modal .action span.on.altwarn { + color: var(--theme-span-on-warn); +} +html.theme.redgreen .main .content .action span.off, +html.theme.redgreen .modal .action span.off { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-off-border); + color: var(--theme-span-off); +} +html.theme.redgreen .main .content .action span.on:hover, +html.theme.redgreen .main .content .action span.off:hover, +html.theme.redgreen .modal .action span.on:hover, +html.theme.redgreen .modal .action span.off:hover { + border: 0.0625rem solid var(--theme-span-on-off-hover-border); +} +html.theme.redgreen .main .content .action.hl .button, +html.theme.redgreen .modal .action.hl .button { + border: solid 1px var(--theme-hl-button-border); +} +html.theme.redgreen .main .content .action.cna a.button, +html.theme.redgreen .modal .action.cna a.button { + background: var(--theme-link-button-background); +} +html.theme.redgreen .main .content .action.cna a.button.hl-ca .aTitle, +html.theme.redgreen .modal .action.cna a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme.redgreen .main .content .action.cna a.button.hl-cna .aTitle, +html.theme.redgreen .modal .action.cna a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme.redgreen .main .content .action.cna .special, +html.theme.redgreen .main .content .action.cna .on, +html.theme.redgreen .main .content .action.cna .off, +html.theme.redgreen .modal .action.cna .special, +html.theme.redgreen .modal .action.cna .on, +html.theme.redgreen .modal .action.cna .off { + border-color: var(--theme-special-on-off-border); +} +html.theme.redgreen .main .content .action.cna .oldTech span.aTitle, +html.theme.redgreen .modal .action.cna .oldTech span.aTitle { + color: var(--theme-oldTech); +} +html.theme.redgreen .main .content .action.cnam span.aTitle, +html.theme.redgreen .modal .action.cnam span.aTitle { + color: var(--theme-cnam-aTitle); +} +html.theme.redgreen .main .content .enemyFortress { + background-color: var(--theme-button-background); +} +html.theme.redgreen .main .content .divider h2 { + background: var(--theme-html-background); +} +html.theme.redgreen .main .content .green, +html.theme.redgreen .main .content .synth { + box-shadow: 0 0 6px var(--theme-has-text-success); +} +html.theme.redgreen .main .content .green > span, +html.theme.redgreen .main .content .synth > span { + text-shadow: 1px 1px var(--theme-has-text-success); +} +html.theme.redgreen .main .content .red { + box-shadow: 0 0 6px var(--theme-has-text-danger); +} +html.theme.redgreen .main .content .red > span { + text-shadow: 1px 1px var(--theme-has-text-danger); +} +html.theme.redgreen .main .content .yellow { + box-shadow: 0 0 6px var(--theme-has-text-warning); +} +html.theme.redgreen .main .content .yellow > span { + text-shadow: 1px 1px var(--theme-has-text-warning); +} +html.theme.redgreen .main .content .orange { + box-shadow: 0 0 6px var(--theme-has-text-caution); +} +html.theme.redgreen .main .content .orange > span { + text-shadow: 1px 1px var(--theme-has-text-caution); +} +html.theme.redgreen .main .content .purple { + box-shadow: 0 0 6px var(--theme-has-text-special); +} +html.theme.redgreen .main .content .purple > span { + text-shadow: 1px 1px var(--theme-has-text-special); +} +html.theme.redgreen .main .content .blue, +html.theme.redgreen .main .content .precog { + box-shadow: 0 0 6px var(--theme-has-text-info); +} +html.theme.redgreen .main .content .blue > span, +html.theme.redgreen .main .content .precog > span { + text-shadow: 1px 1px var(--theme-has-text-info); +} +html.theme.redgreen .main .content .cna .precog > span { + text-shadow: none; +} +html.theme.redgreen .main .government .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme.redgreen .main .garrison .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme.redgreen .main .market-header { + border-bottom: var(--theme-secondary-border) solid 1px; +} +html.theme.redgreen .main .galaxyTrade { + border-top: var(--theme-secondary-border) solid 1px; +} +html.theme.redgreen .powerGrid { + display: flex; + flex-wrap: wrap; + margin-left: 1rem; +} +html.theme.redgreen .powerGrid .circuit { + min-width: 18.5rem; + cursor: pointer; +} +html.theme.redgreen .powerGrid .circuit.inactive { + display: none; +} +html.theme.redgreen .powerGrid .circuit > span { + display: inline-block; +} +html.theme.redgreen .powerGrid .circuit > span:first-child { + width: 1.5rem; +} +html.theme.redgreen .powerGrid .circuit .struct { + width: 12rem; +} +html.theme.redgreen .powerGrid .circuit .off, +html.theme.redgreen .powerGrid .circuit .on { + min-width: 2rem; + text-align: center; +} +html.theme.redgreen .powerGrid .circuit .off { + color: var(--theme-has-text-danger); +} +html.theme.redgreen .powerGrid .circuit .on { + color: var(--theme-has-text-success); +} +html.theme.redgreen .gridHeader { + border-top: var(--theme-secondary-border) solid 0.0625rem; + margin: 0.25rem 0 0.25rem 1rem; + padding-top: 0.25rem; +} +html.theme.redgreen .powerGridHead { + display: flex; + justify-content: space-between; +} +html.theme.redgreen .powerGridHeader { + margin-left: 1rem; + margin-bottom: 0.5rem; +} +html.theme.redgreen .resetPowerGrid { + margin-left: 1rem; + margin-top: 0.75rem; +} +html.theme.redgreen .resetPowerGrid .button { + height: 1.5rem; +} +html.theme.redgreen .fort .patrol .check { + background-color: var(--theme-fort-patrol-check-background); +} +html.theme.redgreen .market-item .order { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme.redgreen .market-item .order:hover { + border: var(--theme-market-item-order-hover-border) solid 0.0625rem; + background-color: var(--theme-market-item-order-hover-background); +} +html.theme.redgreen .market-item.prime, +html.theme.redgreen .resource.prime { + background-color: transparent; +} +html.theme.redgreen .market-item.alt, +html.theme.redgreen .resource.alt { + background-color: var(--theme-market-item-background); +} +html.theme.redgreen .market-item.showBar.prime, +html.theme.redgreen .resource.showBar.prime { + background: linear-gradient(to right, transparent 0%, transparent var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme.redgreen .market-item.showBar.alt, +html.theme.redgreen .resource.showBar.alt { + background: linear-gradient(to right, var(--theme-market-item-background) 0%, var(--theme-market-item-background) var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme.redgreen .resource .bar { + cursor: pointer; +} +html.theme.redgreen .inactive-row { + background-color: var(--theme-market-item-background); +} +html.theme.redgreen .modal .actionSpace { + background-color: var(--theme-html-background); +} +html.theme.redgreen .modal-card-head, +html.theme.redgreen .modal-card-body, +html.theme.redgreen .modal-card-foot { + background-color: var(--theme-modalBox-background); +} +html.theme.redgreen .modal-card-head p { + color: var(--theme-has-text-warning); +} +html.theme.redgreen .modalBox, +html.theme.redgreen .industry { + background: var(--theme-modalBox-background); +} +html.theme.redgreen .modalBox p, +html.theme.redgreen .industry p { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .modalBox .market-item, +html.theme.redgreen .industry .market-item { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .modalBox .divide, +html.theme.redgreen .industry .divide { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .modalBox .smelting, +html.theme.redgreen .industry .smelting { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .industry { + background: none; +} +html.theme.redgreen .industry .header { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.redgreen .industry .avail span { + margin: 0 2.5rem 0 2.125rem; +} +html.theme.redgreen .govTask { + margin-top: 0.25rem; +} +html.theme.redgreen .govTask .button { + height: 1.5rem; + margin-left: 0.5rem; +} +html.theme.redgreen .fileImport { + background-color: var(--theme-html-background); +} +html.theme.redgreen .star1 { + fill: var(--theme-html-background); + stroke: var(--theme-star-2-fill); +} +html.theme.redgreen .star1 path { + stroke: var(--theme-star-2-fill); +} +html.theme.redgreen .star1 path.bolden { + stroke-width: 8px; +} +html.theme.redgreen .star2 { + fill: var(--theme-star-2-fill); +} +html.theme.redgreen .star3 { + fill: var(--theme-star-3-fill); +} +html.theme.redgreen .star4 { + fill: var(--theme-star-4-fill); +} +html.theme.redgreen .star5 { + fill: var(--theme-star-5-fill); +} +html.theme.redgreen .refresh svg { + fill: var(--theme-has-text-advanced); +} +html.theme.redgreen .hscroll::-webkit-scrollbar-track, +html.theme.redgreen .vscroll::-webkit-scrollbar-track, +html.theme.redgreen .sticky::-webkit-scrollbar-track, +html.theme.redgreen .resTabs > section::-webkit-scrollbar-track, +html.theme.redgreen .resTabs > .tabs::-webkit-scrollbar-track, +html.theme.redgreen .bldQueue::-webkit-scrollbar-track, +html.theme.redgreen .dropdown-content::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.redgreen .vscroll::-webkit-scrollbar, +html.theme.redgreen .sticky::-webkit-scrollbar, +html.theme.redgreen .resTabs > section::-webkit-scrollbar, +html.theme.redgreen .resTabs > .tabs::-webkit-scrollbar, +html.theme.redgreen .bldQueue::-webkit-scrollbar, +html.theme.redgreen .dropdown-content::-webkit-scrollbar { + width: 6px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.redgreen .hscroll::-webkit-scrollbar { + height: 8px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.redgreen .vscroll::-webkit-scrollbar-thumb, +html.theme.redgreen .hscroll::-webkit-scrollbar-thumb, +html.theme.redgreen .sticky::-webkit-scrollbar-thumb, +html.theme.redgreen .resTabs > section::-webkit-scrollbar-thumb, +html.theme.redgreen .resTabs > .tabs::-webkit-scrollbar-thumb, +html.theme.redgreen .bldQueue::-webkit-scrollbar-thumb, +html.theme.redgreen .dropdown-content::-webkit-scrollbar-thumb { + background-color: var(--theme-webkit-scrollbar-thumb-background); +} +@supports (scrollbar-color: auto) { + html.theme.redgreen .vscroll, + html.theme.redgreen .hscroll, + html.theme.redgreen .sticky, + html.theme.redgreen .resTabs > section, + html.theme.redgreen .resTabs > .tabs, + html.theme.redgreen .bldQueue { + scrollbar-color: var(--theme-webkit-scrollbar-thumb-background) var(--theme-webkit-scrollbar-background); + } +} +html.theme.redgreen .buttonList .is-selected { + border-color: var(--theme-enabled); +} +html.theme.redgreen .main > div.popper .has-text-danger, +html.theme.redgreen body .modal > div.popper .has-text-danger { + color: #aa00aa; +} +html.theme.redgreen #powerStatus .has-text-warning { + color: #9900cc; +} +html.theme.redgreen .trade .has-text-danger { + color: #167df0; + color: #aa00ff; +} +html.theme.redgreen .trade .has-text-warning { + color: #fff; +} +html.theme.redgreen .topBar .calendar .wi-thermometer-exterior { + color: #00e6d2; +} +html.theme.redgreen .topBar .calendar .wi-thermometer { + color: #fffb00; +} +html.theme.redgreen .mad { + background: repeating-linear-gradient(45deg, #8a8b49, #8a8b49 10px, #000000 10px, #000000 20px); +} +html.theme.redgreen .armed .mad { + background: repeating-linear-gradient(45deg, #fbfd84, #fbfd84 10px, #000000 10px, #000000 20px); +} +html.theme.darkNight input, +html.theme.darkNight select, +html.theme.darkNight textarea { + background: var(--theme-primary-color); +} +html.theme.gruvboxLight input, +html.theme.gruvboxLight select, +html.theme.gruvboxLight textarea, +html.theme.gruvboxLight .notification { + background: var(--theme-secondary-color); +} +html.theme.gruvboxDark input, +html.theme.gruvboxDark select, +html.theme.gruvboxDark textarea, +html.theme.gruvboxDark .notification { + background: var(--theme-primary-color); +} +html.theme.gruvboxDark .add, +html.theme.gruvboxDark .sub { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDark .current { + border-top: var(--theme-secondary-border) solid 0.0625rem; + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDark .current.infoOnly { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG { + /* AFP 2021 + // .fool + @fool-has-text-danger: var(--theme-fool-has-text-danger); + @fool-has-text-success: var(--theme-fool-has-text-success); + @fool-popper-has-text-danger: var(--theme-fool-popper-has-text-danger); + @fool-span-on: var(--theme-fool-span-on); + @fool-span-off: var(--theme-fool-span-off); + */ + background-color: var(--theme-html-background); + /* AFP 2020 + // .fool + .fool { + .has-text-advanced { + color: @has-text-caution; + } + + .has-text-caution { + color: @has-text-advanced; + } + + .has-text-danger { + color: @fool-has-text-danger; + } + + .has-text-success { + color: @fool-has-text-success; + } + + .popper { + .has-text-success { + color: @fool-has-text-success; + } + + .has-text-danger { + color: @fool-popper-has-text-danger; + } + } + + .main { + .content { + .action { + span.on { + color: @fool-span-on; + } + + span.off { + color: @fool-span-off; + } + } + } + } + } + */ +} +html.theme.gruvboxDarkRG body { + color: var(--theme-primary-color); +} +html.theme.gruvboxDarkRG h2, +html.theme.gruvboxDarkRG h3 { + color: var(--theme-primary-color); +} +html.theme.gruvboxDarkRG a { + color: var(--theme-link); +} +html.theme.gruvboxDarkRG .button.has-text-advanced, +html.theme.gruvboxDarkRG .has-text-advanced { + color: var(--theme-has-text-advanced); +} +html.theme.gruvboxDarkRG .button.has-text-alert, +html.theme.gruvboxDarkRG .has-text-alert { + color: var(--theme-has-text-alert); +} +html.theme.gruvboxDarkRG .button.has-text-caution, +html.theme.gruvboxDarkRG .has-text-caution { + color: var(--theme-has-text-caution); +} +html.theme.gruvboxDarkRG .button.has-text-danger, +html.theme.gruvboxDarkRG .has-text-danger { + color: var(--theme-has-text-danger); +} +html.theme.gruvboxDarkRG .has-text-fade { + color: var(--theme-has-text-fade); +} +html.theme.gruvboxDarkRG .has-text-flair { + color: var(--theme-has-text-flair); +} +html.theme.gruvboxDarkRG .button.has-text-info, +html.theme.gruvboxDarkRG .has-text-info { + color: var(--theme-has-text-info); +} +html.theme.gruvboxDarkRG .has-text-label { + color: var(--theme-has-text-label); +} +html.theme.gruvboxDarkRG .button.has-text-special, +html.theme.gruvboxDarkRG .has-text-special { + color: var(--theme-has-text-special); +} +html.theme.gruvboxDarkRG .button.has-text-success, +html.theme.gruvboxDarkRG .has-text-success { + color: var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .button.has-text-warning, +html.theme.gruvboxDarkRG .has-text-warning { + color: var(--theme-has-text-warning); +} +html.theme.gruvboxDarkRG .has-text-danger-pulse { + color: var(--theme-has-text-warning); + -webkit-animation: color-change 5s infinite; + -moz-animation: color-change 5s infinite; + -o-animation: color-change 5s infinite; + -ms-animation: color-change 5s infinite; + animation: color-change 5s infinite; +} +@keyframes color-change { + 0% { + color: var(--theme-has-text-warning); + } + 50% { + color: var(--theme-has-text-danger); + } + 100% { + color: var(--theme-has-text-warning); + } +} +html.theme.gruvboxDarkRG .challenge .simButton { + border-color: var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .challenge .configList { + display: flex; + flex-flow: wrap; + justify-content: space-around; +} +html.theme.gruvboxDarkRG .challenge .configList > div { + margin: 0 0.25rem; + width: 10rem; +} +html.theme.gruvboxDarkRG .challenge .configList > div > input { + height: 1.25rem; + text-align: center; + padding: 0; +} +html.theme.gruvboxDarkRG .popper .has-text-label { + color: var(--theme-popper-has-text-label); +} +html.theme.gruvboxDarkRG .popper .has-text-success { + color: var(--theme-popper-has-text-success); +} +html.theme.gruvboxDarkRG .popper .has-text-warning { + color: var(--theme-popper-has-text-warning); +} +html.theme.gruvboxDarkRG .popper .divide-line { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .main > div.popper, +html.theme.gruvboxDarkRG body .modal > div.popper { + background-color: var(--theme-modal-child-popper-background); + border: 0.0625rem solid var(--theme-modal-child-popper-border); + color: var(--theme-popper); +} +html.theme.gruvboxDarkRG .main > div.popper > div, +html.theme.gruvboxDarkRG body .modal > div.popper > div { + border-top: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme.gruvboxDarkRG .main > div.popper > div:first-child, +html.theme.gruvboxDarkRG body .modal > div.popper > div:first-child { + border-top: none; +} +html.theme.gruvboxDarkRG .main > div.popper .has-text-dark, +html.theme.gruvboxDarkRG body .modal > div.popper .has-text-dark { + color: var(--theme-popper); +} +html.theme.gruvboxDarkRG .main > div.popper .split, +html.theme.gruvboxDarkRG body .modal > div.popper .split { + display: flex; +} +html.theme.gruvboxDarkRG .main > div.popper .split > div, +html.theme.gruvboxDarkRG body .modal > div.popper .split > div { + flex-wrap: nowrap; +} +html.theme.gruvboxDarkRG .main > div.popper .split > div:nth-of-type(2), +html.theme.gruvboxDarkRG body .modal > div.popper .split > div:nth-of-type(2) { + border-left: solid 0.0625rem var(--theme-modal-child-popper-border); + margin-left: 0.375rem; + padding-left: 0.375rem; +} +html.theme.gruvboxDarkRG .shipPopper .divider { + border-bottom: solid 0.0625rem var(--theme-modal-child-popper-border); +} +html.theme.gruvboxDarkRG .sliderbar > span { + position: relative; + display: inline-block; + width: 5%; + bottom: 1.125rem; + margin: 0 0.375rem; +} +html.theme.gruvboxDarkRG .sliderbar .b-slider { + display: inline-block; + width: 80%; +} +html.theme.gruvboxDarkRG .sliderbar .b-slider .b-slider-track { + height: 1rem; +} +html.theme.gruvboxDarkRG .sliderbar .is-primary .b-slider-fill { + background: var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .sliderbar.thin > span { + bottom: 0.625rem; +} +html.theme.gruvboxDarkRG .sliderbar.thin .b-slider { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} +html.theme.gruvboxDarkRG .tabs a, +html.theme.gruvboxDarkRG .msgQueueFilters span { + color: var(--theme-primary-color); +} +html.theme.gruvboxDarkRG .tabs li.is-active a, +html.theme.gruvboxDarkRG .msgQueueFilters span.is-active { + border-bottom-color: var(--theme-tabs-li-is-active-link-border); + color: var(--theme-tabs-li-is-active-link); +} +html.theme.gruvboxDarkRG .tabs a:hover, +html.theme.gruvboxDarkRG .msgQueueFilters span:hover { + border-bottom-color: var(--theme-link-hover); + color: var(--theme-link-hover); +} +html.theme.gruvboxDarkRG .tabs > ul { + border-bottom: solid 0.0625rem; +} +html.theme.gruvboxDarkRG .button { + background-color: var(--theme-button-background); + color: var(--theme-button); +} +html.theme.gruvboxDarkRG .button.is-light { + background-color: var(--theme-primary-color); +} +html.theme.gruvboxDarkRG .button.is-hovered, +html.theme.gruvboxDarkRG .button:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme.gruvboxDarkRG .button.is-focused, +html.theme.gruvboxDarkRG .button:focus { + border-color: var(--theme-button-focus-border); +} +html.theme.gruvboxDarkRG .basic-button { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .basic-button:hover { + border: var(--theme-basic-button-border-hover) solid 0.0625rem; + background-color: var(--theme-basic-button-border-hover-background); +} +html.theme.gruvboxDarkRG .text-button:hover { + cursor: pointer; + color: var(--theme-link-hover); + text-decoration: underline; +} +html.theme.gruvboxDarkRG .label { + color: var(--theme-label); +} +html.theme.gruvboxDarkRG .checkbox:hover, +html.theme.gruvboxDarkRG .radio:hover { + color: var(--theme-checkbox-hover); +} +html.theme.gruvboxDarkRG .dropdown-content { + background-color: var(--theme-dropdown-content-background); +} +html.theme.gruvboxDarkRG .b-tooltip.is-right:before { + border-right: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.gruvboxDarkRG .b-tooltip.is-left:before { + border-left: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.gruvboxDarkRG .b-tooltip.is-bottom:before { + border-bottom: 5px solid var(--theme-b-tooltip-accent); +} +html.theme.gruvboxDarkRG .b-tooltip.is-primary .tooltip-content { + background: var(--theme-b-tooltip-is-primary-background); + border: 0.0625rem solid var(--theme-b-tooltip-is-primary-border); + color: var(--theme-b-tooltip-is-primary); +} +html.theme.gruvboxDarkRG .add, +html.theme.gruvboxDarkRG .sub { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme.gruvboxDarkRG .add:hover, +html.theme.gruvboxDarkRG .sub:hover { + background-color: var(--theme-button-hover-background); + color: var(--theme-link-hover); +} +html.theme.gruvboxDarkRG .current { + border-top: var(--theme-primary-border) solid 0.0625rem; + border-bottom: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .current.infoOnly { + border: var(--theme-primary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .topBar, +html.theme.gruvboxDarkRG .promoBar, +html.theme.gruvboxDarkRG #mobileNav { + background-color: var(--theme-bars-background); +} +html.theme.gruvboxDarkRG .play { + display: inline-block; + position: relative; + cursor: pointer; + bottom: 0.125rem; + width: 0; + height: 0; + border-top: 0.25rem solid transparent; + border-left: 0.375rem solid var(--theme-has-text-success); + border-bottom: 0.25rem solid transparent; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme.gruvboxDarkRG .pause { + display: inline-block; + position: relative; + cursor: pointer; + box-sizing: content-box; + bottom: 0.0625rem; + width: 0.125rem; + height: 0.625rem; + border-right: 0.125rem solid var(--theme-has-text-danger); + border-left: 0.125rem solid var(--theme-has-text-danger); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + transition: all 0.3s; +} +html.theme.gruvboxDarkRG .meter.low { + color: var(--theme-meter-low); +} +html.theme.gruvboxDarkRG .meter.neutral { + color: var(--theme-meter-neutral); +} +html.theme.gruvboxDarkRG .meter.high { + color: var(--theme-meter-high); +} +html.theme.gruvboxDarkRG .buildList .hl-ca { + color: var(--theme-enabled); +} +html.theme.gruvboxDarkRG .buildList .hl-cna { + color: var(--theme-disabled); +} +html.theme.gruvboxDarkRG .msgQueue span.special .gear, +html.theme.gruvboxDarkRG .graphContainer span.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme.gruvboxDarkRG .msgQueue span.special:hover .gear, +html.theme.gruvboxDarkRG .graphContainer span.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme.gruvboxDarkRG .main .content .action a.button.hl-ca .aTitle, +html.theme.gruvboxDarkRG .modal .action a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme.gruvboxDarkRG .main .content .action a.button.hl-cna .aTitle, +html.theme.gruvboxDarkRG .modal .action a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme.gruvboxDarkRG .main .content .action a.button span.count, +html.theme.gruvboxDarkRG .modal .action a.button span.count { + background: var(--theme-html-background); +} +html.theme.gruvboxDarkRG .main .content .action div.special, +html.theme.gruvboxDarkRG .modal .action div.special { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-div-special-border); +} +html.theme.gruvboxDarkRG .main .content .action div.special .gear, +html.theme.gruvboxDarkRG .modal .action div.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme.gruvboxDarkRG .main .content .action div.special:hover, +html.theme.gruvboxDarkRG .modal .action div.special:hover { + border: 0.0625rem solid var(--theme-div-special-hover-border); +} +html.theme.gruvboxDarkRG .main .content .action div.special:hover .gear, +html.theme.gruvboxDarkRG .modal .action div.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme.gruvboxDarkRG .main .content .action span.on, +html.theme.gruvboxDarkRG .modal .action span.on { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-on-border); + color: var(--theme-span-on); +} +html.theme.gruvboxDarkRG .main .content .action span.on.warn, +html.theme.gruvboxDarkRG .main .content .action span.on.altwarn, +html.theme.gruvboxDarkRG .modal .action span.on.warn, +html.theme.gruvboxDarkRG .modal .action span.on.altwarn { + color: var(--theme-span-on-warn); +} +html.theme.gruvboxDarkRG .main .content .action span.off, +html.theme.gruvboxDarkRG .modal .action span.off { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-off-border); + color: var(--theme-span-off); +} +html.theme.gruvboxDarkRG .main .content .action span.on:hover, +html.theme.gruvboxDarkRG .main .content .action span.off:hover, +html.theme.gruvboxDarkRG .modal .action span.on:hover, +html.theme.gruvboxDarkRG .modal .action span.off:hover { + border: 0.0625rem solid var(--theme-span-on-off-hover-border); +} +html.theme.gruvboxDarkRG .main .content .action.hl .button, +html.theme.gruvboxDarkRG .modal .action.hl .button { + border: solid 1px var(--theme-hl-button-border); +} +html.theme.gruvboxDarkRG .main .content .action.cna a.button, +html.theme.gruvboxDarkRG .modal .action.cna a.button { + background: var(--theme-link-button-background); +} +html.theme.gruvboxDarkRG .main .content .action.cna a.button.hl-ca .aTitle, +html.theme.gruvboxDarkRG .modal .action.cna a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme.gruvboxDarkRG .main .content .action.cna a.button.hl-cna .aTitle, +html.theme.gruvboxDarkRG .modal .action.cna a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme.gruvboxDarkRG .main .content .action.cna .special, +html.theme.gruvboxDarkRG .main .content .action.cna .on, +html.theme.gruvboxDarkRG .main .content .action.cna .off, +html.theme.gruvboxDarkRG .modal .action.cna .special, +html.theme.gruvboxDarkRG .modal .action.cna .on, +html.theme.gruvboxDarkRG .modal .action.cna .off { + border-color: var(--theme-special-on-off-border); +} +html.theme.gruvboxDarkRG .main .content .action.cna .oldTech span.aTitle, +html.theme.gruvboxDarkRG .modal .action.cna .oldTech span.aTitle { + color: var(--theme-oldTech); +} +html.theme.gruvboxDarkRG .main .content .action.cnam span.aTitle, +html.theme.gruvboxDarkRG .modal .action.cnam span.aTitle { + color: var(--theme-cnam-aTitle); +} +html.theme.gruvboxDarkRG .main .content .enemyFortress { + background-color: var(--theme-button-background); +} +html.theme.gruvboxDarkRG .main .content .divider h2 { + background: var(--theme-html-background); +} +html.theme.gruvboxDarkRG .main .content .green, +html.theme.gruvboxDarkRG .main .content .synth { + box-shadow: 0 0 6px var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .main .content .green > span, +html.theme.gruvboxDarkRG .main .content .synth > span { + text-shadow: 1px 1px var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .main .content .red { + box-shadow: 0 0 6px var(--theme-has-text-danger); +} +html.theme.gruvboxDarkRG .main .content .red > span { + text-shadow: 1px 1px var(--theme-has-text-danger); +} +html.theme.gruvboxDarkRG .main .content .yellow { + box-shadow: 0 0 6px var(--theme-has-text-warning); +} +html.theme.gruvboxDarkRG .main .content .yellow > span { + text-shadow: 1px 1px var(--theme-has-text-warning); +} +html.theme.gruvboxDarkRG .main .content .orange { + box-shadow: 0 0 6px var(--theme-has-text-caution); +} +html.theme.gruvboxDarkRG .main .content .orange > span { + text-shadow: 1px 1px var(--theme-has-text-caution); +} +html.theme.gruvboxDarkRG .main .content .purple { + box-shadow: 0 0 6px var(--theme-has-text-special); +} +html.theme.gruvboxDarkRG .main .content .purple > span { + text-shadow: 1px 1px var(--theme-has-text-special); +} +html.theme.gruvboxDarkRG .main .content .blue, +html.theme.gruvboxDarkRG .main .content .precog { + box-shadow: 0 0 6px var(--theme-has-text-info); +} +html.theme.gruvboxDarkRG .main .content .blue > span, +html.theme.gruvboxDarkRG .main .content .precog > span { + text-shadow: 1px 1px var(--theme-has-text-info); +} +html.theme.gruvboxDarkRG .main .content .cna .precog > span { + text-shadow: none; +} +html.theme.gruvboxDarkRG .main .government .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme.gruvboxDarkRG .main .garrison .header { + border-bottom: 0.0625rem solid var(--theme-secondary-border); +} +html.theme.gruvboxDarkRG .main .market-header { + border-bottom: var(--theme-secondary-border) solid 1px; +} +html.theme.gruvboxDarkRG .main .galaxyTrade { + border-top: var(--theme-secondary-border) solid 1px; +} +html.theme.gruvboxDarkRG .powerGrid { + display: flex; + flex-wrap: wrap; + margin-left: 1rem; +} +html.theme.gruvboxDarkRG .powerGrid .circuit { + min-width: 18.5rem; + cursor: pointer; +} +html.theme.gruvboxDarkRG .powerGrid .circuit.inactive { + display: none; +} +html.theme.gruvboxDarkRG .powerGrid .circuit > span { + display: inline-block; +} +html.theme.gruvboxDarkRG .powerGrid .circuit > span:first-child { + width: 1.5rem; +} +html.theme.gruvboxDarkRG .powerGrid .circuit .struct { + width: 12rem; +} +html.theme.gruvboxDarkRG .powerGrid .circuit .off, +html.theme.gruvboxDarkRG .powerGrid .circuit .on { + min-width: 2rem; + text-align: center; +} +html.theme.gruvboxDarkRG .powerGrid .circuit .off { + color: var(--theme-has-text-danger); +} +html.theme.gruvboxDarkRG .powerGrid .circuit .on { + color: var(--theme-has-text-success); +} +html.theme.gruvboxDarkRG .gridHeader { + border-top: var(--theme-secondary-border) solid 0.0625rem; + margin: 0.25rem 0 0.25rem 1rem; + padding-top: 0.25rem; +} +html.theme.gruvboxDarkRG .powerGridHead { + display: flex; + justify-content: space-between; +} +html.theme.gruvboxDarkRG .powerGridHeader { + margin-left: 1rem; + margin-bottom: 0.5rem; +} +html.theme.gruvboxDarkRG .resetPowerGrid { + margin-left: 1rem; + margin-top: 0.75rem; +} +html.theme.gruvboxDarkRG .resetPowerGrid .button { + height: 1.5rem; +} +html.theme.gruvboxDarkRG .fort .patrol .check { + background-color: var(--theme-fort-patrol-check-background); +} +html.theme.gruvboxDarkRG .market-item .order { + border: var(--theme-primary-border) solid 0.0625rem; + transition: all 200ms ease; +} +html.theme.gruvboxDarkRG .market-item .order:hover { + border: var(--theme-market-item-order-hover-border) solid 0.0625rem; + background-color: var(--theme-market-item-order-hover-background); +} +html.theme.gruvboxDarkRG .market-item.prime, +html.theme.gruvboxDarkRG .resource.prime { + background-color: transparent; +} +html.theme.gruvboxDarkRG .market-item.alt, +html.theme.gruvboxDarkRG .resource.alt { + background-color: var(--theme-market-item-background); +} +html.theme.gruvboxDarkRG .market-item.showBar.prime, +html.theme.gruvboxDarkRG .resource.showBar.prime { + background: linear-gradient(to right, transparent 0%, transparent var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme.gruvboxDarkRG .market-item.showBar.alt, +html.theme.gruvboxDarkRG .resource.showBar.alt { + background: linear-gradient(to right, var(--theme-market-item-background) 0%, var(--theme-market-item-background) var(--percent-full), #000 var(--percent-full), #000 100%); +} +html.theme.gruvboxDarkRG .resource .bar { + cursor: pointer; +} +html.theme.gruvboxDarkRG .inactive-row { + background-color: var(--theme-market-item-background); +} +html.theme.gruvboxDarkRG .modal .actionSpace { + background-color: var(--theme-html-background); +} +html.theme.gruvboxDarkRG .modal-card-head, +html.theme.gruvboxDarkRG .modal-card-body, +html.theme.gruvboxDarkRG .modal-card-foot { + background-color: var(--theme-modalBox-background); +} +html.theme.gruvboxDarkRG .modal-card-head p { + color: var(--theme-has-text-warning); +} +html.theme.gruvboxDarkRG .modalBox, +html.theme.gruvboxDarkRG .industry { + background: var(--theme-modalBox-background); +} +html.theme.gruvboxDarkRG .modalBox p, +html.theme.gruvboxDarkRG .industry p { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .modalBox .market-item, +html.theme.gruvboxDarkRG .industry .market-item { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .modalBox .divide, +html.theme.gruvboxDarkRG .industry .divide { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .modalBox .smelting, +html.theme.gruvboxDarkRG .industry .smelting { + border-top: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .industry { + background: none; +} +html.theme.gruvboxDarkRG .industry .header { + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .industry .avail span { + margin: 0 2.5rem 0 2.125rem; +} +html.theme.gruvboxDarkRG .govTask { + margin-top: 0.25rem; +} +html.theme.gruvboxDarkRG .govTask .button { + height: 1.5rem; + margin-left: 0.5rem; +} +html.theme.gruvboxDarkRG .fileImport { + background-color: var(--theme-html-background); +} +html.theme.gruvboxDarkRG .star1 { + fill: var(--theme-html-background); + stroke: var(--theme-star-2-fill); +} +html.theme.gruvboxDarkRG .star1 path { + stroke: var(--theme-star-2-fill); +} +html.theme.gruvboxDarkRG .star1 path.bolden { + stroke-width: 8px; +} +html.theme.gruvboxDarkRG .star2 { + fill: var(--theme-star-2-fill); +} +html.theme.gruvboxDarkRG .star3 { + fill: var(--theme-star-3-fill); +} +html.theme.gruvboxDarkRG .star4 { + fill: var(--theme-star-4-fill); +} +html.theme.gruvboxDarkRG .star5 { + fill: var(--theme-star-5-fill); +} +html.theme.gruvboxDarkRG .refresh svg { + fill: var(--theme-has-text-advanced); +} +html.theme.gruvboxDarkRG .hscroll::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .vscroll::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .sticky::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .resTabs > section::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .resTabs > .tabs::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .bldQueue::-webkit-scrollbar-track, +html.theme.gruvboxDarkRG .dropdown-content::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.gruvboxDarkRG .vscroll::-webkit-scrollbar, +html.theme.gruvboxDarkRG .sticky::-webkit-scrollbar, +html.theme.gruvboxDarkRG .resTabs > section::-webkit-scrollbar, +html.theme.gruvboxDarkRG .resTabs > .tabs::-webkit-scrollbar, +html.theme.gruvboxDarkRG .bldQueue::-webkit-scrollbar, +html.theme.gruvboxDarkRG .dropdown-content::-webkit-scrollbar { + width: 6px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.gruvboxDarkRG .hscroll::-webkit-scrollbar { + height: 8px; + background-color: var(--theme-webkit-scrollbar-background); +} +html.theme.gruvboxDarkRG .vscroll::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .hscroll::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .sticky::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .resTabs > section::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .resTabs > .tabs::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .bldQueue::-webkit-scrollbar-thumb, +html.theme.gruvboxDarkRG .dropdown-content::-webkit-scrollbar-thumb { + background-color: var(--theme-webkit-scrollbar-thumb-background); +} +@supports (scrollbar-color: auto) { + html.theme.gruvboxDarkRG .vscroll, + html.theme.gruvboxDarkRG .hscroll, + html.theme.gruvboxDarkRG .sticky, + html.theme.gruvboxDarkRG .resTabs > section, + html.theme.gruvboxDarkRG .resTabs > .tabs, + html.theme.gruvboxDarkRG .bldQueue { + scrollbar-color: var(--theme-webkit-scrollbar-thumb-background) var(--theme-webkit-scrollbar-background); + } +} +html.theme.gruvboxDarkRG .buttonList .is-selected { + border-color: var(--theme-enabled); +} +html.theme.gruvboxDarkRG input, +html.theme.gruvboxDarkRG select, +html.theme.gruvboxDarkRG textarea, +html.theme.gruvboxDarkRG .notification { + background: var(--theme-primary-color); +} +html.theme.gruvboxDarkRG .add, +html.theme.gruvboxDarkRG .sub { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .current { + border-top: var(--theme-secondary-border) solid 0.0625rem; + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.gruvboxDarkRG .current.infoOnly { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.orangeSoda .modal .action a.button.hl-ca .aTitle { + color: var(--theme-enabled); +} +html.theme.orangeSoda .modal .action a.button.hl-cna .aTitle { + color: var(--theme-disabled); +} +html.theme.orangeSoda .modal .action a.button span.count { + background: var(--theme-html-background); +} +html.theme.orangeSoda .modal .action div.special { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-div-special-border); +} +html.theme.orangeSoda .modal .action div.special .gear { + fill: var(--theme-div-special-gear-fill); +} +html.theme.orangeSoda .modal .action div.special:hover { + border: 0.0625rem solid var(--theme-div-special-hover-border); +} +html.theme.orangeSoda .modal .action div.special:hover .gear { + fill: var(--theme-div-special-hover-gear-fill); +} +html.theme.orangeSoda .modal .action span.on { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-on-border); + color: var(--theme-span-on); +} +html.theme.orangeSoda .modal .action span.on.warn, +html.theme.orangeSoda .modal .action span.on.altwarn { + color: var(--theme-span-on-warn); +} +html.theme.orangeSoda .modal .action span.off { + background: var(--theme-html-background); + border: 0.0625rem solid var(--theme-span-off-border); + color: var(--theme-span-off); +} +html.theme.orangeSoda .modal .action span.on:hover, +html.theme.orangeSoda .modal .action span.off:hover { + border: 0.0625rem solid var(--theme-span-on-off-hover-border); +} +html.theme.orangeSoda .modal .action.hl .button { + border: solid 1px var(--theme-hl-button-border); +} +html.theme.orangeSoda .has-text-info { + color: #F09D51; +} +html.theme.orangeSoda .pop-desc .has-text-caution { + color: var(--theme-has-text-danger); +} +html.theme.orangeSoda input, +html.theme.orangeSoda select, +html.theme.orangeSoda textarea, +html.theme.orangeSoda .notification { + background: var(--theme-primary-color); +} +html.theme.dracula input, +html.theme.dracula select, +html.theme.dracula textarea, +html.theme.dracula .notification { + background: var(--theme-primary-color); +} +html.theme.dracula .add, +html.theme.dracula .sub { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.dracula .current { + border-top: var(--theme-secondary-border) solid 0.0625rem; + border-bottom: var(--theme-secondary-border) solid 0.0625rem; +} +html.theme.dracula .current.infoOnly { + border: var(--theme-secondary-border) solid 0.0625rem; +} +html .themeColorPicker { + position: absolute; + z-index: 999; + cursor: move; + user-select: none; + padding-top: 0.5rem; + border: 0.06225rem solid; + border-radius: 0.375rem; + background: var(--theme-html-background); + display: flex; + align-items: center; + flex-direction: column; +} +html .theme_color { + width: 100%; +} +html .themeWarning { + padding-left: 0.375rem; + align-items: center; + display: flex; + flex-direction: column; +} +html .colorPicker { + display: flex; + width: 100%; + justify-content: center; +} +html .themeEditor .importExport { + padding: 0.375rem; + border: 1px solid var(--theme-primary-border); + border-radius: 0.375rem; +} +body, +button, +input, +select, +textarea { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; +} +body { + line-height: initial; + touch-action: manipulation; +} +html.large_all { + font-size: 18px; +} +h2, +h3, +.content h2, +.content h3 { + font-size: 1rem; + font-weight: normal; + display: inline-block; + margin-bottom: 0; +} +.is-sr-only { + margin: 0; +} +span, +div { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} +.button { + transition: all 200ms ease; +} +.button.right { + float: right; + margin-right: 0.1rem; +} +a { + cursor: pointer; + text-decoration: none; + transition: all 200ms ease; +} +.tabs a { + border-bottom: none; + padding: 0.5em 1em; + vertical-align: top; +} +.content li { + margin-top: 0; +} +.block:not(:last-child), +.box:not(:last-child), +.breadcrumb:not(:last-child), +.content:not(:last-child), +.highlight:not(:last-child), +.level:not(:last-child), +.list:not(:last-child), +.message:not(:last-child), +.notification:not(:last-child), +.progress:not(:last-child), +.subtitle:not(:last-child), +.table-container:not(:last-child), +.table:not(:last-child), +.title:not(:last-child) { + margin-bottom: 1rem; +} +.tabs:not(:last-child) { + margin-bottom: 0.5rem; + overflow: hidden; +} +.modal .animation-content { + overflow: hidden; +} +.zoom-out-enter-from { + opacity: 0; +} +.zoom-out-enter-from .animation-content { + transform: scale(1.05); +} +.zoom-in-enter-from { + opacity: 0; +} +.zoom-in-enter-from .animation-content { + transform: scale(0.95); +} +.fade-enter-from { + opacity: 0; +} +.zoom-out-leave-active { + opacity: 1; +} +.zoom-out-leave-active .animation-content { + transform: none; +} +.zoom-out-leave-to { + opacity: 0; +} +.zoom-out-leave-to .animation-content { + transform: scale(1.05); +} +.zoom-in-leave-active { + opacity: 1; +} +.zoom-in-leave-active .animation-content { + transform: none; +} +.zoom-in-leave-to { + opacity: 0; +} +.zoom-in-leave-to .animation-content { + transform: scale(0.95); +} +.modal.is-active.is-leaving { + animation: modal-ghost-leave 150ms ease-out forwards; + pointer-events: none; +} +.modal.is-active.is-leaving .animation-content { + animation: modal-ghost-leave-content 150ms ease-out forwards; +} +@keyframes modal-ghost-leave { + from { + opacity: 1; + } + to { + opacity: 0; + } +} +@keyframes modal-ghost-leave-content { + from { + transform: scale(1); + } + to { + transform: scale(1.05); + } +} +@media only screen and (max-width: 113rem) { + .actionWidth { + max-width: 38rem; + } +} +@media only screen and (max-width: 88.5rem) { + .actionWidth { + max-width: 51rem; + } +} +@media only screen and (max-width: 76.375rem) { + .actionWidth { + max-width: 38rem; + } +} +@media only screen and (max-width: 59rem) { + .actionWidth { + max-width: 25rem; + } +} +@media only screen and (max-width: 48rem) { + .actionWidth { + max-width: 38rem; + } +} +@media only screen and (max-width: 45rem) { + .actionWidth { + max-width: 25rem; + } +} +@media only screen and (max-width: 32rem) { + .actionWidth { + max-width: 12rem; + } +} +.msgInput, +.keyMap { + width: 7.5rem; + display: inline-block; + height: 1.25rem; + margin-bottom: 0.25rem; + text-align: center; +} +.msgInput input, +.keyMap input { + height: 1.25rem; + line-height: 1.25rem; + text-align: center; +} +.add { + display: inline-block; + margin-right: 0.25rem; + padding: 0 0.375rem; + border-radius: 0 0.375rem 0.375rem 0; + line-height: 1rem; + cursor: pointer; +} +.add span:first-child { + position: relative; + bottom: 0.0625rem; +} +.sub { + outline: none; + display: inline-block; + margin-left: 0.125rem; + padding: 0 0.375rem; + border-radius: 0.375rem 0 0 0.375rem; + line-height: 1rem; + cursor: pointer; +} +.sub span:first-child { + position: relative; + bottom: 0.0625rem; +} +.current { + min-width: 5rem; + text-align: center; + display: inline-block; + font-size: 0.875rem; + line-height: 1rem; + padding: 0 0.125rem; + cursor: default; +} +.current.infoOnly { + border-radius: 0.375rem; + padding: 0 0.5rem; +} +.factory .current svg { + width: unset; +} +.zero { + cursor: pointer; + margin-left: 0.75rem; +} +.zero:hover { + text-decoration: underline; +} +.localization { + margin-bottom: 1rem; +} +.basic-button { + display: inline-block; + font-size: 0.875rem; + margin: 0 0.25rem; + padding-top: 0.125rem; + border-radius: 0.375rem; + line-height: 1rem; + height: 1.375rem; + min-width: 4rem; + text-align: center; + cursor: pointer; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tradeOffer .trade-offer { + margin: 0; + padding: 0.125rem 0; +} +.tradeOffer .trade-offer .offer-item { + width: 7.5rem; +} +.tradeOffer .trade-offer .offer-vol { + width: 4.5rem; + border-right: 1px solid; + margin-right: 0.125rem; +} +#egg4 { + right: 0; +} +.doublePane { + display: flex; + align-items: center; + justify-content: center; + margin-top: 0.5rem; +} +.doublePane > div { + width: 50%; +} +.doublePane > div.left { + width: 70%; +} +.doublePane > div.right { + width: 30%; +} +.topPad { + margin-top: 0.5rem; +} +.main { + margin: 1rem 1rem 1.25rem; + overflow-y: hidden; + /* give each subtab panel their own fixed-height scroll container, + to prevent jarring page-jump animations when switching between + subtabs of different content heights */ + /* Outer main tabs section: clip horizontal slide animations without + affecting vertical scrolling of inner resTabs sections */ + /* Push non-subtab content down a bit so stuff like the settings tab doesn't scrape against the main navigation bar */ + /* Pull inner subtab navigation bars up so they negate the 0.75rem padding applied above, keeping them a comfortable distance from the main tabs */ + /* Firefox specifically suffers from sub-pixel rendering shimmies during transform animations + This change forces it to use hardware rasterization layers to fix it, but causes blurry text in Chrome + so for now we strictly isolate this fix to Firefox, and add other browsers or platforms as needed if they get the same issues */ + /* Vue 3 Buefy slide animations, switched to CSS grid stacking approach + all .tab-items are placed in the same grid cell (grid-area: 1/1) so both + the entering and leaving tab stay in normal flow during the animation + container height is always the taller of the two, so it never collapses to zero, + and overflow-x: clip on the container properly does its job */ + /* Webkit-specific slim, translucent scrollbars for inner sub-tabs that should avoid re-wraps */ + /* govTabs2 .tab-content > .tab-item is handled above in the resTabs block instead */ +} +.main .leftColumn { + height: calc(100vh - 2.25rem); +} +.main .leftColumn .colHeader { + display: flex; + justify-content: space-between; +} +.main > .columns { + margin-bottom: 0; +} +.main .queue, +.main .theme, +.main .localization { + margin-bottom: 1rem; +} +.main .queue i, +.main .theme i, +.main .localization i { + margin-left: 0.25rem; + padding-bottom: 0.25rem; +} +.main .queue .dropdown button, +.main .theme .dropdown button, +.main .localization .dropdown button { + height: 1.5rem; + padding: 0 0.75rem; +} +.main > .columns > :first-child { + min-width: 18rem; +} +.main .sep { + margin: 0 0.5rem; +} +.main .race { + position: relative; + margin-top: 1rem; + margin-bottom: 0; + width: 100%; +} +.main .race > span { + cursor: default; +} +.main .race .power { + text-align: right; +} +.main .race .morale-contain { + text-align: center; +} +.main .race .morale { + text-align: center; +} +.main .queueCol div.bldQueue:first-child { + margin-top: 2.625rem; +} +.main .bldQueue, +.main .msgQueue { + resize: vertical; + height: 7rem; + border-top: solid 0.0625rem; + border-bottom: solid 0.0625rem; + overflow-y: auto; +} +.main .bldQueue.right, +.main .msgQueue.right { + height: auto; + border-bottom: none; + padding: 1rem; +} +.main .msgQueue { + font-size: 0.75rem; +} +.main .msgQueue.right { + height: calc(100vh - 9rem); +} +.main #msgQueueHeader .special { + cursor: pointer; +} +.main #msgQueueHeader h2 { + border-bottom: solid 0.0625rem; +} +.main #msgQueueHeader span { + font-size: 1rem; + margin-left: 1rem; +} +.main #msgQueueFilters { + padding: 0.25rem 0; + border-bottom: solid 0.0625rem; + font-size: 0.875rem; +} +.main #msgQueueFilters span { + cursor: pointer; +} +.main #msgQueueFilters span:not(:last-child) { + margin-right: 2rem; +} +.main #pausequeue, +.main #pauserqueue { + margin-left: 1rem; +} +.main .bldQueue, +.main .bldQueue.right { + padding-top: 0.25rem; +} +.main .bldQueue h2, +.main .bldQueue.right h2 { + border-bottom: solid 0.0625rem; +} +.main .bldQueue li, +.main .bldQueue.right li { + display: inline-block; + height: 1rem; + padding: 0 0.25rem 0 0; +} +.main .bldQueue li:not(:last-child) .queued:after, +.main .bldQueue.right li:not(:last-child) .queued:after { + content: " -> "; +} +.main .bldQueue li:not(:last-child) .qany:after, +.main .bldQueue.right li:not(:last-child) .qany:after { + content: ", "; +} +.main .resQueue h2 { + border-bottom: solid 0.0625rem; +} +.main .resQueue h2, +.main .resQueue .buildList { + margin-left: 2rem; + margin-top: 0; +} +.main .resQueue .buildList li { + display: inline-block; + height: 1rem; + padding: 0 0.25rem 0 0; +} +.main .resQueue .buildList li:not(:last-child) .queued:after { + content: " -> "; +} +.main .resQueue .buildList li:not(:last-child) .qany:after { + content: ", "; +} +.main .resTabs .tab-content > .tab-item { + height: calc(100vh - 8rem); + overflow-y: auto; + overflow-x: hidden; +} +@supports (scrollbar-width: auto) { + .main .resTabs .tab-content > .tab-item { + scrollbar-width: thin; + } +} +.main .govTabs2 .tab-content > .tab-item { + height: calc(100vh - 12.3rem); + padding-right: 0; + overflow: visible; + align-self: start; +} +.main #mainTabs > .tab-content { + overflow-x: clip; + min-height: calc(100vh); +} +.main .b-tabs .tabs { + margin-bottom: 0 !important; +} +.main .b-tabs .tab-content { + position: relative; + /* Migrate all padding to children to prevent absolute positioning offsets */ + padding: 0 !important; +} +.main .b-tabs .tab-content > .tab-item { + width: 100%; + /* Preserve exact left/right padding so layouts match */ + padding-left: 1rem; + padding-right: 0.15rem; + padding-top: 0; + padding-bottom: 0; +} +.main #mainTabs > .tab-content > .tab-item { + padding-top: 0.75rem !important; + height: calc(100vh - 5rem); + padding-bottom: 3%; + top: 0; +} +.main .b-tabs .tab-content > .tab-item.sticky { + position: relative; +} +.main .resTabs { + margin-top: -0.75rem; +} +.main .resTabs > .tab-content { + margin-top: 0.5rem; +} +@-moz-document url-prefix() { + .main .b-tabs .tab-content > .tab-item { + will-change: transform; + } +} +.main .b-tabs .tab-content { + display: grid; +} +.main .b-tabs .tab-content > .tab-item { + grid-area: 1 / 1; + /* prevent grid's default align-self:stretch from forcing a tab-item taller than + its content important for tabs like Industry whose tab-item is also a flex + container (class="industryTab"), since a stretch-forced height would cascade + into the flex children and make them grow to fill the extra space. */ + align-self: start; + padding-bottom: 0.85rem; +} +.main .b-tabs .tab-content > .slide-next-enter-active, +.main .b-tabs .tab-content > .slide-next-leave-active, +.main .b-tabs .tab-content > .slide-prev-enter-active, +.main .b-tabs .tab-content > .slide-prev-leave-active, +.main .b-tabs .tab-content > .slide-down-enter-active, +.main .b-tabs .tab-content > .slide-down-leave-active, +.main .b-tabs .tab-content > .slide-up-enter-active, +.main .b-tabs .tab-content > .slide-up-leave-active { + transition-duration: 225ms !important; +} +.main .resTabs > section::-webkit-scrollbar { + width: 6px; + background: transparent; +} +.main .resTabs > section::-webkit-scrollbar-track { + background: transparent; +} +.main .resTabs > section::-webkit-scrollbar-thumb { + background: rgba(128, 128, 128, 0.4); + border-radius: 3px; +} +.main .resTabs > section::-webkit-scrollbar-thumb:hover { + background: rgba(128, 128, 128, 0.8); +} +.main .b-tabs .tab-content > .slide-next-enter-from, +.main .b-tabs .tab-content > .slide-prev-leave-to { + transform: translate3d(-100%, 0, 0); +} +.main .b-tabs .tab-content > .slide-next-leave-to, +.main .b-tabs .tab-content > .slide-prev-enter-from { + transform: translate3d(100%, 0, 0); +} +.main .b-tabs .tab-content > .slide-down-enter-from, +.main .b-tabs .tab-content > .slide-up-leave-to { + transform: translate3d(0, -100%, 0); +} +.main .b-tabs .tab-content > .slide-down-leave-to, +.main .b-tabs .tab-content > .slide-up-enter-from { + transform: translate3d(0, 100%, 0); +} +.main #mTabSettings { + padding-right: 0.5rem; +} +.main #tech.tab-item { + padding-bottom: 2rem !important; +} +.main .resources { + margin-top: 0.25rem; + padding-right: 0.25rem; + height: calc(100vh - 5rem); +} +@media only screen and (max-width: 88.5rem) { + .main .resources { + height: calc(100vh - 16.5rem); + } +} +@media only screen and (max-width: 48rem) { + .main .resources { + position: relative; + } +} +.main .resources .resource { + display: flex; + cursor: default; +} +.main .resources .resource div { + width: 70%; + display: flex; + justify-content: space-between; +} +.main .resources .resource > :nth-child(2) { + text-align: center; + width: 4%; +} +.main .resources .resource .interact { + cursor: pointer; +} +.main .resources .resource > :nth-child(3) { + text-align: right; + width: 26%; +} +.main .resources .resource .craftable { + width: 30%; + text-align: right; +} +.main .resources .resource .craftable > span { + display: inline; + margin-left: 0.25rem; +} +.main .evolving { + margin-top: 1rem; + max-width: 51rem; +} +@media only screen and (max-width: 113rem) { + .main .evolving { + max-width: 38rem; + } +} +@media only screen and (max-width: 88.5rem) { + .main .evolving { + max-width: 51rem; + } +} +@media only screen and (max-width: 76.375rem) { + .main .evolving { + max-width: 38rem; + } +} +@media only screen and (max-width: 59rem) { + .main .evolving { + max-width: 25rem; + } +} +@media only screen and (max-width: 48rem) { + .main .evolving { + max-width: 38rem; + } +} +@media only screen and (max-width: 45rem) { + .main .evolving { + max-width: 25rem; + } +} +@media only screen and (max-width: 32rem) { + .main .evolving { + max-width: 12rem; + } +} +.main .evolving .progress { + height: 1.2rem; +} +.main .evolving::after { + display: block; + position: relative; + top: -1.375rem; + content: "Evolving"; + text-align: center; + color: #af8d07; + margin-bottom: -1.25rem; +} +.main .content .settings { + margin-left: 1rem; + height: calc(100vh - 6.5rem); +} +.main .content .tab-content { + padding: 0 0.25rem 0 0; +} +.main .content > .tab-content { + padding: 0 0.25rem 0 1rem; +} +.main .content .tab-item { + padding: 0 0 0 1rem; +} +.main .content .tabs ul { + margin-top: 0.5rem; +} +.main .content #oldTech { + margin-bottom: 4rem; + padding-bottom: 2rem !important; +} +.main .content .mtab { + height: calc(100vh - 10rem); +} +.main .content .action, +.modal .action { + display: inline-block; + position: relative; +} +.main .content .action .aTitle, +.modal .action .aTitle { + overflow-wrap: break-word; + white-space: normal; + line-height: 1rem; +} +.main .content .action a.button, +.main .content .action span.oldTech, +.modal .action a.button, +.modal .action span.oldTech { + width: 12.625rem; + margin: 0.375rem 0.375rem 0 0; +} +.main .content .action a.button span.count, +.main .content .action span.oldTech span.count, +.modal .action a.button span.count, +.modal .action span.oldTech span.count { + position: absolute; + top: 0; + right: 0; + display: inline-block; + height: 1.0625rem; + line-height: 0.875rem; + padding: 0 0.25rem; + border-radius: 0 0.25rem 0 0.4375rem; + overflow: hidden; +} +.main .content .action span.oldTech, +.modal .action span.oldTech { + cursor: default; + display: inline-flex; + margin: 0 1rem 0 0; +} +.main .content .action div.special, +.main .content .action span.on, +.main .content .action span.off, +.modal .action div.special, +.modal .action span.on, +.modal .action span.off { + position: absolute; + cursor: pointer; + display: block; + height: 1.0625rem; + line-height: 0.8125rem; + padding: 0 0.25rem; + overflow: hidden; +} +.main .content .action div.special, +.modal .action div.special { + height: 1.125rem; + line-height: 0.9375rem; + top: 0.5rem; + left: 0; + border-radius: 0.25rem 0 0.4375rem 0; + width: 1.1875rem; +} +.main .content .action div.special svg, +.modal .action div.special svg { + position: relative; + left: -0.125rem; +} +.main .content .action span.on, +.modal .action span.on { + bottom: 0; + right: 0.375rem; + border-radius: 0.4375rem 0 0.25rem 0; +} +.main .content .action span.on .flair, +.modal .action span.on .flair { + position: relative; + left: 0.25rem; + top: 0; +} +.main .content .action span.off, +.modal .action span.off { + bottom: 0; + left: 0; + border-radius: 0 0.4375rem 0 0.25rem; +} +.main .content .action span.off .flair, +.modal .action span.off .flair { + position: relative; + left: 0.125rem; + top: 0; +} +.main .content .action div.repair, +.modal .action div.repair { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 0.25rem; +} +.main .content .action div.repair .progress, +.modal .action div.repair .progress { + height: 0.25rem; + background: transparent; +} +.main .content .action .flair, +.modal .action .flair { + position: absolute; + right: 0.625rem; + top: 0.5rem; + height: 0.5rem; + line-height: 0.5rem; + margin: 0; + padding: 0; +} +.main .content .action .flair:nth-of-type(2), +.modal .action .flair:nth-of-type(2) { + right: 0.625rem; + top: 1.1875rem; +} +.main .content .action .flair:nth-of-type(3), +.modal .action .flair:nth-of-type(3) { + right: 0.625rem; + top: 1.875rem; +} +.main .content .action .flair:nth-of-type(4), +.modal .action .flair:nth-of-type(4) { + right: 1.3125rem; + top: 0.5rem; +} +.main .content .action .flair:nth-of-type(5), +.modal .action .flair:nth-of-type(5) { + right: 1.3125rem; + top: 1.1875rem; +} +.main .content .action .flair:nth-of-type(6), +.modal .action .flair:nth-of-type(6) { + right: 1.3125rem; + top: 1.875rem; +} +.main .content .action.disabled, +.modal .action.disabled { + display: none; +} +.main .content .enemyFortress { + display: inline-block; + position: relative; + min-width: 17.375rem; + height: 3.125rem; + margin: 0.375rem 0.375rem 0 0; + border-radius: 0.25rem; +} +.main .content .enemyFortress .fortRow > span { + display: inline-block; +} +.main .content .enemyFortress .fortRow :first-child { + margin-left: 0.5rem; + margin-right: 0; + float: left; +} +.main .content .enemyFortress .fortRow :last-child { + margin-left: 0.25rem; + margin-right: 0.5rem; + float: right; +} +.main .content .enemyFortress .second { + line-height: 2rem; +} +.main .content .enemyFortress .second a.button { + height: 1.5rem; + margin-top: 0.25rem; + padding-left: 0.25rem; + padding-right: 0.25rem; + min-width: 4.5rem; +} +.main .content .geck { + width: 100%; + text-align: center; +} +.main .content .challenge { + width: 100%; + text-align: center; +} +@media only screen and (max-width: 113rem) { + .main .content .challenge { + max-width: 38rem; + } +} +@media only screen and (max-width: 88.5rem) { + .main .content .challenge { + max-width: 51rem; + } +} +@media only screen and (max-width: 76.375rem) { + .main .content .challenge { + max-width: 38rem; + } +} +@media only screen and (max-width: 59rem) { + .main .content .challenge { + max-width: 25rem; + } +} +@media only screen and (max-width: 48rem) { + .main .content .challenge { + max-width: 38rem; + } +} +@media only screen and (max-width: 45rem) { + .main .content .challenge { + max-width: 25rem; + } +} +@media only screen and (max-width: 32rem) { + .main .content .challenge { + max-width: 12rem; + } +} +.main .content .challenge .simButton { + margin-top: 0.5rem; +} +.main .content .divider { + width: 100%; + text-align: center; + border-bottom: 0.0625rem solid; + margin: 0.625rem 0 0.625rem; +} +.main .content .divider h2 { + position: relative; + bottom: -0.5rem; + padding: 0 0.625rem; +} +.main .jobList { + max-width: 19rem; +} +.main .job { + margin-left: 0.5rem; + display: flex; + min-width: 18rem; + align-items: center; +} +.main .job .controls { + margin-bottom: 1px; +} +.main .job .controls .sub { + border-right: 0; +} +.main .job .job_label { + cursor: default; + display: flex; + align-items: center; +} +.main .job .job_label span { + display: inline-block; +} +.main .job .job_label :first-child { + margin-right: 0.5rem; + margin-bottom: 0; + width: 10rem; + font-size: 1rem; + font-weight: normal; + display: inline-block; +} +.main .job .job_label :nth-child(2) { + min-width: 4.5rem; + text-align: center; +} +.main .job .job_label .count > span { + margin-left: 1rem; + width: 1rem; +} +.main .job .job_label .count svg { + width: 1rem; +} +.main .sshifter { + margin-left: 1rem; +} +.main .sshifter button { + height: 1.5rem; + margin-left: 0.25rem; +} +.main .foundry { + margin-top: 1rem; +} +.main #civics { + padding: 0.5rem; +} +.main .civics { + padding: 0; +} +.main .civics .revolution { + margin-left: 0.375rem; +} +.main .government { + margin-bottom: 0; +} +.main .government .header { + margin-bottom: 0.5rem; +} +.main .government .govType { + margin-bottom: 0.25rem; + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} +.main .government .govType > div:first-child { + margin-right: 0.5rem; +} +.main .government .govType button { + margin-top: 0.25rem; + height: 1.75rem; + line-height: 1.75rem; + padding: 0 0.5rem; +} +.main .government .taxRate { + height: 1.25rem; + display: flex; +} +.main .government .taxRate :first-child { + cursor: default; + display: inline-block; + line-height: 1.25rem; +} +.main .government .foreign { + margin-bottom: 1rem; +} +.main .government .foreign .gaction { + display: inline-block; + width: 8rem; +} +.main .government .foreign .glabel { + display: inline-block; + width: 9rem; +} +.main .government .foreign .glevel { + display: inline-block; + width: 8rem; +} +.main .government .foreign button { + margin-top: 0.25rem; + height: 1.75rem; + line-height: 1.75rem; + padding: 0 0.5rem; +} +.main .fort { + width: 100%; + min-height: 1rem; + margin: 0.25rem 0; + padding: 0.25rem 0; + border-top: 1px solid; + border-bottom: 1px solid; +} +.main .fort .current { + position: relative; + bottom: 0.0625rem; +} +.main .fort > div { + margin-top: 0.25rem; +} +.main .fort > div:first-child { + margin-top: 0; +} +.main .fort > div:first-child span:nth-child(1) { + margin-right: 0.5rem; +} +.main .fort .defense { + margin-right: 0.5rem; +} +.main .fort .training span { + display: inline-block; +} +.main .fort .training progress { + display: inline-block; + width: 90%; +} +.main .fort .patrol { + position: relative; + top: 4px; + left: 4px; +} +.main .fort .merctip { + margin-top: 0.25rem; +} +.main .fort .observe, +.main .fort .merc { + height: 1.25rem; + margin-left: 0.25rem; + line-height: 0rem; +} +.main .fort .training .observe { + bottom: 0.25rem; +} +.main .fort .bunks { + margin: 0.25rem 0 0.125rem; +} +.main .garrison .header { + margin-bottom: 0.5rem; +} +.main .garrison .bunks { + margin: 0.75rem 0.75rem 0; +} +.main .garrison .bunk { + margin-bottom: 0; + margin-right: 0.5rem; +} +.main .garrison .bunk > div { + padding-bottom: 0; +} +.main .garrison .bunk .hire { + padding-left: 0; + margin-top: 1rem; +} +.main .garrison .barracks { + margin-bottom: 0.25rem; +} +.main .garrison .training { + margin-bottom: 0.75rem; +} +.main .garrison .training > span { + display: inline-block; +} +.main .garrison .training > progress { + display: inline-block; + width: calc(100% - 4rem); +} +.main .garrison button { + height: 2rem; + line-height: 1rem; +} +.main .garrison button.first { + margin-right: 0.5rem; +} +.main .garrison .war { + padding-right: 0; + margin: 0.75rem 0.75rem 0; +} +.main .garrison .war .tactics { + margin: 0.5rem 0; + height: 1.25rem; + display: flex; +} +.main .garrison .war .tactics > :first-child { + display: inline-block; + line-height: 1.125rem; + width: 4.75rem; +} +.main .garrison .launch { + min-width: 10rem; + margin-top: 0.75rem; + margin-right: 0.5rem; + text-align: center; +} +.main .garrison .launch .campaign { + width: 10rem; + white-space: normal; + margin-top: 0.5rem; +} +.main #c_garrison.garrison { + margin-top: 0.25rem; +} +.main #c_garrison.garrison > div:nth-child(2) { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} +.main .armHead > span { + margin-left: 1rem; +} +.main .fleet { + display: flex; + flex-wrap: wrap; + width: 100%; + min-height: 1rem; + margin: 0.25rem 0; + padding: 0.25rem 0; + border-top: 1px solid; + border-bottom: 1px solid; +} +.main .fleet .area { + width: 8rem; +} +.main .fleet .area > span { + display: inline-block; + min-width: 8rem; + white-space: nowrap; +} +.main .fleet .area .ship { + text-align: center; +} +.main .fleet .area .ship .current { + min-width: 2.5rem; + width: 2.5rem; + font-size: 1rem; +} +.main .pirate { + margin-right: 0.75rem; + margin-left: 0.75rem; +} +.main .militaryTab .garrison .battle { + margin-bottom: 0.5rem; +} +.main .militaryTab .garrison .battle .war, +.main .militaryTab .garrison .battle .launch { + margin: 0.25rem 0 0 0.75rem; +} +.main .militaryTab .garrison .columns { + flex-wrap: wrap; +} +.main .militaryTab, +.main .mechTab { + margin-left: 1rem; +} +.main #hellTabs > section { + height: 100vh; +} +.main .hellReports { + display: flex; + justify-content: space-between; +} +.main .hellReports > div { + height: calc(100vh - 10rem); +} +.main .hellReports .reportList { + top: 0; + width: 25%; + box-sizing: border-box; + border-right: 0.0625rem solid; + margin-right: 1rem; +} +.main .hellReports .reportDisplay { + width: 75%; + font-size: 0.9rem; +} +.main .hellReports .reportDisplay span:not(:last-child) { + margin-right: 0.5rem; +} +.main .hellReports .reportDisplay p { + margin-bottom: 0; +} +.main .hellReports .reportDisplay .reportStats { + padding-bottom: 0.5rem; + border-bottom: 0.0625rem solid; + margin-bottom: 0.5rem; +} +.main .hellReports .reportDisplay .reportStats h2 { + margin-top: 0; +} +.main .hellReports .reportDisplay .reportStats h2:not(:last-child) { + margin-right: 1rem; +} +.main .hellReports .right { + margin-left: 0.5rem; + padding-left: 0.5rem; + border-left: 0.0625rem solid; +} +.main .hellAnalysis { + display: flex; + justify-content: space-between; + width: 100%; +} +.main .hellAnalysis .analysisColumn { + width: 50%; + margin: 0 10px; +} +.main .hellAnalysis .analysisColumn:not(:last-child) { + border-right: 0.0625rem solid; +} +.main .hellAnalysis h2:not(:first-child) { + margin: 0 0 0 1rem; +} +.main #hellAnalysis { + height: calc(100vh - 10rem); +} +.main #hellAnalysis > div:not(:last-child) { + margin-bottom: 0.5rem; + border-bottom: 0.0625rem solid; + padding-bottom: 0.5rem; +} +.main .graphingArea { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; + width: 100%; +} +.main .graphContainer { + width: 45%; +} +.main .graphControls div { + display: flex; + justify-content: space-between; +} +.main .graphControls div h2 { + margin: 0; +} +.main .graphControls .graphTitle { + justify-content: center; +} +.main .graph { + margin: 1%; + padding: 3%; + border: 0.0625rem solid; +} +.main .mechAssembly { + padding-bottom: 0.5rem; + border-bottom: 0.0625rem solid; +} +.main .mechAssembly .button { + height: 2rem; +} +.main .mechAssembly .bayOptions { + margin-top: 0.5rem; +} +.main .mechAssembly .bayOptions .dropdown { + margin: 0 0.5rem 0.25rem 0; +} +.main .mechAssembly .mechAssemble { + margin: 1rem 0 0 0; +} +.main .mechAssembly .checkbox { + margin-left: 0.5rem; + bottom: -0.25rem; +} +.main .mechList .mechRow .gearList { + display: inline-flex; +} +.main .mechList .mechRow .gearList.titan { + display: inline-grid; +} +.main .mechList .mechRow .gearList > div { + margin: 0 0.125rem; +} +.main #mechLab { + display: flex; + flex-direction: column; + overflow-y: hidden; +} +.main #mechLab #mechList { + flex: 1 1 0; + min-height: 0; + height: auto; + padding-bottom: 0.5rem; + padding-top: 0.5rem; +} +.main .gFort { + padding-top: 0.5rem; + border-bottom: 0; + margin-top: 0.5rem; +} +.main .gFort .pad { + margin-right: 0.25rem; +} +.main .mad { + margin-top: 1rem; + max-width: 28rem; + padding: 1rem; + border: 0.0625rem solid #fff; + border-radius: 0.5rem; + background: repeating-linear-gradient(45deg, #fbfd84, #fbfd84 10px, #000000 10px, #000000 20px); +} +.main .mad .warn { + background: #000; + color: #fff; + border-radius: 0.5rem; + padding: 0.25rem; + font-size: 0.75rem; + text-align: center; + margin-bottom: 0.25rem; +} +.main .mad .defcon { + display: inline-block; + width: 50%; + text-align: center; +} +.main .armed .mad { + border-color: #8f0000; + background: repeating-linear-gradient(45deg, #8f0000, #8f0000 10px, #000000 10px, #000000 20px); +} +.main .pad { + margin-left: 1rem; +} +.main .market-header { + padding-bottom: 0.5rem; + margin: 0.5rem 1rem; +} +.main .market-header .trade { + position: relative; + bottom: -0.125rem; + margin-left: 1rem; +} +.main .market-header .b-numberinput { + width: 100%; +} +.main .market-header .market { + margin-left: 1rem; + margin-right: 1rem; +} +.main .market-header .market .button { + height: 1.6875rem; +} +.main .market-header .market input { + height: 1.6875rem; +} +.main .market-header .help { + margin-left: 1rem; +} +.main .galaxyTrade { + margin-right: 0; +} +.main .trade-header { + margin: 0.5rem 0; + justify-content: center; +} +.main .trade-offer { + margin: 0; + padding: 0.125rem 0; +} +.main .trade-offer .offer-item { + width: 7.5rem; +} +.main .trade-offer .offer-vol { + width: 4.5rem; + border-right: 1px solid; + margin-right: 0.125rem; +} +.main .setting { + margin: 0 0.25rem 0.5rem 0; +} +.main .importExport, +.main .stringPack { + margin-top: 1rem; + padding-right: 0.3rem; +} +.main #customFile, +.main #stringPackFile { + margin-top: 0.75rem; +} +.main .reset { + margin-top: 3rem; +} +.main .reset .notification { + margin-top: 0.5rem; +} +.main .cstat { + margin-top: 1rem; +} +.main #achievePanel > div { + width: 100%; +} +.main .achievement { + position: relative; + border: 0.0625rem solid; + padding: 0.125rem; + margin: 0.125rem 0; + width: 100%; +} +.main .achievement span { + display: inline-block; +} +.main .achievement span > span.row { + display: block; +} +.main .achievement > :first-child { + margin-left: 0.5rem; + width: 100%; +} +.main .achievement > :nth-child(2), +.main .achievement > div.perk { + margin-left: 0.5rem; +} +.main .achievement .flair { + display: block; + position: absolute; + right: 0.1875rem; + top: 0.1875rem; + height: 0.5rem; + line-height: 0.5rem; + margin: 0; + padding: 0; +} +.main .achievement .flair:nth-of-type(2) { + right: 0.1875rem; + top: 1.375rem; +} +.main .achievement .flair:nth-of-type(3) { + right: 1.3125rem; + top: 0.1875rem; +} +.main .achievement .flair:nth-of-type(4) { + right: 1.3125rem; + top: 1.375rem; +} +.main .achievement .flair:nth-of-type(5) { + right: 2.4375rem; + top: 0.1875rem; +} +.main .achievement .flair:nth-of-type(6) { + right: 2.4375rem; + top: 1.375rem; +} +.main .achievement .star1, +.main .achievement .star2, +.main .achievement .star3, +.main .achievement .star4, +.main .achievement .star5 { + width: 1rem; +} +.main .governor.candidates { + display: table; + width: 100%; +} +.main .governor .appoint { + display: table-row; +} +.main .governor .appoint > span { + display: table-cell; +} +.main .governor .appoint.header > span { + padding-bottom: 0.5rem; +} +.main .governor .appoint button { + height: 1.5rem; + margin-bottom: 0.25rem; +} +.main .govOffice .head { + display: flex; + justify-content: space-between; + align-items: center; +} +.main .govOffice .head .fire button { + display: block; + line-height: 1rem; + padding: 0 0.5rem; +} +.main .govOffice .tConfig { + margin-top: 0.5rem; +} +.main .govOffice .spyopConfig { + margin-left: 0; +} +.main .govOffice .spyopConfig li { + cursor: pointer; + display: inline-block; + height: 1rem; + padding: 0 0.25rem 0 0; +} +.main .govOffice .spyopConfig li:not(:last-child):after { + content: " -> "; +} +.main .govOffice .options { + margin-top: 1rem; +} +.main .govOffice .options .storage { + display: flex; + clear: right; +} +.main .govOffice .options .storage > div { + width: 50%; +} +.main .govOffice .options .storage .control { + margin-right: 1rem; +} +.main .govOffice .options .storage .control input { + height: 1.5rem; +} +.main .govOffice .options .hRow > :first-child, +.main .govOffice .options .hRow > :nth-child(2) { + display: inline-block; +} +.main .govOffice .options .hRow > :nth-child(2) { + float: right; +} +.main .govOffice .options .bal_storage { + display: inline-flex; + flex-wrap: wrap; +} +.main .govOffice .options .bal_storage .ccmOption { + display: flex; + justify-content: space-between; + align-items: center; + position: relative; + width: 50%; +} +.main .govOffice .options .bal_storage .ccmOption > span { + display: inline-block; + width: 7.5rem; + overflow-wrap: anywhere; + line-height: 1rem; +} +.main .govOffice .options .bal_storage .ccmOption .field-body .field { + display: flex; + flex-wrap: wrap; + width: 5rem; +} +.main .govOffice .options .bal_storage .ccmOption .field-body .control { + width: 0.5625rem; + margin-right: 1rem; +} +.main .govOffice .options .bal_storage .ccmOption .field-body .control label { + height: 1.5rem; + padding: 0 0.75rem; +} +.main .govOffice .options .bal_storage .ccmOption:not(.m) .field-body .b3 label { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.main .govOffice .options .bal_storage .ccmOption:not(.m) .field-body .b5 label { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.main .govOffice .options .bal_storage .ccmOption.m { + height: 2.125rem; + line-height: 2.125rem; +} +.main .govOffice .options .bal_storage .ccmOption.m .field-body .control label { + height: 1rem; + font-size: 0.75rem; +} +.main .govOffice .options .bal_storage .ccmOption.m .field-body .b1 label { + border-bottom-left-radius: 0; +} +.main .govOffice .options .bal_storage .ccmOption.m .field-body .b3 label { + border-top-right-radius: 4px; +} +.main .govOffice .options .bal_storage .ccmOption.m .field-body .b4 label { + border-bottom-left-radius: 4px; +} +.main .govOffice .options .bal_storage .ccmOption.m .field-body .b6 label { + border-top-right-radius: 0; +} +.main .govOffice .options .trash .has-addons { + display: initial; +} +.main .govOffice .options .trash .has-addons .trashButton { + cursor: pointer; +} +.main #perksPanel .achievement { + margin: 0.25rem 0; +} +.main .space, +.main .city, +.main .tech { + margin-top: 0.625rem; +} +.main .space:nth-child(2), +.main .city:first-child, +.main .tech:first-child { + margin-top: 0; +} +.main .regionControl, +.main .regionSupport { + margin-left: 0.5rem; +} +.main .space { + display: flex; +} +.main .space .syndThreat { + margin-left: 1rem; +} +.large_log .main .msgQueue { + font-size: 1rem; +} +.large_all .main .content .action a.button, +.large_all .main .content .action span.oldTech, +.large_all .modal .action a.button, +.large_all .modal .action span.oldTech { + width: 11.75rem; + margin: 0.25rem 0.25rem 0 0; +} +.large_all .main .content .action span.on, +.large_all .modal .action span.on { + right: 0.25rem; +} +.large_all .main .content .action div.special, +.large_all .modal .action div.special { + top: 0.25rem; +} +.large_all .main .msgQueue { + font-size: 0.9rem; +} +.graphCreator > div:not(:last-child) { + margin-bottom: 0.5rem; + border-bottom: 0.0625rem solid; + padding-bottom: 0.5rem; +} +.pylon .current { + width: 5.25rem; +} +.modalBody .gap { + margin: 0 0.25rem 0.5rem; +} +.modalBody.max40 { + max-width: 40rem; +} +.modalBody .wrap { + max-width: 25.5rem; + margin: 0 auto; +} +.popper { + z-index: 100000; +} +.popper .craft-elm { + white-space: nowrap; +} +.popper .grad-from-left, +.popper .grad-from-left-warn, +.popper .grad-from-right { + background-size: 100%; + -webkit-background-clip: text; + -moz-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + -moz-text-fill-color: transparent; +} +.storage-header { + margin-bottom: 0.25rem; +} +.storage-header button { + font-size: 0.875rem; +} +.storage-header .crate { + margin-left: 13rem; +} +.storage-header .container { + margin-left: 3rem; +} +.market-item { + margin: 0.125rem 0 0 1rem; + display: flex; + cursor: default; +} +.market-item .res { + display: inline-flex; + cursor: default; + margin-right: 0.5rem; + width: 8rem; +} +.market-item .buy { + display: inline-flex; +} +.market-item .sell { + display: inline-flex; + margin-left: 0.5rem; +} +.market-item .route { + position: relative; + bottom: 1px; +} +.market-item .order { + display: inline-block; + font-size: 0.875rem; + margin: 0 0.25rem; + padding-top: 0.125rem; + border-radius: 0.375rem; + line-height: 1rem; + height: 1.375rem; + min-width: 4rem; + text-align: center; + cursor: pointer; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + min-width: 4.5rem; +} +.market-item .trade { + margin-left: 1rem; + min-width: 9.375rem; +} +.market-item .trade .current { + width: 3rem; +} +.market-item .trade .add, +.market-item .trade .sub { + position: relative; + top: 0.0625rem; + padding: 0 0.375rem; + line-height: 1rem; +} +.market-item .trade .mass { + margin-left: 1rem; +} +.market-item .crtTotal { + margin-left: 11.5rem; +} +.market-item .cntTotal { + margin-left: 2.0625rem; +} +.market-item .crtTotal span:nth-child(2), +.market-item .cntTotal span:nth-child(2) { + display: inline-block; + width: 6rem; + text-align: center; +} +.market-item .tradeTotal { + margin-left: 23.25rem; +} +.market-item .tradeTotal.nt { + margin-left: 11.5rem; +} +.modal .actionSpace { + padding: 0.25rem; + min-width: 38rem; + border-radius: 0.5rem; +} +.modal .actionSpace .action a.button { + margin: 0.25rem; +} +.modal .modalBody { + max-height: calc(100vh - 5rem); +} +.modal .msgInput .checkbox { + margin: 0 3rem; +} +.modal .msgInput .checkbox .control-label { + padding: 0; +} +.modal .msgInputApply { + margin-top: 1rem; +} +.modal .modal-background { + background-color: rgba(10, 10, 10, 0); +} +.modal .modal-content { + box-shadow: 0px 0px 1rem black; + border-radius: 1rem; +} +.modal .genus_selection > section { + display: flex; + flex-wrap: wrap; + flex-direction: row; + justify-content: space-between; +} +.main > div.popper, +body .modal > div.popper { + margin-top: 0.125rem; + text-align: center; + padding: 0.5rem 0.75rem; + max-width: 18rem; + border-radius: 0.25rem; + line-height: 1.3125rem; +} +.main > div.popper div.aTable, +body .modal > div.popper div.aTable { + columns: 2; +} +.main > div.popper div.aTable span, +body .modal > div.popper div.aTable span { + display: flex; +} +.main > div.popper.breakdown, +body .modal > div.popper.breakdown { + max-width: initial; +} +.main > div.popper .modal_bd, +body .modal > div.popper .modal_bd { + display: table; + width: 100%; +} +.main > div.popper .modal_bd :first-child, +body .modal > div.popper .modal_bd :first-child { + display: table-cell; + text-align: left; + padding-right: 0.5rem; +} +.main > div.popper .modal_bd :nth-child(2), +body .modal > div.popper .modal_bd :nth-child(2) { + display: table-cell; + text-align: right; +} +.main > div.popper .modal_bd.sum, +body .modal > div.popper .modal_bd.sum { + border-top: 0.0625rem solid; +} +.main > div.popper .resBreakdown .parent, +body .modal > div.popper .resBreakdown .parent { + display: flex; +} +.main > div.popper .resBreakdown .parent div.col, +body .modal > div.popper .resBreakdown .parent div.col { + padding-left: 0.5rem; + margin-left: 0.5rem; + border-left: 1px solid; +} +.main > div.popper > .flair, +body .modal > div.popper > .flair { + margin-top: 0.5rem; + font-size: 0.75rem; + text-align: right; + line-height: 0.75rem; +} +.main > div.popper.flair, +body .modal > div.popper.flair { + padding-bottom: 0.25rem; +} +.main > div.popper .flexAround, +body .modal > div.popper .flexAround { + display: flex; + flex-wrap: wrap; + justify-content: space-around; +} +.main > div.popper .example, +body .modal > div.popper .example { + text-align: left; + white-space: pre; +} +.main > div.popper .pGeoList .pGeo, +body .modal > div.popper .pGeoList .pGeo { + min-width: 49%; +} +.infoBox { + max-width: 50rem; + margin-bottom: 0.5rem; + margin-right: 0.5rem; + padding: 0.25rem 0.5rem; +} +.infoBox h2 { + margin-bottom: 0.25rem; + border-bottom: 0.0625rem solid; +} +.infoBox div { + margin-bottom: 0.5rem; + clear: both; +} +.infoBox .type { + display: flex; + justify-content: space-between; +} +.infoBox .type > span:nth-child(1) { + display: block; + text-align: left; +} +.infoBox .type > span:nth-child(2) { + display: block; + text-align: right; +} +.infoBox .desc { + text-align: left; +} +.infoBox .condense { + margin: 0; +} +.main > div.popper.wide, +body .modal > div.popper.wide { + max-width: initial; +} +.arpa ul, +.resTabs ul { + margin-top: 0; +} +.arpa .tabs > ul, +.resTabs .tabs > ul { + margin-left: 1rem; +} +.arpa .tabs, +.resTabs .tabs { + overflow-x: auto; +} +.modalBox, +.industry { + padding: 1rem; + border-radius: 1rem; + text-align: center; + min-height: 9.5rem; +} +.modalBox p, +.industry p { + margin-bottom: 0.5rem; +} +.modalBox .market-item, +.industry .market-item { + display: block; + margin-top: 0.5rem; + padding-top: 0.5rem; + margin-left: 0; +} +.modalBox .crates .crateHead, +.industry .crates .crateHead { + margin-bottom: 0.5rem; +} +.modalBox .crates .crateHead :first-child, +.industry .crates .crateHead :first-child { + margin-right: 1rem; +} +.modalBox .crates .crateHead :last-child, +.industry .crates .crateHead :last-child { + margin-left: 1rem; +} +.modalBox .crates button, +.industry .crates button { + font-size: 0.875rem; + margin: 0 0.25rem; + height: 1.8rem; +} +.modalBox .divide, +.industry .divide { + margin-top: 0.5rem; + padding-top: 0.5rem; +} +.modalBox .current, +.industry .current { + position: relative; + bottom: 0.0625rem; +} +.modalBox .smelting, +.industry .smelting { + margin: 0.5rem 0 0.75rem; + padding-top: 0.5rem; +} +.modalBox .smelting button, +.industry .smelting button { + font-size: 0.875rem; + margin: 0 0.25rem; + height: 1.8rem; +} +.modalBox .smelting .button.steel, +.industry .smelting .button.steel { + white-space: pre; +} +.modalBox .factory :first-child, +.industry .factory :first-child { + display: inline-block; + width: 8rem; + text-align: left; +} +.modalBox .crateModal, +.industry .crateModal { + margin-bottom: 1.25rem; +} +.modalBox .flexAround, +.industry .flexAround { + margin-top: 0.25rem; + display: flex; + justify-content: space-evenly; +} +.modalBox .flexWrap, +.industry .flexWrap { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; +} +.modalBox .flexWrap > div, +.industry .flexWrap > div { + margin-bottom: 0.25rem; +} +.modalBox .fanatic section, +.industry .fanatic section { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; +} +button[disabled] { + pointer-events: none; + cursor: not-allowed; +} +span.inline { + display: inline-block; +} +.modalBox .trade-offer { + margin: 0; + padding: 0.125rem 0; +} +.modalBox .trade-offer .offer-item { + width: 7.5rem; +} +.modalBox .trade-offer .offer-vol { + width: 4.5rem; + border-right: 1px solid; + margin-right: 0.125rem; +} +.modalBox .market-item { + display: flex; + justify-content: center; +} +.modalBox .trade-header { + border-top: 0; + padding-top: 0; +} +.industryTab, +.psychicTab, +.supernaturalTab { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-content: flex-start; + align-items: flex-start; +} +.industry { + margin-bottom: 0.5rem; + border-bottom: 0.0625rem solid; + border-top: 0.0625rem solid; + width: 27.5rem; +} +.industry .header { + margin-bottom: 0.25rem; + padding-bottom: 0.25rem; + width: 100%; +} +.industry .gap { + margin-top: 0.5rem; + width: 100%; +} +.topBar, +.promoBar { + display: inline-flex; + height: 1.2rem; + line-height: 1.2rem; + width: 100%; + position: fixed; +} +.topBar { + top: 0; + z-index: 10; +} +.topBar .calendar { + margin: 0 auto; +} +.topBar .calendar .temp { + margin-left: 0.125rem; + font-size: 0.875rem; +} +.topBar .calendar .weather { + font-size: 0.8125rem; +} +.topBar .calendar .moon { + font-size: 0.875rem; + color: #fff; +} +.topBar .calendar .wi-thermometer-exterior { + color: #00d6b2; +} +.topBar .calendar .wi-thermometer { + color: #f10202; +} +.topBar .calendar .wi-day-sunny, +.topBar .calendar .wi-day-windy { + color: #d0ff00; +} +.topBar .calendar .wi-cloud, +.topBar .calendar .wi-cloudy-gusts { + color: #9ea387; +} +.topBar .calendar .wi-rain, +.topBar .calendar .wi-storm-showers { + color: #00d6b2; + position: relative; + bottom: 0.125rem; +} +.topBar .calendar .wi-snow, +.topBar .calendar .wi-snow-wind { + color: #fff; + position: relative; + bottom: 0.125rem; +} +.topBar .calendar .atime { + margin-left: 1rem; +} +.topBar .calendar .infoTimer { + margin-right: 1rem; +} +.topBar .calendar .astro { + font-size: 0.8125rem; + margin-right: 0.25rem; +} +.topBar .planetWrap { + margin-left: 1rem; +} +.topBar .planetWrap .universe, +.topBar .planetWrap .simulation, +.topBar .planetWrap .pet { + border-left: 1px solid; + margin-left: 0.75rem; + padding-left: 0.75rem; +} +.topBar .planetWrap .pet { + cursor: pointer; +} +.topBar .flair { + display: inline-block; + text-align: left; +} +.topBar .flair svg { + position: relative; + top: 0.125rem; + left: 0.25rem; +} +.topBar .pet .black { + fill: #000000; + filter: drop-shadow(0px 0px 2px #fff); +} +.topBar .pet .black.stripe { + fill: url(#PetGradient); +} +.topBar .pet .black.stripe #PetGradient .stop1 { + stop-color: #000; +} +.topBar .pet .black.stripe #PetGradient .stop2 { + stop-color: #4e4e4e; +} +.topBar .pet .black.patched { + fill: url(#PetGradient); +} +.topBar .pet .black.patched #PetGradient .stop1 { + stop-color: #000; +} +.topBar .pet .black.patched #PetGradient .stop2 { + stop-color: #424242; +} +.topBar .pet .orange { + fill: #e25f08; + filter: drop-shadow(0px 0px 2px #000); +} +.topBar .pet .orange.stripe { + fill: url(#PetGradient); +} +.topBar .pet .orange.stripe #PetGradient .stop1 { + stop-color: #e25f08; +} +.topBar .pet .orange.stripe #PetGradient .stop2 { + stop-color: #ccb9ad; +} +.topBar .pet .gray { + fill: #575757; + filter: drop-shadow(0px 0px 2px #000); +} +.topBar .pet .gray.stripe { + fill: url(#PetGradient); +} +.topBar .pet .gray.stripe #PetGradient .stop1 { + stop-color: #575757; +} +.topBar .pet .gray.stripe #PetGradient .stop2 { + stop-color: #202020; +} +.topBar .pet .gray.patched { + fill: url(#PetGradient); +} +.topBar .pet .gray.patched #PetGradient .stop1 { + stop-color: #575757; +} +.topBar .pet .gray.patched #PetGradient .stop2 { + stop-color: #665237; +} +.topBar .pet .white { + fill: #f0efef; + filter: drop-shadow(0px 0px 2px #000); +} +.topBar .pet .white.stripe { + fill: url(#PetGradient); +} +.topBar .pet .white.stripe #PetGradient .stop1 { + stop-color: #f0efef; +} +.topBar .pet .white.stripe #PetGradient .stop2 { + stop-color: #f5dec4; +} +.topBar .pet .white.patched { + fill: url(#PetGradient); +} +.topBar .pet .white.patched #PetGradient .stop1 { + stop-color: #f0efef; +} +.topBar .pet .white.patched #PetGradient .stop2 { + stop-color: #b8ab9b; +} +.topBar .pet .cream { + fill: #bd8754; + filter: drop-shadow(0px 0px 2px #000); +} +.topBar .pet .cream.stripe { + fill: url(#PetGradient); +} +.topBar .pet .cream.stripe #PetGradient .stop1 { + stop-color: #bd8754; +} +.topBar .pet .cream.stripe #PetGradient .stop2 { + stop-color: #f5dec4; +} +.topBar .pet .brown { + fill: #996f48; + filter: drop-shadow(0px 0px 2px #000); +} +.topBar .pet .brown.patched { + fill: url(#PetGradient); +} +.topBar .pet .brown.patched #PetGradient .stop1 { + stop-color: #996f48; +} +.topBar .pet .brown.patched #PetGradient .stop2 { + stop-color: #af9a85; +} +.topBar .version { + margin-right: 1rem; +} +.promoBar { + bottom: 0; +} +.promoBar .left { + display: inline-block; + width: 15rem; + margin-left: 0.25rem; +} +.promoBar .right { + position: absolute; + display: inline-block; + text-align: right; + margin-right: 1rem; + right: 0; +} +.promoBar .right span { + margin: 0 0.5rem; +} +.promoBar .right .external-links li { + display: inline-block; +} +.promoBar .right .external-links li + li:before { + content: ' | '; +} +.arpaProject { + display: inline-block; + border: solid 0.0625rem; + padding: 0.5rem; + width: 20rem; + margin: 0 1rem 1rem 0; +} +.arpaProject .head { + margin-bottom: 0.25rem; + padding-bottom: 0.5rem; + border-bottom: solid 0.0625rem; +} +.arpaProject .head > span { + display: inline-block; + width: 40%; +} +.arpaProject .head > span:first-child { + display: inline-block; + width: 60%; +} +.arpaProject .head .rank { + text-align: right; +} +.arpaProject .head .pbar { + position: relative; + margin-top: 0.5rem; +} +.arpaProject .head .pbar .progress { + margin-bottom: 0; +} +.arpaProject .head .pbar .progress-value { + position: absolute; + display: block; + top: -0.1875rem; + left: 49%; +} +.arpaProject .buy { + text-align: center; +} +.arpaProject .buy .button { + height: 1.5rem; + width: 19%; + line-height: 0.75rem; +} +.arpaProject .buy :first-child { + width: 24%; +} +.ShipYardTab { + margin-left: 1rem; + display: flex; + flex-direction: column; + overflow-y: hidden; +} +.ShipYardTab .button { + height: 2rem; +} +.ShipYardTab .stats { + display: flex; +} +.ShipYardTab .stats > div { + margin-left: 0.5rem; +} +.ShipYardTab .registry { + line-height: 1.25rem; +} +.ShipYardTab .registry .nameplate { + display: inline-block; + width: 8rem; + height: 1.25rem; +} +.ShipYardTab .registry .nameplate input { + height: 1.25rem; +} +.ShipYardTab #shipYardCosts { + margin-left: 0.5rem; +} +.ShipYardTab .shipBayOptions .dropdown { + margin-left: 0.5rem; + margin-top: 0.25rem; +} +.ShipYardTab #shipList { + margin-top: 0.25rem; + flex: 1 1 0; + min-height: 0; + height: auto; + padding-bottom: 0.5rem; +} +.ShipYardTab #shipList .shipRow { + display: grid; + padding-top: 0.25rem; + margin-top: 0.25rem; + margin-left: 0.5rem; + border-top: 1px solid; + grid-template-columns: auto 10rem; +} +.ShipYardTab #shipList .shipRow .name { + display: inline-block; + min-width: 5rem; +} +.ShipYardTab #shipList .shipRow .row1, +.ShipYardTab #shipList .shipRow .row2, +.ShipYardTab #shipList .shipRow .row3 { + grid-column-start: 1; +} +.ShipYardTab #shipList .shipRow .location { + grid-column-start: 2; + grid-row-start: 1; + grid-row-end: 3; +} +.ShipYardTab #shipList .shipRow .pad { + margin: 0 0.5rem 0 0; +} +.ShipYardTab #shipList .compact button { + height: 1rem; +} +.ShipYardTab .assemble { + margin: 1rem 0 0 0.5rem; + line-height: 2rem; +} +.ShipYardTab .assemble > span { + margin-left: 1rem; +} +.ShipYardTab .assemble > span > label.checkbox { + margin-right: 0; + top: 0.25rem; +} +.ShipYardTab .solarMap { + float: right; + margin-right: 1rem; +} +.genome { + margin-bottom: 1rem; +} +.genome .progress { + margin-top: 0.25rem; + margin-bottom: 0.5rem; +} +.genome button { + margin-left: 0.5rem; +} +.genome button.seq { + margin-left: 0; +} +.geneticTraits .trait.major { + margin-top: 0.5rem; +} +.geneticTraits .trait .gene { + min-width: 5rem; + padding-bottom: 0.125rem; +} +.geneticTraits .trait.indent { + margin-left: 4.5rem; +} +.geneticTraits .traitListing { + display: flex; + flex-wrap: wrap; +} +.geneticTraits .traitListing > .traitRow { + width: 25rem; +} +.geneticTraits .traitRow > span { + vertical-align: middle; +} +.geneticTraits .traitRow .basic-button { + height: 100%; +} +.main > div.popper.wide.w22, +body .modal > div.popper.wide.w22 { + max-width: 22rem; +} +.main > div.popper.wide.w25, +body .modal > div.popper.wide.w25 { + max-width: 25rem; +} +.main > div.popper.wide.w30, +body .modal > div.popper.wide.w30 { + max-width: 30rem; +} +#trick6 { + width: 4rem; + text-align: center; +} +body.nuke { + color: #000; + transition: color 2s, text-shadow 3s; + text-shadow: 0px -2px 4px #fff, 0px -2px 10px #FF3, 0px -10px 20px #F90, 0px -20px 40px #C33; +} +div.nuke, +div.mininuke { + position: fixed; + width: 100%; + height: 100%; + z-index: 10; + top: 0; + left: 0; + transition: all 2s; + opacity: 0; +} +div.nuke.burn, +div.mininuke.burn { + opacity: 1; +} +div.nuke.burn::before, +div.mininuke.burn::before { + content: ""; + display: block; + width: 10px; + height: 10px; + position: absolute; + top: 60%; + left: 30%; + background: #000; + border-radius: 50%; +} +div.nuke.burn.b::before, +div.mininuke.burn.b::before { + transition: width 3s, height 3s, top 3s, left 3s; + background: #000; + width: 180%; + height: 180%; + top: -30%; + left: -30%; + box-shadow: 0px -2px 4px #fff, 0px -2px 10px #FF3, 0px -10px 20px #F90, 0px -20px 40px #C33, inset 0px -20px 40px #fff, inset 0px -20px 100px #FF3, inset 0px -40px 200px #F90, inset 0px -80px 400px #C33; +} +div.nuke.burn { + background: #000; +} +div.mininuke { + position: absolute; + overflow: hidden; +} +div.mininuke.burn.b::before { + transition: width 2s, height 2s, top 2s, left 2s; +} +div.mininuke.burn.c::before { + visibility: hidden; + opacity: 0; + transition: visibility 0s 2s, opacity 2s linear; +} +div.bigbang { + position: fixed; + width: 100%; + height: 100%; + z-index: 10; + top: 0; + left: 0; + transition: all 1s; + opacity: 0; +} +div.bigbang.burn { + opacity: 1; +} +div.bigbang.burn::before { + content: ""; + display: block; + width: 10px; + height: 10px; + position: absolute; + top: 50%; + left: 50%; + background: #fff; + border-radius: 50%; +} +div.bigbang.burn.b::before { + transition: width 2s, height 2s, top 2s, left 2s; + background: #fff; + width: 180%; + height: 180%; + top: -30%; + left: -30%; + box-shadow: 0px -2px 4px #fff, 0px -2px 10px #FF3, 0px -10px 20px #F90, 0px -20px 40px #C33, inset 0px -20px 40px #fff, inset 0px -20px 100px #FF3, inset 0px -40px 200px #F90, inset 0px -80px 400px #C33; +} +div.bigbang.burn.c::before { + transition: width 2s, height 2s, top 2s, left 2s, background-color 2s; + background: #000; + width: 180%; + height: 180%; + top: -30%; + left: -30%; + box-shadow: 0px -2px 4px #000, 0px -2px 10px #000, 0px -10px 20px #000, 0px -20px 40px #000, inset 0px -20px 40px #000, inset 0px -20px 100px #000, inset 0px -40px 200px #000, inset 0px -80px 400px #000; +} +.earthquake { + animation: 3.8s shake infinite alternate; +} +@keyframes shake { + 0% { + transform: skewX(-1deg); + } + 5% { + transform: skewX(1deg); + } + 10% { + transform: skewX(-1deg); + } + 15% { + transform: skewX(1deg); + } + 20% { + transform: skewX(0deg); + } + 100% { + transform: skewX(0deg); + } + 10%, + 90% { + transform: translate3d(-1px, 0, 0); + } + 20%, + 80% { + transform: translate3d(2px, 0, 0); + } + 30%, + 50%, + 70% { + transform: translate3d(-4px, 0, 0); + } + 40%, + 60% { + transform: translate3d(4px, 0, 0); + } +} +.celestialLab .fields { + margin-top: 0.5rem; +} +.celestialLab .fields .name { + display: inline-block; + width: 10rem; + margin-right: 1rem; +} +.celestialLab .fields .entity { + display: inline-block; + width: 20rem; + margin-right: 1rem; +} +.celestialLab .fields .control { + margin: 0.25rem 0; +} +.celestialLab .fields .help { + margin-top: 0; + position: absolute; + right: 0.25rem; + top: -1rem; +} +.celestialLab .sequence { + display: flex; + margin-top: 0.5rem; +} +.celestialLab .sequence .genus_selection { + width: 10rem; +} +.celestialLab .sequence .genus_selection section { + margin-top: 0.5rem; +} +.celestialLab .sequence .genus_selection button { + padding: 1rem 0.5rem; +} +.celestialLab .sequence .trait_selection { + margin-top: 0.5rem; + display: flex; + flex-wrap: wrap; +} +.celestialLab .sequence .trait_selection > div { + width: 11.5rem; +} +.celestialLab .sequence .trait_selection.summary > div { + width: 23rem; +} +.celestialLab .sequence .trait_selection.summary .field { + display: flex; + justify-content: space-between; + padding-right: 0.5rem; +} +.celestialLab .sequence .trait_selection.summary .field .rc { + display: inline-block; + min-width: 7rem; + text-align: center; +} +.celestialLab .sequence .planet_selection { + margin-left: 2rem; +} +.celestialLab .sequence .planet_selection section { + margin-top: 0.5rem; +} +.celestialLab .sequence .planet_selection section > div { + width: 11.5rem; +} +.celestialLab .sequence .res_selection { + margin-left: 2rem; +} +.celestialLab .sequence .res_selection section { + margin-top: 0.5rem; +} +.celestialLab .sequence .res_selection section > div { + display: flex; + justify-content: space-between; +} +.celestialLab .sequence .res_selection section > div > div:first-child { + margin-right: 0.25rem; +} +.celestialLab .sequence > div .field:not(:last-child) { + margin-bottom: 0; +} +.celestialLab .buttons { + display: flex; + justify-content: space-evenly; +} +.celestialLab .create { + margin-top: 1rem; + text-align: center; +} +.celestialLab .genus, +.celestialLab .resetLab { + margin-bottom: 0.75rem; + text-align: center; +} +.celestialLab .genus > button, +.celestialLab .resetLab > button { + margin-top: 0.25rem; + width: 8.5rem; +} +.celestialLab .b-tabs .tabs { + overflow-x: visible; +} +.celestialLab .b-tabs .tabs ul { + flex-wrap: nowrap; +} +.celestialLab .b-tabs .tabs li a { + padding-left: 0.75em; + padding-right: 0.75em; +} +#main.custom-lab-active > .columns > .leftColumn { + display: none !important; +} +#main.custom-lab-active > .columns > #mainColumn { + width: 78% !important; +} +.modalBody .genus_selection, +.modalBody .fanatic { + display: flex; + flex-wrap: wrap; +} +.modalBody .genus_selection > .field, +.modalBody .fanatic > .field { + margin-right: 1rem; + margin-bottom: 0.25rem; +} +.listqueuestyle.bldQueue li, +.listqueuestyle.bldQueue.right li, +.numberedlistqueuestyle.bldQueue li, +.numberedlistqueuestyle.bldQueue.right li, +.bulletlistqueuestyle.bldQueue li, +.bulletlistqueuestyle.bldQueue.right li { + margin: 0.25rem 0; + display: list-item; +} +.listqueuestyle.bldQueue li:not(:last-child) .queued:after, +.listqueuestyle.bldQueue.right li:not(:last-child) .queued:after, +.numberedlistqueuestyle.bldQueue li:not(:last-child) .queued:after, +.numberedlistqueuestyle.bldQueue.right li:not(:last-child) .queued:after, +.bulletlistqueuestyle.bldQueue li:not(:last-child) .queued:after, +.bulletlistqueuestyle.bldQueue.right li:not(:last-child) .queued:after { + content: ""; +} +.numberedlistqueuestyle.bldQueue li, +.numberedlistqueuestyle.bldQueue.right li { + list-style-type: numeric; + list-style-position: inside; +} +.bulletlistqueuestyle.bldQueue li, +.bulletlistqueuestyle.bldQueue.right li { + list-style-type: disc; + list-style-position: inside; +} +.sticky { + position: sticky; + top: 1rem; + bottom: 0; + height: 100vh; + overflow-y: auto; + overflow-x: hidden; +} +@supports (scrollbar-width: auto) { + .sticky { + scrollbar-width: thin; + } +} +.vscroll { + overflow-x: hidden; + overflow-y: auto; + top: 1rem; + bottom: 0; +} +@supports (scrollbar-width: auto) { + .vscroll { + scrollbar-width: thin; + } +} +.hscroll { + overflow-x: auto; + overflow-y: hidden; + white-space: nowrap; +} +@supports (scrollbar-width: auto) { + .hscroll { + scrollbar-width: thin; + } +} +@supports (scrollbar-width: auto) { + .resTabs > section, + .resTabs > .tabs, + .bldQueue { + scrollbar-width: thin; + } +} +.modal .modal-content { + width: initial; + min-width: 42rem; +} +.modal .modal-content .fuels { + margin-top: 0.5rem; +} +.modal .modal-content .avail span { + margin: 0 2.5rem 0 2.125rem; +} +.popper { + pointer-events: none; +} +.popper .touchButton { + pointer-events: all; + height: 1.25rem; + margin-bottom: 0.25rem; +} +.popper .soldierEvaluation > div { + display: flex; + justify-content: space-between; +} +.popper .soldierEvaluation > div :first-child { + margin-right: 1rem; +} +.popper .soldierEvaluation > div.head { + display: block; + text-align: center; +} +#powerStatus { + white-space: nowrap; +} +.pyro > .before, +.pyro > .after { + position: absolute; + display: block; + width: 5px; + height: 5px; + border-radius: 50%; + box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff; + -moz-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + -webkit-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + -o-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + -ms-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; +} +.pyro > .after { + -moz-animation-delay: 1.25s, 1.25s, 1.25s; + -webkit-animation-delay: 1.25s, 1.25s, 1.25s; + -o-animation-delay: 1.25s, 1.25s, 1.25s; + -ms-animation-delay: 1.25s, 1.25s, 1.25s; + animation-delay: 1.25s, 1.25s, 1.25s; + -moz-animation-duration: 1.25s, 1.25s, 6.25s; + -webkit-animation-duration: 1.25s, 1.25s, 6.25s; + -o-animation-duration: 1.25s, 1.25s, 6.25s; + -ms-animation-duration: 1.25s, 1.25s, 6.25s; + animation-duration: 1.25s, 1.25s, 6.25s; +} +@keyframes bang { + to { + box-shadow: -154px -131.66666667px #00ffcc, -243px -325.66666667px #ff0d00, 71px -294.66666667px #77ff00, 154px 7.33333333px #00ff73, 159px 65.33333333px #ff00f7, 191px -207.66666667px #ffd000, 123px -232.66666667px #0059ff, -96px 18.33333333px #2600ff, 93px 76.33333333px #00eaff, -94px -388.66666667px #00ff59, -92px -107.66666667px #ff8400, -7px -20.66666667px #3c00ff, 37px -197.66666667px #ea00ff, 249px -148.66666667px #ff0022, -112px -249.66666667px #ff0040, -191px -374.66666667px #ff7300, 249px -12.66666667px #3300ff, -238px -366.66666667px #00fffb, -76px -186.66666667px #00ffe6, 242px 60.33333333px #00d5ff, -69px -217.66666667px #0095ff, 222px -155.66666667px #0037ff, 164px -410.66666667px #ff004d, -228px 2.33333333px #ff9d00, -201px -352.66666667px #ff00dd, 75px -378.66666667px #00ff6a, -141px -375.66666667px #ff0077, -75px -362.66666667px #8000ff, -162px -287.66666667px #00ff88, -152px -260.66666667px #00b3ff, 180px -205.66666667px #005eff, -110px -16.66666667px #ff00d5, -128px -298.66666667px #00ffc4, 141px -197.66666667px #00f7ff, 73px -109.66666667px #ff6600, 164px -347.66666667px #00c8ff, -178px -307.66666667px #0026ff, 133px 0.33333333px #bbff00, 13px 37.33333333px #7bff00, -168px -198.66666667px #00ddff, -155px -70.66666667px #8800ff, 167px -111.66666667px #ffc800, 98px -353.66666667px #00fffb, 65px -235.66666667px #ff0059, 186px -122.66666667px #ff0009, -124px -385.66666667px #ff007b, 6px -251.66666667px #ff00bf, 66px -309.66666667px #0dff00, 169px -119.66666667px #ff4800, -232px -137.66666667px #5eff00, 171px -173.66666667px #ff0055; + } +} +@keyframes gravity { + to { + -moz-transform: translateY(200px); + -webkit-transform: translateY(200px); + -o-transform: translateY(200px); + -ms-transform: translateY(200px); + transform: translateY(200px); + opacity: 0; + } +} +@keyframes position { + 0%, + 19.9% { + margin-top: 10%; + margin-left: 40%; + } + 20%, + 39.9% { + margin-top: 40%; + margin-left: 30%; + } + 40%, + 59.9% { + margin-top: 20%; + margin-left: 70%; + } + 60%, + 79.9% { + margin-top: 30%; + margin-left: 20%; + } + 80%, + 99.9% { + margin-top: 30%; + margin-left: 80%; + } +} +.noise { + position: absolute; + top: -500px; + right: -500px; + bottom: -500px; + left: -500px; + background: transparent url(/lib/noise.png) 0 0; + background-size: 320px 320px; + opacity: 0.35; + animation: noise 1s steps(8, end) infinite both; +} +.noise-wrapper { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 1; + overflow: hidden; + z-index: 10; +} +.noise-wrapper:after { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: radial-gradient(ellipse at center, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.75) 100%); +} +@keyframes noise { + 0% { + transform: translateX(0px, 0px); + } + 10% { + transform: translate(-100px, 100px); + } + 20% { + transform: translate(150px, -100px); + } + 30% { + transform: translate(-100px, 100px); + } + 40% { + transform: translate(100px, -150px); + } + 50% { + transform: translate(-100px, 200px); + } + 60% { + transform: translate(-200px, -100px); + } + 70% { + transform: translateY(50px, 100px); + } + 80% { + transform: translate(100px, -150px); + } + 90% { + transform: translate(0px, 200px); + } + 100% { + transform: translate(-100px, 100px); + } +} +.signal-lost-top { + width: 100%; + height: 0%; + opacity: 0.9; + background: black; + position: absolute; + top: 0; + z-index: 100; +} +.signal-lost-bottom { + width: 100%; + height: 0%; + opacity: 0.9; + background: black; + position: absolute; + bottom: 0; + z-index: 100; +} +.refresh { + position: relative; + display: inline-block; + height: 1rem; + width: 1rem; + font-size: 1rem; + cursor: pointer; + margin-left: 0.5rem; + top: 0.2rem; +} +.font-overlay { + z-index: 999; + position: absolute; + top: 1rem; +} +#mobileNav { + display: none; +} +@media only screen and (max-width: 48rem) { + html { + font-size: clamp(12px, 4.2vw, 16px) !important; + -moz-text-size-adjust: none; + -webkit-text-size-adjust: none; + text-size-adjust: none; + } + .promoBar { + bottom: 0; + } + #mobileNav { + display: flex; + position: fixed; + bottom: 1.2rem; + left: 0; + right: 0; + z-index: 30; + height: 2.4rem; + border-top: 1px solid; + } + #mobileNav .mobile-nav-btn { + flex: 1; + cursor: pointer; + font-size: 1rem; + font-weight: 800; + letter-spacing: 0.04em; + border: none; + border-top: 2px solid transparent; + background: transparent; + color: inherit; + opacity: 0.75; + transition: opacity 0.15s; + text-shadow: 0 0 5px rgba(0, 0, 0, 0.7); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + #mobileNav .mobile-nav-btn.is-active { + opacity: 1; + border-top-color: currentColor; + } + .main { + margin: 0.75rem; + overflow-y: unset; + } + .main .content .settings { + margin-left: 0; + } + .main .content .tabs ul { + width: calc(100vw - 2rem); + } + .main .tabs ul { + margin-left: 0; + } + .main .race { + padding-top: 0.75rem; + } + .main .resources { + margin-top: -0.75rem; + height: calc(100vh - 6.9rem); + padding-top: 0.75rem; + padding-bottom: 0.5rem; + } + .main .resources .vscroll { + top: 0.5rem; + } + .main .resTabs > section { + top: 0.75rem; + height: calc(100vh - 10.1rem); + } + .main .resTabs > .tab-content { + padding-bottom: 0.5rem !important; + } + .main .civics { + padding: 0; + } + .main #mainTabs > .tab-content #settings { + padding-bottom: 1rem !important; + } + #r_civics nav.tabs { + overflow-x: clip; + } + .main > .columns { + display: block; + } + .main > .columns > :first-child { + min-width: unset; + } + .leftColumn, + #mainColumn, + #queueColumn { + width: 100% !important; + min-width: unset !important; + } + .b-tabs .tab-content > .tab-item { + padding-left: 0 !important; + padding-right: 0 !important; + } + #mainTabs > .tab-content > .tab-item { + padding-top: 0.25rem !important; + } + .resTabs { + margin-top: -0.25rem; + } + .b-tabs .tabs ul { + flex-wrap: nowrap; + } + .b-tabs .tabs li, + .b-tabs .tabs a { + white-space: nowrap; + } + .bldQueue, + .msgQueue { + resize: none; + } + .leftColumn { + display: block; + height: auto; + padding-bottom: 3.7rem; + } + .leftColumn #sideQueue { + display: none; + } + #mainColumn, + #queueColumn { + display: none; + } + #main.mobile-panel-game .leftColumn { + display: none; + } + #main.mobile-panel-game #mainColumn { + display: block; + padding-bottom: 3.7rem; + } + #main.mobile-panel-queue .leftColumn { + display: block; + height: auto; + padding-top: 0.75rem; + padding-bottom: 3.7rem; + } + #main.mobile-panel-queue .leftColumn #race, + #main.mobile-panel-queue .leftColumn #resources { + display: none; + } + #main.mobile-panel-queue .leftColumn #sideQueue { + display: block; + } + #main.mobile-panel-queue .leftColumn #sideQueue #msgQueue { + height: auto; + overflow-y: visible; + } + #main.mobile-panel-queue #mainColumn { + display: none; + } + .resources { + height: calc(100svh - 8rem); + } +} diff --git a/evolve/evolve.css b/evolve/evolve.css index b6c38da36..58ed92387 100644 --- a/evolve/evolve.css +++ b/evolve/evolve.css @@ -1 +1 @@ -@keyframes color-change{0%,to{color:#f1fa8c}50%{color:#f55}}@keyframes shake{0%,10%{transform:skewX(-1deg)}15%,5%{transform:skewX(1deg)}20%,to{transform:skewX(0deg)}10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}@keyframes bang{to{box-shadow:-154px -131.66666667px #0fc,-243px -325.66666667px #ff0d00,71px -294.66666667px #7f0,154px 7.33333333px #00ff73,159px 65.33333333px #ff00f7,191px -207.66666667px #ffd000,123px -232.66666667px #0059ff,-96px 18.33333333px #2600ff,93px 76.33333333px #00eaff,-94px -388.66666667px #00ff59,-92px -107.66666667px #ff8400,-7px -20.66666667px #3c00ff,37px -197.66666667px #ea00ff,249px -148.66666667px #f02,-112px -249.66666667px #ff0040,-191px -374.66666667px #ff7300,249px -12.66666667px #30f,-238px -366.66666667px #00fffb,-76px -186.66666667px #00ffe6,242px 60.33333333px #00d5ff,-69px -217.66666667px #0095ff,222px -155.66666667px #0037ff,164px -410.66666667px #ff004d,-228px 2.33333333px #ff9d00,-201px -352.66666667px #f0d,75px -378.66666667px #00ff6a,-141px -375.66666667px #f07,-75px -362.66666667px #8000ff,-162px -287.66666667px #0f8,-152px -260.66666667px #00b3ff,180px -205.66666667px #005eff,-110px -16.66666667px #ff00d5,-128px -298.66666667px #00ffc4,141px -197.66666667px #00f7ff,73px -109.66666667px #f60,164px -347.66666667px #00c8ff,-178px -307.66666667px #0026ff,133px .33333333px #bf0,13px 37.33333333px #7bff00,-168px -198.66666667px #0df,-155px -70.66666667px #80f,167px -111.66666667px #ffc800,98px -353.66666667px #00fffb,65px -235.66666667px #ff0059,186px -122.66666667px #ff0009,-124px -385.66666667px #ff007b,6px -251.66666667px #ff00bf,66px -309.66666667px #0dff00,169px -119.66666667px #ff4800,-232px -137.66666667px #5eff00,171px -173.66666667px #f05}}@keyframes gravity{to{transform:translateY(200px);-moz-transform:translateY(200px);-webkit-transform:translateY(200px);-o-transform:translateY(200px);-ms-transform:translateY(200px);opacity:0}}@keyframes position{0%,19.9%{margin-top:10%;margin-left:40%}20%,39.9%{margin-top:40%;margin-left:30%}40%,59.9%{margin-top:20%;margin-left:70%}60%,79.9%{margin-top:30%;margin-left:20%}80%,99.9%{margin-top:30%;margin-left:80%}}@keyframes noise{0%{transform:translateX(0,0)}10%,30%,to{transform:translate(-100px,100px)}20%{transform:translate(150px,-100px)}40%,80%{transform:translate(100px,-150px)}50%{transform:translate(-100px,200px)}60%{transform:translate(-200px,-100px)}70%{transform:translateY(50px,100px)}90%{transform:translate(0,200px)}}#city-gift .hgift{background-color:initial;background-image:repeating-linear-gradient(90deg,#b22222,#b22222 10px,beige 0,beige 12px,#228b22 0,#228b22 18px,gold 0,gold 20px,#dc143c 0,#dc143c 30px),repeating-linear-gradient(#b22222,#b22222 10px,beige 0,beige 12px,#228b22 0,#228b22 18px,gold 0,gold 20px,#dc143c 0,#dc143c 30px);background-blend-mode:multiply}#city-gift .hgift>span{color:#ebdbb2;text-shadow:2px 2px #000}html.dark{background-color:#1f2424}html.dark body,html.dark h2,html.dark h3{color:#fff}html.dark a{color:#1abc9c}html.dark .button.has-text-advanced,html.dark .has-text-advanced{color:#00ac95}html.dark .button.has-text-alert,html.dark .has-text-alert{color:#af5d00}html.dark .button.has-text-caution,html.dark .has-text-caution{color:orange}html.dark .button.has-text-danger,html.dark .has-text-danger{color:#f14668}html.dark .has-text-fade{color:#5e5e5e}html.dark .has-text-flair{color:#91006c}html.dark .button.has-text-info,html.dark .has-text-info{color:#167df0}html.dark .has-text-label{color:#ffff9e}html.dark .button.has-text-special,html.dark .has-text-special{color:#91006c}html.dark .button.has-text-success,html.dark .has-text-success{color:#48c774}html.dark .button.has-text-warning,html.dark .has-text-warning,html.dark .modal-card-head p{color:#ffdd57}html.dark .has-text-danger-pulse{color:#ffdd57;-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.dark .challenge .simButton{border-color:#48c774}html.dark .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.dark .challenge .configList>div{margin:0 .25rem;width:10rem}html.dark .challenge .configList>div>input,html.darkNight .challenge .configList>div>input,html.dracula .challenge .configList>div>input,html.gruvboxDark .challenge .configList>div>input,html.gruvboxDarkRG .challenge .configList>div>input,html.gruvboxLight .challenge .configList>div>input,html.light .challenge .configList>div>input,html.night .challenge .configList>div>input,html.orangeSoda .challenge .configList>div>input,html.redgreen .challenge .configList>div>input{height:1.25rem;text-align:center;padding:0}html.dark .popper .has-text-label{color:#10f}html.dark .popper .has-text-success{color:#1c7e21}html.dark .popper .has-text-warning{color:#776425}html.dark .popper .divide-line{border-top:#ccc solid .0625rem}html.dark .main>div.popper,html.dark body .modal>div.popper{background-color:#f5f5f5;border:.0625rem solid #000;color:#363636}html.dark .main>div.popper>div,html.dark body .modal>div.popper>div{border-top:solid .0625rem #000}html.dark .main>div.popper>div:first-child,html.dark body .modal>div.popper>div:first-child{border-top:none}html.dark .main>div.popper .has-text-dark,html.dark body .modal>div.popper .has-text-dark{color:#363636}html.dark .main>div.popper .split,html.dark body .modal>div.popper .split{display:flex}html.dark .main>div.popper .split>div,html.dark body .modal>div.popper .split>div{flex-wrap:nowrap}html.dark .main>div.popper .split>div:nth-of-type(2),html.dark body .modal>div.popper .split>div:nth-of-type(2),html.light .main>div.popper .split>div:nth-of-type(2),html.light body .modal>div.popper .split>div:nth-of-type(2){border-left:solid .0625rem #000;margin-left:.375rem;padding-left:.375rem}html.dark .shipPopper .divider{border-bottom:solid .0625rem #000}html.dark .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.dark .sliderbar .b-slider{display:inline-block;width:80%}html.dark .sliderbar .b-slider .b-slider-track{height:1rem}html.dark .sliderbar .is-primary .b-slider-fill{background:#48c774}html.dark .sliderbar.thin>span{bottom:.625rem}html.dark .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.dark .msgQueueFilters span,html.dark .tabs a{color:#fff}html.dark .msgQueueFilters span.is-active,html.dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.dark .msgQueueFilters span:hover,html.dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}.main #msgQueueHeader h2,.main .bldQueue h2,.main .bldQueue.right h2,.main .resQueue h2,html.dark .tabs>ul,html.darkNight .tabs>ul,html.dracula .tabs>ul,html.gruvboxDark .tabs>ul,html.gruvboxDarkRG .tabs>ul,html.gruvboxLight .tabs>ul,html.light .tabs>ul,html.night .tabs>ul,html.orangeSoda .tabs>ul,html.redgreen .tabs>ul{border-bottom:solid .0625rem}html.dark .button{background-color:#282f2f;color:#fff}html.dark .button.is-light,html.light{background-color:#fff}html.dark .button.is-hovered,html.dark .button:hover{background-color:#3a4344;color:#f2f2f2}html.dark .button.is-focused,html.dark .button:focus{border-color:#dbdbdb}html.dark .basic-button{border:#ccc solid .0625rem}html.dark .basic-button:hover{border:#eee solid .0625rem;background-color:#3a4344}html.dark .text-button:hover{cursor:pointer;color:#f2f2f2;text-decoration:underline}html.dark .label{color:#dbdee0}html.dark .checkbox:hover,html.dark .radio:hover{color:#1abc9c}html.dark .dropdown-content{background-color:#1f2424}html.dark .b-tooltip.is-right:before{border-right:5px solid #f2f2f2}html.dark .b-tooltip.is-left:before{border-left:5px solid #f2f2f2}html.dark .b-tooltip.is-bottom:before{border-bottom:5px solid #f2f2f2}html.dark .b-tooltip.is-primary .tooltip-content{background:#f2f2f2;border:.0625rem solid #f5f5f5;color:#000}html.dark .add,html.dark .sub{border:#ccc solid .0625rem;transition:all 200ms ease}html.dark .add:hover,html.dark .sub:hover{background-color:#3a4344;color:#f2f2f2}html.dark .current{border-top:#ccc solid .0625rem;border-bottom:#ccc solid .0625rem}html.dark .current.infoOnly{border:#ccc solid .0625rem}html.dark .promoBar,html.dark .topBar{background-color:#3a4344}html.dark .pause,html.dark .play{display:inline-block;position:relative;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s}html.dark .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid #48c774;border-bottom:.25rem solid transparent}html.dark .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid #f14668;border-left:.125rem solid #f14668}html.dark .meter.low{color:#c00}html.dark .meter.neutral{color:#c0ce00}html.dark .buildList .hl-ca,html.dark .main .content .action a.button.hl-ca .aTitle,html.dark .meter.high{color:#00af0f}html.dark .buildList .hl-cna,html.dark .main .content .action a.button.hl-cna .aTitle{color:#c20000}html.dark .graphContainer span.special:hover .gear,html.dark .msgQueue span.special:hover .gear{fill:#d4af37}html.dark .main .content .action a.button span.count,html.dark .main .content .divider h2,html.dark .modal .action a.button span.count{background:#1f2424}html.dark .main .content .action div.special,html.dark .modal .action div.special{background:#1f2424;border:.0625rem solid #282f2f}html.dark .graphContainer span.special .gear,html.dark .main .content .action div.special .gear,html.dark .modal .action div.special .gear,html.dark .msgQueue span.special .gear{fill:#ad5f12}html.dark .main .content .action div.special:hover{border:.0625rem solid #3a4344}html.dark .main .content .action div.special:hover .gear{fill:#d4af37}html.dark .main .content .action span.off,html.dark .main .content .action span.on{background:#1f2424;border:.0625rem solid #282f2f;color:#00af0f}html.dark .main .content .action span.on.altwarn,html.dark .main .content .action span.on.warn{color:#af5d00}html.dark .main .content .action span.off{color:#c20000}html.dark .main .content .action span.off:hover,html.dark .main .content .action span.on:hover,html.dark .modal .action div.special:hover{border:.0625rem solid #3a4344}html.dark .main .content .action.hl .button{border:solid 1px #00af0f}html.dark .main .content .action.cna a.button,html.dark .modal .action.cna a.button{background:#181818}html.dark .main .content .action.cna a.button.hl-ca .aTitle,html.dark .modal .action a.button.hl-ca .aTitle,html.dark .modal .action.cna a.button.hl-ca .aTitle{color:#00af0f}html.dark .main .content .action.cna a.button.hl-cna .aTitle,html.dark .modal .action a.button.hl-cna .aTitle,html.dark .modal .action.cna a.button.hl-cna .aTitle{color:#c20000}html.dark .main .content .action.cna .off,html.dark .main .content .action.cna .on,html.dark .main .content .action.cna .special,html.dark .modal .action.cna .off,html.dark .modal .action.cna .on,html.dark .modal .action.cna .special{border-color:#181818}html.dark .main .content .action.cna .oldTech span.aTitle,html.dark .modal .action.cna .oldTech span.aTitle{color:#fff}html.dark .main .content .action.cnam span.aTitle,html.dark .modal .action.cnam span.aTitle{color:#975f5f}html.dark .main .content .enemyFortress{background-color:#282f2f}html.dark .main .content .green,html.dark .main .content .synth{box-shadow:0 0 6px #48c774}html.dark .main .content .green>span,html.dark .main .content .synth>span{text-shadow:1px 1px #48c774}html.dark .main .content .red{box-shadow:0 0 6px #f14668}html.dark .main .content .red>span{text-shadow:1px 1px #f14668}html.dark .main .content .yellow{box-shadow:0 0 6px #ffdd57}html.dark .main .content .yellow>span{text-shadow:1px 1px #ffdd57}html.dark .main .content .orange{box-shadow:0 0 6px orange}html.dark .main .content .orange>span{text-shadow:1px 1px orange}html.dark .main .content .purple{box-shadow:0 0 6px #91006c}html.dark .main .content .purple>span{text-shadow:1px 1px #91006c}html.dark .main .content .blue,html.dark .main .content .precog{box-shadow:0 0 6px #167df0}html.dark .main .content .blue>span,html.dark .main .content .precog>span{text-shadow:1px 1px #167df0}html.dark .main .content .cna .precog>span{text-shadow:none}html.dark .main .garrison .header,html.dark .main .government .header{border-bottom:.0625rem solid #ccc}html.dark .main .market-header{border-bottom:#ccc solid 1px}html.dark .main .galaxyTrade{border-top:#ccc solid 1px}html.dark .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.dark .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.dark .powerGrid .circuit.inactive{display:none}html.dark .powerGrid .circuit>span{display:inline-block}html.dark .powerGrid .circuit>span:first-child{width:1.5rem}html.dark .powerGrid .circuit .struct{width:12rem}html.dark .powerGrid .circuit .off,html.dark .powerGrid .circuit .on{min-width:2rem;text-align:center}html.dark .powerGrid .circuit .off{color:#f14668}html.dark .powerGrid .circuit .on{color:#48c774}html.dark .gridHeader{border-top:#ccc solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.dark .powerGridHead{display:flex;justify-content:space-between}html.dark .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.dark .resetPowerGrid{margin-left:1rem;margin-top:.75rem}html.dark .resetPowerGrid .button{height:1.5rem}html.dark .fort .patrol .check{background-color:#000}html.dark .market-item .order{border:#ccc solid .0625rem;transition:all 200ms ease}html.dark .market-item .order:hover{border:#eee solid .0625rem;background-color:#3a4344}html.dark .inactive-row,html.dark .market-item.alt,html.dark .resource.alt{background-color:#0f1414}html.dark .resource.showBar.alt,html.dark .resource.showBar.prime{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#000 calc(var(--percent-full) + 1px),#000 100%)}html.dark .resource .bar{cursor:pointer}html.dark .modal .actionSpace{background-color:#1f2424}html.dark .modal-card-body,html.dark .modal-card-foot,html.dark .modal-card-head{background-color:#282f2f}html.dark .industry,html.dark .modalBox{background:#282f2f}html.dark .industry .divide,html.dark .industry .market-item,html.dark .industry .smelting,html.dark .modalBox .divide,html.dark .modalBox .market-item,html.dark .modalBox .smelting{border-top:#ccc solid .0625rem}html.dark .industry{background:0 0}html.dark .industry .header,html.dark .industry p,html.dark .modalBox p{border-bottom:#ccc solid .0625rem}html.dark .industry .avail span{margin:0 2.5rem 0 2.125rem}html.dark .govTask{margin-top:.25rem}html.dark .govTask .button{height:1.5rem;margin-left:.5rem}html.dark .fileImport{background-color:#1f2424}html.dark .star1{fill:#1f2424;stroke:#fff}html.dark .star1 path{stroke:#fff}html.dark .star1 path.bolden,html.darkNight .star1 path.bolden,html.dracula .star1 path.bolden,html.gruvboxDark .star1 path.bolden,html.gruvboxDarkRG .star1 path.bolden,html.gruvboxLight .star1 path.bolden,html.light .star1 path.bolden,html.night .star1 path.bolden,html.orangeSoda .star1 path.bolden,html.redgreen .star1 path.bolden{stroke-width:8px}html.dark .star2{fill:#fff}html.dark .star3{fill:#cd7f32}html.dark .star4{fill:silver}html.dark .modal .action div.special:hover .gear,html.dark .star5{fill:#d4af37}html.dark .refresh svg{fill:#00ac95}html.dark .bldQueue::-webkit-scrollbar-track,html.dark .dropdown-content::-webkit-scrollbar-track,html.dark .hscroll::-webkit-scrollbar-track,html.dark .resTabs>.tabs::-webkit-scrollbar-track,html.dark .resTabs>section::-webkit-scrollbar-track,html.dark .sticky::-webkit-scrollbar-track,html.dark .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#1f2424}html.dark .bldQueue::-webkit-scrollbar,html.dark .dropdown-content::-webkit-scrollbar,html.dark .resTabs>.tabs::-webkit-scrollbar,html.dark .resTabs>section::-webkit-scrollbar,html.dark .sticky::-webkit-scrollbar,html.dark .vscroll::-webkit-scrollbar{width:6px;background-color:#1f2424}html.dark .hscroll::-webkit-scrollbar{height:8px;background-color:#1f2424}html.dark .bldQueue::-webkit-scrollbar-thumb,html.dark .dropdown-content::-webkit-scrollbar-thumb,html.dark .hscroll::-webkit-scrollbar-thumb,html.dark .resTabs>.tabs::-webkit-scrollbar-thumb,html.dark .resTabs>section::-webkit-scrollbar-thumb,html.dark .sticky::-webkit-scrollbar-thumb,html.dark .vscroll::-webkit-scrollbar-thumb{background-color:#f5f5f5}html.dark .bldQueue,html.dark .hscroll,html.dark .resTabs>.tabs,html.dark .resTabs>section,html.dark .sticky,html.dark .vscroll{scrollbar-color:#f5f5f5 #1f2424}html.dark .buttonList .is-selected,html.dark .modal .buttonList .is-selected{border-color:#00af0f}html.dark .modal .action span.off,html.dark .modal .action span.on{background:#1f2424;border:.0625rem solid #282f2f;color:#00af0f}html.dark .modal .action span.on.altwarn,html.dark .modal .action span.on.warn{color:#af5d00}html.dark .modal .action span.off{color:#c20000}html.dark .modal .action span.off:hover,html.dark .modal .action span.on:hover{border:.0625rem solid #3a4344}html.dark .modal .action.hl .button{border:solid 1px #00af0f}html.dark .pop-desc .has-text-caution{color:#a30500}html.dark .popper .grad-from-left{background-image:linear-gradient(90deg,#f14668 45%,#363636 55%)}html.dark .popper .grad-from-left-warn{background-image:linear-gradient(90deg,#af5d00 45%,#f14668 55%)}html.dark .popper .grad-from-right{background-image:linear-gradient(90deg,#363636 45%,#f14668 55%)}html.light body,html.light h2,html.light h3{color:#000}html.light a{color:#4a4a4a}html.light .button.has-text-advanced,html.light .has-text-advanced{color:#0098a3}html.light .button.has-text-alert,html.light .has-text-alert{color:#743e00}html.light .button.has-text-caution,html.light .has-text-caution{color:#966100}html.light .button.has-text-danger,html.light .has-text-danger{color:#470303}html.light .has-text-fade{color:#5e5e5e}html.light .has-text-flair{color:#91006c}html.light .button.has-text-info,html.light .has-text-info{color:#167df0}html.light .has-text-label{color:#10f}html.light .button.has-text-special,html.light .has-text-special{color:#91006c}html.light .button.has-text-success,html.light .has-text-success{color:#082412}html.light .button.has-text-warning,html.light .has-text-warning{color:#7a6304}html.light .has-text-danger-pulse{color:#7a6304;-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.light .challenge .simButton{border-color:#082412}html.light .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.light .challenge .configList>div{margin:0 .25rem;width:10rem}html.light .popper .has-text-label{color:#10f}html.light .popper .has-text-success{color:#1c7e21}html.light .modal-card-head p,html.light .popper .has-text-warning{color:#7a6304}html.light .popper .divide-line{border-top:#4e4e4e solid .0625rem}html.light .main>div.popper,html.light body .modal>div.popper{background-color:#f5f5f5;border:.0625rem solid #000;color:#363636}html.light .main>div.popper>div,html.light body .modal>div.popper>div{border-top:solid .0625rem #000}html.light .main>div.popper>div:first-child,html.light body .modal>div.popper>div:first-child{border-top:none}html.light .main>div.popper .has-text-dark,html.light body .modal>div.popper .has-text-dark{color:#363636}html.light .main>div.popper .split,html.light body .modal>div.popper .split{display:flex}html.light .main>div.popper .split>div,html.light body .modal>div.popper .split>div{flex-wrap:nowrap}html.light .shipPopper .divider{border-bottom:solid .0625rem #000}html.light .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.light .sliderbar .b-slider{display:inline-block;width:80%}html.light .sliderbar .b-slider .b-slider-track{height:1rem}html.light .sliderbar .is-primary .b-slider-fill{background:#082412}html.light .sliderbar.thin>span{bottom:.625rem}html.light .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.light .msgQueueFilters span,html.light .tabs a{color:#000}html.light .msgQueueFilters span.is-active,html.light .tabs li.is-active a{border-bottom-color:#b86bff;color:#b86bff}html.light .msgQueueFilters span:hover,html.light .tabs a:hover{border-bottom-color:#363636;color:#363636}html.light .button{background-color:#fff;color:#000}html.light .button.is-light,html.night{background-color:#000}html.light .button.is-hovered,html.light .button:hover{background-color:#ccc;color:#363636}html.light .button.is-focused,html.light .button:focus{border-color:#000}html.light .basic-button{border:#000 solid .0625rem}html.light .basic-button:hover{border:#333 solid .0625rem;background-color:#ccc}html.light .text-button:hover{cursor:pointer;color:#363636;text-decoration:underline}html.light .checkbox:hover,html.light .label,html.light .radio:hover{color:#363636}html.light .dropdown-content{background-color:#fff}html.light .b-tooltip.is-right:before{border-right:5px solid #f2f2f2}html.light .b-tooltip.is-left:before{border-left:5px solid #f2f2f2}html.light .b-tooltip.is-bottom:before{border-bottom:5px solid #f2f2f2}html.light .b-tooltip.is-primary .tooltip-content{background:#f2f2f2;border:.0625rem solid #f5f5f5;color:#000}html.light .add,html.light .sub{border:#000 solid .0625rem;transition:all 200ms ease}html.light .add:hover,html.light .sub:hover{background-color:#ccc;color:#363636}html.light .current{border-top:#000 solid .0625rem;border-bottom:#000 solid .0625rem}html.light .current.infoOnly{border:#000 solid .0625rem}html.light .promoBar,html.light .topBar{background-color:#c7c7c7}html.light .pause,html.light .play{display:inline-block;position:relative;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s}html.light .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid #082412;border-bottom:.25rem solid transparent}html.light .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid #470303;border-left:.125rem solid #470303}html.light .meter.low{color:#c00}html.light .meter.neutral{color:#c0ce00}html.light .meter.high{color:#00af0f}html.light .buildList .hl-ca,html.light .main .content .action a.button.hl-ca .aTitle{color:#008f0c}html.light .buildList .hl-cna,html.light .main .content .action a.button.hl-cna .aTitle{color:maroon}html.light .graphContainer span.special:hover .gear,html.light .msgQueue span.special:hover .gear{fill:#4a5354}html.light .main .content .action a.button span.count,html.light .main .content .divider h2{background:#fff}html.light .main .content .action div.special,html.light .modal .action div.special{background:#fff;border:.0625rem solid #3a4344}html.light .graphContainer span.special .gear,html.light .main .content .action div.special .gear,html.light .modal .action div.special .gear,html.light .msgQueue span.special .gear{fill:#3a4344}html.light .main .content .action div.special:hover{border:.0625rem solid #000}html.light .main .content .action div.special:hover .gear{fill:#4a5354}html.light .main .content .action span.on{background:#fff;border:.0625rem solid #000;color:#008f0c}html.light .main .content .action span.on.altwarn,html.light .main .content .action span.on.warn{color:#743e00}html.light .main .content .action span.off{background:#fff;border:.0625rem solid #000;color:maroon}html.light .main .content .action span.off:hover,html.light .main .content .action span.on:hover,html.light .modal .action div.special:hover{border:.0625rem solid #000}html.light .main .content .action.hl .button{border:solid 1px maroon}html.light .main .content .action.cna a.button,html.light .modal .action.cna a.button{background:#ddd}html.light .main .content .action.cna a.button.hl-ca .aTitle,html.light .modal .action a.button.hl-ca .aTitle,html.light .modal .action.cna a.button.hl-ca .aTitle{color:#008f0c}html.light .main .content .action.cna a.button.hl-cna .aTitle,html.light .modal .action a.button.hl-cna .aTitle,html.light .modal .action.cna a.button.hl-cna .aTitle{color:maroon}html.light .main .content .action.cna .off,html.light .main .content .action.cna .on,html.light .main .content .action.cna .special,html.light .modal .action.cna .off,html.light .modal .action.cna .on,html.light .modal .action.cna .special{border-color:#000}html.light .main .content .action.cna .oldTech span.aTitle,html.light .modal .action.cna .oldTech span.aTitle{color:#000}html.light .main .content .action.cnam span.aTitle,html.light .modal .action.cnam span.aTitle{color:#900}html.light .main .content .enemyFortress{background-color:#fff}html.light .main .content .green,html.light .main .content .synth{box-shadow:0 0 6px #082412}html.light .main .content .green>span,html.light .main .content .synth>span{text-shadow:1px 1px #082412}html.light .main .content .red{box-shadow:0 0 6px #470303}html.light .main .content .red>span{text-shadow:1px 1px #470303}html.light .main .content .yellow{box-shadow:0 0 6px #7a6304}html.light .main .content .yellow>span{text-shadow:1px 1px #7a6304}html.light .main .content .orange{box-shadow:0 0 6px #966100}html.light .main .content .orange>span{text-shadow:1px 1px #966100}html.light .main .content .purple{box-shadow:0 0 6px #91006c}html.light .main .content .purple>span{text-shadow:1px 1px #91006c}html.light .main .content .blue,html.light .main .content .precog{box-shadow:0 0 6px #167df0}html.light .main .content .blue>span,html.light .main .content .precog>span{text-shadow:1px 1px #167df0}html.light .main .content .cna .precog>span{text-shadow:none}html.light .main .garrison .header,html.light .main .government .header{border-bottom:.0625rem solid #4e4e4e}html.light .main .market-header{border-bottom:#4e4e4e solid 1px}html.light .main .galaxyTrade{border-top:#4e4e4e solid 1px}html.light .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.light .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.light .powerGrid .circuit.inactive{display:none}html.light .powerGrid .circuit>span{display:inline-block}html.light .powerGrid .circuit>span:first-child{width:1.5rem}html.light .powerGrid .circuit .struct{width:12rem}html.light .powerGrid .circuit .off,html.light .powerGrid .circuit .on{min-width:2rem;text-align:center}html.light .powerGrid .circuit .off{color:#470303}html.light .powerGrid .circuit .on{color:#082412}html.light .gridHeader{border-top:#4e4e4e solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.light .powerGridHead{display:flex;justify-content:space-between}html.light .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.light .resetPowerGrid{margin-left:1rem;margin-top:.75rem}html.light .resetPowerGrid .button{height:1.5rem}html.light .fort .patrol .check{background-color:#fff}html.light .market-item .order{border:#000 solid .0625rem;transition:all 200ms ease}html.light .market-item .order:hover{border:#333 solid .0625rem;background-color:#ccc}html.light .inactive-row,html.light .market-item.alt,html.light .resource.alt{background-color:#ddd}html.light .resource.showBar.prime{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#bfbfbf calc(var(--percent-full) + 1px),#bfbfbf 100%)}html.light .resource.showBar.alt{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#9d9d9d calc(var(--percent-full) + 1px),#9d9d9d 100%)}html.light .resource .bar{cursor:pointer}html.light .modal .actionSpace,html.light .modal-card-body,html.light .modal-card-foot,html.light .modal-card-head{background-color:#fff}html.light .industry,html.light .modal .action a.button span.count,html.light .modalBox{background:#fff}html.light .industry p,html.light .modalBox p{border-bottom:#4e4e4e solid .0625rem}html.light .industry .divide,html.light .industry .market-item,html.light .industry .smelting,html.light .modalBox .divide,html.light .modalBox .market-item,html.light .modalBox .smelting{border-top:#4e4e4e solid .0625rem}html.light .industry .avail span{margin:0 2.5rem 0 2.125rem}html.light .govTask{margin-top:.25rem}html.light .govTask .button{height:1.5rem;margin-left:.5rem}html.light .fileImport{background-color:#fff}html.light .star1{fill:#fff;stroke:#000}html.light .star1 path{stroke:#000}html.light .star2{fill:#000}html.light .star3{fill:#cd7f32}html.light .star4{fill:silver}html.light .star5,html.night .graphContainer span.special:hover .gear,html.night .msgQueue span.special:hover .gear{fill:#d4af37}html.light .refresh svg{fill:#0098a3}html.light .bldQueue::-webkit-scrollbar-track,html.light .dropdown-content::-webkit-scrollbar-track,html.light .hscroll::-webkit-scrollbar-track,html.light .resTabs>.tabs::-webkit-scrollbar-track,html.light .resTabs>section::-webkit-scrollbar-track,html.light .sticky::-webkit-scrollbar-track,html.light .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#f5f5f5}html.light .bldQueue::-webkit-scrollbar,html.light .dropdown-content::-webkit-scrollbar,html.light .resTabs>.tabs::-webkit-scrollbar,html.light .resTabs>section::-webkit-scrollbar,html.light .sticky::-webkit-scrollbar,html.light .vscroll::-webkit-scrollbar{width:6px;background-color:#f5f5f5}html.light .hscroll::-webkit-scrollbar{height:8px;background-color:#f5f5f5}html.light .bldQueue::-webkit-scrollbar-thumb,html.light .dropdown-content::-webkit-scrollbar-thumb,html.light .hscroll::-webkit-scrollbar-thumb,html.light .resTabs>.tabs::-webkit-scrollbar-thumb,html.light .resTabs>section::-webkit-scrollbar-thumb,html.light .sticky::-webkit-scrollbar-thumb,html.light .vscroll::-webkit-scrollbar-thumb{background-color:#000}html.light .bldQueue,html.light .hscroll,html.light .resTabs>.tabs,html.light .resTabs>section,html.light .sticky,html.light .vscroll{scrollbar-color:#000 #f5f5f5}html.light .buttonList .is-selected{border-color:#008f0c}html.light .modal .action div.special:hover .gear{fill:#4a5354}html.light .modal .action span.off,html.light .modal .action span.on{background:#fff;border:.0625rem solid #000;color:#008f0c}html.light .modal .action span.on.altwarn,html.light .modal .action span.on.warn{color:#743e00}html.light .modal .action span.off{color:maroon}html.light .modal .action span.off:hover,html.light .modal .action span.on:hover{border:.0625rem solid #000}html.light .modal .action.hl .button{border:solid 1px maroon}html.light body{font-weight:500}html.light .button,html.light .button:hover{border:solid .0625rem #000}html.light .topBar .calendar .wi-thermometer-exterior{color:#00d6b2}html.light .topBar .calendar .wi-day-sunny,html.light .topBar .calendar .wi-day-windy{color:#fffb00}html.light .topBar .calendar .wi-cloud,html.light .topBar .calendar .wi-cloudy-gusts{color:#dfe2d3}html.light .topBar .calendar .wi-rain,html.light .topBar .calendar .wi-storm-showers{color:#00b0e6}html.light .topBar .calendar .wi-snow,html.light .topBar .calendar .wi-snow-wind,html.night .main>div.popper .has-text-dark,html.night body,html.night body .modal>div.popper .has-text-dark,html.night h2,html.night h3{color:#fff}html.light .main .content .action a.button span.count,html.light .modal .action a.button span.count{border-bottom:.0625rem solid #000;border-left:.0625rem solid #000}html.light .main .content .action.cna:not(.cnam) span.aTitle,html.light .modal .action.cna:not(.cnam) span.aTitle{color:#282828}html.light .industry{background:0 0}html.light .industry .smelting{border-top:0}html.light .industry .header{border-bottom:#4e4e4e solid .0625rem}html.light .progress::-moz-progress-bar,html.light .progress::-webkit-progress-value{background-color:#898989}html.light .popper .grad-from-left{background-image:linear-gradient(90deg,#470303 45%,#363636 55%)}html.light .popper .grad-from-left-warn{background-image:linear-gradient(90deg,#743e00 45%,#470303 55%)}html.light .popper .grad-from-right{background-image:linear-gradient(90deg,#363636 45%,#470303 55%)}html.light .modal .buttonList .is-selected{border-color:#008f0c}html.light .modal .buttonList .is-focused{color:#000}html.night a{color:#1abc9c}html.night .button.has-text-advanced,html.night .has-text-advanced{color:#00ac95}html.night .button.has-text-alert,html.night .has-text-alert{color:#af5d00}html.night .button.has-text-caution,html.night .has-text-caution{color:orange}html.night .button.has-text-danger,html.night .has-text-danger{color:#f14668}html.night .has-text-fade{color:#5e5e5e}html.night .has-text-flair{color:#d39753}html.night .button.has-text-info,html.night .has-text-info{color:#167df0}html.night .has-text-label{color:#ffff9e}html.night .button.has-text-special,html.night .has-text-special{color:#e500b4}html.night .button.has-text-success,html.night .has-text-success{color:#48c774}html.night .button.has-text-warning,html.night .has-text-warning{color:#ffdd57}html.night .has-text-danger-pulse{color:#ffdd57;-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.night .challenge .simButton{border-color:#48c774}html.night .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.night .challenge .configList>div{margin:0 .25rem;width:10rem}html.night .popper .has-text-label{color:#ffff9e}html.night .popper .has-text-success{color:#23d160}html.night .modal-card-head p,html.night .popper .has-text-warning{color:#ffdd57}html.night .popper .divide-line{border-top:#ccc solid .0625rem}html.night .main>div.popper,html.night body .modal>div.popper{background-color:#0f0f0f;border:.0625rem solid #999;color:#fff}html.night .main>div.popper>div,html.night body .modal>div.popper>div{border-top:solid .0625rem #999}html.night .main>div.popper>div:first-child,html.night body .modal>div.popper>div:first-child{border-top:none}html.night .main>div.popper .split,html.night body .modal>div.popper .split{display:flex}html.night .main>div.popper .split>div,html.night body .modal>div.popper .split>div{flex-wrap:nowrap}html.darkNight .main>div.popper .split>div:nth-of-type(2),html.darkNight body .modal>div.popper .split>div:nth-of-type(2),html.night .main>div.popper .split>div:nth-of-type(2),html.night body .modal>div.popper .split>div:nth-of-type(2),html.redgreen .main>div.popper .split>div:nth-of-type(2),html.redgreen body .modal>div.popper .split>div:nth-of-type(2){border-left:solid .0625rem #999;margin-left:.375rem;padding-left:.375rem}html.night .shipPopper .divider{border-bottom:solid .0625rem #999}html.night .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.night .sliderbar .b-slider{display:inline-block;width:80%}html.night .sliderbar .b-slider .b-slider-track{height:1rem}html.night .sliderbar .is-primary .b-slider-fill{background:#48c774}html.night .sliderbar.thin>span{bottom:.625rem}html.night .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.night .msgQueueFilters span,html.night .tabs a{color:#fff}html.night .msgQueueFilters span.is-active,html.night .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.night .msgQueueFilters span:hover,html.night .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.night .button{background-color:#282f2f;color:#fff}html.night .button.is-light{background-color:#fff}html.night .button.is-hovered,html.night .button:hover{background-color:#3a4344;color:#f2f2f2}html.night .button.is-focused,html.night .button:focus{border-color:#dbdbdb}html.night .basic-button{border:#ccc solid .0625rem}html.night .basic-button:hover{border:#eee solid .0625rem;background-color:#3a4344}html.night .text-button:hover{cursor:pointer;color:#f2f2f2;text-decoration:underline}html.night .label{color:#dbdee0}html.night .checkbox:hover,html.night .radio:hover,html.redgreen a{color:#1abc9c}html.night .dropdown-content{background-color:#1f2424}html.night .b-tooltip.is-right:before{border-right:5px solid #999}html.night .b-tooltip.is-left:before{border-left:5px solid #999}html.night .b-tooltip.is-bottom:before{border-bottom:5px solid #999}html.night .b-tooltip.is-primary .tooltip-content{background:#0f0f0f;border:.0625rem solid #999;color:#fff}html.night .add,html.night .sub{border:#ccc solid .0625rem;transition:all 200ms ease}html.night .add:hover,html.night .sub:hover{background-color:#3a4344;color:#f2f2f2}html.night .current{border-top:#ccc solid .0625rem;border-bottom:#ccc solid .0625rem}html.night .current.infoOnly{border:#ccc solid .0625rem}html.night .promoBar,html.night .topBar{background-color:#3a4344}html.night .pause,html.night .play{display:inline-block;position:relative;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s}html.night .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid #48c774;border-bottom:.25rem solid transparent}html.night .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid #f14668;border-left:.125rem solid #f14668}html.night .meter.low{color:#c00}html.night .meter.neutral{color:#c0ce00}html.night .buildList .hl-ca,html.night .main .content .action a.button.hl-ca .aTitle,html.night .meter.high{color:#00af0f}html.night .buildList .hl-cna,html.night .main .content .action a.button.hl-cna .aTitle{color:#c20000}html.night .graphContainer span.special .gear,html.night .main .content .action div.special .gear,html.night .modal .action div.special .gear,html.night .msgQueue span.special .gear{fill:#ad5f12}html.darkNight .main .content .action a.button span.count,html.darkNight .main .content .divider h2,html.darkNight .modal .action a.button span.count,html.night .main .content .action a.button span.count,html.night .main .content .divider h2,html.night .modal .action a.button span.count,html.redgreen .main .content .action a.button span.count,html.redgreen .main .content .divider h2,html.redgreen .modal .action a.button span.count{background:#000}html.night .main .content .action div.special,html.night .modal .action div.special{background:#000;border:.0625rem solid #282f2f}html.night .main .content .action div.special:hover{border:.0625rem solid #3a4344}html.night .main .content .action div.special:hover .gear{fill:#d4af37}html.night .main .content .action span.off,html.night .main .content .action span.on{background:#000;border:.0625rem solid #282f2f;color:#00af0f}html.night .main .content .action span.on.altwarn,html.night .main .content .action span.on.warn{color:#af5d00}html.night .main .content .action span.off{color:#c20000}html.night .main .content .action span.off:hover,html.night .main .content .action span.on:hover,html.night .modal .action div.special:hover{border:.0625rem solid #3a4344}html.night .main .content .action.hl .button{border:solid 1px #00af0f}html.darkNight .main .content .action.cna a.button,html.darkNight .modal .action.cna a.button,html.night .main .content .action.cna a.button,html.night .modal .action.cna a.button,html.redgreen .main .content .action.cna a.button,html.redgreen .modal .action.cna a.button{background:#181818}html.night .main .content .action.cna a.button.hl-ca .aTitle,html.night .modal .action a.button.hl-ca .aTitle,html.night .modal .action.cna a.button.hl-ca .aTitle{color:#00af0f}html.night .main .content .action.cna a.button.hl-cna .aTitle,html.night .modal .action a.button.hl-cna .aTitle,html.night .modal .action.cna a.button.hl-cna .aTitle{color:#c20000}html.night .main .content .action.cna .off,html.night .main .content .action.cna .on,html.night .main .content .action.cna .special,html.night .modal .action.cna .off,html.night .modal .action.cna .on,html.night .modal .action.cna .special{border-color:#181818}html.night .main .content .action.cna .oldTech span.aTitle,html.night .modal .action.cna .oldTech span.aTitle,html.redgreen .main>div.popper .has-text-dark,html.redgreen body,html.redgreen body .modal>div.popper .has-text-dark,html.redgreen h2,html.redgreen h3{color:#fff}html.night .main .content .action.cnam span.aTitle,html.night .modal .action.cnam span.aTitle{color:#975f5f}html.night .main .content .enemyFortress{background-color:#282f2f}html.night .main .content .green,html.night .main .content .synth{box-shadow:0 0 6px #48c774}html.night .main .content .green>span,html.night .main .content .synth>span{text-shadow:1px 1px #48c774}html.night .main .content .red{box-shadow:0 0 6px #f14668}html.night .main .content .red>span{text-shadow:1px 1px #f14668}html.night .main .content .yellow{box-shadow:0 0 6px #ffdd57}html.night .main .content .yellow>span{text-shadow:1px 1px #ffdd57}html.night .main .content .orange{box-shadow:0 0 6px orange}html.night .main .content .orange>span{text-shadow:1px 1px orange}html.night .main .content .purple{box-shadow:0 0 6px #e500b4}html.night .main .content .purple>span{text-shadow:1px 1px #e500b4}html.night .main .content .blue,html.night .main .content .precog{box-shadow:0 0 6px #167df0}html.night .main .content .blue>span,html.night .main .content .precog>span{text-shadow:1px 1px #167df0}html.night .main .content .cna .precog>span{text-shadow:none}html.night .main .garrison .header,html.night .main .government .header{border-bottom:.0625rem solid #ccc}html.night .main .market-header{border-bottom:#ccc solid 1px}html.night .main .galaxyTrade{border-top:#ccc solid 1px}html.night .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.night .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.night .powerGrid .circuit.inactive{display:none}html.night .powerGrid .circuit>span{display:inline-block}html.night .powerGrid .circuit>span:first-child{width:1.5rem}html.night .powerGrid .circuit .struct{width:12rem}html.night .powerGrid .circuit .off,html.night .powerGrid .circuit .on{min-width:2rem;text-align:center}html.night .powerGrid .circuit .off{color:#f14668}html.night .powerGrid .circuit .on{color:#48c774}html.night .gridHeader{border-top:#ccc solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.night .powerGridHead{display:flex;justify-content:space-between}html.night .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.night .resetPowerGrid{margin-left:1rem;margin-top:.75rem}html.night .resetPowerGrid .button{height:1.5rem}html.night .fort .patrol .check{background-color:#000}html.night .market-item .order{border:#ccc solid .0625rem;transition:all 200ms ease}html.night .market-item .order:hover{border:#eee solid .0625rem;background-color:#3a4344}html.night .inactive-row,html.night .market-item.alt,html.night .resource.alt{background-color:#1b1b1b}html.night .resource.showBar.prime{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#1a1a1a calc(var(--percent-full) + 1px),#1a1a1a 100%)}html.night .resource.showBar.alt{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#000 calc(var(--percent-full) + 1px),#000 100%)}html.night .resource .bar{cursor:pointer}html.night .modal .actionSpace{background-color:#000}html.night .modal-card-body,html.night .modal-card-foot,html.night .modal-card-head{background-color:#282f2f}html.night .industry,html.night .modalBox{background:#282f2f}html.night .industry .divide,html.night .industry .market-item,html.night .industry .smelting,html.night .modalBox .divide,html.night .modalBox .market-item,html.night .modalBox .smelting{border-top:#ccc solid .0625rem}html.night .industry{background:0 0}html.night .industry .header,html.night .industry p,html.night .modalBox p{border-bottom:#ccc solid .0625rem}html.night .industry .avail span{margin:0 2.5rem 0 2.125rem}html.night .govTask{margin-top:.25rem}html.night .govTask .button{height:1.5rem;margin-left:.5rem}html.night .fileImport,html.redgreen{background-color:#000}html.night .star1{fill:#000;stroke:#fff}html.darkNight .star1 path,html.gruvboxLight .star1 path,html.night .star1 path,html.redgreen .star1 path{stroke:#fff}html.night .star2{fill:#fff}html.night .star3{fill:#cd7f32}html.night .star4{fill:silver}html.night .modal .action div.special:hover .gear,html.night .star5,html.redgreen .graphContainer span.special:hover .gear,html.redgreen .msgQueue span.special:hover .gear{fill:#d4af37}html.darkNight .refresh svg,html.night .refresh svg,html.redgreen .refresh svg{fill:#00ac95}html.night .bldQueue::-webkit-scrollbar-track,html.night .dropdown-content::-webkit-scrollbar-track,html.night .hscroll::-webkit-scrollbar-track,html.night .resTabs>.tabs::-webkit-scrollbar-track,html.night .resTabs>section::-webkit-scrollbar-track,html.night .sticky::-webkit-scrollbar-track,html.night .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#1f2424}html.night .bldQueue::-webkit-scrollbar,html.night .dropdown-content::-webkit-scrollbar,html.night .resTabs>.tabs::-webkit-scrollbar,html.night .resTabs>section::-webkit-scrollbar,html.night .sticky::-webkit-scrollbar,html.night .vscroll::-webkit-scrollbar{width:6px;background-color:#1f2424}html.night .hscroll::-webkit-scrollbar{height:8px;background-color:#1f2424}html.night .bldQueue::-webkit-scrollbar-thumb,html.night .dropdown-content::-webkit-scrollbar-thumb,html.night .hscroll::-webkit-scrollbar-thumb,html.night .resTabs>.tabs::-webkit-scrollbar-thumb,html.night .resTabs>section::-webkit-scrollbar-thumb,html.night .sticky::-webkit-scrollbar-thumb,html.night .vscroll::-webkit-scrollbar-thumb{background-color:#727272}html.night .bldQueue,html.night .hscroll,html.night .resTabs>.tabs,html.night .resTabs>section,html.night .sticky,html.night .vscroll{scrollbar-color:#727272 #1f2424}html.night .buttonList .is-selected,html.night .modal .buttonList .is-selected{border-color:#00af0f}html.night .modal .action span.off,html.night .modal .action span.on{background:#000;border:.0625rem solid #282f2f;color:#00af0f}html.night .modal .action span.on.altwarn,html.night .modal .action span.on.warn{color:#af5d00}html.night .modal .action span.off{color:#c20000}html.night .modal .action span.off:hover,html.night .modal .action span.on:hover{border:.0625rem solid #3a4344}html.night .modal .action.hl .button,html.redgreen .main .content .action.hl .button{border:solid 1px #00af0f}html.night .popper .grad-from-left{background-image:linear-gradient(90deg,#f14668 45%,#fff 55%)}html.night .popper .grad-from-left-warn{background-image:linear-gradient(90deg,#af5d00 45%,#f14668 55%)}html.night .popper .grad-from-right{background-image:linear-gradient(90deg,#fff 45%,#f14668 55%)}html.redgreen .button.has-text-advanced,html.redgreen .has-text-advanced{color:#00ac95}html.redgreen .button.has-text-alert,html.redgreen .has-text-alert{color:#af5d00}html.redgreen .button.has-text-caution,html.redgreen .has-text-caution{color:orange}html.redgreen .button.has-text-danger,html.redgreen .has-text-danger{color:#90c}html.redgreen .has-text-fade{color:#5e5e5e}html.redgreen .has-text-flair{color:#0f0}html.redgreen .button.has-text-info,html.redgreen .has-text-info{color:#167df0}html.redgreen .button.has-text-special,html.redgreen .has-text-label,html.redgreen .has-text-special{color:#ffff9e}html.redgreen .button.has-text-success,html.redgreen .has-text-success{color:#0f0}html.redgreen .button.has-text-warning,html.redgreen .has-text-warning,html.redgreen .modal-card-head p{color:#fc0}html.redgreen .has-text-danger-pulse{color:#fc0;-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.redgreen .challenge .simButton{border-color:#0f0}html.redgreen .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.redgreen .challenge .configList>div{margin:0 .25rem;width:10rem}html.redgreen .popper .has-text-label{color:#ffff9e}html.redgreen .popper .has-text-success{color:#23d160}html.redgreen .popper .has-text-warning{color:#ffdd57}html.redgreen .popper .divide-line{border-top:#ccc solid .0625rem}html.redgreen .main>div.popper,html.redgreen body .modal>div.popper{background-color:#0f0f0f;border:.0625rem solid #999;color:#fff}html.redgreen .main>div.popper>div,html.redgreen body .modal>div.popper>div{border-top:solid .0625rem #999}html.redgreen .main>div.popper>div:first-child,html.redgreen body .modal>div.popper>div:first-child{border-top:none}html.redgreen .main>div.popper .split,html.redgreen body .modal>div.popper .split{display:flex}html.redgreen .main>div.popper .split>div,html.redgreen body .modal>div.popper .split>div{flex-wrap:nowrap}html.redgreen .shipPopper .divider{border-bottom:solid .0625rem #999}html.redgreen .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.redgreen .sliderbar .b-slider{display:inline-block;width:80%}html.redgreen .sliderbar .b-slider .b-slider-track{height:1rem}html.redgreen .sliderbar .is-primary .b-slider-fill{background:#0f0}html.redgreen .sliderbar.thin>span{bottom:.625rem}html.redgreen .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.redgreen .msgQueueFilters span,html.redgreen .tabs a{color:#fff}html.redgreen .msgQueueFilters span.is-active,html.redgreen .tabs li.is-active a{border-bottom-color:#1abc9c;color:#167df0}html.redgreen .msgQueueFilters span:hover,html.redgreen .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.redgreen .button{background-color:#282f2f;color:#fff}html.redgreen .button.is-light{background-color:#fff}html.redgreen .button.is-hovered,html.redgreen .button:hover{background-color:#3a4344;color:#f2f2f2}html.redgreen .button.is-focused,html.redgreen .button:focus{border-color:#dbdbdb}html.redgreen .basic-button{border:#ccc solid .0625rem}html.redgreen .basic-button:hover{border:#eee solid .0625rem;background-color:#3a4344}html.redgreen .text-button:hover{cursor:pointer;color:#f2f2f2;text-decoration:underline}html.redgreen .label{color:#dbdee0}html.darkNight a,html.redgreen .checkbox:hover,html.redgreen .radio:hover{color:#1abc9c}html.redgreen .dropdown-content{background-color:#1f2424}html.redgreen .b-tooltip.is-right:before{border-right:5px solid #999}html.redgreen .b-tooltip.is-left:before{border-left:5px solid #999}html.redgreen .b-tooltip.is-bottom:before{border-bottom:5px solid #999}html.redgreen .b-tooltip.is-primary .tooltip-content{background:#0f0f0f;border:.0625rem solid #999;color:#fff}html.redgreen .add,html.redgreen .sub{border:#ccc solid .0625rem;transition:all 200ms ease}html.redgreen .add:hover,html.redgreen .sub:hover{background-color:#3a4344;color:#f2f2f2}html.redgreen .current{border-top:#ccc solid .0625rem;border-bottom:#ccc solid .0625rem}html.redgreen .current.infoOnly{border:#ccc solid .0625rem}html.redgreen .promoBar,html.redgreen .topBar{background-color:#3a4344}html.redgreen .pause,html.redgreen .play{display:inline-block;position:relative;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s}html.redgreen .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid #0f0;border-bottom:.25rem solid transparent}html.redgreen .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid #90c;border-left:.125rem solid #90c}html.redgreen .meter.low{color:#167df0}html.redgreen .meter.neutral{color:#00af0f}html.redgreen .meter.high{color:#fff}html.redgreen .buildList .hl-ca,html.redgreen .main .content .action a.button.hl-ca .aTitle{color:#00af0f}html.redgreen .buildList .hl-cna,html.redgreen .main .content .action a.button.hl-cna .aTitle{color:#c20000}html.redgreen .graphContainer span.special .gear,html.redgreen .main .content .action div.special .gear,html.redgreen .modal .action div.special .gear,html.redgreen .msgQueue span.special .gear{fill:#ad5f12}html.redgreen .main .content .action div.special,html.redgreen .main .content .action span.on,html.redgreen .modal .action div.special{background:#000;border:.0625rem solid #282f2f}html.redgreen .main .content .action div.special:hover{border:.0625rem solid #3a4344}html.redgreen .main .content .action div.special:hover .gear{fill:#d4af37}html.redgreen .main .content .action span.on{color:#0f0}html.redgreen .main .content .action span.on.altwarn,html.redgreen .main .content .action span.on.warn{color:#af5d00}html.redgreen .main .content .action span.off{background:#000;border:.0625rem solid #282f2f;color:#90c}html.redgreen .main .content .action span.off:hover,html.redgreen .main .content .action span.on:hover,html.redgreen .modal .action div.special:hover{border:.0625rem solid #3a4344}html.redgreen .main .content .action.cna a.button.hl-ca .aTitle,html.redgreen .modal .action a.button.hl-ca .aTitle,html.redgreen .modal .action.cna a.button.hl-ca .aTitle{color:#00af0f}html.redgreen .main .content .action.cna a.button.hl-cna .aTitle,html.redgreen .modal .action a.button.hl-cna .aTitle,html.redgreen .modal .action.cna a.button.hl-cna .aTitle{color:#c20000}html.redgreen .main .content .action.cna .off,html.redgreen .main .content .action.cna .on,html.redgreen .main .content .action.cna .special,html.redgreen .modal .action.cna .off,html.redgreen .modal .action.cna .on,html.redgreen .modal .action.cna .special{border-color:#181818}html.redgreen .main .content .action.cna .oldTech span.aTitle,html.redgreen .modal .action.cna .oldTech span.aTitle{color:#fff}html.redgreen .main .content .action.cnam span.aTitle,html.redgreen .modal .action.cnam span.aTitle{color:#975f5f}html.redgreen .main .content .enemyFortress{background-color:#282f2f}html.redgreen .main .content .green,html.redgreen .main .content .synth{box-shadow:0 0 6px #0f0}html.redgreen .main .content .green>span,html.redgreen .main .content .synth>span{text-shadow:1px 1px #0f0}html.redgreen .main .content .red{box-shadow:0 0 6px #90c}html.redgreen .main .content .red>span{text-shadow:1px 1px #90c}html.redgreen .main .content .yellow{box-shadow:0 0 6px #fc0}html.redgreen .main .content .yellow>span{text-shadow:1px 1px #fc0}html.redgreen .main .content .orange{box-shadow:0 0 6px orange}html.redgreen .main .content .orange>span{text-shadow:1px 1px orange}html.redgreen .main .content .purple{box-shadow:0 0 6px #ffff9e}html.redgreen .main .content .purple>span{text-shadow:1px 1px #ffff9e}html.redgreen .main .content .blue,html.redgreen .main .content .precog{box-shadow:0 0 6px #167df0}html.redgreen .main .content .blue>span,html.redgreen .main .content .precog>span{text-shadow:1px 1px #167df0}html.redgreen .main .content .cna .precog>span{text-shadow:none}html.redgreen .main .garrison .header,html.redgreen .main .government .header{border-bottom:.0625rem solid #ccc}html.redgreen .main .market-header{border-bottom:#ccc solid 1px}html.redgreen .main .galaxyTrade{border-top:#ccc solid 1px}html.redgreen .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.redgreen .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.redgreen .powerGrid .circuit.inactive{display:none}html.redgreen .powerGrid .circuit>span{display:inline-block}html.redgreen .powerGrid .circuit>span:first-child{width:1.5rem}html.redgreen .powerGrid .circuit .struct{width:12rem}html.redgreen .powerGrid .circuit .off,html.redgreen .powerGrid .circuit .on{min-width:2rem;text-align:center}html.redgreen #powerStatus .has-text-warning,html.redgreen .powerGrid .circuit .off{color:#90c}html.redgreen .powerGrid .circuit .on{color:#0f0}html.redgreen .gridHeader{border-top:#ccc solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.redgreen .powerGridHead{display:flex;justify-content:space-between}html.redgreen .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.redgreen .resetPowerGrid{margin-left:1rem;margin-top:.75rem}html.redgreen .resetPowerGrid .button{height:1.5rem}html.redgreen .fort .patrol .check{background-color:#000}html.redgreen .market-item .order{border:#ccc solid .0625rem;transition:all 200ms ease}html.redgreen .market-item .order:hover{border:#eee solid .0625rem;background-color:#3a4344}html.redgreen .inactive-row,html.redgreen .market-item.alt,html.redgreen .resource.alt{background-color:#1b1b1b}html.redgreen .resource.showBar.prime{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#1a1a1a calc(var(--percent-full) + 1px),#1a1a1a 100%)}html.redgreen .resource.showBar.alt{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#000 calc(var(--percent-full) + 1px),#000 100%)}html.redgreen .resource .bar{cursor:pointer}html.redgreen .modal .actionSpace{background-color:#000}html.redgreen .modal-card-body,html.redgreen .modal-card-foot,html.redgreen .modal-card-head{background-color:#282f2f}html.redgreen .industry,html.redgreen .modalBox{background:#282f2f}html.redgreen .industry .divide,html.redgreen .industry .market-item,html.redgreen .industry .smelting,html.redgreen .modalBox .divide,html.redgreen .modalBox .market-item,html.redgreen .modalBox .smelting{border-top:#ccc solid .0625rem}html.redgreen .industry{background:0 0}html.redgreen .industry .header,html.redgreen .industry p,html.redgreen .modalBox p{border-bottom:#ccc solid .0625rem}html.redgreen .industry .avail span{margin:0 2.5rem 0 2.125rem}html.redgreen .govTask{margin-top:.25rem}html.redgreen .govTask .button{height:1.5rem;margin-left:.5rem}html.darkNight,html.redgreen .fileImport{background-color:#000}html.redgreen .star1{fill:#000;stroke:#fff}html.redgreen .star2{fill:#fff}html.redgreen .star3{fill:#cd7f32}html.redgreen .star4{fill:silver}html.darkNight .graphContainer span.special:hover .gear,html.darkNight .msgQueue span.special:hover .gear,html.redgreen .modal .action div.special:hover .gear,html.redgreen .star5{fill:#d4af37}html.redgreen .bldQueue::-webkit-scrollbar-track,html.redgreen .dropdown-content::-webkit-scrollbar-track,html.redgreen .hscroll::-webkit-scrollbar-track,html.redgreen .resTabs>.tabs::-webkit-scrollbar-track,html.redgreen .resTabs>section::-webkit-scrollbar-track,html.redgreen .sticky::-webkit-scrollbar-track,html.redgreen .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#1f2424}html.redgreen .bldQueue::-webkit-scrollbar,html.redgreen .dropdown-content::-webkit-scrollbar,html.redgreen .resTabs>.tabs::-webkit-scrollbar,html.redgreen .resTabs>section::-webkit-scrollbar,html.redgreen .sticky::-webkit-scrollbar,html.redgreen .vscroll::-webkit-scrollbar{width:6px;background-color:#1f2424}html.redgreen .hscroll::-webkit-scrollbar{height:8px;background-color:#1f2424}html.redgreen .bldQueue::-webkit-scrollbar-thumb,html.redgreen .dropdown-content::-webkit-scrollbar-thumb,html.redgreen .hscroll::-webkit-scrollbar-thumb,html.redgreen .resTabs>.tabs::-webkit-scrollbar-thumb,html.redgreen .resTabs>section::-webkit-scrollbar-thumb,html.redgreen .sticky::-webkit-scrollbar-thumb,html.redgreen .vscroll::-webkit-scrollbar-thumb{background-color:#727272}html.redgreen .bldQueue,html.redgreen .hscroll,html.redgreen .resTabs>.tabs,html.redgreen .resTabs>section,html.redgreen .sticky,html.redgreen .vscroll{scrollbar-color:#727272 #1f2424}html.redgreen .buttonList .is-selected{border-color:#00af0f}html.redgreen .modal .action span.off,html.redgreen .modal .action span.on{background:#000;border:.0625rem solid #282f2f;color:#0f0}html.redgreen .modal .action span.on.altwarn,html.redgreen .modal .action span.on.warn{color:#af5d00}html.redgreen .modal .action span.off{color:#90c}html.redgreen .modal .action span.off:hover,html.redgreen .modal .action span.on:hover{border:.0625rem solid #3a4344}html.darkNight .main .content .action.hl .button,html.darkNight .modal .action.hl .button,html.redgreen .modal .action.hl .button{border:solid 1px #00af0f}html.redgreen .main>div.popper .has-text-danger,html.redgreen body .modal>div.popper .has-text-danger{color:#a0a}html.redgreen .trade .has-text-danger{color:#a0f}html.redgreen .trade .has-text-warning{color:#fff}html.redgreen .topBar .calendar .wi-thermometer-exterior{color:#00e6d2}html.redgreen .topBar .calendar .wi-thermometer{color:#fffb00}html.redgreen .mad{background:repeating-linear-gradient(45deg,#8a8b49,#8a8b49 10px,#000 10px,#000 20px)}html.redgreen .armed .mad{background:repeating-linear-gradient(45deg,#fbfd84,#fbfd84 10px,#000 10px,#000 20px)}html.redgreen .popper .grad-from-left{background-image:linear-gradient(90deg,#90c 45%,#fff 55%)}html.redgreen .popper .grad-from-left-warn{background-image:linear-gradient(90deg,#af5d00 45%,#90c 55%)}html.redgreen .popper .grad-from-right{background-image:linear-gradient(90deg,#fff 45%,#90c 55%)}html.redgreen .modal .buttonList .is-selected{border-color:#00af0f}html.darkNight .main>div.popper .has-text-dark,html.darkNight body,html.darkNight body .modal>div.popper .has-text-dark,html.darkNight h2,html.darkNight h3{color:#b8b8b8}html.darkNight .button.has-text-advanced,html.darkNight .has-text-advanced{color:#00ac95}html.darkNight .button.has-text-alert,html.darkNight .has-text-alert{color:#af5d00}html.darkNight .button.has-text-caution,html.darkNight .has-text-caution{color:orange}html.darkNight .button.has-text-danger,html.darkNight .has-text-danger{color:#f14668}html.darkNight .has-text-fade{color:#5e5e5e}html.darkNight .has-text-flair{color:#d39753}html.darkNight .button.has-text-info,html.darkNight .has-text-info{color:#167df0}html.darkNight .has-text-label{color:#ffff9e}html.darkNight .button.has-text-special,html.darkNight .has-text-special{color:#e500b4}html.darkNight .button.has-text-success,html.darkNight .has-text-success{color:#48c774}html.darkNight .button.has-text-warning{color:#ffdd57}html.darkNight .has-text-danger-pulse{color:#ffdd57;-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.darkNight .challenge .simButton{border-color:#48c774}html.darkNight .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.darkNight .challenge .configList>div{margin:0 .25rem;width:10rem}html.darkNight .popper .has-text-label{color:#ffff9e}html.darkNight .popper .has-text-success{color:#23d160}html.darkNight .modal-card-head p,html.darkNight .popper .has-text-warning{color:#ffdd57}html.darkNight .popper .divide-line{border-top:#ccc solid .0625rem}html.darkNight .main>div.popper,html.darkNight body .modal>div.popper{background-color:#0f0f0f;border:.0625rem solid #999;color:#b8b8b8}html.darkNight .main>div.popper>div,html.darkNight body .modal>div.popper>div{border-top:solid .0625rem #999}html.darkNight .main>div.popper>div:first-child,html.darkNight body .modal>div.popper>div:first-child{border-top:none}html.darkNight .main>div.popper .split,html.darkNight body .modal>div.popper .split{display:flex}html.darkNight .main>div.popper .split>div,html.darkNight body .modal>div.popper .split>div{flex-wrap:nowrap}html.darkNight .shipPopper .divider{border-bottom:solid .0625rem #999}html.darkNight .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.darkNight .sliderbar .b-slider{display:inline-block;width:80%}html.darkNight .sliderbar .b-slider .b-slider-track{height:1rem}html.darkNight .sliderbar .is-primary .b-slider-fill{background:#48c774}html.darkNight .sliderbar.thin>span{bottom:.625rem}html.darkNight .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.darkNight .msgQueueFilters span,html.darkNight .tabs a{color:#b8b8b8}html.darkNight .msgQueueFilters span.is-active,html.darkNight .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.darkNight .msgQueueFilters span:hover,html.darkNight .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.darkNight .button{background-color:#282f2f;color:#ccc}html.darkNight .button.is-light{background-color:#b8b8b8}html.darkNight .button.is-hovered,html.darkNight .button:hover{background-color:#3a4344;color:#f2f2f2}html.darkNight .button.is-focused,html.darkNight .button:focus{border-color:#dbdbdb}html.darkNight .basic-button{border:#ccc solid .0625rem}html.darkNight .basic-button:hover{border:#eee solid .0625rem;background-color:#3a4344}html.darkNight .text-button:hover{cursor:pointer;color:#f2f2f2;text-decoration:underline}html.darkNight .label{color:#dbdee0}html.darkNight .checkbox:hover,html.darkNight .radio:hover{color:#1abc9c}html.darkNight .dropdown-content{background-color:#1f2424}html.darkNight .b-tooltip.is-right:before{border-right:5px solid #999}html.darkNight .b-tooltip.is-left:before{border-left:5px solid #999}html.darkNight .b-tooltip.is-bottom:before{border-bottom:5px solid #999}html.darkNight .b-tooltip.is-primary .tooltip-content{background:#0f0f0f;border:.0625rem solid #999;color:#b8b8b8}html.darkNight .add,html.darkNight .sub{border:#ccc solid .0625rem;transition:all 200ms ease}html.darkNight .add:hover,html.darkNight .sub:hover{background-color:#3a4344;color:#f2f2f2}html.darkNight .current{border-top:#ccc solid .0625rem;border-bottom:#ccc solid .0625rem}html.darkNight .current.infoOnly{border:#ccc solid .0625rem}html.darkNight .promoBar,html.darkNight .topBar{background-color:#3a4344}html.darkNight .pause,html.darkNight .play{display:inline-block;position:relative;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s}html.darkNight .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid #48c774;border-bottom:.25rem solid transparent}html.darkNight .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid #f14668;border-left:.125rem solid #f14668}html.darkNight .meter.low{color:#c00}html.darkNight .meter.neutral{color:#c0ce00}html.darkNight .buildList .hl-ca,html.darkNight .main .content .action a.button.hl-ca .aTitle,html.darkNight .meter.high,html.darkNight .modal .action a.button.hl-ca .aTitle{color:#00af0f}html.darkNight .buildList .hl-cna,html.darkNight .main .content .action a.button.hl-cna .aTitle,html.darkNight .modal .action a.button.hl-cna .aTitle{color:#c20000}html.darkNight .graphContainer span.special .gear,html.darkNight .main .content .action div.special .gear,html.darkNight .modal .action div.special .gear,html.darkNight .msgQueue span.special .gear{fill:#ad5f12}html.darkNight .main .content .action div.special,html.darkNight .modal .action div.special{background:#000;border:.0625rem solid #282f2f}html.darkNight .main .content .action div.special:hover,html.darkNight .modal .action div.special:hover{border:.0625rem solid #3a4344}html.darkNight .main .content .action div.special:hover .gear,html.darkNight .modal .action div.special:hover .gear{fill:#d4af37}html.darkNight .main .content .action span.on,html.darkNight .modal .action span.on{background:#000;border:.0625rem solid #282f2f;color:#00af0f}html.darkNight .main .content .action span.on.altwarn,html.darkNight .main .content .action span.on.warn,html.darkNight .modal .action span.on.altwarn,html.darkNight .modal .action span.on.warn{color:#af5d00}html.darkNight .main .content .action span.off,html.darkNight .modal .action span.off{background:#000;border:.0625rem solid #282f2f;color:#c20000}html.darkNight .main .content .action span.off:hover,html.darkNight .main .content .action span.on:hover,html.darkNight .modal .action span.off:hover,html.darkNight .modal .action span.on:hover{border:.0625rem solid #3a4344}html.darkNight .main .content .action.cna a.button.hl-ca .aTitle,html.darkNight .modal .action.cna a.button.hl-ca .aTitle{color:#00af0f}html.darkNight .main .content .action.cna a.button.hl-cna .aTitle,html.darkNight .modal .action.cna a.button.hl-cna .aTitle{color:#c20000}html.darkNight .main .content .action.cna .off,html.darkNight .main .content .action.cna .on,html.darkNight .main .content .action.cna .special,html.darkNight .modal .action.cna .off,html.darkNight .modal .action.cna .on,html.darkNight .modal .action.cna .special{border-color:#181818}html.darkNight .main .content .action.cna .oldTech span.aTitle,html.darkNight .modal .action.cna .oldTech span.aTitle{color:#fff}html.darkNight .main .content .action.cnam span.aTitle,html.darkNight .modal .action.cnam span.aTitle{color:#975f5f}html.darkNight .main .content .enemyFortress{background-color:#282f2f}html.darkNight .main .content .green,html.darkNight .main .content .synth{box-shadow:0 0 6px #48c774}html.darkNight .main .content .green>span,html.darkNight .main .content .synth>span{text-shadow:1px 1px #48c774}html.darkNight .main .content .red{box-shadow:0 0 6px #f14668}html.darkNight .main .content .red>span{text-shadow:1px 1px #f14668}html.darkNight .main .content .yellow{box-shadow:0 0 6px #ffdd57}html.darkNight .main .content .yellow>span{text-shadow:1px 1px #ffdd57}html.darkNight .main .content .orange{box-shadow:0 0 6px orange}html.darkNight .main .content .orange>span{text-shadow:1px 1px orange}html.darkNight .main .content .purple{box-shadow:0 0 6px #e500b4}html.darkNight .main .content .purple>span{text-shadow:1px 1px #e500b4}html.darkNight .main .content .blue,html.darkNight .main .content .precog{box-shadow:0 0 6px #167df0}html.darkNight .main .content .blue>span,html.darkNight .main .content .precog>span{text-shadow:1px 1px #167df0}html.darkNight .main .content .cna .precog>span{text-shadow:none}html.darkNight .main .garrison .header,html.darkNight .main .government .header{border-bottom:.0625rem solid #ccc}html.darkNight .main .market-header{border-bottom:#ccc solid 1px}html.darkNight .main .galaxyTrade{border-top:#ccc solid 1px}html.darkNight .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.darkNight .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.darkNight .powerGrid .circuit.inactive{display:none}html.darkNight .powerGrid .circuit>span{display:inline-block}html.darkNight .powerGrid .circuit>span:first-child{width:1.5rem}html.darkNight .powerGrid .circuit .struct{width:12rem}html.darkNight .powerGrid .circuit .off,html.darkNight .powerGrid .circuit .on{min-width:2rem;text-align:center}html.darkNight .powerGrid .circuit .off{color:#f14668}html.darkNight .powerGrid .circuit .on{color:#48c774}html.darkNight .gridHeader{border-top:#ccc solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.darkNight .powerGridHead{display:flex;justify-content:space-between}html.darkNight .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.darkNight .resetPowerGrid{margin-left:1rem;margin-top:.75rem}html.darkNight .resetPowerGrid .button{height:1.5rem}html.darkNight .fort .patrol .check{background-color:#000}html.darkNight .market-item .order{border:#ccc solid .0625rem;transition:all 200ms ease}html.darkNight .market-item .order:hover{border:#eee solid .0625rem;background-color:#3a4344}html.darkNight .inactive-row,html.darkNight .market-item.alt,html.darkNight .resource.alt{background-color:#1b1b1b}html.darkNight .resource.showBar.prime{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#1a1a1a calc(var(--percent-full) + 1px),#1a1a1a 100%)}html.darkNight .resource.showBar.alt{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#000 calc(var(--percent-full) + 1px),#000 100%)}html.darkNight .resource .bar{cursor:pointer}html.darkNight .modal .actionSpace{background-color:#000}html.darkNight .modal-card-body,html.darkNight .modal-card-foot,html.darkNight .modal-card-head{background-color:#282f2f}html.darkNight .industry,html.darkNight .modalBox{background:#282f2f}html.darkNight .industry .divide,html.darkNight .industry .market-item,html.darkNight .industry .smelting,html.darkNight .modalBox .divide,html.darkNight .modalBox .market-item,html.darkNight .modalBox .smelting{border-top:#ccc solid .0625rem}html.darkNight .industry{background:0 0}html.darkNight .industry .header,html.darkNight .industry p,html.darkNight .modalBox p{border-bottom:#ccc solid .0625rem}html.darkNight .industry .avail span{margin:0 2.5rem 0 2.125rem}html.darkNight .govTask{margin-top:.25rem}html.darkNight .govTask .button{height:1.5rem;margin-left:.5rem}html.darkNight .fileImport{background-color:#000}html.darkNight .star1{fill:#000;stroke:#fff}html.darkNight .star2{fill:#fff}html.darkNight .star3{fill:#cd7f32}html.darkNight .star4{fill:silver}html.darkNight .star5{fill:#d4af37}html.darkNight .bldQueue::-webkit-scrollbar-track,html.darkNight .dropdown-content::-webkit-scrollbar-track,html.darkNight .hscroll::-webkit-scrollbar-track,html.darkNight .resTabs>.tabs::-webkit-scrollbar-track,html.darkNight .resTabs>section::-webkit-scrollbar-track,html.darkNight .sticky::-webkit-scrollbar-track,html.darkNight .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#1f2424}html.darkNight .bldQueue::-webkit-scrollbar,html.darkNight .dropdown-content::-webkit-scrollbar,html.darkNight .resTabs>.tabs::-webkit-scrollbar,html.darkNight .resTabs>section::-webkit-scrollbar,html.darkNight .sticky::-webkit-scrollbar,html.darkNight .vscroll::-webkit-scrollbar{width:6px;background-color:#1f2424}html.darkNight .hscroll::-webkit-scrollbar{height:8px;background-color:#1f2424}html.darkNight .bldQueue::-webkit-scrollbar-thumb,html.darkNight .dropdown-content::-webkit-scrollbar-thumb,html.darkNight .hscroll::-webkit-scrollbar-thumb,html.darkNight .resTabs>.tabs::-webkit-scrollbar-thumb,html.darkNight .resTabs>section::-webkit-scrollbar-thumb,html.darkNight .sticky::-webkit-scrollbar-thumb,html.darkNight .vscroll::-webkit-scrollbar-thumb{background-color:#727272}html.darkNight .bldQueue,html.darkNight .hscroll,html.darkNight .resTabs>.tabs,html.darkNight .resTabs>section,html.darkNight .sticky,html.darkNight .vscroll{scrollbar-color:#727272 #1f2424}html.darkNight .buttonList .is-selected,html.darkNight .modal .buttonList .is-selected{border-color:#00af0f}html.darkNight .has-text-warning{color:#d6b220}html.darkNight input,html.darkNight select,html.darkNight textarea{background:#b8b8b8}html.darkNight .popper .grad-from-left{background-image:linear-gradient(90deg,#f14668 45%,#b8b8b8 55%)}html.darkNight .popper .grad-from-left-warn{background-image:linear-gradient(90deg,#af5d00 45%,#f14668 55%)}html.darkNight .popper .grad-from-right{background-image:linear-gradient(90deg,#b8b8b8 45%,#f14668 55%)}html.gruvboxLight{background-color:#fbf1c7}html.gruvboxLight .main>div.popper .has-text-dark,html.gruvboxLight body,html.gruvboxLight body .modal>div.popper .has-text-dark,html.gruvboxLight h2,html.gruvboxLight h3{color:#3c3836}html.gruvboxLight a{color:#427b58}html.gruvboxLight .button.has-text-advanced,html.gruvboxLight .has-text-advanced{color:#458588}html.gruvboxLight .button.has-text-alert,html.gruvboxLight .has-text-alert{color:#af5d00}html.gruvboxLight .button.has-text-caution,html.gruvboxLight .has-text-caution{color:#af3a03}html.gruvboxLight .button.has-text-danger,html.gruvboxLight .has-text-danger{color:#9d0006}html.gruvboxLight .has-text-fade{color:#898b87}html.gruvboxLight .has-text-flair{color:#8f3f71}html.gruvboxLight .button.has-text-info,html.gruvboxLight .has-text-info,html.gruvboxLight .has-text-label{color:#076678}html.gruvboxLight .button.has-text-special,html.gruvboxLight .has-text-special{color:#8f3f71}html.gruvboxLight .button.has-text-success,html.gruvboxLight .has-text-success{color:#79740e}html.gruvboxLight .button.has-text-warning,html.gruvboxLight .has-text-warning{color:#b57614}html.gruvboxLight .has-text-danger-pulse{color:#b57614;-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.gruvboxLight .challenge .simButton{border-color:#79740e}html.gruvboxLight .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.gruvboxLight .challenge .configList>div{margin:0 .25rem;width:10rem}html.gruvboxLight .popper .has-text-label{color:#076678}html.gruvboxLight .popper .has-text-success{color:#79740e}html.gruvboxLight .modal-card-head p,html.gruvboxLight .popper .has-text-warning{color:#b57614}html.gruvboxLight .popper .divide-line{border-top:#3c3836 solid .0625rem}html.gruvboxLight .main>div.popper,html.gruvboxLight body .modal>div.popper{background-color:#fbf1c7;border:.0625rem solid #3c3836;color:#3c3836}html.gruvboxLight .main>div.popper>div,html.gruvboxLight body .modal>div.popper>div{border-top:solid .0625rem #3c3836}html.gruvboxLight .main>div.popper>div:first-child,html.gruvboxLight body .modal>div.popper>div:first-child{border-top:none}html.gruvboxLight .main>div.popper .split,html.gruvboxLight body .modal>div.popper .split{display:flex}html.gruvboxLight .main>div.popper .split>div,html.gruvboxLight body .modal>div.popper .split>div{flex-wrap:nowrap}html.gruvboxLight .main>div.popper .split>div:nth-of-type(2),html.gruvboxLight body .modal>div.popper .split>div:nth-of-type(2){border-left:solid .0625rem #3c3836;margin-left:.375rem;padding-left:.375rem}html.gruvboxLight .shipPopper .divider{border-bottom:solid .0625rem #3c3836}html.gruvboxLight .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.gruvboxLight .sliderbar .b-slider{display:inline-block;width:80%}html.gruvboxLight .sliderbar .b-slider .b-slider-track{height:1rem}html.gruvboxLight .sliderbar .is-primary .b-slider-fill{background:#79740e}html.gruvboxLight .sliderbar.thin>span{bottom:.625rem}html.gruvboxLight .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.gruvboxLight .msgQueueFilters span,html.gruvboxLight .tabs a{color:#3c3836}html.gruvboxLight .msgQueueFilters span.is-active,html.gruvboxLight .tabs li.is-active a{border-bottom-color:#427b58;color:#427b58}html.gruvboxLight .msgQueueFilters span:hover,html.gruvboxLight .tabs a:hover{border-bottom-color:#689d6a;color:#689d6a}html.gruvboxLight .button{background-color:#d5c4a1;color:#3c3836}html.gruvboxLight .button.is-light{background-color:#3c3836}html.gruvboxLight .button.is-hovered,html.gruvboxLight .button:hover{background-color:#d5c4a1;color:#689d6a}html.gruvboxLight .button.is-focused,html.gruvboxLight .button:focus{border-color:#3c3836}html.gruvboxLight .basic-button{border:#3c3836 solid .0625rem}html.gruvboxLight .basic-button:hover{border:#427b58 solid .0625rem;background-color:#f2e5bc}html.gruvboxLight .text-button:hover{cursor:pointer;color:#689d6a;text-decoration:underline}html.gruvboxLight .label{color:#3c3836}html.gruvboxLight .checkbox:hover,html.gruvboxLight .radio:hover{color:#427b58}html.gruvboxLight .dropdown-content{background-color:#d5c4a1}html.gruvboxLight .b-tooltip.is-right:before{border-right:5px solid #fbf1c7}html.gruvboxLight .b-tooltip.is-left:before{border-left:5px solid #fbf1c7}html.gruvboxLight .b-tooltip.is-bottom:before{border-bottom:5px solid #fbf1c7}html.gruvboxLight .b-tooltip.is-primary .tooltip-content{background:#fbf1c7;border:.0625rem solid #3c3836;color:#000}html.gruvboxLight .add,html.gruvboxLight .sub{border:#3c3836 solid .0625rem;transition:all 200ms ease}html.gruvboxLight .add:hover,html.gruvboxLight .sub:hover{background-color:#d5c4a1;color:#689d6a}html.gruvboxLight .current{border-top:#3c3836 solid .0625rem;border-bottom:#3c3836 solid .0625rem}html.gruvboxLight .current.infoOnly{border:#3c3836 solid .0625rem}html.gruvboxLight .main .content .enemyFortress,html.gruvboxLight .promoBar,html.gruvboxLight .topBar{background-color:#d5c4a1}html.gruvboxLight .pause,html.gruvboxLight .play{display:inline-block;position:relative;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s}html.gruvboxLight .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid #79740e;border-bottom:.25rem solid transparent}html.gruvboxLight .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid #9d0006;border-left:.125rem solid #9d0006}html.gruvboxLight .meter.low{color:#9d0006}html.gruvboxLight .meter.neutral{color:#af3a03}html.gruvboxLight .meter.high{color:#076678}html.gruvboxLight .buildList .hl-ca,html.gruvboxLight .main .content .action a.button.hl-ca .aTitle,html.gruvboxLight .modal .action a.button.hl-ca .aTitle{color:#79740e}html.gruvboxLight .buildList .hl-cna,html.gruvboxLight .main .content .action a.button.hl-cna .aTitle,html.gruvboxLight .modal .action a.button.hl-cna .aTitle{color:#9d0006}html.gruvboxLight .graphContainer span.special:hover .gear,html.gruvboxLight .msgQueue span.special:hover .gear{fill:#f09d51}html.gruvboxLight .main .content .action a.button span.count,html.gruvboxLight .main .content .divider h2,html.gruvboxLight .modal .action a.button span.count{background:#fbf1c7}html.gruvboxLight .main .content .action div.special,html.gruvboxLight .modal .action div.special{background:#fbf1c7;border:.0625rem solid #3c3836}html.gruvboxLight .graphContainer span.special .gear,html.gruvboxLight .main .content .action div.special .gear,html.gruvboxLight .modal .action div.special .gear,html.gruvboxLight .msgQueue span.special .gear{fill:#427b58}html.gruvboxLight .main .content .action div.special:hover,html.gruvboxLight .modal .action div.special:hover{border:.0625rem solid #d5c4a1}html.gruvboxLight .main .content .action div.special:hover .gear,html.gruvboxLight .modal .action div.special:hover .gear{fill:#f09d51}html.gruvboxLight .main .content .action span.on,html.gruvboxLight .modal .action span.on{background:#fbf1c7;border:.0625rem solid #3c3836;color:#79740e}html.gruvboxLight .main .content .action span.on.altwarn,html.gruvboxLight .main .content .action span.on.warn,html.gruvboxLight .modal .action span.on.altwarn,html.gruvboxLight .modal .action span.on.warn{color:#af5d00}html.gruvboxLight .main .content .action span.off,html.gruvboxLight .modal .action span.off{background:#fbf1c7;border:.0625rem solid #3c3836;color:#9d0006}html.gruvboxLight .main .content .action span.off:hover,html.gruvboxLight .main .content .action span.on:hover,html.gruvboxLight .modal .action span.off:hover,html.gruvboxLight .modal .action span.on:hover{border:.0625rem solid #d5c4a1}html.gruvboxLight .main .content .action.hl .button,html.gruvboxLight .modal .action.hl .button{border:solid 1px #79740e}html.gruvboxLight .main .content .action.cna a.button,html.gruvboxLight .modal .action.cna a.button{background:#a89984}html.gruvboxLight .main .content .action.cna a.button.hl-ca .aTitle,html.gruvboxLight .modal .action.cna a.button.hl-ca .aTitle{color:#79740e}html.gruvboxLight .main .content .action.cna .off,html.gruvboxLight .main .content .action.cna .on,html.gruvboxLight .main .content .action.cna .special,html.gruvboxLight .modal .action.cna .off,html.gruvboxLight .modal .action.cna .on,html.gruvboxLight .modal .action.cna .special{border-color:#3c3836}html.gruvboxLight .main .content .action.cna .oldTech span.aTitle,html.gruvboxLight .modal .action.cna .oldTech span.aTitle{color:#3c3836}html.gruvboxLight .main .content .action.cna a.button.hl-cna .aTitle,html.gruvboxLight .main .content .action.cnam span.aTitle,html.gruvboxLight .modal .action.cna a.button.hl-cna .aTitle,html.gruvboxLight .modal .action.cnam span.aTitle{color:#9d0006}html.gruvboxLight .main .content .green,html.gruvboxLight .main .content .synth{box-shadow:0 0 6px #79740e}html.gruvboxLight .main .content .green>span,html.gruvboxLight .main .content .synth>span{text-shadow:1px 1px #79740e}html.gruvboxLight .main .content .red{box-shadow:0 0 6px #9d0006}html.gruvboxLight .main .content .red>span{text-shadow:1px 1px #9d0006}html.gruvboxLight .main .content .yellow{box-shadow:0 0 6px #b57614}html.gruvboxLight .main .content .yellow>span{text-shadow:1px 1px #b57614}html.gruvboxLight .main .content .orange{box-shadow:0 0 6px #af3a03}html.gruvboxLight .main .content .orange>span{text-shadow:1px 1px #af3a03}html.gruvboxLight .main .content .purple{box-shadow:0 0 6px #8f3f71}html.gruvboxLight .main .content .purple>span{text-shadow:1px 1px #8f3f71}html.gruvboxLight .main .content .blue,html.gruvboxLight .main .content .precog{box-shadow:0 0 6px #076678}html.gruvboxLight .main .content .blue>span,html.gruvboxLight .main .content .precog>span{text-shadow:1px 1px #076678}html.gruvboxLight .main .content .cna .precog>span{text-shadow:none}html.gruvboxLight .main .garrison .header,html.gruvboxLight .main .government .header{border-bottom:.0625rem solid #3c3836}html.gruvboxLight .main .market-header{border-bottom:#3c3836 solid 1px}html.gruvboxLight .main .galaxyTrade{border-top:#3c3836 solid 1px}html.gruvboxLight .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.gruvboxLight .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.gruvboxLight .powerGrid .circuit.inactive{display:none}html.gruvboxLight .powerGrid .circuit>span{display:inline-block}html.gruvboxLight .powerGrid .circuit>span:first-child{width:1.5rem}html.gruvboxLight .powerGrid .circuit .struct{width:12rem}html.gruvboxLight .powerGrid .circuit .off,html.gruvboxLight .powerGrid .circuit .on{min-width:2rem;text-align:center}html.gruvboxLight .powerGrid .circuit .off{color:#9d0006}html.gruvboxLight .powerGrid .circuit .on{color:#79740e}html.gruvboxLight .gridHeader{border-top:#3c3836 solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.gruvboxLight .powerGridHead{display:flex;justify-content:space-between}html.gruvboxLight .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.gruvboxLight .resetPowerGrid{margin-left:1rem;margin-top:.75rem}html.gruvboxLight .resetPowerGrid .button{height:1.5rem}html.gruvboxLight .fort .patrol .check{background-color:#000}html.gruvboxLight .market-item .order{border:#3c3836 solid .0625rem;transition:all 200ms ease}html.gruvboxLight .market-item .order:hover{border:#689d6a solid .0625rem;background-color:#d5c4a1}html.gruvboxLight .inactive-row,html.gruvboxLight .market-item.alt,html.gruvboxLight .resource.alt{background-color:#f9f5d7}html.gruvboxLight .resource.showBar.prime{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#f6df80 calc(var(--percent-full) + 1px),#f6df80 100%)}html.gruvboxLight .resource.showBar.alt{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#efe494 calc(var(--percent-full) + 1px),#efe494 100%)}html.gruvboxLight .resource .bar{cursor:pointer}html.gruvboxLight .modal .actionSpace,html.gruvboxLight .modal-card-body,html.gruvboxLight .modal-card-foot,html.gruvboxLight .modal-card-head{background-color:#fbf1c7}html.gruvboxLight .industry,html.gruvboxLight .modalBox{background:#fbf1c7}html.gruvboxLight .industry .divide,html.gruvboxLight .industry .market-item,html.gruvboxLight .industry .smelting,html.gruvboxLight .modalBox .divide,html.gruvboxLight .modalBox .market-item,html.gruvboxLight .modalBox .smelting{border-top:#3c3836 solid .0625rem}html.gruvboxLight .industry{background:0 0}html.gruvboxLight .industry .header,html.gruvboxLight .industry p,html.gruvboxLight .modalBox p{border-bottom:#3c3836 solid .0625rem}html.gruvboxLight .industry .avail span{margin:0 2.5rem 0 2.125rem}html.gruvboxLight .govTask{margin-top:.25rem}html.gruvboxLight .govTask .button{height:1.5rem;margin-left:.5rem}html.gruvboxLight .fileImport{background-color:#fbf1c7}html.gruvboxLight .star1{fill:#fbf1c7;stroke:#fff}html.gruvboxLight .star2{fill:#fff}html.gruvboxLight .star3{fill:#cd7f32}html.gruvboxLight .star4{fill:silver}html.gruvboxLight .star5{fill:#d4af37}html.gruvboxDark .refresh svg,html.gruvboxDarkRG .refresh svg,html.gruvboxLight .refresh svg{fill:#458588}html.gruvboxLight .bldQueue::-webkit-scrollbar-track,html.gruvboxLight .dropdown-content::-webkit-scrollbar-track,html.gruvboxLight .hscroll::-webkit-scrollbar-track,html.gruvboxLight .resTabs>.tabs::-webkit-scrollbar-track,html.gruvboxLight .resTabs>section::-webkit-scrollbar-track,html.gruvboxLight .sticky::-webkit-scrollbar-track,html.gruvboxLight .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#fbf1c7}html.gruvboxLight .bldQueue::-webkit-scrollbar,html.gruvboxLight .dropdown-content::-webkit-scrollbar,html.gruvboxLight .resTabs>.tabs::-webkit-scrollbar,html.gruvboxLight .resTabs>section::-webkit-scrollbar,html.gruvboxLight .sticky::-webkit-scrollbar,html.gruvboxLight .vscroll::-webkit-scrollbar{width:6px;background-color:#fbf1c7}html.gruvboxLight .hscroll::-webkit-scrollbar{height:8px;background-color:#fbf1c7}html.gruvboxLight .bldQueue::-webkit-scrollbar-thumb,html.gruvboxLight .dropdown-content::-webkit-scrollbar-thumb,html.gruvboxLight .hscroll::-webkit-scrollbar-thumb,html.gruvboxLight .resTabs>.tabs::-webkit-scrollbar-thumb,html.gruvboxLight .resTabs>section::-webkit-scrollbar-thumb,html.gruvboxLight .sticky::-webkit-scrollbar-thumb,html.gruvboxLight .vscroll::-webkit-scrollbar-thumb{background-color:#3c3836}html.gruvboxLight .bldQueue,html.gruvboxLight .hscroll,html.gruvboxLight .resTabs>.tabs,html.gruvboxLight .resTabs>section,html.gruvboxLight .sticky,html.gruvboxLight .vscroll{scrollbar-color:#3c3836 #fbf1c7}html.gruvboxLight .buttonList .is-selected,html.gruvboxLight .modal .buttonList .is-selected{border-color:#79740e}html.gruvboxLight .notification,html.gruvboxLight input,html.gruvboxLight select,html.gruvboxLight textarea{background:#d5c4a1}html.gruvboxLight .popper .grad-from-left{background-image:linear-gradient(90deg,#9d0006 45%,#3c3836 55%)}html.gruvboxLight .popper .grad-from-left-warn{background-image:linear-gradient(90deg,#af5d00 45%,#9d0006 55%)}html.gruvboxLight .popper .grad-from-right{background-image:linear-gradient(90deg,#3c3836 45%,#9d0006 55%)}html.gruvboxDark{background-color:#282828}html.gruvboxDark .main>div.popper .has-text-dark,html.gruvboxDark body,html.gruvboxDark body .modal>div.popper .has-text-dark,html.gruvboxDark h2,html.gruvboxDark h3{color:#ebdbb2}html.gruvboxDark a{color:#8ec07c}html.gruvboxDark .button.has-text-advanced,html.gruvboxDark .has-text-advanced{color:#458588}html.gruvboxDark .button.has-text-alert,html.gruvboxDark .has-text-alert{color:#af5d00}html.gruvboxDark .button.has-text-caution,html.gruvboxDark .has-text-caution{color:#fe8019}html.gruvboxDark .button.has-text-danger,html.gruvboxDark .has-text-danger{color:#fb4934}html.gruvboxDark .has-text-fade{color:#898b87}html.gruvboxDark .has-text-flair{color:#d3869b}html.gruvboxDark .button.has-text-info,html.gruvboxDark .has-text-info{color:#83a598}html.gruvboxDark .has-text-label{color:#458588}html.gruvboxDark .button.has-text-special,html.gruvboxDark .has-text-special{color:#d3869b}html.gruvboxDark .button.has-text-success,html.gruvboxDark .has-text-success{color:#b8bb26}html.gruvboxDark .button.has-text-warning,html.gruvboxDark .has-text-warning{color:#fabd2f}html.gruvboxDark .has-text-danger-pulse{color:#fabd2f;-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.gruvboxDark .challenge .simButton{border-color:#b8bb26}html.gruvboxDark .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.gruvboxDark .challenge .configList>div{margin:0 .25rem;width:10rem}html.gruvboxDark .popper .has-text-label{color:#458588}html.gruvboxDark .popper .has-text-success{color:#b8bb26}html.gruvboxDark .modal-card-head p,html.gruvboxDark .popper .has-text-warning{color:#fabd2f}html.gruvboxDark .popper .divide-line{border-top:#665c54 solid .0625rem}html.gruvboxDark .main>div.popper,html.gruvboxDark body .modal>div.popper{background-color:#282828;border:.0625rem solid #665c54;color:#ebdbb2}html.gruvboxDark .main>div.popper>div,html.gruvboxDark body .modal>div.popper>div{border-top:solid .0625rem #665c54}html.gruvboxDark .main>div.popper>div:first-child,html.gruvboxDark body .modal>div.popper>div:first-child{border-top:none}html.gruvboxDark .main>div.popper .split,html.gruvboxDark body .modal>div.popper .split{display:flex}html.gruvboxDark .main>div.popper .split>div,html.gruvboxDark body .modal>div.popper .split>div{flex-wrap:nowrap}html.gruvboxDark .main>div.popper .split>div:nth-of-type(2),html.gruvboxDark body .modal>div.popper .split>div:nth-of-type(2),html.gruvboxDarkRG .main>div.popper .split>div:nth-of-type(2),html.gruvboxDarkRG body .modal>div.popper .split>div:nth-of-type(2){border-left:solid .0625rem #665c54;margin-left:.375rem;padding-left:.375rem}html.gruvboxDark .shipPopper .divider{border-bottom:solid .0625rem #665c54}html.gruvboxDark .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.gruvboxDark .sliderbar .b-slider{display:inline-block;width:80%}html.gruvboxDark .sliderbar .b-slider .b-slider-track{height:1rem}html.gruvboxDark .sliderbar .is-primary .b-slider-fill{background:#b8bb26}html.gruvboxDark .sliderbar.thin>span{bottom:.625rem}html.gruvboxDark .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.gruvboxDark .msgQueueFilters span,html.gruvboxDark .tabs a{color:#ebdbb2}html.gruvboxDark .msgQueueFilters span.is-active,html.gruvboxDark .tabs li.is-active a{border-bottom-color:#8ec07c;color:#8ec07c}html.gruvboxDark .msgQueueFilters span:hover,html.gruvboxDark .tabs a:hover{border-bottom-color:#689d6a;color:#689d6a}html.gruvboxDark .button{background-color:#3c3836;color:#ebdbb2}html.gruvboxDark .button.is-light{background-color:#ebdbb2}html.gruvboxDark .button.is-hovered,html.gruvboxDark .button:hover{background-color:#504945;color:#689d6a}html.gruvboxDark .button.is-focused,html.gruvboxDark .button:focus{border-color:#665c54}html.gruvboxDark .basic-button{border:#3c3836 solid .0625rem}html.gruvboxDark .basic-button:hover{border:#8ec07c solid .0625rem;background-color:#1d2021}html.gruvboxDark .text-button:hover{cursor:pointer;color:#689d6a;text-decoration:underline}html.gruvboxDark .label{color:#ebdbb2}html.gruvboxDark .checkbox:hover,html.gruvboxDark .radio:hover,html.gruvboxDarkRG a{color:#8ec07c}html.gruvboxDark .dropdown-content{background-color:#3c3836}html.gruvboxDark .b-tooltip.is-right:before{border-right:5px solid #282828}html.gruvboxDark .b-tooltip.is-left:before{border-left:5px solid #282828}html.gruvboxDark .b-tooltip.is-bottom:before{border-bottom:5px solid #282828}html.gruvboxDark .b-tooltip.is-primary .tooltip-content{background:#282828;border:.0625rem solid #3c3836;color:#ebdbb2}html.gruvboxDark .add,html.gruvboxDark .sub{transition:all 200ms ease}html.gruvboxDark .add:hover,html.gruvboxDark .sub:hover{background-color:#504945;color:#689d6a}html.gruvboxDark .promoBar,html.gruvboxDark .topBar{background-color:#504945}html.gruvboxDark .pause,html.gruvboxDark .play{display:inline-block;position:relative;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s}html.gruvboxDark .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid #b8bb26;border-bottom:.25rem solid transparent}html.gruvboxDark .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid #fb4934;border-left:.125rem solid #fb4934}html.gruvboxDark .meter.low{color:#fb4934}html.gruvboxDark .meter.neutral{color:#fe8019}html.gruvboxDark .meter.high{color:#83a598}html.gruvboxDark .buildList .hl-ca,html.gruvboxDark .main .content .action a.button.hl-ca .aTitle,html.gruvboxDark .modal .action a.button.hl-ca .aTitle{color:#b8bb26}html.gruvboxDark .buildList .hl-cna,html.gruvboxDark .main .content .action a.button.hl-cna .aTitle,html.gruvboxDark .modal .action a.button.hl-cna .aTitle{color:#fb4934}html.gruvboxDark .graphContainer span.special:hover .gear,html.gruvboxDark .msgQueue span.special:hover .gear{fill:#8ec07c}html.gruvboxDark .main .content .action a.button span.count,html.gruvboxDark .main .content .divider h2,html.gruvboxDark .modal .action a.button span.count{background:#282828}html.gruvboxDark .main .content .action div.special,html.gruvboxDark .modal .action div.special{background:#282828;border:.0625rem solid #3c3836}html.gruvboxDark .graphContainer span.special .gear,html.gruvboxDark .main .content .action div.special .gear,html.gruvboxDark .modal .action div.special .gear,html.gruvboxDark .msgQueue span.special .gear{fill:#f09d51}html.gruvboxDark .main .content .action div.special:hover,html.gruvboxDark .modal .action div.special:hover{border:.0625rem solid #504945}html.gruvboxDark .main .content .action div.special:hover .gear,html.gruvboxDark .modal .action div.special:hover .gear{fill:#8ec07c}html.gruvboxDark .main .content .action span.on,html.gruvboxDark .modal .action span.on{background:#282828;border:.0625rem solid #3c3836;color:#b8bb26}html.gruvboxDark .main .content .action span.on.altwarn,html.gruvboxDark .main .content .action span.on.warn,html.gruvboxDark .modal .action span.on.altwarn,html.gruvboxDark .modal .action span.on.warn{color:#af5d00}html.gruvboxDark .main .content .action span.off,html.gruvboxDark .modal .action span.off{background:#282828;border:.0625rem solid #3c3836;color:#fb4934}html.gruvboxDark .main .content .action span.off:hover,html.gruvboxDark .main .content .action span.on:hover,html.gruvboxDark .modal .action span.off:hover,html.gruvboxDark .modal .action span.on:hover{border:.0625rem solid #504945}html.gruvboxDark .main .content .action.hl .button,html.gruvboxDark .modal .action.hl .button{border:solid 1px #b8bb26}html.gruvboxDark .main .content .action.cna a.button,html.gruvboxDark .modal .action.cna a.button,html.gruvboxDarkRG .main .content .action.cna a.button,html.gruvboxDarkRG .modal .action.cna a.button{background:#1d2021}html.gruvboxDark .main .content .action.cna a.button.hl-ca .aTitle,html.gruvboxDark .modal .action.cna a.button.hl-ca .aTitle{color:#b8bb26}html.gruvboxDark .main .content .action.cna .off,html.gruvboxDark .main .content .action.cna .on,html.gruvboxDark .main .content .action.cna .special,html.gruvboxDark .modal .action.cna .off,html.gruvboxDark .modal .action.cna .on,html.gruvboxDark .modal .action.cna .special{border-color:#3c3836}html.gruvboxDark .main .content .action.cna .oldTech span.aTitle,html.gruvboxDark .modal .action.cna .oldTech span.aTitle,html.gruvboxDarkRG .main>div.popper .has-text-dark,html.gruvboxDarkRG body,html.gruvboxDarkRG body .modal>div.popper .has-text-dark,html.gruvboxDarkRG h2,html.gruvboxDarkRG h3{color:#ebdbb2}html.gruvboxDark .main .content .action.cna a.button.hl-cna .aTitle,html.gruvboxDark .main .content .action.cnam span.aTitle,html.gruvboxDark .modal .action.cna a.button.hl-cna .aTitle,html.gruvboxDark .modal .action.cnam span.aTitle{color:#fb4934}html.gruvboxDark .main .content .enemyFortress{background-color:#3c3836}html.gruvboxDark .main .content .green,html.gruvboxDark .main .content .synth{box-shadow:0 0 6px #b8bb26}html.gruvboxDark .main .content .green>span,html.gruvboxDark .main .content .synth>span{text-shadow:1px 1px #b8bb26}html.gruvboxDark .main .content .red{box-shadow:0 0 6px #fb4934}html.gruvboxDark .main .content .red>span{text-shadow:1px 1px #fb4934}html.gruvboxDark .main .content .yellow{box-shadow:0 0 6px #fabd2f}html.gruvboxDark .main .content .yellow>span{text-shadow:1px 1px #fabd2f}html.gruvboxDark .main .content .orange{box-shadow:0 0 6px #fe8019}html.gruvboxDark .main .content .orange>span{text-shadow:1px 1px #fe8019}html.gruvboxDark .main .content .purple{box-shadow:0 0 6px #d3869b}html.gruvboxDark .main .content .purple>span{text-shadow:1px 1px #d3869b}html.gruvboxDark .main .content .blue,html.gruvboxDark .main .content .precog{box-shadow:0 0 6px #83a598}html.gruvboxDark .main .content .blue>span,html.gruvboxDark .main .content .precog>span{text-shadow:1px 1px #83a598}html.gruvboxDark .main .content .cna .precog>span{text-shadow:none}html.gruvboxDark .main .garrison .header,html.gruvboxDark .main .government .header{border-bottom:.0625rem solid #665c54}html.gruvboxDark .main .market-header{border-bottom:#665c54 solid 1px}html.gruvboxDark .main .galaxyTrade{border-top:#665c54 solid 1px}html.gruvboxDark .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.gruvboxDark .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.gruvboxDark .powerGrid .circuit.inactive{display:none}html.gruvboxDark .powerGrid .circuit>span{display:inline-block}html.gruvboxDark .powerGrid .circuit>span:first-child{width:1.5rem}html.gruvboxDark .powerGrid .circuit .struct{width:12rem}html.gruvboxDark .powerGrid .circuit .off,html.gruvboxDark .powerGrid .circuit .on{min-width:2rem;text-align:center}html.gruvboxDark .powerGrid .circuit .off{color:#fb4934}html.gruvboxDark .powerGrid .circuit .on{color:#b8bb26}html.gruvboxDark .gridHeader{border-top:#665c54 solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.gruvboxDark .powerGridHead{display:flex;justify-content:space-between}html.gruvboxDark .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.gruvboxDark .resetPowerGrid{margin-left:1rem;margin-top:.75rem}html.gruvboxDark .resetPowerGrid .button{height:1.5rem}html.gruvboxDark .fort .patrol .check{background-color:#000}html.gruvboxDark .market-item .order{border:#3c3836 solid .0625rem;transition:all 200ms ease}html.gruvboxDark .market-item .order:hover{border:#689d6a solid .0625rem;background-color:#504945}html.gruvboxDark .inactive-row,html.gruvboxDark .market-item.alt,html.gruvboxDark .resource.alt{background-color:#1d2021}html.gruvboxDark .resource.showBar.prime{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#020202 calc(var(--percent-full) + 1px),#020202 100%)}html.gruvboxDark .resource.showBar.alt{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#000 calc(var(--percent-full) + 1px),#000 100%)}html.gruvboxDark .resource .bar{cursor:pointer}html.gruvboxDark .modal .actionSpace,html.gruvboxDark .modal-card-body,html.gruvboxDark .modal-card-foot,html.gruvboxDark .modal-card-head{background-color:#282828}html.gruvboxDark .industry,html.gruvboxDark .modalBox,html.gruvboxDarkRG .main .content .action a.button span.count,html.gruvboxDarkRG .main .content .divider h2,html.gruvboxDarkRG .modal .action a.button span.count{background:#282828}html.gruvboxDark .industry .divide,html.gruvboxDark .industry .market-item,html.gruvboxDark .industry .smelting,html.gruvboxDark .modalBox .divide,html.gruvboxDark .modalBox .market-item,html.gruvboxDark .modalBox .smelting{border-top:#665c54 solid .0625rem}html.gruvboxDark .industry{background:0 0}html.gruvboxDark .industry .header,html.gruvboxDark .industry p,html.gruvboxDark .modalBox p{border-bottom:#665c54 solid .0625rem}html.gruvboxDark .industry .avail span{margin:0 2.5rem 0 2.125rem}html.gruvboxDark .govTask{margin-top:.25rem}html.gruvboxDark .govTask .button{height:1.5rem;margin-left:.5rem}html.gruvboxDark .fileImport,html.gruvboxDarkRG{background-color:#282828}html.gruvboxDark .star1{fill:#282828;stroke:#3c3836}html.gruvboxDark .star1 path,html.gruvboxDarkRG .star1 path{stroke:#3c3836}html.gruvboxDark .star2{fill:#3c3836}html.gruvboxDark .star3{fill:#cd7f32}html.gruvboxDark .star4{fill:silver}html.gruvboxDark .star5{fill:#d4af37}html.gruvboxDark .bldQueue::-webkit-scrollbar-track,html.gruvboxDark .dropdown-content::-webkit-scrollbar-track,html.gruvboxDark .hscroll::-webkit-scrollbar-track,html.gruvboxDark .resTabs>.tabs::-webkit-scrollbar-track,html.gruvboxDark .resTabs>section::-webkit-scrollbar-track,html.gruvboxDark .sticky::-webkit-scrollbar-track,html.gruvboxDark .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#282828}html.gruvboxDark .bldQueue::-webkit-scrollbar,html.gruvboxDark .dropdown-content::-webkit-scrollbar,html.gruvboxDark .resTabs>.tabs::-webkit-scrollbar,html.gruvboxDark .resTabs>section::-webkit-scrollbar,html.gruvboxDark .sticky::-webkit-scrollbar,html.gruvboxDark .vscroll::-webkit-scrollbar{width:6px;background-color:#282828}html.gruvboxDark .hscroll::-webkit-scrollbar{height:8px;background-color:#282828}html.gruvboxDark .bldQueue::-webkit-scrollbar-thumb,html.gruvboxDark .dropdown-content::-webkit-scrollbar-thumb,html.gruvboxDark .hscroll::-webkit-scrollbar-thumb,html.gruvboxDark .resTabs>.tabs::-webkit-scrollbar-thumb,html.gruvboxDark .resTabs>section::-webkit-scrollbar-thumb,html.gruvboxDark .sticky::-webkit-scrollbar-thumb,html.gruvboxDark .vscroll::-webkit-scrollbar-thumb{background-color:#3c3836}html.gruvboxDark .bldQueue,html.gruvboxDark .hscroll,html.gruvboxDark .resTabs>.tabs,html.gruvboxDark .resTabs>section,html.gruvboxDark .sticky,html.gruvboxDark .vscroll{scrollbar-color:#3c3836 #282828}html.gruvboxDark .buttonList .is-selected,html.gruvboxDark .modal .buttonList .is-selected{border-color:#b8bb26}html.gruvboxDark .notification,html.gruvboxDark input,html.gruvboxDark select,html.gruvboxDark textarea{background:#ebdbb2}html.gruvboxDark .add,html.gruvboxDark .current.infoOnly,html.gruvboxDark .sub{border:#665c54 solid .0625rem}html.gruvboxDark .current{border-top:#665c54 solid .0625rem;border-bottom:#665c54 solid .0625rem}html.gruvboxDark .popper .grad-from-left{background-image:linear-gradient(90deg,#fb4934 45%,#ebdbb2 55%)}html.gruvboxDark .popper .grad-from-left-warn{background-image:linear-gradient(90deg,#af5d00 45%,#fb4934 55%)}html.gruvboxDark .popper .grad-from-right{background-image:linear-gradient(90deg,#ebdbb2 45%,#fb4934 55%)}html.gruvboxDarkRG .switch input[type=checkbox]:checked+.check{background:#a28cdf}html.gruvboxDarkRG .button.has-text-advanced,html.gruvboxDarkRG .has-text-advanced{color:#458588}html.gruvboxDarkRG .button.has-text-alert,html.gruvboxDarkRG .has-text-alert{color:#af5d00}html.gruvboxDarkRG .button.has-text-caution,html.gruvboxDarkRG .has-text-caution{color:#9ab8ff}html.gruvboxDarkRG .button.has-text-danger,html.gruvboxDarkRG .has-text-danger{color:#c409bb}html.gruvboxDarkRG .has-text-fade{color:#898b87}html.gruvboxDarkRG .has-text-flair{color:#0f0}html.gruvboxDarkRG .button.has-text-info,html.gruvboxDarkRG .has-text-info{color:#83a598}html.gruvboxDarkRG .has-text-label{color:#458588}html.gruvboxDarkRG .button.has-text-special,html.gruvboxDarkRG .has-text-special{color:#ffff9e}html.gruvboxDarkRG .button.has-text-success,html.gruvboxDarkRG .has-text-success{color:#0f0}html.gruvboxDarkRG .button.has-text-warning,html.gruvboxDarkRG .has-text-warning,html.gruvboxDarkRG .modal-card-head p{color:#fc0}html.gruvboxDarkRG .has-text-danger-pulse{color:#fc0;-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.gruvboxDarkRG .challenge .simButton{border-color:#0f0}html.gruvboxDarkRG .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.gruvboxDarkRG .challenge .configList>div{margin:0 .25rem;width:10rem}html.gruvboxDarkRG .popper .has-text-label{color:#458588}html.gruvboxDarkRG .popper .has-text-success{color:#b8bb26}html.gruvboxDarkRG .popper .has-text-warning{color:#fabd2f}html.gruvboxDarkRG .popper .divide-line{border-top:#665c54 solid .0625rem}html.gruvboxDarkRG .main>div.popper,html.gruvboxDarkRG body .modal>div.popper{background-color:#282828;border:.0625rem solid #665c54;color:#ebdbb2}html.gruvboxDarkRG .main>div.popper>div,html.gruvboxDarkRG body .modal>div.popper>div{border-top:solid .0625rem #665c54}html.gruvboxDarkRG .main>div.popper>div:first-child,html.gruvboxDarkRG body .modal>div.popper>div:first-child{border-top:none}html.gruvboxDarkRG .main>div.popper .split,html.gruvboxDarkRG body .modal>div.popper .split{display:flex}html.gruvboxDarkRG .main>div.popper .split>div,html.gruvboxDarkRG body .modal>div.popper .split>div{flex-wrap:nowrap}html.gruvboxDarkRG .shipPopper .divider{border-bottom:solid .0625rem #665c54}html.gruvboxDarkRG .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.gruvboxDarkRG .sliderbar .b-slider{display:inline-block;width:80%}html.gruvboxDarkRG .sliderbar .b-slider .b-slider-track{height:1rem}html.gruvboxDarkRG .sliderbar .is-primary .b-slider-fill{background:#0f0}html.gruvboxDarkRG .sliderbar.thin>span{bottom:.625rem}html.gruvboxDarkRG .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.gruvboxDarkRG .msgQueueFilters span,html.gruvboxDarkRG .tabs a{color:#ebdbb2}html.gruvboxDarkRG .msgQueueFilters span.is-active,html.gruvboxDarkRG .tabs li.is-active a{border-bottom-color:#8ec07c;color:#82bdff}html.gruvboxDarkRG .msgQueueFilters span:hover,html.gruvboxDarkRG .tabs a:hover{border-bottom-color:#689d6a;color:#689d6a}html.gruvboxDarkRG .button{background-color:#3c3836;color:#ebdbb2}html.gruvboxDarkRG .button.is-light{background-color:#ebdbb2}html.gruvboxDarkRG .button.is-hovered,html.gruvboxDarkRG .button:hover{background-color:#504945;color:#689d6a}html.gruvboxDarkRG .button.is-focused,html.gruvboxDarkRG .button:focus{border-color:#665c54}html.gruvboxDarkRG .basic-button{border:#3c3836 solid .0625rem}html.gruvboxDarkRG .basic-button:hover{border:#8ec07c solid .0625rem;background-color:#1d2021}html.gruvboxDarkRG .text-button:hover{cursor:pointer;color:#689d6a;text-decoration:underline}html.gruvboxDarkRG .label{color:#ebdbb2}html.gruvboxDarkRG .checkbox:hover,html.gruvboxDarkRG .radio:hover{color:#8ec07c}html.gruvboxDarkRG .dropdown-content{background-color:#3c3836}html.gruvboxDarkRG .b-tooltip.is-right:before{border-right:5px solid #282828}html.gruvboxDarkRG .b-tooltip.is-left:before{border-left:5px solid #282828}html.gruvboxDarkRG .b-tooltip.is-bottom:before{border-bottom:5px solid #282828}html.gruvboxDarkRG .b-tooltip.is-primary .tooltip-content{background:#282828;border:.0625rem solid #3c3836;color:#ebdbb2}html.gruvboxDarkRG .add,html.gruvboxDarkRG .sub{transition:all 200ms ease}html.gruvboxDarkRG .add:hover,html.gruvboxDarkRG .sub:hover{background-color:#504945;color:#689d6a}html.gruvboxDarkRG .promoBar,html.gruvboxDarkRG .topBar{background-color:#504945}html.gruvboxDarkRG .pause,html.gruvboxDarkRG .play{display:inline-block;position:relative;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s}html.gruvboxDarkRG .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid #0f0;border-bottom:.25rem solid transparent}html.gruvboxDarkRG .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid #c409bb;border-left:.125rem solid #c409bb}html.gruvboxDarkRG .meter.low{color:#ffe940}html.gruvboxDarkRG .meter.neutral{color:#9ab8ff}html.gruvboxDarkRG .meter.high{color:#83a598}html.gruvboxDarkRG .buildList .hl-ca,html.gruvboxDarkRG .main .content .action a.button.hl-ca .aTitle,html.gruvboxDarkRG .modal .action a.button.hl-ca .aTitle{color:#b8bb26}html.gruvboxDarkRG .buildList .hl-cna,html.gruvboxDarkRG .main .content .action a.button.hl-cna .aTitle,html.gruvboxDarkRG .modal .action a.button.hl-cna .aTitle{color:#ffe940}html.gruvboxDarkRG .graphContainer span.special:hover .gear,html.gruvboxDarkRG .msgQueue span.special:hover .gear{fill:#8ec07c}html.gruvboxDarkRG .main .content .action div.special,html.gruvboxDarkRG .modal .action div.special{background:#282828;border:.0625rem solid #3c3836}html.gruvboxDarkRG .graphContainer span.special .gear,html.gruvboxDarkRG .main .content .action div.special .gear,html.gruvboxDarkRG .modal .action div.special .gear,html.gruvboxDarkRG .msgQueue span.special .gear,html.orangeSoda .graphContainer span.special:hover .gear,html.orangeSoda .msgQueue span.special:hover .gear{fill:#f09d51}html.gruvboxDarkRG .main .content .action div.special:hover,html.gruvboxDarkRG .modal .action div.special:hover{border:.0625rem solid #504945}html.gruvboxDarkRG .main .content .action div.special:hover .gear,html.gruvboxDarkRG .modal .action div.special:hover .gear{fill:#8ec07c}html.gruvboxDarkRG .main .content .action span.on,html.gruvboxDarkRG .modal .action span.on{background:#282828;border:.0625rem solid #3c3836;color:#0f0}html.gruvboxDarkRG .main .content .action span.on.altwarn,html.gruvboxDarkRG .main .content .action span.on.warn,html.gruvboxDarkRG .modal .action span.on.altwarn,html.gruvboxDarkRG .modal .action span.on.warn{color:#af5d00}html.gruvboxDarkRG .main .content .action span.off,html.gruvboxDarkRG .modal .action span.off{background:#282828;border:.0625rem solid #3c3836;color:#c409bb}html.gruvboxDarkRG .main .content .action span.off:hover,html.gruvboxDarkRG .main .content .action span.on:hover,html.gruvboxDarkRG .modal .action span.off:hover,html.gruvboxDarkRG .modal .action span.on:hover{border:.0625rem solid #504945}html.gruvboxDarkRG .main .content .action.hl .button,html.gruvboxDarkRG .modal .action.hl .button{border:solid 1px #b8bb26}html.gruvboxDarkRG .main .content .action.cna a.button.hl-ca .aTitle,html.gruvboxDarkRG .modal .action.cna a.button.hl-ca .aTitle{color:#b8bb26}html.gruvboxDarkRG .main .content .action.cna .off,html.gruvboxDarkRG .main .content .action.cna .on,html.gruvboxDarkRG .main .content .action.cna .special,html.gruvboxDarkRG .modal .action.cna .off,html.gruvboxDarkRG .modal .action.cna .on,html.gruvboxDarkRG .modal .action.cna .special{border-color:#3c3836}html.gruvboxDarkRG .main .content .action.cna .oldTech span.aTitle,html.gruvboxDarkRG .modal .action.cna .oldTech span.aTitle,html.orangeSoda .main>div.popper .has-text-dark,html.orangeSoda body,html.orangeSoda body .modal>div.popper .has-text-dark,html.orangeSoda h2,html.orangeSoda h3{color:#ebdbb2}html.gruvboxDarkRG .main .content .action.cna a.button.hl-cna .aTitle,html.gruvboxDarkRG .main .content .action.cnam span.aTitle,html.gruvboxDarkRG .modal .action.cna a.button.hl-cna .aTitle,html.gruvboxDarkRG .modal .action.cnam span.aTitle{color:#ffe940}html.gruvboxDarkRG .main .content .enemyFortress{background-color:#3c3836}html.gruvboxDarkRG .main .content .green,html.gruvboxDarkRG .main .content .synth{box-shadow:0 0 6px #0f0}html.gruvboxDarkRG .main .content .green>span,html.gruvboxDarkRG .main .content .synth>span{text-shadow:1px 1px #0f0}html.gruvboxDarkRG .main .content .red{box-shadow:0 0 6px #c409bb}html.gruvboxDarkRG .main .content .red>span{text-shadow:1px 1px #c409bb}html.gruvboxDarkRG .main .content .yellow{box-shadow:0 0 6px #fc0}html.gruvboxDarkRG .main .content .yellow>span{text-shadow:1px 1px #fc0}html.gruvboxDarkRG .main .content .orange{box-shadow:0 0 6px #9ab8ff}html.gruvboxDarkRG .main .content .orange>span{text-shadow:1px 1px #9ab8ff}html.gruvboxDarkRG .main .content .purple{box-shadow:0 0 6px #ffff9e}html.gruvboxDarkRG .main .content .purple>span{text-shadow:1px 1px #ffff9e}html.gruvboxDarkRG .main .content .blue,html.gruvboxDarkRG .main .content .precog{box-shadow:0 0 6px #83a598}html.gruvboxDarkRG .main .content .blue>span,html.gruvboxDarkRG .main .content .precog>span{text-shadow:1px 1px #83a598}html.gruvboxDarkRG .main .content .cna .precog>span{text-shadow:none}html.gruvboxDarkRG .main .garrison .header,html.gruvboxDarkRG .main .government .header{border-bottom:.0625rem solid #665c54}html.gruvboxDarkRG .main .market-header{border-bottom:#665c54 solid 1px}html.gruvboxDarkRG .main .galaxyTrade{border-top:#665c54 solid 1px}html.gruvboxDarkRG .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.gruvboxDarkRG .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.gruvboxDarkRG .powerGrid .circuit.inactive{display:none}html.gruvboxDarkRG .powerGrid .circuit>span{display:inline-block}html.gruvboxDarkRG .powerGrid .circuit>span:first-child{width:1.5rem}html.gruvboxDarkRG .powerGrid .circuit .struct{width:12rem}html.gruvboxDarkRG .powerGrid .circuit .off,html.gruvboxDarkRG .powerGrid .circuit .on{min-width:2rem;text-align:center}html.gruvboxDarkRG .powerGrid .circuit .off{color:#c409bb}html.gruvboxDarkRG .powerGrid .circuit .on{color:#0f0}html.gruvboxDarkRG .gridHeader{border-top:#665c54 solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.gruvboxDarkRG .powerGridHead{display:flex;justify-content:space-between}html.gruvboxDarkRG .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.gruvboxDarkRG .resetPowerGrid{margin-left:1rem;margin-top:.75rem}html.gruvboxDarkRG .resetPowerGrid .button{height:1.5rem}html.gruvboxDarkRG .fort .patrol .check{background-color:#000}html.gruvboxDarkRG .market-item .order{border:#3c3836 solid .0625rem;transition:all 200ms ease}html.gruvboxDarkRG .market-item .order:hover{border:#689d6a solid .0625rem;background-color:#504945}html.gruvboxDarkRG .inactive-row,html.gruvboxDarkRG .market-item.alt,html.gruvboxDarkRG .resource.alt{background-color:#1d2021}html.gruvboxDarkRG .resource.showBar.prime{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#020202 calc(var(--percent-full) + 1px),#020202 100%)}html.gruvboxDarkRG .resource.showBar.alt{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#000 calc(var(--percent-full) + 1px),#000 100%)}html.gruvboxDarkRG .resource .bar{cursor:pointer}html.gruvboxDarkRG .modal .actionSpace,html.gruvboxDarkRG .modal-card-body,html.gruvboxDarkRG .modal-card-foot,html.gruvboxDarkRG .modal-card-head{background-color:#282828}html.gruvboxDarkRG .industry,html.gruvboxDarkRG .modalBox{background:#282828}html.gruvboxDarkRG .industry .divide,html.gruvboxDarkRG .industry .market-item,html.gruvboxDarkRG .industry .smelting,html.gruvboxDarkRG .modalBox .divide,html.gruvboxDarkRG .modalBox .market-item,html.gruvboxDarkRG .modalBox .smelting{border-top:#665c54 solid .0625rem}html.gruvboxDarkRG .industry{background:0 0}html.gruvboxDarkRG .industry .header,html.gruvboxDarkRG .industry p,html.gruvboxDarkRG .modalBox p{border-bottom:#665c54 solid .0625rem}html.gruvboxDarkRG .industry .avail span{margin:0 2.5rem 0 2.125rem}html.gruvboxDarkRG .govTask{margin-top:.25rem}html.gruvboxDarkRG .govTask .button{height:1.5rem;margin-left:.5rem}html.gruvboxDarkRG .fileImport{background-color:#282828}html.gruvboxDarkRG .star1{fill:#282828;stroke:#3c3836}html.gruvboxDarkRG .star2{fill:#3c3836}html.gruvboxDarkRG .star3{fill:#cd7f32}html.gruvboxDarkRG .star4{fill:silver}html.gruvboxDarkRG .star5{fill:#d4af37}html.gruvboxDarkRG .bldQueue::-webkit-scrollbar-track,html.gruvboxDarkRG .dropdown-content::-webkit-scrollbar-track,html.gruvboxDarkRG .hscroll::-webkit-scrollbar-track,html.gruvboxDarkRG .resTabs>.tabs::-webkit-scrollbar-track,html.gruvboxDarkRG .resTabs>section::-webkit-scrollbar-track,html.gruvboxDarkRG .sticky::-webkit-scrollbar-track,html.gruvboxDarkRG .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#282828}html.gruvboxDarkRG .bldQueue::-webkit-scrollbar,html.gruvboxDarkRG .dropdown-content::-webkit-scrollbar,html.gruvboxDarkRG .resTabs>.tabs::-webkit-scrollbar,html.gruvboxDarkRG .resTabs>section::-webkit-scrollbar,html.gruvboxDarkRG .sticky::-webkit-scrollbar,html.gruvboxDarkRG .vscroll::-webkit-scrollbar{width:6px;background-color:#282828}html.gruvboxDarkRG .hscroll::-webkit-scrollbar{height:8px;background-color:#282828}html.gruvboxDarkRG .bldQueue::-webkit-scrollbar-thumb,html.gruvboxDarkRG .dropdown-content::-webkit-scrollbar-thumb,html.gruvboxDarkRG .hscroll::-webkit-scrollbar-thumb,html.gruvboxDarkRG .resTabs>.tabs::-webkit-scrollbar-thumb,html.gruvboxDarkRG .resTabs>section::-webkit-scrollbar-thumb,html.gruvboxDarkRG .sticky::-webkit-scrollbar-thumb,html.gruvboxDarkRG .vscroll::-webkit-scrollbar-thumb{background-color:#3c3836}html.gruvboxDarkRG .bldQueue,html.gruvboxDarkRG .hscroll,html.gruvboxDarkRG .resTabs>.tabs,html.gruvboxDarkRG .resTabs>section,html.gruvboxDarkRG .sticky,html.gruvboxDarkRG .vscroll{scrollbar-color:#3c3836 #282828}html.gruvboxDarkRG .buttonList .is-selected,html.gruvboxDarkRG .modal .buttonList .is-selected{border-color:#b8bb26}html.gruvboxDarkRG .notification,html.gruvboxDarkRG input,html.gruvboxDarkRG select,html.gruvboxDarkRG textarea{background:#ebdbb2}html.gruvboxDarkRG .add,html.gruvboxDarkRG .current.infoOnly,html.gruvboxDarkRG .sub{border:#665c54 solid .0625rem}html.gruvboxDarkRG .current{border-top:#665c54 solid .0625rem;border-bottom:#665c54 solid .0625rem}html.gruvboxDarkRG .popper .grad-from-left{background-image:linear-gradient(90deg,#c409bb 45%,#ebdbb2 55%)}html.gruvboxDarkRG .popper .grad-from-left-warn{background-image:linear-gradient(90deg,#af5d00 45%,#c409bb 55%)}html.gruvboxDarkRG .popper .grad-from-right{background-image:linear-gradient(90deg,#ebdbb2 45%,#c409bb 55%)}html.orangeSoda{background-color:#131516}html.orangeSoda a{color:#f06543}html.orangeSoda .button.has-text-advanced,html.orangeSoda .has-text-advanced{color:#00ac95}html.orangeSoda .button.has-text-alert,html.orangeSoda .has-text-alert{color:#af5d00}html.orangeSoda .button.has-text-caution,html.orangeSoda .has-text-caution{color:#f09d51}html.orangeSoda .button.has-text-danger,html.orangeSoda .has-text-danger{color:#c21e83}html.orangeSoda .has-text-fade{color:#898b87}html.orangeSoda .has-text-flair{color:#91006c}html.orangeSoda .button.has-text-info{color:#167df0}html.orangeSoda .has-text-label{color:#35a7ff}html.orangeSoda .button.has-text-special,html.orangeSoda .has-text-special{color:#91006c}html.orangeSoda .button.has-text-success,html.orangeSoda .has-text-success{color:#35a7ff}html.orangeSoda .button.has-text-warning,html.orangeSoda .has-text-warning{color:#f06543}html.orangeSoda .has-text-danger-pulse{color:#f06543;-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.orangeSoda .challenge .simButton{border-color:#35a7ff}html.orangeSoda .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.orangeSoda .challenge .configList>div{margin:0 .25rem;width:10rem}html.orangeSoda .popper .has-text-label,html.orangeSoda .popper .has-text-success{color:#35a7ff}html.orangeSoda .popper .has-text-warning{color:#f06543}html.orangeSoda .popper .divide-line{border-top:#313638 solid .0625rem}html.orangeSoda .main>div.popper,html.orangeSoda body .modal>div.popper{background-color:#292929;border:.0625rem solid #313638;color:#ebdbb2}html.orangeSoda .main>div.popper>div,html.orangeSoda body .modal>div.popper>div{border-top:solid .0625rem #313638}html.orangeSoda .main>div.popper>div:first-child,html.orangeSoda body .modal>div.popper>div:first-child{border-top:none}html.orangeSoda .main>div.popper .split,html.orangeSoda body .modal>div.popper .split{display:flex}html.orangeSoda .main>div.popper .split>div,html.orangeSoda body .modal>div.popper .split>div{flex-wrap:nowrap}html.orangeSoda .main>div.popper .split>div:nth-of-type(2),html.orangeSoda body .modal>div.popper .split>div:nth-of-type(2){border-left:solid .0625rem #313638;margin-left:.375rem;padding-left:.375rem}html.orangeSoda .shipPopper .divider{border-bottom:solid .0625rem #313638}html.orangeSoda .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.orangeSoda .sliderbar .b-slider{display:inline-block;width:80%}html.orangeSoda .sliderbar .b-slider .b-slider-track{height:1rem}html.orangeSoda .sliderbar .is-primary .b-slider-fill{background:#35a7ff}html.orangeSoda .sliderbar.thin>span{bottom:.625rem}html.orangeSoda .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.orangeSoda .msgQueueFilters span,html.orangeSoda .tabs a{color:#ebdbb2}html.orangeSoda .msgQueueFilters span.is-active,html.orangeSoda .tabs li.is-active a{border-bottom-color:#f06543;color:#f06543}html.orangeSoda .msgQueueFilters span:hover,html.orangeSoda .tabs a:hover{border-bottom-color:#d09376;color:#d09376}html.orangeSoda .button{background-color:#1c2021;color:#ebdbb2}html.orangeSoda .button.is-light{background-color:#ebdbb2}html.orangeSoda .button.is-hovered,html.orangeSoda .button:hover{background-color:#313638;color:#d09376}html.orangeSoda .button.is-focused,html.orangeSoda .button:focus{border-color:#313638}html.orangeSoda .basic-button{border:#313638 solid .0625rem}html.orangeSoda .basic-button:hover{border:#f06543 solid .0625rem;background-color:#292929}html.orangeSoda .text-button:hover{cursor:pointer;color:#d09376;text-decoration:underline}html.orangeSoda .label{color:#ebdbb2}html.orangeSoda .checkbox:hover,html.orangeSoda .modal-card-head p,html.orangeSoda .radio:hover{color:#f06543}html.orangeSoda .dropdown-content{background-color:#1c2021}html.orangeSoda .b-tooltip.is-right:before{border-right:5px solid #d09376}html.orangeSoda .b-tooltip.is-left:before{border-left:5px solid #d09376}html.orangeSoda .b-tooltip.is-bottom:before{border-bottom:5px solid #d09376}html.orangeSoda .b-tooltip.is-primary .tooltip-content{background:#d09376;border:.0625rem solid #313638;color:#000}html.orangeSoda .add,html.orangeSoda .sub{border:#313638 solid .0625rem;transition:all 200ms ease}html.orangeSoda .add:hover,html.orangeSoda .sub:hover{background-color:#313638;color:#d09376}html.orangeSoda .current{border-top:#313638 solid .0625rem;border-bottom:#313638 solid .0625rem}html.orangeSoda .current.infoOnly{border:#313638 solid .0625rem}html.orangeSoda .promoBar,html.orangeSoda .topBar{background-color:#313638}html.orangeSoda .pause,html.orangeSoda .play{display:inline-block;position:relative;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s}html.orangeSoda .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid #35a7ff;border-bottom:.25rem solid transparent}html.orangeSoda .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid #c21e83;border-left:.125rem solid #c21e83}html.orangeSoda .meter.low{color:#c21e83}html.orangeSoda .meter.neutral{color:#38618c}html.orangeSoda .buildList .hl-ca,html.orangeSoda .main .content .action a.button.hl-ca .aTitle,html.orangeSoda .meter.high{color:#35a7ff}html.orangeSoda .buildList .hl-cna,html.orangeSoda .main .content .action a.button.hl-cna .aTitle{color:#c21e83}html.orangeSoda .graphContainer span.special .gear,html.orangeSoda .main .content .action div.special .gear,html.orangeSoda .modal .action div.special .gear,html.orangeSoda .msgQueue span.special .gear{fill:#f06543}html.orangeSoda .main .content .action a.button span.count,html.orangeSoda .main .content .divider h2{background:#131516}html.orangeSoda .main .content .action div.special,html.orangeSoda .modal .action div.special{background:#131516;border:.0625rem solid #313638}html.orangeSoda .main .content .action div.special:hover{border:.0625rem solid #313638}html.orangeSoda .main .content .action div.special:hover .gear{fill:#f09d51}html.orangeSoda .main .content .action span.off,html.orangeSoda .main .content .action span.on{background:#131516;border:.0625rem solid #313638;color:#35a7ff}html.orangeSoda .main .content .action span.on.altwarn,html.orangeSoda .main .content .action span.on.warn{color:#af5d00}html.orangeSoda .main .content .action span.off{color:#c21e83}html.orangeSoda .main .content .action span.off:hover,html.orangeSoda .main .content .action span.on:hover,html.orangeSoda .modal .action div.special:hover{border:.0625rem solid #313638}html.orangeSoda .main .content .action.hl .button{border:solid 1px #35a7ff}html.orangeSoda .main .content .action.cna a.button,html.orangeSoda .modal .action.cna a.button{background:#181818}html.orangeSoda .main .content .action.cna a.button.hl-ca .aTitle,html.orangeSoda .modal .action.cna a.button.hl-ca .aTitle{color:#35a7ff}html.orangeSoda .main .content .action.cna .off,html.orangeSoda .main .content .action.cna .on,html.orangeSoda .main .content .action.cna .special,html.orangeSoda .modal .action.cna .off,html.orangeSoda .modal .action.cna .on,html.orangeSoda .modal .action.cna .special{border-color:#313638}html.orangeSoda .main .content .action.cna .oldTech span.aTitle,html.orangeSoda .modal .action.cna .oldTech span.aTitle{color:#ebdbb2}html.orangeSoda .main .content .action.cna a.button.hl-cna .aTitle,html.orangeSoda .main .content .action.cnam span.aTitle,html.orangeSoda .modal .action.cna a.button.hl-cna .aTitle,html.orangeSoda .modal .action.cnam span.aTitle{color:#c21e83}html.orangeSoda .main .content .enemyFortress{background-color:#1c2021}html.orangeSoda .main .content .green,html.orangeSoda .main .content .synth{box-shadow:0 0 6px #35a7ff}html.orangeSoda .main .content .green>span,html.orangeSoda .main .content .synth>span{text-shadow:1px 1px #35a7ff}html.orangeSoda .main .content .red{box-shadow:0 0 6px #c21e83}html.orangeSoda .main .content .red>span{text-shadow:1px 1px #c21e83}html.orangeSoda .main .content .yellow{box-shadow:0 0 6px #f06543}html.orangeSoda .main .content .yellow>span{text-shadow:1px 1px #f06543}html.orangeSoda .main .content .orange{box-shadow:0 0 6px #f09d51}html.orangeSoda .main .content .orange>span{text-shadow:1px 1px #f09d51}html.orangeSoda .main .content .purple{box-shadow:0 0 6px #91006c}html.orangeSoda .main .content .purple>span{text-shadow:1px 1px #91006c}html.orangeSoda .main .content .blue,html.orangeSoda .main .content .precog{box-shadow:0 0 6px #167df0}html.orangeSoda .main .content .blue>span,html.orangeSoda .main .content .precog>span{text-shadow:1px 1px #167df0}html.orangeSoda .main .content .cna .precog>span{text-shadow:none}html.orangeSoda .main .garrison .header,html.orangeSoda .main .government .header{border-bottom:.0625rem solid #313638}html.orangeSoda .main .market-header{border-bottom:#313638 solid 1px}html.orangeSoda .main .galaxyTrade{border-top:#313638 solid 1px}html.orangeSoda .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.orangeSoda .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.orangeSoda .powerGrid .circuit.inactive{display:none}html.orangeSoda .powerGrid .circuit>span{display:inline-block}html.orangeSoda .powerGrid .circuit>span:first-child{width:1.5rem}html.orangeSoda .powerGrid .circuit .struct{width:12rem}html.orangeSoda .powerGrid .circuit .off,html.orangeSoda .powerGrid .circuit .on{min-width:2rem;text-align:center}html.orangeSoda .powerGrid .circuit .off{color:#c21e83}html.orangeSoda .modal .action a.button.hl-ca .aTitle,html.orangeSoda .powerGrid .circuit .on{color:#35a7ff}html.orangeSoda .gridHeader{border-top:#313638 solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.orangeSoda .powerGridHead{display:flex;justify-content:space-between}html.orangeSoda .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.orangeSoda .resetPowerGrid{margin-left:1rem;margin-top:.75rem}html.orangeSoda .resetPowerGrid .button{height:1.5rem}html.orangeSoda .fort .patrol .check{background-color:#000}html.orangeSoda .market-item .order{border:#313638 solid .0625rem;transition:all 200ms ease}html.orangeSoda .market-item .order:hover{border:#d09376 solid .0625rem;background-color:#313638}html.orangeSoda .inactive-row,html.orangeSoda .market-item.alt,html.orangeSoda .resource.alt{background-color:#292929}html.orangeSoda .resource.showBar.prime{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#000 calc(var(--percent-full) + 1px),#000 100%)}html.orangeSoda .resource.showBar.alt{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#030303 calc(var(--percent-full) + 1px),#030303 100%)}html.orangeSoda .resource .bar{cursor:pointer}html.orangeSoda .modal .actionSpace,html.orangeSoda .modal-card-body,html.orangeSoda .modal-card-foot,html.orangeSoda .modal-card-head{background-color:#131516}html.orangeSoda .industry,html.orangeSoda .modal .action a.button span.count,html.orangeSoda .modalBox{background:#131516}html.orangeSoda .industry .divide,html.orangeSoda .industry .market-item,html.orangeSoda .industry .smelting,html.orangeSoda .modalBox .divide,html.orangeSoda .modalBox .market-item,html.orangeSoda .modalBox .smelting{border-top:#313638 solid .0625rem}html.orangeSoda .industry{background:0 0}html.orangeSoda .industry .header,html.orangeSoda .industry p,html.orangeSoda .modalBox p{border-bottom:#313638 solid .0625rem}html.orangeSoda .industry .avail span{margin:0 2.5rem 0 2.125rem}html.orangeSoda .govTask{margin-top:.25rem}html.orangeSoda .govTask .button{height:1.5rem;margin-left:.5rem}html.orangeSoda .fileImport{background-color:#131516}html.orangeSoda .star1{fill:#131516;stroke:#fff}html.dracula .star1 path,html.orangeSoda .star1 path{stroke:#fff}html.orangeSoda .star2{fill:#fff}html.orangeSoda .star3{fill:#cd7f32}html.orangeSoda .star4{fill:silver}html.orangeSoda .star5{fill:#d4af37}html.orangeSoda .refresh svg{fill:#00ac95}html.orangeSoda .bldQueue::-webkit-scrollbar-track,html.orangeSoda .dropdown-content::-webkit-scrollbar-track,html.orangeSoda .hscroll::-webkit-scrollbar-track,html.orangeSoda .resTabs>.tabs::-webkit-scrollbar-track,html.orangeSoda .resTabs>section::-webkit-scrollbar-track,html.orangeSoda .sticky::-webkit-scrollbar-track,html.orangeSoda .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#131516}html.orangeSoda .bldQueue::-webkit-scrollbar,html.orangeSoda .dropdown-content::-webkit-scrollbar,html.orangeSoda .resTabs>.tabs::-webkit-scrollbar,html.orangeSoda .resTabs>section::-webkit-scrollbar,html.orangeSoda .sticky::-webkit-scrollbar,html.orangeSoda .vscroll::-webkit-scrollbar{width:6px;background-color:#131516}html.orangeSoda .hscroll::-webkit-scrollbar{height:8px;background-color:#131516}html.orangeSoda .bldQueue::-webkit-scrollbar-thumb,html.orangeSoda .dropdown-content::-webkit-scrollbar-thumb,html.orangeSoda .hscroll::-webkit-scrollbar-thumb,html.orangeSoda .resTabs>.tabs::-webkit-scrollbar-thumb,html.orangeSoda .resTabs>section::-webkit-scrollbar-thumb,html.orangeSoda .sticky::-webkit-scrollbar-thumb,html.orangeSoda .vscroll::-webkit-scrollbar-thumb{background-color:#313638}html.orangeSoda .bldQueue,html.orangeSoda .hscroll,html.orangeSoda .resTabs>.tabs,html.orangeSoda .resTabs>section,html.orangeSoda .sticky,html.orangeSoda .vscroll{scrollbar-color:#313638 #131516}html.orangeSoda .buttonList .is-selected,html.orangeSoda .modal .buttonList .is-selected{border-color:#35a7ff}html.orangeSoda .modal .action a.button.hl-cna .aTitle,html.orangeSoda .pop-desc .has-text-caution{color:#c21e83}html.orangeSoda .modal .action div.special:hover .gear{fill:#f09d51}html.orangeSoda .modal .action span.off,html.orangeSoda .modal .action span.on{background:#131516;border:.0625rem solid #313638;color:#35a7ff}html.orangeSoda .modal .action span.on.altwarn,html.orangeSoda .modal .action span.on.warn{color:#af5d00}html.orangeSoda .modal .action span.off{color:#c21e83}html.orangeSoda .modal .action span.off:hover,html.orangeSoda .modal .action span.on:hover{border:.0625rem solid #313638}html.orangeSoda .modal .action.hl .button{border:solid 1px #35a7ff}html.orangeSoda .has-text-info{color:#f09d51}html.orangeSoda .notification,html.orangeSoda input,html.orangeSoda select,html.orangeSoda textarea{background:#ebdbb2}html.orangeSoda .popper .grad-from-left{background-image:linear-gradient(90deg,#c21e83 45%,#ebdbb2 55%)}html.orangeSoda .popper .grad-from-left-warn{background-image:linear-gradient(90deg,#af5d00 45%,#c21e83 55%)}html.orangeSoda .popper .grad-from-right{background-image:linear-gradient(90deg,#ebdbb2 45%,#c21e83 55%)}html.dracula{background-color:#282a36}html.dracula .main>div.popper .has-text-dark,html.dracula body,html.dracula body .modal>div.popper .has-text-dark,html.dracula h2,html.dracula h3{color:#f8f8f2}html.dracula a{color:#bd93f9}html.dracula .button.has-text-advanced,html.dracula .has-text-advanced{color:#8be9fd}html.dracula .button.has-text-alert,html.dracula .has-text-alert{color:#e0a361}html.dracula .button.has-text-caution,html.dracula .has-text-caution{color:#ffa26c}html.dracula .button.has-text-danger,html.dracula .has-text-danger{color:#f55}html.dracula .has-text-fade{color:#6272a4}html.dracula .has-text-flair{color:#ff79c6}html.dracula .button.has-text-info,html.dracula .has-text-info{color:#bd93f9}html.dracula .has-text-label{color:#7dcbdd}html.dracula .button.has-text-special,html.dracula .has-text-special{color:#ff79c6}html.dracula .button.has-text-success,html.dracula .has-text-success{color:#50fa7b}html.dracula .button.has-text-warning,html.dracula .has-text-warning{color:#f1fa8c}html.dracula .has-text-danger-pulse{color:#f1fa8c;-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.dracula .challenge .simButton{border-color:#50fa7b}html.dracula .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.dracula .challenge .configList>div{margin:0 .25rem;width:10rem}html.dracula .popper .has-text-label{color:#7dcbdd}html.dracula .popper .has-text-success{color:#50fa7b}html.dracula .modal-card-head p,html.dracula .popper .has-text-warning{color:#f1fa8c}html.dracula .popper .divide-line{border-top:#44475a solid .0625rem}html.dracula .main>div.popper,html.dracula body .modal>div.popper{background-color:#1a1c24;border:.0625rem solid #44475a;color:#f8f8f2}html.dracula .main>div.popper>div,html.dracula body .modal>div.popper>div{border-top:solid .0625rem #44475a}html.dracula .main>div.popper>div:first-child,html.dracula body .modal>div.popper>div:first-child{border-top:none}html.dracula .main>div.popper .split,html.dracula body .modal>div.popper .split{display:flex}html.dracula .main>div.popper .split>div,html.dracula body .modal>div.popper .split>div{flex-wrap:nowrap}html.dracula .main>div.popper .split>div:nth-of-type(2),html.dracula body .modal>div.popper .split>div:nth-of-type(2){border-left:solid .0625rem #44475a;margin-left:.375rem;padding-left:.375rem}html.dracula .shipPopper .divider{border-bottom:solid .0625rem #44475a}html.dracula .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.dracula .sliderbar .b-slider{display:inline-block;width:80%}.ShipYardTab #shipList .compact button,html.dracula .sliderbar .b-slider .b-slider-track{height:1rem}html.dracula .sliderbar .is-primary .b-slider-fill{background:#50fa7b}html.dracula .sliderbar.thin>span{bottom:.625rem}html.dracula .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.dracula .msgQueueFilters span,html.dracula .tabs a{color:#f8f8f2}html.dracula .msgQueueFilters span.is-active,html.dracula .tabs li.is-active a{border-bottom-color:#bd93f9;color:#bd93f9}html.dracula .msgQueueFilters span:hover,html.dracula .tabs a:hover{border-bottom-color:#9573c5;color:#9573c5}html.dracula .button{background-color:#3f4253;color:#f8f8f2}html.dracula .button.is-light{background-color:#f8f8f2}html.dracula .button.is-hovered,html.dracula .button:hover{background-color:#44475a;color:#9573c5}html.dracula .button.is-focused,html.dracula .button:focus{border-color:#44475a}html.dracula .basic-button{border:#44475a solid .0625rem}html.dracula .basic-button:hover{border:#bd93f9 solid .0625rem;background-color:#1a1c24}html.dracula .text-button:hover{cursor:pointer;color:#9573c5;text-decoration:underline}html.dracula .label{color:#f8f8f2}html.dracula .checkbox:hover,html.dracula .radio:hover{color:#bd93f9}html.dracula .dropdown-content{background-color:#3f4253}html.dracula .b-tooltip.is-right:before{border-right:5px solid #282828}html.dracula .b-tooltip.is-left:before{border-left:5px solid #282828}html.dracula .b-tooltip.is-bottom:before{border-bottom:5px solid #282828}html.dracula .b-tooltip.is-primary .tooltip-content{background:#282828;border:.0625rem solid #44475a;color:#f8f8f2}html.dracula .add,html.dracula .sub{transition:all 200ms ease}html.dracula .add:hover,html.dracula .sub:hover{background-color:#44475a;color:#9573c5}html.dracula .promoBar,html.dracula .topBar{background-color:#6272a4}html.dracula .pause,html.dracula .play{display:inline-block;position:relative;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s}html.dracula .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid #50fa7b;border-bottom:.25rem solid transparent}html.dracula .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid #f55;border-left:.125rem solid #f55}html.dracula .meter.low{color:#f55}html.dracula .meter.neutral{color:#ffa26c}html.dracula .meter.high{color:#bd93f9}html.dracula .buildList .hl-ca,html.dracula .main .content .action a.button.hl-ca .aTitle,html.dracula .modal .action a.button.hl-ca .aTitle{color:#50fa7b}html.dracula .buildList .hl-cna,html.dracula .main .content .action a.button.hl-cna .aTitle,html.dracula .modal .action a.button.hl-cna .aTitle{color:#f55}html.dracula .graphContainer span.special:hover .gear,html.dracula .msgQueue span.special:hover .gear{fill:#bd93f9}html.dracula .main .content .action a.button span.count,html.dracula .main .content .divider h2,html.dracula .modal .action a.button span.count{background:#282a36}html.dracula .main .content .action div.special,html.dracula .modal .action div.special{background:#282a36;border:.0625rem solid #44475a}html.dracula .graphContainer span.special .gear,html.dracula .main .content .action div.special .gear,html.dracula .modal .action div.special .gear,html.dracula .msgQueue span.special .gear{fill:#f09d51}html.dracula .main .content .action div.special:hover,html.dracula .modal .action div.special:hover{border:.0625rem solid #6272a4}html.dracula .main .content .action div.special:hover .gear,html.dracula .modal .action div.special:hover .gear{fill:#bd93f9}html.dracula .main .content .action span.on,html.dracula .modal .action span.on{background:#282a36;border:.0625rem solid #44475a;color:#50fa7b}html.dracula .main .content .action span.on.altwarn,html.dracula .main .content .action span.on.warn,html.dracula .modal .action span.on.altwarn,html.dracula .modal .action span.on.warn{color:#af5d00}html.dracula .main .content .action span.off,html.dracula .modal .action span.off{background:#282a36;border:.0625rem solid #44475a;color:#f55}html.dracula .main .content .action span.off:hover,html.dracula .main .content .action span.on:hover,html.dracula .modal .action span.off:hover,html.dracula .modal .action span.on:hover{border:.0625rem solid #6272a4}html.dracula .main .content .action.hl .button,html.dracula .modal .action.hl .button{border:solid 1px #50fa7b}html.dracula .main .content .action.cna a.button,html.dracula .modal .action.cna a.button{background:#1a1c24}html.dracula .main .content .action.cna a.button.hl-ca .aTitle,html.dracula .modal .action.cna a.button.hl-ca .aTitle{color:#50fa7b}html.dracula .main .content .action.cna .off,html.dracula .main .content .action.cna .on,html.dracula .main .content .action.cna .special,html.dracula .modal .action.cna .off,html.dracula .modal .action.cna .on,html.dracula .modal .action.cna .special{border-color:#44475a}html.dracula .main .content .action.cna .oldTech span.aTitle,html.dracula .modal .action.cna .oldTech span.aTitle{color:#f8f8f2}html.dracula .main .content .action.cna a.button.hl-cna .aTitle,html.dracula .main .content .action.cnam span.aTitle,html.dracula .modal .action.cna a.button.hl-cna .aTitle,html.dracula .modal .action.cnam span.aTitle{color:#f55}html.dracula .main .content .enemyFortress{background-color:#3f4253}html.dracula .main .content .green,html.dracula .main .content .synth{box-shadow:0 0 6px #50fa7b}html.dracula .main .content .green>span,html.dracula .main .content .synth>span{text-shadow:1px 1px #50fa7b}html.dracula .main .content .red{box-shadow:0 0 6px #f55}html.dracula .main .content .red>span{text-shadow:1px 1px #f55}html.dracula .main .content .yellow{box-shadow:0 0 6px #f1fa8c}html.dracula .main .content .yellow>span{text-shadow:1px 1px #f1fa8c}html.dracula .main .content .orange{box-shadow:0 0 6px #ffa26c}html.dracula .main .content .orange>span{text-shadow:1px 1px #ffa26c}html.dracula .main .content .purple{box-shadow:0 0 6px #ff79c6}html.dracula .main .content .purple>span{text-shadow:1px 1px #ff79c6}html.dracula .main .content .blue,html.dracula .main .content .precog{box-shadow:0 0 6px #bd93f9}html.dracula .main .content .blue>span,html.dracula .main .content .precog>span{text-shadow:1px 1px #bd93f9}html.dracula .main .content .cna .precog>span{text-shadow:none}html.dracula .main .garrison .header,html.dracula .main .government .header{border-bottom:.0625rem solid #44475a}html.dracula .main .market-header{border-bottom:#44475a solid 1px}html.dracula .main .galaxyTrade{border-top:#44475a solid 1px}html.dracula .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.dracula .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.dracula .powerGrid .circuit.inactive{display:none}html.dracula .powerGrid .circuit>span{display:inline-block}html.dracula .powerGrid .circuit>span:first-child{width:1.5rem}html.dracula .powerGrid .circuit .struct{width:12rem}html.dracula .powerGrid .circuit .off,html.dracula .powerGrid .circuit .on{min-width:2rem;text-align:center}html.dracula .powerGrid .circuit .off{color:#f55}html.dracula .powerGrid .circuit .on{color:#50fa7b}html.dracula .gridHeader{border-top:#44475a solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.dracula .powerGridHead{display:flex;justify-content:space-between}html.dracula .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.dracula .resetPowerGrid{margin-left:1rem;margin-top:.75rem}.main .govOffice .options .storage .control input,html.dracula .resetPowerGrid .button{height:1.5rem}html.dracula .fort .patrol .check{background-color:#000}html.dracula .market-item .order{border:#44475a solid .0625rem;transition:all 200ms ease}html.dracula .market-item .order:hover{border:#9573c5 solid .0625rem;background-color:#6272a4}html.dracula .inactive-row,html.dracula .market-item.alt,html.dracula .resource.alt{background-color:#1d2021}html.dracula .resource.showBar.prime{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#07080a calc(var(--percent-full) + 1px),#07080a 100%)}html.dracula .resource.showBar.alt{background-image:linear-gradient(to right,transparent 0%,transparent calc(var(--percent-full) - 1px),#000 calc(var(--percent-full) + 1px),#000 100%)}.main #msgQueueHeader .special,html.dracula .resource .bar{cursor:pointer}html.dracula .modal .actionSpace,html.dracula .modal-card-body,html.dracula .modal-card-foot,html.dracula .modal-card-head{background-color:#282a36}html.dracula .industry,html.dracula .modalBox{background:#282a36}html.dracula .industry .divide,html.dracula .industry .market-item,html.dracula .industry .smelting,html.dracula .modalBox .divide,html.dracula .modalBox .market-item,html.dracula .modalBox .smelting{border-top:#44475a solid .0625rem}html.dracula .industry{background:0 0}html.dracula .industry .header,html.dracula .industry p,html.dracula .modalBox p{border-bottom:#44475a solid .0625rem}html.dracula .industry .avail span{margin:0 2.5rem 0 2.125rem}html.dracula .govTask{margin-top:.25rem}html.dracula .govTask .button{height:1.5rem;margin-left:.5rem}html.dracula .fileImport{background-color:#282a36}html.dracula .star1{fill:#282a36;stroke:#fff}html.dracula .star2{fill:#fff}html.dracula .star3{fill:#cd7f32}html.dracula .star4{fill:silver}html.dracula .star5{fill:#d4af37}html.dracula .refresh svg{fill:#8be9fd}html.dracula .bldQueue::-webkit-scrollbar-track,html.dracula .dropdown-content::-webkit-scrollbar-track,html.dracula .hscroll::-webkit-scrollbar-track,html.dracula .resTabs>.tabs::-webkit-scrollbar-track,html.dracula .resTabs>section::-webkit-scrollbar-track,html.dracula .sticky::-webkit-scrollbar-track,html.dracula .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#282a36}html.dracula .bldQueue::-webkit-scrollbar,html.dracula .dropdown-content::-webkit-scrollbar,html.dracula .resTabs>.tabs::-webkit-scrollbar,html.dracula .resTabs>section::-webkit-scrollbar,html.dracula .sticky::-webkit-scrollbar,html.dracula .vscroll::-webkit-scrollbar{width:6px;background-color:#282a36}html.dracula .hscroll::-webkit-scrollbar{height:8px;background-color:#282a36}html.dracula .bldQueue::-webkit-scrollbar-thumb,html.dracula .dropdown-content::-webkit-scrollbar-thumb,html.dracula .hscroll::-webkit-scrollbar-thumb,html.dracula .resTabs>.tabs::-webkit-scrollbar-thumb,html.dracula .resTabs>section::-webkit-scrollbar-thumb,html.dracula .sticky::-webkit-scrollbar-thumb,html.dracula .vscroll::-webkit-scrollbar-thumb{background-color:#44475a}html.dracula .bldQueue,html.dracula .hscroll,html.dracula .resTabs>.tabs,html.dracula .resTabs>section,html.dracula .sticky,html.dracula .vscroll{scrollbar-color:#44475a #282a36}html.dracula .buttonList .is-selected,html.dracula .modal .buttonList .is-selected{border-color:#50fa7b}html.dracula .notification,html.dracula input,html.dracula select,html.dracula textarea{background:#f8f8f2}html.dracula .add,html.dracula .current.infoOnly,html.dracula .sub{border:#44475a solid .0625rem}html.dracula .current{border-top:#44475a solid .0625rem;border-bottom:#44475a solid .0625rem}html.dracula .popper .grad-from-left{background-image:linear-gradient(90deg,#f55 45%,#f8f8f2 55%)}html.dracula .popper .grad-from-left-warn{background-image:linear-gradient(90deg,#e0a361 45%,#f55 55%)}html.dracula .popper .grad-from-right{background-image:linear-gradient(90deg,#f8f8f2 45%,#f55 55%)}html{overflow-y:hidden;box-sizing:border-box;font-size:16px}body,button,input,select,textarea{font-family:"Lato",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}body{line-height:initial;touch-action:manipulation}html.large_all{font-size:18px}.content h2,.content h3,h2,h3{font-size:1rem;font-weight:400;display:inline-block;margin-bottom:0}.is-sr-only,.main .graphControls div h2{margin:0}div,span{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.button,a{transition:all 200ms ease}.button.right{float:right}a{cursor:pointer;text-decoration:none}.tabs a{border-bottom:none;padding:.5em 1em;vertical-align:top}.arpa ul,.content li,.main .hellReports .reportDisplay .reportStats h2,.resTabs ul{margin-top:0}.block:not(:last-child),.box:not(:last-child),.breadcrumb:not(:last-child),.content:not(:last-child),.highlight:not(:last-child),.level:not(:last-child),.list:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.progress:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.title:not(:last-child){margin-bottom:1rem}.tabs:not(:last-child){margin-bottom:.5rem;overflow:hidden}.modal .animation-content{overflow:hidden}@media only screen and (max-width:113rem){.actionWidth{max-width:38rem}}@media only screen and (max-width:88.5rem){.actionWidth{max-width:51rem}}@media only screen and (max-width:76.375rem){.actionWidth{max-width:38rem}}@media only screen and (max-width:59rem){.actionWidth{max-width:25rem}}@media only screen and (max-width:48rem){.actionWidth{max-width:38rem}}@media only screen and (max-width:45rem){.actionWidth{max-width:25rem}}@media only screen and (max-width:32rem){.actionWidth{max-width:12rem}}.keyMap,.msgInput{width:7.5rem;display:inline-block;height:1.25rem;margin-bottom:.25rem;text-align:center}.keyMap input,.msgInput input{height:1.25rem;line-height:1.25rem;text-align:center}.add{display:inline-block;margin-right:.25rem;padding:0 .375rem;border-radius:0 .375rem .375rem 0;line-height:1rem;cursor:pointer}.add span:first-child,.sub span:first-child{position:relative;bottom:.0625rem}.current,.sub{display:inline-block;line-height:1rem}.sub{outline:0;margin-left:.125rem;padding:0 .375rem;border-radius:.375rem 0 0 .375rem;cursor:pointer}.current{min-width:5rem;text-align:center;font-size:.875rem;padding:0 .125rem;cursor:default}.current.infoOnly{border-radius:.375rem;padding:0 .5rem}.factory .current svg{width:unset}.zero{cursor:pointer;margin-left:.75rem}.zero:hover{text-decoration:underline}.localization{margin-bottom:1rem}.basic-button{display:inline-block;font-size:.875rem;margin:0 .25rem;padding-top:.125rem;border-radius:.375rem;line-height:1rem;height:1.375rem;min-width:4rem;text-align:center;cursor:pointer;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tradeOffer .trade-offer{margin:0;padding:.125rem 0}.tradeOffer .trade-offer .offer-item{width:7.5rem}.tradeOffer .trade-offer .offer-vol{width:4.5rem;border-right:1px solid;margin-right:.125rem}#egg4{right:0}.doublePane{display:flex;align-items:center;justify-content:center}.doublePane>div{width:50%}.doublePane>div.left{width:70%}.doublePane>div.right{width:30%}.doublePane,.main .content .tabs ul,.topPad{margin-top:.5rem}.main{margin:1rem 1rem 1.25rem;overflow-y:hidden}.main .leftColumn{height:calc(100vh - 2.45rem)}.main .leftColumn .colHeader{display:flex;justify-content:space-between}.main>.columns{margin-bottom:0}.main .localization,.main .queue,.main .theme{margin-bottom:1rem}.main .localization i,.main .queue i,.main .theme i{margin-left:.25rem;padding-bottom:.25rem}.main .govOffice .options .bal_storage .ccmOption .field-body .control label,.main .localization .dropdown button,.main .queue .dropdown button,.main .theme .dropdown button{height:1.5rem;padding:0 .75rem}.main>.columns>:first-child{min-width:18rem}.main .sep{margin:0 .5rem}.main .race{position:relative;margin-top:1rem;margin-bottom:0;width:100%}.main .race>span{cursor:default}.main .race .power{text-align:right}.main .race .morale,.main .race .morale-contain{text-align:center}.main .queueCol div.bldQueue:first-child{margin-top:2.625rem}.main .bldQueue,.main .msgQueue{resize:vertical;height:7rem;border-top:solid .0625rem;border-bottom:solid .0625rem;overflow-y:auto}.main .bldQueue.right,.main .msgQueue.right{height:auto;border-bottom:none;padding:1rem}.main .msgQueue{font-size:.75rem}.main .msgQueue.right{height:calc(100vh - 9rem)}.main #msgQueueHeader span{font-size:1rem;margin-left:1rem}.main #msgQueueFilters{padding:.25rem 0;border-bottom:solid .0625rem;font-size:.875rem}.main #msgQueueFilters span{cursor:pointer}.main #msgQueueFilters span:not(:last-child){margin-right:2rem}.main #pausequeue,.main #pauserqueue{margin-left:1rem}.main .bldQueue,.main .bldQueue.right{padding-top:.25rem}.main .bldQueue li,.main .bldQueue.right li,.main .resQueue .buildList li{display:inline-block;height:1rem;padding:0 .25rem 0 0}.main .bldQueue li:not(:last-child) .queued:after,.main .bldQueue.right li:not(:last-child) .queued:after{content:" -> "}.main .bldQueue li:not(:last-child) .qany:after,.main .bldQueue.right li:not(:last-child) .qany:after{content:", "}.main .resQueue .buildList,.main .resQueue h2{margin-left:2rem;margin-top:0}.main .govOffice .spyopConfig li:not(:last-child):after,.main .resQueue .buildList li:not(:last-child) .queued:after{content:" -> "}.main .resQueue .buildList li:not(:last-child) .qany:after{content:", "}.main .resTabs>section{position:sticky;top:1rem;bottom:0;height:100vh;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;height:calc(100vh - 10rem)}.main .govTabs2>section{height:calc(100vh - 15rem)}.main .resources{margin-top:.25rem;padding-right:.25rem;height:calc(100vh - 5rem)}@media only screen and (max-width:88.5rem){.main .resources{height:calc(100vh - 16.5rem)}}@media only screen and (max-width:48rem){.main .resources{display:relative}}.main .resources .resource{display:flex;cursor:default}.main .resources .resource div{width:70%;display:flex;justify-content:space-between}.main .resources .resource>:nth-child(2){text-align:center;width:4%}.main .resources .resource .interact{cursor:pointer}.main .resources .resource>:nth-child(3){text-align:right;width:26%}.main .resources .resource .craftable{width:30%;text-align:right}.main .resources .resource .craftable>span{display:inline;margin-left:.25rem}.main .evolving{margin-top:1rem;max-width:51rem}@media only screen and (max-width:113rem){.main .evolving{max-width:38rem}}@media only screen and (max-width:88.5rem){.main .evolving{max-width:51rem}}@media only screen and (max-width:76.375rem){.main .evolving{max-width:38rem}}@media only screen and (max-width:59rem){.main .evolving{max-width:25rem}}@media only screen and (max-width:48rem){.main .evolving{max-width:38rem}}@media only screen and (max-width:45rem){.main .evolving{max-width:25rem}}@media only screen and (max-width:32rem){.main .evolving{max-width:12rem}}.main .evolving .progress{height:1.2rem}.main .evolving::after{display:block;position:relative;top:-1.375rem;content:"Evolving";text-align:center;color:#af8d07;margin-bottom:-1.25rem}.main .content .settings{margin-left:1rem;height:calc(100vh - 6.5rem)}.main .content .tab-content{padding:0 .25rem 0 0}.main .content>.tab-content{padding:0 .25rem 0 1rem}.main .content .tab-item{padding:0 0 0 1rem}.main .content #oldTech{margin-bottom:4rem}.main .content .mtab{height:calc(100vh - 10rem)}.main .content .action,.modal .action{display:inline-block;position:relative}.main .content .action .aTitle,.modal .action .aTitle{overflow-wrap:break-word;white-space:normal;line-height:1rem}.main .content .action a.button,.modal .action a.button{width:12.625rem;margin:.375rem .375rem 0 0}.main .content .action span.oldTech,.modal .action span.oldTech{width:12.625rem;cursor:default;display:inline-flex;margin:0 1rem 0 0}.main .content .action a.button span.count,.main .content .action span.oldTech span.count,.modal .action a.button span.count,.modal .action span.oldTech span.count{position:absolute;top:0;right:0;display:inline-block;height:1.0625rem;line-height:.875rem;padding:0 .25rem;border-radius:0 .25rem 0 .4375rem;overflow:hidden}.main .content .action span.off,.main .content .action span.on,.modal .action span.off,.modal .action span.on{position:absolute;cursor:pointer;display:block;height:1.0625rem;line-height:.8125rem;padding:0 .25rem;overflow:hidden}.main .content .action div.special,.modal .action div.special{position:absolute;cursor:pointer;display:block;padding:0 .25rem;overflow:hidden}.main .content .action div.special,.modal .action div.special{height:1.125rem;line-height:.9375rem;top:.5rem;left:0;border-radius:.25rem 0 .4375rem 0;width:1.1875rem}.main .content .action div.special svg,.modal .action div.special svg{position:relative;left:-.125rem}.main .content .action span.on,.modal .action span.on{bottom:0;right:.375rem;border-radius:.4375rem 0 .25rem 0}.main .content .action span.on .flair,.modal .action span.on .flair{position:relative;left:.25rem;top:0}.main .content .action span.off,.modal .action span.off{bottom:0;left:0;border-radius:0 .4375rem 0 .25rem}.main .content .action span.off .flair,.modal .action span.off .flair{position:relative;left:.125rem;top:0}.main .content .action div.repair,.modal .action div.repair{position:absolute;bottom:0;left:0;width:100%;height:.25rem}.main .content .action div.repair .progress,.modal .action div.repair .progress{height:.25rem;background:0 0}.main .content .action .flair,.modal .action .flair{position:absolute;right:.625rem;top:.5rem;height:.5rem;line-height:.5rem;margin:0;padding:0}.main .content .action .flair:nth-of-type(2),.modal .action .flair:nth-of-type(2){right:.625rem;top:1.1875rem}.main .content .action .flair:nth-of-type(3),.modal .action .flair:nth-of-type(3){right:.625rem;top:1.875rem}.main .content .action .flair:nth-of-type(4),.modal .action .flair:nth-of-type(4){right:1.3125rem;top:.5rem}.main .content .action .flair:nth-of-type(5),.modal .action .flair:nth-of-type(5){right:1.3125rem;top:1.1875rem}.main .content .action .flair:nth-of-type(6),.modal .action .flair:nth-of-type(6){right:1.3125rem;top:1.875rem}.main .content .action.disabled,.modal .action.disabled{display:none}.main .content .enemyFortress{display:inline-block;position:relative;min-width:17.375rem;height:3.125rem;margin:.375rem .375rem 0 0;border-radius:.25rem}.main .content .enemyFortress .fortRow>span,.main .fort .training span,.main .garrison .training>span,.main .job .job_label span{display:inline-block}.main .content .enemyFortress .fortRow :first-child{margin-left:.5rem;margin-right:0;float:left}.main .content .enemyFortress .fortRow :last-child{margin-left:.25rem;margin-right:.5rem;float:right}.main .content .enemyFortress .second{line-height:2rem}.main .content .enemyFortress .second a.button{height:1.5rem;margin-top:.25rem;padding-left:.25rem;padding-right:.25rem;min-width:4.5rem}.main .content .challenge,.main .content .geck{width:100%;text-align:center}@media only screen and (max-width:113rem){.main .content .challenge{max-width:38rem}}@media only screen and (max-width:88.5rem){.main .content .challenge{max-width:51rem}}@media only screen and (max-width:76.375rem){.main .content .challenge{max-width:38rem}}@media only screen and (max-width:59rem){.main .content .challenge{max-width:25rem}}@media only screen and (max-width:48rem){.main .content .challenge{max-width:38rem}}@media only screen and (max-width:45rem){.main .content .challenge{max-width:25rem}}@media only screen and (max-width:32rem){.main .content .challenge{max-width:12rem}}.main .content .challenge .simButton{margin-top:.5rem}.main .content .divider{width:100%;text-align:center;border-bottom:.0625rem solid;margin:.625rem 0}.main .content .divider h2{position:relative;bottom:-.5rem;padding:0 .625rem}.main .jobList{max-width:19rem}.main .job{margin-left:.5rem;display:flex;min-width:18rem;align-items:center}.main .job .controls{margin-bottom:1px}.main .job .controls .sub{border-right:0}.main .job .job_label{cursor:default;display:flex;align-items:center}.main .job .job_label :first-child{margin-right:.5rem;margin-bottom:0;width:10rem;font-size:1rem;font-weight:400;display:inline-block}.main .job .job_label :nth-child(2){min-width:4.5rem;text-align:center}.main .job .job_label .count>span{margin-left:1rem;width:1rem}.main .job .job_label .count svg{width:1rem}.main .armHead>span,.main .sshifter{margin-left:1rem}.main .sshifter button{height:1.5rem;margin-left:.25rem}.main .foundry{margin-top:1rem}.main #civics{padding:.5rem}.main .civics{padding-top:0;padding-bottom:0}.main .civics .revolution{margin-left:.375rem}.main .government,.main .hellReports .reportDisplay p{margin-bottom:0}.main .government .header{margin-bottom:.5rem}.main .government .govType{margin-bottom:.25rem;display:flex;flex-wrap:wrap;justify-content:space-between}.main .government .govType>div:first-child{margin-right:.5rem}.main .government .foreign button,.main .government .govType button{margin-top:.25rem;height:1.75rem;line-height:1.75rem;padding:0 .5rem}.main .government .taxRate{height:1.25rem;display:flex}.main .government .taxRate :first-child{cursor:default;display:inline-block;line-height:1.25rem}.main .government .foreign{margin-bottom:1rem}.main .government .foreign .gaction{display:inline-block;width:8rem}.main .government .foreign .glabel{display:inline-block;width:9rem}.main .government .foreign .glevel{display:inline-block;width:8rem}.main .fort{width:100%;min-height:1rem;margin:.25rem 0;padding:.25rem 0;border-top:1px solid;border-bottom:1px solid}.main .fort .current{position:relative;bottom:.0625rem}.main .fort>div{margin-top:.25rem}.main .fort>div:first-child{margin-top:0}.main .fort>div:first-child span:nth-child(1){margin-right:.5rem}.main .fort .defense,.main .garrison button.first{margin-right:.5rem}.main .fort .training progress{display:inline-block;width:90%}.main .fort .patrol{position:relative;top:4px;left:4px}.main #c_garrison.garrison,.main .fort .merctip{margin-top:.25rem}.main .fort .merc,.main .fort .observe{height:1.25rem;margin-left:.25rem;line-height:0}.main .fort .training .observe{bottom:.25rem}.main .fort .bunks{margin:.25rem 0 .125rem}.main .garrison .header{margin-bottom:.5rem}.main .garrison .bunks{margin:.75rem .75rem 0}.main .garrison .bunk{margin-bottom:0;margin-right:.5rem}.main .garrison .bunk>div{padding-bottom:0}.main .garrison .bunk .hire{padding-left:0;margin-top:1rem}.main .garrison .barracks{margin-bottom:.25rem}.main .garrison .training{margin-bottom:.75rem}.main .garrison .training>progress{display:inline-block;width:calc(100% - 4rem)}.main .garrison button{height:2rem;line-height:1rem}.main .garrison .war{padding-right:0;margin:.75rem .75rem 0}.main .garrison .war .tactics{margin:.5rem 0;height:1.25rem;display:flex}.main .garrison .war .tactics>:first-child{display:inline-block;line-height:1.125rem;width:4.75rem}.main .garrison .launch{min-width:10rem;margin-top:.75rem;margin-right:.5rem;text-align:center}.main .garrison .launch .campaign{width:10rem;white-space:normal;margin-top:.5rem}.main #c_garrison.garrison>div:nth-child(2){display:flex;flex-wrap:wrap;justify-content:space-between}.main .fleet{display:flex;flex-wrap:wrap;width:100%;min-height:1rem;margin:.25rem 0;padding:.25rem 0;border-top:1px solid;border-bottom:1px solid}.main .fleet .area{width:8rem}.main .fleet .area>span{display:inline-block;min-width:8rem;white-space:nowrap}.main .fleet .area .ship{text-align:center}.main .fleet .area .ship .current{min-width:2.5rem;width:2.5rem;font-size:1rem}.main .pirate{margin-right:.75rem;margin-left:.75rem}.industry p,.main .militaryTab .garrison .battle,.modalBox p{margin-bottom:.5rem}.main .militaryTab .garrison .battle .launch,.main .militaryTab .garrison .battle .war{margin:.25rem 0 0 .75rem}.main .militaryTab .garrison .columns{flex-wrap:wrap}.main .mechTab,.main .militaryTab{margin-left:1rem}.main #hellTabs>section{height:100vh}.main .hellReports{display:flex;justify-content:space-between}.main #hellAnalysis,.main .hellReports>div{height:calc(100vh - 10rem)}.main .hellReports .reportList{top:0;width:25%;box-sizing:border-box;border-right:.0625rem solid;margin-right:1rem}.main .hellReports .reportDisplay{width:75%;font-size:.9rem}.main .hellReports .reportDisplay span:not(:last-child){margin-right:.5rem}.main .hellReports .reportDisplay .reportStats{padding-bottom:.5rem;border-bottom:.0625rem solid;margin-bottom:.5rem}.main .hellReports .reportDisplay .reportStats h2:not(:last-child){margin-right:1rem}.main .hellReports .right{margin-left:.5rem;padding-left:.5rem;border-left:.0625rem solid}.main .hellAnalysis{display:flex;justify-content:space-between;width:100%}.main .hellAnalysis .analysisColumn{width:50%;margin:0 10px}.main .hellAnalysis .analysisColumn:not(:last-child){border-right:.0625rem solid}.main .hellAnalysis h2:not(:first-child){margin:0 0 0 1rem}.main #hellAnalysis>div:not(:last-child){margin-bottom:.5rem;border-bottom:.0625rem solid;padding-bottom:.5rem}.main .graphingArea{display:flex;flex-wrap:wrap;justify-content:space-evenly;width:100%}.main .graphContainer{width:45%}.main .graphControls div{display:flex;justify-content:space-between}.main .graphControls .graphTitle{justify-content:center}.main .graph{margin:1%;padding:3%;border:.0625rem solid}.main .mechAssembly{padding-bottom:.5rem;margin-bottom:.5rem;border-bottom:.0625rem solid}.main .mechAssembly .button{height:2rem}.main .gFort,.main .mechAssembly .bayOptions{margin-top:.5rem}.main .mechAssembly .bayOptions .dropdown{margin:0 .5rem .25rem 0}.main .mechAssembly .mechAssemble{margin:1rem 0 0}.main .mechAssembly .checkbox{margin-left:.5rem;bottom:-.25rem}.main .mechList .mechRow .gearList{display:inline-flex}.main .mechList .mechRow .gearList.titan{display:inline-grid}.main .mechList .mechRow .gearList>div{margin:0 .125rem}.main .gFort{padding-top:.5rem;border-bottom:0}.main .gFort .pad{margin-right:.25rem}.main .mad{margin-top:1rem;max-width:28rem;padding:1rem;border:.0625rem solid #fff;border-radius:.5rem;background:repeating-linear-gradient(45deg,#fbfd84,#fbfd84 10px,#000 10px,#000 20px)}.main .mad .warn{background:#000;color:#fff;border-radius:.5rem;padding:.25rem;font-size:.75rem;text-align:center;margin-bottom:.25rem}.main .mad .defcon{display:inline-block;width:50%;text-align:center}.main .armed .mad{border-color:#8f0000;background:repeating-linear-gradient(45deg,#8f0000,#8f0000 10px,#000 10px,#000 20px)}.main .pad{margin-left:1rem}.main .market-header{padding-bottom:.5rem;margin:.5rem 1rem}.main .market-header .trade{position:relative;bottom:-.125rem;margin-left:1rem}.main #achievePanel>div,.main .market-header .b-numberinput{width:100%}.main .market-header .market{margin-left:1rem;margin-right:1rem}.main .market-header .market .button,.main .market-header .market input{height:1.6875rem}.main .market-header .help{margin-left:1rem}.main .galaxyTrade{margin-right:0}.main .trade-header{margin:.5rem 0;justify-content:center}.main .trade-offer{margin:0;padding:.125rem 0}.main .trade-offer .offer-item{width:7.5rem}.main .trade-offer .offer-vol{width:4.5rem;border-right:1px solid;margin-right:.125rem}.main .setting{margin:0 .25rem .5rem 0}.main .importExport,.main .stringPack{margin-top:1rem}.main #customFile,.main #stringPackFile{margin-top:.75rem}.main .reset{margin-top:3rem}.main .reset .notification{margin-top:.5rem}.main .cstat{margin-top:1rem}.main .achievement{position:relative;border:.0625rem solid;padding:.125rem;margin:.125rem 0;width:100%}.main .achievement span,span.inline{display:inline-block}.main .achievement span>span.row{display:block}.main .achievement>:first-child{margin-left:.5rem;width:100%}.main .achievement>:nth-child(2),.main .achievement>div.perk{margin-left:.5rem}.main .achievement .flair{display:block;position:absolute;right:.1875rem;top:.1875rem;height:.5rem;line-height:.5rem;margin:0;padding:0}.main .achievement .flair:nth-of-type(2){right:.1875rem;top:1.375rem}.main .achievement .flair:nth-of-type(3){right:1.3125rem;top:.1875rem}.main .achievement .flair:nth-of-type(4){right:1.3125rem;top:1.375rem}.main .achievement .flair:nth-of-type(5){right:2.4375rem;top:.1875rem}.main .achievement .flair:nth-of-type(6){right:2.4375rem;top:1.375rem}.main .achievement .star1,.main .achievement .star2,.main .achievement .star3,.main .achievement .star4,.main .achievement .star5{width:1rem}.main .governor.candidates,.main>div.popper .modal_bd,body .modal>div.popper .modal_bd{display:table;width:100%}.main .governor .appoint{display:table-row}.main .governor .appoint>span{display:table-cell}.main .governor .appoint.header>span{padding-bottom:.5rem}.main .governor .appoint button{height:1.5rem;margin-bottom:.25rem}.main .govOffice .head{display:flex;justify-content:space-between;align-items:center}.main .govOffice .head .fire button{display:block;line-height:1rem;padding:0 .5rem}.main .govOffice .tConfig{margin-top:.5rem}.main .govOffice .spyopConfig{margin-left:0}.main .govOffice .spyopConfig li{cursor:pointer;display:inline-block;height:1rem;padding:0 .25rem 0 0}.main .govOffice .options{margin-top:1rem}.main .govOffice .options .storage{display:flex;clear:right}.main .govOffice .options .storage>div{width:50%}.main .govOffice .options .storage .control{margin-right:1rem}.main .govOffice .options .hRow>:first-child,.main .govOffice .options .hRow>:nth-child(2){display:inline-block}.main .govOffice .options .hRow>:nth-child(2){float:right}.main .govOffice .options .bal_storage{display:inline-flex;flex-wrap:wrap}.main .govOffice .options .bal_storage .ccmOption{display:flex;justify-content:space-between;align-items:center;position:relative;width:50%}.main .govOffice .options .bal_storage .ccmOption>span{display:inline-block;width:7.5rem;overflow-wrap:anywhere;line-height:1rem}.main .govOffice .options .bal_storage .ccmOption .field-body .field{display:flex;flex-wrap:wrap;width:5rem}.main .govOffice .options .bal_storage .ccmOption .field-body .control{width:.5625rem;margin-right:1rem}.main .govOffice .options .bal_storage .ccmOption:not(.m) .field-body .b3 label{border-top-left-radius:4px;border-bottom-left-radius:4px}.main .govOffice .options .bal_storage .ccmOption:not(.m) .field-body .b5 label{border-top-right-radius:4px;border-bottom-right-radius:4px}.main .govOffice .options .bal_storage .ccmOption.m{height:2.125rem;line-height:2.125rem}.main .govOffice .options .bal_storage .ccmOption.m .field-body .control label{height:1rem;font-size:.75rem}.main .govOffice .options .bal_storage .ccmOption.m .field-body .b1 label{border-bottom-left-radius:0}.main .govOffice .options .bal_storage .ccmOption.m .field-body .b3 label{border-top-right-radius:4px}.main .govOffice .options .bal_storage .ccmOption.m .field-body .b4 label{border-bottom-left-radius:4px}.main .govOffice .options .bal_storage .ccmOption.m .field-body .b6 label{border-top-right-radius:0}.main .govOffice .options .trash .has-addons{display:initial}.main .govOffice .options .trash .has-addons .trashButton{cursor:pointer}.main #perksPanel .achievement{margin:.25rem 0}.main .city,.main .space,.main .tech{margin-top:.625rem}.main .city:first-child,.main .space:nth-child(2),.main .tech:first-child{margin-top:0}.main .regionControl,.main .regionSupport{margin-left:.5rem}.main .space,.main>div.popper div.aTable span,body .modal>div.popper div.aTable span{display:flex}.main .space .syndThreat{margin-left:1rem}.large_log .main .msgQueue{font-size:1rem}.large_all .main .content .action a.button,.large_all .main .content .action span.oldTech,.large_all .modal .action a.button,.large_all .modal .action span.oldTech{width:11.75rem;margin:.25rem .25rem 0 0}.large_all .main .content .action span.on,.large_all .modal .action span.on{right:.25rem}.large_all .main .content .action div.special,.large_all .modal .action div.special{top:.25rem}.large_all .main .msgQueue{font-size:.9rem}.graphCreator>div:not(:last-child){margin-bottom:.5rem;border-bottom:.0625rem solid;padding-bottom:.5rem}.pylon .current{width:5.25rem}.modalBody .gap{margin:0 .25rem .5rem}.modalBody.max40{max-width:40rem}.modalBody .wrap{max-width:25.5rem;margin:0 auto}.popper{z-index:100000}.popper .craft-elm{white-space:nowrap}.popper .grad-from-left,.popper .grad-from-left-warn,.popper .grad-from-right{background-clip:text;background-size:100%;-webkit-background-clip:text;-moz-background-clip:text;-webkit-text-fill-color:transparent;-moz-text-fill-color:transparent}.storage-header{margin-bottom:.25rem}.storage-header button{font-size:.875rem}.storage-header .crate{margin-left:13rem}.storage-header .container{margin-left:3rem}.market-item{margin:.125rem 0 0 1rem;display:flex;cursor:default}.market-item .res{cursor:default;margin-right:.5rem;width:8rem}.market-item .buy,.market-item .res,.market-item .sell{display:inline-flex}.market-item .sell{margin-left:.5rem}.market-item .route{position:relative;bottom:1px}.market-item .order{display:inline-block;font-size:.875rem;margin:0 .25rem;padding-top:.125rem;border-radius:.375rem;line-height:1rem;height:1.375rem;text-align:center;cursor:pointer;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;min-width:4.5rem}.market-item .trade{margin-left:1rem;min-width:9.375rem}.market-item .trade .current{width:3rem}.market-item .trade .add,.market-item .trade .sub{position:relative;top:.0625rem;padding:0 .375rem;line-height:1rem}.arpa .tabs>ul,.market-item .trade .mass,.resTabs .tabs>ul{margin-left:1rem}.market-item .crtTotal,.market-item .tradeTotal.nt{margin-left:11.5rem}.market-item .cntTotal{margin-left:2.0625rem}.market-item .cntTotal span:nth-child(2),.market-item .crtTotal span:nth-child(2){display:inline-block;width:6rem;text-align:center}.market-item .tradeTotal{margin-left:23.25rem}.modal .actionSpace{padding:.25rem;min-width:38rem;border-radius:.5rem}.modal .actionSpace .action a.button{margin:.25rem}.modal .modalBody{max-height:calc(100vh - 5rem)}.modal .msgInput .checkbox{margin:0 3rem}.modal .msgInput .checkbox .control-label{padding:0}.modal .msgInputApply{margin-top:1rem}.modal .modal-background{background-color:transparent}.modal .modal-content{box-shadow:0 0 1rem #000;border-radius:1rem}.modal .genus_selection>section{display:flex;flex-wrap:wrap;flex-direction:row;justify-content:space-between}.main>div.popper,body .modal>div.popper{margin-top:.125rem;text-align:center;padding:.5rem .75rem;max-width:18rem;border-radius:.25rem;line-height:1.3125rem}.main>div.popper div.aTable,body .modal>div.popper div.aTable{columns:2}.main>div.popper.breakdown,body .modal>div.popper.breakdown{max-width:initial}.main>div.popper .modal_bd :first-child,body .modal>div.popper .modal_bd :first-child{display:table-cell;text-align:left;padding-right:.5rem}.main>div.popper .modal_bd :nth-child(2),body .modal>div.popper .modal_bd :nth-child(2){display:table-cell;text-align:right}.main>div.popper .modal_bd.sum,body .modal>div.popper .modal_bd.sum{border-top:.0625rem solid}.main>div.popper .resBreakdown .parent,body .modal>div.popper .resBreakdown .parent{display:flex}.main>div.popper .resBreakdown .parent div.col,body .modal>div.popper .resBreakdown .parent div.col{padding-left:.5rem;margin-left:.5rem;border-left:1px solid}.main>div.popper>.flair,body .modal>div.popper>.flair{margin-top:.5rem;font-size:.75rem;text-align:right;line-height:.75rem}.main>div.popper.flair,body .modal>div.popper.flair{padding-bottom:.25rem}.main>div.popper .flexAround,body .modal>div.popper .flexAround{display:flex;flex-wrap:wrap;justify-content:space-around}.main>div.popper .example,body .modal>div.popper .example{text-align:left;white-space:pre}.main>div.popper .pGeoList .pGeo,body .modal>div.popper .pGeoList .pGeo{min-width:49%}.infoBox{max-width:50rem;margin-bottom:.5rem;margin-right:.5rem;padding:.25rem .5rem}.infoBox h2{margin-bottom:.25rem;border-bottom:.0625rem solid}.infoBox div{margin-bottom:.5rem;clear:both}.infoBox .type{display:flex;justify-content:space-between}.infoBox .type>span:nth-child(1){display:block;text-align:left}.infoBox .type>span:nth-child(2){display:block;text-align:right}.infoBox .desc{text-align:left}.infoBox .condense{margin:0}.main>div.popper.wide,body .modal>div.popper.wide{max-width:initial}.arpa .tabs,.resTabs .tabs{overflow-x:auto}.industry,.modalBox{padding:1rem;border-radius:1rem;text-align:center;min-height:9.5rem}.industry .market-item,.modalBox .market-item{display:block;margin-top:.5rem;padding-top:.5rem;margin-left:0}.industry .crates .crateHead,.modalBox .crates .crateHead{margin-bottom:.5rem}.industry .crates .crateHead :first-child,.modalBox .crates .crateHead :first-child,.popper .soldierEvaluation>div :first-child{margin-right:1rem}.industry .crates .crateHead :last-child,.modalBox .crates .crateHead :last-child{margin-left:1rem}.industry .crates button,.industry .smelting button,.modalBox .crates button,.modalBox .smelting button{font-size:.875rem;margin:0 .25rem;height:1.8rem}.industry .divide,.modalBox .divide{margin-top:.5rem;padding-top:.5rem}.industry .current,.modalBox .current{position:relative;bottom:.0625rem}.industry .smelting,.modalBox .smelting{margin:.5rem 0 .75rem;padding-top:.5rem}.industry .smelting .button.steel,.modalBox .smelting .button.steel{white-space:pre}.industry .factory :first-child,.modalBox .factory :first-child{display:inline-block;width:8rem;text-align:left}.industry .crateModal,.modalBox .crateModal{margin-bottom:1.25rem}.industry .flexAround,.modalBox .flexAround{margin-top:.25rem;display:flex;justify-content:space-evenly}.industry .fanatic section,.industry .flexWrap,.modalBox .fanatic section,.modalBox .flexWrap{display:flex;flex-wrap:wrap;justify-content:space-evenly}.industry .flexWrap>div,.modalBox .flexWrap>div{margin-bottom:.25rem}button[disabled]{pointer-events:none;cursor:not-allowed}.modalBox .trade-offer{margin:0;padding:.125rem 0}.modalBox .trade-offer .offer-item{width:7.5rem}.modalBox .trade-offer .offer-vol{width:4.5rem;border-right:1px solid;margin-right:.125rem}.modalBox .market-item{display:flex;justify-content:center}.modalBox .trade-header{border-top:0;padding-top:0}.industryTab,.psychicTab,.supernaturalTab{display:flex;flex-wrap:wrap;justify-content:center}.industry{margin-bottom:.5rem;border-bottom:.0625rem solid;border-top:.0625rem solid;width:27.5rem}.industry .header{margin-bottom:.25rem;padding-bottom:.25rem;width:100%}.industry .gap{margin-top:.5rem;width:100%}.promoBar,.topBar{display:inline-flex;height:1.2rem;line-height:1.2rem;width:100%;position:fixed}.topBar{top:0;z-index:10}.topBar .calendar{margin:0 auto}.topBar .calendar .temp{margin-left:.125rem;font-size:.875rem}.topBar .calendar .weather{font-size:.8125rem}.topBar .calendar .moon{font-size:.875rem;color:#fff}.topBar .calendar .wi-thermometer-exterior{color:#00d6b2}.topBar .calendar .wi-thermometer{color:#f10202}.topBar .calendar .wi-day-sunny,.topBar .calendar .wi-day-windy{color:#d0ff00}.topBar .calendar .wi-cloud,.topBar .calendar .wi-cloudy-gusts{color:#9ea387}.topBar .calendar .wi-rain,.topBar .calendar .wi-storm-showers{color:#00d6b2;position:relative;bottom:.125rem}.topBar .calendar .wi-snow,.topBar .calendar .wi-snow-wind{color:#fff;position:relative;bottom:.125rem}.topBar .calendar .atime,.topBar .planetWrap{margin-left:1rem}.topBar .calendar .infoTimer{margin-right:1rem}.topBar .calendar .astro{font-size:.8125rem;margin-right:.25rem}.topBar .planetWrap .pet,.topBar .planetWrap .simulation,.topBar .planetWrap .universe{border-left:1px solid;margin-left:.75rem;padding-left:.75rem}.topBar .planetWrap .pet{cursor:pointer}.topBar .flair{display:inline-block;text-align:left}.topBar .flair svg{position:relative;top:.125rem;left:.25rem}.topBar .pet .black{fill:#000;filter:drop-shadow(0 0 2px #fff)}.topBar .pet .black.patched,.topBar .pet .black.stripe,.topBar .pet .brown.patched,.topBar .pet .cream.stripe,.topBar .pet .gray.patched,.topBar .pet .gray.stripe,.topBar .pet .orange.stripe,.topBar .pet .white.patched,.topBar .pet .white.stripe{fill:url(#PetGradient)}.topBar .pet .black.stripe #PetGradient .stop1{stop-color:#000}.topBar .pet .black.stripe #PetGradient .stop2{stop-color:#4e4e4e}.topBar .pet .black.patched #PetGradient .stop1{stop-color:#000}.topBar .pet .black.patched #PetGradient .stop2{stop-color:#424242}.topBar .pet .orange{fill:#e25f08;filter:drop-shadow(0 0 2px #000)}.topBar .pet .orange.stripe #PetGradient .stop1{stop-color:#e25f08}.topBar .pet .orange.stripe #PetGradient .stop2{stop-color:#ccb9ad}.topBar .pet .gray,.topBar .pet .white{fill:#575757;filter:drop-shadow(0 0 2px #000)}.topBar .pet .gray.stripe #PetGradient .stop1{stop-color:#575757}.topBar .pet .gray.stripe #PetGradient .stop2{stop-color:#202020}.topBar .pet .gray.patched #PetGradient .stop1{stop-color:#575757}.topBar .pet .gray.patched #PetGradient .stop2{stop-color:#665237}.topBar .pet .white{fill:#f0efef}.topBar .pet .white.stripe #PetGradient .stop1{stop-color:#f0efef}.topBar .pet .white.stripe #PetGradient .stop2{stop-color:#f5dec4}.topBar .pet .white.patched #PetGradient .stop1{stop-color:#f0efef}.topBar .pet .white.patched #PetGradient .stop2{stop-color:#b8ab9b}.topBar .pet .brown,.topBar .pet .cream{fill:#bd8754;filter:drop-shadow(0 0 2px #000)}.topBar .pet .cream.stripe #PetGradient .stop1{stop-color:#bd8754}.topBar .pet .cream.stripe #PetGradient .stop2{stop-color:#f5dec4}.topBar .pet .brown{fill:#996f48}.topBar .pet .brown.patched #PetGradient .stop1{stop-color:#996f48}.topBar .pet .brown.patched #PetGradient .stop2{stop-color:#af9a85}.topBar .version{margin-right:1rem}.promoBar{bottom:0}.promoBar .left{display:inline-block;width:15rem;margin-left:.25rem}.promoBar .right{position:absolute;text-align:right;margin-right:1rem;right:0}.promoBar .right span{margin:0 .5rem}.arpaProject,.promoBar .right,.promoBar .right .external-links li{display:inline-block}.promoBar .right .external-links li+li:before{content:" | "}.arpaProject{border:solid .0625rem;padding:.5rem;width:20rem;margin:0 1rem 1rem 0}.arpaProject .head{margin-bottom:.25rem;padding-bottom:.5rem;border-bottom:solid .0625rem}.arpaProject .head>span{display:inline-block;width:40%}.arpaProject .head>span:first-child{display:inline-block;width:60%}.arpaProject .head .rank{text-align:right}.arpaProject .head .pbar{position:relative;margin-top:.5rem}.arpaProject .head .pbar .progress{margin-bottom:0}.arpaProject .head .pbar .progress-value{position:absolute;display:block;top:-.1875rem;left:49%}.arpaProject .buy{text-align:center}.arpaProject .buy .button{height:1.5rem;width:19%;line-height:.75rem}.arpaProject .buy :first-child{width:24%}.ShipYardTab,.ShipYardTab .assemble>span{margin-left:1rem}.ShipYardTab .button{height:2rem}.ShipYardTab .stats{display:flex}.ShipYardTab #shipYardCosts,.ShipYardTab .stats>div,.genome button{margin-left:.5rem}.ShipYardTab .registry{line-height:1.25rem}.ShipYardTab .registry .nameplate{display:inline-block;width:8rem;height:1.25rem}.ShipYardTab .registry .nameplate input{height:1.25rem}.ShipYardTab #shipList .shipRow,.ShipYardTab .shipBayOptions .dropdown{margin-left:.5rem;margin-top:.25rem}.ShipYardTab #shipList{margin-top:.25rem}.ShipYardTab #shipList .shipRow{display:grid;padding-top:.25rem;border-top:1px solid;grid-template-columns:auto 10rem}.ShipYardTab #shipList .shipRow .name{display:inline-block;min-width:5rem}.ShipYardTab #shipList .shipRow .row1,.ShipYardTab #shipList .shipRow .row2,.ShipYardTab #shipList .shipRow .row3{grid-column-start:1}.ShipYardTab #shipList .shipRow .location{grid-column-start:2;grid-row-start:1;grid-row-end:3}.ShipYardTab #shipList .shipRow .pad{margin:0 .5rem 0 0}.ShipYardTab .assemble{margin:1rem 0 0 .5rem;line-height:2rem}.ShipYardTab .assemble>span>label.checkbox{margin-right:0;top:.25rem}.ShipYardTab .solarMap{float:right;margin-right:1rem}.genome{margin-bottom:1rem}.genome .progress{margin-top:.25rem;margin-bottom:.5rem}.genome button.seq{margin-left:0}.geneticTraits .trait.major{margin-top:.5rem}.geneticTraits .trait .gene{min-width:5rem;padding-bottom:.125rem}.geneticTraits .trait.indent{margin-left:4.5rem}.geneticTraits .traitListing{display:flex;flex-wrap:wrap}.geneticTraits .traitListing>.traitRow{width:25rem}.geneticTraits .traitRow>span{vertical-align:middle}.geneticTraits .traitRow .basic-button{height:100%}.main>div.popper.wide.w22,body .modal>div.popper.wide.w22{max-width:22rem}.main>div.popper.wide.w25,body .modal>div.popper.wide.w25{max-width:25rem}.main>div.popper.wide.w30,body .modal>div.popper.wide.w30{max-width:30rem}#trick6{width:4rem;text-align:center}body.nuke{color:#000;transition:color 2s,text-shadow 3s;text-shadow:0-2px 4px #fff,0-2px 10px #ff3,0-10px 20px #f90,0-20px 40px #c33}div.mininuke,div.nuke{position:fixed;width:100%;height:100%;z-index:10;top:0;left:0;transition:all 2s;opacity:0}div.mininuke{position:absolute;overflow:hidden}div.mininuke.burn,div.nuke.burn{opacity:1}div.bigbang.burn::before,div.mininuke.burn::before,div.nuke.burn::before{content:"";display:block;width:10px;height:10px;position:absolute;border-radius:50%}div.mininuke.burn::before,div.nuke.burn::before{top:60%;left:30%;background:#000}div.mininuke.burn.b::before,div.nuke.burn.b::before{transition:width 3s,height 3s,top 3s,left 3s;background:#000;width:180%;height:180%;top:-30%;left:-30%;box-shadow:0-2px 4px #fff,0-2px 10px #ff3,0-10px 20px #f90,0-20px 40px #c33,inset 0-20px 40px #fff,inset 0-20px 100px #ff3,inset 0-40px 200px #f90,inset 0-80px 400px #c33}div.mininuke.burn.b::before{transition:width 2s,height 2s,top 2s,left 2s}div.nuke.burn{background:#000}div.mininuke.burn.c::before{visibility:hidden;opacity:0;transition:visibility 0s 2s,opacity 2s linear}div.bigbang{position:fixed;width:100%;height:100%;z-index:10;top:0;left:0;transition:all 1s;opacity:0}div.bigbang.burn{opacity:1}div.bigbang.burn::before{top:50%;left:50%;background:#fff}div.bigbang.burn.b::before{transition:width 2s,height 2s,top 2s,left 2s;background:#fff;width:180%;height:180%;top:-30%;left:-30%;box-shadow:0-2px 4px #fff,0-2px 10px #ff3,0-10px 20px #f90,0-20px 40px #c33,inset 0-20px 40px #fff,inset 0-20px 100px #ff3,inset 0-40px 200px #f90,inset 0-80px 400px #c33}div.bigbang.burn.c::before{transition:width 2s,height 2s,top 2s,left 2s,background-color 2s;background:#000;width:180%;height:180%;top:-30%;left:-30%;box-shadow:0-2px 4px #000,0-2px 10px #000,0-10px 20px #000,0-20px 40px #000,inset 0-20px 40px #000,inset 0-20px 100px #000,inset 0-40px 200px #000,inset 0-80px 400px #000}.earthquake{animation:3.8s shake infinite alternate}.celestialLab .fields,.celestialLab .sequence .genus_selection section,.celestialLab .sequence .planet_selection section,.celestialLab .sequence .res_selection section{margin-top:.5rem}.celestialLab .fields .entity,.celestialLab .fields .name{display:inline-block;width:10rem;margin-right:1rem}.celestialLab .fields .entity{width:20rem}.celestialLab .fields .control{margin:.25rem 0}.celestialLab .fields .help{margin-top:0;position:absolute;right:.25rem;top:-1rem}.celestialLab .sequence{display:flex;margin-top:.5rem}.celestialLab .sequence .genus_selection{width:10rem}.celestialLab .sequence .genus_selection button{padding:1rem .5rem}.celestialLab .sequence .trait_selection{margin-top:.5rem;display:flex;flex-wrap:wrap}.celestialLab .sequence .planet_selection section>div,.celestialLab .sequence .trait_selection>div{width:11.5rem}.celestialLab .sequence .trait_selection.summary>div{width:23rem}.celestialLab .sequence .trait_selection.summary .field{display:flex;justify-content:space-between;padding-right:.5rem}.celestialLab .sequence .trait_selection.summary .field .rc{display:inline-block;min-width:7rem;text-align:center}.celestialLab .sequence .planet_selection,.celestialLab .sequence .res_selection{margin-left:2rem}.celestialLab .sequence .res_selection section>div,.popper .soldierEvaluation>div{display:flex;justify-content:space-between}.celestialLab .sequence .res_selection section>div>div:first-child{margin-right:.25rem}.celestialLab .sequence>div .field:not(:last-child){margin-bottom:0}.celestialLab .buttons{display:flex;justify-content:space-evenly}.celestialLab .create{margin-top:1rem;text-align:center}.celestialLab .genus,.celestialLab .resetLab{margin-bottom:.75rem;text-align:center}.celestialLab .genus>button,.celestialLab .resetLab>button{margin-top:.25rem;width:8.5rem}.bulletlistqueuestyle.bldQueue li,.bulletlistqueuestyle.bldQueue.right li,.listqueuestyle.bldQueue li,.listqueuestyle.bldQueue.right li,.numberedlistqueuestyle.bldQueue li,.numberedlistqueuestyle.bldQueue.right li{margin:.25rem 0;display:list-item}.bulletlistqueuestyle.bldQueue li:not(:last-child) .queued:after,.bulletlistqueuestyle.bldQueue.right li:not(:last-child) .queued:after,.listqueuestyle.bldQueue li:not(:last-child) .queued:after,.listqueuestyle.bldQueue.right li:not(:last-child) .queued:after,.numberedlistqueuestyle.bldQueue li:not(:last-child) .queued:after,.numberedlistqueuestyle.bldQueue.right li:not(:last-child) .queued:after{content:""}.numberedlistqueuestyle.bldQueue li,.numberedlistqueuestyle.bldQueue.right li{list-style-type:numeric;list-style-position:inside}.bulletlistqueuestyle.bldQueue li,.bulletlistqueuestyle.bldQueue.right li{list-style-type:disc;list-style-position:inside}.sticky{position:sticky;height:100vh}.sticky,.vscroll{overflow-x:hidden;overflow-y:auto;scrollbar-width:thin;top:1rem;bottom:0}.hscroll{overflow-x:auto;overflow-y:hidden;white-space:nowrap}#evolution{height:calc(100vh - 6rem)}.bldQueue,.hscroll,.resTabs>.tabs,.resTabs>section{scrollbar-width:thin}.modal .modal-content{width:initial;min-width:42rem}.modal .modal-content .fuels{margin-top:.5rem}.modal .modal-content .avail span{margin:0 2.5rem 0 2.125rem}.popper{pointer-events:none}.popper .touchButton{pointer-events:all;height:1.25rem;margin-bottom:.25rem}.popper .soldierEvaluation>div.head{display:block;text-align:center}#powerStatus{white-space:nowrap}.pyro>.after,.pyro>.before{position:absolute;display:block;width:5px;height:5px;border-radius:50%;box-shadow:0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff;-moz-animation:1s bang ease-out infinite backwards,1s gravity ease-in infinite backwards,5s position linear infinite backwards;-webkit-animation:1s bang ease-out infinite backwards,1s gravity ease-in infinite backwards,5s position linear infinite backwards;-o-animation:1s bang ease-out infinite backwards,1s gravity ease-in infinite backwards,5s position linear infinite backwards;-ms-animation:1s bang ease-out infinite backwards,1s gravity ease-in infinite backwards,5s position linear infinite backwards;animation:1s bang ease-out infinite backwards,1s gravity ease-in infinite backwards,5s position linear infinite backwards}.pyro>.after{-moz-animation-delay:1.25s,1.25s,1.25s;-webkit-animation-delay:1.25s,1.25s,1.25s;-o-animation-delay:1.25s,1.25s,1.25s;-ms-animation-delay:1.25s,1.25s,1.25s;animation-delay:1.25s,1.25s,1.25s;-moz-animation-duration:1.25s,1.25s,6.25s;-webkit-animation-duration:1.25s,1.25s,6.25s;-o-animation-duration:1.25s,1.25s,6.25s;-ms-animation-duration:1.25s,1.25s,6.25s;animation-duration:1.25s,1.25s,6.25s}.noise{position:absolute;top:-500px;right:-500px;bottom:-500px;left:-500px;background:url(/lib/noise.png)0 0;background-size:320px 320px;opacity:.35;animation:noise 1s steps(8,end) infinite both}.noise-wrapper{position:absolute;left:0;top:0;width:100%;height:100%;opacity:1;overflow:hidden;z-index:10}.noise-wrapper:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse at center,transparent 0,rgba(0,0,0,.75) 100%)}.signal-lost-bottom,.signal-lost-top{width:100%;height:0%;opacity:.9;background:#000;position:absolute;z-index:100}.signal-lost-top{top:0}.signal-lost-bottom{bottom:0}.refresh{position:relative;display:inline-block;height:1rem;width:1rem;font-size:1rem;cursor:pointer;margin-left:.5rem;top:.2rem}.font-overlay{z-index:999;position:absolute;top:1rem} \ No newline at end of file +@keyframes color-change{0%,to{color:var(--theme-has-text-warning)}50%{color:var(--theme-has-text-danger)}}@keyframes modal-ghost-leave{0%{opacity:1}to{opacity:0}}@keyframes modal-ghost-leave-content{0%{transform:scale(1)}to{transform:scale(1.05)}}@keyframes shake{0%,10%{transform:skewX(-1deg)}15%,5%{transform:skewX(1deg)}20%,to{transform:skewX(0deg)}10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}@keyframes bang{to{box-shadow:-154px -131.66666667px #0fc,-243px -325.66666667px #ff0d00,71px -294.66666667px #7f0,154px 7.33333333px #00ff73,159px 65.33333333px #ff00f7,191px -207.66666667px #ffd000,123px -232.66666667px #0059ff,-96px 18.33333333px #2600ff,93px 76.33333333px #00eaff,-94px -388.66666667px #00ff59,-92px -107.66666667px #ff8400,-7px -20.66666667px #3c00ff,37px -197.66666667px #ea00ff,249px -148.66666667px #f02,-112px -249.66666667px #ff0040,-191px -374.66666667px #ff7300,249px -12.66666667px #30f,-238px -366.66666667px #00fffb,-76px -186.66666667px #00ffe6,242px 60.33333333px #00d5ff,-69px -217.66666667px #0095ff,222px -155.66666667px #0037ff,164px -410.66666667px #ff004d,-228px 2.33333333px #ff9d00,-201px -352.66666667px #f0d,75px -378.66666667px #00ff6a,-141px -375.66666667px #f07,-75px -362.66666667px #8000ff,-162px -287.66666667px #0f8,-152px -260.66666667px #00b3ff,180px -205.66666667px #005eff,-110px -16.66666667px #ff00d5,-128px -298.66666667px #00ffc4,141px -197.66666667px #00f7ff,73px -109.66666667px #f60,164px -347.66666667px #00c8ff,-178px -307.66666667px #0026ff,133px .33333333px #bf0,13px 37.33333333px #7bff00,-168px -198.66666667px #0df,-155px -70.66666667px #80f,167px -111.66666667px #ffc800,98px -353.66666667px #00fffb,65px -235.66666667px #ff0059,186px -122.66666667px #ff0009,-124px -385.66666667px #ff007b,6px -251.66666667px #ff00bf,66px -309.66666667px #0dff00,169px -119.66666667px #ff4800,-232px -137.66666667px #5eff00,171px -173.66666667px #f05}}@keyframes gravity{to{-moz-transform:translateY(200px);-webkit-transform:translateY(200px);-o-transform:translateY(200px);-ms-transform:translateY(200px);transform:translateY(200px);opacity:0}}@keyframes position{0%,19.9%{margin-top:10%;margin-left:40%}20%,39.9%{margin-top:40%;margin-left:30%}40%,59.9%{margin-top:20%;margin-left:70%}60%,79.9%{margin-top:30%;margin-left:20%}80%,99.9%{margin-top:30%;margin-left:80%}}@keyframes noise{0%{transform:translateX(0,0)}10%,30%,to{transform:translate(-100px,100px)}20%{transform:translate(150px,-100px)}40%,80%{transform:translate(100px,-150px)}50%{transform:translate(-100px,200px)}60%{transform:translate(-200px,-100px)}70%{transform:translateY(50px,100px)}90%{transform:translate(0,200px)}}:root{--theme-html-background:#fff;--theme-primary-border:#000;--theme-secondary-border:#000;--theme-primary-color:#000;--theme-secondary-color:#000;--theme-link:#000;--theme-link-hover:#fff;--theme-enabled:#fff;--theme-disabled:#fff;--theme-has-text-advanced:#000;--theme-has-text-alert:#000;--theme-has-text-caution:#000;--theme-has-text-danger:#000;--theme-has-text-fade:#000;--theme-has-text-flair:#000;--theme-has-text-label:#000;--theme-has-text-special:#000;--theme-has-text-info:#000;--theme-has-text-success:#000;--theme-has-text-warning:#000;--theme-popper:#fff;--theme-popper-has-text-label:#fff;--theme-popper-has-text-success:#fff;--theme-popper-has-text-warning:#fff;--theme-modal-child-popper-background:#fff;--theme-modal-child-popper-border:#fff;--theme-tabs-li-is-active-link-border:#fff;--theme-tabs-li-is-active-link:#fff;--theme-button-background:#fff;--theme-button:#fff;--theme-button-hover-background:#fff;--theme-button-hover:#fff;--theme-button-focus-border:#fff;--theme-basic-button-border-hover-background:#fff;--theme-basic-button-border-hover:#fff;--theme-label:#fff;--theme-checkbox-hover:#fff;--theme-dropdown-content-background:#fff;--theme-b-tooltip-accent:#fff;--theme-b-tooltip-is-primary-background:#fff;--theme-b-tooltip-is-primary-border:#fff;--theme-b-tooltip-is-primary:#fff;--theme-bars-background:#fff;--theme-meter-low:#fff;--theme-meter-neutral:#fff;--theme-meter-high:#fff;--theme-div-special-border:#fff;--theme-div-special-gear-fill:#fff;--theme-div-special-hover-border:#fff;--theme-div-special-hover-gear-fill:#fff;--theme-span-on-border:#fff;--theme-span-on:#fff;--theme-span-on-warn:#fff;--theme-span-off-border:#fff;--theme-span-off:#fff;--theme-span-on-off-hover-border:#fff;--theme-hl-button-border:#fff;--theme-link-button-background:#fff;--theme-special-on-off-border:#fff;--theme-oldTech:#fff;--theme-cnam-aTitle:#fff;--theme-fort-patrol-check-background:#fff;--theme-market-item-background:#fff;--theme-market-item-order-hover-background:#fff;--theme-market-item-order-hover-border:#fff;--theme-resource-overlay-color:#fff;--theme-resource-overlay-color-alt:#fff;--theme-modalBox-background:#fff;--theme-star-2-fill:#fff;--theme-star-3-fill:#fff;--theme-star-4-fill:#fff;--theme-star-5-fill:#fff;--theme-webkit-scrollbar-background:#fff;--theme-webkit-scrollbar-thumb-background:#fff}#city-gift .hgift{background-color:initial;background-image:repeating-linear-gradient(90deg,#b22222,#b22222 10px,beige 0,beige 12px,#228b22 0,#228b22 18px,gold 0,gold 20px,#dc143c 0,#dc143c 30px),repeating-linear-gradient(#b22222,#b22222 10px,beige 0,beige 12px,#228b22 0,#228b22 18px,gold 0,gold 20px,#dc143c 0,#dc143c 30px);background-blend-mode:multiply}#city-gift .hgift>span{color:#ebdbb2;text-shadow:2px 2px #000}html{overflow-y:hidden;box-sizing:border-box;font-size:16px}html.theme{background-color:var(--theme-html-background)}html.theme body,html.theme h2,html.theme h3{color:var(--theme-primary-color)}html.theme a{color:var(--theme-link)}html.theme .button.has-text-advanced,html.theme .has-text-advanced{color:var(--theme-has-text-advanced)}html.theme .button.has-text-alert,html.theme .has-text-alert{color:var(--theme-has-text-alert)}html.theme .button.has-text-caution,html.theme .has-text-caution{color:var(--theme-has-text-caution)}html.theme .button.has-text-danger,html.theme .has-text-danger{color:var(--theme-has-text-danger)}html.theme .has-text-fade{color:var(--theme-has-text-fade)}html.theme .has-text-flair{color:var(--theme-has-text-flair)}html.theme .button.has-text-info,html.theme .has-text-info{color:var(--theme-has-text-info)}html.theme .has-text-label{color:var(--theme-has-text-label)}html.theme .button.has-text-special,html.theme .has-text-special{color:var(--theme-has-text-special)}html.theme .button.has-text-success,html.theme .has-text-success{color:var(--theme-has-text-success)}html.theme .button.has-text-warning,html.theme .has-text-danger-pulse,html.theme .has-text-warning,html.theme .modal-card-head p{color:var(--theme-has-text-warning)}html.theme .has-text-danger-pulse{-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.theme .challenge .simButton{border-color:var(--theme-has-text-success)}html.theme .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.theme .challenge .configList>div{margin:0 .25rem;width:10rem}html.theme .challenge .configList>div>input,html.theme.gruvboxDarkRG .challenge .configList>div>input,html.theme.redgreen .challenge .configList>div>input{height:1.25rem;text-align:center;padding:0}html.theme .popper .has-text-label{color:var(--theme-popper-has-text-label)}html.theme .popper .has-text-success{color:var(--theme-popper-has-text-success)}html.theme .popper .has-text-warning{color:var(--theme-popper-has-text-warning)}html.theme .popper .divide-line{border-top:var(--theme-secondary-border) solid .0625rem}html.theme .main>div.popper,html.theme body .modal>div.popper{background-color:var(--theme-modal-child-popper-background);border:.0625rem solid var(--theme-modal-child-popper-border);color:var(--theme-popper)}html.theme .main>div.popper>div,html.theme body .modal>div.popper>div{border-top:solid .0625rem var(--theme-modal-child-popper-border)}html.theme .main>div.popper>div:first-child,html.theme body .modal>div.popper>div:first-child{border-top:none}html.theme .main>div.popper .has-text-dark,html.theme body .modal>div.popper .has-text-dark{color:var(--theme-popper)}html.theme .main>div.popper .split,html.theme body .modal>div.popper .split{display:flex}html.theme .main>div.popper .split>div,html.theme body .modal>div.popper .split>div{flex-wrap:nowrap}html.theme .main>div.popper .split>div:nth-of-type(2),html.theme body .modal>div.popper .split>div:nth-of-type(2),html.theme.gruvboxDarkRG .main>div.popper .split>div:nth-of-type(2),html.theme.gruvboxDarkRG body .modal>div.popper .split>div:nth-of-type(2),html.theme.redgreen .main>div.popper .split>div:nth-of-type(2),html.theme.redgreen body .modal>div.popper .split>div:nth-of-type(2){border-left:solid .0625rem var(--theme-modal-child-popper-border);margin-left:.375rem;padding-left:.375rem}html.theme .shipPopper .divider{border-bottom:solid .0625rem var(--theme-modal-child-popper-border)}html.theme .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.theme .sliderbar .b-slider{display:inline-block;width:80%}html.theme .sliderbar .b-slider .b-slider-track{height:1rem}html.theme .sliderbar .is-primary .b-slider-fill{background:var(--theme-has-text-success)}html.theme .sliderbar.thin>span{bottom:.625rem}html.theme .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.theme .msgQueueFilters span,html.theme .tabs a{color:var(--theme-primary-color)}html.theme .msgQueueFilters span.is-active,html.theme .tabs li.is-active a{border-bottom-color:var(--theme-tabs-li-is-active-link-border);color:var(--theme-tabs-li-is-active-link)}html.theme .msgQueueFilters span:hover,html.theme .tabs a:hover{border-bottom-color:var(--theme-link-hover);color:var(--theme-link-hover)}.main #msgQueueHeader h2,.main .bldQueue h2,.main .bldQueue.right h2,.main .resQueue h2,html.theme .tabs>ul,html.theme.gruvboxDarkRG .tabs>ul,html.theme.redgreen .tabs>ul{border-bottom:solid .0625rem}html.theme .button{background-color:var(--theme-button-background);color:var(--theme-button)}html.theme .button.is-light{background-color:var(--theme-primary-color)}html.theme .button.is-hovered,html.theme .button:hover{background-color:var(--theme-button-hover-background);color:var(--theme-link-hover)}html.theme .button.is-focused,html.theme .button:focus{border-color:var(--theme-button-focus-border)}html.theme .basic-button{border:var(--theme-primary-border) solid .0625rem}html.theme .basic-button:hover{border:var(--theme-basic-button-border-hover) solid .0625rem;background-color:var(--theme-basic-button-border-hover-background)}html.theme .text-button:hover{cursor:pointer;color:var(--theme-link-hover);text-decoration:underline}html.theme .label{color:var(--theme-label)}html.theme .checkbox:hover,html.theme .radio:hover{color:var(--theme-checkbox-hover)}html.theme .dropdown-content{background-color:var(--theme-dropdown-content-background)}html.theme .b-tooltip.is-right:before{border-right:5px solid var(--theme-b-tooltip-accent)}html.theme .b-tooltip.is-left:before{border-left:5px solid var(--theme-b-tooltip-accent)}html.theme .b-tooltip.is-bottom:before{border-bottom:5px solid var(--theme-b-tooltip-accent)}html.theme .b-tooltip.is-primary .tooltip-content{background:var(--theme-b-tooltip-is-primary-background);border:.0625rem solid var(--theme-b-tooltip-is-primary-border);color:var(--theme-b-tooltip-is-primary)}html.theme .add,html.theme .sub{border:var(--theme-primary-border) solid .0625rem;transition:all 200ms ease}html.theme .add:hover,html.theme .sub:hover{background-color:var(--theme-button-hover-background);color:var(--theme-link-hover)}html.theme .current{border-top:var(--theme-primary-border) solid .0625rem;border-bottom:var(--theme-primary-border) solid .0625rem}html.theme .current.infoOnly{border:var(--theme-primary-border) solid .0625rem}html.theme #mobileNav,html.theme .promoBar,html.theme .topBar{background-color:var(--theme-bars-background)}html.theme .pause,html.theme .play{display:inline-block;position:relative;cursor:pointer;-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}html.theme .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid var(--theme-has-text-success);border-bottom:.25rem solid transparent}html.theme .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid var(--theme-has-text-danger);border-left:.125rem solid var(--theme-has-text-danger)}html.theme .meter.low{color:var(--theme-meter-low)}html.theme .meter.neutral{color:var(--theme-meter-neutral)}html.theme .meter.high{color:var(--theme-meter-high)}html.theme .buildList .hl-ca,html.theme .main .content .action a.button.hl-ca .aTitle,html.theme .modal .action a.button.hl-ca .aTitle{color:var(--theme-enabled)}html.theme .buildList .hl-cna,html.theme .main .content .action a.button.hl-cna .aTitle,html.theme .modal .action a.button.hl-cna .aTitle{color:var(--theme-disabled)}html.theme .graphContainer span.special:hover .gear,html.theme .msgQueue span.special:hover .gear{fill:var(--theme-div-special-hover-gear-fill)}html.theme .main .content .action a.button span.count,html.theme .main .content .divider h2,html.theme .modal .action a.button span.count{background:var(--theme-html-background)}html.theme .main .content .action div.special,html.theme .modal .action div.special{background:var(--theme-html-background);border:.0625rem solid var(--theme-div-special-border)}html.theme .graphContainer span.special .gear,html.theme .main .content .action div.special .gear,html.theme .modal .action div.special .gear,html.theme .msgQueue span.special .gear{fill:var(--theme-div-special-gear-fill)}html.theme .main .content .action div.special:hover,html.theme .modal .action div.special:hover{border:.0625rem solid var(--theme-div-special-hover-border)}html.theme .main .content .action div.special:hover .gear,html.theme .modal .action div.special:hover .gear,html.theme.redgreen .graphContainer span.special:hover .gear,html.theme.redgreen .msgQueue span.special:hover .gear{fill:var(--theme-div-special-hover-gear-fill)}html.theme .main .content .action span.on,html.theme .modal .action span.on{background:var(--theme-html-background);border:.0625rem solid var(--theme-span-on-border);color:var(--theme-span-on)}html.theme .main .content .action span.on.altwarn,html.theme .main .content .action span.on.warn,html.theme .modal .action span.on.altwarn,html.theme .modal .action span.on.warn{color:var(--theme-span-on-warn)}html.theme .main .content .action span.off,html.theme .modal .action span.off{background:var(--theme-html-background);border:.0625rem solid var(--theme-span-off-border);color:var(--theme-span-off)}html.theme .main .content .action span.off:hover,html.theme .main .content .action span.on:hover,html.theme .modal .action span.off:hover,html.theme .modal .action span.on:hover{border:.0625rem solid var(--theme-span-on-off-hover-border)}html.theme .main .content .action.hl .button,html.theme .modal .action.hl .button{border:solid 1px var(--theme-hl-button-border)}html.theme .main .content .action.cna a.button,html.theme .modal .action.cna a.button,html.theme.gruvboxDarkRG .main .content .action.cna a.button,html.theme.gruvboxDarkRG .modal .action.cna a.button,html.theme.redgreen .main .content .action.cna a.button,html.theme.redgreen .modal .action.cna a.button{background:var(--theme-link-button-background)}html.theme .main .content .action.cna a.button.hl-ca .aTitle,html.theme .modal .action.cna a.button.hl-ca .aTitle{color:var(--theme-enabled)}html.theme .main .content .action.cna a.button.hl-cna .aTitle,html.theme .modal .action.cna a.button.hl-cna .aTitle{color:var(--theme-disabled)}html.theme .main .content .action.cna .off,html.theme .main .content .action.cna .on,html.theme .main .content .action.cna .special,html.theme .modal .action.cna .off,html.theme .modal .action.cna .on,html.theme .modal .action.cna .special{border-color:var(--theme-special-on-off-border)}html.theme .main .content .action.cna .oldTech span.aTitle,html.theme .modal .action.cna .oldTech span.aTitle{color:var(--theme-oldTech)}html.theme .main .content .action.cnam span.aTitle,html.theme .modal .action.cnam span.aTitle{color:var(--theme-cnam-aTitle)}html.theme .main .content .enemyFortress{background-color:var(--theme-button-background)}html.theme .main .content .green,html.theme .main .content .synth{box-shadow:0 0 6px var(--theme-has-text-success)}html.theme .main .content .green>span,html.theme .main .content .synth>span{text-shadow:1px 1px var(--theme-has-text-success)}html.theme .main .content .red{box-shadow:0 0 6px var(--theme-has-text-danger)}html.theme .main .content .red>span{text-shadow:1px 1px var(--theme-has-text-danger)}html.theme .main .content .yellow{box-shadow:0 0 6px var(--theme-has-text-warning)}html.theme .main .content .yellow>span{text-shadow:1px 1px var(--theme-has-text-warning)}html.theme .main .content .orange{box-shadow:0 0 6px var(--theme-has-text-caution)}html.theme .main .content .orange>span{text-shadow:1px 1px var(--theme-has-text-caution)}html.theme .main .content .purple{box-shadow:0 0 6px var(--theme-has-text-special)}html.theme .main .content .purple>span{text-shadow:1px 1px var(--theme-has-text-special)}html.theme .main .content .blue,html.theme .main .content .precog{box-shadow:0 0 6px var(--theme-has-text-info)}html.theme .main .content .blue>span,html.theme .main .content .precog>span{text-shadow:1px 1px var(--theme-has-text-info)}html.theme .main .content .cna .precog>span{text-shadow:none}html.theme .main .garrison .header,html.theme .main .government .header{border-bottom:.0625rem solid var(--theme-secondary-border)}html.theme .main .market-header{border-bottom:var(--theme-secondary-border) solid 1px}html.theme .main .galaxyTrade{border-top:var(--theme-secondary-border) solid 1px}html.theme .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.theme .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.theme .powerGrid .circuit.inactive{display:none}html.theme .powerGrid .circuit>span{display:inline-block}html.theme .powerGrid .circuit>span:first-child{width:1.5rem}html.theme .powerGrid .circuit .struct{width:12rem}html.theme .powerGrid .circuit .off,html.theme .powerGrid .circuit .on{min-width:2rem;text-align:center}html.theme .powerGrid .circuit .off{color:var(--theme-has-text-danger)}html.theme .powerGrid .circuit .on{color:var(--theme-has-text-success)}html.theme .gridHeader{border-top:var(--theme-secondary-border) solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.theme .powerGridHead{display:flex;justify-content:space-between}html.theme .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.theme .resetPowerGrid{margin-left:1rem;margin-top:.75rem}html.theme .resetPowerGrid .button{height:1.5rem}html.theme .fort .patrol .check{background-color:var(--theme-fort-patrol-check-background)}html.theme .market-item .order{border:var(--theme-primary-border) solid .0625rem;transition:all 200ms ease}html.theme .market-item .order:hover{border:var(--theme-market-item-order-hover-border) solid .0625rem;background-color:var(--theme-market-item-order-hover-background)}html.theme .market-item.prime,html.theme .resource.prime{background-color:transparent}html.theme .inactive-row,html.theme .market-item.alt,html.theme .resource.alt{background-color:var(--theme-market-item-background)}html.theme .market-item.showBar.prime,html.theme .resource.showBar.prime{background:linear-gradient(to right,transparent 0%,transparent var(--percent-full),#000 var(--percent-full),#000 100%)}html.theme .market-item.showBar.alt,html.theme .resource.showBar.alt{background:linear-gradient(to right,var(--theme-market-item-background) 0%,var(--theme-market-item-background) var(--percent-full),#000 var(--percent-full),#000 100%)}html.theme .resource .bar{cursor:pointer}html.theme .modal .actionSpace{background-color:var(--theme-html-background)}html.theme .modal-card-body,html.theme .modal-card-foot,html.theme .modal-card-head{background-color:var(--theme-modalBox-background)}html.theme .industry,html.theme .modalBox{background:var(--theme-modalBox-background)}html.theme .industry .divide,html.theme .industry .market-item,html.theme .industry .smelting,html.theme .modalBox .divide,html.theme .modalBox .market-item,html.theme .modalBox .smelting{border-top:var(--theme-secondary-border) solid .0625rem}html.theme .industry{background:0 0}html.theme .industry .header,html.theme .industry p,html.theme .modalBox p{border-bottom:var(--theme-secondary-border) solid .0625rem}html.theme .industry .avail span{margin:0 2.5rem 0 2.125rem}html.theme .govTask{margin-top:.25rem}html.theme .govTask .button{height:1.5rem;margin-left:.5rem}html.theme .fileImport,html.theme.redgreen{background-color:var(--theme-html-background)}html.theme .star1{fill:var(--theme-html-background)}html.theme .star1,html.theme .star1 path{stroke:var(--theme-star-2-fill)}html.theme .star1 path.bolden,html.theme.gruvboxDarkRG .star1 path.bolden,html.theme.redgreen .star1 path.bolden{stroke-width:8px}html.theme .star2{fill:var(--theme-star-2-fill)}html.theme .star3{fill:var(--theme-star-3-fill)}html.theme .star4{fill:var(--theme-star-4-fill)}html.theme .star5{fill:var(--theme-star-5-fill)}html.theme .refresh svg,html.theme.gruvboxDarkRG .refresh svg,html.theme.redgreen .refresh svg{fill:var(--theme-has-text-advanced)}html.theme .bldQueue::-webkit-scrollbar-track,html.theme .dropdown-content::-webkit-scrollbar-track,html.theme .hscroll::-webkit-scrollbar-track,html.theme .resTabs>.tabs::-webkit-scrollbar-track,html.theme .resTabs>section::-webkit-scrollbar-track,html.theme .sticky::-webkit-scrollbar-track,html.theme .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:var(--theme-webkit-scrollbar-background)}html.theme .bldQueue::-webkit-scrollbar,html.theme .dropdown-content::-webkit-scrollbar,html.theme .resTabs>.tabs::-webkit-scrollbar,html.theme .resTabs>section::-webkit-scrollbar,html.theme .sticky::-webkit-scrollbar,html.theme .vscroll::-webkit-scrollbar{width:6px;background-color:var(--theme-webkit-scrollbar-background)}html.theme .hscroll::-webkit-scrollbar{height:8px;background-color:var(--theme-webkit-scrollbar-background)}html.theme .bldQueue::-webkit-scrollbar-thumb,html.theme .dropdown-content::-webkit-scrollbar-thumb,html.theme .hscroll::-webkit-scrollbar-thumb,html.theme .resTabs>.tabs::-webkit-scrollbar-thumb,html.theme .resTabs>section::-webkit-scrollbar-thumb,html.theme .sticky::-webkit-scrollbar-thumb,html.theme .vscroll::-webkit-scrollbar-thumb{background-color:var(--theme-webkit-scrollbar-thumb-background)}@supports (scrollbar-color:auto){html.theme .bldQueue,html.theme .hscroll,html.theme .resTabs>.tabs,html.theme .resTabs>section,html.theme .sticky,html.theme .vscroll{scrollbar-color:var(--theme-webkit-scrollbar-thumb-background) var(--theme-webkit-scrollbar-background)}}html.theme .buttonList .is-selected{border-color:var(--theme-enabled)}html.theme.dark .pop-desc .has-text-caution{color:#a30500}html.theme.light body{font-weight:500}html.theme.light .button,html.theme.light .button:hover{border:solid .0625rem #000}html.theme.light .topBar .calendar .wi-thermometer-exterior{color:#00d6b2}html.theme.light .topBar .calendar .wi-day-sunny,html.theme.light .topBar .calendar .wi-day-windy{color:#fffb00}html.theme.light .topBar .calendar .wi-cloud,html.theme.light .topBar .calendar .wi-cloudy-gusts{color:#dfe2d3}html.theme.light .topBar .calendar .wi-rain,html.theme.light .topBar .calendar .wi-storm-showers{color:#00b0e6}html.theme.light .topBar .calendar .wi-snow,html.theme.light .topBar .calendar .wi-snow-wind{color:#fff}html.theme.light .main .content .action a.button span.count,html.theme.light .modal .action a.button span.count{border-bottom:.0625rem solid #000;border-left:.0625rem solid #000}html.theme.light .main .content .action.cna:not(.cnam) span.aTitle,html.theme.light .modal .action.cna:not(.cnam) span.aTitle{color:#282828}html.theme.light .industry{background:0 0}html.theme.light .industry .smelting{border-top:0}html.theme.light .industry .header{border-bottom:#4e4e4e solid .0625rem}html.theme.light .progress::-moz-progress-bar,html.theme.light .progress::-webkit-progress-value{background-color:#898989}html.theme.redgreen body,html.theme.redgreen h2,html.theme.redgreen h3{color:var(--theme-primary-color)}html.theme.gruvboxDarkRG a,html.theme.redgreen a{color:var(--theme-link)}html.theme.redgreen .button.has-text-advanced,html.theme.redgreen .has-text-advanced{color:var(--theme-has-text-advanced)}html.theme.redgreen .button.has-text-alert,html.theme.redgreen .has-text-alert{color:var(--theme-has-text-alert)}html.theme.redgreen .button.has-text-caution,html.theme.redgreen .has-text-caution{color:var(--theme-has-text-caution)}html.theme.redgreen .button.has-text-danger,html.theme.redgreen .has-text-danger{color:var(--theme-has-text-danger)}html.theme.redgreen .has-text-fade{color:var(--theme-has-text-fade)}html.theme.redgreen .has-text-flair{color:var(--theme-has-text-flair)}html.theme.redgreen .button.has-text-info,html.theme.redgreen .has-text-info{color:var(--theme-has-text-info)}html.theme.redgreen .has-text-label{color:var(--theme-has-text-label)}html.theme.redgreen .button.has-text-special,html.theme.redgreen .has-text-special{color:var(--theme-has-text-special)}html.theme.redgreen .button.has-text-success,html.theme.redgreen .has-text-success{color:var(--theme-has-text-success)}html.theme.redgreen .button.has-text-warning,html.theme.redgreen .has-text-warning,html.theme.redgreen .modal-card-head p{color:var(--theme-has-text-warning)}html.theme.redgreen .has-text-danger-pulse{color:var(--theme-has-text-warning);-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.theme.redgreen .challenge .simButton{border-color:var(--theme-has-text-success)}html.theme.redgreen .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.theme.redgreen .challenge .configList>div{margin:0 .25rem;width:10rem}html.theme.redgreen .popper .has-text-label{color:var(--theme-popper-has-text-label)}html.theme.redgreen .popper .has-text-success{color:var(--theme-popper-has-text-success)}html.theme.redgreen .popper .has-text-warning{color:var(--theme-popper-has-text-warning)}html.theme.redgreen .popper .divide-line{border-top:var(--theme-secondary-border) solid .0625rem}html.theme.redgreen .main>div.popper,html.theme.redgreen body .modal>div.popper{background-color:var(--theme-modal-child-popper-background);border:.0625rem solid var(--theme-modal-child-popper-border);color:var(--theme-popper)}html.theme.redgreen .main>div.popper>div,html.theme.redgreen body .modal>div.popper>div{border-top:solid .0625rem var(--theme-modal-child-popper-border)}html.theme.redgreen .main>div.popper>div:first-child,html.theme.redgreen body .modal>div.popper>div:first-child{border-top:none}html.theme.redgreen .main>div.popper .has-text-dark,html.theme.redgreen body .modal>div.popper .has-text-dark{color:var(--theme-popper)}html.theme.redgreen .main>div.popper .split,html.theme.redgreen body .modal>div.popper .split{display:flex}html.theme.redgreen .main>div.popper .split>div,html.theme.redgreen body .modal>div.popper .split>div{flex-wrap:nowrap}html.theme.redgreen .shipPopper .divider{border-bottom:solid .0625rem var(--theme-modal-child-popper-border)}html.theme.redgreen .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.theme.redgreen .sliderbar .b-slider{display:inline-block;width:80%}html.theme.redgreen .sliderbar .b-slider .b-slider-track{height:1rem}html.theme.redgreen .sliderbar .is-primary .b-slider-fill{background:var(--theme-has-text-success)}html.theme.redgreen .sliderbar.thin>span{bottom:.625rem}html.theme.redgreen .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.theme.gruvboxDarkRG body,html.theme.gruvboxDarkRG h2,html.theme.gruvboxDarkRG h3,html.theme.redgreen .msgQueueFilters span,html.theme.redgreen .tabs a{color:var(--theme-primary-color)}html.theme.redgreen .msgQueueFilters span.is-active,html.theme.redgreen .tabs li.is-active a{border-bottom-color:var(--theme-tabs-li-is-active-link-border);color:var(--theme-tabs-li-is-active-link)}html.theme.redgreen .msgQueueFilters span:hover,html.theme.redgreen .tabs a:hover{border-bottom-color:var(--theme-link-hover);color:var(--theme-link-hover)}html.theme.redgreen .button{background-color:var(--theme-button-background);color:var(--theme-button)}html.theme.redgreen .button.is-light{background-color:var(--theme-primary-color)}html.theme.redgreen .button.is-hovered,html.theme.redgreen .button:hover{background-color:var(--theme-button-hover-background);color:var(--theme-link-hover)}html.theme.redgreen .button.is-focused,html.theme.redgreen .button:focus{border-color:var(--theme-button-focus-border)}html.theme.redgreen .basic-button{border:var(--theme-primary-border) solid .0625rem}html.theme.redgreen .basic-button:hover{border:var(--theme-basic-button-border-hover) solid .0625rem;background-color:var(--theme-basic-button-border-hover-background)}html.theme.redgreen .text-button:hover{cursor:pointer;color:var(--theme-link-hover);text-decoration:underline}html.theme.redgreen .label{color:var(--theme-label)}html.theme.redgreen .checkbox:hover,html.theme.redgreen .radio:hover{color:var(--theme-checkbox-hover)}html.theme.redgreen .dropdown-content{background-color:var(--theme-dropdown-content-background)}html.theme.redgreen .b-tooltip.is-right:before{border-right:5px solid var(--theme-b-tooltip-accent)}html.theme.redgreen .b-tooltip.is-left:before{border-left:5px solid var(--theme-b-tooltip-accent)}html.theme.redgreen .b-tooltip.is-bottom:before{border-bottom:5px solid var(--theme-b-tooltip-accent)}html.theme.redgreen .b-tooltip.is-primary .tooltip-content{background:var(--theme-b-tooltip-is-primary-background);border:.0625rem solid var(--theme-b-tooltip-is-primary-border);color:var(--theme-b-tooltip-is-primary)}html.theme.redgreen .add,html.theme.redgreen .sub{border:var(--theme-primary-border) solid .0625rem;transition:all 200ms ease}html.theme.redgreen .add:hover,html.theme.redgreen .sub:hover{background-color:var(--theme-button-hover-background);color:var(--theme-link-hover)}html.theme.redgreen .current{border-top:var(--theme-primary-border) solid .0625rem;border-bottom:var(--theme-primary-border) solid .0625rem}html.theme.redgreen .current.infoOnly{border:var(--theme-primary-border) solid .0625rem}html.theme.redgreen #mobileNav,html.theme.redgreen .promoBar,html.theme.redgreen .topBar{background-color:var(--theme-bars-background)}html.theme.redgreen .pause,html.theme.redgreen .play{display:inline-block;position:relative;cursor:pointer;-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}html.theme.redgreen .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid var(--theme-has-text-success);border-bottom:.25rem solid transparent}html.theme.redgreen .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid var(--theme-has-text-danger);border-left:.125rem solid var(--theme-has-text-danger)}html.theme.redgreen .meter.low{color:var(--theme-meter-low)}html.theme.redgreen .meter.neutral{color:var(--theme-meter-neutral)}html.theme.redgreen .meter.high{color:var(--theme-meter-high)}html.theme.redgreen .buildList .hl-ca,html.theme.redgreen .main .content .action a.button.hl-ca .aTitle,html.theme.redgreen .modal .action a.button.hl-ca .aTitle{color:var(--theme-enabled)}html.theme.redgreen .buildList .hl-cna,html.theme.redgreen .main .content .action a.button.hl-cna .aTitle,html.theme.redgreen .modal .action a.button.hl-cna .aTitle{color:var(--theme-disabled)}html.theme.redgreen .graphContainer span.special .gear,html.theme.redgreen .main .content .action div.special .gear,html.theme.redgreen .modal .action div.special .gear,html.theme.redgreen .msgQueue span.special .gear{fill:var(--theme-div-special-gear-fill)}html.theme.gruvboxDarkRG .main .content .action a.button span.count,html.theme.gruvboxDarkRG .main .content .divider h2,html.theme.gruvboxDarkRG .modal .action a.button span.count,html.theme.orangeSoda .modal .action a.button span.count,html.theme.redgreen .main .content .action a.button span.count,html.theme.redgreen .main .content .divider h2,html.theme.redgreen .modal .action a.button span.count{background:var(--theme-html-background)}html.theme.redgreen .main .content .action div.special,html.theme.redgreen .modal .action div.special{background:var(--theme-html-background);border:.0625rem solid var(--theme-div-special-border)}html.theme.redgreen .main .content .action div.special:hover,html.theme.redgreen .modal .action div.special:hover{border:.0625rem solid var(--theme-div-special-hover-border)}html.theme.gruvboxDarkRG .graphContainer span.special:hover .gear,html.theme.gruvboxDarkRG .msgQueue span.special:hover .gear,html.theme.redgreen .main .content .action div.special:hover .gear,html.theme.redgreen .modal .action div.special:hover .gear{fill:var(--theme-div-special-hover-gear-fill)}html.theme.redgreen .main .content .action span.on,html.theme.redgreen .modal .action span.on{background:var(--theme-html-background);border:.0625rem solid var(--theme-span-on-border);color:var(--theme-span-on)}html.theme.redgreen .main .content .action span.on.altwarn,html.theme.redgreen .main .content .action span.on.warn,html.theme.redgreen .modal .action span.on.altwarn,html.theme.redgreen .modal .action span.on.warn{color:var(--theme-span-on-warn)}html.theme.redgreen .main .content .action span.off,html.theme.redgreen .modal .action span.off{background:var(--theme-html-background);border:.0625rem solid var(--theme-span-off-border);color:var(--theme-span-off)}html.theme.redgreen .main .content .action span.off:hover,html.theme.redgreen .main .content .action span.on:hover,html.theme.redgreen .modal .action span.off:hover,html.theme.redgreen .modal .action span.on:hover{border:.0625rem solid var(--theme-span-on-off-hover-border)}html.theme.redgreen .main .content .action.hl .button,html.theme.redgreen .modal .action.hl .button{border:solid 1px var(--theme-hl-button-border)}html.theme.redgreen .main .content .action.cna a.button.hl-ca .aTitle,html.theme.redgreen .modal .action.cna a.button.hl-ca .aTitle{color:var(--theme-enabled)}html.theme.redgreen .main .content .action.cna a.button.hl-cna .aTitle,html.theme.redgreen .modal .action.cna a.button.hl-cna .aTitle{color:var(--theme-disabled)}html.theme.redgreen .main .content .action.cna .off,html.theme.redgreen .main .content .action.cna .on,html.theme.redgreen .main .content .action.cna .special,html.theme.redgreen .modal .action.cna .off,html.theme.redgreen .modal .action.cna .on,html.theme.redgreen .modal .action.cna .special{border-color:var(--theme-special-on-off-border)}html.theme.redgreen .main .content .action.cna .oldTech span.aTitle,html.theme.redgreen .modal .action.cna .oldTech span.aTitle{color:var(--theme-oldTech)}html.theme.redgreen .main .content .action.cnam span.aTitle,html.theme.redgreen .modal .action.cnam span.aTitle{color:var(--theme-cnam-aTitle)}html.theme.redgreen .main .content .enemyFortress{background-color:var(--theme-button-background)}html.theme.redgreen .main .content .green,html.theme.redgreen .main .content .synth{box-shadow:0 0 6px var(--theme-has-text-success)}html.theme.redgreen .main .content .green>span,html.theme.redgreen .main .content .synth>span{text-shadow:1px 1px var(--theme-has-text-success)}html.theme.redgreen .main .content .red{box-shadow:0 0 6px var(--theme-has-text-danger)}html.theme.redgreen .main .content .red>span{text-shadow:1px 1px var(--theme-has-text-danger)}html.theme.redgreen .main .content .yellow{box-shadow:0 0 6px var(--theme-has-text-warning)}html.theme.redgreen .main .content .yellow>span{text-shadow:1px 1px var(--theme-has-text-warning)}html.theme.redgreen .main .content .orange{box-shadow:0 0 6px var(--theme-has-text-caution)}html.theme.redgreen .main .content .orange>span{text-shadow:1px 1px var(--theme-has-text-caution)}html.theme.redgreen .main .content .purple{box-shadow:0 0 6px var(--theme-has-text-special)}html.theme.redgreen .main .content .purple>span{text-shadow:1px 1px var(--theme-has-text-special)}html.theme.redgreen .main .content .blue,html.theme.redgreen .main .content .precog{box-shadow:0 0 6px var(--theme-has-text-info)}html.theme.redgreen .main .content .blue>span,html.theme.redgreen .main .content .precog>span{text-shadow:1px 1px var(--theme-has-text-info)}html.theme.redgreen .main .content .cna .precog>span{text-shadow:none}html.theme.redgreen .main .garrison .header,html.theme.redgreen .main .government .header{border-bottom:.0625rem solid var(--theme-secondary-border)}html.theme.redgreen .main .market-header{border-bottom:var(--theme-secondary-border) solid 1px}html.theme.redgreen .main .galaxyTrade{border-top:var(--theme-secondary-border) solid 1px}html.theme.redgreen .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.theme.redgreen .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.theme.redgreen .powerGrid .circuit.inactive{display:none}html.theme.redgreen .powerGrid .circuit>span{display:inline-block}html.theme.redgreen .powerGrid .circuit>span:first-child{width:1.5rem}html.theme.redgreen .powerGrid .circuit .struct{width:12rem}html.theme.redgreen .powerGrid .circuit .off,html.theme.redgreen .powerGrid .circuit .on{min-width:2rem;text-align:center}html.theme.redgreen .powerGrid .circuit .off{color:var(--theme-has-text-danger)}html.theme.redgreen .powerGrid .circuit .on{color:var(--theme-has-text-success)}html.theme.redgreen .gridHeader{border-top:var(--theme-secondary-border) solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.theme.redgreen .powerGridHead{display:flex;justify-content:space-between}html.theme.redgreen .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.theme.redgreen .resetPowerGrid{margin-left:1rem;margin-top:.75rem}html.theme.redgreen .resetPowerGrid .button{height:1.5rem}html.theme.redgreen .fort .patrol .check{background-color:var(--theme-fort-patrol-check-background)}html.theme.redgreen .market-item .order{border:var(--theme-primary-border) solid .0625rem;transition:all 200ms ease}html.theme.redgreen .market-item .order:hover{border:var(--theme-market-item-order-hover-border) solid .0625rem;background-color:var(--theme-market-item-order-hover-background)}html.theme.redgreen .market-item.prime,html.theme.redgreen .resource.prime{background-color:transparent}html.theme.redgreen .inactive-row,html.theme.redgreen .market-item.alt,html.theme.redgreen .resource.alt{background-color:var(--theme-market-item-background)}html.theme.redgreen .market-item.showBar.prime,html.theme.redgreen .resource.showBar.prime{background:linear-gradient(to right,transparent 0%,transparent var(--percent-full),#000 var(--percent-full),#000 100%)}html.theme.redgreen .market-item.showBar.alt,html.theme.redgreen .resource.showBar.alt{background:linear-gradient(to right,var(--theme-market-item-background) 0%,var(--theme-market-item-background) var(--percent-full),#000 var(--percent-full),#000 100%)}html.theme.redgreen .resource .bar{cursor:pointer}html.theme.redgreen .modal .actionSpace{background-color:var(--theme-html-background)}html.theme.redgreen .modal-card-body,html.theme.redgreen .modal-card-foot,html.theme.redgreen .modal-card-head{background-color:var(--theme-modalBox-background)}html.theme.redgreen .industry,html.theme.redgreen .modalBox{background:var(--theme-modalBox-background)}html.theme.redgreen .industry .divide,html.theme.redgreen .industry .market-item,html.theme.redgreen .industry .smelting,html.theme.redgreen .modalBox .divide,html.theme.redgreen .modalBox .market-item,html.theme.redgreen .modalBox .smelting{border-top:var(--theme-secondary-border) solid .0625rem}html.theme.redgreen .industry{background:0 0}html.theme.redgreen .industry .header,html.theme.redgreen .industry p,html.theme.redgreen .modalBox p{border-bottom:var(--theme-secondary-border) solid .0625rem}html.theme.redgreen .industry .avail span{margin:0 2.5rem 0 2.125rem}html.theme.redgreen .govTask{margin-top:.25rem}html.theme.redgreen .govTask .button{height:1.5rem;margin-left:.5rem}html.theme.gruvboxDarkRG,html.theme.redgreen .fileImport{background-color:var(--theme-html-background)}html.theme.redgreen .star1{fill:var(--theme-html-background)}html.theme.gruvboxDarkRG .star1 path,html.theme.redgreen .star1,html.theme.redgreen .star1 path{stroke:var(--theme-star-2-fill)}html.theme.redgreen .star2{fill:var(--theme-star-2-fill)}html.theme.redgreen .star3{fill:var(--theme-star-3-fill)}html.theme.redgreen .star4{fill:var(--theme-star-4-fill)}html.theme.redgreen .star5{fill:var(--theme-star-5-fill)}html.theme.redgreen .bldQueue::-webkit-scrollbar-track,html.theme.redgreen .dropdown-content::-webkit-scrollbar-track,html.theme.redgreen .hscroll::-webkit-scrollbar-track,html.theme.redgreen .resTabs>.tabs::-webkit-scrollbar-track,html.theme.redgreen .resTabs>section::-webkit-scrollbar-track,html.theme.redgreen .sticky::-webkit-scrollbar-track,html.theme.redgreen .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:var(--theme-webkit-scrollbar-background)}html.theme.redgreen .bldQueue::-webkit-scrollbar,html.theme.redgreen .dropdown-content::-webkit-scrollbar,html.theme.redgreen .resTabs>.tabs::-webkit-scrollbar,html.theme.redgreen .resTabs>section::-webkit-scrollbar,html.theme.redgreen .sticky::-webkit-scrollbar,html.theme.redgreen .vscroll::-webkit-scrollbar{width:6px;background-color:var(--theme-webkit-scrollbar-background)}html.theme.redgreen .hscroll::-webkit-scrollbar{height:8px;background-color:var(--theme-webkit-scrollbar-background)}html.theme.redgreen .bldQueue::-webkit-scrollbar-thumb,html.theme.redgreen .dropdown-content::-webkit-scrollbar-thumb,html.theme.redgreen .hscroll::-webkit-scrollbar-thumb,html.theme.redgreen .resTabs>.tabs::-webkit-scrollbar-thumb,html.theme.redgreen .resTabs>section::-webkit-scrollbar-thumb,html.theme.redgreen .sticky::-webkit-scrollbar-thumb,html.theme.redgreen .vscroll::-webkit-scrollbar-thumb{background-color:var(--theme-webkit-scrollbar-thumb-background)}@supports (scrollbar-color:auto){html.theme.redgreen .bldQueue,html.theme.redgreen .hscroll,html.theme.redgreen .resTabs>.tabs,html.theme.redgreen .resTabs>section,html.theme.redgreen .sticky,html.theme.redgreen .vscroll{scrollbar-color:var(--theme-webkit-scrollbar-thumb-background) var(--theme-webkit-scrollbar-background)}}html.theme.redgreen .buttonList .is-selected{border-color:var(--theme-enabled)}html.theme.redgreen .main>div.popper .has-text-danger,html.theme.redgreen body .modal>div.popper .has-text-danger{color:#a0a}html.theme.redgreen #powerStatus .has-text-warning{color:#90c}html.theme.redgreen .trade .has-text-danger{color:#a0f}html.theme.redgreen .trade .has-text-warning{color:#fff}html.theme.redgreen .topBar .calendar .wi-thermometer-exterior{color:#00e6d2}html.theme.redgreen .topBar .calendar .wi-thermometer{color:#fffb00}html.theme.redgreen .mad{background:repeating-linear-gradient(45deg,#8a8b49,#8a8b49 10px,#000 10px,#000 20px)}html.theme.redgreen .armed .mad{background:repeating-linear-gradient(45deg,#fbfd84,#fbfd84 10px,#000 10px,#000 20px)}html.theme.darkNight input,html.theme.darkNight select,html.theme.darkNight textarea{background:var(--theme-primary-color)}html.theme.gruvboxLight .notification,html.theme.gruvboxLight input,html.theme.gruvboxLight select,html.theme.gruvboxLight textarea{background:var(--theme-secondary-color)}html.theme.gruvboxDark .notification,html.theme.gruvboxDark input,html.theme.gruvboxDark select,html.theme.gruvboxDark textarea{background:var(--theme-primary-color)}html.theme.gruvboxDark .add,html.theme.gruvboxDark .current.infoOnly,html.theme.gruvboxDark .sub{border:var(--theme-secondary-border) solid .0625rem}html.theme.gruvboxDark .current{border-top:var(--theme-secondary-border) solid .0625rem;border-bottom:var(--theme-secondary-border) solid .0625rem}html.theme.gruvboxDarkRG .button.has-text-advanced,html.theme.gruvboxDarkRG .has-text-advanced{color:var(--theme-has-text-advanced)}html.theme.gruvboxDarkRG .button.has-text-alert,html.theme.gruvboxDarkRG .has-text-alert{color:var(--theme-has-text-alert)}html.theme.gruvboxDarkRG .button.has-text-caution,html.theme.gruvboxDarkRG .has-text-caution{color:var(--theme-has-text-caution)}html.theme.gruvboxDarkRG .button.has-text-danger,html.theme.gruvboxDarkRG .has-text-danger{color:var(--theme-has-text-danger)}html.theme.gruvboxDarkRG .has-text-fade{color:var(--theme-has-text-fade)}html.theme.gruvboxDarkRG .has-text-flair{color:var(--theme-has-text-flair)}html.theme.gruvboxDarkRG .button.has-text-info,html.theme.gruvboxDarkRG .has-text-info{color:var(--theme-has-text-info)}html.theme.gruvboxDarkRG .has-text-label{color:var(--theme-has-text-label)}html.theme.gruvboxDarkRG .button.has-text-special,html.theme.gruvboxDarkRG .has-text-special{color:var(--theme-has-text-special)}html.theme.gruvboxDarkRG .button.has-text-success,html.theme.gruvboxDarkRG .has-text-success{color:var(--theme-has-text-success)}html.theme.gruvboxDarkRG .button.has-text-warning,html.theme.gruvboxDarkRG .has-text-warning,html.theme.gruvboxDarkRG .modal-card-head p{color:var(--theme-has-text-warning)}html.theme.gruvboxDarkRG .has-text-danger-pulse{color:var(--theme-has-text-warning);-webkit-animation:color-change 5s infinite;-moz-animation:color-change 5s infinite;-o-animation:color-change 5s infinite;-ms-animation:color-change 5s infinite;animation:color-change 5s infinite}html.theme.gruvboxDarkRG .challenge .simButton{border-color:var(--theme-has-text-success)}html.theme.gruvboxDarkRG .challenge .configList{display:flex;flex-flow:wrap;justify-content:space-around}html.theme.gruvboxDarkRG .challenge .configList>div{margin:0 .25rem;width:10rem}html.theme.gruvboxDarkRG .popper .has-text-label{color:var(--theme-popper-has-text-label)}html.theme.gruvboxDarkRG .popper .has-text-success{color:var(--theme-popper-has-text-success)}html.theme.gruvboxDarkRG .popper .has-text-warning{color:var(--theme-popper-has-text-warning)}html.theme.gruvboxDarkRG .popper .divide-line{border-top:var(--theme-secondary-border) solid .0625rem}html.theme.gruvboxDarkRG .main>div.popper,html.theme.gruvboxDarkRG body .modal>div.popper{background-color:var(--theme-modal-child-popper-background);border:.0625rem solid var(--theme-modal-child-popper-border);color:var(--theme-popper)}html.theme.gruvboxDarkRG .main>div.popper>div,html.theme.gruvboxDarkRG body .modal>div.popper>div{border-top:solid .0625rem var(--theme-modal-child-popper-border)}html.theme.gruvboxDarkRG .main>div.popper>div:first-child,html.theme.gruvboxDarkRG body .modal>div.popper>div:first-child{border-top:none}html.theme.gruvboxDarkRG .main>div.popper .has-text-dark,html.theme.gruvboxDarkRG body .modal>div.popper .has-text-dark{color:var(--theme-popper)}html.theme.gruvboxDarkRG .main>div.popper .split,html.theme.gruvboxDarkRG body .modal>div.popper .split{display:flex}html.theme.gruvboxDarkRG .main>div.popper .split>div,html.theme.gruvboxDarkRG body .modal>div.popper .split>div{flex-wrap:nowrap}html.theme.gruvboxDarkRG .shipPopper .divider{border-bottom:solid .0625rem var(--theme-modal-child-popper-border)}html.theme.gruvboxDarkRG .sliderbar>span{position:relative;display:inline-block;width:5%;bottom:1.125rem;margin:0 .375rem}html.theme.gruvboxDarkRG .sliderbar .b-slider{display:inline-block;width:80%}.ShipYardTab #shipList .compact button,html.theme.gruvboxDarkRG .sliderbar .b-slider .b-slider-track{height:1rem}html.theme.gruvboxDarkRG .sliderbar .is-primary .b-slider-fill{background:var(--theme-has-text-success)}html.theme.gruvboxDarkRG .sliderbar.thin>span{bottom:.625rem}html.theme.gruvboxDarkRG .sliderbar.thin .b-slider{margin-top:.5rem;margin-bottom:.5rem}html.theme.gruvboxDarkRG .msgQueueFilters span,html.theme.gruvboxDarkRG .tabs a{color:var(--theme-primary-color)}html.theme.gruvboxDarkRG .msgQueueFilters span.is-active,html.theme.gruvboxDarkRG .tabs li.is-active a{border-bottom-color:var(--theme-tabs-li-is-active-link-border);color:var(--theme-tabs-li-is-active-link)}html.theme.gruvboxDarkRG .msgQueueFilters span:hover,html.theme.gruvboxDarkRG .tabs a:hover{border-bottom-color:var(--theme-link-hover);color:var(--theme-link-hover)}html.theme.gruvboxDarkRG .button{background-color:var(--theme-button-background);color:var(--theme-button)}html.theme.gruvboxDarkRG .button.is-light{background-color:var(--theme-primary-color)}html.theme.gruvboxDarkRG .button.is-hovered,html.theme.gruvboxDarkRG .button:hover{background-color:var(--theme-button-hover-background);color:var(--theme-link-hover)}html.theme.gruvboxDarkRG .button.is-focused,html.theme.gruvboxDarkRG .button:focus{border-color:var(--theme-button-focus-border)}html.theme.gruvboxDarkRG .basic-button{border:var(--theme-primary-border) solid .0625rem}html.theme.gruvboxDarkRG .basic-button:hover{border:var(--theme-basic-button-border-hover) solid .0625rem;background-color:var(--theme-basic-button-border-hover-background)}html.theme.gruvboxDarkRG .text-button:hover{cursor:pointer;color:var(--theme-link-hover);text-decoration:underline}html.theme.gruvboxDarkRG .label{color:var(--theme-label)}html.theme.gruvboxDarkRG .checkbox:hover,html.theme.gruvboxDarkRG .radio:hover{color:var(--theme-checkbox-hover)}html.theme.gruvboxDarkRG .dropdown-content{background-color:var(--theme-dropdown-content-background)}html.theme.gruvboxDarkRG .b-tooltip.is-right:before{border-right:5px solid var(--theme-b-tooltip-accent)}html.theme.gruvboxDarkRG .b-tooltip.is-left:before{border-left:5px solid var(--theme-b-tooltip-accent)}html.theme.gruvboxDarkRG .b-tooltip.is-bottom:before{border-bottom:5px solid var(--theme-b-tooltip-accent)}html.theme.gruvboxDarkRG .b-tooltip.is-primary .tooltip-content{background:var(--theme-b-tooltip-is-primary-background);border:.0625rem solid var(--theme-b-tooltip-is-primary-border);color:var(--theme-b-tooltip-is-primary)}html.theme.gruvboxDarkRG .add,html.theme.gruvboxDarkRG .sub{transition:all 200ms ease}html.theme.gruvboxDarkRG .add:hover,html.theme.gruvboxDarkRG .sub:hover{background-color:var(--theme-button-hover-background);color:var(--theme-link-hover)}html.theme.gruvboxDarkRG #mobileNav,html.theme.gruvboxDarkRG .promoBar,html.theme.gruvboxDarkRG .topBar{background-color:var(--theme-bars-background)}html.theme.gruvboxDarkRG .pause,html.theme.gruvboxDarkRG .play{display:inline-block;position:relative;cursor:pointer;-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}html.theme.gruvboxDarkRG .play{bottom:.125rem;width:0;height:0;border-top:.25rem solid transparent;border-left:.375rem solid var(--theme-has-text-success);border-bottom:.25rem solid transparent}html.theme.gruvboxDarkRG .pause{box-sizing:content-box;bottom:.0625rem;width:.125rem;height:.625rem;border-right:.125rem solid var(--theme-has-text-danger);border-left:.125rem solid var(--theme-has-text-danger)}html.theme.gruvboxDarkRG .meter.low{color:var(--theme-meter-low)}html.theme.gruvboxDarkRG .meter.neutral{color:var(--theme-meter-neutral)}html.theme.gruvboxDarkRG .meter.high{color:var(--theme-meter-high)}html.theme.gruvboxDarkRG .buildList .hl-ca,html.theme.gruvboxDarkRG .main .content .action a.button.hl-ca .aTitle,html.theme.gruvboxDarkRG .modal .action a.button.hl-ca .aTitle{color:var(--theme-enabled)}html.theme.gruvboxDarkRG .buildList .hl-cna,html.theme.gruvboxDarkRG .main .content .action a.button.hl-cna .aTitle,html.theme.gruvboxDarkRG .modal .action a.button.hl-cna .aTitle{color:var(--theme-disabled)}html.theme.gruvboxDarkRG .graphContainer span.special .gear,html.theme.gruvboxDarkRG .main .content .action div.special .gear,html.theme.gruvboxDarkRG .modal .action div.special .gear,html.theme.gruvboxDarkRG .msgQueue span.special .gear,html.theme.orangeSoda .modal .action div.special .gear{fill:var(--theme-div-special-gear-fill)}html.theme.gruvboxDarkRG .main .content .action div.special,html.theme.gruvboxDarkRG .modal .action div.special,html.theme.orangeSoda .modal .action div.special{background:var(--theme-html-background);border:.0625rem solid var(--theme-div-special-border)}html.theme.gruvboxDarkRG .main .content .action div.special:hover,html.theme.gruvboxDarkRG .modal .action div.special:hover,html.theme.orangeSoda .modal .action div.special:hover{border:.0625rem solid var(--theme-div-special-hover-border)}html.theme.gruvboxDarkRG .main .content .action div.special:hover .gear,html.theme.gruvboxDarkRG .modal .action div.special:hover .gear{fill:var(--theme-div-special-hover-gear-fill)}html.theme.gruvboxDarkRG .main .content .action span.on,html.theme.gruvboxDarkRG .modal .action span.on{background:var(--theme-html-background);border:.0625rem solid var(--theme-span-on-border);color:var(--theme-span-on)}html.theme.gruvboxDarkRG .main .content .action span.on.altwarn,html.theme.gruvboxDarkRG .main .content .action span.on.warn,html.theme.gruvboxDarkRG .modal .action span.on.altwarn,html.theme.gruvboxDarkRG .modal .action span.on.warn{color:var(--theme-span-on-warn)}html.theme.gruvboxDarkRG .main .content .action span.off,html.theme.gruvboxDarkRG .modal .action span.off{background:var(--theme-html-background);border:.0625rem solid var(--theme-span-off-border);color:var(--theme-span-off)}html.theme.gruvboxDarkRG .main .content .action span.off:hover,html.theme.gruvboxDarkRG .main .content .action span.on:hover,html.theme.gruvboxDarkRG .modal .action span.off:hover,html.theme.gruvboxDarkRG .modal .action span.on:hover{border:.0625rem solid var(--theme-span-on-off-hover-border)}html.theme.gruvboxDarkRG .main .content .action.hl .button,html.theme.gruvboxDarkRG .modal .action.hl .button{border:solid 1px var(--theme-hl-button-border)}html.theme.gruvboxDarkRG .main .content .action.cna a.button.hl-ca .aTitle,html.theme.gruvboxDarkRG .modal .action.cna a.button.hl-ca .aTitle,html.theme.orangeSoda .modal .action a.button.hl-ca .aTitle{color:var(--theme-enabled)}html.theme.gruvboxDarkRG .main .content .action.cna a.button.hl-cna .aTitle,html.theme.gruvboxDarkRG .modal .action.cna a.button.hl-cna .aTitle,html.theme.orangeSoda .modal .action a.button.hl-cna .aTitle{color:var(--theme-disabled)}html.theme.gruvboxDarkRG .main .content .action.cna .off,html.theme.gruvboxDarkRG .main .content .action.cna .on,html.theme.gruvboxDarkRG .main .content .action.cna .special,html.theme.gruvboxDarkRG .modal .action.cna .off,html.theme.gruvboxDarkRG .modal .action.cna .on,html.theme.gruvboxDarkRG .modal .action.cna .special{border-color:var(--theme-special-on-off-border)}html.theme.gruvboxDarkRG .main .content .action.cna .oldTech span.aTitle,html.theme.gruvboxDarkRG .modal .action.cna .oldTech span.aTitle{color:var(--theme-oldTech)}html.theme.gruvboxDarkRG .main .content .action.cnam span.aTitle,html.theme.gruvboxDarkRG .modal .action.cnam span.aTitle{color:var(--theme-cnam-aTitle)}html.theme.gruvboxDarkRG .main .content .enemyFortress{background-color:var(--theme-button-background)}html.theme.gruvboxDarkRG .main .content .green,html.theme.gruvboxDarkRG .main .content .synth{box-shadow:0 0 6px var(--theme-has-text-success)}html.theme.gruvboxDarkRG .main .content .green>span,html.theme.gruvboxDarkRG .main .content .synth>span{text-shadow:1px 1px var(--theme-has-text-success)}html.theme.gruvboxDarkRG .main .content .red{box-shadow:0 0 6px var(--theme-has-text-danger)}html.theme.gruvboxDarkRG .main .content .red>span{text-shadow:1px 1px var(--theme-has-text-danger)}html.theme.gruvboxDarkRG .main .content .yellow{box-shadow:0 0 6px var(--theme-has-text-warning)}html.theme.gruvboxDarkRG .main .content .yellow>span{text-shadow:1px 1px var(--theme-has-text-warning)}html.theme.gruvboxDarkRG .main .content .orange{box-shadow:0 0 6px var(--theme-has-text-caution)}html.theme.gruvboxDarkRG .main .content .orange>span{text-shadow:1px 1px var(--theme-has-text-caution)}html.theme.gruvboxDarkRG .main .content .purple{box-shadow:0 0 6px var(--theme-has-text-special)}html.theme.gruvboxDarkRG .main .content .purple>span{text-shadow:1px 1px var(--theme-has-text-special)}html.theme.gruvboxDarkRG .main .content .blue,html.theme.gruvboxDarkRG .main .content .precog{box-shadow:0 0 6px var(--theme-has-text-info)}html.theme.gruvboxDarkRG .main .content .blue>span,html.theme.gruvboxDarkRG .main .content .precog>span{text-shadow:1px 1px var(--theme-has-text-info)}html.theme.gruvboxDarkRG .main .content .cna .precog>span{text-shadow:none}html.theme.gruvboxDarkRG .main .garrison .header,html.theme.gruvboxDarkRG .main .government .header{border-bottom:.0625rem solid var(--theme-secondary-border)}html.theme.gruvboxDarkRG .main .market-header{border-bottom:var(--theme-secondary-border) solid 1px}html.theme.gruvboxDarkRG .main .galaxyTrade{border-top:var(--theme-secondary-border) solid 1px}html.theme.gruvboxDarkRG .powerGrid{display:flex;flex-wrap:wrap;margin-left:1rem}html.theme.gruvboxDarkRG .powerGrid .circuit{min-width:18.5rem;cursor:pointer}html.theme.gruvboxDarkRG .powerGrid .circuit.inactive{display:none}html.theme.gruvboxDarkRG .powerGrid .circuit>span{display:inline-block}html.theme.gruvboxDarkRG .powerGrid .circuit>span:first-child{width:1.5rem}html.theme.gruvboxDarkRG .powerGrid .circuit .struct{width:12rem}html.theme.gruvboxDarkRG .powerGrid .circuit .off,html.theme.gruvboxDarkRG .powerGrid .circuit .on{min-width:2rem;text-align:center}html.theme.gruvboxDarkRG .powerGrid .circuit .off{color:var(--theme-has-text-danger)}html.theme.gruvboxDarkRG .powerGrid .circuit .on{color:var(--theme-has-text-success)}html.theme.gruvboxDarkRG .gridHeader{border-top:var(--theme-secondary-border) solid .0625rem;margin:.25rem 0 .25rem 1rem;padding-top:.25rem}html.theme.gruvboxDarkRG .powerGridHead{display:flex;justify-content:space-between}html.theme.gruvboxDarkRG .powerGridHeader{margin-left:1rem;margin-bottom:.5rem}html.theme.gruvboxDarkRG .resetPowerGrid{margin-left:1rem;margin-top:.75rem}.main .govOffice .options .storage .control input,html.theme.gruvboxDarkRG .resetPowerGrid .button{height:1.5rem}html.theme.gruvboxDarkRG .fort .patrol .check{background-color:var(--theme-fort-patrol-check-background)}html.theme.gruvboxDarkRG .market-item .order{border:var(--theme-primary-border) solid .0625rem;transition:all 200ms ease}html.theme.gruvboxDarkRG .market-item .order:hover{border:var(--theme-market-item-order-hover-border) solid .0625rem;background-color:var(--theme-market-item-order-hover-background)}html.theme.gruvboxDarkRG .market-item.prime,html.theme.gruvboxDarkRG .resource.prime{background-color:transparent}html.theme.gruvboxDarkRG .inactive-row,html.theme.gruvboxDarkRG .market-item.alt,html.theme.gruvboxDarkRG .resource.alt{background-color:var(--theme-market-item-background)}html.theme.gruvboxDarkRG .market-item.showBar.prime,html.theme.gruvboxDarkRG .resource.showBar.prime{background:linear-gradient(to right,transparent 0%,transparent var(--percent-full),#000 var(--percent-full),#000 100%)}html.theme.gruvboxDarkRG .market-item.showBar.alt,html.theme.gruvboxDarkRG .resource.showBar.alt{background:linear-gradient(to right,var(--theme-market-item-background) 0%,var(--theme-market-item-background) var(--percent-full),#000 var(--percent-full),#000 100%)}.main #msgQueueHeader .special,html.theme.gruvboxDarkRG .resource .bar{cursor:pointer}html.theme.gruvboxDarkRG .modal .actionSpace{background-color:var(--theme-html-background)}html.theme.gruvboxDarkRG .modal-card-body,html.theme.gruvboxDarkRG .modal-card-foot,html.theme.gruvboxDarkRG .modal-card-head{background-color:var(--theme-modalBox-background)}html.theme.gruvboxDarkRG .industry,html.theme.gruvboxDarkRG .modalBox{background:var(--theme-modalBox-background)}html.theme.gruvboxDarkRG .industry .divide,html.theme.gruvboxDarkRG .industry .market-item,html.theme.gruvboxDarkRG .industry .smelting,html.theme.gruvboxDarkRG .modalBox .divide,html.theme.gruvboxDarkRG .modalBox .market-item,html.theme.gruvboxDarkRG .modalBox .smelting{border-top:var(--theme-secondary-border) solid .0625rem}html.theme.gruvboxDarkRG .industry{background:0 0}html.theme.gruvboxDarkRG .industry .header,html.theme.gruvboxDarkRG .industry p,html.theme.gruvboxDarkRG .modalBox p{border-bottom:var(--theme-secondary-border) solid .0625rem}html.theme.gruvboxDarkRG .industry .avail span{margin:0 2.5rem 0 2.125rem}html.theme.gruvboxDarkRG .govTask{margin-top:.25rem}html.theme.gruvboxDarkRG .govTask .button{height:1.5rem;margin-left:.5rem}html.theme.gruvboxDarkRG .fileImport{background-color:var(--theme-html-background)}html.theme.gruvboxDarkRG .star1{fill:var(--theme-html-background);stroke:var(--theme-star-2-fill)}html.theme.gruvboxDarkRG .star2{fill:var(--theme-star-2-fill)}html.theme.gruvboxDarkRG .star3{fill:var(--theme-star-3-fill)}html.theme.gruvboxDarkRG .star4{fill:var(--theme-star-4-fill)}html.theme.gruvboxDarkRG .star5{fill:var(--theme-star-5-fill)}html.theme.gruvboxDarkRG .bldQueue::-webkit-scrollbar-track,html.theme.gruvboxDarkRG .dropdown-content::-webkit-scrollbar-track,html.theme.gruvboxDarkRG .hscroll::-webkit-scrollbar-track,html.theme.gruvboxDarkRG .resTabs>.tabs::-webkit-scrollbar-track,html.theme.gruvboxDarkRG .resTabs>section::-webkit-scrollbar-track,html.theme.gruvboxDarkRG .sticky::-webkit-scrollbar-track,html.theme.gruvboxDarkRG .vscroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:var(--theme-webkit-scrollbar-background)}html.theme.gruvboxDarkRG .bldQueue::-webkit-scrollbar,html.theme.gruvboxDarkRG .dropdown-content::-webkit-scrollbar,html.theme.gruvboxDarkRG .resTabs>.tabs::-webkit-scrollbar,html.theme.gruvboxDarkRG .resTabs>section::-webkit-scrollbar,html.theme.gruvboxDarkRG .sticky::-webkit-scrollbar,html.theme.gruvboxDarkRG .vscroll::-webkit-scrollbar{width:6px;background-color:var(--theme-webkit-scrollbar-background)}html.theme.gruvboxDarkRG .hscroll::-webkit-scrollbar{height:8px;background-color:var(--theme-webkit-scrollbar-background)}html.theme.gruvboxDarkRG .bldQueue::-webkit-scrollbar-thumb,html.theme.gruvboxDarkRG .dropdown-content::-webkit-scrollbar-thumb,html.theme.gruvboxDarkRG .hscroll::-webkit-scrollbar-thumb,html.theme.gruvboxDarkRG .resTabs>.tabs::-webkit-scrollbar-thumb,html.theme.gruvboxDarkRG .resTabs>section::-webkit-scrollbar-thumb,html.theme.gruvboxDarkRG .sticky::-webkit-scrollbar-thumb,html.theme.gruvboxDarkRG .vscroll::-webkit-scrollbar-thumb{background-color:var(--theme-webkit-scrollbar-thumb-background)}@supports (scrollbar-color:auto){html.theme.gruvboxDarkRG .bldQueue,html.theme.gruvboxDarkRG .hscroll,html.theme.gruvboxDarkRG .resTabs>.tabs,html.theme.gruvboxDarkRG .resTabs>section,html.theme.gruvboxDarkRG .sticky,html.theme.gruvboxDarkRG .vscroll{scrollbar-color:var(--theme-webkit-scrollbar-thumb-background) var(--theme-webkit-scrollbar-background)}}html.theme.gruvboxDarkRG .buttonList .is-selected{border-color:var(--theme-enabled)}html.theme.gruvboxDarkRG .notification,html.theme.gruvboxDarkRG input,html.theme.gruvboxDarkRG select,html.theme.gruvboxDarkRG textarea{background:var(--theme-primary-color)}html.theme.gruvboxDarkRG .add,html.theme.gruvboxDarkRG .current.infoOnly,html.theme.gruvboxDarkRG .sub{border:var(--theme-secondary-border) solid .0625rem}html.theme.gruvboxDarkRG .current{border-top:var(--theme-secondary-border) solid .0625rem;border-bottom:var(--theme-secondary-border) solid .0625rem}html.theme.orangeSoda .modal .action div.special:hover .gear{fill:var(--theme-div-special-hover-gear-fill)}html.theme.orangeSoda .modal .action span.on{background:var(--theme-html-background);border:.0625rem solid var(--theme-span-on-border);color:var(--theme-span-on)}html.theme.orangeSoda .modal .action span.on.altwarn,html.theme.orangeSoda .modal .action span.on.warn{color:var(--theme-span-on-warn)}html.theme.orangeSoda .modal .action span.off{background:var(--theme-html-background);border:.0625rem solid var(--theme-span-off-border);color:var(--theme-span-off)}html.theme.orangeSoda .modal .action span.off:hover,html.theme.orangeSoda .modal .action span.on:hover{border:.0625rem solid var(--theme-span-on-off-hover-border)}html.theme.orangeSoda .modal .action.hl .button{border:solid 1px var(--theme-hl-button-border)}html.theme.orangeSoda .has-text-info{color:#f09d51}html.theme.orangeSoda .pop-desc .has-text-caution{color:var(--theme-has-text-danger)}html.theme.dracula .notification,html.theme.dracula input,html.theme.dracula select,html.theme.dracula textarea,html.theme.orangeSoda .notification,html.theme.orangeSoda input,html.theme.orangeSoda select,html.theme.orangeSoda textarea{background:var(--theme-primary-color)}html.theme.dracula .add,html.theme.dracula .current.infoOnly,html.theme.dracula .sub{border:var(--theme-secondary-border) solid .0625rem}html.theme.dracula .current{border-top:var(--theme-secondary-border) solid .0625rem;border-bottom:var(--theme-secondary-border) solid .0625rem}html .themeColorPicker{position:absolute;z-index:999;cursor:move;user-select:none;padding-top:.5rem;border:.06225rem solid;border-radius:.375rem;background:var(--theme-html-background);display:flex;align-items:center;flex-direction:column}html .theme_color{width:100%}html .themeWarning{padding-left:.375rem;align-items:center;display:flex;flex-direction:column}html .colorPicker{display:flex;width:100%;justify-content:center}html .themeEditor .importExport{padding:.375rem;border:1px solid var(--theme-primary-border);border-radius:.375rem}body,button,input,select,textarea{font-family:"Lato",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}body{line-height:initial;touch-action:manipulation}html.large_all{font-size:18px}.content h2,.content h3,h2,h3{font-size:1rem;font-weight:400;display:inline-block;margin-bottom:0}.is-sr-only,.main .graphControls div h2{margin:0}div,span{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.button,a{transition:all 200ms ease}.button.right{float:right}a{cursor:pointer;text-decoration:none}.tabs a{border-bottom:none;padding:.5em 1em;vertical-align:top}.arpa ul,.content li,.main .hellReports .reportDisplay .reportStats h2,.resTabs ul{margin-top:0}.block:not(:last-child),.box:not(:last-child),.breadcrumb:not(:last-child),.content:not(:last-child),.highlight:not(:last-child),.level:not(:last-child),.list:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.progress:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.title:not(:last-child){margin-bottom:1rem}.tabs:not(:last-child){margin-bottom:.5rem;overflow:hidden}.modal .animation-content{overflow:hidden}.fade-enter-from,.zoom-in-enter-from,.zoom-out-enter-from{opacity:0}.zoom-out-enter-from .animation-content{transform:scale(1.05)}.zoom-in-enter-from .animation-content{transform:scale(.95)}.zoom-out-leave-active{opacity:1}.zoom-out-leave-active .animation-content{transform:none}.zoom-out-leave-to{opacity:0}.zoom-out-leave-to .animation-content{transform:scale(1.05)}.zoom-in-leave-active{opacity:1}.zoom-in-leave-active .animation-content{transform:none}.zoom-in-leave-to{opacity:0}.zoom-in-leave-to .animation-content{transform:scale(.95)}.modal.is-active.is-leaving{animation:modal-ghost-leave 150ms ease-out forwards;pointer-events:none}.modal.is-active.is-leaving .animation-content{animation:modal-ghost-leave-content 150ms ease-out forwards}@media only screen and (max-width:113rem){.actionWidth{max-width:38rem}}@media only screen and (max-width:88.5rem){.actionWidth{max-width:51rem}}@media only screen and (max-width:76.375rem){.actionWidth{max-width:38rem}}@media only screen and (max-width:59rem){.actionWidth{max-width:25rem}}@media only screen and (max-width:48rem){.actionWidth{max-width:38rem}}@media only screen and (max-width:45rem){.actionWidth{max-width:25rem}}@media only screen and (max-width:32rem){.actionWidth{max-width:12rem}}.keyMap,.msgInput{width:7.5rem;display:inline-block;height:1.25rem;margin-bottom:.25rem;text-align:center}.keyMap input,.msgInput input{height:1.25rem;line-height:1.25rem;text-align:center}.add{display:inline-block;margin-right:.25rem;padding:0 .375rem;border-radius:0 .375rem .375rem 0;line-height:1rem;cursor:pointer}.add span:first-child,.sub span:first-child{position:relative;bottom:.0625rem}.current,.sub{display:inline-block;line-height:1rem}.sub{outline:0;margin-left:.125rem;padding:0 .375rem;border-radius:.375rem 0 0 .375rem;cursor:pointer}.current{min-width:5rem;text-align:center;font-size:.875rem;padding:0 .125rem;cursor:default}.current.infoOnly{border-radius:.375rem;padding:0 .5rem}.factory .current svg{width:unset}.zero{cursor:pointer;margin-left:.75rem}.zero:hover{text-decoration:underline}.localization{margin-bottom:1rem}.basic-button{display:inline-block;font-size:.875rem;margin:0 .25rem;padding-top:.125rem;border-radius:.375rem;line-height:1rem;height:1.375rem;min-width:4rem;text-align:center;cursor:pointer;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tradeOffer .trade-offer{margin:0;padding:.125rem 0}.tradeOffer .trade-offer .offer-item{width:7.5rem}.tradeOffer .trade-offer .offer-vol{width:4.5rem;border-right:1px solid;margin-right:.125rem}#egg4{right:0}.doublePane{display:flex;align-items:center;justify-content:center}.doublePane>div{width:50%}.doublePane>div.left{width:70%}.doublePane>div.right{width:30%}.doublePane,.main .content .tabs ul,.topPad{margin-top:.5rem}.main{margin:1rem 1rem 1.25rem;overflow-y:hidden}.main .leftColumn{height:calc(100vh - 2.45rem)}.main .leftColumn .colHeader{display:flex;justify-content:space-between}.main>.columns{margin-bottom:0}.main .localization,.main .queue,.main .theme{margin-bottom:1rem}.main .localization i,.main .queue i,.main .theme i{margin-left:.25rem;padding-bottom:.25rem}.main .govOffice .options .bal_storage .ccmOption .field-body .control label,.main .localization .dropdown button,.main .queue .dropdown button,.main .theme .dropdown button{height:1.5rem;padding:0 .75rem}.main>.columns>:first-child{min-width:18rem}.main .sep{margin:0 .5rem}.main .race{position:relative;margin-top:1rem;margin-bottom:0;width:100%}.main .race>span{cursor:default}.main .race .power{text-align:right}.main .race .morale,.main .race .morale-contain{text-align:center}.main .queueCol div.bldQueue:first-child{margin-top:2.625rem}.main .bldQueue,.main .msgQueue{resize:vertical;height:7rem;border-top:solid .0625rem;border-bottom:solid .0625rem;overflow-y:auto}.main .bldQueue.right,.main .msgQueue.right{height:auto;border-bottom:none;padding:1rem}.main .msgQueue{font-size:.75rem}.main .msgQueue.right{height:calc(100vh - 9rem)}.main #msgQueueHeader span{font-size:1rem;margin-left:1rem}.main #msgQueueFilters{padding:.25rem 0;border-bottom:solid .0625rem;font-size:.875rem}.main #msgQueueFilters span{cursor:pointer}.main #msgQueueFilters span:not(:last-child){margin-right:2rem}.main #pausequeue,.main #pauserqueue{margin-left:1rem}.main .bldQueue,.main .bldQueue.right{padding-top:.25rem}.main .bldQueue li,.main .bldQueue.right li,.main .resQueue .buildList li{display:inline-block;height:1rem;padding:0 .25rem 0 0}.main .bldQueue li:not(:last-child) .queued:after,.main .bldQueue.right li:not(:last-child) .queued:after{content:" -> "}.main .bldQueue li:not(:last-child) .qany:after,.main .bldQueue.right li:not(:last-child) .qany:after{content:", "}.main .resQueue .buildList,.main .resQueue h2{margin-left:2rem;margin-top:0}.main .govOffice .spyopConfig li:not(:last-child):after,.main .resQueue .buildList li:not(:last-child) .queued:after{content:" -> "}.main .resQueue .buildList li:not(:last-child) .qany:after{content:", "}.main .resTabs>section{position:sticky;top:1rem;bottom:0;height:100vh;overflow-y:auto;overflow-x:hidden;height:calc(100vh - 8.5rem)}@supports (scrollbar-width:auto){.main .resTabs>section{scrollbar-width:thin}}.main #mainTabs>.tab-content{overflow-x:clip;min-height:calc(100vh)}.main .b-tabs .tabs{margin-bottom:0!important}.main .b-tabs .tab-content{position:relative;padding:0!important}.main .b-tabs .tab-content>.tab-item{width:100%;padding-left:1rem;padding-right:1rem;padding-top:0!important;padding-bottom:0!important}.main #mainTabs>.tab-content>.tab-item{padding-top:.75rem!important}.main .resTabs{margin-top:-.75rem}.main .resTabs>.tab-content{margin-top:-.5rem}@-moz-document url-prefix(){.main .b-tabs .tab-content>.tab-item{will-change:transform}}.main .b-tabs .tab-content>.slide-down-enter-active,.main .b-tabs .tab-content>.slide-down-leave-active,.main .b-tabs .tab-content>.slide-next-enter-active,.main .b-tabs .tab-content>.slide-next-leave-active,.main .b-tabs .tab-content>.slide-prev-enter-active,.main .b-tabs .tab-content>.slide-prev-leave-active,.main .b-tabs .tab-content>.slide-up-enter-active,.main .b-tabs .tab-content>.slide-up-leave-active{position:absolute;box-sizing:border-box;top:0;left:0;width:100%;transition-duration:225ms!important}.main .resTabs>section::-webkit-scrollbar{width:6px;background:0 0}.main .resTabs>section::-webkit-scrollbar-track{background:0 0}.main .resTabs>section::-webkit-scrollbar-thumb{background:rgba(128,128,128,.4);border-radius:3px}.main .resTabs>section::-webkit-scrollbar-thumb:hover{background:rgba(128,128,128,.8)}.main .b-tabs .tab-content>.slide-next-enter-from,.main .b-tabs .tab-content>.slide-prev-leave-to{transform:translate3d(-100%,0,0)}.main .b-tabs .tab-content>.slide-next-leave-to,.main .b-tabs .tab-content>.slide-prev-enter-from{transform:translate3d(100%,0,0)}.main .b-tabs .tab-content>.slide-down-enter-from,.main .b-tabs .tab-content>.slide-up-leave-to{transform:translate3d(0,-100%,0)}.main .b-tabs .tab-content>.slide-down-leave-to,.main .b-tabs .tab-content>.slide-up-enter-from{transform:translate3d(0,100%,0)}.main .govTabs2>section{height:calc(100vh - 15rem)}.main .resources{margin-top:.25rem;padding-right:.25rem;height:calc(100vh - 5rem)}@media only screen and (max-width:88.5rem){.main .resources{height:calc(100vh - 16.5rem)}}@media only screen and (max-width:48rem){.main .resources{position:relative}}.main .resources .resource{display:flex;cursor:default}.main .resources .resource div{width:70%;display:flex;justify-content:space-between}.main .resources .resource>:nth-child(2){text-align:center;width:4%}.main .resources .resource .interact{cursor:pointer}.main .resources .resource>:nth-child(3){text-align:right;width:26%}.main .resources .resource .craftable{width:30%;text-align:right}.main .resources .resource .craftable>span{display:inline;margin-left:.25rem}.main .evolving{margin-top:1rem;max-width:51rem}@media only screen and (max-width:113rem){.main .evolving{max-width:38rem}}@media only screen and (max-width:88.5rem){.main .evolving{max-width:51rem}}@media only screen and (max-width:76.375rem){.main .evolving{max-width:38rem}}@media only screen and (max-width:59rem){.main .evolving{max-width:25rem}}@media only screen and (max-width:48rem){.main .evolving{max-width:38rem}}@media only screen and (max-width:45rem){.main .evolving{max-width:25rem}}@media only screen and (max-width:32rem){.main .evolving{max-width:12rem}}.main .evolving .progress{height:1.2rem}.main .evolving::after{display:block;position:relative;top:-1.375rem;content:"Evolving";text-align:center;color:#af8d07;margin-bottom:-1.25rem}.main .content .settings{margin-left:1rem;height:calc(100vh - 6.5rem)}.main .content .tab-content{padding:0 .25rem 0 0}.main .content>.tab-content{padding:0 .25rem 0 1rem}.main .content .tab-item{padding:0 0 0 1rem}.main .content #oldTech{margin-bottom:4rem}.main .content .mtab{height:calc(100vh - 10rem)}.main .content .action,.modal .action{display:inline-block;position:relative}.main .content .action .aTitle,.modal .action .aTitle{overflow-wrap:break-word;white-space:normal;line-height:1rem}.main .content .action a.button,.modal .action a.button{width:12.625rem;margin:.375rem .375rem 0 0}.main .content .action span.oldTech,.modal .action span.oldTech{width:12.625rem;cursor:default;display:inline-flex;margin:0 1rem 0 0}.main .content .action a.button span.count,.main .content .action span.oldTech span.count,.modal .action a.button span.count,.modal .action span.oldTech span.count{position:absolute;top:0;right:0;display:inline-block;height:1.0625rem;line-height:.875rem;padding:0 .25rem;border-radius:0 .25rem 0 .4375rem;overflow:hidden}.main .content .action span.off,.main .content .action span.on,.modal .action span.off,.modal .action span.on{position:absolute;cursor:pointer;display:block;height:1.0625rem;line-height:.8125rem;padding:0 .25rem;overflow:hidden}.main .content .action div.special,.modal .action div.special{position:absolute;cursor:pointer;display:block;padding:0 .25rem;overflow:hidden}.main .content .action div.special,.modal .action div.special{height:1.125rem;line-height:.9375rem;top:.5rem;left:0;border-radius:.25rem 0 .4375rem 0;width:1.1875rem}.main .content .action div.special svg,.modal .action div.special svg{position:relative;left:-.125rem}.main .content .action span.on,.modal .action span.on{bottom:0;right:.375rem;border-radius:.4375rem 0 .25rem 0}.main .content .action span.on .flair,.modal .action span.on .flair{position:relative;left:.25rem;top:0}.main .content .action span.off,.modal .action span.off{bottom:0;left:0;border-radius:0 .4375rem 0 .25rem}.main .content .action span.off .flair,.modal .action span.off .flair{position:relative;left:.125rem;top:0}.main .content .action div.repair,.modal .action div.repair{position:absolute;bottom:0;left:0;width:100%;height:.25rem}.main .content .action div.repair .progress,.modal .action div.repair .progress{height:.25rem;background:0 0}.main .content .action .flair,.modal .action .flair{position:absolute;right:.625rem;top:.5rem;height:.5rem;line-height:.5rem;margin:0;padding:0}.main .content .action .flair:nth-of-type(2),.modal .action .flair:nth-of-type(2){right:.625rem;top:1.1875rem}.main .content .action .flair:nth-of-type(3),.modal .action .flair:nth-of-type(3){right:.625rem;top:1.875rem}.main .content .action .flair:nth-of-type(4),.modal .action .flair:nth-of-type(4){right:1.3125rem;top:.5rem}.main .content .action .flair:nth-of-type(5),.modal .action .flair:nth-of-type(5){right:1.3125rem;top:1.1875rem}.main .content .action .flair:nth-of-type(6),.modal .action .flair:nth-of-type(6){right:1.3125rem;top:1.875rem}.main .content .action.disabled,.modal .action.disabled{display:none}.main .content .enemyFortress{display:inline-block;position:relative;min-width:17.375rem;height:3.125rem;margin:.375rem .375rem 0 0;border-radius:.25rem}.main .content .enemyFortress .fortRow>span,.main .fort .training span,.main .garrison .training>span,.main .job .job_label span{display:inline-block}.main .content .enemyFortress .fortRow :first-child{margin-left:.5rem;margin-right:0;float:left}.main .content .enemyFortress .fortRow :last-child{margin-left:.25rem;margin-right:.5rem;float:right}.main .content .enemyFortress .second{line-height:2rem}.main .content .enemyFortress .second a.button{height:1.5rem;margin-top:.25rem;padding-left:.25rem;padding-right:.25rem;min-width:4.5rem}.main .content .challenge,.main .content .geck{width:100%;text-align:center}@media only screen and (max-width:113rem){.main .content .challenge{max-width:38rem}}@media only screen and (max-width:88.5rem){.main .content .challenge{max-width:51rem}}@media only screen and (max-width:76.375rem){.main .content .challenge{max-width:38rem}}@media only screen and (max-width:59rem){.main .content .challenge{max-width:25rem}}@media only screen and (max-width:48rem){.main .content .challenge{max-width:38rem}}@media only screen and (max-width:45rem){.main .content .challenge{max-width:25rem}}@media only screen and (max-width:32rem){.main .content .challenge{max-width:12rem}}.main .content .challenge .simButton{margin-top:.5rem}.main .content .divider{width:100%;text-align:center;border-bottom:.0625rem solid;margin:.625rem 0}.main .content .divider h2{position:relative;bottom:-.5rem;padding:0 .625rem}.main .jobList{max-width:19rem}.main .job{margin-left:.5rem;display:flex;min-width:18rem;align-items:center}.main .job .controls{margin-bottom:1px}.main .job .controls .sub{border-right:0}.main .job .job_label{cursor:default;display:flex;align-items:center}.main .job .job_label :first-child{margin-right:.5rem;margin-bottom:0;width:10rem;font-size:1rem;font-weight:400;display:inline-block}.main .job .job_label :nth-child(2){min-width:4.5rem;text-align:center}.main .job .job_label .count>span{margin-left:1rem;width:1rem}.main .job .job_label .count svg{width:1rem}.main .armHead>span,.main .sshifter{margin-left:1rem}.main .sshifter button{height:1.5rem;margin-left:.25rem}.main .foundry{margin-top:1rem}.main #civics{padding:.5rem}.main .civics{padding-top:0;padding-bottom:0}.main .civics .revolution{margin-left:.375rem}.main .government,.main .hellReports .reportDisplay p{margin-bottom:0}.main .government .header{margin-bottom:.5rem}.main .government .govType{margin-bottom:.25rem;display:flex;flex-wrap:wrap;justify-content:space-between}.main .government .govType>div:first-child{margin-right:.5rem}.main .government .foreign button,.main .government .govType button{margin-top:.25rem;height:1.75rem;line-height:1.75rem;padding:0 .5rem}.main .government .taxRate{height:1.25rem;display:flex}.main .government .taxRate :first-child{cursor:default;display:inline-block;line-height:1.25rem}.main .government .foreign{margin-bottom:1rem}.main .government .foreign .gaction{display:inline-block;width:8rem}.main .government .foreign .glabel{display:inline-block;width:9rem}.main .government .foreign .glevel{display:inline-block;width:8rem}.main .fort{width:100%;min-height:1rem;margin:.25rem 0;padding:.25rem 0;border-top:1px solid;border-bottom:1px solid}.main .fort .current{position:relative;bottom:.0625rem}.main .fort>div{margin-top:.25rem}.main .fort>div:first-child{margin-top:0}.main .fort>div:first-child span:nth-child(1){margin-right:.5rem}.main .fort .defense,.main .garrison button.first{margin-right:.5rem}.main .fort .training progress{display:inline-block;width:90%}.main .fort .patrol{position:relative;top:4px;left:4px}.main #c_garrison.garrison,.main .fort .merctip{margin-top:.25rem}.main .fort .merc,.main .fort .observe{height:1.25rem;margin-left:.25rem;line-height:0}.main .fort .training .observe{bottom:.25rem}.main .fort .bunks{margin:.25rem 0 .125rem}.main .garrison .header{margin-bottom:.5rem}.main .garrison .bunks{margin:.75rem .75rem 0}.main .garrison .bunk{margin-bottom:0;margin-right:.5rem}.main .garrison .bunk>div{padding-bottom:0}.main .garrison .bunk .hire{padding-left:0;margin-top:1rem}.main .garrison .barracks{margin-bottom:.25rem}.main .garrison .training{margin-bottom:.75rem}.main .garrison .training>progress{display:inline-block;width:calc(100% - 4rem)}.main .garrison button{height:2rem;line-height:1rem}.main .garrison .war{padding-right:0;margin:.75rem .75rem 0}.main .garrison .war .tactics{margin:.5rem 0;height:1.25rem;display:flex}.main .garrison .war .tactics>:first-child{display:inline-block;line-height:1.125rem;width:4.75rem}.main .garrison .launch{min-width:10rem;margin-top:.75rem;margin-right:.5rem;text-align:center}.main .garrison .launch .campaign{width:10rem;white-space:normal;margin-top:.5rem}.main #c_garrison.garrison>div:nth-child(2){display:flex;flex-wrap:wrap;justify-content:space-between}.main .fleet{display:flex;flex-wrap:wrap;width:100%;min-height:1rem;margin:.25rem 0;padding:.25rem 0;border-top:1px solid;border-bottom:1px solid}.main .fleet .area{width:8rem}.main .fleet .area>span{display:inline-block;min-width:8rem;white-space:nowrap}.main .fleet .area .ship{text-align:center}.main .fleet .area .ship .current{min-width:2.5rem;width:2.5rem;font-size:1rem}.main .pirate{margin-right:.75rem;margin-left:.75rem}.industry p,.main .militaryTab .garrison .battle,.modalBox p{margin-bottom:.5rem}.main .militaryTab .garrison .battle .launch,.main .militaryTab .garrison .battle .war{margin:.25rem 0 0 .75rem}.main .militaryTab .garrison .columns{flex-wrap:wrap}.main .mechTab,.main .militaryTab{margin-left:1rem}.main #hellTabs>section{height:100vh}.main .hellReports{display:flex;justify-content:space-between}.main #hellAnalysis,.main .hellReports>div{height:calc(100vh - 10rem)}.main .hellReports .reportList{top:0;width:25%;box-sizing:border-box;border-right:.0625rem solid;margin-right:1rem}.main .hellReports .reportDisplay{width:75%;font-size:.9rem}.main .hellReports .reportDisplay span:not(:last-child){margin-right:.5rem}.main .hellReports .reportDisplay .reportStats{padding-bottom:.5rem;border-bottom:.0625rem solid;margin-bottom:.5rem}.main .hellReports .reportDisplay .reportStats h2:not(:last-child){margin-right:1rem}.main .hellReports .right{margin-left:.5rem;padding-left:.5rem;border-left:.0625rem solid}.main .hellAnalysis{display:flex;justify-content:space-between;width:100%}.main .hellAnalysis .analysisColumn{width:50%;margin:0 10px}.main .hellAnalysis .analysisColumn:not(:last-child){border-right:.0625rem solid}.main .hellAnalysis h2:not(:first-child){margin:0 0 0 1rem}.main #hellAnalysis>div:not(:last-child){margin-bottom:.5rem;border-bottom:.0625rem solid;padding-bottom:.5rem}.main .graphingArea{display:flex;flex-wrap:wrap;justify-content:space-evenly;width:100%}.main .graphContainer{width:45%}.main .graphControls div{display:flex;justify-content:space-between}.main .graphControls .graphTitle{justify-content:center}.main .graph{margin:1%;padding:3%;border:.0625rem solid}.main .mechAssembly{padding-bottom:.5rem;margin-bottom:.5rem;border-bottom:.0625rem solid}.main .mechAssembly .button{height:2rem}.main .gFort,.main .mechAssembly .bayOptions{margin-top:.5rem}.main .mechAssembly .bayOptions .dropdown{margin:0 .5rem .25rem 0}.main .mechAssembly .mechAssemble{margin:1rem 0 0}.main .mechAssembly .checkbox{margin-left:.5rem;bottom:-.25rem}.main .mechList .mechRow .gearList{display:inline-flex}.main .mechList .mechRow .gearList.titan{display:inline-grid}.main .mechList .mechRow .gearList>div{margin:0 .125rem}.main .gFort{padding-top:.5rem;border-bottom:0}.main .gFort .pad{margin-right:.25rem}.main .mad{margin-top:1rem;max-width:28rem;padding:1rem;border:.0625rem solid #fff;border-radius:.5rem;background:repeating-linear-gradient(45deg,#fbfd84,#fbfd84 10px,#000 10px,#000 20px)}.main .mad .warn{background:#000;color:#fff;border-radius:.5rem;padding:.25rem;font-size:.75rem;text-align:center;margin-bottom:.25rem}.main .mad .defcon{display:inline-block;width:50%;text-align:center}.main .armed .mad{border-color:#8f0000;background:repeating-linear-gradient(45deg,#8f0000,#8f0000 10px,#000 10px,#000 20px)}.main .pad{margin-left:1rem}.main .market-header{padding-bottom:.5rem;margin:.5rem 1rem}.main .market-header .trade{position:relative;bottom:-.125rem;margin-left:1rem}.main #achievePanel>div,.main .market-header .b-numberinput{width:100%}.main .market-header .market{margin-left:1rem;margin-right:1rem}.main .market-header .market .button,.main .market-header .market input{height:1.6875rem}.main .market-header .help{margin-left:1rem}.main .galaxyTrade{margin-right:0}.main .trade-header{margin:.5rem 0;justify-content:center}.main .trade-offer{margin:0;padding:.125rem 0}.main .trade-offer .offer-item{width:7.5rem}.main .trade-offer .offer-vol{width:4.5rem;border-right:1px solid;margin-right:.125rem}.main .setting{margin:0 .25rem .5rem 0}.main .importExport,.main .stringPack{margin-top:1rem}.main #customFile,.main #stringPackFile{margin-top:.75rem}.main .reset{margin-top:3rem}.main .reset .notification{margin-top:.5rem}.main .cstat{margin-top:1rem}.main .achievement{position:relative;border:.0625rem solid;padding:.125rem;margin:.125rem 0;width:100%}.main .achievement span,span.inline{display:inline-block}.main .achievement span>span.row{display:block}.main .achievement>:first-child{margin-left:.5rem;width:100%}.main .achievement>:nth-child(2),.main .achievement>div.perk{margin-left:.5rem}.main .achievement .flair{display:block;position:absolute;right:.1875rem;top:.1875rem;height:.5rem;line-height:.5rem;margin:0;padding:0}.main .achievement .flair:nth-of-type(2){right:.1875rem;top:1.375rem}.main .achievement .flair:nth-of-type(3){right:1.3125rem;top:.1875rem}.main .achievement .flair:nth-of-type(4){right:1.3125rem;top:1.375rem}.main .achievement .flair:nth-of-type(5){right:2.4375rem;top:.1875rem}.main .achievement .flair:nth-of-type(6){right:2.4375rem;top:1.375rem}.main .achievement .star1,.main .achievement .star2,.main .achievement .star3,.main .achievement .star4,.main .achievement .star5{width:1rem}.main .governor.candidates,.main>div.popper .modal_bd,body .modal>div.popper .modal_bd{display:table;width:100%}.main .governor .appoint{display:table-row}.main .governor .appoint>span{display:table-cell}.main .governor .appoint.header>span{padding-bottom:.5rem}.main .governor .appoint button{height:1.5rem;margin-bottom:.25rem}.main .govOffice .head{display:flex;justify-content:space-between;align-items:center}.main .govOffice .head .fire button{display:block;line-height:1rem;padding:0 .5rem}.main .govOffice .tConfig{margin-top:.5rem}.main .govOffice .spyopConfig{margin-left:0}.main .govOffice .spyopConfig li{cursor:pointer;display:inline-block;height:1rem;padding:0 .25rem 0 0}.main .govOffice .options{margin-top:1rem}.main .govOffice .options .storage{display:flex;clear:right}.main .govOffice .options .storage>div{width:50%}.main .govOffice .options .storage .control{margin-right:1rem}.main .govOffice .options .hRow>:first-child,.main .govOffice .options .hRow>:nth-child(2){display:inline-block}.main .govOffice .options .hRow>:nth-child(2){float:right}.main .govOffice .options .bal_storage{display:inline-flex;flex-wrap:wrap}.main .govOffice .options .bal_storage .ccmOption{display:flex;justify-content:space-between;align-items:center;position:relative;width:50%}.main .govOffice .options .bal_storage .ccmOption>span{display:inline-block;width:7.5rem;overflow-wrap:anywhere;line-height:1rem}.main .govOffice .options .bal_storage .ccmOption .field-body .field{display:flex;flex-wrap:wrap;width:5rem}.main .govOffice .options .bal_storage .ccmOption .field-body .control{width:.5625rem;margin-right:1rem}.main .govOffice .options .bal_storage .ccmOption:not(.m) .field-body .b3 label{border-top-left-radius:4px;border-bottom-left-radius:4px}.main .govOffice .options .bal_storage .ccmOption:not(.m) .field-body .b5 label{border-top-right-radius:4px;border-bottom-right-radius:4px}.main .govOffice .options .bal_storage .ccmOption.m{height:2.125rem;line-height:2.125rem}.main .govOffice .options .bal_storage .ccmOption.m .field-body .control label{height:1rem;font-size:.75rem}.main .govOffice .options .bal_storage .ccmOption.m .field-body .b1 label{border-bottom-left-radius:0}.main .govOffice .options .bal_storage .ccmOption.m .field-body .b3 label{border-top-right-radius:4px}.main .govOffice .options .bal_storage .ccmOption.m .field-body .b4 label{border-bottom-left-radius:4px}.main .govOffice .options .bal_storage .ccmOption.m .field-body .b6 label{border-top-right-radius:0}.main .govOffice .options .trash .has-addons{display:initial}.main .govOffice .options .trash .has-addons .trashButton{cursor:pointer}.main #perksPanel .achievement{margin:.25rem 0}.main .city,.main .space,.main .tech{margin-top:.625rem}.main .city:first-child,.main .space:nth-child(2),.main .tech:first-child{margin-top:0}.main .regionControl,.main .regionSupport{margin-left:.5rem}.main .space,.main>div.popper div.aTable span,body .modal>div.popper div.aTable span{display:flex}.main .space .syndThreat{margin-left:1rem}.large_log .main .msgQueue{font-size:1rem}.large_all .main .content .action a.button,.large_all .main .content .action span.oldTech,.large_all .modal .action a.button,.large_all .modal .action span.oldTech{width:11.75rem;margin:.25rem .25rem 0 0}.large_all .main .content .action span.on,.large_all .modal .action span.on{right:.25rem}.large_all .main .content .action div.special,.large_all .modal .action div.special{top:.25rem}.large_all .main .msgQueue{font-size:.9rem}.graphCreator>div:not(:last-child){margin-bottom:.5rem;border-bottom:.0625rem solid;padding-bottom:.5rem}.pylon .current{width:5.25rem}.modalBody .gap{margin:0 .25rem .5rem}.modalBody.max40{max-width:40rem}.modalBody .wrap{max-width:25.5rem;margin:0 auto}.popper{z-index:100000}.popper .craft-elm{white-space:nowrap}.popper .grad-from-left,.popper .grad-from-left-warn,.popper .grad-from-right{background-size:100%;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-moz-text-fill-color:transparent}.storage-header{margin-bottom:.25rem}.storage-header button{font-size:.875rem}.storage-header .crate{margin-left:13rem}.storage-header .container{margin-left:3rem}.market-item{margin:.125rem 0 0 1rem;display:flex;cursor:default}.market-item .res{cursor:default;margin-right:.5rem;width:8rem}.market-item .buy,.market-item .res,.market-item .sell{display:inline-flex}.market-item .sell{margin-left:.5rem}.market-item .route{position:relative;bottom:1px}.market-item .order{display:inline-block;font-size:.875rem;margin:0 .25rem;padding-top:.125rem;border-radius:.375rem;line-height:1rem;height:1.375rem;text-align:center;cursor:pointer;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;min-width:4.5rem}.market-item .trade{margin-left:1rem;min-width:9.375rem}.market-item .trade .current{width:3rem}.market-item .trade .add,.market-item .trade .sub{position:relative;top:.0625rem;padding:0 .375rem;line-height:1rem}.arpa .tabs>ul,.market-item .trade .mass,.resTabs .tabs>ul{margin-left:1rem}.market-item .crtTotal,.market-item .tradeTotal.nt{margin-left:11.5rem}.market-item .cntTotal{margin-left:2.0625rem}.market-item .cntTotal span:nth-child(2),.market-item .crtTotal span:nth-child(2){display:inline-block;width:6rem;text-align:center}.market-item .tradeTotal{margin-left:23.25rem}.modal .actionSpace{padding:.25rem;min-width:38rem;border-radius:.5rem}.modal .actionSpace .action a.button{margin:.25rem}.modal .modalBody{max-height:calc(100vh - 5rem)}.modal .msgInput .checkbox{margin:0 3rem}.modal .msgInput .checkbox .control-label{padding:0}.modal .msgInputApply{margin-top:1rem}.modal .modal-background{background-color:transparent}.modal .modal-content{box-shadow:0 0 1rem #000;border-radius:1rem}.modal .genus_selection>section{display:flex;flex-wrap:wrap;flex-direction:row;justify-content:space-between}.main>div.popper,body .modal>div.popper{margin-top:.125rem;text-align:center;padding:.5rem .75rem;max-width:18rem;border-radius:.25rem;line-height:1.3125rem}.main>div.popper div.aTable,body .modal>div.popper div.aTable{columns:2}.main>div.popper.breakdown,body .modal>div.popper.breakdown{max-width:initial}.main>div.popper .modal_bd :first-child,body .modal>div.popper .modal_bd :first-child{display:table-cell;text-align:left;padding-right:.5rem}.main>div.popper .modal_bd :nth-child(2),body .modal>div.popper .modal_bd :nth-child(2){display:table-cell;text-align:right}.main>div.popper .modal_bd.sum,body .modal>div.popper .modal_bd.sum{border-top:.0625rem solid}.main>div.popper .resBreakdown .parent,body .modal>div.popper .resBreakdown .parent{display:flex}.main>div.popper .resBreakdown .parent div.col,body .modal>div.popper .resBreakdown .parent div.col{padding-left:.5rem;margin-left:.5rem;border-left:1px solid}.main>div.popper>.flair,body .modal>div.popper>.flair{margin-top:.5rem;font-size:.75rem;text-align:right;line-height:.75rem}.main>div.popper.flair,body .modal>div.popper.flair{padding-bottom:.25rem}.main>div.popper .flexAround,body .modal>div.popper .flexAround{display:flex;flex-wrap:wrap;justify-content:space-around}.main>div.popper .example,body .modal>div.popper .example{text-align:left;white-space:pre}.main>div.popper .pGeoList .pGeo,body .modal>div.popper .pGeoList .pGeo{min-width:49%}.infoBox{max-width:50rem;margin-bottom:.5rem;margin-right:.5rem;padding:.25rem .5rem}.infoBox h2{margin-bottom:.25rem;border-bottom:.0625rem solid}.infoBox div{margin-bottom:.5rem;clear:both}.infoBox .type{display:flex;justify-content:space-between}.infoBox .type>span:nth-child(1){display:block;text-align:left}.infoBox .type>span:nth-child(2){display:block;text-align:right}.infoBox .desc{text-align:left}.infoBox .condense{margin:0}.main>div.popper.wide,body .modal>div.popper.wide{max-width:initial}.arpa .tabs,.resTabs .tabs{overflow-x:auto}.industry,.modalBox{padding:1rem;border-radius:1rem;text-align:center;min-height:9.5rem}.industry .market-item,.modalBox .market-item{display:block;margin-top:.5rem;padding-top:.5rem;margin-left:0}.industry .crates .crateHead,.modalBox .crates .crateHead{margin-bottom:.5rem}.industry .crates .crateHead :first-child,.modalBox .crates .crateHead :first-child,.popper .soldierEvaluation>div :first-child{margin-right:1rem}.industry .crates .crateHead :last-child,.modalBox .crates .crateHead :last-child{margin-left:1rem}.industry .crates button,.industry .smelting button,.modalBox .crates button,.modalBox .smelting button{font-size:.875rem;margin:0 .25rem;height:1.8rem}.industry .divide,.modalBox .divide{margin-top:.5rem;padding-top:.5rem}.industry .current,.modalBox .current{position:relative;bottom:.0625rem}.industry .smelting,.modalBox .smelting{margin:.5rem 0 .75rem;padding-top:.5rem}.industry .smelting .button.steel,.modalBox .smelting .button.steel{white-space:pre}.industry .factory :first-child,.modalBox .factory :first-child{display:inline-block;width:8rem;text-align:left}.industry .crateModal,.modalBox .crateModal{margin-bottom:1.25rem}.industry .flexAround,.modalBox .flexAround{margin-top:.25rem;display:flex;justify-content:space-evenly}.industry .fanatic section,.industry .flexWrap,.modalBox .fanatic section,.modalBox .flexWrap{display:flex;flex-wrap:wrap;justify-content:space-evenly}.industry .flexWrap>div,.modalBox .flexWrap>div{margin-bottom:.25rem}button[disabled]{pointer-events:none;cursor:not-allowed}.modalBox .trade-offer{margin:0;padding:.125rem 0}.modalBox .trade-offer .offer-item{width:7.5rem}.modalBox .trade-offer .offer-vol{width:4.5rem;border-right:1px solid;margin-right:.125rem}.modalBox .market-item{display:flex;justify-content:center}.modalBox .trade-header{border-top:0;padding-top:0}.industryTab,.psychicTab,.supernaturalTab{display:flex;flex-wrap:wrap;justify-content:center}.industry{margin-bottom:.5rem;border-bottom:.0625rem solid;border-top:.0625rem solid;width:27.5rem}.industry .header{margin-bottom:.25rem;padding-bottom:.25rem;width:100%}.industry .gap{margin-top:.5rem;width:100%}.promoBar,.topBar{display:inline-flex;height:1.2rem;line-height:1.2rem;width:100%;position:fixed}.topBar{top:0;z-index:10}.topBar .calendar{margin:0 auto}.topBar .calendar .temp{margin-left:.125rem;font-size:.875rem}.topBar .calendar .weather{font-size:.8125rem}.topBar .calendar .moon{font-size:.875rem;color:#fff}.topBar .calendar .wi-thermometer-exterior{color:#00d6b2}.topBar .calendar .wi-thermometer{color:#f10202}.topBar .calendar .wi-day-sunny,.topBar .calendar .wi-day-windy{color:#d0ff00}.topBar .calendar .wi-cloud,.topBar .calendar .wi-cloudy-gusts{color:#9ea387}.topBar .calendar .wi-rain,.topBar .calendar .wi-storm-showers{color:#00d6b2;position:relative;bottom:.125rem}.topBar .calendar .wi-snow,.topBar .calendar .wi-snow-wind{color:#fff;position:relative;bottom:.125rem}.topBar .calendar .atime,.topBar .planetWrap{margin-left:1rem}.topBar .calendar .infoTimer{margin-right:1rem}.topBar .calendar .astro{font-size:.8125rem;margin-right:.25rem}.topBar .planetWrap .pet,.topBar .planetWrap .simulation,.topBar .planetWrap .universe{border-left:1px solid;margin-left:.75rem;padding-left:.75rem}.topBar .planetWrap .pet{cursor:pointer}.topBar .flair{display:inline-block;text-align:left}.topBar .flair svg{position:relative;top:.125rem;left:.25rem}.topBar .pet .black{fill:#000;filter:drop-shadow(0 0 2px #fff)}.topBar .pet .black.patched,.topBar .pet .black.stripe,.topBar .pet .brown.patched,.topBar .pet .cream.stripe,.topBar .pet .gray.patched,.topBar .pet .gray.stripe,.topBar .pet .orange.stripe,.topBar .pet .white.patched,.topBar .pet .white.stripe{fill:url(#PetGradient)}.topBar .pet .black.stripe #PetGradient .stop1{stop-color:#000}.topBar .pet .black.stripe #PetGradient .stop2{stop-color:#4e4e4e}.topBar .pet .black.patched #PetGradient .stop1{stop-color:#000}.topBar .pet .black.patched #PetGradient .stop2{stop-color:#424242}.topBar .pet .orange{fill:#e25f08;filter:drop-shadow(0 0 2px #000)}.topBar .pet .orange.stripe #PetGradient .stop1{stop-color:#e25f08}.topBar .pet .orange.stripe #PetGradient .stop2{stop-color:#ccb9ad}.topBar .pet .gray,.topBar .pet .white{fill:#575757;filter:drop-shadow(0 0 2px #000)}.topBar .pet .gray.stripe #PetGradient .stop1{stop-color:#575757}.topBar .pet .gray.stripe #PetGradient .stop2{stop-color:#202020}.topBar .pet .gray.patched #PetGradient .stop1{stop-color:#575757}.topBar .pet .gray.patched #PetGradient .stop2{stop-color:#665237}.topBar .pet .white{fill:#f0efef}.topBar .pet .white.stripe #PetGradient .stop1{stop-color:#f0efef}.topBar .pet .white.stripe #PetGradient .stop2{stop-color:#f5dec4}.topBar .pet .white.patched #PetGradient .stop1{stop-color:#f0efef}.topBar .pet .white.patched #PetGradient .stop2{stop-color:#b8ab9b}.topBar .pet .brown,.topBar .pet .cream{fill:#bd8754;filter:drop-shadow(0 0 2px #000)}.topBar .pet .cream.stripe #PetGradient .stop1{stop-color:#bd8754}.topBar .pet .cream.stripe #PetGradient .stop2{stop-color:#f5dec4}.topBar .pet .brown{fill:#996f48}.topBar .pet .brown.patched #PetGradient .stop1{stop-color:#996f48}.topBar .pet .brown.patched #PetGradient .stop2{stop-color:#af9a85}.topBar .version{margin-right:1rem}.promoBar{bottom:0}.promoBar .left{display:inline-block;width:15rem;margin-left:.25rem}.promoBar .right{position:absolute;text-align:right;margin-right:1rem;right:0}.promoBar .right span{margin:0 .5rem}.arpaProject,.promoBar .right,.promoBar .right .external-links li{display:inline-block}.promoBar .right .external-links li+li:before{content:" | "}.arpaProject{border:solid .0625rem;padding:.5rem;width:20rem;margin:0 1rem 1rem 0}.arpaProject .head{margin-bottom:.25rem;padding-bottom:.5rem;border-bottom:solid .0625rem}.arpaProject .head>span{display:inline-block;width:40%}.arpaProject .head>span:first-child{display:inline-block;width:60%}.arpaProject .head .rank{text-align:right}.arpaProject .head .pbar{position:relative;margin-top:.5rem}.arpaProject .head .pbar .progress{margin-bottom:0}.arpaProject .head .pbar .progress-value{position:absolute;display:block;top:-.1875rem;left:49%}.arpaProject .buy{text-align:center}.arpaProject .buy .button{height:1.5rem;width:19%;line-height:.75rem}.arpaProject .buy :first-child{width:24%}.ShipYardTab,.ShipYardTab .assemble>span{margin-left:1rem}.ShipYardTab .button{height:2rem}.ShipYardTab .stats{display:flex}.ShipYardTab #shipYardCosts,.ShipYardTab .stats>div,.genome button{margin-left:.5rem}.ShipYardTab .registry{line-height:1.25rem}.ShipYardTab .registry .nameplate{display:inline-block;width:8rem;height:1.25rem}.ShipYardTab .registry .nameplate input{height:1.25rem}.ShipYardTab #shipList .shipRow,.ShipYardTab .shipBayOptions .dropdown{margin-left:.5rem;margin-top:.25rem}.ShipYardTab #shipList{margin-top:.25rem}.ShipYardTab #shipList .shipRow{display:grid;padding-top:.25rem;border-top:1px solid;grid-template-columns:auto 10rem}.ShipYardTab #shipList .shipRow .name{display:inline-block;min-width:5rem}.ShipYardTab #shipList .shipRow .row1,.ShipYardTab #shipList .shipRow .row2,.ShipYardTab #shipList .shipRow .row3{grid-column-start:1}.ShipYardTab #shipList .shipRow .location{grid-column-start:2;grid-row-start:1;grid-row-end:3}.ShipYardTab #shipList .shipRow .pad{margin:0 .5rem 0 0}.ShipYardTab .assemble{margin:1rem 0 0 .5rem;line-height:2rem}.ShipYardTab .assemble>span>label.checkbox{margin-right:0;top:.25rem}.ShipYardTab .solarMap{float:right;margin-right:1rem}.genome{margin-bottom:1rem}.genome .progress{margin-top:.25rem;margin-bottom:.5rem}.genome button.seq{margin-left:0}.geneticTraits .trait.major{margin-top:.5rem}.geneticTraits .trait .gene{min-width:5rem;padding-bottom:.125rem}.geneticTraits .trait.indent{margin-left:4.5rem}.geneticTraits .traitListing{display:flex;flex-wrap:wrap}.geneticTraits .traitListing>.traitRow{width:25rem}.geneticTraits .traitRow>span{vertical-align:middle}.geneticTraits .traitRow .basic-button{height:100%}.main>div.popper.wide.w22,body .modal>div.popper.wide.w22{max-width:22rem}.main>div.popper.wide.w25,body .modal>div.popper.wide.w25{max-width:25rem}.main>div.popper.wide.w30,body .modal>div.popper.wide.w30{max-width:30rem}#trick6{width:4rem;text-align:center}body.nuke{color:#000;transition:color 2s,text-shadow 3s;text-shadow:0-2px 4px #fff,0-2px 10px #ff3,0-10px 20px #f90,0-20px 40px #c33}div.mininuke,div.nuke{position:fixed;width:100%;height:100%;z-index:10;top:0;left:0;transition:all 2s;opacity:0}div.mininuke{position:absolute;overflow:hidden}div.mininuke.burn,div.nuke.burn{opacity:1}div.bigbang.burn::before,div.mininuke.burn::before,div.nuke.burn::before{content:"";display:block;width:10px;height:10px;position:absolute;border-radius:50%}div.mininuke.burn::before,div.nuke.burn::before{top:60%;left:30%;background:#000}div.mininuke.burn.b::before,div.nuke.burn.b::before{transition:width 3s,height 3s,top 3s,left 3s;background:#000;width:180%;height:180%;top:-30%;left:-30%;box-shadow:0-2px 4px #fff,0-2px 10px #ff3,0-10px 20px #f90,0-20px 40px #c33,inset 0-20px 40px #fff,inset 0-20px 100px #ff3,inset 0-40px 200px #f90,inset 0-80px 400px #c33}div.mininuke.burn.b::before{transition:width 2s,height 2s,top 2s,left 2s}div.nuke.burn{background:#000}div.mininuke.burn.c::before{visibility:hidden;opacity:0;transition:visibility 0s 2s,opacity 2s linear}div.bigbang{position:fixed;width:100%;height:100%;z-index:10;top:0;left:0;transition:all 1s;opacity:0}div.bigbang.burn{opacity:1}div.bigbang.burn::before{top:50%;left:50%;background:#fff}div.bigbang.burn.b::before{transition:width 2s,height 2s,top 2s,left 2s;background:#fff;width:180%;height:180%;top:-30%;left:-30%;box-shadow:0-2px 4px #fff,0-2px 10px #ff3,0-10px 20px #f90,0-20px 40px #c33,inset 0-20px 40px #fff,inset 0-20px 100px #ff3,inset 0-40px 200px #f90,inset 0-80px 400px #c33}div.bigbang.burn.c::before{transition:width 2s,height 2s,top 2s,left 2s,background-color 2s;background:#000;width:180%;height:180%;top:-30%;left:-30%;box-shadow:0-2px 4px #000,0-2px 10px #000,0-10px 20px #000,0-20px 40px #000,inset 0-20px 40px #000,inset 0-20px 100px #000,inset 0-40px 200px #000,inset 0-80px 400px #000}.earthquake{animation:3.8s shake infinite alternate}.celestialLab .fields,.celestialLab .sequence .genus_selection section,.celestialLab .sequence .planet_selection section,.celestialLab .sequence .res_selection section{margin-top:.5rem}.celestialLab .fields .entity,.celestialLab .fields .name{display:inline-block;width:10rem;margin-right:1rem}.celestialLab .fields .entity{width:20rem}.celestialLab .fields .control{margin:.25rem 0}.celestialLab .fields .help{margin-top:0;position:absolute;right:.25rem;top:-1rem}.celestialLab .sequence{display:flex;margin-top:.5rem}.celestialLab .sequence .genus_selection{width:10rem}.celestialLab .sequence .genus_selection button{padding:1rem .5rem}.celestialLab .sequence .trait_selection{margin-top:.5rem;display:flex;flex-wrap:wrap}.celestialLab .sequence .planet_selection section>div,.celestialLab .sequence .trait_selection>div{width:11.5rem}.celestialLab .sequence .trait_selection.summary>div{width:23rem}.celestialLab .sequence .trait_selection.summary .field{display:flex;justify-content:space-between;padding-right:.5rem}.celestialLab .sequence .trait_selection.summary .field .rc{display:inline-block;min-width:7rem;text-align:center}.celestialLab .sequence .planet_selection,.celestialLab .sequence .res_selection{margin-left:2rem}.celestialLab .sequence .res_selection section>div,.popper .soldierEvaluation>div{display:flex;justify-content:space-between}.celestialLab .sequence .res_selection section>div>div:first-child{margin-right:.25rem}.celestialLab .sequence>div .field:not(:last-child){margin-bottom:0}.celestialLab .buttons{display:flex;justify-content:space-evenly}.celestialLab .create{margin-top:1rem;text-align:center}.celestialLab .genus,.celestialLab .resetLab{margin-bottom:.75rem;text-align:center}.celestialLab .genus>button,.celestialLab .resetLab>button{margin-top:.25rem;width:8.5rem}.celestialLab .b-tabs .tabs{overflow-x:visible}.celestialLab .b-tabs .tabs ul{flex-wrap:nowrap}.celestialLab .b-tabs .tabs li a{padding-left:.75em;padding-right:.75em}#main.custom-lab-active>.columns>.leftColumn{display:none!important}#main.custom-lab-active>.columns>#mainColumn{width:78%!important}.modalBody .fanatic,.modalBody .genus_selection{display:flex;flex-wrap:wrap}.modalBody .fanatic>.field,.modalBody .genus_selection>.field{margin-right:1rem;margin-bottom:.25rem}.bulletlistqueuestyle.bldQueue li,.bulletlistqueuestyle.bldQueue.right li,.listqueuestyle.bldQueue li,.listqueuestyle.bldQueue.right li,.numberedlistqueuestyle.bldQueue li,.numberedlistqueuestyle.bldQueue.right li{margin:.25rem 0;display:list-item}.bulletlistqueuestyle.bldQueue li:not(:last-child) .queued:after,.bulletlistqueuestyle.bldQueue.right li:not(:last-child) .queued:after,.listqueuestyle.bldQueue li:not(:last-child) .queued:after,.listqueuestyle.bldQueue.right li:not(:last-child) .queued:after,.numberedlistqueuestyle.bldQueue li:not(:last-child) .queued:after,.numberedlistqueuestyle.bldQueue.right li:not(:last-child) .queued:after{content:""}.numberedlistqueuestyle.bldQueue li,.numberedlistqueuestyle.bldQueue.right li{list-style-type:numeric;list-style-position:inside}.bulletlistqueuestyle.bldQueue li,.bulletlistqueuestyle.bldQueue.right li{list-style-type:disc;list-style-position:inside}.sticky{position:sticky;top:1rem;bottom:0;height:100vh;overflow-y:auto;overflow-x:hidden}@supports (scrollbar-width:auto){.sticky{scrollbar-width:thin}}.vscroll{overflow-x:hidden;overflow-y:auto;top:1rem;bottom:0}@supports (scrollbar-width:auto){.vscroll{scrollbar-width:thin}}.hscroll{overflow-x:auto;overflow-y:hidden;white-space:nowrap}@supports (scrollbar-width:auto){.hscroll{scrollbar-width:thin}}#evolution{height:calc(100vh - 6rem)}@supports (scrollbar-width:auto){.bldQueue,.resTabs>.tabs,.resTabs>section{scrollbar-width:thin}}.modal .modal-content{width:initial;min-width:42rem}.modal .modal-content .fuels{margin-top:.5rem}.modal .modal-content .avail span{margin:0 2.5rem 0 2.125rem}.popper{pointer-events:none}.popper .touchButton{pointer-events:all;height:1.25rem;margin-bottom:.25rem}.popper .soldierEvaluation>div.head{display:block;text-align:center}#powerStatus{white-space:nowrap}.pyro>.after,.pyro>.before{position:absolute;display:block;width:5px;height:5px;border-radius:50%;box-shadow:0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff,0 0#fff;-moz-animation:1s bang ease-out infinite backwards,1s gravity ease-in infinite backwards,5s position linear infinite backwards;-webkit-animation:1s bang ease-out infinite backwards,1s gravity ease-in infinite backwards,5s position linear infinite backwards;-o-animation:1s bang ease-out infinite backwards,1s gravity ease-in infinite backwards,5s position linear infinite backwards;-ms-animation:1s bang ease-out infinite backwards,1s gravity ease-in infinite backwards,5s position linear infinite backwards;animation:1s bang ease-out infinite backwards,1s gravity ease-in infinite backwards,5s position linear infinite backwards}.pyro>.after{-moz-animation-delay:1.25s,1.25s,1.25s;-webkit-animation-delay:1.25s,1.25s,1.25s;-o-animation-delay:1.25s,1.25s,1.25s;-ms-animation-delay:1.25s,1.25s,1.25s;animation-delay:1.25s,1.25s,1.25s;-moz-animation-duration:1.25s,1.25s,6.25s;-webkit-animation-duration:1.25s,1.25s,6.25s;-o-animation-duration:1.25s,1.25s,6.25s;-ms-animation-duration:1.25s,1.25s,6.25s;animation-duration:1.25s,1.25s,6.25s}.noise{position:absolute;top:-500px;right:-500px;bottom:-500px;left:-500px;background:url(/lib/noise.png)0 0;background-size:320px 320px;opacity:.35;animation:noise 1s steps(8,end) infinite both}.noise-wrapper{position:absolute;left:0;top:0;width:100%;height:100%;opacity:1;overflow:hidden;z-index:10}.noise-wrapper:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse at center,transparent 0,rgba(0,0,0,.75) 100%)}.signal-lost-bottom,.signal-lost-top{width:100%;height:0%;opacity:.9;background:#000;position:absolute;z-index:100}.signal-lost-top{top:0}.signal-lost-bottom{bottom:0}.refresh{position:relative;display:inline-block;height:1rem;width:1rem;font-size:1rem;cursor:pointer;margin-left:.5rem;top:.2rem}.font-overlay{z-index:999;position:absolute;top:1rem}#mobileNav{display:none}@media only screen and (max-width:48rem){html{font-size:clamp(12px,4.2vw,16px)!important;-moz-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none}.promoBar{bottom:0}#mobileNav{display:flex;position:fixed;bottom:1.2rem;left:0;right:0;z-index:30;height:2.4rem;border-top:1px solid}#mobileNav .mobile-nav-btn{flex:1;cursor:pointer;font-size:1rem;font-weight:800;letter-spacing:.04em;border:0;border-top:2px solid transparent;background:0 0;color:inherit;opacity:.75;transition:opacity .15s;text-shadow:0 0 5px rgba(0,0,0,.7);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#mobileNav .mobile-nav-btn.is-active{opacity:1;border-top-color:currentColor}.main{margin:.75rem;overflow-y:unset}.main .content .settings,.main .tabs ul{margin-left:0}.main .content .tabs ul{width:calc(100vw - 2rem)}.main .race,.main .resources{padding-top:.75rem}.main .resources{margin-top:-.75rem;height:calc(100vh - 6.9rem);padding-bottom:.5rem}.main .resources .vscroll{top:.5rem}.main .resTabs>section{top:.75rem;height:calc(100vh - 10.1rem)}.main .resTabs>.tab-content{padding-bottom:.5rem!important}.main .civics{padding:0}.main #mainTabs>.tab-content #settings{padding-bottom:1rem!important}#r_civics nav.tabs{overflow-x:clip}.main>.columns{display:block}.main>.columns>:first-child{min-width:unset}#mainColumn,#queueColumn,.leftColumn{width:100%!important;min-width:unset!important}.b-tabs .tab-content>.tab-item{padding-left:0!important;padding-right:0!important}#mainTabs>.tab-content>.tab-item{padding-top:.25rem!important}.resTabs{margin-top:-.25rem}.b-tabs .tabs ul{flex-wrap:nowrap}.b-tabs .tabs a,.b-tabs .tabs li{white-space:nowrap}.bldQueue,.msgQueue{resize:none}.leftColumn{height:auto;padding-bottom:3.7rem}#main.mobile-panel-game .leftColumn,#main.mobile-panel-queue .leftColumn #race,#main.mobile-panel-queue .leftColumn #resources,#mainColumn,#queueColumn,.leftColumn #sideQueue{display:none}#main.mobile-panel-game #mainColumn{display:block;padding-bottom:3.7rem}#main.mobile-panel-queue .leftColumn{display:block;height:auto;padding-top:.75rem;padding-bottom:3.7rem}#main.mobile-panel-queue .leftColumn #sideQueue,.leftColumn{display:block}#main.mobile-panel-queue .leftColumn #sideQueue #msgQueue{height:auto;overflow-y:visible}#main.mobile-panel-queue #mainColumn{display:none}.resources{height:calc(100svh - 8rem)}} \ No newline at end of file diff --git a/evolve/main.js b/evolve/main.js index 6debe547c..ace277fba 100644 --- a/evolve/main.js +++ b/evolve/main.js @@ -1,17015 +1,82 @@ -(() => { - // src/vars.js - var save = window.localStorage; - var global = { - seed: 1, - warseed: 1, - resource: {}, - evolution: {}, - tech: {}, - city: {}, - space: {}, - interstellar: {}, - portal: {}, - eden: {}, - tauceti: {}, - civic: {}, - race: {}, - genes: {}, - blood: {}, - stats: { - start: Date.now(), - days: 0, - tdays: 0 - }, - event: { - t: 200, - l: false - }, - m_event: { - t: 499, - l: false - } - }; - var tmp_vars = {}; - var breakdown = { - c: {}, - p: {} - }; - var power_generated = {}; - var p_on = {}; - var support_on = {}; - var int_on = {}; - var gal_on = {}; - var spire_on = {}; - var quantum_level = 0; - var achieve_level = 0; - var universe_level = 0; - var atrack = { t: 0 }; - function set_qlevel(q_level) { - quantum_level = q_level; - } - function set_alevel(a_level) { - achieve_level = a_level; - } - function set_ulevel(u_level) { - universe_level = u_level; - } - var hell_reports = {}; - var hell_graphs = {}; - var message_logs = { - view: "all" - }; - var message_filters = ["all", "progress", "queue", "building_queue", "research_queue", "combat", "spy", "events", "major_events", "minor_events", "achievements", "hell"]; - var callback_queue = /* @__PURE__ */ new Map(); - var active_rituals = {}; - Math.rand = function(min, max) { - return Math.floor(Math.random() * (max - min)) + min; - }; - global["seed"] = 2; - global["warseed"] = 2; - function seededRandom(min, max, alt, useSeed) { - max = max || 1; - min = min || 0; - let seed = useSeed || global[alt ? "warseed" : "seed"]; - let newSeed = (seed * 9301 + 49297) % 233280; - let rnd = newSeed / 233280; - if (!useSeed) { - global[alt ? "warseed" : "seed"] = newSeed; - } - return min + rnd * (max - min); - } - { - let global_data = save.getItem("evolved") || false; - if (global_data) { - let saveState = JSON.parse(LZString.decompressFromUTF16(global_data)); - if (saveState) { - global = saveState; - } else { - newGameData(); - } - } else { - newGameData(); - } - } - if (!global["version"]) { - global["version"] = "0.2.0"; - } - if (convertVersion(global["version"]) < 2060) { - Object.keys(global.resource).forEach(function(res) { - if (global.resource[res].crates) { - global.resource[res].crates = Math.ceil(global.resource[res].crates / 5); - } - if (global.resource[res].containers) { - global.resource[res].containers = Math.ceil(global.resource[res].containers / 5); - } - }); - } - if (convertVersion(global["version"]) < 2062 && global.civic.taxes !== void 0) { - switch (Number(global.civic.taxes.tax_rate)) { - case 0: - global.civic.taxes.tax_rate = 0; - break; - case 1: - global.civic.taxes.tax_rate = 10; - break; - case 2: - global.civic.taxes.tax_rate = 20; - break; - case 3: - global.civic.taxes.tax_rate = 30; - break; - case 4: - global.civic.taxes.tax_rate = 40; - break; - case 5: - global.civic.taxes.tax_rate = 50; - break; - } - } - if (convertVersion(global["version"]) === 2062 && global.civic.taxes !== void 0) { - if (global.civic.taxes.tax_rate == 2) { - global.civic.taxes.tax_rate = 20; - } - } - if (convertVersion(global["version"]) < 2065 && global.race !== void 0 && global.race.species === "sporgar") { - delete global.race["crafty"]; - delete global.race["hydrophilic"]; - global.race["infectious"] = 1; - global.race["parasite"] = 1; - if (!global.tech["military"] && global.tech["primitive"] && global.tech["primitive"] >= 3) { - global.civic["garrison"].display = true; - global.settings.showCivic = true; - global.city["garrison"] = { count: 0 }; - } - } - if (convertVersion(global["version"]) < 3002 && global["space"]) { - if (global.tech["space"] && global.tech["space"] >= 4) { - if (!global.space["living_quarters"]) { - global.space["living_quarters"] = { count: 0, on: 0 }; - } - if (!global.space["garage"]) { - global.space["garage"] = { count: 0 }; - } - if (!global.space["red_mine"]) { - global.space["red_mine"] = { count: 0, on: 0 }; - } - if (!global.space["fabrication"]) { - global.space["fabrication"] = { count: 0, on: 0 }; - } - if (!global.space["laboratory"]) { - global.space["laboratory"] = { count: 0, on: 0 }; - } - } - if (global.tech["space"] && global.tech["space"] >= 3) { - if (!global.space["iridium_mine"]) { - global.space["iridium_mine"] = { count: 0, on: 0 }; - } - if (!global.space["helium_mine"]) { - global.space["helium_mine"] = { count: 0, on: 0 }; - } - } - if (global.tech["hell"]) { - if (!global.space["geothermal"]) { - global.space["geothermal"] = { count: 0, on: 0 }; - } - } - } - if (convertVersion(global["version"]) < 3004 && global["settings"] && global.settings["space"] && global.settings.space.belt) { - global.space["space_station"] = { count: 0, on: 0, support: 0, s_max: 0 }; - } - if (convertVersion(global["version"]) < 4001 && global["city"] && global.city["factory"] && !global.city.factory["Nano"]) { - global.city.factory["Nano"] = 0; - } - if (convertVersion(global["version"]) < 4003 && global.stats["achieve"]) { - Object.keys(global.stats.achieve).forEach(function(key) { - global.stats.achieve[key] = 1; - }); - } - if (convertVersion(global["version"]) < 4010) { - if (global.stats["achieve"] && global.stats.achieve["doomed"]) { - global.stats["portals"] = 1; - } - } - if (convertVersion(global["version"]) < 4028 && global.stats["achieve"] && global.stats.achieve["genus_demonic"]) { - global.stats.achieve["biome_hellscape"] = global.stats.achieve["genus_demonic"]; - } - if (convertVersion(global["version"]) < 4029 && global.race["mutation"] && global.race["mutation"] > 0) { - global["resource"]["Genes"] = { - name: "Genes", - display: true, - value: 0, - amount: 0, - crates: 0, - diff: 0, - delta: 0, - max: -2, - rate: 0 - }; - for (let i = 0; i < global.race.mutation; i++) { - global.resource.Genes.amount += i + 1; - } - } - if (convertVersion(global["version"]) < 4031) { - if (global.tech && global.tech["gambling"] && global.tech["gambling"] === 2) { - global.tech["gambling"] = 3; - global.city.casino["on"] = 0; - } - if (global.tech["hunting"] && global.tech["hunting"] >= 3) { - global.tech["wind_plant"] = 1; - global.tech["hunting"] = 2; - } - let races2 = ["Human", "Humano", "Elf", "Elfo", "Orc", "Cath", "Wolven", "Centaur", "Centauro", "Kobold", "Goblin", "Gnome", "Ogre", "Ogro", "Cyclops", "Ciclope", "Troll", "Tortoisan", "Gecko", "Slitheryn", "Arraak", "Pterodacti", "Dracnid", "Ent", "Cacti", "Sporgar", "Shroomi", "Mantis", "Scorpid", "Antid", "Sharkin", "Octigoran", "Balorg", "Imp"]; - for (let i = 0; i < races2.length; i++) { - if (global.resource[races2[i]]) { - global.resource[global.race.species] = global.resource[races2[i]]; - delete global.resource[races2[i]]; - break; - } - } - } - if (convertVersion(global["version"]) < 4032) { - if (global.race.species === "balorg") { - global.race["slaver"] = 1; - } - } - if (convertVersion(global["version"]) < 5e3) { - global["portal"] = {}; - if (global["city"] && global.city["factory"] && !global.city.factory["Stanene"]) { - global.city.factory["Stanene"] = 0; - } - } - if (convertVersion(global["version"]) === 5e3) { - if (global.civic["craftsman"]) { - global.civic.craftsman["assigned"] = 0; - if (global.city["foundry"]) { - let workers = global.city.foundry.Plywood + global.city.foundry.Brick + global.city.foundry.Wrought_Iron + global.city.foundry.Sheet_Metal + global.city.foundry.Mythril + global.city.foundry.Aerogel; - global.civic.craftsman.workers = workers; - } - } - } - if (convertVersion(global["version"]) <= 5008 && global["queue"] && global["queue"]["queue"]) { - global.queue.queue = []; - } - if (convertVersion(global["version"]) <= 5011 && global.stats["died"]) { - global.stats["attacks"] = global.stats["died"]; - } - if (convertVersion(global["version"]) <= 5016 && global.race.species === "mantis") { - delete global.race["frail"]; - global.race["cannibalize"] = 1; - global.city["s_alter"] = { - count: 0, - rage: 0, - mind: 0, - regen: 0, - mine: 0, - harvest: 0 - }; - } - if (convertVersion(global["version"]) < 6e3) { - if (global.race.species === "imp" || global.race.species === "balorg") { - global.race["soul_eater"] = 1; - } - } - if (convertVersion(global["version"]) < 6001) { - if (global.stats["achieve"]) { - Object.keys(global.stats.achieve).forEach(function(key) { - if (!global.stats.achieve[key]["l"]) { - global.stats.achieve[key] = { l: global.stats.achieve[key] }; - } - }); - } - } - if (convertVersion(global["version"]) < 6004 && global.city["windmill"] && !global.race["soul_eater"] && !global.race["carnivore"]) { - delete global.city["windmill"]; - } - if (convertVersion(global["version"]) < 6006 && !global.city["windmill"] && global.tech["wind_plant"] && (global.race["soul_eater"] || global.race["carnivore"])) { - global.city["windmill"] = { count: 0 }; - } - if (convertVersion(global["version"]) < 6006 && global.tech["wind_plant"] && !global.race["soul_eater"] && !global.race["carnivore"]) { - delete global.tech["wind_plant"]; - } - if (convertVersion(global["version"]) <= 6008 && global["r_queue"] && global["r_queue"]["queue"]) { - for (let i = 0; i < global.r_queue.queue.length; i++) { - global.r_queue.queue[i]["time"] = 0; - } - } - if (convertVersion(global["version"]) < 6010 && global.race["Plasmid"]) { - if (global.race.Plasmid.anti < 0) { - global.race.Plasmid.anti = 0; - } - if (global.race.Plasmid.count < 0) { - global.race.Plasmid.count = 0; - } - if (global.tech["foundry"] && !global.race["kindling_kindred"]) { - global.resource.Plywood.display = true; - } - } - if (convertVersion(global["version"]) < 6011 && !global.city["ptrait"]) { - global.city["ptrait"] = "none"; - } - if (convertVersion(global["version"]) < 6012 && global.portal["fortress"]) { - global.portal.fortress["s_ntfy"] = "Yes"; - } - if (convertVersion(global["version"]) < 6014) { - if (global.race["noble"] && global.tech["currency"] && global.tech["currency"] === 4) { - global.tech["currency"] = 5; - } - if (global["settings"]) { - global.settings["cLabels"] = true; - } - } - if (convertVersion(global["version"]) < 6016 && global.stats && global.stats["reset"] && global.stats["achieve"]) { - global.stats["mad"] = global.stats["reset"]; - global.stats["bioseed"] = 0; - global.stats["blackhole"] = 0; - let blkhle = ["whitehole", "heavy", "canceled", "eviltwin", "microbang"]; - for (let i = 0; i < blkhle.length; i++) { - if (global.stats.achieve[blkhle[i]]) { - global.stats["blackhole"]++; - global.stats["mad"]--; - } - } - let genus = ["genus_humanoid", "genus_animal", "genus_small", "genus_giant", "genus_reptilian", "genus_avian", "genus_insectoid", "genus_plant", "genus_fungi", "genus_aquatic", "genus_demonic", "genus_angelic"]; - for (let i = 0; i < genus.length; i++) { - if (global.stats.achieve[genus[i]]) { - global.stats["bioseed"]++; - global.stats["mad"]--; - } - } - } - if (convertVersion(global["version"]) < 6018) { - if (global["space"] && global.space["swarm_satellite"]) { - global.space["swarm_satellite"].count *= 2; - } - } - if (convertVersion(global["version"]) < 6020 && global.race["mutation"] && global.race["universe"] && global.race["universe"] === "antimatter" && global.race["mutation"] > 0) { - let a_level = 1; - if (global.race["no_trade"]) { - a_level++; - } - if (global.race["no_craft"]) { - a_level++; - } - if (global.race["no_crispr"]) { - a_level++; - } - if (global.race["weak_mastery"]) { - a_level++; - } - global.stats.achieve["cross"] = { l: a_level, a: a_level }; - } - if (convertVersion(global["version"]) < 7e3) { - if (!global.civic["govern"]) { - global.civic["govern"] = { - type: "oligarchy", - rev: 0, - fr: 0 - }; - } - } - if (convertVersion(global["version"]) < 7004 && global["queue"] && global["queue"]["queue"]) { - for (let i = 0; i < global.queue.queue.length; i++) { - global.queue.queue[i]["q"] = 1; - global.queue.queue[i]["t_max"] = global.queue.queue[i]["time"]; - } - } - if (convertVersion(global["version"]) < 7007 && global["queue"] && global["queue"]["queue"]) { - for (let i = 0; i < global.queue.queue.length; i++) { - global.queue.queue[i]["qs"] = 1; - } - } - if (convertVersion(global["version"]) < 7019 && global.race["fraile"]) { - delete global.race["fraile"]; - global.race["frail"] = 1; - } - if (convertVersion(global["version"]) < 7028) { - if (global.stats["achieve"] && global.stats.achieve["blood_war"] && global.stats.achieve["blood_war"]["e"]) { - global.stats.achieve["blood_war"].e = void 0; - } - } - if (convertVersion(global["version"]) < 8e3 && global.civic["foreign"]) { - if (typeof global.civic.foreign.gov0["anx"] === "undefined") { - global.civic.foreign.gov0["anx"] = false; - } - if (typeof global.civic.foreign.gov1["anx"] === "undefined") { - global.civic.foreign.gov1["anx"] = false; - } - if (typeof global.civic.foreign.gov2["anx"] === "undefined") { - global.civic.foreign.gov2["anx"] = false; - } - if (typeof global.civic.foreign.gov0["buy"] === "undefined") { - global.civic.foreign.gov0["buy"] = false; - } - if (typeof global.civic.foreign.gov1["buy"] === "undefined") { - global.civic.foreign.gov1["buy"] = false; - } - if (typeof global.civic.foreign.gov2["buy"] === "undefined") { - global.civic.foreign.gov2["buy"] = false; - } - } - if (convertVersion(global["version"]) < 8e3) { - if (global["settings"] && global.settings.hasOwnProperty("tLabels")) { - delete global.settings["tLabels"]; - } - } - if (convertVersion(global["version"]) < 8003) { - if (global.stats["harmony"] && global.stats["harmony"] > 0) { - global.stats["harmony"] = parseFloat(global.stats["harmony"].toFixed(2)); - global.race["Harmony"].count = parseFloat(global.race["Harmony"].count.toFixed(2)); - } - } - if (convertVersion(global["version"]) < 8017) { - if (global.city["garrison"]) { - global.city.garrison["on"] = global.city["garrison"].count; - } - } - if (convertVersion(global["version"]) < 9e3) { - if (global.settings && global.settings.showCity) { - global.settings.showCiv = global.settings.showCity; - } - } - if (convertVersion(global["version"]) < 9005) { - if (global.race.hasOwnProperty("terrifying") && global.tech.hasOwnProperty("gambling") && !global.space.hasOwnProperty("spc_casino")) { - global.space["spc_casino"] = { count: 0, on: 0 }; - } - } - if (convertVersion(global["version"]) < 9009) { - if (global.genes.hasOwnProperty("ancients") && global.genes["ancients"] >= 3) { - if (global.genes["ancients"] === 4) { - global.genes["ancients"] = 5; - } else { - global.race.Plasmid.count += 300; - } - } - } - if (convertVersion(global["version"]) < 9010) { - ["species", "gods", "old_gods"].forEach((field) => { - if (global.race[field] === "orge") { - global.race[field] = "ogre"; - } - }); - if (global.stats.hasOwnProperty("achieve") && global.stats.achieve.hasOwnProperty("extinct_orge")) { - global.stats.achieve["extinct_ogre"] = global.stats.achieve["extinct_orge"]; - delete global.stats.achieve["extinct_orge"]; - } - if (global.resource.hasOwnProperty("orge")) { - global.resource["ogre"] = global.resource["orge"]; - delete global.resource["orge"]; - } - if (global["city"] && global.city["factory"] && !global.city.factory["Furs"]) { - global.city.factory["Furs"] = 0; - } - } - if (convertVersion(global["version"]) < 9014) { - ["seraph", "unicorn", "custom"].forEach((field) => { - if (global.race.species === field) { - if (field === "custom" && global.hasOwnProperty("custom") && global.custom.race0.genus === "angelic" || field !== "custom") { - global.race["holy"] = 1; - } - } - }); - if (global.hasOwnProperty("arpa") && global.arpa.hasOwnProperty("sequence")) { - global.arpa.sequence["labs"] = 0; - } - } - if (convertVersion(global["version"]) < 1e5) { - delete global.city["lumber"]; - delete global.city["stone"]; - global.stats["dark"] = 0; - if (global.race["Dark"]) { - global.stats["dark"] = global.race["Dark"].count; - } - if (global.city.hasOwnProperty("smelter")) { - if (!global.city.smelter.hasOwnProperty("Star")) { - global.city.smelter["Star"] = 0; - } - if (!global.city.smelter.hasOwnProperty("StarCap")) { - global.city.smelter["StarCap"] = 0; - } - if (!global.city.smelter.hasOwnProperty("Inferno")) { - global.city.smelter["Inferno"] = 0; - } - } - if (!global.hasOwnProperty("warseed")) { - global["warseed"] = global.seed + 1; - Math.war = global.hasOwnProperty("warseed") ? global.warseed : global.seed; - } - if (global.portal.hasOwnProperty("bireme")) { - global.portal.bireme["crew"] = 0; - global.portal.bireme["mil"] = 0; - } - if (global.portal.hasOwnProperty("transport")) { - global.portal.transport["crew"] = 0; - global.portal.transport["mil"] = 0; - if (!global.portal.transport["cargo"]) { - global.portal.transport["cargo"] = { - used: 0, - max: 0, - Crystal: 0, - Lumber: 0, - Stone: 0, - Furs: 0, - Copper: 0, - Iron: 0, - Aluminium: 0, - Cement: 0, - Coal: 0, - Oil: 0, - Uranium: 0, - Steel: 0, - Titanium: 0, - Alloy: 0, - Polymer: 0, - Iridium: 0, - Helium_3: 0, - Deuterium: 0, - Neutronium: 0, - Adamantite: 0, - Infernite: 0, - Elerium: 0, - Nano_Tube: 0, - Graphene: 0, - Stanene: 0, - Bolognium: 0, - Vitreloy: 0, - Orichalcum: 0, - Plywood: 0, - Brick: 0, - Wrought_Iron: 0, - Sheet_Metal: 0, - Mythril: 0, - Aerogel: 0, - Nanoweave: 0, - Scarletite: 0 - }; - } - } - if (global.hasOwnProperty("settings") && global.settings.portal && global.settings.portal.spire && !global.portal.hasOwnProperty("purifier")) { - global.settings.portal.spire = false; - } - if (global.portal.hasOwnProperty("mechbay") && !Array.isArray(global.portal.mechbay.mechs)) { - global.portal.mechbay.mechs = []; - } - if (global.portal["transport"] && global.portal.transport.count >= 1 && !global.tech["hell_spire"]) { - global.tech["hell_spire"] = 1; - global.settings.portal.spire = true; - global.settings.showCargo = true; - global.portal["purifier"] = { count: 0, on: 0, support: 0, s_max: 0, supply: 0, sup_max: 100, diff: 0 }; - global.portal["port"] = { count: 0, on: 0 }; - } - if (global.tech.hasOwnProperty("waygate") && !global.portal.hasOwnProperty("waygate")) { - delete global.tech["waygate"]; - } - if (!global.hasOwnProperty("blood")) { - global["blood"] = {}; - } - } - if (convertVersion(global["version"]) < 100013) { - if (global.hasOwnProperty("settings") && global.settings.hasOwnProperty("showPowerGrid") && global.hasOwnProperty("race") && global.race["infiltrator"] && global.hasOwnProperty("tech") && global.tech.hasOwnProperty("high_tech") && global.tech.high_tech >= 2) { - global.settings.showPowerGrid = true; - } - } - if (convertVersion(global["version"]) < 100014) { - if (global.race["Dark"]) { - global.stats["dark"] = global.race["Dark"].count; - } - if (global.race["casting"] && global.race["evil"]) { - global.race.casting.total -= global.race.casting.lumberjack; - global.race.casting.lumberjack = 0; - } - if (global["queue"] && global["queue"]["queue"]) { - for (let i = 0; i < global.queue.queue.length; i++) { - if (global.queue.queue[i].type === "arpa") { - global.queue.queue[i].type = global.queue.queue[i].action; - global.queue.queue[i].action = "arpa"; - } - } - } - } - if (convertVersion(global["version"]) < 100015) { - if (global.race["cataclysm"]) { - global.settings.showPowerGrid = true; - } - } - if (convertVersion(global["version"]) < 100016) { - ["l", "a", "e", "h", "m", "mg"].forEach(function(affix) { - if (global.stats.hasOwnProperty("spire") && global.stats.spire.hasOwnProperty(affix) && global.stats.spire[affix].hasOwnProperty("lord")) { - global.stats.spire[affix]["dlstr"] = global.stats.spire[affix].lord; - } - }); - if (global.hasOwnProperty("special") && global.special.hasOwnProperty("gift") && global.special.gift) { - global.special.gift = { g2019: true }; - } - } - if (convertVersion(global["version"]) < 100017) { - if (global.hasOwnProperty("settings") && !global.settings.hasOwnProperty("font")) { - global.settings["font"] = "standard"; - } - if (global.hasOwnProperty("lastMsg") && global.lastMsg) { - global.lastMsg = [global.lastMsg]; - } - } - if (convertVersion(global["version"]) < 100023) { - if (global.city.hasOwnProperty("rock_quarry")) { - global.city.rock_quarry["asbestos"] = 50; - } - if (global.race["smoldering"]) { - global.resource["Chrysotile"] = { - name: "Chrysotile", - display: true, - value: 5, - amount: 0, - crates: 0, - diff: 0, - delta: 0, - max: 200, - rate: 1 - }; - if (!global.race["kindling_kindred"]) { - global.resource.Lumber.display = false; - global.resource.Crates.amount += global.resource.Lumber.crates; - global.resource.Lumber.crates = 0; - global.resource.Containers.amount += global.resource.Lumber.containers; - global.resource.Lumber.containers = 0; - global.resource.Lumber.trade = 0; - global.resource.Plywood.display = false; - if (global.city["sawmill"]) { - delete global.city["sawmill"]; - } - if (global.city["graveyard"]) { - delete global.city["graveyard"]; - } - if (global.city["lumber_yard"]) { - delete global.city["lumber_yard"]; - } - delete global.tech["axe"]; - delete global.tech["reclaimer"]; - delete global.tech["saw"]; - global.civic.lumberjack.display = false; - global.civic.lumberjack.workers = 0; - global.civic.lumberjack.assigned = 0; - if (global.civic.d_job === "lumberjack") { - global.civic.d_job = "unemployed"; - } - if (global.race["casting"]) { - global.race.casting.total -= global.race.casting.lumberjack; - global.race.casting.lumberjack = 0; - } - if (global.tech["foundry"]) { - global.civic.craftsman.workers -= global.city.foundry["Plywood"]; - global.city.foundry.crafting -= global.city.foundry["Plywood"]; - global.city.foundry["Plywood"] = 0; - } - if (global.city["s_alter"]) { - global.city.s_alter.harvest = 0; - } - if (global.interstellar["mass_ejector"]) { - global.interstellar.mass_ejector.total -= global.interstellar.mass_ejector.Lumber; - global.interstellar.mass_ejector.Lumber = 0; - } - } - } - } - if (convertVersion(global["version"]) < 100025) { - if (global.race["casting"] && global.race["smoldering"]) { - global.race.casting.total -= global.race.casting.lumberjack; - global.race.casting.lumberjack = 0; - } - } - if (convertVersion(global["version"]) < 100032) { - if (global.civic.hasOwnProperty("free")) { - global.civic["hunter"] = { - job: "hunter", - display: global.race["carnivore"] || global.race["soul_eater"], - workers: global.race["carnivore"] || global.race["soul_eater"] ? global.civic.free : 0, - max: -1 - }; - global.civic["unemployed"] = { - job: "unemployed", - display: !(global.race["carnivore"] || global.race["soul_eater"]), - workers: global.race["carnivore"] || global.race["soul_eater"] ? 0 : global.civic.free, - max: -1 - }; - if (global.civic.d_job === "unemployed" && (global.race["carnivore"] || global.race["soul_eater"])) { - global.civic.d_job = "hunter"; - } - delete global.civic.free; - } - } - if (convertVersion(global["version"]) < 100033) { - if (global.hasOwnProperty("special") && global.special.hasOwnProperty("egg")) { - global.special.egg["2020"] = JSON.parse(JSON.stringify(global.special["egg"])); - delete global.special.egg.egg1; - delete global.special.egg.egg2; - delete global.special.egg.egg3; - delete global.special.egg.egg4; - delete global.special.egg.egg5; - delete global.special.egg.egg6; - delete global.special.egg.egg7; - delete global.special.egg.egg8; - delete global.special.egg.egg9; - delete global.special.egg.egg10; - delete global.special.egg.egg11; - delete global.special.egg.egg12; - } - } - if (convertVersion(global["version"]) < 100035) { - if (global.race["terrifying"]) { - delete global.tech["trade"]; - delete global.city["trade"]; - } - } - if (convertVersion(global["version"]) < 100040) { - const dt = /* @__PURE__ */ new Date(); - if (dt.getFullYear() === 2021 && dt.getMonth() === 3 && dt.getDate() <= 14 && global.race.hasOwnProperty("species") && global.race.species === "wolven") { - global.race["hrt"] = "wolven"; - } - } - if (convertVersion(global["version"]) < 100041) { - global["event"] = { - t: 499, - l: false - }; - global["m_event"] = { - t: 99, - l: false - }; - } - if (convertVersion(global["version"]) < 101e3) { - if (global.race["jtype"] && global.race["jtype"] === "animal") { - global.race["jtype"] = "omnivore"; - } - if (global.hasOwnProperty("custom") && global.custom.hasOwnProperty("race0") && global.custom.race0.hasOwnProperty("genus") && global.custom.race0.genus === "animal") { - global.custom.race0.genus = "omnivore"; - } - if (global.portal.hasOwnProperty("mechbay")) { - for (let i = 0; i < global.portal.mechbay.mechs.length; i++) { - if (!global.portal.mechbay.mechs[i].hasOwnProperty("infernal")) { - global.portal.mechbay.mechs[i]["infernal"] = false; - } - } - } - if (global.hasOwnProperty("stats") && global.stats.hasOwnProperty("achieve") && global.stats.achieve.hasOwnProperty("genus_animal")) { - global.stats.achieve["genus_carnivore"] = global.stats.achieve.genus_animal; - delete global.stats.achieve.genus_animal; - } - } - if (convertVersion(global["version"]) < 101001) { - if (global.hasOwnProperty("race") && global.race.hasOwnProperty("governor") && global.race.governor.hasOwnProperty("config") && global.race.governor.config.hasOwnProperty("merc")) { - global.race.governor.config.merc["reserve"] = 100; - } - } - if (convertVersion(global["version"]) < 101002) { - if (global.race.hasOwnProperty("frenzy")) { - global.race["blood_thirst"] = global.race["frenzy"]; - delete global.race["frenzy"]; - if (global.city.hasOwnProperty("morale") && global.city.morale.hasOwnProperty("frenzy")) { - global.city.morale["blood_thirst"] = global.city.morale["frenzy"]; - delete global.city.morale["frenzy"]; - } - } - if (global.hasOwnProperty("custom") && global.custom.hasOwnProperty("race0") && global.custom.race0.hasOwnProperty("traits")) { - for (let i = 0; i < global.custom.race0.traits.length; i++) { - if (global.custom.race0.traits[i] === "frenzy") { - global.custom.race0.traits[i] = "blood_thirst"; - } - } - } - if (global.race["jtype"] && global.race["jtype"] === "omnivore") { - global.race["jtype"] = "carnivore"; - } - if (global.hasOwnProperty("custom") && global.custom.hasOwnProperty("race0") && global.custom.race0.hasOwnProperty("genus") && global.custom.race0.genus === "omnivore") { - global.custom.race0.genus = "carnivore"; - } - } - if (convertVersion(global["version"]) < 101010) { - if (global.hasOwnProperty("settings") && !global.settings.hasOwnProperty("q_merge")) { - global.settings["q_merge"] = "merge_nearby"; - } - } - if (convertVersion(global["version"]) < 101011) { - if (global.hasOwnProperty("settings") && !global.settings.hasOwnProperty("msgFilters")) { - global.settings["msgFilters"] = { - all: true, - progress: true, - queue: global["queue"] && global.queue.display, - building_queue: global["r_queue"] && global.r_queue.display, - research_queue: global["r_queue"] && global.r_queue.display, - combat: global.civic["garrison"] && global.civic.garrison.display, - spy: global.tech["spy"] && global.tech.spy >= 2, - events: true, - major_events: true, - minor_events: true, - achievements: global.stats["achieve"] && Object.keys(global.stats.achieve).length > 0 || global.stats["feat"] && Object.keys(global.stats.feat).length > 0, - hell: global.settings.showPortal || global.stats.blackhole || global.stats.ascend || global.stats.descend - }; - } - if (global.race.hasOwnProperty("inflation")) { - ["supercollider", "stock_exchange", "launch_facility", "monuments", "railway", "roid_eject", "nexus", "syphon"].forEach(function(arpa2) { - if (global.tech.hasOwnProperty(arpa2)) { - global.race.inflation += global.tech[arpa2] * 10; - } - }); - } - } - if (convertVersion(global["version"]) < 101012) { - if (global.civic["garrison"]) { - global.civic.garrison["rate"] = 0; - } - } - if (convertVersion(global["version"]) < 101014) { - if (global.hasOwnProperty("settings") && global.settings.hasOwnProperty("msgFilters")) { - Object.keys(global.settings.msgFilters).forEach(function(filter) { - global.settings.msgFilters[filter] = { - unlocked: global.settings.msgFilters[filter] ? true : false, - vis: global.settings.msgFilters[filter] ? true : false, - max: 60, - save: 3 - }; - }); - } - if (global.hasOwnProperty("lastMsg") && global.lastMsg) { - let lastMsg = {}; - message_filters.forEach(function(filter) { - lastMsg[filter] = []; - }); - global.lastMsg.forEach(function(msg) { - if (msg.t) { - msg.t.forEach(function(tag) { - lastMsg[tag].push({ m: msg.m, c: msg.c }); - }); - } else { - lastMsg.all.push({ m: msg.m, c: msg.c }); - } - }); - global.lastMsg = lastMsg; - } - } - if (convertVersion(global["version"]) <= 101014 && !global["revision"]) { - if (global.race["cataclysm"] && global.race["universe"] && global.race["universe"] === "magic" && global.tech["magic"] && global.tech["magic"] >= 2) { - global.space["pylon"] = { count: 0 }; - } - } - if (convertVersion(global["version"]) < 101015) { - if (global.hasOwnProperty("special") && global.special.hasOwnProperty("trick")) { - global.special.trick["2020"] = JSON.parse(JSON.stringify(global.special["trick"])); - delete global.special.trick.trick1; - delete global.special.trick.trick2; - delete global.special.trick.trick3; - delete global.special.trick.trick4; - delete global.special.trick.trick5; - delete global.special.trick.trick6; - delete global.special.trick.trick7; - delete global.special.trick.trick8; - delete global.special.trick.trick9; - delete global.special.trick.trick10; - delete global.special.trick.trick11; - delete global.special.trick.trick12; - } - } - if (convertVersion(global["version"]) < 102e3) { - if (global.hasOwnProperty("portal") && global.portal.hasOwnProperty("fortress") && !global.portal.fortress.hasOwnProperty("nocrew")) { - global.portal.fortress["nocrew"] = false; - } - if (global.city.hasOwnProperty("smelter") && !global.city.smelter.hasOwnProperty("Iridium")) { - global.city.smelter["Iridium"] = 0; - } - if (global.hasOwnProperty("portal") && global.portal.hasOwnProperty("mechbay") && !global.portal.mechbay.hasOwnProperty("active")) { - global.portal.mechbay["active"] = 0; - global.portal.mechbay["scouts"] = 0; - } - } - if (convertVersion(global["version"]) < 102001) { - if (global.race["blood_thirst"] && global.race.blood_thirst > 3) { - global.race.blood_thirst = 1; - } - if (global.race["rainbow"] && global.race.rainbow > 3) { - global.race.rainbow = 1; - } - } - if (convertVersion(global["version"]) < 102005) { - if (!global.stats["cores"] && global.race.hasOwnProperty("AICore")) { - global.stats["cores"] = global.race.AICore.count; - } - } - if (convertVersion(global["version"]) < 102006) { - if (global.race["artifical"]) { - if (global.race["calm"]) { - if (global.resource.hasOwnProperty("Zen")) { - global.resource.Zen.display = true; - } - global.city["meditation"] = { count: 0 }; - } - if (global.race["cannibalize"]) { - global.city["s_alter"] = { - count: 0, - rage: 0, - mind: 0, - regen: 0, - mine: 0, - harvest: 0 - }; - } - if (global.race["magnificent"]) { - global.city["shrine"] = { - count: 0, - morale: 0, - metal: 0, - know: 0, - tax: 0 - }; - } - } - } - if (convertVersion(global["version"]) < 102007) { - if (global.stats.hasOwnProperty("achieve")) { - delete global.stats.achieve["extinct_sludge"]; - } - } - if (convertVersion(global["version"]) < 102012) { - if (global.city.hasOwnProperty("ptrait")) { - global.city.ptrait = global.city.ptrait === "none" ? [] : [global.city.ptrait]; - } - if (global.tech["hell_ruins"] && global.tech.hell_ruins >= 3) { - global.tech["hell_vault"] = 1; - } - } - if (convertVersion(global["version"]) < 102015) { - if (global.race.hasOwnProperty("governor") && global.race.governor.hasOwnProperty("tasks")) { - for (let task in global.race.governor.tasks) { - if (global.race.governor.tasks[task] === "asssemble") { - global.race.governor.tasks[task] = "assemble"; - } - } - } - if (global["settings"] && global.settings.hasOwnProperty("restoreCheck")) { - delete global.settings["restoreCheck"]; - } - } - if (convertVersion(global["version"]) < 102017) { - if (global.portal.hasOwnProperty("fortress")) { - global.portal.observe = { - settings: { - expanded: false, - average: false, - hyperSlow: false, - display: "game_days", - dropKills: true, - dropGems: true - }, - stats: { - total: { - start: { year: global.city.calendar.year, day: global.city.calendar.day }, - days: 0, - wounded: 0, - died: 0, - revived: 0, - surveyors: 0, - sieges: 0, - kills: { - drones: 0, - patrols: 0, - sieges: 0, - guns: 0, - soul_forge: 0, - turrets: 0 - }, - gems: { - patrols: 0, - guns: 0, - soul_forge: 0, - crafted: 0, - turrets: 0 - } - }, - period: { - start: { year: global.city.calendar.year, day: global.city.calendar.day }, - days: 0, - wounded: 0, - died: 0, - revived: 0, - surveyors: 0, - sieges: 0, - kills: { - drones: 0, - patrols: 0, - sieges: 0, - guns: 0, - soul_forge: 0, - turrets: 0 - }, - gems: { - patrols: 0, - guns: 0, - soul_forge: 0, - crafted: 0, - turrets: 0 - } - } - }, - graphID: 0, - graphs: {} - }; - } - if (global.tech.hasOwnProperty("genetics") && global.tech.genetics > 1 && global.hasOwnProperty("arpa")) { - if (!global.arpa.hasOwnProperty("sequence")) { - global.arpa["sequence"] = { - max: 5e4, - progress: 0, - time: 5e4, - on: false - }; - } - if (!global.arpa.sequence["boost"]) { - global.arpa.sequence["boost"] = false; - } - if (!global.arpa.sequence["auto"]) { - global.arpa.sequence["auto"] = false; - } - if (!global.arpa.sequence["labs"]) { - global.arpa.sequence["labs"] = 0; - } - } - } - if (convertVersion(global["version"]) < 102021) { - if (global.hasOwnProperty("custom") && !global.custom.hasOwnProperty("race0")) { - let race = global.race.hasOwnProperty("species") ? global.race.species : "protoplasm"; - if (global.galaxy.hasOwnProperty("alien1") && global.galaxy.alien1.id === "custom") { - global.galaxy.alien1.id = race === "human" ? "elven" : "human"; - } - if (global.galaxy.hasOwnProperty("alien2") && global.galaxy.alien2.id === "custom") { - global.galaxy.alien2.id = race === "orc" || global.galaxy.alien1.id === "orc" ? "cath" : "orc"; - } - } - } - if (convertVersion(global["version"]) < 103e3) { - if (!global.hasOwnProperty("tauceti")) { - global["tauceti"] = {}; - } - if (global.race.species === "protoplasm") { - if (global.evolution.hasOwnProperty("sexual_reproduction")) { - global.tech["evo"] = global.evolution.sexual_reproduction.count > 0 ? 2 : 1; - delete global.evolution["sexual_reproduction"]; - } - [ - ["phagocytosis", { evo: 3, evo_animal: 1 }], - ["chloroplasts", { evo: 3, evo_plant: 1 }], - ["chitin", { evo: 3, evo_fungi: 1 }], - ["exterminate", { evo: 7, evo_synthetic: 2 }], - ["multicellular", { evo: 4 }], - ["spores", { evo: 5 }], - ["poikilohydric", { evo: 5 }], - ["bilateral_symmetry", { evo: 5, evo_insectoid: 1, evo_mammals: 1, evo_eggshell: 1, evo_aquatic: 1, evo_fey: 1, evo_sand: 1, evo_heat: 1, evo_polar: 1 }], - ["bryophyte", { evo: 7 }], - ["athropods", { evo: 7, evo_insectoid: 2 }], - ["mammals", { evo: 6, evo_humanoid: 1, evo_giant: 1, evo_small: 1, evo_animalism: 1, evo_demonic: 1, evo_angelic: 1 }], - ["humanoid", { evo: 7, evo_humanoid: 2 }], - ["gigantism", { evo: 7, evo_giant: 2 }], - ["dwarfism", { evo: 7, evo_small: 2 }], - ["animalism", { evo: 7, evo_animalism: 2 }], - ["carnivore", { evo_animalism: 3, evo_carnivore: 2 }], - ["herbivore", { evo_animalism: 3, evo_herbivore: 2 }], - ["omnivore", { evo_animalism: 3, evo_omnivore: 2 }], - ["celestial", { evo: 7, evo_angelic: 2 }], - ["demonic", { evo: 7, evo_demonic: 2 }], - ["aquatic", { evo: 7, evo_aquatic: 2 }], - ["fey", { evo: 7, evo_fey: 2 }], - ["heat", { evo: 7, evo_heat: 2 }], - ["polar", { evo: 7, evo_polar: 2 }], - ["sand", { evo: 7, evo_sand: 2 }], - ["eggshell", { evo: 6, evo_eggshell: 2 }], - ["endothermic", { evo: 7, evo_avian: 2 }], - ["ectothermic", { evo: 7, evo_reptilian: 2 }], - ["bunker", { evo_challenge: 1 }] - ].forEach(function(step) { - if (global.evolution.hasOwnProperty(step[0]) && global.evolution[step[0]].count > 0) { - for (let [key, value] of Object.entries(step[1])) { - global.tech[key] = value; - } - } - delete global.evolution[step[0]]; - }); - global.evolution["mloaded"] = 1; - global.evolution["gmloaded"] = 1; - } - } - if (convertVersion(global["version"]) < 103001) { - if (!global.hasOwnProperty("prestige")) { - global.prestige = {}; - } - if (global.race.Plasmid && global.race.Plasmid.hasOwnProperty("anti")) { - global.prestige["AntiPlasmid"] = { count: global.race.Plasmid.anti }; - } - ["Plasmid", "Phage", "AICore", "Dark", "Harmony"].forEach(function(res) { - if (global.race.hasOwnProperty(res)) { - global.prestige[res] = { count: global.race[res].count }; - delete global.race[res]; - } - }); - ["Artifact", "Blood_Stone"].forEach(function(res) { - if (global.resource.hasOwnProperty(res)) { - global.prestige[res] = { count: global.resource[res].amount }; - delete global.resource[res]; - } - }); - if (!global.stats.hasOwnProperty("synth") && global.race.hasOwnProperty("srace")) { - global.stats["synth"] = {}; - global.stats.synth[global.race.srace] = true; - } - if (global.race.hasOwnProperty("governor") && global.race.governor.hasOwnProperty("config") && global.race.governor.config.hasOwnProperty("trash")) { - ["Infernite", "Elerium", "Copper", "Iron"].forEach(function(res) { - if (global.race.governor.config.trash.hasOwnProperty(res) && typeof global.race.governor.config.trash[res] === "number") { - global.race.governor.config.trash[res] = { v: global.race.governor.config.trash[res], s: true }; - } - }); - } - } - if (convertVersion(global["version"]) < 103002) { - if (global.portal.hasOwnProperty("observe") && global.portal.observe.hasOwnProperty("stats")) { - global.portal.observe.stats.period.gems["surveyors"] = 0; - global.portal.observe.stats.total.gems["surveyors"] = 0; - } - } - if (convertVersion(global["version"]) < 103011) { - if (global.city.hasOwnProperty("slave_pen") && global.city.slave_pen.hasOwnProperty("slaves")) { - global.resource.Slave.amount = global.city.slave_pen.slaves; - delete global.city.slave_pen.slaves; - } - } - if (convertVersion(global["version"]) < 103014) { - if (global.race["cataclysm"] && !global.race["start_cataclysm"]) { - global.civic.craftsman.display = true; - } - if (global.race["lone_survivor"] && (global.tauceti["tau_factory"] && global.tauceti.tau_factory.count > 0 || global.tauceti["womling_station"] && global.tauceti.womling_station.count > 0)) { - global.civic.craftsman.display = true; - } - } - if (convertVersion(global["version"]) <= 103015) { - if (global.portal.hasOwnProperty("harbour")) { - global.portal["harbor"] = global.portal.harbour; - delete global.portal.harbour; - } - } - if (convertVersion(global["version"]) <= 103017) { - if (global.race["broody"]) { - global.race["gloomy"] = global.race["broody"]; - delete global.race["broody"]; - } - } - if (convertVersion(global["version"]) <= 104e3) { - if (global.city.hasOwnProperty("shrine") && !global.city.shrine.hasOwnProperty("cycle")) { - global.city.shrine["cycle"] = 0; - } - } - if (convertVersion(global["version"]) < 104001) { - if (global.tech["elysium"] && global.tech.elysium >= 18) { - global.tech.elysium--; - if (global.tech.cement && !global.race["flier"]) { - global.tech.cement = 8; - } - } - } - if (convertVersion(global["version"]) < 104002) { - if (global.city["amphitheatre"] && !global.city.amphitheatre.hasOwnProperty("evil")) { - global.city.amphitheatre["evil"] = 0; - } - } - if (convertVersion(global["version"]) < 104003) { - if (global.portal.hasOwnProperty("observe") && global.portal.observe.hasOwnProperty("stats")) { - global.portal.observe.stats.period.gems["compactor"] ??= 0; - global.portal.observe.stats.total.gems["compactor"] ??= 0; - } - } - if (convertVersion(global["version"]) <= 104003) { - if (global.race["pet"] && !global.race.pet.hasOwnProperty("event")) { - global.race.pet["event"] = 0; - global.race.pet["pet"] = 0; - } - } - if (convertVersion(global["version"]) < 104008) { - if (global.race.hasOwnProperty("modified")) { - let count = global.race["modified"]; - global.race["modified"] = { - t: count, - nr: 0, - na: 0, - pr: 0, - pa: 0 - }; - } - } - if (convertVersion(global["version"]) < 104009) { - if (global.city["banquet"] && !global.city["banquet"].level) { - global.city["banquet"].level = global.city["banquet"].count; - global.city["banquet"].count = Math.min(1, global.city["banquet"].count); - } - } - global["version"] = "1.4.9"; - delete global["revision"]; - delete global["beta"]; - if (!global.hasOwnProperty("prestige")) { - global.prestige = {}; - } - ["Plasmid", "AntiPlasmid", "Phage", "Dark", "Harmony", "AICore", "Artifact", "Blood_Stone", "Supercoiled"].forEach(function(res) { - if (!global.prestige.hasOwnProperty(res)) { - global.prestige[res] = { count: 0 }; - } - }); - if (!global.hasOwnProperty("power")) { - global["power"] = []; - } - if (!global.hasOwnProperty("support")) { - global["support"] = {}; - } - [ - "moon", - "red", - "belt", - "alpha", - "nebula", - "gateway", - "alien2", - "lake", - "spire", - "titan", - "enceladus", - "eris", - "tau_home", - "tau_red", - "tau_roid", - "asphodel" - ].forEach(function(s) { - if (!global.support.hasOwnProperty(s)) { - global.support[s] = []; - } - }); - if (global.civic["cement_worker"] && global.civic.cement_worker.impact === 0.25) { - global.civic.cement_worker.impact = 0.4; - } - if (!global["settings"]) { - global["settings"] = { - showEvolve: true, - showAchieve: false, - animated: true, - disableReset: false, - font: "standard", - q_merge: "merge_nearby", - cLabels: true, - theme: "gruvboxDark", - locale: "en-US", - icon: "star" - }; - } - if (!global.settings["space"]) { - global.settings["space"] = {}; - } - if (!global.settings.space.hasOwnProperty("home")) { - global.settings.space["home"] = true; - } - setRegionStates(false); - if (!global.race.hasOwnProperty("inactiveTraits")) { - if (global.race["forager"]) { - global.race.inactiveTraits = { herbivore: global.race["forager"], carnivore: global.race["forager"] }; - } else { - global.race.inactiveTraits = {}; - } - } - if (!global.settings["icon"]) { - global.settings["icon"] = "star"; - } - if (!global.settings["showResources"]) { - global.settings["showResources"] = global.settings["showMarket"]; - } - if (!global.settings["showStorage"]) { - if (global.city["warehouse"] || global.city["storage_yard"]) { - global.settings["showStorage"] = true; - } else { - global.settings["showStorage"] = false; - } - } - if (!global.settings.hasOwnProperty("touch")) { - global.settings["touch"] = false; - } - if (!global.settings.hasOwnProperty("lowPowerBalance")) { - global.settings["lowPowerBalance"] = false; - } - if (!global["queue"]) { - global["queue"] = { - display: false, - queue: [] - }; - } - if (!global["r_queue"]) { - global["r_queue"] = { - display: false, - queue: [] - }; - } - if (!global["queue"]["rename"]) { - global.queue["rename"] = false; - } - if (!global["queue"]["max"]) { - global.queue["max"] = 0; - } - if (!global["r_queue"]["max"]) { - global.r_queue["max"] = 0; - } - if (!global["queue"]["pause"]) { - global.queue["pause"] = false; - } - if (!global["r_queue"]["pause"]) { - global.r_queue["pause"] = false; - } - if (!global["lastMsg"]) { - global["lastMsg"] = {}; - } - if (!global.settings["msgFilters"]) { - global.settings["msgFilters"] = {}; - } - ["all", "progress", "events", "major_events", "minor_events"].forEach(function(filter) { - if (!global.settings.msgFilters[filter]) { - global.settings.msgFilters[filter] = { - unlocked: true, - vis: true, - max: 60, - save: 3 - }; - } - }); - message_filters.forEach(function(filter) { - if (!global.lastMsg[filter]) { - global.lastMsg[filter] = []; - } - if (!global.settings.msgFilters[filter]) { - global.settings.msgFilters[filter] = { - unlocked: false, - vis: false, - max: 60, - save: 3 - }; - } - }); - if (!global.settings["msgQueueHeight"]) { - global.settings["msgQueueHeight"] = $(`#msgQueue`).outerHeight(); - global.settings["buildQueueHeight"] = $(`#buildQueue`).outerHeight(); - } - if (!global["space"]) { - global["space"] = {}; - } - if (!global["starDock"]) { - global["starDock"] = {}; - } - if (!global["interstellar"]) { - global["interstellar"] = {}; - } - if (!global["galaxy"]) { - global["galaxy"] = {}; - } - if (!global["eden"]) { - global["eden"] = {}; - } - if (global.interstellar["mass_ejector"] && !global.interstellar.mass_ejector["Bolognium"]) { - global.interstellar.mass_ejector["Bolognium"] = 0; - } - if (global.interstellar["mass_ejector"] && !global.interstellar.mass_ejector["Vitreloy"]) { - global.interstellar.mass_ejector["Vitreloy"] = 0; - } - if (global.interstellar["mass_ejector"] && !global.interstellar.mass_ejector["Orichalcum"]) { - global.interstellar.mass_ejector["Orichalcum"] = 0; - } - if (global.interstellar["mass_ejector"] && !global.interstellar.mass_ejector["Nanoweave"]) { - global.interstellar.mass_ejector["Nanoweave"] = 0; - } - if (global.interstellar["mass_ejector"] && !global.interstellar.mass_ejector["Scarletite"]) { - global.interstellar.mass_ejector["Scarletite"] = 0; - } - if (!global.hasOwnProperty("pillars")) { - global["pillars"] = {}; - } - if (!global.settings.space["alpha"]) { - global.settings.space["alpha"] = false; - global.settings.space["proxima"] = false; - global.settings.space["nebula"] = false; - global.settings.space["neutron"] = false; - global.settings.space["blackhole"] = false; - } - if (!global.settings["showAchieve"]) { - global.settings["showAchieve"] = false; - } - if (!global.settings["locale"]) { - global.settings["locale"] = "en-US"; - } - if (typeof global.settings.pause === "undefined") { - global.settings["pause"] = false; - } - if (typeof global.settings.mKeys === "undefined") { - global.settings["mKeys"] = true; - } - if (typeof global.settings.keyMap === "undefined") { - global.settings["keyMap"] = { - x10: "Control", - //17 - x25: "Shift", - //16 - x100: "Alt", - //18 - q: "q" - //81 - }; - } - if (typeof global.settings.keyMap.showCiv === "undefined") { - global.settings.keyMap["showCiv"] = "1"; - global.settings.keyMap["showCivic"] = "2"; - global.settings.keyMap["showResearch"] = "3"; - global.settings.keyMap["showResources"] = "4"; - global.settings.keyMap["showGenetics"] = "5"; - global.settings.keyMap["showAchieve"] = "6"; - global.settings.keyMap["settings"] = "7"; - } - delete global.settings.keyMap["d"]; - if (typeof global.settings.qAny === "undefined") { - global.settings["qAny"] = false; - } - if (typeof global.settings.sPackOn === "undefined") { - global.settings["sPackOn"] = true; - } - if (typeof global.settings.qAny_res === "undefined") { - global.settings["qAny_res"] = false; - } - if (typeof global.settings.sPackMsg === "undefined") { - global.settings["sPackMsg"] = false; - } - if (typeof global.settings.expose === "undefined") { - global.settings["expose"] = false; - } - if (typeof global.settings.alwaysPower === "undefined") { - global.settings["alwaysPower"] = false; - } - if (typeof global.settings.tabLoad === "undefined") { - global.settings["tabLoad"] = false; - } - if (typeof global.settings.boring === "undefined") { - global.settings["boring"] = false; - } - if (!global.settings.hasOwnProperty("mtorder")) { - global.settings["mtorder"] = []; - } - if (!global.settings.hasOwnProperty("resBar")) { - global.settings["resBar"] = {}; - } - function setupStats() { - [ - "reset", - "plasmid", - "antiplasmid", - "universes", - "phage", - "starved", - "tstarved", - "died", - "tdied", - "sac", - "tsac", - "know", - "tknow", - "portals", - "dkills", - "attacks", - "cfood", - "tfood", - "cstone", - "tstone", - "clumber", - "tlumber", - "mad", - "bioseed", - "cataclysm", - "blackhole", - "ascend", - "descend", - "apotheosis", - "terraform", - "aiappoc", - "matrix", - "retire", - "eden", - "geck", - "dark", - "harmony", - "blood", - "cores", - "artifact", - "supercoiled", - "cattle", - "tcattle", - "murders", - "tmurders", - "psykill", - "tpsykill", - "pdebt", - "uDead" - ].forEach(function(k) { - if (!global.stats.hasOwnProperty(k)) { - global.stats[k] = 0; - } - }); - if (!global.stats["achieve"]) { - global.stats["achieve"] = {}; - } - if (!global.stats["feat"]) { - global.stats["feat"] = {}; - } - if (!global.stats.hasOwnProperty("womling")) { - global.stats["womling"] = { - god: { l: 0 }, - lord: { l: 0 }, - friend: { l: 0 } - }; - } - if (!global.stats["spire"]) { - global.stats["spire"] = {}; - } - if (!global.stats["synth"]) { - global.stats["synth"] = {}; - } - if (!global.stats.hasOwnProperty("banana")) { - global.stats["banana"] = { - b1: { l: false, h: false, a: false, e: false, m: false, mg: false }, - b2: { l: false, h: false, a: false, e: false, m: false, mg: false }, - b3: { l: false, h: false, a: false, e: false, m: false, mg: false }, - b4: { l: false, h: false, a: false, e: false, m: false, mg: false }, - b5: { l: false, h: false, a: false, e: false, m: false, mg: false } - }; - } - if (!global.stats.hasOwnProperty("endless_hunger")) { - global.stats["endless_hunger"] = { - b1: { l: false, h: false, a: false, e: false, m: false, mg: false }, - b2: { l: false, h: false, a: false, e: false, m: false, mg: false }, - b3: { l: false, h: false, a: false, e: false, m: false, mg: false }, - b4: { l: false, h: false, a: false, e: false, m: false, mg: false }, - b5: { l: false, h: false, a: false, e: false, m: false, mg: false } - }; - } - if (!global.stats.hasOwnProperty("death_tour")) { - global.stats["death_tour"] = { - ct: { l: 0, h: 0, a: 0, e: 0, m: 0, mg: 0 }, - bh: { l: 0, h: 0, a: 0, e: 0, m: 0, mg: 0 }, - di: { l: 0, h: 0, a: 0, e: 0, m: 0, mg: 0 }, - ai: { l: 0, h: 0, a: 0, e: 0, m: 0, mg: 0 }, - vc: { l: 0, h: 0, a: 0, e: 0, m: 0, mg: 0 }, - md: { l: 0, h: 0, a: 0, e: 0, m: 0, mg: 0 } - }; - } - if (global.stats["death_tour"] && !global.stats.death_tour.hasOwnProperty("md")) { - global.stats.death_tour["md"] = { l: 0, h: 0, a: 0, e: 0, m: 0, mg: 0 }; - } - if (!global.stats["warlord"]) { - global.stats["warlord"] = { k: false, p: false, a: false, r: false, g: false }; - } - } - setupStats(); - if (!global.race["seeded"]) { - global.race["seeded"] = false; - } - if (!global.race["deterioration"]) { - global.race["deterioration"] = 0; - } - if (!global.race["gene_fortify"]) { - global.race["gene_fortify"] = 0; - } - if (!global.race["old_gods"]) { - global.race["old_gods"] = "none"; - } - if (!global.race["universe"]) { - global.race["universe"] = "standard"; - } - if (!global.genes["minor"]) { - global.genes["minor"] = {}; - } - if (!global.race["minor"]) { - global.race["minor"] = {}; - } - if (!global.hasOwnProperty("govern")) { - global["govern"] = { - governor: {}, - candidate: [], - policy: {} - }; - } - if (!global.settings.hasOwnProperty("showMil")) { - global.settings["showMil"] = true; - } - if (!global.settings.hasOwnProperty("showPowerGrid")) { - global.settings["showPowerGrid"] = global.hasOwnProperty("tech") && global.tech.hasOwnProperty("high_tech") && global.tech.high_tech >= 2 ? true : false; - } - if (!global.settings["affix"]) { - global.settings["affix"] = "si"; - } - if (!global["special"]) { - global["special"] = {}; - } - if (!global.special["gift"]) { - global.special["gift"] = {}; - } - if (!global.special.hasOwnProperty("egg")) { - global.special["egg"] = {}; - } - if (!global.special.hasOwnProperty("trick")) { - global.special["trick"] = { - trick1: false, - trick2: false, - trick3: false, - trick4: false, - trick5: false, - trick6: false, - trick7: false, - trick8: false, - trick9: false, - trick10: false, - trick11: false, - trick12: false - }; - } - if (!global.civic["govern"]) { - global.civic["govern"] = { - type: "oligarchy", - rev: 2e3, - fr: 0 - }; - } - global.civic.govern.fr = 0; - if (!global.hasOwnProperty("custom")) { - global["custom"] = {}; - } - if (global.custom.hasOwnProperty("planet") && global.custom.planet.hasOwnProperty("biome")) { - delete global.custom.planet; - } - if (global.city.hasOwnProperty("smelter") && !global.city.smelter.hasOwnProperty("cap")) { - global.city.smelter["cap"] = 0; - } - if (!global.civic["homeless"]) { - global.civic.homeless = 0; - } - if (!global.civic["foreign"]) { - global.civic["foreign"] = { - gov0: { - unrest: 0, - hstl: 100, - mil: 100, - eco: 75, - spy: 0, - esp: 0, - trn: 0, - sab: 0, - act: "none", - occ: false, - anx: false, - buy: false - }, - gov1: { - unrest: 0, - hstl: 0, - mil: 150, - eco: 100, - spy: 0, - esp: 0, - trn: 0, - sab: 0, - act: "none", - occ: false, - anx: false, - buy: false - }, - gov2: { - unrest: 0, - hstl: 50, - mil: 250, - eco: 150, - spy: 0, - esp: 0, - trn: 0, - sab: 0, - act: "none", - occ: false, - anx: false, - buy: false - } - }; - } - if (typeof global.civic.foreign.gov0["trn"] === "undefined") { - global.civic.foreign.gov0["trn"] = 0; - global.civic.foreign.gov1["trn"] = 0; - global.civic.foreign.gov2["trn"] = 0; - global.civic.foreign.gov0["sab"] = 0; - global.civic.foreign.gov1["sab"] = 0; - global.civic.foreign.gov2["sab"] = 0; - global.civic.foreign.gov0["act"] = "none"; - global.civic.foreign.gov1["act"] = "none"; - global.civic.foreign.gov2["act"] = "none"; - } - if (typeof global.civic.foreign.gov0["name"] !== "undefined" && global.civic.foreign.gov0.name.s1 === "evo_organism_title") { - global.civic.foreign.gov0.name.s1 = "Northern"; - } - if (typeof global.civic.foreign.gov1["name"] !== "undefined" && global.civic.foreign.gov1.name.s1 === "evo_organism_title") { - global.civic.foreign.gov1.name.s1 = "Southern"; - } - if (typeof global.civic.foreign.gov2["name"] !== "undefined" && global.civic.foreign.gov2.name.s1 === "evo_organism_title") { - global.civic.foreign.gov2.name.s1 = "Divine"; - } - { - if (global.hasOwnProperty("special") && global.special.hasOwnProperty("gift")) { - const sdate = new Date(global.stats.start); - const cdate = /* @__PURE__ */ new Date(); - Object.keys(global.special.gift).forEach(function(gy) { - let year = Number(gy.substring(1, 5)); - if (year < sdate.getFullYear() || cdate.getFullYear() < year || cdate.getFullYear() === year && cdate.getMonth() !== 11) { - delete global.special.gift[gy]; - } - }); - } - } - if (!global.settings["queuestyle"]) { - global.settings["queuestyle"] = "standardqueuestyle"; - } - if (!global.settings["q_resize"]) { - global.settings.q_resize = "auto"; - } - $("html").addClass(global.settings.theme); - $("html").addClass(global.settings.queuestyle); - if (!global.settings["at"]) { - global.settings["at"] = 0; - } - if (!global.city["morale"]) { - global.city["morale"] = { - current: 0, - cap: 0, - potential: 0, - unemployed: 0, - stress: 0, - entertain: 0, - leadership: 0, - season: 0, - weather: 0, - warmonger: 0, - rev: 0 - }; - } - if (!global.city["sun"]) { - global.city["sun"] = 0; - } - if (!global.city["cold"]) { - global.city["cold"] = 0; - } - if (!global.city["hot"]) { - global.city["hot"] = 0; - } - [ - "unemployed", - "leadership", - "warmonger", - "rev", - "tax", - "shrine", - "blood_thirst", - "broadcast", - "vr", - "zoo", - "bliss_den", - "restaurant", - "cap", - "potential" - ].forEach(function(k) { - if (!global.city.morale.hasOwnProperty(k)) { - global.city.morale[k] = 0; - } - }); - if (!global.city["calendar"]) { - global.city["calendar"] = { - day: 0, - year: 0, - season: 0, - weather: 2, - temp: 1, - moon: 0, - wind: 0, - orbit: 365 - }; - } - if (!global.city.calendar["season"]) { - global.city.calendar["season"] = 0; - } - if (!global.city.calendar["moon"]) { - global.city.calendar["moon"] = 0; - } - if (!global.city.calendar["wind"]) { - global.city.calendar["wind"] = 0; - } - if (!global.city["powered"]) { - global.city["powered"] = false; - global.city["power"] = 0; - } - if (!global.city["biome"]) { - global.city["biome"] = "grassland"; - } - if (!global.city["geology"]) { - global.city["geology"] = {}; - } - if (!global.city["market"]) { - global.city["market"] = { - qty: 10, - mtrade: 0, - trade: 0, - active: false - }; - } - if (global.city["foundry"] && !global.city.foundry["Mythril"]) { - global.city.foundry["Mythril"] = 0; - } - if (global.city["foundry"] && !global.city.foundry["Aerogel"]) { - global.city.foundry["Aerogel"] = 0; - } - if (global.city["foundry"] && !global.city.foundry["Nanoweave"]) { - global.city.foundry["Nanoweave"] = 0; - } - if (global.city["foundry"] && !global.city.foundry["Scarletite"]) { - global.city.foundry["Scarletite"] = 0; - } - if (global.city["foundry"] && !global.city.foundry["Quantium"]) { - global.city.foundry["Quantium"] = 0; - } - if (!global.settings["arpa"]) { - global.settings["arpa"] = { - arpaTabs: 0, - physics: true, - genetics: false - }; - } - if (!global.settings.arpa["crispr"]) { - global.settings.arpa["crispr"] = false; - } - if (!global.settings.arpa["blood"]) { - global.settings.arpa["blood"] = false; - } - if (!global["arpa"]) { - global["arpa"] = {}; - } - if (global.city["factory"]) { - if (!global.city.factory["Lux"]) { - global.city.factory["Lux"] = 0; - } - if (!global.city.factory["Alloy"]) { - global.city.factory["Alloy"] = 0; - } - if (!global.city.factory["Polymer"]) { - global.city.factory["Polymer"] = 0; - } - } - if (!global.race["mutation"]) { - global.race["mutation"] = 0; - } - if (!global.race["p_mutation"]) { - global.race["p_mutation"] = 0; - } - if (global.race["old_gods"] && global.race["old_gods"] != "none") { - global.genes["old_gods"] = 1; - } else { - delete global.genes["old_gods"]; - } - if (global.tech["fanaticism"] && global.tech["theology"] && global.tech["theology"] === 2) { - global.tech["theology"] = 3; - } - if (global.tech["fanaticism"] && global.tech["anthropology"] && !global.genes["transcendence"]) { - delete global.tech["anthropology"]; - } - if (global.tech["unify"]) { - if (global.tech["unify"] === 1) { - delete global.tech["m_boost"]; - delete global.tech["world_control"]; - } - } - if (global.city.hasOwnProperty("spc_casino")) { - global.space["spc_casino"] = { count: 0, on: 0 }; - delete global.city["spc_casino"]; - } - if (global.tech.hasOwnProperty("nanoweave")) { - global.resource.Nanoweave.display = true; - } - if (!global.civic["new"]) { - global.civic["new"] = 0; - } - if (!global.race["purgatory"]) { - global.race["purgatory"] = {}; - } - ["city", "space", "portal", "eden", "tech"].forEach((item) => { - if (!global.race["purgatory"][item]) { - global.race["purgatory"][item] = {}; - } - }); - if (!global.civic["d_job"]) { - if (global.race["carnivore"] || global.race["soul_eater"]) { - global.civic["d_job"] = "hunter"; - } else if (global.tech["agriculture"] && global.tech["agriculture"] >= 1) { - global.civic["d_job"] = "farmer"; - } else { - global.civic["d_job"] = "unemployed"; - } - } - global.settings.animated = true; - global.settings.disableReset = false; - if (global["arpa"] && global.arpa["launch_facility"] && global.arpa.launch_facility.rank > 0 && !global.tech["space"]) { - global.tech["space"] = 1; - } - function newGameData() { - global["race"] = { species: "protoplasm", gods: "none", old_gods: "none", seeded: false }; - global["seed"] = Math.rand(0, 1e4); - global["warseed"] = Math.rand(0, 1e4); - global["new"] = true; - } - var keyMap = { - x10: false, - x25: false, - x100: false, - q: false - }; - function keyMultiplier() { - let number = 1; - if (global.settings["mKeys"]) { - if (keyMap.x10) { - number *= 10; - } - if (keyMap.x25) { - number *= 25; - } - if (keyMap.x100) { - number *= 100; - } - } - return number; - } - function convertVersion(version) { - let vNum = version.split(".", 3); - vNum[0] *= 1e5; - vNum[1] *= 1e3; - return Number(vNum[0]) + Number(vNum[1]) + Number(vNum[2]); - } - function resizeGame() { - if ($(window).width() >= 1400 && $("#msgQueue:not(.right)")) { - let build = $("#buildQueue").detach(); - build.addClass("right"); - build.removeClass("has-text-info"); - let queue = $("#msgQueue").detach(); - queue.addClass("right"); - queue.removeClass("has-text-info"); - queue.css("resize", "none"); - $("#queueColumn").addClass("is-one-quarter"); - $("#queueColumn").append(build); - $("#queueColumn").append(queue); - $("#mainColumn").removeClass("is-three-quarters"); - $("#mainColumn").addClass("is-half"); - } else if ($(window).width() < 1400 && $("#msgQueue").hasClass("right")) { - let build = $("#buildQueue").detach(); - build.removeClass("right"); - build.addClass("has-text-info"); - let queue = $("#msgQueue").detach(); - queue.removeClass("right"); - queue.addClass("has-text-info"); - queue.css("resize", "vertical"); - $("#queueColumn").removeClass("is-one-quarter"); - $("#sideQueue").append(build); - $("#sideQueue").append(queue); - $("#mainColumn").removeClass("is-half"); - $("#mainColumn").addClass("is-three-quarters"); - } - } - var affix_list = { - si: ["K", "M", "G", "T", "P", "E", "Z", "Y"], - sln: ["K", "M", "B", "t", "q", "Q", "s", "S"] - }; - var numFormatShort = new Intl.NumberFormat(void 0, { maximumFractionDigits: 2, maximumSignificantDigits: 3, roundingMode: "trunc", roundingPriority: "lessPrecision" }); - var numFormatLong = new Intl.NumberFormat(void 0, { maximumFractionDigits: 2, maximumSignificantDigits: 4, roundingMode: "trunc", roundingPriority: "lessPrecision" }); - var ADD_16_ULP = 1 + 16 * Number.EPSILON; - function sizeApproximation(value, precision = 1, precise = false, exact = false) { - let absValue = Math.abs(value); - let oom = Math.floor(Math.log10(absValue)); - absValue *= ADD_16_ULP; - value = value < 0 ? -absValue : value > 0 ? absValue : value; - if (exact) { - return value.toLocaleString(void 0, { maximumFractionDigits: precision, roundingMode: "trunc" }); - } else if (oom < 4 || precise) { - let maxSigFigs = Math.max( - oom + 1, - // Full precision for the integer component of large numbers (at least 1e4) - precision + 1, - // Requested precision for values with only 1 leading digit - 5 - ); - return value.toLocaleString(void 0, { maximumSignificantDigits: maxSigFigs, maximumFractionDigits: precision, roundingMode: "trunc", roundingPriority: "lessPrecision" }); - } else { - const oomMod3 = oom % 3; - const dispShort = oom === 4; - const forceSI = global.settings.affix !== "eng" && oom >= 27; - if (global.settings.affix !== "sci" && !forceSI) { - oom -= oomMod3; - } - let affix; - if (global.settings.affix === "sci" || global.settings.affix === "eng" || forceSI) { - affix = "e" + oom; - } else { - affix = affix_list[global.settings.affix][oom / 3 - 1]; - } - value /= 10 ** oom; - if (dispShort) { - return numFormatShort.format(value) + affix; - } else { - return numFormatLong.format(value) + affix; - } - } - } - $(window).resize(function() { - resizeGame(); - }); - function srSpeak(text, priority) { - var el = document.createElement("div"); - var id = "speak-" + Date.now(); - el.setAttribute("id", id); - el.setAttribute("aria-live", priority || "polite"); - el.classList.add("sr-only"); - document.body.appendChild(el); - window.setTimeout(function() { - document.getElementById(id).innerHTML = text; - }, 100); - window.setTimeout(function() { - document.body.removeChild(document.getElementById(id)); - }, 1e3); - } - window.soft_reset = function reset(source) { - try { - source = source && source === "replicator" ? "replicator" : "soft"; - gtag("event", "reset", { "end": source }); - } catch (err) { - } - if (!source) { - clearSavedMessages(); - } - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let gecks = global.race.hasOwnProperty("geck") ? global.race.geck : 0; - if (global.race.hasOwnProperty("gecked")) { - gecks += global.race.gecked; - global.stats.geck -= global.race.gecked; - } - let replace = { - species: "protoplasm", - universe: global.race.universe, - seeded: global.race.seeded, - probes: global.race.probes, - seed: global.race.seed, - ascended: global.race.hasOwnProperty("ascended") ? global.race.ascended : false, - rejuvenated: global.race.hasOwnProperty("rejuvenated") ? global.race.rejuvenated : false - }; - if (gecks > 0) { - replace["geck"] = gecks; - } - if (srace) { - replace["srace"] = srace; - } - if (global.race["bigbang"]) { - replace["bigbang"] = true; - } - if (global.race["gods"]) { - replace["gods"] = global.race.gods; - } - if (global.race["old_gods"]) { - replace["old_gods"] = global.race.old_gods; - } - if (global.race["rapid_mutation"] && global.race["rapid_mutation"] > 0) { - replace["rapid_mutation"] = global.race["rapid_mutation"]; - } - if (global.race["ancient_ruins"] && global.race["ancient_ruins"] > 0) { - replace["ancient_ruins"] = global.race["ancient_ruins"]; - } - if (global.race["bigbang"]) { - replace.universe = "bigbang"; - } - if (global.race.hasOwnProperty("corruption")) { - replace["corruption"] = global.race.corruption; - } - global["race"] = replace; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let geo = global.city.geology; - global.city = { - calendar: { - day: 0, - year: 0, - weather: 2, - temp: 1, - moon: 0, - wind: 0, - orbit - }, - biome, - ptrait: atmo, - geology: geo - }; - if (global.tech["theology"] && global.tech["theology"] >= 1) { - global.tech = { theology: 1 }; - } else { - global.tech = {}; - } - clearStates(); - global.new = true; - global.seed = Math.rand(0, 1e4); - global.warseed = Math.rand(0, 1e4); - global.stats["current"] = Date.now(); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - }; - var webWorker = { w: false, s: false, mt: 250, midRatio: 4, longRatio: 20 }; - var intervals = {}; - function clearSavedMessages() { - message_filters.forEach(function(filter) { - if (filter !== "achievements") { - global.lastMsg[filter] = []; - } - }); - } - function setRegionStates(reset3) { - let regions = { - base: [ - "showCiv", - "showCity", - "showIndustry", - "showPowerGrid", - "showMechLab", - "showShipYard", - "showResearch", - "showCivic", - "showMil", - "showResources", - "showMarket", - "showStorage", - "showGenetics", - "showSpace", - "showDeep", - "showGalactic", - "showPortal", - "showEden", - "showOuter", - "showTau", - "showEjector", - "showCargo", - "showAlchemy", - "showGovernor", - "arpa", - "showPsychic", - "showWish" - ], - space: [ - "moon", - "red", - "hell", - "sun", - "gas", - "gas_moon", - "belt", - "dwarf", - "alpha", - "proxima", - "nebula", - "neutron", - "blackhole", - "sirius", - "stargate", - "gateway", - "gorddon", - "alien1", - "alien2", - "chthonian", - "titan", - "enceladus", - "triton", - "eris", - "kuiper" - ], - portal: ["fortress", "badlands", "pit", "ruins", "gate", "lake", "spire", "wasteland"], - eden: ["asphodel", "elysium", "isle", "palace"], - tau: ["home", "red", "roid", "gas", "gas2", "star"] - }; - Object.keys(regions).forEach(function(r) { - if (r === "base") { - regions[r].forEach(function(v) { - if (!global.settings.hasOwnProperty(v) || reset3) { - global.settings[v] = false; - } - }); - } else { - if (!global.settings.hasOwnProperty(r)) { - global.settings[r] = {}; - } - regions[r].forEach(function(v) { - if (!global.settings[r].hasOwnProperty(v) || reset3) { - global.settings[r][v] = false; - } - }); - } - }); - [ - "civTabs", - "govTabs", - "govTabs2", - "hellTabs", - "resTabs", - "spaceTabs", - "marketTabs", - "statsTabs" - ].forEach(function(k) { - if (!global.settings.hasOwnProperty(k) || reset3) { - global.settings[k] = 0; - } - }); - } - function clearStates() { - if (webWorker.w) { - webWorker.w.terminate(); - } - global["queue"] = { display: false, queue: [] }; - global["r_queue"] = { display: false, queue: [] }; - global.space = {}; - global.interstellar = {}; - global.galaxy = {}; - global.portal = {}; - global.eden = {}; - global.starDock = {}; - global.tauceti = {}; - global.civic = { new: 0 }; - global.civic["foreign"] = { - gov0: { - unrest: 0, - hstl: Math.floor(seededRandom(80, 100)), - mil: Math.floor(seededRandom(75, 125)), - eco: Math.floor(seededRandom(60, 90)), - spy: 0, - esp: 0, - trn: 0, - sab: 0, - act: "none", - occ: false, - anx: false, - buy: false - }, - gov1: { - unrest: 0, - hstl: Math.floor(seededRandom(0, 20)), - mil: Math.floor(seededRandom(125, 175)), - eco: Math.floor(seededRandom(80, 120)), - spy: 0, - esp: 0, - trn: 0, - sab: 0, - act: "none", - occ: false, - anx: false, - buy: false - }, - gov2: { - unrest: 0, - hstl: Math.floor(seededRandom(40, 60)), - mil: Math.floor(seededRandom(200, 300)), - eco: Math.floor(seededRandom(130, 170)), - spy: 0, - esp: 0, - trn: 0, - sab: 0, - act: "none", - occ: false, - anx: false, - buy: false - } - }; - if (!global.genes["blood"]) { - global.prestige.Blood_Stone.count = 0; - } - global.resource = {}; - global.evolution = {}; - global.event = { t: 100, l: false }; - global.m_event = { t: 499, l: false }; - global.stats.days = 0; - global.stats.know = 0; - global.stats.starved = 0; - global.stats.died = 0; - global.stats.attacks = 0; - global.stats.dkills = 0; - global.stats.cfood = 0; - global.stats.cstone = 0; - global.stats.clumber = 0; - global.stats.sac = 0; - global.stats.cattle = 0; - global.stats.murders = 0; - global.stats.uDead = 0; - global.settings.at = 0; - global.settings.showEvolve = true; - global.settings.space.home = true; - setRegionStates(true); - global.settings.disableReset = false; - global.settings.pause = false; - global.arpa = {}; - delete global.race["hrt"]; - if (global.genes["queue"]) { - global.tech["queue"] = 1; - global.queue.display = true; - } - } - window.reset = function reset2() { - try { - gtag("event", "reset", { "end": "hard" }); - } catch (err) { - } - localStorage.removeItem("evolved"); - global = null; - if (webWorker.w) { - webWorker.w.terminate(); - } - window.location.reload(); - }; - - // src/locale.js - var strings; - getString(global.settings.locale); - function loc(key, variables) { - let string = strings[key]; - if (!string) { - if (global.settings.expose) { - console.error(`string ${key} not found`); - console.log(strings); - } - return key; - } - if (variables) { - if (variables instanceof Array) { - for (let i = 0; i < variables.length; i++) { - let re2 = new RegExp(`%${i}(?!\\d)`, "g"); - if (!re2.exec(string)) { - if (global.settings.expose) { - console.error(`"%${i}" was not found in the string "${key}" to be replace by "${variables[i]}"`); - } - continue; - } - string = string.replace(re2, variables[i]); - } - let re = new RegExp("%\\d+(?!\\d)", "g"); - const results = string.match(re); - if (results && global.settings.expose) { - console.error(`${results} was found in the string, but there is no variables to make the replacement`); - } - } else { - if (global.settings.expose) { - console.error('"variables" need be a instance of "Array"'); - } - } - } - return string; - } - function getString(locale) { - $.ajaxSetup({ async: false }); - let defaultString; - $.getJSON("strings/strings.json", (data) => { - defaultString = data; - }); - if (locale != "en-US") { - let localeString; - try { - $.getJSON(`strings/strings.${locale}.json`, (data) => { - localeString = data; - }); - } catch (e) { - console.error(e, e.stack); - } - const defSize = defaultString.length; - if (localeString) { - Object.assign(defaultString, localeString); - } - if (defaultString.length != defSize && global.settings.expose) { - console.error(`string.${locale}.json has extra keys.`); - } - } - let string_pack = save.getItem("string_pack") || false; - if (string_pack && global.settings.sPackOn) { - let themeString; - try { - themeString = JSON.parse(LZString.decompressFromUTF16(string_pack)); - } catch (e) { - console.error(e, e.stack); - } - const defSize = defaultString.length; - if (themeString) { - Object.assign(defaultString, themeString); - } - if (defaultString.length != defSize && global.settings.expose) { - console.error(`string pack has extra keys.`); - } - } - $.ajaxSetup({ async: true }); - strings = defaultString; - } - var locales = { - "en-US": "English (US)", - "es-ES": "Spanish (ESP)", - "pt-BR": "Portugu\xEAs (BR)", - "de-DE": "Deutsch", - "it-IT": "Italiano", - "ru-RU": "\u0420\u0443\u0441\u0441\u043A\u0438\u0439", - "cs-CZ": "\u010Ce\u0161tina", - "pl-PL": "Polski", - "zh-CN": "\u7B80\u4F53\u4E2D\u6587", - "zh-TW": "\u7E41\u9AD4\u4E2D\u6587", - "ko-KR": "\uD55C\uAD6D\uC5B4", - "im-PL": "Igpay-Atinlay", - "ja-JP": "\u65E5\u672C\u8A9E" - }; - - // src/arpa.js - function arpa(type) { - switch (type) { - case "Physics": - physics(); - break; - case "Genetics": - genetics(); - break; - case "Monument": - return pick_monument(); - case "PhysicsTech": - return arpaProjects; - case "GeneTech": - return genePool; - case "BloodTech": - return bloodPool; - case "Crispr": - crispr(); - break; - case "Blood": - blood(); - break; - } - } - var arpaProjects = { - lhc: { - title() { - return eventActive("fool", 2022) ? loc("arpa_projects_railway_title") : loc("arpa_projects_lhc_title"); - }, - desc() { - return eventActive("fool", 2022) ? loc("arpa_projects_railway_desc") : loc("arpa_projects_lhc_desc"); - }, - reqs: { high_tech: 6 }, - grant: "supercollider", - effect(nofool) { - if (eventActive("fool", 2022) && !nofool) { - return arpaProjects.railway.effect(true); - } - let sc = global.tech["tp_particles"] || global.tech["particles"] && global.tech["particles"] >= 3 ? global.race["cataclysm"] ? 20 : 8 : global.race["cataclysm"] ? 10 : 4; - if (global.tech["storage"] >= 6) { - if (global.race["warlord"]) { - return loc("arpa_projects_lhc_warlord2", [loc("portal_twisted_lab_title"), sc, 5]); - } else if (global.tech["particles"] && global.tech["particles"] >= 4) { - return global.race["cataclysm"] ? loc("arpa_projects_lhc_cataclysm3", [sc]) : loc("arpa_projects_lhc_effect3", [sc, global.race["orbit_decayed"] ? loc("space_home_satellite_title") : wardenLabel()]); - } else { - return global.race["cataclysm"] ? loc("arpa_projects_lhc_cataclysm2", [sc]) : loc("arpa_projects_lhc_effect2", [sc, global.race["orbit_decayed"] ? loc("space_home_satellite_title") : wardenLabel()]); - } - } else { - if (global.race["warlord"]) { - return loc("arpa_projects_lhc_warlord1", [loc("portal_twisted_lab_title"), sc]); - } else { - return global.race["cataclysm"] ? loc("arpa_projects_lhc_cataclysm1", [sc]) : global.tech["isolation"] ? loc("arpa_projects_lhc_iso1", [sc, loc("tech_infectious_disease_lab_alt")]) : loc("arpa_projects_lhc_effect1", [sc, global.race["orbit_decayed"] ? loc("space_home_satellite_title") : wardenLabel()]); - } - } - }, - cost: { - Money(offset, wiki) { - return costMultiplier("lhc", offset, 25e5, 1.05, wiki); - }, - Knowledge(offset, wiki) { - return costMultiplier("lhc", offset, 5e5, 1.05, wiki); - }, - Copper(offset, wiki) { - return costMultiplier("lhc", offset, 125e3, 1.05, wiki); - }, - Cement(offset, wiki) { - return costMultiplier("lhc", offset, 25e4, 1.05, wiki); - }, - Aluminium(offset, wiki) { - return costMultiplier("lhc", offset, 35e4, 1.05, wiki); - }, - Titanium(offset, wiki) { - return costMultiplier("lhc", offset, 5e4, 1.05, wiki); - }, - Polymer(offset, wiki) { - return costMultiplier("lhc", offset, 12e3, 1.05, wiki); - } - } - }, - stock_exchange: { - title: loc("arpa_projects_stock_exchange_title"), - desc: loc("arpa_projects_stock_exchange_desc"), - reqs: { banking: 9 }, - grant: "stock_exchange", - effect() { - if (global.race["warlord"]) { - return loc("arpa_projects_stock_exchange_warlord", [structName("casino"), 5, 1]); - } else if (global.tech["banking"] >= 10) { - if (global.race["cataclysm"]) { - return global.tech["gambling"] && global.tech["gambling"] >= 4 ? loc("arpa_projects_stock_exchange_cataclysm2", [loc("space_red_spaceport_title"), 10, structName("casino"), 5, 1]) : loc("arpa_projects_stock_exchange_cataclysm1", [loc("space_red_spaceport_title"), 10]); - } else { - return global.tech["gambling"] && global.tech["gambling"] >= 4 ? loc("arpa_projects_stock_exchange_effect3", [loc("city_bank"), 10, loc(`job_banker`), 2, structName("casino"), 5, 1]) : loc("arpa_projects_stock_exchange_effect2", [loc("city_bank"), 10, loc(`job_banker`), 2]); - } - } else { - return loc("arpa_projects_stock_exchange_effect1", [loc("city_bank"), 10]); - } - }, - cost: { - Money(offset, wiki) { - return costMultiplier("stock_exchange", offset, 3e6, 1.06, wiki); - }, - Plywood(offset, wiki) { - return costMultiplier("stock_exchange", offset, 25e3, 1.06, wiki); - }, - Brick(offset, wiki) { - return costMultiplier("stock_exchange", offset, 2e4, 1.06, wiki); - }, - Wrought_Iron(offset, wiki) { - return costMultiplier("stock_exchange", offset, 1e4, 1.06, wiki); - } - } - }, - tp_depot: { - title: loc("galaxy_gateway_depot"), - desc: loc("arpa_projects_depot_desc"), - reqs: { high_tech: 6, storage: 4 }, - grant: "tp_depot", - path: ["truepath"], - effect() { - return loc(global.tech["isolation"] ? "arpa_projects_depot_effect_iso" : "arpa_projects_depot_effect", [5, 50]); - }, - cost: { - Money(offset, wiki) { - return costMultiplier("tp_depot", offset, 18e5, 1.08, wiki); - }, - Stone(offset, wiki) { - return costMultiplier("tp_depot", offset, 75e4, 1.08, wiki); - }, - Iron(offset, wiki) { - return costMultiplier("tp_depot", offset, 25e4, 1.08, wiki); - }, - Alloy(offset, wiki) { - return costMultiplier("tp_depot", offset, 3e4, 1.08, wiki); - } - } - }, - launch_facility: { - id: "arpalaunch_facility", - title: loc("arpa_projects_launch_facility_title"), - desc: loc("arpa_projects_launch_facility_desc"), - reqs: { high_tech: 7 }, - condition() { - return global.race["cataclysm"] || global.race["lone_survivor"] || global.race["warlord"] ? false : true; - }, - grant: "launch_facility", - rank: 1, - queue_complete() { - return global.tech.space >= 1 ? 0 : 1; - }, - effect() { - return loc("arpa_projects_launch_facility_effect1"); - }, - cost: { - Money(offset) { - return costMultiplier("launch_facility", offset, 2e6, 1.1); - }, - Knowledge(offset) { - return costMultiplier("launch_facility", offset, 5e5, 1.1); - }, - Cement(offset) { - return costMultiplier("launch_facility", offset, 15e4, 1.1); - }, - Oil(offset) { - return costMultiplier("launch_facility", offset, 2e4, 1.1); - }, - Sheet_Metal(offset) { - return costMultiplier("launch_facility", offset, 15e3, 1.1); - }, - Alloy(offset) { - return costMultiplier("launch_facility", offset, 25e3, 1.1); - } - } - }, - monument: { - title(wiki) { - if (wiki) { - return loc("arpa_project_monument_title"); - } - switch (global.arpa.m_type) { - case "Obelisk": - return loc("arpa_project_monument_obelisk"); - case "Statue": - return loc("arpa_project_monument_statue"); - case "Sculpture": - return loc("arpa_project_monument_sculpture"); - case "Monolith": - return loc("arpa_project_monument_monolith"); - case "Pillar": - return loc("arpa_project_monument_pillar"); - case "Megalith": - return loc("arpa_project_monument_megalith"); - } - }, - desc: loc("arpa_projects_monument_desc"), - reqs: { monument: 1 }, - grant: "monuments", - effect() { - let gasVal = govActive("gaslighter", 2); - let mcap = gasVal ? 2 - gasVal : 2; - return loc("arpa_projects_monument_effect1", [mcap]); - }, - cost: { - Stone(offset, wiki) { - return monument_costs("Stone", offset, wiki); - }, - Aluminium(offset, wiki) { - return monument_costs("Aluminium", offset, wiki); - }, - Cement(offset, wiki) { - return monument_costs("Cement", offset, wiki); - }, - Steel(offset, wiki) { - return monument_costs("Steel", offset, wiki); - }, - Lumber(offset, wiki) { - return monument_costs("Lumber", offset, wiki); - }, - Crystal(offset, wiki) { - return monument_costs("Crystal", offset, wiki); - } - } - }, - railway: { - title() { - return eventActive("fool", 2022) ? loc("arpa_projects_lhc_title") : loc("arpa_projects_railway_title"); - }, - desc() { - return eventActive("fool", 2022) ? loc("arpa_projects_lhc_desc") : loc("arpa_projects_railway_desc"); - }, - reqs: { high_tech: 6, trade: 3 }, - grant: "railway", - effect(nofool) { - if (eventActive("fool", 2022) && !nofool) { - return arpaProjects.lhc.effect(true); - } - let routes = global.stats.achieve["banana"] && global.stats.achieve.banana.l >= 2 ? 1 : 0; - let profit = global.stats.achieve["banana"] && global.stats.achieve.banana.l >= 1 ? 3 : 2; - let desc = ""; - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - routes += global.space["gps"] ? Math.floor(global.space.gps.count / 3) : 0; - desc = loc("arpa_projects_railway_cataclysm1", [routes, profit, 3, 1]); - } else if (global.race["warlord"]) { - routes += 5; - desc = loc("arpa_projects_railway_warlord1", [routes, profit]); - } else { - routes += global.city["storage_yard"] ? Math.floor(global.city.storage_yard.count / 6) : 0; - desc = loc("arpa_projects_railway_effect1", [routes, profit, 6, 1]); - } - if (global.tech["hell_lake"] && global.tech.hell_lake >= 7) { - desc += ` ${loc("arpa_projects_railway_highway", [1, global.resource.Asphodel_Powder.name, loc("eden_asphodel_harvester_title"), 1])}`; - } - return desc; - }, - cost: { - Money(offset, wiki) { - return costMultiplier("railway", offset, 25e5, 1.08, wiki); - }, - Lumber(offset, wiki) { - return costMultiplier("railway", offset, 75e4, 1.08, wiki); - }, - Iron(offset, wiki) { - return costMultiplier("railway", offset, 3e5, 1.08, wiki); - }, - Steel(offset, wiki) { - return costMultiplier("railway", offset, 45e4, 1.08, wiki); - } - } - }, - roid_eject: { - title() { - return loc("arpa_projects_roid_eject_title", [roid_eject_type()]); - }, - desc() { - return loc(global.tech["roid_eject"] <= 10 ? "arpa_projects_roid_eject_desc" : "arpa_projects_roid_eject_desc2", [roid_eject_type()]); - }, - reqs: { blackhole: 6, gateway: 3 }, - grant: "roid_eject", - effect() { - let mass = 0; - let next = 0; - if (global.tech["roid_eject"]) { - mass += 0.225 * global.tech["roid_eject"] * (1 + global.tech["roid_eject"] / 12); - next = 0.225 * (global.tech["roid_eject"] + 1) * (1 + (global.tech["roid_eject"] + 1) / 12) - mass; - } - return `
${loc("arpa_projects_roid_eject_effect1")}
${loc("arpa_projects_roid_eject_effect2", [+mass.toFixed(3), +next.toFixed(3), roid_eject_type()])}
`; - }, - cost: { - Money(offset, wiki) { - return costMultiplier("roid_eject", offset, 1875e4, 1.075, wiki); - }, - Deuterium(offset, wiki) { - return costMultiplier("roid_eject", offset, 375e3, 1.075, wiki); - }, - Bolognium(offset, wiki) { - return costMultiplier("roid_eject", offset, 15e3, 1.075, wiki); - } - } - }, - nexus: { - title: loc("arpa_projects_nexus_title"), - desc: loc("arpa_projects_nexus_desc"), - reqs: { magic: 5 }, - grant: "nexus", - effect() { - if (global.tech["roguemagic"] && global.tech.roguemagic >= 7) { - return `
${loc("arpa_projects_nexus_effect1", [5])}
${loc("witch_hunter_nexus", [4])}
`; - } - return loc("arpa_projects_nexus_effect1", [5]); - }, - cost: { - Money(offset, wiki) { - return costMultiplier("nexus", offset, 5e6, 1.12, wiki); - }, - Crystal(offset, wiki) { - return costMultiplier("nexus", offset, 6e4, 1.12, wiki); - }, - Iridium(offset, wiki) { - return costMultiplier("nexus", offset, 35e3, 1.12, wiki); - } - } - }, - syphon: { - title: loc("arpa_syphon_title"), - desc() { - let desc = ""; - if (global.tech["syphon"] && global.tech.syphon >= 0) { - desc = `
${loc("arpa_syphon_desc")}
${loc("arpa_syphon_desc_warn2")}
`; - } else { - desc = `
${loc("arpa_syphon_desc")}
${loc("arpa_syphon_desc_warn1")}
`; - } - if (global.race["witch_hunter"]) { - desc += `
${loc(`witch_hunter_suspicion`)}
`; - } - return desc; - }, - reqs: { veil: 2 }, - grant: "syphon", - effect() { - let mana = +(1 / 3 * darkEffect("magic")).toFixed(3); - if (global.tech["syphon"] && global.tech.syphon >= 60) { - let gains = calcPrestige("vacuum"); - let plasmidType = loc("resource_Plasmid_plural_name"); - return `
${loc("arpa_syphon_effect_main", [mana])}
${loc("arpa_syphon_effect4")}
${loc("arpa_syphon_effect_reward", [gains.plasmid, gains.phage, gains.dark, plasmidType, 80])}
`; - } else if (global.tech["syphon"] && global.tech.syphon >= 40) { - return `
${loc("arpa_syphon_effect_main", [mana])}
${loc("arpa_syphon_effect3")}
`; - } else if (global.tech["syphon"] && global.tech.syphon >= 20) { - return `
${loc("arpa_syphon_effect_main", [mana])}
${loc("arpa_syphon_effect2")}
`; - } else { - return `
${loc("arpa_syphon_effect_main", [mana])}
${loc("arpa_syphon_effect1")}
`; - } - }, - cost: { - Money(offset, wiki) { - return costMultiplier("syphon", offset, 75e5, 1.025, wiki); - }, - Mana(offset, wiki) { - return costMultiplier("syphon", offset, 5e3, 1.025, wiki); - }, - Crystal(offset, wiki) { - return costMultiplier("syphon", offset, 1e5, 1.025, wiki); - }, - Infernite(offset, wiki) { - return costMultiplier("syphon", offset, 1e4, 1.025, wiki); - } - } - } - }; - function roid_eject_type() { - if (!global.tech["roid_eject"] || global.tech["roid_eject"] <= 10) { - return loc("arpa_projects_roid_eject_asteroid"); - ; - } else if (global.tech["roid_eject"] <= 25) { - return loc("arpa_projects_roid_eject_moon"); - ; - } else if (global.tech["roid_eject"] <= 40) { - return loc("arpa_projects_roid_eject_dwarf"); - ; - } else if (global.tech["roid_eject"] <= 60) { - return loc("arpa_projects_roid_eject_planet"); - ; - } else { - return loc("arpa_projects_roid_eject_remnant"); - ; - } - } - var genePool = { - genetic_memory: { - id: "genes-genetic_memory", - title: loc("arpa_genepool_genetic_memory_title"), - desc: loc("arpa_genepool_genetic_memory_desc"), - reqs: {}, - grant: ["creep", 1], - cost: { Plasmid() { - return 25; - } }, - action() { - if (payCrispr("genetic_memory")) { - return true; - } - return false; - } - }, - animus: { - id: "genes-animus", - title: loc("arpa_genepool_animus_title"), - desc: loc("arpa_genepool_animus_desc"), - reqs: { creep: 1 }, - grant: ["creep", 2], - cost: { Plasmid() { - return 75; - } }, - action() { - if (payCrispr("animus")) { - return true; - } - return false; - } - }, - divine_remembrance: { - id: "genes-divine_remembrance", - title: loc("arpa_genepool_divine_remembrance_title"), - desc: loc("arpa_genepool_divine_remembrance_desc"), - reqs: { creep: 2 }, - grant: ["creep", 3], - cost: { Plasmid() { - return 225; - } }, - action() { - if (payCrispr("divine_remembrance")) { - return true; - } - return false; - } - }, - divine_proportion: { - id: "genes-divine_proportion", - title: loc("arpa_genepool_divine_proportion_title"), - desc: loc("arpa_genepool_divine_proportion_desc"), - reqs: { creep: 3 }, - grant: ["creep", 4], - cost: { Plasmid() { - return 618; - } }, - action() { - if (payCrispr("divine_proportion")) { - return true; - } - return false; - } - }, - genetic_repository: { - id: "genes-genetic_repository", - title: loc("arpa_genepool_genetic_repository_title"), - desc: loc("arpa_genepool_genetic_repository_desc"), - reqs: { creep: 4 }, - grant: ["creep", 5], - cost: { Plasmid() { - return 999; - } }, - action() { - if (payCrispr("genetic_repository")) { - return true; - } - return false; - } - }, - spatial_reasoning: { - id: "genes-spatial_reasoning", - title: loc("arpa_genepool_spatial_reasoning_title"), - desc: loc("arpa_genepool_spatial_reasoning_desc"), - reqs: {}, - grant: ["store", 1], - cost: { Plasmid() { - return 50; - } }, - action() { - if (payCrispr("spatial_reasoning")) { - return true; - } - return false; - } - }, - spatial_superiority: { - id: "genes-spatial_superiority", - title: loc("arpa_genepool_spatial_superiority_title"), - desc: loc("arpa_genepool_spatial_superiority_desc"), - reqs: { store: 1 }, - grant: ["store", 2], - cost: { Plasmid() { - return 125; - } }, - action() { - if (payCrispr("spatial_superiority")) { - return true; - } - return false; - } - }, - spatial_supremacy: { - id: "genes-spatial_supremacy", - title: loc("arpa_genepool_spatial_supremacy_title"), - desc: loc("arpa_genepool_spatial_supremacy_desc"), - reqs: { store: 2 }, - grant: ["store", 3], - cost: { Plasmid() { - return 325; - } }, - action() { - if (payCrispr("spatial_supremacy")) { - return true; - } - return false; - } - }, - dimensional_warping: { - id: "genes-dimensional_warping", - title: loc("arpa_genepool_dimensional_warping_title"), - desc: loc("arpa_genepool_dimensional_warping_desc"), - reqs: { store: 3 }, - grant: ["store", 4], - cost: { Plasmid() { - return 500; - } }, - action() { - if (payCrispr("dimensional_warping")) { - return true; - } - return false; - } - }, - enhanced_muscle_fiber: { - id: "genes-enhanced_muscle_fiber", - title: loc("arpa_genepool_enhanced_muscle_fiber_title"), - desc: loc("arpa_genepool_enhanced_muscle_fiber_desc"), - reqs: {}, - grant: ["enhance", 1], - cost: { Plasmid() { - return 25; - } }, - action() { - if (payCrispr("enhanced_muscle_fiber")) { - return true; - } - return false; - } - }, - morphogenesis: { - id: "genes-morphogenesis", - title: loc("arpa_genepool_morphogenesis_title"), - desc: loc("arpa_genepool_morphogenesis_desc"), - reqs: {}, - grant: ["evolve", 1], - cost: { Plasmid() { - return 10; - } }, - action() { - if (payCrispr("morphogenesis")) { - return true; - } - return false; - } - }, - recombination: { - id: "genes-recombination", - title: loc("arpa_genepool_recombination_title"), - desc: loc("arpa_genepool_recombination_desc"), - reqs: { evolve: 1 }, - grant: ["evolve", 2], - cost: { Plasmid() { - return 35; - } }, - action() { - if (payCrispr("recombination")) { - return true; - } - return false; - } - }, - homologous_recombination: { - id: "genes-homologous_recombination", - title: loc("arpa_genepool_homologous_recombination_title"), - desc: loc("arpa_genepool_homologous_recombination_desc"), - reqs: { evolve: 2 }, - grant: ["evolve", 3], - cost: { Plasmid() { - return 70; - } }, - action() { - if (payCrispr("homologous_recombination")) { - return true; - } - return false; - } - }, - genetic_reshuffling: { - id: "genes-genetic_reshuffling", - title: loc("arpa_genepool_genetic_reshuffling_title"), - desc: loc("arpa_genepool_genetic_reshuffling_desc"), - reqs: { evolve: 3 }, - grant: ["evolve", 4], - cost: { Plasmid() { - return 175; - } }, - action() { - if (payCrispr("genetic_reshuffling")) { - return true; - } - return false; - } - }, - recombinant_dna: { - id: "genes-recombinant_dna", - title: loc("arpa_genepool_recombinant_dna_title"), - desc: loc("arpa_genepool_recombinant_dna_desc"), - reqs: { evolve: 4 }, - grant: ["evolve", 5], - cost: { Plasmid() { - return 440; - } }, - action() { - if (payCrispr("recombinant_dna")) { - return true; - } - return false; - } - }, - chimeric_dna: { - id: "genes-chimeric_dna", - title: loc("arpa_genepool_chimeric_dna_title"), - desc: loc("arpa_genepool_chimeric_dna_desc"), - reqs: { evolve: 5 }, - grant: ["evolve", 6], - cost: { Plasmid() { - return 1100; - } }, - action() { - if (payCrispr("chimeric_dna")) { - return true; - } - return false; - } - }, - molecular_cloning: { - id: "genes-molecular_cloning", - title: loc("arpa_genepool_molecular_cloning_title"), - desc: loc("arpa_genepool_molecular_cloning_desc"), - reqs: { evolve: 6 }, - grant: ["evolve", 7], - cost: { Plasmid() { - return 2750; - } }, - action() { - if (payCrispr("molecular_cloning")) { - return true; - } - return false; - } - }, - transgenes: { - id: "genes-transgenes", - title: loc("arpa_genepool_transgenes_title"), - desc: loc("arpa_genepool_transgenes_desc"), - reqs: { evolve: 7 }, - grant: ["evolve", 8], - cost: { Plasmid() { - return 6875; - } }, - action() { - if (payCrispr("transgenes")) { - return true; - } - return false; - } - }, - synthesis: { - id: "genes-synthesis", - title: loc("arpa_genepool_synthesis_title"), - desc: loc("arpa_genepool_synthesis_desc", [2, 10]), - reqs: { evolve: 1 }, - grant: ["synthesis", 1], - cost: { Plasmid() { - return 25; - } }, - action() { - if (payCrispr("synthesis")) { - return true; - } - return false; - } - }, - karyokinesis: { - id: "genes-karyokinesis", - title: loc("arpa_genepool_karyokinesis_title"), - desc: loc("arpa_genepool_synthesis_desc", [3, 25]), - reqs: { synthesis: 1 }, - grant: ["synthesis", 2], - cost: { Plasmid() { - return 40; - } }, - action() { - if (payCrispr("karyokinesis")) { - return true; - } - return false; - } - }, - cytokinesis: { - id: "genes-cytokinesis", - title: loc("arpa_genepool_cytokinesis_title"), - desc: loc("arpa_genepool_synthesis_desc", [4, 50]), - reqs: { synthesis: 2 }, - grant: ["synthesis", 3], - cost: { Plasmid() { - return 55; - } }, - action() { - if (payCrispr("cytokinesis")) { - return true; - } - return false; - } - }, - mitosis: { - id: "genes-mitosis", - title: loc("arpa_genepool_mitosis_title"), - desc: loc("arpa_genepool_mitosis_desc", [3]), - reqs: { synthesis: 3, evolve: 2 }, - grant: ["plasma", 1], - cost: { Plasmid() { - return 90; - } }, - action() { - if (payCrispr("mitosis")) { - return true; - } - return false; - } - }, - metaphase: { - id: "genes-metaphase", - title: loc("arpa_genepool_metaphase_title"), - desc: loc("arpa_genepool_mitosis_desc", [5]), - reqs: { plasma: 1 }, - grant: ["plasma", 2], - cost: { Plasmid() { - return 165; - } }, - action() { - if (payCrispr("metaphase")) { - return true; - } - return false; - } - }, - mutation: { - id: "genes-mutation", - title: loc("arpa_genepool_mutation_title"), - desc: loc("arpa_genepool_mutation_desc"), - reqs: { synthesis: 3, creep: 5 }, - grant: ["mutation", 1], - cost: { Plasmid() { - return 1250; - } }, - action() { - if (payCrispr("mutation")) { - global.genes["mutation"] = 1; - genetics(); - return true; - } - return false; - } - }, - transformation: { - id: "genes-transformation", - title: loc("arpa_genepool_transformation_title"), - desc: loc("arpa_genepool_transformation_desc"), - reqs: { mutation: 1 }, - grant: ["mutation", 2], - cost: { Plasmid() { - return 1500; - } }, - action() { - if (payCrispr("transformation")) { - global.genes["mutation"] = 2; - genetics(); - return true; - } - return false; - } - }, - metamorphosis: { - id: "genes-metamorphosis", - title: loc("arpa_genepool_metamorphosis_title"), - desc: loc("arpa_genepool_metamorphosis_desc"), - reqs: { mutation: 2 }, - grant: ["mutation", 3], - cost: { Plasmid() { - return 1750; - } }, - action() { - if (payCrispr("metamorphosis")) { - global.genes["mutation"] = 3; - genetics(); - return true; - } - return false; - } - }, - replication: { - id: "genes-replication", - title: loc("arpa_genepool_replication_title"), - desc: loc("arpa_genepool_replication_desc"), - reqs: { evolve: 1 }, - grant: ["birth", 1], - cost: { Plasmid() { - return 65; - } }, - action() { - if (payCrispr("replication")) { - return true; - } - return false; - } - }, - artificer: { - id: "genes-artificer", - title: loc("arpa_genepool_artificer_title"), - desc: loc("arpa_genepool_artificer_desc"), - reqs: { evolve: 1 }, - grant: ["crafty", 1], - cost: { Plasmid() { - return 45; - } }, - action() { - if (payCrispr("artificer")) { - return true; - } - return false; - } - }, - detail_oriented: { - id: "genes-detail_oriented", - title: loc("arpa_genepool_detail_oriented_title"), - desc: loc("arpa_genepool_crafting_desc", ["50"]), - reqs: { crafty: 1 }, - grant: ["crafty", 2], - cost: { Plasmid() { - return 90; - } }, - action() { - if (payCrispr("detail_oriented")) { - return true; - } - return false; - } - }, - rigorous: { - id: "genes-rigorous", - title: loc("arpa_genepool_rigorous_title"), - desc: loc("arpa_genepool_crafting_desc", ["100"]), - reqs: { crafty: 2 }, - grant: ["crafty", 3], - cost: { Plasmid() { - return 135; - } }, - action() { - if (payCrispr("rigorous")) { - return true; - } - return false; - } - }, - geographer: { - id: "genes-geographer", - title: loc("arpa_genepool_geographer_title"), - desc: loc("arpa_genepool_geographer_desc"), - reqs: { store: 1 }, - grant: ["queue", 1], - cost: { Plasmid() { - return 75; - } }, - action() { - if (payCrispr("geographer")) { - return true; - } - return false; - } - }, - architect: { - id: "genes-architect", - title: loc("arpa_genepool_architect_title"), - desc: loc("arpa_genepool_architect_desc"), - reqs: { queue: 1 }, - grant: ["queue", 2], - cost: { Plasmid() { - return 160; - } }, - action() { - if (payCrispr("architect")) { - return true; - } - return false; - }, - post() { - calcQueueMax(); - calcRQueueMax(); - } - }, - precognition: { - id: "genes-precognition", - title: loc("arpa_genepool_precognition_title"), - desc: loc("arpa_genepool_precognition_desc"), - reqs: { queue: 2 }, - grant: ["queue", 3], - condition() { - return global.stats.aiappoc > 0 ? true : false; - }, - cost: { - Plasmid() { - return 3500; - }, - Phage() { - return 100; - }, - AICore() { - return 1; - } - }, - action() { - if (payCrispr("precognition")) { - return true; - } - return false; - } - }, - governance: { - id: "genes-governance", - title: loc("arpa_genepool_governance_title"), - desc: loc("arpa_genepool_governance_desc"), - reqs: { queue: 2 }, - grant: ["governor", 1], - cost: { - Plasmid() { - return 300; - }, - Phage() { - return 25; - } - }, - action() { - if (payCrispr("governance")) { - return true; - } - return false; - } - }, - civil_service: { - id: "genes-civil_service", - title: loc("arpa_genepool_civil_service_title"), - desc: loc("arpa_genepool_civil_service_desc"), - reqs: { governor: 1 }, - grant: ["governor", 2], - cost: { - Plasmid() { - return 1e3; - }, - Harmony() { - return 1; - } - }, - action() { - if (payCrispr("civil_service")) { - return true; - } - return false; - }, - post() { - if (global.race.hasOwnProperty("governor") && global.race.governor.hasOwnProperty("tasks")) { - for (let i = 0; i < 6; i++) { - if (!global.race.governor.tasks.hasOwnProperty(`t${i}`)) { - global.race.governor.tasks[`t${i}`] = "none"; - } - } - } - defineGovernor(); - } - }, - bureaucratic_efficiency: { - id: "genes-bureaucratic_efficiency", - title: loc("arpa_genepool_bureaucratic_efficiency_title"), - desc: loc("arpa_genepool_bureaucratic_efficiency_desc"), - reqs: { governor: 2 }, - grant: ["governor", 3], - cost: { - Plasmid() { - return 2500; - }, - Artifact() { - return 1; - } - }, - action() { - if (payCrispr("bureaucratic_efficiency")) { - return true; - } - return false; - }, - post() { - defineGovernor(); - }, - flair() { - return loc("arpa_genepool_bureaucratic_efficiency_flair"); - } - }, - hardened_genes: { - id: "genes-hardened_genes", - title: loc("arpa_genepool_hardened_genes_title"), - desc: loc("arpa_genepool_hardened_genes_desc"), - reqs: {}, - grant: ["challenge", 1], - cost: { Plasmid() { - return 5; - } }, - action() { - if (payCrispr("hardened_genes")) { - return true; - } - return false; - } - }, - unlocked: { - id: "genes-unlocked", - title: loc("arpa_genepool_unlocked_title"), - desc: loc("arpa_genepool_unlocked_desc"), - reqs: { challenge: 1 }, - grant: ["challenge", 2], - cost: { Plasmid() { - return 50; - } }, - action() { - if (payCrispr("unlocked")) { - return true; - } - return false; - }, - post() { - calc_mastery(true); - } - }, - universal: { - id: "genes-universal", - title: loc("arpa_genepool_universal_title"), - desc: loc("arpa_genepool_universal_desc"), - reqs: { challenge: 2 }, - grant: ["challenge", 3], - condition() { - return global.race.universe !== "standard" ? true : false; - }, - cost: { Plasmid() { - return 400; - } }, - action() { - if (payCrispr("universal")) { - return true; - } - return false; - }, - post() { - calc_mastery(true); - } - }, - standard: { - id: "genes-standard", - title: loc("arpa_genepool_standard_title"), - desc: loc("arpa_genepool_standard_desc"), - reqs: { challenge: 3 }, - grant: ["challenge", 4], - condition() { - return global.race.universe !== "standard" ? true : false; - }, - cost: { Plasmid() { - return 2500; - } }, - action() { - if (payCrispr("standard")) { - return true; - } - return false; - }, - post() { - calc_mastery(true); - } - }, - mastered: { - id: "genes-mastered", - title: loc("arpa_genepool_mastered_title"), - desc: loc("arpa_genepool_mastered_desc"), - reqs: { challenge: 4 }, - grant: ["challenge", 5], - cost: { Plasmid() { - return 4e3; - } }, - action() { - if (payCrispr("mastered")) { - return true; - } - return false; - } - }, - negotiator: { - id: "genes-negotiator", - title: loc("arpa_genepool_negotiator_title"), - desc: loc("arpa_genepool_negotiator_desc"), - reqs: { challenge: 2 }, - grant: ["trader", 1], - cost: { Plasmid() { - return 750; - } }, - action() { - if (payCrispr("negotiator")) { - global.genes["trader"] = 1; - updateTrades(); - return true; - } - return false; - } - }, - haggler: { - id: "genes-haggler", - title: loc("arpa_genepool_haggler_title"), - desc: loc("arpa_genepool_haggler_desc"), - reqs: { trader: 1 }, - condition() { - return global.stats.achieve["godslayer"] ? true : false; - }, - grant: ["trader", 2], - cost: { Supercoiled() { - return 10; - } }, - action() { - if (payCrispr("haggler")) { - global.genes["trader"] = 2; - updateTrades(); - return true; - } - return false; - } - }, - ancients: { - id: "genes-ancients", - title: loc("arpa_genepool_ancients_title"), - desc: loc("arpa_genepool_ancients_desc"), - reqs: { evolve: 2 }, - condition() { - return global.genes["old_gods"] ? true : false; - }, - grant: ["ancients", 1], - cost: { Plasmid() { - return 120; - } }, - action() { - if (payCrispr("ancients")) { - global.genes["ancients"] = 1; - drawTech(); - return true; - } - return false; - } - }, - faith: { - id: "genes-faith", - title: loc("arpa_genepool_faith_title"), - desc: loc("arpa_genepool_faith_desc"), - reqs: { ancients: 1 }, - grant: ["ancients", 2], - cost: { Plasmid() { - return 300; - } }, - action() { - if (payCrispr("faith")) { - global.civic.priest.display = true; - return true; - } - return false; - } - }, - devotion: { - id: "genes-devotion", - title: loc("arpa_genepool_devotion_title"), - desc: loc("arpa_genepool_devotion_desc"), - reqs: { ancients: 2 }, - grant: ["ancients", 3], - cost: { Plasmid() { - return 600; - } }, - action() { - if (payCrispr("devotion")) { - return true; - } - return false; - } - }, - acolyte: { - id: "genes-acolyte", - title: loc("arpa_genepool_acolyte_title"), - desc: loc("arpa_genepool_acolyte_desc"), - reqs: { ancients: 3 }, - grant: ["ancients", 4], - cost: { Plasmid() { - return 1e3; - } }, - action() { - if (payCrispr("acolyte")) { - return true; - } - return false; - } - }, - conviction: { - id: "genes-conviction", - title: loc("arpa_genepool_conviction_title"), - desc: loc("arpa_genepool_conviction_desc"), - reqs: { ancients: 4 }, - grant: ["ancients", 5], - cost: { Plasmid() { - return 1500; - } }, - action() { - if (payCrispr("conviction")) { - return true; - } - return false; - } - }, - doctrine: { - id: "genes-doctrine", - title: loc("arpa_genepool_doctrine_title"), - desc: loc("arpa_genepool_doctrine_desc"), - reqs: { ancients: 5 }, - condition() { - return global.stats.achieve["godslayer"] ? true : false; - }, - grant: ["ancients", 6], - cost: { Supercoiled() { - return 50; - } }, - action() { - if (payCrispr("doctrine")) { - return true; - } - return false; - } - }, - ideology: { - id: "genes-ideology", - title: loc("arpa_genepool_ideology_title"), - desc: loc("arpa_genepool_ideology_desc"), - reqs: { ancients: 6 }, - grant: ["ancients", 7], - cost: { Supercoiled() { - return 75; - } }, - action() { - if (payCrispr("ideology")) { - return true; - } - return false; - } - }, - transcendence: { - id: "genes-transcendence", - title: loc("arpa_genepool_transcendence_title"), - desc: loc("arpa_genepool_transcendence_desc"), - reqs: { ancients: 1, mutation: 3 }, - grant: ["transcendence", 1], - cost: { Plasmid() { - return 3e3; - } }, - action() { - if (payCrispr("transcendence")) { - global.genes["transcendence"] = 1; - drawTech(); - return true; - } - return false; - } - }, - preeminence: { - id: "genes-preeminence", - title: loc("arpa_genepool_preeminence_title"), - desc: loc("arpa_genepool_preeminence_desc"), - reqs: { transcendence: 1, challenge: 5, ancients: 7 }, - grant: ["transcendence", 2], - cost: { - Supercoiled() { - return 250; - }, - Harmony() { - return 10; - } - }, - action() { - if (payCrispr("preeminence")) { - return true; - } - return false; - } - }, - bleeding_effect: { - id: "genes-bleeding_effect", - title: loc("arpa_genepool_bleeding_effect_title"), - desc: loc("arpa_genepool_bleeding_effect_desc", [2.5]), - reqs: { creep: 2 }, - grant: ["bleed", 1], - condition() { - return global.race.universe === "antimatter" ? true : false; - }, - cost: { Plasmid() { - return 100; - } }, - action() { - if (payCrispr("bleeding_effect")) { - return true; - } - return false; - } - }, - synchronicity: { - id: "genes-synchronicity", - title: loc("arpa_genepool_synchronicity_title"), - desc: loc("arpa_genepool_synchronicity_desc", [25]), - reqs: { bleed: 1 }, - grant: ["bleed", 2], - cost: { Plasmid() { - return 500; - } }, - action() { - if (payCrispr("synchronicity")) { - return true; - } - return false; - } - }, - astral_awareness: { - id: "genes-astral_awareness", - title: loc("arpa_genepool_astral_awareness_title"), - desc: loc("arpa_genepool_astral_awareness_desc"), - reqs: { bleed: 2 }, - grant: ["bleed", 3], - cost: { Plasmid() { - return 1e3; - } }, - action() { - if (payCrispr("astral_awareness")) { - return true; - } - return false; - } - }, - blood_remembrance: { - id: "genes-blood_remembrance", - title: loc("arpa_genepool_blood_remembrance_title"), - desc: loc("arpa_genepool_blood_remembrance_desc"), - reqs: {}, - grant: ["blood", 1], - condition() { - return global.prestige.Blood_Stone.count >= 1 ? true : false; - }, - cost: { - Plasmid() { - return 1e3; - }, - Phage() { - return 10; - } - }, - action() { - if (payCrispr("blood_remembrance")) { - return true; - } - return false; - } - }, - blood_sacrifice: { - id: "genes-blood_sacrifice", - title: loc("arpa_genepool_blood_sacrifice_title"), - desc: loc("arpa_genepool_blood_sacrifice_desc"), - reqs: { blood: 1 }, - grant: ["blood", 2], - cost: { - Plasmid() { - return 3e3; - }, - Phage() { - return 100; - }, - Artifact() { - return 1; - } - }, - action() { - if (payCrispr("blood_sacrifice")) { - return true; - } - return false; - } - }, - essence_absorber: { - id: "genes-essence_absorber", - title: loc("arpa_genepool_essence_absorber_title"), - desc: loc("arpa_genepool_essence_absorber_desc"), - reqs: { blood: 2 }, - grant: ["blood", 3], - cost: { - Plasmid() { - return 7500; - }, - Phage() { - return 250; - }, - Artifact() { - return 1; - } - }, - action() { - if (payCrispr("essence_absorber")) { - return true; - } - return false; - }, - post() { - blood(); - } - } - }; - var bloodPool = { - purify: { - id: "blood-purify", - title: loc("arpa_blood_purify_title"), - desc: loc("arpa_blood_purify_desc"), - reqs: {}, - grant: ["spire", 1], - cost: { Blood_Stone() { - return 10; - } }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - chum: { - id: "blood-chum", - title: loc("arpa_blood_chum_title"), - desc: loc("arpa_blood_chum_desc"), - reqs: { spire: 1 }, - grant: ["spire", 2], - cost: { Blood_Stone() { - return 25; - } }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - lust: { - id: "blood-lust", - title: loc("arpa_blood_lust_title"), - desc: loc("arpa_blood_lust_desc"), - reqs: {}, - grant: ["lust", "*"], - cost: { - Blood_Stone(wiki) { - return ((wiki || 0) + (global.blood["lust"] || 0)) * 15 + 15; - }, - Artifact(wiki) { - return ((wiki || 0) + (global.blood["lust"] || 0)) % 5 === 0 ? 1 : 0; - } - }, - effect() { - return `${loc("arpa_blood_repeat")}`; - }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - illuminate: { - id: "blood-illuminate", - title: loc("arpa_blood_illuminate_title"), - desc: loc("arpa_blood_illuminate_desc"), - reqs: {}, - grant: ["illuminate", "*"], - cost: { - Blood_Stone(wiki) { - return ((wiki || 0) + (global.blood["illuminate"] || 0)) * 12 + 12; - }, - Artifact(wiki) { - return ((wiki || 0) + (global.blood["illuminate"] || 0)) % 5 === 0 ? 1 : 0; - } - }, - effect() { - return `${loc("arpa_blood_repeat")}`; - }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - greed: { - id: "blood-greed", - title: loc("arpa_blood_greed_title"), - desc: loc("arpa_blood_greed_desc"), - reqs: {}, - grant: ["greed", "*"], - cost: { - Blood_Stone(wiki) { - return ((wiki || 0) + (global.blood["greed"] || 0)) * 16 + 16; - }, - Artifact(wiki) { - return ((wiki || 0) + (global.blood["greed"] || 0)) % 5 === 0 ? 1 : 0; - } - }, - effect() { - return `${loc("arpa_blood_repeat")}`; - }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - hoarder: { - id: "blood-hoarder", - title: loc("arpa_blood_hoarder_title"), - desc: loc("arpa_blood_hoarder_desc"), - reqs: {}, - grant: ["hoarder", "*"], - condition() { - return global.genes["blood"] && global.genes.blood >= 3 ? true : false; - }, - cost: { - Blood_Stone(wiki) { - return ((wiki || 0) + (global.blood["hoarder"] || 0)) * 14 + 14; - }, - Artifact(wiki) { - return ((wiki || 0) + (global.blood["hoarder"] || 0)) % 5 === 0 ? 1 : 0; - } - }, - effect() { - return `${loc("arpa_blood_repeat")}`; - }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - artisan: { - id: "blood-artisan", - title: loc("arpa_blood_artisan_title"), - desc: loc("arpa_blood_artisan_desc"), - reqs: {}, - grant: ["artisan", "*"], - cost: { - Blood_Stone(wiki) { - return ((wiki || 0) + (global.blood["artisan"] || 0)) * 8 + 8; - }, - Artifact(wiki) { - return ((wiki || 0) + (global.blood["artisan"] || 0)) % 5 === 0 ? 1 : 0; - } - }, - effect() { - return `${loc("arpa_blood_repeat")}`; - }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - attract: { - id: "blood-attract", - title: loc("arpa_blood_attract_title"), - desc: loc("arpa_blood_attract_desc"), - reqs: {}, - grant: ["attract", "*"], - condition() { - return global.genes["blood"] && global.genes.blood >= 3 ? true : false; - }, - cost: { - Blood_Stone(wiki) { - return ((wiki || 0) + (global.blood["attract"] || 0)) * 4 + 4; - }, - Artifact(wiki) { - return ((wiki || 0) + (global.blood["attract"] || 0)) % 5 === 0 ? 1 : 0; - } - }, - effect() { - return `${loc("arpa_blood_repeat")}`; - }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - wrath: { - id: "blood-wrath", - title: loc("arpa_blood_wrath_title"), - desc: loc("arpa_blood_wrath_desc"), - reqs: {}, - grant: ["wrath", "*"], - cost: { - Blood_Stone(wiki) { - return ((wiki || 0) + (global.blood["wrath"] || 0)) * 2 + 2; - }, - Artifact() { - return 1; - } - }, - effect() { - return `${loc("arpa_blood_repeat")}`; - }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - prepared: { - id: "blood-prepared", - title: loc("arpa_blood_prepared_title"), - desc: loc("arpa_blood_prepared_desc"), - reqs: {}, - grant: ["prepared", 1], - condition() { - return global.genes["blood"] && global.genes.blood >= 3 ? true : false; - }, - cost: { Blood_Stone() { - return 50; - } }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - }, - post() { - drawMechLab(); - } - }, - compact: { - id: "blood-compact", - title: loc("arpa_blood_compact_title"), - desc: loc("arpa_blood_compact_desc"), - reqs: { prepared: 1 }, - grant: ["prepared", 2], - condition() { - return global.genes["blood"] && global.genes.blood >= 3 ? true : false; - }, - cost: { Blood_Stone() { - return 75; - } }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - infernal: { - id: "blood-infernal", - title: loc("arpa_blood_infernal_title"), - desc: loc("arpa_blood_infernal_desc"), - reqs: { prepared: 2 }, - grant: ["prepared", 3], - condition() { - return global.genes["blood"] && global.genes.blood >= 3 ? true : false; - }, - cost: { - Blood_Stone() { - return 125; - }, - Artifact() { - return 1; - } - }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - unbound: { - id: "blood-unbound", - title: loc("arpa_blood_unbound_title"), - desc: loc("arpa_blood_unbound_desc"), - reqs: {}, - grant: ["unbound", 1], - cost: { Blood_Stone() { - return 50; - } }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - unbound_resistance: { - id: "blood-unbound_resistance", - title: loc("arpa_blood_unbound_resistance_title"), - desc: loc("arpa_blood_unbound_resistance_desc"), - reqs: { unbound: 1 }, - grant: ["unbound", 2], - cost: { Blood_Stone() { - return 100; - } }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - shadow_war: { - id: "blood-shadow_war", - title: loc("arpa_blood_shadow_war_title"), - desc: loc("arpa_blood_shadow_war_desc"), - reqs: { unbound: 2 }, - grant: ["unbound", 3], - condition() { - return global.genes["blood"] && global.genes.blood >= 3 ? true : false; - }, - cost: { - Blood_Stone() { - return 250; - }, - Artifact() { - return 2; - } - }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - unbound_immunity: { - id: "blood-unbound_immunity", - title: loc("arpa_blood_unbound_immunity_title"), - desc: loc("arpa_blood_unbound_immunity_desc"), - reqs: { unbound: 3 }, - grant: ["unbound", 4], - condition() { - return global.genes["blood"] && global.genes.blood >= 3 ? true : false; - }, - cost: { Blood_Stone() { - return 500; - } }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - }, - blood_aware: { - id: "blood-blood_aware", - title: loc("arpa_blood_blood_aware_title"), - desc: loc("arpa_blood_blood_aware_desc"), - reqs: {}, - grant: ["aware", 1], - condition() { - return global.genes["blood"] && global.genes.blood >= 3 ? true : false; - }, - cost: { Blood_Stone() { - return 10; - } }, - action() { - if (payBloodPrice($(this)[0].cost)) { - return true; - } - return false; - } - } - }; - function payCrispr(gene) { - let afford = true; - let costs = genePool[gene].cost; - Object.keys(costs).forEach(function(res) { - let oRes = res; - if (res === "Plasmid" && global.race.universe === "antimatter") { - res = "AntiPlasmid"; - } - if (global.prestige[res].count < costs[oRes]()) { - afford = false; - } - }); - if (afford) { - Object.keys(costs).forEach(function(res) { - let oRes = res; - if (res === "Plasmid" && global.race.universe === "antimatter") { - res = "AntiPlasmid"; - } - global.prestige[res].count -= costs[oRes](); - }); - return true; - } - return false; - } - function payBloodPrice(costs) { - if (checkCosts(costs)) { - Object.keys(costs).forEach(function(res) { - global.prestige[res].count -= costs[res](); - }); - return true; - } - return false; - } - function drawGenes() { - Object.keys(actions.genes).forEach(function(gene) { - removeAction(actions.genes[gene].id); - if (checkGeneRequirements(gene)) { - addAction("genes", gene); - } - }); - } - function drawBlood() { - Object.keys(actions.blood).forEach(function(trait) { - removeAction(actions.blood[trait].id); - if (checkBloodRequirements(trait)) { - addAction("blood", trait); - } - }); - } - function checkGeneRequirements(gene) { - var isMet = true; - Object.keys(actions.genes[gene].reqs).forEach(function(req) { - if (!global.genes[req] || global.genes[req] < actions.genes[gene].reqs[req]) { - isMet = false; - } - }); - if (isMet && (!global.genes[actions.genes[gene].grant[0]] || global.genes[actions.genes[gene].grant[0]] < actions.genes[gene].grant[1])) { - return true; - } - return false; - } - function checkBloodRequirements(trait) { - var isMet = true; - Object.keys(actions.blood[trait].reqs).forEach(function(req) { - if (!global.blood[req] || global.blood[req] < actions.blood[trait].reqs[req]) { - isMet = false; - } - }); - if (isMet && (!global.blood[actions.blood[trait].grant[0]] || actions.blood[trait].grant[1] === "*" || global.blood[actions.blood[trait].grant[0]] < actions.blood[trait].grant[1])) { - return true; - } - return false; - } - function gainGene(action) { - var gene = actions.genes[action].grant[0]; - global.genes[gene] = actions.genes[action].grant[1]; - crispr(); - } - function gainBlood(action) { - var trait = actions.blood[action].grant[0]; - if (actions.blood[action].grant[1] === "*") { - global.blood[trait] ? global.blood[trait]++ : global.blood[trait] = 1; - } else { - global.blood[trait] = actions.blood[action].grant[1]; - } - blood(); - } - function pick_monument() { - let monuments = []; - ["Obelisk", "Statue", "Sculpture"].forEach(function(type) { - if (type !== global.arpa["m_type"]) { - monuments.push(type); - } - }); - if (!global.race["flier"] && global.arpa["m_type"] !== "Monolith") { - monuments.push("Monolith"); - } - if (global.race["evil"] && global.arpa["m_type"] !== "Pillar" && !global.race["kindling_kindred"] && !global.race["smoldering"]) { - monuments.push("Pillar"); - } - if (global.race.universe === "magic" && global.arpa["m_type"] !== "Megalith") { - monuments.push("Megalith"); - } - return monuments[Math.rand(0, monuments.length)]; - } - function monument_costs(res, offset, wiki) { - let type = wiki ? wiki.m_type : global.arpa.m_type; - switch (type) { - case "Obelisk": - return res === "Stone" ? costMultiplier("monument", offset, 1e6, 1.1, wiki) : 0; - case "Statue": - return res === "Aluminium" ? costMultiplier("monument", offset, 35e4, 1.1, wiki) : 0; - case "Sculpture": - return res === "Steel" ? costMultiplier("monument", offset, 3e5, 1.1, wiki) : 0; - case "Monolith": - return res === "Cement" ? costMultiplier("monument", offset, 3e5, 1.1, wiki) : 0; - case "Pillar": - return res === "Lumber" ? costMultiplier("monument", offset, 1e6, 1.1, wiki) : 0; - case "Megalith": - return res === "Crystal" ? costMultiplier("monument", offset, 55e3, 1.1, wiki) : 0; - } - } - function checkRequirements(tech) { - if (arpaProjects[tech]["condition"] && !arpaProjects[tech].condition()) { - return false; - } - let c_path = global.race["truepath"] ? "truepath" : "standard"; - if (arpaProjects[tech].hasOwnProperty("path") && !arpaProjects[tech].path.includes(c_path)) { - return false; - } - var isMet = true; - Object.keys(arpaProjects[tech].reqs).forEach(function(req) { - if (!global.tech[req] || global.tech[req] < arpaProjects[tech].reqs[req]) { - isMet = false; - } - }); - return isMet; - } - function payArpaCosts(costs) { - costs = arpaAdjustCosts(costs); - if (checkArpaCosts(costs)) { - Object.keys(costs).forEach(function(res) { - global["resource"][res].amount -= costs[res]() / 100; - }); - return true; - } - return false; - } - function checkArpaCosts(costs) { - var test = true; - Object.keys(costs).forEach(function(res) { - var testCost = Number(costs[res]()) / 100; - if (testCost > Number(global["resource"][res].amount)) { - test = false; - return false; - } - }); - return test; - } - function arpaAdjustCosts(costs, offset, wiki) { - costs = creativeAdjust(costs, offset, wiki); - return adjustCosts({ "cost": costs }, offset, wiki); - } - function creativeAdjust(costs, offset, wiki) { - let fathom = fathomCheck("human"); - if (wiki && wiki.creative || !wiki && global.race["creative"] || !wiki && fathom > 0) { - var newCosts = {}; - Object.keys(costs).forEach(function(res) { - newCosts[res] = function() { - let cost = costs[res](offset, wiki); - if (wiki && wiki.creative || !wiki && global.race["creative"]) { - cost *= 1 - traits.creative.vars()[1] / 100; - } - if (fathom > 0) { - cost *= 1 - traits.creative.vars(1)[1] / 100 * fathom; - } - return cost; - }; - }); - return newCosts; - } - return costs; - } - function costMultiplier(project, offset, base, multiplier, wiki) { - var rank = global.arpa[project] ? global.arpa[project].rank : 0; - if ((wiki && wiki.creative || !wiki && global.race["creative"]) && project !== "syphon") { - multiplier -= traits.creative.vars()[0]; - } - if (offset) { - rank += offset; - } - return Math.round(multiplier ** rank * base); - } - function physics() { - if (global.tech["high_tech"] && global.tech.high_tech >= 6) { - let parent = $("#arpaPhysics"); - clearElement(parent); - Object.keys(arpaProjects).forEach(function(project) { - addProject(parent, project); - }); - } - } - function clearGeneticsDrag() { - let el = $("#geneticMinor")[0]; - if (el) { - let sort = Sortable.get(el); - if (sort) { - sort.destroy(); - } - } - } - function dragGeneticsList() { - let el = $("#geneticMinor")[0]; - if (el) { - Sortable.create(el, { - onEnd(e) { - let order = global.settings.mtorder; - order.splice(e.newDraggableIndex, 0, order.splice(e.oldDraggableIndex, 1)[0]); - global.settings.mtorder = order; - genetics(); - } - }); - } - } - function genetics() { - let parent = $("#arpaGenetics"); - clearGeneticsDrag(); - clearElement(parent); - if (!global.settings.arpa.genetics) { - return false; - } - if (global.tech["genetics"] > 1) { - let genome = $(`
`); - parent.append(genome); - let label = global.tech.genetics > 2 ? loc("arpa_gene_mutation") : loc("arpa_sequence_genome"); - if (global.race["artifical"]) { - label = global.tech.genetics > 2 ? loc("arpa_code_modification") : loc("arpa_decompile_source"); - } - let sequence = $(`
${label} - ${loc("arpa_to_complete")}
`); - genome.append(sequence); - let progress = $(`{{ progress }}%`); - genome.append(progress); - let b_label = global.tech.genetics > 2 ? loc("arpa_mutate") : loc("arpa_sequence"); - if (global.race["artifical"]) { - b_label = global.tech.genetics > 2 ? loc("arpa_modify") : loc("arpa_decompile"); - } - let button = $(``); - genome.append(button); - if (global.tech["genetics"] >= 5) { - let boost = $(``); - genome.append(boost); - } - if (global.tech["genetics"] >= 6) { - let boost = $(``); - genome.append(boost); - } - if (global.tech["genetics"] >= 7) { - let boost = $(``); - genome.append(boost); - } - if (global.arpa.sequence.on) { - $("#arpaSequence button.seq").addClass("has-text-success"); - } - if (global.arpa.sequence.boost) { - $("#arpaSequence button.boost").addClass("has-text-success"); - } - if (global.arpa.sequence.auto) { - $("#arpaSequence button.auto").addClass("has-text-success"); - } - vBind({ - el: `#arpaSequence`, - data: global.arpa.sequence, - methods: { - toggle() { - if (global.arpa.sequence.on) { - global.arpa.sequence.on = false; - $("#arpaSequence button.seq").removeClass("has-text-success"); - } else { - global.arpa.sequence.on = true; - $("#arpaSequence button.seq").addClass("has-text-success"); - } - }, - booster() { - if (global.arpa.sequence.boost) { - global.arpa.sequence.boost = false; - $("#arpaSequence button.boost").removeClass("has-text-success"); - } else { - global.arpa.sequence.boost = true; - $("#arpaSequence button.boost").addClass("has-text-success"); - } - }, - boostLabel(sr) { - return loc(global.race["artifical"] ? "arpa_boost_artifical_label" : "arpa_boost_label") + (sr ? global.arpa.sequence.boost ? loc("city_on") : loc("city_off") : ""); - }, - novo() { - let keyMult = keyMultiplier(); - let cost = 2e5; - if (global.resource.Knowledge.amount >= cost) { - let maxNovo = Math.floor(global.resource.Knowledge.amount / cost); - let actualNovo = Math.min(keyMult, maxNovo); - global.resource.Knowledge.amount -= cost * actualNovo; - global.resource.Genes.amount += actualNovo; - let trick = trickOrTreat(8, 12, false); - if (trick.length > 0) { - $(`#arpaSequence > div:first`).append(trick); - } - } - }, - novoLabel() { - return loc(global.race["artifical"] ? "arpa_novo_artifical_label" : "arpa_novo_label", ["200k"]); - }, - auto_seq() { - if (global.arpa.sequence.auto) { - global.arpa.sequence.auto = false; - $("#arpaSequence button.auto").removeClass("has-text-success"); - } else { - global.arpa.sequence.auto = true; - $("#arpaSequence button.auto").addClass("has-text-success"); - } - }, - autoLabel(sr) { - return loc(global.race["artifical"] ? "arpa_auto_compile_label" : "arpa_auto_seq_label") + (sr ? global.arpa.sequence.boost ? loc("city_on") : loc("city_off") : ""); - }, - timer(val) { - if (global.arpa.sequence.on && global.arpa.sequence.labs > 0) { - if (global.arpa.sequence.boost) { - return timeFormat(val / (global.arpa.sequence.labs * 2)); - } else { - return timeFormat(val / global.arpa.sequence.labs); - } - } else { - let egg = easterEgg(14, 12); - if (egg.length > 0) { - return egg; - } - return loc("time_never"); - } - } - } - }); - popover( - `popArpaSeq`, - function() { - if (global.tech.genetics > 2) { - return global.race["artifical"] ? loc("arpa_modify_desc") : loc("arpa_mutate_desc"); - } else { - return global.race["artifical"] ? loc("arpa_decompile_desc") : loc("arpa_sequence_desc"); - } - }, - { - elm: `#arpaSequence .seqlbl`, - classes: `has-background-light has-text-dark` - } - ); - } - if (global.tech["genetics"] > 2) { - let breakdown2 = $('
'); - $("#arpaGenetics").append(breakdown2); - let minorList = $('
'); - breakdown2.append(minorList); - if (global.tech["decay"] && global.tech["decay"] >= 2) { - if (!global.settings.mtorder.includes("fortify")) { - global.settings.mtorder.push("fortify"); - } - } - Object.keys(global.race).forEach(function(trait) { - if (traits[trait] && traits[trait].type === "minor") { - if (!global.settings.mtorder.includes(trait)) { - global.settings.mtorder.push(trait); - } - } - }); - if (global.genes["challenge"] && global.genes["challenge"] >= 5) { - if (!global.settings.mtorder.includes("mastery")) { - global.settings.mtorder.push("mastery"); - } - } - let minor = false; - let minor_list = []; - global.settings.mtorder.forEach(function(trait) { - if (traits[trait] && traits[trait].type === "minor" || trait === "mastery" || trait === "fortify") { - if (trait !== "fortify" || global.tech["decay"] && global.tech["decay"] >= 2) { - if (!["promiscuous", "content", "resilient", "industrious", "tactical", "fibroblast"].includes(trait) && global.race["lone_survivor"] || !global.race["lone_survivor"]) { - minor = true; - bindTrait(minorList, trait); - minor_list.push(trait); - } - } - } - }); - breakdown2.append(`
${loc("arpa_race_genetic_traids", [flib("name")])}
`); - let traitName = traitSkin("name"); - let remove_list = []; - let null_list = []; - let traitListing = $(`
`); - breakdown2.append(traitListing); - let trait_listing = deepClone(global.race); - if (eventActive("fool", 2023)) { - trait_listing["hooved"] = 1; - } - Object.keys(trait_listing).forEach(function(trait) { - if (traits[trait] && traits[trait].type !== "minor" && traits[trait].type !== "special" && trait !== "evil" && trait !== "soul_eater" && trait !== "artifical") { - let mimicTraits = [ - ...global.race["ss_traits"] ? global.race["ss_traits"] : [], - ...global.race["iTraits"] ? Object.keys(global.race["iTraits"]) : [] - ]; - let readOnly = false; - if (mimicTraits.includes(trait)) { - readOnly = true; - } else if (["sludge", "ultra_sludge"].includes(global.race.species) && (trait === "ooze" || global.race["modified"])) { - readOnly = true; - } else if (!global.race.hasOwnProperty(trait)) { - readOnly = true; - } else if (global.race.hasOwnProperty("absorbed") && global.race.absorbed.map((r) => races[r].fanaticism).includes(trait) || global.race["warlord"] && ["iron_wood", "unified", "apex_predator"].includes(trait)) { - readOnly = true; - } else if (trait === "forager" && mimicTraits.some((item) => ["herbivore", "carnivore"].includes(item))) { - readOnly = true; - } - if (!readOnly && (traits[trait].type === "major" && global.genes["mutation"] || traits[trait].type === "genus" && global.genes["mutation"] && global.genes["mutation"] >= 2)) { - let major = $(`
`); - let purge = $(`${loc("arpa_remove_button")}`); - remove_list.push(trait); - major.append(purge); - major.append($(`${traitName[trait] ? traitName[trait] : traits[trait].name} (${loc(`arpa_genepool_rank`, [traitRank(trait)])})`)); - traitListing.append(major); - } else { - null_list.push(trait); - traitListing.append(`
${traitName[trait] ? traitName[trait] : traits[trait].name} (${loc(`arpa_genepool_rank`, [traitRank(trait)])})
`); - } - } - }); - let offspec_traits = []; - let trait_list = []; - if (global.genes["mutation"] && global.genes["mutation"] >= 3) { - if (global.race.species !== "hellspawn" && (global.race.species !== "sludge" && global.race.species !== "ultra_sludge" || !global.race["modified"])) { - breakdown2.append(`
${loc("arpa_race_genetic_gain")}
`); - let conflict_traits = ["dumb", "smart"]; - let mainType = races[global.race.species].type === "hybrid" ? global.race.maintype : races[global.race.species].type; - let speciesTypes = races[global.race.species].type === "hybrid" ? races[global.race.species].hybrid : [races[global.race.species].type]; - Object.keys(races).forEach(function(race) { - if (race !== "junker" && race !== "sludge" && race !== "ultra_sludge" && race !== "custom" && (speciesTypes.includes(races[race].type) || races[race].type === "hybrid" && race === global.race.species)) { - Object.keys(races[race].traits).forEach(function(trait) { - if (!global.race[trait] && trait !== "soul_eater") { - let conflict_pos = conflict_traits.indexOf(trait); - if (conflict_pos === -1) { - trait_list.push(trait); - if (races[race].type !== mainType && race !== global.race.species) { - offspec_traits.push(trait); - } - } else { - let is_conflict = false; - switch (conflict_pos % 2) { - case 0: - if (global.race[conflict_traits[conflict_pos + 1]]) { - is_conflict = true; - } - break; - case 1: - if (global.race[conflict_traits[conflict_pos - 1]]) { - is_conflict = true; - } - break; - } - if (!is_conflict) { - trait_list.push(trait); - if (races[race].type !== mainType) { - offspec_traits.push(trait); - } - } - } - } - }); - } - }); - let addListing = $(`
`); - breakdown2.append(addListing); - for (let i = 0; i < trait_list.length; i++) { - let trait = trait_list[i]; - if (!["catnip", "anise"].includes(trait)) { - let major = $(`
`); - let add = $(`${loc("arpa_gain_button")}`); - major.append(add); - major.append($(`${traitName[trait] ? traitName[trait] : traits[trait].name} (${loc(`arpa_genepool_rank`, [offspec_traits[trait] ? 0.5 : 1])})`)); - addListing.append(major); - } - } - } - } - if (minor) { - breakdown2.prepend(`
${loc("arpa_race_genetic_minor_traits", [flib("name")])}
`); - } - let rmCost = function(t, label) { - let cost = traits[t].val * 5; - if (["custom", "hybrid", "sludge", "ultra_sludge"].includes(global.race.species)) { - cost *= 10; - } - if (global.race[t] && traits[t].val < 0) { - switch (global.race[t]) { - case 0.1: - cost *= 4; - break; - case 0.25: - cost *= 3; - break; - case 0.5: - cost *= 2; - break; - } - } - if (cost < 0) { - cost *= -1; - } - if (global.race["modified"]) { - cost += global.race.modified.t * 10; - if (traits[t].val < 0) { - cost += global.race.modified.nr * 10; - } - } - if (label) { - return loc("arpa_remove", [traitSkin("name", t), cost, global.race.universe === "antimatter" ? loc("resource_AntiPlasmid_plural_name") : loc("resource_Plasmid_plural_name")]); - } - return cost; - }; - let addCost = function(t, label) { - let cost = traits[t].val * 5; - if (["custom", "hybrid", "sludge", "ultra_sludge"].includes(global.race.species)) { - cost *= 10; - } - if (cost < 0) { - cost *= -1; - } - if (global.race["modified"]) { - cost += global.race.modified.t * 10; - if (traits[t].val >= 0) { - cost += global.race.modified.pa * 10; - } - } - if (label) { - return loc("arpa_gain", [traitSkin("name", t), cost, global.race.universe === "antimatter" ? loc("resource_AntiPlasmid_plural_name") : loc("resource_Plasmid_plural_name")]); - } - return cost; - }; - let mGeneCost = function(t) { - let cost = fibonacci(global.race.minor[t] ? global.race.minor[t] + 4 : 4); - if (t === "mastery") { - cost *= 5; - } - return loc("arpa_gene_buy", [traitSkin("name", t), sizeApproximation(cost), global.resource.Genes.name]); - }; - let mPhageCost = function(t) { - let cost = fibonacci(global.genes.minor[t] ? global.genes.minor[t] + 4 : 4); - if (t === "mastery") { - cost *= 2; - } - return loc("arpa_phage_buy", [traitSkin("name", t), sizeApproximation(cost), loc(`resource_Phage_name`)]); - }; - vBind({ - el: `#geneticBreakdown`, - data: { - genes: global.genes, - race: global.race - }, - methods: { - gene(t) { - let curr_iteration = 0; - let iterations = keyMultiplier(); - let can_purchase = true; - let redraw = false; - while (curr_iteration < iterations && can_purchase) { - let cost = fibonacci(global.race.minor[t] ? global.race.minor[t] + 4 : 4); - if (t === "mastery") { - cost *= 5; - } - if (global.resource.Genes.amount >= cost) { - global.resource.Genes.amount -= cost; - global.race.minor[t] ? global.race.minor[t]++ : global.race.minor[t] = 1; - global.race[t] ? global.race[t]++ : global.race[t] = 1; - redraw = true; - } else { - can_purchase = false; - } - curr_iteration++; - } - if (redraw) { - if (t === "mastery") { - calc_mastery(true); - } - genetics(); - if (t === "persuasive") { - updateTrades(); - } - } - }, - phage(t) { - let curr_iteration = 0; - let iterations = keyMultiplier(); - let can_purchase = true; - let redraw = false; - while (curr_iteration < iterations && can_purchase) { - let cost = fibonacci(global.genes.minor[t] ? global.genes.minor[t] + 4 : 4); - if (t === "mastery") { - cost *= 2; - } - if (global.prestige.Phage.count >= cost) { - global.prestige.Phage.count -= cost; - global.genes.minor[t] ? global.genes.minor[t]++ : global.genes.minor[t] = 1; - global.race[t] ? global.race[t]++ : global.race[t] = 1; - redraw = true; - } else { - can_purchase = false; - } - curr_iteration++; - } - if (redraw) { - if (t === "mastery") { - calc_mastery(true); - } - genetics(); - if (t === "persuasive") { - updateTrades(); - } - } - }, - purge(t) { - if (["sludge", "ultra_sludge"].includes(global.race.species) && (global.race["modified"] || t === "ooze")) { - return; - } - let cost = rmCost(t, false); - let res = global.race.universe === "antimatter" ? "AntiPlasmid" : "Plasmid"; - if (global.prestige[res].count >= cost) { - global.prestige[res].count -= cost; - let rank = global.race[t]; - delete global.race[t]; - if (!global.race["modified"]) { - global.race["modified"] = { - t: 0, - nr: 0, - na: 0, - pr: 0, - pa: 0 - }; - } - global.race.modified.t++; - if (traits[t].val >= 0) { - global.race.modified.pr++; - } else { - global.race.modified.nr++; - } - if (t === "forager") { - delete global.race.inactiveTraits["herbivore"]; - delete global.race.inactiveTraits["carnivore"]; - } - cleanRemoveTrait(t, rank); - genetics(); - drawTech(); - drawCity(); - let count = 0; - Object.keys(global.race).forEach(function(trait) { - if (traits[trait] && (traits[trait].type == "major" || traits[trait].type == "genus") && trait !== "evil") { - count++; - } - }); - if (count === 0) { - unlockFeat("blank_slate"); - } - } - }, - gain(t) { - if (["hellspawn"].includes(global.race.species)) { - return; - } else if (["sludge", "ultra_sludge"].includes(global.race.species) && global.race["modified"]) { - return; - } - let cost = addCost(t, false); - let res = global.race.universe === "antimatter" ? "AntiPlasmid" : "Plasmid"; - if (global.prestige[res].count >= cost) { - global.prestige[res].count -= cost; - global.race[t] = 1; - if (!global.race.hasOwnProperty("modified")) { - global.race["modified"] = { - t: 0, - nr: 0, - na: 0, - pr: 0, - pa: 0 - }; - } - global.race.modified.t++; - if (traits[t].val >= 0) { - global.race.modified.pa++; - } else { - global.race.modified.na++; - } - cleanAddTrait(t); - if (offspec_traits.includes(t)) { - setTraitRank(t, { down: true }); - } - genetics(); - drawTech(); - drawCity(); - combineTraits(); - } - }, - geneCost(t) { - return mGeneCost(t); - }, - phageCost(t) { - return mPhageCost(t); - }, - traitEffect(t) { - return loc(`trait_${t}_effect`); - }, - removeCost(t) { - return rmCost(t, true); - }, - addCost(t) { - return addCost(t, true); - }, - genePurchasable(t) { - let cost = fibonacci(global.race.minor[t] ? global.race.minor[t] + 4 : 4); - if (t === "mastery") { - cost *= 5; - } - return global.resource.Genes.amount >= cost; - }, - phagePurchasable(t) { - let cost = fibonacci(global.genes.minor[t] ? global.genes.minor[t] + 4 : 4); - if (t === "mastery") { - cost *= 2; - } - return global.prestige.Phage.count >= cost; - } - } - }); - minor_list.forEach(function(t) { - popover( - `popGenetrait${t}`, - function() { - return mGeneCost(t); - }, - { - elm: `#geneticBreakdown .t-${t} .gbuy`, - classes: `has-background-light has-text-dark` - } - ); - if (global.prestige.Phage.count > 0) { - popover( - `popGenetrait${t}`, - function() { - return mPhageCost(t); - }, - { - elm: `#geneticBreakdown .t-${t} .pbuy`, - classes: `has-background-light has-text-dark` - } - ); - } - popover( - `popGenetrait${t}`, - function() { - if (global.stats.feat["novice"] && global.stats.achieve["apocalypse"] && global.stats.achieve.apocalypse.l > 0) { - return `
${traitSkin("desc", t)}
${loc(`trait_${t}_effect`)}
`; - } else { - return traitSkin("desc", t); - } - }, - { - elm: `#geneticBreakdown .t-${t} .name`, - classes: `has-background-light has-text-dark` - } - ); - }); - remove_list.forEach(function(t) { - popover( - `popRemoveBkdwn${t}`, - function() { - return rmCost(t, true); - }, - { - elm: `#geneticBreakdown .remove${t}`, - classes: `has-background-light has-text-dark` - } - ); - let id = `raceTrait${t}`; - let desc = $(`
`); - getTraitDesc(desc, t, { trank: traitRank(t) }); - popover(id, desc, { wide: true, classes: "w30" }); - }); - null_list.forEach(function(t) { - let id = `raceTrait${t}`; - let desc = $(`
`); - getTraitDesc(desc, t, { trank: traitRank(t) }); - popover(id, desc, { elm: `#geneticBreakdown .trait${t}`, wide: true, classes: "w30" }); - }); - trait_list.forEach(function(t) { - popover( - `popAddBkdwn${t}`, - function() { - return addCost(t, true); - }, - { - elm: `#geneticBreakdown .add${t}`, - classes: `has-background-light has-text-dark` - } - ); - let id = `raceTrait${t}`; - let desc = $(`
`); - getTraitDesc(desc, t, { trank: offspec_traits.includes(t) ? 0.5 : 1 }); - popover(id, desc, { wide: true, classes: "w30" }); - }); - dragGeneticsList(); - } - } - function sequenceLabs() { - let labs = global.race["cataclysm"] || global.race["orbit_decayed"] ? support_on["exotic_lab"] : global.race["warlord"] ? p_on["twisted_lab"] : p_on["biolab"]; - if (global.tech["isolation"]) { - labs = support_on["infectious_disease_lab"] * 5; - } - if (global.race["lone_survivor"]) { - labs += 2; - } - if (labs > 0 && global.city.ptrait.includes("toxic")) { - labs += planetTraits.toxic.vars()[0]; - } - if (labs > 0 && global.race["elemental"] && traits.elemental.vars()[0] === "frost") { - labs *= 1 + highPopAdjust(global.resource[global.race.species].amount * traits.elemental.vars()[4] / 100); - } - return Math.round(labs); - } - function bindTrait(breakdown2, trait) { - let m_trait = $(`
`); - let gene = $(`

${trait}

${global.resource.Genes.name} (${global.race.minor[trait] || 0})`); - m_trait.append(gene); - if (global.prestige.Phage.count > 0) { - let phage = $(`${loc("resource_Phage_name")} (${global.genes.minor[trait] || 0})`); - m_trait.append(phage); - } - let total = global.race[trait] > 1 ? `(${global.race[trait]}) ` : ""; - m_trait.append(`${total}${traitSkin("name", trait)}`); - breakdown2.append(m_trait); - } - function crispr() { - if (global.tech["genetics"] && global.tech["genetics"] > 3 || global["sim"]) { - clearElement($("#arpaCrispr")); - $("#arpaCrispr").append(`
${loc("arpa_crispr_desc")}
`); - $("#arpaCrispr").append('
'); - drawGenes(); - } - } - function blood() { - if (global.tech["b_stone"] && global.tech["b_stone"] >= 2) { - clearElement($("#arpaBlood")); - $("#arpaBlood").append(`
${loc("arpa_blood_desc")}
`); - $("#arpaBlood").append('
'); - drawBlood(); - } - } - function addProject(parent, project) { - if (checkRequirements(project)) { - if (!global.arpa[project]) { - global.arpa[project] = { - complete: 0, - rank: 0 - }; - } - if (arpaProjects[project]["rank"] && global.arpa[project].rank >= arpaProjects[project].rank) { - return; - } - let current = $(`
`); - parent.append(current); - let title = typeof arpaProjects[project].title === "string" ? arpaProjects[project].title : arpaProjects[project].title(); - let head = $(`
${title}{{ projectName() }} description{{ level(rank) }}
`); - current.append(head); - let progress = $(`
{{ complete }}%
`); - head.append(progress); - let buy = $('
'); - current.append(buy); - buy.append($(``)); - buy.append($(``)); - buy.append($(``)); - buy.append($(``)); - buy.append($(``)); - vBind({ - el: `#arpa${project}`, - data: global.arpa[project], - methods: { - loc, - queue(pro) { - if (global.tech["queue"]) { - let keyMult = keyMultiplier(); - for (let i = 0; i < keyMult; i++) { - let arpaId = `arpa${pro}`; - let used = 0; - let buid_max = arpaProjects[pro]["queue_complete"] ? arpaProjects[pro].queue_complete() : Number.MAX_SAFE_INTEGER; - for (var j = 0; j < global.queue.queue.length; j++) { - used += Math.ceil(global.queue.queue[j].q / global.queue.queue[j].qs); - if (global.queue.queue[j].id === arpaId) { - buid_max -= global.queue.queue[j].q; - } - } - if (used < global.queue.max && buid_max > 0) { - if (global.settings.q_merge !== "merge_never" && global.queue.queue.length > 0 && global.queue.queue[global.queue.queue.length - 1].id === arpaId) { - global.queue.queue[global.queue.queue.length - 1].q++; - } else { - let title2 = typeof arpaProjects[pro].title === "string" ? arpaProjects[pro].title : arpaProjects[pro].title(); - global.queue.queue.push({ id: arpaId, action: "arpa", type: pro, label: title2, cna: false, time: 0, q: 1, qs: 1, t_max: 0 }); - } - buildQueue(); - } else { - break; - } - } - } - }, - build(pro, num) { - buildArpa(pro, num, true); - }, - srDescAndEffect() { - let desc = typeof arpaProjects[project].desc === "string" ? arpaProjects[project].desc : arpaProjects[project].desc(); - let effect = arpaProjects[project].effect(); - return srSpeak(`${desc} -${effect}`); - }, - projectName() { - return typeof arpaProjects[project].title === "string" ? arpaProjects[project].title : arpaProjects[project].title(); - }, - arpaProjectSRCosts(id, project2) { - let inc = id === "100" ? 100 - global.arpa[project2].complete : id; - var cost = `Construct ${inc}%. Costs:`; - var costs = arpaAdjustCosts(arpaProjects[project2].cost); - Object.keys(costs).forEach(function(res) { - var res_cost = +(costs[res]() * (inc / 100)).toFixed(0); - if (res_cost > 0) { - var label = res === "Money" ? "$" : global.resource[res].name + ": "; - var afford = global.resource[res].amount >= res_cost ? "" : ` ${loc("insufficient")} ${global.resource[res].name}.`; - cost = cost + ` ${label} ${sizeApproximation(res_cost, 2)}.${afford}`; - } - }); - return cost; - }, - remain(val) { - return 100 - val; - }, - level(num) { - return loc("arpa_level", [num]); - } - } - }); - popover( - `popArpa${project}`, - function() { - return arpaProjects[project].desc; - }, - { - elm: `#arpa${project} .head .desc`, - classes: `has-background-light has-text-dark` - } - ); - popover( - `popArpa${project}`, - function() { - return arpaProjects[project].effect(); - }, - { - elm: `#arpa${project} .head .rank`, - classes: `has-background-light has-text-dark` - } - ); - let classes = [1, 10, 25, 100]; - for (let i = 0; i < classes.length; i++) { - let id = classes[i]; - popover( - `popArpa${project}${id}`, - function() { - return arpaProjectCosts(id, project); - }, - { - elm: `#arpa${project} .buy .x${id}`, - classes: `has-background-light has-text-dark` - } - ); - } - } - } - function buildArpa(pro, num, update, queue) { - let completed = false; - if (num === 100) { - num = 100 - global.arpa[pro].complete; - } - for (let i = 0; i < num; i++) { - if (payArpaCosts(arpaProjects[pro].cost)) { - global.arpa[pro].complete++; - if (global.arpa[pro].complete >= 100) { - global.arpa[pro].rank++; - global.arpa[pro].complete = 0; - global.tech[arpaProjects[pro].grant] = global.arpa[pro].rank; - completed = true; - if (pro === "monument") { - global.arpa["m_type"] = pick_monument(); - $(`#arpa${pro} .head .desc`).html(arpaProjects[pro].title()); - updateQueueNames(false, ["arpamonument"]); - } - if (pro === "roid_eject") { - $(`#arpa${pro} .head .desc`).html(arpaProjects[pro].title()); - updateQueueNames(false, ["arparoid_eject"]); - } - if (pro === "launch_facility") { - global.settings.showSpace = true; - global.tech["space"] = 1; - clearPopper("popArpalaunch_facility"); - [1, 10, 25, 100].forEach(function(amount) { - clearPopper(`popArpalaunch_facility${amount}`); - }); - if (!queue) { - removeFromQueue(["arpalaunch_facility"]); - } - physics(); - renderSpace(); - messageQueue(loc("arpa_projects_launch_facility_msg"), "info", false, ["progress"]); - } - if (global.race["inflation"]) { - global.race.inflation += 10; - } - drawTech(); - } - } - } - if (update) { - let amounts = [1, 10, 25, 100]; - let popper = $("#popper"); - let pid = popper.data("id"); - for (let i = 0; i < amounts.length; i++) { - if (pid === `popArpa${pro}${amounts[i]}`) { - clearElement(popper); - popper.append(arpaProjectCosts(amounts[i], pro)); - break; - } - } - } - return completed; - } - function arpaProjectCosts(id, project) { - let inc = id === 100 ? 100 - global.arpa[project].complete : id; - var cost = $("
"); - var costs = arpaAdjustCosts(arpaProjects[project].cost); - let tc = arpaTimeCheck(arpaProjects[project], inc / 100, false, true); - Object.keys(costs).forEach(function(res) { - var res_cost = +(costs[res]() * (inc / 100)).toFixed(0); - if (res_cost > 0) { - var label = res === "Money" ? "$" : global.resource[res].name + ": "; - var color = global.resource[res].amount >= res_cost ? "has-text-dark" : res === tc.r ? "has-text-danger" : "has-text-alert"; - cost.append($(`
${label}${sizeApproximation(res_cost, 2)}
`)); - } - }); - return cost; - } - function updateTrades() { - Object.keys(global.resource).forEach(function(res) { - vBind({ el: `#market-${res}` }, "update"); - }); - vBind({ el: `#galaxyTrade` }, "update"); - } - - // src/resets.js - function warhead() { - if (!global.civic.mad.armed && !global.race["cataclysm"]) { - if (!global["sim"]) { - save.setItem("evolveBak", LZString.compressToUTF16(JSON.stringify(global))); - } - clearSavedMessages(); - tagEvent("reset", { - "end": "mad" - }); - let god = global.race.species; - let old_god = global.race.gods; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let geo = global.city.geology; - let gains = calcPrestige("mad"); - global.stats.mad++; - updateResetStats(); - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - unlockAchieve(`apocalypse`); - unlockAchieve(`squished`, true); - unlockAchieve(`extinct_${god}`); - if (global.civic.govern.type === "anarchy") { - unlockAchieve(`anarchist`); - } - if (global.city.biome === "hellscape" && races[global.race.species].type !== "demonic") { - unlockFeat("take_no_advice"); - } - if (global.race["truepath"]) { - unlockAchieve("ashanddust"); - } - checkAchievements(); - grandDeathTour("md"); - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - rapid_mutation: 1, - ancient_ruins: 1, - universe: global.race.universe, - seeded: false, - ascended: global.race.hasOwnProperty("ascended") ? global.race.ascended : false - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - if (srace) { - global.race["srace"] = srace; - } - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: geo - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - } - function bioseed() { - if (!global["sim"]) { - save.setItem("evolveBak", LZString.compressToUTF16(JSON.stringify(global))); - } - clearSavedMessages(); - tagEvent("reset", { - "end": "bioseed" - }); - let god = global.race.species; - let old_god = global.race.gods; - let genus = races[god].type === "hybrid" ? global.race.maintype : races[god].type; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let gains = calcPrestige("bioseed"); - global.stats.bioseed++; - updateResetStats(); - global.prestige.Phage.count += gains.phage; - global.stats.phage += gains.phage; - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - unlockAchieve(`seeder`); - unlockAchieve(`biome_${biome}`); - atmo.forEach(function(a) { - if (planetTraits.hasOwnProperty(a)) { - unlockAchieve(`atmo_${a}`); - } - }); - unlockAchieve(`genus_${genus}`); - if (global.race["gravity_well"]) { - unlockAchieve(`escape_velocity`); - } - if (global.race["truepath"]) { - unlockAchieve(`exodus`); - } - if (atmo.includes("dense") && global.race.universe === "heavy") { - unlockAchieve(`double_density`); - } - if (global.race["junker"] && global.race.species === "junker") { - unlockFeat("organ_harvester"); - } - if (global.city.biome === "hellscape" && races[global.race.species].type !== "demonic") { - unlockFeat("ill_advised"); - } - if (typeof global.tech["world_control"] === "undefined") { - unlockAchieve(`cult_of_personality`); - } - if (global.race["cataclysm"]) { - unlockAchieve("iron_will", false, 5); - } - if (global.race["gross_enabled"] && global.race["ooze"] && global.race.species !== "custom" && global.race.species !== "sludge" && global.race.species != "hybrid") { - unlockAchieve(`gross`); - } - let good_rocks = 0; - let bad_rocks = 0; - Object.keys(global.city.geology).forEach(function(g) { - if (global.city.geology[g] > 0) { - good_rocks++; - } else if (global.city.geology[g] < 0) { - bad_rocks++; - } - }); - if (good_rocks >= 4) { - unlockAchieve("miners_dream"); - } - if (bad_rocks >= 3) { - unlockFeat("rocky_road"); - } - if (global.race["steelen"] && global.race["steelen"] >= 1) { - unlockAchieve(`steelen`); - } - switch (global.race.universe) { - case "micro": - if (global.race["small"] || global.race["compact"]) { - unlockAchieve(`macro`, true); - } else { - unlockAchieve(`marble`, true); - } - break; - default: - break; - } - checkAchievements(); - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - let probes = global.starDock.probes.count + 1; - let gecks = global.starDock.hasOwnProperty("geck") ? global.starDock.geck.count : 0; - if (global.stats.achieve["explorer"]) { - probes += global.stats.achieve["explorer"].l; - } - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - universe: global.race.universe, - seeded: true, - probes, - geck: gecks, - seed: Math.floor(seededRandom(1e4)), - ascended: false - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - if (srace) { - global.race["srace"] = srace; - } - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: false - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - function cataclysm_end() { - if (global.city.ptrait.includes("unstable") && global.tech["quaked"]) { - if (webWorker.w) { - webWorker.w.terminate(); - } - if (!global["sim"]) { - save.setItem("evolveBak", LZString.compressToUTF16(JSON.stringify(global))); - } - tagEvent("reset", { - "end": "cataclysm" - }); - clearSavedMessages(); - let gains = calcPrestige("cataclysm"); - global.stats.cataclysm++; - updateResetStats(); - global.prestige.Phage.count += gains.phage; - global.stats.phage += gains.phage; - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - unlockAchieve(`squished`, true); - unlockAchieve(`extinct_${global.race.species}`); - if (global.city.biome === "hellscape" && races[global.race.species].type !== "demonic") { - unlockFeat("take_no_advice"); - } - checkAchievements(); - unlockAchieve("shaken"); - if (global.race["cataclysm"]) { - unlockAchieve("failed_history"); - } - grandDeathTour("ct"); - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - let mainType = global.race.hasOwnProperty("maintype") ? global.race.maintype : false; - global["race"] = { - species: global.race.species, - gods: global.race.gods, - old_gods: global.race.old_gods, - universe: global.race.universe, - seeded: false, - ascended: global.race.hasOwnProperty("ascended") ? global.race.ascended : false - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - if (srace) { - global.race["srace"] = srace; - } - if (mainType) { - global.race["maintype"] = mainType; - } - resetCommon({ - orbit: global.city.calendar.orbit, - biome: global.city.biome, - ptrait: global.city.ptrait, - geology: global.city.geology - }); - if (global.race.universe === "antimatter") { - global.race["weak_mastery"] = 1; - } else { - global.race["no_plasmid"] = 1; - } - let genes = ["crispr", "trade", "craft"]; - for (let i = 0; i < genes.length; i++) { - global.race[`no_${genes[i]}`] = 1; - } - global.race["start_cataclysm"] = 1; - global.race["cataclysm"] = 1; - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - } - function big_bang() { - if (!global["sim"]) { - save.setItem("evolveBak", LZString.compressToUTF16(JSON.stringify(global))); - } - clearSavedMessages(); - tagEvent("reset", { - "end": "blackhole" - }); - unlockAchieve(`extinct_${global.race.species}`); - switch (global.race.universe) { - case "heavy": - unlockAchieve(`heavy`); - break; - case "antimatter": - unlockAchieve(`canceled`); - break; - case "evil": - unlockAchieve(`eviltwin`); - break; - case "micro": - unlockAchieve(`microbang`, true); - break; - case "standard": - unlockAchieve(`whitehole`); - break; - default: - break; - } - if (global.space.hasOwnProperty("spaceport") && global.space.spaceport.count === 0) { - unlockAchieve(`red_dead`); - } - unlockAchieve(`squished`, true); - if (global.race.universe === "evil" && races[global.race.species].type === "angelic") { - unlockFeat("nephilim"); - } - if (global.race["junker"] && global.race.species === "junker") { - unlockFeat("the_misery"); - } - if (global.race["decay"]) { - unlockAchieve(`dissipated`); - } - if (global.race["steelen"]) { - unlockFeat("steelem"); - } - grandDeathTour("bh"); - let god = global.race.species; - let old_god = global.race.gods; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let gains = calcPrestige("bigbang"); - checkAchievements(); - global.stats.blackhole++; - updateResetStats(); - global.prestige.Phage.count += gains.phage; - global.stats.phage += gains.phage; - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - global.prestige.Dark.count = +(global.prestige.Dark.count + gains.dark).toFixed(3); - global.stats.dark = +(global.stats.dark + gains.dark).toFixed(3); - global.stats.universes++; - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - universe: "bigbang", - seeded: true, - bigbang: true, - probes: 4, - //geck: gecks, - seed: Math.floor(seededRandom(1e4)), - ascended: false - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - if (srace) { - global.race["srace"] = srace; - } - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: false - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - function vacuumCollapse() { - if (global.tech.syphon >= 80 && global.race.universe === "magic") { - global.tech.syphon = 79; - global.arpa.syphon.rank = 79; - global.arpa.syphon.complete = 99; - global.queue.queue = []; - global.stats["current"] = Date.now(); - if (!global["sim"]) { - save.setItem("evolveBak", LZString.compressToUTF16(JSON.stringify(global))); - } - clearSavedMessages(); - tagEvent("reset", { - "end": "vacuum" - }); - unlockAchieve(`extinct_${global.race.species}`); - unlockAchieve(`pw_apocalypse`); - if (global.space.hasOwnProperty("spaceport") && global.space.spaceport.count === 0) { - unlockAchieve(`red_dead`); - } - if (!global.race["modified"] && global.race.species === "balorg") { - unlockAchieve("pass"); - } - if (global.race["junker"] && global.race.species === "junker") { - unlockFeat("the_misery"); - } - if (global.race["decay"]) { - unlockAchieve(`dissipated`); - } - if (global.race["steelen"]) { - unlockFeat("steelem"); - } - grandDeathTour("vc"); - let god = global.race.species; - let old_god = global.race.gods; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let gains = calcPrestige("vacuum"); - checkAchievements(); - global.stats.blackhole++; - updateResetStats(); - global.prestige.Phage.count += gains.phage; - global.stats.phage += gains.phage; - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - global.prestige.Dark.count = +(global.prestige.Dark.count + gains.dark).toFixed(3); - global.stats.dark = +(global.stats.dark + gains.dark).toFixed(3); - global.stats.universes++; - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - universe: "bigbang", - seeded: true, - bigbang: true, - probes: 4, - //geck: gecks, - seed: Math.floor(seededRandom(1e4)), - ascended: false - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - if (srace) { - global.race["srace"] = srace; - } - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: false - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - } - function ascend() { - clearSavedMessages(); - tagEvent("reset", { - "end": "ascend" - }); - let god = global.race.species; - let old_god = global.race.gods; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let geo = global.city.geology; - let gains = calcPrestige("ascend"); - global.stats.ascend++; - updateResetStats(); - global.prestige.Phage.count += gains.phage; - global.stats.phage += gains.phage; - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - global.prestige.Harmony.count = parseFloat((global.prestige.Harmony.count + gains.harmony).toFixed(2)); - global.stats.harmony = parseFloat((global.stats.harmony + gains.harmony).toFixed(2)); - atmo.forEach(function(a) { - if (planetTraits.hasOwnProperty(a)) { - unlockAchieve(`atmo_${a}`); - } - }); - if (typeof global.tech["world_control"] === "undefined") { - unlockAchieve(`cult_of_personality`); - } - let good_rocks = 0; - Object.keys(global.city.geology).forEach(function(g) { - if (global.city.geology[g] > 0) { - good_rocks++; - } - }); - if (good_rocks >= 4) { - unlockAchieve("miners_dream"); - } - if (!global.galaxy.hasOwnProperty("dreadnought") || global.galaxy.dreadnought.count === 0) { - unlockAchieve(`dreaded`); - } - if (!global.race["modified"] && (global.race.species === "synth" || global.race.species === "nano") && global.race["emfield"]) { - unlockFeat("digital_ascension"); - } - if (global.race["gross_enabled"] && global.race["ooze"] && global.race.species !== "custom" && global.race.species !== "sludge" && global.race.species != "hybrid") { - unlockAchieve(`gross`); - } - checkAchievements(); - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - universe: global.race.universe, - seeded: false, - seed: Math.floor(seededRandom(1e4)), - ascended: true - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - if (srace) { - global.race["srace"] = srace; - } - Object.keys(geo).forEach(function(g) { - geo[g] = +(geo[g] + 0.02).toFixed(2); - }); - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: geo - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - function descension() { - if (webWorker.w) { - webWorker.w.terminate(); - } - if (!global["sim"]) { - save.setItem("evolveBak", LZString.compressToUTF16(JSON.stringify(global))); - } - clearSavedMessages(); - tagEvent("reset", { - "end": "descension" - }); - unlockAchieve(`squished`, true); - unlockAchieve(`extinct_${global.race.species}`); - if (global.race["witch_hunter"] && global.tech["forbidden"] >= 5 && global.race.universe === "magic") { - unlockAchieve(`nightmare`); - } else { - unlockAchieve(`corrupted`); - } - if (global.race["fasting"] && global.tech["dish_reset"]) { - let affix2 = universeAffix(); - global.stats["endless_hunger"].b5[affix2] = true; - if (affix2 !== "m" && affix2 !== "l") { - global.stats["endless_hunger"].b5.l = true; - } - if (global.stats.starved === 0) { - unlockFeat("immortal"); - } - } - if (races[global.race.species].type === "angelic") { - unlockFeat("twisted"); - } - if (global.race["junker"] && global.race.species === "junker") { - unlockFeat("the_misery"); - } - if (!global.race["modified"] && global.race["junker"] && global.race.species === "junker") { - unlockFeat(`garbage_pie`); - } - if (global.race["cataclysm"]) { - unlockFeat(`finish_line`); - } - if (global.race["ooze"] && global.race.species === "sludge") { - unlockFeat("slime_lord"); - } - grandDeathTour("di"); - let gains = calcPrestige("descend"); - global.prestige.Artifact.count += gains.artifact; - global.stats.artifact += gains.artifact; - let affix = universeAffix(); - if (global.stats.spire.hasOwnProperty(affix)) { - if (global.stats.spire[affix].hasOwnProperty("lord")) { - global.stats.spire[affix].lord++; - } else { - global.stats.spire[affix]["lord"] = 1; - } - if (global.tech["dl_reset"]) { - global.stats.spire[affix]["dlstr"] = 0; - } else { - if (global.stats.spire[affix].hasOwnProperty("dlstr")) { - global.stats.spire[affix].dlstr++; - } else { - global.stats.spire[affix]["dlstr"] = 1; - } - } - } - let god = global.race.species; - let old_god = global.race.gods; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let geo = global.city.geology; - global.stats.descend++; - updateResetStats(); - checkAchievements(); - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - universe: global.race.universe, - seeded: false, - seed: Math.floor(seededRandom(1e4)), - corruption: 5, - ascended: global.race.hasOwnProperty("ascended") ? global.race.ascended : false - }; - if (srace) { - global.race["srace"] = srace; - } - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: geo - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - function apotheosis() { - clearSavedMessages(); - tagEvent("reset", { - "end": "apotheosis" - }); - let god = global.race.species; - let old_god = global.race.gods; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let geo = global.city.geology; - let gains = calcPrestige("apotheosis"); - global.stats.apotheosis++; - updateResetStats(); - global.prestige.Supercoiled.count += gains.supercoiled; - global.stats.supercoiled += gains.supercoiled; - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - if (global.race["warlord"]) { - global.prestige.Artifact.count += gains.artifact; - global.stats.artifact += gains.artifact; - } - atmo.forEach(function(a) { - if (planetTraits.hasOwnProperty(a)) { - unlockAchieve(`atmo_${a}`); - } - }); - if (typeof global.tech["world_control"] === "undefined") { - unlockAchieve(`cult_of_personality`); - } - let good_rocks = 0; - Object.keys(global.city.geology).forEach(function(g) { - if (global.city.geology[g] > 0) { - good_rocks++; - } - }); - if (good_rocks >= 4) { - unlockAchieve("miners_dream"); - } - if (global.race["gross_enabled"] && global.race["ooze"] && global.race.species !== "custom" && global.race.species !== "sludge" && global.race.species != "hybrid") { - unlockAchieve(`gross`); - } - checkAchievements(); - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - universe: global.race.universe, - seeded: false, - seed: Math.floor(seededRandom(1e4)), - ascended: true - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - if (srace) { - global.race["srace"] = srace; - } - Object.keys(geo).forEach(function(g) { - geo[g] = +(geo[g] + 0.02).toFixed(2); - }); - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: geo - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - function terraform(planet) { - clearSavedMessages(); - tagEvent("reset", { - "end": "terraform" - }); - let god = global.race.species; - let old_god = global.race.gods; - let orbit = global.city.calendar.orbit; - let biome = planet.biome; - let atmo = planet.traitlist; - let geo = planet.geology; - let gains = calcPrestige("terraform"); - global.stats.terraform++; - updateResetStats(); - global.prestige.Phage.count += gains.phage; - global.stats.phage += gains.phage; - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - global.prestige.Harmony.count = parseFloat((global.prestige.Harmony.count + gains.harmony).toFixed(2)); - global.stats.harmony = parseFloat((global.stats.harmony + gains.harmony).toFixed(2)); - atmo.forEach(function(a) { - if (planetTraits.hasOwnProperty(a)) { - unlockAchieve(`atmo_${a}`); - } - }); - if (typeof global.tech["world_control"] === "undefined") { - unlockAchieve(`cult_of_personality`); - } - let good_rocks = 0; - Object.keys(global.city.geology).forEach(function(g) { - if (global.city.geology[g] > 0) { - good_rocks++; - } - }); - if (good_rocks >= 4) { - unlockAchieve("miners_dream"); - } - if (global.race["gross_enabled"] && global.race["ooze"] && global.race.species !== "custom" && global.race.species !== "sludge" && global.race.species != "hybrid") { - unlockAchieve(`gross`); - } - checkAchievements(); - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - universe: global.race.universe, - seeded: false, - seed: Math.floor(seededRandom(1e4)), - ascended: global.race.hasOwnProperty("ascended") ? global.race.ascended : false, - rejuvenated: true - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - if (srace) { - global.race["srace"] = srace; - } - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: geo - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - function aiApocalypse() { - if (!global["sim"]) { - save.setItem("evolveBak", LZString.compressToUTF16(JSON.stringify(global))); - } - clearSavedMessages(); - tagEvent("reset", { - "end": "ai apocalypse" - }); - unlockAchieve(`extinct_${global.race.species}`); - unlockAchieve(`obsolete`); - unlockAchieve(`squished`, true); - if (global.race["junker"] && global.race.species === "junker") { - unlockFeat("the_misery"); - } - grandDeathTour("ai"); - let god = global.race.species; - let old_god = global.race.gods; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let geo = global.city.geology; - let gains = calcPrestige("ai"); - checkAchievements(); - global.stats.aiappoc++; - updateResetStats(); - global.prestige.Phage.count += gains.phage; - global.stats.phage += gains.phage; - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - global.prestige.AICore.count += gains.cores; - global.stats.cores += gains.cores; - let srace = races[god].type !== "synthetic" && !["junker", "sludge", "ultra_sludge"].includes(god) ? god : global.race.hasOwnProperty("srace") ? global.race.srace : god; - global.stats.synth[god] = true; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - srace, - universe: global.race.universe, - seeded: false, - seed: Math.floor(seededRandom(1e4)), - ascended: global.race.hasOwnProperty("ascended") ? global.race.ascended : false - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: geo - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - function matrix() { - if (webWorker.w) { - webWorker.w.terminate(); - } - if (!global["sim"]) { - save.setItem("evolveBak", LZString.compressToUTF16(JSON.stringify(global))); - } - clearSavedMessages(); - tagEvent("reset", { - "end": "matrix" - }); - let god = global.race.species; - let old_god = global.race.gods; - let genus = races[god].type === "hybrid" ? global.race.maintype : races[god].type; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let geo = global.city.geology; - let gains = calcPrestige("matrix"); - unlockAchieve(`biome_${biome}`); - atmo.forEach(function(a) { - if (planetTraits.hasOwnProperty(a)) { - unlockAchieve(`atmo_${a}`); - } - }); - unlockAchieve(`genus_${genus}`); - if (global.race["gross_enabled"] && global.race["ooze"] && global.race.species !== "custom" && global.race.species !== "sludge" && global.race.species != "hybrid") { - unlockAchieve(`gross`); - } - unlockAchieve(`bluepill`); - trackWomling(); - checkAchievements(); - global.stats.matrix++; - updateResetStats(); - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - global.prestige.Phage.count += gains.phage; - global.stats.phage += gains.phage; - global.prestige.AICore.count += gains.cores; - global.stats.cores += gains.cores; - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - universe: global.race.universe, - seeded: false, - seed: Math.floor(seededRandom(1e4)), - ascended: global.race.hasOwnProperty("ascended") ? global.race.ascended : false - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - if (srace) { - global.race["srace"] = srace; - } - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: geo - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - function retirement() { - if (webWorker.w) { - webWorker.w.terminate(); - } - if (!global["sim"]) { - save.setItem("evolveBak", LZString.compressToUTF16(JSON.stringify(global))); - } - clearSavedMessages(); - tagEvent("reset", { - "end": "retired" - }); - let god = global.race.species; - let old_god = global.race.gods; - let genus = races[god].type === "hybrid" ? global.race.maintype : races[god].type; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let geo = global.city.geology; - let gains = calcPrestige("retired"); - unlockAchieve(`biome_${biome}`); - atmo.forEach(function(a) { - if (planetTraits.hasOwnProperty(a)) { - unlockAchieve(`atmo_${a}`); - } - }); - unlockAchieve(`genus_${genus}`); - if (global.race["gross_enabled"] && global.race["ooze"] && global.race.species !== "custom" && global.race.species !== "sludge" && global.race.species != "hybrid") { - unlockAchieve(`gross`); - } - unlockAchieve(`retired`); - trackWomling(); - checkAchievements(); - global.stats.retire++; - updateResetStats(); - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - global.prestige.Phage.count += gains.phage; - global.stats.phage += gains.phage; - global.prestige.AICore.count += gains.cores; - global.stats.cores += gains.cores; - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - universe: global.race.universe, - seeded: false, - seed: Math.floor(seededRandom(1e4)), - ascended: global.race.hasOwnProperty("ascended") ? global.race.ascended : false - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - if (srace) { - global.race["srace"] = srace; - } - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: geo - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - function gardenOfEden() { - if (webWorker.w) { - webWorker.w.terminate(); - } - if (!global["sim"]) { - save.setItem("evolveBak", LZString.compressToUTF16(JSON.stringify(global))); - } - clearSavedMessages(); - tagEvent("reset", { - "end": "eden" - }); - let god = global.race.species; - let old_god = global.race.gods; - let genus = races[god].type === "hybrid" ? global.race.maintype : races[god].type; - let orbit = global.city.calendar.orbit; - let biome = global.city.biome; - let atmo = global.city.ptrait; - let geo = global.city.geology; - let gains = calcPrestige("eden"); - unlockAchieve(`biome_${biome}`); - atmo.forEach(function(a) { - if (planetTraits.hasOwnProperty(a)) { - unlockAchieve(`atmo_${a}`); - } - }); - unlockAchieve(`genus_${genus}`); - if (global.race["gross_enabled"] && global.race["ooze"] && global.race.species !== "custom" && global.race.species !== "sludge" && global.race.species != "hybrid") { - unlockAchieve(`gross`); - } - unlockAchieve(`adam_eve`); - trackWomling(); - checkAchievements(); - global.stats.eden++; - updateResetStats(); - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += gains.plasmid; - global.stats.antiplasmid += gains.plasmid; - } else { - global.prestige.Plasmid.count += gains.plasmid; - global.stats.plasmid += gains.plasmid; - } - global.stats.pdebt = gains.pdebt; - global.prestige.Phage.count += gains.phage; - global.stats.phage += gains.phage; - global.prestige.AICore.count += gains.cores; - global.stats.cores += gains.cores; - let srace = global.race.hasOwnProperty("srace") ? global.race.srace : false; - let corruption = global.race.hasOwnProperty("corruption") && global.race.corruption > 1 ? global.race.corruption - 1 : 0; - global["race"] = { - species: "protoplasm", - gods: god, - old_gods: old_god, - universe: global.race.universe, - seeded: false, - seed: Math.floor(seededRandom(1e4)), - ascended: global.race.hasOwnProperty("ascended") ? global.race.ascended : false - }; - if (corruption > 0) { - global.race["corruption"] = corruption; - } - if (srace) { - global.race["srace"] = srace; - } - resetCommon({ - orbit, - biome, - ptrait: atmo, - geology: geo - }); - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - window.location.reload(); - } - function resetCommon(args) { - global.city = { - calendar: { - day: 0, - year: 0, - weather: 2, - temp: 1, - moon: 0, - wind: 0, - orbit: args.orbit - }, - biome: args.biome, - ptrait: args.ptrait - }; - if (args.geology) { - global.city["geology"] = args.geology; - } - global.tech = { theology: 1 }; - clearStates(); - global.new = true; - global.seed = Math.rand(0, 1e4); - } - function trackWomling() { - let uni = universeAffix(); - if (global.race["womling_friend"]) { - if (uni !== "m") { - global.stats.womling.friend.l++; - } - if (uni !== "l") { - if (!global.stats.womling.friend.hasOwnProperty(uni)) { - global.stats.womling.friend[uni] = 0; - } - global.stats.womling.friend[uni]++; - } - } else if (global.race["womling_lord"]) { - if (uni !== "m") { - global.stats.womling.lord.l++; - } - if (uni !== "l") { - if (!global.stats.womling.lord.hasOwnProperty(uni)) { - global.stats.womling.lord[uni] = 0; - } - global.stats.womling.lord[uni]++; - } - } else if (global.race["womling_god"]) { - if (uni !== "m") { - global.stats.womling.god.l++; - } - if (uni !== "l") { - if (!global.stats.womling.god.hasOwnProperty(uni)) { - global.stats.womling.god[uni] = 0; - } - global.stats.womling.god[uni]++; - } - } - if (global.stats.womling.friend.l > 0 && global.stats.womling.lord.l > 0 && global.stats.womling.god.l > 0) { - unlockAchieve("overlord", uni === "m" ? true : false, alevel(), "l"); - } - if (global.stats.womling.friend[uni] > 0 && global.stats.womling.lord[uni] > 0 && global.stats.womling.god[uni] > 0) { - unlockAchieve("overlord", uni === "m" ? true : false, alevel(), uni); - } - } - function grandDeathTour(type) { - if (global.race.species === "ultra_sludge") { - let rank = alevel(); - let uni = universeAffix(); - if (global.stats.death_tour[type][uni] < rank) { - global.stats.death_tour[type][uni] = rank; - } - let gdt_rank = 5; - Object.keys(global.stats.death_tour).forEach(function(k) { - let universe = 0; - Object.keys(global.stats.death_tour[k]).forEach(function(u) { - if (u !== "m" && global.stats.death_tour[k][u] > universe) { - universe = global.stats.death_tour[k][u]; - } - }); - if (gdt_rank > universe) { - gdt_rank = universe; - } - }); - if (gdt_rank > 0) { - unlockFeat("grand_death_tour", false, gdt_rank); - } - } - } - - // src/truepath.js - var outerTruth = { - spc_titan: { - info: { - name() { - return planetName().titan; - }, - desc() { - return loc("space_titan_info_desc", [planetName().titan, races[global.race.species].home]); - }, - support: "electrolysis", - zone: "outer", - syndicate() { - return global.tech["titan"] && global.tech.titan >= 3 && global.tech["enceladus"] && global.tech.enceladus >= 2 ? true : false; - }, - syndicate_cap() { - if (global.tech["triton"]) { - return global.tech.outer >= 4 ? 2e3 : 1e3; - } - return 600; - } - }, - titan_mission: { - id: "space-titan_mission", - title() { - return loc("space_mission_title", [planetName().titan]); - }, - desc() { - return loc("space_mission_desc", [planetName().titan]); - }, - reqs: { outer: 1 }, - grant: ["titan", 1], - path: ["truepath"], - queue_complete() { - return global.tech.titan >= 1 ? 0 : 1; - }, - cost: { - Helium_3(o, wiki) { - return +fuel_adjust(25e4, false, wiki).toFixed(0); - }, - Elerium() { - return 100; - } - }, - effect() { - return loc("space_titan_mission_effect", [planetName().titan]); - }, - action() { - if (payCosts($(this)[0])) { - messageQueue(loc("space_titan_mission_action", [planetName().titan, races[global.race.species].home]), "info", false, ["progress"]); - return true; - } - return false; - } - }, - titan_spaceport: { - id: "space-titan_spaceport", - title: loc("space_red_spaceport_title"), - desc: `
${loc("space_red_spaceport_desc")}
${loc("requires_power")}
`, - reqs: { titan: 1 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("titan_spaceport", offset, 25e5, 1.32); - }, - Lumber(offset) { - return spaceCostMultiplier("titan_spaceport", offset, 75e4, 1.32); - }, - Cement(offset) { - return spaceCostMultiplier("titan_spaceport", offset, 35e4, 1.32); - }, - Mythril(offset) { - return spaceCostMultiplier("titan_spaceport", offset, 1e4, 1.32); - } - }, - effect() { - let water = global.resource.Water.display ? `
${loc("plus_max_resource", [sizeApproximation(spatialReasoning(250)), global.resource.Water.name])}
` : ``; - let support = global.tech["enceladus"] && global.tech.enceladus >= 2 ? `
+${loc(`galaxy_alien2_support`, [$(this)[0].support(), planetName().enceladus])}
` : ``; - let storage = global.tech["titan"] && global.tech.titan >= 5 ? `
${loc(`space_titan_spaceport_storage`, [25])}
` : ``; - return `${support}${water}${storage}
${loc("minus_power", [$(this)[0].powered()])}
`; - }, - support() { - return 2; - }, - powered() { - return powerCostMod(10); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("titan_spaceport"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, support: 0, s_max: 0 }, - p: ["titan_spaceport", "space"] - }; - }, - post() { - if (global.tech["titan"] === 1) { - global.tech["titan"] = 2; - drawTech(); - } - } - }, - electrolysis: { - id: "space-electrolysis", - title: loc("space_electrolysis_title"), - desc() { - return `
${loc("space_electrolysis_title")}
${loc("space_electrolysis_req", [global.resource.Water.name])}
`; - }, - reqs: { titan: 3 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("electrolysis", offset, 1e6, 1.25); - }, - Copper(offset) { - return spaceCostMultiplier("electrolysis", offset, 185e3, 1.25); - }, - Steel(offset) { - return spaceCostMultiplier("electrolysis", offset, 22e4, 1.25); - }, - Polymer(offset) { - return spaceCostMultiplier("electrolysis", offset, 38e4, 1.25); - } - }, - effect(wiki) { - let support = `
+${loc(`galaxy_alien2_support`, [$(this)[0].support(wiki), planetName().titan])}
`; - return `${support}
${loc("space_electrolysis_use", [$(this)[0].support_fuel().a, global.resource.Water.name, $(this)[0].powered()])}
`; - }, - support(wiki) { - return global.tech["titan_ai_core"] && global.tech.titan_ai_core >= 2 && (wiki ? global.space.ai_core2.on : p_on["ai_core2"]) ? 3 : 2; - }, - support_fuel() { - return { r: "Water", a: 35 }; - }, - powered() { - return powerCostMod(8); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("electrolysis"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, support: 0, s_max: 0 }, - p: ["electrolysis", "space"] - }; - }, - post() { - if (global.tech["titan"] === 3) { - global.tech["titan"] = 4; - drawTech(); - } - } - }, - hydrogen_plant: { - id: "space-hydrogen_plant", - title: loc("space_hydrogen_plant_title"), - desc() { - return `
${loc("space_hydrogen_plant_title")}
${loc("space_hydrogen_plant_req")}
`; - }, - reqs: { titan_power: 1 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("hydrogen_plant", offset, 15e5, 1.28); - }, - Iridium(offset) { - return spaceCostMultiplier("hydrogen_plant", offset, 292e3, 1.28); - }, - Stanene(offset) { - return spaceCostMultiplier("hydrogen_plant", offset, 599e3, 1.28); - }, - Cement(offset) { - return spaceCostMultiplier("hydrogen_plant", offset, 18e4, 1.28); - } - }, - effect() { - return `${loc("space_dwarf_reactor_effect1", [-$(this)[0].powered()])}, ${loc("space_hydrogen_plant_effect", [1, loc("space_electrolysis_title")])}`; - }, - support() { - return 2; - }, - powered() { - return powerModifier(-22); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("hydrogen_plant"); - if (global.space.electrolysis.on > global.space.hydrogen_plant.on) { - global.space.hydrogen_plant.on++; - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["hydrogen_plant", "space"] - }; - } - }, - titan_quarters: { - id: "space-titan_quarters", - title: loc("interstellar_habitat_title"), - desc() { - return `
${loc("interstellar_habitat_title")}
${loc("space_habitat_req", [planetName().titan, global.resource.Food.name, global.resource.Water.name])}
`; - }, - reqs: { titan: 4 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("titan_quarters", offset, 12e5, 1.28); - }, - Furs(offset) { - return spaceCostMultiplier("titan_quarters", offset, 85e3, 1.28); - }, - Plywood(offset) { - return spaceCostMultiplier("titan_quarters", offset, 1e5, 1.28); - }, - Horseshoe() { - return global.race["hooved"] ? 1 : 0; - } - }, - effect() { - let gain = jobScale(1); - return `
${loc("space_used_support", [planetName().titan])}
${loc("plus_max_resource", [jobScale(1), global.race["truepath"] ? loc("job_colonist_tp", [planetName().titan]) : loc("colonist")])}
${loc("plus_max_resource", [gain, loc("citizen")])}
${loc(`spend`, [$(this)[0].support_fuel()[0].a, global.resource[$(this)[0].support_fuel()[0].r].name])}
${loc(`spend`, [$(this)[0].support_fuel()[1].a, global.resource[$(this)[0].support_fuel()[1].r].name])}
`; - }, - s_type: "titan", - support() { - return -1; - }, - support_fuel() { - return [{ r: "Water", a: 12 }, { r: "Food", a: 500 }]; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("titan_quarters"); - global.civic.titan_colonist.display = true; - if (powerOnNewStruct($(this)[0])) { - global.resource[global.race.species].max += jobScale(1); - let hiredMax = jobScale(1); - global.civic.titan_colonist.max += hiredMax; - let hired = Math.min(hiredMax, global.civic[global.civic.d_job].workers); - global.civic[global.civic.d_job].workers -= hired; - global.civic.titan_colonist.workers += hired; - } - if (global.space.titan_quarters.count === 1) { - renderSpace(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["titan_quarters", "space"] - }; - }, - citizens() { - let gain = 1; - if (global.race["high_pop"]) { - gain *= traits.high_pop.vars()[0]; - } - return gain; - } - }, - titan_mine: { - id: "space-titan_mine", - title() { - return structName("mine"); - }, - desc() { - return `
${loc("space_red_mine_desc")}
${loc("space_support", [planetName().titan])}
`; - }, - reqs: { titan: 4 }, - condition() { - return global.space["titan_quarters"] && global.space.titan_quarters.count > 0 ? true : false; - }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("titan_mine", offset, 475e3, 1.28); - }, - Lumber(offset) { - return spaceCostMultiplier("titan_mine", offset, 568e3, 1.28); - }, - Wrought_Iron(offset) { - return spaceCostMultiplier("titan_mine", offset, 25e4, 1.28); - } - }, - effect() { - let adam_val = production("titan_mine", "adamantite"); - let alum_val = production("titan_mine", "aluminium"); - let adamantite = +adam_val.toFixed(3); - let aluminium = +alum_val.toFixed(3); - return `
${loc("space_used_support", [planetName().titan])}
${loc("space_red_mine_effect", [adamantite, global.resource.Adamantite.name])}
${loc("space_red_mine_effect", [aluminium, global.resource.Aluminium.name])}
`; - }, - s_type: "titan", - support() { - return -1; - }, - powered() { - return 0; - }, - special() { - return true; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("titan_mine"); - powerOnNewStruct($(this)[0]); - if (global.space.titan_mine.count === 1) { - global.resource.Adamantite.display = true; - defineIndustry(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, ratio: 90 }, - p: ["titan_mine", "space"] - }; - } - }, - storehouse: { - id: "space-storehouse", - title: loc("space_storehouse_title"), - desc: loc("space_storehouse_title"), - reqs: { titan: 5 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("storehouse", offset, 175e3, 1.28); - }, - Lumber(offset) { - return spaceCostMultiplier("storehouse", offset, 1e5, 1.28); - }, - Aluminium(offset) { - return spaceCostMultiplier("storehouse", offset, 12e4, 1.28); - }, - Cement(offset) { - return spaceCostMultiplier("storehouse", offset, 45e3, 1.28); - } - }, - wide: true, - res() { - return [ - "Lumber", - "Stone", - "Furs", - "Copper", - "Iron", - "Aluminium", - "Cement", - "Coal", - "Steel", - "Titanium", - "Alloy", - "Polymer", - "Iridium", - "Chrysotile", - "Nano_Tube", - "Neutronium", - "Adamantite" - ]; - }, - heavy(res) { - return ["Copper", "Iron", "Steel", "Titanium", "Iridium", "Neutronium", "Adamantite"].includes(res) ? true : false; - }, - val(res) { - switch (res) { - case "Lumber": - return 3e3; - case "Stone": - return 3e3; - case "Chrysotile": - return 3e3; - case "Furs": - return 1700; - case "Copper": - return 1520; - case "Iron": - return 1400; - case "Aluminium": - return 1280; - case "Cement": - return 1120; - case "Coal": - return 480; - case "Steel": - return 240; - case "Titanium": - return 160; - case "Alloy": - return 180; - case "Polymer": - return 150; - case "Iridium": - return 175; - case "Nano_Tube": - return 120; - case "Neutronium": - return 64; - case "Adamantite": - return 72; - default: - return 0; - } - }, - effect(wiki) { - let storage = '
'; - let multiplier = tpStorageMultiplier("storehouse", false, wiki); - let h_multiplier = tpStorageMultiplier("storehouse", true, wiki); - for (const res of $(this)[0].res()) { - if (global.resource[res].display) { - let heavy = $(this)[0].heavy(res); - let val = sizeApproximation(+(spatialReasoning($(this)[0].val(res)) * (heavy ? h_multiplier : multiplier)).toFixed(0), 1); - storage = storage + `${loc("plus_max_resource", [val, global.resource[res].name])}`; - } - } - ; - storage = storage + "
"; - return storage; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("storehouse"); - let multiplier = tpStorageMultiplier("storehouse", false); - let h_multiplier = tpStorageMultiplier("storehouse", true); - for (const res of $(this)[0].res()) { - if (global.resource[res].display) { - let heavy = $(this)[0].heavy(res); - global.resource[res].max += spatialReasoning($(this)[0].val(res)) * (heavy ? h_multiplier : multiplier); - } - } - ; - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["storehouse", "space"] - }; - } - }, - titan_bank: { - id: "space-titan_bank", - title: loc("city_bank"), - desc() { - return loc("city_bank_desc", [planetName().titan]); - }, - reqs: { titan: 6 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("titan_bank", offset, traitCostMod("untrustworthy", 25e5), 1.32); - }, - Titanium(offset) { - return spaceCostMultiplier("titan_bank", offset, traitCostMod("untrustworthy", 38e4), 1.32); - }, - Neutronium(offset) { - return spaceCostMultiplier("titan_bank", offset, traitCostMod("untrustworthy", 5e3), 1.32); - } - }, - effect() { - let vault = bank_vault() * 2; - vault = spatialReasoning(vault); - vault = (+vault.toFixed(0)).toLocaleString(); - return loc("plus_max_resource", [`$${vault}`, global.resource.Money.name]); - }, - action() { - if (payCosts($(this)[0])) { - global["resource"]["Money"].max += spatialReasoning(1800); - incrementStruct("titan_bank"); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["titan_bank", "space"] - }; - } - }, - g_factory: { - id: "space-g_factory", - title: loc("interstellar_g_factory_title"), - desc() { - return `
${loc("interstellar_g_factory_title")}
${loc("space_support", [planetName().titan])}
`; - }, - reqs: { graphene: 1 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("g_factory", offset, 95e4, 1.28); - }, - Copper(offset) { - return spaceCostMultiplier("g_factory", offset, 165e3, 1.28); - }, - Stone(offset) { - return spaceCostMultiplier("g_factory", offset, 22e4, 1.28); - }, - Adamantite(offset) { - return spaceCostMultiplier("g_factory", offset, 12500, 1.28); - } - }, - effect() { - let graphene = 0.05; - if (global.race["high_pop"]) { - graphene = +highPopAdjust(graphene).toFixed(3); - } - return `
${loc("space_used_support", [planetName().titan])}
${loc("space_red_mine_effect", [graphene, global.resource.Graphene.name])}
${loc("interstellar_g_factory_effect")}
`; - }, - s_type: "titan", - support() { - return -1; - }, - powered() { - return 0; - }, - special: true, - action() { - if (payCosts($(this)[0])) { - incrementStruct("g_factory"); - global.resource.Graphene.display = true; - if (powerOnNewStruct($(this)[0])) { - if (global.race["kindling_kindred"] || global.race["smoldering"]) { - global.space.g_factory.Oil++; - } else { - global.space.g_factory.Lumber++; - } - } - global.settings.showIndustry = true; - defineIndustry(); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, Lumber: 0, Coal: 0, Oil: 0 }, - p: ["g_factory", "space"] - }; - } - }, - sam: { - id: "space-sam", - title: loc("space_sam_title"), - desc() { - return `
${loc("space_sam_desc")}
${loc("requires_power")}
`; - }, - reqs: { titan: 7 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("sam", offset, 25e5, 1.28); - }, - Steel(offset) { - return spaceCostMultiplier("sam", offset, 45e4, 1.28); - }, - Elerium(offset) { - return spaceCostMultiplier("sam", offset, 120, 1.28); - }, - Brick(offset) { - return spaceCostMultiplier("sam", offset, 16e4, 1.28); - } - }, - effect() { - let desc = `
${loc("galaxy_defense_platform_effect", [25])}
`; - return desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - }, - powered() { - return powerCostMod(5); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("sam"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["sam", "space"] - }; - }, - post() { - vBind({ el: `#spc_titansynd` }, "update"); - } - }, - decoder: { - id: "space-decoder", - title: loc("space_decoder_title"), - desc() { - return `
${loc("space_decoder_title")}
${loc("requires_power_support_combo", [planetName().titan, global.resource.Cipher.name])}
`; - }, - reqs: { titan: 8 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("decoder", offset, 125e5, 1.275); - }, - Elerium(offset) { - return spaceCostMultiplier("decoder", offset, 750, 1.275); - }, - Orichalcum(offset) { - return spaceCostMultiplier("decoder", offset, 33e4, 1.275); - }, - Quantium(offset) { - return spaceCostMultiplier("decoder", offset, 18e4, 1.275); - } - }, - effect(wiki) { - let cipher = $(this)[0].support_fuel().a; - let know = 2500; - if (global.race["high_pop"]) { - know = highPopAdjust(know); - } - if (wiki ? global.space?.ai_core2?.on ?? 0 : p_on["ai_core2"]) { - know *= 1.25; - } - let desc = `
${loc("space_used_support", [planetName().titan])}
`; - desc += `
${loc("space_red_exotic_lab_effect1", [know])}
`; - return desc + `
${loc("spend", [cipher, global.resource[$(this)[0].support_fuel().r].name])}
`; - }, - s_type: "titan", - support() { - return -1; - }, - powered() { - return 0; - }, - support_fuel() { - return { r: "Cipher", a: 0.06 }; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("decoder"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["decoder", "space"] - }; - } - }, - ai_core: { - id: "space-ai_core", - title: loc("space_ai_core"), - desc(wiki) { - if (!global.space.hasOwnProperty("ai_core") || global.space.ai_core.count < 100 || wiki) { - return `
${loc("space_ai_core")}
${loc("requires_segments", [100])}
` + (global.space.hasOwnProperty("ai_core") && global.space.ai_core.count >= 100 ? `
${loc("requires_power")}
` : ``); - } else { - return `
${loc("space_ai_core")}
`; - } - }, - reqs: { titan: 9 }, - path: ["truepath"], - condition() { - return global.space.ai_core.count >= 100 ? false : true; - }, - queue_size: 10, - queue_complete() { - return 100 - global.space.ai_core.count; - }, - cost: { - Money(offset) { - return (offset || 0) + (global.space.hasOwnProperty("ai_core") ? global.space.ai_core.count : 0) < 100 ? 25e5 : 0; - }, - Cement(offset) { - return (offset || 0) + (global.space.hasOwnProperty("ai_core") ? global.space.ai_core.count : 0) < 100 ? 18e4 : 0; - }, - Aluminium(offset) { - return (offset || 0) + (global.space.hasOwnProperty("ai_core") ? global.space.ai_core.count : 0) < 100 ? 25e4 : 0; - }, - Elerium(offset) { - return (offset || 0) + (global.space.hasOwnProperty("ai_core") ? global.space.ai_core.count : 0) < 100 ? 250 : 0; - }, - Nano_Tube(offset) { - return (offset || 0) + (global.space.hasOwnProperty("ai_core") ? global.space.ai_core.count : 0) < 100 ? 125e3 : 0; - }, - Orichalcum(offset) { - return (offset || 0) + (global.space.hasOwnProperty("ai_core") ? global.space.ai_core.count : 0) < 100 ? 5e4 : 0; - }, - Quantium(offset) { - return (offset || 0) + (global.space.hasOwnProperty("ai_core") ? global.space.ai_core.count : 0) < 100 ? 1e5 : 0; - }, - Cipher(offset) { - return (offset || 0) + (global.space.hasOwnProperty("ai_core") ? global.space.ai_core.count : 0) < 100 ? 750 : 0; - } - }, - effect(wiki) { - let effectText = `
${loc("space_ai_core_effect")}
`; - let count = (wiki?.count ?? 0) + (global.space.hasOwnProperty("ai_core") ? global.space.ai_core.count : 0); - if (count < 100) { - let remain = 100 - count; - effectText += `
${loc("space_dwarf_collider_effect2", [remain])}
`; - } else { - return outerTruth.spc_titan.ai_core2.effect(wiki); - } - return effectText; - }, - action() { - if (payCosts($(this)[0])) { - if (global.space.ai_core.count < 100) { - incrementStruct("ai_core"); - if (global.space.ai_core.count >= 100) { - global.tech["titan_ai_core"] = 1; - initStruct(outerTruth.spc_titan.ai_core2); - incrementStruct("ai_core2", "space"); - powerOnNewStruct(outerTruth.spc_titan.ai_core2); - renderSpace(); - drawTech(); - if (global.city.ptrait.includes("kamikaze") && !global.race["tidal_decay"]) { - messageQueue(loc("planet_kamikaze_stabilize", [races[global.race.species].home, 100]), "info", false, ["progress"]); - } - } - return true; - } - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["ai_core", "space"] - }; - } - }, - ai_core2: { - id: "space-ai_core2", - title: loc("space_ai_core"), - desc() { - return `
${loc("space_ai_core")}
${loc("space_electrolysis_req", [global.resource[$(this)[0].p_fuel().r].name])}
`; - }, - reqs: { titan_ai_core: 1 }, - path: ["truepath"], - condition() { - return global.space.hasOwnProperty("ai_core") && global.space.ai_core.count >= 100 ? true : false; - }, - wiki: false, - queue_complete() { - return 0; - }, - cost: {}, - powered() { - return powerCostMod(100); - }, - p_fuel() { - return { r: "Water", a: 1e3 }; - }, - effect(wiki) { - let value = 25; - let desc = `
${loc("interstellar_citadel_stat", [+get_qlevel(wiki).toFixed(1)])}
`; - desc += `
${loc("interstellar_citadel_effect", [value])}
${loc("space_ai_core_effect2", [value])}
`; - if (global.tech["titan_ai_core"] && global.tech.titan_ai_core >= 2) { - desc += `
${loc("space_ai_core_effect3", [50])}
`; - } - desc += `
${loc("space_electrolysis_use", [$(this)[0].p_fuel().a, global.resource[$(this)[0].p_fuel().r].name, $(this)[0].powered()])}
`; - if (global.tech["titan_ai_core"] && global.tech.titan_ai_core >= 3) { - let drift = +calcAIDrift(wiki).toFixed(1); - desc += `
${loc("space_ai_core_effect4", [drift])}
`; - } - return desc; - }, - action() { - return false; - }, - flair() { - return global.space.hasOwnProperty("ai_core2") && global.space.ai_core2.on >= 1 ? loc(`space_ai_core_flair`) : loc(`space_ai_core_flair2`); - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["ai_core2", "space"] - }; - } - }, - ai_colonist: { - id: "space-ai_colonist", - title: loc("space_ai_colonist_title"), - desc() { - return `
${loc("space_ai_colonist_title")}
${loc("requires_power")}
`; - }, - reqs: { titan_ai_core: 3 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("ai_colonist", offset, 112e6, 1.35); - }, - Alloy(offset) { - return spaceCostMultiplier("ai_colonist", offset, 75e4, 1.35); - }, - Elerium(offset) { - return spaceCostMultiplier("ai_colonist", offset, 500, 1.35); - }, - Nano_Tube(offset) { - return spaceCostMultiplier("ai_colonist", offset, 525e3, 1.35); - }, - Quantium(offset) { - return spaceCostMultiplier("ai_colonist", offset, 15e4, 1.35); - }, - Cipher(offset) { - return spaceCostMultiplier("ai_colonist", offset, 1e4, 1.35); - } - }, - effect() { - return `
${loc("plus_max_resource", [jobScale(1), global.race["truepath"] ? loc("job_colonist_tp", [planetName().titan]) : loc("colonist")])}
${loc("space_ai_colonist_effect", [jobScale(1), planetName().titan])}
${loc("minus_power", [$(this)[0].powered()])}
`; - }, - powered() { - return powerCostMod(10); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("ai_colonist"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["ai_colonist", "space"] - }; - }, - flair: loc(`tech_combat_droids_flair`) - }, - wonder_gardens: { - id: "space-wonder_gardens", - title() { - return loc("space_wonder_gardens", [planetName().titan]); - }, - desc() { - return loc("space_wonder_gardens", [planetName().titan]); - }, - reqs: {}, - condition() { - return global.race["wish"] && global.race["wishStats"] && global.portal["wonder_gardens"] ? true : false; - }, - trait: ["wish"], - queue_complete() { - return false; - }, - effect() { - return loc(`city_wonder_effect`, [5]); - }, - action() { - return false; - } - } - }, - spc_enceladus: { - info: { - name() { - return planetName().enceladus; - }, - desc() { - return loc("space_enceladus_info_desc", [planetName().enceladus, races[global.race.species].home]); - }, - support: "titan_spaceport", - zone: "outer", - syndicate() { - return global.tech["titan"] && global.tech.titan >= 3 && global.tech["enceladus"] && global.tech.enceladus >= 2 ? true : false; - }, - syndicate_cap() { - if (global.tech["triton"]) { - return global.tech.outer >= 4 ? 1500 : 1e3; - } - return 600; - } - }, - enceladus_mission: { - id: "space-enceladus_mission", - title() { - return loc("space_mission_title", [planetName().enceladus]); - }, - desc() { - return loc("space_mission_desc", [planetName().enceladus]); - }, - reqs: { outer: 1 }, - grant: ["enceladus", 1], - path: ["truepath"], - queue_complete() { - return global.tech.enceladus >= 1 ? 0 : 1; - }, - cost: { - Helium_3(offset, wiki) { - return +fuel_adjust(25e4, false, wiki).toFixed(0); - }, - Elerium() { - return 100; - } - }, - effect() { - return loc("space_titan_mission_effect", [planetName().enceladus]); - }, - action() { - if (payCosts($(this)[0])) { - messageQueue(loc("space_enceladus_mission_action", [planetName().enceladus]), "info", false, ["progress"]); - global.resource.Water.display = true; - return true; - } - return false; - } - }, - water_freighter: { - id: "space-water_freighter", - title: loc("space_water_freighter_title"), - desc() { - return `
${loc("space_water_freighter_title")}
${loc("space_support", [planetName().enceladus])}
`; - }, - reqs: { enceladus: 2 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("water_freighter", offset, 45e4, 1.25); - }, - Iron(offset) { - return spaceCostMultiplier("water_freighter", offset, 362e3, 1.25); - }, - Nano_Tube(offset) { - return spaceCostMultiplier("water_freighter", offset, 125e3, 1.25); - }, - Sheet_Metal(offset) { - return spaceCostMultiplier("water_freighter", offset, 75e3, 1.25); - } - }, - effect(wiki) { - let helium = +fuel_adjust(5, true, wiki).toFixed(2); - let water = +production("water_freighter").toFixed(2); - return `
${loc("space_used_support", [planetName().enceladus])}
${loc("produce", [water, global.resource.Water.name])}
${loc(`space_belt_station_effect3`, [helium])}
`; - }, - s_type: "enceladus", - support() { - return -1; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("water_freighter"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["water_freighter", "space"] - }; - } - }, - zero_g_lab: { - id: "space-zero_g_lab", - title: loc("tech_zero_g_lab"), - desc() { - return `
${loc("tech_zero_g_lab")}
${loc("requires_power_support", [planetName().enceladus])}
`; - }, - reqs: { enceladus: 3 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("zero_g_lab", offset, 5e6, 1.25); - }, - Alloy(offset) { - return spaceCostMultiplier("zero_g_lab", offset, 125e3, 1.25); - }, - Graphene(offset) { - return spaceCostMultiplier("zero_g_lab", offset, 225e3, 1.25); - }, - Stanene(offset) { - return spaceCostMultiplier("zero_g_lab", offset, 6e5, 1.25); - } - }, - effect() { - let synd = syndicate("spc_enceladus"); - let know = Math.round(1e4 * synd); - let desc = `
${loc("space_used_support", [planetName().enceladus])}
${loc("city_max_knowledge", [know])}
`; - if (global.resource.Quantium.display) { - desc = desc + `
${loc("space_zero_g_lab_effect", [jobScale(1)])}
`; - } - if (global.resource.Cipher.display) { - desc = desc + `
${loc("plus_max_resource", [1e4, global.resource.Cipher.name])}
`; - } - return desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - }, - s_type: "enceladus", - support() { - return -1; - }, - powered() { - return powerCostMod(12); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("zero_g_lab"); - powerOnNewStruct($(this)[0]); - if (global.space.zero_g_lab.count === 1 && global.tech["quantium"]) { - loadFoundry(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["zero_g_lab", "space"] - }; - }, - postPower(on) { - limitCraftsmen("Quantium"); - } - }, - operating_base: { - id: "space-operating_base", - title: loc("tech_operating_base"), - desc() { - return `
${loc("tech_operating_base")}
${loc("requires_power_support", [planetName().enceladus])}
`; - }, - reqs: { enceladus: 4 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("operating_base", offset, 75e5, 1.3); - }, - Furs(offset) { - return spaceCostMultiplier("operating_base", offset, 5e5, 1.3); - }, - Adamantite(offset) { - return spaceCostMultiplier("operating_base", offset, 375e3, 1.3); - }, - Stanene(offset) { - return spaceCostMultiplier("operating_base", offset, 75e4, 1.3); - }, - Mythril(offset) { - return spaceCostMultiplier("operating_base", offset, 225e3, 1.3); - }, - Horseshoe() { - return global.race["hooved"] ? 4 : 0; - } - }, - effect() { - let desc = `
${loc("space_used_support", [planetName().enceladus])}
`; - desc += `
${loc("galaxy_defense_platform_effect", [50])}
`; - desc += loc("plus_max_resource", [$(this)[0].soldiers(), loc("civics_garrison_soldiers")]); - if (global.race["orbit_decayed"]) { - let healing = global.tech["medic"] * 5; - desc += `
${loc("city_hospital_effect", [healing])}
`; - } - return desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - }, - s_type: "enceladus", - support() { - return -1; - }, - powered() { - return powerCostMod(10); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("operating_base"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["operating_base", "space"] - }; - }, - soldiers() { - let soldiers = global.race["grenadier"] ? 3 : 4; - return jobScale(soldiers); - }, - post() { - vBind({ el: `#spc_enceladussynd` }, "update"); - } - }, - munitions_depot: { - id: "space-munitions_depot", - title: loc("tech_munitions_depot"), - desc: loc("tech_munitions_depot"), - category: "storage", - era: "solar", - reqs: { enceladus: 5 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("munitions_depot", offset, 5e6, 1.22); - }, - Iron(offset) { - return spaceCostMultiplier("munitions_depot", offset, 185e3, 1.22); - }, - Sheet_Metal(offset) { - return spaceCostMultiplier("munitions_depot", offset, 1e5, 1.22); - } - }, - effect() { - let containers = 25; - return `
${loc("plus_max_crates", [containers])}
${loc("plus_max_containers", [containers])}
`; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("munitions_depot"); - global.resource.Crates.max += 25; - global.resource.Containers.max += 25; - if (!global.resource.Containers.display) { - unlockContainers(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["munitions_depot", "space"] - }; - } - } - }, - spc_triton: { - info: { - name() { - return planetName().triton; - }, - desc() { - return loc("space_triton_info_desc", [planetName().triton, races[global.race.species].home]); - }, - zone: "outer", - syndicate() { - return global.tech["triton"] && global.tech.triton >= 2 ? true : false; - }, - syndicate_cap() { - return global.tech["outer"] && global.tech.outer >= 4 ? 5e3 : 3e3; - }, - extra(region) { - if (global.tech["triton"] && global.tech.triton >= 3) { - $(`#${region}`).append(`
${loc("space_ground_resist")}
`); - vBind({ - el: `#${region}resist`, - data: global.space.fob, - methods: { - threat(e, t) { - let wounded = global.civic.garrison.wounded - garrisonSize(); - if (wounded < 0) { - wounded = 0; - } - let d = +(e - armyRating(t, "army", wounded)).toFixed(0); - return d < 0 ? 0 : d; - } - } - }); - } - } - }, - triton_mission: { - id: "space-triton_mission", - title() { - return loc("space_mission_title", [planetName().triton]); - }, - desc() { - return loc("space_mission_desc", [planetName().triton]); - }, - reqs: { outer: 2 }, - grant: ["triton", 1], - path: ["truepath"], - queue_complete() { - return global.tech.triton >= 1 ? 0 : 1; - }, - cost: { - Helium_3(offset, wiki) { - return +fuel_adjust(6e5, false, wiki).toFixed(0); - }, - Elerium() { - return 2500; - } - }, - effect() { - return loc("space_triton_mission_effect", [planetName().triton]); - }, - action() { - if (payCosts($(this)[0])) { - messageQueue(loc("space_triton_mission_action", [planetName().triton]), "info", false, ["progress"]); - global.space.syndicate["spc_triton"] = 1250; - global.space.syndicate["spc_titan"] += 250; - global.space.syndicate["spc_enceladus"] += 250; - return true; - } - return false; - } - }, - fob: { - id: "space-fob", - title: loc("space_fob_title"), - desc() { - return `
${loc("tech_fob")}
${loc("requires_power_combo", [global.resource.Helium_3.name])}
`; - }, - reqs: { triton: 2 }, - path: ["truepath"], - queue_complete() { - return 1 - global.space.fob.count; - }, - cost: { - Money(offset) { - return (offset || 0) + (global.space.hasOwnProperty("fob") ? global.space.fob.count : 0) >= 1 ? 0 : spaceCostMultiplier("fob", offset, 25e7, 1.1); - }, - Copper(offset) { - return (offset || 0) + (global.space.hasOwnProperty("fob") ? global.space.fob.count : 0) >= 1 ? 0 : spaceCostMultiplier("fob", offset, 8e6, 1.1); - }, - Uranium(offset) { - return (offset || 0) + (global.space.hasOwnProperty("fob") ? global.space.fob.count : 0) >= 1 ? 0 : spaceCostMultiplier("fob", offset, 5e4, 1.1); - }, - Nano_Tube(offset) { - return (offset || 0) + (global.space.hasOwnProperty("fob") ? global.space.fob.count : 0) >= 1 ? 0 : spaceCostMultiplier("fob", offset, 25e5, 1.1); - }, - Graphene(offset) { - return (offset || 0) + (global.space.hasOwnProperty("fob") ? global.space.fob.count : 0) >= 1 ? 0 : spaceCostMultiplier("fob", offset, 3e6, 1.1); - }, - Sheet_Metal(offset) { - return (offset || 0) + (global.space.hasOwnProperty("fob") ? global.space.fob.count : 0) >= 1 ? 0 : spaceCostMultiplier("fob", offset, 75e5, 1.1); - }, - Quantium(offset) { - return (offset || 0) + (global.space.hasOwnProperty("fob") ? global.space.fob.count : 0) >= 1 ? 0 : spaceCostMultiplier("fob", offset, 5e5, 1.1); - }, - Horseshoe(offset) { - return global.race["hooved"] && (offset || 0) + (global.space.hasOwnProperty("fob") ? global.space.fob.count : 0) < 1 ? 10 : 0; - } - }, - effect(wiki) { - let troops = garrisonSize(); - let max_troops = garrisonSize(true); - let desc = `
${loc("galaxy_defense_platform_effect", [500])}
`; - desc += loc("plus_max_resource", [$(this)[0].soldiers(), loc("civics_garrison_soldiers")]); - desc += `
${loc("civics_garrison_soldiers")}: ${troops} / ${max_troops}
`; - desc += `
${loc("civics_garrison_wounded")}: ${global.civic["garrison"] ? global.civic.garrison.wounded : 0}
`; - desc += `
${loc("space_fob_landed", [global.space["fob"] ? global.space.fob.troops : 0])}
`; - let helium = +fuel_adjust(125, true, wiki).toFixed(2); - return desc + `
${loc("requires_power_combo_effect", [$(this)[0].powered(), helium, global.resource.Helium_3.name])}
`; - }, - powered() { - return powerCostMod(50); - }, - action() { - if (global.space.fob.count < 1 && payCosts($(this)[0])) { - incrementStruct("fob"); - powerOnNewStruct($(this)[0]); - if (global.tech["triton"] === 2) { - global.tech["triton"] = 3; - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, troops: 0, enemy: 0 }, - p: ["fob", "space"] - }; - }, - soldiers() { - let soldiers = global.race["grenadier"] ? 6 : 10; - return jobScale(soldiers); - }, - post() { - drawTech(); - renderSpace(); - messageQueue(loc("space_fob_msg"), "info", false, ["progress"]); - } - }, - lander: { - id: "space-lander", - title: loc("space_lander_title"), - desc() { - return `
${loc("space_lander_title")}
${loc("requires_soldiers")}
${loc("space_red_space_barracks_desc_req")}
`; - }, - reqs: { triton: 3 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("lander", offset, 24e5, 1.15); - }, - Aluminium(offset) { - return spaceCostMultiplier("lander", offset, 185e3, 1.15); - }, - Neutronium(offset) { - return spaceCostMultiplier("lander", offset, 1e4, 1.15); - }, - Nano_Tube(offset) { - return spaceCostMultiplier("lander", offset, 158e3, 1.15); - } - }, - powered() { - return 0; - }, - effect(wiki) { - let oil = +fuel_adjust(50, true, wiki).toFixed(2); - let data = ``; - if (global.space["crashed_ship"] && global.space.crashed_ship.count === 100) { - data = `
${loc(`space_lander_effect3`, [production("lander"), global.resource.Cipher.name])}
`; - } - return `
${loc("space_lander_effect", [planetName().triton])}
${data}
${loc(`space_lander_effect2`, [jobScale(3)])}
${loc("space_red_space_barracks_effect2", [oil])}
`; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("lander"); - global.space.lander.on++; - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["lander", "space"] - }; - } - }, - crashed_ship: { - id: "space-crashed_ship", - title: loc("space_crashed_ship_title"), - desc() { - return `
${loc("space_crashed_ship_title")}
`; - }, - reqs: { triton: 3 }, - path: ["truepath"], - queue_complete() { - return 0; - }, - cost: {}, - effect() { - let control = global.space["crashed_ship"] ? global.space.crashed_ship.count : 0; - return `
${loc(`space_crashed_ship_effect`, [control])}
`; - }, - action() { - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["crashed_ship", "space"] - }; - } - } - }, - spc_kuiper: { - info: { - name() { - return loc(`space_kuiper_title`); - }, - desc() { - return loc("space_kuiper_desc"); - }, - zone: "outer", - syndicate() { - return global.tech["kuiper"] ? true : false; - }, - syndicate_cap() { - return 2500; - } - }, - kuiper_mission: { - id: "space-kuiper_mission", - title() { - return loc("space_mission_title", [loc(`space_kuiper_title`)]); - }, - desc() { - return loc("space_mission_desc", [loc(`space_kuiper_title`)]); - }, - reqs: { outer: 7 }, - grant: ["kuiper", 1], - path: ["truepath"], - queue_complete() { - return global.tech.kuiper >= 1 ? 0 : 1; - }, - cost: { - Helium_3(offset, wiki) { - return +fuel_adjust(1e6, false, wiki).toFixed(0); - }, - Elerium() { - return 1e3; - } - }, - effect() { - return loc("space_kuiper_mission_effect"); - }, - action() { - if (payCosts($(this)[0])) { - initStruct(outerTruth.spc_kuiper.orichalcum_mine); - initStruct(outerTruth.spc_kuiper.uranium_mine); - initStruct(outerTruth.spc_kuiper.neutronium_mine); - global.space.syndicate["spc_kuiper"] = 500; - messageQueue(loc("space_kuiper_mission_action"), "info", false, ["progress"]); - return true; - } - return false; - } - }, - orichalcum_mine: { - id: "space-orichalcum_mine", - title() { - return loc("space_kuiper_mine", [global.resource.Orichalcum.name]); - }, - desc() { - return `
${loc("space_kuiper_mine", [global.resource.Orichalcum.name])}
${loc("requires_power_combo", [global.resource.Oil.name])}
`; - }, - reqs: { kuiper: 1 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("orichalcum_mine", offset, 25e6, 1.25); - }, - Graphene(offset) { - return spaceCostMultiplier("orichalcum_mine", offset, 9e5, 1.25); - }, - Elerium(offset) { - return spaceCostMultiplier("orichalcum_mine", offset, 200, 1.25); - }, - Mythril(offset) { - return spaceCostMultiplier("orichalcum_mine", offset, 45e4, 1.25); - }, - Quantium(offset) { - return spaceCostMultiplier("orichalcum_mine", offset, 15e4, 1.25); - } - }, - effect(wiki) { - let mineral = +production("orichalcum_mine").toFixed(3); - let fuel = +fuel_adjust($(this)[0].p_fuel().a, true, wiki).toFixed(1); - let desc = `
${loc("gain", [mineral, global.resource.Orichalcum.name])}
`; - return desc + `
${loc("requires_power_combo_effect", [$(this)[0].powered(), fuel, global.resource[$(this)[0].p_fuel().r].name])}
`; - }, - powered() { - return powerCostMod(10); - }, - p_fuel() { - return { r: "Oil", a: 200 }; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("orichalcum_mine"); - global.resource.Orichalcum.display = true; - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["orichalcum_mine", "space"] - }; - } - }, - uranium_mine: { - id: "space-uranium_mine", - title() { - return loc("space_kuiper_mine", [global.resource.Uranium.name]); - }, - desc() { - return `
${loc("space_kuiper_mine", [global.resource.Uranium.name])}
${loc("requires_power_combo", [global.resource.Oil.name])}
`; - }, - reqs: { kuiper: 1 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("uranium_mine", offset, 5e6, 1.25); - }, - Iridium(offset) { - return spaceCostMultiplier("uranium_mine", offset, 25e4, 1.25); - }, - Steel(offset) { - return spaceCostMultiplier("uranium_mine", offset, 62e4, 1.25); - } - }, - effect(wiki) { - let mineral = +production("uranium_mine").toFixed(3); - let fuel = +fuel_adjust($(this)[0].p_fuel().a, true, wiki).toFixed(1); - let desc = `
${loc("gain", [mineral, global.resource.Uranium.name])}
`; - return desc + `
${loc("requires_power_combo_effect", [$(this)[0].powered(), fuel, global.resource[$(this)[0].p_fuel().r].name])}
`; - }, - powered() { - return powerCostMod(5); - }, - p_fuel() { - return { r: "Oil", a: 60 }; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("uranium_mine"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["uranium_mine", "space"] - }; - } - }, - neutronium_mine: { - id: "space-neutronium_mine", - title() { - return loc("space_kuiper_mine", [global.resource.Neutronium.name]); - }, - desc() { - return `
${loc("space_kuiper_mine", [global.resource.Neutronium.name])}
${loc("requires_power_combo", [global.resource.Oil.name])}
`; - }, - reqs: { kuiper: 1 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("neutronium_mine", offset, 8e6, 1.25); - }, - Adamantite(offset) { - return spaceCostMultiplier("neutronium_mine", offset, 65e4, 1.25); - }, - Stanene(offset) { - return spaceCostMultiplier("neutronium_mine", offset, 125e4, 1.25); - } - }, - effect(wiki) { - let mineral = +production("neutronium_mine").toFixed(3); - let fuel = +fuel_adjust($(this)[0].p_fuel().a, true, wiki).toFixed(1); - let desc = `
${loc("gain", [mineral, global.resource.Neutronium.name])}
`; - return desc + `
${loc("requires_power_combo_effect", [$(this)[0].powered(), fuel, global.resource[$(this)[0].p_fuel().r].name])}
`; - }, - powered() { - return powerCostMod(8); - }, - p_fuel() { - return { r: "Oil", a: 60 }; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("neutronium_mine"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["neutronium_mine", "space"] - }; - } - }, - elerium_mine: { - id: "space-elerium_mine", - title() { - return loc("space_kuiper_mine", [global.resource.Elerium.name]); - }, - desc() { - return `
${loc("space_kuiper_mine", [global.resource.Elerium.name])}
${loc("requires_power_combo", [global.resource.Oil.name])}
`; - }, - reqs: { kuiper: 2 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("elerium_mine", offset, 2e7, 1.25); - }, - Titanium(offset) { - return spaceCostMultiplier("elerium_mine", offset, 25e4, 1.25); - }, - Neutronium(offset) { - return spaceCostMultiplier("elerium_mine", offset, 12e4, 1.25); - }, - Orichalcum(offset) { - return spaceCostMultiplier("elerium_mine", offset, 175e3, 1.25); - } - }, - effect(wiki) { - let mineral = +production("elerium_mine").toFixed(3); - let fuel = +fuel_adjust($(this)[0].p_fuel().a, true, wiki).toFixed(1); - let desc = `
${loc("gain", [mineral, global.resource.Elerium.name])}
`; - return desc + `
${loc("requires_power_combo_effect", [$(this)[0].powered(), fuel, global.resource[$(this)[0].p_fuel().r].name])}
`; - }, - powered() { - return powerCostMod(12); - }, - p_fuel() { - return { r: "Oil", a: 125 }; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("elerium_mine"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["elerium_mine", "space"] - }; - } - } - }, - spc_eris: { - info: { - name() { - return planetName().eris; - }, - desc() { - return loc("space_eris_info_desc", [planetName().eris]); - }, - support: "drone_control", - zone: "outer", - syndicate() { - return global.tech["eris"] ? true : false; - }, - syndicate_cap() { - return 7500; - }, - extra(region) { - if (global.tech["eris"] && global.tech["eris"] === 1) { - $(`#${region}`).append(`
${loc("space_scanned")} {{ eris_scan }}%
`); - vBind({ - el: `#${region}scanned`, - data: global.tech - }); - } - } - }, - eris_mission: { - id: "space-eris_mission", - title() { - return loc("space_mission_title", [planetName().eris]); - }, - desc() { - return loc("space_mission_desc", [planetName().eris]); - }, - reqs: { outer: 7 }, - grant: ["eris", 1], - path: ["truepath"], - queue_complete() { - return global.tech.eris >= 1 ? 0 : 1; - }, - cost: { - Helium_3(offset, wiki) { - return +fuel_adjust(125e4, false, wiki).toFixed(0); - }, - Elerium() { - return 1250; - } - }, - effect() { - return loc("space_eris_mission_effect", [planetName().eris]); - }, - action() { - if (payCosts($(this)[0])) { - global.space.syndicate["spc_eris"] = 4e3; - messageQueue(loc("space_eris_mission_action", [planetName().eris]), "info", false, ["progress"]); - return true; - } - return false; - } - }, - drone_control: { - id: "space-drone_control", - title() { - return loc("space_drone_control", [planetName().titan]); - }, - desc() { - return `
${loc("space_drone_control", [planetName().titan])}
${loc("requires_power_combo", [global.resource[$(this)[0].p_fuel().r].name])}
`; - }, - reqs: { eris: 3 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("drone_control", offset, 75e6, 1.3); - }, - Neutronium(offset) { - return spaceCostMultiplier("drone_control", offset, 1e5, 1.3); - }, - Stanene(offset) { - return spaceCostMultiplier("drone_control", offset, 45e4, 1.3); - }, - Quantium(offset) { - return spaceCostMultiplier("drone_control", offset, 3e5, 1.3); - } - }, - effect() { - let fuel = $(this)[0].p_fuel().a; - let desc = `
+${loc(`galaxy_alien2_support`, [$(this)[0].support(), planetName().eris])}
`; - return desc + `
${loc("requires_power_combo_effect", [$(this)[0].powered(), fuel, global.resource[$(this)[0].p_fuel().r].name])}
`; - }, - support() { - return 5; - }, - powered() { - return powerCostMod(25); - }, - p_fuel() { - return { r: "Uranium", a: 5 }; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("drone_control"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, support: 0, s_max: 0 }, - p: ["drone_control", "space"] - }; - } - }, - shock_trooper: { - id: "space-shock_trooper", - title: loc("space_shock_trooper_title"), - desc() { - return `
${loc("space_shock_trooper_title")}
${loc("space_support", [planetName().eris])}
`; - }, - reqs: { eris: 3 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("shock_trooper", offset, 425e4, 1.225); - }, - Polymer(offset) { - return spaceCostMultiplier("shock_trooper", offset, 375e3, 1.225); - }, - Adamantite(offset) { - return spaceCostMultiplier("shock_trooper", offset, 5e5, 1.225); - }, - Graphene(offset) { - return spaceCostMultiplier("shock_trooper", offset, 22e4, 1.225); - }, - Elerium(offset) { - return spaceCostMultiplier("shock_trooper", offset, 350, 1.225); - } - }, - effect() { - let rating = Math.round(armyRating(1, "army", 0) * syndicate("spc_eris")); - let desc = `
${loc("space_used_support", [planetName().eris])}
`; - if (global.space["digsite"] && global.space.digsite.count === 100) { - desc = `
${loc(`space_lander_effect3`, [production("shock_trooper"), global.resource.Cipher.name])}
`; - } - return desc + `
${loc(`space_digsite_offense`, [rating])}
`; - }, - s_type: "eris", - support() { - return -1; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("shock_trooper"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["shock_trooper", "space"] - }; - } - }, - tank: { - id: "space-tank", - title: loc("space_tank_title"), - desc() { - return `
${loc("space_tank_title")}
${loc("space_support", [planetName().eris])}
`; - }, - reqs: { eris: 4 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("tank", offset, 1e8, 1.25); - }, - Alloy(offset) { - return spaceCostMultiplier("tank", offset, 125e4, 1.25); - }, - Orichalcum(offset) { - return spaceCostMultiplier("tank", offset, 6e5, 1.25); - }, - Mythril(offset) { - return spaceCostMultiplier("tank", offset, 5e5, 1.25); - }, - Uranium(offset) { - return spaceCostMultiplier("tank", offset, 25e3, 1.25); - } - }, - effect() { - let rating = Math.round(100 * syndicate("spc_eris")); - let desc = `
${loc("space_used_support", [planetName().eris])}
`; - if (global.space["digsite"] && global.space.digsite.count === 100) { - desc = `
${loc(`space_lander_effect3`, [production("tank"), global.resource.Cipher.name])}
`; - } - return desc + `
${loc(`space_digsite_offense`, [rating])}
`; - }, - s_type: "eris", - support() { - return -1; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("tank"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["tank", "space"] - }; - } - }, - digsite: { - id: "space-digsite", - title: loc("space_digsite_title"), - desc() { - return `
${loc("space_digsite_title")}
`; - }, - reqs: { eris: 3 }, - path: ["truepath"], - queue_complete() { - return 0; - }, - cost: {}, - effect() { - let control = global.space["digsite"] ? global.space.digsite.count : 0; - return `
${loc(`space_crashed_ship_effect`, [control])}
`; - }, - action() { - return false; - }, - struct() { - return { - d: { count: 0, enemy: 1e4 }, - p: ["digsite", "space"] - }; - } - } - } - }; - var tauCetiModules = { - tau_star: { - info: { - name() { - return loc("tab_tauceti"); - }, - desc() { - return loc("tau_star", [loc("tab_tauceti"), loc("space_sun_info_name")]); - } - }, - ringworld: { - id: "tauceti-ringworld", - title: loc("tau_star_ringworld"), - desc(wiki) { - if (!global.tauceti.hasOwnProperty("ringworld") || global.tauceti.ringworld.count < 1e3 || wiki) { - return `
${loc("tau_star_ringworld")}
${loc("requires_segments", [1e3])}
`; - } else { - return `
${loc("tau_star_ringworld")}
`; - } - }, - reqs: { matrix: 2 }, - path: ["truepath"], - queue_size: 50, - queue_complete() { - return 1e3 - global.tauceti.ringworld.count; - }, - cost: { - Money(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ringworld") ? global.tauceti.ringworld.count : 0) < 1e3 ? global.race["lone_survivor"] ? 1e7 : 1e8 : 0; - }, - Neutronium(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ringworld") ? global.tauceti.ringworld.count : 0) < 1e3 ? global.race["lone_survivor"] ? 2e4 : 1e5 : 0; - }, - Nano_Tube(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ringworld") ? global.tauceti.ringworld.count : 0) < 1e3 ? global.race["lone_survivor"] ? 7e4 : 35e4 : 0; - }, - Adamantite(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ringworld") ? global.tauceti.ringworld.count : 0) < 1e3 ? global.race["lone_survivor"] ? 2e5 : 1e6 : 0; - }, - Bolognium(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ringworld") ? global.tauceti.ringworld.count : 0) < 1e3 ? global.race["lone_survivor"] ? 17600 : 88e3 : 0; - }, - Orichalcum(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ringworld") ? global.tauceti.ringworld.count : 0) < 1e3 ? global.race["lone_survivor"] ? 25e3 : 125e3 : 0; - }, - Unobtainium(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ringworld") ? global.tauceti.ringworld.count : 0) < 1e3 ? global.race["lone_survivor"] ? 360 : 1800 : 0; - }, - Quantium(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ringworld") ? global.tauceti.ringworld.count : 0) < 1e3 ? wom_recycle(global.race["lone_survivor"] ? 10100 : 101e3) : 0; - } - }, - effect(wiki) { - let effectText = ""; - let count = (wiki?.count ?? 0) + (global.tauceti.hasOwnProperty("ringworld") ? global.tauceti.ringworld.count : 0); - if (count < 1e3) { - let remain = 1e3 - count; - effectText += `
${loc("tau_star_ringworld_effect")}
`; - effectText += `
${loc("space_dwarf_collider_effect2", [remain])}
`; - } else { - effectText += `
${loc("space_dwarf_reactor_effect1", [global.race["lone_survivor"] ? 100 : 1e4])}
`; - } - return effectText; - }, - action() { - if (payCosts($(this)[0])) { - if (global.tauceti.ringworld.count < 1e3) { - incrementStruct("ringworld", "tauceti"); - if (global.tauceti.ringworld.count >= 1e3) { - if (global.race["lone_survivor"]) { - global.tech["eden"] = 1; - } else { - global.tech.matrix = 3; - global.tauceti["matrix"] = { count: 1, on: 0 }; - } - drawTech(); - renderTauCeti(); - clearPopper(); - } - return true; - } - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["ringworld", "tauceti"] - }; - } - }, - matrix: { - id: "tauceti-matrix", - title: loc("tau_star_matrix"), - desc() { - return `
${loc("tau_star_matrix")}
${loc("requires_power")}
`; - }, - reqs: { matrix: 3 }, - condition() { - return global.tauceti.ringworld.count >= 1e3 ? true : false; - }, - queue_complete() { - return 0; - }, - cost: {}, - powered() { - return 1e4; - }, - postPower(o) { - if (o && p_on["matrix"]) { - global.tech.matrix = 4; - renderTauCeti(); - } else { - if (global.tech.matrix > 3) { - global.tech.matrix = 3; - renderTauCeti(); - } - if (o) { - return true; - } - } - }, - effect() { - let reward = matrixProjection(); - let power = $(this)[0].powered(); - let power_label = power > 0 ? `
${loc("minus_power", [power])}
` : ""; - return `
${loc("tau_star_matrix_effect")}
${reward}${power_label}`; - }, - action() { - return false; - } - }, - blue_pill: { - id: "tauceti-blue_pill", - title: loc("tau_star_blue_pill"), - desc: loc("tau_star_blue_pill"), - wiki: false, - reqs: { matrix: 4 }, - queue_complete() { - return 0; - }, - no_multi: true, - cost: {}, - effect() { - let reward = matrixProjection(); - return `
${loc("tau_star_blue_pill_effect")}
${reward}`; - }, - action() { - if (payCosts($(this)[0])) { - let pill = function() { - ctx.fillStyle = "#0001"; - ctx.fillRect(0, 0, w, h); - ctx.fillStyle = "#0f0"; - ctx.font = "15pt monospace"; - ypos.forEach((y, ind) => { - const text = String.fromCharCode(Math.rand(65382, 65438)); - const x = ind * 20; - ctx.fillText(text, x, y); - if (y > 100 + Math.random() * 1e4) - ypos[ind] = 0; - else - ypos[ind] = y + 20; - }); - }; - $(`body`).append(``); - const canvas = document.getElementById("matrix"); - const ctx = canvas.getContext("2d"); - const w = canvas.width = document.body.offsetWidth; - const h = canvas.height = document.body.offsetHeight; - const cols = Math.floor(w / 20) + 1; - const ypos = Array(cols).fill(0); - setInterval(pill, 50); - setTimeout(function() { - matrix(); - }, 5e3); - return true; - } - return false; - } - }, - goe_facility: { - id: "tauceti-goe_facility", - title: loc("tau_star_goe_facility"), - desc() { - return `
${loc("tau_star_goe_facility")}
`; - }, - reqs: { eden: 2 }, - condition() { - return global.tauceti.ringworld.count >= 1e3 ? true : false; - }, - queue_complete() { - return 0; - }, - cost: { - Money(o) { - return 1e6; - }, - Copper(o) { - return 1e7; - }, - Graphene(o) { - return 5e6; - }, - Stanene(o) { - return 8e6; - }, - Elerium(o) { - return 1e4; - } - }, - effect() { - let reward = edenProjection(); - return `
${loc("tau_star_goe_facility_effect")}
${reward}`; - }, - action() { - if (payCosts($(this)[0])) { - let costs = adjustCosts(tauCetiModules.tau_star.goe_facility); - Object.keys(costs).forEach(function(res) { - global.resource[res].amount += costs[res](); - }); - gardenOfEden(); - return false; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["goe_facility", "tauceti"] - }; - } - } - }, - tau_home: { - info: { - name() { - return loc("tau_planet", [races[global.race.species].home]); - }, - desc() { - return loc("tau_home", [races[global.race.species].home]); - }, - support: "orbital_station", - extra(region) { - if (global.tech["tau_home"] && global.tech.tau_home >= 2 && !tauEnabled()) { - $(`#${region}`).append(`
${loc("resource_Materials_name")} {{ locale(locale(round(amount)) }} / {{ max) }}
`); - vBind({ - el: `#${region}Mats`, - data: global.resource.Materials, - methods: { - tauShow() { - return !tauEnabled(); - }, - round(v) { - return +v.toFixed(0); - }, - locale(v) { - return v.toLocaleString(); - } - } - }); - } - } - }, - home_mission: { - id: "tauceti-home_mission", - title() { - return loc("tau_new_mission_title", [races[global.race.species].home]); - }, - desc() { - return loc("tau_new_mission_title", [races[global.race.species].home]); - }, - reqs: { tauceti: 2 }, - grant: ["tau_home", 1], - path: ["truepath"], - queue_complete() { - return global.tech.tau_home >= 1 ? 0 : 1; - }, - cost: { - Money() { - return 1e9; - } - }, - effect() { - return loc("tau_new_mission_effect", [races[global.race.species].home]); - }, - action() { - if (payCosts($(this)[0])) { - initStruct(tauCetiModules.tau_home.colony); - initStruct(tauCetiModules.tau_home.mining_pit); - messageQueue(loc("tau_home_mission_result", [races[global.race.species].home]), "info", false, ["progress"]); - return true; - } - return false; - } - }, - dismantle: { - id: "tauceti-dismantle", - title() { - return loc("tau_home_dismantle"); - }, - desc() { - return loc("tau_home_dismantle"); - }, - reqs: { tau_home: 1 }, - grant: ["tau_home", 2], - path: ["truepath"], - queue_complete() { - return global.tech.tau_home >= 2 ? 0 : 1; - }, - cost: { - Money() { - return 1e8; - } - }, - effect() { - let explorer = "Explorer"; - if (global.space.hasOwnProperty("shipyard") && global.space.shipyard.hasOwnProperty("ships")) { - let shipId = global.space.shipyard.ships.findIndex((x) => x.location === "tauceti" && x.class === "explorer"); - if (shipId !== -1) { - explorer = global.space.shipyard.ships[shipId].name; - } - } - return loc("tau_home_dismantle_effect", [explorer]); - }, - action() { - let shipId = -1; - if (global.space.hasOwnProperty("shipyard") && global.space.shipyard.hasOwnProperty("ships")) { - shipId = global.space.shipyard.ships.findIndex((x) => x.location === "tauceti" && x.class === "explorer"); - } - if (shipId >= 0 && payCosts($(this)[0])) { - global.space.shipyard.ships.splice(shipId, 1); - incrementStruct("orbital_station", "tauceti"); - incrementStruct("colony", "tauceti"); - incrementStruct("mining_pit", "tauceti"); - global.civic.pit_miner.display = true; - global.resource.Materials.display = true; - if (powerOnNewStruct($(tauCetiModules.tau_home.orbital_station)[0])) { - global.tauceti.colony.on++; - global.tauceti.mining_pit.on++; - let hiredMax = $(tauCetiModules.tau_home.mining_pit)[0].workers(); - global.civic.pit_miner.max += hiredMax; - let hired = Math.min(hiredMax, global.civic[global.civic.d_job].workers); - global.civic[global.civic.d_job].workers -= hired; - global.civic.pit_miner.workers += hired; - } - drawShips(); - return true; - } - return false; - } - }, - orbital_station: { - id: "tauceti-orbital_station", - title: loc("tau_home_orbital_station"), - desc: `
${loc("tau_home_orbital_station")}
${loc("requires_power")}
`, - reqs: { tau_home: 2 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("orbital_station", offset, 8e7, 1.3, "tauceti"); - }, - Materials(offset) { - return tauEnabled() ? 0 : spaceCostMultiplier("orbital_station", offset, 5e5, 1.3, "tauceti"); - }, - Helium_3(offset) { - return tauEnabled() ? spaceCostMultiplier("orbital_station", offset, int_fuel_adjust(25e4), 1.3, "tauceti") : 0; - }, - Copper(offset) { - return tauEnabled() ? spaceCostMultiplier("orbital_station", offset, 125e4, 1.3, "tauceti") : 0; - }, - Adamantite(offset) { - return tauEnabled() ? spaceCostMultiplier("orbital_station", offset, 9e5, 1.3, "tauceti") : 0; - } - }, - effect() { - let helium = spatialReasoning(15e3); - let fuel = +int_fuel_adjust($(this)[0].support_fuel().a).toFixed(1); - let desc = `
${loc("space_red_spaceport_effect1", [loc("tau_planet", [races[global.race.species].home]), $(this)[0].support()])}
`; - desc += `
${loc("plus_max_resource", [helium.toLocaleString(), global.resource.Helium_3.name])}
`; - if (global.race.universe === "evil" && (global.race["lone_survivor"] || global.tech["isolation"])) { - desc += `
${loc("plus_max_resource", [1, global.resource.Authority.name])}
`; - } - desc += `
${loc("spend_power", [fuel, global.resource[$(this)[0].support_fuel().r].name, $(this)[0].powered()])}
`; - return desc; - }, - support_fuel() { - return { r: "Helium_3", a: global.tech["isolation"] ? global.race["lone_survivor"] ? 5 : 25 : 400 }; - }, - support() { - return 3; - }, - powered() { - return powerCostMod(global.tech["isolation"] ? global.race["lone_survivor"] ? 4 : 6 : 30); - }, - refresh: true, - action() { - if (payCosts($(this)[0])) { - incrementStruct("orbital_station", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, support: 0, s_max: 0 }, - p: ["orbital_station", "tauceti"] - }; - } - }, - colony: { - id: "tauceti-colony", - title: loc("tau_home_colony"), - desc() { - return `
${loc("tau_home_colony_desc", [races[global.race.species].home])}
${loc("requires_power_support_combo", [races[global.race.species].home, global.resource.Food.name])}
`; - }, - reqs: { tau_home: 2 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("colony", offset, 1575e4, 1.225, "tauceti"); - }, - Materials(offset) { - return tauEnabled() ? 0 : spaceCostMultiplier("colony", offset, 65e4, 1.225, "tauceti"); - }, - Furs(offset) { - return tauEnabled() ? spaceCostMultiplier("colony", offset, 72e4, 1.225, "tauceti") : 0; - }, - Graphene(offset) { - return tauEnabled() ? spaceCostMultiplier("colony", offset, 485e3, 1.225, "tauceti") : 0; - }, - Brick(offset) { - return tauEnabled() ? spaceCostMultiplier("colony", offset, wom_recycle(88e4), 1.225, "tauceti") : 0; - } - }, - effect() { - let pop = $(this)[0].citizens(); - let containers = global.tech["isolation"] ? 900 : 250; - let fuel = +$(this)[0].support_fuel().a.toFixed(1); - let desc = `
${loc("tau_new_support", [$(this)[0].support(), races[global.race.species].home])}
`; - if (!global.race["lone_survivor"]) { - desc = desc + `
${loc("plus_max_citizens", [pop])}
`; - } - if (global.tech["isolation"]) { - let vault = bank_vault() * 25; - vault = spatialReasoning(vault); - vault = (+vault.toFixed(0)).toLocaleString(); - desc += `
${loc("plus_max_resource", [`$${vault}`, global.resource.Money.name])}
`; - } - desc += `
${loc("tau_home_colony_effect", [50, races[global.race.species].home])}
`; - if (global.tech["isolation"]) { - let gasVal = govActive("gaslighter", 0); - let mVal = ((gasVal || 0) + (global.tech.broadcast || 0)) * 2; - desc += `
${loc("space_red_vr_center_effect1", [mVal])}
`; - } - desc += `
${loc("plus_max_resource", [containers, global.resource.Crates.name])}
${loc("plus_max_resource", [containers, global.resource.Containers.name])}
`; - if (global.race.universe === "evil" && (global.race["lone_survivor"] || global.tech["isolation"])) { - desc += `
${loc("plus_resource", [5, global.resource.Authority.name])}
`; - } - if (global.race["lone_survivor"]) { - desc += `
${loc("gain", [-fuel, global.resource[$(this)[0].support_fuel().r].name])}
`; - } else { - desc += `
${loc("spend", [fuel, global.resource[$(this)[0].support_fuel().r].name])}
`; - } - return desc; - }, - s_type: "tau_home", - support() { - return -2; - }, - support_fuel() { - return { r: "Food", a: global.tech["isolation"] ? global.race["lone_survivor"] ? -2 : 75 : 1e3 }; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("colony", "tauceti"); - powerOnNewStruct($(this)[0]); - if (!global.resource.Containers.display) { - unlockContainers(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["colony", "tauceti"] - }; - }, - citizens() { - let pop = global.tech["isolation"] ? 8 : 5; - if (global.race["high_pop"]) { - pop *= traits.high_pop.vars()[0]; - } - return global.race["lone_survivor"] ? 0 : pop; - } - }, - tau_housing: { - id: "tauceti-tau_housing", - title() { - return housingLabel("small"); - }, - desc() { - return $(this)[0].citizens() === 1 ? loc("city_basic_housing_desc") : loc("city_basic_housing_desc_plural", [$(this)[0].citizens()]); - }, - category: "residential", - reqs: { housing: 1, isolation: 1 }, - condition() { - return global.race["lone_survivor"] ? false : true; - }, - cost: { - Money(offset) { - return spaceCostMultiplier("tau_housing", offset, 15e4, 1.15, "tauceti"); - }, - Lumber(offset) { - return global.race["kindling_kindred"] || global.race["smoldering"] ? 0 : spaceCostMultiplier("tau_housing", offset, 125e3, 1.25, "tauceti"); - }, - Stone(offset) { - return global.race["kindling_kindred"] ? spaceCostMultiplier("tau_housing", offset, 125e3, 1.25, "tauceti") : 0; - }, - Chrysotile(offset) { - return global.race["smoldering"] ? spaceCostMultiplier("tau_housing", offset, 5e4, 1.25, "tauceti") : 0; - }, - Horseshoe() { - return global.race["hooved"] ? 1 : 0; - } - }, - effect() { - let pop = $(this)[0].citizens(); - return global.race["sappy"] ? `
${loc("plus_max_resource", [pop, loc("citizen")])}
${loc("city_grove_effect", [2.5])}
` : loc("plus_max_resource", [pop, loc("citizen")]); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("tau_housing", "tauceti"); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["tau_housing", "tauceti"] - }; - }, - citizens() { - let pop = 1; - if (global.race["high_pop"]) { - pop *= traits.high_pop.vars()[0]; - } - return pop; - } - }, - captive_housing: buildTemplate(`captive_housing`, "tauceti"), - pylon: { - id: "tauceti-pylon", - title: loc("tau_home_pylon"), - desc: loc("tau_home_pylon"), - reqs: { magic: 2 }, - condition() { - return global.tech["isolation"] && global.tauceti.hasOwnProperty("pylon") ? true : false; - }, - cost: { - Money(offset) { - return spaceCostMultiplier("pylon", offset, 50, 1.48, "tauceti"); - }, - Stone(offset) { - return spaceCostMultiplier("pylon", offset, 100, 1.42, "tauceti"); - }, - Crystal(offset) { - return spaceCostMultiplier("pylon", offset, 8, 1.42, "tauceti") - 3; - } - }, - effect() { - let max = spatialReasoning(2); - let mana = +(0.0125 * darkEffect("magic")).toFixed(3); - return `
${loc("gain", [mana, global.resource.Mana.name])}
${loc("plus_max_resource", [max, global.resource.Mana.name])}
`; - }, - special() { - return global.tech["magic"] && global.tech.magic >= 3 ? true : false; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("pylon", "tauceti"); - global.resource.Mana.max += spatialReasoning(2); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["pylon", "tauceti"] - }; - } - }, - cloning_facility: { - id: `tauceti-cloning_facility`, - title: loc("tau_home_cloning"), - desc() { - return loc("tau_home_cloning_desc", [races[global.race.species].name]); - }, - category: "military", - reqs: { cloning: 1 }, - path: ["truepath"], - queue_complete() { - return global.resource[global.race.species].max - global.resource[global.race.species].amount; - }, - cost: { - Money(offset) { - return global["resource"][global.race.species].amount ? spaceCostMultiplier("citizen", offset, Math.round((global.race["high_pop"] ? 1e5 : 125e3) / jobScale(1)), global.race["high_pop"] ? 1.01 : 1.02, "tauceti", global.race["high_pop"] ? 1.003 : 1.005) : 0; - }, - Copper(offset) { - return !global.race["artifical"] || global.race["deconstructor"] ? 0 : global["resource"][global.race.species].amount >= 5 ? spaceCostMultiplier("citizen", offset, Math.round(50 / jobScale(1)), 1.01, "tauceti", global.race["high_pop"] ? 1.0032 : 1.005) : 0; - }, - Aluminium(offset) { - return !global.race["artifical"] || global.race["deconstructor"] ? 0 : global["resource"][global.race.species].amount >= 5 ? spaceCostMultiplier("citizen", offset, Math.round(50 / jobScale(1)), 1.01, "tauceti", global.race["high_pop"] ? 1.0032 : 1.005) : 0; - }, - Nanite(offset) { - return global.race["deconstructor"] ? global["resource"][global.race.species].amount >= 3 ? spaceCostMultiplier("citizen", offset, Math.round(500 / jobScale(1)), 1.01, "tauceti", global.race["high_pop"] ? 1.0032 : 1.005) : 0 : 0; - } - }, - effect() { - let warn = ""; - if (global["resource"][global.race.species].max === global["resource"][global.race.species].amount) { - warn = `
${loc("city_assembly_effect_warn")}
`; - } - return `
${loc("tau_home_cloning_effect", [races[global.race.species].name])}
${warn}`; - }, - action() { - if (global["resource"][global.race.species].max > global["resource"][global.race.species].amount && payCosts($(this)[0])) { - global["resource"][global.race.species].amount++; - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["cloning_facility", "tauceti"] - }; - } - }, - horseshoe: buildTemplate(`horseshoe`, "tauceti"), - bonfire: buildTemplate(`bonfire`, "tauceti"), - firework: buildTemplate(`firework`, "tauceti"), - assembly: buildTemplate(`assembly`, "tauceti"), - nanite_factory: buildTemplate(`nanite_factory`, "tauceti"), - tau_farm: { - id: "tauceti-tau_farm", - title: loc("tau_home_tau_farm"), - desc() { - return `
${loc("tau_home_tau_farm")}
${loc("requires_power")}
`; - }, - reqs: { tau_home: 7 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("tau_farm", offset, 135e6, 1.25, "tauceti"); - }, - Stone(offset) { - return spaceCostMultiplier("tau_farm", offset, 921e4, 1.25, "tauceti"); - }, - Steel(offset) { - return spaceCostMultiplier("tau_farm", offset, 6295e3, 1.25, "tauceti"); - }, - Water(offset) { - return spaceCostMultiplier("tau_farm", offset, 1e4, 1.25, "tauceti"); - } - }, - effect() { - let desc = `
${loc("space_red_spaceport_effect1", [loc("tau_planet", [races[global.race.species].home]), $(this)[0].support()])}
`; - desc = desc + `
${loc("produce", [+production("tau_farm", "food").toFixed(2), global.resource.Food.name])}
`; - if (!global.race["kindling_kindred"] && !global.race["smoldering"]) { - desc = desc + `
${loc("produce", [+production("tau_farm", "lumber").toFixed(2), global.resource.Lumber.name])}
`; - } - if (global.tech["isolation"]) { - let water = +production("tau_farm", "water").toFixed(2); - desc = desc + `
${loc("produce", [water, global.resource.Water.name])}
`; - if (global.race["artifical"]) { - let sig_cap = spatialReasoning(350); - desc = desc + `
${loc("city_transmitter_effect", [sig_cap])}
`; - } - } - desc = desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - support() { - return 1; - }, - powered() { - return powerCostMod(global.tech["isolation"] ? 1 : 4); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("tau_farm", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["tau_farm", "tauceti"] - }; - } - }, - mining_pit: { - id: "tauceti-mining_pit", - title: loc("tau_home_mining_pit"), - desc() { - return `
${loc("tau_home_mining_pit")}
${loc("space_support", [races[global.race.species].home])}
`; - }, - reqs: { tau_home: 2 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("mining_pit", offset, 425e4, 1.225, "tauceti"); - }, - Materials(offset) { - return tauEnabled() ? 0 : spaceCostMultiplier("mining_pit", offset, 35e4, 1.225, "tauceti"); - }, - Lumber(offset) { - return tauEnabled() ? spaceCostMultiplier("mining_pit", offset, 235e4, 1.225, "tauceti") : 0; - }, - Iron(offset) { - return tauEnabled() ? spaceCostMultiplier("mining_pit", offset, 835e3, 1.225, "tauceti") : 0; - } - }, - effect() { - let desc = `
${loc("tau_new_support", [$(this)[0].support(), races[global.race.species].home])}
`; - desc = desc + `
${loc("plus_max_resource", [$(this)[0].workers(), loc("job_pit_miner")])}
`; - if (!tauEnabled()) { - desc = desc + `
${loc("plus_max_resource", [1e6, loc("resource_Materials_name")])}
`; - desc = desc + `
${loc("tau_home_mining_pit_effect", [global.resource.Materials.name])}
`; - } else { - if (global.tech["isolation"]) { - if (global.race["lone_survivor"]) { - let res_list = [global.resource.Bolognium.name, global.resource.Adamantite.name, global.resource.Stone.name, global.resource.Copper.name, global.resource.Iron.name, global.resource.Aluminium.name, global.resource.Coal.name]; - if (global.race["smoldering"]) { - res_list.push(global.resource.Chrysotile.name); - desc = desc + `
${loc("tau_home_mining_pit_effect2cs", res_list)}
`; - } else { - desc = desc + `
${loc("tau_home_mining_pit_effect2c", res_list)}
`; - } - } else { - let res_list = [global.resource.Bolognium.name, global.resource.Adamantite.name, global.resource.Stone.name, global.resource.Copper.name, global.resource.Coal.name]; - if (global.race["smoldering"]) { - res_list.push(global.resource.Chrysotile.name); - desc = desc + `
${loc("tau_home_mining_pit_effect2bs", res_list)}
`; - } else { - desc = desc + `
${loc("tau_home_mining_pit_effect2b", res_list)}
`; - } - } - desc = desc + `
${loc("production", [8, global.resource.Cement.name])}
`; - } else { - let res_list = [global.resource.Bolognium.name, global.resource.Adamantite.name, global.resource.Stone.name]; - if (global.race["smoldering"]) { - res_list.push(global.resource.Chrysotile.name); - desc = desc + `
${loc("tau_home_mining_pit_effect2s", res_list)}
`; - } else { - desc = desc + `
${loc("tau_home_mining_pit_effect2", res_list)}
`; - } - } - } - return desc; - }, - s_type: "tau_home", - support() { - return -1; - }, - powered() { - return 0; - }, - workers() { - return jobScale(global.tech["isolation"] ? 6 : 8); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("mining_pit", "tauceti"); - if (powerOnNewStruct($(this)[0])) { - let hiredMax = $(this)[0].workers(); - global.civic.pit_miner.max += hiredMax; - let hired = Math.min(hiredMax, global.civic[global.civic.d_job].workers); - global.civic[global.civic.d_job].workers -= hired; - global.civic.pit_miner.workers += hired; - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["mining_pit", "tauceti"] - }; - } - }, - excavate: { - id: "tauceti-excavate", - title: loc("tau_home_excavate"), - desc() { - return `
${loc("tau_home_excavate")}
`; - }, - reqs: { tau_home: 2 }, - grant: ["tau_home", 3], - path: ["truepath"], - cost: { - Money(o) { - return 165e7; - }, - Materials(o) { - return 75e4; - } - }, - effect() { - return loc("tau_home_excavate_effect"); - }, - action() { - if (payCosts($(this)[0])) { - messageQueue(loc("tau_home_excavate_msg"), "info", false, ["progress"]); - return true; - } - return false; - } - }, - alien_outpost: { - id: "tauceti-alien_outpost", - title: loc("tech_alien_outpost"), - desc() { - return `
${loc("tech_alien_outpost")}
${loc("requires_power")}
`; - }, - reqs: { tau_home: 4 }, - path: ["truepath"], - cost: {}, - queue_complete() { - return 0; - }, - effect() { - let desc = `
${loc("plus_max_resource", ["20%", global.resource.Knowledge.name])}
`; - if (global.tech["isolation"]) { - desc = desc + `
${loc("plus_max_resource", [(global.race["lone_survivor"] ? 35e5 : 65e5).toLocaleString(), global.resource.Knowledge.name])}
`; - desc = desc + `
${loc("plus_max_resource", [2e5.toLocaleString(), global.resource.Cipher.name])}
`; - desc = desc + `
${loc(`space_lander_effect3`, [production("alien_outpost"), global.resource.Cipher.name])}
`; - } - if (global.tech["outpost_boost"]) { - desc = desc + `
${loc("tech_alien_outpost_effect2")}
`; - } - if (global.race["lone_survivor"]) { - desc = desc + `
${loc("city_wardenclyffe_effect1", [jobScale(1), global.civic.professor.name])}
`; - } - desc = desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - powered() { - return powerCostMod(global.tech["isolation"] ? global.race["lone_survivor"] ? 8 : 25 : 100); - }, - special() { - return global.tech["replicator"] ? true : false; - }, - action() { - return false; - }, - struct() { - return { - d: { count: 1, on: 0 }, - p: ["alien_outpost", "tauceti"] - }; - } - }, - jump_gate: { - id: "tauceti-jump_gate", - title: loc("tau_jump_gate"), - desc(wiki) { - if (!global.tauceti.hasOwnProperty("jump_gate") || global.tauceti.jump_gate.count < 100 || wiki) { - return `
${loc("tau_jump_gate")}
${loc("requires_segments", [100])}
`; - } else { - return `
${loc("tau_jump_gate")}
`; - } - }, - reqs: { tauceti: 3 }, - condition() { - return global.tech["isolation"] ? 0 : 1; - }, - path: ["truepath"], - queue_size: 10, - queue_complete() { - return 100 - global.tauceti.jump_gate.count; - }, - cost: { - Money(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("jump_gate") ? global.tauceti.jump_gate.count : 0) < 100 ? 1e6 : 0; - }, - Materials(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("jump_gate") ? global.tauceti.jump_gate.count : 0) < 100 ? 12500 : 0; - } - }, - effect(wiki) { - let count = (wiki?.count ?? 0) + (global.tauceti.hasOwnProperty("jump_gate") ? global.tauceti.jump_gate.count : 0); - if (count < 100) { - let remain = 100 - count; - return `
${loc("tau_jump_gate_effect")}
${loc("space_dwarf_collider_effect2", [remain])}
`; - } else { - return loc("tau_jump_gate_effect"); - } - }, - action() { - if (payCosts($(this)[0])) { - if (global.tauceti.jump_gate.count < 100) { - incrementStruct("jump_gate", "tauceti"); - return true; - } - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["jump_gate", "tauceti"] - }; - } - }, - fusion_generator: { - id: "tauceti-fusion_generator", - title: loc("tech_fusion_generator"), - desc() { - return `
${loc("tech_fusion_generator")}
${loc("requires_res", [global.resource.Helium_3.name])}
`; - }, - reqs: { tau_home: 6 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("fusion_generator", offset, 188e6, 1.25, "tauceti"); - }, - Iridium(offset) { - return spaceCostMultiplier("fusion_generator", offset, 555e4, 1.25, "tauceti"); - }, - Stanene(offset) { - return spaceCostMultiplier("fusion_generator", offset, 7003500, 1.25, "tauceti"); - }, - Sheet_Metal(offset) { - return spaceCostMultiplier("fusion_generator", offset, wom_recycle(95e3), 1.25, "tauceti"); - } - }, - effect() { - let fuel = +int_fuel_adjust($(this)[0].p_fuel().a).toFixed(1); - let desc = `
${loc("space_dwarf_reactor_effect1", [-$(this)[0].powered()])}
`; - if (global.race["lone_survivor"]) { - desc = desc + `
${loc("gain", [-fuel, global.resource[$(this)[0].p_fuel().r].name])}
`; - } else { - desc = desc + `
${loc("spend", [fuel, global.resource[$(this)[0].p_fuel().r].name])}
`; - } - return desc; - }, - p_fuel() { - return { r: "Helium_3", a: global.tech["isolation"] ? global.race["lone_survivor"] ? -15 : 75 : 500 }; - }, - powered() { - return powerModifier(-32); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("fusion_generator", "tauceti"); - global.tauceti.fusion_generator.on++; - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["fusion_generator", "tauceti"] - }; - } - }, - repository: { - id: "tauceti-repository", - title: loc("tech_repository"), - desc: loc("tech_repository"), - reqs: { tau_home: 5 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("repository", offset, 1028e4, 1.28, "tauceti"); - }, - Iron(offset) { - return spaceCostMultiplier("repository", offset, 18e5, 1.28, "tauceti"); - }, - Cement(offset) { - return spaceCostMultiplier("repository", offset, 15e5, 1.28, "tauceti"); - }, - Neutronium(offset) { - return spaceCostMultiplier("repository", offset, 215e3, 1.28, "tauceti"); - } - }, - wide: true, - res() { - let res = [ - "Lumber", - "Stone", - "Furs", - "Copper", - "Iron", - "Aluminium", - "Cement", - "Coal", - "Steel", - "Titanium", - "Crystal", - "Alloy", - "Polymer", - "Iridium", - "Chrysotile", - "Nano_Tube", - "Neutronium", - "Adamantite", - "Unobtainium" - ]; - if (global.tech["isolation"]) { - res.push("Oil"); - res.push("Helium_3"); - res.push("Uranium"); - res.push("Water"); - } - return res; - }, - val(res) { - switch (res) { - case "Lumber": - return 3e4; - case "Stone": - return 3e4; - case "Chrysotile": - return 3e4; - case "Crystal": - return 10; - case "Furs": - return 17e3; - case "Copper": - return 15200; - case "Iron": - return 14e3; - case "Aluminium": - return 12800; - case "Cement": - return 11200; - case "Coal": - return 4800; - case "Steel": - return 2400; - case "Titanium": - return 1600; - case "Alloy": - return 1800; - case "Polymer": - return 1500; - case "Iridium": - return 1750; - case "Nano_Tube": - return 1200; - case "Neutronium": - return 640; - case "Adamantite": - return 720; - case "Unobtainium": - return 1e3; - case "Oil": - return 680; - case "Helium_3": - return 575; - case "Uranium": - return 125; - case "Water": - return 15; - case "Elerium": - return 3; - default: - return 0; - } - }, - effect(wiki) { - let storage = '
'; - let multiplier = tpStorageMultiplier("repository", false, wiki); - let containers = 250; - for (const res of $(this)[0].res()) { - if (global.resource[res].display) { - let val = sizeApproximation(+(spatialReasoning($(this)[0].val(res)) * multiplier).toFixed(0), 1); - storage = storage + `${loc("plus_max_resource", [val, global.resource[res].name])}`; - } - } - ; - if (global.tech["isolation"]) { - storage = storage + `${loc("plus_max_resource", [containers, global.resource.Crates.name])}${loc("plus_max_resource", [containers, global.resource.Containers.name])}`; - } - storage = storage + "
"; - return storage; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("repository", "tauceti"); - let containers = 250; - global.resource.Crates.max += containers; - global.resource.Containers.max += containers; - if (!global.resource.Containers.display) { - unlockContainers(); - } - let multiplier = tpStorageMultiplier("repository"); - for (const res of $(this)[0].res()) { - if (global.resource[res].display) { - global.resource[res].max += spatialReasoning($(this)[0].val(res)) * multiplier; - } - } - ; - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["repository", "tauceti"] - }; - } - }, - tau_factory: { - id: "tauceti-tau_factory", - title: loc("tau_home_tau_factory"), - desc() { - return `
${loc("tau_home_tau_factory")}
${loc("requires_power_support", [races[global.race.species].home])}
`; - }, - reqs: { tau_home: 8 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("tau_factory", offset, 269e6, 1.25, "tauceti"); - }, - Titanium(offset) { - return spaceCostMultiplier("tau_factory", offset, 3e6, 1.25, "tauceti"); - }, - Elerium(offset) { - return spaceCostMultiplier("tau_factory", offset, 850, 1.25, "tauceti"); - }, - Bolognium(offset) { - return spaceCostMultiplier("tau_factory", offset, 25e4, 1.25, "tauceti"); - }, - Quantium(offset) { - return spaceCostMultiplier("tau_factory", offset, wom_recycle(425e3), 1.25, "tauceti"); - } - }, - effect() { - let desc = `
${loc("tau_new_support", [$(this)[0].support(), races[global.race.species].home])}
`; - desc = desc + `
${loc("tau_home_tau_factory_effect", [$(this)[0].manufacturing()])}
`; - if (global.tech["isolation"]) { - if (!global.race["flier"]) { - desc = desc + `
${loc("plus_max_resource", [jobScale(2), loc(`job_cement_worker`)])}
`; - } - desc = desc + `
${loc("space_red_fabrication_effect1", [jobScale(5)])}
`; - } - desc = desc + `
${loc("city_crafted_mats", [global.tech["isolation"] ? 275 : 90])}
`; - desc = desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - special: true, - s_type: "tau_home", - support() { - return -1; - }, - powered() { - return powerCostMod(global.tech["isolation"] ? 2 : 5); - }, - manufacturing() { - return global.tech["isolation"] ? 5 : 3; - }, - action() { - if (payCosts($(this)[0])) { - global.civic.craftsman.display = true; - incrementStruct("tau_factory", "tauceti"); - if (powerOnNewStruct($(this)[0])) { - global.city.factory.Alloy += $(this)[0].manufacturing(); - } - return true; - } - return false; - }, - post() { - if (global.race["lone_survivor"]) { - defineIndustry(); - } - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["tau_factory", "tauceti"] - }; - } - }, - infectious_disease_lab: { - id: "tauceti-infectious_disease_lab", - title() { - return global.tech["isolation"] ? loc("tech_infectious_disease_lab_alt") : loc(global.race["artifical"] ? "tech_infectious_disease_lab_s" : "tech_infectious_disease_lab"); - }, - desc() { - return `
${$(this)[0].title()}
${loc("requires_power_support", [races[global.race.species].home])}
`; - }, - reqs: { disease: 1 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("infectious_disease_lab", offset, 1e9, 1.25, "tauceti"); - }, - Alloy(offset) { - return spaceCostMultiplier("infectious_disease_lab", offset, 325e5, 1.25, "tauceti"); - }, - Polymer(offset) { - return spaceCostMultiplier("infectious_disease_lab", offset, 5e7, 1.25, "tauceti"); - }, - Bolognium(offset) { - return spaceCostMultiplier("infectious_disease_lab", offset, 25e5, 1.25, "tauceti"); - }, - Unobtainium(offset) { - return spaceCostMultiplier("infectious_disease_lab", offset, 64e3, 1.25, "tauceti"); - } - }, - effect() { - let sci = 39616; - if (global.tech["supercollider"] && global.tech["isolation"]) { - let ratio = global.tech["tp_particles"] || global.tech["particles"] && global.tech["particles"] >= 3 ? 12.5 : 25; - sci *= global.tech["supercollider"] / ratio + 1; - } - let desc = `
${loc("tau_new_support", [$(this)[0].support(), races[global.race.species].home])}
`; - desc = desc + `
${loc("city_max_knowledge", [Math.round(sci).toLocaleString()])}
`; - if (global.tech["isolation"]) { - let elerium = spatialReasoning(375); - desc = desc + `
${loc("plus_max_resource", [elerium, global.resource.Elerium.name])}
`; - desc = desc + `
${loc("city_wardenclyffe_effect1", [jobScale(2), global.civic.professor.name])}
`; - desc = desc + `
${loc("city_wardenclyffe_effect1", [jobScale(1), global.civic.scientist.name])}
`; - desc = desc + `
${loc("space_zero_g_lab_effect", [jobScale(1)])}
`; - desc = desc + `
${loc("city_library_effect", [75])}
`; - } - if (global.tech["alien_crafting"]) { - desc = desc + `
${loc("production", [65, global.resource.Quantium.name])}
`; - } - if (global.tech["focus_cure"]) { - desc = desc + `
${loc("tau_home_disease_lab_cure", [+global.tauceti.infectious_disease_lab.cure.toFixed(1)])}
`; - if (global.race.hasOwnProperty("vax")) { - desc = desc + `
${loc("tau_home_disease_lab_vax", [+global.race.vax.toFixed(2)])}
`; - } - } - desc = desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - s_type: "tau_home", - support() { - return -1; - }, - powered() { - return powerCostMod(global.tech["isolation"] ? global.race["lone_survivor"] ? 2 : 8 : 35); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("infectious_disease_lab", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, cure: 0 }, - p: ["infectious_disease_lab", "tauceti"] - }; - }, - post() { - if (global.tech.disease === 1) { - global.tech.disease = 2; - messageQueue(loc("tau_plague4", [loc("tab_tauceti")]), "info", false, ["progress"]); - drawTech(); - } - loadFoundry(); - }, - postPower(on) { - limitCraftsmen("Quantium"); - } - }, - tauceti_casino: { - id: "tauceti-tauceti_casino", - title: loc("city_casino"), - desc: loc("city_casino"), - category: "commercial", - reqs: { gambling: 1, isolation: 1 }, - cost: { - Money(offset) { - return spaceCostMultiplier("tauceti_casino", offset, 145e4, 1.35, "tauceti"); - }, - Furs(offset) { - return spaceCostMultiplier("tauceti_casino", offset, 95e3, 1.35, "tauceti"); - }, - Cement(offset) { - return spaceCostMultiplier("tauceti_casino", offset, 12e4, 1.35, "tauceti"); - }, - Plywood(offset) { - return spaceCostMultiplier("tauceti_casino", offset, wom_recycle(55e3), 1.35, "tauceti"); - } - }, - effect() { - let pop = $(this)[0].citizens(); - let desc = global.race["lone_survivor"] ? `` : `
${loc("plus_max_resource", [pop, loc("citizen")])}
`; - desc = desc + casinoEffect(); - desc = desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - powered() { - return powerCostMod(global.race["lone_survivor"] ? 1 : 2); - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("tauceti_casino", "tauceti"); - if (global.tech["theatre"] && !global.race["joyless"]) { - global.civic.entertainer.max += jobScale(1); - global.civic.entertainer.display = true; - } - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["tauceti_casino", "tauceti"] - }; - }, - citizens() { - let gain = 1; - if (global.race["high_pop"]) { - gain *= traits.high_pop.vars()[0]; - } - return global.race["lone_survivor"] ? 0 : gain; - }, - flair: loc("city_casino_flair") - }, - tau_cultural_center: { - id: "tauceti-tau_cultural_center", - title: loc("tech_cultural_center"), - desc() { - return `
${loc("tech_cultural_center")}
${loc("space_electrolysis_req", [global.resource[$(this)[0].p_fuel().r].name])}
`; - }, - category: "commercial", - reqs: { tau_culture: 1 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("tau_cultural_center", offset, 9145e4, 1.35, "tauceti"); - }, - Copper(offset) { - return spaceCostMultiplier("tau_cultural_center", offset, 585e4, 1.35, "tauceti"); - }, - Coal(offset) { - return spaceCostMultiplier("tau_cultural_center", offset, 465e3, 1.35, "tauceti"); - }, - Polymer(offset) { - return spaceCostMultiplier("tau_cultural_center", offset, 3792e3, 1.35, "tauceti"); - } - }, - effect() { - let womling = 8; - let modifier = 1; - if (global.civic.govern.type === "corpocracy") { - modifier = 2; - } else if (global.civic.govern.type === "socialist") { - modifier = 0.8; - } - let cas = 20 * modifier; - let mon = 5 * modifier; - let bake = 15 * modifier; - let desc = `
${loc("tau_home_cultureal_effect1", [$(this)[0].p_fuel().a, global.resource[$(this)[0].p_fuel().r].name, $(this)[0].title])}
`; - desc += `
${loc("city_tourist_center_effect2", [cas, structName("casino")])}
`; - desc += `
${loc("city_tourist_center_effect2", [mon, loc(`arpa_project_monument_title`)])}
`; - desc += `
${loc("tau_home_cultureal_effect2", [womling, loc("tau_red_womlings")])}
`; - if (global.tech.tau_culture >= 2) { - desc += `
${loc("tau_home_cultureal_effect3", [bake, loc(`tau_gas2_alien_station_data2_r${global.race.tau_food_item || 0}`)])}
`; - } - desc += `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - powered() { - return powerCostMod(1); - }, - p_fuel() { - return { r: "Food", a: global.race["lone_survivor"] ? 25 : 500 }; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("tau_cultural_center", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["tau_cultural_center", "tauceti"] - }; - } - } - }, - tau_red: { - info: { - name() { - return loc("tau_planet", [planetName().red]); - }, - desc() { - return loc("tau_red", [planetName().red]); - }, - support: "orbital_platform", - extra(region) { - if (global.tech["tau_red"] && global.tech.tau_red >= 5) { - $(`#${region}`).append(`
${loc("tau_red_womling_prod")} {{ prod }}%
`); - vBind({ - el: `#${region}Womlings`, - data: global.tauceti.overseer - }); - } - } - }, - red_mission: { - id: "tauceti-red_mission", - title() { - return loc("tau_new_mission_title", [planetName().red]); - }, - desc() { - return loc("tau_new_mission_title", [planetName().red]); - }, - reqs: { tauceti: 2 }, - grant: ["tau_red", 1], - path: ["truepath"], - queue_complete() { - return global.tech.tau_red >= 1 ? 0 : 1; - }, - cost: { - Money() { - return 1e9; - } - }, - effect() { - return loc("tau_new_mission_effect", [planetName().red]); - }, - action() { - if (payCosts($(this)[0])) { - global.tauceti["settlement"] = { count: 0, on: 0 }; - messageQueue(loc("tau_red_mission_result", [planetName().red]), "info", false, ["progress"]); - return true; - } - return false; - } - }, - orbital_platform: { - id: "tauceti-orbital_platform", - title: loc("tau_red_orbital_platform"), - desc: `
${loc("tau_red_orbital_platform")}
${loc("requires_power")}
`, - reqs: { tau_red: 1, tauceti: 4 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("orbital_platform", offset, 5e7, 1.3, "tauceti"); - }, - Oil(offset) { - return tauEnabled() ? spaceCostMultiplier("orbital_platform", offset, int_fuel_adjust(wom_repulse(275e3)), 1.3, "tauceti") : 0; - }, - Aluminium(offset) { - return spaceCostMultiplier("orbital_platform", offset, 178e4, 1.3, "tauceti"); - }, - Bolognium(offset) { - return spaceCostMultiplier("orbital_platform", offset, 45e4, 1.3, "tauceti"); - } - }, - effect() { - let oil = spatialReasoning(17500); - let fuel = +int_fuel_adjust($(this)[0].support_fuel().a).toFixed(1); - let desc = `
${loc("space_red_spaceport_effect1", [loc("tau_planet", [planetName().red]), $(this)[0].support()])}
`; - desc = desc + `
${loc("plus_max_resource", [oil.toLocaleString(), global.resource.Oil.name])}
`; - desc = desc + `
${loc("spend_power", [fuel, global.resource[$(this)[0].support_fuel().r].name, $(this)[0].powered()])}
`; - return desc; - }, - support_fuel() { - return { r: global.race["lone_survivor"] ? "Helium_3" : "Oil", a: global.tech["isolation"] ? global.race["lone_survivor"] ? 8 : 32 : 125 }; - }, - support() { - let sup = global.tech["womling_logistics"] ? 2.5 : 2; - if (global.race["lone_survivor"]) { - sup *= 2; - } - return sup; - }, - powered() { - return powerCostMod(global.tech["isolation"] ? global.race["lone_survivor"] ? 2 : 3 : 18); - }, - refresh: true, - action() { - if (tauEnabled() && payCosts($(this)[0])) { - incrementStruct("orbital_platform", "tauceti"); - powerOnNewStruct($(this)[0]); - if (global.tech["tau_red"] === 1) { - global.tech["tau_red"] = 2; - messageQueue(loc("tau_red_orbital_platform_msg", [loc("tau_planet", [planetName().red]), loc("tau_planet", [races[global.race.species].home])]), "info", false, ["progress"]); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, support: 0, s_max: 0 }, - p: ["orbital_platform", "tauceti"] - }; - } - }, - contact: { - id: "tauceti-contact", - title() { - return loc("tau_red_contact"); - }, - desc() { - return loc("tau_red_contact"); - }, - reqs: { tau_red: 4 }, - grant: ["tau_red", 5], - path: ["truepath"], - queue_complete() { - return global.tech.tau_red >= 5 ? 0 : 1; - }, - cost: { - Money() { - return 6e8; - }, - Food() { - return global.race["lone_survivor"] && global.race["artifical"] ? 62e3 : 25e5; - } - }, - effect() { - return loc("tau_red_contact_effect"); - }, - action() { - if (payCosts($(this)[0])) { - global.race["womling_friend"] = 1; - defineWomlings(); - return true; - } - return false; - } - }, - introduce: { - id: "tauceti-introduce", - title() { - return loc("tau_red_introduce"); - }, - desc() { - return loc("tau_red_introduce"); - }, - reqs: { tau_red: 4 }, - grant: ["tau_red", 5], - path: ["truepath"], - queue_complete() { - return global.tech.tau_red >= 5 ? 0 : 1; - }, - cost: { - Knowledge() { - return 7e6; - } - }, - effect() { - return loc("tau_red_introduce_effect"); - }, - action() { - if (payCosts($(this)[0])) { - global.race["womling_god"] = 1; - defineWomlings(); - return true; - } - return false; - } - }, - subjugate: { - id: "tauceti-subjugate", - title() { - return loc("tau_red_subjugate"); - }, - desc() { - return loc("tau_red_subjugate"); - }, - reqs: { tau_red: 4 }, - grant: ["tau_red", 5], - path: ["truepath"], - queue_complete() { - return global.tech.tau_red >= 5 ? 0 : 1; - }, - cost: { - Money() { - return 285e7; - } - }, - effect() { - return loc("tau_red_subjugate_effect"); - }, - action() { - if (payCosts($(this)[0])) { - global.race["womling_lord"] = 1; - defineWomlings(); - return true; - } - return false; - } - }, - jeff: { - id: "tauceti-jeff", - title() { - return loc("tau_red_jeff"); - }, - desc() { - return loc("tau_red_jeff"); - }, - reqs: { tau_red: 5 }, - path: ["truepath"], - queue_complete() { - return global.tech.tau_red >= 5 ? 0 : 1; - }, - cost: {}, - effect() { - let injured = global.tauceti["overseer"] ? global.tauceti.overseer.injured : 0; - if (global.tauceti["overseer"] && global.tauceti.overseer.pop < injured) { - injured = global.tauceti.overseer.pop; - } - let desc = `
${loc("tau_red_jeff_effect1", [global.tauceti["overseer"] ? global.tauceti.overseer.pop : 0])}
`; - desc = desc + `
${loc("tau_red_jeff_effect2", [global.tauceti["overseer"] ? global.tauceti.overseer.working : 0])}
`; - desc = desc + `
${loc("tau_red_jeff_effect3", [injured])}
`; - desc = desc + `
${loc("tau_red_jeff_effect4", [global.tauceti["overseer"] ? global.tauceti.overseer.loyal : 0])}
`; - desc = desc + `
${loc("tau_red_jeff_effect5", [global.tauceti["overseer"] ? global.tauceti.overseer.morale : 0])}
`; - if (global.tech.hasOwnProperty("womling_tech")) { - desc = desc + `
${loc("tau_red_jeff_effect6", [global.tech.womling_tech])}
`; - } - desc = desc + `
${loc("job_farmer")}: ${global.tauceti["womling_farm"] ? global.tauceti.womling_farm.farmers : 0}
`; - desc = desc + `
${loc("job_miner")}: ${global.tauceti["womling_mine"] ? global.tauceti.womling_mine.miners : 0}
`; - if (global.tauceti["womling_lab"]) { - desc = desc + `
${loc("job_scientist")}: ${global.tauceti["womling_lab"] ? global.tauceti.womling_lab.scientist : 0}
`; - } - return desc; - }, - action() { - return false; - } - }, - overseer: { - id: "tauceti-overseer", - title() { - return $(this)[0].name(); - }, - desc() { - return `
${$(this)[0].name()}
${loc("space_support", [planetName().red])}
`; - }, - name() { - if (global.race["womling_lord"]) { - return loc("tau_red_overseer"); - } else if (global.race["womling_god"]) { - return loc("tau_red_womgod"); - } else { - return loc("tau_red_womally"); - } - }, - reqs: { tau_red: 5 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("overseer", offset, 6e6, 1.28, "tauceti"); - }, - Cement(offset) { - return spaceCostMultiplier("overseer", offset, 245e4, 1.28, "tauceti"); - }, - Alloy(offset) { - return global.race["womling_friend"] ? spaceCostMultiplier("overseer", offset, 185e4, 1.28, "tauceti") : 0; - }, - Neutronium(offset) { - return global.race["womling_lord"] ? spaceCostMultiplier("overseer", offset, 165e3, 1.28, "tauceti") : 0; - }, - Titanium(offset) { - return global.race["womling_god"] ? spaceCostMultiplier("overseer", offset, 225e4, 1.28, "tauceti") : 0; - } - }, - effect() { - let desc = `
${loc("tau_new_support", [$(this)[0].support(), planetName().red])}
`; - desc = desc + `
${loc("tau_red_overseer_effect", [$(this)[0].val()])}
`; - return desc; - }, - val() { - let val = 0; - if (global.race["womling_lord"]) { - val = global.stats.achieve["overlord"] && global.stats.achieve.overlord.l >= 5 ? 12 : 10; - } else if (global.race["womling_god"]) { - val = global.stats.achieve["overlord"] && global.stats.achieve.overlord.l >= 5 ? 6 : 5; - } else if (global.race["womling_friend"]) { - val = global.stats.achieve["overlord"] && global.stats.achieve.overlord.l >= 5 ? 10 : 8; - } - if (global.race["lone_survivor"]) { - val *= 2; - } - return val; - }, - s_type: "tau_red", - support() { - return -1; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("overseer", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, pop: 0, working: 0, injured: 0, morale: 0, loyal: 0, prod: 0 }, - p: ["overseer", "tauceti"] - }; - } - }, - womling_village: { - id: "tauceti-womling_village", - title: loc("tau_red_womling_village"), - desc() { - return `
${loc("tau_red_womling_village")}
${loc("space_support", [planetName().red])}
`; - }, - reqs: { tau_red: 5 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("womling_village", offset, 1e7, 1.28, "tauceti"); - }, - Stone(offset) { - return spaceCostMultiplier("womling_village", offset, 225e4, 1.28, "tauceti"); - }, - Plywood(offset) { - return spaceCostMultiplier("womling_village", offset, wom_recycle(125e4), 1.28, "tauceti"); - }, - Wrought_Iron(offset) { - return spaceCostMultiplier("womling_village", offset, wom_recycle(4e5), 1.28, "tauceti"); - } - }, - effect() { - let pop = global.tech["womling_pop"] && global.tech.womling_pop >= 2 ? 6 : 5; - let desc = `
${loc("tau_new_support", [$(this)[0].support(), planetName().red])}
`; - desc = desc + `
${loc("tau_red_womling_village_effect", [pop])}
`; - if (global.tech["tau_junksale"]) { - desc = desc + `
${loc("tau_red_womling_village_effect2", [40, loc(`tau_gas2_alien_station_data4_r${global.race.tau_junk_item || 0}`)])}
`; - } - return desc; - }, - s_type: "tau_red", - support() { - return -1; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("womling_village", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 1, on: 1 }, - p: ["womling_village", "tauceti"] - }; - } - }, - womling_farm: { - id: "tauceti-womling_farm", - title: loc("tau_red_womling_farm"), - desc() { - return `
${loc("tau_red_womling_farm")}
${loc("space_support", [planetName().red])}
`; - }, - reqs: { tau_red: 5 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("womling_farm", offset, 24e6, 1.28, "tauceti"); - }, - Iron(offset) { - return spaceCostMultiplier("womling_farm", offset, 95e5, 1.28, "tauceti"); - }, - Water(offset) { - return spaceCostMultiplier("womling_farm", offset, 5e3, 1.28, "tauceti"); - } - }, - effect() { - let food = global.tech["womling_pop"] ? 16 : 12; - if (global.tech["womling_gene"]) { - food += 4; - } - let farmers = global.tauceti.hasOwnProperty("womling_farm") ? global.tauceti.womling_farm.farmers : 0; - let desc = `
${loc("tau_new_support", [$(this)[0].support(), planetName().red])}
`; - desc = desc + `
${loc("tau_red_womling_farm_effect", [food])}
`; - desc = desc + `
${loc("tau_red_womling_employ", [2])}
`; - if (global.tech["isolation"]) { - desc = desc + `
${loc("tau_red_womling_generate", [global.resource.Furs.name])}
`; - } - desc = desc + `
${loc("tau_red_womling_farm_effect2", [food / 2 * farmers])}
`; - return desc; - }, - s_type: "tau_red", - support() { - return -1; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("womling_farm", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 1, on: 1, farmers: 0 }, - p: ["womling_farm", "tauceti"] - }; - } - }, - womling_mine: { - id: "tauceti-womling_mine", - title: loc("tau_red_womling_mine"), - desc() { - return `
${loc("tau_red_womling_mine")}
${loc("space_support", [planetName().red])}
`; - }, - reqs: { tau_red: 5 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("womling_mine", offset, 125e5, 1.28, "tauceti"); - }, - Lumber(offset) { - return spaceCostMultiplier("womling_mine", offset, 128e5, 1.28, "tauceti"); - }, - Steel(offset) { - return spaceCostMultiplier("womling_mine", offset, 45e5, 1.28, "tauceti"); - } - }, - effect() { - let desc = `
${loc("tau_new_support", [$(this)[0].support(), planetName().red])}
`; - if (global.tech["isolation"]) { - if (global.race["lone_survivor"]) { - desc = desc + `
${loc("tau_red_womling_mine_effect_c", [ - global.resource.Unobtainium.name, - global.resource.Uranium.name, - global.resource.Titanium.name, - global.resource.Iron.name, - global.resource.Copper.name, - global.resource.Aluminium.name, - global.resource.Neutronium.name, - global.resource.Iridium.name - ])}
`; - } else { - desc = desc + `
${loc("tau_red_womling_mine_effect_b", [global.resource.Unobtainium.name, global.resource.Uranium.name, global.resource.Titanium.name])}
`; - } - } else { - desc = desc + `
${loc("tau_red_womling_mine_effect_a", [global.resource.Unobtainium.name])}
`; - } - desc = desc + `
${loc("tau_red_womling_employ", [6])}
`; - return desc; - }, - s_type: "tau_red", - support() { - return -1; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("womling_mine", "tauceti"); - global.resource.Unobtainium.display = true; - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, miners: 0 }, - p: ["womling_mine", "tauceti"] - }; - }, - flair() { - return loc("tau_red_womling_mine_flair"); - } - }, - womling_fun: { - id: "tauceti-womling_fun", - title() { - return $(this)[0].name(); - }, - desc() { - return `
${$(this)[0].name()}
${loc("space_support", [planetName().red])}
`; - }, - name() { - if (global.race["womling_lord"]) { - return loc("tau_red_womling_fun1"); - } else if (global.race["womling_god"]) { - return loc("tau_red_womling_fun2"); - } else { - return loc("tau_red_womling_fun3"); - } - }, - reqs: { tau_red: 6 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("womling_fun", offset, 38e5, 1.28, "tauceti"); - }, - Food(offset) { - return global.race["womling_friend"] ? spaceCostMultiplier("womling_fun", offset, 175e3, 1.28, "tauceti") : 0; - }, - Lumber(offset) { - return spaceCostMultiplier("womling_fun", offset, 5e5, 1.28, "tauceti"); - }, - Stone(offset) { - return spaceCostMultiplier("womling_fun", offset, 5e5, 1.28, "tauceti"); - }, - Furs(offset) { - return global.race["womling_lord"] || global.race["womling_god"] ? spaceCostMultiplier("womling_fun", offset, 835e3, 1.28, "tauceti") : 0; - }, - Copper(offset) { - return global.race["womling_lord"] ? spaceCostMultiplier("womling_fun", offset, 1125e3, 1.28, "tauceti") : 0; - }, - Alloy(offset) { - return global.race["womling_god"] ? spaceCostMultiplier("womling_fun", offset, 656e3, 1.28, "tauceti") : 0; - }, - Water(offset) { - return global.race["womling_friend"] ? spaceCostMultiplier("womling_fun", offset, 3500, 1.28, "tauceti") : 0; - } - }, - effect() { - let desc = `
${loc("tau_new_support", [$(this)[0].support(), planetName().red])}
`; - desc = desc + `
${loc("tau_red_womling_fun_effect", [$(this)[0].val()])}
`; - return desc; - }, - val() { - let val = 0; - if (global.race["womling_lord"]) { - val = global.stats.achieve["overlord"] && global.stats.achieve.overlord.l >= 5 ? 24 : 20; - } else if (global.race["womling_god"]) { - val = global.stats.achieve["overlord"] && global.stats.achieve.overlord.l >= 5 ? 12 : 10; - } else if (global.race["womling_friend"]) { - val = global.stats.achieve["overlord"] && global.stats.achieve.overlord.l >= 5 ? 18 : 15; - } - if (global.race["lone_survivor"]) { - val *= 2; - } - return val; - }, - s_type: "tau_red", - support() { - return -1; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("womling_fun", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["womling_fun", "tauceti"] - }; - } - }, - womling_lab: { - id: "tauceti-womling_lab", - title: loc("interstellar_laboratory_title"), - desc() { - return `
${loc("interstellar_laboratory_title")}
${loc("space_support", [planetName().red])}
`; - }, - reqs: { tau_red: 7 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("womling_lab", offset, 65e6, 1.28, "tauceti"); - }, - Elerium(offset) { - return spaceCostMultiplier("womling_lab", offset, 1200, 1.28, "tauceti"); - }, - Orichalcum(offset) { - return spaceCostMultiplier("womling_lab", offset, 25e5, 1.28, "tauceti"); - }, - Unobtainium(offset) { - return spaceCostMultiplier("womling_lab", offset, 1e4, 1.28, "tauceti"); - }, - Quantium(offset) { - return spaceCostMultiplier("womling_lab", offset, wom_recycle(95e3), 1.28, "tauceti"); - } - }, - effect() { - let overseer = global.tauceti.hasOwnProperty("overseer") ? global.tauceti.overseer.prod : 100; - let know = Math.round(25e3 * overseer / 100); - let desc = `
${loc("tau_new_support", [$(this)[0].support(), planetName().red])}
`; - desc = desc + `
${loc("tau_red_womling_lab_effect", [know])}
`; - desc = desc + `
${loc("tau_red_womling_employ_single", [1])}
`; - return desc; - }, - s_type: "tau_red", - support() { - return -1; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("womling_lab", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, scientist: 0, tech: 0 }, - p: ["womling_lab", "tauceti"] - }; - } - } - }, - tau_gas: { - info: { - name(n, k) { - let key = k || "gas_name"; - let ns = key === "gas_name" ? 0 : 1; - if (n || global.race[key]) { - switch (n || global.race[key]) { - case 1: { - let tracked = global.race.universe === "antimatter" ? "plasmid" : "antiplasmid"; - switch (Math.round(global.stats[tracked] + ns) % 3) { - case 1: - return loc("tau_planet", [planetName().gas]); - case 2: - return loc("tau_gas_title0a", [planetName().gas]); - default: - return loc("tau_gas_title0b", [planetName().gas]); - } - } - case 2: { - switch (Math.round(global.stats.reset + ns) % 3) { - case 1: - return loc("tau_gas_title1a"); - case 2: - return loc("tau_gas_title1b"); - default: - return loc("tau_gas_title1c"); - } - } - case 3: { - switch (Math.round(global.stats.mad + ns) % 3) { - case 1: - return loc("tau_gas_title2a"); - case 2: - return loc("tau_gas_title2b"); - default: - return loc("tau_gas_title2c"); - } - } - case 4: { - switch (Math.round(global.stats.bioseed + ns) % 3) { - case 1: - return loc("tau_gas_title3a", [races[global.race.gods].solar.gas]); - case 2: - return loc("tau_gas_title3b", [races[global.race.old_gods].name]); - default: - return loc("tau_gas_title3c", [races[global.race.species].name]); - } - } - case 5: { - switch (Math.round(global.stats.portals + ns) % 3) { - case 1: - return loc("tau_gas_title4a", [planetName().gas]); - case 2: - return loc("tau_gas_title4b", [flib("reverse", planetName().gas)]); - default: - return loc("tau_gas_title4c"); - } - } - case 6: { - switch (Math.round(global.stats.womling.friend.l + global.stats.womling.lord.l + global.stats.womling.god.l + ns) % 3) { - case 1: - return loc("tau_gas_title5a"); - case 2: - return loc("tau_gas_title5b"); - default: - return loc("tau_gas_title5c"); - } - } - case 7: { - switch (Math.round(global.stats.tdays + ns) % 3) { - case 1: - return loc("tau_gas_title6a"); - case 2: - return loc("tau_gas_title6b"); - default: - return loc("tau_gas_title6c"); - } - } - default: - return key === "gas_name" ? loc("tau_gas_title") : loc("tau_gas2_title"); - } - } - return key === "gas_name" ? loc("tau_gas_title") : loc("tau_gas2_title"); - }, - desc() { - return loc("tau_gas_desc"); - } - }, - gas_contest: { - id: "tauceti-gas_contest", - title() { - return loc("tau_gas_contest_title"); - }, - desc() { - return loc("tau_gas_contest_title"); - }, - reqs: { tauceti: 5 }, - grant: ["tau_gas", 1], - path: ["truepath"], - queue_complete() { - return global.tech.tau_gas >= 1 ? 0 : 1; - }, - cost: { - Money() { - return 1e7; - } - }, - effect() { - return global.race["lone_survivor"] ? loc("tau_gas_contest_effect_alt") : loc("tau_gas_contest_effect"); - }, - action() { - if (payCosts($(this)[0])) { - return true; - } - return false; - } - }, - refueling_station: { - id: "tauceti-refueling_station", - title() { - return loc("tau_gas_refueling_station_title"); - }, - desc() { - return `
${loc("tau_gas_refueling_station_title")}
${loc("requires_power")}
`; - }, - reqs: { tau_gas: 2 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("refueling_station", offset, 68e6, 1.28, "tauceti"); - }, - Graphene(offset) { - return spaceCostMultiplier("refueling_station", offset, 25e5, 1.28, "tauceti"); - }, - Unobtainium(offset) { - return spaceCostMultiplier("refueling_station", offset, 5500, 1.28, "tauceti"); - }, - Mythril(offset) { - return spaceCostMultiplier("refueling_station", offset, wom_recycle(6e4), 1.28, "tauceti"); - } - }, - powered() { - return powerCostMod(global.tech["isolation"] ? 2 : 5); - }, - effect() { - let helium_prod = +production("refueling_station").toFixed(2); - let helium_tank = spatialReasoning(1e4); - let desc = `
${loc("space_gas_mining_effect1", [helium_prod])}
`; - desc = desc + `
${loc("plus_max_resource", [helium_tank.toLocaleString(), global.resource.Helium_3.name])}
`; - if (global.tech["tau_whale"] >= 2) { - let oil_tank = spatialReasoning(6500); - desc = desc + `
${loc("plus_max_resource", [oil_tank.toLocaleString(), global.resource.Oil.name])}
`; - } - if (global.tech["isolation"]) { - desc = desc + `
${loc("interstellar_g_factory_effect")}
`; - } - desc = desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - special() { - return global.tech["isolation"] ? true : false; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("refueling_station", "tauceti"); - if (powerOnNewStruct($(this)[0])) { - if (global.tech["isolation"]) { - if (global.race["kindling_kindred"] || global.race["smoldering"]) { - global.space.g_factory.Oil++; - } else { - global.space.g_factory.Lumber++; - } - } - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["refueling_station", "tauceti"] - }; - }, - post() { - if (global.tech.tau_gas === 2) { - global.tech.tau_gas = 3; - defineIndustry(); - drawTech(); - } - } - }, - ore_refinery: { - id: "tauceti-ore_refinery", - title() { - return loc("tau_gas_ore_refinery_title"); - }, - desc() { - return `
${loc("tau_gas_ore_refinery_title")}
${loc("requires_power")}
`; - }, - reqs: { tau_gas: 4 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("ore_refinery", offset, 52e6, 1.28, "tauceti"); - }, - Iridium(offset) { - return spaceCostMultiplier("ore_refinery", offset, 16e5, 1.28, "tauceti"); - }, - Unobtainium(offset) { - return spaceCostMultiplier("ore_refinery", offset, 800, 1.28, "tauceti"); - }, - Sheet_Metal(offset) { - return spaceCostMultiplier("ore_refinery", offset, wom_recycle(118e3), 1.28, "tauceti"); - } - }, - powered() { - return powerCostMod(global.tech["isolation"] ? 2 : 8); - }, - smelting() { - return global.tech["isolation"] ? 12 : 4; - }, - effect() { - let ore = global.tauceti.hasOwnProperty("ore_refinery") ? global.tauceti.ore_refinery.fill : 0; - let max = global.tauceti.hasOwnProperty("ore_refinery") ? global.tauceti.ore_refinery.max : 0; - let refine = +production("ore_refinery").toFixed(2); - let desc = `
${loc("tau_gas_ore_refinery_effect", [+ore.toFixed(2)])}
`; - desc = desc + `
${loc("tau_gas_ore_refinery_effect2", [max])}
`; - desc = desc + `
${loc("tau_gas_ore_refinery_effect3", [refine])}
`; - desc = desc + `
${loc("interstellar_stellar_forge_effect3", [$(this)[0].smelting()])}
`; - desc = desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - special: true, - action() { - if (payCosts($(this)[0])) { - incrementStruct("ore_refinery", "tauceti"); - if (powerOnNewStruct($(this)[0])) { - let num_smelters = $(this)[0].smelting(); - addSmelter(num_smelters, "Steel", global.race["evil"] ? "Wood" : "Oil"); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, max: 0, fill: 0 }, - p: ["ore_refinery", "tauceti"] - }; - }, - post() { - if (global.tech.tau_roid === 3) { - global.tech.tau_roid = 4; - renderTauCeti(); - drawTech(); - } - } - }, - whaling_station: { - id: "tauceti-whaling_station", - title() { - return loc("tau_gas_whaling_station_title"); - }, - desc() { - return `
${loc("tau_gas_whaling_station_title")}
${loc("requires_power")}
`; - }, - reqs: { tau_whale: 1 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("whaling_station", offset, 72e6, 1.28, "tauceti"); - }, - Steel(offset) { - return spaceCostMultiplier("whaling_station", offset, 18e5, 1.28, "tauceti"); - }, - Polymer(offset) { - return spaceCostMultiplier("whaling_station", offset, 955e3, 1.28, "tauceti"); - }, - Orichalcum(offset) { - return spaceCostMultiplier("whaling_station", offset, 268e3, 1.28, "tauceti"); - } - }, - powered() { - return powerCostMod(global.tech["isolation"] ? 2 : 6); - }, - effect() { - let blubber = global.tauceti.hasOwnProperty("whaling_station") ? global.tauceti.whaling_station.fill : 0; - let max = global.tauceti.hasOwnProperty("whaling_station") ? global.tauceti.whaling_station.max : 0; - let refine = +production("whaling_station").toFixed(2); - let desc = `
${loc("tau_gas_whaling_station_effect", [+blubber.toFixed(2)])}
`; - desc = desc + `
${loc("tau_gas_whaling_station_effect2", [max])}
`; - desc = desc + `
${loc("tau_gas_whaling_station_effect3", [refine])}
`; - desc = desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("whaling_station", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, max: 0, fill: 0 }, - p: ["whaling_station", "tauceti"] - }; - }, - post() { - if (global.tech.tau_whale === 1) { - global.tech.tau_whale = 2; - renderTauCeti(); - } - } - }, - womling_station: { - id: "tauceti-womling_station", - title() { - return loc("tau_gas_womling_station_title"); - }, - desc() { - return `
${loc("tau_gas_womling_station_desc")}
${loc("requires_power")}
`; - }, - reqs: { womling_technicians: 1 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("womling_station", offset, 1334e5, 1.26, "tauceti"); - }, - Furs(offset) { - return spaceCostMultiplier("womling_station", offset, 3805e3, 1.26, "tauceti"); - }, - Aluminium(offset) { - return spaceCostMultiplier("womling_station", offset, 85e5, 1.26, "tauceti"); - }, - Nano_Tube(offset) { - return spaceCostMultiplier("womling_station", offset, 909e3, 1.26, "tauceti"); - } - }, - powered() { - return powerCostMod(global.tech["isolation"] ? 3 : 6); - }, - effect() { - let prod = global.tech["isolation"] ? 30 : 8; - if (global.tech["womling_gene"]) { - prod *= 1.25; - } - let desc = `
${loc("production", [prod, tauCetiModules.tau_gas.info.name()])}
`; - if (!global.race["flier"]) { - desc = desc + `
${loc("plus_max_resource", [jobScale(1), loc(`job_cement_worker`)])}
`; - } - desc = desc + `
${loc("space_red_fabrication_effect1", [jobScale(1)])}
`; - desc = desc + `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - action() { - if (payCosts($(this)[0])) { - global.civic.craftsman.display = true; - incrementStruct("womling_station", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["womling_station", "tauceti"] - }; - } - } - }, - tau_roid: { - info: { - name() { - return loc("tau_roid_title"); - }, - desc() { - return loc("tau_roid_desc"); - }, - support: "patrol_ship" - }, - roid_mission: { - id: "tauceti-roid_mission", - title() { - return loc("space_mission_title", [loc("tau_roid_title")]); - }, - desc() { - return loc("space_mission_desc", [loc("tau_roid_title")]); - }, - reqs: { tauceti: 5 }, - grant: ["tau_roid", 1], - path: ["truepath"], - queue_complete() { - return global.tech.tau_roid >= 1 ? 0 : 1; - }, - cost: { - Helium_3(offset, wiki) { - return +int_fuel_adjust(125e4, false, wiki).toFixed(0); - } - }, - effect() { - return loc("tau_roid_mission_effect", [loc("tau_roid_title")]); - }, - action() { - if (payCosts($(this)[0])) { - messageQueue(loc("tau_roid_mission_result"), "info", false, ["progress"]); - return true; - } - return false; - } - }, - patrol_ship: { - id: "tauceti-patrol_ship", - title: loc("tau_roid_patrol_ship"), - desc() { - return `
${loc("tau_roid_patrol_ship")}
${loc("requires_res", [global.resource.Helium_3.name])}
`; - }, - reqs: { tau_roid: 3 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("patrol_ship", offset, 45e6, 1.25, "tauceti"); - }, - Adamantite(offset) { - return spaceCostMultiplier("patrol_ship", offset, 18e5, 1.25, "tauceti"); - }, - Elerium(offset) { - return spaceCostMultiplier("patrol_ship", offset, 520, 1.25, "tauceti"); - }, - Stanene(offset) { - return spaceCostMultiplier("patrol_ship", offset, 2675e3, 1.25, "tauceti"); - }, - Bolognium(offset) { - return spaceCostMultiplier("patrol_ship", offset, 115e4, 1.25, "tauceti"); - } - }, - effect() { - let fuel = +int_fuel_adjust($(this)[0].support_fuel().a).toFixed(1); - let desc = `
${loc("tau_roid_patrol_ship_security", [$(this)[0].support()])}
`; - desc = desc + `
${loc("tau_roid_patrol_ship_effect")}
`; - desc = desc + `
${loc("spend", [fuel, global.resource[$(this)[0].support_fuel().r].name])}
`; - return desc; - }, - support_fuel() { - return { r: "Helium_3", a: global.tech["isolation"] ? 15 : 250 }; - }, - support() { - return 1; - }, - powered() { - return 0; - }, - refresh: true, - action() { - if (payCosts($(this)[0])) { - incrementStruct("patrol_ship", "tauceti"); - global.tauceti.patrol_ship.on++; - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, support: 0, s_max: 0 }, - p: ["patrol_ship", "tauceti"] - }; - } - }, - mining_ship: { - id: "tauceti-mining_ship", - title: loc("tau_roid_mining_ship"), - desc() { - return `
${loc("tau_roid_mining_ship")}
`; - }, - reqs: { tau_roid: 4 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("mining_ship", offset, 28e6, 1.28, "tauceti"); - }, - Uranium(offset) { - return spaceCostMultiplier("mining_ship", offset, 12500, 1.28, "tauceti"); - }, - Titanium(offset) { - return spaceCostMultiplier("mining_ship", offset, 22e5, 1.28, "tauceti"); - }, - Alloy(offset) { - return spaceCostMultiplier("mining_ship", offset, 175e4, 1.28, "tauceti"); - } - }, - effect() { - let fuel = +int_fuel_adjust($(this)[0].support_fuel().a).toFixed(1); - let mine = +production("mining_ship").toFixed(2); - let desc = `
${loc("tau_roid_mining_ship_effect", [mine])}
`; - desc = desc + `
${loc("spend", [fuel, global.resource[$(this)[0].support_fuel().r].name])}
`; - return desc; - }, - s_type: "tau_roid", - support_fuel() { - return { r: "Helium_3", a: global.tech["isolation"] ? 12 : 75 }; - }, - support() { - return -1; - }, - powered() { - return 0; - }, - special: true, - action() { - if (payCosts($(this)[0])) { - incrementStruct("mining_ship", "tauceti"); - powerOnNewStruct($(this)[0]); - if (global.tauceti.mining_ship.count === 1) { - defineIndustry(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, common: 50, uncommon: 50, rare: 50 }, - p: ["mining_ship", "tauceti"] - }; - } - }, - whaling_ship: { - id: "tauceti-whaling_ship", - title: loc("tau_roid_whaling_ship"), - desc() { - return `
${loc("tau_roid_whaling_ship")}
`; - }, - reqs: { tau_whale: 2 }, - path: ["truepath"], - cost: { - Money(offset) { - return spaceCostMultiplier("whaling_ship", offset, 35e6, 1.28, "tauceti"); - }, - Aluminium(offset) { - return spaceCostMultiplier("whaling_ship", offset, 34e5, 1.28, "tauceti"); - }, - Neutronium(offset) { - return spaceCostMultiplier("whaling_ship", offset, 168e3, 1.28, "tauceti"); - }, - Nano_Tube(offset) { - return spaceCostMultiplier("whaling_ship", offset, 8e5, 1.28, "tauceti"); - } - }, - effect() { - let fuel = +int_fuel_adjust($(this)[0].support_fuel().a).toFixed(1); - let mine = +production("whaling_ship").toFixed(2); - let desc = `
${loc("tau_roid_whaling_ship_effect", [mine])}
`; - desc = desc + `
${loc("spend", [fuel, global.resource[$(this)[0].support_fuel().r].name])}
`; - return desc; - }, - s_type: "tau_roid", - support_fuel() { - return { r: "Helium_3", a: global.tech["isolation"] ? 14 : 90 }; - }, - support() { - return -1; - }, - powered() { - return 0; - }, - action() { - if (payCosts($(this)[0])) { - incrementStruct("whaling_ship", "tauceti"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["whaling_ship", "tauceti"] - }; - } - } - }, - tau_gas2: { - info: { - name(n) { - return tauCetiModules.tau_gas.info.name(n || global.race["gas_name2"] || false, "gas_name2"); - }, - desc() { - return loc("tau_gas2_desc", [tauCetiModules.tau_gas.info.name()]); - } - }, - gas_contest2: { - id: "tauceti-gas_contest2", - title() { - return loc("tau_gas2_contest_title"); - }, - desc() { - return loc("tau_gas2_contest_title"); - }, - reqs: { tau_gas2: 1 }, - grant: ["tau_gas2", 2], - path: ["truepath"], - queue_complete() { - return global.tech.tau_gas2 >= 1 ? 0 : 1; - }, - cost: { - Money() { - return 25e6; - } - }, - effect() { - return loc("tau_gas2_contest_effect"); - }, - action() { - if (payCosts($(this)[0])) { - return true; - } - return false; - }, - flair() { - return loc("tau_gas2_contest_flair"); - } - }, - alien_station_survey: { - id: "tauceti-alien_station_survey", - title: loc("tau_gas2_alien_station"), - desc: loc("tau_gas2_alien_station"), - reqs: { tau_gas2: 3 }, - grant: ["tau_gas2", 4], - path: ["truepath"], - queue_complete() { - return global.tech.tau_gas3 >= 4 ? 0 : 1; - }, - cost: { - Money() { - return global.race["lone_survivor"] ? 15e8 : 3e9; - }, - Helium_3() { - return 5e6; - } - }, - effect() { - return loc("tau_gas2_alien_station_repair_effect", [tauCetiModules.tau_gas2.info.name()]); - }, - action() { - if (payCosts($(this)[0])) { - initStruct(tauCetiModules.tau_gas2.alien_station); - messageQueue(loc("tau_gas2_alien_station_msg", [tauCetiModules.tau_gas2.info.name()]), "info", false, ["progress"]); - return true; - } - return false; - } - }, - alien_station: { - id: "tauceti-alien_station", - title: loc("tau_gas2_alien_station"), - desc(wiki) { - if (!global.tauceti.hasOwnProperty("alien_station") || global.tauceti.alien_station.count < 100 || wiki) { - return `
${loc("tau_gas2_alien_station")}
` + (global.tauceti.hasOwnProperty("alien_station") && global.tauceti.alien_station.count >= 100 ? `
${loc("space_dwarf_reactor_desc_req")}
` : `
${loc("tau_gas2_alien_station_repair")}
`); - } else { - return `
${loc("tau_gas2_alien_station")}
`; - } - }, - reqs: { tau_gas2: 4 }, - condition() { - return global.tauceti.alien_station.count < 100 ? true : false; - }, - path: ["truepath"], - queue_size: 5, - queue_complete() { - return 100 - global.tauceti.alien_station.count; - }, - cost: { - Money(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("alien_station") ? global.tauceti.alien_station.count : 0) < 100 ? global.race["lone_survivor"] ? 12e6 : 5e7 : 0; - }, - Aluminium(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("alien_station") ? global.tauceti.alien_station.count : 0) < 100 ? global.race["lone_survivor"] ? 256e3 : 256e4 : 0; - }, - Polymer(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("alien_station") ? global.tauceti.alien_station.count : 0) < 100 ? global.race["lone_survivor"] ? 198900 : 989e3 : 0; - }, - Mythril(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("alien_station") ? global.tauceti.alien_station.count : 0) < 100 ? wom_recycle(125e3) : 0; - }, - Cipher(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("alien_station") ? global.tauceti.alien_station.count : 0) < 100 ? global.race["lone_survivor"] ? 256 : 2001 : 0; - } - }, - effect(wiki) { - let effectText = ""; - let count = (wiki?.count ?? 0) + (global.tauceti.hasOwnProperty("alien_station") ? global.tauceti.alien_station.count : 0); - if (count < 100) { - effectText += `
${loc("tau_gas2_alien_station_repaired", [count])}
`; - return effectText; - } else { - return tauCetiModules.tau_gas2.alien_space_station.effect(wiki); - } - }, - action() { - if (payCosts($(this)[0])) { - if (global.tauceti.alien_station.count < 100) { - incrementStruct("alien_station", "tauceti"); - if (global.tauceti.alien_station.count >= 100) { - global.tech.tau_gas2 = 5; - global.tauceti["alien_space_station"] = { count: 1, on: 0 }; - drawTech(); - } - return true; - } - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["alien_station", "tauceti"] - }; - }, - post() { - if (global.tauceti.hasOwnProperty("alien_space_station")) { - if (global.resource.Elerium.diff >= 10) { - global.tauceti.alien_space_station.on = 1; - } - renderTauCeti(); - } - } - }, - alien_space_station: { - id: "tauceti-alien_space_station", - title: loc("tau_gas2_alien_station"), - desc() { - return `
${loc("tau_gas2_alien_station")}
${loc("space_dwarf_reactor_desc_req")}
`; - }, - reqs: { tau_gas2: 5 }, - path: ["truepath"], - cost: {}, - queue_complete() { - return 0; - }, - special() { - return global.tech["tau_gas2"] && global.tech.tau_gas2 === 6 && (!global.tech["alien_data"] || global.tech.alien_data < 6) ? true : false; - }, - wiki: false, - effect() { - let fuel = $(this)[0].p_fuel().a; - let desc = `
${loc("space_dwarf_reactor_effect1", [-$(this)[0].powered()])}
`; - if (global.tech["tau_gas2"] && global.tech.tau_gas2 >= 6 && global.tauceti.alien_space_station.hasOwnProperty("decrypted")) { - let devisor = global.race["lone_survivor"] ? 1e5 : 25e6; - let decrypted = +(global.tauceti.alien_space_station.decrypted / devisor).toFixed(2); - if (decrypted > 100) { - decrypted = 100; - } - desc = desc + `
${loc("tau_gas2_alien_station_effect", [decrypted])}
`; - } - desc = desc + `
${loc("spend", [fuel, global.resource[$(this)[0].p_fuel().r].name])}
`; - return desc; - }, - p_fuel() { - return { r: "Elerium", a: global.race["lone_survivor"] ? 1 : 10 }; - }, - powered() { - return powerModifier(-75); - }, - action() { - return false; - } - }, - matrioshka_brain: { - id: "tauceti-matrioshka_brain", - title: loc("tech_matrioshka_brain"), - desc(wiki) { - if (!global.tauceti.hasOwnProperty("matrioshka_brain") || global.tauceti.matrioshka_brain.count < 1e3 || wiki) { - return `
${loc("tech_matrioshka_brain")}
${loc("requires_segments", [1e3])}
`; - } else { - return `
${loc("tech_matrioshka_brain")}
`; - } - }, - reqs: { tau_gas2: 7 }, - condition() { - return global.tauceti["matrioshka_brain"] ? true : false; - }, - path: ["truepath"], - queue_size: 50, - queue_complete() { - return 1e3 - global.tauceti.matrioshka_brain.count; - }, - cost: { - Money(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("matrioshka_brain") ? global.tauceti.matrioshka_brain.count : 0) < 1e3 ? 2e7 : 0; - }, - Neutronium(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("matrioshka_brain") ? global.tauceti.matrioshka_brain.count : 0) < 1e3 ? 45e3 : 0; - }, - Nano_Tube(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("matrioshka_brain") ? global.tauceti.matrioshka_brain.count : 0) < 1e3 ? 16e4 : 0; - }, - Adamantite(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("matrioshka_brain") ? global.tauceti.matrioshka_brain.count : 0) < 1e3 ? 666e3 : 0; - }, - Stanene(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("matrioshka_brain") ? global.tauceti.matrioshka_brain.count : 0) < 1e3 ? 61600 : 0; - }, - Bolognium(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("matrioshka_brain") ? global.tauceti.matrioshka_brain.count : 0) < 1e3 ? 44e3 : 0; - }, - Unobtainium(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("matrioshka_brain") ? global.tauceti.matrioshka_brain.count : 0) < 1e3 ? 1200 : 0; - }, - Mythril(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("matrioshka_brain") ? global.tauceti.matrioshka_brain.count : 0) < 1e3 ? wom_recycle(64e3) : 0; - } - }, - effect(wiki) { - let effectText = ""; - let count = (wiki?.count ?? 0) + (global.tauceti.hasOwnProperty("matrioshka_brain") ? global.tauceti.matrioshka_brain.count : 0); - if (count < 1e3) { - effectText += `
${loc("tau_gas2_matrioshka_brain_seg", [1e3 - count])}
`; - } - return effectText; - }, - action() { - if (payCosts($(this)[0])) { - if (global.tauceti.matrioshka_brain.count < 1e3) { - incrementStruct("matrioshka_brain", "tauceti"); - if (global.tauceti.matrioshka_brain.count >= 1e3) { - global.tech["m_brain"] = 1; - } - return true; - } - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["matrioshka_brain", "tauceti"] - }; - } - }, - ignition_device: { - id: "tauceti-ignition_device", - title: loc("tech_ignition_device"), - desc(wiki) { - if (!global.tauceti.hasOwnProperty("ignition_device") || global.tauceti.ignition_device.count < 10 || wiki) { - return `
${loc("tech_ignition_device")}
${loc("requires_segments", [10])}
`; - } else { - return `
${loc("tech_ignition_device")}
`; - } - }, - reqs: { tau_gas2: 8 }, - condition() { - return global.tauceti["ignition_device"] && global.tauceti.ignition_device.count < 10 ? true : false; - }, - path: ["truepath"], - queue_size: 1, - queue_complete() { - return 10 - global.tauceti.ignition_device.count; - }, - cost: { - Money(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ignition_device") ? global.tauceti.ignition_device.count : 0) < 10 ? 25e7 : 0; - }, - Uranium(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ignition_device") ? global.tauceti.ignition_device.count : 0) < 10 ? 5e4 : 0; - }, - Elerium(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ignition_device") ? global.tauceti.ignition_device.count : 0) < 10 ? 25e3 : 0; - }, - Graphene(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ignition_device") ? global.tauceti.ignition_device.count : 0) < 10 ? 225e5 : 0; - }, - Orichalcum(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ignition_device") ? global.tauceti.ignition_device.count : 0) < 10 ? 15e6 : 0; - }, - Quantium(offset) { - return (offset || 0) + (global.tauceti.hasOwnProperty("ignition_device") ? global.tauceti.ignition_device.count : 0) < 10 ? wom_recycle(8e6) : 0; - } - }, - effect(wiki) { - let effectText = ""; - let count = (wiki?.count ?? 0) + (global.tauceti.hasOwnProperty("ignition_device") ? global.tauceti.ignition_device.count : 0); - if (count < 10) { - effectText += `
${loc("tau_gas2_ignition_device_seg", [10 - count])}
`; - } - return effectText; - }, - action() { - if (payCosts($(this)[0])) { - if (global.tauceti.ignition_device.count < 10) { - incrementStruct("ignition_device", "tauceti"); - if (global.tauceti.ignition_device.count >= 10) { - global.tech["m_ignite"] = 1; - renderTauCeti(); - } - return true; - } - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["ignition_device", "tauceti"] - }; - } - }, - ignite_gas_giant: { - id: "tauceti-ignite_gas_giant", - title() { - return loc("tau_gas2_ignite_gas_giant", [tauCetiModules.tau_gas2.info.name()]); - }, - desc() { - return loc("tau_gas2_ignite_gas_giant", [tauCetiModules.tau_gas2.info.name()]); - }, - reqs: { tau_gas2: 8, m_ignite: 1 }, - grant: ["m_ignite", 2], - queue_size: 1, - queue_complete() { - return false; - }, - path: ["truepath"], - cost: { - Helium_3() { - return 75e5; - } - }, - effect() { - let desc = `
${loc("tau_gas2_ignite_gas_giant_effect", [loc("tech_matrioshka_brain")])}
`; - if (!global.tech["m_brain"]) { - desc = desc + `
${loc("tau_gas2_ignite_gas_giant_effect2", [loc("tech_matrioshka_brain")])}
`; - } else { - desc = desc + `
${loc("tau_gas2_ignite_gas_giant_effect3")}
`; - desc += retireProjection(); - } - return desc; - }, - action() { - if (global.tech["m_brain"] && payCosts($(this)[0])) { - retirement(); - return true; - } - return false; - } - } - } - }; - for (let i = 1; i < 9; i++) { - tauCetiModules.tau_gas[`gas_contest-a${i}`] = { - id: `tauceti-gas_contest-a${i}`, - title() { - return tauCetiModules.tau_gas.info.name(i); - }, - desc() { - return tauCetiModules.tau_gas.info.name(i); - }, - reqs: { tau_gas: 1 }, - grant: ["tau_gas", 2], - path: ["truepath"], - wiki: false, - queue_complete() { - return global.tech.tau_gas >= 2 ? 0 : 1; - }, - cost: {}, - effect() { - return loc(i === 8 ? "tau_gas_contest_reject" : "tau_gas_contest_pick", [tauCetiModules.tau_gas.info.name(i)]); - }, - action() { - if (payCosts($(this)[0])) { - global.race["gas_name"] = i; - initStruct(tauCetiModules.tau_gas.refueling_station); - return true; - } - return false; - } - }; - tauCetiModules.tau_gas2[`gas_contest-b${i}`] = { - id: `tauceti-gas_contest-b${i}`, - title() { - return tauCetiModules.tau_gas2.info.name(i); - }, - desc() { - return tauCetiModules.tau_gas2.info.name(i); - }, - reqs: { tau_gas2: 2 }, - grant: ["tau_gas2", 3], - path: ["truepath"], - wiki: false, - queue_complete() { - return global.tech.tau_gas2 >= 3 ? 0 : 1; - }, - cost: {}, - effect() { - return loc(i === 8 ? "tau_gas2_contest_reject" : "tau_gas_contest_pick", [tauCetiModules.tau_gas2.info.name(i)]); - }, - action() { - if (payCosts($(this)[0])) { - global.race["gas_name2"] = i; - return true; - } - return false; - } - }; - } - function matrixProjection() { - let gains = calcPrestige("matrix"); - let plasmidType = global.race.universe === "antimatter" ? loc("resource_AntiPlasmid_plural_name") : loc("resource_Plasmid_plural_name"); - let skilled = global.stats.retire === global.stats.matrix + 1 ? `
${loc("tau_star_matrix_skilled", [1])}
` : ``; - return `
${loc("interstellar_ascension_trigger_effect2", [gains.plasmid, plasmidType])}
${loc("interstellar_ascension_trigger_effect2", [gains.phage, loc("resource_Phage_name")])}
${loc("tau_star_matrix_servants", [1])}
${skilled}`; - } - function retireProjection() { - let gains = calcPrestige("retired"); - let plasmidType = global.race.universe === "antimatter" ? loc("resource_AntiPlasmid_plural_name") : loc("resource_Plasmid_plural_name"); - let skilled = global.stats.retire + 1 === global.stats.matrix ? `
${loc("tau_star_matrix_skilled", [1])}
` : ``; - return `
${loc("interstellar_ascension_trigger_effect2", [gains.plasmid, plasmidType])}
${loc("interstellar_ascension_trigger_effect2", [gains.phage, loc("resource_Phage_name")])}
${loc("tau_star_matrix_servants", [1])}
${skilled}`; - } - function edenProjection() { - let gains = calcPrestige("eden"); - let plasmidType = global.race.universe === "antimatter" ? loc("resource_AntiPlasmid_plural_name") : loc("resource_Plasmid_plural_name"); - return `
${loc("interstellar_ascension_trigger_effect2", [gains.plasmid, plasmidType])}
${loc("interstellar_ascension_trigger_effect2", [gains.phage, loc("resource_Phage_name")])}
${loc("tau_star_matrix_servants", [1])}
`; - } - function defineWomlings() { - initStruct(tauCetiModules.tau_red.overseer); - initStruct(tauCetiModules.tau_red.womling_village); - initStruct(tauCetiModules.tau_red.womling_mine); - initStruct(tauCetiModules.tau_red.womling_fun); - initStruct(tauCetiModules.tau_red.womling_farm); - if (global.race["lone_survivor"]) { - global.tauceti.womling_village.count = 2; - global.tauceti.womling_village.on = 2; - global.tauceti.womling_mine.count = 1; - global.tauceti.womling_mine.on = 1; - } - } - function wom_repulse(v) { - if (global.tech["womling_tech"] && global.tech["womling_logistics"] && global.tech.womling_logistics >= 2) { - v *= 0.94 ** global.tech.womling_tech; - } - return v; - } - function wom_recycle(v) { - if (global.tech["womling_tech"] && global.tech["womling_recycling"] && global.tech.womling_recycling >= 1) { - v *= (global.tech["isolation"] ? 0.97 : 0.98) ** global.tech.womling_tech; - } - return v; - } - function outerTruthTech() { - return outerTruth; - } - function tauCetiTech() { - return tauCetiModules; - } - function tauEnabled() { - if (global.tech["tauceti"] && global.tech.tauceti >= 4) { - return true; - } - return false; - } - function checkPathRequirements(era, region, action) { - switch (era) { - case "tauceti": - return checkRequirements2(tauCetiModules, region, action); - } - } - function renderTauCeti() { - if (!global.settings.tabLoad && (global.settings.civTabs !== 1 || global.settings.spaceTabs !== 6)) { - return; - } - let parent = $("#tauceti"); - clearElement(parent); - parent.append($(`

${loc("tab_tauceti")}

`)); - if (!global.tech["tauceti"] || global.tech.tauceti < 2) { - return; - } - Object.keys(tauCetiModules).forEach(function(region) { - let show = region.replace("tau_", ""); - if (global.settings.tau[`${show}`]) { - let name = typeof tauCetiModules[region].info.name === "string" ? tauCetiModules[region].info.name : tauCetiModules[region].info.name(); - let property = ``; - if (tauCetiModules[region].info.hasOwnProperty("prop")) { - property = tauCetiModules[region].info.prop(); - } - if (tauCetiModules[region].info["support"]) { - let support = tauCetiModules[region].info["support"]; - if (tauCetiModules[region].info["hide_support"]) { - parent.append(`

${name}

${property}
`); - } else { - parent.append(`

${name}

{{ support }}/{{ s_max }}${property}
`); - } - vBind({ - el: `#sr${region}`, - data: global.tauceti[support], - methods: { - filter() { - return tauCetiModules[region].info.filter(...arguments); - } - } - }); - } else { - parent.append(`

${name}

${property}
`); - } - popover( - region, - function() { - return typeof tauCetiModules[region].info.desc === "string" ? tauCetiModules[region].info.desc : tauCetiModules[region].info.desc(); - }, - { - elm: `#${region} h3.name`, - classes: `has-background-light has-text-dark` - } - ); - Object.keys(tauCetiModules[region]).forEach(function(tech) { - if (tech !== "info" && checkRequirements2(tauCetiModules, region, tech)) { - let c_action = tauCetiModules[region][tech]; - setAction(c_action, "tauceti", tech); - } - }); - if (tauCetiModules[region].info.hasOwnProperty("extra")) { - tauCetiModules[region].info.extra(region); - } - } - }); - } - function drawShipYard() { - if (!global.settings.tabLoad && (global.settings.civTabs !== 2 || global.settings.govTabs !== 5)) { - return; - } - setOrbits(); - clearShipDrag(); - clearElement($("#dwarfShipYard")); - if (global.space.hasOwnProperty("shipyard") && global.settings.showShipYard) { - let yard = $(`#dwarfShipYard`); - if (!global.space.shipyard.hasOwnProperty("blueprint")) { - global.space.shipyard["blueprint"] = { - class: "corvette", - armor: "steel", - weapon: "railgun", - engine: "ion", - power: "diesel", - sensor: "radar", - name: getRandomShipName() - }; - } - let plans = $(`
`); - yard.append(plans); - let shipStats = $(`
`); - plans.append(shipStats); - shipStats.append(`
${loc(`outer_shipyard_registry`)}:
`); - shipStats.append(`
${loc(`crew`)}
`); - shipStats.append(`
${loc(`power`)}
`); - shipStats.append(`
${loc(`firepower`)}
`); - shipStats.append(`
${loc(`outer_shipyard_sensors`)}
`); - shipStats.append(`
${loc(`speed`)}
`); - shipStats.append(`
${loc(`outer_shipyard_fuel`)}
`); - plans.append(`
`); - let options = $(`
`); - plans.append(options); - let shipConfig = { - class: ["corvette", "frigate", "destroyer", "cruiser", "battlecruiser", "dreadnought", "explorer"], - power: ["solar", "diesel", "fission", "fusion", "elerium"], - weapon: ["railgun", "laser", "p_laser", "plasma", "phaser", "disruptor"], - armor: ["steel", "alloy", "neutronium"], - engine: ["ion", "tie", "pulse", "photon", "vacuum", "emdrive"], - sensor: ["visual", "radar", "lidar", "quantum"] - }; - Object.keys(shipConfig).forEach(function(k) { - let values = ``; - shipConfig[k].forEach(function(v, idx) { - values += `${loc(`outer_shipyard_${k}_${v}`)}`; - }); - options.append(` +(()=>{var Le=window.localStorage,e={seed:1,warseed:1,resource:{},evolution:{},tech:{},city:{},space:{},interstellar:{},portal:{},eden:{},tauceti:{},civic:{},race:{},genes:{},blood:{},stats:{start:Date.now(),days:0,tdays:0},event:{t:200,l:!1},m_event:{t:499,l:!1}},ur={},f={c:{},p:{}},It={},x={},W={},yt={},Ke={},Pa={},Tr=0,b0=0,w0=0,Ei={t:0};function Eo(r){Tr=r}function Lo(r){b0=r}function Io(r){w0=r}var jr={},ii={},pr={view:"all"},si=["all","progress","queue","building_queue","research_queue","combat","spy","events","major_events","minor_events","achievements","hell"],sa=new Map,na={};Math.rand=function(r,a){return Math.floor(Math.random()*(a-r))+r};e.seed=2;e.warseed=2;function R(r,a,i,s){a=a||1,r=r||0;let o=((s||e[i?"warseed":"seed"])*9301+49297)%233280,c=o/233280;return s||(e[i?"warseed":"seed"]=o),r+c*(a-r)}{let r=Le.getItem("evolved")||!1;if(r){let a=JSON.parse(LZString.decompressFromUTF16(r));a?e=a:ll()}else ll()}e.version||(e.version="0.2.0");Ce(e.version)<2060&&Object.keys(e.resource).forEach(function(r){e.resource[r].crates&&(e.resource[r].crates=Math.ceil(e.resource[r].crates/5)),e.resource[r].containers&&(e.resource[r].containers=Math.ceil(e.resource[r].containers/5))});if(Ce(e.version)<2062&&e.civic.taxes!==void 0)switch(Number(e.civic.taxes.tax_rate)){case 0:e.civic.taxes.tax_rate=0;break;case 1:e.civic.taxes.tax_rate=10;break;case 2:e.civic.taxes.tax_rate=20;break;case 3:e.civic.taxes.tax_rate=30;break;case 4:e.civic.taxes.tax_rate=40;break;case 5:e.civic.taxes.tax_rate=50;break}Ce(e.version)===2062&&e.civic.taxes!==void 0&&e.civic.taxes.tax_rate==2&&(e.civic.taxes.tax_rate=20);Ce(e.version)<2065&&e.race!==void 0&&e.race.species==="sporgar"&&(delete e.race.crafty,delete e.race.hydrophilic,e.race.infectious=1,e.race.parasite=1,!e.tech.military&&e.tech.primitive&&e.tech.primitive>=3&&(e.civic.garrison.display=!0,e.settings.showCivic=!0,e.city.garrison={count:0}));Ce(e.version)<3002&&e.space&&(e.tech.space&&e.tech.space>=4&&(e.space.living_quarters||(e.space.living_quarters={count:0,on:0}),e.space.garage||(e.space.garage={count:0}),e.space.red_mine||(e.space.red_mine={count:0,on:0}),e.space.fabrication||(e.space.fabrication={count:0,on:0}),e.space.laboratory||(e.space.laboratory={count:0,on:0})),e.tech.space&&e.tech.space>=3&&(e.space.iridium_mine||(e.space.iridium_mine={count:0,on:0}),e.space.helium_mine||(e.space.helium_mine={count:0,on:0})),e.tech.hell&&(e.space.geothermal||(e.space.geothermal={count:0,on:0})));Ce(e.version)<3004&&e.settings&&e.settings.space&&e.settings.space.belt&&(e.space.space_station={count:0,on:0,support:0,s_max:0});Ce(e.version)<4001&&e.city&&e.city.factory&&!e.city.factory.Nano&&(e.city.factory.Nano=0);Ce(e.version)<4003&&e.stats.achieve&&Object.keys(e.stats.achieve).forEach(function(r){e.stats.achieve[r]=1});Ce(e.version)<4010&&e.stats.achieve&&e.stats.achieve.doomed&&(e.stats.portals=1);Ce(e.version)<4028&&e.stats.achieve&&e.stats.achieve.genus_demonic&&(e.stats.achieve.biome_hellscape=e.stats.achieve.genus_demonic);if(Ce(e.version)<4029&&e.race.mutation&&e.race.mutation>0){e.resource.Genes={name:"Genes",display:!0,value:0,amount:0,crates:0,diff:0,delta:0,max:-2,rate:0};for(let r=0;r=3&&(e.tech.wind_plant=1,e.tech.hunting=2);let r=["Human","Humano","Elf","Elfo","Orc","Cath","Wolven","Centaur","Centauro","Kobold","Goblin","Gnome","Ogre","Ogro","Cyclops","Ciclope","Troll","Tortoisan","Gecko","Slitheryn","Arraak","Pterodacti","Dracnid","Ent","Cacti","Sporgar","Shroomi","Mantis","Scorpid","Antid","Sharkin","Octigoran","Balorg","Imp"];for(let a=0;a0){let r=1;e.race.no_trade&&r++,e.race.no_craft&&r++,e.race.no_crispr&&r++,e.race.weak_mastery&&r++,e.stats.achieve.cross={l:r,a:r}}Ce(e.version)<7e3&&(e.civic.govern||(e.civic.govern={type:"oligarchy",rev:0,fr:0}));if(Ce(e.version)<7004&&e.queue&&e.queue.queue)for(let r=0;r"u"&&(e.civic.foreign.gov0.anx=!1),typeof e.civic.foreign.gov1.anx>"u"&&(e.civic.foreign.gov1.anx=!1),typeof e.civic.foreign.gov2.anx>"u"&&(e.civic.foreign.gov2.anx=!1),typeof e.civic.foreign.gov0.buy>"u"&&(e.civic.foreign.gov0.buy=!1),typeof e.civic.foreign.gov1.buy>"u"&&(e.civic.foreign.gov1.buy=!1),typeof e.civic.foreign.gov2.buy>"u"&&(e.civic.foreign.gov2.buy=!1));Ce(e.version)<8e3&&e.settings&&e.settings.hasOwnProperty("tLabels")&&delete e.settings.tLabels;Ce(e.version)<8003&&e.stats.harmony&&e.stats.harmony>0&&(e.stats.harmony=parseFloat(e.stats.harmony.toFixed(2)),e.race.Harmony.count=parseFloat(e.race.Harmony.count.toFixed(2)));Ce(e.version)<8017&&e.city.garrison&&(e.city.garrison.on=e.city.garrison.count);Ce(e.version)<9e3&&e.settings&&e.settings.showCity&&(e.settings.showCiv=e.settings.showCity);Ce(e.version)<9005&&e.race.hasOwnProperty("terrifying")&&e.tech.hasOwnProperty("gambling")&&!e.space.hasOwnProperty("spc_casino")&&(e.space.spc_casino={count:0,on:0});Ce(e.version)<9009&&e.genes.hasOwnProperty("ancients")&&e.genes.ancients>=3&&(e.genes.ancients===4?e.genes.ancients=5:e.race.Plasmid.count+=300);Ce(e.version)<9010&&(["species","gods","old_gods"].forEach(r=>{e.race[r]==="orge"&&(e.race[r]="ogre")}),e.stats.hasOwnProperty("achieve")&&e.stats.achieve.hasOwnProperty("extinct_orge")&&(e.stats.achieve.extinct_ogre=e.stats.achieve.extinct_orge,delete e.stats.achieve.extinct_orge),e.resource.hasOwnProperty("orge")&&(e.resource.ogre=e.resource.orge,delete e.resource.orge),e.city&&e.city.factory&&!e.city.factory.Furs&&(e.city.factory.Furs=0));Ce(e.version)<9014&&(["seraph","unicorn","custom"].forEach(r=>{e.race.species===r&&(r==="custom"&&e.hasOwnProperty("custom")&&e.custom.race0.genus==="angelic"||r!=="custom")&&(e.race.holy=1)}),e.hasOwnProperty("arpa")&&e.arpa.hasOwnProperty("sequence")&&(e.arpa.sequence.labs=0));Ce(e.version)<1e5&&(delete e.city.lumber,delete e.city.stone,e.stats.dark=0,e.race.Dark&&(e.stats.dark=e.race.Dark.count),e.city.hasOwnProperty("smelter")&&(e.city.smelter.hasOwnProperty("Star")||(e.city.smelter.Star=0),e.city.smelter.hasOwnProperty("StarCap")||(e.city.smelter.StarCap=0),e.city.smelter.hasOwnProperty("Inferno")||(e.city.smelter.Inferno=0)),e.hasOwnProperty("warseed")||(e.warseed=e.seed+1,Math.war=e.hasOwnProperty("warseed")?e.warseed:e.seed),e.portal.hasOwnProperty("bireme")&&(e.portal.bireme.crew=0,e.portal.bireme.mil=0),e.portal.hasOwnProperty("transport")&&(e.portal.transport.crew=0,e.portal.transport.mil=0,e.portal.transport.cargo||(e.portal.transport.cargo={used:0,max:0,Crystal:0,Lumber:0,Stone:0,Furs:0,Copper:0,Iron:0,Aluminium:0,Cement:0,Coal:0,Oil:0,Uranium:0,Steel:0,Titanium:0,Alloy:0,Polymer:0,Iridium:0,Helium_3:0,Deuterium:0,Neutronium:0,Adamantite:0,Infernite:0,Elerium:0,Nano_Tube:0,Graphene:0,Stanene:0,Bolognium:0,Vitreloy:0,Orichalcum:0,Plywood:0,Brick:0,Wrought_Iron:0,Sheet_Metal:0,Mythril:0,Aerogel:0,Nanoweave:0,Scarletite:0})),e.hasOwnProperty("settings")&&e.settings.portal&&e.settings.portal.spire&&!e.portal.hasOwnProperty("purifier")&&(e.settings.portal.spire=!1),e.portal.hasOwnProperty("mechbay")&&!Array.isArray(e.portal.mechbay.mechs)&&(e.portal.mechbay.mechs=[]),e.portal.transport&&e.portal.transport.count>=1&&!e.tech.hell_spire&&(e.tech.hell_spire=1,e.settings.portal.spire=!0,e.settings.showCargo=!0,e.portal.purifier={count:0,on:0,support:0,s_max:0,supply:0,sup_max:100,diff:0},e.portal.port={count:0,on:0}),e.tech.hasOwnProperty("waygate")&&!e.portal.hasOwnProperty("waygate")&&delete e.tech.waygate,e.hasOwnProperty("blood")||(e.blood={}));Ce(e.version)<100013&&e.hasOwnProperty("settings")&&e.settings.hasOwnProperty("showPowerGrid")&&e.hasOwnProperty("race")&&e.race.infiltrator&&e.hasOwnProperty("tech")&&e.tech.hasOwnProperty("high_tech")&&e.tech.high_tech>=2&&(e.settings.showPowerGrid=!0);if(Ce(e.version)<100014&&(e.race.Dark&&(e.stats.dark=e.race.Dark.count),e.race.casting&&e.race.evil&&(e.race.casting.total-=e.race.casting.lumberjack,e.race.casting.lumberjack=0),e.queue&&e.queue.queue))for(let r=0;r=2,events:!0,major_events:!0,minor_events:!0,achievements:e.stats.achieve&&Object.keys(e.stats.achieve).length>0||e.stats.feat&&Object.keys(e.stats.feat).length>0,hell:e.settings.showPortal||e.stats.blackhole||e.stats.ascend||e.stats.descend}),e.race.hasOwnProperty("inflation")&&["supercollider","stock_exchange","launch_facility","monuments","railway","roid_eject","nexus","syphon"].forEach(function(r){e.tech.hasOwnProperty(r)&&(e.race.inflation+=e.tech[r]*10)}));Ce(e.version)<101012&&e.civic.garrison&&(e.civic.garrison.rate=0);if(Ce(e.version)<101014&&(e.hasOwnProperty("settings")&&e.settings.hasOwnProperty("msgFilters")&&Object.keys(e.settings.msgFilters).forEach(function(r){e.settings.msgFilters[r]={unlocked:!!e.settings.msgFilters[r],vis:!!e.settings.msgFilters[r],max:60,save:3}}),e.hasOwnProperty("lastMsg")&&e.lastMsg)){let r={};si.forEach(function(a){r[a]=[]}),e.lastMsg.forEach(function(a){a.t?a.t.forEach(function(i){r[i].push({m:a.m,c:a.c})}):r.all.push({m:a.m,c:a.c})}),e.lastMsg=r}Ce(e.version)<=101014&&!e.revision&&e.race.cataclysm&&e.race.universe&&e.race.universe==="magic"&&e.tech.magic&&e.tech.magic>=2&&(e.space.pylon={count:0});Ce(e.version)<101015&&e.hasOwnProperty("special")&&e.special.hasOwnProperty("trick")&&(e.special.trick[2020]=JSON.parse(JSON.stringify(e.special.trick)),delete e.special.trick.trick1,delete e.special.trick.trick2,delete e.special.trick.trick3,delete e.special.trick.trick4,delete e.special.trick.trick5,delete e.special.trick.trick6,delete e.special.trick.trick7,delete e.special.trick.trick8,delete e.special.trick.trick9,delete e.special.trick.trick10,delete e.special.trick.trick11,delete e.special.trick.trick12);Ce(e.version)<102e3&&(e.hasOwnProperty("portal")&&e.portal.hasOwnProperty("fortress")&&!e.portal.fortress.hasOwnProperty("nocrew")&&(e.portal.fortress.nocrew=!1),e.city.hasOwnProperty("smelter")&&!e.city.smelter.hasOwnProperty("Iridium")&&(e.city.smelter.Iridium=0),e.hasOwnProperty("portal")&&e.portal.hasOwnProperty("mechbay")&&!e.portal.mechbay.hasOwnProperty("active")&&(e.portal.mechbay.active=0,e.portal.mechbay.scouts=0));Ce(e.version)<102001&&(e.race.blood_thirst&&e.race.blood_thirst>3&&(e.race.blood_thirst=1),e.race.rainbow&&e.race.rainbow>3&&(e.race.rainbow=1));Ce(e.version)<102005&&!e.stats.cores&&e.race.hasOwnProperty("AICore")&&(e.stats.cores=e.race.AICore.count);Ce(e.version)<102006&&e.race.artifical&&(e.race.calm&&(e.resource.hasOwnProperty("Zen")&&(e.resource.Zen.display=!0),e.city.meditation={count:0}),e.race.cannibalize&&(e.city.s_alter={count:0,rage:0,mind:0,regen:0,mine:0,harvest:0}),e.race.magnificent&&(e.city.shrine={count:0,morale:0,metal:0,know:0,tax:0}));Ce(e.version)<102007&&e.stats.hasOwnProperty("achieve")&&delete e.stats.achieve.extinct_sludge;Ce(e.version)<102012&&(e.city.hasOwnProperty("ptrait")&&(e.city.ptrait=e.city.ptrait==="none"?[]:[e.city.ptrait]),e.tech.hell_ruins&&e.tech.hell_ruins>=3&&(e.tech.hell_vault=1));if(Ce(e.version)<102015){if(e.race.hasOwnProperty("governor")&&e.race.governor.hasOwnProperty("tasks"))for(let r in e.race.governor.tasks)e.race.governor.tasks[r]==="asssemble"&&(e.race.governor.tasks[r]="assemble");e.settings&&e.settings.hasOwnProperty("restoreCheck")&&delete e.settings.restoreCheck}Ce(e.version)<102017&&(e.portal.hasOwnProperty("fortress")&&(e.portal.observe={settings:{expanded:!1,average:!1,hyperSlow:!1,display:"game_days",dropKills:!0,dropGems:!0},stats:{total:{start:{year:e.city.calendar.year,day:e.city.calendar.day},days:0,wounded:0,died:0,revived:0,surveyors:0,sieges:0,kills:{drones:0,patrols:0,sieges:0,guns:0,soul_forge:0,turrets:0},gems:{patrols:0,guns:0,soul_forge:0,crafted:0,turrets:0}},period:{start:{year:e.city.calendar.year,day:e.city.calendar.day},days:0,wounded:0,died:0,revived:0,surveyors:0,sieges:0,kills:{drones:0,patrols:0,sieges:0,guns:0,soul_forge:0,turrets:0},gems:{patrols:0,guns:0,soul_forge:0,crafted:0,turrets:0}}},graphID:0,graphs:{}}),e.tech.hasOwnProperty("genetics")&&e.tech.genetics>1&&e.hasOwnProperty("arpa")&&(e.arpa.hasOwnProperty("sequence")||(e.arpa.sequence={max:5e4,progress:0,time:5e4,on:!1}),e.arpa.sequence.boost||(e.arpa.sequence.boost=!1),e.arpa.sequence.auto||(e.arpa.sequence.auto=!1),e.arpa.sequence.labs||(e.arpa.sequence.labs=0)));if(Ce(e.version)<102021&&e.hasOwnProperty("custom")&&!e.custom.hasOwnProperty("race0")){let r=e.race.hasOwnProperty("species")?e.race.species:"protoplasm";e.galaxy.hasOwnProperty("alien1")&&e.galaxy.alien1.id==="custom"&&(e.galaxy.alien1.id=r==="human"?"elven":"human"),e.galaxy.hasOwnProperty("alien2")&&e.galaxy.alien2.id==="custom"&&(e.galaxy.alien2.id=r==="orc"||e.galaxy.alien1.id==="orc"?"cath":"orc")}Ce(e.version)<103e3&&(e.hasOwnProperty("tauceti")||(e.tauceti={}),e.race.species==="protoplasm"&&(e.evolution.hasOwnProperty("sexual_reproduction")&&(e.tech.evo=e.evolution.sexual_reproduction.count>0?2:1,delete e.evolution.sexual_reproduction),[["phagocytosis",{evo:3,evo_animal:1}],["chloroplasts",{evo:3,evo_plant:1}],["chitin",{evo:3,evo_fungi:1}],["exterminate",{evo:7,evo_synthetic:2}],["multicellular",{evo:4}],["spores",{evo:5}],["poikilohydric",{evo:5}],["bilateral_symmetry",{evo:5,evo_insectoid:1,evo_mammals:1,evo_eggshell:1,evo_aquatic:1,evo_fey:1,evo_sand:1,evo_heat:1,evo_polar:1}],["bryophyte",{evo:7}],["athropods",{evo:7,evo_insectoid:2}],["mammals",{evo:6,evo_humanoid:1,evo_giant:1,evo_small:1,evo_animalism:1,evo_demonic:1,evo_angelic:1}],["humanoid",{evo:7,evo_humanoid:2}],["gigantism",{evo:7,evo_giant:2}],["dwarfism",{evo:7,evo_small:2}],["animalism",{evo:7,evo_animalism:2}],["carnivore",{evo_animalism:3,evo_carnivore:2}],["herbivore",{evo_animalism:3,evo_herbivore:2}],["omnivore",{evo_animalism:3,evo_omnivore:2}],["celestial",{evo:7,evo_angelic:2}],["demonic",{evo:7,evo_demonic:2}],["aquatic",{evo:7,evo_aquatic:2}],["fey",{evo:7,evo_fey:2}],["heat",{evo:7,evo_heat:2}],["polar",{evo:7,evo_polar:2}],["sand",{evo:7,evo_sand:2}],["eggshell",{evo:6,evo_eggshell:2}],["endothermic",{evo:7,evo_avian:2}],["ectothermic",{evo:7,evo_reptilian:2}],["bunker",{evo_challenge:1}]].forEach(function(r){if(e.evolution.hasOwnProperty(r[0])&&e.evolution[r[0]].count>0)for(let[a,i]of Object.entries(r[1]))e.tech[a]=i;delete e.evolution[r[0]]}),e.evolution.mloaded=1,e.evolution.gmloaded=1));Ce(e.version)<103001&&(e.hasOwnProperty("prestige")||(e.prestige={}),e.race.Plasmid&&e.race.Plasmid.hasOwnProperty("anti")&&(e.prestige.AntiPlasmid={count:e.race.Plasmid.anti}),["Plasmid","Phage","AICore","Dark","Harmony"].forEach(function(r){e.race.hasOwnProperty(r)&&(e.prestige[r]={count:e.race[r].count},delete e.race[r])}),["Artifact","Blood_Stone"].forEach(function(r){e.resource.hasOwnProperty(r)&&(e.prestige[r]={count:e.resource[r].amount},delete e.resource[r])}),!e.stats.hasOwnProperty("synth")&&e.race.hasOwnProperty("srace")&&(e.stats.synth={},e.stats.synth[e.race.srace]=!0),e.race.hasOwnProperty("governor")&&e.race.governor.hasOwnProperty("config")&&e.race.governor.config.hasOwnProperty("trash")&&["Infernite","Elerium","Copper","Iron"].forEach(function(r){e.race.governor.config.trash.hasOwnProperty(r)&&typeof e.race.governor.config.trash[r]=="number"&&(e.race.governor.config.trash[r]={v:e.race.governor.config.trash[r],s:!0})}));Ce(e.version)<103002&&e.portal.hasOwnProperty("observe")&&e.portal.observe.hasOwnProperty("stats")&&(e.portal.observe.stats.period.gems.surveyors=0,e.portal.observe.stats.total.gems.surveyors=0);Ce(e.version)<103011&&e.city.hasOwnProperty("slave_pen")&&e.city.slave_pen.hasOwnProperty("slaves")&&(e.resource.Slave.amount=e.city.slave_pen.slaves,delete e.city.slave_pen.slaves);Ce(e.version)<103014&&(e.race.cataclysm&&!e.race.start_cataclysm&&(e.civic.craftsman.display=!0),e.race.lone_survivor&&(e.tauceti.tau_factory&&e.tauceti.tau_factory.count>0||e.tauceti.womling_station&&e.tauceti.womling_station.count>0)&&(e.civic.craftsman.display=!0));Ce(e.version)<=103015&&e.portal.hasOwnProperty("harbour")&&(e.portal.harbor=e.portal.harbour,delete e.portal.harbour);Ce(e.version)<=103017&&e.race.broody&&(e.race.gloomy=e.race.broody,delete e.race.broody);Ce(e.version)<=104e3&&e.city.hasOwnProperty("shrine")&&!e.city.shrine.hasOwnProperty("cycle")&&(e.city.shrine.cycle=0);Ce(e.version)<104001&&e.tech.elysium&&e.tech.elysium>=18&&(e.tech.elysium--,e.tech.cement&&!e.race.flier&&(e.tech.cement=8));Ce(e.version)<104002&&e.city.amphitheatre&&!e.city.amphitheatre.hasOwnProperty("evil")&&(e.city.amphitheatre.evil=0);Ce(e.version)<104003&&e.portal.hasOwnProperty("observe")&&e.portal.observe.hasOwnProperty("stats")&&(e.portal.observe.stats.period.gems.compactor??=0,e.portal.observe.stats.total.gems.compactor??=0);Ce(e.version)<=104003&&e.race.pet&&!e.race.pet.hasOwnProperty("event")&&(e.race.pet.event=0,e.race.pet.pet=0);if(Ce(e.version)<104008&&e.race.hasOwnProperty("modified")){let r=e.race.modified;e.race.modified={t:r,nr:0,na:0,pr:0,pa:0}}Ce(e.version)<104009&&e.city.banquet&&!e.city.banquet.level&&(e.city.banquet.level=e.city.banquet.count,e.city.banquet.count=Math.min(1,e.city.banquet.count));e.version="1.4.9";delete e.revision;delete e.beta;e.hasOwnProperty("prestige")||(e.prestige={});["Plasmid","AntiPlasmid","Phage","Dark","Harmony","AICore","Artifact","Blood_Stone","Supercoiled"].forEach(function(r){e.prestige.hasOwnProperty(r)||(e.prestige[r]={count:0})});e.hasOwnProperty("power")||(e.power=[]);e.hasOwnProperty("support")||(e.support={});["moon","red","belt","alpha","nebula","gateway","alien2","lake","spire","titan","enceladus","eris","tau_home","tau_red","tau_roid","asphodel"].forEach(function(r){e.support.hasOwnProperty(r)||(e.support[r]=[])});e.civic.cement_worker&&e.civic.cement_worker.impact===.25&&(e.civic.cement_worker.impact=.4);e.settings||(e.settings={showEvolve:!0,showAchieve:!1,animated:!0,disableReset:!1,font:"standard",q_merge:"merge_nearby",cLabels:!0,theme:"gruvboxDark",locale:"en-US",icon:"star"});e.settings.space||(e.settings.space={});e.settings.space.hasOwnProperty("home")||(e.settings.space.home=!0);dl(!1);e.race.hasOwnProperty("inactiveTraits")||(e.race.forager?e.race.inactiveTraits={herbivore:e.race.forager,carnivore:e.race.forager}:e.race.inactiveTraits={});e.settings.icon||(e.settings.icon="star");e.settings.showResources||(e.settings.showResources=e.settings.showMarket);e.settings.showStorage||(e.city.warehouse||e.city.storage_yard?e.settings.showStorage=!0:e.settings.showStorage=!1);e.settings.hasOwnProperty("touch")||(e.settings.touch=!1);e.settings.hasOwnProperty("lowPowerBalance")||(e.settings.lowPowerBalance=!1);e.queue||(e.queue={display:!1,queue:[]});e.r_queue||(e.r_queue={display:!1,queue:[]});e.queue.rename||(e.queue.rename=!1);e.queue.max||(e.queue.max=0);e.r_queue.max||(e.r_queue.max=0);e.queue.pause||(e.queue.pause=!1);e.r_queue.pause||(e.r_queue.pause=!1);e.lastMsg||(e.lastMsg={});e.settings.msgFilters||(e.settings.msgFilters={});["all","progress","events","major_events","minor_events"].forEach(function(r){e.settings.msgFilters[r]||(e.settings.msgFilters[r]={unlocked:!0,vis:!0,max:60,save:3})});si.forEach(function(r){e.lastMsg[r]||(e.lastMsg[r]=[]),e.settings.msgFilters[r]||(e.settings.msgFilters[r]={unlocked:!1,vis:!1,max:60,save:3})});e.settings.msgQueueHeight||(e.settings.msgQueueHeight=$("#msgQueue").outerHeight(),e.settings.buildQueueHeight=$("#buildQueue").outerHeight());e.space||(e.space={});e.starDock||(e.starDock={});e.interstellar||(e.interstellar={});e.galaxy||(e.galaxy={});e.eden||(e.eden={});e.interstellar.mass_ejector&&!e.interstellar.mass_ejector.Bolognium&&(e.interstellar.mass_ejector.Bolognium=0);e.interstellar.mass_ejector&&!e.interstellar.mass_ejector.Vitreloy&&(e.interstellar.mass_ejector.Vitreloy=0);e.interstellar.mass_ejector&&!e.interstellar.mass_ejector.Orichalcum&&(e.interstellar.mass_ejector.Orichalcum=0);e.interstellar.mass_ejector&&!e.interstellar.mass_ejector.Nanoweave&&(e.interstellar.mass_ejector.Nanoweave=0);e.interstellar.mass_ejector&&!e.interstellar.mass_ejector.Scarletite&&(e.interstellar.mass_ejector.Scarletite=0);e.hasOwnProperty("pillars")||(e.pillars={});e.settings.space.alpha||(e.settings.space.alpha=!1,e.settings.space.proxima=!1,e.settings.space.nebula=!1,e.settings.space.neutron=!1,e.settings.space.blackhole=!1);e.settings.showAchieve||(e.settings.showAchieve=!1);e.settings.locale||(e.settings.locale="en-US");typeof e.settings.pause>"u"&&(e.settings.pause=!1);typeof e.settings.mKeys>"u"&&(e.settings.mKeys=!0);typeof e.settings.keyMap>"u"&&(e.settings.keyMap={x10:"Control",x25:"Shift",x100:"Alt",q:"q"});typeof e.settings.keyMap.showCiv>"u"&&(e.settings.keyMap.showCiv="1",e.settings.keyMap.showCivic="2",e.settings.keyMap.showResearch="3",e.settings.keyMap.showResources="4",e.settings.keyMap.showGenetics="5",e.settings.keyMap.showAchieve="6",e.settings.keyMap.settings="7");delete e.settings.keyMap.d;typeof e.settings.qAny>"u"&&(e.settings.qAny=!1);typeof e.settings.sPackOn>"u"&&(e.settings.sPackOn=!0);typeof e.settings.qAny_res>"u"&&(e.settings.qAny_res=!1);typeof e.settings.sPackMsg>"u"&&(e.settings.sPackMsg=!1);typeof e.settings.expose>"u"&&(e.settings.expose=!1);typeof e.settings.alwaysPower>"u"&&(e.settings.alwaysPower=!1);typeof e.settings.tabLoad>"u"&&(e.settings.tabLoad=!1);typeof e.settings.boring>"u"&&(e.settings.boring=!1);e.settings.hasOwnProperty("mtorder")||(e.settings.mtorder=[]);e.settings.hasOwnProperty("resBar")||(e.settings.resBar={});function Ko(){["reset","plasmid","antiplasmid","universes","phage","starved","tstarved","died","tdied","sac","tsac","know","tknow","portals","dkills","attacks","cfood","tfood","cstone","tstone","clumber","tlumber","mad","bioseed","cataclysm","blackhole","ascend","descend","apotheosis","terraform","aiappoc","matrix","retire","eden","geck","dark","harmony","blood","cores","artifact","supercoiled","cattle","tcattle","murders","tmurders","psykill","tpsykill","pdebt","uDead"].forEach(function(r){e.stats.hasOwnProperty(r)||(e.stats[r]=0)}),e.stats.achieve||(e.stats.achieve={}),e.stats.feat||(e.stats.feat={}),e.stats.hasOwnProperty("womling")||(e.stats.womling={god:{l:0},lord:{l:0},friend:{l:0}}),e.stats.spire||(e.stats.spire={}),e.stats.synth||(e.stats.synth={}),e.stats.hasOwnProperty("banana")||(e.stats.banana={b1:{l:!1,h:!1,a:!1,e:!1,m:!1,mg:!1},b2:{l:!1,h:!1,a:!1,e:!1,m:!1,mg:!1},b3:{l:!1,h:!1,a:!1,e:!1,m:!1,mg:!1},b4:{l:!1,h:!1,a:!1,e:!1,m:!1,mg:!1},b5:{l:!1,h:!1,a:!1,e:!1,m:!1,mg:!1}}),e.stats.hasOwnProperty("endless_hunger")||(e.stats.endless_hunger={b1:{l:!1,h:!1,a:!1,e:!1,m:!1,mg:!1},b2:{l:!1,h:!1,a:!1,e:!1,m:!1,mg:!1},b3:{l:!1,h:!1,a:!1,e:!1,m:!1,mg:!1},b4:{l:!1,h:!1,a:!1,e:!1,m:!1,mg:!1},b5:{l:!1,h:!1,a:!1,e:!1,m:!1,mg:!1}}),e.stats.hasOwnProperty("death_tour")||(e.stats.death_tour={ct:{l:0,h:0,a:0,e:0,m:0,mg:0},bh:{l:0,h:0,a:0,e:0,m:0,mg:0},di:{l:0,h:0,a:0,e:0,m:0,mg:0},ai:{l:0,h:0,a:0,e:0,m:0,mg:0},vc:{l:0,h:0,a:0,e:0,m:0,mg:0},md:{l:0,h:0,a:0,e:0,m:0,mg:0}}),e.stats.death_tour&&!e.stats.death_tour.hasOwnProperty("md")&&(e.stats.death_tour.md={l:0,h:0,a:0,e:0,m:0,mg:0}),e.stats.warlord||(e.stats.warlord={k:!1,p:!1,a:!1,r:!1,g:!1})}Ko();e.race.seeded||(e.race.seeded=!1);e.race.deterioration||(e.race.deterioration=0);e.race.gene_fortify||(e.race.gene_fortify=0);e.race.old_gods||(e.race.old_gods="none");e.race.universe||(e.race.universe="standard");e.genes.minor||(e.genes.minor={});e.race.minor||(e.race.minor={});e.hasOwnProperty("govern")||(e.govern={governor:{},candidate:[],policy:{}});e.settings.hasOwnProperty("showMil")||(e.settings.showMil=!0);e.settings.hasOwnProperty("showPowerGrid")||(e.settings.showPowerGrid=!!(e.hasOwnProperty("tech")&&e.tech.hasOwnProperty("high_tech")&&e.tech.high_tech>=2));e.settings.affix||(e.settings.affix="si");e.special||(e.special={});e.special.gift||(e.special.gift={});e.special.hasOwnProperty("egg")||(e.special.egg={});e.special.hasOwnProperty("trick")||(e.special.trick={trick1:!1,trick2:!1,trick3:!1,trick4:!1,trick5:!1,trick6:!1,trick7:!1,trick8:!1,trick9:!1,trick10:!1,trick11:!1,trick12:!1});e.civic.govern||(e.civic.govern={type:"oligarchy",rev:2e3,fr:0});e.civic.govern.fr=0;e.hasOwnProperty("custom")||(e.custom={});e.custom.hasOwnProperty("planet")&&e.custom.planet.hasOwnProperty("biome")&&delete e.custom.planet;e.city.hasOwnProperty("smelter")&&!e.city.smelter.hasOwnProperty("cap")&&(e.city.smelter.cap=0);e.civic.homeless||(e.civic.homeless=0);e.civic.foreign||(e.civic.foreign={gov0:{unrest:0,hstl:100,mil:100,eco:75,spy:0,esp:0,trn:0,sab:0,act:"none",occ:!1,anx:!1,buy:!1},gov1:{unrest:0,hstl:0,mil:150,eco:100,spy:0,esp:0,trn:0,sab:0,act:"none",occ:!1,anx:!1,buy:!1},gov2:{unrest:0,hstl:50,mil:250,eco:150,spy:0,esp:0,trn:0,sab:0,act:"none",occ:!1,anx:!1,buy:!1}});typeof e.civic.foreign.gov0.trn>"u"&&(e.civic.foreign.gov0.trn=0,e.civic.foreign.gov1.trn=0,e.civic.foreign.gov2.trn=0,e.civic.foreign.gov0.sab=0,e.civic.foreign.gov1.sab=0,e.civic.foreign.gov2.sab=0,e.civic.foreign.gov0.act="none",e.civic.foreign.gov1.act="none",e.civic.foreign.gov2.act="none");typeof e.civic.foreign.gov0.name<"u"&&e.civic.foreign.gov0.name.s1==="evo_organism_title"&&(e.civic.foreign.gov0.name.s1="Northern");typeof e.civic.foreign.gov1.name<"u"&&e.civic.foreign.gov1.name.s1==="evo_organism_title"&&(e.civic.foreign.gov1.name.s1="Southern");typeof e.civic.foreign.gov2.name<"u"&&e.civic.foreign.gov2.name.s1==="evo_organism_title"&&(e.civic.foreign.gov2.name.s1="Divine");if(e.hasOwnProperty("special")&&e.special.hasOwnProperty("gift")){let r=new Date(e.stats.start),a=new Date;Object.keys(e.special.gift).forEach(function(i){let s=Number(i.substring(1,5));(s{e.race.purgatory[r]||(e.race.purgatory[r]={})});e.civic.d_job||(e.race.carnivore||e.race.soul_eater?e.civic.d_job="hunter":e.tech.agriculture&&e.tech.agriculture>=1?e.civic.d_job="farmer":e.civic.d_job="unemployed");e.settings.animated=!0;e.settings.disableReset=!1;e.hasOwnProperty("custom_theme")||(e.custom_theme={"custom-1":{},"custom-2":{},custom_count:2});e.custom_theme.hasOwnProperty("custom_count"),e.custom_theme.custom_count=2;e.arpa&&e.arpa.launch_facility&&e.arpa.launch_facility.rank>0&&!e.tech.space&&(e.tech.space=1);function ll(){e.race={species:"protoplasm",gods:"none",old_gods:"none",seeded:!1},e.seed=Math.rand(0,1e4),e.warseed=Math.rand(0,1e4),e.new=!0}var vr={x10:!1,x25:!1,x100:!1,q:!1};function ke(){let r=1;return e.settings.mKeys&&(vr.x10&&(r*=10),vr.x25&&(r*=25),vr.x100&&(r*=100)),r}function Ce(r){let a=r.split(".",3);return a[0]*=1e5,a[1]*=1e3,Number(a[0])+Number(a[1])+Number(a[2])}function Os(){if($(window).width()>=1400&&$("#msgQueue:not(.right)")){let r=$("#buildQueue").detach();r.addClass("right"),r.removeClass("has-text-info");let a=$("#msgQueue").detach();a.addClass("right"),a.removeClass("has-text-info"),a.css("resize","none"),$("#queueColumn").addClass("is-one-quarter"),$("#queueColumn").append(r),$("#queueColumn").append(a),$("#mainColumn").removeClass("is-three-quarters"),$("#mainColumn").addClass("is-half")}else if($(window).width()<1400&&$("#msgQueue").hasClass("right")){let r=$("#buildQueue").detach();r.removeClass("right"),r.addClass("has-text-info");let a=$("#msgQueue").detach();a.removeClass("right"),a.addClass("has-text-info"),a.css("resize","vertical"),$("#queueColumn").removeClass("is-one-quarter"),$("#sideQueue").append(r),$("#sideQueue").append(a),$("#mainColumn").removeClass("is-half"),$("#mainColumn").addClass("is-three-quarters")}}var $0={si:["K","M","G","T","P","E","Z","Y"],sln:["K","M","B","t","q","Q","s","S"]},k0=new Intl.NumberFormat(void 0,{maximumFractionDigits:2,maximumSignificantDigits:3,roundingMode:"trunc",roundingPriority:"lessPrecision"}),x0=new Intl.NumberFormat(void 0,{maximumFractionDigits:2,maximumSignificantDigits:4,roundingMode:"trunc",roundingPriority:"lessPrecision"}),q0=1+16*Number.EPSILON;function Me(r,a=1,i=!1,s=!1){let n=Math.abs(r),o=Math.floor(Math.log10(n));if(n*=q0,r=r<0?-n:r>0?n:r,s)return r.toLocaleString(void 0,{maximumFractionDigits:a,roundingMode:"trunc"});if(o<4||i){let c=Math.max(o+1,a+1,5);return r.toLocaleString(void 0,{maximumSignificantDigits:c,maximumFractionDigits:a,roundingMode:"trunc",roundingPriority:"lessPrecision"})}else{let c=o%3,l=o===4,h=e.settings.affix!=="eng"&&o>=27;e.settings.affix!=="sci"&&!h&&(o-=c);let v;return e.settings.affix==="sci"||e.settings.affix==="eng"||h?v="e"+o:v=$0[e.settings.affix][o/3-1],r/=10**o,l?k0.format(r)+v:x0.format(r)+v}}$(window).resize(function(){Os()});function Nn(r,a){var i=document.createElement("div"),s="speak-"+Date.now();i.setAttribute("id",s),i.setAttribute("aria-live",a||"polite"),i.classList.add("sr-only"),document.body.appendChild(i),window.setTimeout(function(){document.getElementById(s).innerHTML=r},100),window.setTimeout(function(){document.body.removeChild(document.getElementById(s))},1e3)}window.soft_reset=function(a){try{a=a&&a==="replicator"?"replicator":"soft",gtag("event","reset",{end:a})}catch{}a||oa();let i=e.race.hasOwnProperty("srace")?e.race.srace:!1,s=e.race.hasOwnProperty("geck")?e.race.geck:0;e.race.hasOwnProperty("gecked")&&(s+=e.race.gecked,e.stats.geck-=e.race.gecked);let n={species:"protoplasm",universe:e.race.universe,seeded:e.race.seeded,probes:e.race.probes,seed:e.race.seed,ascended:e.race.hasOwnProperty("ascended")?e.race.ascended:!1,rejuvenated:e.race.hasOwnProperty("rejuvenated")?e.race.rejuvenated:!1};s>0&&(n.geck=s),i&&(n.srace=i),e.race.bigbang&&(n.bigbang=!0),e.race.gods&&(n.gods=e.race.gods),e.race.old_gods&&(n.old_gods=e.race.old_gods),e.race.rapid_mutation&&e.race.rapid_mutation>0&&(n.rapid_mutation=e.race.rapid_mutation),e.race.ancient_ruins&&e.race.ancient_ruins>0&&(n.ancient_ruins=e.race.ancient_ruins),e.race.bigbang&&(n.universe="bigbang"),e.race.hasOwnProperty("corruption")&&(n.corruption=e.race.corruption),e.race=n;let o=e.city.calendar.orbit,c=e.city.biome,l=e.city.ptrait,h=e.city.geology;e.city={calendar:{day:0,year:0,weather:2,temp:1,moon:0,wind:0,orbit:o},biome:c,ptrait:l,geology:h},e.tech.theology&&e.tech.theology>=1?e.tech={theology:1}:e.tech={},No(),e.new=!0,e.seed=Math.rand(0,1e4),e.warseed=Math.rand(0,1e4),e.stats.current=Date.now(),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()};var Ae={w:!1,s:!1,mt:250,midRatio:4,longRatio:20},ul={};function oa(){si.forEach(function(r){r!=="achievements"&&(e.lastMsg[r]=[])})}function dl(r){let a={base:["showCiv","showCity","showIndustry","showPowerGrid","showMechLab","showShipYard","showResearch","showCivic","showMil","showResources","showMarket","showStorage","showGenetics","showSpace","showDeep","showGalactic","showPortal","showEden","showOuter","showTau","showEjector","showCargo","showAlchemy","showGovernor","arpa","showPsychic","showWish"],space:["moon","red","hell","sun","gas","gas_moon","belt","dwarf","alpha","proxima","nebula","neutron","blackhole","sirius","stargate","gateway","gorddon","alien1","alien2","chthonian","titan","enceladus","triton","eris","kuiper"],portal:["fortress","badlands","pit","ruins","gate","lake","spire","wasteland"],eden:["asphodel","elysium","isle","palace"],tau:["home","red","roid","gas","gas2","star"]};Object.keys(a).forEach(function(i){i==="base"?a[i].forEach(function(s){(!e.settings.hasOwnProperty(s)||r)&&(e.settings[s]=!1)}):(e.settings.hasOwnProperty(i)||(e.settings[i]={}),a[i].forEach(function(s){(!e.settings[i].hasOwnProperty(s)||r)&&(e.settings[i][s]=!1)}))}),["civTabs","govTabs","govTabs2","hellTabs","resTabs","spaceTabs","marketTabs","statsTabs"].forEach(function(i){(!e.settings.hasOwnProperty(i)||r)&&(e.settings[i]=0)})}function No(){Ae.w&&Ae.w.terminate(),e.queue={display:!1,queue:[]},e.r_queue={display:!1,queue:[]},e.space={},e.interstellar={},e.galaxy={},e.portal={},e.eden={},e.starDock={},e.tauceti={},e.civic={new:0},e.civic.foreign={gov0:{unrest:0,hstl:Math.floor(R(80,100)),mil:Math.floor(R(75,125)),eco:Math.floor(R(60,90)),spy:0,esp:0,trn:0,sab:0,act:"none",occ:!1,anx:!1,buy:!1},gov1:{unrest:0,hstl:Math.floor(R(0,20)),mil:Math.floor(R(125,175)),eco:Math.floor(R(80,120)),spy:0,esp:0,trn:0,sab:0,act:"none",occ:!1,anx:!1,buy:!1},gov2:{unrest:0,hstl:Math.floor(R(40,60)),mil:Math.floor(R(200,300)),eco:Math.floor(R(130,170)),spy:0,esp:0,trn:0,sab:0,act:"none",occ:!1,anx:!1,buy:!1}},e.genes.blood||(e.prestige.Blood_Stone.count=0),e.resource={},e.evolution={},e.event={t:100,l:!1},e.m_event={t:499,l:!1},e.stats.days=0,e.stats.know=0,e.stats.starved=0,e.stats.died=0,e.stats.attacks=0,e.stats.dkills=0,e.stats.cfood=0,e.stats.cstone=0,e.stats.clumber=0,e.stats.sac=0,e.stats.cattle=0,e.stats.murders=0,e.stats.uDead=0,e.settings.at=0,e.settings.showEvolve=!0,e.settings.space.home=!0,dl(!0),e.settings.disableReset=!1,e.settings.pause=!1,e.arpa={},delete e.race.hrt,e.genes.queue&&(e.tech.queue=1,e.queue.display=!0)}window.reset=function(){try{gtag("event","reset",{end:"hard"})}catch{}localStorage.removeItem("evolved"),e=null,Ae.w&&Ae.w.terminate(),window.location.reload()};function pl(){let r=Vue.reactive(e);return e=r,window.global=r,r}var Do;M0(e.settings.locale);function t(r,a){let i=Do[r];if(!i)return e.settings.expose&&(console.error(`string ${r} not found`),console.log(Do)),r;if(a)if(a instanceof Array){for(let o=0;o{a=s}),r!="en-US"){let s;try{$.getJSON(`strings/strings.${r}.json`,o=>{s=o})}catch(o){console.error(o,o.stack)}let n=a.length;s&&Object.assign(a,s),a.length!=n&&e.settings.expose&&console.error(`string.${r}.json has extra keys.`)}let i=Le.getItem("string_pack")||!1;if(i&&e.settings.sPackOn){let s;try{s=JSON.parse(LZString.decompressFromUTF16(i))}catch(o){console.error(o,o.stack)}let n=a.length;s&&Object.assign(a,s),a.length!=n&&e.settings.expose&&console.error("string pack has extra keys.")}$.ajaxSetup({async:!0}),Do=a}var on={"en-US":"English (US)","es-ES":"Spanish (ESP)","pt-BR":"Portugu\xEAs (BR)","de-DE":"Deutsch","it-IT":"Italiano","ru-RU":"\u0420\u0443\u0441\u0441\u043A\u0438\u0439","cs-CZ":"\u010Ce\u0161tina","pl-PL":"Polski","zh-CN":"\u7B80\u4F53\u4E2D\u6587","zh-TW":"\u7E41\u9AD4\u4E2D\u6587","ko-KR":"\uD55C\uAD6D\uC5B4","im-PL":"Igpay-Atinlay","ja-JP":"\u65E5\u672C\u8A9E"};function _l(r){if(!r)return;let a=r.split("-")[0];document.documentElement.setAttribute("lang",a)}function tt(r){switch(r){case"Physics":vl();break;case"Genetics":vi();break;case"Monument":return gl();case"PhysicsTech":return bt;case"GeneTech":return hl;case"BloodTech":return P0;case"Crispr":yl();break;case"Blood":Ro();break}}var bt={lhc:{title(){return rt("fool",2022)?t("arpa_projects_railway_title"):t("arpa_projects_lhc_title")},desc(){return rt("fool",2022)?t("arpa_projects_railway_desc"):t("arpa_projects_lhc_desc")},reqs:{high_tech:6},grant:"supercollider",effect(r){if(rt("fool",2022)&&!r)return bt.railway.effect(!0);let a=e.tech.tp_particles||e.tech.particles&&e.tech.particles>=3?e.race.cataclysm?20:8:e.race.cataclysm?10:4;return e.tech.storage>=6?e.race.warlord?t("arpa_projects_lhc_warlord2",[t("portal_twisted_lab_title"),a,5]):e.tech.particles&&e.tech.particles>=4?e.race.cataclysm?t("arpa_projects_lhc_cataclysm3",[a]):t("arpa_projects_lhc_effect3",[a,e.race.orbit_decayed?t("space_home_satellite_title"):yr()]):e.race.cataclysm?t("arpa_projects_lhc_cataclysm2",[a]):t("arpa_projects_lhc_effect2",[a,e.race.orbit_decayed?t("space_home_satellite_title"):yr()]):e.race.warlord?t("arpa_projects_lhc_warlord1",[t("portal_twisted_lab_title"),a]):e.race.cataclysm?t("arpa_projects_lhc_cataclysm1",[a]):e.tech.isolation?t("arpa_projects_lhc_iso1",[a,t("tech_infectious_disease_lab_alt")]):t("arpa_projects_lhc_effect1",[a,e.race.orbit_decayed?t("space_home_satellite_title"):yr()])},cost:{Money(r,a){return ct("lhc",r,25e5,1.05,a)},Knowledge(r,a){return ct("lhc",r,5e5,1.05,a)},Copper(r,a){return ct("lhc",r,125e3,1.05,a)},Cement(r,a){return ct("lhc",r,25e4,1.05,a)},Aluminium(r,a){return ct("lhc",r,35e4,1.05,a)},Titanium(r,a){return ct("lhc",r,5e4,1.05,a)},Polymer(r,a){return ct("lhc",r,12e3,1.05,a)}}},stock_exchange:{title:t("arpa_projects_stock_exchange_title"),desc:t("arpa_projects_stock_exchange_desc"),reqs:{banking:9},grant:"stock_exchange",effect(){return e.race.warlord?t("arpa_projects_stock_exchange_warlord",[Ze("casino"),5,1]):e.tech.banking>=10?e.race.cataclysm?e.tech.gambling&&e.tech.gambling>=4?t("arpa_projects_stock_exchange_cataclysm2",[t("space_red_spaceport_title"),10,Ze("casino"),5,1]):t("arpa_projects_stock_exchange_cataclysm1",[t("space_red_spaceport_title"),10]):e.tech.gambling&&e.tech.gambling>=4?t("arpa_projects_stock_exchange_effect3",[t("city_bank"),10,t("job_banker"),2,Ze("casino"),5,1]):t("arpa_projects_stock_exchange_effect2",[t("city_bank"),10,t("job_banker"),2]):t("arpa_projects_stock_exchange_effect1",[t("city_bank"),10])},cost:{Money(r,a){return ct("stock_exchange",r,3e6,1.06,a)},Plywood(r,a){return ct("stock_exchange",r,25e3,1.06,a)},Brick(r,a){return ct("stock_exchange",r,2e4,1.06,a)},Wrought_Iron(r,a){return ct("stock_exchange",r,1e4,1.06,a)}}},tp_depot:{title:t("galaxy_gateway_depot"),desc:t("arpa_projects_depot_desc"),reqs:{high_tech:6,storage:4},grant:"tp_depot",path:["truepath"],effect(){return t(e.tech.isolation?"arpa_projects_depot_effect_iso":"arpa_projects_depot_effect",[5,50])},cost:{Money(r,a){return ct("tp_depot",r,18e5,1.08,a)},Stone(r,a){return ct("tp_depot",r,75e4,1.08,a)},Iron(r,a){return ct("tp_depot",r,25e4,1.08,a)},Alloy(r,a){return ct("tp_depot",r,3e4,1.08,a)}}},launch_facility:{id:"arpalaunch_facility",title:t("arpa_projects_launch_facility_title"),desc:t("arpa_projects_launch_facility_desc"),reqs:{high_tech:7},condition(){return!(e.race.cataclysm||e.race.lone_survivor||e.race.warlord)},grant:"launch_facility",rank:1,queue_complete(){return e.tech.space>=1?0:1},effect(){return t("arpa_projects_launch_facility_effect1")},cost:{Money(r){return ct("launch_facility",r,2e6,1.1)},Knowledge(r){return ct("launch_facility",r,5e5,1.1)},Cement(r){return ct("launch_facility",r,15e4,1.1)},Oil(r){return ct("launch_facility",r,2e4,1.1)},Sheet_Metal(r){return ct("launch_facility",r,15e3,1.1)},Alloy(r){return ct("launch_facility",r,25e3,1.1)}}},monument:{title(r){if(r)return t("arpa_project_monument_title");switch(e.arpa.m_type){case"Obelisk":return t("arpa_project_monument_obelisk");case"Statue":return t("arpa_project_monument_statue");case"Sculpture":return t("arpa_project_monument_sculpture");case"Monolith":return t("arpa_project_monument_monolith");case"Pillar":return t("arpa_project_monument_pillar");case"Megalith":return t("arpa_project_monument_megalith")}},desc:t("arpa_projects_monument_desc"),reqs:{monument:1},grant:"monuments",effect(){let r=_e("gaslighter",2),a=r?2-r:2;return t("arpa_projects_monument_effect1",[a])},cost:{Stone(r,a){return Ss("Stone",r,a)},Aluminium(r,a){return Ss("Aluminium",r,a)},Cement(r,a){return Ss("Cement",r,a)},Steel(r,a){return Ss("Steel",r,a)},Lumber(r,a){return Ss("Lumber",r,a)},Crystal(r,a){return Ss("Crystal",r,a)}}},railway:{title(){return rt("fool",2022)?t("arpa_projects_lhc_title"):t("arpa_projects_railway_title")},desc(){return rt("fool",2022)?t("arpa_projects_lhc_desc"):t("arpa_projects_railway_desc")},reqs:{high_tech:6,trade:3},grant:"railway",effect(r){if(rt("fool",2022)&&!r)return bt.lhc.effect(!0);let a=e.stats.achieve.banana&&e.stats.achieve.banana.l>=2?1:0,i=e.stats.achieve.banana&&e.stats.achieve.banana.l>=1?3:2,s="";return e.race.cataclysm||e.race.orbit_decayed?(a+=e.space.gps?Math.floor(e.space.gps.count/3):0,s=t("arpa_projects_railway_cataclysm1",[a,i,3,1])):e.race.warlord?(a+=5,s=t("arpa_projects_railway_warlord1",[a,i])):(a+=e.city.storage_yard?Math.floor(e.city.storage_yard.count/6):0,s=t("arpa_projects_railway_effect1",[a,i,6,1])),e.tech.hell_lake&&e.tech.hell_lake>=7&&(s+=` ${t("arpa_projects_railway_highway",[1,e.resource.Asphodel_Powder.name,t("eden_asphodel_harvester_title"),1])}`),s},cost:{Money(r,a){return ct("railway",r,25e5,1.08,a)},Lumber(r,a){return ct("railway",r,75e4,1.08,a)},Iron(r,a){return ct("railway",r,3e5,1.08,a)},Steel(r,a){return ct("railway",r,45e4,1.08,a)}}},roid_eject:{title(){return t("arpa_projects_roid_eject_title",[Bo()])},desc(){return t(e.tech.roid_eject<=10?"arpa_projects_roid_eject_desc":"arpa_projects_roid_eject_desc2",[Bo()])},reqs:{blackhole:6,gateway:3},grant:"roid_eject",effect(){let r=0,a=0;return e.tech.roid_eject&&(r+=.225*e.tech.roid_eject*(1+e.tech.roid_eject/12),a=.225*(e.tech.roid_eject+1)*(1+(e.tech.roid_eject+1)/12)-r),`
${t("arpa_projects_roid_eject_effect1")}
${t("arpa_projects_roid_eject_effect2",[+r.toFixed(3),+a.toFixed(3),Bo()])}
`},cost:{Money(r,a){return ct("roid_eject",r,1875e4,1.075,a)},Deuterium(r,a){return ct("roid_eject",r,375e3,1.075,a)},Bolognium(r,a){return ct("roid_eject",r,15e3,1.075,a)}}},nexus:{title:t("arpa_projects_nexus_title"),desc:t("arpa_projects_nexus_desc"),reqs:{magic:5},grant:"nexus",effect(){return e.tech.roguemagic&&e.tech.roguemagic>=7?`
${t("arpa_projects_nexus_effect1",[5])}
${t("witch_hunter_nexus",[4])}
`:t("arpa_projects_nexus_effect1",[5])},cost:{Money(r,a){return ct("nexus",r,5e6,1.12,a)},Crystal(r,a){return ct("nexus",r,6e4,1.12,a)},Iridium(r,a){return ct("nexus",r,35e3,1.12,a)}}},syphon:{title:t("arpa_syphon_title"),desc(){let r="";return e.tech.syphon&&e.tech.syphon>=0?r=`
${t("arpa_syphon_desc")}
${t("arpa_syphon_desc_warn2")}
`:r=`
${t("arpa_syphon_desc")}
${t("arpa_syphon_desc_warn1")}
`,e.race.witch_hunter&&(r+=`
${t("witch_hunter_suspicion")}
`),r},reqs:{veil:2},grant:"syphon",effect(){let r=+(.3333333333333333*xt("magic")).toFixed(3);if(e.tech.syphon&&e.tech.syphon>=60){let a=dt("vacuum"),i=t("resource_Plasmid_plural_name");return`
${t("arpa_syphon_effect_main",[r])}
${t("arpa_syphon_effect4")}
${t("arpa_syphon_effect_reward",[a.plasmid,a.phage,a.dark,i,80])}
`}else return e.tech.syphon&&e.tech.syphon>=40?`
${t("arpa_syphon_effect_main",[r])}
${t("arpa_syphon_effect3")}
`:e.tech.syphon&&e.tech.syphon>=20?`
${t("arpa_syphon_effect_main",[r])}
${t("arpa_syphon_effect2")}
`:`
${t("arpa_syphon_effect_main",[r])}
${t("arpa_syphon_effect1")}
`},cost:{Money(r,a){return ct("syphon",r,75e5,1.025,a)},Mana(r,a){return ct("syphon",r,5e3,1.025,a)},Crystal(r,a){return ct("syphon",r,1e5,1.025,a)},Infernite(r,a){return ct("syphon",r,1e4,1.025,a)}}}};function Bo(){return!e.tech.roid_eject||e.tech.roid_eject<=10?t("arpa_projects_roid_eject_asteroid"):e.tech.roid_eject<=25?t("arpa_projects_roid_eject_moon"):e.tech.roid_eject<=40?t("arpa_projects_roid_eject_dwarf"):e.tech.roid_eject<=60?t("arpa_projects_roid_eject_planet"):t("arpa_projects_roid_eject_remnant")}var hl={genetic_memory:{id:"genes-genetic_memory",title:t("arpa_genepool_genetic_memory_title"),desc:t("arpa_genepool_genetic_memory_desc"),reqs:{},grant:["creep",1],cost:{Plasmid(){return 25}},action(){return!!Re("genetic_memory")}},animus:{id:"genes-animus",title:t("arpa_genepool_animus_title"),desc:t("arpa_genepool_animus_desc"),reqs:{creep:1},grant:["creep",2],cost:{Plasmid(){return 75}},action(){return!!Re("animus")}},divine_remembrance:{id:"genes-divine_remembrance",title:t("arpa_genepool_divine_remembrance_title"),desc:t("arpa_genepool_divine_remembrance_desc"),reqs:{creep:2},grant:["creep",3],cost:{Plasmid(){return 225}},action(){return!!Re("divine_remembrance")}},divine_proportion:{id:"genes-divine_proportion",title:t("arpa_genepool_divine_proportion_title"),desc:t("arpa_genepool_divine_proportion_desc"),reqs:{creep:3},grant:["creep",4],cost:{Plasmid(){return 618}},action(){return!!Re("divine_proportion")}},genetic_repository:{id:"genes-genetic_repository",title:t("arpa_genepool_genetic_repository_title"),desc:t("arpa_genepool_genetic_repository_desc"),reqs:{creep:4},grant:["creep",5],cost:{Plasmid(){return 999}},action(){return!!Re("genetic_repository")}},spatial_reasoning:{id:"genes-spatial_reasoning",title:t("arpa_genepool_spatial_reasoning_title"),desc:t("arpa_genepool_spatial_reasoning_desc"),reqs:{},grant:["store",1],cost:{Plasmid(){return 50}},action(){return!!Re("spatial_reasoning")}},spatial_superiority:{id:"genes-spatial_superiority",title:t("arpa_genepool_spatial_superiority_title"),desc:t("arpa_genepool_spatial_superiority_desc"),reqs:{store:1},grant:["store",2],cost:{Plasmid(){return 125}},action(){return!!Re("spatial_superiority")}},spatial_supremacy:{id:"genes-spatial_supremacy",title:t("arpa_genepool_spatial_supremacy_title"),desc:t("arpa_genepool_spatial_supremacy_desc"),reqs:{store:2},grant:["store",3],cost:{Plasmid(){return 325}},action(){return!!Re("spatial_supremacy")}},dimensional_warping:{id:"genes-dimensional_warping",title:t("arpa_genepool_dimensional_warping_title"),desc:t("arpa_genepool_dimensional_warping_desc"),reqs:{store:3},grant:["store",4],cost:{Plasmid(){return 500}},action(){return!!Re("dimensional_warping")}},enhanced_muscle_fiber:{id:"genes-enhanced_muscle_fiber",title:t("arpa_genepool_enhanced_muscle_fiber_title"),desc:t("arpa_genepool_enhanced_muscle_fiber_desc"),reqs:{},grant:["enhance",1],cost:{Plasmid(){return 25}},action(){return!!Re("enhanced_muscle_fiber")}},morphogenesis:{id:"genes-morphogenesis",title:t("arpa_genepool_morphogenesis_title"),desc:t("arpa_genepool_morphogenesis_desc"),reqs:{},grant:["evolve",1],cost:{Plasmid(){return 10}},action(){return!!Re("morphogenesis")}},recombination:{id:"genes-recombination",title:t("arpa_genepool_recombination_title"),desc:t("arpa_genepool_recombination_desc"),reqs:{evolve:1},grant:["evolve",2],cost:{Plasmid(){return 35}},action(){return!!Re("recombination")}},homologous_recombination:{id:"genes-homologous_recombination",title:t("arpa_genepool_homologous_recombination_title"),desc:t("arpa_genepool_homologous_recombination_desc"),reqs:{evolve:2},grant:["evolve",3],cost:{Plasmid(){return 70}},action(){return!!Re("homologous_recombination")}},genetic_reshuffling:{id:"genes-genetic_reshuffling",title:t("arpa_genepool_genetic_reshuffling_title"),desc:t("arpa_genepool_genetic_reshuffling_desc"),reqs:{evolve:3},grant:["evolve",4],cost:{Plasmid(){return 175}},action(){return!!Re("genetic_reshuffling")}},recombinant_dna:{id:"genes-recombinant_dna",title:t("arpa_genepool_recombinant_dna_title"),desc:t("arpa_genepool_recombinant_dna_desc"),reqs:{evolve:4},grant:["evolve",5],cost:{Plasmid(){return 440}},action(){return!!Re("recombinant_dna")}},chimeric_dna:{id:"genes-chimeric_dna",title:t("arpa_genepool_chimeric_dna_title"),desc:t("arpa_genepool_chimeric_dna_desc"),reqs:{evolve:5},grant:["evolve",6],cost:{Plasmid(){return 1100}},action(){return!!Re("chimeric_dna")}},molecular_cloning:{id:"genes-molecular_cloning",title:t("arpa_genepool_molecular_cloning_title"),desc:t("arpa_genepool_molecular_cloning_desc"),reqs:{evolve:6},grant:["evolve",7],cost:{Plasmid(){return 2750}},action(){return!!Re("molecular_cloning")}},transgenes:{id:"genes-transgenes",title:t("arpa_genepool_transgenes_title"),desc:t("arpa_genepool_transgenes_desc"),reqs:{evolve:7},grant:["evolve",8],cost:{Plasmid(){return 6875}},action(){return!!Re("transgenes")}},synthesis:{id:"genes-synthesis",title:t("arpa_genepool_synthesis_title"),desc:t("arpa_genepool_synthesis_desc",[2,10]),reqs:{evolve:1},grant:["synthesis",1],cost:{Plasmid(){return 25}},action(){return!!Re("synthesis")}},karyokinesis:{id:"genes-karyokinesis",title:t("arpa_genepool_karyokinesis_title"),desc:t("arpa_genepool_synthesis_desc",[3,25]),reqs:{synthesis:1},grant:["synthesis",2],cost:{Plasmid(){return 40}},action(){return!!Re("karyokinesis")}},cytokinesis:{id:"genes-cytokinesis",title:t("arpa_genepool_cytokinesis_title"),desc:t("arpa_genepool_synthesis_desc",[4,50]),reqs:{synthesis:2},grant:["synthesis",3],cost:{Plasmid(){return 55}},action(){return!!Re("cytokinesis")}},mitosis:{id:"genes-mitosis",title:t("arpa_genepool_mitosis_title"),desc:t("arpa_genepool_mitosis_desc",[3]),reqs:{synthesis:3,evolve:2},grant:["plasma",1],cost:{Plasmid(){return 90}},action(){return!!Re("mitosis")}},metaphase:{id:"genes-metaphase",title:t("arpa_genepool_metaphase_title"),desc:t("arpa_genepool_mitosis_desc",[5]),reqs:{plasma:1},grant:["plasma",2],cost:{Plasmid(){return 165}},action(){return!!Re("metaphase")}},mutation:{id:"genes-mutation",title:t("arpa_genepool_mutation_title"),desc:t("arpa_genepool_mutation_desc"),reqs:{synthesis:3,creep:5},grant:["mutation",1],cost:{Plasmid(){return 1250}},action(){return Re("mutation")?(e.genes.mutation=1,vi(),!0):!1}},transformation:{id:"genes-transformation",title:t("arpa_genepool_transformation_title"),desc:t("arpa_genepool_transformation_desc"),reqs:{mutation:1},grant:["mutation",2],cost:{Plasmid(){return 1500}},action(){return Re("transformation")?(e.genes.mutation=2,vi(),!0):!1}},metamorphosis:{id:"genes-metamorphosis",title:t("arpa_genepool_metamorphosis_title"),desc:t("arpa_genepool_metamorphosis_desc"),reqs:{mutation:2},grant:["mutation",3],cost:{Plasmid(){return 1750}},action(){return Re("metamorphosis")?(e.genes.mutation=3,vi(),!0):!1}},replication:{id:"genes-replication",title:t("arpa_genepool_replication_title"),desc:t("arpa_genepool_replication_desc"),reqs:{evolve:1},grant:["birth",1],cost:{Plasmid(){return 65}},action(){return!!Re("replication")}},artificer:{id:"genes-artificer",title:t("arpa_genepool_artificer_title"),desc:t("arpa_genepool_artificer_desc"),reqs:{evolve:1},grant:["crafty",1],cost:{Plasmid(){return 45}},action(){return!!Re("artificer")}},detail_oriented:{id:"genes-detail_oriented",title:t("arpa_genepool_detail_oriented_title"),desc:t("arpa_genepool_crafting_desc",["50"]),reqs:{crafty:1},grant:["crafty",2],cost:{Plasmid(){return 90}},action(){return!!Re("detail_oriented")}},rigorous:{id:"genes-rigorous",title:t("arpa_genepool_rigorous_title"),desc:t("arpa_genepool_crafting_desc",["100"]),reqs:{crafty:2},grant:["crafty",3],cost:{Plasmid(){return 135}},action(){return!!Re("rigorous")}},geographer:{id:"genes-geographer",title:t("arpa_genepool_geographer_title"),desc:t("arpa_genepool_geographer_desc"),reqs:{store:1},grant:["queue",1],cost:{Plasmid(){return 75}},action(){return!!Re("geographer")}},architect:{id:"genes-architect",title:t("arpa_genepool_architect_title"),desc:t("arpa_genepool_architect_desc"),reqs:{queue:1},grant:["queue",2],cost:{Plasmid(){return 160}},action(){return!!Re("architect")},post(){ca(),Ga()}},precognition:{id:"genes-precognition",title:t("arpa_genepool_precognition_title"),desc:t("arpa_genepool_precognition_desc"),reqs:{queue:2},grant:["queue",3],condition(){return e.stats.aiappoc>0},cost:{Plasmid(){return 3500},Phage(){return 100},AICore(){return 1}},action(){return!!Re("precognition")}},governance:{id:"genes-governance",title:t("arpa_genepool_governance_title"),desc:t("arpa_genepool_governance_desc"),reqs:{queue:2},grant:["governor",1],cost:{Plasmid(){return 300},Phage(){return 25}},action(){return!!Re("governance")}},civil_service:{id:"genes-civil_service",title:t("arpa_genepool_civil_service_title"),desc:t("arpa_genepool_civil_service_desc"),reqs:{governor:1},grant:["governor",2],cost:{Plasmid(){return 1e3},Harmony(){return 1}},action(){return!!Re("civil_service")},post(){if(e.race.hasOwnProperty("governor")&&e.race.governor.hasOwnProperty("tasks"))for(let r=0;r<6;r++)e.race.governor.tasks.hasOwnProperty(`t${r}`)||(e.race.governor.tasks[`t${r}`]="none");lt()}},bureaucratic_efficiency:{id:"genes-bureaucratic_efficiency",title:t("arpa_genepool_bureaucratic_efficiency_title"),desc:t("arpa_genepool_bureaucratic_efficiency_desc"),reqs:{governor:2},grant:["governor",3],cost:{Plasmid(){return 2500},Artifact(){return 1}},action(){return!!Re("bureaucratic_efficiency")},post(){lt()},flair(){return t("arpa_genepool_bureaucratic_efficiency_flair")}},hardened_genes:{id:"genes-hardened_genes",title:t("arpa_genepool_hardened_genes_title"),desc:t("arpa_genepool_hardened_genes_desc"),reqs:{},grant:["challenge",1],cost:{Plasmid(){return 5}},action(){return!!Re("hardened_genes")}},unlocked:{id:"genes-unlocked",title:t("arpa_genepool_unlocked_title"),desc:t("arpa_genepool_unlocked_desc"),reqs:{challenge:1},grant:["challenge",2],cost:{Plasmid(){return 50}},action(){return!!Re("unlocked")},post(){Yt(!0)}},universal:{id:"genes-universal",title:t("arpa_genepool_universal_title"),desc:t("arpa_genepool_universal_desc"),reqs:{challenge:2},grant:["challenge",3],condition(){return e.race.universe!=="standard"},cost:{Plasmid(){return 400}},action(){return!!Re("universal")},post(){Yt(!0)}},standard:{id:"genes-standard",title:t("arpa_genepool_standard_title"),desc:t("arpa_genepool_standard_desc"),reqs:{challenge:3},grant:["challenge",4],condition(){return e.race.universe!=="standard"},cost:{Plasmid(){return 2500}},action(){return!!Re("standard")},post(){Yt(!0)}},mastered:{id:"genes-mastered",title:t("arpa_genepool_mastered_title"),desc:t("arpa_genepool_mastered_desc"),reqs:{challenge:4},grant:["challenge",5],cost:{Plasmid(){return 4e3}},action(){return!!Re("mastered")}},negotiator:{id:"genes-negotiator",title:t("arpa_genepool_negotiator_title"),desc:t("arpa_genepool_negotiator_desc"),reqs:{challenge:2},grant:["trader",1],cost:{Plasmid(){return 750}},action(){return Re("negotiator")?(e.genes.trader=1,Dn(),!0):!1}},haggler:{id:"genes-haggler",title:t("arpa_genepool_haggler_title"),desc:t("arpa_genepool_haggler_desc"),reqs:{trader:1},condition(){return!!e.stats.achieve.godslayer},grant:["trader",2],cost:{Supercoiled(){return 10}},action(){return Re("haggler")?(e.genes.trader=2,Dn(),!0):!1}},ancients:{id:"genes-ancients",title:t("arpa_genepool_ancients_title"),desc:t("arpa_genepool_ancients_desc"),reqs:{evolve:2},condition(){return!!e.genes.old_gods},grant:["ancients",1],cost:{Plasmid(){return 120}},action(){return Re("ancients")?(e.genes.ancients=1,de(),!0):!1}},faith:{id:"genes-faith",title:t("arpa_genepool_faith_title"),desc:t("arpa_genepool_faith_desc"),reqs:{ancients:1},grant:["ancients",2],cost:{Plasmid(){return 300}},action(){return Re("faith")?(e.civic.priest.display=!0,!0):!1}},devotion:{id:"genes-devotion",title:t("arpa_genepool_devotion_title"),desc:t("arpa_genepool_devotion_desc"),reqs:{ancients:2},grant:["ancients",3],cost:{Plasmid(){return 600}},action(){return!!Re("devotion")}},acolyte:{id:"genes-acolyte",title:t("arpa_genepool_acolyte_title"),desc:t("arpa_genepool_acolyte_desc"),reqs:{ancients:3},grant:["ancients",4],cost:{Plasmid(){return 1e3}},action(){return!!Re("acolyte")}},conviction:{id:"genes-conviction",title:t("arpa_genepool_conviction_title"),desc:t("arpa_genepool_conviction_desc"),reqs:{ancients:4},grant:["ancients",5],cost:{Plasmid(){return 1500}},action(){return!!Re("conviction")}},doctrine:{id:"genes-doctrine",title:t("arpa_genepool_doctrine_title"),desc:t("arpa_genepool_doctrine_desc"),reqs:{ancients:5},condition(){return!!e.stats.achieve.godslayer},grant:["ancients",6],cost:{Supercoiled(){return 50}},action(){return!!Re("doctrine")}},ideology:{id:"genes-ideology",title:t("arpa_genepool_ideology_title"),desc:t("arpa_genepool_ideology_desc"),reqs:{ancients:6},grant:["ancients",7],cost:{Supercoiled(){return 75}},action(){return!!Re("ideology")}},transcendence:{id:"genes-transcendence",title:t("arpa_genepool_transcendence_title"),desc:t("arpa_genepool_transcendence_desc"),reqs:{ancients:1,mutation:3},grant:["transcendence",1],cost:{Plasmid(){return 3e3}},action(){return Re("transcendence")?(e.genes.transcendence=1,de(),!0):!1}},preeminence:{id:"genes-preeminence",title:t("arpa_genepool_preeminence_title"),desc:t("arpa_genepool_preeminence_desc"),reqs:{transcendence:1,challenge:5,ancients:7},grant:["transcendence",2],cost:{Supercoiled(){return 250},Harmony(){return 10}},action(){return!!Re("preeminence")}},bleeding_effect:{id:"genes-bleeding_effect",title:t("arpa_genepool_bleeding_effect_title"),desc:t("arpa_genepool_bleeding_effect_desc",[2.5]),reqs:{creep:2},grant:["bleed",1],condition(){return e.race.universe==="antimatter"},cost:{Plasmid(){return 100}},action(){return!!Re("bleeding_effect")}},synchronicity:{id:"genes-synchronicity",title:t("arpa_genepool_synchronicity_title"),desc:t("arpa_genepool_synchronicity_desc",[25]),reqs:{bleed:1},grant:["bleed",2],cost:{Plasmid(){return 500}},action(){return!!Re("synchronicity")}},astral_awareness:{id:"genes-astral_awareness",title:t("arpa_genepool_astral_awareness_title"),desc:t("arpa_genepool_astral_awareness_desc"),reqs:{bleed:2},grant:["bleed",3],cost:{Plasmid(){return 1e3}},action(){return!!Re("astral_awareness")}},blood_remembrance:{id:"genes-blood_remembrance",title:t("arpa_genepool_blood_remembrance_title"),desc:t("arpa_genepool_blood_remembrance_desc"),reqs:{},grant:["blood",1],condition(){return e.prestige.Blood_Stone.count>=1},cost:{Plasmid(){return 1e3},Phage(){return 10}},action(){return!!Re("blood_remembrance")}},blood_sacrifice:{id:"genes-blood_sacrifice",title:t("arpa_genepool_blood_sacrifice_title"),desc:t("arpa_genepool_blood_sacrifice_desc"),reqs:{blood:1},grant:["blood",2],cost:{Plasmid(){return 3e3},Phage(){return 100},Artifact(){return 1}},action(){return!!Re("blood_sacrifice")}},essence_absorber:{id:"genes-essence_absorber",title:t("arpa_genepool_essence_absorber_title"),desc:t("arpa_genepool_essence_absorber_desc"),reqs:{blood:2},grant:["blood",3],cost:{Plasmid(){return 7500},Phage(){return 250},Artifact(){return 1}},action(){return!!Re("essence_absorber")},post(){Ro()}}},P0={purify:{id:"blood-purify",title:t("arpa_blood_purify_title"),desc:t("arpa_blood_purify_desc"),reqs:{},grant:["spire",1],cost:{Blood_Stone(){return 10}},action(){return!!Br($(this)[0].cost)}},chum:{id:"blood-chum",title:t("arpa_blood_chum_title"),desc:t("arpa_blood_chum_desc"),reqs:{spire:1},grant:["spire",2],cost:{Blood_Stone(){return 25}},action(){return!!Br($(this)[0].cost)}},lust:{id:"blood-lust",title:t("arpa_blood_lust_title"),desc:t("arpa_blood_lust_desc"),reqs:{},grant:["lust","*"],cost:{Blood_Stone(r){return((r||0)+(e.blood.lust||0))*15+15},Artifact(r){return((r||0)+(e.blood.lust||0))%5===0?1:0}},effect(){return`${t("arpa_blood_repeat")}`},action(){return!!Br($(this)[0].cost)}},illuminate:{id:"blood-illuminate",title:t("arpa_blood_illuminate_title"),desc:t("arpa_blood_illuminate_desc"),reqs:{},grant:["illuminate","*"],cost:{Blood_Stone(r){return((r||0)+(e.blood.illuminate||0))*12+12},Artifact(r){return((r||0)+(e.blood.illuminate||0))%5===0?1:0}},effect(){return`${t("arpa_blood_repeat")}`},action(){return!!Br($(this)[0].cost)}},greed:{id:"blood-greed",title:t("arpa_blood_greed_title"),desc:t("arpa_blood_greed_desc"),reqs:{},grant:["greed","*"],cost:{Blood_Stone(r){return((r||0)+(e.blood.greed||0))*16+16},Artifact(r){return((r||0)+(e.blood.greed||0))%5===0?1:0}},effect(){return`${t("arpa_blood_repeat")}`},action(){return!!Br($(this)[0].cost)}},hoarder:{id:"blood-hoarder",title:t("arpa_blood_hoarder_title"),desc:t("arpa_blood_hoarder_desc"),reqs:{},grant:["hoarder","*"],condition(){return!!(e.genes.blood&&e.genes.blood>=3)},cost:{Blood_Stone(r){return((r||0)+(e.blood.hoarder||0))*14+14},Artifact(r){return((r||0)+(e.blood.hoarder||0))%5===0?1:0}},effect(){return`${t("arpa_blood_repeat")}`},action(){return!!Br($(this)[0].cost)}},artisan:{id:"blood-artisan",title:t("arpa_blood_artisan_title"),desc:t("arpa_blood_artisan_desc"),reqs:{},grant:["artisan","*"],cost:{Blood_Stone(r){return((r||0)+(e.blood.artisan||0))*8+8},Artifact(r){return((r||0)+(e.blood.artisan||0))%5===0?1:0}},effect(){return`${t("arpa_blood_repeat")}`},action(){return!!Br($(this)[0].cost)}},attract:{id:"blood-attract",title:t("arpa_blood_attract_title"),desc:t("arpa_blood_attract_desc"),reqs:{},grant:["attract","*"],condition(){return!!(e.genes.blood&&e.genes.blood>=3)},cost:{Blood_Stone(r){return((r||0)+(e.blood.attract||0))*4+4},Artifact(r){return((r||0)+(e.blood.attract||0))%5===0?1:0}},effect(){return`${t("arpa_blood_repeat")}`},action(){return!!Br($(this)[0].cost)}},wrath:{id:"blood-wrath",title:t("arpa_blood_wrath_title"),desc:t("arpa_blood_wrath_desc"),reqs:{},grant:["wrath","*"],cost:{Blood_Stone(r){return((r||0)+(e.blood.wrath||0))*2+2},Artifact(){return 1}},effect(){return`${t("arpa_blood_repeat")}`},action(){return!!Br($(this)[0].cost)}},prepared:{id:"blood-prepared",title:t("arpa_blood_prepared_title"),desc:t("arpa_blood_prepared_desc"),reqs:{},grant:["prepared",1],condition(){return!!(e.genes.blood&&e.genes.blood>=3)},cost:{Blood_Stone(){return 50}},action(){return!!Br($(this)[0].cost)},post(){Li()}},compact:{id:"blood-compact",title:t("arpa_blood_compact_title"),desc:t("arpa_blood_compact_desc"),reqs:{prepared:1},grant:["prepared",2],condition(){return!!(e.genes.blood&&e.genes.blood>=3)},cost:{Blood_Stone(){return 75}},action(){return!!Br($(this)[0].cost)}},infernal:{id:"blood-infernal",title:t("arpa_blood_infernal_title"),desc:t("arpa_blood_infernal_desc"),reqs:{prepared:2},grant:["prepared",3],condition(){return!!(e.genes.blood&&e.genes.blood>=3)},cost:{Blood_Stone(){return 125},Artifact(){return 1}},action(){return!!Br($(this)[0].cost)}},unbound:{id:"blood-unbound",title:t("arpa_blood_unbound_title"),desc:t("arpa_blood_unbound_desc"),reqs:{},grant:["unbound",1],cost:{Blood_Stone(){return 50}},action(){return!!Br($(this)[0].cost)}},unbound_resistance:{id:"blood-unbound_resistance",title:t("arpa_blood_unbound_resistance_title"),desc:t("arpa_blood_unbound_resistance_desc"),reqs:{unbound:1},grant:["unbound",2],cost:{Blood_Stone(){return 100}},action(){return!!Br($(this)[0].cost)}},shadow_war:{id:"blood-shadow_war",title:t("arpa_blood_shadow_war_title"),desc:t("arpa_blood_shadow_war_desc"),reqs:{unbound:2},grant:["unbound",3],condition(){return!!(e.genes.blood&&e.genes.blood>=3)},cost:{Blood_Stone(){return 250},Artifact(){return 2}},action(){return!!Br($(this)[0].cost)}},unbound_immunity:{id:"blood-unbound_immunity",title:t("arpa_blood_unbound_immunity_title"),desc:t("arpa_blood_unbound_immunity_desc"),reqs:{unbound:3},grant:["unbound",4],condition(){return!!(e.genes.blood&&e.genes.blood>=3)},cost:{Blood_Stone(){return 500}},action(){return!!Br($(this)[0].cost)}},blood_aware:{id:"blood-blood_aware",title:t("arpa_blood_blood_aware_title"),desc:t("arpa_blood_blood_aware_desc"),reqs:{},grant:["aware",1],condition(){return!!(e.genes.blood&&e.genes.blood>=3)},cost:{Blood_Stone(){return 10}},action(){return!!Br($(this)[0].cost)}}};function Re(r){let a=!0,i=hl[r].cost;return Object.keys(i).forEach(function(s){let n=s;s==="Plasmid"&&e.race.universe==="antimatter"&&(s="AntiPlasmid"),e.prestige[s].countNumber(e.resource[i].amount))return a=!1,!1}),a}function cn(r,a,i){return r=T0(r,a,i),Lr({cost:r},a,i)}function T0(r,a,i){let s=Pe("human");if(i&&i.creative||!i&&e.race.creative||!i&&s>0){var n={};return Object.keys(r).forEach(function(o){n[o]=function(){let c=r[o](a,i);return(i&&i.creative||!i&&e.race.creative)&&(c*=1-y.creative.vars()[1]/100),s>0&&(c*=1-y.creative.vars(1)[1]/100*s),c}}),n}return r}function ct(r,a,i,s,n){var o=e.arpa[r]?e.arpa[r].rank:0;return(n&&n.creative||!n&&e.race.creative)&&r!=="syphon"&&(s-=y.creative.vars()[0]),a&&(o+=a),Math.round(s**o*i)}function vl(){if(e.tech.high_tech&&e.tech.high_tech>=6){let r=$("#arpaPhysics");be(r),Object.keys(bt).forEach(function(a){I0(r,a)})}}function Bn(){let r=$("#geneticMinor")[0];if(r){let a=Sortable.get(r);a&&a.destroy()}}function E0(){let r=$("#geneticMinor")[0];r&&Sortable.create(r,{onEnd(a){let i=e.settings.mtorder;i.splice(a.newDraggableIndex,0,i.splice(a.oldDraggableIndex,1)[0]),e.settings.mtorder=i,vi()}})}function vi(){let r=$("#arpaGenetics");if(Bn(),be(r),!e.settings.arpa.genetics)return!1;if(e.tech.genetics>1){let a=$('
');r.append(a);let i=e.tech.genetics>2?t("arpa_gene_mutation"):t("arpa_sequence_genome");e.race.artifical&&(i=e.tech.genetics>2?t("arpa_code_modification"):t("arpa_decompile_source"));let s=$(`
${i} - ${t("arpa_to_complete")}
`);a.append(s);let n=$(`{{ progress }}%`);a.append(n);let o=e.tech.genetics>2?t("arpa_mutate"):t("arpa_sequence");e.race.artifical&&(o=e.tech.genetics>2?t("arpa_modify"):t("arpa_decompile"));let c=$(``);if(a.append(c),e.tech.genetics>=5){let l=$(``);a.append(l)}if(e.tech.genetics>=6){let l=$(``);a.append(l)}if(e.tech.genetics>=7){let l=$(``);a.append(l)}e.arpa.sequence.on&&$("#arpaSequence button.seq").addClass("has-text-success"),e.arpa.sequence.boost&&$("#arpaSequence button.boost").addClass("has-text-success"),e.arpa.sequence.auto&&$("#arpaSequence button.auto").addClass("has-text-success"),V({el:"#arpaSequence",data:e.arpa.sequence,methods:{toggle(){e.arpa.sequence.on?(e.arpa.sequence.on=!1,$("#arpaSequence button.seq").removeClass("has-text-success")):(e.arpa.sequence.on=!0,$("#arpaSequence button.seq").addClass("has-text-success"))},booster(){e.arpa.sequence.boost?(e.arpa.sequence.boost=!1,$("#arpaSequence button.boost").removeClass("has-text-success")):(e.arpa.sequence.boost=!0,$("#arpaSequence button.boost").addClass("has-text-success"))},boostLabel(l){return t(e.race.artifical?"arpa_boost_artifical_label":"arpa_boost_label")+(l?e.arpa.sequence.boost?t("city_on"):t("city_off"):"")},novo(){let l=ke(),h=2e5;if(e.resource.Knowledge.amount>=h){let v=Math.floor(e.resource.Knowledge.amount/h),_=Math.min(l,v);e.resource.Knowledge.amount-=h*_,e.resource.Genes.amount+=_;let g=ar(8,12,!1);g.length>0&&$("#arpaSequence > div:first").append(g)}},novoLabel(){return t(e.race.artifical?"arpa_novo_artifical_label":"arpa_novo_label",["200k"])},auto_seq(){e.arpa.sequence.auto?(e.arpa.sequence.auto=!1,$("#arpaSequence button.auto").removeClass("has-text-success")):(e.arpa.sequence.auto=!0,$("#arpaSequence button.auto").addClass("has-text-success"))},autoLabel(l){return t(e.race.artifical?"arpa_auto_compile_label":"arpa_auto_seq_label")+(l?e.arpa.sequence.boost?t("city_on"):t("city_off"):"")},timer(l){if(e.arpa.sequence.on&&e.arpa.sequence.labs>0)return e.arpa.sequence.boost?ft(l/(e.arpa.sequence.labs*2)):ft(l/e.arpa.sequence.labs);{let h=Wt(14,12);return h.length>0?h:t("time_never")}}}}),ve("popArpaSeq",function(){return e.tech.genetics>2?e.race.artifical?t("arpa_modify_desc"):t("arpa_mutate_desc"):e.race.artifical?t("arpa_decompile_desc"):t("arpa_sequence_desc")},{elm:"#arpaSequence .seqlbl",classes:"has-background-light has-text-dark"})}if(e.tech.genetics>2){let a=$('
');$("#arpaGenetics").append(a);let i=$('
');a.append(i),e.tech.decay&&e.tech.decay>=2&&(e.settings.mtorder.includes("fortify")||e.settings.mtorder.push("fortify")),Object.keys(e.race).forEach(function(O){y[O]&&y[O].type==="minor"&&(e.settings.mtorder.includes(O)||e.settings.mtorder.push(O))}),e.genes.challenge&&e.genes.challenge>=5&&(e.settings.mtorder.includes("mastery")||e.settings.mtorder.push("mastery"));let s=!1,n=[];e.settings.mtorder.forEach(function(O){(y[O]&&y[O].type==="minor"||O==="mastery"||O==="fortify")&&(O!=="fortify"||e.tech.decay&&e.tech.decay>=2)&&(!["promiscuous","content","resilient","industrious","tactical","fibroblast"].includes(O)&&e.race.lone_survivor||!e.race.lone_survivor)&&(s=!0,L0(i,O),n.push(O))}),a.append(`
${t("arpa_race_genetic_traids",[ut("name")])}
`);let o=Da("name"),c=[],l=[],h=$('
');a.append(h);let v=pt(e.race);rt("fool",2023)&&(v.hooved=1),Object.keys(v).forEach(function(O){if(y[O]&&y[O].type!=="minor"&&y[O].type!=="special"&&O!=="evil"&&O!=="soul_eater"&&O!=="artifical"){let k=[...e.race.ss_traits?e.race.ss_traits:[],...e.race.iTraits?Object.keys(e.race.iTraits):[]],A=!1;if(k.includes(O)||["sludge","ultra_sludge"].includes(e.race.species)&&(O==="ooze"||e.race.modified)?A=!0:e.race.hasOwnProperty(O)?(e.race.hasOwnProperty("absorbed")&&e.race.absorbed.map(G=>T[G].fanaticism).includes(O)||e.race.warlord&&["iron_wood","unified","apex_predator"].includes(O)||O==="forager"&&k.some(G=>["herbivore","carnivore"].includes(G)))&&(A=!0):A=!0,!A&&(y[O].type==="major"&&e.genes.mutation||y[O].type==="genus"&&e.genes.mutation&&e.genes.mutation>=2)){let G=$('
'),te=$(`${t("arpa_remove_button")}`);c.push(O),G.append(te),G.append($(`${o[O]?o[O]:y[O].name} (${t("arpa_genepool_rank",[ie(O)])})`)),h.append(G)}else l.push(O),h.append(`
${o[O]?o[O]:y[O].name} (${t("arpa_genepool_rank",[ie(O)])})
`)}});let _=[],g=[];if(e.genes.mutation&&e.genes.mutation>=3&&e.race.species!=="hellspawn"&&(e.race.species!=="sludge"&&e.race.species!=="ultra_sludge"||!e.race.modified)){a.append(`
${t("arpa_race_genetic_gain")}
`);let O=["dumb","smart"],k=T[e.race.species].type==="hybrid"?e.race.maintype:T[e.race.species].type,A=T[e.race.species].type==="hybrid"?T[e.race.species].hybrid:[T[e.race.species].type];Object.keys(T).forEach(function(te){te!=="junker"&&te!=="sludge"&&te!=="ultra_sludge"&&te!=="custom"&&(A.includes(T[te].type)||T[te].type==="hybrid"&&te===e.race.species)&&Object.keys(T[te].traits).forEach(function(Y){if(!e.race[Y]&&Y!=="soul_eater"){let se=O.indexOf(Y);if(se===-1)g.push(Y),T[te].type!==k&&te!==e.race.species&&_.push(Y);else{let b=!1;switch(se%2){case 0:e.race[O[se+1]]&&(b=!0);break;case 1:e.race[O[se-1]]&&(b=!0);break}b||(g.push(Y),T[te].type!==k&&_.push(Y))}}})});let G=$('
');a.append(G);for(let te=0;te'),b=$(`${t("arpa_gain_button")}`);se.append(b),se.append($(`${o[Y]?o[Y]:y[Y].name} (${t("arpa_genepool_rank",[_[Y]?.5:1])})`)),G.append(se)}}}s&&a.prepend(`
${t("arpa_race_genetic_minor_traits",[ut("name")])}
`);let w=function(O,k){let A=y[O].val*5;if(["custom","hybrid","sludge","ultra_sludge"].includes(e.race.species)&&(A*=10),e.race[O]&&y[O].val<0)switch(e.race[O]){case .1:A*=4;break;case .25:A*=3;break;case .5:A*=2;break}return A<0&&(A*=-1),e.race.modified&&(A+=e.race.modified.t*10,y[O].val<0&&(A+=e.race.modified.nr*10)),k?t("arpa_remove",[Da("name",O),A,e.race.universe==="antimatter"?t("resource_AntiPlasmid_plural_name"):t("resource_Plasmid_plural_name")]):A},S=function(O,k){let A=y[O].val*5;return["custom","hybrid","sludge","ultra_sludge"].includes(e.race.species)&&(A*=10),A<0&&(A*=-1),e.race.modified&&(A+=e.race.modified.t*10,y[O].val>=0&&(A+=e.race.modified.pa*10)),k?t("arpa_gain",[Da("name",O),A,e.race.universe==="antimatter"?t("resource_AntiPlasmid_plural_name"):t("resource_Plasmid_plural_name")]):A},C=function(O){let k=gi(e.race.minor[O]?e.race.minor[O]+4:4);return O==="mastery"&&(k*=5),t("arpa_gene_buy",[Da("name",O),Me(k),e.resource.Genes.name])},z=function(O){let k=gi(e.genes.minor[O]?e.genes.minor[O]+4:4);return O==="mastery"&&(k*=2),t("arpa_phage_buy",[Da("name",O),Me(k),t("resource_Phage_name")])};V({el:"#geneticBreakdown",data:{genes:e.genes,race:e.race},methods:{gene(O){let k=0,A=ke(),G=!0,te=!1;for(;k=Y?(e.resource.Genes.amount-=Y,e.race.minor[O]?e.race.minor[O]++:e.race.minor[O]=1,e.race[O]?e.race[O]++:e.race[O]=1,te=!0):G=!1,k++}te&&(O==="mastery"&&Yt(!0),vi(),O==="persuasive"&&Dn())},phage(O){let k=0,A=ke(),G=!0,te=!1;for(;k=Y?(e.prestige.Phage.count-=Y,e.genes.minor[O]?e.genes.minor[O]++:e.genes.minor[O]=1,e.race[O]?e.race[O]++:e.race[O]=1,te=!0):G=!1,k++}te&&(O==="mastery"&&Yt(!0),vi(),O==="persuasive"&&Dn())},purge(O){if(["sludge","ultra_sludge"].includes(e.race.species)&&(e.race.modified||O==="ooze"))return;let k=w(O,!1),A=e.race.universe==="antimatter"?"AntiPlasmid":"Plasmid";if(e.prestige[A].count>=k){e.prestige[A].count-=k;let G=e.race[O];delete e.race[O],e.race.modified||(e.race.modified={t:0,nr:0,na:0,pr:0,pa:0}),e.race.modified.t++,y[O].val>=0?e.race.modified.pr++:e.race.modified.nr++,O==="forager"&&(delete e.race.inactiveTraits.herbivore,delete e.race.inactiveTraits.carnivore),ni(O,G),vi(),de(),Ct();let te=0;Object.keys(e.race).forEach(function(Y){y[Y]&&(y[Y].type=="major"||y[Y].type=="genus")&&Y!=="evil"&&te++}),te===0&&We("blank_slate")}},gain(O){if(["hellspawn"].includes(e.race.species))return;if(["sludge","ultra_sludge"].includes(e.race.species)&&e.race.modified)return;let k=S(O,!1),A=e.race.universe==="antimatter"?"AntiPlasmid":"Plasmid";e.prestige[A].count>=k&&(e.prestige[A].count-=k,e.race[O]=1,e.race.hasOwnProperty("modified")||(e.race.modified={t:0,nr:0,na:0,pr:0,pa:0}),e.race.modified.t++,y[O].val>=0?e.race.modified.pa++:e.race.modified.na++,Ii(O),_.includes(O)&&Xe(O,{down:!0}),vi(),de(),Ct(),os())},geneCost(O){return C(O)},phageCost(O){return z(O)},traitEffect(O){return t(`trait_${O}_effect`)},removeCost(O){return w(O,!0)},addCost(O){return S(O,!0)},genePurchasable(O){let k=gi(e.race.minor[O]?e.race.minor[O]+4:4);return O==="mastery"&&(k*=5),e.resource.Genes.amount>=k},phagePurchasable(O){let k=gi(e.genes.minor[O]?e.genes.minor[O]+4:4);return O==="mastery"&&(k*=2),e.prestige.Phage.count>=k}}}),n.forEach(function(O){ve(`popGenetrait${O}`,function(){return C(O)},{elm:`#geneticBreakdown .t-${O} .gbuy`,classes:"has-background-light has-text-dark"}),e.prestige.Phage.count>0&&ve(`popGenetrait${O}`,function(){return z(O)},{elm:`#geneticBreakdown .t-${O} .pbuy`,classes:"has-background-light has-text-dark"}),ve(`popGenetrait${O}`,function(){return e.stats.feat.novice&&e.stats.achieve.apocalypse&&e.stats.achieve.apocalypse.l>0?`
${Da("desc",O)}
${t(`trait_${O}_effect`)}
`:Da("desc",O)},{elm:`#geneticBreakdown .t-${O} .name`,classes:"has-background-light has-text-dark"})}),c.forEach(function(O){ve(`popRemoveBkdwn${O}`,function(){return w(O,!0)},{elm:`#geneticBreakdown .remove${O}`,classes:"has-background-light has-text-dark"});let k=`raceTrait${O}`,A=$("
");Ba(A,O,{trank:ie(O)}),ve(k,A,{wide:!0,classes:"w30"})}),l.forEach(function(O){let k=`raceTrait${O}`,A=$("
");Ba(A,O,{trank:ie(O)}),ve(k,A,{elm:`#geneticBreakdown .trait${O}`,wide:!0,classes:"w30"})}),g.forEach(function(O){ve(`popAddBkdwn${O}`,function(){return S(O,!0)},{elm:`#geneticBreakdown .add${O}`,classes:"has-background-light has-text-dark"});let k=`raceTrait${O}`,A=$("
");Ba(A,O,{trank:_.includes(O)?.5:1}),ve(k,A,{wide:!0,classes:"w30"})}),E0()}}function Go(){let r=e.race.cataclysm||e.race.orbit_decayed?W.exotic_lab:e.race.warlord?x.twisted_lab:x.biolab;return e.tech.isolation&&(r=W.infectious_disease_lab*5),e.race.lone_survivor&&(r+=2),r>0&&e.city.ptrait.includes("toxic")&&(r+=et.toxic.vars()[0]),r>0&&e.race.elemental&&y.elemental.vars()[0]==="frost"&&(r*=1+qe(e.resource[e.race.species].amount*y.elemental.vars()[4]/100)),Math.round(r)}function L0(r,a){let i=$(`
`),s=$(`

${a}

${e.resource.Genes.name} (${e.race.minor[a]||0})`);if(i.append(s),e.prestige.Phage.count>0){let o=$(`${t("resource_Phage_name")} (${e.genes.minor[a]||0})`);i.append(o)}let n=e.race[a]>1?`(${e.race[a]}) `:"";i.append(`${n}${Da("name",a)}`),r.append(i)}function yl(){(e.tech.genetics&&e.tech.genetics>3||e.sim)&&(be($("#arpaCrispr")),$("#arpaCrispr").append(`
${t("arpa_crispr_desc")}
`),$("#arpaCrispr").append('
'),C0())}function Ro(){e.tech.b_stone&&e.tech.b_stone>=2&&(be($("#arpaBlood")),$("#arpaBlood").append(`
${t("arpa_blood_desc")}
`),$("#arpaBlood").append('
'),O0())}function I0(r,a){if(A0(a)){if(e.arpa[a]||(e.arpa[a]={complete:0,rank:0}),bt[a].rank&&e.arpa[a].rank>=bt[a].rank)return;let i=$(`
`);r.append(i);let s=typeof bt[a].title=="string"?bt[a].title:bt[a].title(),n=$(`
${s}{{ projectName() }} description{{ level(rank) }}
`);i.append(n);let o=$('
{{ complete }}%
');n.append(o);let c=$('
');i.append(c),c.append($(``)),c.append($(``)),c.append($(``)),c.append($(``)),c.append($(``)),V({el:`#arpa${a}`,data:e.arpa[a],methods:{loc:t,queue(h){if(e.tech.queue){let _=ke();for(let g=0;g<_;g++){let w=`arpa${h}`,S=0,C=bt[h].queue_complete?bt[h].queue_complete():Number.MAX_SAFE_INTEGER;for(var v=0;v0){if(e.settings.q_merge!=="merge_never"&&e.queue.queue.length>0&&e.queue.queue[e.queue.queue.length-1].id===w)e.queue.queue[e.queue.queue.length-1].q++;else{let z=typeof bt[h].title=="string"?bt[h].title:bt[h].title();e.queue.queue.push({id:w,action:"arpa",type:h,label:z,cna:!1,time:0,q:1,qs:1,t_max:0})}Er()}else break}}},build(h,v){Gn(h,v,!0)},srDescAndEffect(){let h=typeof bt[a].desc=="string"?bt[a].desc:bt[a].desc(),v=bt[a].effect();return Nn(`${h} +${v}`)},projectName(){return typeof bt[a].title=="string"?bt[a].title:bt[a].title()},arpaProjectSRCosts(h,v){let _=h==="100"?100-e.arpa[v].complete:h;var g=`Construct ${_}%. Costs:`,w=cn(bt[v].cost);return Object.keys(w).forEach(function(S){var C=+(w[S]()*(_/100)).toFixed(0);if(C>0){var z=S==="Money"?"$":e.resource[S].name+": ",O=e.resource[S].amount>=C?"":` ${t("insufficient")} ${e.resource[S].name}.`;g=g+` ${z} ${Me(C,2)}.${O}`}}),g},remain(h){return 100-h},level(h){return t("arpa_level",[h])}}}),ve(`popArpa${a}`,function(){return bt[a].desc},{elm:`#arpa${a} .head .desc`,classes:"has-background-light has-text-dark"}),ve(`popArpa${a}`,function(){return bt[a].effect()},{elm:`#arpa${a} .head .rank`,classes:"has-background-light has-text-dark"});let l=[1,10,25,100];for(let h=0;h=100&&(e.arpa[r].rank++,e.arpa[r].complete=0,e.tech[bt[r].grant]=e.arpa[r].rank,n=!0,r==="monument"&&(e.arpa.m_type=gl(),$(`#arpa${r} .head .desc`).html(bt[r].title()),Ca(!1,["arpamonument"])),r==="roid_eject"&&($(`#arpa${r} .head .desc`).html(bt[r].title()),Ca(!1,["arparoid_eject"])),r==="launch_facility"&&(e.settings.showSpace=!0,e.tech.space=1,Ie("popArpalaunch_facility"),[1,10,25,100].forEach(function(c){Ie(`popArpalaunch_facility${c}`)}),s||Oa(["arpalaunch_facility"]),vl(),Nt(),L(t("arpa_projects_launch_facility_msg"),"info",!1,["progress"])),e.race.inflation&&(e.race.inflation+=10),de()));if(i){let o=[1,10,25,100],c=$("#popper"),l=c.data("id");for(let h=0;h"),n=cn(bt[a].cost);let o=Ki(bt[a],i/100,!1,!0);return Object.keys(n).forEach(function(c){var l=+(n[c]()*(i/100)).toFixed(0);if(l>0){var h=c==="Money"?"$":e.resource[c].name+": ",v=e.resource[c].amount>=l?"has-text-dark":c===o.r?"has-text-danger":"has-text-alert";s.append($(`
${h}${Me(l,2)}
`))}}),s}function Dn(){Object.keys(e.resource).forEach(function(r){V({el:`#market-${r}`},"update")}),V({el:"#galaxyTrade"},"update")}function Un(){if(!e.civic.mad.armed&&!e.race.cataclysm){e.sim||Le.setItem("evolveBak",LZString.compressToUTF16(JSON.stringify(e))),oa(),zt("reset",{end:"mad"});let r=e.race.species,a=e.race.gods,i=e.city.calendar.orbit,s=e.city.biome,n=e.city.ptrait,o=e.city.geology,c=dt("mad");e.stats.mad++,ma(),e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=c.plasmid,e.stats.antiplasmid+=c.plasmid):(e.prestige.Plasmid.count+=c.plasmid,e.stats.plasmid+=c.plasmid),e.stats.pdebt=c.pdebt,le("apocalypse"),le("squished",!0),le(`extinct_${r}`),e.civic.govern.type==="anarchy"&&le("anarchist"),e.city.biome==="hellscape"&&T[e.race.species].type!=="demonic"&&We("take_no_advice"),e.race.truepath&&le("ashanddust"),Zr(),js("md");let l=e.race.hasOwnProperty("srace")?e.race.srace:!1,h=e.race.hasOwnProperty("corruption")&&e.race.corruption>1?e.race.corruption-1:0;e.race={species:"protoplasm",gods:r,old_gods:a,rapid_mutation:1,ancient_ruins:1,universe:e.race.universe,seeded:!1,ascended:e.race.hasOwnProperty("ascended")?e.race.ascended:!1},h>0&&(e.race.corruption=h),l&&(e.race.srace=l),Sa({orbit:i,biome:s,ptrait:n,geology:o}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}}function bl(){e.sim||Le.setItem("evolveBak",LZString.compressToUTF16(JSON.stringify(e))),oa(),zt("reset",{end:"bioseed"});let r=e.race.species,a=e.race.gods,i=T[r].type==="hybrid"?e.race.maintype:T[r].type,s=e.city.calendar.orbit,n=e.city.biome,o=e.city.ptrait,c=dt("bioseed");e.stats.bioseed++,ma(),e.prestige.Phage.count+=c.phage,e.stats.phage+=c.phage,e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=c.plasmid,e.stats.antiplasmid+=c.plasmid):(e.prestige.Plasmid.count+=c.plasmid,e.stats.plasmid+=c.plasmid),e.stats.pdebt=c.pdebt,le("seeder"),le(`biome_${n}`),o.forEach(function(S){et.hasOwnProperty(S)&&le(`atmo_${S}`)}),le(`genus_${i}`),e.race.gravity_well&&le("escape_velocity"),e.race.truepath&&le("exodus"),o.includes("dense")&&e.race.universe==="heavy"&&le("double_density"),e.race.junker&&e.race.species==="junker"&&We("organ_harvester"),e.city.biome==="hellscape"&&T[e.race.species].type!=="demonic"&&We("ill_advised"),typeof e.tech.world_control>"u"&&le("cult_of_personality"),e.race.cataclysm&&le("iron_will",!1,5),e.race.gross_enabled&&e.race.ooze&&e.race.species!=="custom"&&e.race.species!=="sludge"&&e.race.species!="hybrid"&&le("gross");let l=0,h=0;switch(Object.keys(e.city.geology).forEach(function(S){e.city.geology[S]>0?l++:e.city.geology[S]<0&&h++}),l>=4&&le("miners_dream"),h>=3&&We("rocky_road"),e.race.steelen&&e.race.steelen>=1&&le("steelen"),e.race.universe){case"micro":e.race.small||e.race.compact?le("macro",!0):le("marble",!0);break;default:break}Zr();let v=e.race.hasOwnProperty("srace")?e.race.srace:!1,_=e.race.hasOwnProperty("corruption")&&e.race.corruption>1?e.race.corruption-1:0,g=e.starDock.probes.count+1,w=e.starDock.hasOwnProperty("geck")?e.starDock.geck.count:0;e.stats.achieve.explorer&&(g+=e.stats.achieve.explorer.l),e.race={species:"protoplasm",gods:r,old_gods:a,universe:e.race.universe,seeded:!0,probes:g,geck:w,seed:Math.floor(R(1e4)),ascended:!1},_>0&&(e.race.corruption=_),v&&(e.race.srace=v),Sa({orbit:s,biome:n,ptrait:o,geology:!1}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}function wl(){if(e.city.ptrait.includes("unstable")&&e.tech.quaked){Ae.w&&Ae.w.terminate(),e.sim||Le.setItem("evolveBak",LZString.compressToUTF16(JSON.stringify(e))),zt("reset",{end:"cataclysm"}),oa();let r=dt("cataclysm");e.stats.cataclysm++,ma(),e.prestige.Phage.count+=r.phage,e.stats.phage+=r.phage,e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=r.plasmid,e.stats.antiplasmid+=r.plasmid):(e.prestige.Plasmid.count+=r.plasmid,e.stats.plasmid+=r.plasmid),e.stats.pdebt=r.pdebt,le("squished",!0),le(`extinct_${e.race.species}`),e.city.biome==="hellscape"&&T[e.race.species].type!=="demonic"&&We("take_no_advice"),Zr(),le("shaken"),e.race.cataclysm&&le("failed_history"),js("ct");let a=e.race.hasOwnProperty("srace")?e.race.srace:!1,i=e.race.hasOwnProperty("corruption")&&e.race.corruption>1?e.race.corruption-1:0,s=e.race.hasOwnProperty("maintype")?e.race.maintype:!1;e.race={species:e.race.species,gods:e.race.gods,old_gods:e.race.old_gods,universe:e.race.universe,seeded:!1,ascended:e.race.hasOwnProperty("ascended")?e.race.ascended:!1},i>0&&(e.race.corruption=i),a&&(e.race.srace=a),s&&(e.race.maintype=s),Sa({orbit:e.city.calendar.orbit,biome:e.city.biome,ptrait:e.city.ptrait,geology:e.city.geology}),e.race.universe==="antimatter"?e.race.weak_mastery=1:e.race.no_plasmid=1;let n=["crispr","trade","craft"];for(let o=0;o1?e.race.corruption-1:0;e.race={species:"protoplasm",gods:r,old_gods:a,universe:"bigbang",seeded:!0,bigbang:!0,probes:4,seed:Math.floor(R(1e4)),ascended:!1},l>0&&(e.race.corruption=l),c&&(e.race.srace=c),Sa({orbit:i,biome:s,ptrait:n,geology:!1}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}function $l(){if(e.tech.syphon>=80&&e.race.universe==="magic"){e.tech.syphon=79,e.arpa.syphon.rank=79,e.arpa.syphon.complete=99,e.queue.queue=[],e.stats.current=Date.now(),e.sim||Le.setItem("evolveBak",LZString.compressToUTF16(JSON.stringify(e))),oa(),zt("reset",{end:"vacuum"}),le(`extinct_${e.race.species}`),le("pw_apocalypse"),e.space.hasOwnProperty("spaceport")&&e.space.spaceport.count===0&&le("red_dead"),!e.race.modified&&e.race.species==="balorg"&&le("pass"),e.race.junker&&e.race.species==="junker"&&We("the_misery"),e.race.decay&&le("dissipated"),e.race.steelen&&We("steelem"),js("vc");let r=e.race.species,a=e.race.gods,i=e.city.calendar.orbit,s=e.city.biome,n=e.city.ptrait,o=dt("vacuum");Zr(),e.stats.blackhole++,ma(),e.prestige.Phage.count+=o.phage,e.stats.phage+=o.phage,e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=o.plasmid,e.stats.antiplasmid+=o.plasmid):(e.prestige.Plasmid.count+=o.plasmid,e.stats.plasmid+=o.plasmid),e.stats.pdebt=o.pdebt,e.prestige.Dark.count=+(e.prestige.Dark.count+o.dark).toFixed(3),e.stats.dark=+(e.stats.dark+o.dark).toFixed(3),e.stats.universes++;let c=e.race.hasOwnProperty("srace")?e.race.srace:!1,l=e.race.hasOwnProperty("corruption")&&e.race.corruption>1?e.race.corruption-1:0;e.race={species:"protoplasm",gods:r,old_gods:a,universe:"bigbang",seeded:!0,bigbang:!0,probes:4,seed:Math.floor(R(1e4)),ascended:!1},l>0&&(e.race.corruption=l),c&&(e.race.srace=c),Sa({orbit:i,biome:s,ptrait:n,geology:!1}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}}function kl(){oa(),zt("reset",{end:"ascend"});let r=e.race.species,a=e.race.gods,i=e.city.calendar.orbit,s=e.city.biome,n=e.city.ptrait,o=e.city.geology,c=dt("ascend");e.stats.ascend++,ma(),e.prestige.Phage.count+=c.phage,e.stats.phage+=c.phage,e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=c.plasmid,e.stats.antiplasmid+=c.plasmid):(e.prestige.Plasmid.count+=c.plasmid,e.stats.plasmid+=c.plasmid),e.stats.pdebt=c.pdebt,e.prestige.Harmony.count=parseFloat((e.prestige.Harmony.count+c.harmony).toFixed(2)),e.stats.harmony=parseFloat((e.stats.harmony+c.harmony).toFixed(2)),n.forEach(function(_){et.hasOwnProperty(_)&&le(`atmo_${_}`)}),typeof e.tech.world_control>"u"&&le("cult_of_personality");let l=0;Object.keys(e.city.geology).forEach(function(_){e.city.geology[_]>0&&l++}),l>=4&&le("miners_dream"),(!e.galaxy.hasOwnProperty("dreadnought")||e.galaxy.dreadnought.count===0)&&le("dreaded"),!e.race.modified&&(e.race.species==="synth"||e.race.species==="nano")&&e.race.emfield&&We("digital_ascension"),e.race.gross_enabled&&e.race.ooze&&e.race.species!=="custom"&&e.race.species!=="sludge"&&e.race.species!="hybrid"&&le("gross"),Zr();let h=e.race.hasOwnProperty("srace")?e.race.srace:!1,v=e.race.hasOwnProperty("corruption")&&e.race.corruption>1?e.race.corruption-1:0;e.race={species:"protoplasm",gods:r,old_gods:a,universe:e.race.universe,seeded:!1,seed:Math.floor(R(1e4)),ascended:!0},v>0&&(e.race.corruption=v),h&&(e.race.srace=h),Object.keys(o).forEach(function(_){o[_]=+(o[_]+.02).toFixed(2)}),Sa({orbit:i,biome:s,ptrait:n,geology:o}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}function ln(){if(Ae.w&&Ae.w.terminate(),e.sim||Le.setItem("evolveBak",LZString.compressToUTF16(JSON.stringify(e))),oa(),zt("reset",{end:"descension"}),le("squished",!0),le(`extinct_${e.race.species}`),e.race.witch_hunter&&e.tech.forbidden>=5&&e.race.universe==="magic"?le("nightmare"):le("corrupted"),e.race.fasting&&e.tech.dish_reset){let v=wt();e.stats.endless_hunger.b5[v]=!0,v!=="m"&&v!=="l"&&(e.stats.endless_hunger.b5.l=!0),e.stats.starved===0&&We("immortal")}T[e.race.species].type==="angelic"&&We("twisted"),e.race.junker&&e.race.species==="junker"&&We("the_misery"),!e.race.modified&&e.race.junker&&e.race.species==="junker"&&We("garbage_pie"),e.race.cataclysm&&We("finish_line"),e.race.ooze&&e.race.species==="sludge"&&We("slime_lord"),js("di");let r=dt("descend");e.prestige.Artifact.count+=r.artifact,e.stats.artifact+=r.artifact;let a=wt();e.stats.spire.hasOwnProperty(a)&&(e.stats.spire[a].hasOwnProperty("lord")?e.stats.spire[a].lord++:e.stats.spire[a].lord=1,e.tech.dl_reset?e.stats.spire[a].dlstr=0:e.stats.spire[a].hasOwnProperty("dlstr")?e.stats.spire[a].dlstr++:e.stats.spire[a].dlstr=1);let i=e.race.species,s=e.race.gods,n=e.city.calendar.orbit,o=e.city.biome,c=e.city.ptrait,l=e.city.geology;e.stats.descend++,ma(),Zr();let h=e.race.hasOwnProperty("srace")?e.race.srace:!1;e.race={species:"protoplasm",gods:i,old_gods:s,universe:e.race.universe,seeded:!1,seed:Math.floor(R(1e4)),corruption:5,ascended:e.race.hasOwnProperty("ascended")?e.race.ascended:!1},h&&(e.race.srace=h),Sa({orbit:n,biome:o,ptrait:c,geology:l}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}function Ho(){oa(),zt("reset",{end:"apotheosis"});let r=e.race.species,a=e.race.gods,i=e.city.calendar.orbit,s=e.city.biome,n=e.city.ptrait,o=e.city.geology,c=dt("apotheosis");e.stats.apotheosis++,ma(),e.prestige.Supercoiled.count+=c.supercoiled,e.stats.supercoiled+=c.supercoiled,e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=c.plasmid,e.stats.antiplasmid+=c.plasmid):(e.prestige.Plasmid.count+=c.plasmid,e.stats.plasmid+=c.plasmid),e.stats.pdebt=c.pdebt,e.race.warlord&&(e.prestige.Artifact.count+=c.artifact,e.stats.artifact+=c.artifact),n.forEach(function(_){et.hasOwnProperty(_)&&le(`atmo_${_}`)}),typeof e.tech.world_control>"u"&&le("cult_of_personality");let l=0;Object.keys(e.city.geology).forEach(function(_){e.city.geology[_]>0&&l++}),l>=4&&le("miners_dream"),e.race.gross_enabled&&e.race.ooze&&e.race.species!=="custom"&&e.race.species!=="sludge"&&e.race.species!="hybrid"&&le("gross"),Zr();let h=e.race.hasOwnProperty("srace")?e.race.srace:!1,v=e.race.hasOwnProperty("corruption")&&e.race.corruption>1?e.race.corruption-1:0;e.race={species:"protoplasm",gods:r,old_gods:a,universe:e.race.universe,seeded:!1,seed:Math.floor(R(1e4)),ascended:!0},v>0&&(e.race.corruption=v),h&&(e.race.srace=h),Object.keys(o).forEach(function(_){o[_]=+(o[_]+.02).toFixed(2)}),Sa({orbit:i,biome:s,ptrait:n,geology:o}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}function xl(r){oa(),zt("reset",{end:"terraform"});let a=e.race.species,i=e.race.gods,s=e.city.calendar.orbit,n=r.biome,o=r.traitlist,c=r.geology,l=dt("terraform");e.stats.terraform++,ma(),e.prestige.Phage.count+=l.phage,e.stats.phage+=l.phage,e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=l.plasmid,e.stats.antiplasmid+=l.plasmid):(e.prestige.Plasmid.count+=l.plasmid,e.stats.plasmid+=l.plasmid),e.stats.pdebt=l.pdebt,e.prestige.Harmony.count=parseFloat((e.prestige.Harmony.count+l.harmony).toFixed(2)),e.stats.harmony=parseFloat((e.stats.harmony+l.harmony).toFixed(2)),o.forEach(function(g){et.hasOwnProperty(g)&&le(`atmo_${g}`)}),typeof e.tech.world_control>"u"&&le("cult_of_personality");let h=0;Object.keys(e.city.geology).forEach(function(g){e.city.geology[g]>0&&h++}),h>=4&&le("miners_dream"),e.race.gross_enabled&&e.race.ooze&&e.race.species!=="custom"&&e.race.species!=="sludge"&&e.race.species!="hybrid"&&le("gross"),Zr();let v=e.race.hasOwnProperty("srace")?e.race.srace:!1,_=e.race.hasOwnProperty("corruption")&&e.race.corruption>1?e.race.corruption-1:0;e.race={species:"protoplasm",gods:a,old_gods:i,universe:e.race.universe,seeded:!1,seed:Math.floor(R(1e4)),ascended:e.race.hasOwnProperty("ascended")?e.race.ascended:!1,rejuvenated:!0},_>0&&(e.race.corruption=_),v&&(e.race.srace=v),Sa({orbit:s,biome:n,ptrait:o,geology:c}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}function ql(){e.sim||Le.setItem("evolveBak",LZString.compressToUTF16(JSON.stringify(e))),oa(),zt("reset",{end:"ai apocalypse"}),le(`extinct_${e.race.species}`),le("obsolete"),le("squished",!0),e.race.junker&&e.race.species==="junker"&&We("the_misery"),js("ai");let r=e.race.species,a=e.race.gods,i=e.city.calendar.orbit,s=e.city.biome,n=e.city.ptrait,o=e.city.geology,c=dt("ai");Zr(),e.stats.aiappoc++,ma(),e.prestige.Phage.count+=c.phage,e.stats.phage+=c.phage,e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=c.plasmid,e.stats.antiplasmid+=c.plasmid):(e.prestige.Plasmid.count+=c.plasmid,e.stats.plasmid+=c.plasmid),e.stats.pdebt=c.pdebt,e.prestige.AICore.count+=c.cores,e.stats.cores+=c.cores;let l=T[r].type!=="synthetic"&&!["junker","sludge","ultra_sludge"].includes(r)?r:e.race.hasOwnProperty("srace")?e.race.srace:r;e.stats.synth[r]=!0;let h=e.race.hasOwnProperty("corruption")&&e.race.corruption>1?e.race.corruption-1:0;e.race={species:"protoplasm",gods:r,old_gods:a,srace:l,universe:e.race.universe,seeded:!1,seed:Math.floor(R(1e4)),ascended:e.race.hasOwnProperty("ascended")?e.race.ascended:!1},h>0&&(e.race.corruption=h),Sa({orbit:i,biome:s,ptrait:n,geology:o}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}function Ml(){Ae.w&&Ae.w.terminate(),e.sim||Le.setItem("evolveBak",LZString.compressToUTF16(JSON.stringify(e))),oa(),zt("reset",{end:"matrix"});let r=e.race.species,a=e.race.gods,i=T[r].type==="hybrid"?e.race.maintype:T[r].type,s=e.city.calendar.orbit,n=e.city.biome,o=e.city.ptrait,c=e.city.geology,l=dt("matrix");le(`biome_${n}`),o.forEach(function(_){et.hasOwnProperty(_)&&le(`atmo_${_}`)}),le(`genus_${i}`),e.race.gross_enabled&&e.race.ooze&&e.race.species!=="custom"&&e.race.species!=="sludge"&&e.race.species!="hybrid"&&le("gross"),le("bluepill"),Uo(),Zr(),e.stats.matrix++,ma(),e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=l.plasmid,e.stats.antiplasmid+=l.plasmid):(e.prestige.Plasmid.count+=l.plasmid,e.stats.plasmid+=l.plasmid),e.stats.pdebt=l.pdebt,e.prestige.Phage.count+=l.phage,e.stats.phage+=l.phage,e.prestige.AICore.count+=l.cores,e.stats.cores+=l.cores;let h=e.race.hasOwnProperty("srace")?e.race.srace:!1,v=e.race.hasOwnProperty("corruption")&&e.race.corruption>1?e.race.corruption-1:0;e.race={species:"protoplasm",gods:r,old_gods:a,universe:e.race.universe,seeded:!1,seed:Math.floor(R(1e4)),ascended:e.race.hasOwnProperty("ascended")?e.race.ascended:!1},v>0&&(e.race.corruption=v),h&&(e.race.srace=h),Sa({orbit:s,biome:n,ptrait:o,geology:c}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}function Pl(){Ae.w&&Ae.w.terminate(),e.sim||Le.setItem("evolveBak",LZString.compressToUTF16(JSON.stringify(e))),oa(),zt("reset",{end:"retired"});let r=e.race.species,a=e.race.gods,i=T[r].type==="hybrid"?e.race.maintype:T[r].type,s=e.city.calendar.orbit,n=e.city.biome,o=e.city.ptrait,c=e.city.geology,l=dt("retired");le(`biome_${n}`),o.forEach(function(_){et.hasOwnProperty(_)&&le(`atmo_${_}`)}),le(`genus_${i}`),e.race.gross_enabled&&e.race.ooze&&e.race.species!=="custom"&&e.race.species!=="sludge"&&e.race.species!="hybrid"&&le("gross"),le("retired"),Uo(),Zr(),e.stats.retire++,ma(),e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=l.plasmid,e.stats.antiplasmid+=l.plasmid):(e.prestige.Plasmid.count+=l.plasmid,e.stats.plasmid+=l.plasmid),e.stats.pdebt=l.pdebt,e.prestige.Phage.count+=l.phage,e.stats.phage+=l.phage,e.prestige.AICore.count+=l.cores,e.stats.cores+=l.cores;let h=e.race.hasOwnProperty("srace")?e.race.srace:!1,v=e.race.hasOwnProperty("corruption")&&e.race.corruption>1?e.race.corruption-1:0;e.race={species:"protoplasm",gods:r,old_gods:a,universe:e.race.universe,seeded:!1,seed:Math.floor(R(1e4)),ascended:e.race.hasOwnProperty("ascended")?e.race.ascended:!1},v>0&&(e.race.corruption=v),h&&(e.race.srace=h),Sa({orbit:s,biome:n,ptrait:o,geology:c}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}function Cl(){Ae.w&&Ae.w.terminate(),e.sim||Le.setItem("evolveBak",LZString.compressToUTF16(JSON.stringify(e))),oa(),zt("reset",{end:"eden"});let r=e.race.species,a=e.race.gods,i=T[r].type==="hybrid"?e.race.maintype:T[r].type,s=e.city.calendar.orbit,n=e.city.biome,o=e.city.ptrait,c=e.city.geology,l=dt("eden");le(`biome_${n}`),o.forEach(function(_){et.hasOwnProperty(_)&&le(`atmo_${_}`)}),le(`genus_${i}`),e.race.gross_enabled&&e.race.ooze&&e.race.species!=="custom"&&e.race.species!=="sludge"&&e.race.species!="hybrid"&&le("gross"),le("adam_eve"),Uo(),Zr(),e.stats.eden++,ma(),e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=l.plasmid,e.stats.antiplasmid+=l.plasmid):(e.prestige.Plasmid.count+=l.plasmid,e.stats.plasmid+=l.plasmid),e.stats.pdebt=l.pdebt,e.prestige.Phage.count+=l.phage,e.stats.phage+=l.phage,e.prestige.AICore.count+=l.cores,e.stats.cores+=l.cores;let h=e.race.hasOwnProperty("srace")?e.race.srace:!1,v=e.race.hasOwnProperty("corruption")&&e.race.corruption>1?e.race.corruption-1:0;e.race={species:"protoplasm",gods:r,old_gods:a,universe:e.race.universe,seeded:!1,seed:Math.floor(R(1e4)),ascended:e.race.hasOwnProperty("ascended")?e.race.ascended:!1},v>0&&(e.race.corruption=v),h&&(e.race.srace=h),Sa({orbit:s,biome:n,ptrait:o,geology:c}),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}function Sa(r){e.city={calendar:{day:0,year:0,weather:2,temp:1,moon:0,wind:0,orbit:r.orbit},biome:r.biome,ptrait:r.ptrait},r.geology&&(e.city.geology=r.geology),e.tech={theology:1},No(),e.new=!0,e.seed=Math.rand(0,1e4)}function Uo(){let r=wt();e.race.womling_friend?(r!=="m"&&e.stats.womling.friend.l++,r!=="l"&&(e.stats.womling.friend.hasOwnProperty(r)||(e.stats.womling.friend[r]=0),e.stats.womling.friend[r]++)):e.race.womling_lord?(r!=="m"&&e.stats.womling.lord.l++,r!=="l"&&(e.stats.womling.lord.hasOwnProperty(r)||(e.stats.womling.lord[r]=0),e.stats.womling.lord[r]++)):e.race.womling_god&&(r!=="m"&&e.stats.womling.god.l++,r!=="l"&&(e.stats.womling.god.hasOwnProperty(r)||(e.stats.womling.god[r]=0),e.stats.womling.god[r]++)),e.stats.womling.friend.l>0&&e.stats.womling.lord.l>0&&e.stats.womling.god.l>0&&le("overlord",r==="m",Xt(),"l"),e.stats.womling.friend[r]>0&&e.stats.womling.lord[r]>0&&e.stats.womling.god[r]>0&&le("overlord",r==="m",Xt(),r)}function js(r){if(e.race.species==="ultra_sludge"){let a=Xt(),i=wt();e.stats.death_tour[r][i]o&&(o=e.stats.death_tour[n][c])}),s>o&&(s=o)}),s>0&&We("grand_death_tour",!1,s)}}var cs={spc_titan:{info:{name(){return X().titan},desc(){return t("space_titan_info_desc",[X().titan,T[e.race.species].home])},support:"electrolysis",zone:"outer",syndicate(){return!!(e.tech.titan&&e.tech.titan>=3&&e.tech.enceladus&&e.tech.enceladus>=2)},syndicate_cap(){return e.tech.triton?e.tech.outer>=4?2e3:1e3:600}},titan_mission:{id:"space-titan_mission",title(){return t("space_mission_title",[X().titan])},desc(){return t("space_mission_desc",[X().titan])},reqs:{outer:1},grant:["titan",1],path:["truepath"],queue_complete(){return e.tech.titan>=1?0:1},cost:{Helium_3(r,a){return+He(25e4,!1,a).toFixed(0)},Elerium(){return 100}},effect(){return t("space_titan_mission_effect",[X().titan])},action(){return u($(this)[0])?(L(t("space_titan_mission_action",[X().titan,T[e.race.species].home]),"info",!1,["progress"]),!0):!1}},titan_spaceport:{id:"space-titan_spaceport",title:t("space_red_spaceport_title"),desc:`
${t("space_red_spaceport_desc")}
${t("requires_power")}
`,reqs:{titan:1},path:["truepath"],cost:{Money(r){return m("titan_spaceport",r,25e5,1.32)},Lumber(r){return m("titan_spaceport",r,75e4,1.32)},Cement(r){return m("titan_spaceport",r,35e4,1.32)},Mythril(r){return m("titan_spaceport",r,1e4,1.32)}},effect(){let r=e.resource.Water.display?`
${t("plus_max_resource",[Me(U(250)),e.resource.Water.name])}
`:"",a=e.tech.enceladus&&e.tech.enceladus>=2?`
+${t("galaxy_alien2_support",[$(this)[0].support(),X().enceladus])}
`:"",i=e.tech.titan&&e.tech.titan>=5?`
${t("space_titan_spaceport_storage",[25])}
`:"";return`${a}${r}${i}
${t("minus_power",[$(this)[0].powered()])}
`},support(){return 2},powered(){return he(10)},action(){return u($(this)[0])?(I("titan_spaceport"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0,support:0,s_max:0},p:["titan_spaceport","space"]}},post(){e.tech.titan===1&&(e.tech.titan=2,de())}},electrolysis:{id:"space-electrolysis",title:t("space_electrolysis_title"),desc(){return`
${t("space_electrolysis_title")}
${t("space_electrolysis_req",[e.resource.Water.name])}
`},reqs:{titan:3},path:["truepath"],cost:{Money(r){return m("electrolysis",r,1e6,1.25)},Copper(r){return m("electrolysis",r,185e3,1.25)},Steel(r){return m("electrolysis",r,22e4,1.25)},Polymer(r){return m("electrolysis",r,38e4,1.25)}},effect(r){return`${`
+${t("galaxy_alien2_support",[$(this)[0].support(r),X().titan])}
`}
${t("space_electrolysis_use",[$(this)[0].support_fuel().a,e.resource.Water.name,$(this)[0].powered()])}
`},support(r){return e.tech.titan_ai_core&&e.tech.titan_ai_core>=2&&(r?e.space.ai_core2.on:x.ai_core2)?3:2},support_fuel(){return{r:"Water",a:35}},powered(){return he(8)},action(){return u($(this)[0])?(I("electrolysis"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0,support:0,s_max:0},p:["electrolysis","space"]}},post(){e.tech.titan===3&&(e.tech.titan=4,de())}},hydrogen_plant:{id:"space-hydrogen_plant",title:t("space_hydrogen_plant_title"),desc(){return`
${t("space_hydrogen_plant_title")}
${t("space_hydrogen_plant_req")}
`},reqs:{titan_power:1},path:["truepath"],cost:{Money(r){return m("hydrogen_plant",r,15e5,1.28)},Iridium(r){return m("hydrogen_plant",r,292e3,1.28)},Stanene(r){return m("hydrogen_plant",r,599e3,1.28)},Cement(r){return m("hydrogen_plant",r,18e4,1.28)}},effect(){return`${t("space_dwarf_reactor_effect1",[-$(this)[0].powered()])}, ${t("space_hydrogen_plant_effect",[1,t("space_electrolysis_title")])}`},support(){return 2},powered(){return it(-22)},action(){return u($(this)[0])?(I("hydrogen_plant"),e.space.electrolysis.on>e.space.hydrogen_plant.on&&e.space.hydrogen_plant.on++,!0):!1},struct(){return{d:{count:0,on:0},p:["hydrogen_plant","space"]}}},titan_quarters:{id:"space-titan_quarters",title:t("interstellar_habitat_title"),desc(){return`
${t("interstellar_habitat_title")}
${t("space_habitat_req",[X().titan,e.resource.Food.name,e.resource.Water.name])}
`},reqs:{titan:4},path:["truepath"],cost:{Money(r){return m("titan_quarters",r,12e5,1.28)},Furs(r){return m("titan_quarters",r,85e3,1.28)},Plywood(r){return m("titan_quarters",r,1e5,1.28)},Horseshoe(){return e.race.hooved?1:0}},effect(){let r=N(1);return`
${t("space_used_support",[X().titan])}
${t("plus_max_resource",[N(1),e.race.truepath?t("job_colonist_tp",[X().titan]):t("colonist")])}
${t("plus_max_resource",[r,t("citizen")])}
${t("spend",[$(this)[0].support_fuel()[0].a,e.resource[$(this)[0].support_fuel()[0].r].name])}
${t("spend",[$(this)[0].support_fuel()[1].a,e.resource[$(this)[0].support_fuel()[1].r].name])}
`},s_type:"titan",support(){return-1},support_fuel(){return[{r:"Water",a:12},{r:"Food",a:500}]},powered(){return 0},action(){if(u($(this)[0])){if(I("titan_quarters"),e.civic.titan_colonist.display=!0,re($(this)[0])){e.resource[e.race.species].max+=N(1);let r=N(1);e.civic.titan_colonist.max+=r;let a=Math.min(r,e.civic[e.civic.d_job].workers);e.civic[e.civic.d_job].workers-=a,e.civic.titan_colonist.workers+=a}return e.space.titan_quarters.count===1&&Nt(),!0}return!1},struct(){return{d:{count:0,on:0},p:["titan_quarters","space"]}},citizens(){let r=1;return e.race.high_pop&&(r*=y.high_pop.vars()[0]),r}},titan_mine:{id:"space-titan_mine",title(){return Ze("mine")},desc(){return`
${t("space_red_mine_desc")}
${t("space_support",[X().titan])}
`},reqs:{titan:4},condition(){return!!(e.space.titan_quarters&&e.space.titan_quarters.count>0)},path:["truepath"],cost:{Money(r){return m("titan_mine",r,475e3,1.28)},Lumber(r){return m("titan_mine",r,568e3,1.28)},Wrought_Iron(r){return m("titan_mine",r,25e4,1.28)}},effect(){let r=D("titan_mine","adamantite"),a=D("titan_mine","aluminium"),i=+r.toFixed(3),s=+a.toFixed(3);return`
${t("space_used_support",[X().titan])}
${t("space_red_mine_effect",[i,e.resource.Adamantite.name])}
${t("space_red_mine_effect",[s,e.resource.Aluminium.name])}
`},s_type:"titan",support(){return-1},powered(){return 0},special(){return!0},action(){return u($(this)[0])?(I("titan_mine"),re($(this)[0]),e.space.titan_mine.count===1&&(e.resource.Adamantite.display=!0,Ve()),!0):!1},struct(){return{d:{count:0,on:0,ratio:90},p:["titan_mine","space"]}}},storehouse:{id:"space-storehouse",title:t("space_storehouse_title"),desc:t("space_storehouse_title"),reqs:{titan:5},path:["truepath"],cost:{Money(r){return m("storehouse",r,175e3,1.28)},Lumber(r){return m("storehouse",r,1e5,1.28)},Aluminium(r){return m("storehouse",r,12e4,1.28)},Cement(r){return m("storehouse",r,45e3,1.28)}},wide:!0,res(){return["Lumber","Stone","Furs","Copper","Iron","Aluminium","Cement","Coal","Steel","Titanium","Alloy","Polymer","Iridium","Chrysotile","Nano_Tube","Neutronium","Adamantite"]},heavy(r){return!!["Copper","Iron","Steel","Titanium","Iridium","Neutronium","Adamantite"].includes(r)},val(r){switch(r){case"Lumber":return 3e3;case"Stone":return 3e3;case"Chrysotile":return 3e3;case"Furs":return 1700;case"Copper":return 1520;case"Iron":return 1400;case"Aluminium":return 1280;case"Cement":return 1120;case"Coal":return 480;case"Steel":return 240;case"Titanium":return 160;case"Alloy":return 180;case"Polymer":return 150;case"Iridium":return 175;case"Nano_Tube":return 120;case"Neutronium":return 64;case"Adamantite":return 72;default:return 0}},effect(r){let a='
',i=ci("storehouse",!1,r),s=ci("storehouse",!0,r);for(let n of $(this)[0].res())if(e.resource[n].display){let o=$(this)[0].heavy(n),c=Me(+(U($(this)[0].val(n))*(o?s:i)).toFixed(0),1);a=a+`${t("plus_max_resource",[c,e.resource[n].name])}`}return a=a+"
",a},action(){if(u($(this)[0])){I("storehouse");let r=ci("storehouse",!1),a=ci("storehouse",!0);for(let i of $(this)[0].res())if(e.resource[i].display){let s=$(this)[0].heavy(i);e.resource[i].max+=U($(this)[0].val(i))*(s?a:r)}return!0}return!1},struct(){return{d:{count:0},p:["storehouse","space"]}}},titan_bank:{id:"space-titan_bank",title:t("city_bank"),desc(){return t("city_bank_desc",[X().titan])},reqs:{titan:6},path:["truepath"],cost:{Money(r){return m("titan_bank",r,Oe("untrustworthy",25e5),1.32)},Titanium(r){return m("titan_bank",r,Oe("untrustworthy",38e4),1.32)},Neutronium(r){return m("titan_bank",r,Oe("untrustworthy",5e3),1.32)}},effect(){let r=_r()*2;return r=U(r),r=(+r.toFixed(0)).toLocaleString(),t("plus_max_resource",[`$${r}`,e.resource.Money.name])},action(){return u($(this)[0])?(e.resource.Money.max+=U(1800),I("titan_bank"),!0):!1},struct(){return{d:{count:0},p:["titan_bank","space"]}}},g_factory:{id:"space-g_factory",title:t("interstellar_g_factory_title"),desc(){return`
${t("interstellar_g_factory_title")}
${t("space_support",[X().titan])}
`},reqs:{graphene:1},path:["truepath"],cost:{Money(r){return m("g_factory",r,95e4,1.28)},Copper(r){return m("g_factory",r,165e3,1.28)},Stone(r){return m("g_factory",r,22e4,1.28)},Adamantite(r){return m("g_factory",r,12500,1.28)}},effect(){let r=.05;return e.race.high_pop&&(r=+qe(r).toFixed(3)),`
${t("space_used_support",[X().titan])}
${t("space_red_mine_effect",[r,e.resource.Graphene.name])}
${t("interstellar_g_factory_effect")}
`},s_type:"titan",support(){return-1},powered(){return 0},special:!0,action(){return u($(this)[0])?(I("g_factory"),e.resource.Graphene.display=!0,re($(this)[0])&&(e.race.kindling_kindred||e.race.smoldering?e.space.g_factory.Oil++:e.space.g_factory.Lumber++),e.settings.showIndustry=!0,Ve(),!0):!1},struct(){return{d:{count:0,on:0,Lumber:0,Coal:0,Oil:0},p:["g_factory","space"]}}},sam:{id:"space-sam",title:t("space_sam_title"),desc(){return`
${t("space_sam_desc")}
${t("requires_power")}
`},reqs:{titan:7},path:["truepath"],cost:{Money(r){return m("sam",r,25e5,1.28)},Steel(r){return m("sam",r,45e4,1.28)},Elerium(r){return m("sam",r,120,1.28)},Brick(r){return m("sam",r,16e4,1.28)}},effect(){return`
${t("galaxy_defense_platform_effect",[25])}
`+`
${t("minus_power",[$(this)[0].powered()])}
`},powered(){return he(5)},action(){return u($(this)[0])?(I("sam"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["sam","space"]}},post(){V({el:"#spc_titansynd"},"update")}},decoder:{id:"space-decoder",title:t("space_decoder_title"),desc(){return`
${t("space_decoder_title")}
${t("requires_power_support_combo",[X().titan,e.resource.Cipher.name])}
`},reqs:{titan:8},path:["truepath"],cost:{Money(r){return m("decoder",r,125e5,1.275)},Elerium(r){return m("decoder",r,750,1.275)},Orichalcum(r){return m("decoder",r,33e4,1.275)},Quantium(r){return m("decoder",r,18e4,1.275)}},effect(r){let a=$(this)[0].support_fuel().a,i=2500;e.race.high_pop&&(i=qe(i)),(r?e.space?.ai_core2?.on??0:x.ai_core2)&&(i*=1.25);let s=`
${t("space_used_support",[X().titan])}
`;return s+=`
${t("space_red_exotic_lab_effect1",[i])}
`,s+`
${t("spend",[a,e.resource[$(this)[0].support_fuel().r].name])}
`},s_type:"titan",support(){return-1},powered(){return 0},support_fuel(){return{r:"Cipher",a:.06}},action(){return u($(this)[0])?(I("decoder"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["decoder","space"]}}},ai_core:{id:"space-ai_core",title:t("space_ai_core"),desc(r){return!e.space.hasOwnProperty("ai_core")||e.space.ai_core.count<100||r?`
${t("space_ai_core")}
${t("requires_segments",[100])}
`+(e.space.hasOwnProperty("ai_core")&&e.space.ai_core.count>=100?`
${t("requires_power")}
`:""):`
${t("space_ai_core")}
`},reqs:{titan:9},path:["truepath"],condition(){return!(e.space.ai_core.count>=100)},queue_size:10,queue_complete(){return 100-e.space.ai_core.count},cost:{Money(r){return(r||0)+(e.space.hasOwnProperty("ai_core")?e.space.ai_core.count:0)<100?25e5:0},Cement(r){return(r||0)+(e.space.hasOwnProperty("ai_core")?e.space.ai_core.count:0)<100?18e4:0},Aluminium(r){return(r||0)+(e.space.hasOwnProperty("ai_core")?e.space.ai_core.count:0)<100?25e4:0},Elerium(r){return(r||0)+(e.space.hasOwnProperty("ai_core")?e.space.ai_core.count:0)<100?250:0},Nano_Tube(r){return(r||0)+(e.space.hasOwnProperty("ai_core")?e.space.ai_core.count:0)<100?125e3:0},Orichalcum(r){return(r||0)+(e.space.hasOwnProperty("ai_core")?e.space.ai_core.count:0)<100?5e4:0},Quantium(r){return(r||0)+(e.space.hasOwnProperty("ai_core")?e.space.ai_core.count:0)<100?1e5:0},Cipher(r){return(r||0)+(e.space.hasOwnProperty("ai_core")?e.space.ai_core.count:0)<100?750:0}},effect(r){let a=`
${t("space_ai_core_effect")}
`,i=(r?.count??0)+(e.space.hasOwnProperty("ai_core")?e.space.ai_core.count:0);if(i<100){let s=100-i;a+=`
${t("space_dwarf_collider_effect2",[s])}
`}else return cs.spc_titan.ai_core2.effect(r);return a},action(){return u($(this)[0])&&e.space.ai_core.count<100?(I("ai_core"),e.space.ai_core.count>=100&&(e.tech.titan_ai_core=1,M(cs.spc_titan.ai_core2),I("ai_core2","space"),re(cs.spc_titan.ai_core2),Nt(),de(),e.city.ptrait.includes("kamikaze")&&!e.race.tidal_decay&&L(t("planet_kamikaze_stabilize",[T[e.race.species].home,100]),"info",!1,["progress"])),!0):!1},struct(){return{d:{count:0,on:0},p:["ai_core","space"]}}},ai_core2:{id:"space-ai_core2",title:t("space_ai_core"),desc(){return`
${t("space_ai_core")}
${t("space_electrolysis_req",[e.resource[$(this)[0].p_fuel().r].name])}
`},reqs:{titan_ai_core:1},path:["truepath"],condition(){return!!(e.space.hasOwnProperty("ai_core")&&e.space.ai_core.count>=100)},wiki:!1,queue_complete(){return 0},cost:{},powered(){return he(100)},p_fuel(){return{r:"Water",a:1e3}},effect(r){let a=25,i=`
${t("interstellar_citadel_stat",[+Ra(r).toFixed(1)])}
`;if(i+=`
${t("interstellar_citadel_effect",[a])}
${t("space_ai_core_effect2",[a])}
`,e.tech.titan_ai_core&&e.tech.titan_ai_core>=2&&(i+=`
${t("space_ai_core_effect3",[50])}
`),i+=`
${t("space_electrolysis_use",[$(this)[0].p_fuel().a,e.resource[$(this)[0].p_fuel().r].name,$(this)[0].powered()])}
`,e.tech.titan_ai_core&&e.tech.titan_ai_core>=3){let s=+Yo(r).toFixed(1);i+=`
${t("space_ai_core_effect4",[s])}
`}return i},action(){return!1},flair(){return e.space.hasOwnProperty("ai_core2")&&e.space.ai_core2.on>=1?t("space_ai_core_flair"):t("space_ai_core_flair2")},struct(){return{d:{count:0,on:0},p:["ai_core2","space"]}}},ai_colonist:{id:"space-ai_colonist",title:t("space_ai_colonist_title"),desc(){return`
${t("space_ai_colonist_title")}
${t("requires_power")}
`},reqs:{titan_ai_core:3},path:["truepath"],cost:{Money(r){return m("ai_colonist",r,112e6,1.35)},Alloy(r){return m("ai_colonist",r,75e4,1.35)},Elerium(r){return m("ai_colonist",r,500,1.35)},Nano_Tube(r){return m("ai_colonist",r,525e3,1.35)},Quantium(r){return m("ai_colonist",r,15e4,1.35)},Cipher(r){return m("ai_colonist",r,1e4,1.35)}},effect(){return`
${t("plus_max_resource",[N(1),e.race.truepath?t("job_colonist_tp",[X().titan]):t("colonist")])}
${t("space_ai_colonist_effect",[N(1),X().titan])}
${t("minus_power",[$(this)[0].powered()])}
`},powered(){return he(10)},action(){return u($(this)[0])?(I("ai_colonist"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["ai_colonist","space"]}},flair:t("tech_combat_droids_flair")},wonder_gardens:{id:"space-wonder_gardens",title(){return t("space_wonder_gardens",[X().titan])},desc(){return t("space_wonder_gardens",[X().titan])},reqs:{},condition(){return!!(e.race.wish&&e.race.wishStats&&e.portal.wonder_gardens)},trait:["wish"],queue_complete(){return!1},effect(){return t("city_wonder_effect",[5])},action(){return!1}}},spc_enceladus:{info:{name(){return X().enceladus},desc(){return t("space_enceladus_info_desc",[X().enceladus,T[e.race.species].home])},support:"titan_spaceport",zone:"outer",syndicate(){return!!(e.tech.titan&&e.tech.titan>=3&&e.tech.enceladus&&e.tech.enceladus>=2)},syndicate_cap(){return e.tech.triton?e.tech.outer>=4?1500:1e3:600}},enceladus_mission:{id:"space-enceladus_mission",title(){return t("space_mission_title",[X().enceladus])},desc(){return t("space_mission_desc",[X().enceladus])},reqs:{outer:1},grant:["enceladus",1],path:["truepath"],queue_complete(){return e.tech.enceladus>=1?0:1},cost:{Helium_3(r,a){return+He(25e4,!1,a).toFixed(0)},Elerium(){return 100}},effect(){return t("space_titan_mission_effect",[X().enceladus])},action(){return u($(this)[0])?(L(t("space_enceladus_mission_action",[X().enceladus]),"info",!1,["progress"]),e.resource.Water.display=!0,!0):!1}},water_freighter:{id:"space-water_freighter",title:t("space_water_freighter_title"),desc(){return`
${t("space_water_freighter_title")}
${t("space_support",[X().enceladus])}
`},reqs:{enceladus:2},path:["truepath"],cost:{Money(r){return m("water_freighter",r,45e4,1.25)},Iron(r){return m("water_freighter",r,362e3,1.25)},Nano_Tube(r){return m("water_freighter",r,125e3,1.25)},Sheet_Metal(r){return m("water_freighter",r,75e3,1.25)}},effect(r){let a=+He(5,!0,r).toFixed(2),i=+D("water_freighter").toFixed(2);return`
${t("space_used_support",[X().enceladus])}
${t("produce",[i,e.resource.Water.name])}
${t("space_belt_station_effect3",[a])}
`},s_type:"enceladus",support(){return-1},powered(){return 0},action(){return u($(this)[0])?(I("water_freighter"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["water_freighter","space"]}}},zero_g_lab:{id:"space-zero_g_lab",title:t("tech_zero_g_lab"),desc(){return`
${t("tech_zero_g_lab")}
${t("requires_power_support",[X().enceladus])}
`},reqs:{enceladus:3},path:["truepath"],cost:{Money(r){return m("zero_g_lab",r,5e6,1.25)},Alloy(r){return m("zero_g_lab",r,125e3,1.25)},Graphene(r){return m("zero_g_lab",r,225e3,1.25)},Stanene(r){return m("zero_g_lab",r,6e5,1.25)}},effect(){let r=At("spc_enceladus"),a=Math.round(1e4*r),i=`
${t("space_used_support",[X().enceladus])}
${t("city_max_knowledge",[a])}
`;return e.resource.Quantium.display&&(i=i+`
${t("space_zero_g_lab_effect",[N(1)])}
`),e.resource.Cipher.display&&(i=i+`
${t("plus_max_resource",[1e4,e.resource.Cipher.name])}
`),i+`
${t("minus_power",[$(this)[0].powered()])}
`},s_type:"enceladus",support(){return-1},powered(){return he(12)},action(){return u($(this)[0])?(I("zero_g_lab"),re($(this)[0]),e.space.zero_g_lab.count===1&&e.tech.quantium&&Tt(),!0):!1},struct(){return{d:{count:0,on:0},p:["zero_g_lab","space"]}},postPower(r){li("Quantium")}},operating_base:{id:"space-operating_base",title:t("tech_operating_base"),desc(){return`
${t("tech_operating_base")}
${t("requires_power_support",[X().enceladus])}
`},reqs:{enceladus:4},path:["truepath"],cost:{Money(r){return m("operating_base",r,75e5,1.3)},Furs(r){return m("operating_base",r,5e5,1.3)},Adamantite(r){return m("operating_base",r,375e3,1.3)},Stanene(r){return m("operating_base",r,75e4,1.3)},Mythril(r){return m("operating_base",r,225e3,1.3)},Horseshoe(){return e.race.hooved?4:0}},effect(){let r=`
${t("space_used_support",[X().enceladus])}
`;if(r+=`
${t("galaxy_defense_platform_effect",[50])}
`,r+=t("plus_max_resource",[$(this)[0].soldiers(),t("civics_garrison_soldiers")]),e.race.orbit_decayed){let a=e.tech.medic*5;r+=`
${t("city_hospital_effect",[a])}
`}return r+`
${t("minus_power",[$(this)[0].powered()])}
`},s_type:"enceladus",support(){return-1},powered(){return he(10)},action(){return u($(this)[0])?(I("operating_base"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["operating_base","space"]}},soldiers(){let r=e.race.grenadier?3:4;return N(r)},post(){V({el:"#spc_enceladussynd"},"update")}},munitions_depot:{id:"space-munitions_depot",title:t("tech_munitions_depot"),desc:t("tech_munitions_depot"),category:"storage",era:"solar",reqs:{enceladus:5},path:["truepath"],cost:{Money(r){return m("munitions_depot",r,5e6,1.22)},Iron(r){return m("munitions_depot",r,185e3,1.22)},Sheet_Metal(r){return m("munitions_depot",r,1e5,1.22)}},effect(){let r=25;return`
${t("plus_max_crates",[r])}
${t("plus_max_containers",[r])}
`},action(){return u($(this)[0])?(I("munitions_depot"),e.resource.Crates.max+=25,e.resource.Containers.max+=25,e.resource.Containers.display||Aa(),!0):!1},struct(){return{d:{count:0},p:["munitions_depot","space"]}}}},spc_triton:{info:{name(){return X().triton},desc(){return t("space_triton_info_desc",[X().triton,T[e.race.species].home])},zone:"outer",syndicate(){return!!(e.tech.triton&&e.tech.triton>=2)},syndicate_cap(){return e.tech.outer&&e.tech.outer>=4?5e3:3e3},extra(r){e.tech.triton&&e.tech.triton>=3&&($(`#${r}`).append(`
${t("space_ground_resist")}
`),V({el:`#${r}resist`,data:e.space.fob,methods:{threat(a,i){let s=e.civic.garrison.wounded-Ge();s<0&&(s=0);let n=+(a-nt(i,"army",s)).toFixed(0);return n<0?0:n}}}))}},triton_mission:{id:"space-triton_mission",title(){return t("space_mission_title",[X().triton])},desc(){return t("space_mission_desc",[X().triton])},reqs:{outer:2},grant:["triton",1],path:["truepath"],queue_complete(){return e.tech.triton>=1?0:1},cost:{Helium_3(r,a){return+He(6e5,!1,a).toFixed(0)},Elerium(){return 2500}},effect(){return t("space_triton_mission_effect",[X().triton])},action(){return u($(this)[0])?(L(t("space_triton_mission_action",[X().triton]),"info",!1,["progress"]),e.space.syndicate.spc_triton=1250,e.space.syndicate.spc_titan+=250,e.space.syndicate.spc_enceladus+=250,!0):!1}},fob:{id:"space-fob",title:t("space_fob_title"),desc(){return`
${t("tech_fob")}
${t("requires_power_combo",[e.resource.Helium_3.name])}
`},reqs:{triton:2},path:["truepath"],queue_complete(){return 1-e.space.fob.count},cost:{Money(r){return(r||0)+(e.space.hasOwnProperty("fob")?e.space.fob.count:0)>=1?0:m("fob",r,25e7,1.1)},Copper(r){return(r||0)+(e.space.hasOwnProperty("fob")?e.space.fob.count:0)>=1?0:m("fob",r,8e6,1.1)},Uranium(r){return(r||0)+(e.space.hasOwnProperty("fob")?e.space.fob.count:0)>=1?0:m("fob",r,5e4,1.1)},Nano_Tube(r){return(r||0)+(e.space.hasOwnProperty("fob")?e.space.fob.count:0)>=1?0:m("fob",r,25e5,1.1)},Graphene(r){return(r||0)+(e.space.hasOwnProperty("fob")?e.space.fob.count:0)>=1?0:m("fob",r,3e6,1.1)},Sheet_Metal(r){return(r||0)+(e.space.hasOwnProperty("fob")?e.space.fob.count:0)>=1?0:m("fob",r,75e5,1.1)},Quantium(r){return(r||0)+(e.space.hasOwnProperty("fob")?e.space.fob.count:0)>=1?0:m("fob",r,5e5,1.1)},Horseshoe(r){return e.race.hooved&&(r||0)+(e.space.hasOwnProperty("fob")?e.space.fob.count:0)<1?10:0}},effect(r){let a=Ge(),i=Ge(!0),s=`
${t("galaxy_defense_platform_effect",[500])}
`;s+=t("plus_max_resource",[$(this)[0].soldiers(),t("civics_garrison_soldiers")]),s+=`
${t("civics_garrison_soldiers")}: ${a} / ${i}
`,s+=`
${t("civics_garrison_wounded")}: ${e.civic.garrison?e.civic.garrison.wounded:0}
`,s+=`
${t("space_fob_landed",[e.space.fob?e.space.fob.troops:0])}
`;let n=+He(125,!0,r).toFixed(2);return s+`
${t("requires_power_combo_effect",[$(this)[0].powered(),n,e.resource.Helium_3.name])}
`},powered(){return he(50)},action(){return e.space.fob.count<1&&u($(this)[0])?(I("fob"),re($(this)[0]),e.tech.triton===2&&(e.tech.triton=3),!0):!1},struct(){return{d:{count:0,on:0,troops:0,enemy:0},p:["fob","space"]}},soldiers(){let r=e.race.grenadier?6:10;return N(r)},post(){de(),Nt(),L(t("space_fob_msg"),"info",!1,["progress"])}},lander:{id:"space-lander",title:t("space_lander_title"),desc(){return`
${t("space_lander_title")}
${t("requires_soldiers")}
${t("space_red_space_barracks_desc_req")}
`},reqs:{triton:3},path:["truepath"],cost:{Money(r){return m("lander",r,24e5,1.15)},Aluminium(r){return m("lander",r,185e3,1.15)},Neutronium(r){return m("lander",r,1e4,1.15)},Nano_Tube(r){return m("lander",r,158e3,1.15)}},powered(){return 0},effect(r){let a=+He(50,!0,r).toFixed(2),i="";return e.space.crashed_ship&&e.space.crashed_ship.count===100&&(i=`
${t("space_lander_effect3",[D("lander"),e.resource.Cipher.name])}
`),`
${t("space_lander_effect",[X().triton])}
${i}
${t("space_lander_effect2",[N(3)])}
${t("space_red_space_barracks_effect2",[a])}
`},action(){return u($(this)[0])?(I("lander"),e.space.lander.on++,!0):!1},struct(){return{d:{count:0,on:0},p:["lander","space"]}}},crashed_ship:{id:"space-crashed_ship",title:t("space_crashed_ship_title"),desc(){return`
${t("space_crashed_ship_title")}
`},reqs:{triton:3},path:["truepath"],queue_complete(){return 0},cost:{},effect(){let r=e.space.crashed_ship?e.space.crashed_ship.count:0;return`
${t("space_crashed_ship_effect",[r])}
`},action(){return!1},struct(){return{d:{count:0},p:["crashed_ship","space"]}}}},spc_kuiper:{info:{name(){return t("space_kuiper_title")},desc(){return t("space_kuiper_desc")},zone:"outer",syndicate(){return!!e.tech.kuiper},syndicate_cap(){return 2500}},kuiper_mission:{id:"space-kuiper_mission",title(){return t("space_mission_title",[t("space_kuiper_title")])},desc(){return t("space_mission_desc",[t("space_kuiper_title")])},reqs:{outer:7},grant:["kuiper",1],path:["truepath"],queue_complete(){return e.tech.kuiper>=1?0:1},cost:{Helium_3(r,a){return+He(1e6,!1,a).toFixed(0)},Elerium(){return 1e3}},effect(){return t("space_kuiper_mission_effect")},action(){return u($(this)[0])?(M(cs.spc_kuiper.orichalcum_mine),M(cs.spc_kuiper.uranium_mine),M(cs.spc_kuiper.neutronium_mine),e.space.syndicate.spc_kuiper=500,L(t("space_kuiper_mission_action"),"info",!1,["progress"]),!0):!1}},orichalcum_mine:{id:"space-orichalcum_mine",title(){return t("space_kuiper_mine",[e.resource.Orichalcum.name])},desc(){return`
${t("space_kuiper_mine",[e.resource.Orichalcum.name])}
${t("requires_power_combo",[e.resource.Oil.name])}
`},reqs:{kuiper:1},path:["truepath"],cost:{Money(r){return m("orichalcum_mine",r,25e6,1.25)},Graphene(r){return m("orichalcum_mine",r,9e5,1.25)},Elerium(r){return m("orichalcum_mine",r,200,1.25)},Mythril(r){return m("orichalcum_mine",r,45e4,1.25)},Quantium(r){return m("orichalcum_mine",r,15e4,1.25)}},effect(r){let a=+D("orichalcum_mine").toFixed(3),i=+He($(this)[0].p_fuel().a,!0,r).toFixed(1);return`
${t("gain",[a,e.resource.Orichalcum.name])}
`+`
${t("requires_power_combo_effect",[$(this)[0].powered(),i,e.resource[$(this)[0].p_fuel().r].name])}
`},powered(){return he(10)},p_fuel(){return{r:"Oil",a:200}},action(){return u($(this)[0])?(I("orichalcum_mine"),e.resource.Orichalcum.display=!0,re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["orichalcum_mine","space"]}}},uranium_mine:{id:"space-uranium_mine",title(){return t("space_kuiper_mine",[e.resource.Uranium.name])},desc(){return`
${t("space_kuiper_mine",[e.resource.Uranium.name])}
${t("requires_power_combo",[e.resource.Oil.name])}
`},reqs:{kuiper:1},path:["truepath"],cost:{Money(r){return m("uranium_mine",r,5e6,1.25)},Iridium(r){return m("uranium_mine",r,25e4,1.25)},Steel(r){return m("uranium_mine",r,62e4,1.25)}},effect(r){let a=+D("uranium_mine").toFixed(3),i=+He($(this)[0].p_fuel().a,!0,r).toFixed(1);return`
${t("gain",[a,e.resource.Uranium.name])}
`+`
${t("requires_power_combo_effect",[$(this)[0].powered(),i,e.resource[$(this)[0].p_fuel().r].name])}
`},powered(){return he(5)},p_fuel(){return{r:"Oil",a:60}},action(){return u($(this)[0])?(I("uranium_mine"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["uranium_mine","space"]}}},neutronium_mine:{id:"space-neutronium_mine",title(){return t("space_kuiper_mine",[e.resource.Neutronium.name])},desc(){return`
${t("space_kuiper_mine",[e.resource.Neutronium.name])}
${t("requires_power_combo",[e.resource.Oil.name])}
`},reqs:{kuiper:1},path:["truepath"],cost:{Money(r){return m("neutronium_mine",r,8e6,1.25)},Adamantite(r){return m("neutronium_mine",r,65e4,1.25)},Stanene(r){return m("neutronium_mine",r,125e4,1.25)}},effect(r){let a=+D("neutronium_mine").toFixed(3),i=+He($(this)[0].p_fuel().a,!0,r).toFixed(1);return`
${t("gain",[a,e.resource.Neutronium.name])}
`+`
${t("requires_power_combo_effect",[$(this)[0].powered(),i,e.resource[$(this)[0].p_fuel().r].name])}
`},powered(){return he(8)},p_fuel(){return{r:"Oil",a:60}},action(){return u($(this)[0])?(I("neutronium_mine"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["neutronium_mine","space"]}}},elerium_mine:{id:"space-elerium_mine",title(){return t("space_kuiper_mine",[e.resource.Elerium.name])},desc(){return`
${t("space_kuiper_mine",[e.resource.Elerium.name])}
${t("requires_power_combo",[e.resource.Oil.name])}
`},reqs:{kuiper:2},path:["truepath"],cost:{Money(r){return m("elerium_mine",r,2e7,1.25)},Titanium(r){return m("elerium_mine",r,25e4,1.25)},Neutronium(r){return m("elerium_mine",r,12e4,1.25)},Orichalcum(r){return m("elerium_mine",r,175e3,1.25)}},effect(r){let a=+D("elerium_mine").toFixed(3),i=+He($(this)[0].p_fuel().a,!0,r).toFixed(1);return`
${t("gain",[a,e.resource.Elerium.name])}
`+`
${t("requires_power_combo_effect",[$(this)[0].powered(),i,e.resource[$(this)[0].p_fuel().r].name])}
`},powered(){return he(12)},p_fuel(){return{r:"Oil",a:125}},action(){return u($(this)[0])?(I("elerium_mine"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["elerium_mine","space"]}}}},spc_eris:{info:{name(){return X().eris},desc(){return t("space_eris_info_desc",[X().eris])},support:"drone_control",zone:"outer",syndicate(){return!!e.tech.eris},syndicate_cap(){return 7500},extra(r){e.tech.eris&&e.tech.eris===1&&($(`#${r}`).append(`
${t("space_scanned")} {{ eris_scan }}%
`),V({el:`#${r}scanned`,data:e.tech}))}},eris_mission:{id:"space-eris_mission",title(){return t("space_mission_title",[X().eris])},desc(){return t("space_mission_desc",[X().eris])},reqs:{outer:7},grant:["eris",1],path:["truepath"],queue_complete(){return e.tech.eris>=1?0:1},cost:{Helium_3(r,a){return+He(125e4,!1,a).toFixed(0)},Elerium(){return 1250}},effect(){return t("space_eris_mission_effect",[X().eris])},action(){return u($(this)[0])?(e.space.syndicate.spc_eris=4e3,L(t("space_eris_mission_action",[X().eris]),"info",!1,["progress"]),!0):!1}},drone_control:{id:"space-drone_control",title(){return t("space_drone_control",[X().titan])},desc(){return`
${t("space_drone_control",[X().titan])}
${t("requires_power_combo",[e.resource[$(this)[0].p_fuel().r].name])}
`},reqs:{eris:3},path:["truepath"],cost:{Money(r){return m("drone_control",r,75e6,1.3)},Neutronium(r){return m("drone_control",r,1e5,1.3)},Stanene(r){return m("drone_control",r,45e4,1.3)},Quantium(r){return m("drone_control",r,3e5,1.3)}},effect(){let r=$(this)[0].p_fuel().a;return`
+${t("galaxy_alien2_support",[$(this)[0].support(),X().eris])}
`+`
${t("requires_power_combo_effect",[$(this)[0].powered(),r,e.resource[$(this)[0].p_fuel().r].name])}
`},support(){return 5},powered(){return he(25)},p_fuel(){return{r:"Uranium",a:5}},action(){return u($(this)[0])?(I("drone_control"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0,support:0,s_max:0},p:["drone_control","space"]}}},shock_trooper:{id:"space-shock_trooper",title:t("space_shock_trooper_title"),desc(){return`
${t("space_shock_trooper_title")}
${t("space_support",[X().eris])}
`},reqs:{eris:3},path:["truepath"],cost:{Money(r){return m("shock_trooper",r,425e4,1.225)},Polymer(r){return m("shock_trooper",r,375e3,1.225)},Adamantite(r){return m("shock_trooper",r,5e5,1.225)},Graphene(r){return m("shock_trooper",r,22e4,1.225)},Elerium(r){return m("shock_trooper",r,350,1.225)}},effect(){let r=Math.round(nt(1,"army",0)*At("spc_eris")),a=`
${t("space_used_support",[X().eris])}
`;return e.space.digsite&&e.space.digsite.count===100&&(a=`
${t("space_lander_effect3",[D("shock_trooper"),e.resource.Cipher.name])}
`),a+`
${t("space_digsite_offense",[r])}
`},s_type:"eris",support(){return-1},powered(){return 0},action(){return u($(this)[0])?(I("shock_trooper"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["shock_trooper","space"]}}},tank:{id:"space-tank",title:t("space_tank_title"),desc(){return`
${t("space_tank_title")}
${t("space_support",[X().eris])}
`},reqs:{eris:4},path:["truepath"],cost:{Money(r){return m("tank",r,1e8,1.25)},Alloy(r){return m("tank",r,125e4,1.25)},Orichalcum(r){return m("tank",r,6e5,1.25)},Mythril(r){return m("tank",r,5e5,1.25)},Uranium(r){return m("tank",r,25e3,1.25)}},effect(){let r=Math.round(100*At("spc_eris")),a=`
${t("space_used_support",[X().eris])}
`;return e.space.digsite&&e.space.digsite.count===100&&(a=`
${t("space_lander_effect3",[D("tank"),e.resource.Cipher.name])}
`),a+`
${t("space_digsite_offense",[r])}
`},s_type:"eris",support(){return-1},powered(){return 0},action(){return u($(this)[0])?(I("tank"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["tank","space"]}}},digsite:{id:"space-digsite",title:t("space_digsite_title"),desc(){return`
${t("space_digsite_title")}
`},reqs:{eris:3},path:["truepath"],queue_complete(){return 0},cost:{},effect(){let r=e.space.digsite?e.space.digsite.count:0;return`
${t("space_crashed_ship_effect",[r])}
`},action(){return!1},struct(){return{d:{count:0,enemy:1e4},p:["digsite","space"]}}}}},Je={tau_star:{info:{name(){return t("tab_tauceti")},desc(){return t("tau_star",[t("tab_tauceti"),t("space_sun_info_name")])}},ringworld:{id:"tauceti-ringworld",title:t("tau_star_ringworld"),desc(r){return!e.tauceti.hasOwnProperty("ringworld")||e.tauceti.ringworld.count<1e3||r?`
${t("tau_star_ringworld")}
${t("requires_segments",[1e3])}
`:`
${t("tau_star_ringworld")}
`},reqs:{matrix:2},path:["truepath"],queue_size:50,queue_complete(){return 1e3-e.tauceti.ringworld.count},cost:{Money(r){return(r||0)+(e.tauceti.hasOwnProperty("ringworld")?e.tauceti.ringworld.count:0)<1e3?e.race.lone_survivor?1e7:1e8:0},Neutronium(r){return(r||0)+(e.tauceti.hasOwnProperty("ringworld")?e.tauceti.ringworld.count:0)<1e3?e.race.lone_survivor?2e4:1e5:0},Nano_Tube(r){return(r||0)+(e.tauceti.hasOwnProperty("ringworld")?e.tauceti.ringworld.count:0)<1e3?e.race.lone_survivor?7e4:35e4:0},Adamantite(r){return(r||0)+(e.tauceti.hasOwnProperty("ringworld")?e.tauceti.ringworld.count:0)<1e3?e.race.lone_survivor?2e5:1e6:0},Bolognium(r){return(r||0)+(e.tauceti.hasOwnProperty("ringworld")?e.tauceti.ringworld.count:0)<1e3?e.race.lone_survivor?17600:88e3:0},Orichalcum(r){return(r||0)+(e.tauceti.hasOwnProperty("ringworld")?e.tauceti.ringworld.count:0)<1e3?e.race.lone_survivor?25e3:125e3:0},Unobtainium(r){return(r||0)+(e.tauceti.hasOwnProperty("ringworld")?e.tauceti.ringworld.count:0)<1e3?e.race.lone_survivor?360:1800:0},Quantium(r){return(r||0)+(e.tauceti.hasOwnProperty("ringworld")?e.tauceti.ringworld.count:0)<1e3?ja(e.race.lone_survivor?10100:101e3):0}},effect(r){let a="",i=(r?.count??0)+(e.tauceti.hasOwnProperty("ringworld")?e.tauceti.ringworld.count:0);if(i<1e3){let s=1e3-i;a+=`
${t("tau_star_ringworld_effect")}
`,a+=`
${t("space_dwarf_collider_effect2",[s])}
`}else a+=`
${t("space_dwarf_reactor_effect1",[e.race.lone_survivor?100:1e4])}
`;return a},action(){return u($(this)[0])&&e.tauceti.ringworld.count<1e3?(I("ringworld","tauceti"),e.tauceti.ringworld.count>=1e3&&(e.race.lone_survivor?e.tech.eden=1:(e.tech.matrix=3,e.tauceti.matrix={count:1,on:0}),de(),Gr(),Ie()),!0):!1},struct(){return{d:{count:0},p:["ringworld","tauceti"]}}},matrix:{id:"tauceti-matrix",title:t("tau_star_matrix"),desc(){return`
${t("tau_star_matrix")}
${t("requires_power")}
`},reqs:{matrix:3},condition(){return e.tauceti.ringworld.count>=1e3},queue_complete(){return 0},cost:{},powered(){return 1e4},postPower(r){if(r&&x.matrix)e.tech.matrix=4,Gr();else if(e.tech.matrix>3&&(e.tech.matrix=3,Gr()),r)return!0},effect(){let r=Ol(),a=$(this)[0].powered(),i=a>0?`
${t("minus_power",[a])}
`:"";return`
${t("tau_star_matrix_effect")}
${r}${i}`},action(){return!1}},blue_pill:{id:"tauceti-blue_pill",title:t("tau_star_blue_pill"),desc:t("tau_star_blue_pill"),wiki:!1,reqs:{matrix:4},queue_complete(){return 0},no_multi:!0,cost:{},effect(){let r=Ol();return`
${t("tau_star_blue_pill_effect")}
${r}`},action(){if(u($(this)[0])){let c=function(){a.fillStyle="#0001",a.fillRect(0,0,i,s),a.fillStyle="#0f0",a.font="15pt monospace",o.forEach((l,h)=>{let v=String.fromCharCode(Math.rand(65382,65438)),_=h*20;a.fillText(v,_,l),l>100+Math.random()*1e4?o[h]=0:o[h]=l+20})};$("body").append('');let r=document.getElementById("matrix"),a=r.getContext("2d"),i=r.width=document.body.offsetWidth,s=r.height=document.body.offsetHeight,n=Math.floor(i/20)+1,o=Array(n).fill(0);return setInterval(c,50),setTimeout(function(){Ml()},5e3),!0}return!1}},goe_facility:{id:"tauceti-goe_facility",title:t("tau_star_goe_facility"),desc(){return`
${t("tau_star_goe_facility")}
`},reqs:{eden:2},condition(){return e.tauceti.ringworld.count>=1e3},queue_complete(){return 0},cost:{Money(r){return 1e6},Copper(r){return 1e7},Graphene(r){return 5e6},Stanene(r){return 8e6},Elerium(r){return 1e4}},effect(){let r=N0();return`
${t("tau_star_goe_facility_effect")}
${r}`},action(){if(u($(this)[0])){let r=Lr(Je.tau_star.goe_facility);return Object.keys(r).forEach(function(a){e.resource[a].amount+=r[a]()}),Cl(),!1}return!1},struct(){return{d:{count:0},p:["goe_facility","tauceti"]}}}},tau_home:{info:{name(){return t("tau_planet",[T[e.race.species].home])},desc(){return t("tau_home",[T[e.race.species].home])},support:"orbital_station",extra(r){e.tech.tau_home&&e.tech.tau_home>=2&&!Ir()&&($(`#${r}`).append(`
${t("resource_Materials_name")} {{ locale(locale(round(amount)) }} / {{ max) }}
`),V({el:`#${r}Mats`,data:e.resource.Materials,methods:{tauShow(){return!Ir()},round(a){return+a.toFixed(0)},locale(a){return a.toLocaleString()}}}))}},home_mission:{id:"tauceti-home_mission",title(){return t("tau_new_mission_title",[T[e.race.species].home])},desc(){return t("tau_new_mission_title",[T[e.race.species].home])},reqs:{tauceti:2},grant:["tau_home",1],path:["truepath"],queue_complete(){return e.tech.tau_home>=1?0:1},cost:{Money(){return 1e9}},effect(){return t("tau_new_mission_effect",[T[e.race.species].home])},action(){return u($(this)[0])?(M(Je.tau_home.colony),M(Je.tau_home.mining_pit),L(t("tau_home_mission_result",[T[e.race.species].home]),"info",!1,["progress"]),!0):!1}},dismantle:{id:"tauceti-dismantle",title(){return t("tau_home_dismantle")},desc(){return t("tau_home_dismantle")},reqs:{tau_home:1},grant:["tau_home",2],path:["truepath"],queue_complete(){return e.tech.tau_home>=2?0:1},cost:{Money(){return 1e8}},effect(){let r="Explorer";if(e.space.hasOwnProperty("shipyard")&&e.space.shipyard.hasOwnProperty("ships")){let a=e.space.shipyard.ships.findIndex(i=>i.location==="tauceti"&&i.class==="explorer");a!==-1&&(r=e.space.shipyard.ships[a].name)}return t("tau_home_dismantle_effect",[r])},action(){let r=-1;if(e.space.hasOwnProperty("shipyard")&&e.space.shipyard.hasOwnProperty("ships")&&(r=e.space.shipyard.ships.findIndex(a=>a.location==="tauceti"&&a.class==="explorer")),r>=0&&u($(this)[0])){if(e.space.shipyard.ships.splice(r,1),I("orbital_station","tauceti"),I("colony","tauceti"),I("mining_pit","tauceti"),e.civic.pit_miner.display=!0,e.resource.Materials.display=!0,re($(Je.tau_home.orbital_station)[0])){e.tauceti.colony.on++,e.tauceti.mining_pit.on++;let a=$(Je.tau_home.mining_pit)[0].workers();e.civic.pit_miner.max+=a;let i=Math.min(a,e.civic[e.civic.d_job].workers);e.civic[e.civic.d_job].workers-=i,e.civic.pit_miner.workers+=i}return ls(),!0}return!1}},orbital_station:{id:"tauceti-orbital_station",title:t("tau_home_orbital_station"),desc:`
${t("tau_home_orbital_station")}
${t("requires_power")}
`,reqs:{tau_home:2},path:["truepath"],cost:{Money(r){return m("orbital_station",r,8e7,1.3,"tauceti")},Materials(r){return Ir()?0:m("orbital_station",r,5e5,1.3,"tauceti")},Helium_3(r){return Ir()?m("orbital_station",r,Ue(25e4),1.3,"tauceti"):0},Copper(r){return Ir()?m("orbital_station",r,125e4,1.3,"tauceti"):0},Adamantite(r){return Ir()?m("orbital_station",r,9e5,1.3,"tauceti"):0}},effect(){let r=U(15e3),a=+Ue($(this)[0].support_fuel().a).toFixed(1),i=`
${t("space_red_spaceport_effect1",[t("tau_planet",[T[e.race.species].home]),$(this)[0].support()])}
`;return i+=`
${t("plus_max_resource",[r.toLocaleString(),e.resource.Helium_3.name])}
`,e.race.universe==="evil"&&(e.race.lone_survivor||e.tech.isolation)&&(i+=`
${t("plus_max_resource",[1,e.resource.Authority.name])}
`),i+=`
${t("spend_power",[a,e.resource[$(this)[0].support_fuel().r].name,$(this)[0].powered()])}
`,i},support_fuel(){return{r:"Helium_3",a:e.tech.isolation?e.race.lone_survivor?5:25:400}},support(){return 3},powered(){return he(e.tech.isolation?e.race.lone_survivor?4:6:30)},refresh:!0,action(){return u($(this)[0])?(I("orbital_station","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0,support:0,s_max:0},p:["orbital_station","tauceti"]}}},colony:{id:"tauceti-colony",title:t("tau_home_colony"),desc(){return`
${t("tau_home_colony_desc",[T[e.race.species].home])}
${t("requires_power_support_combo",[T[e.race.species].home,e.resource.Food.name])}
`},reqs:{tau_home:2},path:["truepath"],cost:{Money(r){return m("colony",r,1575e4,1.225,"tauceti")},Materials(r){return Ir()?0:m("colony",r,65e4,1.225,"tauceti")},Furs(r){return Ir()?m("colony",r,72e4,1.225,"tauceti"):0},Graphene(r){return Ir()?m("colony",r,485e3,1.225,"tauceti"):0},Brick(r){return Ir()?m("colony",r,ja(88e4),1.225,"tauceti"):0}},effect(){let r=$(this)[0].citizens(),a=e.tech.isolation?900:250,i=+$(this)[0].support_fuel().a.toFixed(1),s=`
${t("tau_new_support",[$(this)[0].support(),T[e.race.species].home])}
`;if(e.race.lone_survivor||(s=s+`
${t("plus_max_citizens",[r])}
`),e.tech.isolation){let n=_r()*25;n=U(n),n=(+n.toFixed(0)).toLocaleString(),s+=`
${t("plus_max_resource",[`$${n}`,e.resource.Money.name])}
`}if(s+=`
${t("tau_home_colony_effect",[50,T[e.race.species].home])}
`,e.tech.isolation){let o=((_e("gaslighter",0)||0)+(e.tech.broadcast||0))*2;s+=`
${t("space_red_vr_center_effect1",[o])}
`}return s+=`
${t("plus_max_resource",[a,e.resource.Crates.name])}
${t("plus_max_resource",[a,e.resource.Containers.name])}
`,e.race.universe==="evil"&&(e.race.lone_survivor||e.tech.isolation)&&(s+=`
${t("plus_resource",[5,e.resource.Authority.name])}
`),e.race.lone_survivor?s+=`
${t("gain",[-i,e.resource[$(this)[0].support_fuel().r].name])}
`:s+=`
${t("spend",[i,e.resource[$(this)[0].support_fuel().r].name])}
`,s},s_type:"tau_home",support(){return-2},support_fuel(){return{r:"Food",a:e.tech.isolation?e.race.lone_survivor?-2:75:1e3}},powered(){return 0},action(){return u($(this)[0])?(I("colony","tauceti"),re($(this)[0]),e.resource.Containers.display||Aa(),!0):!1},struct(){return{d:{count:0,on:0},p:["colony","tauceti"]}},citizens(){let r=e.tech.isolation?8:5;return e.race.high_pop&&(r*=y.high_pop.vars()[0]),e.race.lone_survivor?0:r}},tau_housing:{id:"tauceti-tau_housing",title(){return Rt("small")},desc(){return $(this)[0].citizens()===1?t("city_basic_housing_desc"):t("city_basic_housing_desc_plural",[$(this)[0].citizens()])},category:"residential",reqs:{housing:1,isolation:1},condition(){return!e.race.lone_survivor},cost:{Money(r){return m("tau_housing",r,15e4,1.15,"tauceti")},Lumber(r){return e.race.kindling_kindred||e.race.smoldering?0:m("tau_housing",r,125e3,1.25,"tauceti")},Stone(r){return e.race.kindling_kindred?m("tau_housing",r,125e3,1.25,"tauceti"):0},Chrysotile(r){return e.race.smoldering?m("tau_housing",r,5e4,1.25,"tauceti"):0},Horseshoe(){return e.race.hooved?1:0}},effect(){let r=$(this)[0].citizens();return e.race.sappy?`
${t("plus_max_resource",[r,t("citizen")])}
${t("city_grove_effect",[2.5])}
`:t("plus_max_resource",[r,t("citizen")])},action(){return u($(this)[0])?(I("tau_housing","tauceti"),!0):!1},struct(){return{d:{count:0},p:["tau_housing","tauceti"]}},citizens(){let r=1;return e.race.high_pop&&(r*=y.high_pop.vars()[0]),r}},captive_housing:Vt("captive_housing","tauceti"),pylon:{id:"tauceti-pylon",title:t("tau_home_pylon"),desc:t("tau_home_pylon"),reqs:{magic:2},condition(){return!!(e.tech.isolation&&e.tauceti.hasOwnProperty("pylon"))},cost:{Money(r){return m("pylon",r,50,1.48,"tauceti")},Stone(r){return m("pylon",r,100,1.42,"tauceti")},Crystal(r){return m("pylon",r,8,1.42,"tauceti")-3}},effect(){let r=U(2),a=+(.0125*xt("magic")).toFixed(3);return`
${t("gain",[a,e.resource.Mana.name])}
${t("plus_max_resource",[r,e.resource.Mana.name])}
`},special(){return!!(e.tech.magic&&e.tech.magic>=3)},action(){return u($(this)[0])?(I("pylon","tauceti"),e.resource.Mana.max+=U(2),!0):!1},struct(){return{d:{count:0},p:["pylon","tauceti"]}}},cloning_facility:{id:"tauceti-cloning_facility",title:t("tau_home_cloning"),desc(){return t("tau_home_cloning_desc",[T[e.race.species].name])},category:"military",reqs:{cloning:1},path:["truepath"],queue_complete(){return e.resource[e.race.species].max-e.resource[e.race.species].amount},cost:{Money(r){return e.resource[e.race.species].amount?m("citizen",r,Math.round((e.race.high_pop?1e5:125e3)/N(1)),e.race.high_pop?1.01:1.02,"tauceti",e.race.high_pop?1.003:1.005):0},Copper(r){return!e.race.artifical||e.race.deconstructor?0:e.resource[e.race.species].amount>=5?m("citizen",r,Math.round(50/N(1)),1.01,"tauceti",e.race.high_pop?1.0032:1.005):0},Aluminium(r){return!e.race.artifical||e.race.deconstructor?0:e.resource[e.race.species].amount>=5?m("citizen",r,Math.round(50/N(1)),1.01,"tauceti",e.race.high_pop?1.0032:1.005):0},Nanite(r){return e.race.deconstructor&&e.resource[e.race.species].amount>=3?m("citizen",r,Math.round(500/N(1)),1.01,"tauceti",e.race.high_pop?1.0032:1.005):0}},effect(){let r="";return e.resource[e.race.species].max===e.resource[e.race.species].amount&&(r=`
${t("city_assembly_effect_warn")}
`),`
${t("tau_home_cloning_effect",[T[e.race.species].name])}
${r}`},action(){return e.resource[e.race.species].max>e.resource[e.race.species].amount&&u($(this)[0])?(e.resource[e.race.species].amount++,!0):!1},struct(){return{d:{count:0,on:0},p:["cloning_facility","tauceti"]}}},horseshoe:Vt("horseshoe","tauceti"),bonfire:Vt("bonfire","tauceti"),firework:Vt("firework","tauceti"),assembly:Vt("assembly","tauceti"),nanite_factory:Vt("nanite_factory","tauceti"),tau_farm:{id:"tauceti-tau_farm",title:t("tau_home_tau_farm"),desc(){return`
${t("tau_home_tau_farm")}
${t("requires_power")}
`},reqs:{tau_home:7},path:["truepath"],cost:{Money(r){return m("tau_farm",r,135e6,1.25,"tauceti")},Stone(r){return m("tau_farm",r,921e4,1.25,"tauceti")},Steel(r){return m("tau_farm",r,6295e3,1.25,"tauceti")},Water(r){return m("tau_farm",r,1e4,1.25,"tauceti")}},effect(){let r=`
${t("space_red_spaceport_effect1",[t("tau_planet",[T[e.race.species].home]),$(this)[0].support()])}
`;if(r=r+`
${t("produce",[+D("tau_farm","food").toFixed(2),e.resource.Food.name])}
`,!e.race.kindling_kindred&&!e.race.smoldering&&(r=r+`
${t("produce",[+D("tau_farm","lumber").toFixed(2),e.resource.Lumber.name])}
`),e.tech.isolation){let a=+D("tau_farm","water").toFixed(2);if(r=r+`
${t("produce",[a,e.resource.Water.name])}
`,e.race.artifical){let i=U(350);r=r+`
${t("city_transmitter_effect",[i])}
`}}return r=r+`
${t("minus_power",[$(this)[0].powered()])}
`,r},support(){return 1},powered(){return he(e.tech.isolation?1:4)},action(){return u($(this)[0])?(I("tau_farm","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["tau_farm","tauceti"]}}},mining_pit:{id:"tauceti-mining_pit",title:t("tau_home_mining_pit"),desc(){return`
${t("tau_home_mining_pit")}
${t("space_support",[T[e.race.species].home])}
`},reqs:{tau_home:2},path:["truepath"],cost:{Money(r){return m("mining_pit",r,425e4,1.225,"tauceti")},Materials(r){return Ir()?0:m("mining_pit",r,35e4,1.225,"tauceti")},Lumber(r){return Ir()?m("mining_pit",r,235e4,1.225,"tauceti"):0},Iron(r){return Ir()?m("mining_pit",r,835e3,1.225,"tauceti"):0}},effect(){let r=`
${t("tau_new_support",[$(this)[0].support(),T[e.race.species].home])}
`;if(r=r+`
${t("plus_max_resource",[$(this)[0].workers(),t("job_pit_miner")])}
`,!Ir())r=r+`
${t("plus_max_resource",[1e6,t("resource_Materials_name")])}
`,r=r+`
${t("tau_home_mining_pit_effect",[e.resource.Materials.name])}
`;else if(e.tech.isolation){if(e.race.lone_survivor){let a=[e.resource.Bolognium.name,e.resource.Adamantite.name,e.resource.Stone.name,e.resource.Copper.name,e.resource.Iron.name,e.resource.Aluminium.name,e.resource.Coal.name];e.race.smoldering?(a.push(e.resource.Chrysotile.name),r=r+`
${t("tau_home_mining_pit_effect2cs",a)}
`):r=r+`
${t("tau_home_mining_pit_effect2c",a)}
`}else{let a=[e.resource.Bolognium.name,e.resource.Adamantite.name,e.resource.Stone.name,e.resource.Copper.name,e.resource.Coal.name];e.race.smoldering?(a.push(e.resource.Chrysotile.name),r=r+`
${t("tau_home_mining_pit_effect2bs",a)}
`):r=r+`
${t("tau_home_mining_pit_effect2b",a)}
`}r=r+`
${t("production",[8,e.resource.Cement.name])}
`}else{let a=[e.resource.Bolognium.name,e.resource.Adamantite.name,e.resource.Stone.name];e.race.smoldering?(a.push(e.resource.Chrysotile.name),r=r+`
${t("tau_home_mining_pit_effect2s",a)}
`):r=r+`
${t("tau_home_mining_pit_effect2",a)}
`}return r},s_type:"tau_home",support(){return-1},powered(){return 0},workers(){return N(e.tech.isolation?6:8)},action(){if(u($(this)[0])){if(I("mining_pit","tauceti"),re($(this)[0])){let r=$(this)[0].workers();e.civic.pit_miner.max+=r;let a=Math.min(r,e.civic[e.civic.d_job].workers);e.civic[e.civic.d_job].workers-=a,e.civic.pit_miner.workers+=a}return!0}return!1},struct(){return{d:{count:0,on:0},p:["mining_pit","tauceti"]}}},excavate:{id:"tauceti-excavate",title:t("tau_home_excavate"),desc(){return`
${t("tau_home_excavate")}
`},reqs:{tau_home:2},grant:["tau_home",3],path:["truepath"],cost:{Money(r){return 165e7},Materials(r){return 75e4}},effect(){return t("tau_home_excavate_effect")},action(){return u($(this)[0])?(L(t("tau_home_excavate_msg"),"info",!1,["progress"]),!0):!1}},alien_outpost:{id:"tauceti-alien_outpost",title:t("tech_alien_outpost"),desc(){return`
${t("tech_alien_outpost")}
${t("requires_power")}
`},reqs:{tau_home:4},path:["truepath"],cost:{},queue_complete(){return 0},effect(){let r=`
${t("plus_max_resource",["20%",e.resource.Knowledge.name])}
`;return e.tech.isolation&&(r=r+`
${t("plus_max_resource",[(e.race.lone_survivor?35e5:65e5).toLocaleString(),e.resource.Knowledge.name])}
`,r=r+`
${t("plus_max_resource",[2e5.toLocaleString(),e.resource.Cipher.name])}
`,r=r+`
${t("space_lander_effect3",[D("alien_outpost"),e.resource.Cipher.name])}
`),e.tech.outpost_boost&&(r=r+`
${t("tech_alien_outpost_effect2")}
`),e.race.lone_survivor&&(r=r+`
${t("city_wardenclyffe_effect1",[N(1),e.civic.professor.name])}
`),r=r+`
${t("minus_power",[$(this)[0].powered()])}
`,r},powered(){return he(e.tech.isolation?e.race.lone_survivor?8:25:100)},special(){return!!e.tech.replicator},action(){return!1},struct(){return{d:{count:1,on:0},p:["alien_outpost","tauceti"]}}},jump_gate:{id:"tauceti-jump_gate",title:t("tau_jump_gate"),desc(r){return!e.tauceti.hasOwnProperty("jump_gate")||e.tauceti.jump_gate.count<100||r?`
${t("tau_jump_gate")}
${t("requires_segments",[100])}
`:`
${t("tau_jump_gate")}
`},reqs:{tauceti:3},condition(){return e.tech.isolation?0:1},path:["truepath"],queue_size:10,queue_complete(){return 100-e.tauceti.jump_gate.count},cost:{Money(r){return(r||0)+(e.tauceti.hasOwnProperty("jump_gate")?e.tauceti.jump_gate.count:0)<100?1e6:0},Materials(r){return(r||0)+(e.tauceti.hasOwnProperty("jump_gate")?e.tauceti.jump_gate.count:0)<100?12500:0}},effect(r){let a=(r?.count??0)+(e.tauceti.hasOwnProperty("jump_gate")?e.tauceti.jump_gate.count:0);if(a<100){let i=100-a;return`
${t("tau_jump_gate_effect")}
${t("space_dwarf_collider_effect2",[i])}
`}else return t("tau_jump_gate_effect")},action(){return u($(this)[0])&&e.tauceti.jump_gate.count<100?(I("jump_gate","tauceti"),!0):!1},struct(){return{d:{count:0},p:["jump_gate","tauceti"]}}},fusion_generator:{id:"tauceti-fusion_generator",title:t("tech_fusion_generator"),desc(){return`
${t("tech_fusion_generator")}
${t("requires_res",[e.resource.Helium_3.name])}
`},reqs:{tau_home:6},path:["truepath"],cost:{Money(r){return m("fusion_generator",r,188e6,1.25,"tauceti")},Iridium(r){return m("fusion_generator",r,555e4,1.25,"tauceti")},Stanene(r){return m("fusion_generator",r,7003500,1.25,"tauceti")},Sheet_Metal(r){return m("fusion_generator",r,ja(95e3),1.25,"tauceti")}},effect(){let r=+Ue($(this)[0].p_fuel().a).toFixed(1),a=`
${t("space_dwarf_reactor_effect1",[-$(this)[0].powered()])}
`;return e.race.lone_survivor?a=a+`
${t("gain",[-r,e.resource[$(this)[0].p_fuel().r].name])}
`:a=a+`
${t("spend",[r,e.resource[$(this)[0].p_fuel().r].name])}
`,a},p_fuel(){return{r:"Helium_3",a:e.tech.isolation?e.race.lone_survivor?-15:75:500}},powered(){return it(-32)},action(){return u($(this)[0])?(I("fusion_generator","tauceti"),e.tauceti.fusion_generator.on++,!0):!1},struct(){return{d:{count:0,on:0},p:["fusion_generator","tauceti"]}}},repository:{id:"tauceti-repository",title:t("tech_repository"),desc:t("tech_repository"),reqs:{tau_home:5},path:["truepath"],cost:{Money(r){return m("repository",r,1028e4,1.28,"tauceti")},Iron(r){return m("repository",r,18e5,1.28,"tauceti")},Cement(r){return m("repository",r,15e5,1.28,"tauceti")},Neutronium(r){return m("repository",r,215e3,1.28,"tauceti")}},wide:!0,res(){let r=["Lumber","Stone","Furs","Copper","Iron","Aluminium","Cement","Coal","Steel","Titanium","Crystal","Alloy","Polymer","Iridium","Chrysotile","Nano_Tube","Neutronium","Adamantite","Unobtainium"];return e.tech.isolation&&(r.push("Oil"),r.push("Helium_3"),r.push("Uranium"),r.push("Water")),r},val(r){switch(r){case"Lumber":return 3e4;case"Stone":return 3e4;case"Chrysotile":return 3e4;case"Crystal":return 10;case"Furs":return 17e3;case"Copper":return 15200;case"Iron":return 14e3;case"Aluminium":return 12800;case"Cement":return 11200;case"Coal":return 4800;case"Steel":return 2400;case"Titanium":return 1600;case"Alloy":return 1800;case"Polymer":return 1500;case"Iridium":return 1750;case"Nano_Tube":return 1200;case"Neutronium":return 640;case"Adamantite":return 720;case"Unobtainium":return 1e3;case"Oil":return 680;case"Helium_3":return 575;case"Uranium":return 125;case"Water":return 15;case"Elerium":return 3;default:return 0}},effect(r){let a='
',i=ci("repository",!1,r),s=250;for(let n of $(this)[0].res())if(e.resource[n].display){let o=Me(+(U($(this)[0].val(n))*i).toFixed(0),1);a=a+`${t("plus_max_resource",[o,e.resource[n].name])}`}return e.tech.isolation&&(a=a+`${t("plus_max_resource",[s,e.resource.Crates.name])}${t("plus_max_resource",[s,e.resource.Containers.name])}`),a=a+"
",a},action(){if(u($(this)[0])){I("repository","tauceti");let r=250;e.resource.Crates.max+=r,e.resource.Containers.max+=r,e.resource.Containers.display||Aa();let a=ci("repository");for(let i of $(this)[0].res())e.resource[i].display&&(e.resource[i].max+=U($(this)[0].val(i))*a);return!0}return!1},struct(){return{d:{count:0},p:["repository","tauceti"]}}},tau_factory:{id:"tauceti-tau_factory",title:t("tau_home_tau_factory"),desc(){return`
${t("tau_home_tau_factory")}
${t("requires_power_support",[T[e.race.species].home])}
`},reqs:{tau_home:8},path:["truepath"],cost:{Money(r){return m("tau_factory",r,269e6,1.25,"tauceti")},Titanium(r){return m("tau_factory",r,3e6,1.25,"tauceti")},Elerium(r){return m("tau_factory",r,850,1.25,"tauceti")},Bolognium(r){return m("tau_factory",r,25e4,1.25,"tauceti")},Quantium(r){return m("tau_factory",r,ja(425e3),1.25,"tauceti")}},effect(){let r=`
${t("tau_new_support",[$(this)[0].support(),T[e.race.species].home])}
`;return r=r+`
${t("tau_home_tau_factory_effect",[$(this)[0].manufacturing()])}
`,e.tech.isolation&&(e.race.flier||(r=r+`
${t("plus_max_resource",[N(2),t("job_cement_worker")])}
`),r=r+`
${t("space_red_fabrication_effect1",[N(5)])}
`),r=r+`
${t("city_crafted_mats",[e.tech.isolation?275:90])}
`,r=r+`
${t("minus_power",[$(this)[0].powered()])}
`,r},special:!0,s_type:"tau_home",support(){return-1},powered(){return he(e.tech.isolation?2:5)},manufacturing(){return e.tech.isolation?5:3},action(){return u($(this)[0])?(e.civic.craftsman.display=!0,I("tau_factory","tauceti"),re($(this)[0])&&(e.city.factory.Alloy+=$(this)[0].manufacturing()),!0):!1},post(){e.race.lone_survivor&&Ve()},struct(){return{d:{count:0,on:0},p:["tau_factory","tauceti"]}}},infectious_disease_lab:{id:"tauceti-infectious_disease_lab",title(){return e.tech.isolation?t("tech_infectious_disease_lab_alt"):t(e.race.artifical?"tech_infectious_disease_lab_s":"tech_infectious_disease_lab")},desc(){return`
${$(this)[0].title()}
${t("requires_power_support",[T[e.race.species].home])}
`},reqs:{disease:1},path:["truepath"],cost:{Money(r){return m("infectious_disease_lab",r,1e9,1.25,"tauceti")},Alloy(r){return m("infectious_disease_lab",r,325e5,1.25,"tauceti")},Polymer(r){return m("infectious_disease_lab",r,5e7,1.25,"tauceti")},Bolognium(r){return m("infectious_disease_lab",r,25e5,1.25,"tauceti")},Unobtainium(r){return m("infectious_disease_lab",r,64e3,1.25,"tauceti")}},effect(){let r=39616;if(e.tech.supercollider&&e.tech.isolation){let i=e.tech.tp_particles||e.tech.particles&&e.tech.particles>=3?12.5:25;r*=e.tech.supercollider/i+1}let a=`
${t("tau_new_support",[$(this)[0].support(),T[e.race.species].home])}
`;if(a=a+`
${t("city_max_knowledge",[Math.round(r).toLocaleString()])}
`,e.tech.isolation){let i=U(375);a=a+`
${t("plus_max_resource",[i,e.resource.Elerium.name])}
`,a=a+`
${t("city_wardenclyffe_effect1",[N(2),e.civic.professor.name])}
`,a=a+`
${t("city_wardenclyffe_effect1",[N(1),e.civic.scientist.name])}
`,a=a+`
${t("space_zero_g_lab_effect",[N(1)])}
`,a=a+`
${t("city_library_effect",[75])}
`}return e.tech.alien_crafting&&(a=a+`
${t("production",[65,e.resource.Quantium.name])}
`),e.tech.focus_cure&&(a=a+`
${t("tau_home_disease_lab_cure",[+e.tauceti.infectious_disease_lab.cure.toFixed(1)])}
`,e.race.hasOwnProperty("vax")&&(a=a+`
${t("tau_home_disease_lab_vax",[+e.race.vax.toFixed(2)])}
`)),a=a+`
${t("minus_power",[$(this)[0].powered()])}
`,a},s_type:"tau_home",support(){return-1},powered(){return he(e.tech.isolation?e.race.lone_survivor?2:8:35)},action(){return u($(this)[0])?(I("infectious_disease_lab","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0,cure:0},p:["infectious_disease_lab","tauceti"]}},post(){e.tech.disease===1&&(e.tech.disease=2,L(t("tau_plague4",[t("tab_tauceti")]),"info",!1,["progress"]),de()),Tt()},postPower(r){li("Quantium")}},tauceti_casino:{id:"tauceti-tauceti_casino",title:t("city_casino"),desc:t("city_casino"),category:"commercial",reqs:{gambling:1,isolation:1},cost:{Money(r){return m("tauceti_casino",r,145e4,1.35,"tauceti")},Furs(r){return m("tauceti_casino",r,95e3,1.35,"tauceti")},Cement(r){return m("tauceti_casino",r,12e4,1.35,"tauceti")},Plywood(r){return m("tauceti_casino",r,ja(55e3),1.35,"tauceti")}},effect(){let r=$(this)[0].citizens(),a=e.race.lone_survivor?"":`
${t("plus_max_resource",[r,t("citizen")])}
`;return a=a+ps(),a=a+`
${t("minus_power",[$(this)[0].powered()])}
`,a},powered(){return he(e.race.lone_survivor?1:2)},action(){return u($(this)[0])?(I("tauceti_casino","tauceti"),e.tech.theatre&&!e.race.joyless&&(e.civic.entertainer.max+=N(1),e.civic.entertainer.display=!0),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["tauceti_casino","tauceti"]}},citizens(){let r=1;return e.race.high_pop&&(r*=y.high_pop.vars()[0]),e.race.lone_survivor?0:r},flair:t("city_casino_flair")},tau_cultural_center:{id:"tauceti-tau_cultural_center",title:t("tech_cultural_center"),desc(){return`
${t("tech_cultural_center")}
${t("space_electrolysis_req",[e.resource[$(this)[0].p_fuel().r].name])}
`},category:"commercial",reqs:{tau_culture:1},path:["truepath"],cost:{Money(r){return m("tau_cultural_center",r,9145e4,1.35,"tauceti")},Copper(r){return m("tau_cultural_center",r,585e4,1.35,"tauceti")},Coal(r){return m("tau_cultural_center",r,465e3,1.35,"tauceti")},Polymer(r){return m("tau_cultural_center",r,3792e3,1.35,"tauceti")}},effect(){let r=8,a=1;e.civic.govern.type==="corpocracy"?a=2:e.civic.govern.type==="socialist"&&(a=.8);let i=20*a,s=5*a,n=15*a,o=`
${t("tau_home_cultureal_effect1",[$(this)[0].p_fuel().a,e.resource[$(this)[0].p_fuel().r].name,$(this)[0].title])}
`;return o+=`
${t("city_tourist_center_effect2",[i,Ze("casino")])}
`,o+=`
${t("city_tourist_center_effect2",[s,t("arpa_project_monument_title")])}
`,o+=`
${t("tau_home_cultureal_effect2",[r,t("tau_red_womlings")])}
`,e.tech.tau_culture>=2&&(o+=`
${t("tau_home_cultureal_effect3",[n,t(`tau_gas2_alien_station_data2_r${e.race.tau_food_item||0}`)])}
`),o+=`
${t("minus_power",[$(this)[0].powered()])}
`,o},powered(){return he(1)},p_fuel(){return{r:"Food",a:e.race.lone_survivor?25:500}},action(){return u($(this)[0])?(I("tau_cultural_center","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["tau_cultural_center","tauceti"]}}}},tau_red:{info:{name(){return t("tau_planet",[X().red])},desc(){return t("tau_red",[X().red])},support:"orbital_platform",extra(r){e.tech.tau_red&&e.tech.tau_red>=5&&($(`#${r}`).append(`
${t("tau_red_womling_prod")} {{ prod }}%
`),V({el:`#${r}Womlings`,data:e.tauceti.overseer}))}},red_mission:{id:"tauceti-red_mission",title(){return t("tau_new_mission_title",[X().red])},desc(){return t("tau_new_mission_title",[X().red])},reqs:{tauceti:2},grant:["tau_red",1],path:["truepath"],queue_complete(){return e.tech.tau_red>=1?0:1},cost:{Money(){return 1e9}},effect(){return t("tau_new_mission_effect",[X().red])},action(){return u($(this)[0])?(e.tauceti.settlement={count:0,on:0},L(t("tau_red_mission_result",[X().red]),"info",!1,["progress"]),!0):!1}},orbital_platform:{id:"tauceti-orbital_platform",title:t("tau_red_orbital_platform"),desc:`
${t("tau_red_orbital_platform")}
${t("requires_power")}
`,reqs:{tau_red:1,tauceti:4},path:["truepath"],cost:{Money(r){return m("orbital_platform",r,5e7,1.3,"tauceti")},Oil(r){return Ir()?m("orbital_platform",r,Ue(D0(275e3)),1.3,"tauceti"):0},Aluminium(r){return m("orbital_platform",r,178e4,1.3,"tauceti")},Bolognium(r){return m("orbital_platform",r,45e4,1.3,"tauceti")}},effect(){let r=U(17500),a=+Ue($(this)[0].support_fuel().a).toFixed(1),i=`
${t("space_red_spaceport_effect1",[t("tau_planet",[X().red]),$(this)[0].support()])}
`;return i=i+`
${t("plus_max_resource",[r.toLocaleString(),e.resource.Oil.name])}
`,i=i+`
${t("spend_power",[a,e.resource[$(this)[0].support_fuel().r].name,$(this)[0].powered()])}
`,i},support_fuel(){return{r:e.race.lone_survivor?"Helium_3":"Oil",a:e.tech.isolation?e.race.lone_survivor?8:32:125}},support(){let r=e.tech.womling_logistics?2.5:2;return e.race.lone_survivor&&(r*=2),r},powered(){return he(e.tech.isolation?e.race.lone_survivor?2:3:18)},refresh:!0,action(){return Ir()&&u($(this)[0])?(I("orbital_platform","tauceti"),re($(this)[0]),e.tech.tau_red===1&&(e.tech.tau_red=2,L(t("tau_red_orbital_platform_msg",[t("tau_planet",[X().red]),t("tau_planet",[T[e.race.species].home])]),"info",!1,["progress"])),!0):!1},struct(){return{d:{count:0,on:0,support:0,s_max:0},p:["orbital_platform","tauceti"]}}},contact:{id:"tauceti-contact",title(){return t("tau_red_contact")},desc(){return t("tau_red_contact")},reqs:{tau_red:4},grant:["tau_red",5],path:["truepath"],queue_complete(){return e.tech.tau_red>=5?0:1},cost:{Money(){return 6e8},Food(){return e.race.lone_survivor&&e.race.artifical?62e3:25e5}},effect(){return t("tau_red_contact_effect")},action(){return u($(this)[0])?(e.race.womling_friend=1,Wo(),!0):!1}},introduce:{id:"tauceti-introduce",title(){return t("tau_red_introduce")},desc(){return t("tau_red_introduce")},reqs:{tau_red:4},grant:["tau_red",5],path:["truepath"],queue_complete(){return e.tech.tau_red>=5?0:1},cost:{Knowledge(){return 7e6}},effect(){return t("tau_red_introduce_effect")},action(){return u($(this)[0])?(e.race.womling_god=1,Wo(),!0):!1}},subjugate:{id:"tauceti-subjugate",title(){return t("tau_red_subjugate")},desc(){return t("tau_red_subjugate")},reqs:{tau_red:4},grant:["tau_red",5],path:["truepath"],queue_complete(){return e.tech.tau_red>=5?0:1},cost:{Money(){return 285e7}},effect(){return t("tau_red_subjugate_effect")},action(){return u($(this)[0])?(e.race.womling_lord=1,Wo(),!0):!1}},jeff:{id:"tauceti-jeff",title(){return t("tau_red_jeff")},desc(){return t("tau_red_jeff")},reqs:{tau_red:5},path:["truepath"],queue_complete(){return e.tech.tau_red>=5?0:1},cost:{},effect(){let r=e.tauceti.overseer?e.tauceti.overseer.injured:0;e.tauceti.overseer&&e.tauceti.overseer.pop${t("tau_red_jeff_effect1",[e.tauceti.overseer?e.tauceti.overseer.pop:0])}`;return a=a+`
${t("tau_red_jeff_effect2",[e.tauceti.overseer?e.tauceti.overseer.working:0])}
`,a=a+`
${t("tau_red_jeff_effect3",[r])}
`,a=a+`
${t("tau_red_jeff_effect4",[e.tauceti.overseer?e.tauceti.overseer.loyal:0])}
`,a=a+`
${t("tau_red_jeff_effect5",[e.tauceti.overseer?e.tauceti.overseer.morale:0])}
`,e.tech.hasOwnProperty("womling_tech")&&(a=a+`
${t("tau_red_jeff_effect6",[e.tech.womling_tech])}
`),a=a+`
${t("job_farmer")}: ${e.tauceti.womling_farm?e.tauceti.womling_farm.farmers:0}
`,a=a+`
${t("job_miner")}: ${e.tauceti.womling_mine?e.tauceti.womling_mine.miners:0}
`,e.tauceti.womling_lab&&(a=a+`
${t("job_scientist")}: ${e.tauceti.womling_lab?e.tauceti.womling_lab.scientist:0}
`),a},action(){return!1}},overseer:{id:"tauceti-overseer",title(){return $(this)[0].name()},desc(){return`
${$(this)[0].name()}
${t("space_support",[X().red])}
`},name(){return e.race.womling_lord?t("tau_red_overseer"):e.race.womling_god?t("tau_red_womgod"):t("tau_red_womally")},reqs:{tau_red:5},path:["truepath"],cost:{Money(r){return m("overseer",r,6e6,1.28,"tauceti")},Cement(r){return m("overseer",r,245e4,1.28,"tauceti")},Alloy(r){return e.race.womling_friend?m("overseer",r,185e4,1.28,"tauceti"):0},Neutronium(r){return e.race.womling_lord?m("overseer",r,165e3,1.28,"tauceti"):0},Titanium(r){return e.race.womling_god?m("overseer",r,225e4,1.28,"tauceti"):0}},effect(){let r=`
${t("tau_new_support",[$(this)[0].support(),X().red])}
`;return r=r+`
${t("tau_red_overseer_effect",[$(this)[0].val()])}
`,r},val(){let r=0;return e.race.womling_lord?r=e.stats.achieve.overlord&&e.stats.achieve.overlord.l>=5?12:10:e.race.womling_god?r=e.stats.achieve.overlord&&e.stats.achieve.overlord.l>=5?6:5:e.race.womling_friend&&(r=e.stats.achieve.overlord&&e.stats.achieve.overlord.l>=5?10:8),e.race.lone_survivor&&(r*=2),r},s_type:"tau_red",support(){return-1},powered(){return 0},action(){return u($(this)[0])?(I("overseer","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0,pop:0,working:0,injured:0,morale:0,loyal:0,prod:0},p:["overseer","tauceti"]}}},womling_village:{id:"tauceti-womling_village",title:t("tau_red_womling_village"),desc(){return`
${t("tau_red_womling_village")}
${t("space_support",[X().red])}
`},reqs:{tau_red:5},path:["truepath"],cost:{Money(r){return m("womling_village",r,1e7,1.28,"tauceti")},Stone(r){return m("womling_village",r,225e4,1.28,"tauceti")},Plywood(r){return m("womling_village",r,ja(125e4),1.28,"tauceti")},Wrought_Iron(r){return m("womling_village",r,ja(4e5),1.28,"tauceti")}},effect(){let r=e.tech.womling_pop&&e.tech.womling_pop>=2?6:5,a=`
${t("tau_new_support",[$(this)[0].support(),X().red])}
`;return a=a+`
${t("tau_red_womling_village_effect",[r])}
`,e.tech.tau_junksale&&(a=a+`
${t("tau_red_womling_village_effect2",[40,t(`tau_gas2_alien_station_data4_r${e.race.tau_junk_item||0}`)])}
`),a},s_type:"tau_red",support(){return-1},powered(){return 0},action(){return u($(this)[0])?(I("womling_village","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:1,on:1},p:["womling_village","tauceti"]}}},womling_farm:{id:"tauceti-womling_farm",title:t("tau_red_womling_farm"),desc(){return`
${t("tau_red_womling_farm")}
${t("space_support",[X().red])}
`},reqs:{tau_red:5},path:["truepath"],cost:{Money(r){return m("womling_farm",r,24e6,1.28,"tauceti")},Iron(r){return m("womling_farm",r,95e5,1.28,"tauceti")},Water(r){return m("womling_farm",r,5e3,1.28,"tauceti")}},effect(){let r=e.tech.womling_pop?16:12;e.tech.womling_gene&&(r+=4);let a=e.tauceti.hasOwnProperty("womling_farm")?e.tauceti.womling_farm.farmers:0,i=`
${t("tau_new_support",[$(this)[0].support(),X().red])}
`;return i=i+`
${t("tau_red_womling_farm_effect",[r])}
`,i=i+`
${t("tau_red_womling_employ",[2])}
`,e.tech.isolation&&(i=i+`
${t("tau_red_womling_generate",[e.resource.Furs.name])}
`),i=i+`
${t("tau_red_womling_farm_effect2",[r/2*a])}
`,i},s_type:"tau_red",support(){return-1},powered(){return 0},action(){return u($(this)[0])?(I("womling_farm","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:1,on:1,farmers:0},p:["womling_farm","tauceti"]}}},womling_mine:{id:"tauceti-womling_mine",title:t("tau_red_womling_mine"),desc(){return`
${t("tau_red_womling_mine")}
${t("space_support",[X().red])}
`},reqs:{tau_red:5},path:["truepath"],cost:{Money(r){return m("womling_mine",r,125e5,1.28,"tauceti")},Lumber(r){return m("womling_mine",r,128e5,1.28,"tauceti")},Steel(r){return m("womling_mine",r,45e5,1.28,"tauceti")}},effect(){let r=`
${t("tau_new_support",[$(this)[0].support(),X().red])}
`;return e.tech.isolation?e.race.lone_survivor?r=r+`
${t("tau_red_womling_mine_effect_c",[e.resource.Unobtainium.name,e.resource.Uranium.name,e.resource.Titanium.name,e.resource.Iron.name,e.resource.Copper.name,e.resource.Aluminium.name,e.resource.Neutronium.name,e.resource.Iridium.name])}
`:r=r+`
${t("tau_red_womling_mine_effect_b",[e.resource.Unobtainium.name,e.resource.Uranium.name,e.resource.Titanium.name])}
`:r=r+`
${t("tau_red_womling_mine_effect_a",[e.resource.Unobtainium.name])}
`,r=r+`
${t("tau_red_womling_employ",[6])}
`,r},s_type:"tau_red",support(){return-1},powered(){return 0},action(){return u($(this)[0])?(I("womling_mine","tauceti"),e.resource.Unobtainium.display=!0,re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0,miners:0},p:["womling_mine","tauceti"]}},flair(){return t("tau_red_womling_mine_flair")}},womling_fun:{id:"tauceti-womling_fun",title(){return $(this)[0].name()},desc(){return`
${$(this)[0].name()}
${t("space_support",[X().red])}
`},name(){return e.race.womling_lord?t("tau_red_womling_fun1"):e.race.womling_god?t("tau_red_womling_fun2"):t("tau_red_womling_fun3")},reqs:{tau_red:6},path:["truepath"],cost:{Money(r){return m("womling_fun",r,38e5,1.28,"tauceti")},Food(r){return e.race.womling_friend?m("womling_fun",r,175e3,1.28,"tauceti"):0},Lumber(r){return m("womling_fun",r,5e5,1.28,"tauceti")},Stone(r){return m("womling_fun",r,5e5,1.28,"tauceti")},Furs(r){return e.race.womling_lord||e.race.womling_god?m("womling_fun",r,835e3,1.28,"tauceti"):0},Copper(r){return e.race.womling_lord?m("womling_fun",r,1125e3,1.28,"tauceti"):0},Alloy(r){return e.race.womling_god?m("womling_fun",r,656e3,1.28,"tauceti"):0},Water(r){return e.race.womling_friend?m("womling_fun",r,3500,1.28,"tauceti"):0}},effect(){let r=`
${t("tau_new_support",[$(this)[0].support(),X().red])}
`;return r=r+`
${t("tau_red_womling_fun_effect",[$(this)[0].val()])}
`,r},val(){let r=0;return e.race.womling_lord?r=e.stats.achieve.overlord&&e.stats.achieve.overlord.l>=5?24:20:e.race.womling_god?r=e.stats.achieve.overlord&&e.stats.achieve.overlord.l>=5?12:10:e.race.womling_friend&&(r=e.stats.achieve.overlord&&e.stats.achieve.overlord.l>=5?18:15),e.race.lone_survivor&&(r*=2),r},s_type:"tau_red",support(){return-1},powered(){return 0},action(){return u($(this)[0])?(I("womling_fun","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["womling_fun","tauceti"]}}},womling_lab:{id:"tauceti-womling_lab",title:t("interstellar_laboratory_title"),desc(){return`
${t("interstellar_laboratory_title")}
${t("space_support",[X().red])}
`},reqs:{tau_red:7},path:["truepath"],cost:{Money(r){return m("womling_lab",r,65e6,1.28,"tauceti")},Elerium(r){return m("womling_lab",r,1200,1.28,"tauceti")},Orichalcum(r){return m("womling_lab",r,25e5,1.28,"tauceti")},Unobtainium(r){return m("womling_lab",r,1e4,1.28,"tauceti")},Quantium(r){return m("womling_lab",r,ja(95e3),1.28,"tauceti")}},effect(){let r=e.tauceti.hasOwnProperty("overseer")?e.tauceti.overseer.prod:100,a=Math.round(25e3*r/100),i=`
${t("tau_new_support",[$(this)[0].support(),X().red])}
`;return i=i+`
${t("tau_red_womling_lab_effect",[a])}
`,i=i+`
${t("tau_red_womling_employ_single",[1])}
`,i},s_type:"tau_red",support(){return-1},powered(){return 0},action(){return u($(this)[0])?(I("womling_lab","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0,scientist:0,tech:0},p:["womling_lab","tauceti"]}}}},tau_gas:{info:{name(r,a){let i=a||"gas_name",s=i==="gas_name"?0:1;if(r||e.race[i])switch(r||e.race[i]){case 1:{let n=e.race.universe==="antimatter"?"plasmid":"antiplasmid";switch(Math.round(e.stats[n]+s)%3){case 1:return t("tau_planet",[X().gas]);case 2:return t("tau_gas_title0a",[X().gas]);default:return t("tau_gas_title0b",[X().gas])}}case 2:switch(Math.round(e.stats.reset+s)%3){case 1:return t("tau_gas_title1a");case 2:return t("tau_gas_title1b");default:return t("tau_gas_title1c")}case 3:switch(Math.round(e.stats.mad+s)%3){case 1:return t("tau_gas_title2a");case 2:return t("tau_gas_title2b");default:return t("tau_gas_title2c")}case 4:switch(Math.round(e.stats.bioseed+s)%3){case 1:return t("tau_gas_title3a",[T[e.race.gods].solar.gas]);case 2:return t("tau_gas_title3b",[T[e.race.old_gods].name]);default:return t("tau_gas_title3c",[T[e.race.species].name])}case 5:switch(Math.round(e.stats.portals+s)%3){case 1:return t("tau_gas_title4a",[X().gas]);case 2:return t("tau_gas_title4b",[ut("reverse",X().gas)]);default:return t("tau_gas_title4c")}case 6:switch(Math.round(e.stats.womling.friend.l+e.stats.womling.lord.l+e.stats.womling.god.l+s)%3){case 1:return t("tau_gas_title5a");case 2:return t("tau_gas_title5b");default:return t("tau_gas_title5c")}case 7:switch(Math.round(e.stats.tdays+s)%3){case 1:return t("tau_gas_title6a");case 2:return t("tau_gas_title6b");default:return t("tau_gas_title6c")}default:return i==="gas_name"?t("tau_gas_title"):t("tau_gas2_title")}return i==="gas_name"?t("tau_gas_title"):t("tau_gas2_title")},desc(){return t("tau_gas_desc")}},gas_contest:{id:"tauceti-gas_contest",title(){return t("tau_gas_contest_title")},desc(){return t("tau_gas_contest_title")},reqs:{tauceti:5},grant:["tau_gas",1],path:["truepath"],queue_complete(){return e.tech.tau_gas>=1?0:1},cost:{Money(){return 1e7}},effect(){return e.race.lone_survivor?t("tau_gas_contest_effect_alt"):t("tau_gas_contest_effect")},action(){return!!u($(this)[0])}},refueling_station:{id:"tauceti-refueling_station",title(){return t("tau_gas_refueling_station_title")},desc(){return`
${t("tau_gas_refueling_station_title")}
${t("requires_power")}
`},reqs:{tau_gas:2},path:["truepath"],cost:{Money(r){return m("refueling_station",r,68e6,1.28,"tauceti")},Graphene(r){return m("refueling_station",r,25e5,1.28,"tauceti")},Unobtainium(r){return m("refueling_station",r,5500,1.28,"tauceti")},Mythril(r){return m("refueling_station",r,ja(6e4),1.28,"tauceti")}},powered(){return he(e.tech.isolation?2:5)},effect(){let r=+D("refueling_station").toFixed(2),a=U(1e4),i=`
${t("space_gas_mining_effect1",[r])}
`;if(i=i+`
${t("plus_max_resource",[a.toLocaleString(),e.resource.Helium_3.name])}
`,e.tech.tau_whale>=2){let s=U(6500);i=i+`
${t("plus_max_resource",[s.toLocaleString(),e.resource.Oil.name])}
`}return e.tech.isolation&&(i=i+`
${t("interstellar_g_factory_effect")}
`),i=i+`
${t("minus_power",[$(this)[0].powered()])}
`,i},special(){return!!e.tech.isolation},action(){return u($(this)[0])?(I("refueling_station","tauceti"),re($(this)[0])&&e.tech.isolation&&(e.race.kindling_kindred||e.race.smoldering?e.space.g_factory.Oil++:e.space.g_factory.Lumber++),!0):!1},struct(){return{d:{count:0,on:0},p:["refueling_station","tauceti"]}},post(){e.tech.tau_gas===2&&(e.tech.tau_gas=3,Ve(),de())}},ore_refinery:{id:"tauceti-ore_refinery",title(){return t("tau_gas_ore_refinery_title")},desc(){return`
${t("tau_gas_ore_refinery_title")}
${t("requires_power")}
`},reqs:{tau_gas:4},path:["truepath"],cost:{Money(r){return m("ore_refinery",r,52e6,1.28,"tauceti")},Iridium(r){return m("ore_refinery",r,16e5,1.28,"tauceti")},Unobtainium(r){return m("ore_refinery",r,800,1.28,"tauceti")},Sheet_Metal(r){return m("ore_refinery",r,ja(118e3),1.28,"tauceti")}},powered(){return he(e.tech.isolation?2:8)},smelting(){return e.tech.isolation?12:4},effect(){let r=e.tauceti.hasOwnProperty("ore_refinery")?e.tauceti.ore_refinery.fill:0,a=e.tauceti.hasOwnProperty("ore_refinery")?e.tauceti.ore_refinery.max:0,i=+D("ore_refinery").toFixed(2),s=`
${t("tau_gas_ore_refinery_effect",[+r.toFixed(2)])}
`;return s=s+`
${t("tau_gas_ore_refinery_effect2",[a])}
`,s=s+`
${t("tau_gas_ore_refinery_effect3",[i])}
`,s=s+`
${t("interstellar_stellar_forge_effect3",[$(this)[0].smelting()])}
`,s=s+`
${t("minus_power",[$(this)[0].powered()])}
`,s},special:!0,action(){if(u($(this)[0])){if(I("ore_refinery","tauceti"),re($(this)[0])){let r=$(this)[0].smelting();wr(r,"Steel",e.race.evil?"Wood":"Oil")}return!0}return!1},struct(){return{d:{count:0,on:0,max:0,fill:0},p:["ore_refinery","tauceti"]}},post(){e.tech.tau_roid===3&&(e.tech.tau_roid=4,Gr(),de())}},whaling_station:{id:"tauceti-whaling_station",title(){return t("tau_gas_whaling_station_title")},desc(){return`
${t("tau_gas_whaling_station_title")}
${t("requires_power")}
`},reqs:{tau_whale:1},path:["truepath"],cost:{Money(r){return m("whaling_station",r,72e6,1.28,"tauceti")},Steel(r){return m("whaling_station",r,18e5,1.28,"tauceti")},Polymer(r){return m("whaling_station",r,955e3,1.28,"tauceti")},Orichalcum(r){return m("whaling_station",r,268e3,1.28,"tauceti")}},powered(){return he(e.tech.isolation?2:6)},effect(){let r=e.tauceti.hasOwnProperty("whaling_station")?e.tauceti.whaling_station.fill:0,a=e.tauceti.hasOwnProperty("whaling_station")?e.tauceti.whaling_station.max:0,i=+D("whaling_station").toFixed(2),s=`
${t("tau_gas_whaling_station_effect",[+r.toFixed(2)])}
`;return s=s+`
${t("tau_gas_whaling_station_effect2",[a])}
`,s=s+`
${t("tau_gas_whaling_station_effect3",[i])}
`,s=s+`
${t("minus_power",[$(this)[0].powered()])}
`,s},action(){return u($(this)[0])?(I("whaling_station","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0,max:0,fill:0},p:["whaling_station","tauceti"]}},post(){e.tech.tau_whale===1&&(e.tech.tau_whale=2,Gr())}},womling_station:{id:"tauceti-womling_station",title(){return t("tau_gas_womling_station_title")},desc(){return`
${t("tau_gas_womling_station_desc")}
${t("requires_power")}
`},reqs:{womling_technicians:1},path:["truepath"],cost:{Money(r){return m("womling_station",r,1334e5,1.26,"tauceti")},Furs(r){return m("womling_station",r,3805e3,1.26,"tauceti")},Aluminium(r){return m("womling_station",r,85e5,1.26,"tauceti")},Nano_Tube(r){return m("womling_station",r,909e3,1.26,"tauceti")}},powered(){return he(e.tech.isolation?3:6)},effect(){let r=e.tech.isolation?30:8;e.tech.womling_gene&&(r*=1.25);let a=`
${t("production",[r,Je.tau_gas.info.name()])}
`;return e.race.flier||(a=a+`
${t("plus_max_resource",[N(1),t("job_cement_worker")])}
`),a=a+`
${t("space_red_fabrication_effect1",[N(1)])}
`,a=a+`
${t("minus_power",[$(this)[0].powered()])}
`,a},action(){return u($(this)[0])?(e.civic.craftsman.display=!0,I("womling_station","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["womling_station","tauceti"]}}}},tau_roid:{info:{name(){return t("tau_roid_title")},desc(){return t("tau_roid_desc")},support:"patrol_ship"},roid_mission:{id:"tauceti-roid_mission",title(){return t("space_mission_title",[t("tau_roid_title")])},desc(){return t("space_mission_desc",[t("tau_roid_title")])},reqs:{tauceti:5},grant:["tau_roid",1],path:["truepath"],queue_complete(){return e.tech.tau_roid>=1?0:1},cost:{Helium_3(r,a){return+Ue(125e4,!1,a).toFixed(0)}},effect(){return t("tau_roid_mission_effect",[t("tau_roid_title")])},action(){return u($(this)[0])?(L(t("tau_roid_mission_result"),"info",!1,["progress"]),!0):!1}},patrol_ship:{id:"tauceti-patrol_ship",title:t("tau_roid_patrol_ship"),desc(){return`
${t("tau_roid_patrol_ship")}
${t("requires_res",[e.resource.Helium_3.name])}
`},reqs:{tau_roid:3},path:["truepath"],cost:{Money(r){return m("patrol_ship",r,45e6,1.25,"tauceti")},Adamantite(r){return m("patrol_ship",r,18e5,1.25,"tauceti")},Elerium(r){return m("patrol_ship",r,520,1.25,"tauceti")},Stanene(r){return m("patrol_ship",r,2675e3,1.25,"tauceti")},Bolognium(r){return m("patrol_ship",r,115e4,1.25,"tauceti")}},effect(){let r=+Ue($(this)[0].support_fuel().a).toFixed(1),a=`
${t("tau_roid_patrol_ship_security",[$(this)[0].support()])}
`;return a=a+`
${t("tau_roid_patrol_ship_effect")}
`,a=a+`
${t("spend",[r,e.resource[$(this)[0].support_fuel().r].name])}
`,a},support_fuel(){return{r:"Helium_3",a:e.tech.isolation?15:250}},support(){return 1},powered(){return 0},refresh:!0,action(){return u($(this)[0])?(I("patrol_ship","tauceti"),e.tauceti.patrol_ship.on++,!0):!1},struct(){return{d:{count:0,on:0,support:0,s_max:0},p:["patrol_ship","tauceti"]}}},mining_ship:{id:"tauceti-mining_ship",title:t("tau_roid_mining_ship"),desc(){return`
${t("tau_roid_mining_ship")}
`},reqs:{tau_roid:4},path:["truepath"],cost:{Money(r){return m("mining_ship",r,28e6,1.28,"tauceti")},Uranium(r){return m("mining_ship",r,12500,1.28,"tauceti")},Titanium(r){return m("mining_ship",r,22e5,1.28,"tauceti")},Alloy(r){return m("mining_ship",r,175e4,1.28,"tauceti")}},effect(){let r=+Ue($(this)[0].support_fuel().a).toFixed(1),a=+D("mining_ship").toFixed(2),i=`
${t("tau_roid_mining_ship_effect",[a])}
`;return i=i+`
${t("spend",[r,e.resource[$(this)[0].support_fuel().r].name])}
`,i},s_type:"tau_roid",support_fuel(){return{r:"Helium_3",a:e.tech.isolation?12:75}},support(){return-1},powered(){return 0},special:!0,action(){return u($(this)[0])?(I("mining_ship","tauceti"),re($(this)[0]),e.tauceti.mining_ship.count===1&&Ve(),!0):!1},struct(){return{d:{count:0,on:0,common:50,uncommon:50,rare:50},p:["mining_ship","tauceti"]}}},whaling_ship:{id:"tauceti-whaling_ship",title:t("tau_roid_whaling_ship"),desc(){return`
${t("tau_roid_whaling_ship")}
`},reqs:{tau_whale:2},path:["truepath"],cost:{Money(r){return m("whaling_ship",r,35e6,1.28,"tauceti")},Aluminium(r){return m("whaling_ship",r,34e5,1.28,"tauceti")},Neutronium(r){return m("whaling_ship",r,168e3,1.28,"tauceti")},Nano_Tube(r){return m("whaling_ship",r,8e5,1.28,"tauceti")}},effect(){let r=+Ue($(this)[0].support_fuel().a).toFixed(1),a=+D("whaling_ship").toFixed(2),i=`
${t("tau_roid_whaling_ship_effect",[a])}
`;return i=i+`
${t("spend",[r,e.resource[$(this)[0].support_fuel().r].name])}
`,i},s_type:"tau_roid",support_fuel(){return{r:"Helium_3",a:e.tech.isolation?14:90}},support(){return-1},powered(){return 0},action(){return u($(this)[0])?(I("whaling_ship","tauceti"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["whaling_ship","tauceti"]}}}},tau_gas2:{info:{name(r){return Je.tau_gas.info.name(r||e.race.gas_name2||!1,"gas_name2")},desc(){return t("tau_gas2_desc",[Je.tau_gas.info.name()])}},gas_contest2:{id:"tauceti-gas_contest2",title(){return t("tau_gas2_contest_title")},desc(){return t("tau_gas2_contest_title")},reqs:{tau_gas2:1},grant:["tau_gas2",2],path:["truepath"],queue_complete(){return e.tech.tau_gas2>=1?0:1},cost:{Money(){return 25e6}},effect(){return t("tau_gas2_contest_effect")},action(){return!!u($(this)[0])},flair(){return t("tau_gas2_contest_flair")}},alien_station_survey:{id:"tauceti-alien_station_survey",title:t("tau_gas2_alien_station"),desc:t("tau_gas2_alien_station"),reqs:{tau_gas2:3},grant:["tau_gas2",4],path:["truepath"],queue_complete(){return e.tech.tau_gas3>=4?0:1},cost:{Money(){return e.race.lone_survivor?15e8:3e9},Helium_3(){return 5e6}},effect(){return t("tau_gas2_alien_station_repair_effect",[Je.tau_gas2.info.name()])},action(){return u($(this)[0])?(M(Je.tau_gas2.alien_station),L(t("tau_gas2_alien_station_msg",[Je.tau_gas2.info.name()]),"info",!1,["progress"]),!0):!1}},alien_station:{id:"tauceti-alien_station",title:t("tau_gas2_alien_station"),desc(r){return!e.tauceti.hasOwnProperty("alien_station")||e.tauceti.alien_station.count<100||r?`
${t("tau_gas2_alien_station")}
`+(e.tauceti.hasOwnProperty("alien_station")&&e.tauceti.alien_station.count>=100?`
${t("space_dwarf_reactor_desc_req")}
`:`
${t("tau_gas2_alien_station_repair")}
`):`
${t("tau_gas2_alien_station")}
`},reqs:{tau_gas2:4},condition(){return e.tauceti.alien_station.count<100},path:["truepath"],queue_size:5,queue_complete(){return 100-e.tauceti.alien_station.count},cost:{Money(r){return(r||0)+(e.tauceti.hasOwnProperty("alien_station")?e.tauceti.alien_station.count:0)<100?e.race.lone_survivor?12e6:5e7:0},Aluminium(r){return(r||0)+(e.tauceti.hasOwnProperty("alien_station")?e.tauceti.alien_station.count:0)<100?e.race.lone_survivor?256e3:256e4:0},Polymer(r){return(r||0)+(e.tauceti.hasOwnProperty("alien_station")?e.tauceti.alien_station.count:0)<100?e.race.lone_survivor?198900:989e3:0},Mythril(r){return(r||0)+(e.tauceti.hasOwnProperty("alien_station")?e.tauceti.alien_station.count:0)<100?ja(125e3):0},Cipher(r){return(r||0)+(e.tauceti.hasOwnProperty("alien_station")?e.tauceti.alien_station.count:0)<100?e.race.lone_survivor?256:2001:0}},effect(r){let a="",i=(r?.count??0)+(e.tauceti.hasOwnProperty("alien_station")?e.tauceti.alien_station.count:0);return i<100?(a+=`
${t("tau_gas2_alien_station_repaired",[i])}
`,a):Je.tau_gas2.alien_space_station.effect(r)},action(){return u($(this)[0])&&e.tauceti.alien_station.count<100?(I("alien_station","tauceti"),e.tauceti.alien_station.count>=100&&(e.tech.tau_gas2=5,e.tauceti.alien_space_station={count:1,on:0},de()),!0):!1},struct(){return{d:{count:0},p:["alien_station","tauceti"]}},post(){e.tauceti.hasOwnProperty("alien_space_station")&&(e.resource.Elerium.diff>=10&&(e.tauceti.alien_space_station.on=1),Gr())}},alien_space_station:{id:"tauceti-alien_space_station",title:t("tau_gas2_alien_station"),desc(){return`
${t("tau_gas2_alien_station")}
${t("space_dwarf_reactor_desc_req")}
`},reqs:{tau_gas2:5},path:["truepath"],cost:{},queue_complete(){return 0},special(){return!!(e.tech.tau_gas2&&e.tech.tau_gas2===6&&(!e.tech.alien_data||e.tech.alien_data<6))},wiki:!1,effect(){let r=$(this)[0].p_fuel().a,a=`
${t("space_dwarf_reactor_effect1",[-$(this)[0].powered()])}
`;if(e.tech.tau_gas2&&e.tech.tau_gas2>=6&&e.tauceti.alien_space_station.hasOwnProperty("decrypted")){let i=e.race.lone_survivor?1e5:25e6,s=+(e.tauceti.alien_space_station.decrypted/i).toFixed(2);s>100&&(s=100),a=a+`
${t("tau_gas2_alien_station_effect",[s])}
`}return a=a+`
${t("spend",[r,e.resource[$(this)[0].p_fuel().r].name])}
`,a},p_fuel(){return{r:"Elerium",a:e.race.lone_survivor?1:10}},powered(){return it(-75)},action(){return!1}},matrioshka_brain:{id:"tauceti-matrioshka_brain",title:t("tech_matrioshka_brain"),desc(r){return!e.tauceti.hasOwnProperty("matrioshka_brain")||e.tauceti.matrioshka_brain.count<1e3||r?`
${t("tech_matrioshka_brain")}
${t("requires_segments",[1e3])}
`:`
${t("tech_matrioshka_brain")}
`},reqs:{tau_gas2:7},condition(){return!!e.tauceti.matrioshka_brain},path:["truepath"],queue_size:50,queue_complete(){return 1e3-e.tauceti.matrioshka_brain.count},cost:{Money(r){return(r||0)+(e.tauceti.hasOwnProperty("matrioshka_brain")?e.tauceti.matrioshka_brain.count:0)<1e3?2e7:0},Neutronium(r){return(r||0)+(e.tauceti.hasOwnProperty("matrioshka_brain")?e.tauceti.matrioshka_brain.count:0)<1e3?45e3:0},Nano_Tube(r){return(r||0)+(e.tauceti.hasOwnProperty("matrioshka_brain")?e.tauceti.matrioshka_brain.count:0)<1e3?16e4:0},Adamantite(r){return(r||0)+(e.tauceti.hasOwnProperty("matrioshka_brain")?e.tauceti.matrioshka_brain.count:0)<1e3?666e3:0},Stanene(r){return(r||0)+(e.tauceti.hasOwnProperty("matrioshka_brain")?e.tauceti.matrioshka_brain.count:0)<1e3?61600:0},Bolognium(r){return(r||0)+(e.tauceti.hasOwnProperty("matrioshka_brain")?e.tauceti.matrioshka_brain.count:0)<1e3?44e3:0},Unobtainium(r){return(r||0)+(e.tauceti.hasOwnProperty("matrioshka_brain")?e.tauceti.matrioshka_brain.count:0)<1e3?1200:0},Mythril(r){return(r||0)+(e.tauceti.hasOwnProperty("matrioshka_brain")?e.tauceti.matrioshka_brain.count:0)<1e3?ja(64e3):0}},effect(r){let a="",i=(r?.count??0)+(e.tauceti.hasOwnProperty("matrioshka_brain")?e.tauceti.matrioshka_brain.count:0);return i<1e3&&(a+=`
${t("tau_gas2_matrioshka_brain_seg",[1e3-i])}
`),a},action(){return u($(this)[0])&&e.tauceti.matrioshka_brain.count<1e3?(I("matrioshka_brain","tauceti"),e.tauceti.matrioshka_brain.count>=1e3&&(e.tech.m_brain=1),!0):!1},struct(){return{d:{count:0},p:["matrioshka_brain","tauceti"]}}},ignition_device:{id:"tauceti-ignition_device",title:t("tech_ignition_device"),desc(r){return!e.tauceti.hasOwnProperty("ignition_device")||e.tauceti.ignition_device.count<10||r?`
${t("tech_ignition_device")}
${t("requires_segments",[10])}
`:`
${t("tech_ignition_device")}
`},reqs:{tau_gas2:8},condition(){return!!(e.tauceti.ignition_device&&e.tauceti.ignition_device.count<10)},path:["truepath"],queue_size:1,queue_complete(){return 10-e.tauceti.ignition_device.count},cost:{Money(r){return(r||0)+(e.tauceti.hasOwnProperty("ignition_device")?e.tauceti.ignition_device.count:0)<10?25e7:0},Uranium(r){return(r||0)+(e.tauceti.hasOwnProperty("ignition_device")?e.tauceti.ignition_device.count:0)<10?5e4:0},Elerium(r){return(r||0)+(e.tauceti.hasOwnProperty("ignition_device")?e.tauceti.ignition_device.count:0)<10?25e3:0},Graphene(r){return(r||0)+(e.tauceti.hasOwnProperty("ignition_device")?e.tauceti.ignition_device.count:0)<10?225e5:0},Orichalcum(r){return(r||0)+(e.tauceti.hasOwnProperty("ignition_device")?e.tauceti.ignition_device.count:0)<10?15e6:0},Quantium(r){return(r||0)+(e.tauceti.hasOwnProperty("ignition_device")?e.tauceti.ignition_device.count:0)<10?ja(8e6):0}},effect(r){let a="",i=(r?.count??0)+(e.tauceti.hasOwnProperty("ignition_device")?e.tauceti.ignition_device.count:0);return i<10&&(a+=`
${t("tau_gas2_ignition_device_seg",[10-i])}
`),a},action(){return u($(this)[0])&&e.tauceti.ignition_device.count<10?(I("ignition_device","tauceti"),e.tauceti.ignition_device.count>=10&&(e.tech.m_ignite=1,Gr()),!0):!1},struct(){return{d:{count:0},p:["ignition_device","tauceti"]}}},ignite_gas_giant:{id:"tauceti-ignite_gas_giant",title(){return t("tau_gas2_ignite_gas_giant",[Je.tau_gas2.info.name()])},desc(){return t("tau_gas2_ignite_gas_giant",[Je.tau_gas2.info.name()])},reqs:{tau_gas2:8,m_ignite:1},grant:["m_ignite",2],queue_size:1,queue_complete(){return!1},path:["truepath"],cost:{Helium_3(){return 75e5}},effect(){let r=`
${t("tau_gas2_ignite_gas_giant_effect",[t("tech_matrioshka_brain")])}
`;return e.tech.m_brain?(r=r+`
${t("tau_gas2_ignite_gas_giant_effect3")}
`,r+=K0()):r=r+`
${t("tau_gas2_ignite_gas_giant_effect2",[t("tech_matrioshka_brain")])}
`,r},action(){return e.tech.m_brain&&u($(this)[0])?(Pl(),!0):!1}}}};for(let r=1;r<9;r++)Je.tau_gas[`gas_contest-a${r}`]={id:`tauceti-gas_contest-a${r}`,title(){return Je.tau_gas.info.name(r)},desc(){return Je.tau_gas.info.name(r)},reqs:{tau_gas:1},grant:["tau_gas",2],path:["truepath"],wiki:!1,queue_complete(){return e.tech.tau_gas>=2?0:1},cost:{},effect(){return t(r===8?"tau_gas_contest_reject":"tau_gas_contest_pick",[Je.tau_gas.info.name(r)])},action(){return u($(this)[0])?(e.race.gas_name=r,M(Je.tau_gas.refueling_station),!0):!1}},Je.tau_gas2[`gas_contest-b${r}`]={id:`tauceti-gas_contest-b${r}`,title(){return Je.tau_gas2.info.name(r)},desc(){return Je.tau_gas2.info.name(r)},reqs:{tau_gas2:2},grant:["tau_gas2",3],path:["truepath"],wiki:!1,queue_complete(){return e.tech.tau_gas2>=3?0:1},cost:{},effect(){return t(r===8?"tau_gas2_contest_reject":"tau_gas_contest_pick",[Je.tau_gas2.info.name(r)])},action(){return u($(this)[0])?(e.race.gas_name2=r,!0):!1}};function Ol(){let r=dt("matrix"),a=e.race.universe==="antimatter"?t("resource_AntiPlasmid_plural_name"):t("resource_Plasmid_plural_name"),i=e.stats.retire===e.stats.matrix+1?`
${t("tau_star_matrix_skilled",[1])}
`:"";return`
${t("interstellar_ascension_trigger_effect2",[r.plasmid,a])}
${t("interstellar_ascension_trigger_effect2",[r.phage,t("resource_Phage_name")])}
${t("tau_star_matrix_servants",[1])}
${i}`}function K0(){let r=dt("retired"),a=e.race.universe==="antimatter"?t("resource_AntiPlasmid_plural_name"):t("resource_Plasmid_plural_name"),i=e.stats.retire+1===e.stats.matrix?`
${t("tau_star_matrix_skilled",[1])}
`:"";return`
${t("interstellar_ascension_trigger_effect2",[r.plasmid,a])}
${t("interstellar_ascension_trigger_effect2",[r.phage,t("resource_Phage_name")])}
${t("tau_star_matrix_servants",[1])}
${i}`}function N0(){let r=dt("eden"),a=e.race.universe==="antimatter"?t("resource_AntiPlasmid_plural_name"):t("resource_Plasmid_plural_name");return`
${t("interstellar_ascension_trigger_effect2",[r.plasmid,a])}
${t("interstellar_ascension_trigger_effect2",[r.phage,t("resource_Phage_name")])}
${t("tau_star_matrix_servants",[1])}
`}function Wo(){M(Je.tau_red.overseer),M(Je.tau_red.womling_village),M(Je.tau_red.womling_mine),M(Je.tau_red.womling_fun),M(Je.tau_red.womling_farm),e.race.lone_survivor&&(e.tauceti.womling_village.count=2,e.tauceti.womling_village.on=2,e.tauceti.womling_mine.count=1,e.tauceti.womling_mine.on=1)}function D0(r){return e.tech.womling_tech&&e.tech.womling_logistics&&e.tech.womling_logistics>=2&&(r*=.94**e.tech.womling_tech),r}function ja(r){return e.tech.womling_tech&&e.tech.womling_recycling&&e.tech.womling_recycling>=1&&(r*=(e.tech.isolation?.97:.98)**e.tech.womling_tech),r}function Fs(){return cs}function jl(){return Je}function Ir(){return!!(e.tech.tauceti&&e.tech.tauceti>=4)}function Al(r,a,i){switch(r){case"tauceti":return Rr(Je,a,i)}}function Gr(){if(!e.settings.tabLoad&&(e.settings.civTabs!==1||e.settings.spaceTabs!==6))return;let r=$("#tauceti");be(r),r.append($(`

${t("tab_tauceti")}

`)),!(!e.tech.tauceti||e.tech.tauceti<2)&&Object.keys(Je).forEach(function(a){let i=a.replace("tau_","");if(e.settings.tau[`${i}`]){let s=typeof Je[a].info.name=="string"?Je[a].info.name:Je[a].info.name(),n="";if(Je[a].info.hasOwnProperty("prop")&&(n=Je[a].info.prop()),Je[a].info.support){let o=Je[a].info.support;Je[a].info.hide_support?r.append(`

${s}

${n}
`):r.append(`

${s}

{{ support }}/{{ s_max }}${n}
`),V({el:`#sr${a}`,data:e.tauceti[o],methods:{filter(){return Je[a].info.filter(...arguments)}}})}else r.append(`

${s}

${n}
`);ve(a,function(){return typeof Je[a].info.desc=="string"?Je[a].info.desc:Je[a].info.desc()},{elm:`#${a} h3.name`,classes:"has-background-light has-text-dark"}),Object.keys(Je[a]).forEach(function(o){if(o!=="info"&&Rr(Je,a,o)){let c=Je[a][o];Jr(c,"tauceti",o)}}),Je[a].info.hasOwnProperty("extra")&&Je[a].info.extra(a)}})}function us(){if(!(!e.settings.tabLoad&&(e.settings.civTabs!==2||e.settings.govTabs!==5))&&(Jo(),ds(),be($("#dwarfShipYard")),e.space.hasOwnProperty("shipyard")&&e.settings.showShipYard)){let r=$("#dwarfShipYard");e.space.shipyard.hasOwnProperty("blueprint")||(e.space.shipyard.blueprint={class:"corvette",armor:"steel",weapon:"railgun",engine:"ion",power:"diesel",sensor:"radar",name:Qn()});let a=$('
');r.append(a);let i=$('
');a.append(i),i.append(`
${t("outer_shipyard_registry")}:
`),i.append(`
${t("crew")}
`),i.append(`
${t("power")}
`),i.append(`
${t("firepower")}
`),i.append(`
${t("outer_shipyard_sensors")}
`),i.append(`
${t("speed")}
`),i.append(`
${t("outer_shipyard_fuel")}
`),a.append('
');let s=$('
');a.append(s);let n={class:["corvette","frigate","destroyer","cruiser","battlecruiser","dreadnought","explorer"],power:["solar","diesel","fission","fusion","elerium"],weapon:["railgun","laser","p_laser","plasma","phaser","disruptor"],armor:["steel","alloy","neutronium"],engine:["ion","tie","pulse","photon","vacuum","emdrive"],sensor:["visual","radar","lidar","quantum"]};Object.keys(n).forEach(function(c){let l="";n[c].forEach(function(h,v){l+=`${t(`outer_shipyard_${c}_${h}`)}`}),s.append(` ${values} - `); - }); - let assemble = $(`
`); - assemble.append(``); - assemble.append(`${loc("outer_shipyard_fleet_details")}`); - assemble.append(`${loc("outer_shipyard_fleet_sort")}`); - plans.append(assemble); - assemble.append(`
${loc(`outer_shipyard_park`, [planetName().dwarf])}${loc(`outer_shipyard_map`)}`); - updateCosts(); - vBind({ - el: "#shipPlans", - data: { - b: global.space.shipyard.blueprint, - s: global.space.shipyard - }, - methods: { - setVal(b, v) { - if (b === "class" && v === "explorer") { - global.space.shipyard.blueprint.engine = "emdrive"; - global.space.shipyard.blueprint.weapon = "railgun"; - if (global.tech.syard_armor >= 3) { - global.space.shipyard.blueprint.armor = "neutronium"; - } - if (global.tech.syard_sensor >= 4) { - global.space.shipyard.blueprint.sensor = "quantum"; - } - if (global.tech.syard_power >= 4) { - global.space.shipyard.blueprint.power = "elerium"; - } - } else if (b === "class" && v !== "explorer" && global.space.shipyard.blueprint.class === "explorer") { - global.space.shipyard.blueprint.engine = "ion"; - } - global.space.shipyard.blueprint[b] = v; - updateCosts(); - vBind({ el: `#shipPlans` }, "update"); - }, - avail(k, i, v) { - if ((k === "class" || k === "engine") && global.tech["tauceti"] && (v === "emdrive" || v === "explorer")) { - return true; - } else if (global.space.shipyard.blueprint.class === "explorer") { - if (k === "weapon") { - return i === 1 ? true : false; - } else if (k === "engine") { - return i === 6 ? true : false; - } else if (k === "sensor") { - return i === 4 ? true : false; - } - } - return global.tech[`syard_${k}`] > i ? true : false; - }, - crewText() { - return shipCrewSize(global.space.shipyard.blueprint); - }, - powerText() { - let power = shipPower(global.space.shipyard.blueprint); - if (power < 0) { - return `${power}kW`; - } - return `${power}kW`; - }, - fireText() { - return shipAttackPower(global.space.shipyard.blueprint); - }, - sensorText() { - return sensorRange(global.space.shipyard.blueprint) + "km"; - }, - speedText() { - let speed = 1495978707e-1 / 225 / 24 / 3600 * shipSpeed(global.space.shipyard.blueprint); - return Math.round(speed) + "km/s"; - }, - fuelText() { - let fuel = shipFuelUse(global.space.shipyard.blueprint); - if (fuel.res) { - return `-${fuel.burn} ${global.resource[fuel.res].name}`; - } else { - return `N/A`; - } - }, - build() { - if (shipPower(global.space.shipyard.blueprint) >= 0) { - let raw = shipCosts(global.space.shipyard.blueprint); - let costs = {}; - Object.keys(raw).forEach(function(res) { - costs[res] = function() { - return raw[res]; - }; - }); - if (!(global.settings.qKey && keyMap.q) && payCosts(false, costs)) { - let ship = deepClone(global.space.shipyard.blueprint); - buildTPShip(ship, false); - } else { - let used = 0; - for (let j = 0; j < global.queue.queue.length; j++) { - used += Math.ceil(global.queue.queue[j].q / global.queue.queue[j].qs); - } - if (used < global.queue.max) { - let blueprint = deepClone(global.space.shipyard.blueprint); - global.queue.queue.push({ - id: `tp-ship-${Math.rand(0, 1e5)}`, - action: "tp-ship", - type: blueprint, - label: blueprint.name, - cna: false, - time: 0, - q: 1, - qs: 1, - t_max: 0, - bres: false - }); - global.space.shipyard.blueprint.name = getRandomShipName(); - buildQueue(); - } - } - } - }, - trigModal() { - this.$buefy.modal.open({ - hasModalCard: false, - content: '' - }); - let checkExist = setInterval(function() { - if ($("#modalBox").length > 0) { - clearInterval(checkExist); - solarModal(); - } - }, 50); - }, - redraw() { - drawShips(); - }, - lbl(l, c) { - return loc(`outer_shipyard_${c}_${l}`); - } - } - }); - Object.keys(shipConfig).forEach(function(type) { - for (let i = 0; i < $(`#shipPlans .${type}`).length; i++) { - popover( - `shipPlans${type}${i}`, - function(obj) { - let val = $(obj.this).attr(`data-val`); - return loc(`outer_shipyard_${type}_${val}_desc`); - }, - { - elm: `#shipPlans .${type}.a${i}`, - placement: "right" - } - ); - } - }); - yard.append($(`
`)); - drawShips(); - } - } - function buildTPShipQueue(action) { - if (payCosts(false, action.cost)) { - buildTPShip(deepClone(action.bp, true)); - return true; - } - return false; - } - function TPShipDesc(parent, obj) { - let ship = obj.type; - let raw = shipCosts(ship); - let costs = {}; - Object.keys(raw).forEach(function(res) { - costs[res] = function() { - return raw[res]; - }; - }); - var desc = $(`
`); - var shipPattern = $(`
${loc(`outer_shipyard_class_${ship.class}`)} | ${loc(`outer_shipyard_engine_${ship.engine}`)} | ${loc(`outer_shipyard_weapon_${ship.weapon}`)} | ${loc(`outer_shipyard_power_${ship.power}`)} | ${loc(`outer_shipyard_sensor_${ship.sensor}`)}
`); - parent.append(desc); - desc.append(shipPattern); - var cost = $('
'); - desc.append(cost); - let tc = timeCheck({ id: ship.name, cost: costs, doNotAdjustCost: true }, false, true); - Object.keys(costs).forEach(function(res) { - if (costs[res]() > 0) { - var label = res === "Money" ? "$" : global.resource[res].name + ": "; - var color = global.resource[res].amount >= costs[res]() ? "has-text-dark" : res === tc.r ? "has-text-danger" : "has-text-alert"; - cost.append($(`
${label}${sizeApproximation(costs[res](), 2)}
`)); - } - }); - if (tc && tc["t"]) { - desc.append($(`
{{ timer(t) }}
`)); - vBind({ - el: "#popTimer", - data: tc, - methods: { - timer(t) { - return loc("action_ready", [timeFormat(t)]); - } - } - }); - } - return desc; - } - function buildTPShip(ship, queue) { - ship["location"] = "spc_dwarf"; - ship["xy"] = genXYcoord("spc_dwarf"); - ship["origin"] = deepClone(ship["xy"]); - ship["destination"] = deepClone(ship["xy"]); - ship["transit"] = 0; - ship["dist"] = 0; - ship["damage"] = 0; - ship["fueled"] = false; - if (ship.name.length === 0) { - ship.name = getRandomShipName(); - } - let num = 1; - let name = ship.name; - while (global.space.shipyard.ships.filter((s) => s.name === name).length > 0) { - num++; - name = ship.name + ` ${num}`; - } - ship.name = name; - global.space.shipyard.ships.push(ship); - drawShips(); - updateCosts(); - if (!queue) { - global.space.shipyard.blueprint.name = getRandomShipName(); - } - } - function getRandomShipName() { - let names2 = [ - "Trident", - "Spacewolf", - "Excalibur", - "Neptune", - "Deimos", - "Phobos", - "Enterprise", - "Intrepid", - "Daedalus", - "Odyssey", - "Endurance", - "Horizon", - "Hyperion", - "Icarus", - "Aurora", - "Axiom", - "Nemesis", - "Normandy", - "Orion", - "Prometheus", - "Vanguard", - "Discovery", - "Voyager", - "Defiant", - "Titan", - "Liberty", - "Destiny", - "Phoenix", - "Nautilus", - "Barracuda", - "Dolphin", - "Cuttlefish", - "Tiger Shark", - "Stingray", - "Swordfish", - "Triton", - "Dragon", - "Scorpion", - "Hagfish", - "Marlin", - "Galileo", - "Raven", - "Sarcophagus", - "Excelsior", - "Scimitar", - "Vengeance", - "Nomad", - "Nova", - "Olympus", - "Aegis", - "Agamemnon", - "Charon", - "Achilles", - "Apollo", - "Hermes", - "Hydra", - "Medusa", - "Talos", - "Zeus", - "Heracles", - "Cerberus", - "Acheron", - "Damocles", - "Juno", - "Persephone", - "Solaris", - "Victory", - "Hawk", - "Fury", - "Razor", - "Stinger", - "Outrider", - "Falcon", - "Vulture", - "Nirvana", - "Retribution", - "Swordbreaker", - "Valkyrie", - "Athena", - "Avalon", - "Merlin", - "Argonaut", - "Serenity", - "Gunstar", - "Ranger", - "Tantive", - "Cygnus", - "Nostromo", - "Reliant", - "Narcissus", - "Liberator", - "Sulaco", - "Infinity", - "Resolute", - "Wasp", - "Hornet", - "Independence", - "Gilgamesh", - "Midway", - "Concordia", - "Goliath", - "Cosmos", - "Express", - "Tigers Claw", - "Oberon", - "Minnow", - "Majestic", - "Spartacus", - "Colossi", - "Vigilant", - "Remorseless", - "Caelestis", - "Inquisitor", - "Atlas", - "Avenger", - "Dauntless", - "Nihilus", - "Thanatos", - "Stargazer", - "Xyzzy", - "Kraken", - "Xerxes", - "Spitfire", - "McShipFace", - "Monitor", - "Merrimack", - "Constitution", - "Ghost", - "Pequod", - "Arcadia", - "Corsair", - "Inferno", - "Jenny", - "Revenge", - "Red October", - "Jackdaw", - "Thorn", - "Caleuche", - "Valencia", - "Ourang", - "Deering", - "Baychimo", - "Octavius", - "Joyita", - "Lovibond", - "Celeste", - "Dutchman" - ]; - let name = names2[Math.rand(0, names2.length)]; - if (global.space.shipyard.ships.filter((s) => s.name === name).length > 0) { - name = randomWord(); - } - return name; - } - function randomWord() { - let syllables = [ - "al", - "an", - "ar", - "as", - "at", - "ea", - "ed", - "en", - "er", - "es", - "ha", - "he", - "hi", - "in", - "is", - "it", - "le", - "me", - "nd", - "ne", - "ng", - "nt", - "on", - "or", - "ou", - "re", - "se", - "st", - "te", - "th", - "ti", - "to", - "ve", - "wa", - "all", - "and", - "are", - "but", - "ent", - "era", - "ere", - "eve", - "for", - "had", - "hat", - "hen", - "her", - "hin", - "his", - "ing", - "ion", - "ith", - "not", - "ome", - "oul", - "our", - "sho", - "ted", - "ter", - "tha", - "the", - "thi", - "tio", - "uld", - "ver", - "was", - "wit", - "you" - ]; - let max = Math.rand(2, 5); - let word = ``; - for (let i = 0; i < max; i++) { - word += syllables[Math.rand(0, syllables.length)]; - } - return word.charAt(0).toUpperCase() + word.slice(1); - } - function updateCosts() { - let costs = shipCosts(global.space.shipyard.blueprint); - clearElement($(`#shipYardCosts`)); - Object.keys(costs).forEach(function(k) { - if (k === "Money") { - $(`#shipYardCosts`).append(`${global.resource[k].name}${sizeApproximation(costs[k])}`); - } else { - $(`#shipYardCosts`).append(` | ${global.resource[k].name} ${sizeApproximation(costs[k])}`); - } - }); - } - function shipCrewSize(ship) { - switch (ship.class) { - case "corvette": - return global.race["grenadier"] ? jobScale(1) : jobScale(2); - case "frigate": - return global.race["grenadier"] ? jobScale(2) : jobScale(3); - case "destroyer": - return global.race["grenadier"] ? jobScale(3) : jobScale(4); - case "cruiser": - return global.race["grenadier"] ? jobScale(4) : jobScale(6); - case "battlecruiser": - return global.race["grenadier"] ? jobScale(5) : jobScale(8); - case "dreadnought": - return global.race["grenadier"] ? jobScale(6) : jobScale(10); - case "explorer": - return global.race["grenadier"] ? jobScale(6) : jobScale(10); - } - } - function shipPower(ship, wiki) { - let watts = 0; - let out_inflate = 1; - let use_inflate = 1; - switch (ship.class) { - case "frigate": - out_inflate = 1.1; - use_inflate = 1.2; - break; - case "destroyer": - out_inflate = 1.5; - use_inflate = 1.65; - break; - case "cruiser": - out_inflate = 2; - use_inflate = 2.5; - break; - case "battlecruiser": - out_inflate = 2.5; - use_inflate = 3.5; - break; - case "dreadnought": - out_inflate = 5; - use_inflate = 6.5; - break; - case "explorer": - out_inflate = 6; - use_inflate = 2; - break; - } - switch (ship.power) { - case "solar": - watts = Math.round(50 * out_inflate); - break; - case "diesel": - watts = Math.round(100 * out_inflate); - break; - case "fission": - watts = Math.round(150 * out_inflate); - break; - case "fusion": - watts = Math.round((ship.class === "explorer" || wiki ? 174 : 175) * out_inflate); - break; - case "elerium": - watts = Math.round(200 * out_inflate); - break; - } - watts = Math.round(Math.max(watts, powerModifier(watts))); - switch (ship.weapon) { - case "railgun": - watts -= Math.round(10 * use_inflate); - break; - case "laser": - watts -= Math.round(30 * use_inflate); - break; - case "p_laser": - watts -= Math.round(18 * use_inflate); - break; - case "plasma": - watts -= Math.round(50 * use_inflate); - break; - case "phaser": - watts -= Math.round(65 * use_inflate); - break; - case "disruptor": - watts -= Math.round(100 * use_inflate); - break; - } - switch (ship.engine) { - case "ion": - watts -= Math.round(25 * use_inflate); - break; - case "tie": - watts -= Math.round(50 * use_inflate); - break; - case "pulse": - watts -= Math.round(40 * use_inflate); - break; - case "photon": - watts -= Math.round(75 * use_inflate); - break; - case "vacuum": - watts -= Math.round(120 * use_inflate); - break; - case "emdrive": - watts -= Math.round((ship.class !== "explorer" && !wiki ? 1024 : 515) * use_inflate); - break; - } - switch (ship.sensor) { - case "radar": - watts -= Math.round(10 * use_inflate); - break; - case "lidar": - watts -= Math.round(25 * use_inflate); - break; - case "quantum": - watts -= Math.round(75 * use_inflate); - break; - } - return watts; - } - function shipAttackPower(ship) { - let rating = 0; - switch (ship.weapon) { - case "railgun": - rating = 36; - break; - case "laser": - rating = 64; - break; - case "p_laser": - rating = 54; - break; - case "plasma": - rating = 90; - break; - case "phaser": - rating = 114; - break; - case "disruptor": - rating = 156; - break; - } - if (global.race["wish"] && global.race["wishStats"] && global.race.wishStats.ship) { - rating = Math.round(rating * 1.25); - } - switch (ship.class) { - case "corvette": - return rating; - case "frigate": - return Math.round(rating * 1.5); - case "destroyer": - return Math.round(rating * 2.75); - case "cruiser": - return Math.round(rating * 5.5); - case "battlecruiser": - return Math.round(rating * 10); - case "dreadnought": - return Math.round(rating * 22); - case "explorer": - return Math.round(rating * 1.2); - } - } - function shipSpeed(ship) { - let mass = 1; - switch (ship.class) { - case "corvette": - mass = ship.armor === "neutronium" ? 1.1 : 1; - break; - case "frigate": - mass = ship.armor === "neutronium" ? 1.35 : 1.25; - break; - case "destroyer": - mass = ship.armor === "neutronium" ? 1.95 : 1.8; - break; - case "cruiser": - mass = ship.armor === "neutronium" ? 3.5 : 3; - break; - case "battlecruiser": - mass = ship.armor === "neutronium" ? 4.8 : 4; - break; - case "dreadnought": - mass = ship.armor === "neutronium" ? 7.5 : 6; - break; - case "explorer": - mass = 1; - break; - } - let boost = ship.location === "spc_dwarf" && p_on["m_relay"] && ship.transit === 0 && global.space["m_relay"] && global.space.m_relay.charged >= 1e4 ? 3 : 1; - switch (ship.engine) { - case "ion": - return 12 / mass * boost; - case "tie": - return 22 / mass * boost; - case "pulse": - return 18 / mass * boost; - case "photon": - return 30 / mass * boost; - case "vacuum": - return 42 / mass * boost; - case "emdrive": - return 37500 / mass * boost; - } - } - function shipFuelUse(ship) { - let res = false; - let burn = 0; - switch (ship.power) { - case "diesel": - res = "Oil"; - burn = 8; - break; - case "fission": - res = "Uranium"; - burn = 0.5; - break; - case "fusion": - res = "Helium_3"; - burn = 12; - break; - case "elerium": - res = "Elerium"; - burn = 1; - break; - } - switch (ship.class) { - case "frigate": - burn *= 1.25; - break; - case "destroyer": - burn *= 1.5; - break; - case "cruiser": - burn *= 2; - break; - case "battlecruiser": - burn *= 3; - break; - case "dreadnought": - burn *= 5; - break; - case "explorer": - burn *= 25; - break; - } - return { - res, - burn: +burn.toFixed(2) - }; - } - function shipCosts(bp) { - let costs = {}; - let h_inflate = 1; - let p_inflate = 1; - let creep_factor = 1; - switch (bp.class) { - case "corvette": - costs["Money"] = 25e5; - costs["Aluminium"] = 5e5; - h_inflate = 1; - p_inflate = 1; - creep_factor = 2; - break; - case "frigate": - costs["Money"] = 5e6; - costs["Aluminium"] = 125e4; - h_inflate = 1.1; - p_inflate = 1.09; - creep_factor = 1.5; - break; - case "destroyer": - costs["Money"] = 15e6; - costs["Aluminium"] = 35e5; - h_inflate = 1.2; - p_inflate = 1.18; - creep_factor = 1.2; - break; - case "cruiser": - costs["Money"] = 5e7; - costs["Adamantite"] = 1e6; - h_inflate = 1.3; - p_inflate = 1.25; - break; - case "battlecruiser": - costs["Money"] = 125e6; - costs["Adamantite"] = 26e5; - h_inflate = 1.35; - p_inflate = 1.3; - creep_factor = 0.8; - break; - case "dreadnought": - costs["Money"] = 5e8; - costs["Adamantite"] = 8e6; - h_inflate = 1.4; - p_inflate = 1.35; - creep_factor = 0.5; - break; - case "explorer": - costs["Money"] = 8e8; - costs["Adamantite"] = 95e5; - h_inflate = 1.45; - p_inflate = 1; - break; - } - switch (bp.armor) { - case "steel": - costs["Steel"] = Math.round(35e4 ** h_inflate); - break; - case "alloy": - costs["Alloy"] = Math.round(25e4 ** h_inflate); - break; - case "neutronium": - costs["Neutronium"] = Math.round(1e4 ** h_inflate); - break; - } - switch (bp.engine) { - case "ion": - costs["Titanium"] = Math.round(75e3 ** p_inflate); - break; - case "tie": - costs["Titanium"] = Math.round(15e4 ** p_inflate); - break; - case "pulse": - costs["Titanium"] = Math.round(125e3 ** p_inflate); - break; - case "photon": - costs["Titanium"] = Math.round(21e4 ** p_inflate); - break; - case "vacuum": - costs["Titanium"] = Math.round(3e5 ** p_inflate); - break; - case "emdrive": - costs["Titanium"] = Math.round(125e4 ** p_inflate); - break; - } - let alt_mat = ["dreadnought", "explorer"].includes(bp.class) ? true : false; - switch (bp.power) { - case "solar": - costs[alt_mat ? "Orichalcum" : "Copper"] = Math.round(4e4 ** h_inflate); - costs["Iridium"] = Math.round(15e3 ** p_inflate); - break; - case "diesel": - costs[alt_mat ? "Orichalcum" : "Copper"] = Math.round(4e4 ** h_inflate); - costs["Iridium"] = Math.round(15e3 ** p_inflate); - break; - case "fission": - costs[alt_mat ? "Orichalcum" : "Copper"] = Math.round(5e4 ** h_inflate); - costs["Iridium"] = Math.round(3e4 ** p_inflate); - break; - case "fusion": - costs[alt_mat ? "Orichalcum" : "Copper"] = Math.round(5e4 ** h_inflate); - costs["Iridium"] = Math.round(4e4 ** p_inflate); - break; - case "elerium": - costs[alt_mat ? "Orichalcum" : "Copper"] = Math.round(6e4 ** h_inflate); - costs["Iridium"] = Math.round(55e3 ** p_inflate); - break; - } - if (bp.class !== "explorer") { - switch (bp.sensor) { - case "radar": - costs["Money"] = Math.round(costs["Money"] ** 1.04); - break; - case "lidar": - costs["Money"] = Math.round(costs["Money"] ** 1.08); - break; - case "quantum": - costs["Money"] = Math.round(costs["Money"] ** 1.12); - break; - } - } - switch (bp.weapon) { - case "railgun": - costs["Iron"] = Math.round(25e3 ** h_inflate); - break; - case "laser": - costs["Iridium"] = Math.round(costs["Iridium"] ** 1.05); - costs["Nano_Tube"] = Math.round(12e3 ** h_inflate); - break; - case "p_laser": - costs["Iridium"] = Math.round(costs["Iridium"] ** 1.035); - costs["Nano_Tube"] = Math.round(12e3 ** h_inflate); - break; - case "plasma": - costs["Iridium"] = Math.round(costs["Iridium"] ** 1.1); - costs["Nano_Tube"] = Math.round(2e4 ** h_inflate); - break; - case "phaser": - costs["Iridium"] = Math.round(costs["Iridium"] ** 1.15); - costs["Quantium"] = Math.round(18e3 ** h_inflate); - break; - case "disruptor": - costs["Iridium"] = Math.round(costs["Iridium"] ** 1.2); - costs["Quantium"] = Math.round(35e3 ** h_inflate); - break; - } - if (bp.class === "explorer") { - costs["Iron"] *= 10; - costs["Titanium"] *= 5; - costs["Iridium"] *= 50; - } - let typeCount = 0; - global.space.shipyard.ships.forEach(function(ship) { - if (ship.class === bp.class) { - typeCount++; - } - }); - let creep = 1 + (typeCount - 2) / 25 * creep_factor; - Object.keys(costs).forEach(function(res) { - if (bp.class === "explorer") { - costs[res] = Math.ceil(costs[res] * ((typeCount + 1) * 3)); - } else { - if (typeCount < 2) { - costs[res] = Math.ceil(costs[res] * (typeCount === 0 ? 0.75 : 0.9)); - } else if (typeCount > 2) { - costs[res] = Math.ceil(costs[res] * creep); - } - } - }); - return costs; - } - function clearShipDrag() { - let el = $("#shipList")[0]; - if (el) { - let sort = Sortable.get(el); - if (sort) { - sort.destroy(); - } - } - } - function dragShipList() { - let el = $("#shipList")[0]; - Sortable.create(el, { - onEnd(e) { - let order = global.space.shipyard.ships; - order.splice(e.newDraggableIndex, 0, order.splice(e.oldDraggableIndex, 1)[0]); - global.space.shipyard.ships = order; - drawShips(); - } - }); - } - var shipyardRanks = { - // Lower number -> higher in the auto-sorted list - location: { - spc_dwarf: 1, - spc_moon: 2, - spc_red: 3, - spc_belt: 4, - spc_gas: 5, - spc_gas_moon: 6, - spc_titan: 7, - spc_enceladus: 8, - spc_triton: 9, - spc_kuiper: 10, - spc_eris: 11, - tauceti: 12 - }, - class: { - corvette: 1, - frigate: 2, - destroyer: 3, - cruiser: 4, - battlecruiser: 5, - dreadnought: 6, - explorer: 7 - }, - engine: { - ion: 1, - tie: 3, - pulse: 2, - photon: 4, - vacuum: 5, - emdrive: 6 - }, - power: { - solar: 1, - diesel: 2, - fission: 3, - fusion: 4, - elerium: 5 - } - }; - function shipyardShipCompare(a, b) { - return (shipyardRanks.location[a.location] ?? 0) - (shipyardRanks.location[b.location] ?? 0) || a.transit - b.transit || (shipyardRanks.class[a.class] ?? 0) - (shipyardRanks.class[b.class] ?? 0) || (shipyardRanks.engine[a.engine] ?? 0) - (shipyardRanks.engine[b.engine] ?? 0) || (shipyardRanks.power[a.power] ?? 0) - (shipyardRanks.power[b.power] ?? 0); - } - function drawShips() { - if (!global.settings.tabLoad && (global.settings.civTabs !== 2 || global.settings.govTabs !== 5)) { - return; - } - clearShipDrag(); - clearElement($("#shipList")); - if (global.tech["isolation"]) { - return; - } - let list = $("#shipList"); - if (global.space.shipyard.sort) { - global.space.shipyard.ships = global.space.shipyard.ships.sort(shipyardShipCompare); - } - const spaceRegions = spaceTech(); - for (let i = 0; i < global.space.shipyard.ships.length; i++) { - let ship = global.space.shipyard.ships[i]; - if (!ship["xy"]) { - ship["xy"] = genXYcoord(ship.location); - } - if (!ship.hasOwnProperty("dist")) { - ship["dist"] = ship["transit"]; - } - if (!ship.hasOwnProperty("origin")) { - ship["origin"] = ship["xy"]; - } - if (!ship.hasOwnProperty("destination")) { - ship["destination"] = genXYcoord(ship.location); - } - let values = ``; - if (ship.class === "explorer") { - if (ship.location !== "tauceti") { - let name = loc("tech_era_tauceti"); - values += `${name}`; - } - } else { - Object.keys(spaceRegions).forEach(function(region) { - if (ship.location !== region) { - if (spaceRegions[region].info.syndicate() || region === "spc_dwarf") { - if (!global.race["orbit_decayed"] || global.race["orbit_decayed"] && region !== "spc_moon") { - let name = typeof spaceRegions[region].info.name === "string" ? spaceRegions[region].info.name : spaceRegions[region].info.name(); - values += `${name}`; - } - } - } - }); - } - let location = ship.location === "tauceti" ? loc("tech_era_tauceti") : typeof spaceRegions[ship.location].info.name === "string" ? spaceRegions[ship.location].info.name : spaceRegions[ship.location].info.name(); - let dispatch = ` + ${l} + `)});let o=$('
');o.append(``),o.append(`${t("outer_shipyard_fleet_details")}`),o.append(`${t("outer_shipyard_fleet_sort")}`),a.append(o),o.append(`
${t("outer_shipyard_park",[X().dwarf])}${t("outer_shipyard_map")}`),Vn(),V({el:"#shipPlans",data:{b:e.space.shipyard.blueprint,s:e.space.shipyard},methods:{setVal(c,l){c==="class"&&l==="explorer"?(e.space.shipyard.blueprint.engine="emdrive",e.space.shipyard.blueprint.weapon="railgun",e.tech.syard_armor>=3&&(e.space.shipyard.blueprint.armor="neutronium"),e.tech.syard_sensor>=4&&(e.space.shipyard.blueprint.sensor="quantum"),e.tech.syard_power>=4&&(e.space.shipyard.blueprint.power="elerium")):c==="class"&&l!=="explorer"&&e.space.shipyard.blueprint.class==="explorer"&&(e.space.shipyard.blueprint.engine="ion"),e.space.shipyard.blueprint[c]=l,Vn(),V({el:"#shipPlans"},"update")},avail(c,l,h){if((c==="class"||c==="engine")&&e.tech.tauceti&&(h==="emdrive"||h==="explorer"))return!0;if(e.space.shipyard.blueprint.class==="explorer"){if(c==="weapon")return l===1;if(c==="engine")return l===6;if(c==="sensor")return l===4}return e.tech[`syard_${c}`]>l},crewText(){return un(e.space.shipyard.blueprint)},powerText(){let c=Sl(e.space.shipyard.blueprint);return c<0?`${c}kW`:`${c}kW`},fireText(){return Zo(e.space.shipyard.blueprint)},sensorText(){return zs(e.space.shipyard.blueprint)+"km"},speedText(){let c=7.695363719135802*As(e.space.shipyard.blueprint);return Math.round(c)+"km/s"},fuelText(){let c=Yn(e.space.shipyard.blueprint);return c.res?`-${c.burn} ${e.resource[c.res].name}`:"N/A"},build(){if(Sl(e.space.shipyard.blueprint)>=0){let c=bi(e.space.shipyard.blueprint),l={};if(Object.keys(c).forEach(function(h){l[h]=function(){return c[h]}}),!(e.settings.qKey&&vr.q)&&u(!1,l)){let h=pt(e.space.shipyard.blueprint);Tl(h,!1)}else{let h=0;for(let v=0;v
',onCancel:()=>la()});let c=setInterval(function(){$("#modalBox").length>0&&(clearInterval(c),U0())},50)},redraw(){ls()},lbl(c,l){return t(`outer_shipyard_${l}_${c}`)}}}),Object.keys(n).forEach(function(c){for(let l=0;l<$(`#shipPlans .${c}`).length;l++)ve(`shipPlans${c}${l}`,function(h){let v=$(h.this).attr("data-val");return t(`outer_shipyard_${c}_${v}_desc`)},{elm:`#shipPlans .${c}.a${l}`,placement:"right"})}),r.append($('
')),ls()}}function Fl(r){return u(!1,r.cost)?(Tl(pt(r.bp,!0)),!0):!1}function zl(r,a){let i=a.type,s=bi(i),n={};Object.keys(s).forEach(function(v){n[v]=function(){return s[v]}});var o=$('
'),c=$(`
${t(`outer_shipyard_class_${i.class}`)} | ${t(`outer_shipyard_engine_${i.engine}`)} | ${t(`outer_shipyard_weapon_${i.weapon}`)} | ${t(`outer_shipyard_power_${i.power}`)} | ${t(`outer_shipyard_sensor_${i.sensor}`)}
`);r.append(o),o.append(c);var l=$('
');o.append(l);let h=Hr({id:i.name,cost:n,doNotAdjustCost:!0},!1,!0);return Object.keys(n).forEach(function(v){if(n[v]()>0){var _=v==="Money"?"$":e.resource[v].name+": ",g=e.resource[v].amount>=n[v]()?"has-text-dark":v===h.r?"has-text-danger":"has-text-alert";l.append($(`
${_}${Me(n[v](),2)}
`))}}),h&&h.t&&(o.append($('
{{ timer(t) }}
')),V({el:"#popTimer",data:h,methods:{timer(v){return t("action_ready",[ft(v)])}}})),o}function Tl(r,a){r.location="spc_dwarf",r.xy=Bi("spc_dwarf"),r.origin=pt(r.xy),r.destination=pt(r.xy),r.transit=0,r.dist=0,r.damage=0,r.fueled=!1,r.name.length===0&&(r.name=Qn());let i=1,s=r.name;for(;e.space.shipyard.ships.filter(n=>n.name===s).length>0;)i++,s=r.name+` ${i}`;r.name=s,e.space.shipyard.ships.push(r),ls(),Vn(),a||(e.space.shipyard.blueprint.name=Qn())}function Qn(){let r=["Trident","Spacewolf","Excalibur","Neptune","Deimos","Phobos","Enterprise","Intrepid","Daedalus","Odyssey","Endurance","Horizon","Hyperion","Icarus","Aurora","Axiom","Nemesis","Normandy","Orion","Prometheus","Vanguard","Discovery","Voyager","Defiant","Titan","Liberty","Destiny","Phoenix","Nautilus","Barracuda","Dolphin","Cuttlefish","Tiger Shark","Stingray","Swordfish","Triton","Dragon","Scorpion","Hagfish","Marlin","Galileo","Raven","Sarcophagus","Excelsior","Scimitar","Vengeance","Nomad","Nova","Olympus","Aegis","Agamemnon","Charon","Achilles","Apollo","Hermes","Hydra","Medusa","Talos","Zeus","Heracles","Cerberus","Acheron","Damocles","Juno","Persephone","Solaris","Victory","Hawk","Fury","Razor","Stinger","Outrider","Falcon","Vulture","Nirvana","Retribution","Swordbreaker","Valkyrie","Athena","Avalon","Merlin","Argonaut","Serenity","Gunstar","Ranger","Tantive","Cygnus","Nostromo","Reliant","Narcissus","Liberator","Sulaco","Infinity","Resolute","Wasp","Hornet","Independence","Gilgamesh","Midway","Concordia","Goliath","Cosmos","Express","Tigers Claw","Oberon","Minnow","Majestic","Spartacus","Colossi","Vigilant","Remorseless","Caelestis","Inquisitor","Atlas","Avenger","Dauntless","Nihilus","Thanatos","Stargazer","Xyzzy","Kraken","Xerxes","Spitfire","McShipFace","Monitor","Merrimack","Constitution","Ghost","Pequod","Arcadia","Corsair","Inferno","Jenny","Revenge","Red October","Jackdaw","Thorn","Caleuche","Valencia","Ourang","Deering","Baychimo","Octavius","Joyita","Lovibond","Celeste","Dutchman"],a=r[Math.rand(0,r.length)];return e.space.shipyard.ships.filter(i=>i.name===a).length>0&&(a=B0()),a}function B0(){let r=["al","an","ar","as","at","ea","ed","en","er","es","ha","he","hi","in","is","it","le","me","nd","ne","ng","nt","on","or","ou","re","se","st","te","th","ti","to","ve","wa","all","and","are","but","ent","era","ere","eve","for","had","hat","hen","her","hin","his","ing","ion","ith","not","ome","oul","our","sho","ted","ter","tha","the","thi","tio","uld","ver","was","wit","you"],a=Math.rand(2,5),i="";for(let s=0;s${e.resource[a].name}${Me(r[a])}`):$("#shipYardCosts").append(` | ${e.resource[a].name} ${Me(r[a])}`)})}function un(r){switch(r.class){case"corvette":return e.race.grenadier?N(1):N(2);case"frigate":return e.race.grenadier?N(2):N(3);case"destroyer":return e.race.grenadier?N(3):N(4);case"cruiser":return e.race.grenadier?N(4):N(6);case"battlecruiser":return e.race.grenadier?N(5):N(8);case"dreadnought":return e.race.grenadier?N(6):N(10);case"explorer":return e.race.grenadier?N(6):N(10)}}function Sl(r,a){let i=0,s=1,n=1;switch(r.class){case"frigate":s=1.1,n=1.2;break;case"destroyer":s=1.5,n=1.65;break;case"cruiser":s=2,n=2.5;break;case"battlecruiser":s=2.5,n=3.5;break;case"dreadnought":s=5,n=6.5;break;case"explorer":s=6,n=2;break}switch(r.power){case"solar":i=Math.round(50*s);break;case"diesel":i=Math.round(100*s);break;case"fission":i=Math.round(150*s);break;case"fusion":i=Math.round((r.class==="explorer"||a?174:175)*s);break;case"elerium":i=Math.round(200*s);break}switch(i=Math.round(Math.max(i,it(i))),r.weapon){case"railgun":i-=Math.round(10*n);break;case"laser":i-=Math.round(30*n);break;case"p_laser":i-=Math.round(18*n);break;case"plasma":i-=Math.round(50*n);break;case"phaser":i-=Math.round(65*n);break;case"disruptor":i-=Math.round(100*n);break}switch(r.engine){case"ion":i-=Math.round(25*n);break;case"tie":i-=Math.round(50*n);break;case"pulse":i-=Math.round(40*n);break;case"photon":i-=Math.round(75*n);break;case"vacuum":i-=Math.round(120*n);break;case"emdrive":i-=Math.round((r.class!=="explorer"&&!a?1024:515)*n);break}switch(r.sensor){case"radar":i-=Math.round(10*n);break;case"lidar":i-=Math.round(25*n);break;case"quantum":i-=Math.round(75*n);break}return i}function Zo(r){let a=0;switch(r.weapon){case"railgun":a=36;break;case"laser":a=64;break;case"p_laser":a=54;break;case"plasma":a=90;break;case"phaser":a=114;break;case"disruptor":a=156;break}switch(e.race.wish&&e.race.wishStats&&e.race.wishStats.ship&&(a=Math.round(a*1.25)),r.class){case"corvette":return a;case"frigate":return Math.round(a*1.5);case"destroyer":return Math.round(a*2.75);case"cruiser":return Math.round(a*5.5);case"battlecruiser":return Math.round(a*10);case"dreadnought":return Math.round(a*22);case"explorer":return Math.round(a*1.2)}}function As(r){let a=1;switch(r.class){case"corvette":a=r.armor==="neutronium"?1.1:1;break;case"frigate":a=r.armor==="neutronium"?1.35:1.25;break;case"destroyer":a=r.armor==="neutronium"?1.95:1.8;break;case"cruiser":a=r.armor==="neutronium"?3.5:3;break;case"battlecruiser":a=r.armor==="neutronium"?4.8:4;break;case"dreadnought":a=r.armor==="neutronium"?7.5:6;break;case"explorer":a=1;break}let i=r.location==="spc_dwarf"&&x.m_relay&&r.transit===0&&e.space.m_relay&&e.space.m_relay.charged>=1e4?3:1;switch(r.engine){case"ion":return 12/a*i;case"tie":return 22/a*i;case"pulse":return 18/a*i;case"photon":return 30/a*i;case"vacuum":return 42/a*i;case"emdrive":return 37500/a*i}}function Yn(r){let a=!1,i=0;switch(r.power){case"diesel":a="Oil",i=8;break;case"fission":a="Uranium",i=.5;break;case"fusion":a="Helium_3",i=12;break;case"elerium":a="Elerium",i=1;break}switch(r.class){case"frigate":i*=1.25;break;case"destroyer":i*=1.5;break;case"cruiser":i*=2;break;case"battlecruiser":i*=3;break;case"dreadnought":i*=5;break;case"explorer":i*=25;break}return{res:a,burn:+i.toFixed(2)}}function bi(r){let a={},i=1,s=1,n=1;switch(r.class){case"corvette":a.Money=25e5,a.Aluminium=5e5,i=1,s=1,n=2;break;case"frigate":a.Money=5e6,a.Aluminium=125e4,i=1.1,s=1.09,n=1.5;break;case"destroyer":a.Money=15e6,a.Aluminium=35e5,i=1.2,s=1.18,n=1.2;break;case"cruiser":a.Money=5e7,a.Adamantite=1e6,i=1.3,s=1.25;break;case"battlecruiser":a.Money=125e6,a.Adamantite=26e5,i=1.35,s=1.3,n=.8;break;case"dreadnought":a.Money=5e8,a.Adamantite=8e6,i=1.4,s=1.35,n=.5;break;case"explorer":a.Money=8e8,a.Adamantite=95e5,i=1.45,s=1;break}switch(r.armor){case"steel":a.Steel=Math.round(35e4**i);break;case"alloy":a.Alloy=Math.round(25e4**i);break;case"neutronium":a.Neutronium=Math.round(1e4**i);break}switch(r.engine){case"ion":a.Titanium=Math.round(75e3**s);break;case"tie":a.Titanium=Math.round(15e4**s);break;case"pulse":a.Titanium=Math.round(125e3**s);break;case"photon":a.Titanium=Math.round(21e4**s);break;case"vacuum":a.Titanium=Math.round(3e5**s);break;case"emdrive":a.Titanium=Math.round(125e4**s);break}let o=!!["dreadnought","explorer"].includes(r.class);switch(r.power){case"solar":a[o?"Orichalcum":"Copper"]=Math.round(4e4**i),a.Iridium=Math.round(15e3**s);break;case"diesel":a[o?"Orichalcum":"Copper"]=Math.round(4e4**i),a.Iridium=Math.round(15e3**s);break;case"fission":a[o?"Orichalcum":"Copper"]=Math.round(5e4**i),a.Iridium=Math.round(3e4**s);break;case"fusion":a[o?"Orichalcum":"Copper"]=Math.round(5e4**i),a.Iridium=Math.round(4e4**s);break;case"elerium":a[o?"Orichalcum":"Copper"]=Math.round(6e4**i),a.Iridium=Math.round(55e3**s);break}if(r.class!=="explorer")switch(r.sensor){case"radar":a.Money=Math.round(a.Money**1.04);break;case"lidar":a.Money=Math.round(a.Money**1.08);break;case"quantum":a.Money=Math.round(a.Money**1.12);break}switch(r.weapon){case"railgun":a.Iron=Math.round(25e3**i);break;case"laser":a.Iridium=Math.round(a.Iridium**1.05),a.Nano_Tube=Math.round(12e3**i);break;case"p_laser":a.Iridium=Math.round(a.Iridium**1.035),a.Nano_Tube=Math.round(12e3**i);break;case"plasma":a.Iridium=Math.round(a.Iridium**1.1),a.Nano_Tube=Math.round(2e4**i);break;case"phaser":a.Iridium=Math.round(a.Iridium**1.15),a.Quantium=Math.round(18e3**i);break;case"disruptor":a.Iridium=Math.round(a.Iridium**1.2),a.Quantium=Math.round(35e3**i);break}r.class==="explorer"&&(a.Iron*=10,a.Titanium*=5,a.Iridium*=50);let c=0;e.space.shipyard.ships.forEach(function(h){h.class===r.class&&c++});let l=1+(c-2)/25*n;return Object.keys(a).forEach(function(h){r.class==="explorer"?a[h]=Math.ceil(a[h]*((c+1)*3)):c<2?a[h]=Math.ceil(a[h]*(c===0?.75:.9)):c>2&&(a[h]=Math.ceil(a[h]*l))}),a}function ds(){let r=$("#shipList")[0];if(r){let a=Sortable.get(r);a&&a.destroy()}}function G0(){let r=$("#shipList")[0];Sortable.create(r,{onEnd(a){let i=e.space.shipyard.ships;i.splice(a.newDraggableIndex,0,i.splice(a.oldDraggableIndex,1)[0]),e.space.shipyard.ships=i,ls()}})}var Ni={location:{spc_dwarf:1,spc_moon:2,spc_red:3,spc_belt:4,spc_gas:5,spc_gas_moon:6,spc_titan:7,spc_enceladus:8,spc_triton:9,spc_kuiper:10,spc_eris:11,tauceti:12},class:{corvette:1,frigate:2,destroyer:3,cruiser:4,battlecruiser:5,dreadnought:6,explorer:7},engine:{ion:1,tie:3,pulse:2,photon:4,vacuum:5,emdrive:6},power:{solar:1,diesel:2,fission:3,fusion:4,elerium:5}};function R0(r,a){return(Ni.location[r.location]??0)-(Ni.location[a.location]??0)||r.transit-a.transit||(Ni.class[r.class]??0)-(Ni.class[a.class]??0)||(Ni.engine[r.engine]??0)-(Ni.engine[a.engine]??0)||(Ni.power[r.power]??0)-(Ni.power[a.power]??0)}function ls(){if(!e.settings.tabLoad&&(e.settings.civTabs!==2||e.settings.govTabs!==5)||(ds(),be($("#shipList")),e.tech.isolation))return;let r=$("#shipList");e.space.shipyard.sort&&(e.space.shipyard.ships=e.space.shipyard.ships.sort(R0));let a=Ts();for(let i=0;i${l}`}}else Object.keys(a).forEach(function(l){if(s.location!==l&&(a[l].info.syndicate()||l==="spc_dwarf")&&(!e.race.orbit_decayed||e.race.orbit_decayed&&l!=="spc_moon")){let h=typeof a[l].info.name=="string"?a[l].info.name:a[l].info.name();n+=`${h}`}});let o=s.location==="tauceti"?t("tech_era_tauceti"):typeof a[s.location].info.name=="string"?a[s.location].info.name:a[s.location].info.name(),c=` ${values} - `; - if (global.space.shipyard.expand) { - let ship_class = `${loc(`outer_shipyard_engine_${ship.engine}`)} ${loc(`outer_shipyard_class_${ship.class}`)}`; - let desc = $(`
`); - let row1 = $(`
${ship.name} | ${loc(`outer_shipyard_scrap`)} | ${ship_class} | ${loc(`outer_shipyard_weapon_${ship.weapon}`)} | ${loc(`outer_shipyard_power_${ship.power}`)} | ${loc(`outer_shipyard_armor_${ship.armor}`)} | ${loc(`outer_shipyard_sensor_${ship.sensor}`)}
`); - let row2 = $(`
`); - let row3 = $(`
`); - let row4 = $(`
${dispatch}
`); - row2.append(`${loc(`crew`)} `); - row2.append(`${loc(`firepower`)} `); - row2.append(`${loc(`outer_shipyard_sensors`)} `); - row2.append(`${loc(`speed`)} `); - row2.append(`${loc(`outer_shipyard_fuel`)} `); - row2.append(`${loc(`outer_shipyard_hull`)} `); - row3.append(``); - desc.append(row1); - desc.append(row2); - desc.append(row3); - desc.append(row4); - list.append(desc); - } else { - let desc = $(`
`); - let row1 = $(`
`); - let row3 = $(`
`); - let row4 = $(`
${dispatch}
`); - row1.append(`${ship.name} | `); - row1.append(`${loc(`firepower`)} `); - row1.append(`${loc(`outer_shipyard_sensors`)} `); - row1.append(`${loc(`speed`)} `); - row1.append(`${loc(`outer_shipyard_fuel`)} `); - row1.append(`${loc(`outer_shipyard_hull`)} `); - row3.append(``); - desc.append(row1); - desc.append(row3); - desc.append(row4); - list.append(desc); - } - vBind({ - el: `#shipReg${i}`, - data: global.space.shipyard.ships[i], - methods: { - scrap(id) { - if (global.space.shipyard.ships[id] && global.space.shipyard.ships[id].location === "spc_dwarf") { - global.space.shipyard.ships.splice(id, 1); - drawShips(); - updateCosts(); - } - }, - scrapAllowed(id) { - if (global.space.shipyard.ships[id] && global.space.shipyard.ships[id].location === "spc_dwarf") { - return true; - } - return false; - }, - setLoc(l, id) { - let ship2 = global.space.shipyard.ships[id]; - if (l !== ship2.location) { - let crew = shipCrewSize(ship2); - let manned = ship2.transit > 0 || ship2.location !== "spc_dwarf"; - if (manned || global.civic.garrison.workers - global.civic.garrison.crew >= crew) { - let dest = calcLandingPoint(ship2, l); - let distance = transferWindow(ship2.xy, dest); - let speed = shipSpeed(ship2); - ship2.location = l; - ship2.transit = Math.round(distance / speed); - ship2.dist = Math.round(distance / speed); - ship2.origin = deepClone(ship2.xy); - ship2.destination = { x: dest.x, y: dest.y }; - if (!manned) { - global.civic.garrison.crew += crew; - } - drawShips(); - clearPopper(`ship${id}loc${l}`); - } - } - }, - crewText(id) { - return shipCrewSize(global.space.shipyard.ships[id]); - }, - fireText(id) { - return shipAttackPower(global.space.shipyard.ships[id]); - }, - sensorText(id) { - return sensorRange(global.space.shipyard.ships[id]) + "km"; - }, - speedText(id) { - let speed = 1495978707e-1 / 225 / 24 / 3600 * shipSpeed(global.space.shipyard.ships[id]); - return Math.round(speed) + "km/s"; - }, - fuelText(id) { - let fuel = shipFuelUse(global.space.shipyard.ships[id]); - if (fuel.res) { - return `${fuel.burn} ${global.resource[fuel.res].name}/s`; - } else { - return `N/A`; - } - }, - hullText(id) { - return `${100 - global.space.shipyard.ships[id].damage}%`; - }, - hullDamage(id) { - if (global.space.shipyard.ships[id].damage <= 10) { - return `has-text-success`; - } else if (global.space.shipyard.ships[id].damage >= 40 && global.space.shipyard.ships[id].damage < 65) { - return `has-text-caution`; - } else if (global.space.shipyard.ships[id].damage >= 65) { - return `has-text-danger`; - } - return ``; - }, - dest(id) { - let name = ship.class === "explorer" ? loc("tech_era_tauceti") : typeof spaceRegions[global.space.shipyard.ships[id].location].info.name === "string" ? spaceRegions[global.space.shipyard.ships[id].location].info.name : spaceRegions[global.space.shipyard.ships[id].location].info.name(); - return loc(`outer_shipyard_arrive`, [ - name, - global.space.shipyard.ships[id].transit - ]); - }, - show(id) { - return global.space.shipyard.ships[id].transit > 0 ? true : false; - } - } - }); - if (ship.class === "explorer") { - if (ship.location !== "tauceti") { - popover( - `ship${i}loctauceti`, - function() { - return loc(`transit_time`, [Math.round(transferWindow(ship.xy, calcLandingPoint(ship, "tauceti")) / shipSpeed(ship))]); - }, - { - elm: `#ship${i}loc .tauceti`, - placement: "left" - } - ); - } - } else { - Object.keys(spaceRegions).forEach(function(region) { - if (spaceRegions[region].info.syndicate() || region === "spc_dwarf") { - if (ship.location !== region) { - popover( - `ship${i}loc${region}`, - function() { - return loc(`transit_time`, [Math.round(transferWindow(ship.xy, calcLandingPoint(ship, region)) / shipSpeed(ship))]); - }, - { - elm: `#ship${i}loc .${region}`, - placement: "left" - } - ); - } - } - }); - } - } - dragShipList(); - } - function calcLandingPoint(ship, planet) { - if (spacePlanetStats[planet].orbit === -2) { - return genXYcoord(planet); - } - let ship_dist = Math.sqrt((ship.xy.x - xShift(planet)) ** 2 + ship.xy.y ** 2); - let ship_speed = shipSpeed(ship) / 225; - let width = xPosition(1, planet); - let cross1_dist = Math.abs(ship_dist - spacePlanetStats[planet].dist); - let cross2_dist = Math.abs(ship_dist + spacePlanetStats[planet].dist); - let cross1w_dist = Math.abs(ship_dist - spacePlanetStats[planet].dist * width); - let cross2w_dist = Math.abs(ship_dist + spacePlanetStats[planet].dist * width); - let cross1_days = Math.floor(Math.min(cross1_dist, cross1w_dist, cross2_dist, cross2w_dist) / ship_speed); - let cross2_days = Math.ceil(Math.max(cross1_dist, cross1w_dist, cross2_dist, cross2w_dist) / ship_speed); - if (ship_dist >= spacePlanetStats[planet].dist && ship_dist <= spacePlanetStats[planet].dist * width) { - cross1_days = 0; - } - let planet_orbit = spacePlanetStats[planet].orbit === -1 ? orbitLength() : spacePlanetStats[planet].orbit; - let planet_speed = 360 / planet_orbit; - let planet_degree = (global.space.position[planet] + cross1_days * planet_speed) % 360; - let rads = Math.PI / 180; - for (let i = cross1_days; i <= cross2_days; i++) { - let planet_x = xPosition(Math.cos(planet_degree * rads) * spacePlanetStats[planet].dist, planet); - planet_x += xShift(planet); - let planet_y = Math.sin(planet_degree * rads) * spacePlanetStats[planet].dist; - let time = Math.sqrt((planet_x - ship.xy.x) ** 2 + (planet_y - ship.xy.y) ** 2) / ship_speed; - if (time <= i) { - return { x: planet_x, y: planet_y }; - } - planet_degree = (planet_degree + planet_speed) % 360; - } - return genXYcoord(planet); - } - function syndicate(region, extra) { - if (!global.tech["isolation"] && global.tech["syndicate"] && global.race["truepath"] && global.space["syndicate"] && global.space.syndicate.hasOwnProperty(region)) { - let divisor = 1e3; - let rival = 0; - if (global.civic.foreign.gov3.hstl < 10) { - rival = 250 - 25 * global.civic.foreign.gov3.hstl; - } else if (global.civic.foreign.gov3.hstl > 60) { - rival = -13 * (global.civic.foreign.gov3.hstl - 60); - } - switch (region) { - case "spc_home": - case "spc_moon": - case "spc_red": - case "spc_hell": - divisor = 1250 + rival; - break; - case "spc_gas": - case "spc_gas_moon": - case "spc_belt": - divisor = 1020 + rival; - break; - case "spc_titan": - case "spc_enceladus": - divisor = actions.space[region].info.syndicate_cap(); - break; - case "spc_triton": - case "spc_kuiper": - case "spc_eris": - divisor = actions.space[region].info.syndicate_cap(); - break; - } - let piracy2 = global.space.syndicate[region]; - if (global.race["chicken"]) { - piracy2 *= 1 + traits.chicken.vars()[1] / 100; - piracy2 = Math.round(piracy2); - } - if (global.race["ocular_power"] && global.race["ocularPowerConfig"] && global.race.ocularPowerConfig.f) { - piracy2 *= 1 - traits.ocular_power.vars()[1] / 500; - piracy2 = Math.round(piracy2); - } - let patrol = 0; - let sensor = 0; - let overkill = 0; - if (global.space.hasOwnProperty("shipyard") && global.space.shipyard.hasOwnProperty("ships")) { - global.space.shipyard.ships.forEach(function(ship) { - if (ship.location === region && ship.transit === 0 && ship.fueled) { - let rating = shipAttackPower(ship); - patrol += ship.damage > 0 ? Math.round(rating * (100 - ship.damage) / 100) : rating; - sensor += sensorRange(ship); - } - }); - if (region === "spc_enceladus" && Math.min(support_on["operating_base"], p_on["operating_base"]) > 0) { - let active = Math.min(support_on["operating_base"], p_on["operating_base"]); - patrol += active * 50; - } else if (region === "spc_titan" && p_on["sam"] > 0) { - patrol += p_on["sam"] * 25; - } else if (region === "spc_triton" && p_on["fob"] > 0) { - patrol += 500; - sensor += 10; - } - if (sensor > 100) { - sensor = Math.round((sensor - 100) / (sensor - 100 + 200) * 100) + 100; - } - patrol = Math.round(patrol * ((sensor + 25) / 125)); - if (patrol > piracy2) { - overkill = patrol - piracy2; - } - piracy2 = piracy2 - patrol > 0 ? piracy2 - patrol : 0; - } - if (extra) { - return { - p: 1 - +(piracy2 / divisor).toFixed(4), - r: piracy2, - s: sensor, - o: overkill - }; - } - return 1 - +(piracy2 / divisor).toFixed(4); - } - if (extra) { - return { p: 1, r: 0, s: 0, o: 0 }; - } - return 1; - } - function sensorRange(s) { - let hf = 1; - switch (s.class) { - case "corvette": - case "frigate": - hf = 2; - break; - case "destroyer": - case "cruiser": - hf = 1.5; - break; - case "explorer": - hf = 5; - break; - default: - hf = 1; - break; - } - switch (s.sensor) { - case "visual": - return 1; - case "radar": - return 10 * hf; - case "lidar": - return 18 * hf; - case "quantum": - return 32 * hf; - } - } - function tritonWar() { - if (global.space["fob"]) { - if (global.space.fob.enemy <= 1e3) { - let upper = global.tech["outer"] && global.tech.outer >= 4 ? 125 : 100; - global.space.fob.enemy += Math.rand(25, upper); - } - let wound_cap = Math.ceil(jobScale(global.space.fob.enemy) / 5); - let wounded = global.civic.garrison.wounded - garrisonSize(); - if (wounded < 0) { - wounded = 0; - } - let defense = armyRating(global.space.fob.troops, "army", wounded); - let died = Math.rand(0, wounded + 1); - soldierDeath(died); - global.civic.garrison.wounded -= died; - let kills = Math.min(Math.rand(0, defense), global.space.fob.enemy); - global.space.fob.enemy -= kills; - if (global.space.fob.enemy < 0) { - global.space.fob.enemy = 0; - } - if (global.race["ocular_power"] && global.race["ocularPowerConfig"] && global.race.ocularPowerConfig.p) { - global.race.ocularPowerConfig.ds += Math.round(kills * traits.ocular_power.vars()[1]); - } - let hurt = Math.rand(0, global.space.fob.troops + 1); - if (hurt > wound_cap) { - hurt = wound_cap; - } - if (global.race["armored"]) { - hurt -= jobScale(1); - } - if (global.race["scales"]) { - hurt -= jobScale(1); - } - if (global.tech["armor"]) { - hurt -= jobScale(global.tech["armor"]); - } - if (hurt < 0) { - hurt = 0; - } - if (global.race["revive"] && died > 0) { - let revive = Math.round(Math.rand(0, died + 1)); - global.civic.garrison.workers += revive; - } - global.civic.garrison.wounded += hurt; - if (global.civic.garrison.wounded > garrisonSize(false, { nofob: true })) { - global.civic.garrison.wounded = garrisonSize(false, { nofob: true }); - } - { - let wounded2 = global.civic.garrison.wounded - garrisonSize(); - if (wounded2 < 0) { - wounded2 = 0; - } - let danger = global.space.fob.enemy - armyRating(global.space.fob.troops, "army", wounded2); - if (danger <= 0 && global.space.crashed_ship.count < 100) { - global.space.crashed_ship.count++; - } else if (danger > 0 && global.space.crashed_ship.count > 0) { - global.space.crashed_ship.count--; - } - if (global.space.crashed_ship.count === 100) { - global.resource.Cipher.display = true; - } - } - } - } - function erisWar() { - if (global.space["digsite"]) { - if (global.space.digsite.enemy <= 1e4) { - let upper = 250; - global.space.digsite.enemy += Math.rand(25, upper); - } - let offense = armyRating(support_on["shock_trooper"], "army", 0); - if (support_on["tank"]) { - offense += support_on["tank"] * 100; - } - offense *= syndicate("spc_eris"); - global.space.digsite.enemy -= Math.rand(0, offense); - if (global.space.digsite.enemy < 0) { - global.space.digsite.enemy = 0; - } else if (global.space.digsite.enemy > 1e4) { - global.space.digsite.enemy = 1e4; - } - global.space.digsite.count = Math.floor(100 - global.space.digsite.enemy / 100); - } - } - var spacePlanetStats = { - spc_sun: { dist: 0, orbit: 0, size: 2 }, - spc_home: { dist: 1, orbit: -1, size: 0.6 }, - spc_moon: { dist: 1.01, orbit: -1, size: 0.1, moon: true }, - spc_red: { dist: 1.524, orbit: 687, size: 0.5 }, - spc_hell: { dist: 0.4, orbit: 88, size: 0.4 }, - spc_venus: { dist: 0.7, orbit: 225, size: 0.5 }, - spc_gas: { dist: 5.203, orbit: 4330, size: 1.25 }, - spc_gas_moon: { dist: 5.204, orbit: 4330, size: 0.2, moon: true }, - spc_belt: { dist: 2.7, orbit: 1642, size: 0.5, belt: true }, - spc_dwarf: { dist: 2.77, orbit: 1682, size: 0.5 }, - spc_saturn: { dist: 9.539, orbit: 10751, size: 1.1 }, - spc_titan: { dist: 9.536, orbit: 10751, size: 0.2, moon: true }, - spc_enceladus: { dist: 9.542, orbit: 10751, size: 0.1, moon: true }, - spc_uranus: { dist: 19.8, orbit: 30660, size: 1 }, - spc_neptune: { dist: 30.08, orbit: 60152, size: 1 }, - spc_triton: { dist: 30.1, orbit: 60152, size: 0.1, moon: true }, - spc_kuiper: { dist: 39.5, orbit: 90498, size: 0.5, belt: true }, - spc_eris: { dist: 68, orbit: 204060, size: 0.5 }, - tauceti: { dist: 752568.8, orbit: -2, size: 2 } - }; - function setOrbits() { - if (!global.space["position"]) { - global.space["position"] = {}; - } - Object.keys(spacePlanetStats).forEach(function(o) { - if (!global.space.position.hasOwnProperty(o)) { - global.space.position[o] = Math.rand(0, 360); - } - }); - global.space.position.spc_home = global.space.position.spc_moon; - global.space.position.spc_gas_moon = global.space.position.spc_gas; - global.space.position.spc_titan = global.space.position.spc_enceladus; - global.space.position.spc_saturn = global.space.position.spc_titan; - global.space.position.spc_neptune = global.space.position.spc_triton; - } - function genXYcoord(planet) { - let cx = xPosition(+Math.cos(global.space.position[planet] * (Math.PI / 180)).toFixed(5) * spacePlanetStats[planet].dist, planet); - let cy = +Math.sin(global.space.position[planet] * (Math.PI / 180)).toFixed(5) * spacePlanetStats[planet].dist; - cx += xShift(planet); - return { x: cx, y: cy }; - } - function transferWindow(p1, p2) { - return Math.ceil(Math.sqrt((p2.x - p1.x) ** 2 + (p2.y - p1.y) ** 2) * 225); - } - function tpStorageMultiplier(type, heavy, wiki) { - let multiplier = 1; - if (global.race["pack_rat"]) { - multiplier *= 1 + traits.pack_rat.vars()[1] / 100; - } - if (global.stats.achieve["blackhole"]) { - multiplier *= 1 + global.stats.achieve.blackhole.l * 0.05; - } - if (global.tech["world_control"]) { - multiplier *= 3; - } - switch (type) { - case "storehouse": { - let titan_spaceport_on = wiki ? global.space?.titan_spaceport?.on ?? 0 : p_on["titan_spaceport"]; - if (titan_spaceport_on) { - multiplier *= 1 + titan_spaceport_on * 0.25; - } - if (heavy && global.tech["shelving"]) { - multiplier *= 2; - } - if (global.tech["shelving"] && global.tech.shelving >= 3) { - multiplier *= 1.5; - } - } - case "repository": - { - if (global.tech["isolation"]) { - multiplier *= 3; - if (global.tech["tp_depot"]) { - multiplier *= 1 + global.tech["tp_depot"] / 20; - } - } - } - break; - } - return multiplier; - } - function jumpGateShutdown() { - let inactive = { city: {}, space: {}, ships: [] }; - inactive.ships = [...global.space.shipyard.ships]; - global.space.shipyard.ships = []; - global.settings.spaceTabs = 6; - global.settings.showSpace = false; - global.settings.showOuter = false; - global.settings.showCity = false; - global.settings.showShipYard = false; - if (global.settings.govTabs === 5) { - global.settings.govTabs = 0; - } - clearShipDrag(); - clearElement($("#shipList")); - Object.keys(actions.city).forEach(function(k) { - if (global.city.hasOwnProperty(k) && global.city[k].hasOwnProperty("count")) { - if (global.race["hooved"]) { - if (actions.city[k].cost?.hasOwnProperty("Horseshoe")) { - global.race["shoecnt"] -= actions.city[k].cost.Horseshoe() * global.city[k].count; - } - } - inactive.city[k] = { c: global.city[k].count }; - global.city[k].count = 0; - if (global.city[k].hasOwnProperty("on")) { - inactive.city[k]["o"] = global.city[k].on; - global.city[k].on = 0; - } - } - }); - [ - "spc_home", - "spc_moon", - "spc_red", - "spc_hell", - "spc_sun", - "spc_gas", - "spc_gas_moon", - "spc_belt", - "spc_dwarf", - "spc_titan", - "spc_enceladus", - "spc_triton", - "spc_kuiper", - "spc_eris" - ].forEach(function(sector) { - Object.keys(actions.space[sector]).forEach(function(k) { - if (global.space.hasOwnProperty(k) && global.space[k].hasOwnProperty("count")) { - if (global.race["hooved"]) { - if (actions.space[sector][k].cost?.hasOwnProperty("Horseshoe")) { - global.race["shoecnt"] -= actions.space[sector][k].cost.Horseshoe() * global.space[k].count; - } - } - inactive.space[k] = { c: global.space[k].count }; - global.space[k].count = 0; - if (global.space[k].hasOwnProperty("on")) { - inactive.space[k]["o"] = global.space[k].on; - global.space[k].on = 0; - } - } - }); - }); - if (global.race["hooved"] && global.race["shoecnt"] < 5) { - global.race.shoecnt = 5; - } - if (global.resource.Zen.display) { - global.resource.Zen.display = false; - } - if (global.resource.Slave.display) { - global.resource.Slave.display = false; - global.resource.Slave.amount = 0; - removeTask("slave"); - } - if (global.race["deconstructor"]) { - nf_resources.forEach(function(res) { - global.city.nanite_factory[res] = 0; - }); - } - Object.keys(global.resource).forEach(function(res) { - if (global.resource[res].hasOwnProperty("trade")) { - global.resource[res].trade = 0; - } - }); - Object.keys(job_desc).forEach(function(job) { - if (!["professor", "scientist", "pit_miner", "cement_worker", "craftsman"].includes(job)) { - global.civic[job].workers = 0; - global.civic[job].assigned = 0; - } - }); - ["forager", "farmer", "lumberjack", "quarry_worker", "miner", "coal_miner", "priest", "colonist", "titan_colonist", "space_miner"].forEach(function(job) { - global.civic[job].display = false; - }); - if (global.civic.hunter.display) { - global.civic.d_job = "hunter"; - } else { - global.civic.d_job = "unemployed"; - } - if (global.arpa["sequence"]) { - global.arpa.sequence.on = false; - global.arpa.sequence.boost = false; - } - for (let building of Object.values(global.race.purgatory.city)) { - if (building.hasOwnProperty("count")) { - building.count = 0; - } - if (building.hasOwnProperty("on")) { - building.on = 0; - } - } - for (let building of Object.values(global.race.purgatory.space)) { - if (building.hasOwnProperty("count")) { - building.count = 0; - } - if (building.hasOwnProperty("on")) { - building.on = 0; - } - } - if (global.queue.hasOwnProperty("queue")) { - for (let i = global.queue.queue.length - 1; i >= 0; i--) { - let item = global.queue.queue[i]; - if (item.action === "city" || item.action === "space" || item.action === "starDock") { - global.queue.queue.splice(i, 1); - } - } - } - if (global.tech["magic"] && global.tech.magic >= 2) { - global.tauceti["pylon"] = { count: 0 }; - cancelRituals(); - } - initStruct(tauCetiModules.tau_home.tauceti_casino); - initStruct(tauCetiModules.tau_home.tau_housing); - let pop = support_on["colony"] * tauCetiModules.tau_home.colony.citizens(); - if (global.resource[global.race.species].amount > pop) { - global.resource[global.race.species].amount = pop; - } - removeTask("spy"); - removeTask("spyop"); - removeTask("combo_spy"); - defineGovernor(); - clearElement($(`#infoTimer`)); - global.race["inactive"] = inactive; - } - function loneSurvivor() { - if (global.race["lone_survivor"]) { - global.tech["alloy"] = 1; - global.tech["alumina"] = 2; - global.tech["asteroid"] = 7; - global.tech["banking"] = 11; - global.tech["biotech"] = 1; - global.tech["boot_camp"] = 2; - global.tech["container"] = 7; - global.tech["copper"] = 1; - global.tech["currency"] = 6; - global.tech["disease"] = 2; - global.tech["drone"] = 1; - global.tech["elerium"] = 2; - global.tech["explosives"] = 3; - global.tech["factory"] = 3; - global.tech["foundry"] = 8; - global.tech["gambling"] = 4; - global.tech["gas_giant"] = 1; - global.tech["gas_moon"] = 2; - global.tech["genesis"] = 2; - global.tech["genetics"] = 2; - global.tech["gov_corp"] = 1; - global.tech["gov_fed"] = 1; - global.tech["gov_soc"] = 1; - global.tech["gov_theo"] = 1; - global.tech["govern"] = 3; - global.tech["graphene"] = 1; - global.tech["helium"] = 1; - global.tech["hell"] = 1; - global.tech["high_tech"] = 13; - global.tech["home_safe"] = 2; - global.tech["housing"] = 3; - global.tech["housing_reduction"] = 3; - global.tech["kuiper"] = 2; - global.tech["launch_facility"] = 1; - global.tech["luna"] = 2; - global.tech["m_smelting"] = 2; - global.tech["marines"] = 2; - global.tech["mars"] = 5; - global.tech["mass"] = 1; - global.tech["medic"] = 3; - global.tech["military"] = 8; - global.tech["mine_conveyor"] = 1; - global.tech["mining"] = 4; - global.tech["monument"] = 1; - global.tech["nano"] = 1; - global.tech["oil"] = 7; - global.tech["outer"] = 8; - global.tech["pickaxe"] = 5; - global.tech["polymer"] = 2; - global.tech["primitive"] = 3; - global.tech["q_factory"] = 1; - global.tech["quantium"] = 1; - global.tech["queue"] = 3; - global.tech["r_queue"] = 1; - global.tech["reproduction"] = 1; - global.tech["rival"] = 1; - global.tech["satellite"] = 1; - global.tech["science"] = 9; - global.tech["shelving"] = 3; - global.tech["shipyard"] = 1; - global.tech["smelting"] = 6; - global.tech["solar"] = 5; - global.tech["space"] = 6; - global.tech["space_explore"] = 4; - global.tech["space_housing"] = 1; - global.tech["spy"] = 5; - global.tech["stanene"] = 1; - global.tech["steel_container"] = 6; - global.tech["storage"] = 5; - global.tech["swarm"] = 6; - global.tech["syard_armor"] = 3; - global.tech["syard_class"] = 6; - global.tech["syard_engine"] = 5; - global.tech["syard_power"] = 5; - global.tech["syard_sensor"] = 4; - global.tech["syard_weapon"] = 6; - global.tech["syndicate"] = 0; - global.tech["synthetic_fur"] = 1; - global.tech["tau_home"] = 6; - global.tech["tauceti"] = 4; - global.tech["theology"] = 2; - global.tech["titan"] = 9; - global.tech["titan_ai_core"] = 3; - global.tech["titan_power"] = 1; - global.tech["titanium"] = 3; - global.tech["trade"] = 3; - global.tech["unify"] = 2; - global.tech["uranium"] = 4; - global.tech["v_train"] = 1; - global.tech["vault"] = 4; - global.tech["wharf"] = 1; - global.tech["world_control"] = 1; - global.tech["wsc"] = 0; - if (!global.race["joyless"]) { - global.tech["theatre"] = 3; - global.tech["broadcast"] = 2; - } - if (!global.race["flier"]) { - global.tech["cement"] = 5; - global.resource.Cement.display = true; - } - if (global.race.universe === "magic") { - global.tech["gov_mage"] = 1; - global.tech["magic"] = 4; - global.tech["conjuring"] = 2; - global.resource.Mana.display = true; - global.resource.Crystal.display = true; - global.civic.crystal_miner.display = true; - global.tauceti["pylon"] = { count: 0 }; - setupRituals(true); - } - if (global.race.universe === "evil") { - global.tech["reclaimer"] = 1; - } - global.settings.showSpace = false; - global.settings.showTau = true; - global.settings.tau.home = true; - global.settings.showCity = false; - global.settings.showIndustry = true; - global.settings.showPowerGrid = true; - global.settings.showResearch = true; - global.settings.showCivic = true; - global.settings.showResources = true; - global.settings.showMarket = true; - global.settings.showStorage = true; - global.settings.civTabs = 1; - global.settings.spaceTabs = 6; - global.settings.showGenetics = true; - global.settings.arpa.physics = true; - global.settings.arpa.genetics = true; - global.resource[global.race.species].display = true; - global.resource.Knowledge.display = true; - global.resource.Money.display = true; - global.resource.Crates.display = true; - global.resource.Containers.display = true; - global.resource.Food.display = true; - global.resource.Stone.display = true; - global.resource.Furs.display = true; - global.resource.Copper.display = true; - global.resource.Iron.display = true; - global.resource.Aluminium.display = true; - global.resource.Coal.display = true; - global.resource.Oil.display = true; - global.resource.Uranium.display = true; - global.resource.Steel.display = true; - global.resource.Titanium.display = true; - global.resource.Alloy.display = true; - global.resource.Polymer.display = true; - global.resource.Iridium.display = true; - global.resource.Helium_3.display = true; - global.resource.Water.display = true; - global.resource.Neutronium.display = true; - global.resource.Adamantite.display = true; - global.resource.Elerium.display = true; - global.resource.Nano_Tube.display = true; - global.resource.Graphene.display = true; - global.resource.Stanene.display = true; - global.resource.Orichalcum.display = true; - global.resource.Bolognium.display = true; - global.resource.Unobtainium.display = true; - global.resource.Brick.display = true; - global.resource.Wrought_Iron.display = true; - global.resource.Sheet_Metal.display = true; - global.resource.Mythril.display = true; - global.resource.Quantium.display = true; - global.resource.Cipher.display = true; - if (!global.race["kindling_kindred"] && !global.race["smoldering"]) { - global.civic.lumberjack.display = true; - global.resource.Lumber.display = true; - global.resource.Plywood.display = true; - global.resource.Lumber.max = 1e7; - global.resource.Lumber.amount = 1e7; - global.resource.Plywood.amount = 25e5; - global.resource.Lumber.crates = 25; - global.resource.Lumber.containers = 25; - global.tech["axe"] = 5; - } - if (global.race["smoldering"]) { - global.resource.Chrysotile.display = true; - global.resource.Chrysotile.max = 5e6; - global.resource.Chrysotile.amount = 5e6; - } - if (!global.race["sappy"]) { - global.tech["hammer"] = 4; - } - if (!global.race["apex_predator"]) { - global.tech["armor"] = 3; - } - global.resource[global.race.species].max = 1; - global.resource[global.race.species].amount = 1; - global.resource.Crates.amount = 1e3; - global.resource.Containers.amount = 1e3; - global.resource.Money.max = 1e9; - global.resource.Money.amount = 1e9; - global.resource.Knowledge.max = 4321200; - global.resource.Knowledge.amount = 4321200; - global.resource.Food.max = 1e4; - global.resource.Food.amount = 1e4; - global.resource.Oil.max = 5e5; - global.resource.Oil.amount = 5e5; - global.resource.Helium_3.max = 5e5; - global.resource.Helium_3.amount = 5e5; - global.resource.Water.max = 25e3; - global.resource.Water.amount = 25e3; - global.resource.Uranium.max = 5e5; - global.resource.Uranium.amount = 5e5; - global.resource.Stone.max = 1e7; - global.resource.Stone.amount = 1e7; - global.resource.Furs.max = 5e6; - global.resource.Furs.amount = 5e6; - global.resource.Copper.max = 5e6; - global.resource.Copper.amount = 5e6; - global.resource.Iron.max = 5e6; - global.resource.Iron.amount = 5e6; - global.resource.Steel.max = 5e6; - global.resource.Steel.amount = 5e6; - global.resource.Aluminium.max = 5e6; - global.resource.Aluminium.amount = 5e6; - global.resource.Cement.max = 5e6; - global.resource.Cement.amount = 5e6; - global.resource.Titanium.max = 5e6; - global.resource.Titanium.amount = 5e6; - global.resource.Coal.max = 5e6; - global.resource.Coal.amount = 5e6; - global.resource.Alloy.max = 5e6; - global.resource.Alloy.amount = 5e6; - global.resource.Polymer.max = 5e6; - global.resource.Polymer.amount = 5e6; - global.resource.Iridium.max = 5e6; - global.resource.Iridium.amount = 5e6; - global.resource.Neutronium.max = 5e5; - global.resource.Neutronium.amount = 5e5; - global.resource.Adamantite.max = 5e6; - global.resource.Adamantite.amount = 5e6; - global.resource.Elerium.max = 1e3; - global.resource.Elerium.amount = 1e3; - global.resource.Nano_Tube.max = 5e6; - global.resource.Nano_Tube.amount = 5e6; - global.resource.Graphene.max = 5e6; - global.resource.Graphene.amount = 5e6; - global.resource.Stanene.max = 5e6; - global.resource.Stanene.amount = 5e6; - global.resource.Bolognium.max = 5e6; - global.resource.Bolognium.amount = 5e6; - global.resource.Orichalcum.max = 5e6; - global.resource.Orichalcum.amount = 5e6; - global.resource.Brick.amount = 25e5; - global.resource.Wrought_Iron.amount = 25e5; - global.resource.Sheet_Metal.amount = 25e5; - global.resource.Mythril.amount = 25e5; - global.resource.Quantium.amount = 25e5; - if (!global.race["artifical"]) { - global.resource.Food.crates = 10; - global.resource.Food.containers = 10; - } - global.resource.Stone.crates = 25; - global.resource.Stone.containers = 25; - global.resource.Furs.crates = 25; - global.resource.Furs.containers = 25; - global.resource.Coal.crates = 10; - global.resource.Coal.containers = 10; - global.resource.Copper.crates = 25; - global.resource.Copper.containers = 25; - global.resource.Iron.crates = 25; - global.resource.Iron.containers = 25; - global.resource.Aluminium.crates = 25; - global.resource.Aluminium.containers = 25; - global.resource.Steel.crates = 25; - global.resource.Steel.containers = 25; - global.resource.Titanium.crates = 25; - global.resource.Titanium.containers = 25; - global.resource.Alloy.crates = 25; - global.resource.Alloy.containers = 25; - global.resource.Polymer.crates = 25; - global.resource.Polymer.containers = 25; - global.resource.Iridium.crates = 25; - global.resource.Iridium.containers = 25; - global.resource.Adamantite.crates = 25; - global.resource.Adamantite.containers = 25; - global.resource.Graphene.crates = 25; - global.resource.Graphene.containers = 25; - global.resource.Stanene.crates = 25; - global.resource.Stanene.containers = 25; - global.resource.Bolognium.crates = 25; - global.resource.Bolognium.containers = 25; - global.resource.Orichalcum.crates = 25; - global.resource.Orichalcum.containers = 25; - global.civic.taxes.display = true; - if (!global.race["flier"]) { - global.civic.cement_worker.display = true; - global.resource.Cement.crates = 25; - global.resource.Cement.containers = 25; - } - if (!global.race["sappy"]) { - global.civic.quarry_worker.display = true; - } - global.civic.professor.display = true; - global.civic.scientist.display = true; - global.civic.banker.display = true; - global.civic.pit_miner.display = true; - global.civic.professor.max = 1; - global.civic.professor.workers = 1; - global.city.calendar.day++; - global.city.market.active = true; - global.city["power"] = 0; - global.city["powered"] = true; - if (global.race["artifical"]) { - global.city["transmitter"] = { count: 0, on: 0 }; - } - initStruct(actions.city.factory); - initStruct(actions.city.foundry); - initStruct(actions.city.smelter); - initStruct(actions.city.amphitheatre); - initStruct(actions.city.apartment); - initStruct(actions.city.bank); - initStruct(actions.city.basic_housing); - initStruct(actions.city.biolab); - initStruct(actions.city.boot_camp); - initStruct(actions.city.casino); - initStruct(actions.city.cement_plant); - initStruct(actions.city.coal_mine); - initStruct(actions.city.coal_power); - initStruct(actions.city.cottage); - initStruct(actions.city.fission_power); - initStruct(actions.city.garrison); - initStruct(actions.city.hospital); - initStruct(actions.city.library); - initStruct(actions.city.lumber_yard); - initStruct(actions.city.mass_driver); - initStruct(actions.city.metal_refinery); - initStruct(actions.city.mine); - initStruct(actions.city.oil_depot); - initStruct(actions.city.oil_power); - initStruct(actions.city.oil_well); - initStruct(actions.city.rock_quarry); - initStruct(actions.city.sawmill); - initStruct(actions.city.shed); - initStruct(actions.city.storage_yard); - initStruct(actions.city.temple); - initStruct(actions.city.tourist_center); - initStruct(actions.city.trade); - initStruct(actions.city.university); - initStruct(actions.city.wardenclyffe); - initStruct(actions.city.warehouse); - initStruct(actions.city.wharf); - initStruct(actions.space.spc_belt.elerium_ship); - initStruct(actions.space.spc_belt.iridium_ship); - initStruct(actions.space.spc_belt.iron_ship); - initStruct(actions.space.spc_belt.space_station); - initStruct(actions.space.spc_dwarf.e_reactor); - initStruct(actions.space.spc_dwarf.elerium_contain); - initStruct(actions.space.spc_dwarf.mass_relay); - global.space.mass_relay.count = 100; - initStruct(actions.space.spc_dwarf.shipyard); - initStruct(actions.space.spc_enceladus.munitions_depot); - initStruct(actions.space.spc_enceladus.operating_base); - initStruct(actions.space.spc_enceladus.water_freighter); - initStruct(actions.space.spc_enceladus.zero_g_lab); - initStruct(actions.space.spc_eris.digsite); - initStruct(actions.space.spc_eris.drone_control); - initStruct(actions.space.spc_eris.shock_trooper); - initStruct(actions.space.spc_eris.tank); - initStruct(actions.space.spc_gas.gas_mining); - initStruct(actions.space.spc_gas.gas_storage); - initStruct(actions.space.spc_gas_moon.drone); - initStruct(actions.space.spc_gas_moon.oil_extractor); - initStruct(actions.space.spc_gas_moon.outpost); - initStruct(actions.space.spc_hell.geothermal); - initStruct(actions.space.spc_hell.hell_smelter); - initStruct(actions.space.spc_hell.spc_casino); - initStruct(actions.space.spc_hell.swarm_plant); - initStruct(actions.space.spc_home.gps); - initStruct(actions.space.spc_home.nav_beacon); - initStruct(actions.space.spc_home.propellant_depot); - initStruct(actions.space.spc_home.satellite); - initStruct(actions.space.spc_kuiper.elerium_mine); - initStruct(actions.space.spc_kuiper.neutronium_mine); - initStruct(actions.space.spc_kuiper.orichalcum_mine); - initStruct(actions.space.spc_kuiper.uranium_mine); - initStruct(actions.space.spc_moon.helium_mine); - initStruct(actions.space.spc_moon.iridium_mine); - initStruct(actions.space.spc_moon.moon_base); - initStruct(actions.space.spc_moon.observatory); - initStruct(actions.space.spc_red.biodome); - initStruct(actions.space.spc_red.exotic_lab); - initStruct(actions.space.spc_red.fabrication); - initStruct(actions.space.spc_red.garage); - initStruct(actions.space.spc_red.living_quarters); - initStruct(actions.space.spc_red.red_factory); - initStruct(actions.space.spc_red.red_mine); - initStruct(actions.space.spc_red.red_tower); - initStruct(actions.space.spc_red.space_barracks); - initStruct(actions.space.spc_red.spaceport); - initStruct(actions.space.spc_red.vr_center); - initStruct(actions.space.spc_red.ziggurat); - initStruct(actions.space.spc_sun.swarm_control); - initStruct(actions.space.spc_sun.swarm_satellite); - initStruct(actions.space.spc_titan.ai_colonist); - initStruct(actions.space.spc_titan.decoder); - initStruct(actions.space.spc_titan.electrolysis); - initStruct(actions.space.spc_titan.g_factory); - initStruct(actions.space.spc_titan.hydrogen_plant); - initStruct(actions.space.spc_titan.storehouse); - initStruct(actions.space.spc_titan.titan_bank); - initStruct(actions.space.spc_titan.titan_mine); - initStruct(actions.space.spc_titan.titan_quarters); - initStruct(actions.space.spc_titan.titan_spaceport); - initStruct(actions.space.spc_triton.crashed_ship); - global.space.crashed_ship.count = 100; - initStruct(actions.space.spc_triton.fob); - initStruct(actions.space.spc_triton.lander); - initStruct(actions.tauceti.tau_gas.refueling_station); - initStruct(actions.tauceti.tau_home.alien_outpost); - global.tauceti.alien_outpost.count = 1; - global.tauceti.alien_outpost.on = 1; - initStruct(actions.tauceti.tau_home.colony); - global.tauceti.colony.count = 1; - global.tauceti.colony.on = 1; - initStruct(actions.tauceti.tau_home.fusion_generator); - global.tauceti.fusion_generator.count = 1; - global.tauceti.fusion_generator.on = 1; - initStruct(actions.tauceti.tau_home.infectious_disease_lab); - initStruct(actions.tauceti.tau_home.mining_pit); - global.tauceti.mining_pit.count = 1; - global.tauceti.mining_pit.on = 1; - initStruct(actions.tauceti.tau_home.orbital_station); - global.tauceti.orbital_station.count = 1; - global.tauceti.orbital_station.on = 1; - initStruct(actions.tauceti.tau_home.repository); - global.tauceti.repository.count = 2; - initStruct(actions.tauceti.tau_home.tauceti_casino); - initStruct(actions.tauceti.tau_red.orbital_platform); - global.space["ai_core"] = { count: 100 }; - global.space["ai_core2"] = { count: 0, on: 0 }; - global.space["m_relay"] = { count: 0, on: 0 }; - global.arpa["sequence"] = { - max: 5e4, - progress: 0, - time: 5e4, - on: true, - boost: false, - auto: false, - labs: 0 - }; - global.tech["stock_exchange"] = 0; - global.tech["monuments"] = 0; - global.tech["supercollider"] = 0; - global.tech["tp_depot"] = 0; - global.tech["railway"] = 0; - global.tech["isolation"] = 1; - global.race["truepath"] = 1; - global.arpa["m_type"] = arpa("Monument"); - drawTech(); - renderTauCeti(); - arpa("Physics"); - loadFoundry(); - } - } - function calcAIDrift(wiki) { - let drift = 0; - let ai_colonist_on = wiki ? global.space.ai_colonist.on : p_on["ai_colonist"]; - let decoder_on = wiki ? global.space.decoder.on : support_on["decoder"]; - let shock_trooper_on = wiki ? global.space.shock_trooper.on : support_on["shock_trooper"]; - let tank_on = wiki ? global.space.tank.on : support_on["tank"]; - if (ai_colonist_on && decoder_on) { - drift += ai_colonist_on * decoder_on * 0.35; - } - if (shock_trooper_on) { - drift += shock_trooper_on * 2; - } - if (tank_on) { - drift += tank_on * 2; - } - if (drift > 100) { - drift = 100; - } - return drift; - } - function xPosition(x, p) { - if (spacePlanetStats[p].orbit !== -2) { - let e = 1.075 + spacePlanetStats[p].dist / 100; - if (global.city.ptrait.includes("elliptical")) { - switch (p) { - case "spc_home": - e = 1.5; - break; - default: - e = 1.275 + spacePlanetStats[p].dist / 100; - break; - } - } - x *= e; - } - return x; - } - function xShift(id) { - if (spacePlanetStats[id].orbit !== -2) { - let x = spacePlanetStats[id].dist / 3; - if (global.city.ptrait.includes("elliptical") && id === "spc_home") { - x += 0.15; - } - if (id === "spc_eris") { - x += 25; - } - return x; - } - return 0; - } - var mapScale; - var mapShift; - function drawMap() { - let canvas = document.getElementById("mapCanvas"); - let ctx = canvas.getContext("2d"); - canvas.width = canvas.getBoundingClientRect().width; - canvas.height = canvas.getBoundingClientRect().height; - ctx.save(); - ctx.fillStyle = "#000000"; - ctx.fillRect(0, 0, canvas.width, canvas.height); - ctx.translate(mapShift.x, mapShift.y); - ctx.scale(mapScale, mapScale); - let planetLocation = {}; - for (let [id, planet] of Object.entries(spacePlanetStats)) { - planetLocation[id] = genXYcoord(id); - } - ctx.lineWidth = 1 / mapScale; - ctx.strokeStyle = "#c0c0c0"; - for (let [id, planet] of Object.entries(spacePlanetStats)) { - if (!planet.moon && planet.orbit !== -2) { - ctx.beginPath(); - if (planet.belt || global.race["orbit_decayed"] && id === "spc_home") { - ctx.setLineDash([0.01, 0.01]); - } else { - ctx.setLineDash([]); - } - let cx = xShift(id); - ctx.ellipse(cx, 0, xPosition(planet.dist, id), planet.dist, 0, 0, Math.PI * 2, true); - ctx.stroke(); - } - } - ctx.fillStyle = "#0000ff"; - ctx.strokeStyle = "#0000ff"; - for (let ship of global.space.shipyard.ships) { - if (ship.transit > 0) { - ctx.beginPath(); - ctx.setLineDash([0.1, 0.4]); - ctx.moveTo(ship.xy.x, ship.xy.y); - ctx.lineTo(ship.destination.x, ship.destination.y); - ctx.stroke(); - } - } - for (let [id, planet] of Object.entries(spacePlanetStats)) { - if (global.race["orbit_decayed"] && ["spc_home", "spc_moon"].includes(id)) { - continue; - } - let color = "558888"; - if (actions.space[id] && actions.space[id].info.syndicate() && global.settings.space[id.substring(4)]) { - let shift = syndicate(id); - color = ((Math.round(255 * (1 - shift)) << 16) + (Math.round(255 * shift) << 8)).toString(16).padStart(6, 0); - } - if (id === "spc_dwarf") { - color = "7132a8"; - } else if (id === "spc_sun" || id === "tauceti") { - color = "f8ff2b"; - } - ctx.fillStyle = "#" + color; - ctx.beginPath(); - let size = planet.size / 10; - if (planet.moon) { - switch (id) { - case "spc_moon": - ctx.arc(planetLocation[id].x + 0.05, planetLocation[id].y + 0.05, size, 0, Math.PI * 2, true); - break; - case "spc_titan": - ctx.arc(planetLocation[id].x - 0.2, planetLocation[id].y - 0.2, size, 0, Math.PI * 2, true); - break; - default: - ctx.arc(planetLocation[id].x + 0.2, planetLocation[id].y + 0.2, size, 0, Math.PI * 2, true); - break; - } - } else { - let size2 = planet.size / 10; - switch (id) { - case "spc_sun": - ctx.arc(planetLocation[id].x, planetLocation[id].y, size2, 0, Math.PI * 2, true); - break; - default: - ctx.arc(planetLocation[id].x, planetLocation[id].y, size2, 0, Math.PI * 2, true); - break; - } - } - ctx.fill(); - } - ctx.fillStyle = "#0000ff"; - ctx.strokeStyle = "#0000ff"; - for (let ship of global.space.shipyard.ships) { - if (ship.transit > 0) { - ctx.beginPath(); - ctx.arc(ship.xy.x, ship.xy.y, 0.1, 0, Math.PI * 2, true); - ctx.fill(); - } - } - ctx.shadowOffsetX = 2; - ctx.shadowOffsetY = 2; - ctx.shadowBlur = 2; - ctx.shadowColor = "rgba(0, 0, 0, 0.5)"; - ctx.fillStyle = "#009aff"; - ctx.font = `${20 / mapScale}px serif`; - for (let ship of global.space.shipyard.ships) { - if (ship.transit > 0) { - ctx.fillText(ship.name, ship.xy.x + 0.15, ship.xy.y - 0.15); - } - } - ctx.fillStyle = "#ffa500"; - ctx.font = `${25 / mapScale}px serif`; - for (let [id, planet] of Object.entries(spacePlanetStats)) { - if (actions.space[id] && global.settings.space[id.substring(4)]) { - if (global.race["orbit_decayed"] && ["spc_home"].includes(id)) { - continue; - } - let nameRef = actions.space[id].info.name; - let nameText = typeof nameRef === "function" ? nameRef() : nameRef; - if (planet.moon) { - switch (id) { - case "spc_moon": - ctx.fillText(nameText, planetLocation[id].x + 0.1, planetLocation[id].y + 0.1); - break; - case "spc_titan": - ctx.fillText(nameText, planetLocation[id].x - 0.3, planetLocation[id].y - 0.3); - break; - default: - ctx.fillText(nameText, planetLocation[id].x + 0.25, planetLocation[id].y + 0.2); - break; - } - } else { - switch (id) { - case "spc_sun": - break; - default: - ctx.fillText(nameText, planetLocation[id].x, planetLocation[id].y - 0.2 * planet.size); - break; - } - } - } - } - ctx.restore(); - } - function buildSolarMap(parentNode) { - let currentNode = $(`
`).appendTo(parentNode); - let canvasOffset = {}; - let dragOffset = {}; - let mouseDown = false; - mapShift = {}; - mapScale = 20; - currentNode.append( - $(``).on("mouseup mouseover mouseout", () => mouseDown = false).on("mousedown", (e) => { - mouseDown = true; - dragOffset.x = e.clientX - mapShift.x; - dragOffset.y = e.clientY - mapShift.y; - }).on("mousemove", (e) => { - if (mouseDown) { - mapShift.x = e.clientX - dragOffset.x; - mapShift.y = e.clientY - dragOffset.y; - drawMap(); - } - }).on("wheel", (e) => { - if (e.originalEvent.deltaY < 0) { - mapScale /= 0.8; - mapShift.x = canvasOffset.x + (mapShift.x - canvasOffset.x) / 0.8; - mapShift.y = canvasOffset.y + (mapShift.y - canvasOffset.y) / 0.8; - drawMap(); - } else { - mapScale *= 0.8; - mapShift.x = canvasOffset.x + (mapShift.x - canvasOffset.x) * 0.8; - mapShift.y = canvasOffset.y + (mapShift.y - canvasOffset.y) * 0.8; - drawMap(); - } - return false; - }), - $(``).on("click", () => { - mapScale /= 0.8; - mapShift.x = canvasOffset.x + (mapShift.x - canvasOffset.x) / 0.8; - mapShift.y = canvasOffset.y + (mapShift.y - canvasOffset.y) / 0.8; - drawMap(); - }), - $(``).on("click", () => { - mapScale *= 0.8; - mapShift.x = canvasOffset.x + (mapShift.x - canvasOffset.x) * 0.8; - mapShift.y = canvasOffset.y + (mapShift.y - canvasOffset.y) * 0.8; - drawMap(); - }) - ); - let bounds = document.getElementById("mapCanvas").getBoundingClientRect(); - canvasOffset.x = bounds.width / 2; - canvasOffset.y = bounds.height / 2; - mapShift.x = canvasOffset.x; - mapShift.y = canvasOffset.y; - drawMap(); - } - function solarModal() { - $("#modalBox").append($('

Solar System

')); - buildSolarMap($(`#modalBox`)); - } + ${n} + `;if(e.space.shipyard.expand){let l=`${t(`outer_shipyard_engine_${s.engine}`)} ${t(`outer_shipyard_class_${s.class}`)}`,h=$(`
`),v=$(`
${s.name} | ${t("outer_shipyard_scrap")} | ${l} | ${t(`outer_shipyard_weapon_${s.weapon}`)} | ${t(`outer_shipyard_power_${s.power}`)} | ${t(`outer_shipyard_armor_${s.armor}`)} | ${t(`outer_shipyard_sensor_${s.sensor}`)}
`),_=$('
'),g=$('
'),w=$(`
${c}
`);_.append(`${t("crew")} `),_.append(`${t("firepower")} `),_.append(`${t("outer_shipyard_sensors")} `),_.append(`${t("speed")} `),_.append(`${t("outer_shipyard_fuel")} `),_.append(`${t("outer_shipyard_hull")} `),g.append(``),h.append(v),h.append(_),h.append(g),h.append(w),r.append(h)}else{let l=$(`
`),h=$('
'),v=$('
'),_=$(`
${c}
`);h.append(`${s.name} | `),h.append(`${t("firepower")} `),h.append(`${t("outer_shipyard_sensors")} `),h.append(`${t("speed")} `),h.append(`${t("outer_shipyard_fuel")} `),h.append(`${t("outer_shipyard_hull")} `),v.append(``),l.append(h),l.append(v),l.append(_),r.append(l)}V({el:`#shipReg${i}`,data:e.space.shipyard.ships[i],methods:{scrap(l){e.space.shipyard.ships[l]&&e.space.shipyard.ships[l].location==="spc_dwarf"&&(e.space.shipyard.ships.splice(l,1),ls(),Vn())},scrapAllowed(l){return!!(e.space.shipyard.ships[l]&&e.space.shipyard.ships[l].location==="spc_dwarf")},setLoc(l,h){let v=e.space.shipyard.ships[h];if(l!==v.location){let _=un(v),g=v.transit>0||v.location!=="spc_dwarf";if(g||e.civic.garrison.workers-e.civic.garrison.crew>=_){let w=Qo(v,l),S=Vo(v.xy,w),C=As(v);v.location=l,v.transit=Math.round(S/C),v.dist=Math.round(S/C),v.origin=pt(v.xy),v.destination={x:w.x,y:w.y},g||(e.civic.garrison.crew+=_),ls(),Ie(`ship${h}loc${l}`)}}},crewText(l){return un(e.space.shipyard.ships[l])},fireText(l){return Zo(e.space.shipyard.ships[l])},sensorText(l){return zs(e.space.shipyard.ships[l])+"km"},speedText(l){let h=7.695363719135802*As(e.space.shipyard.ships[l]);return Math.round(h)+"km/s"},fuelText(l){let h=Yn(e.space.shipyard.ships[l]);return h.res?`${h.burn} ${e.resource[h.res].name}/s`:"N/A"},hullText(l){return`${100-e.space.shipyard.ships[l].damage}%`},hullDamage(l){return e.space.shipyard.ships[l].damage<=10?"has-text-success":e.space.shipyard.ships[l].damage>=40&&e.space.shipyard.ships[l].damage<65?"has-text-caution":e.space.shipyard.ships[l].damage>=65?"has-text-danger":""},dest(l){let h=s.class==="explorer"?t("tech_era_tauceti"):typeof a[e.space.shipyard.ships[l].location].info.name=="string"?a[e.space.shipyard.ships[l].location].info.name:a[e.space.shipyard.ships[l].location].info.name();return t("outer_shipyard_arrive",[h,e.space.shipyard.ships[l].transit])},show(l){return e.space.shipyard.ships[l].transit>0}}}),s.class==="explorer"?s.location!=="tauceti"&&ve(`ship${i}loctauceti`,function(){return t("transit_time",[Math.round(Vo(s.xy,Qo(s,"tauceti"))/As(s))])},{elm:`#ship${i}loc .tauceti`,placement:"left"}):Object.keys(a).forEach(function(l){(a[l].info.syndicate()||l==="spc_dwarf")&&s.location!==l&&ve(`ship${i}loc${l}`,function(){return t("transit_time",[Math.round(Vo(s.xy,Qo(s,l))/As(s))])},{elm:`#ship${i}loc .${l}`,placement:"left"})})}G0()}function Qo(r,a){if(Qt[a].orbit===-2)return Bi(a);let i=Math.sqrt((r.xy.x-Jn(a))**2+r.xy.y**2),s=As(r)/225,n=Zn(1,a),o=Math.abs(i-Qt[a].dist),c=Math.abs(i+Qt[a].dist),l=Math.abs(i-Qt[a].dist*n),h=Math.abs(i+Qt[a].dist*n),v=Math.floor(Math.min(o,l,c,h)/s),_=Math.ceil(Math.max(o,l,c,h)/s);i>=Qt[a].dist&&i<=Qt[a].dist*n&&(v=0);let w=360/(Qt[a].orbit===-1?Kr():Qt[a].orbit),S=(e.space.position[a]+v*w)%360,C=Math.PI/180;for(let z=v;z<=_;z++){let O=Zn(Math.cos(S*C)*Qt[a].dist,a);O+=Jn(a);let k=Math.sin(S*C)*Qt[a].dist;if(Math.sqrt((O-r.xy.x)**2+(k-r.xy.y)**2)/s<=z)return{x:O,y:k};S=(S+w)%360}return Bi(a)}function At(r,a){if(!e.tech.isolation&&e.tech.syndicate&&e.race.truepath&&e.space.syndicate&&e.space.syndicate.hasOwnProperty(r)){let i=1e3,s=0;switch(e.civic.foreign.gov3.hstl<10?s=250-25*e.civic.foreign.gov3.hstl:e.civic.foreign.gov3.hstl>60&&(s=-13*(e.civic.foreign.gov3.hstl-60)),r){case"spc_home":case"spc_moon":case"spc_red":case"spc_hell":i=1250+s;break;case"spc_gas":case"spc_gas_moon":case"spc_belt":i=1020+s;break;case"spc_titan":case"spc_enceladus":i=d.space[r].info.syndicate_cap();break;case"spc_triton":case"spc_kuiper":case"spc_eris":i=d.space[r].info.syndicate_cap();break}let n=e.space.syndicate[r];e.race.chicken&&(n*=1+y.chicken.vars()[1]/100,n=Math.round(n)),e.race.ocular_power&&e.race.ocularPowerConfig&&e.race.ocularPowerConfig.f&&(n*=1-y.ocular_power.vars()[1]/500,n=Math.round(n));let o=0,c=0,l=0;if(e.space.hasOwnProperty("shipyard")&&e.space.shipyard.hasOwnProperty("ships")){if(e.space.shipyard.ships.forEach(function(h){if(h.location===r&&h.transit===0&&h.fueled){let v=Zo(h);o+=h.damage>0?Math.round(v*(100-h.damage)/100):v,c+=zs(h)}}),r==="spc_enceladus"&&Math.min(W.operating_base,x.operating_base)>0){let h=Math.min(W.operating_base,x.operating_base);o+=h*50}else r==="spc_titan"&&x.sam>0?o+=x.sam*25:r==="spc_triton"&&x.fob>0&&(o+=500,c+=10);c>100&&(c=Math.round((c-100)/(c-100+200)*100)+100),o=Math.round(o*((c+25)/125)),o>n&&(l=o-n),n=n-o>0?n-o:0}return a?{p:1-+(n/i).toFixed(4),r:n,s:c,o:l}:1-+(n/i).toFixed(4)}return a?{p:1,r:0,s:0,o:0}:1}function zs(r){let a=1;switch(r.class){case"corvette":case"frigate":a=2;break;case"destroyer":case"cruiser":a=1.5;break;case"explorer":a=5;break;default:a=1;break}switch(r.sensor){case"visual":return 1;case"radar":return 10*a;case"lidar":return 18*a;case"quantum":return 32*a}}function El(){if(e.space.fob){if(e.space.fob.enemy<=1e3){let c=e.tech.outer&&e.tech.outer>=4?125:100;e.space.fob.enemy+=Math.rand(25,c)}let r=Math.ceil(N(e.space.fob.enemy)/5),a=e.civic.garrison.wounded-Ge();a<0&&(a=0);let i=nt(e.space.fob.troops,"army",a),s=Math.rand(0,a+1);br(s),e.civic.garrison.wounded-=s;let n=Math.min(Math.rand(0,i),e.space.fob.enemy);e.space.fob.enemy-=n,e.space.fob.enemy<0&&(e.space.fob.enemy=0),e.race.ocular_power&&e.race.ocularPowerConfig&&e.race.ocularPowerConfig.p&&(e.race.ocularPowerConfig.ds+=Math.round(n*y.ocular_power.vars()[1]));let o=Math.rand(0,e.space.fob.troops+1);if(o>r&&(o=r),e.race.armored&&(o-=N(1)),e.race.scales&&(o-=N(1)),e.tech.armor&&(o-=N(e.tech.armor)),o<0&&(o=0),e.race.revive&&s>0){let c=Math.round(Math.rand(0,s+1));e.civic.garrison.workers+=c}e.civic.garrison.wounded+=o,e.civic.garrison.wounded>Ge(!1,{nofob:!0})&&(e.civic.garrison.wounded=Ge(!1,{nofob:!0}));{let c=e.civic.garrison.wounded-Ge();c<0&&(c=0);let l=e.space.fob.enemy-nt(e.space.fob.troops,"army",c);l<=0&&e.space.crashed_ship.count<100?e.space.crashed_ship.count++:l>0&&e.space.crashed_ship.count>0&&e.space.crashed_ship.count--,e.space.crashed_ship.count===100&&(e.resource.Cipher.display=!0)}}}function Ll(){if(e.space.digsite){if(e.space.digsite.enemy<=1e4){let a=250;e.space.digsite.enemy+=Math.rand(25,a)}let r=nt(W.shock_trooper,"army",0);W.tank&&(r+=W.tank*100),r*=At("spc_eris"),e.space.digsite.enemy-=Math.rand(0,r),e.space.digsite.enemy<0?e.space.digsite.enemy=0:e.space.digsite.enemy>1e4&&(e.space.digsite.enemy=1e4),e.space.digsite.count=Math.floor(100-e.space.digsite.enemy/100)}}var Qt={spc_sun:{dist:0,orbit:0,size:2},spc_home:{dist:1,orbit:-1,size:.6},spc_moon:{dist:1.01,orbit:-1,size:.1,moon:!0},spc_red:{dist:1.524,orbit:687,size:.5},spc_hell:{dist:.4,orbit:88,size:.4},spc_venus:{dist:.7,orbit:225,size:.5},spc_gas:{dist:5.203,orbit:4330,size:1.25},spc_gas_moon:{dist:5.204,orbit:4330,size:.2,moon:!0},spc_belt:{dist:2.7,orbit:1642,size:.5,belt:!0},spc_dwarf:{dist:2.77,orbit:1682,size:.5},spc_saturn:{dist:9.539,orbit:10751,size:1.1},spc_titan:{dist:9.536,orbit:10751,size:.2,moon:!0},spc_enceladus:{dist:9.542,orbit:10751,size:.1,moon:!0},spc_uranus:{dist:19.8,orbit:30660,size:1},spc_neptune:{dist:30.08,orbit:60152,size:1},spc_triton:{dist:30.1,orbit:60152,size:.1,moon:!0},spc_kuiper:{dist:39.5,orbit:90498,size:.5,belt:!0},spc_eris:{dist:68,orbit:204060,size:.5},tauceti:{dist:752568.8,orbit:-2,size:2}};function Jo(){e.space.position||(e.space.position={}),Object.keys(Qt).forEach(function(r){e.space.position.hasOwnProperty(r)||(e.space.position[r]=Math.rand(0,360))}),e.space.position.spc_home=e.space.position.spc_moon,e.space.position.spc_gas_moon=e.space.position.spc_gas,e.space.position.spc_titan=e.space.position.spc_enceladus,e.space.position.spc_saturn=e.space.position.spc_titan,e.space.position.spc_neptune=e.space.position.spc_triton}function Bi(r){let a=Zn(+Math.cos(e.space.position[r]*(Math.PI/180)).toFixed(5)*Qt[r].dist,r),i=+Math.sin(e.space.position[r]*(Math.PI/180)).toFixed(5)*Qt[r].dist;return a+=Jn(r),{x:a,y:i}}function Vo(r,a){return Math.ceil(Math.sqrt((a.x-r.x)**2+(a.y-r.y)**2)*225)}function ci(r,a,i){let s=1;switch(e.race.pack_rat&&(s*=1+y.pack_rat.vars()[1]/100),e.stats.achieve.blackhole&&(s*=1+e.stats.achieve.blackhole.l*.05),e.tech.world_control&&(s*=3),r){case"storehouse":{let n=i?e.space?.titan_spaceport?.on??0:x.titan_spaceport;n&&(s*=1+n*.25),a&&e.tech.shelving&&(s*=2),e.tech.shelving&&e.tech.shelving>=3&&(s*=1.5)}case"repository":e.tech.isolation&&(s*=3,e.tech.tp_depot&&(s*=1+e.tech.tp_depot/20));break}return s}function Il(){let r={city:{},space:{},ships:[]};r.ships=[...e.space.shipyard.ships],e.space.shipyard.ships=[],e.settings.spaceTabs=6,e.settings.showSpace=!1,e.settings.showOuter=!1,e.settings.showCity=!1,e.settings.showShipYard=!1,e.settings.govTabs===5&&(e.settings.govTabs=0),ds(),be($("#shipList")),Object.keys(d.city).forEach(function(i){e.city.hasOwnProperty(i)&&e.city[i].hasOwnProperty("count")&&(e.race.hooved&&d.city[i].cost?.hasOwnProperty("Horseshoe")&&(e.race.shoecnt-=d.city[i].cost.Horseshoe()*e.city[i].count),r.city[i]={c:e.city[i].count},e.city[i].count=0,e.city[i].hasOwnProperty("on")&&(r.city[i].o=e.city[i].on,e.city[i].on=0))}),["spc_home","spc_moon","spc_red","spc_hell","spc_sun","spc_gas","spc_gas_moon","spc_belt","spc_dwarf","spc_titan","spc_enceladus","spc_triton","spc_kuiper","spc_eris"].forEach(function(i){Object.keys(d.space[i]).forEach(function(s){e.space.hasOwnProperty(s)&&e.space[s].hasOwnProperty("count")&&(e.race.hooved&&d.space[i][s].cost?.hasOwnProperty("Horseshoe")&&(e.race.shoecnt-=d.space[i][s].cost.Horseshoe()*e.space[s].count),r.space[s]={c:e.space[s].count},e.space[s].count=0,e.space[s].hasOwnProperty("on")&&(r.space[s].o=e.space[s].on,e.space[s].on=0))})}),e.race.hooved&&e.race.shoecnt<5&&(e.race.shoecnt=5),e.resource.Zen.display&&(e.resource.Zen.display=!1),e.resource.Slave.display&&(e.resource.Slave.display=!1,e.resource.Slave.amount=0,Pr("slave")),e.race.deconstructor&&Za.forEach(function(i){e.city.nanite_factory[i]=0}),Object.keys(e.resource).forEach(function(i){e.resource[i].hasOwnProperty("trade")&&(e.resource[i].trade=0)}),Object.keys(Gi).forEach(function(i){["professor","scientist","pit_miner","cement_worker","craftsman"].includes(i)||(e.civic[i].workers=0,e.civic[i].assigned=0)}),["forager","farmer","lumberjack","quarry_worker","miner","coal_miner","priest","colonist","titan_colonist","space_miner"].forEach(function(i){e.civic[i].display=!1}),e.civic.hunter.display?e.civic.d_job="hunter":e.civic.d_job="unemployed",e.arpa.sequence&&(e.arpa.sequence.on=!1,e.arpa.sequence.boost=!1);for(let i of Object.values(e.race.purgatory.city))i.hasOwnProperty("count")&&(i.count=0),i.hasOwnProperty("on")&&(i.on=0);for(let i of Object.values(e.race.purgatory.space))i.hasOwnProperty("count")&&(i.count=0),i.hasOwnProperty("on")&&(i.on=0);if(e.queue.hasOwnProperty("queue"))for(let i=e.queue.queue.length-1;i>=0;i--){let s=e.queue.queue[i];(s.action==="city"||s.action==="space"||s.action==="starDock")&&e.queue.queue.splice(i,1)}e.tech.magic&&e.tech.magic>=2&&(e.tauceti.pylon={count:0},Xn()),M(Je.tau_home.tauceti_casino),M(Je.tau_home.tau_housing);let a=W.colony*Je.tau_home.colony.citizens();e.resource[e.race.species].amount>a&&(e.resource[e.race.species].amount=a),Pr("spy"),Pr("spyop"),Pr("combo_spy"),lt(),be($("#infoTimer")),e.race.inactive=r}function Kl(){e.race.lone_survivor&&(e.tech.alloy=1,e.tech.alumina=2,e.tech.asteroid=7,e.tech.banking=11,e.tech.biotech=1,e.tech.boot_camp=2,e.tech.container=7,e.tech.copper=1,e.tech.currency=6,e.tech.disease=2,e.tech.drone=1,e.tech.elerium=2,e.tech.explosives=3,e.tech.factory=3,e.tech.foundry=8,e.tech.gambling=4,e.tech.gas_giant=1,e.tech.gas_moon=2,e.tech.genesis=2,e.tech.genetics=2,e.tech.gov_corp=1,e.tech.gov_fed=1,e.tech.gov_soc=1,e.tech.gov_theo=1,e.tech.govern=3,e.tech.graphene=1,e.tech.helium=1,e.tech.hell=1,e.tech.high_tech=13,e.tech.home_safe=2,e.tech.housing=3,e.tech.housing_reduction=3,e.tech.kuiper=2,e.tech.launch_facility=1,e.tech.luna=2,e.tech.m_smelting=2,e.tech.marines=2,e.tech.mars=5,e.tech.mass=1,e.tech.medic=3,e.tech.military=8,e.tech.mine_conveyor=1,e.tech.mining=4,e.tech.monument=1,e.tech.nano=1,e.tech.oil=7,e.tech.outer=8,e.tech.pickaxe=5,e.tech.polymer=2,e.tech.primitive=3,e.tech.q_factory=1,e.tech.quantium=1,e.tech.queue=3,e.tech.r_queue=1,e.tech.reproduction=1,e.tech.rival=1,e.tech.satellite=1,e.tech.science=9,e.tech.shelving=3,e.tech.shipyard=1,e.tech.smelting=6,e.tech.solar=5,e.tech.space=6,e.tech.space_explore=4,e.tech.space_housing=1,e.tech.spy=5,e.tech.stanene=1,e.tech.steel_container=6,e.tech.storage=5,e.tech.swarm=6,e.tech.syard_armor=3,e.tech.syard_class=6,e.tech.syard_engine=5,e.tech.syard_power=5,e.tech.syard_sensor=4,e.tech.syard_weapon=6,e.tech.syndicate=0,e.tech.synthetic_fur=1,e.tech.tau_home=6,e.tech.tauceti=4,e.tech.theology=2,e.tech.titan=9,e.tech.titan_ai_core=3,e.tech.titan_power=1,e.tech.titanium=3,e.tech.trade=3,e.tech.unify=2,e.tech.uranium=4,e.tech.v_train=1,e.tech.vault=4,e.tech.wharf=1,e.tech.world_control=1,e.tech.wsc=0,e.race.joyless||(e.tech.theatre=3,e.tech.broadcast=2),e.race.flier||(e.tech.cement=5,e.resource.Cement.display=!0),e.race.universe==="magic"&&(e.tech.gov_mage=1,e.tech.magic=4,e.tech.conjuring=2,e.resource.Mana.display=!0,e.resource.Crystal.display=!0,e.civic.crystal_miner.display=!0,e.tauceti.pylon={count:0},Es(!0)),e.race.universe==="evil"&&(e.tech.reclaimer=1),e.settings.showSpace=!1,e.settings.showTau=!0,e.settings.tau.home=!0,e.settings.showCity=!1,e.settings.showIndustry=!0,e.settings.showPowerGrid=!0,e.settings.showResearch=!0,e.settings.showCivic=!0,e.settings.showResources=!0,e.settings.showMarket=!0,e.settings.showStorage=!0,e.settings.civTabs=1,e.settings.spaceTabs=6,e.settings.showGenetics=!0,e.settings.arpa.physics=!0,e.settings.arpa.genetics=!0,e.resource[e.race.species].display=!0,e.resource.Knowledge.display=!0,e.resource.Money.display=!0,e.resource.Crates.display=!0,e.resource.Containers.display=!0,e.resource.Food.display=!0,e.resource.Stone.display=!0,e.resource.Furs.display=!0,e.resource.Copper.display=!0,e.resource.Iron.display=!0,e.resource.Aluminium.display=!0,e.resource.Coal.display=!0,e.resource.Oil.display=!0,e.resource.Uranium.display=!0,e.resource.Steel.display=!0,e.resource.Titanium.display=!0,e.resource.Alloy.display=!0,e.resource.Polymer.display=!0,e.resource.Iridium.display=!0,e.resource.Helium_3.display=!0,e.resource.Water.display=!0,e.resource.Neutronium.display=!0,e.resource.Adamantite.display=!0,e.resource.Elerium.display=!0,e.resource.Nano_Tube.display=!0,e.resource.Graphene.display=!0,e.resource.Stanene.display=!0,e.resource.Orichalcum.display=!0,e.resource.Bolognium.display=!0,e.resource.Unobtainium.display=!0,e.resource.Brick.display=!0,e.resource.Wrought_Iron.display=!0,e.resource.Sheet_Metal.display=!0,e.resource.Mythril.display=!0,e.resource.Quantium.display=!0,e.resource.Cipher.display=!0,!e.race.kindling_kindred&&!e.race.smoldering&&(e.civic.lumberjack.display=!0,e.resource.Lumber.display=!0,e.resource.Plywood.display=!0,e.resource.Lumber.max=1e7,e.resource.Lumber.amount=1e7,e.resource.Plywood.amount=25e5,e.resource.Lumber.crates=25,e.resource.Lumber.containers=25,e.tech.axe=5),e.race.smoldering&&(e.resource.Chrysotile.display=!0,e.resource.Chrysotile.max=5e6,e.resource.Chrysotile.amount=5e6),e.race.sappy||(e.tech.hammer=4),e.race.apex_predator||(e.tech.armor=3),e.resource[e.race.species].max=1,e.resource[e.race.species].amount=1,e.resource.Crates.amount=1e3,e.resource.Containers.amount=1e3,e.resource.Money.max=1e9,e.resource.Money.amount=1e9,e.resource.Knowledge.max=4321200,e.resource.Knowledge.amount=4321200,e.resource.Food.max=1e4,e.resource.Food.amount=1e4,e.resource.Oil.max=5e5,e.resource.Oil.amount=5e5,e.resource.Helium_3.max=5e5,e.resource.Helium_3.amount=5e5,e.resource.Water.max=25e3,e.resource.Water.amount=25e3,e.resource.Uranium.max=5e5,e.resource.Uranium.amount=5e5,e.resource.Stone.max=1e7,e.resource.Stone.amount=1e7,e.resource.Furs.max=5e6,e.resource.Furs.amount=5e6,e.resource.Copper.max=5e6,e.resource.Copper.amount=5e6,e.resource.Iron.max=5e6,e.resource.Iron.amount=5e6,e.resource.Steel.max=5e6,e.resource.Steel.amount=5e6,e.resource.Aluminium.max=5e6,e.resource.Aluminium.amount=5e6,e.resource.Cement.max=5e6,e.resource.Cement.amount=5e6,e.resource.Titanium.max=5e6,e.resource.Titanium.amount=5e6,e.resource.Coal.max=5e6,e.resource.Coal.amount=5e6,e.resource.Alloy.max=5e6,e.resource.Alloy.amount=5e6,e.resource.Polymer.max=5e6,e.resource.Polymer.amount=5e6,e.resource.Iridium.max=5e6,e.resource.Iridium.amount=5e6,e.resource.Neutronium.max=5e5,e.resource.Neutronium.amount=5e5,e.resource.Adamantite.max=5e6,e.resource.Adamantite.amount=5e6,e.resource.Elerium.max=1e3,e.resource.Elerium.amount=1e3,e.resource.Nano_Tube.max=5e6,e.resource.Nano_Tube.amount=5e6,e.resource.Graphene.max=5e6,e.resource.Graphene.amount=5e6,e.resource.Stanene.max=5e6,e.resource.Stanene.amount=5e6,e.resource.Bolognium.max=5e6,e.resource.Bolognium.amount=5e6,e.resource.Orichalcum.max=5e6,e.resource.Orichalcum.amount=5e6,e.resource.Brick.amount=25e5,e.resource.Wrought_Iron.amount=25e5,e.resource.Sheet_Metal.amount=25e5,e.resource.Mythril.amount=25e5,e.resource.Quantium.amount=25e5,e.race.artifical||(e.resource.Food.crates=10,e.resource.Food.containers=10),e.resource.Stone.crates=25,e.resource.Stone.containers=25,e.resource.Furs.crates=25,e.resource.Furs.containers=25,e.resource.Coal.crates=10,e.resource.Coal.containers=10,e.resource.Copper.crates=25,e.resource.Copper.containers=25,e.resource.Iron.crates=25,e.resource.Iron.containers=25,e.resource.Aluminium.crates=25,e.resource.Aluminium.containers=25,e.resource.Steel.crates=25,e.resource.Steel.containers=25,e.resource.Titanium.crates=25,e.resource.Titanium.containers=25,e.resource.Alloy.crates=25,e.resource.Alloy.containers=25,e.resource.Polymer.crates=25,e.resource.Polymer.containers=25,e.resource.Iridium.crates=25,e.resource.Iridium.containers=25,e.resource.Adamantite.crates=25,e.resource.Adamantite.containers=25,e.resource.Graphene.crates=25,e.resource.Graphene.containers=25,e.resource.Stanene.crates=25,e.resource.Stanene.containers=25,e.resource.Bolognium.crates=25,e.resource.Bolognium.containers=25,e.resource.Orichalcum.crates=25,e.resource.Orichalcum.containers=25,e.civic.taxes.display=!0,e.race.flier||(e.civic.cement_worker.display=!0,e.resource.Cement.crates=25,e.resource.Cement.containers=25),e.race.sappy||(e.civic.quarry_worker.display=!0),e.civic.professor.display=!0,e.civic.scientist.display=!0,e.civic.banker.display=!0,e.civic.pit_miner.display=!0,e.civic.professor.max=1,e.civic.professor.workers=1,e.city.calendar.day++,e.city.market.active=!0,e.city.power=0,e.city.powered=!0,e.race.artifical&&(e.city.transmitter={count:0,on:0}),M(d.city.factory),M(d.city.foundry),M(d.city.smelter),M(d.city.amphitheatre),M(d.city.apartment),M(d.city.bank),M(d.city.basic_housing),M(d.city.biolab),M(d.city.boot_camp),M(d.city.casino),M(d.city.cement_plant),M(d.city.coal_mine),M(d.city.coal_power),M(d.city.cottage),M(d.city.fission_power),M(d.city.garrison),M(d.city.hospital),M(d.city.library),M(d.city.lumber_yard),M(d.city.mass_driver),M(d.city.metal_refinery),M(d.city.mine),M(d.city.oil_depot),M(d.city.oil_power),M(d.city.oil_well),M(d.city.rock_quarry),M(d.city.sawmill),M(d.city.shed),M(d.city.storage_yard),M(d.city.temple),M(d.city.tourist_center),M(d.city.trade),M(d.city.university),M(d.city.wardenclyffe),M(d.city.warehouse),M(d.city.wharf),M(d.space.spc_belt.elerium_ship),M(d.space.spc_belt.iridium_ship),M(d.space.spc_belt.iron_ship),M(d.space.spc_belt.space_station),M(d.space.spc_dwarf.e_reactor),M(d.space.spc_dwarf.elerium_contain),M(d.space.spc_dwarf.mass_relay),e.space.mass_relay.count=100,M(d.space.spc_dwarf.shipyard),M(d.space.spc_enceladus.munitions_depot),M(d.space.spc_enceladus.operating_base),M(d.space.spc_enceladus.water_freighter),M(d.space.spc_enceladus.zero_g_lab),M(d.space.spc_eris.digsite),M(d.space.spc_eris.drone_control),M(d.space.spc_eris.shock_trooper),M(d.space.spc_eris.tank),M(d.space.spc_gas.gas_mining),M(d.space.spc_gas.gas_storage),M(d.space.spc_gas_moon.drone),M(d.space.spc_gas_moon.oil_extractor),M(d.space.spc_gas_moon.outpost),M(d.space.spc_hell.geothermal),M(d.space.spc_hell.hell_smelter),M(d.space.spc_hell.spc_casino),M(d.space.spc_hell.swarm_plant),M(d.space.spc_home.gps),M(d.space.spc_home.nav_beacon),M(d.space.spc_home.propellant_depot),M(d.space.spc_home.satellite),M(d.space.spc_kuiper.elerium_mine),M(d.space.spc_kuiper.neutronium_mine),M(d.space.spc_kuiper.orichalcum_mine),M(d.space.spc_kuiper.uranium_mine),M(d.space.spc_moon.helium_mine),M(d.space.spc_moon.iridium_mine),M(d.space.spc_moon.moon_base),M(d.space.spc_moon.observatory),M(d.space.spc_red.biodome),M(d.space.spc_red.exotic_lab),M(d.space.spc_red.fabrication),M(d.space.spc_red.garage),M(d.space.spc_red.living_quarters),M(d.space.spc_red.red_factory),M(d.space.spc_red.red_mine),M(d.space.spc_red.red_tower),M(d.space.spc_red.space_barracks),M(d.space.spc_red.spaceport),M(d.space.spc_red.vr_center),M(d.space.spc_red.ziggurat),M(d.space.spc_sun.swarm_control),M(d.space.spc_sun.swarm_satellite),M(d.space.spc_titan.ai_colonist),M(d.space.spc_titan.decoder),M(d.space.spc_titan.electrolysis),M(d.space.spc_titan.g_factory),M(d.space.spc_titan.hydrogen_plant),M(d.space.spc_titan.storehouse),M(d.space.spc_titan.titan_bank),M(d.space.spc_titan.titan_mine),M(d.space.spc_titan.titan_quarters),M(d.space.spc_titan.titan_spaceport),M(d.space.spc_triton.crashed_ship),e.space.crashed_ship.count=100,M(d.space.spc_triton.fob),M(d.space.spc_triton.lander),M(d.tauceti.tau_gas.refueling_station),M(d.tauceti.tau_home.alien_outpost),e.tauceti.alien_outpost.count=1,e.tauceti.alien_outpost.on=1,M(d.tauceti.tau_home.colony),e.tauceti.colony.count=1,e.tauceti.colony.on=1,M(d.tauceti.tau_home.fusion_generator),e.tauceti.fusion_generator.count=1,e.tauceti.fusion_generator.on=1,M(d.tauceti.tau_home.infectious_disease_lab),M(d.tauceti.tau_home.mining_pit),e.tauceti.mining_pit.count=1,e.tauceti.mining_pit.on=1,M(d.tauceti.tau_home.orbital_station),e.tauceti.orbital_station.count=1,e.tauceti.orbital_station.on=1,M(d.tauceti.tau_home.repository),e.tauceti.repository.count=2,M(d.tauceti.tau_home.tauceti_casino),M(d.tauceti.tau_red.orbital_platform),e.space.ai_core={count:100},e.space.ai_core2={count:0,on:0},e.space.m_relay={count:0,on:0},e.arpa.sequence={max:5e4,progress:0,time:5e4,on:!0,boost:!1,auto:!1,labs:0},e.tech.stock_exchange=0,e.tech.monuments=0,e.tech.supercollider=0,e.tech.tp_depot=0,e.tech.railway=0,e.tech.isolation=1,e.race.truepath=1,e.arpa.m_type=tt("Monument"),de(),Gr(),tt("Physics"),Tt())}function Yo(r){let a=0,i=r?e.space.ai_colonist.on:x.ai_colonist,s=r?e.space.decoder.on:W.decoder,n=r?e.space.shock_trooper.on:W.shock_trooper,o=r?e.space.tank.on:W.tank;return i&&s&&(a+=i*s*.35),n&&(a+=n*2),o&&(a+=o*2),a>100&&(a=100),a}function Zn(r,a){if(Qt[a].orbit!==-2){let i=1.075+Qt[a].dist/100;if(e.city.ptrait.includes("elliptical"))switch(a){case"spc_home":i=1.5;break;default:i=1.275+Qt[a].dist/100;break}r*=i}return r}function Jn(r){if(Qt[r].orbit!==-2){let a=Qt[r].dist/3;return e.city.ptrait.includes("elliptical")&&r==="spc_home"&&(a+=.15),r==="spc_eris"&&(a+=25),a}return 0}var oi,ir;function Di(){let r=document.getElementById("mapCanvas"),a=r.getContext("2d");r.width=r.getBoundingClientRect().width,r.height=r.getBoundingClientRect().height,a.save(),a.fillStyle="#000000",a.fillRect(0,0,r.width,r.height),a.translate(ir.x,ir.y),a.scale(oi,oi);let i={};for(let[s,n]of Object.entries(Qt))i[s]=Bi(s);a.lineWidth=1/oi,a.strokeStyle="#c0c0c0";for(let[s,n]of Object.entries(Qt))if(!n.moon&&n.orbit!==-2){a.beginPath(),n.belt||e.race.orbit_decayed&&s==="spc_home"?a.setLineDash([.01,.01]):a.setLineDash([]);let o=Jn(s);a.ellipse(o,0,Zn(n.dist,s),n.dist,0,0,Math.PI*2,!0),a.stroke()}a.fillStyle="#0000ff",a.strokeStyle="#0000ff";for(let s of e.space.shipyard.ships)s.transit>0&&(a.beginPath(),a.setLineDash([.1,.4]),a.moveTo(s.xy.x,s.xy.y),a.lineTo(s.destination.x,s.destination.y),a.stroke());for(let[s,n]of Object.entries(Qt)){if(e.race.orbit_decayed&&["spc_home","spc_moon"].includes(s))continue;let o="558888";if(d.space[s]&&d.space[s].info.syndicate()&&e.settings.space[s.substring(4)]){let l=At(s);o=((Math.round(255*(1-l))<<16)+(Math.round(255*l)<<8)).toString(16).padStart(6,0)}s==="spc_dwarf"?o="7132a8":(s==="spc_sun"||s==="tauceti")&&(o="f8ff2b"),a.fillStyle="#"+o,a.beginPath();let c=n.size/10;if(n.moon)switch(s){case"spc_moon":a.arc(i[s].x+.05,i[s].y+.05,c,0,Math.PI*2,!0);break;case"spc_titan":a.arc(i[s].x-.2,i[s].y-.2,c,0,Math.PI*2,!0);break;default:a.arc(i[s].x+.2,i[s].y+.2,c,0,Math.PI*2,!0);break}else{let l=n.size/10;switch(s){case"spc_sun":a.arc(i[s].x,i[s].y,l,0,Math.PI*2,!0);break;default:a.arc(i[s].x,i[s].y,l,0,Math.PI*2,!0);break}}a.fill()}a.fillStyle="#0000ff",a.strokeStyle="#0000ff";for(let s of e.space.shipyard.ships)s.transit>0&&(a.beginPath(),a.arc(s.xy.x,s.xy.y,.1,0,Math.PI*2,!0),a.fill());a.shadowOffsetX=2,a.shadowOffsetY=2,a.shadowBlur=2,a.shadowColor="rgba(0, 0, 0, 0.5)",a.fillStyle="#009aff",a.font=`${20/oi}px serif`;for(let s of e.space.shipyard.ships)s.transit>0&&a.fillText(s.name,s.xy.x+.15,s.xy.y-.15);a.fillStyle="#ffa500",a.font=`${25/oi}px serif`;for(let[s,n]of Object.entries(Qt))if(d.space[s]&&e.settings.space[s.substring(4)]){if(e.race.orbit_decayed&&["spc_home"].includes(s))continue;let o=d.space[s].info.name,c=typeof o=="function"?o():o;if(n.moon)switch(s){case"spc_moon":a.fillText(c,i[s].x+.1,i[s].y+.1);break;case"spc_titan":a.fillText(c,i[s].x-.3,i[s].y-.3);break;default:a.fillText(c,i[s].x+.25,i[s].y+.2);break}else switch(s){case"spc_sun":break;default:a.fillText(c,i[s].x,i[s].y-.2*n.size);break}}a.restore()}function H0(r){let a=$('
').appendTo(r),i={},s={},n=!1;ir={},oi=20,a.append($('').on("mouseup mouseover mouseout",()=>n=!1).on("mousedown",c=>{n=!0,s.x=c.clientX-ir.x,s.y=c.clientY-ir.y}).on("mousemove",c=>{n&&(ir.x=c.clientX-s.x,ir.y=c.clientY-s.y,Di())}).on("wheel",c=>(c.originalEvent.deltaY<0?(oi/=.8,ir.x=i.x+(ir.x-i.x)/.8,ir.y=i.y+(ir.y-i.y)/.8,Di()):(oi*=.8,ir.x=i.x+(ir.x-i.x)*.8,ir.y=i.y+(ir.y-i.y)*.8,Di()),!1)),$('').on("click",()=>{oi/=.8,ir.x=i.x+(ir.x-i.x)/.8,ir.y=i.y+(ir.y-i.y)/.8,Di()}),$('').on("click",()=>{oi*=.8,ir.x=i.x+(ir.x-i.x)*.8,ir.y=i.y+(ir.y-i.y)*.8,Di()}));let o=document.getElementById("mapCanvas").getBoundingClientRect();i.x=o.width/2,i.y=o.height/2,ir.x=i.x,ir.y=i.y,Di()}function U0(){$("#modalBox").append($('

Solar System

')),H0($("#modalBox"))}var Dt={eden_asphodel:{info:{name:t("eden_asphodel_name"),desc(){return e.tech.asphodel&&e.tech.asphodel>=5?`${t("eden_asphodel_desc")} ${t("eden_asphodel_desc_hostile")}`:`${t("eden_asphodel_desc")} ${t("eden_asphodel_desc_peaceful")}`},support:"encampment"},survery_meadows:{id:"eden-survery_meadows",title(){return t("eden_survery_meadows_title")},desc(){return $(this)[0].title()},reqs:{edenic:3},grant:["edenic",4],queue_complete(){return e.tech.edenic>=4?0:1},cost:{Oil(r,a){return 1e7}},effect(){return t("eden_survery_meadows_effect")},action(r){return u($(this)[0])?(L(t("eden_survery_meadows_action"),"info",!1,["progress"]),!0):!1}},encampment:{id:"eden-encampment",title:t("eden_encampment_title"),desc(){return`
${t("eden_encampment_title")}
${t("requires_power")}
`},reqs:{edenic:4},cost:{Money(r){return m("encampment",r,159e7,1.235,"eden")},Lumber(r){return m("encampment",r,86e7,1.235,"eden")},Iron(r){return m("encampment",r,19e7,1.235,"eden")},Coal(r){return m("encampment",r,235e5,1.235,"eden")}},effect(){let r=`
${t("eden_encampment_effect",[$(this)[0].support()])}
`;if(e.tech.hasOwnProperty("asphodel")&&e.tech.asphodel>=1){let a=U(250);r+=`
${t("plus_max_resource",[a,e.resource.Asphodel_Powder.name])}
`}if(x.ascension_trigger&&e.eden.hasOwnProperty("encampment")&&e.eden.encampment.asc){let a=d.interstellar.int_sirius.ascension_trigger.heatSink();a=a<0?Math.abs(a):0;let i=150+a**.95/10;r+=`
${t("plus_max_resource",[+i.toFixed(0),e.resource.Omniscience.name])}
`}if(e.race.warlord&&e.portal.mortuary&&e.portal.corpse_pile&&x.mortuary){let a=e.portal.corpse_pile.count*x.mortuary*2;r+=`
${t("plus_max_resource",[+a.toFixed(0),e.resource.Omniscience.name])}
`}return r+=`
${t("minus_power",[$(this)[0].powered()])}
`,r},support(){return 8},powered(){return he(616)},refresh:!0,action(r){return u($(this)[0])?(I("encampment","eden"),re($(this)[0]),e.resource.Asphodel_Powder.max+=U(250),!0):!1},struct(){return{d:{count:0,on:0,support:0,s_max:0,asc:!1},p:["encampment","eden"]}}},soul_engine:{id:"eden-soul_engine",title(){return t("eden_soul_engine_title")},desc(){return`
${t("eden_soul_engine_title")}
${t("space_support",[t("eden_asphodel_name")])}
`},reqs:{asphodel:4},cost:{Money(r){return m("soul_engine",r,98312500,1.235,"eden")},Neutronium(r){return m("soul_engine",r,45e5,1.235,"eden")},Orichalcum(r){return m("soul_engine",r,375e5,1.235,"eden")},Asphodel_Powder(r){return m("soul_engine",r,3450,1.235,"eden")}},effect(){return`
${t("space_used_support",[t("eden_asphodel_name")])}
${t("space_dwarf_reactor_effect1",[-$(this)[0].powered().toFixed(1)])}
`},s_type:"asphodel",support(){return-1},powered(){let r=-375;return e.race.warlord&&e.eden.corruptor&&e.tech.asphodel>=12&&(r*=1+(x.corruptor||0)*.06),it(r)},action(r){return u($(this)[0])?(I("soul_engine","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["soul_engine","eden"]}}},mech_station:{id:"eden-mech_station",title(){return e.race.warlord?t("eden_demon_station_title"):t("eden_mech_station_title")},desc(r){return!e.eden.hasOwnProperty("mech_station")||e.eden.mech_station.count<10||r?`
${e.race.warlord?t("eden_demon_station_title"):t("eden_mech_station_title")}
${t("requires_segments",[10])}
`:`
${e.race.warlord?t("eden_demon_station_title"):t("eden_mech_station_title")}
`},reqs:{asphodel:6},queue_size:1,queue_complete(){return 10-e.eden.mech_station.count},cost:{Money(r){return r?r+(e.eden.hasOwnProperty("mech_station")?e.eden.mech_station.count:0)<10?675e7:0:!e.eden.hasOwnProperty("mech_station")||e.eden.mech_station.count<10?675e7:0},Graphene(r){return r?r+(e.eden.hasOwnProperty("mech_station")?e.eden.mech_station.count:0)<10?825e5:0:!e.eden.hasOwnProperty("mech_station")||e.eden.mech_station.count<10?825e5:0},Infernite(r){return r?r+(e.eden.hasOwnProperty("mech_station")?e.eden.mech_station.count:0)<10?75e5:0:!e.eden.hasOwnProperty("mech_station")||e.eden.mech_station.count<10?75e5:0},Vitreloy(r){return r?r+(e.eden.hasOwnProperty("mech_station")?e.eden.mech_station.count:0)<10?666e5:0:!e.eden.hasOwnProperty("mech_station")||e.eden.mech_station.count<10?666e5:0},Asphodel_Powder(r){return r?r+(e.eden.hasOwnProperty("mech_station")?e.eden.mech_station.count:0)<10?7500:0:!e.eden.hasOwnProperty("mech_station")||e.eden.mech_station.count<10?7500:0}},effect(r){let a=(r?.count??0)+(e.eden.hasOwnProperty("mech_station")?e.eden.mech_station.count:0);if(a>=10){let i=`
${e.race.warlord?t("eden_demon_station_effect"):t("eden_mech_station_effect")}
`;return i+=`
${e.race.warlord?t("eden_demon_station_mechs",[e.eden.mech_station.mechs]):t("eden_mech_station_mechs",[e.eden.mech_station.mechs])}
`,i+=`
${t("eden_mech_station_effective",[e.eden.mech_station.effect])}
`,i}else{let s=10-a;return`
${e.race.warlord?t("eden_demon_station_effect"):t("eden_mech_station_effect")}
${t("space_dwarf_collider_effect2",[s])}
`}},special(){return!!(e.eden.hasOwnProperty("mech_station")&&e.eden.mech_station.count===10)},action(r){return e.eden.mech_station.count<10&&u($(this)[0])?(I("mech_station","eden"),e.eden.mech_station.count===10&&or(),!0):!1},struct(){return{d:{count:0,mode:3,mechs:0,effect:0},p:["mech_station","eden"]}}},asphodel_harvester:{id:"eden-asphodel_harvester",title(){return t("eden_asphodel_harvester_title")},desc(){return`
${t("eden_asphodel_harvester_title")}
${t("space_support",[t("eden_asphodel_name")])}
`},reqs:{asphodel:1},cost:{Money(r){return m("asphodel_harvester",r,3428e4,1.24,"eden")},Aluminium(r){return m("asphodel_harvester",r,22288800,1.24,"eden")},Infernite(r){return m("asphodel_harvester",r,666999,1.24,"eden")},Soul_Gem(r){return m("asphodel_harvester",r,2,1.18,"eden")}},effect(){let r=+D("asphodel_harvester","powder").toFixed(3),a=`
${t("space_used_support",[t("eden_asphodel_name")])}
${t("produce",[r,e.resource.Asphodel_Powder.name])}
`;return e.tech.hell_spire&&e.tech.hell_spire>=11&&(a+=`
${t("eden_asphodel_harvester_upgrade",[2])}
`),a},s_type:"asphodel",support(){return-1},powered(){return 0},action(r){return u($(this)[0])?(I("asphodel_harvester","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["asphodel_harvester","eden"]}}},ectoplasm_processor:{id:"eden-ectoplasm_processor",title:t("eden_ectoplasm_processor_title"),desc:`
${t("eden_ectoplasm_processor_title")}
${t("space_support",[t("eden_asphodel_name")])}
`,reqs:{asphodel:2},cost:{Money(r){return m("ectoplasm_processor",r,2265e4,1.24,"eden")},Titanium(r){return m("ectoplasm_processor",r,15e6,1.24,"eden")},Stanene(r){return m("ectoplasm_processor",r,18e6,1.24,"eden")},Asphodel_Powder(r){return m("ectoplasm_processor",r,1e3,1.24,"eden")}},effect(){let r=`
${t("space_used_support",[t("eden_asphodel_name")])}
`;return r+=`
${t("plus_max_resource",[N(5),t("job_ghost_trapper")])}
`,r},s_type:"asphodel",support(){return-1},powered(){return 0},action(r){return u($(this)[0])?(I("ectoplasm_processor","eden"),re($(this)[0]),e.civic.ghost_trapper.display=!0,!0):!1},struct(){return{d:{count:0,on:0},p:["ectoplasm_processor","eden"]}},flair(){return t("eden_ectoplasm_processor_flair")}},research_station:{id:"eden-research_station",title(){return t("eden_research_station_title")},desc:`
${t("eden_research_station_title")}
${t("space_support",[t("eden_asphodel_name")])}
`,reqs:{asphodel:3},cost:{Money(r){return m("research_station",r,39185e3,1.24,"eden")},Cement(r){return m("research_station",r,1e8,1.24,"eden")},Asphodel_Powder(r){return m("research_station",r,1250,1.24,"eden")},Soul_Gem(r){return m("research_station",r,10,1.12,"eden")}},effect(){let a=200+(e.blood.attract?e.blood.attract*5:0);e.tech.science&&e.tech.science>=22&&x.embassy&&x.symposium&&(a*=1+x.symposium*qt("gxy_gorddon"));let i=`
${t("space_used_support",[t("eden_asphodel_name")])}
`;if(i+=`
${t("eden_research_station_effect",[qe(a).toFixed(0),t("job_ghost_trapper")])}
`,e.tech.science&&e.tech.science>=22){let s=1;e.race.warlord&&e.eden.corruptor&&(s=1+(x.corruptor||0)*.04),i+=`
${t("plus_max_resource",[Math.round(777*s),e.resource.Omniscience.name])}
`;let n=$e(e.civic.ghost_trapper.workers,"ghost_trapper");n*=at(n,"science"),n*=e.race.pompous?1-y.pompous.vars()[0]/100:1,n=qe(n);let o=n*325e-7*s;i+=`
${t("gain",[+o.toFixed(5),e.resource.Omniscience.name])}
`}return i},s_type:"asphodel",support(){return-1},powered(){return 0},action(r){return u($(this)[0])?(I("research_station","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["research_station","eden"]}}},warehouse:{id:"eden-warehouse",title(){return e.tech.storage<=2?t("city_shed_title1"):e.tech.storage>=4?t("city_shed_title3"):t("city_shed_title2")},desc(){let r=e.tech.storage>=3?e.tech.storage>=4?t("city_shed_desc_size3"):t("city_shed_desc_size2"):t("city_shed_desc_size1");return t("city_shed_desc",[r])},reqs:{asphodel:7},cost:{Money(r){return m("warehouse",r,3e8,1.28,"eden")},Steel(r){return m("warehouse",r,15e6,1.28,"eden")},Alloy(r){return m("warehouse",r,18e6,1.28,"eden")},Cement(r){return m("warehouse",r,275e5,1.28,"eden")}},res(){let r=["Lumber","Stone","Chrysotile","Furs","Copper","Iron","Aluminium","Cement","Coal","Nano_Tube","Neutronium","Adamantite","Infernite","Alloy","Polymer","Iridium","Graphene","Stanene","Bolognium","Orichalcum","Asphodel_Powder"];return e.tech.storage>=3&&e.resource.Steel.display&&r.push("Steel"),e.tech.storage>=4&&e.resource.Titanium.display&&r.push("Titanium"),r},val(r){switch(r){case"Lumber":return e.race.warlord?5500:3750;case"Stone":return e.race.warlord?5500:3750;case"Chrysotile":return 3750;case"Furs":return 2125;case"Copper":return e.race.warlord?3800:1900;case"Iron":return e.race.warlord?3300:1750;case"Aluminium":return e.race.warlord?3750:1600;case"Cement":return e.race.warlord?1800:1400;case"Coal":return e.race.warlord?800:600;case"Steel":return e.race.warlord?450:300;case"Titanium":return e.race.warlord?325:200;case"Nano_Tube":return e.race.warlord?350:150;case"Neutronium":return e.race.warlord?65:40;case"Adamantite":return e.race.warlord?120:90;case"Infernite":return e.race.warlord?22:18;case"Alloy":return e.race.warlord?350:250;case"Polymer":return e.race.warlord?350:250;case"Iridium":return e.race.warlord?375:225;case"Graphene":return e.race.warlord?250:175;case"Stanene":return e.race.warlord?250:175;case"Bolognium":return e.race.warlord?75:45;case"Orichalcum":return e.race.warlord?62:22;case"Asphodel_Powder":return e.eden.stabilizer?.1+e.eden.stabilizer.count*.015*(e.race.warlord&&e.eden.corruptor&&x.corruptor?1+x.corruptor*.05:1):.1;default:return 0}},wide:!0,effect(){let r='
',a=Nr(e.race.warlord?1:.2);e.race.warlord&&e.eden.corruptor&&(a*=1+(x.corruptor||0)*(e.tech.asphodel>=12?e.tech.asphodel>=13?.16:.12:.08));for(let i of $(this)[0].res())if(e.resource[i].display){let s=Me(+U(+($(this)[0].val(i)*a)).toFixed(0));r=r+`${t("plus_max_resource",[s,e.resource[i].name])}`}return r=r+"
",r},action(r){if(u($(this)[0])){I("warehouse","eden");let a=Nr(e.race.warlord?1:.2);e.race.warlord&&e.eden.corruptor&&(a*=1+(x.corruptor||0)*(e.tech.asphodel>=12?e.tech.asphodel>=13?.16:.12:.08));for(let i of $(this)[0].res())e.resource[i].display&&(e.resource[i].max+=U($(this)[0].val(i)*a));return!0}return!1},struct(){return{d:{count:0},p:["warehouse","eden"]}}},stabilizer:{id:"eden-stabilizer",title(){return t("eden_stabilizer_title")},desc(){return t("eden_stabilizer_title")},reqs:{asphodel:8},cost:{Money(r){return m("stabilizer",r,8e8,1.25,"eden")},Neutronium(r){return m("stabilizer",r,75e5,1.25,"eden")},Vitreloy(r){return m("stabilizer",r,29e6,1.25,"eden")},Elerium(r){return m("stabilizer",r,7500,1.25,"eden")},Asphodel_Powder(r){return m("stabilizer",r,4250,1.25,"eden")}},queue_complete(){return e.eden.warehouse.count-e.eden.stabilizer.count},effect(){let r=`
${t("eden_stabilizer_requirement",[t("city_shed_title3")])}
`,a=15,i=8;if(x.ascension_trigger&&e.eden.hasOwnProperty("encampment")&&e.eden.encampment.asc){let s=d.interstellar.int_sirius.ascension_trigger.heatSink();s=s<0?Math.abs(s):0,s>0&&(i*=1+s/17500)}return e.race.warlord&&e.eden.corruptor&&x.corruptor&&(i+=.4*x.corruptor,a*=1+x.corruptor*.05),i>99&&(i=99),r+=`
${t("eden_stabilizer_effect1",[e.resource.Asphodel_Powder.name,+i.toFixed(1)])}
`,r+=`
${t("eden_stabilizer_effect2",[e.resource.Asphodel_Powder.name,t("city_shed_title3"),+a.toFixed(1)])}
`,r+=`
${t("eden_stabilizer_limit",[e?.eden?.warehouse?.count||0])}
`,r},action(r){return e.eden.stabilizer.count${t("eden_rune_gate_title")}
${t("requires_segments",[100])}
`:`
${t("eden_rune_gate_title")}
`},reqs:{elysium:1},condition(){return e.eden.rune_gate.count<100},queue_size:10,queue_complete(){return 100-e.eden.rune_gate.count},cost:{Money(r){return r?r+(e.eden.hasOwnProperty("rune_gate")?e.eden.rune_gate.count:0)<100?1e9:0:!e.eden.hasOwnProperty("rune_gate")||e.eden.rune_gate.count<100?1e9:0},Omniscience(r){return r?r+(e.eden.hasOwnProperty("rune_gate")?e.eden.rune_gate.count:0)<100?1e4:0:!e.eden.hasOwnProperty("rune_gate")||e.eden.rune_gate.count<100?1e4:0},Copper(r){return r?r+(e.eden.hasOwnProperty("rune_gate")?e.eden.rune_gate.count:0)<100?42e7:0:!e.eden.hasOwnProperty("rune_gate")||e.eden.rune_gate.count<100?42e7:0},Nano_Tube(r){return r?r+(e.eden.hasOwnProperty("rune_gate")?e.eden.rune_gate.count:0)<100?35e6:0:!e.eden.hasOwnProperty("rune_gate")||e.eden.rune_gate.count<100?35e6:0},Bolognium(r){return r?r+(e.eden.hasOwnProperty("rune_gate")?e.eden.rune_gate.count:0)<100?75e5:0:!e.eden.hasOwnProperty("rune_gate")||e.eden.rune_gate.count<100?75e5:0},Asphodel_Powder(r){return r?r+(e.eden.hasOwnProperty("rune_gate")?e.eden.rune_gate.count:0)<100?25e3:0:!e.eden.hasOwnProperty("rune_gate")||e.eden.rune_gate.count<100?25e3:0}},effect(r){let a=(r?.count??0)+(e.eden.hasOwnProperty("rune_gate")?e.eden.rune_gate.count:0);if(a>=100)return`
${t("eden_rune_gate_effect")}
`;{let s=100-a;return`
${t("eden_rune_gate_effect")}
${t("space_dwarf_collider_effect2",[s])}
`}},action(r){return e.eden.rune_gate.count<100&&u($(this)[0])?(I("rune_gate","eden"),e.eden.rune_gate.count===100&&(e.eden.rune_gate_open.count=1,e.settings.eden.elysium=!0,e.tech.elysium=2,or()),!0):!1},struct(){return{d:{count:0},p:["rune_gate","eden"]}}},rune_gate_open:{id:"space-rune_gate_complete",title:t("eden_rune_gate_title"),desc(){return`
${t("eden_rune_gate_title")}
`},wiki:!1,reqs:{elysium:1},condition(){return e.eden.rune_gate.count===100},queue_complete(){return 0},cost:{},effect(){return`
${t("eden_rune_gate_open",[t("eden_elysium_name")])}
`},action(r){return!1},struct(){return{d:{count:0},p:["rune_gate_open","eden"]}}},bunker:{id:"eden-bunker",title:t("eden_bunker_title"),desc:`
${t("eden_bunker_title")}
${t("space_support",[t("eden_asphodel_name")])}
`,reqs:{asphodel:9},cost:{Money(r){return m("bunker",r,777e6,1.2,"eden")},Stone(r){return m("bunker",r,358e6,1.2,"eden")},Furs(r){return m("bunker",r,666e5,1.2,"eden")},Asphodel_Powder(r){return m("bunker",r,9999,1.2,"eden")}},effect(){let r=`
${t("space_used_support",[t("eden_asphodel_name")])}
`;if(r+=`
${t("plus_max_soldiers",[$(this)[0].soldiers()])}
`,e.race.universe==="evil"&&e.race.warlord&&(r+=`
${t("plus_max_resource",[1,e.resource.Authority.name])}
`),e.tech.celestial_warfare&&e.tech.celestial_warfare>=4&&(!e.tech.elysium||e.tech.elysium<8)&&(r+=`
${t("eden_bunker_effect",[3])}
`),e.tech.celestial_warfare&&e.tech.celestial_warfare>=5){let a=10;e.blood.lust&&(a+=e.blood.lust*.2);let i=_e("militant",0);i&&(a*=1+i/100),r+=`
${t("city_boot_camp_effect",[+a.toFixed(2)])}
`}return r},s_type:"asphodel",support(){return-1},powered(){return 0},action(r){return u($(this)[0])?(I("bunker","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["bunker","eden"]}},soldiers(){let r=e.race.grenadier?3:5;return N(r)}},bliss_den:{id:"eden-bliss_den",title:t("eden_bliss_den_title"),desc:`
${t("eden_bliss_den_title")}
${t("space_support",[t("eden_asphodel_name")])}
`,reqs:{asphodel:10},cost:{Money(r){return m("bliss_den",r,45e7,1.22,"eden")},Furs(r){return m("bliss_den",r,29e6,1.22,"eden")},Asphodel_Powder(r){return m("bliss_den",r,35e3,1.22,"eden")},Plywood(r){return m("bliss_den",r,1e7,1.22,"eden")},Soul_Gem(r){return m("bliss_den",r,10,1.22,"eden")}},effect(){let r=8,a=2,i=`
${t("space_used_support",[t("eden_asphodel_name")])}
`;return e.race.joyless||(i+=`
${t("space_red_vr_center_effect1",[r])}
`),i+=`
${t("space_red_vr_center_effect2",[a])}
`,i},s_type:"asphodel",support(){return-1},powered(){return 0},action(r){return u($(this)[0])?(I("bliss_den","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["bliss_den","eden"]}},flair(){return t("eden_bliss_den_flair")}},rectory:{id:"eden-rectory",title:t("eden_rectory_title"),desc:`
${t("eden_rectory_title")}
${t("requires_power")}
`,reqs:{asphodel:11},not_trait:["warlord"],cost:{Money(r){return m("rectory",r,275e6,1.24,"eden")},Copper(r){return m("rectory",r,182e5,1.24,"eden")},Brick(r){return m("rectory",r,75e5,1.24,"eden")},Soul_Gem(r){return m("rectory",r,18,1.24,"eden")}},effect(){let r=`
${t("eden_encampment_effect",[$(this)[0].support()])}
`;return r+=`
${t("plus_max_citizens",[$(this)[0].citizens()])}
`,e.genes.ancients&&e.genes.ancients>=4&&(r+=`
${t("plus_max_resource",[N(1),e.civic?.priest?.name||t("job_priest")])}
`),r+=`
${t("minus_power",[$(this)[0].powered()])}
`,r},support(){return 1},powered(){return he(50)},action(r){return u($(this)[0])?(I("rectory","eden"),re($(this)[0])&&(e.resource[e.race.species].max+=$(this)[0].citizens()),!0):!1},struct(){return{d:{count:0,on:0},p:["rectory","eden"]}},citizens(){let r=4;return e.race.high_pop&&(r*=y.high_pop.vars()[0]),r},flair(){return t("eden_rectory_flair")}},corruptor:{id:"eden-corruptor",title:t("eden_corruptor_title"),desc:`
${t("eden_corruptor_title")}
${t("requires_power")}
`,reqs:{asphodel:11},trait:["warlord"],wiki:!!e.race.warlord,cost:{Money(r){return m("corruptor",r,275e6,1.24,"eden")},Furs(r){return m("corruptor",r,175e5,1.24,"eden")},Copper(r){return m("corruptor",r,182e5,1.24,"eden")},Soul_Gem(r){return m("corruptor",r,8,1.24,"eden")}},effect(){let r=Me(U(200)),a=e.tech?.asphodel>=12?Dt.eden_asphodel.warehouse.title():`${t("wiki_tech_tree_asphodel")} ${Dt.eden_asphodel.warehouse.title()}`,i=`
${t("eden_encampment_effect",[$(this)[0].support()])}
`;return i+=`
${t("eden_corruptor_effect",[4,Dt.eden_asphodel.research_station.title(),e.resource.Omniscience.name])}
`,i+=`
${t("eden_corruptor_effect",[e.tech?.asphodel>=12?e.tech?.asphodel>=13?16:12:8,a,t("tab_storage")])}
`,e.tech?.asphodel>=12&&(i+=`
${t("eden_corruptor_effect",[e.tech?.asphodel>=13?12:10,d.portal.prtl_lake.harbor.title(),t("tab_storage")])}
`),i+=`
${t("eden_corruptor_effect2",[5,Dt.eden_asphodel.stabilizer.title()])}
`,i+=`
${t("production",[6,Dt.eden_asphodel.asphodel_harvester.title()])}
`,e.tech?.asphodel>=12&&(i+=`
${t("eden_corruptor_effect",[8,Dt.eden_elysium.eternal_bank.title(),t("resource_Money_name")])}
`,i+=`
${t("eden_corruptor_effect",[6,Dt.eden_asphodel.soul_engine.title(),t("power")])}
`),e.tech?.asphodel>=13&&(i+=`
${t("eden_corruptor_effect2",[3,Dt.eden_isle.spirit_battery.title()])}
`),i+=`
${t("plus_max_resource",[r,e.resource.Elerium.name])}
`,i+=`
${t("minus_power",[$(this)[0].powered()])}
`,i},support(){return 1},powered(){return he(25)},action(r){return u($(this)[0])?(I("corruptor","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["corruptor","eden"]}}}},eden_elysium:{info:{name:t("eden_elysium_name"),desc:t("eden_elysium_desc"),prop(){let a=`${e.tech.world_control&&!e.race.truepath?t("civics_garrison_peacekeepers"):t("civics_garrison_soldiers")} / {{ filter(max, 's_max') }}`;return a+=`${t("civics_garrison_wounded")} {{ wounded }}`,a+=``,a},bind(){return e.civic.garrison},filter(r,a){switch(a){case"stationed":return Ge();case"s_max":return Ge(!0);case"m_use":return t("civics_garrison_mercenary_cost",[Math.round(ui()).toLocaleString()])}}},survey_fields:{id:"eden-survey_fields",title:t("eden_survey_fields"),desc:t("eden_survey_fields"),reqs:{elysium:2},grant:["elysium",3],cost:{Money(){return 1e9},Oil(){return 1e7},Helium_3(){return 5e6}},effect:t("eden_survey_fields_effect"),action(r){return u($(this)[0])?(L(t("eden_survey_fields_msg"),"info",!1,["progress"]),e.eden.fortress={fortress:1e3,patrols:20,armory:100,detector:100},!0):!1},post(){e.tech.elysium&&e.tech.elysium===3&&(or(),Ie("eden-survey_fields"))}},fortress:{id:"eden-fortress",title:t("eden_fortress"),desc:t("eden_fortress"),queue_complete(){return 0},reqs:{elysium:3},condition(){return e.tech.elysium===3},effect(){let r=`
${t("eden_fortress_rating",[e.eden.fortress?e.eden.fortress.fortress/10:0])}
`;return r+=`
${t("eden_fortress_patrols",[e.eden.fortress?e.eden.fortress.patrols:0])}
`,r+=`
${t("eden_fortress_detect",[e.eden.fortress?e.eden.fortress.detector:0])}
`,r+=`
${t("eden_fortress_armory",[e.eden.fortress?e.eden.fortress.armory:0])}
`,r},action(r){return!1}},siege_fortress:{id:"eden-siege_fortress",title:t("eden_siege_fortress"),desc:t("eden_siege_fortress"),queue_complete(){return 0},reqs:{elysium:3},condition(){return e.tech.elysium===3&&e.eden.fortress.fortress>0},cost:{Troops(){return N(100)}},effect(){let r=`
${t("eden_siege_fortress_effect")}
`;return e.eden.hasOwnProperty("fortress")&&e.eden.fortress.hasOwnProperty("siege")&&(r+=`
${t("eden_siege_fortress_result")}
`,r+=`
${t("eden_siege_fortress_lost",[e.eden.fortress.siege.loss])}
`,r+=`
${t("eden_siege_fortress_damage",[e.eden.fortress.siege.damage])}
`,r+=`
${t("eden_fortress_rating",[e.eden.fortress?e.eden.fortress.fortress/10:0])}
`),r},action(r){let a=N(100);if(Ge()e.civic.garrison.workers&&(e.civic.garrison.wounded=e.civic.garrison.workers),e.eden.fortress.fortress-=l,e.eden.fortress.fortress<0&&(e.eden.fortress.fortress=0),e.eden.fortress.siege={loss:o,damage:l/10},e.eden.fortress.fortress<=0?(L(t("eden_siege_fortress_fall"),"success",!1,["combat"]),e.tech.elysium=4):L(t("eden_siege_fortress_success",[l/10]),"success",!1,["combat"])}return or(),!1}},raid_supplies:{id:"eden-raid_supplies",title:t("eden_raid_supplies"),desc:t("eden_raid_supplies"),queue_complete(){return 0},reqs:{elysium:3},condition(){return e.tech.elysium===3&&e.eden.fortress.armory>0},cost:{Troops(){return N(50)}},effect(){let r=`
${t("eden_raid_supplies_effect")}
`;return e.eden.hasOwnProperty("fortress")&&e.eden.fortress.hasOwnProperty("raid")&&(r+=`
${t("eden_raid_fortress_result")}
`,r+=`
${t("eden_siege_fortress_lost",[e.eden.fortress.raid.loss])}
`,r+=`
${t("eden_siege_fortress_damage",[e.eden.fortress.raid.damage])}
`,r+=`
${t("eden_fortress_armory",[e.eden.fortress?e.eden.fortress.armory:0])}
`),r},action(r){let a=N(50);if(Ge()e.civic.garrison.workers&&(e.civic.garrison.wounded=e.civic.garrison.workers),e.eden.fortress.armory-=c,e.eden.fortress.armory<0&&(e.eden.fortress.armory=0),e.eden.fortress.raid={loss:n,damage:c},L(t("eden_raid_fortress_success",[c]),"success",!1,["combat"]),de()}return or(),!1}},ambush_patrol:{id:"eden-ambush_patrol",title:t("eden_ambush_patrol"),desc:t("eden_ambush_patrol"),queue_complete(){return 0},reqs:{elysium:3},condition(){return e.tech.elysium===3&&e.eden.fortress.patrols>0},cost:{Troops(){return N(25)}},effect(){let r=`
${t("eden_ambush_patrol_effect")}
`;return e.eden.hasOwnProperty("fortress")&&e.eden.fortress.hasOwnProperty("ambush")&&(r+=`
${t("eden_ambush_patrol_result")}
`,r+=`
${t("eden_siege_fortress_lost",[e.eden.fortress.ambush.loss])}
`,r+=`
${t("eden_ambush_patrol_damage",[e.eden.fortress.ambush.damage?t("true"):t("false")])}
`,r+=`
${t("eden_fortress_patrols",[e.eden.fortress?e.eden.fortress.patrols:0])}
`),r},action(r){let a=N(25);if(Ge()Math.floor(R(0,e.eden.fortress.detector*2,!0))){let i=Math.floor(R(0,a,!0));i=eo(i,a);let s=a-i;e.civic.garrison.protest+=i,br(i),e.civic.garrison.wounded+=Math.floor(R(0,s,!0)),e.civic.garrison.wounded>e.civic.garrison.workers&&(e.civic.garrison.wounded=e.civic.garrison.workers),e.eden.fortress.patrols--,e.eden.fortress.ambush={loss:i,damage:!0},L(t("eden_ambush_patrol_success"),"success",!1,["combat"]),de()}else e.eden.fortress.ambush={loss:a,damage:!1},e.civic.garrison.protest+=a,br(a),L(t("eden_ambush_patrol_fail"),"warning",!1,["combat"]);return or(),!1}},ruined_fortress:{id:"eden-ruined_fortress",title:t("eden_ruined_fortress"),desc:t("eden_ruined_fortress"),queue_complete(){return 0},reqs:{elysium:4},condition(){return e.tech.elysium<8},wiki:!1,effect(){return t("eden_ruined_fortress_effect")},action(r){return!1}},scout_elysium:{id:"eden-scout_elysium",title:t("eden_scout_elysium_title"),desc:t("eden_scout_elysium_title"),reqs:{elysium:4},grant:["elysium",5],queue_complete(){return e.tech.elysium>=5?0:1},cost:{Money(){return 1e10},Oil(){return 9e6},Helium_3(){return 6e6},Troops(){return N(100)}},effect:t("eden_scout_elysium_effect"),action(r){return u($(this)[0])?(L(t("eden_scout_elysium_result"),"info",!1,["progress"]),e.settings.eden.isle=!0,e.civic.garrison.protest+=N(50),br(N(50)),!0):!1}},fire_support_base:{id:"eden-fire_support_base",title:t("eden_fire_support_base_title"),desc(r){return!e.eden.hasOwnProperty("fire_support_base")||e.eden.fire_support_base.count<100||r?`
${t("eden_fire_support_base_title")}
${t("requires_segments",[100])}
`:`
${t("eden_fire_support_base_title")}
`},reqs:{elysium:8},queue_size:10,queue_complete(){return 100-e.eden.fire_support_base.count},cost:{Money(r){return r?r+(e.eden.hasOwnProperty("fire_support_base")?e.eden.fire_support_base.count:0)<100?25e8:0:!e.eden.hasOwnProperty("fire_support_base")||e.eden.fire_support_base.count<100?25e8:0},Stone(r){return r?r+(e.eden.hasOwnProperty("fire_support_base")?e.eden.fire_support_base.count:0)<100?235e6:0:!e.eden.hasOwnProperty("fire_support_base")||e.eden.fire_support_base.count<100?235e6:0},Neutronium(r){return r?r+(e.eden.hasOwnProperty("fire_support_base")?e.eden.fire_support_base.count:0)<100?375e4:0:!e.eden.hasOwnProperty("fire_support_base")||e.eden.fire_support_base.count<100?375e4:0},Polymer(r){return r?r+(e.eden.hasOwnProperty("fire_support_base")?e.eden.fire_support_base.count:0)<100?65e6:0:!e.eden.hasOwnProperty("fire_support_base")||e.eden.fire_support_base.count<100?65e6:0},Elysanite(r){return r?r+(e.eden.hasOwnProperty("fire_support_base")?e.eden.fire_support_base.count:0)<100?625e3:0:!e.eden.hasOwnProperty("fire_support_base")||e.eden.fire_support_base.count<100?625e3:0},Elerium(){return e.tech.elysium>=10&&e.eden.fire_support_base.count===100&&e.tech.isle&&e.tech.isle===1?25e4:0}},effect(r){let a=(r?.count??0)+(e.eden.hasOwnProperty("fire_support_base")?e.eden.fire_support_base.count:0);if(a>=100){let i=`
${t("plus_max_soldiers",[$(this)[0].soldiers()])}
`;return e.tech.elysium&&e.tech.elysium>=10&&e.tech.isle===1&&(e.resource.Elerium.amount>=25e4?i+=`
${t("eden_fire_support_base_effect")}
`:i+=`
${t("eden_fire_support_base_effect")}
`,i+=`
${t("eden_fire_support_base_effect2",[Me(25e4),e.resource.Elerium.name])}
`),i}else{let s=100-a;return`
${t("eden_fire_support_base_build")}
${t("space_dwarf_collider_effect2",[s])}
`}},action(r){if(e.eden.fire_support_base.count<100&&u($(this)[0]))return I("fire_support_base","eden"),e.eden.fire_support_base.count===100&&!e.tech.isle&&(e.eden.enemy_isle={wt:100,et:100,g:100},e.tech.isle=1,or(),de()),!0;if(e.eden.fire_support_base.count===100&&e.tech.elysium>=10&&e.tech.isle&&e.tech.isle===1&&u($(this)[0])){let a=null,i=null,s=[];if(e.eden.enemy_isle||(e.eden.enemy_isle={wt:100,et:100,g:100}),e.eden.enemy_isle.wt>0&&s.push("wt"),e.eden.enemy_isle.g>0&&s.push("g"),e.eden.enemy_isle.et>0&&s.push("et"),e.eden.pillbox&&e.eden.pillbox.staffed>0){let c=+(Math.round(nt(e.eden.pillbox.staffed,"army",0))/(e.race.warlord?1250:75)).toFixed(0);c>100&&(c=100),e.eden.fire_support_base.count=Math.floor(c)}else e.eden.fire_support_base.count=0;e.eden.fire_support_base.count<100&&L(t("eden_fire_support_base_counterattack",[t("eden_fire_support_base_title")]),"danger",!1,["progress"]),a=s[Math.floor(R(0,s.length))],a==="wt"?i="#eden-west_tower .button":a==="et"?i="#eden-east_tower .button":a==="g"&&(i="#eden-isle_garrison .button");let n=!1;e.eden.enemy_isle[a]-=Math.floor(R(25,75)),e.eden.enemy_isle[a]<=0&&(e.eden.enemy_isle[a]=0,n=!0);let o=$('
');if($(i).append(o),setTimeout(function(){o.addClass("burn")},500),setTimeout(function(){o.addClass("b")},600),setTimeout(function(){o.addClass("c")},2500),setTimeout(function(){$(`${i} .mininuke`).remove()},4500),e.eden.enemy_isle.wt===0&&e.eden.enemy_isle.g===0&&e.eden.enemy_isle.et===0)return e.tech.isle=2,e.settings.eden.palace=!0,M(Dt.eden_elysium.north_pier),M(Dt.eden_isle.south_pier),de(),or(),!0;n&&or()}return!1},struct(){return{d:{count:0,on:0},p:["fire_support_base","eden"]}},soldiers(){let r=e.race.grenadier?15:25;return N(r)}},elysanite_mine:{id:"eden-elysanite_mine",title:t("eden_elysanite_mine_title"),desc:`
${t("eden_elysanite_mine_title")}
${t("requires_power")}
`,reqs:{elysium:6},cost:{Money(r){return m("elysanite_mine",r,566e6,1.24,"eden")},Adamantite(r){return m("elysanite_mine",r,18e6,1.24,"eden")},Wrought_Iron(r){return m("elysanite_mine",r,1e7,1.24,"eden")}},effect(){let r=`
${t("plus_max_resource",[N(2),t("job_elysium_miner")])}
`;return r+=`
${t("minus_power",[$(this)[0].powered()])}
`,r},powered(){return he(25)},action(r){return u($(this)[0])?(I("elysanite_mine","eden"),re($(this)[0]),e.civic.elysium_miner.display=!0,!0):!1},struct(){return{d:{count:0,on:0},p:["elysanite_mine","eden"]}}},sacred_smelter:{id:"eden-sacred_smelter",title(){return t("eden_sacred_smelter_title")},desc(){return`
${t("eden_sacred_smelter_title")}
${t("requires_power")}
`},reqs:{elysium:7},cost:{Money(r){return m("sacred_smelter",r,625e6,1.25,"eden")},Iridium(r){return m("sacred_smelter",r,25e6,1.25,"eden")},Elysanite(r){return m("sacred_smelter",r,45e5,1.25,"eden")},Scarletite(r){return m("sacred_smelter",r,125e4,1.25,"eden")}},effect(){let r=`
${t("interstellar_stellar_forge_effect3",[$(this)[0].smelting()])}
`;return e.tech.elysium&&e.tech.elysium>=18&&(r+=`
${t("city_foundry_effect1",[N(3)])}
`),`${r}
${t("minus_power",[$(this)[0].powered()])}
`},powered(){return he(33)},smelting(){return 5},special:!0,action(r){return u($(this)[0])?(I("sacred_smelter","eden"),re($(this)[0])&&wr($(this)[0].smelting(),"Steel"),!0):!1},struct(){return{d:{count:0,on:0},p:["sacred_smelter","eden"]}}},elerium_containment:{id:"eden-elerium_containment",title(){return t("eden_elerium_containment",[e.resource.Elerium.name])},desc(){return`
${t("eden_elerium_containment",[e.resource.Elerium.name])}
${t("requires_power")}
`},reqs:{elysium:11},cost:{Money(r){return m("elerium_containment",r,45e8,1.28,"eden")},Graphene(r){return m("elerium_containment",r,1e8,1.28,"eden")},Aerogel(r){return m("elerium_containment",r,88e6,1.28,"eden")},Elysanite(r){return m("elerium_containment",r,25e6,1.28,"eden")}},effect(){let r=Me(U(1e3));return`
${t("plus_max_resource",[r,e.resource.Elerium.name])}
${t("minus_power",[$(this)[0].powered()])}
`},powered(){return he(50)},action(r){return u($(this)[0])?(I("elerium_containment","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["elerium_containment","eden"]}}},pillbox:{id:"eden-pillbox",title(){return t("eden_pillbox_title")},desc(){return`
${t("eden_pillbox_title")}
${t("requires_soldiers")}
${t("requires_power")}
`},reqs:{elysium:9},cost:{Money(r){return m("pillbox",r,15e8,1.26,"eden")},Cement(r){return m("pillbox",r,5e8,1.26,"eden")},Steel(r){return m("pillbox",r,65e6,1.26,"eden")},Nanoweave(r){return m("pillbox",r,38e6,1.26,"eden")}},effect(){let r=+(Math.round(nt(e.eden.pillbox&&e.eden.pillbox.staffed?e.eden.pillbox.staffed:N(10),"army",0))/(e.race.warlord?1250:75)).toFixed(1);r>100&&(r=100);let a="";return(!e.tech.isle||e.tech.isle===1)&&(a+=`
${t("eden_pillbox_effect",[r])}
`),e.tech.elysium&&e.tech.elysium>=12&&!e.race.joyless&&(a+=`
${t("eden_restaurant_effect",[.35,t("eden_restaurant_bd")])}
`),a+=`
${t("portal_guard_post_effect2",[N(10),$(this)[0].powered()])}
`,a},powered(){return he(12)},action(r){return u($(this)[0])?(I("pillbox","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0,staffed:0},p:["pillbox","eden"]}}},restaurant:{id:"eden-restaurant",title(){return e.eden.restaurant&&e.eden.restaurant.count>=10?t("eden_restaurant_bd"):t("eden_restaurant_title")},desc(){return`
${t("eden_restaurant_title")}
${t("requires_power_combo",[e.resource.Food.name])}
`},reqs:{elysium:12},cost:{Money(r){return m("restaurant",r,425e7,1.26,"eden")},Oil(r){return m("restaurant",r,1e6,1.26,"eden")},Polymer(r){return m("restaurant",r,11e7,1.26,"eden")},Sheet_Metal(r){return m("restaurant",r,25e6,1.26,"eden")}},effect(){let r=25e4,a=0;a+=e.eden.hasOwnProperty("pillbox")&&x.pillbox?.35*x.pillbox:0,a+=(e.civic?.elysium_miner?.workers??0)*.15,a+=e.eden.hasOwnProperty("archive")&&x.archive?.4*x.archive:0;let i="";return e.race.joyless||(i+=`
${t("space_red_vr_center_effect1",[a.toFixed(1)])}
`),i+=`
${t("interstellar_alpha_starport_effect3",[Me(r),e.resource.Food.name])}
`,i+=`
${t("minus_power",[$(this)[0].powered()])}
`,i},powered(){return he(25)},action(r){return u($(this)[0])?(I("restaurant","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["restaurant","eden"]}}},eternal_bank:{id:"eden-eternal_bank",title(){return t("eden_eternal_bank_title")},desc(){return`
${t("eden_eternal_bank_title")}
${t("requires_power")}
`},reqs:{elysium:13},cost:{Money(r){return m("eternal_bank",r,Oe("untrustworthy",25e8),1.26,"eden")},Bolognium(r){return m("eternal_bank",r,Oe("untrustworthy",1e7),1.26,"eden")},Orichalcum(r){return m("eternal_bank",r,Oe("untrustworthy",125e5),1.26,"eden")},Mythril(r){return m("eternal_bank",r,Oe("untrustworthy",75e5),1.26,"eden")}},effect(){let r=U(_r()*(e.race.warlord?20:10));return e.race.warlord&&e.eden.corruptor&&e.tech.asphodel>=12&&(r*=1+(x.corruptor||0)*.08),r=(+r.toFixed(0)).toLocaleString(),t("plus_max_resource",[`$${r}`,t("resource_Money_name")])},action(r){return u($(this)[0])?(I("eternal_bank","eden"),e.resource.Money.max+=U(_r()*(e.race.warlord?20:10)),!0):!1},struct(){return{d:{count:0},p:["eternal_bank","eden"]}}},archive:{id:"eden-archive",title(){return e.eden.archive&&e.eden.archive.count>=10?t("eden_archive_bd"):t("eden_archive_title")},desc(){return`
${t("eden_archive_title")}
${t("requires_power")}
`},reqs:{elysium:14},cost:{Money(r){return m("archive",r,375e7,1.26,"eden")},Nano_Tube(r){return m("archive",r,9e7,1.26,"eden")},Asphodel_Powder(r){return m("archive",r,5e4,1.26,"eden")},Elysanite(r){return m("archive",r,35e6,1.26,"eden")},Soul_Gem(r){return m("archive",r,99,1.26,"eden")}},effect(){let r=`
${t("plus_max_resource",[1013,e.resource.Omniscience.name])}
`;return e.tech.elysium&&e.tech.elysium>=12&&(r+=`
${t("eden_restaurant_effect",[.4,t("eden_restaurant_bd")])}
`),r+=`
${t("minus_power",[$(this)[0].powered()])}
`,r},powered(){return he(75)},action(r){return u($(this)[0])?(I("archive","eden"),re($(this)[0]),e.tech.elysium===14&&(e.tech.elysium=15,de()),!0):!1},struct(){return{d:{count:0,on:0},p:["archive","eden"]}}},north_pier:{id:"eden-north_pier",title(){return t("eden_pier",[t("north")])},desc(r){return r||!e.eden.hasOwnProperty("rune_gate")||e.eden.north_pier.count<10?`
${t("eden_pier",[t("north")])}
${t("requires_segments",[10])}
`:`
${t("eden_pier",[t("north")])}
`},reqs:{isle:2},queue_complete(){return 10-e.eden.north_pier.count},cost:{Money(r){return r?r+(e.eden.hasOwnProperty("north_pier")?e.eden.north_pier.count:0)<10?75e8:0:!e.eden.hasOwnProperty("north_pier")||e.eden.north_pier.count<10?75e8:0},Iron(r){return r?r+(e.eden.hasOwnProperty("north_pier")?e.eden.north_pier.count:0)<10?5e8:0:!e.eden.hasOwnProperty("north_pier")||e.eden.north_pier.count<10?5e8:0},Plywood(r){return e.race.kindling_kindred||e.race.smoldering?0:r?r+(e.eden.hasOwnProperty("north_pier")?e.eden.north_pier.count:0)<10?25e7:0:!e.eden.hasOwnProperty("north_pier")||e.eden.north_pier.count<10?25e7:0},Sheet_Metal(r){return!e.race.kindling_kindred&&!e.race.smoldering?0:r?r+(e.eden.hasOwnProperty("north_pier")?e.eden.north_pier.count:0)<10?625e5:0:!e.eden.hasOwnProperty("north_pier")||e.eden.north_pier.count<10?625e5:0}},effect(r){let a=(r?.count??0)+(e.eden.hasOwnProperty("north_pier")?e.eden.north_pier.count:0);if(a>=10)return`
${t("eden_pier_effect",[t("eden_pier",[t("south")]),t("eden_isle_name")])}
`;{let s=10-a;return`
${t("eden_pier_effect",[t("eden_pier",[t("south")]),t("eden_isle_name")])}
${t("space_dwarf_collider_effect2",[s])}
`}},action(r){return e.eden.north_pier.count<10&&u($(this)[0])?(I("north_pier","eden"),e.eden.south_pier.count===10&&e.eden.north_pier.count===10&&e.tech.isle===2&&(e.tech.isle=3,de()),!0):!1},struct(){return{d:{count:0},p:["north_pier","eden"]}}},rushmore:{id:"eden-rushmore",title(){return t("eden_rushmore",[T[e.race.species].name])},desc(){return`
${t("eden_rushmore",[T[e.race.species].name])}
`},reqs:{elysium:16},cost:{Money(r,a){return e.eden?.rushmore?.count===0||a?55e9:0},Stone(r,a){return e.eden?.rushmore?.count===0||a?1e10:0}},queue_complete(){return 1-(e.eden?.rushmore?.count||0)},effect(){return`
${t("space_red_vr_center_effect2",[10])}
`},action(r){return e.eden.rushmore.count===0&&u($(this)[0])?(I("rushmore","eden"),!0):!1},struct(){return{d:{count:0},p:["rushmore","eden"]}},flair(){return t("eden_rushmore_flair")}},reincarnation:{id:"eden-reincarnation",title(){return t("eden_reincarnation_title")},desc(){return`
${t("eden_reincarnation_title")}
`},reqs:{elysium:17},cost:{Money(r){return e.eden?.reincarnation?.count===0?35e9:e.eden?.reincarnation?.count===1?5e9:0},Aluminium(r){return e.eden?.reincarnation?.count===0?1e10:0},Nano_Tube(r){return e.eden?.reincarnation?.count===0?2e9:0},Asphodel_Powder(r){return e.eden?.reincarnation?.count===0?75e4:0}},queue_complete(){return 1-(e.eden?.reincarnation?.count||0)},effect(){return`
${t("eden_reincarnation_effect",[T[e.race.species].name])}
`},action(r){return e.eden.reincarnation.count===0&&u($(this)[0])?(I("reincarnation","eden"),!0):e.eden.reincarnation.count===1&&e.resource[e.race.species].max>e.resource[e.race.species].amount&&u($(this)[0])?(e.resource[e.race.species].amount++,e.civic[e.civic.d_job].workers++,e.race.warlord&&(e.stats.warlord.r=!0,Ls()),!0):!1},struct(){return{d:{count:0},p:["reincarnation","eden"]}},flair(){return t("eden_reincarnation_flair")}},eden_cement:{id:"eden-eden_cement",title(){return t("city_cement_plant")},desc(){return`
${t("city_cement_plant_desc")}
${t("requires_power")}
`},reqs:{cement:8},cost:{Money(r){return m("eden_cement",r,5e9,1.24,"eden")},Stone(r){return m("eden_cement",r,1e9,1.24,"eden")},Iron(r){return m("eden_cement",r,68e8,1.24,"eden")},Asphodel_Powder(r){return m("eden_cement",r,65e3,1.24,"eden")}},effect(){let r=t("plus_max_resource",[N(5),t("job_cement_worker")]);return r+=`
${t("minus_power",[$(this)[0].powered()])}
`,r},powered(){return he(10)},action(r){return u($(this)[0])?(I("eden_cement","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["eden_cement","eden"]}}}},eden_isle:{info:{name:t("eden_isle_name"),desc:t("eden_isle_desc")},south_pier:{id:"eden-south_pier",title(){return t("eden_pier",[t("south")])},desc(r){return r||!e.eden.hasOwnProperty("rune_gate")||e.eden.south_pier.count<10?`
${t("eden_pier",[t("south")])}
${t("requires_segments",[10])}
`:`
${t("eden_pier",[t("south")])}
`},reqs:{isle:2},queue_complete(){return 10-e.eden.south_pier.count},cost:{Money(r){return r?r+(e.eden.hasOwnProperty("south_pier")?e.eden.south_pier.count:0)<10?75e8:0:!e.eden.hasOwnProperty("south_pier")||e.eden.south_pier.count<10?75e8:0},Iron(r){return r?r+(e.eden.hasOwnProperty("south_pier")?e.eden.south_pier.count:0)<10?5e8:0:!e.eden.hasOwnProperty("south_pier")||e.eden.south_pier.count<10?5e8:0},Plywood(r){return e.race.kindling_kindred||e.race.smoldering?0:r?r+(e.eden.hasOwnProperty("south_pier")?e.eden.south_pier.count:0)<10?25e7:0:!e.eden.hasOwnProperty("south_pier")||e.eden.south_pier.count<10?25e7:0},Sheet_Metal(r){return!e.race.kindling_kindred&&!e.race.smoldering?0:r?r+(e.eden.hasOwnProperty("south_pier")?e.eden.south_pier.count:0)<10?625e5:0:!e.eden.hasOwnProperty("south_pier")||e.eden.south_pier.count<10?625e5:0}},effect(r){let a=(r?.count??0)+(e.eden.hasOwnProperty("south_pier")?e.eden.south_pier.count:0);if(a>=10)return`
${t("eden_pier_effect",[t("eden_pier",[t("north")]),t("eden_elysium_name")])}
`;{let s=10-a;return`
${t("eden_pier_effect",[t("eden_pier",[t("north")]),t("eden_elysium_name")])}
${t("space_dwarf_collider_effect2",[s])}
`}},action(r){return e.eden.south_pier.count<10&&u($(this)[0])?(I("south_pier","eden"),e.eden.south_pier.count===10&&e.eden.north_pier.count===10&&e.tech.isle===2&&(e.tech.isle=3,de()),!0):!1},struct(){return{d:{count:0},p:["south_pier","eden"]}}},west_tower:{id:"eden-west_tower",title(){return e.eden.enemy_isle&&e.eden.enemy_isle.wt===0?t("eden_rampart_ruin",[t("west")]):t("eden_rampart_title",[t("west")])},desc(){return e.eden.enemy_isle&&e.eden.enemy_isle.wt===0?t("eden_rampart_ruin",[t("west")]):t("eden_rampart_title",[t("west")])},queue_complete(){return 0},reqs:{isle:1},effect(){return e.eden.enemy_isle&&e.eden.enemy_isle.wt===0?`
${t("eden_tower_destroyed")}
`:`
${t("eden_tower_intact",[e.eden.enemy_isle?e.eden.enemy_isle.wt:100])}
`},action(r){return!1}},isle_garrison:{id:"eden-isle_garrison",title(){return e.eden.enemy_isle&&e.eden.enemy_isle.g===0?t("eden_garrison_ruin"):t("eden_garrison_title")},desc(){return e.eden.enemy_isle&&e.eden.enemy_isle.g===0?t("eden_garrison_ruin"):t("eden_garrison_title")},queue_complete(){return 0},reqs:{isle:1},effect(){return e.eden.enemy_isle&&e.eden.enemy_isle.g===0?`
${t("eden_tower_destroyed")}
`:`
${t("eden_tower_intact",[e.eden.enemy_isle?e.eden.enemy_isle.g:100])}
`},action(r){return!1}},east_tower:{id:"eden-east_tower",title(){return e.eden.enemy_isle&&e.eden.enemy_isle.et===0?t("eden_rampart_ruin",[t("east")]):t("eden_rampart_title",[t("east")])},desc(){return e.eden.enemy_isle&&e.eden.enemy_isle.et===0?t("eden_rampart_ruin",[t("east")]):t("eden_rampart_title",[t("east")])},queue_complete(){return 0},reqs:{isle:1},effect(){return e.eden.enemy_isle&&e.eden.enemy_isle.et===0?`
${t("eden_tower_destroyed")}
`:`
${t("eden_tower_intact",[e.eden.enemy_isle?e.eden.enemy_isle.et:100])}
`},action(r){return!1}},spirit_vacuum:{id:"eden-spirit_vacuum",title(){return t("eden_spirit_vacuum_title")},desc(){return`
${t("eden_spirit_vacuum_title")}
${t("requires_power")}
`},reqs:{isle:4},cost:{Money(r){return m("spirit_vacuum",r,3e10,1.1,"eden")},Neutronium(r){return m("spirit_vacuum",r,175e6,1.1,"eden")},Stanene(r){return m("spirit_vacuum",r,1e9,1.1,"eden")},Elerium(r){return m("spirit_vacuum",r,24e4,1.1,"eden")},Soul_Gem(r){return m("spirit_vacuum",r,1e3,1.1,"eden")}},effect(){let r=`
${t("eden_spirit_vacuum_effect")}
`;return e.eden.hasOwnProperty("palace")&&e.eden.palace.rate>0&&e.eden.palace.energy>0&&(r+=`
${t("eden_spirit_vacuum_time",[ft(e.eden.palace.energy/e.eden.palace.rate)])}
`),r+=`
${t("minus_power",[$(this)[0].powered()])}
`,r},powered(r){let i=(r?e.eden?.spirit_battery?.on??0:x.spirit_battery||0)||0,s=.9;return e.race.warlord&&e.eden.corruptor&&e.tech?.asphodel>=13&&(s=1-(1+(x.corruptor||0)*.03)/10),+he(18e3*s**i).toFixed(2)},action(r){return u($(this)[0])?(I("spirit_vacuum","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["spirit_vacuum","eden"]}},flair(){return t("eden_spirit_vacuum_flair")}},spirit_battery:{id:"eden-spirit_battery",title(){return t("eden_spirit_battery_title")},desc(){return`
${t("eden_spirit_battery_title")}
${t("requires_power")}
`},reqs:{isle:5},cost:{Money(r){return m("spirit_battery",r,18e9,1.2,"eden")},Copper(r){return m("spirit_battery",r,5e9,1.2,"eden")},Vitreloy(r){return m("spirit_battery",r,5e7,1.2,"eden")},Elysanite(r){return m("spirit_battery",r,1e8,1.2,"eden")}},effect(){let r=10,a=8;if(e.race.warlord&&e.eden.corruptor&&e.tech?.asphodel>=13){let s=1+(x.corruptor||0)*.03;r*=s,a*=s}let i=`
${t("eden_spirit_battery_effect",[t("eden_spirit_vacuum_title"),+r.toFixed(2)])}
`;return e.tech.isle&&e.tech.isle>=6&&(i+=`
${t("eden_spirit_battery_effect2",[t("eden_spirit_vacuum_title"),+a.toFixed(2)])}
`),i+=`
${t("minus_power",[$(this)[0].powered()])}
`,i},powered(){return he(500)},action(r){return u($(this)[0])?(I("spirit_battery","eden"),re($(this)[0]),!0):!1},struct(){return{d:{count:0,on:0},p:["spirit_battery","eden"]}}},soul_compactor:{id:"eden-soul_compactor",title(){return t("eden_soul_compactor_title")},desc(){return`
${t("eden_soul_compactor_title")}
`},reqs:{isle:7},cost:{Money(r,a){return e.eden?.soul_compactor?.count===0||a?5e10:0},Iron(r,a){return e.eden?.soul_compactor?.count===0||a?e.race.warlord?1e10:225e8:0},Uranium(r,a){return e.eden?.soul_compactor?.count===0||a?4e6:0},Scarletite(r,a){return e.eden?.soul_compactor?.count===0||a?3e8:0}},queue_complete(){return 1-(e.eden?.soul_compactor?.count||0)},effect(){let r=`
${t("eden_soul_compactor_effect1",[e.eden?.soul_compactor?.energy.toLocaleString()||0])}
`;return r+=`
${t("eden_soul_compactor_effect2",[1e9.toLocaleString()])}
`,r+=`
${t("eden_soul_compactor_effect3",[e.resource.Soul_Gem.name])}
`,r},action(r){return e.eden.soul_compactor.count===0&&u($(this)[0])?(I("soul_compactor","eden"),!0):!1},struct(){return{d:{count:0,energy:0,report:0},p:["soul_compactor","eden"]}},flair(){return t("eden_soul_compactor_flair")}}},eden_palace:{info:{name:t("eden_palace_name"),desc(){return t("eden_palace_desc")},prop(){return``},bind(){return e.eden.palace},filter(r,a){switch(a){case"energy":return t("eden_palace_energy",[r.toLocaleString()])}}},scout_palace:{id:"eden-scout_palace",title:t("eden_scout_palace_title"),desc:t("eden_scout_palace_title"),reqs:{palace:1},grant:["palace",2],queue_complete(){return e.tech.palace>=2?0:1},cost:{Money(){return 5e10},Helium_3(){return e.race.warlord?5e6:0},Deuterium(){return e.race.warlord?0:5e6}},effect:t("eden_scout_palace_effect"),action(r){return u($(this)[0])?(L(t("eden_scout_palace_result"),"info",!1,["progress"]),!0):!1}},throne:{id:"eden-throne",title(){return t("eden_abandoned_throne_title")},desc(){return t("eden_abandoned_throne_title")},reqs:{palace:2},condition(){return e.tech.palace<6},queue_complete(){return!1},cost:{},effect:t("eden_abandoned_throne_effect"),action(r){return!1}},infuser:{id:"eden-infuser",title(){return t("eden_infuser_title")},desc(r){return!e.eden.hasOwnProperty("infuser")||e.eden.infuser.count<25||r?`
${t("eden_infuser_title")}
${t("requires_segments",[25])}
`:`
${t("eden_infuser_title")}
`},reqs:{palace:6},queue_size:5,queue_complete(){return 25-e.eden.infuser.count},cost:{Money(r){return r?r+(e.eden.hasOwnProperty("infuser")?e.eden.infuser.count:0)<25?12e9:0:!e.eden.hasOwnProperty("infuser")||e.eden.infuser.count<25?12e9:0},Copper(r){return r?r+(e.eden.hasOwnProperty("infuser")?e.eden.infuser.count:0)<25?1e10:0:!e.eden.hasOwnProperty("infuser")||e.eden.infuser.count<25?1e10:0},Graphene(r){return r?r+(e.eden.hasOwnProperty("infuser")?e.eden.infuser.count:0)<25?1e9:0:!e.eden.hasOwnProperty("infuser")||e.eden.infuser.count<25?1e9:0},Elysanite(r){return r?r+(e.eden.hasOwnProperty("infuser")?e.eden.infuser.count:0)<25?125e6:0:!e.eden.hasOwnProperty("infuser")||e.eden.infuser.count<25?125e6:0}},effect(r){let a=(r?.count??0)+(e.eden.hasOwnProperty("infuser")?e.eden.infuser.count:0);if(a>=25)return`
${t("eden_infuser_effect")}
`;{let s=25-a;return`
${t("eden_infuser_effect")}
${t("space_dwarf_collider_effect2",[s])}
`}},action(r){return e.eden.infuser.count<25&&u($(this)[0])?(I("infuser","eden"),e.eden?.conduit?.count===25&&e.eden?.infuser?.count===25&&(e.tech.palace=7,e.eden.apotheosis={count:0},or()),!0):!1},struct(){return{d:{count:0},p:["infuser","eden"]}}},apotheosis:{id:"eden-apotheosis",title:t("eden_apotheosis"),desc:t("eden_apotheosis"),reqs:{palace:7},condition(){return e.eden.hasOwnProperty("apotheosis")&&e.eden.apotheosis.count===0},queue_complete(){return 0},no_multi:!0,cost:{},effect(){let r=W0();return`
${t("eden_apotheosis_effect")}
${r}`},action(r){return u($(this)[0])?(e.race.warlord&&(e.stats.warlord.g=!0,Ls()),Ri(!0),!0):!1}},conduit:{id:"eden-conduit",title(){return t("eden_conduit_title")},desc(r){return!e.eden.hasOwnProperty("conduit")||e.eden.conduit.count<25||r?`
${t("eden_conduit_title")}
${t("requires_segments",[25])}
`:`
${t("eden_conduit_title")}
`},reqs:{palace:5},queue_size:5,queue_complete(){return 25-e.eden.conduit.count},cost:{Money(r){return r?r+(e.eden.hasOwnProperty("conduit")?e.eden.conduit.count:0)<25?8e9:0:!e.eden.hasOwnProperty("conduit")||e.eden.conduit.count<25?25e9:0},Stanene(r){return r?r+(e.eden.hasOwnProperty("conduit")?e.eden.conduit.count:0)<25?25e7:0:!e.eden.hasOwnProperty("conduit")||e.eden.conduit.count<25?25e7:0},Orichalcum(r){return r?r+(e.eden.hasOwnProperty("conduit")?e.eden.conduit.count:0)<25?125e6:0:!e.eden.hasOwnProperty("conduit")||e.eden.conduit.count<25?125e6:0}},effect(r){let a=(r?.count??0)+(e.eden.hasOwnProperty("conduit")?e.eden.conduit.count:0);if(a>=25)return`
${t("eden_conduit_done")}
`;{let s=25-a;return`
${t("eden_conduit_effect")}
${t("space_dwarf_collider_effect2",[s])}
`}},action(r){return e.eden.conduit.count<25&&u($(this)[0])?(I("conduit","eden"),e.eden?.conduit?.count===25&&e.eden?.infuser?.count===25&&(e.tech.palace=7,e.eden.apotheosis={count:0},or()),!0):!1},struct(){return{d:{count:0},p:["conduit","eden"]}},flair(){return t("eden_conduit_flair")}},tomb:{id:"eden-tomb",title(){return e.eden?.tomb?.count===10?t("eden_tomb_sealed"):t("eden_tomb_title")},desc(r){return!e.eden.hasOwnProperty("tomb")||e.eden.tomb.count<10||r?`
${t("eden_tomb_title")}
${t("requires_segments",[10])}
`:`
${t("eden_tomb_title")}
`},reqs:{palace:3},queue_complete(){return 10-e.eden.tomb.count},cost:{Money(r){return r?r+(e.eden.hasOwnProperty("tomb")?e.eden.tomb.count:0)<10?25e9:0:!e.eden.hasOwnProperty("tomb")||e.eden.tomb.count<10?25e9:0},Cement(r){return r?r+(e.eden.hasOwnProperty("tomb")?e.eden.tomb.count:0)<10?1e10:0:!e.eden.hasOwnProperty("tomb")||e.eden.tomb.count<10?1e10:0},Neutronium(r){return r?r+(e.eden.hasOwnProperty("tomb")?e.eden.tomb.count:0)<10?1e8:0:!e.eden.hasOwnProperty("tomb")||e.eden.tomb.count<10?1e8:0}},effect(r){let a=(r?.count??0)+(e.eden.hasOwnProperty("tomb")?e.eden.tomb.count:0);if(a>=10)return`
${t("eden_tomb_effect")}
`;{let s=10-a;return`
${t("eden_tomb_constuct")}
${t("space_dwarf_collider_effect2",[s])}
`}},action(r){return e.eden.tomb.count<10&&u($(this)[0])?(I("tomb","eden"),e.eden.tomb.count===10&&e.tech.palace===3&&(e.tech.palace=4,or()),!0):!1},struct(){return{d:{count:0},p:["tomb","eden"]}},flair(){return t("eden_tomb_flair")}}}};function W0(){let r=dt("apotheosis"),a=e.race.universe==="antimatter"?t("resource_AntiPlasmid_name"):t("resource_Plasmid_name"),i=`
${t("interstellar_ascension_trigger_effect2",[r.plasmid,a])}
`;return i+=`
${t("interstellar_ascension_trigger_effect2",[r.supercoiled,t("resource_Supercoiled_plural_name")])}
`,e.race.warlord&&(i+=`
${t("interstellar_ascension_trigger_effect2",[r.artifact,t("resource_Artifact_name")])}
`),i}function eo(r,a){let i=ro(r);return r-=Math.floor(R(0,i,!0)),r>a?r=a:r<0&&(r=0),Math.floor(r)}function to(){return Dt}function or(){if(!e.settings.tabLoad&&(e.settings.civTabs!==1||e.settings.spaceTabs!==7))return;let r=$("#eden");be(r),r.append($(`

${t("tab_eden")}

`)),!(!e.tech.edenic||e.tech.edenic<3)&&Object.keys(Dt).forEach(function(a){let i=a.replace("eden_","");if(e.settings.eden[`${i}`]){let s=typeof Dt[a].info.name=="string"?Dt[a].info.name:Dt[a].info.name(),n="";Dt[a].info.hasOwnProperty("prop")&&(n=Dt[a].info.prop());let o=!1;if(Dt[a].info.hasOwnProperty("bind")&&(o=Dt[a].info.bind()),Dt[a].info.support){let c=Dt[a].info.support;Dt[a].info.hide_support?r.append(`

${s}

${n}
`):r.append(`

${s}

{{ support }}/{{ s_max }}${n}
`),V({el:`#sr${a}`,data:o||e.eden[c],methods:{filter(){return Dt[a].info.filter(...arguments)}}})}else o?(r.append(`

${s}

${n}
`),V({el:`#sr${a}`,data:o,methods:{filter(){return Dt[a].info.filter(...arguments)}}})):r.append(`

${s}

${n}
`);ve(a,function(){return typeof Dt[a].info.desc=="string"?Dt[a].info.desc:Dt[a].info.desc()},{elm:`#${a} h3.name`,classes:"has-background-light has-text-dark"}),Object.keys(Dt[a]).forEach(function(c){if(c!=="info"&&Rr(Dt,a,c)){let l=Dt[a][c];Jr(l,"eden",c)}})}})}function _s(){if(e.tech.asphodel&&e.tech.asphodel>=5){let r=e.tech.asphodel>=6?.34:.67;return e.eden.mech_station&&e.eden.mech_station.count>=10&&(r=.34+e.eden.mech_station.effect*.0066),r}return 1}function Nl(){if(e.eden.mech_station.count<10||e.eden.mech_station.mode===0){e.eden.mech_station.effect=0,e.eden.mech_station.mechs=0;return}let r=0;r+=e.eden.asphodel_harvester.on*4,r+=e.civic.ghost_trapper.workers;let a=r,i=0;e.eden.mech_station.mode===1?i=Math.ceil(r*.66):e.eden.mech_station.mode===2?i=Math.ceil(r*.33):e.eden.mech_station.mode===4?(r*=1.25,a*=1.25):e.eden.mech_station.mode===5&&(r*=1.5,a*=1.5);let s=0;for(let n=0;ni&&(r-=dn(o,!0)*12500,s++)}r<0&&(r=0),e.eden.mech_station.mechs=s,e.eden.mech_station.effect=100-Math.floor(r/a*100),e.eden.mech_station.effect===100&&e.eden.mech_station.mode===4?e.eden.mech_station.effect=110:e.eden.mech_station.effect===100&&e.eden.mech_station.mode===5&&(e.eden.mech_station.effect=120)}var hr={variables:{black:"#000",white:"#fff","bulma-success":"#48c774","bulma-danger":"#f14668","bulma-info":"#167df0","bulma-dark":"#363636","bulma-warning":"#ffdd57","bulma-link":"#4a4a4a","bulma-link-active":"#B86BFF","bulma-link-hover":"#363636","bulma-label":"#363636","bulma-checkbox-hover":"#363636"},dark:{"html-background":"#1f2424","primary-border":"#ccc","secondary-border":"var(--theme-primary-border)","primary-color":"var(--theme-white)","secondary-color":"#3a4344",link:"#1abc9c","link-hover":"#f2f2f2",enabled:"#00af0f",disabled:"#c20000","has-text-advanced":"#00ac95","has-text-alert":"#af5d00","has-text-caution":"#ffa500","has-text-danger":"var(--theme-bulma-danger)","has-text-fade":"#5e5e5e","has-text-flair":"var(--theme-has-text-special)","has-text-label":"#ffff9e","has-text-special":"#91006c","has-text-info":"var(--theme-bulma-info)","has-text-success":"var(--theme-bulma-success)","has-text-warning":"var(--theme-bulma-warning)",popper:"#363636","popper-has-text-label":"#1100ff","popper-has-text-success":"#1c7e21","popper-has-text-warning":"#776425","modal-child-popper-background":"#f5f5f5","modal-child-popper-border":"var(--theme-black)","tabs-li-is-active-link-border":"var(--theme-link)","tabs-li-is-active-link":"var(--theme-link)","button-background":"#282f2f",button:"var(--theme-primary-color)","button-hover-background":"var(--theme-secondary-color)","button-hover":"var(--theme-link-hover)","button-focus-border":"#dbdbdb","basic-button-border-hover-background":"var(--theme-secondary-color)","basic-button-border-hover":"#eee",label:"#dbdee0","checkbox-hover":"var(--theme-link)","dropdown-content-background":"#1f2424","b-tooltip-accent":"var(--theme-link-hover)","b-tooltip-is-primary-background":"var(--theme-b-tooltip-accent)","b-tooltip-is-primary-border":"#f5f5f5","b-tooltip-is-primary":"var(--theme-black)","bars-background":"var(--theme-secondary-color)","meter-low":"#cc0000","meter-neutral":"#c0ce00","meter-high":"#00af0f","div-special-border":"#282f2f","div-special-gear-fill":"#ad5f12","div-special-hover-border":"var(--theme-secondary-color)","div-special-hover-gear-fill":"#d4af37","span-on-border":"#282f2f","span-on":"var(--theme-enabled)","span-on-warn":"#af5d00","span-off-border":"#282f2f","span-off":"var(--theme-disabled)","span-on-off-hover-border":"var(--theme-secondary-color)","hl-button-border":"var(--theme-enabled)","link-button-background":"#181818","special-on-off-border":"#181818",oldTech:"var(--theme-primary-color)","cnam-aTitle":"#975f5f","fort-patrol-check-background":"var(--theme-black)","market-item-background":"#0f1414","market-item-order-hover-background":"var(--theme-secondary-color)","market-item-order-hover-border":"#eee","resource-overlay-color":"hsl(from var(--theme-html-background) h s calc(l - 15))","resource-overlay-color-alt":"hsl(from var(--theme-market-item-background) h s calc(l - 15))","modalBox-background":"#282f2f","star-2-fill":"var(--theme-white)","star-3-fill":"#cd7f32","star-4-fill":"#c0c0c0","star-5-fill":"#d4af37","webkit-scrollbar-background":"var(--theme-html-background)","webkit-scrollbar-thumb-background":"#F5F5F5"},light:{"html-background":"var(--theme-white)","primary-border":"var(--theme-black)","secondary-border":"#4e4e4e","primary-color":"var(--theme-black)","secondary-color":"#3a4344",link:"var(--theme-bulma-link)","link-hover":"var(--theme-bulma-link-hover)",enabled:"#008f0c",disabled:"#800000","has-text-advanced":"#0098a3","has-text-alert":"#743e00","has-text-caution":"#966100","has-text-danger":"#470303","has-text-fade":"#5e5e5e","has-text-flair":"var(--theme-has-text-special)","has-text-info":"var(--theme-bulma-info)","has-text-label":"#1100ff","has-text-special":"#91006c","has-text-success":"#082412","has-text-warning":"#7a6304",popper:"#363636","popper-has-text-label":"var(--theme-has-text-label)","popper-has-text-success":"#1c7e21","popper-has-text-warning":"var(--theme-has-text-warning)","modal-child-popper-background":"#f5f5f5","modal-child-popper-border":"var(--theme-black)","tabs-li-is-active-link-border":"var(--theme-bulma-link-active)","tabs-li-is-active-link":"var(--theme-bulma-link-active)","button-background":"var(--theme-html-background)",button:"var(--theme-primary-color)","button-hover-background":"#ccc","button-hover":"var(--theme-primary-color)","button-focus-border":"var(--theme-primary-color)","basic-button-border-hover-background":"#ccc","basic-button-border-hover":"#333",label:"var(--theme-bulma-label)","checkbox-hover":"var(--theme-bulma-checkbox-hover)","dropdown-content-background":"var(--theme-html-background)","b-tooltip-accent":"#f2f2f2","b-tooltip-is-primary-background":"var(--theme-b-tooltip-accent)","b-tooltip-is-primary-border":"#f5f5f5","b-tooltip-is-primary":"var(--theme-black)","bars-background":"#c7c7c7","meter-low":"#cc0000","meter-neutral":"#c0ce00","meter-high":"#00af0f","div-special-border":"#3a4344","div-special-gear-fill":"#3a4344","div-special-hover-border":"var(--theme-primary-border)","div-special-hover-gear-fill":"#4a5354","span-on-border":"var(--theme-primary-border)","span-on":"var(--theme-enabled)","span-on-warn":"#743e00","span-off-border":"var(--theme-primary-border)","span-off":"var(--theme-disabled)","span-on-off-hover-border":"var(--theme-primary-border)","hl-button-border":"var(--theme-disabled)","link-button-background":"#ddd","special-on-off-border":"var(--theme-primary-border)",oldTech:"var(--theme-primary-color)","cnam-aTitle":"#900","fort-patrol-check-background":"var(--theme-white)","market-item-background":"#ddd","market-item-order-hover-background":"#ccc","market-item-order-hover-border":"#333","resource-overlay-color":"hsl(from var(--theme-html-background) h s calc(l - 25))","resource-overlay-color-alt":"hsl(from var(--theme-market-item-background) h s calc(l - 25))","modalBox-background":"var(--theme-white)","star-2-fill":"var(--theme-black)","star-3-fill":"#cd7f32","star-4-fill":"#c0c0c0","star-5-fill":"#d4af37","webkit-scrollbar-background":"#F5F5F5","webkit-scrollbar-thumb-background":"var(--theme-black)"},night:{parent:["dark"],"html-background":"var(--theme-black)","has-text-flair":"#d39753","has-text-special":"#e500b4",popper:"var(--theme-white)","popper-has-text-label":"#ffff9e","popper-has-text-success":"#23d160","popper-has-text-warning":"#ffdd57","modal-child-popper-background":"#0f0f0f","modal-child-popper-border":"#999","b-tooltip-accent":"#999","b-tooltip-is-primary-background":"#0f0f0f","b-tooltip-is-primary-border":"#999","b-tooltip-is-primary":"var(--theme-white)","market-item-background":"#1b1b1b","resource-overlay-color":"hsl(from var(--theme-html-background) h s calc(l + 10))","resource-overlay-color-alt":"hsl(from var(--theme-market-item-background) h s calc(l - 15))","webkit-scrollbar-thumb-background":"#727272"},redgreen:{parent:["night"],"has-text-danger":"#9900cc","has-text-flair":"var(--theme-has-text-success)","has-text-special":"#ffff9e","has-text-success":"#00ff00","has-text-warning":"#ffcc00","tabs-li-is-active-link":"#167df0","meter-low":"#167df0","meter-neutral":"#00af0f","meter-high":"var(--theme-white)","span-on":"var(--theme-has-text-success)","span-off":"var(--theme-has-text-danger)"},darkNight:{parent:["night"],"primary-color":"#b8b8b8",popper:"var(--theme-primary-color)",button:"#ccc","b-tooltip-is-primary":"var(--theme-primary-color)","has-text-warning":"#d6b220"},gruvboxLight:{parent:["light"],"html-background":"#fbf1c7","primary-border":"#3c3836","secondary-border":"var(--theme-primary-border)","primary-color":"#3c3836","secondary-color":"#d5c4a1",link:"#427b58","link-hover":"#689d6a",enabled:"#79740e",disabled:"#9d0006","has-text-advanced":"#458588","has-text-alert":"#af5d00","has-text-caution":"#af3a03","has-text-danger":"var(--theme-disabled)","has-text-fade":"#898B87","has-text-flair":"var(--theme-has-text-special)","has-text-info":"#076678","has-text-label":"#076678","has-text-special":"#8f3f71","has-text-success":"var(--theme-enabled)","has-text-warning":"#b57614",popper:"var(--theme-primary-color)","popper-has-text-label":"var(--theme-has-text-label)","popper-has-text-success":"var(--theme-has-text-success)","popper-has-text-warning":"var(--theme-has-text-warning)","modal-child-popper-background":"#fbf1c7","modal-child-popper-border":"var(--theme-secondary-border)","tabs-li-is-active-link-border":"var(--theme-link)","tabs-li-is-active-link":"var(--theme-link)","button-background":"#d5c4a1",button:"var(--theme-primary-color)","button-hover-background":"var(--theme-secondary-color)","button-hover":"var(--theme-link-hover)","button-focus-border":"var(--theme-secondary-border)","basic-button-border-hover-background":"#f2e5bc","basic-button-border-hover":"var(--theme-link)",label:"var(--theme-primary-color)","checkbox-hover":"var(--theme-link)","dropdown-content-background":"var(--theme-button-background)","b-tooltip-accent":"#fbf1c7","b-tooltip-is-primary-background":"var(--theme-b-tooltip-accent)","b-tooltip-is-primary-border":"var(--theme-primary-border)","b-tooltip-is-primary":"var(--theme-black)","bars-background":"var(--theme-secondary-color)","meter-low":"var(--theme-disabled)","meter-neutral":"var(--theme-has-text-caution)","meter-high":"var(--theme-has-text-info)","div-special-border":"var(--theme-primary-border)","div-special-gear-fill":"var(--theme-link)","div-special-hover-border":"var(--theme-secondary-color)","div-special-hover-gear-fill":"#F09D51","span-on-border":"var(--theme-primary-border)","span-on":"var(--theme-enabled)","span-on-warn":"#af5d00","span-off-border":"var(--theme-primary-border)","span-off":"var(--theme-disabled)","span-on-off-hover-border":"var(--theme-secondary-color)","hl-button-border":"var(--theme-enabled)","link-button-background":"#a89984","special-on-off-border":"var(--theme-primary-border)",oldTech:"var(--theme-primary-color)","cnam-aTitle":"var(--theme-disabled)","fort-patrol-check-background":"var(--theme-black)","market-item-background":"#f9f5d7","market-item-order-hover-background":"var(--theme-secondary-color)","market-item-order-hover-border":"var(--theme-link-hover)","resource-overlay-color":"hsl(from var(--theme-html-background) h s calc(l - 15))","resource-overlay-color-alt":"hsl(from var(--theme-market-item-background) h s calc(l - 15))","modalBox-background":"var(--theme-html-background)","star-2-fill":"var(--theme-white)","star-3-fill":"#cd7f32","star-4-fill":"#c0c0c0","star-5-fill":"#d4af37","webkit-scrollbar-background":"var(--theme-html-background)","webkit-scrollbar-thumb-background":"var(--theme-primary-border)"},gruvboxDark:{parent:["dark"],"html-background":"#282828","primary-border":"#3c3836","secondary-border":"#665c54","primary-color":"#ebdbb2","secondary-color":"#504945",link:"#8ec07c","link-hover":"#689d6a",enabled:"#b8bb26",disabled:"#fb4934","has-text-advanced":"#458588","has-text-alert":"#af5d00","has-text-caution":"#fe8019","has-text-danger":"var(--theme-disabled)","has-text-fade":"#898B87","has-text-flair":"var(--theme-has-text-special)","has-text-info":"#83a598","has-text-label":"#458588","has-text-special":"#d3869b","has-text-success":"var(--theme-enabled)","has-text-warning":"#fabd2f",popper:"var(--theme-primary-color)","popper-has-text-label":"var(--theme-has-text-label)","popper-has-text-success":"var(--theme-has-text-success)","popper-has-text-warning":"var(--theme-has-text-warning)","modal-child-popper-background":"#282828","modal-child-popper-border":"var(--theme-secondary-border)","tabs-li-is-active-link-border":"var(--theme-link)","tabs-li-is-active-link":"var(--theme-link)","button-background":"#3c3836",button:"var(--theme-primary-color)","button-hover-background":"var(--theme-secondary-color)","button-hover":"var(--theme-link-hover)","button-focus-border":"var(--theme-secondary-border)","basic-button-border-hover-background":"#1d2021","basic-button-border-hover":"var(--theme-link)",label:"var(--theme-primary-color)","checkbox-hover":"var(--theme-link)","dropdown-content-background":"var(--theme-button-background)","b-tooltip-accent":"#282828","b-tooltip-is-primary-background":"var(--theme-b-tooltip-accent)","b-tooltip-is-primary-border":"var(--theme-primary-border)","b-tooltip-is-primary":"var(--theme-primary-color)","bars-background":"var(--theme-secondary-color)","meter-low":"var(--theme-disabled)","meter-neutral":"var(--theme-has-text-caution)","meter-high":"var(--theme-has-text-info)","div-special-border":"var(--theme-primary-border)","div-special-gear-fill":"#f09d51","div-special-hover-border":"var(--theme-secondary-color)","div-special-hover-gear-fill":"var(--theme-link)","span-on-border":"var(--theme-primary-border)","span-on":"var(--theme-enabled)","span-on-warn":"#af5d00","span-off-border":"var(--theme-primary-border)","span-off":"var(--theme-disabled)","span-on-off-hover-border":"var(--theme-secondary-color)","hl-button-border":"var(--theme-enabled)","link-button-background":"#1d2021","special-on-off-border":"var(--theme-primary-border)",oldTech:"var(--theme-primary-color)","cnam-aTitle":"var(--theme-disabled)","fort-patrol-check-background":"var(--theme-black)","market-item-background":"#1d2021","market-item-order-hover-background":"var(--theme-secondary-color)","market-item-order-hover-border":"var(--theme-link-hover)","resource-overlay-color":"hsl(from var(--theme-html-background) h s calc(l - 15))","resource-overlay-color-alt":"hsl(from var(--theme-market-item-background) h s calc(l - 15))","modalBox-background":"var(--theme-html-background)","star-2-fill":"var(--theme-primary-border)","star-3-fill":"#cd7f32","star-4-fill":"#c0c0c0","star-5-fill":"#d4af37","webkit-scrollbar-background":"var(--theme-html-background)","webkit-scrollbar-thumb-background":"var(--theme-primary-border)"},gruvboxDarkRG:{parent:["gruvboxDark"],"has-text-danger":"#c409bb","has-text-flair":"var(--theme-has-text-success)","has-text-special":"#ffff9e","has-text-success":"#00ff00","has-text-warning":"#ffcc00","has-text-caution":"#9ab8ff","has-text-info":"#83a598",disabled:"#ffe940","tabs-li-is-active-link":"#82bdff","meter-low":"var(--theme-disabled)","meter-neutral":"var(--theme-has-text-caution)","meter-high":"var(--theme-has-text-info)","span-on":"var(--theme-has-text-success)","span-off":"var(--theme-has-text-danger)","cnam-aTitle":"var(--theme-disabled)"},orangeSoda:{"html-background":"#131516","primary-border":"#313638","secondary-border":"var(--theme-primary-border)","primary-color":"#EBDBB2","secondary-color":"#313638",link:"#F06543","link-hover":"#D09376",enabled:"#35A7FF",disabled:"#C21E83","has-text-advanced":"#00ac95","has-text-alert":"#af5d00","has-text-caution":"#F09D51","has-text-danger":"var(--theme-disabled)","has-text-fade":"#898B87","has-text-flair":"var(--theme-has-text-special)","has-text-info":"var(--theme-bulma-info)","has-text-label":"#35A7FF","has-text-special":"#91006c","has-text-success":"var(--theme-enabled)","has-text-warning":"var(--theme-link)",popper:"var(--theme-primary-color)","popper-has-text-label":"var(--theme-has-text-label)","popper-has-text-success":"var(--theme-has-text-success)","popper-has-text-warning":"var(--theme-has-text-warning)","modal-child-popper-background":"#292929","modal-child-popper-border":"var(--theme-secondary-border)","tabs-li-is-active-link-border":"var(--theme-link)","tabs-li-is-active-link":"var(--theme-link)","button-background":"#1C2021",button:"var(--theme-primary-color)","button-hover-background":"var(--theme-secondary-color)","button-hover":"var(--theme-link-hover)","button-focus-border":"var(--theme-secondary-border)","basic-button-border-hover-background":"#292929","basic-button-border-hover":"var(--theme-link)",label:"var(--theme-primary-color)","checkbox-hover":"var(--theme-link)","dropdown-content-background":"var(--theme-button-background)","b-tooltip-accent":"var(--theme-link-hover)","b-tooltip-is-primary-background":"var(--theme-b-tooltip-accent)","b-tooltip-is-primary-border":"var(--theme-primary-border)","b-tooltip-is-primary":"var(--theme-black)","bars-background":"var(--theme-secondary-color)","meter-low":"var(--theme-disabled)","meter-neutral":"#38618C","meter-high":"#35A7FF","div-special-border":"var(--theme-primary-border)","div-special-gear-fill":"var(--theme-link)","div-special-hover-border":"var(--theme-secondary-color)","div-special-hover-gear-fill":"#F09D51","span-on-border":"var(--theme-primary-border)","span-on":"var(--theme-enabled)","span-on-warn":"#af5d00","span-off-border":"var(--theme-primary-border)","span-off":"var(--theme-disabled)","span-on-off-hover-border":"var(--theme-secondary-color)","hl-button-border":"var(--theme-enabled)","link-button-background":"#181818","special-on-off-border":"var(--theme-primary-border)",oldTech:"var(--theme-primary-color)","cnam-aTitle":"var(--theme-disabled)","fort-patrol-check-background":"var(--theme-black)","market-item-background":"#292929","market-item-order-hover-background":"var(--theme-secondary-color)","market-item-order-hover-border":"var(--theme-link-hover)","resource-overlay-color":"hsl(from var(--theme-html-background) h s calc(l - 13))","resource-overlay-color-alt":"hsl(from var(--theme-market-item-background) h s calc(l - 15))","modalBox-background":"var(--theme-html-background)","star-2-fill":"var(--theme-white)","star-3-fill":"#cd7f32","star-4-fill":"#c0c0c0","star-5-fill":"#d4af37","webkit-scrollbar-background":"var(--theme-html-background)","webkit-scrollbar-thumb-background":"var(--theme-primary-border)"},dracula:{parent:["dark"],"html-background":"#282a36","primary-border":"#44475a","secondary-border":"#44475a","primary-color":"#f8f8f2","secondary-color":"#6272a4","dark-background":"#1a1c24",link:"#bd93f9","link-hover":"#9573c5",enabled:"#50fa7b",disabled:"#ff5555","has-text-advanced":"#8be9fd","has-text-alert":"#e0a361","has-text-caution":"#ffa26c","has-text-danger":"var(--theme-disabled)","has-text-fade":"#6272a4","has-text-flair":"var(--theme-has-text-special)","has-text-info":"#bd93f9","has-text-label":"#7dcbdd","has-text-special":"#ff79c6","has-text-success":"var(--theme-enabled)","has-text-warning":"#f1fa8c",popper:"var(--theme-primary-color)","popper-has-text-label":"var(--theme-has-text-label)","popper-has-text-success":"var(--theme-has-text-success)","popper-has-text-warning":"var(--theme-has-text-warning)","modal-child-popper-background":"var(--theme-dark-background)","modal-child-popper-border":"var(--theme-secondary-border)","tabs-li-is-active-link-border":"var(--theme-link)","tabs-li-is-active-link":"var(--theme-link)","button-background":"#3f4253",button:"var(--theme-primary-color)","button-hover-background":"var(--theme-secondary-border)","button-hover":"var(--theme-link-hover)","button-focus-border":"var(--theme-secondary-border)","basic-button-border-hover-background":"var(--theme-dark-background)","basic-button-border-hover":"var(--theme-link)",label:"var(--theme-primary-color)","checkbox-hover":"var(--theme-link)","dropdown-content-background":"var(--theme-button-background)","b-tooltip-accent":"#282828","b-tooltip-is-primary-background":"var(--theme-b-tooltip-accent)","b-tooltip-is-primary-border":"var(--theme-primary-border)","b-tooltip-is-primary":"var(--theme-primary-color)","bars-background":"var(--theme-secondary-color)","meter-low":"var(--theme-disabled)","meter-neutral":"var(--theme-has-text-caution)","meter-high":"var(--theme-has-text-info)","div-special-border":"var(--theme-primary-border)","div-special-gear-fill":"#f09d51","div-special-hover-border":"var(--theme-secondary-color)","div-special-hover-gear-fill":"var(--theme-link)","span-on-border":"var(--theme-primary-border)","span-on":"var(--theme-enabled)","span-on-warn":"#af5d00","span-off-border":"var(--theme-primary-border)","span-off":"var(--theme-disabled)","span-on-off-hover-border":"var(--theme-secondary-color)","hl-button-border":"var(--theme-enabled)","link-button-background":"var(--theme-dark-background)","special-on-off-border":"var(--theme-primary-border)",oldTech:"var(--theme-primary-color)","cnam-aTitle":"var(--theme-disabled)","fort-patrol-check-background":"var(--theme-black)","market-item-background":"#1d2021","market-item-order-hover-background":"var(--theme-secondary-color)","market-item-order-hover-border":"var(--theme-link-hover)","resource-overlay-color":"hsl(from var(--theme-html-background) h s calc(l - 15))","resource-overlay-color-alt":"hsl(from var(--theme-market-item-background) h s calc(l - 15))","modalBox-background":"var(--theme-html-background)","star-2-fill":"var(--theme-white)","star-3-fill":"#cd7f32","star-4-fill":"#c0c0c0","star-5-fill":"#d4af37","webkit-scrollbar-background":"var(--theme-html-background)","webkit-scrollbar-thumb-background":"var(--theme-primary-border)"},"custom-1":{},"custom-2":{}},di={get cur_theme(){return e.settings.theme},curThemeVar:"button-background",themeSection:"button",themeEditorOpen:!1,curThemeColor:"#00f",pos:{x:0,y:0},curParent:"none",changed:{},isResetOpen:!1,custom_count:0},pn={button:{drop:"",dat:[]},border:{drop:"",dat:[]},"has-text":{drop:"",dat:[]},popper:{drop:"",dat:[]},hover:{drop:"",dat:[]},link:{drop:"",dat:[]},background:{drop:"",dat:[]},"b-tooltip":{drop:"",dat:[]},meter:{drop:"",dat:[]},div:{drop:"",dat:[]},span:{drop:"",dat:[]},market:{drop:"",dat:[]},star:{drop:"",dat:[]},scrollbar:{drop:"",dat:[]},misc:{drop:"",dat:[]}};function rc(){for(let r in e.custom_theme)r!="custom_count"&&(hr[r]=e.custom_theme[r])}function ec(r,a){document.documentElement.style.setProperty(`--theme-${r}`,a)}var Dl="";function wi(r,a,i){r=r??e.settings.theme;let s=hr[r];if(!s){console.error(`Custom theme (${r}) does not exist! Defaulting to 'Dark'.`),e.settings.theme="dark",wi("dark");return}a=a??["parent"];for(let n in hr.variables)ec(n,hr.variables[n]);for(let n in s){let o=s[n];a.includes(n)||(ec(n,o),a.push(n))}if(s.hasOwnProperty("parent")&&s.parent.forEach(n=>{a=wi(n,a,!0)}),i)return a;a.length==1&&Dl==""&&(console.error(`Custom theme (${r}) doesn't have anything to change! Defaulting to 'Dark' so it does not break!`),e.settings.theme="dark",wi("dark")),Dl=r}var ao="#0ff00f";function _n(r,a){if(!a&&!e.hasOwnProperty("settings"))return ao;let i=hr[a??e.settings.theme];if(i.hasOwnProperty(r))return i[r];if(i.hasOwnProperty("parent"))for(let s in i.parent){let n=i.parent[s],o=_n(r,n);if(o!=ao)return o}return hr.variables.hasOwnProperty(r)?hr.variables[r]:ao}var Q0=/var\(--theme-(.*?)\)/;function Bl(r,a){let i=_n(r,a);return i[0]=="#"?i:Bl(i.match(Q0)[1])}function Xo(r,a,i){i=i??"both",(i=="dom"||i=="both")&&ec(r,a),(i=="themes"||i=="both")&&(hr[e.settings.theme][r]=a)}function tc(r){r=r??e.settings.theme,e.custom_theme[r]=hr[r]}function ac(r){let a=Object.keys(hr);return a.shift(),a.map(i=>`{{ getThemeTitle('${i}') }}`).join("")}function hn(r,a){r=r??e.settings.theme,$("html").removeClass(),$("html").addClass("theme"),$("html").addClass(a?"none":r),$("html").addClass(e.settings.font),wi(r)}function Gl(){let r=e.settings.theme;di.curThemeVar="button-background",di.curThemeColor=Bl("button-background");let a=hr[r]?.parent;a&&(di.curParent=a.length!=0?a[0]:"none",di.hasOwnProperty(r)||(di.changed[r]={})),di.custom_count=e.custom_theme.custom_count}function io(r){let a=hr[r];return a&&a.hasOwnProperty("title")?a.title:r.includes("custom")?t("theme_custom",[r.split("-")[1]]):t(`theme_${r}`)}function Rl(){let r=Object.keys(hr.dark),a="";for(let n in r){let o=`{{ label('theme_var_${r[n]}') }}`;a+=`{{ label('theme_var_${r[n]}') }}`;let c=!1;Object.keys(pn).forEach(l=>{r[n].includes(l)&&(pn[l].dat.push(o),c=!0)}),c||pn.misc.dat.push(o)}let i="",s="";Object.keys(pn).forEach(n=>{let o=pn[n].dat.join("");i+=` + + ${o} + `,s+=`{{ label('theme_section_${n}') }}`}),$("body").append($(`
+
+ +

Theme Editor

+
+
+

WARNING: This won't work!

+ +
You need to select one of the custom themes!
+
+
+
+ + + ${s} + + ${i} +
+ + - // src/edenic.js - var edenicModules = { - eden_asphodel: { - info: { - name: loc("eden_asphodel_name"), - desc() { - if (global.tech["asphodel"] && global.tech.asphodel >= 5) { - return `${loc("eden_asphodel_desc")} ${loc("eden_asphodel_desc_hostile")}`; - } else { - return `${loc("eden_asphodel_desc")} ${loc("eden_asphodel_desc_peaceful")}`; - } - }, - support: "encampment" - }, - survery_meadows: { - id: "eden-survery_meadows", - title() { - return loc("eden_survery_meadows_title"); - }, - desc() { - return $(this)[0].title(); - }, - reqs: { edenic: 3 }, - grant: ["edenic", 4], - queue_complete() { - return global.tech.edenic >= 4 ? 0 : 1; - }, - cost: { - Oil(offset, wiki) { - return 1e7; - } - }, - effect() { - return loc("eden_survery_meadows_effect"); - }, - action(args) { - if (payCosts($(this)[0])) { - messageQueue(loc("eden_survery_meadows_action"), "info", false, ["progress"]); - return true; - } - return false; - } - }, - encampment: { - id: "eden-encampment", - title: loc("eden_encampment_title"), - desc() { - return `
${loc("eden_encampment_title")}
${loc("requires_power")}
`; - }, - reqs: { edenic: 4 }, - cost: { - Money(offset) { - return spaceCostMultiplier("encampment", offset, 159e7, 1.235, "eden"); - }, - Lumber(offset) { - return spaceCostMultiplier("encampment", offset, 86e7, 1.235, "eden"); - }, - Iron(offset) { - return spaceCostMultiplier("encampment", offset, 19e7, 1.235, "eden"); - }, - Coal(offset) { - return spaceCostMultiplier("encampment", offset, 235e5, 1.235, "eden"); - } - }, - effect() { - let desc = `
${loc("eden_encampment_effect", [$(this)[0].support()])}
`; - if (global.tech.hasOwnProperty("asphodel") && global.tech.asphodel >= 1) { - let powder = spatialReasoning(250); - desc += `
${loc("plus_max_resource", [powder, global.resource.Asphodel_Powder.name])}
`; - } - if (p_on["ascension_trigger"] && global.eden.hasOwnProperty("encampment") && global.eden.encampment.asc) { - let heatSink = actions.interstellar.int_sirius.ascension_trigger.heatSink(); - heatSink = heatSink < 0 ? Math.abs(heatSink) : 0; - let omniscience = 150 + heatSink ** 0.95 / 10; - desc += `
${loc("plus_max_resource", [+omniscience.toFixed(0), global.resource.Omniscience.name])}
`; - } - if (global.race["warlord"] && global.portal["mortuary"] && global.portal["corpse_pile"] && p_on["mortuary"]) { - let omniscience = global.portal.corpse_pile.count * p_on["mortuary"] * 2; - desc += `
${loc("plus_max_resource", [+omniscience.toFixed(0), global.resource.Omniscience.name])}
`; - } - desc += `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - support() { - return 8; - }, - powered() { - return powerCostMod(616); - }, - /*powerBalancer(){ - return [{ s: global.eden.encampment.s_max - global.eden.encampment.support }]; - },*/ - refresh: true, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("encampment", "eden"); - powerOnNewStruct($(this)[0]); - global["resource"]["Asphodel_Powder"].max += spatialReasoning(250); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, support: 0, s_max: 0, asc: false }, - p: ["encampment", "eden"] - }; - } - }, - soul_engine: { - id: "eden-soul_engine", - title() { - return loc("eden_soul_engine_title"); - }, - desc() { - return `
${loc("eden_soul_engine_title")}
${loc("space_support", [loc("eden_asphodel_name")])}
`; - }, - reqs: { asphodel: 4 }, - cost: { - Money(offset) { - return spaceCostMultiplier("soul_engine", offset, 98312500, 1.235, "eden"); - }, - Neutronium(offset) { - return spaceCostMultiplier("soul_engine", offset, 45e5, 1.235, "eden"); - }, - Orichalcum(offset) { - return spaceCostMultiplier("soul_engine", offset, 375e5, 1.235, "eden"); - }, - Asphodel_Powder(offset) { - return spaceCostMultiplier("soul_engine", offset, 3450, 1.235, "eden"); - } - }, - effect() { - return `
${loc("space_used_support", [loc("eden_asphodel_name")])}
${loc("space_dwarf_reactor_effect1", [-$(this)[0].powered().toFixed(1)])}
`; - }, - s_type: "asphodel", - support() { - return -1; - }, - powered() { - let power = -375; - if (global.race["warlord"] && global.eden["corruptor"] && global.tech.asphodel >= 12) { - power *= 1 + (p_on["corruptor"] || 0) * 0.06; - } - return powerModifier(power); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("soul_engine", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["soul_engine", "eden"] - }; - } - }, - mech_station: { - id: "eden-mech_station", - title() { - return global.race["warlord"] ? loc("eden_demon_station_title") : loc("eden_mech_station_title"); - }, - desc(wiki) { - if (!global.eden.hasOwnProperty("mech_station") || global.eden.mech_station.count < 10 || wiki) { - return `
${global.race["warlord"] ? loc("eden_demon_station_title") : loc("eden_mech_station_title")}
${loc("requires_segments", [10])}
`; - } else { - return `
${global.race["warlord"] ? loc("eden_demon_station_title") : loc("eden_mech_station_title")}
`; - } - }, - reqs: { asphodel: 6 }, - queue_size: 1, - queue_complete() { - return 10 - global.eden.mech_station.count; - }, - cost: { - Money(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("mech_station") ? global.eden.mech_station.count : 0) < 10 ? 675e7 : 0; - } - return !global.eden.hasOwnProperty("mech_station") || global.eden.mech_station.count < 10 ? 675e7 : 0; - }, - Graphene(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("mech_station") ? global.eden.mech_station.count : 0) < 10 ? 825e5 : 0; - } - return !global.eden.hasOwnProperty("mech_station") || global.eden.mech_station.count < 10 ? 825e5 : 0; - }, - Infernite(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("mech_station") ? global.eden.mech_station.count : 0) < 10 ? 75e5 : 0; - } - return !global.eden.hasOwnProperty("mech_station") || global.eden.mech_station.count < 10 ? 75e5 : 0; - }, - Vitreloy(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("mech_station") ? global.eden.mech_station.count : 0) < 10 ? 666e5 : 0; - } - return !global.eden.hasOwnProperty("mech_station") || global.eden.mech_station.count < 10 ? 666e5 : 0; - }, - Asphodel_Powder(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("mech_station") ? global.eden.mech_station.count : 0) < 10 ? 7500 : 0; - } - return !global.eden.hasOwnProperty("mech_station") || global.eden.mech_station.count < 10 ? 7500 : 0; - } - }, - effect(wiki) { - let count = (wiki?.count ?? 0) + (global.eden.hasOwnProperty("mech_station") ? global.eden.mech_station.count : 0); - if (count >= 10) { - let desc = `
${global.race["warlord"] ? loc("eden_demon_station_effect") : loc("eden_mech_station_effect")}
`; - desc += `
${global.race["warlord"] ? loc("eden_demon_station_mechs", [global.eden.mech_station.mechs]) : loc("eden_mech_station_mechs", [global.eden.mech_station.mechs])}
`; - desc += `
${loc("eden_mech_station_effective", [global.eden.mech_station.effect])}
`; - return desc; - } else { - let size = 10; - let remain = size - count; - return `
${global.race["warlord"] ? loc("eden_demon_station_effect") : loc("eden_mech_station_effect")}
${loc("space_dwarf_collider_effect2", [remain])}
`; - } - }, - special() { - return global.eden.hasOwnProperty("mech_station") && global.eden.mech_station.count === 10 ? true : false; - }, - action(args) { - if (global.eden.mech_station.count < 10 && payCosts($(this)[0])) { - incrementStruct("mech_station", "eden"); - if (global.eden.mech_station.count === 10) { - renderEdenic(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, mode: 3, mechs: 0, effect: 0 }, - p: ["mech_station", "eden"] - }; - } - }, - asphodel_harvester: { - id: "eden-asphodel_harvester", - title() { - return loc("eden_asphodel_harvester_title"); - }, - desc() { - return `
${loc("eden_asphodel_harvester_title")}
${loc("space_support", [loc("eden_asphodel_name")])}
`; - }, - reqs: { asphodel: 1 }, - cost: { - Money(offset) { - return spaceCostMultiplier("asphodel_harvester", offset, 3428e4, 1.24, "eden"); - }, - Aluminium(offset) { - return spaceCostMultiplier("asphodel_harvester", offset, 22288800, 1.24, "eden"); - }, - Infernite(offset) { - return spaceCostMultiplier("asphodel_harvester", offset, 666999, 1.24, "eden"); - }, - Soul_Gem(offset) { - return spaceCostMultiplier("asphodel_harvester", offset, 2, 1.18, "eden"); - } - }, - effect() { - let powder = +production("asphodel_harvester", "powder").toFixed(3); - let desc = `
${loc("space_used_support", [loc("eden_asphodel_name")])}
${loc("produce", [powder, global.resource.Asphodel_Powder.name])}
`; - if (global.tech["hell_spire"] && global.tech.hell_spire >= 11) { - desc += `
${loc("eden_asphodel_harvester_upgrade", [2])}
`; - } - return desc; - }, - s_type: "asphodel", - support() { - return -1; - }, - powered() { - return 0; - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("asphodel_harvester", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["asphodel_harvester", "eden"] - }; - } - }, - ectoplasm_processor: { - id: "eden-ectoplasm_processor", - title: loc("eden_ectoplasm_processor_title"), - desc: `
${loc("eden_ectoplasm_processor_title")}
${loc("space_support", [loc("eden_asphodel_name")])}
`, - reqs: { asphodel: 2 }, - cost: { - Money(offset) { - return spaceCostMultiplier("ectoplasm_processor", offset, 2265e4, 1.24, "eden"); - }, - Titanium(offset) { - return spaceCostMultiplier("ectoplasm_processor", offset, 15e6, 1.24, "eden"); - }, - Stanene(offset) { - return spaceCostMultiplier("ectoplasm_processor", offset, 18e6, 1.24, "eden"); - }, - Asphodel_Powder(offset) { - return spaceCostMultiplier("ectoplasm_processor", offset, 1e3, 1.24, "eden"); - } - }, - effect() { - let desc = `
${loc("space_used_support", [loc("eden_asphodel_name")])}
`; - desc += `
${loc("plus_max_resource", [jobScale(5), loc(`job_ghost_trapper`)])}
`; - return desc; - }, - s_type: "asphodel", - support() { - return -1; - }, - powered() { - return 0; - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("ectoplasm_processor", "eden"); - powerOnNewStruct($(this)[0]); - global.civic.ghost_trapper.display = true; - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["ectoplasm_processor", "eden"] - }; - }, - flair() { - return loc("eden_ectoplasm_processor_flair"); - } - }, - research_station: { - id: "eden-research_station", - title() { - return loc("eden_research_station_title"); - }, - desc: `
${loc("eden_research_station_title")}
${loc("space_support", [loc("eden_asphodel_name")])}
`, - reqs: { asphodel: 3 }, - cost: { - Money(offset) { - return spaceCostMultiplier("research_station", offset, 39185e3, 1.24, "eden"); - }, - Cement(offset) { - return spaceCostMultiplier("research_station", offset, 1e8, 1.24, "eden"); - }, - Asphodel_Powder(offset) { - return spaceCostMultiplier("research_station", offset, 1250, 1.24, "eden"); - }, - Soul_Gem(offset) { - return spaceCostMultiplier("research_station", offset, 10, 1.12, "eden"); - } - }, - effect() { - let attact = global.blood["attract"] ? global.blood.attract * 5 : 0; - let souls = 200 + attact; - if (global.tech["science"] && global.tech.science >= 22 && p_on["embassy"] && p_on["symposium"]) { - souls *= 1 + p_on["symposium"] * piracy("gxy_gorddon"); - } - let desc = `
${loc("space_used_support", [loc("eden_asphodel_name")])}
`; - desc += `
${loc("eden_research_station_effect", [highPopAdjust(souls).toFixed(0), loc("job_ghost_trapper")])}
`; - if (global.tech["science"] && global.tech.science >= 22) { - let boost = 1; - if (global.race["warlord"] && global.eden["corruptor"]) { - boost = 1 + (p_on["corruptor"] || 0) * 0.04; - } - desc += `
${loc("plus_max_resource", [Math.round(777 * boost), global.resource.Omniscience.name])}
`; - let ghost_base = workerScale(global.civic.ghost_trapper.workers, "ghost_trapper"); - ghost_base *= racialTrait(ghost_base, "science"); - ghost_base *= global.race["pompous"] ? 1 - traits.pompous.vars()[0] / 100 : 1; - ghost_base = highPopAdjust(ghost_base); - let ghost_gain = ghost_base * 325e-7 * boost; - desc += `
${loc("gain", [+ghost_gain.toFixed(5), global.resource.Omniscience.name])}
`; - } - return desc; - }, - s_type: "asphodel", - support() { - return -1; - }, - powered() { - return 0; - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("research_station", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["research_station", "eden"] - }; - } - }, - warehouse: { - id: "eden-warehouse", - title() { - return global.tech["storage"] <= 2 ? loc("city_shed_title1") : global.tech["storage"] >= 4 ? loc("city_shed_title3") : loc("city_shed_title2"); - }, - desc() { - let storage = global.tech["storage"] >= 3 ? global.tech["storage"] >= 4 ? loc("city_shed_desc_size3") : loc("city_shed_desc_size2") : loc("city_shed_desc_size1"); - return loc("city_shed_desc", [storage]); - }, - reqs: { asphodel: 7 }, - cost: { - Money(offset) { - return spaceCostMultiplier("warehouse", offset, 3e8, 1.28, "eden"); - }, - Steel(offset) { - return spaceCostMultiplier("warehouse", offset, 15e6, 1.28, "eden"); - }, - Alloy(offset) { - return spaceCostMultiplier("warehouse", offset, 18e6, 1.28, "eden"); - }, - Cement(offset) { - return spaceCostMultiplier("warehouse", offset, 275e5, 1.28, "eden"); - } - }, - res() { - let r_list = [ - "Lumber", - "Stone", - "Chrysotile", - "Furs", - "Copper", - "Iron", - "Aluminium", - "Cement", - "Coal", - "Nano_Tube", - "Neutronium", - "Adamantite", - "Infernite", - "Alloy", - "Polymer", - "Iridium", - "Graphene", - "Stanene", - "Bolognium", - "Orichalcum", - "Asphodel_Powder" - ]; - if (global.tech["storage"] >= 3 && global.resource.Steel.display) { - r_list.push("Steel"); - } - if (global.tech["storage"] >= 4 && global.resource.Titanium.display) { - r_list.push("Titanium"); - } - return r_list; - }, - val(res) { - switch (res) { - case "Lumber": - return global.race["warlord"] ? 5500 : 3750; - case "Stone": - return global.race["warlord"] ? 5500 : 3750; - case "Chrysotile": - return 3750; - case "Furs": - return 2125; - case "Copper": - return global.race["warlord"] ? 3800 : 1900; - case "Iron": - return global.race["warlord"] ? 3300 : 1750; - case "Aluminium": - return global.race["warlord"] ? 3750 : 1600; - case "Cement": - return global.race["warlord"] ? 1800 : 1400; - case "Coal": - return global.race["warlord"] ? 800 : 600; - case "Steel": - return global.race["warlord"] ? 450 : 300; - case "Titanium": - return global.race["warlord"] ? 325 : 200; - case "Nano_Tube": - return global.race["warlord"] ? 350 : 150; - case "Neutronium": - return global.race["warlord"] ? 65 : 40; - case "Adamantite": - return global.race["warlord"] ? 120 : 90; - case "Infernite": - return global.race["warlord"] ? 22 : 18; - case "Alloy": - return global.race["warlord"] ? 350 : 250; - case "Polymer": - return global.race["warlord"] ? 350 : 250; - case "Iridium": - return global.race["warlord"] ? 375 : 225; - case "Graphene": - return global.race["warlord"] ? 250 : 175; - case "Stanene": - return global.race["warlord"] ? 250 : 175; - case "Bolognium": - return global.race["warlord"] ? 75 : 45; - case "Orichalcum": - return global.race["warlord"] ? 62 : 22; - case "Asphodel_Powder": - return global.eden["stabilizer"] ? 0.1 + global.eden.stabilizer.count * 0.015 * (global.race["warlord"] && global.eden["corruptor"] && p_on["corruptor"] ? 1 + p_on["corruptor"] * 0.05 : 1) : 0.1; - default: - return 0; - } - }, - wide: true, - effect() { - let storage = '
'; - let multiplier = storageMultipler(global.race["warlord"] ? 1 : 0.2); - if (global.race["warlord"] && global.eden["corruptor"]) { - multiplier *= 1 + (p_on["corruptor"] || 0) * (global.tech.asphodel >= 12 ? global.tech.asphodel >= 13 ? 0.16 : 0.12 : 0.08); - } - for (const res of $(this)[0].res()) { - if (global.resource[res].display) { - let val = sizeApproximation(+spatialReasoning(+($(this)[0].val(res) * multiplier)).toFixed(0)); - storage = storage + `${loc("plus_max_resource", [val, global.resource[res].name])}`; - } - } - ; - storage = storage + "
"; - return storage; - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("warehouse", "eden"); - let multiplier = storageMultipler(global.race["warlord"] ? 1 : 0.2); - if (global.race["warlord"] && global.eden["corruptor"]) { - multiplier *= 1 + (p_on["corruptor"] || 0) * (global.tech.asphodel >= 12 ? global.tech.asphodel >= 13 ? 0.16 : 0.12 : 0.08); - } - for (const res of $(this)[0].res()) { - if (global.resource[res].display) { - global.resource[res].max += spatialReasoning($(this)[0].val(res) * multiplier); - } - } - ; - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["warehouse", "eden"] - }; - } - }, - stabilizer: { - id: "eden-stabilizer", - title() { - return loc("eden_stabilizer_title"); - }, - desc() { - return loc("eden_stabilizer_title"); - }, - reqs: { asphodel: 8 }, - cost: { - Money(offset) { - return spaceCostMultiplier("stabilizer", offset, 8e8, 1.25, "eden"); - }, - Neutronium(offset) { - return spaceCostMultiplier("stabilizer", offset, 75e5, 1.25, "eden"); - }, - Vitreloy(offset) { - return spaceCostMultiplier("stabilizer", offset, 29e6, 1.25, "eden"); - }, - Elerium(offset) { - return spaceCostMultiplier("stabilizer", offset, 7500, 1.25, "eden"); - }, - Asphodel_Powder(offset) { - return spaceCostMultiplier("stabilizer", offset, 4250, 1.25, "eden"); - } - }, - queue_complete() { - return global.eden.warehouse.count - global.eden.stabilizer.count; - }, - effect() { - let desc = `
${loc("eden_stabilizer_requirement", [loc("city_shed_title3")])}
`; - let store = 15; - let stabilize = 8; - if (p_on["ascension_trigger"] && global.eden.hasOwnProperty("encampment") && global.eden.encampment.asc) { - let heatSink = actions.interstellar.int_sirius.ascension_trigger.heatSink(); - heatSink = heatSink < 0 ? Math.abs(heatSink) : 0; - if (heatSink > 0) { - stabilize *= 1 + heatSink / 17500; - } - } - if (global.race["warlord"] && global.eden["corruptor"] && p_on["corruptor"]) { - stabilize += 0.4 * p_on["corruptor"]; - store *= 1 + p_on["corruptor"] * 0.05; - } - if (stabilize > 99) { - stabilize = 99; - } - desc += `
${loc("eden_stabilizer_effect1", [global.resource.Asphodel_Powder.name, +stabilize.toFixed(1)])}
`; - desc += `
${loc("eden_stabilizer_effect2", [global.resource.Asphodel_Powder.name, loc("city_shed_title3"), +store.toFixed(1)])}
`; - desc += `
${loc("eden_stabilizer_limit", [global?.eden?.warehouse?.count || 0])}
`; - return desc; - }, - action(args) { - if (global.eden.stabilizer.count < global.eden.warehouse.count && payCosts($(this)[0])) { - incrementStruct("stabilizer", "eden"); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["stabilizer", "eden"] - }; - } - }, - rune_gate: { - id: "eden-rune_gate", - title: loc("eden_rune_gate_title"), - desc(wiki) { - if (!global.eden.hasOwnProperty("rune_gate") || global.eden.rune_gate.count < 100 || wiki) { - return `
${loc("eden_rune_gate_title")}
${loc("requires_segments", [100])}
`; - } else { - return `
${loc("eden_rune_gate_title")}
`; - } - }, - reqs: { elysium: 1 }, - condition() { - return global.eden.rune_gate.count < 100 ? true : false; - }, - queue_size: 10, - queue_complete() { - return 100 - global.eden.rune_gate.count; - }, - cost: { - Money(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("rune_gate") ? global.eden.rune_gate.count : 0) < 100 ? 1e9 : 0; - } - return !global.eden.hasOwnProperty("rune_gate") || global.eden.rune_gate.count < 100 ? 1e9 : 0; - }, - Omniscience(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("rune_gate") ? global.eden.rune_gate.count : 0) < 100 ? 1e4 : 0; - } - return !global.eden.hasOwnProperty("rune_gate") || global.eden.rune_gate.count < 100 ? 1e4 : 0; - }, - Copper(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("rune_gate") ? global.eden.rune_gate.count : 0) < 100 ? 42e7 : 0; - } - return !global.eden.hasOwnProperty("rune_gate") || global.eden.rune_gate.count < 100 ? 42e7 : 0; - }, - Nano_Tube(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("rune_gate") ? global.eden.rune_gate.count : 0) < 100 ? 35e6 : 0; - } - return !global.eden.hasOwnProperty("rune_gate") || global.eden.rune_gate.count < 100 ? 35e6 : 0; - }, - Bolognium(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("rune_gate") ? global.eden.rune_gate.count : 0) < 100 ? 75e5 : 0; - } - return !global.eden.hasOwnProperty("rune_gate") || global.eden.rune_gate.count < 100 ? 75e5 : 0; - }, - Asphodel_Powder(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("rune_gate") ? global.eden.rune_gate.count : 0) < 100 ? 25e3 : 0; - } - return !global.eden.hasOwnProperty("rune_gate") || global.eden.rune_gate.count < 100 ? 25e3 : 0; - } - }, - effect(wiki) { - let count = (wiki?.count ?? 0) + (global.eden.hasOwnProperty("rune_gate") ? global.eden.rune_gate.count : 0); - if (count >= 100) { - let desc = `
${loc("eden_rune_gate_effect")}
`; - return desc; - } else { - let size = 100; - let remain = size - count; - return `
${loc("eden_rune_gate_effect")}
${loc("space_dwarf_collider_effect2", [remain])}
`; - } - }, - action(args) { - if (global.eden.rune_gate.count < 100 && payCosts($(this)[0])) { - incrementStruct("rune_gate", "eden"); - if (global.eden.rune_gate.count === 100) { - global.eden.rune_gate_open.count = 1; - global.settings.eden.elysium = true; - global.tech.elysium = 2; - renderEdenic(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["rune_gate", "eden"] - }; - } - }, - rune_gate_open: { - id: "space-rune_gate_complete", - title: loc("eden_rune_gate_title"), - desc() { - return `
${loc("eden_rune_gate_title")}
`; - }, - wiki: false, - reqs: { elysium: 1 }, - condition() { - return global.eden.rune_gate.count === 100 ? true : false; - }, - queue_complete() { - return 0; - }, - cost: {}, - effect() { - return `
${loc("eden_rune_gate_open", [loc("eden_elysium_name")])}
`; - }, - action(args) { - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["rune_gate_open", "eden"] - }; - } - }, - bunker: { - id: "eden-bunker", - title: loc("eden_bunker_title"), - desc: `
${loc("eden_bunker_title")}
${loc("space_support", [loc("eden_asphodel_name")])}
`, - reqs: { asphodel: 9 }, - cost: { - Money(offset) { - return spaceCostMultiplier("bunker", offset, 777e6, 1.2, "eden"); - }, - Stone(offset) { - return spaceCostMultiplier("bunker", offset, 358e6, 1.2, "eden"); - }, - Furs(offset) { - return spaceCostMultiplier("bunker", offset, 666e5, 1.2, "eden"); - }, - Asphodel_Powder(offset) { - return spaceCostMultiplier("bunker", offset, 9999, 1.2, "eden"); - } - }, - effect() { - let desc = `
${loc("space_used_support", [loc("eden_asphodel_name")])}
`; - desc += `
${loc("plus_max_soldiers", [$(this)[0].soldiers()])}
`; - if (global.race.universe === "evil" && global.race["warlord"]) { - desc += `
${loc("plus_max_resource", [1, global.resource.Authority.name])}
`; - } - if (global.tech["celestial_warfare"] && global.tech.celestial_warfare >= 4 && (!global.tech["elysium"] || global.tech.elysium < 8)) { - desc += `
${loc("eden_bunker_effect", [3])}
`; - } - if (global.tech["celestial_warfare"] && global.tech.celestial_warfare >= 5) { - let rate = 10; - if (global.blood["lust"]) { - rate += global.blood.lust * 0.2; - } - let milVal = govActive("militant", 0); - if (milVal) { - rate *= 1 + milVal / 100; - } - desc += `
${loc("city_boot_camp_effect", [+rate.toFixed(2)])}
`; - } - return desc; - }, - s_type: "asphodel", - support() { - return -1; - }, - powered() { - return 0; - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("bunker", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["bunker", "eden"] - }; - }, - soldiers() { - let soldiers = global.race["grenadier"] ? 3 : 5; - return jobScale(soldiers); - } - }, - bliss_den: { - id: "eden-bliss_den", - title: loc("eden_bliss_den_title"), - desc: `
${loc("eden_bliss_den_title")}
${loc("space_support", [loc("eden_asphodel_name")])}
`, - reqs: { asphodel: 10 }, - cost: { - Money(offset) { - return spaceCostMultiplier("bliss_den", offset, 45e7, 1.22, "eden"); - }, - Furs(offset) { - return spaceCostMultiplier("bliss_den", offset, 29e6, 1.22, "eden"); - }, - Asphodel_Powder(offset) { - return spaceCostMultiplier("bliss_den", offset, 35e3, 1.22, "eden"); - }, - Plywood(offset) { - return spaceCostMultiplier("bliss_den", offset, 1e7, 1.22, "eden"); - }, - Soul_Gem(offset) { - return spaceCostMultiplier("bliss_den", offset, 10, 1.22, "eden"); - } - }, - effect() { - let morale = 8; - let max = 2; - let desc = `
${loc("space_used_support", [loc("eden_asphodel_name")])}
`; - if (!global.race["joyless"]) { - desc += `
${loc("space_red_vr_center_effect1", [morale])}
`; - } - desc += `
${loc("space_red_vr_center_effect2", [max])}
`; - return desc; - }, - s_type: "asphodel", - support() { - return -1; - }, - powered() { - return 0; - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("bliss_den", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["bliss_den", "eden"] - }; - }, - flair() { - return loc(`eden_bliss_den_flair`); - } - }, - rectory: { - id: "eden-rectory", - title: loc("eden_rectory_title"), - desc: `
${loc("eden_rectory_title")}
${loc("requires_power")}
`, - reqs: { asphodel: 11 }, - not_trait: ["warlord"], - cost: { - Money(offset) { - return spaceCostMultiplier("rectory", offset, 275e6, 1.24, "eden"); - }, - Copper(offset) { - return spaceCostMultiplier("rectory", offset, 182e5, 1.24, "eden"); - }, - Brick(offset) { - return spaceCostMultiplier("rectory", offset, 75e5, 1.24, "eden"); - }, - Soul_Gem(offset) { - return spaceCostMultiplier("rectory", offset, 18, 1.24, "eden"); - } - }, - effect() { - let desc = `
${loc("eden_encampment_effect", [$(this)[0].support()])}
`; - desc += `
${loc("plus_max_citizens", [$(this)[0].citizens()])}
`; - if (global.genes["ancients"] && global.genes["ancients"] >= 4) { - desc += `
${loc("plus_max_resource", [jobScale(1), global.civic?.priest?.name || loc(`job_priest`)])}
`; - } - desc += `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - support() { - return 1; - }, - powered() { - return powerCostMod(50); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("rectory", "eden"); - if (powerOnNewStruct($(this)[0])) { - global["resource"][global.race.species].max += $(this)[0].citizens(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["rectory", "eden"] - }; - }, - citizens() { - let pop = 4; - if (global.race["high_pop"]) { - pop *= traits.high_pop.vars()[0]; - } - return pop; - }, - flair() { - return loc(`eden_rectory_flair`); - } - }, - corruptor: { - id: "eden-corruptor", - title: loc("eden_corruptor_title"), - desc: `
${loc("eden_corruptor_title")}
${loc("requires_power")}
`, - reqs: { asphodel: 11 }, - trait: ["warlord"], - wiki: global.race["warlord"] ? true : false, - cost: { - Money(offset) { - return spaceCostMultiplier("corruptor", offset, 275e6, 1.24, "eden"); - }, - Furs(offset) { - return spaceCostMultiplier("corruptor", offset, 175e5, 1.24, "eden"); - }, - Copper(offset) { - return spaceCostMultiplier("corruptor", offset, 182e5, 1.24, "eden"); - }, - Soul_Gem(offset) { - return spaceCostMultiplier("corruptor", offset, 8, 1.24, "eden"); - } - }, - effect() { - let elerium = sizeApproximation(spatialReasoning(200)); - let warehouse = global.tech?.asphodel >= 12 ? edenicModules.eden_asphodel.warehouse.title() : `${loc("wiki_tech_tree_asphodel")} ${edenicModules.eden_asphodel.warehouse.title()}`; - let desc = `
${loc("eden_encampment_effect", [$(this)[0].support()])}
`; - desc += `
${loc("eden_corruptor_effect", [4, edenicModules.eden_asphodel.research_station.title(), global.resource.Omniscience.name])}
`; - desc += `
${loc("eden_corruptor_effect", [global.tech?.asphodel >= 12 ? global.tech?.asphodel >= 13 ? 16 : 12 : 8, warehouse, loc("tab_storage")])}
`; - if (global.tech?.asphodel >= 12) { - desc += `
${loc("eden_corruptor_effect", [global.tech?.asphodel >= 13 ? 12 : 10, actions.portal.prtl_lake.harbor.title(), loc("tab_storage")])}
`; - } - desc += `
${loc("eden_corruptor_effect2", [5, edenicModules.eden_asphodel.stabilizer.title()])}
`; - desc += `
${loc("production", [6, edenicModules.eden_asphodel.asphodel_harvester.title()])}
`; - if (global.tech?.asphodel >= 12) { - desc += `
${loc("eden_corruptor_effect", [8, edenicModules.eden_elysium.eternal_bank.title(), loc("resource_Money_name")])}
`; - desc += `
${loc("eden_corruptor_effect", [6, edenicModules.eden_asphodel.soul_engine.title(), loc("power")])}
`; - } - if (global.tech?.asphodel >= 13) { - desc += `
${loc("eden_corruptor_effect2", [3, edenicModules.eden_isle.spirit_battery.title()])}
`; - } - desc += `
${loc("plus_max_resource", [elerium, global.resource.Elerium.name])}
`; - desc += `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - support() { - return 1; - }, - powered() { - return powerCostMod(25); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("corruptor", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["corruptor", "eden"] - }; - } - } - }, - eden_elysium: { - info: { - name: loc("eden_elysium_name"), - desc: loc("eden_elysium_desc"), - prop() { - let soldier_title = global.tech["world_control"] && !global.race["truepath"] ? loc("civics_garrison_peacekeepers") : loc("civics_garrison_soldiers"); - let desc = `${soldier_title} / {{ filter(max, 's_max') }}`; - desc += `${loc("civics_garrison_wounded")} {{ wounded }}`; - desc += ``; - return desc; - }, - bind() { - return global.civic.garrison; - }, - filter(v, type) { - switch (type) { - case "stationed": - return garrisonSize(); - case "s_max": - return garrisonSize(true); - case "m_use": - return loc(`civics_garrison_mercenary_cost`, [Math.round(mercCost()).toLocaleString()]); - } - } - }, - survey_fields: { - id: "eden-survey_fields", - title: loc("eden_survey_fields"), - desc: loc("eden_survey_fields"), - reqs: { elysium: 2 }, - grant: ["elysium", 3], - cost: { - Money() { - return 1e9; - }, - Oil() { - return 1e7; - }, - Helium_3() { - return 5e6; - } - }, - effect: loc("eden_survey_fields_effect"), - action(args) { - if (payCosts($(this)[0])) { - messageQueue(loc("eden_survey_fields_msg"), "info", false, ["progress"]); - global.eden["fortress"] = { fortress: 1e3, patrols: 20, armory: 100, detector: 100 }; - return true; - } - return false; - }, - post() { - if (global.tech["elysium"] && global.tech.elysium === 3) { - renderEdenic(); - clearPopper("eden-survey_fields"); - } - } - }, - fortress: { - id: "eden-fortress", - title: loc("eden_fortress"), - desc: loc("eden_fortress"), - queue_complete() { - return 0; - }, - reqs: { elysium: 3 }, - condition() { - return global.tech.elysium === 3; - }, - effect() { - let desc = `
${loc("eden_fortress_rating", [global.eden["fortress"] ? global.eden.fortress.fortress / 10 : 0])}
`; - desc += `
${loc("eden_fortress_patrols", [global.eden["fortress"] ? global.eden.fortress.patrols : 0])}
`; - desc += `
${loc("eden_fortress_detect", [global.eden["fortress"] ? global.eden.fortress.detector : 0])}
`; - desc += `
${loc("eden_fortress_armory", [global.eden["fortress"] ? global.eden.fortress.armory : 0])}
`; - return desc; - }, - action(args) { - return false; - } - }, - siege_fortress: { - id: "eden-siege_fortress", - title: loc("eden_siege_fortress"), - desc: loc("eden_siege_fortress"), - queue_complete() { - return 0; - }, - reqs: { elysium: 3 }, - condition() { - return global.tech.elysium === 3 && global.eden.fortress.fortress > 0; - }, - cost: { - Troops() { - return jobScale(100); - } - }, - effect() { - let desc = `
${loc(`eden_siege_fortress_effect`)}
`; - if (global.eden.hasOwnProperty("fortress") && global.eden.fortress.hasOwnProperty("siege")) { - desc += `
${loc(`eden_siege_fortress_result`)}
`; - desc += `
${loc(`eden_siege_fortress_lost`, [global.eden.fortress.siege.loss])}
`; - desc += `
${loc(`eden_siege_fortress_damage`, [global.eden.fortress.siege.damage])}
`; - desc += `
${loc("eden_fortress_rating", [global.eden["fortress"] ? global.eden.fortress.fortress / 10 : 0])}
`; - } - return desc; - }, - action(args) { - let armySize = jobScale(100); - if (garrisonSize() < armySize) { - return false; - } - let armory = (global.eden.fortress.armory + 20) / 20; - let enemy_pats = global.eden.fortress.patrols * armory; - let remain = jobScale(100 - enemy_pats < 0 ? 0 : 100 - enemy_pats); - if (remain <= 0) { - global.eden.fortress["siege"] = { loss: armySize, damage: 0 }; - global.civic.garrison.protest += armySize; - soldierDeath(armySize); - messageQueue(loc("eden_siege_fortress_fail"), "warning", false, ["combat"]); - } else { - let dead = armySize - remain + Math.floor(seededRandom(0, jobScale(global.eden.fortress.detector), true)); - dead = deadCalc(dead, armySize); - remain = armySize - dead; - let troops = Math.ceil(armyRating(remain, "Troops")); - let damage = Math.floor(seededRandom(0, troops, true) / 50); - let more_dead = Math.floor(seededRandom(0, remain, true)); - more_dead = deadCalc(more_dead, remain); - remain = remain - more_dead; - dead += more_dead; - global.civic.garrison.protest += dead; - soldierDeath(dead); - global.civic.garrison.wounded += Math.floor(seededRandom(0, remain, true)); - if (global.civic.garrison.wounded > global.civic.garrison.workers) { - global.civic.garrison.wounded = global.civic.garrison.workers; - } - global.eden.fortress.fortress -= damage; - if (global.eden.fortress.fortress < 0) { - global.eden.fortress.fortress = 0; - } - global.eden.fortress["siege"] = { loss: dead, damage: damage / 10 }; - if (global.eden.fortress.fortress <= 0) { - messageQueue(loc("eden_siege_fortress_fall"), "success", false, ["combat"]); - global.tech.elysium = 4; - } else { - messageQueue(loc("eden_siege_fortress_success", [damage / 10]), "success", false, ["combat"]); - } - } - renderEdenic(); - return false; - } - }, - raid_supplies: { - id: "eden-raid_supplies", - title: loc("eden_raid_supplies"), - desc: loc("eden_raid_supplies"), - queue_complete() { - return 0; - }, - reqs: { elysium: 3 }, - condition() { - return global.tech.elysium === 3 && global.eden.fortress.armory > 0; - }, - cost: { - Troops() { - return jobScale(50); - } - }, - effect() { - let desc = `
${loc(`eden_raid_supplies_effect`)}
`; - if (global.eden.hasOwnProperty("fortress") && global.eden.fortress.hasOwnProperty("raid")) { - desc += `
${loc(`eden_raid_fortress_result`)}
`; - desc += `
${loc(`eden_siege_fortress_lost`, [global.eden.fortress.raid.loss])}
`; - desc += `
${loc(`eden_siege_fortress_damage`, [global.eden.fortress.raid.damage])}
`; - desc += `
${loc("eden_fortress_armory", [global.eden["fortress"] ? global.eden.fortress.armory : 0])}
`; - } - return desc; - }, - action(args) { - let armySize = jobScale(50); - if (garrisonSize() < armySize) { - return false; - } - let enemy_pats = global.eden.fortress.patrols * 2.5; - let remain = Math.ceil(jobScale(50 - enemy_pats < 0 ? 0 : 50 - enemy_pats)); - if (remain <= 0) { - global.eden.fortress["raid"] = { loss: armySize, damage: 0 }; - global.civic.garrison.protest += armySize; - soldierDeath(armySize); - messageQueue(loc("eden_raid_fortress_fail"), "warning", false, ["combat"]); - } else { - let dead = armySize - remain + Math.floor(seededRandom(0, jobScale(global.eden.fortress.detector / 2), true)); - dead = deadCalc(dead, armySize); - remain = armySize - dead; - let troops = Math.ceil(armyRating(remain, "Troops")); - let damage = Math.floor(seededRandom(0, troops, true) / 50); - global.civic.garrison.protest += dead; - soldierDeath(dead); - global.civic.garrison.wounded += Math.floor(seededRandom(0, remain, true)); - if (global.civic.garrison.wounded > global.civic.garrison.workers) { - global.civic.garrison.wounded = global.civic.garrison.workers; - } - global.eden.fortress.armory -= damage; - if (global.eden.fortress.armory < 0) { - global.eden.fortress.armory = 0; - } - global.eden.fortress["raid"] = { loss: dead, damage }; - messageQueue(loc("eden_raid_fortress_success", [damage]), "success", false, ["combat"]); - drawTech(); - } - renderEdenic(); - return false; - } - }, - ambush_patrol: { - id: "eden-ambush_patrol", - title: loc("eden_ambush_patrol"), - desc: loc("eden_ambush_patrol"), - queue_complete() { - return 0; - }, - reqs: { elysium: 3 }, - condition() { - return global.tech.elysium === 3 && global.eden.fortress.patrols > 0; - }, - cost: { - Troops() { - return jobScale(25); - } - }, - effect() { - let desc = `
${loc(`eden_ambush_patrol_effect`)}
`; - if (global.eden.hasOwnProperty("fortress") && global.eden.fortress.hasOwnProperty("ambush")) { - desc += `
${loc(`eden_ambush_patrol_result`)}
`; - desc += `
${loc(`eden_siege_fortress_lost`, [global.eden.fortress.ambush.loss])}
`; - desc += `
${loc(`eden_ambush_patrol_damage`, [global.eden.fortress.ambush.damage ? loc("true") : loc("false")])}
`; - desc += `
${loc("eden_fortress_patrols", [global.eden["fortress"] ? global.eden.fortress.patrols : 0])}
`; - } - return desc; - }, - action(args) { - let armySize = jobScale(25); - if (garrisonSize() < armySize) { - return false; - } - if (armyRating(jobScale(1), "Troops") > Math.floor(seededRandom(0, global.eden.fortress.detector * 2, true))) { - let dead = Math.floor(seededRandom(0, armySize, true)); - dead = deadCalc(dead, armySize); - let remain = armySize - dead; - global.civic.garrison.protest += dead; - soldierDeath(dead); - global.civic.garrison.wounded += Math.floor(seededRandom(0, remain, true)); - if (global.civic.garrison.wounded > global.civic.garrison.workers) { - global.civic.garrison.wounded = global.civic.garrison.workers; - } - global.eden.fortress.patrols--; - global.eden.fortress["ambush"] = { loss: dead, damage: true }; - messageQueue(loc("eden_ambush_patrol_success"), "success", false, ["combat"]); - drawTech(); - } else { - global.eden.fortress["ambush"] = { loss: armySize, damage: false }; - global.civic.garrison.protest += armySize; - soldierDeath(armySize); - messageQueue(loc("eden_ambush_patrol_fail"), "warning", false, ["combat"]); - } - renderEdenic(); - return false; - } - }, - ruined_fortress: { - id: "eden-ruined_fortress", - title: loc("eden_ruined_fortress"), - desc: loc("eden_ruined_fortress"), - queue_complete() { - return 0; - }, - reqs: { elysium: 4 }, - condition() { - return global.tech.elysium < 8; - }, - wiki: false, - effect() { - return loc("eden_ruined_fortress_effect"); - }, - action(args) { - return false; - } - }, - scout_elysium: { - id: "eden-scout_elysium", - title: loc("eden_scout_elysium_title"), - desc: loc("eden_scout_elysium_title"), - reqs: { elysium: 4 }, - grant: ["elysium", 5], - queue_complete() { - return global.tech.elysium >= 5 ? 0 : 1; - }, - cost: { - Money() { - return 1e10; - }, - Oil() { - return 9e6; - }, - Helium_3() { - return 6e6; - }, - Troops() { - return jobScale(100); - } - }, - effect: loc("eden_scout_elysium_effect"), - action(args) { - if (payCosts($(this)[0])) { - messageQueue(loc("eden_scout_elysium_result"), "info", false, ["progress"]); - global.settings.eden.isle = true; - global.civic.garrison.protest += jobScale(50); - soldierDeath(jobScale(50)); - return true; - } - return false; - } - }, - fire_support_base: { - id: "eden-fire_support_base", - title: loc("eden_fire_support_base_title"), - desc(wiki) { - if (!global.eden.hasOwnProperty("fire_support_base") || global.eden.fire_support_base.count < 100 || wiki) { - return `
${loc("eden_fire_support_base_title")}
${loc("requires_segments", [100])}
`; - } else { - return `
${loc("eden_fire_support_base_title")}
`; - } - }, - reqs: { elysium: 8 }, - queue_size: 10, - queue_complete() { - return 100 - global.eden.fire_support_base.count; - }, - cost: { - Money(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("fire_support_base") ? global.eden.fire_support_base.count : 0) < 100 ? 25e8 : 0; - } - return !global.eden.hasOwnProperty("fire_support_base") || global.eden.fire_support_base.count < 100 ? 25e8 : 0; - }, - Stone(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("fire_support_base") ? global.eden.fire_support_base.count : 0) < 100 ? 235e6 : 0; - } - return !global.eden.hasOwnProperty("fire_support_base") || global.eden.fire_support_base.count < 100 ? 235e6 : 0; - }, - Neutronium(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("fire_support_base") ? global.eden.fire_support_base.count : 0) < 100 ? 375e4 : 0; - } - return !global.eden.hasOwnProperty("fire_support_base") || global.eden.fire_support_base.count < 100 ? 375e4 : 0; - }, - Polymer(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("fire_support_base") ? global.eden.fire_support_base.count : 0) < 100 ? 65e6 : 0; - } - return !global.eden.hasOwnProperty("fire_support_base") || global.eden.fire_support_base.count < 100 ? 65e6 : 0; - }, - Elysanite(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("fire_support_base") ? global.eden.fire_support_base.count : 0) < 100 ? 625e3 : 0; - } - return !global.eden.hasOwnProperty("fire_support_base") || global.eden.fire_support_base.count < 100 ? 625e3 : 0; - }, - Elerium() { - return global.tech.elysium >= 10 && global.eden.fire_support_base.count === 100 && global.tech["isle"] && global.tech.isle === 1 ? 25e4 : 0; - } - }, - effect(wiki) { - let count = (wiki?.count ?? 0) + (global.eden.hasOwnProperty("fire_support_base") ? global.eden.fire_support_base.count : 0); - if (count >= 100) { - let desc = `
${loc("plus_max_soldiers", [$(this)[0].soldiers()])}
`; - if (global.tech["elysium"] && global.tech.elysium >= 10 && global.tech.isle === 1) { - if (global.resource.Elerium.amount >= 25e4) { - desc += `
${loc("eden_fire_support_base_effect")}
`; - } else { - desc += `
${loc("eden_fire_support_base_effect")}
`; - } - desc += `
${loc("eden_fire_support_base_effect2", [sizeApproximation(25e4), global.resource.Elerium.name])}
`; - } - return desc; - } else { - let size = 100; - let remain = size - count; - return `
${loc("eden_fire_support_base_build")}
${loc("space_dwarf_collider_effect2", [remain])}
`; - } - }, - action(args) { - if (global.eden.fire_support_base.count < 100 && payCosts($(this)[0])) { - incrementStruct("fire_support_base", "eden"); - if (global.eden.fire_support_base.count === 100 && !global.tech["isle"]) { - global.eden["enemy_isle"] = { wt: 100, et: 100, g: 100 }; - global.tech["isle"] = 1; - renderEdenic(); - drawTech(); - } - return true; - } else if (global.eden.fire_support_base.count === 100 && global.tech.elysium >= 10 && global.tech["isle"] && global.tech.isle === 1 && payCosts($(this)[0])) { - let target = null, element = null; - let targets = []; - if (!global.eden["enemy_isle"]) { - global.eden["enemy_isle"] = { wt: 100, et: 100, g: 100 }; - } - if (global.eden.enemy_isle.wt > 0) { - targets.push("wt"); - } - if (global.eden.enemy_isle.g > 0) { - targets.push("g"); - } - if (global.eden.enemy_isle.et > 0) { - targets.push("et"); - } - if (global.eden["pillbox"] && global.eden.pillbox.staffed > 0) { - let rating = +(Math.round(armyRating(global.eden.pillbox.staffed, "army", 0)) / (global.race["warlord"] ? 1250 : 75)).toFixed(0); - if (rating > 100) { - rating = 100; - } - global.eden.fire_support_base.count = Math.floor(rating); - } else { - global.eden.fire_support_base.count = 0; - } - if (global.eden.fire_support_base.count < 100) { - messageQueue(loc("eden_fire_support_base_counterattack", [loc("eden_fire_support_base_title")]), "danger", false, ["progress"]); - } - target = targets[Math.floor(seededRandom(0, targets.length))]; - if (target === "wt") { - element = "#eden-west_tower .button"; - } else if (target === "et") { - element = "#eden-east_tower .button"; - } else if (target === "g") { - element = "#eden-isle_garrison .button"; - } - let redraw = false; - global.eden.enemy_isle[target] -= Math.floor(seededRandom(25, 75)); - if (global.eden.enemy_isle[target] <= 0) { - global.eden.enemy_isle[target] = 0; - redraw = true; - } - let nuke = $('
'); - $(element).append(nuke); - setTimeout(function() { - nuke.addClass("burn"); - }, 500); - setTimeout(function() { - nuke.addClass("b"); - }, 600); - setTimeout(function() { - nuke.addClass("c"); - }, 2500); - setTimeout(function() { - $(`${element} .mininuke`).remove(); - }, 4500); - if (global.eden.enemy_isle.wt === 0 && global.eden.enemy_isle.g === 0 && global.eden.enemy_isle.et === 0) { - global.tech.isle = 2; - global.settings.eden.palace = true; - initStruct(edenicModules.eden_elysium.north_pier); - initStruct(edenicModules.eden_isle.south_pier); - drawTech(); - renderEdenic(); - return true; - } else if (redraw) { - renderEdenic(); - } - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["fire_support_base", "eden"] - }; - }, - soldiers() { - let soldiers = global.race["grenadier"] ? 15 : 25; - return jobScale(soldiers); - } - }, - elysanite_mine: { - id: "eden-elysanite_mine", - title: loc("eden_elysanite_mine_title"), - desc: `
${loc("eden_elysanite_mine_title")}
${loc("requires_power")}
`, - reqs: { elysium: 6 }, - cost: { - Money(offset) { - return spaceCostMultiplier("elysanite_mine", offset, 566e6, 1.24, "eden"); - }, - Adamantite(offset) { - return spaceCostMultiplier("elysanite_mine", offset, 18e6, 1.24, "eden"); - }, - Wrought_Iron(offset) { - return spaceCostMultiplier("elysanite_mine", offset, 1e7, 1.24, "eden"); - } - }, - effect() { - let desc = `
${loc("plus_max_resource", [jobScale(2), loc(`job_elysium_miner`)])}
`; - desc += `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - powered() { - return powerCostMod(25); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("elysanite_mine", "eden"); - powerOnNewStruct($(this)[0]); - global.civic.elysium_miner.display = true; - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["elysanite_mine", "eden"] - }; - } - }, - sacred_smelter: { - id: "eden-sacred_smelter", - title() { - return loc("eden_sacred_smelter_title"); - }, - desc() { - return `
${loc("eden_sacred_smelter_title")}
${loc("requires_power")}
`; - }, - reqs: { elysium: 7 }, - cost: { - Money(offset) { - return spaceCostMultiplier("sacred_smelter", offset, 625e6, 1.25, "eden"); - }, - Iridium(offset) { - return spaceCostMultiplier("sacred_smelter", offset, 25e6, 1.25, "eden"); - }, - Elysanite(offset) { - return spaceCostMultiplier("sacred_smelter", offset, 45e5, 1.25, "eden"); - }, - Scarletite(offset) { - return spaceCostMultiplier("sacred_smelter", offset, 125e4, 1.25, "eden"); - } - }, - effect() { - let desc = `
${loc("interstellar_stellar_forge_effect3", [$(this)[0].smelting()])}
`; - if (global.tech["elysium"] && global.tech.elysium >= 18) { - desc += `
${loc("city_foundry_effect1", [jobScale(3)])}
`; - } - return `${desc}
${loc("minus_power", [$(this)[0].powered()])}
`; - }, - powered() { - return powerCostMod(33); - }, - smelting() { - return 5; - }, - special: true, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("sacred_smelter", "eden"); - if (powerOnNewStruct($(this)[0])) { - addSmelter($(this)[0].smelting(), "Steel"); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["sacred_smelter", "eden"] - }; - } - }, - elerium_containment: { - id: "eden-elerium_containment", - title() { - return loc("eden_elerium_containment", [global.resource.Elerium.name]); - }, - desc() { - return `
${loc("eden_elerium_containment", [global.resource.Elerium.name])}
${loc("requires_power")}
`; - }, - reqs: { elysium: 11 }, - cost: { - Money(offset) { - return spaceCostMultiplier("elerium_containment", offset, 45e8, 1.28, "eden"); - }, - Graphene(offset) { - return spaceCostMultiplier("elerium_containment", offset, 1e8, 1.28, "eden"); - }, - Aerogel(offset) { - return spaceCostMultiplier("elerium_containment", offset, 88e6, 1.28, "eden"); - }, - Elysanite(offset) { - return spaceCostMultiplier("elerium_containment", offset, 25e6, 1.28, "eden"); - } - }, - effect() { - let elerium = sizeApproximation(spatialReasoning(1e3)); - return `
${loc("plus_max_resource", [elerium, global.resource.Elerium.name])}
${loc("minus_power", [$(this)[0].powered()])}
`; - }, - powered() { - return powerCostMod(50); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("elerium_containment", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["elerium_containment", "eden"] - }; - } - }, - pillbox: { - id: "eden-pillbox", - title() { - return loc("eden_pillbox_title"); - }, - desc() { - return `
${loc("eden_pillbox_title")}
${loc("requires_soldiers")}
${loc("requires_power")}
`; - }, - reqs: { elysium: 9 }, - cost: { - Money(offset) { - return spaceCostMultiplier("pillbox", offset, 15e8, 1.26, "eden"); - }, - Cement(offset) { - return spaceCostMultiplier("pillbox", offset, 5e8, 1.26, "eden"); - }, - Steel(offset) { - return spaceCostMultiplier("pillbox", offset, 65e6, 1.26, "eden"); - }, - Nanoweave(offset) { - return spaceCostMultiplier("pillbox", offset, 38e6, 1.26, "eden"); - } - }, - effect() { - let rating = +(Math.round(armyRating(global.eden["pillbox"] && global.eden.pillbox.staffed ? global.eden.pillbox.staffed : jobScale(10), "army", 0)) / (global.race["warlord"] ? 1250 : 75)).toFixed(1); - if (rating > 100) { - rating = 100; - } - let desc = ``; - if (!global.tech["isle"] || global.tech.isle === 1) { - desc += `
${loc("eden_pillbox_effect", [rating])}
`; - } - if (global.tech["elysium"] && global.tech.elysium >= 12 && !global.race["joyless"]) { - desc += `
${loc("eden_restaurant_effect", [0.35, loc(`eden_restaurant_bd`)])}
`; - } - desc += `
${loc("portal_guard_post_effect2", [jobScale(10), $(this)[0].powered()])}
`; - return desc; - }, - powered() { - return powerCostMod(12); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("pillbox", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0, staffed: 0 }, - p: ["pillbox", "eden"] - }; - } - }, - restaurant: { - id: "eden-restaurant", - title() { - return global.eden["restaurant"] && global.eden.restaurant.count >= 10 ? loc("eden_restaurant_bd") : loc("eden_restaurant_title"); - }, - desc() { - return `
${loc("eden_restaurant_title")}
${loc("requires_power_combo", [global.resource.Food.name])}
`; - }, - reqs: { elysium: 12 }, - cost: { - Money(offset) { - return spaceCostMultiplier("restaurant", offset, 425e7, 1.26, "eden"); - }, - Oil(offset) { - return spaceCostMultiplier("restaurant", offset, 1e6, 1.26, "eden"); - }, - Polymer(offset) { - return spaceCostMultiplier("restaurant", offset, 11e7, 1.26, "eden"); - }, - Sheet_Metal(offset) { - return spaceCostMultiplier("restaurant", offset, 25e6, 1.26, "eden"); - } - }, - effect() { - let food = 25e4; - let morale = 0; - morale += global.eden.hasOwnProperty("pillbox") && p_on["pillbox"] ? 0.35 * p_on["pillbox"] : 0; - morale += (global.civic?.elysium_miner?.workers ?? 0) * 0.15; - morale += global.eden.hasOwnProperty("archive") && p_on["archive"] ? 0.4 * p_on["archive"] : 0; - let desc = ""; - if (!global.race["joyless"]) { - desc += `
${loc("space_red_vr_center_effect1", [morale.toFixed(1)])}
`; - } - desc += `
${loc("interstellar_alpha_starport_effect3", [sizeApproximation(food), global.resource.Food.name])}
`; - desc += `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - powered() { - return powerCostMod(25); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("restaurant", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["restaurant", "eden"] - }; - } - }, - eternal_bank: { - id: "eden-eternal_bank", - title() { - return loc("eden_eternal_bank_title"); - }, - desc() { - return `
${loc("eden_eternal_bank_title")}
${loc("requires_power")}
`; - }, - reqs: { elysium: 13 }, - cost: { - Money(offset) { - return spaceCostMultiplier("eternal_bank", offset, traitCostMod("untrustworthy", 25e8), 1.26, "eden"); - }, - Bolognium(offset) { - return spaceCostMultiplier("eternal_bank", offset, traitCostMod("untrustworthy", 1e7), 1.26, "eden"); - }, - Orichalcum(offset) { - return spaceCostMultiplier("eternal_bank", offset, traitCostMod("untrustworthy", 125e5), 1.26, "eden"); - }, - Mythril(offset) { - return spaceCostMultiplier("eternal_bank", offset, traitCostMod("untrustworthy", 75e5), 1.26, "eden"); - } - }, - effect() { - let vault = spatialReasoning(bank_vault() * (global.race["warlord"] ? 20 : 10)); - if (global.race["warlord"] && global.eden["corruptor"] && global.tech.asphodel >= 12) { - vault *= 1 + (p_on["corruptor"] || 0) * 0.08; - } - vault = (+vault.toFixed(0)).toLocaleString(); - return loc("plus_max_resource", [`$${vault}`, loc("resource_Money_name")]); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("eternal_bank", "eden"); - global["resource"]["Money"].max += spatialReasoning(bank_vault() * (global.race["warlord"] ? 20 : 10)); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["eternal_bank", "eden"] - }; - } - }, - archive: { - id: "eden-archive", - title() { - return global.eden["archive"] && global.eden.archive.count >= 10 ? loc("eden_archive_bd") : loc("eden_archive_title"); - }, - desc() { - return `
${loc("eden_archive_title")}
${loc("requires_power")}
`; - }, - reqs: { elysium: 14 }, - cost: { - Money(offset) { - return spaceCostMultiplier("archive", offset, 375e7, 1.26, "eden"); - }, - Nano_Tube(offset) { - return spaceCostMultiplier("archive", offset, 9e7, 1.26, "eden"); - }, - Asphodel_Powder(offset) { - return spaceCostMultiplier("archive", offset, 5e4, 1.26, "eden"); - }, - Elysanite(offset) { - return spaceCostMultiplier("archive", offset, 35e6, 1.26, "eden"); - }, - Soul_Gem(offset) { - return spaceCostMultiplier("archive", offset, 99, 1.26, "eden"); - } - }, - effect() { - let desc = `
${loc("plus_max_resource", [1013, global.resource.Omniscience.name])}
`; - if (global.tech["elysium"] && global.tech.elysium >= 12) { - desc += `
${loc("eden_restaurant_effect", [0.4, loc(`eden_restaurant_bd`)])}
`; - } - desc += `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - powered() { - return powerCostMod(75); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("archive", "eden"); - powerOnNewStruct($(this)[0]); - if (global.tech.elysium === 14) { - global.tech.elysium = 15; - drawTech(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["archive", "eden"] - }; - } - }, - north_pier: { - id: "eden-north_pier", - title() { - return loc("eden_pier", [loc("north")]); - }, - desc(wiki) { - if (wiki || !global.eden.hasOwnProperty("rune_gate") || global.eden.north_pier.count < 10) { - return `
${loc("eden_pier", [loc("north")])}
${loc("requires_segments", [10])}
`; - } else { - return `
${loc("eden_pier", [loc("north")])}
`; - } - }, - reqs: { isle: 2 }, - queue_complete() { - return 10 - global.eden.north_pier.count; - }, - cost: { - Money(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("north_pier") ? global.eden.north_pier.count : 0) < 10 ? 75e8 : 0; - } - return !global.eden.hasOwnProperty("north_pier") || global.eden.north_pier.count < 10 ? 75e8 : 0; - }, - Iron(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("north_pier") ? global.eden.north_pier.count : 0) < 10 ? 5e8 : 0; - } - return !global.eden.hasOwnProperty("north_pier") || global.eden.north_pier.count < 10 ? 5e8 : 0; - }, - Plywood(offset) { - if (global.race["kindling_kindred"] || global.race["smoldering"]) { - return 0; - } - if (offset) { - return offset + (global.eden.hasOwnProperty("north_pier") ? global.eden.north_pier.count : 0) < 10 ? 25e7 : 0; - } - return !global.eden.hasOwnProperty("north_pier") || global.eden.north_pier.count < 10 ? 25e7 : 0; - }, - Sheet_Metal(offset) { - if (!global.race["kindling_kindred"] && !global.race["smoldering"]) { - return 0; - } - if (offset) { - return offset + (global.eden.hasOwnProperty("north_pier") ? global.eden.north_pier.count : 0) < 10 ? 625e5 : 0; - } - return !global.eden.hasOwnProperty("north_pier") || global.eden.north_pier.count < 10 ? 625e5 : 0; - } - }, - effect(wiki) { - let count = (wiki?.count ?? 0) + (global.eden.hasOwnProperty("north_pier") ? global.eden.north_pier.count : 0); - if (count >= 10) { - let desc = `
${loc("eden_pier_effect", [loc("eden_pier", [loc("south")]), loc("eden_isle_name")])}
`; - return desc; - } else { - let size = 10; - let remain = size - count; - return `
${loc("eden_pier_effect", [loc("eden_pier", [loc("south")]), loc("eden_isle_name")])}
${loc("space_dwarf_collider_effect2", [remain])}
`; - } - }, - action(args) { - if (global.eden.north_pier.count < 10 && payCosts($(this)[0])) { - incrementStruct("north_pier", "eden"); - if (global.eden.south_pier.count === 10 && global.eden.north_pier.count === 10 && global.tech.isle === 2) { - global.tech.isle = 3; - drawTech(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["north_pier", "eden"] - }; - } - }, - rushmore: { - id: "eden-rushmore", - title() { - return loc("eden_rushmore", [races[global.race.species].name]); - }, - desc() { - return `
${loc("eden_rushmore", [races[global.race.species].name])}
`; - }, - reqs: { elysium: 16 }, - cost: { - Money(o, wiki) { - return global.eden?.rushmore?.count === 0 || wiki ? 55e9 : 0; - }, - Stone(o, wiki) { - return global.eden?.rushmore?.count === 0 || wiki ? 1e10 : 0; - } - }, - queue_complete() { - return 1 - (global.eden?.rushmore?.count || 0); - }, - effect() { - return `
${loc("space_red_vr_center_effect2", [10])}
`; - }, - action(args) { - if (global.eden.rushmore.count === 0 && payCosts($(this)[0])) { - incrementStruct("rushmore", "eden"); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["rushmore", "eden"] - }; - }, - flair() { - return loc("eden_rushmore_flair"); - } - }, - reincarnation: { - id: "eden-reincarnation", - title() { - return loc("eden_reincarnation_title"); - }, - desc() { - return `
${loc("eden_reincarnation_title")}
`; - }, - reqs: { elysium: 17 }, - cost: { - Money(o) { - return global.eden?.reincarnation?.count === 0 ? 35e9 : global.eden?.reincarnation?.count === 1 ? 5e9 : 0; - }, - Aluminium(o) { - return global.eden?.reincarnation?.count === 0 ? 1e10 : 0; - }, - Nano_Tube(o) { - return global.eden?.reincarnation?.count === 0 ? 2e9 : 0; - }, - Asphodel_Powder(o) { - return global.eden?.reincarnation?.count === 0 ? 75e4 : 0; - } - }, - queue_complete() { - return 1 - (global.eden?.reincarnation?.count || 0); - }, - effect() { - return `
${loc("eden_reincarnation_effect", [races[global.race.species].name])}
`; - }, - action(args) { - if (global.eden.reincarnation.count === 0 && payCosts($(this)[0])) { - incrementStruct("reincarnation", "eden"); - return true; - } else if (global.eden.reincarnation.count === 1 && global["resource"][global.race.species].max > global["resource"][global.race.species].amount && payCosts($(this)[0])) { - global["resource"][global.race.species].amount++; - global.civic[global.civic.d_job].workers++; - if (global.race["warlord"]) { - global.stats.warlord.r = true; - checkWarlordAchieve(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["reincarnation", "eden"] - }; - }, - flair() { - return loc("eden_reincarnation_flair"); - } - }, - eden_cement: { - id: "eden-eden_cement", - title() { - return loc("city_cement_plant"); - }, - desc() { - return `
${loc("city_cement_plant_desc")}
${loc("requires_power")}
`; - }, - reqs: { cement: 8 }, - cost: { - Money(offset) { - return spaceCostMultiplier("eden_cement", offset, 5e9, 1.24, "eden"); - }, - Stone(offset) { - return spaceCostMultiplier("eden_cement", offset, 1e9, 1.24, "eden"); - }, - Iron(offset) { - return spaceCostMultiplier("eden_cement", offset, 68e8, 1.24, "eden"); - }, - Asphodel_Powder(offset) { - return spaceCostMultiplier("eden_cement", offset, 65e3, 1.24, "eden"); - } - }, - effect() { - let desc = loc("plus_max_resource", [jobScale(5), loc(`job_cement_worker`)]); - desc += `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - powered() { - return powerCostMod(10); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("eden_cement", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["eden_cement", "eden"] - }; - } - } - }, - eden_isle: { - info: { - name: loc("eden_isle_name"), - desc: loc("eden_isle_desc") - }, - south_pier: { - id: "eden-south_pier", - title() { - return loc("eden_pier", [loc("south")]); - }, - desc(wiki) { - if (wiki || !global.eden.hasOwnProperty("rune_gate") || global.eden.south_pier.count < 10) { - return `
${loc("eden_pier", [loc("south")])}
${loc("requires_segments", [10])}
`; - } else { - return `
${loc("eden_pier", [loc("south")])}
`; - } - }, - reqs: { isle: 2 }, - queue_complete() { - return 10 - global.eden.south_pier.count; - }, - cost: { - Money(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("south_pier") ? global.eden.south_pier.count : 0) < 10 ? 75e8 : 0; - } - return !global.eden.hasOwnProperty("south_pier") || global.eden.south_pier.count < 10 ? 75e8 : 0; - }, - Iron(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("south_pier") ? global.eden.south_pier.count : 0) < 10 ? 5e8 : 0; - } - return !global.eden.hasOwnProperty("south_pier") || global.eden.south_pier.count < 10 ? 5e8 : 0; - }, - Plywood(offset) { - if (global.race["kindling_kindred"] || global.race["smoldering"]) { - return 0; - } - if (offset) { - return offset + (global.eden.hasOwnProperty("south_pier") ? global.eden.south_pier.count : 0) < 10 ? 25e7 : 0; - } - return !global.eden.hasOwnProperty("south_pier") || global.eden.south_pier.count < 10 ? 25e7 : 0; - }, - Sheet_Metal(offset) { - if (!global.race["kindling_kindred"] && !global.race["smoldering"]) { - return 0; - } - if (offset) { - return offset + (global.eden.hasOwnProperty("south_pier") ? global.eden.south_pier.count : 0) < 10 ? 625e5 : 0; - } - return !global.eden.hasOwnProperty("south_pier") || global.eden.south_pier.count < 10 ? 625e5 : 0; - } - }, - effect(wiki) { - let count = (wiki?.count ?? 0) + (global.eden.hasOwnProperty("south_pier") ? global.eden.south_pier.count : 0); - if (count >= 10) { - let desc = `
${loc("eden_pier_effect", [loc("eden_pier", [loc("north")]), loc("eden_elysium_name")])}
`; - return desc; - } else { - let size = 10; - let remain = size - count; - return `
${loc("eden_pier_effect", [loc("eden_pier", [loc("north")]), loc("eden_elysium_name")])}
${loc("space_dwarf_collider_effect2", [remain])}
`; - } - }, - action(args) { - if (global.eden.south_pier.count < 10 && payCosts($(this)[0])) { - incrementStruct("south_pier", "eden"); - if (global.eden.south_pier.count === 10 && global.eden.north_pier.count === 10 && global.tech.isle === 2) { - global.tech.isle = 3; - drawTech(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["south_pier", "eden"] - }; - } - }, - west_tower: { - id: "eden-west_tower", - title() { - return global.eden["enemy_isle"] && global.eden.enemy_isle.wt === 0 ? loc("eden_rampart_ruin", [loc("west")]) : loc("eden_rampart_title", [loc("west")]); - }, - desc() { - return global.eden["enemy_isle"] && global.eden.enemy_isle.wt === 0 ? loc("eden_rampart_ruin", [loc("west")]) : loc("eden_rampart_title", [loc("west")]); - }, - queue_complete() { - return 0; - }, - reqs: { isle: 1 }, - effect() { - if (global.eden["enemy_isle"] && global.eden.enemy_isle.wt === 0) { - return `
${loc("eden_tower_destroyed")}
`; - } else { - return `
${loc("eden_tower_intact", [global.eden["enemy_isle"] ? global.eden.enemy_isle.wt : 100])}
`; - } - }, - action(args) { - return false; - } - }, - isle_garrison: { - id: "eden-isle_garrison", - title() { - return global.eden["enemy_isle"] && global.eden.enemy_isle.g === 0 ? loc("eden_garrison_ruin") : loc("eden_garrison_title"); - }, - desc() { - return global.eden["enemy_isle"] && global.eden.enemy_isle.g === 0 ? loc("eden_garrison_ruin") : loc("eden_garrison_title"); - }, - queue_complete() { - return 0; - }, - reqs: { isle: 1 }, - effect() { - if (global.eden["enemy_isle"] && global.eden.enemy_isle.g === 0) { - return `
${loc("eden_tower_destroyed")}
`; - } else { - return `
${loc("eden_tower_intact", [global.eden["enemy_isle"] ? global.eden.enemy_isle.g : 100])}
`; - } - }, - action(args) { - return false; - } - }, - east_tower: { - id: "eden-east_tower", - title() { - return global.eden["enemy_isle"] && global.eden.enemy_isle.et === 0 ? loc("eden_rampart_ruin", [loc("east")]) : loc("eden_rampart_title", [loc("east")]); - }, - desc() { - return global.eden["enemy_isle"] && global.eden.enemy_isle.et === 0 ? loc("eden_rampart_ruin", [loc("east")]) : loc("eden_rampart_title", [loc("east")]); - }, - queue_complete() { - return 0; - }, - reqs: { isle: 1 }, - effect() { - if (global.eden["enemy_isle"] && global.eden.enemy_isle.et === 0) { - return `
${loc("eden_tower_destroyed")}
`; - } else { - return `
${loc("eden_tower_intact", [global.eden["enemy_isle"] ? global.eden.enemy_isle.et : 100])}
`; - } - }, - action(args) { - return false; - } - }, - spirit_vacuum: { - id: "eden-spirit_vacuum", - title() { - return loc("eden_spirit_vacuum_title"); - }, - desc() { - return `
${loc("eden_spirit_vacuum_title")}
${loc("requires_power")}
`; - }, - reqs: { isle: 4 }, - cost: { - Money(offset) { - return spaceCostMultiplier("spirit_vacuum", offset, 3e10, 1.1, "eden"); - }, - Neutronium(offset) { - return spaceCostMultiplier("spirit_vacuum", offset, 175e6, 1.1, "eden"); - }, - Stanene(offset) { - return spaceCostMultiplier("spirit_vacuum", offset, 1e9, 1.1, "eden"); - }, - Elerium(offset) { - return spaceCostMultiplier("spirit_vacuum", offset, 24e4, 1.1, "eden"); - }, - Soul_Gem(offset) { - return spaceCostMultiplier("spirit_vacuum", offset, 1e3, 1.1, "eden"); - } - }, - effect() { - let desc = `
${loc("eden_spirit_vacuum_effect")}
`; - if (global.eden.hasOwnProperty("palace") && global.eden.palace.rate > 0 && global.eden.palace.energy > 0) { - desc += `
${loc(`eden_spirit_vacuum_time`, [timeFormat(global.eden.palace.energy / global.eden.palace.rate)])}
`; - } - desc += `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - powered(wiki) { - let num_battery = wiki ? global.eden?.spirit_battery?.on ?? 0 : p_on["spirit_battery"] || 0; - let factor = num_battery || 0; - let coefficent = 0.9; - if (global.race["warlord"] && global.eden["corruptor"] && global.tech?.asphodel >= 13) { - coefficent = 1 - (1 + (p_on["corruptor"] || 0) * 0.03) / 10; - } - return +powerCostMod(18e3 * coefficent ** factor).toFixed(2); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("spirit_vacuum", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["spirit_vacuum", "eden"] - }; - }, - flair() { - return loc(`eden_spirit_vacuum_flair`); - } - }, - spirit_battery: { - id: "eden-spirit_battery", - title() { - return loc("eden_spirit_battery_title"); - }, - desc() { - return `
${loc("eden_spirit_battery_title")}
${loc("requires_power")}
`; - }, - reqs: { isle: 5 }, - cost: { - Money(offset) { - return spaceCostMultiplier("spirit_battery", offset, 18e9, 1.2, "eden"); - }, - Copper(offset) { - return spaceCostMultiplier("spirit_battery", offset, 5e9, 1.2, "eden"); - }, - Vitreloy(offset) { - return spaceCostMultiplier("spirit_battery", offset, 5e7, 1.2, "eden"); - }, - Elysanite(offset) { - return spaceCostMultiplier("spirit_battery", offset, 1e8, 1.2, "eden"); - } - }, - effect() { - let power = 10; - let drain = 8; - if (global.race["warlord"] && global.eden["corruptor"] && global.tech?.asphodel >= 13) { - let multiplier = 1 + (p_on["corruptor"] || 0) * 0.03; - power *= multiplier; - drain *= multiplier; - } - let desc = `
${loc("eden_spirit_battery_effect", [loc("eden_spirit_vacuum_title"), +power.toFixed(2)])}
`; - if (global.tech["isle"] && global.tech.isle >= 6) { - desc += `
${loc("eden_spirit_battery_effect2", [loc("eden_spirit_vacuum_title"), +drain.toFixed(2)])}
`; - } - desc += `
${loc("minus_power", [$(this)[0].powered()])}
`; - return desc; - }, - powered() { - return powerCostMod(500); - }, - action(args) { - if (payCosts($(this)[0])) { - incrementStruct("spirit_battery", "eden"); - powerOnNewStruct($(this)[0]); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, on: 0 }, - p: ["spirit_battery", "eden"] - }; - } - }, - soul_compactor: { - id: "eden-soul_compactor", - title() { - return loc("eden_soul_compactor_title"); - }, - desc() { - return `
${loc("eden_soul_compactor_title")}
`; - }, - reqs: { isle: 7 }, - cost: { - Money(o, wiki) { - return global.eden?.soul_compactor?.count === 0 || wiki ? 5e10 : 0; - }, - Iron(o, wiki) { - return global.eden?.soul_compactor?.count === 0 || wiki ? global.race["warlord"] ? 1e10 : 225e8 : 0; - }, - Uranium(o, wiki) { - return global.eden?.soul_compactor?.count === 0 || wiki ? 4e6 : 0; - }, - Scarletite(o, wiki) { - return global.eden?.soul_compactor?.count === 0 || wiki ? 3e8 : 0; - } - }, - queue_complete() { - return 1 - (global.eden?.soul_compactor?.count || 0); - }, - effect() { - let desc = `
${loc("eden_soul_compactor_effect1", [global.eden?.soul_compactor?.energy.toLocaleString() || 0])}
`; - desc += `
${loc("eden_soul_compactor_effect2", [1e9.toLocaleString()])}
`; - desc += `
${loc("eden_soul_compactor_effect3", [global.resource.Soul_Gem.name])}
`; - return desc; - }, - action(args) { - if (global.eden.soul_compactor.count === 0 && payCosts($(this)[0])) { - incrementStruct("soul_compactor", "eden"); - return true; - } - return false; - }, - struct() { - return { - d: { count: 0, energy: 0, report: 0 }, - p: ["soul_compactor", "eden"] - }; - }, - flair() { - return loc(`eden_soul_compactor_flair`); - } - } - }, - eden_palace: { - info: { - name: loc("eden_palace_name"), - desc() { - return loc("eden_palace_desc"); - }, - prop() { - return ``; - }, - bind() { - return global.eden.palace; - }, - filter(v, type) { - switch (type) { - case "energy": - return loc(`eden_palace_energy`, [v.toLocaleString()]); - } - } - }, - scout_palace: { - id: "eden-scout_palace", - title: loc("eden_scout_palace_title"), - desc: loc("eden_scout_palace_title"), - reqs: { palace: 1 }, - grant: ["palace", 2], - queue_complete() { - return global.tech.palace >= 2 ? 0 : 1; - }, - cost: { - Money() { - return 5e10; - }, - Helium_3() { - return global.race["warlord"] ? 5e6 : 0; - }, - Deuterium() { - return global.race["warlord"] ? 0 : 5e6; - } - }, - effect: loc("eden_scout_palace_effect"), - action(args) { - if (payCosts($(this)[0])) { - messageQueue(loc("eden_scout_palace_result"), "info", false, ["progress"]); - return true; - } - return false; - } - }, - throne: { - id: "eden-throne", - title() { - return loc("eden_abandoned_throne_title"); - }, - desc() { - return loc("eden_abandoned_throne_title"); - }, - reqs: { palace: 2 }, - condition() { - return global.tech.palace < 6 ? true : false; - }, - queue_complete() { - return false; - }, - cost: {}, - effect: loc("eden_abandoned_throne_effect"), - action(args) { - return false; - } - }, - infuser: { - id: "eden-infuser", - title() { - return loc("eden_infuser_title"); - }, - desc(wiki) { - if (!global.eden.hasOwnProperty("infuser") || global.eden.infuser.count < 25 || wiki) { - return `
${loc("eden_infuser_title")}
${loc("requires_segments", [25])}
`; - } else { - return `
${loc("eden_infuser_title")}
`; - } - }, - reqs: { palace: 6 }, - queue_size: 5, - queue_complete() { - return 25 - global.eden.infuser.count; - }, - cost: { - Money(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("infuser") ? global.eden.infuser.count : 0) < 25 ? 12e9 : 0; - } - return !global.eden.hasOwnProperty("infuser") || global.eden.infuser.count < 25 ? 12e9 : 0; - }, - Copper(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("infuser") ? global.eden.infuser.count : 0) < 25 ? 1e10 : 0; - } - return !global.eden.hasOwnProperty("infuser") || global.eden.infuser.count < 25 ? 1e10 : 0; - }, - Graphene(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("infuser") ? global.eden.infuser.count : 0) < 25 ? 1e9 : 0; - } - return !global.eden.hasOwnProperty("infuser") || global.eden.infuser.count < 25 ? 1e9 : 0; - }, - Elysanite(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("infuser") ? global.eden.infuser.count : 0) < 25 ? 125e6 : 0; - } - return !global.eden.hasOwnProperty("infuser") || global.eden.infuser.count < 25 ? 125e6 : 0; - } - }, - effect(wiki) { - let count = (wiki?.count ?? 0) + (global.eden.hasOwnProperty("infuser") ? global.eden.infuser.count : 0); - if (count >= 25) { - let desc = `
${loc("eden_infuser_effect")}
`; - return desc; - } else { - let size = 25; - let remain = size - count; - return `
${loc("eden_infuser_effect")}
${loc("space_dwarf_collider_effect2", [remain])}
`; - } - }, - action(args) { - if (global.eden.infuser.count < 25 && payCosts($(this)[0])) { - incrementStruct("infuser", "eden"); - if (global.eden?.conduit?.count === 25 && global.eden?.infuser?.count === 25) { - global.tech.palace = 7; - global.eden["apotheosis"] = { count: 0 }; - renderEdenic(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["infuser", "eden"] - }; - } - }, - apotheosis: { - id: "eden-apotheosis", - title: loc("eden_apotheosis"), - desc: loc("eden_apotheosis"), - reqs: { palace: 7 }, - condition() { - return global.eden.hasOwnProperty("apotheosis") && global.eden.apotheosis.count === 0; - }, - queue_complete() { - return 0; - }, - no_multi: true, - cost: {}, - effect() { - let reward = apotheosisProjection(); - return `
${loc("eden_apotheosis_effect")}
${reward}`; - }, - action(args) { - if (payCosts($(this)[0])) { - if (global.race["warlord"]) { - global.stats.warlord.g = true; - checkWarlordAchieve(); - } - ascendLab(true); - return true; - } - return false; - } - }, - conduit: { - id: "eden-conduit", - title() { - return loc("eden_conduit_title"); - }, - desc(wiki) { - if (!global.eden.hasOwnProperty("conduit") || global.eden.conduit.count < 25 || wiki) { - return `
${loc("eden_conduit_title")}
${loc("requires_segments", [25])}
`; - } else { - return `
${loc("eden_conduit_title")}
`; - } - }, - reqs: { palace: 5 }, - queue_size: 5, - queue_complete() { - return 25 - global.eden.conduit.count; - }, - cost: { - Money(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("conduit") ? global.eden.conduit.count : 0) < 25 ? 8e9 : 0; - } - return !global.eden.hasOwnProperty("conduit") || global.eden.conduit.count < 25 ? 25e9 : 0; - }, - Stanene(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("conduit") ? global.eden.conduit.count : 0) < 25 ? 25e7 : 0; - } - return !global.eden.hasOwnProperty("conduit") || global.eden.conduit.count < 25 ? 25e7 : 0; - }, - Orichalcum(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("conduit") ? global.eden.conduit.count : 0) < 25 ? 125e6 : 0; - } - return !global.eden.hasOwnProperty("conduit") || global.eden.conduit.count < 25 ? 125e6 : 0; - } - }, - effect(wiki) { - let count = (wiki?.count ?? 0) + (global.eden.hasOwnProperty("conduit") ? global.eden.conduit.count : 0); - if (count >= 25) { - let desc = `
${loc("eden_conduit_done")}
`; - return desc; - } else { - let size = 25; - let remain = size - count; - return `
${loc("eden_conduit_effect")}
${loc("space_dwarf_collider_effect2", [remain])}
`; - } - }, - action(args) { - if (global.eden.conduit.count < 25 && payCosts($(this)[0])) { - incrementStruct("conduit", "eden"); - if (global.eden?.conduit?.count === 25 && global.eden?.infuser?.count === 25) { - global.tech.palace = 7; - global.eden["apotheosis"] = { count: 0 }; - renderEdenic(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["conduit", "eden"] - }; - }, - flair() { - return loc(`eden_conduit_flair`); - } - }, - tomb: { - id: "eden-tomb", - title() { - return global.eden?.tomb?.count === 10 ? loc("eden_tomb_sealed") : loc("eden_tomb_title"); - }, - desc(wiki) { - if (!global.eden.hasOwnProperty("tomb") || global.eden.tomb.count < 10 || wiki) { - return `
${loc("eden_tomb_title")}
${loc("requires_segments", [10])}
`; - } else { - return `
${loc("eden_tomb_title")}
`; - } - }, - reqs: { palace: 3 }, - queue_complete() { - return 10 - global.eden.tomb.count; - }, - cost: { - Money(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("tomb") ? global.eden.tomb.count : 0) < 10 ? 25e9 : 0; - } - return !global.eden.hasOwnProperty("tomb") || global.eden.tomb.count < 10 ? 25e9 : 0; - }, - Cement(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("tomb") ? global.eden.tomb.count : 0) < 10 ? 1e10 : 0; - } - return !global.eden.hasOwnProperty("tomb") || global.eden.tomb.count < 10 ? 1e10 : 0; - }, - Neutronium(offset) { - if (offset) { - return offset + (global.eden.hasOwnProperty("tomb") ? global.eden.tomb.count : 0) < 10 ? 1e8 : 0; - } - return !global.eden.hasOwnProperty("tomb") || global.eden.tomb.count < 10 ? 1e8 : 0; - } - }, - effect(wiki) { - let count = (wiki?.count ?? 0) + (global.eden.hasOwnProperty("tomb") ? global.eden.tomb.count : 0); - if (count >= 10) { - let desc = `
${loc("eden_tomb_effect")}
`; - return desc; - } else { - let size = 10; - let remain = size - count; - return `
${loc("eden_tomb_constuct")}
${loc("space_dwarf_collider_effect2", [remain])}
`; - } - }, - action(args) { - if (global.eden.tomb.count < 10 && payCosts($(this)[0])) { - incrementStruct("tomb", "eden"); - if (global.eden.tomb.count === 10 && global.tech.palace === 3) { - global.tech.palace = 4; - renderEdenic(); - } - return true; - } - return false; - }, - struct() { - return { - d: { count: 0 }, - p: ["tomb", "eden"] - }; - }, - flair() { - return loc(`eden_tomb_flair`); - } - } - } - }; - function apotheosisProjection() { - let gains = calcPrestige("apotheosis"); - let plasmidType = global.race.universe === "antimatter" ? loc("resource_AntiPlasmid_name") : loc("resource_Plasmid_name"); - let desc = `
${loc("interstellar_ascension_trigger_effect2", [gains.plasmid, plasmidType])}
`; - desc += `
${loc("interstellar_ascension_trigger_effect2", [gains.supercoiled, loc("resource_Supercoiled_plural_name")])}
`; - if (global.race["warlord"]) { - desc += `
${loc("interstellar_ascension_trigger_effect2", [gains.artifact, loc("resource_Artifact_name")])}
`; - } - return desc; - } - function deadCalc(dead, armySize) { - let armor = armorCalc(dead); - dead -= Math.floor(seededRandom(0, armor, true)); - if (dead > armySize) { - dead = armySize; - } else if (dead < 0) { - dead = 0; - } - return Math.floor(dead); - } - function edenicTech() { - return edenicModules; - } - function renderEdenic() { - if (!global.settings.tabLoad && (global.settings.civTabs !== 1 || global.settings.spaceTabs !== 7)) { - return; - } - let parent = $("#eden"); - clearElement(parent); - parent.append($(`

${loc("tab_eden")}

`)); - if (!global.tech["edenic"] || global.tech.edenic < 3) { - return; - } - Object.keys(edenicModules).forEach(function(region) { - let show = region.replace("eden_", ""); - if (global.settings.eden[`${show}`]) { - let name = typeof edenicModules[region].info.name === "string" ? edenicModules[region].info.name : edenicModules[region].info.name(); - let property = ``; - if (edenicModules[region].info.hasOwnProperty("prop")) { - property = edenicModules[region].info.prop(); - } - let bind = false; - if (edenicModules[region].info.hasOwnProperty("bind")) { - bind = edenicModules[region].info.bind(); - } - if (edenicModules[region].info["support"]) { - let support = edenicModules[region].info["support"]; - if (edenicModules[region].info["hide_support"]) { - parent.append(`

${name}

${property}
`); - } else { - parent.append(`

${name}

{{ support }}/{{ s_max }}${property}
`); - } - vBind({ - el: `#sr${region}`, - data: bind ? bind : global.eden[support], - methods: { - filter() { - return edenicModules[region].info.filter(...arguments); - } - } - }); - } else if (bind) { - parent.append(`

${name}

${property}
`); - vBind({ - el: `#sr${region}`, - data: bind, - methods: { - filter() { - return edenicModules[region].info.filter(...arguments); - } - } - }); - } else { - parent.append(`

${name}

${property}
`); - } - popover( - region, - function() { - return typeof edenicModules[region].info.desc === "string" ? edenicModules[region].info.desc : edenicModules[region].info.desc(); - }, - { - elm: `#${region} h3.name`, - classes: `has-background-light has-text-dark` - } - ); - Object.keys(edenicModules[region]).forEach(function(tech) { - if (tech !== "info" && checkRequirements2(edenicModules, region, tech)) { - let c_action = edenicModules[region][tech]; - setAction(c_action, "eden", tech); - } - }); - } - }); - } - function asphodelResist() { - if (global.tech["asphodel"] && global.tech.asphodel >= 5) { - let resist = global.tech.asphodel >= 6 ? 0.34 : 0.67; - if (global.eden["mech_station"] && global.eden.mech_station.count >= 10) { - resist = 0.34 + global.eden.mech_station.effect * 66e-4; - } - return resist; - } - return 1; - } - function mechStationEffect() { - if (global.eden.mech_station.count < 10 || global.eden.mech_station.mode === 0) { - global.eden.mech_station.effect = 0; - global.eden.mech_station.mechs = 0; - return; - } - let hostility = 0; - hostility += global.eden.asphodel_harvester.on * 4; - hostility += global.civic.ghost_trapper.workers; - let rawHostility = hostility; - let targetHostility = 0; - if (global.eden.mech_station.mode === 1) { - targetHostility = Math.ceil(hostility * 0.66); - } else if (global.eden.mech_station.mode === 2) { - targetHostility = Math.ceil(hostility * 0.33); - } else if (global.eden.mech_station.mode === 4) { - hostility *= 1.25; - rawHostility *= 1.25; - } else if (global.eden.mech_station.mode === 5) { - hostility *= 1.5; - rawHostility *= 1.5; - } - let mechs = 0; - for (let i = 0; i < global.portal.mechbay.active; i++) { - let mech = global.portal.mechbay.mechs[i]; - if (mech.size !== "collector" && hostility > targetHostility) { - hostility -= mechRating(mech, true) * 12500; - mechs++; - } - } - if (hostility < 0) { - hostility = 0; - } - global.eden.mech_station.mechs = mechs; - global.eden.mech_station.effect = 100 - Math.floor(hostility / rawHostility * 100); - if (global.eden.mech_station.effect === 100 && global.eden.mech_station.mode === 4) { - global.eden.mech_station.effect = 110; - } else if (global.eden.mech_station.effect === 100 && global.eden.mech_station.mode === 5) { - global.eden.mech_station.effect = 120; - } - } + + +
+ + Set Parent: + + + ${ac("setParent")} + +
+
+ + {{ label('enable_theme_reset') }} + +
+ + {{ label('theme_reset_warn') }} + - // src/index.js - function mainVue() { - vBind({ - el: "#mainColumn div.content", - data: { - s: global.settings - }, - methods: { - swapTab(tab) { - if (!global.settings.tabLoad) { - loadTab(tab); - } - return tab; - }, - saveImport() { - if ($("#importExport textarea").val().length > 0) { - importGame($("#importExport textarea").val()); - } - }, - saveExport() { - $("#importExport textarea").val(window.exportGame()); - $("#importExport textarea").select(); - document.execCommand("copy"); - }, - saveExportFile() { - const downloadToFile = (content, filename, contentType) => { - const a = document.createElement("a"); - const file = new Blob([content], { type: contentType }); - a.href = URL.createObjectURL(file); - a.download = filename; - a.click(); - URL.revokeObjectURL(a.href); - }; - const date2 = /* @__PURE__ */ new Date(); - const year = date2.getFullYear(); - const month = (date2.getMonth() + 1).toFixed(0).padStart(2, "0"); - const day = date2.getDate().toFixed(0).padStart(2, "0"); - const hour = date2.getHours().toFixed(0).padStart(2, "0"); - const minute = date2.getMinutes().toFixed(0).padStart(2, "0"); - downloadToFile(window.exportGame(), `evolve-${year}-${month}-${day}-${hour}-${minute}.txt`, "text/plain"); - }, - importStringFile() { - let file = document.getElementById("stringPackFile").files[0]; - if (file) { - let reader = new FileReader(); - let fileName = document.getElementById("stringPackFile").files[0].name; - reader.readAsText(file, "UTF-8"); - reader.onload = function(evt) { - try { - JSON.parse(evt.target.result); - } catch { - global.settings.sPackMsg = loc(`string_pack_error`, [fileName]); - return; - } - global.settings.sPackMsg = loc(`string_pack_using`, [fileName]); - save.setItem("string_pack_name", fileName); - save.setItem("string_pack", LZString.compressToUTF16(evt.target.result)); - if (global.settings.sPackOn) { - global.queue.rename = true; - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - if (webWorker.w) { - webWorker.w.terminate(); - } - window.location.reload(); - } - }; - reader.onerror = function(evt) { - console.error("error reading file"); - }; - } - }, - clearStringFile() { - if (save.getItem("string_pack")) { - global.settings.sPackMsg = loc(`string_pack_none`); - save.removeItem("string_pack_name"); - save.removeItem("string_pack"); - if (global.settings.sPackOn) { - global.queue.rename = true; - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - if (webWorker.w) { - webWorker.w.terminate(); - } - window.location.reload(); - } - } - }, - stringPackOn() { - if (save.getItem("string_pack")) { - global.queue.rename = true; - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - if (webWorker.w) { - webWorker.w.terminate(); - } - window.location.reload(); - } - }, - restoreGame() { - let restore_data = save.getItem("evolveBak") || false; - this.$buefy.dialog.confirm({ - title: loc("restore"), - message: loc("restore_warning"), - ariaModal: true, - confirmText: loc("restore"), - onConfirm() { - if (restore_data) { - importGame(restore_data, true); - } - } - }); - }, - lChange(locale) { - global.settings.locale = locale; - global.queue.rename = true; - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - if (webWorker.w) { - webWorker.w.terminate(); - } - window.location.reload(); - }, - setTheme(theme) { - global.settings.theme = theme; - $("html").removeClass(); - $("html").addClass(theme); - $("html").addClass(global.settings.font); - }, - numNotation(notation) { - global.settings.affix = notation; - }, - setQueueStyle(style) { - global.settings.queuestyle = style; - updateQueueStyle(); - }, - setQueueResize(mode) { - global.settings.q_resize = mode; - }, - icon(icon) { - global.settings.icon = icon; - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - if (webWorker.w) { - webWorker.w.terminate(); - } - window.location.reload(); - }, - remove(index2) { - global.r_queue.queue.splice(index2, 1); - }, - font(f) { - global.settings.font = f; - $(`html`).removeClass("standard"); - $(`html`).removeClass("large_log"); - $(`html`).removeClass("large_all"); - $("html").addClass(f); - }, - qu_merge(merge) { - global.settings.q_merge = merge; - }, - toggleTabLoad() { - initTabs(); - }, - unpause() { - $(`#pausegame`).removeClass("play"); - $(`#pausegame`).removeClass("pause"); - if (global.settings.pause) { - $(`#pausegame`).addClass("pause"); - } else { - $(`#pausegame`).addClass("play"); - } - if (!global.settings.pause && !webWorker.s) { - gameLoop("start"); - } - }, - namecase(name) { - return name.replace(/(?:^|\s)\w/g, function(match) { - return match.toUpperCase(); - }); - }, - label(lbl) { - return tabLabel(lbl); - }, - sPack() { - return global.settings.sPackMsg; - }, - notation(n) { - switch (n) { - case "si": - return loc(`metric`); - case "sci": - return loc(`scientific`); - case "eng": - return loc(`engineering`); - case "sln": - return loc(`sln`); - } - }, - resetGame() { - window.reset(); - }, - softResetGame() { - window.soft_reset(); - } - } - }); - ["1", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17"].forEach(function(k) { - popover( - `settings${k}`, - function() { - return loc(`settings${k}`); - }, - { - elm: `#settings span.settings${k}` - } - ); - }); - let example = `
{ +
+
+
+
+
`)),V({el:"#themeColorPicker",data:{t:di,s:e.settings},methods:{setCurThemeVar(n,o){o.curThemeVar=n;let c=_n(n);if(c.includes("var")){let l=c.match(/var\(([a-zA-Z-]+)\)/)[1];c=getComputedStyle(document.documentElement).getPropertyValue(l).trim()}c.length==4&&(c=`#${c[1]}${c[1]}${c[2]}${c[2]}${c[3]}${c[3]}`),o.curThemeColor=c},setCurThemeFromOther(n,o){o.curSetFromVar=n;let c=_n(n);c!=ao&&Xo(n,c)},changeThemeColor(n,o){if(!o){let c=_n(n.curThemeVar),l=e.settings.theme;n.changed.hasOwnProperty(l)||(n.changed[l]={}),n.changed[l].hasOwnProperty(n.curThemeVar)?n.changed[l][n.curThemeVar].push(c):n.changed[l][n.curThemeVar]=[c]}Xo(n.curThemeVar,n.curThemeColor,o?"dom":"both")},undoThemeColorChange(n){let o=n.changed[e.settings.theme][n.curThemeVar];if(o.length==0)return;let c=o.pop();Xo(n.curThemeVar,c),n.curThemeColor=c},startDrag(n,o){o.move=!0,o.mpos={x:n.clientX,y:n.clientY}},onDrag(n,o){if(!o.move)return;let c={x:n.clientX,y:n.clientY},l=c.x-o.mpos.x,h=c.y-o.mpos.y;o.pos.x+=l,o.pos.y+=h,o.mpos=c},endDrag(n){n.move=!1},label(n){return t(n)},setParent(n,o){let c=e.settings.theme;c!=n&&(hr[e.settings.theme].parent=[n],di.curParent=n,tc(c),hn(c,o))},isCustom(){return e.settings.theme.includes("custom")},setThemeTitle(){},getThemeTitle(n){return io(n)},dangerousResetEnabled(n){return n.isResetOpen},resetTheme(){console.log("reset"),hr[e.settings.theme]={},tc(e.settings.theme),wi(e.settings.theme)}}})}function Hl(r,a){let i=JSON.parse(a?LZString.decompressFromUTF16(r):LZString.decompressFromBase64(r));console.log(i),hr[e.settings.theme]=i,tc(),Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),window.location.reload()}function ic(){let r=hr[e.settings.theme];return r.theme_name=e.settings.theme,LZString.compressToBase64(JSON.stringify(r))}function Ul(){V({el:"#mainColumn div.content",data:{s:e.settings,t:di},methods:{swapTab(a){let i=document.querySelectorAll(".b-tabs .tab-content");return i.length>0&&(i.forEach(s=>{if(s.querySelector('.tab-item:not([style*="display: none"])')&&s.getBoundingClientRect().width>0){let o=s.getBoundingClientRect();s.style.minHeight=o.height+"px",s.closest(".resTabs")&&(s.scrollHeight>s.clientHeight?s.style.overflowY="scroll":s.style.overflowY="hidden")}}),e.tabAnimationTimeout&&clearTimeout(e.tabAnimationTimeout),e.tabAnimationTimeout=setTimeout(()=>{i.forEach(s=>{s.style.minHeight="",s.closest(".resTabs")&&(s.style.overflowY="")})},225)),e.settings.tabLoad||Ar(a),a},saveImport(){let a=$("#importExport textarea");a.val().length>0&&importGame(a.val())},saveExport(){$("#importExport textarea").val(window.exportGame()),$("#importExport textarea").select(),document.execCommand("copy")},saveExportFile(){let a=(h,v,_)=>{let g=document.createElement("a"),w=new Blob([h],{type:_});g.href=URL.createObjectURL(w),g.download=v,g.click(),URL.revokeObjectURL(g.href)},i=new Date,s=i.getFullYear(),n=(i.getMonth()+1).toFixed(0).padStart(2,"0"),o=i.getDate().toFixed(0).padStart(2,"0"),c=i.getHours().toFixed(0).padStart(2,"0"),l=i.getMinutes().toFixed(0).padStart(2,"0");a(window.exportGame(),`evolve-${s}-${n}-${o}-${c}-${l}.txt`,"text/plain")},importStringFile(){let a=document.getElementById("stringPackFile").files[0];if(a){let i=new FileReader,s=document.getElementById("stringPackFile").files[0].name;i.readAsText(a,"UTF-8"),i.onload=function(n){try{JSON.parse(n.target.result)}catch{e.settings.sPackMsg=t("string_pack_error",[s]);return}e.settings.sPackMsg=t("string_pack_using",[s]),Le.setItem("string_pack_name",s),Le.setItem("string_pack",LZString.compressToUTF16(n.target.result)),e.settings.sPackOn&&(e.queue.rename=!0,Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),Ae.w&&Ae.w.terminate(),window.location.reload())},i.onerror=function(n){console.error("error reading file")}}},clearStringFile(){Le.getItem("string_pack")&&(e.settings.sPackMsg=t("string_pack_none"),Le.removeItem("string_pack_name"),Le.removeItem("string_pack"),e.settings.sPackOn&&(e.queue.rename=!0,Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),Ae.w&&Ae.w.terminate(),window.location.reload()))},stringPackOn(){Le.getItem("string_pack")&&(e.queue.rename=!0,Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),Ae.w&&Ae.w.terminate(),window.location.reload())},restoreGame(){let a=Le.getItem("evolveBak")||!1;this.$buefy.dialog.confirm({title:t("restore"),message:t("restore_warning"),ariaModal:!0,confirmText:t("restore"),onConfirm(){a&&importGame(a,!0)}})},lChange(a){e.settings.locale=a,e.queue.rename=!0,Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),_l(a),Ae.w&&Ae.w.terminate(),window.location.reload()},saveImportTheme(){$("#importExportTheme textarea").val().length>0&&Hl($("#importExportTheme textarea").val())},saveExportTheme(){$("#importExportTheme textarea").val(ic()),$("#importExportTheme textarea").select(),document.execCommand("copy")},saveExportThemeFile(){let a=(h,v,_)=>{let g=document.createElement("a"),w=new Blob([h],{type:_});g.href=URL.createObjectURL(w),g.download=v,g.click(),URL.revokeObjectURL(g.href)},i=new Date,s=i.getFullYear(),n=(i.getMonth()+1).toFixed(0).padStart(2,"0"),o=i.getDate().toFixed(0).padStart(2,"0"),c=i.getHours().toFixed(0).padStart(2,"0"),l=i.getMinutes().toFixed(0).padStart(2,"0");a(ic(),`evolve_theme-${io(e.settings.theme)}-${s}-${n}-${o}-${c}-${l}.txt`,"text/plain")},setTheme(a,i){wi(a),e.settings.theme=a,hn(a,i)},openCloseThemeEditor(a){Gl()},getThemeTitle(a){return io(a)},setCustomCount(a,i){let s=i.custom_count;if(i.custom_count=a,e.custom_theme.custom_count=a,s!=a){if(s>a){console.log("too many",a+1,s);for(let n=a+1;n<=s;n++){let o=`custom-${n}`;delete hr[o],delete e.custom_theme[o]}}else{console.log("too little",s+1,a);for(let n=s+1;n<=a;n++){let o=`custom-${n}`;hr[o]={},e.custom_theme[o]=hr[o]}}console.log(hr)}},numNotation(a){e.settings.affix=a},setQueueStyle(a){e.settings.queuestyle=a,V0()},setQueueResize(a){e.settings.q_resize=a},icon(a){e.settings.icon=a,Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),Ae.w&&Ae.w.terminate(),window.location.reload()},remove(a){e.r_queue.queue.splice(a,1)},font(a){e.settings.font=a,$("html").removeClass("standard"),$("html").removeClass("large_log"),$("html").removeClass("large_all"),$("html").addClass(a)},qu_merge(a){e.settings.q_merge=a},toggleTabLoad(){e.settings.tabLoad?sc():(no(),yn(),fn(),Bn(),mn(),ds(),be($("#mTabCivil")),be($("#mTabCivic")),be($("#mTabResearch")),be($("#mTabResource")),be($("#mTabArpa")),be($("#mTabStats")),be($("#mTabObserve")))},unpause(){$("#pausegame").removeClass("play"),$("#pausegame").removeClass("pause"),e.settings.pause?$("#pausegame").addClass("pause"):$("#pausegame").addClass("play"),!e.settings.pause&&!Ae.s&&Ur("start")},namecase(a){return a.replace(/(?:^|\s)\w/g,function(i){return i.toUpperCase()})},label(a){return hs(a)},sPack(){return e.settings.sPackMsg},notation(a){switch(a){case"si":return t("metric");case"sci":return t("scientific");case"eng":return t("engineering");case"sln":return t("sln")}},resetGame(){window.reset()},softResetGame(){window.soft_reset()}}}),["1","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"].forEach(function(a){ve(`settings${a}`,function(){return t(`settings${a}`)},{elm:`#settings span.settings${a}`})});let r=`
{ "year": "Galactic Standard Year", "resource_Food_name": "Nom Noms" -}
`; - popover( - `stringPack`, - function() { - return loc(`string_example`, [example]); - } - ); - } - function tabLabel(lbl) { - switch (lbl) { - case "city": - if (global.resource[global.race.species]) { - if (global.resource[global.race.species].amount <= 5) { - return loc("tab_city1"); - } else if (global.resource[global.race.species].amount <= 20) { - return loc("tab_city2"); - } else if (global.resource[global.race.species].amount <= 75) { - return loc("tab_city3"); - } else if (global.resource[global.race.species].amount <= 250) { - return loc("tab_city4"); - } else if (global.resource[global.race.species].amount <= 600) { - return loc("tab_city5"); - } else if (global.resource[global.race.species].amount <= 1200) { - return loc("tab_city6"); - } else if (global.resource[global.race.species].amount <= 2500) { - return loc("tab_city7"); - } else { - return loc("tab_city8"); - } - } else { - return loc("tab_city1"); - } - case "local_space": - return loc("sol_system", [global.race["truepath"] ? races[global.race.species].home : flib("name")]); - case "outer_local_space": - return loc("outer_sol_system", [global.race["truepath"] ? races[global.race.species].home : flib("name")]); - case "old": - return loc("tab_old_res"); - case "new": - return loc("tab_new_res"); - case "old_sr": - return loc("tab_old_sr_res"); - case "new_sr": - return loc("tab_new_sr_res"); - case "tab_mech": - return global.race["warlord"] ? loc("tab_artificer") : loc(lbl); - default: - return loc(lbl); - } - } - function updateQueueStyle() { - const buildingQueue = $("#buildQueue"); - ["standardqueuestyle", "listqueuestyle", "bulletlistqueuestyle", "numberedlistqueuestyle"].forEach((qstyle) => { - if (global.settings.queuestyle === qstyle) { - buildingQueue.addClass(qstyle); - } else { - buildingQueue.removeClass(qstyle); - } - }); - } - function initTabs() { - if (global.settings.tabLoad) { - loadTab(`mTabCivil`); - loadTab(`mTabCivic`); - loadTab(`mTabResearch`); - loadTab(`mTabResource`); - loadTab(`mTabArpa`); - loadTab(`mTabStats`); - loadTab(`mTabObserve`); - } else { - loadTab(global.settings.civTabs); - } - } - function loadTab(tab) { - if (!global.settings.tabLoad) { - clearResDrag(); - clearGrids(); - clearMechDrag(); - clearGeneticsDrag(); - clearSpyopDrag(); - clearShipDrag(); - clearElement($(`#mTabCivil`)); - clearElement($(`#mTabCivic`)); - clearElement($(`#mTabResearch`)); - clearElement($(`#mTabResource`)); - clearElement($(`#mTabArpa`)); - clearElement($(`#mTabStats`)); - clearElement($(`#mTabObserve`)); - } else { - tagEvent("page_view", { page_title: `Evolve - All Tabs` }); - } - switch (tab) { - case 0: - if (!global.settings.tabLoad) { - tagEvent("page_view", { page_title: `Evolve - Evolution` }); - drawEvolution(); - } - break; - case 1: - case "mTabCivil": - { - if (!global.settings.tabLoad) { - tagEvent("page_view", { page_title: `Evolve - Civilization` }); - } - $(`#mTabCivil`).append(` +}
`;ve("stringPack",function(){return t("string_example",[r])})}function hs(r){switch(r){case"city":return e.resource[e.race.species]?e.resource[e.race.species].amount<=5?t("tab_city1"):e.resource[e.race.species].amount<=20?t("tab_city2"):e.resource[e.race.species].amount<=75?t("tab_city3"):e.resource[e.race.species].amount<=250?t("tab_city4"):e.resource[e.race.species].amount<=600?t("tab_city5"):e.resource[e.race.species].amount<=1200?t("tab_city6"):e.resource[e.race.species].amount<=2500?t("tab_city7"):t("tab_city8"):t("tab_city1");case"local_space":return t("sol_system",[e.race.truepath?T[e.race.species].home:ut("name")]);case"outer_local_space":return t("outer_sol_system",[e.race.truepath?T[e.race.species].home:ut("name")]);case"old":return t("tab_old_res");case"new":return t("tab_new_res");case"old_sr":return t("tab_old_sr_res");case"new_sr":return t("tab_new_sr_res");case"tab_mech":return e.race.warlord?t("tab_artificer"):t(r);default:return t(r)}}function V0(){let r=$("#buildQueue");["standardqueuestyle","listqueuestyle","bulletlistqueuestyle","numberedlistqueuestyle"].forEach(a=>{e.settings.queuestyle===a?r.addClass(a):r.removeClass(a)})}function sc(){e.settings.tabLoad?(e.race.species==="protoplasm"&&ua(),Ar("mTabCivil"),Ar("mTabCivic"),Ar("mTabResearch"),Ar("mTabResource"),Ar("mTabArpa"),Ar("mTabStats"),Ar("mTabObserve")):Ar(e.settings.civTabs)}function Ar(r){if(e.settings.tabLoad)zt("page_view",{page_title:"Evolve - All Tabs"});else{no(),yn(),fn(),Bn(),mn(),ds(),e.tabClearTimeout&&clearTimeout(e.tabClearTimeout);let a=["mTabCivil","mTabCivic","mTabResearch","mTabResource","mTabArpa","mTabStats","mTabObserve"],i="mTabObserve";switch(r){case 1:case"mTabCivil":i="mTabCivil";break;case 2:case"mTabCivic":i="mTabCivic";break;case 3:case"mTabResearch":i="mTabResearch";break;case 4:case"mTabResource":i="mTabResource";break;case 5:case"mTabArpa":i="mTabArpa";break;case 6:case"mTabStats":i="mTabStats";break}be($(`#${i}`)),a.splice(a.indexOf(i),1),e.tabClearTimeout=setTimeout(()=>{a.forEach(s=>be($(`#${s}`)))},350)}switch(r){case 0:case"evolution":e.settings.tabLoad||(e.settings.civTabs=0,zt("page_view",{page_title:"Evolve - Evolution"}),ua());break;case 1:case"mTabCivil":e.settings.tabLoad||zt("page_view",{page_title:"Evolve - Civilization"}),$("#mTabCivil").append(` @@ -17018,80 +85,7 @@ ${effect}`); - `); - vBind({ - el: `#mTabCivil`, - data: { - s: global.settings - }, - methods: { - swapTab(tab2) { - global.settings.spaceTabs = tab2; - if (!global.settings.tabLoad) { - clearElement($(`#city`)); - clearElement($(`#space`)); - clearElement($(`#interstellar`)); - clearElement($(`#galaxy`)); - clearElement($(`#portal`)); - clearElement($(`#outerSol`)); - clearElement($(`#tauCeti`)); - clearElement($(`#eden`)); - switch (tab2) { - case 0: - drawCity(); - break; - case 1: - case 2: - case 3: - case 5: - renderSpace(); - break; - case 4: - renderFortress(); - break; - case 6: - renderTauCeti(); - break; - case 7: - renderEdenic(); - break; - } - } - return tab2; - }, - label(lbl) { - return tabLabel(lbl); - } - } - }); - if (global.race.species !== "protoplasm") { - drawCity(); - renderSpace(); - renderFortress(); - renderTauCeti(); - renderEdenic(); - } - if (global.race["noexport"]) { - if (global.race["noexport"] === "Race") { - clearElement($(`#city`)); - ascendLab(); - } else if (global.race["noexport"] === "Hybrid") { - clearElement($(`#city`)); - ascendLab(true); - } else if (global.race["noexport"] === "Planet") { - clearElement($(`#city`)); - terraformLab(); - } - } - } - break; - case 2: - case "mTabCivic": - { - if (!global.settings.tabLoad) { - tagEvent("page_view", { page_title: `Evolve - Civics` }); - } - $(`#mTabCivic`).append(` + `),V({el:"#mTabCivil",data:{s:e.settings},methods:{swapTab(a){if(e.settings.spaceTabs=a,!e.settings.tabLoad){e.spaceTabClearTimeout&&clearTimeout(e.spaceTabClearTimeout);let i=["city","space","interstellar","galaxy","portal","outerSol","tauCeti","eden"],s=i[a];switch(be($(`#${s}`)),i.splice(a,1),e.spaceTabClearTimeout=setTimeout(()=>{i.forEach(n=>be($(`#${n}`)))},350),a){case 0:Ct();break;case 1:case 2:case 3:case 5:Nt();break;case 4:Kt();break;case 6:Gr();break;case 7:or();break}}return a},label(a){return hs(a)}}}),e.race.species!=="protoplasm"&&(Ct(),Nt(),Kt(),Gr(),or()),e.race.noexport&&(e.race.noexport==="Race"?(be($("#city")),Ri()):e.race.noexport==="Hybrid"?(be($("#city")),Ri(!0)):e.race.noexport==="Planet"&&(be($("#city")),nc()));break;case 2:case"mTabCivic":e.settings.tabLoad||zt("page_view",{page_title:"Evolve - Civics"}),$("#mTabCivic").append(` @@ -17100,340 +94,41 @@ ${effect}`); - `); - vBind({ - el: `#mTabCivic`, - data: { - s: global.settings - }, - methods: { - swapTab(tab2) { - if (!global.settings.tabLoad) { - clearGrids(); - clearSpyopDrag(); - clearMechDrag(); - clearShipDrag(); - clearElement($(`#civic`)); - clearElement($(`#industry`)); - clearElement($(`#powerGrid`)); - clearElement($(`#military`)); - clearElement($(`#mechLab`)); - clearElement($(`#dwarfShipYard`)); - clearElement($(`#psychicPowers`)); - clearElement($(`#supernatural`)); - switch (tab2) { - case 0: - { - $("#civic").append($('
')); - defineJobs(); - $("#civics").append($('
')); - defineGovernment(); - if (global.race.species !== "protoplasm" && !global.race["start_cataclysm"]) { - commisionGarrison(); - buildGarrison($("#c_garrison"), false); - foreignGov(); - } - if (global.race["shapeshifter"]) { - shapeShift(false, true); - } - } - break; - case 1: - defineIndustry(); - break; - case 2: - { - Object.keys(gridDefs()).forEach(function(gridtype) { - powerGrid(gridtype); - }); - setPowerGrid(); - } - break; - case 3: - if (global.race.species !== "protoplasm" && !global.race["start_cataclysm"]) { - defineGarrison(); - if (!global.race["warlord"]) { - buildFortress($("#fortress"), false); - } - } - break; - case 4: - if (global.race.species !== "protoplasm" && !global.race["start_cataclysm"]) { - drawMechLab(); - } - break; - case 5: - if (global.race["truepath"] && global.race.species !== "protoplasm" && !global.race["start_cataclysm"]) { - drawShipYard(); - } - break; - case 6: - if (global.race["psychic"] && global.tech["psychic"] && global.race.species !== "protoplasm") { - renderPsychicPowers(); - } - break; - case 7: - if ((global.race["wish"] && global.tech["wish"] || global.race["ocular_power"]) && global.race.species !== "protoplasm") { - renderSupernatural(); - } - break; - } - } - return tab2; - }, - label(lbl) { - return tabLabel(lbl); - } - } - }); - Object.keys(gridDefs()).forEach(function(gridtype) { - powerGrid(gridtype); - }); - setPowerGrid(); - $("#civic").append($('
')); - defineJobs(); - $("#civics").append($('
')); - defineGovernment(); - if (global.race.species !== "protoplasm" && !global.race["start_cataclysm"]) { - defineGarrison(); - buildGarrison($("#c_garrison"), false); - if (!global.race["warlord"]) { - buildFortress($("#fortress"), false); - } - foreignGov(); - drawMechLab(); - if (global.race["truepath"]) { - drawShipYard(); - } - if (global.race["psychic"] && global.tech["psychic"]) { - renderPsychicPowers(); - } - if (global.race["wish"] && global.tech["wish"] || global.race["ocular_power"]) { - renderSupernatural(); - } - } - if (global.race["shapeshifter"]) { - shapeShift(false, true); - } - defineIndustry(); - } - break; - case 3: - case "mTabResearch": - { - if (!global.settings.tabLoad) { - tagEvent("page_view", { page_title: `Evolve - Research` }); - } - let queue = $(`
`); - $(`#mTabResearch`).append(queue); - let tabs = $(`
+ `),V({el:"#mTabCivic",data:{s:e.settings},methods:{swapTab(a){if(!e.settings.tabLoad){yn(),mn(),fn(),ds(),e.civicTabClearTimeout&&clearTimeout(e.civicTabClearTimeout);let i=["civic","industry","powerGrid","military","mechLab","dwarfShipYard","psychicPowers","supernatural"],s=i[a];switch(be($(`#${s}`)),i.splice(a,1),e.civicTabClearTimeout=setTimeout(()=>{i.forEach(n=>be($(`#${n}`)))},350),a){case 0:$("#civic").append($('
')),fs(),$("#civics").append($('
')),Is(),e.race.species!=="protoplasm"&&!e.race.start_cataclysm&&(Ks(),Fa($("#c_garrison"),!1),vn()),e.race.shapeshifter&&va(!1,!0);break;case 1:Ve();break;case 2:Object.keys(ga()).forEach(function(n){ms(n)}),Ha();break;case 3:e.race.species!=="protoplasm"&&!e.race.start_cataclysm&&(gn(),e.race.warlord||so($("#fortress"),!1));break;case 4:e.race.species!=="protoplasm"&&!e.race.start_cataclysm&&Li();break;case 5:e.race.truepath&&e.race.species!=="protoplasm"&&!e.race.start_cataclysm&&us();break;case 6:e.race.psychic&&e.tech.psychic&&e.race.species!=="protoplasm"&&Ht();break;case 7:(e.race.wish&&e.tech.wish||e.race.ocular_power)&&e.race.species!=="protoplasm"&&pi();break}}return a},label(a){return hs(a)}}}),Object.keys(ga()).forEach(function(a){ms(a)}),Ha(),$("#civic").append($('
')),fs(),$("#civics").append($('
')),Is(),e.race.species!=="protoplasm"&&!e.race.start_cataclysm&&(gn(),Fa($("#c_garrison"),!1),e.race.warlord||so($("#fortress"),!1),vn(),Li(),e.race.truepath&&us(),e.race.psychic&&e.tech.psychic&&Ht(),(e.race.wish&&e.tech.wish||e.race.ocular_power)&&pi()),e.race.shapeshifter&&va(!1,!0),Ve();break;case 3:case"mTabResearch":{e.settings.tabLoad||zt("page_view",{page_title:"Evolve - Research"});let a=$('
');$("#mTabResearch").append(a);let i=$(`
-
`); - $(`#mTabResearch`).append(tabs); - vBind({ - el: `#resContent`, - data: { - s: global.settings, - rq: global.r_queue - }, - methods: { - label_f(lbl) { - return tabLabel(lbl); - } - } - }); - resQueue(); - if (global.race.species !== "protoplasm") { - drawTech(); - } - } - break; - case 4: - case "mTabResource": - { - if (!global.settings.tabLoad) { - tagEvent("page_view", { page_title: `Evolve - Resources` }); - } - $(`#mTabResource`).append(` +
`);$("#mTabResearch").append(i),V({el:"#resContent",data:{s:e.settings,rq:e.r_queue},methods:{label_f(s){return hs(s)}}}),gs(),e.race.species!=="protoplasm"&&de()}break;case 4:case"mTabResource":e.settings.tabLoad||zt("page_view",{page_title:"Evolve - Resources"}),$("#mTabResource").append(` - `); - vBind({ - el: `#mTabResource`, - data: { - s: global.settings - }, - methods: { - swapTab(tab2) { - if (!global.settings.tabLoad) { - clearElement($(`#market`)); - clearElement($(`#resStorage`)); - clearElement($(`#resEjector`)); - clearElement($(`#resCargo`)); - clearElement($(`#resAlchemy`)); - switch (tab2) { - case 0: - { - drawResourceTab("market"); - } - break; - case 1: - { - drawResourceTab("storage"); - } - break; - case 2: - { - drawResourceTab("ejector"); - } - break; - case 3: - { - drawResourceTab("supply"); - } - break; - case 4: - { - drawResourceTab("alchemy"); - } - break; - } - } - return tab2; - }, - label(lbl) { - return tabLabel(lbl); - } - } - }); - initResourceTabs(); - if (tmp_vars.hasOwnProperty("resource")) { - Object.keys(tmp_vars.resource).forEach(function(name) { - let color = tmp_vars.resource[name].color; - let tradable = tmp_vars.resource[name].tradable; - let stackable = tmp_vars.resource[name].stackable; - if (stackable) { - var market_item = $(`
`); - $("#resStorage").append(market_item); - containerItem(`#stack-${name}`, market_item, name, color, true); - } - if (tradable) { - var market_item = $(`
`); - $("#market").append(market_item); - marketItem(`#market-${name}`, market_item, name, color, true); - } - if (atomic_mass[name]) { - loadEjector(name, color); - } - if (supplyValue[name]) { - loadSupply(name, color); - } - if (tradeRatio[name] && global.race.universe === "magic") { - global["resource"][name]["basic"] = tradable; - loadAlchemy(name, color, tradable); - } - }); - } - tradeSummery(); - } - break; - case 5: - case "mTabArpa": - { - if (!global.settings.tabLoad) { - tagEvent("page_view", { page_title: `Evolve - Arpa` }); - } - $(`#mTabArpa`).append(`
+ `),V({el:"#mTabResource",data:{s:e.settings},methods:{swapTab(a){if(!e.settings.tabLoad){e.resTabClearTimeout&&clearTimeout(e.resTabClearTimeout);let i=["market","resStorage","resEjector","resCargo","resAlchemy"];i.splice(a,1),e.resTabClearTimeout=setTimeout(()=>{i.forEach(o=>be($(`#${o}`)))},350);let n=["market","storage","ejector","supply","alchemy"][a];n&&Yr(n)}return a},label(a){return hs(a)}}}),Ns(),$n();break;case 5:case"mTabArpa":e.settings.tabLoad||zt("page_view",{page_title:"Evolve - Arpa"}),$("#mTabArpa").append(`
- - - - + + + + -
`); - vBind({ - el: `#mTabArpa`, - data: { - s: global.settings - }, - methods: { - label(lbl) { - return tabLabel(lbl); - } - } - }); - arpa("Physics"); - arpa("Genetics"); - arpa("Crispr"); - arpa("Blood"); - } - break; - case 6: - case "mTabStats": - { - if (!global.settings.tabLoad) { - tagEvent("page_view", { page_title: `Evolve - Stats` }); - } - $(`#mTabStats`).append(` +
`),V({el:"#mTabArpa",data:{s:e.settings},methods:{label(a){return hs(a)}}}),tt("Physics"),tt("Genetics"),tt("Crispr"),tt("Blood");break;case 6:case"mTabStats":e.settings.tabLoad||zt("page_view",{page_title:"Evolve - Stats"}),$("#mTabStats").append(` - `); - vBind({ - el: `#mTabStats`, - data: { - s: global.settings - }, - methods: { - label(lbl) { - return tabLabel(lbl); - } - } - }); - setupStats2(); - } - break; - case 7: - if (!global.settings.tabLoad) { - tagEvent("page_view", { page_title: `Evolve - Settings` }); - } - break; - case "mTabObserve": - default: - if (!global.settings.tabLoad) { - tagEvent("page_view", { page_title: `Evolve - Hell Observation` }); - } - if (global.portal.observe) { - drawHellObservations(true); - } - break; - } - if ($(`#popper`).length > 0 && $(`#${$(`#popper`).data("id")}`).length === 0) { - clearPopper(); - } - } - function index() { - clearElement($("body")); - $("html").addClass(global.settings.font); - $("body").append(`
+ `),V({el:"#mTabStats",data:{s:e.settings},methods:{label(a){return hs(a)}}}),Ql();break;case 7:e.settings.tabLoad||zt("page_view",{page_title:"Evolve - Settings"});break;case"mTabObserve":default:e.settings.tabLoad||zt("page_view",{page_title:"Evolve - Hell Observation"}),e.portal.observe&&wn(!0);break}$("#popper").length>0&&$(`#${$("#popper").data("id")}`).length===0&&Ie()}function Wl(){be($("body")),$("html").addClass(e.settings.font),$("body").append(`

Top Bar

{{ planet(race.species) }} {{ universe(race.universe) }} - ${loc(`evo_challenge_simulation`)} + ${t("evo_challenge_simulation")} - ${loc("year")} {{ city.calendar.year }} - ${loc("day")} {{ city.calendar.day }} + ${t("year")} {{ city.calendar.year }} + ${t("day")} {{ city.calendar.day }} {{ season() }} @@ -17444,23 +139,18 @@ ${effect}`); -
`); - let main = $(`
`); - let columns = $(`
`); - $("body").append(main); - main.append(columns); - columns.append(`
+
`);let r=$('
'),a=$('
');$("body").append(r),r.append(a),a.append(`

Race Info

{{ name() }}
-
${loc("morale")} {{ mRound(city.morale.current) }}%
+
${t("morale")} {{ mRound(city.morale.current) }}%
MW {{ approx(replicate(city.power)) }}
-

${loc("message_log")}

+

${t("message_log")}

- ${loc("message_log_clear")} - ${loc("message_log_clear_all")} + ${t("message_log_clear")} + ${t("message_log_clear_all")}
-

${loc("message_filters")}

+

${t("message_filters")}

-

${loc("messages")}

+

${t("messages")}

-

${loc("tab_resources")}

-
`); - message_filters.forEach(function(filter) { - $(`#msgQueueFilters`).append(` - ${loc("message_log_" + filter)} - `); - }); - vBind({ - el: `#msgQueue`, - data: { - m: message_logs, - s: global.settings.msgFilters - }, - methods: { - swapFilter(filter) { - if (message_logs.view !== filter) { - $(`#msgQueueFilter-${message_logs.view}`).removeClass("is-active").attr("aria-disabled", "false"); - $(`#msgQueueFilter-${filter}`).addClass("is-active").attr("aria-disabled", "true"); - message_logs.view = filter; - let queue = $(`#msgQueueLog`); - clearElement(queue); - message_logs[filter].forEach(function(msg) { - queue.append($('

').text(msg.msg)); - }); - } - }, - clearLog(filter) { - filter = filter ? [filter] : filter; - initMessageQueue(filter); - clearElement($(`#msgQueueLog`)); - if (filter) { - global.lastMsg[filter] = []; - } else { - Object.keys(global.lastMsg).forEach(function(tag) { - global.lastMsg[tag] = []; - }); - } - }, - trigModal() { - this.$buefy.modal.open({ - hasModalCard: false, - customClass: "evolve-modal", - content: '', - onCancel: () => { - } - }); - let checkExist = setInterval(function() { - if ($("#modalBox").length > 0) { - clearInterval(checkExist); - let egg16 = easterEgg(16, 12); - $("#modalBox").append($(`

${loc("message_log")}${egg16.length > 0 ? egg16 : ""}

`)); - var body = $('
'); - $("#modalBox").append(body); - let catVis = $(` +

${t("tab_resources")}

+
`),si.forEach(function(F){$("#msgQueueFilters").append(` + ${t("message_log_"+F)} + `)}),V({el:"#msgQueue",data:{m:pr,s:e.settings.msgFilters},methods:{swapFilter(F){if(pr.view!==F){$(`#msgQueueFilter-${pr.view}`).removeClass("is-active").attr("aria-disabled","false"),$(`#msgQueueFilter-${F}`).addClass("is-active").attr("aria-disabled","true"),pr.view=F;let E=$("#msgQueueLog");be(E),pr[F].forEach(function(B){E.append($('

').text(B.msg))})}},clearLog(F){F=F&&[F],oo(F),be($("#msgQueueLog")),F?e.lastMsg[F]=[]:Object.keys(e.lastMsg).forEach(function(E){e.lastMsg[E]=[]})},trigModal(){this.$buefy.modal.open({hasModalCard:!1,customClass:"evolve-modal",content:'',onCancel:()=>la()});let F=setInterval(function(){if($("#modalBox").length>0){clearInterval(F);let B=Wt(16,12);$("#modalBox").append($(`

${t("message_log")}${B.length>0?B:""}

`));var E=$('
');$("#modalBox").append(E);let oe=$(`
- ${loc("message_log_settings_visible")} + ${t("message_log_settings_visible")}
- `); - let catMax = $(` + `),we=$(`
- ${loc("message_log_settings_length")} + ${t("message_log_settings_length")}
- `); - let catSave = $(` + `),me=$(`
- ${loc("message_log_settings_save")} + ${t("message_log_settings_save")}
- `); - body.append(catVis); - body.append(catMax); - body.append(catSave); - let visSet = ``; - let maxSet = ``; - let saveSet = ``; - let maxInputs = {}; - let saveInputs = {}; - message_filters.forEach(function(filter) { - visSet += `
${loc("message_log_" + filter)}
`; - maxSet += `
${loc("message_log_" + filter)}
`; - saveSet += `
${loc("message_log_" + filter)}
`; - maxInputs[filter] = global.settings.msgFilters[filter].max; - saveInputs[filter] = global.settings.msgFilters[filter].save; - }); - catVis.append(visSet); - catMax.append(maxSet); - catSave.append(saveSet); - catMax.append(` + `);E.append(oe),E.append(we),E.append(me);let De="",ue="",Be="",ye={},gt={};si.forEach(function(Ne){De+=`
${t("message_log_"+Ne)}
`,ue+=`
${t("message_log_"+Ne)}
`,Be+=`
${t("message_log_"+Ne)}
`,ye[Ne]=e.settings.msgFilters[Ne].max,gt[Ne]=e.settings.msgFilters[Ne].save}),oe.append(De),we.append(ue),me.append(Be),we.append(`
- +
- `); - catSave.append(` + `),me.append(`
- +
- `); - vBind({ - el: `#specialModal`, - data: { - s: global.settings.msgFilters, - mi: maxInputs, - si: saveInputs - }, - methods: { - check(filter) { - if (!global.settings.msgFilters[filter].vis && message_logs.view === filter) { - let haveVis = false; - Object.keys(global.settings.msgFilters).forEach(function(filt) { - if (global.settings.msgFilters[filt].vis && !haveVis) { - haveVis = true; - $(`#msgQueueFilter-${message_logs.view}`).removeClass("is-active"); - $(`#msgQueueFilter-${filt}`).addClass("is-active"); - message_logs.view = filt; - let queue = $(`#msgQueueLog`); - clearElement(queue); - message_logs[filt].forEach(function(msg) { - queue.append($('

').text(msg.msg)); - }); - } - }); - } - }, - checkDisabled(filter, fill) { - if (!global.settings.msgFilters[filter].vis) { - return false; - } - let totVis = 0; - Object.keys(global.settings.msgFilters).forEach(function(filt) { - if (global.settings.msgFilters[filt].vis) { - totVis++; - } - }); - return totVis === 1; - }, - maxVal(filter) { - if (maxInputs[filter] < 1) { - maxInputs[filter] = 1; - } - }, - saveVal(filter) { - if (saveInputs[filter] < 0) { - saveInputs[filter] = 0; - } else if (saveInputs[filter] > global.settings.msgFilters[filter].max) { - saveInputs[filter] = global.settings.msgFilters[filter].max; - } - }, - applyMax() { - message_filters.forEach(function(filter) { - let max = maxInputs[filter]; - global.settings.msgFilters[filter].max = max; - if (max < global.settings.msgFilters[filter].save) { - saveInputs[filter] = max; - global.settings.msgFilters[filter].save = max; - global.lastMsg[filter].splice(max); - } - message_logs[filter].splice(max); - if (message_logs.view === filter) { - $("#msgQueueLog").children().slice(max).remove(); - } - }); - }, - applySave() { - message_filters.forEach(function(filter) { - global.settings.msgFilters[filter].save = saveInputs[filter]; - global.lastMsg[filter].splice(saveInputs[filter]); - }); - } - } - }); - } - }, 50); - } - } - }); - let mainColumn = $(`
`); - columns.append(mainColumn); - let content = $(`
`); - mainColumn.append(content); - content.append(`

Tab Navigation

`); - let tabs = $(``); - content.append(tabs); - let evolution = $(` - `); - tabs.append(evolution); - let city = $(` + `),V({el:"#specialModal",data:{s:e.settings.msgFilters,mi:ye,si:gt},methods:{check(Ne){if(!e.settings.msgFilters[Ne].vis&&pr.view===Ne){let qr=!1;Object.keys(e.settings.msgFilters).forEach(function(fa){if(e.settings.msgFilters[fa].vis&&!qr){qr=!0,$(`#msgQueueFilter-${pr.view}`).removeClass("is-active"),$(`#msgQueueFilter-${fa}`).addClass("is-active"),pr.view=fa;let ss=$("#msgQueueLog");be(ss),pr[fa].forEach(function(nn){ss.append($('

').text(nn.msg))})}})}},checkDisabled(Ne,qr){if(!e.settings.msgFilters[Ne].vis)return!1;let fa=0;return Object.keys(e.settings.msgFilters).forEach(function(ss){e.settings.msgFilters[ss].vis&&fa++}),fa===1},maxVal(Ne){ye[Ne]<1&&(ye[Ne]=1)},saveVal(Ne){gt[Ne]<0?gt[Ne]=0:gt[Ne]>e.settings.msgFilters[Ne].max&&(gt[Ne]=e.settings.msgFilters[Ne].max)},applyMax(){si.forEach(function(Ne){let qr=ye[Ne];e.settings.msgFilters[Ne].max=qr,qr');a.append(i);let s=$('
');i.append(s),s.append('

Tab Navigation

');let n=$('');s.append(n);let o=$(` +
+
`);n.append(o);let c=$(`
-
`); - tabs.append(city); - let civic = $(` + `);n.append(c);let l=$(`
-
`); - tabs.append(civic); - let research = $(` + `);n.append(l);let h=$(`
-
`); - tabs.append(research); - let resources = $(` + `);n.append(h);let v=$(`
-
`); - tabs.append(resources); - let arpa2 = $(` + `);n.append(v);let _=$(`
-
`); - tabs.append(arpa2); - let stats = $(` + `);n.append(_);let g=$(`
-
`); - tabs.append(stats); - let iconlist = ""; - let icons = [ - { i: "nuclear", f: "steelem", r: 2 }, - { i: "zombie", f: "the_misery", r: 2 }, - { i: "fire", f: "ill_advised", r: 2 }, - { i: "mask", f: "friday", r: 1 }, - { i: "skull", f: "demon_slayer", r: 2 }, - { i: "taijitu", f: "equilibrium", r: 2 }, - { i: "martini", f: "utopia", r: 2 }, - { i: "lightbulb", f: "energetic", r: 2 }, - { i: "trash", f: "garbage_pie", r: 2 }, - { i: "banana", f: "banana", r: 2 }, - { i: "turtle", f: "finish_line", r: 2 }, - { i: "floppy", f: "digital_ascension", r: 2 }, - { i: "slime", f: "slime_lord", r: 2 }, - { i: "sludge", f: "grand_death_tour", r: 2 }, - { i: "lightning", f: "annihilation", r: 2 }, - { i: "trophy", f: "wish", r: 2 }, - { i: "robot", f: "planned_obsolescence", r: 2 }, - { i: "heart", f: "valentine", r: 1 }, - { i: "clover", f: "leprechaun", r: 1 }, - { i: "bunny", f: "easter", r: 1 }, - { i: "egg", f: "egghunt", r: 1 }, - { i: "rocket", f: "launch_day", r: 1 }, - { i: "sun", f: "solstice", r: 1 }, - { i: "firework", f: "firework", r: 1 }, - { i: "ghost", f: "halloween", r: 1 }, - { i: "candy", f: "trickortreat", r: 1 }, - { i: "turkey", f: "thanksgiving", r: 1 }, - { i: "meat", f: "immortal", r: 1 }, - { i: "present", f: "xmas", r: 1 } - ]; - let irank = alevel(); - if (irank < 2) { - irank = 2; - } - for (let i = 0; i < icons.length; i++) { - if (global.stats.feat[icons[i].f] && global.stats.feat[icons[i].f] >= icons[i].r) { - iconlist = iconlist + `${drawIcon(icons[i].i, 16, irank)} {{ label('${icons[i].i}') }}`; - } else if (global.settings.icon === icons[i].i) { - global.settings.icon = "star"; - } - } - let egg9 = easterEgg(9, 14); - let hideEgg = ""; - if (egg9.length > 0) { - hideEgg = `${egg9}`; - } - let trick = trickOrTreat(5, 12, true); - let hideTreat = ""; - if (trick.length > 0) { - hideTreat = `${trick}`; - } - let localelist = ""; - let current_locale = ""; - if (Object.keys(locales).length > 1) { - Object.keys(locales).forEach(function(locale) { - let selected = global.settings.locale; - if (selected === locale) { - current_locale = locales[locale]; - } - localelist = localelist + `${locales[locale]}`; - }); - } - let settings = $(` + `);n.append(g);let w="",S=[{i:"nuclear",f:"steelem",r:2},{i:"zombie",f:"the_misery",r:2},{i:"fire",f:"ill_advised",r:2},{i:"mask",f:"friday",r:1},{i:"skull",f:"demon_slayer",r:2},{i:"taijitu",f:"equilibrium",r:2},{i:"martini",f:"utopia",r:2},{i:"lightbulb",f:"energetic",r:2},{i:"trash",f:"garbage_pie",r:2},{i:"banana",f:"banana",r:2},{i:"turtle",f:"finish_line",r:2},{i:"floppy",f:"digital_ascension",r:2},{i:"slime",f:"slime_lord",r:2},{i:"sludge",f:"grand_death_tour",r:2},{i:"lightning",f:"annihilation",r:2},{i:"trophy",f:"wish",r:2},{i:"robot",f:"planned_obsolescence",r:2},{i:"heart",f:"valentine",r:1},{i:"clover",f:"leprechaun",r:1},{i:"bunny",f:"easter",r:1},{i:"egg",f:"egghunt",r:1},{i:"rocket",f:"launch_day",r:1},{i:"sun",f:"solstice",r:1},{i:"firework",f:"firework",r:1},{i:"ghost",f:"halloween",r:1},{i:"candy",f:"trickortreat",r:1},{i:"turkey",f:"thanksgiving",r:1},{i:"meat",f:"immortal",r:1},{i:"present",f:"xmas",r:1}],C=Xt();C<2&&(C=2);for(let F=0;F=S[F].r?w=w+`${bn(S[F].i,16,C)} {{ label('${S[F].i}') }}`:e.settings.icon===S[F].i&&(e.settings.icon="star");let z=Wt(9,14),O="";z.length>0&&(O=`${z}`);let k=ar(5,12,!0),A="";k.length>0&&(A=`${k}`);let G="",te="";Object.keys(on).length>1&&Object.keys(on).forEach(function(F){e.settings.locale===F&&(te=on[F]),G=G+`${on[F]}`});let Y=$(` +
{{ label('theme') }} - {{ label('theme_dark') }} - {{ label('theme_light') }} - {{ label('theme_night') }} - {{ label('theme_darkNight') }} - {{ label('theme_redgreen') }} - {{ label('theme_gruvboxLight') }} - {{ label('theme_gruvboxDark') }} - {{ label('theme_gruvboxDarkRG') }} - {{ label('theme_orangeSoda') }} - {{ label('theme_dracula') }} - ${hideEgg} + ${ac("setTheme")} + ${O} {{ label('units') }} @@ -17790,7 +237,7 @@ ${effect}`); {{ label('scientific') }} {{ label('engineering') }} {{ label('sln') }} - ${hideTreat} + ${A} {{ label('icons') }} @@ -17798,17 +245,17 @@ ${effect}`); - ${drawIcon("star", 16, irank)} {{ label('star') }} - ${iconlist} + ${bn("star",16,C)} {{ label('star') }} + ${w}
{{ label('locale') }} - ${localelist} + ${G} {{ label('font') }} @@ -17834,7 +281,7 @@ ${effect}`); {{ label('numberedlistqueuestyle') }} - {{ label('q_merge') }} + {{ label('q_merge') }} ${l} +
`)}else{let l="",h=["Asphodel_Powder","Elysanite"];e.race.fasting&&h.push("Food"),Object.keys(Ut).forEach(function(v){e.resource[v].display&&!h.includes(v)&&(l+=`${e.resource[v].name}`)}),i.append(`
${l}
`)}let s=a?$("
"):$('
');i.append(s);let n=$('{{ pow }}MW'),o=$('«'),c=$('»');if(s.append(o),s.append(n),s.append(c),r.append('
{{ result(res) }}
'),V({el:a||"#specialModal",data:e.race.replicator,methods:{less(){let l=ke();e.race.replicator.pow>0&&(e.race.replicator.pow-=l,e.race.replicator.pow<0&&(e.race.replicator.pow=0))},more(){let l=ke();e.race.replicator.pow+=l},setVal(l){e.resource[l].display&&(e.race.replicator.res=l)},avail(l){return e.resource[l].display&&!(e.race.fasting&&l==="Food")},aria(){return e.race.replicator.pow+"MW"},resName(l){return e.resource[l].name},result(l){return t("tau_replicator",[Vc(l,e.race.replicator.pow).toFixed(2),e.resource[l].name])}}}),!a){let l=document.getElementById("hscrolltarget");l.addEventListener("wheel",h=>{h.preventDefault(),l.scrollLeft+=h.deltaY})}}}function Vc(r,a){if(e.race.lone_survivor)return 17.5*Tr/Ut[r]*a;{let i=Tr||1,s=r==="Infernite"||r==="Elerium"?Ut[r]*4:Ut[r];return a>5e3&&(a=(a-5e3)**.9+5e3),i>40&&(i=(i-40)**.75+40),12.5*i/s*a**.75}}function Fi(r,a=.0025){return r*((1+a)**r-1)}function Xu(r,a=.25,i=.0025){return e0(function(s){return Fi(s,i)*a<=r})}function Ys(r,a,i){return r<=0?i?"has-text-success":"has-text-danger":r>=a?i?"has-text-danger":"has-text-success":r<=a/3?i?"has-text-info":"has-text-caution":r<=a*.66?"has-text-warning":r
${t("power_grid_header")}
Distribute Low Power
`),V({el:"#powerModeSwitch",data:e.settings}),Object.keys(r).forEach(function(a){if(!r[a].s)return;let i="";a==="power"&&(i=ar(7,12,!1)),r[a].r&&r[a].rs&&e[r[a].r][r[a].rs]?($("#powerGrid").append(`
${r[a].n} {{ support }}/{{ s_max }}
`),V({el:`#pg${a}sup`,data:e[r[a].r][r[a].rs]})):$("#powerGrid").append(`
${r[a].n}${i}
`);let s=$(`
`);$("#powerGrid").append(s);let n=0;for(let c=0;c`);C.append(` ${w}${S}`),C.append('{{ off(on) }} {{ on }}'),C.append('« »'),s.append(C),V({el:`#pg${g.id}${a}`,data:e[_][h[1]],methods:{power_on(){if(!e[_]||!e[_][h[1]])return;let z=ke();for(let O=0;O0;O++)e[_][h[1]].on--;g.postPower&&sa.set([g,"postPower"],[!1])},higher(){let z=$(`#pg${g.id}${a}`).attr("data-idx"),O=$(`#pg${g.id}${a}`).prevAll('.circuit:not(".inactive")').attr("data-idx");if(O>=0){let k=r[a].l;k.splice(O,0,k.splice(z,1)[0]),r[a].l=k,Ha()}},lower(){let z=$(`#pg${g.id}${a}`).attr("data-idx"),O=$(`#pg${g.id}${a}`).nextAll('.circuit:not(".inactive")').attr("data-idx");if(O0?"1"+O:z}}})}else{let C=$(`
`);C.append(`${w}${S}`),s.append(C)}}hp(a);let o=$(`
`);$("#powerGrid").append(o),V({el:`#${a}GridReset`,data:{},methods:{resetGrid(c){ms(c,!0),Ha()}}})})}function ga(){return{power:{l:e.power,n:t("power"),s:!0,r:!1,rs:!1},moon:{l:e.support.moon,n:t("space_moon_info_name"),s:e.settings.space.moon,r:"space",rs:"moon_base"},red:{l:e.support.red,n:X().red,s:e.settings.space.red,r:"space",rs:"spaceport"},belt:{l:e.support.belt,n:t("space_belt_info_name"),s:e.settings.space.belt,r:"space",rs:"space_station"},alpha:{l:e.support.alpha,n:t("interstellar_alpha_name"),s:e.settings.space.alpha,r:"interstellar",rs:"starport"},nebula:{l:e.support.nebula,n:t("interstellar_nebula_name"),s:e.settings.space.nebula,r:"interstellar",rs:"nexus"},gateway:{l:e.support.gateway,n:t("galaxy_gateway"),s:e.settings.space.gateway,r:"galaxy",rs:"starbase"},alien2:{l:e.support.alien2,n:t("galaxy_alien",[T[e.galaxy.hasOwnProperty("alien2")?e.galaxy.alien2.id:e.race.species].name]),s:e.settings.space.alien2,r:"galaxy",rs:"foothold"},lake:{l:e.support.lake,n:t("portal_lake_name"),s:e.settings.portal.lake,r:"portal",rs:"harbor"},spire:{l:e.support.spire,n:t("portal_spire_name"),s:e.settings.portal.spire,r:"portal",rs:"purifier"},titan:{l:e.support.titan,n:X().titan,s:e.settings.space.titan,r:"space",rs:"electrolysis"},enceladus:{l:e.support.enceladus,n:X().enceladus,s:e.settings.space.enceladus,r:"space",rs:"titan_spaceport"},eris:{l:e.support.eris,n:X().eris,s:e.settings.space.eris,r:"space",rs:"drone_control"},tau_home:{l:e.support.tau_home,n:t("tau_planet",[T[e.race.species].home]),s:e.settings.tau.home,r:"tauceti",rs:"orbital_station"},tau_red:{l:e.support.tau_red,n:t("tau_planet",[X().red]),s:e.settings.tau.red,r:"tauceti",rs:"orbital_platform"},tau_roid:{l:e.support.tau_roid,n:t("tau_roid_title"),s:e.settings.tau.roid,r:"tauceti",rs:"patrol_ship"},asphodel:{l:e.support.asphodel,n:t("eden_asphodel_name"),s:e.settings.eden.asphodel,r:"eden",rs:"encampment"}}}function yn(r){r=r||ga(),Object.keys(r).forEach(function(a){let i=$(`#grid${a}`)[0];if(i){let s=Sortable.get(i);s&&s.destroy()}})}function hp(r){let a=$(`#grid${r}`)[0];if(!a)return;let i=ga();Sortable.create(a,{onEnd(s){let n=i[r].l;n.splice(s.newDraggableIndex,0,n.splice(s.oldDraggableIndex,1)[0]),i[r].l=n,Ha()}})}var Jt={dna_replication:{reqs:{race:"protoplasm",resource:"DNA"},type:"major",effect(){var r=Math.rand(1,Math.round(e.resource.DNA.max/3)),a=e.resource.DNA.amount+r;return a>e.resource.DNA.max&&(a=e.resource.DNA.max),e.resource.DNA.amount=a,t("event_dna",[r.toLocaleString()])}},rna_meteor:{reqs:{race:"protoplasm",resource:"RNA"},type:"major",effect(){var r=Math.rand(1,Math.round(e.resource.RNA.max/2)),a=e.resource.RNA.amount+r;return a>e.resource.RNA.max&&(a=e.resource.RNA.max),e.resource.RNA.amount=a,t("event_rna",[r.toLocaleString()])}},inspiration:{reqs:{resource:"Knowledge"},type:"major",effect(){return e.race.inspired=Math.rand(300,600),t("event_inspiration")}},motivation:{reqs:{tech:"primitive"},type:"major",effect(){return e.race.motivated=Math.rand(300,600),t("event_motivation")}},fire:{reqs:{resource:"Lumber",nogenus:"aquatic",notrait:"evil"},type:"major",effect(){var r=Math.rand(1,Math.round(e.resource.Lumber.amount/4)),a=e.resource.Lumber.amount-r;return a<0&&(a=0),e.resource.Lumber.amount=a,t("event_fire",[r.toLocaleString()])}},flare:{reqs:{tech:"primitive"},type:"major",condition(){return!!e.city.ptrait.includes("flare")},effect(r){let a=0,i=T[e.race.species].home;if(e.race.cataclysm||e.race.orbit_decayed){if(e.space.hasOwnProperty("living_quarters")){let n=r?e.space.living_quarters.on:W.living_quarters;a+=Math.round(n*d.space.spc_red.living_quarters.citizens())}i=T[e.race.species].solar.red}else if(e.city.hasOwnProperty("basic_housing")&&(a+=e.city.basic_housing.count*d.city.basic_housing.citizens()),e.city.hasOwnProperty("cottage")&&(a+=e.city.cottage.count*d.city.cottage.citizens()),e.city.hasOwnProperty("apartment")){let n=r?e.city.apartment.on:x.apartment;a+=n*d.city.apartment.citizens()}a>e.resource[e.race.species].amount&&(a=e.resource[e.race.species].amount),a=Math.floor(a*.1);let s=Math.rand(0,a);if(e.resource[e.race.species].amount-=s,e.civic[e.civic.d_job].workers-=s,e.civic[e.civic.d_job].workers<0&&(e.civic[e.civic.d_job].workers=0),e.city.biome!=="oceanic"){let n=400;e.city.biome==="forest"?n*=2:(e.city.biome==="desert"||e.city.biome==="volcanic")&&(n/=2),e.city.firestorm=Math.rand(n,n*10)}return t(e.city.biome==="oceanic"?"event_flare2":"event_flare",[i,s.toLocaleString()])}},raid:{reqs:{tech:"military",notech:"world_control"},type:"major",condition(){return Cr("gov0")&&Cr("gov1")&&Cr("gov2")?!1:!e.race.truepath&&!e.race.cataclysm&&(e.civic.foreign.gov0.hstl>60||e.civic.foreign.gov1.hstl>60||e.civic.foreign.gov2.hstl>60)},effect(){let r=nt(Ge(),"army",e.civic.garrison.wounded),a=e.tech.high_tech?e.tech.high_tech+1:1,i=Math.rand(25,50)*a,s=e.civic.garrison.wounded>Ge()?Ge():e.civic.garrison.wounded,n=Math.floor(R(0,s)),o=Math.floor(R(0,Ge()-s));if(e.race.instinct&&(n=Math.round(n/2),o=Math.round(o/2)),br(n),e.civic.garrison.wounded+=o,e.civic.garrison.wounded>e.civic.garrison.workers&&(e.civic.garrison.wounded=e.civic.garrison.workers),e.race.blood_thirst&&(e.race.blood_thirst_count+=Math.ceil(i/5),e.race.blood_thirst_count>y.blood_thirst.vars()[0]&&(e.race.blood_thirst_count=y.blood_thirst.vars()[0])),r>i)return t("event_raid1",[n.toLocaleString(),o.toLocaleString()]);{let c=Math.rand(1,Math.round(e.resource.Money.amount/4));if(c<=0)return t("event_raid1",[n.toLocaleString(),o.toLocaleString()]);{let l=e.resource.Money.amount-c;return l<0&&(l=0),e.resource.Money.amount=l,t("event_raid2",[c.toLocaleString(),n.toLocaleString(),o.toLocaleString()])}}}},siege:{reqs:{tech:"military",notech:"world_control"},type:"major",condition(){return Cr("gov0")||Cr("gov1")||Cr("gov2")?!1:!e.race.truepath&&e.civic.foreign.gov0.hstl>80&&e.civic.foreign.gov1.hstl>80&&e.civic.foreign.gov2.hstl>80},effect(){let r=nt(Ge(),"army",e.civic.garrison.wounded),a=e.tech.high_tech?e.tech.high_tech+1:1,i=(e.civic.foreign.gov0.mil+e.civic.foreign.gov1.mil+e.civic.foreign.gov2.mil)*a,s=e.civic.garrison.wounded>Ge()?Ge():e.civic.garrison.wounded,n=Math.floor(R(0,s)),o=Math.floor(R(0,Ge()-s));if(e.race.instinct&&(n=Math.round(n/2),o=Math.round(o/2)),br(n),e.civic.garrison.wounded+=o,e.civic.garrison.wounded>e.civic.garrison.workers&&(e.civic.garrison.wounded=e.civic.garrison.workers),e.race.blood_thirst&&(e.race.blood_thirst_count+=Math.ceil(i/5),e.race.blood_thirst_count>y.blood_thirst.vars()[0]&&(e.race.blood_thirst_count=y.blood_thirst.vars()[0])),r>i)return t("event_siege1",[n.toLocaleString(),o.toLocaleString()]);var c=Math.rand(1,Math.round(e.resource.Money.amount/2)),l=e.resource.Money.amount-c;return l<0&&(l=0),e.resource.Money.amount=l,t("event_siege2",[c.toLocaleString(),n.toLocaleString(),o.toLocaleString()])}},pillage0:{reqs:{tech:"military",notech:"world_control"},type:"major",condition(){return!!(e.race.truepath&&!e.tech.isolation&&!Cr("gov0")&&e.civic.foreign.gov0.hstl>60)},effect(){return Tn("gov0")}},pillage1:{reqs:{tech:"military",notech:"world_control"},type:"major",condition(){return!!(e.race.truepath&&!e.tech.isolation&&!Cr("gov1")&&e.civic.foreign.gov1.hstl>60)},effect(){return Tn("gov1")}},pillage2:{reqs:{tech:"military",notech:"world_control"},type:"major",condition(){return!!(e.race.truepath&&!e.tech.isolation&&!Cr("gov2")&&e.civic.foreign.gov2.hstl>60)},effect(){return Tn("gov2")}},pillage3:{reqs:{tech:"military"},type:"major",condition(){return!!(e.race.truepath&&!e.tech.isolation&&e.tech.rival&&e.civic.foreign.gov3.hstl>60)},effect(){return Tn("gov3",!0)}},witch_hunt_crusade:{reqs:{tech:"magic"},type:"major",condition(){return!!(e.race.witch_hunter&&e.resource.Sus.amount>=100)},effect(){return Tn("witchhunt",!0)}},terrorist:{reqs:{tech:"world_control",notrait:"truepath"},type:"major",effect(){let r=Math.floor(R(0,e.civic.garrison.wounded)),a=Math.floor(R(0,e.civic.garrison.workers-e.civic.garrison.wounded));return e.race.instinct&&(r=Math.round(r/2),a=Math.round(a/2)),br(r),e.civic.garrison.wounded+=a,e.civic.garrison.wounded>e.civic.garrison.workers&&(e.civic.garrison.wounded=e.civic.garrison.workers),e.race.blood_thirst&&(e.race.blood_thirst_count+=1e3,e.race.blood_thirst_count>y.blood_thirst.vars()[0]&&(e.race.blood_thirst_count=y.blood_thirst.vars()[0])),r===0?t("event_terrorist1",[a.toLocaleString()]):t("event_terrorist2",[a.toLocaleString(),r.toLocaleString()])}},quake:{reqs:{tech:"wsc",notech:"quaked"},type:"major",condition(){return!!e.city.ptrait.includes("unstable")},effect(){return e.tech.quaked=1,de(),t("event_quake",[e.race.cataclysm||e.race.orbit_decayed?T[e.race.species].solar.red:T[e.race.species].home])}},doom:{reqs:{tech:"wsc",notech:"portal_guard"},type:"major",condition(){return!!(e.space.space_barracks&&e.space.space_barracks.on>0)},effect(){return le("doomed"),e.stats.portals++,t(e.race.evil?"event_doom_alt":"event_doom",[T[e.race.species].solar.dwarf])}},demon_influx:{reqs:{tech:"portal_guard"},type:"major",effect(){let r=Math.rand(2500,5e3);return e.portal.fortress.threat+=r,t("event_demon_influx",[r.toLocaleString()])}},ruins:{reqs:{trait:"ancient_ruins",resource:"Knowledge"},type:"major",effect(){let r=["Iron","Copper","Steel","Cement"];for(var a=0;ae.resource[i].max?e.resource[i].amount=e.resource[i].max:e.resource[i].amount+=s}}return t("event_ruins")}},tax_revolt:{reqs:{low_morale:99,notrait:"blissful",tech:"primitive"},type:"major",condition(){let r=e.civic.govern.type==="oligarchy"?45:25,a=_e("aristocrat",2);return a&&(r-=a),e.civic.taxes.tax_rate>r},effect(){return fp()}},slave_death1:Xs("major","death1"),slave_death2:Xs("major","death2"),slave_death3:Xs("major","death3"),protest:{reqs:{tech:"primitive"},type:"major",condition(){return e.civic.govern.type==="republic"},effect(){switch(e.civic.govern.protest=Math.rand(30,60),Math.rand(0,10)){case 0:return t("event_protest0",[Rt("small")]);case 1:return t("event_protest1");case 2:return t("event_protest2");case 3:return e.civic.govern.protest=Math.rand(45,75),t("event_protest3");case 4:return t("event_protest4");case 5:return e.civic.govern.protest=Math.rand(45,75),t("event_protest5");case 6:return t("event_protest6");case 7:return t("event_protest7");case 8:return t("event_protest8");case 9:return e.civic.govern.protest=Math.rand(60,90),t("event_protest9")}}},scandal:{reqs:{tech:"govern"},type:"major",condition(){return!!_e("muckraker",0)},effect(){switch(e.civic.govern.scandal=Math.rand(15,90),Math.rand(0,10)){case 0:return t("event_scandal0");case 1:return t("event_scandal1");case 2:return t("event_scandal2");case 3:return t("event_scandal3");case 4:return t("event_scandal4");case 5:return t("event_scandal5");case 6:return t("event_scandal6");case 7:return t("event_scandal7");case 8:return t("event_scandal8");case 9:return t("event_scandal9")}}},spy:{reqs:{tech:"primitive",notech:"world_control"},type:"major",condition(){if(e.race.elusive||Pe("satyr")>.25)return!1;for(let a=0;a<3;a++)if(e.civic.foreign[`gov${a}`].spy>0&&!e.civic.foreign[`gov${a}`].occ&&!e.civic.foreign[`gov${a}`].anx&&!e.civic.foreign[`gov${a}`].buy)return!0;return!1},effect(){let r=[];for(let i=0;i<3;i++)e.civic.foreign[`gov${i}`].spy>0&&!e.civic.foreign[`gov${i}`].occ&&!e.civic.foreign[`gov${i}`].anx&&!e.civic.foreign[`gov${i}`].buy&&r.push(i);let a=r[Math.rand(0,r.length)];return e.civic.foreign[`gov${a}`].spy--,e.civic.foreign[`gov${a}`].spy===0&&(e.civic.foreign[`gov${a}`].act="none",e.civic.foreign[`gov${a}`].sab=0),t("event_spy",[mt(a)])}},mine_collapse:{reqs:{tech:"mining"},type:"major",condition(){return e.resource[e.race.species].amount>0&&e.civic.miner.workers>0},effect(){return e.resource[e.race.species].amount--,e.civic.miner.workers--,Qr(1),t("event_mine_collapse")}},klepto:{reqs:{trait:"rogue",resource:"Money"},type:"major",effect(){let r=[];["Money","Food","Lumber","Stone","Chrysotile","Crystal","Furs","Copper","Iron","Cement","Coal","Uranium","Aluminium","Steel","Titanium","Alloy","Polymer","Iridium","Neutronium","Adamantite","Infernite","Elerium","Nano_Tube","Graphene","Stanene","Bolognium","Vitreloy","Orichalcum","Asphodel_Powder","Elysanite","Unobtainium","Quantium","Plywood","Brick","Wrought_Iron","Sheet_Metal","Mythril","Aerogel","Nanoweave","Scarletite"].forEach(function(n){e.resource[n].display&&r.push(n)});let a=Math.round(e.stats.know/25),i=r[Math.floor(R(0,r.length))];e.resource[i].max>0&&a>e.resource[i].max*y.rogue.vars()[0]/100&&(a=Math.round(e.resource[i].max*y.rogue.vars()[0]/100));let s=Math.floor(R(1,a));return e.resource[i].max!==-1&&e.resource[i].amount+s>e.resource[i].max?e.resource[i].amount=e.resource[i].max:e.resource[i].amount+=s,i==="Money"?t("event_klepto_money",[s]):t("event_klepto",[s,e.resource[i].name])}},chicken_feast:{reqs:{tech:"primitive",trait:"chicken"},condition(){return e.resource[e.race.species].amount>0},type:"major",effect(){let r=Math.floor(R(2,N(10))),a=Math.floor(R(0,10));return r>e.resource[e.race.species].amount&&(r=e.resource[e.race.species].amount),e.resource[e.race.species].amount-=r,Qr(r),a===7?t("event_chicken",[t(`event_chicken_eaten${a}`,[ut("name")]),r,t(`event_chicken_seasoning${Math.floor(R(0,10))}`)]):t("event_chicken",[t(`event_chicken_eaten${a}`),r,t(`event_chicken_seasoning${Math.floor(R(0,10))}`)])}},brawl:{reqs:{tech:"primitive",trait:"aggressive"},condition(){return e.resource[e.race.species].amount>0},type:"major",effect(){let r=Math.floor(R(1,N(y.aggressive.vars()[0]+1)));return r>e.civic.garrison.workers&&(r=e.civic.garrison.workers),br(r),t("event_brawl_s",[t(`event_brawl${Math.floor(R(0,10))}`),r])}},m_curious:{reqs:{tech:"primitive",trait:"curious"},condition(){return e.resource[e.race.species].amount>=40},type:"major",effect(){switch(Math.rand(0,5)){case 0:{let r="Money",a=Math.rand(5e4,5e6);switch(Math.rand(0,5)){case 0:e.resource.Steel.display&&(r="Steel",a=Math.rand(100,1e5));break;case 1:e.resource.Bolognium.display&&(r="Bolognium",a=Math.rand(500,5e4));break;case 2:e.resource.Alloy.display&&(r="Alloy",a=Math.rand(250,1e6));break;case 3:e.resource.Adamantite.display&&(r="Adamantite",a=Math.rand(1e3,25e4));break;case 4:e.resource.Soul_Gem.display&&(r="Soul_Gem",a=1);break}return e.resource[r].amount+=a,e.resource[r].max>=0&&e.resource[r].amount>e.resource[r].max&&(e.resource[r].amount=e.resource[r].max),r==="Money"?t("event_m_curious0",[T[e.race.species].name,"$",a.toLocaleString()]):t("event_m_curious0",[T[e.race.species].name,a.toLocaleString(),e.resource[r].name])}case 1:return e.resource[e.race.species].amount-=10,e.civic[e.civic.d_job].workers-=10,e.civic[e.civic.d_job].workers<0&&(e.civic[e.civic.d_job].workers=0),t("event_m_curious1",[T[e.race.species].name]);case 2:return e.race.inspired=Math.rand(600,1200),t("event_m_curious2",[T[e.race.species].name]);case 3:return e.race.distracted=Math.rand(200,600),t("event_m_curious3",[T[e.race.species].name]);case 4:return e.race.species==="cath"?(e.race.stimulated=Math.rand(500,1e3),t("event_m_curious4a",[T[e.race.species].name])):t("event_m_curious4b",[T[e.race.species].name])}}},curious1:{reqs:{tech:"primitive",trait:"curious"},type:"minor",effect(){let r=Math.rand(0,5);return t(`event_curious${r}`,[T[e.race.species].name])}},curious2:{reqs:{tech:"primitive",trait:"curious"},type:"minor",effect(){let r=Math.rand(5,10);return t(`event_curious${r}`,[T[e.race.species].name])}},slave_escape1:Xs("minor","escape1"),slave_escape2:Xs("minor","escape2"),slave_escape3:Xs("minor","death4"),shooting_star:jt("shooting_star","primitive"),tumbleweed:jt("tumbleweed","primitive"),flashmob:jt("flashmob","high_tech"),witch_hunt:{reqs:{tech:"magic"},type:"minor",condition(){return!!(e.race.witch_hunter&&e.resource.Sus.amount>=50&&e.civic.scientist.workers>0)},effect(){return e.resource[e.race.species].amount--,e.civic.scientist.workers--,e.civic.scientist.assigned--,Qr(1),t("witch_hunter_witch_hunt")}},chicken:{reqs:{tech:"primitive",trait:"chicken"},condition(){return e.resource[e.race.species].amount>0},type:"minor",effect(){e.resource[e.race.species].amount--,Qr(1);let r=Math.floor(R(0,10));return r===7?t("event_chicken",[t(`event_chicken_eaten${r}`,[ut("name")]),1,t(`event_chicken_seasoning${Math.floor(R(0,10))}`)]):t("event_chicken",[t(`event_chicken_eaten${r}`),1,t(`event_chicken_seasoning${Math.floor(R(0,10))}`)])}},fight:{reqs:{tech:"primitive",trait:"aggressive"},condition(){return e.resource[e.race.species].amount>0},type:"minor",effect(){let r=Math.floor(R(1,N(y.aggressive.vars()[1]+1)));return r>e.resource[e.race.species].amount&&(r=e.resource[e.race.species].amount),e.resource[e.race.species].amount-=r,Qr(r),t("event_brawl_c",[t(`event_brawl${Math.floor(R(0,10))}`),r])}},heatwave:{reqs:{tech:"primitive"},type:"minor",condition(){return!(e.race.cataclysm||e.race.orbit_decayed||e.city.calendar.temp===2||e.city.calendar.season===3&&["tundra","taiga","eden"].includes(e.city.biome))},effect(){return e.city.calendar.temp=2,e.city.cold=0,t("event_heatwave")}},coldsnap:{reqs:{tech:"primitive"},type:"minor",condition(){return!(e.race.cataclysm||e.race.orbit_decayed||e.city.calendar.temp===0||e.city.biome==="hellscape"&&!e.city.ptrait.includes("permafrost")||e.city.calendar.season===1&&["ashland","volcanic","eden"].includes(e.city.biome))},effect(){return e.city.calendar.temp=0,e.city.hot=0,t("event_coldsnap")}},cucumber:jt("cucumber","primitive"),planking:jt("planking","high_tech"),furryfish:jt("furryfish","primitive"),meteor_shower:jt("meteor_shower","primitive"),hum:jt("hum","high_tech"),bloodrain:jt("bloodrain","primitive"),haunting:jt("haunting","science"),mothman:jt("mothman","science"),dejavu:jt("dejavu","theology"),dollar:jt("dollar","currency",function(){let r=Math.rand(1,10);return e.resource.Money.amount+=r,e.resource.Money.amount>e.resource.Money.max&&(e.resource.Money.amount=e.resource.Money.max),r}),pickpocket:jt("pickpocket","currency",function(){let r=Math.rand(1,10);return e.resource.Money.amount-=r,e.resource.Money.amount<0&&(e.resource.Money.amount=0),r}),bird:jt("bird","primitive"),contest:{reqs:{tech:"science"},type:"minor",effect(){let r=Math.rand(0,3),a=Math.rand(0,10);return t("event_contest",[t(`event_contest_place${r}`),t(`event_contest_type${a}`)])}},cloud:jt("cloud","primitive",function(){let r=Math.rand(0,11);return t(`event_cloud_type${r}`)}),dark_cloud:{reqs:{tech:"primitive"},type:"minor",condition(){return!e.race.cataclysm&&!e.race.orbit_decayed&&e.city.calendar.weather!==0},effect(){return e.city.calendar.weather=0,t("event_dark_cloud")}},gloom:{reqs:{tech:"primitive"},type:"minor",condition(){return!e.race.cataclysm&&!e.race.orbit_decayed&&e.city.calendar.weather!==1},effect(){return e.city.calendar.weather=1,t("event_gloom")}},tracks:jt("tracks","primitive"),hoax:jt("hoax","primitive"),burial:jt("burial","primitive"),artifacts:jt("artifacts","high_tech"),parade:jt("parade","world_control"),crop_circle:jt("crop_circle","agriculture"),llama:jt("llama","primitive",function(){let r=Math.rand(25,100);return e.resource.Food.amount-=r,e.resource.Food.amount<0&&(e.resource.Food.amount=0),r},function(){return!(e.race.carnivore||e.race.soul_eater||e.race.detritivore||e.race.artifical)}),cat:jt("cat","primitive"),omen:jt("omen","primitive"),theft:jt("theft","primitive",function(){let r=Math.rand(0,10);return t(`event_theft_type${r}`)}),compass:jt("compass","mining"),bone:jt("bone","primitive"),delicacy:jt("delicacy","high_tech"),prank:jt("prank","primitive",function(){let r=Math.rand(0,10);return t(`event_prank_type${r}`)}),graffiti:jt("graffiti","science"),soul:jt("soul","soul_eater"),cheese:{reqs:{tech:"banking"},type:"minor",condition(){return!!(e.tech.banking&&e.tech.banking>=7)},effect(){let r=e.stats.hasOwnProperty("reset")?e.stats.reset+1:1;return e.race.cheese=Math.rand(10,10+r),t("event_cheese")}},tremor:jt("tremor","primitive"),rumor:jt("rumor","primitive",function(){let r=Math.rand(0,10);return t(`event_rumor_type${r}`)}),pet:{reqs:{tech:"primitive"},type:"minor",effect(){if(e.race.pet){e.race.pet.event+=Math.rand(300,600);let r=Math.rand(0,10);return t(`event_${e.race.pet.type}_interaction${r}`,[t(`event_${e.race.pet.type}_name${e.race.pet.name}`)])}else{let r=e.race.catnip&&e.race.catnip>=1?"cat":e.race.anise&&e.race.anise>=1?"dog":Math.rand(0,2)===0?"cat":"dog";return e.race.pet={type:r,name:r==="cat"?Math.rand(0,12):Math.rand(0,10),event:0,pet:0},Mo(),t(`event_pet_${e.race.pet.type}`,[t(`event_${e.race.pet.type}_name${e.race.pet.name}`)])}}}};function jt(r,a,i,s){return{reqs:{tech:a},condition(){let n=!0;return typeof s=="function"&&(n=s()),n},type:"minor",effect(){let n=!1;return typeof i=="function"&&(n=i()),n?t(`event_${r}`,[n]):t(`event_${r}`)}}}function Xs(r,a){return{reqs:{trait:"slaver",tech:"slaves"},condition(){return!(e.race.cataclysm||e.race.orbit_decayed||e.tech.isolation)},type:r,effect(){return e.city.slave_pen&&e.resource.Slave.amount>0?(e.resource.Slave.amount--,t(`event_slave_${a}`)):t("event_slave_none")}}}function Tn(r,a){let i=nt(Ge(),"army",e.civic.garrison.wounded),s=e.tech.high_tech?e.tech.high_tech+1:1,n=(r==="witchhunt"?1e3:e.civic.foreign[r].mil)*(1+Math.floor(R(0,10)-5)/10)*s,o=e.civic.garrison.wounded>Ge()?Ge():e.civic.garrison.wounded,c=Ge()>0?Math.floor(R(1,o)):0,l=Math.floor(R(0,Ge()-o));e.race.instinct&&(c=Math.round(c/2),l=Math.round(l/2)),br(c),e.civic.garrison.wounded+=l,e.civic.garrison.wounded>e.civic.garrison.workers&&(e.civic.garrison.wounded=e.civic.garrison.workers),e.race.blood_thirst&&(e.race.blood_thirst_count+=Math.ceil(n/5),e.race.blood_thirst_count>y.blood_thirst.vars()[0]&&(e.race.blood_thirst_count=y.blood_thirst.vars()[0]));let h=r==="witchhunt"?t("witch_hunter_crusade"):t(`civics_gov${e.civic.foreign[r].name.s0}`,[e.civic.foreign[r].name.s1]);if(i>n)return t("event_pillaged1",[h,c.toLocaleString(),l.toLocaleString()]);{let v=a?2:4,_=[],g=Object.keys(Dr);return g.push("Money"),g.forEach(function(w){if(e.resource[w]&&e.resource[w].display&&e.resource[w].amount>0){let S=Math.rand(1,Math.round(e.resource[w].amount/v)),C=e.resource[w].amount-S;C<0&&(C=0),e.resource[w].amount=C,w==="Money"?_.push(`$${Me(S)}`):_.push(`${Me(S)} ${e.resource[w].name}`)}}),t("event_pillaged2",[h,c.toLocaleString(),l.toLocaleString(),_.join(", ")])}}function en(r){let a=[];return Object.keys(Jt).forEach(function(i){let s=!0;r!==Jt[i].type&&(s=!1),(r==="major"&&e.event.l===i||r==="minor"&&e.m_event.l===i)&&(s=!1),Jt[i].reqs&&Object.keys(Jt[i].reqs).forEach(function(n){switch(n){case"race":Jt[i].reqs[n]!==e.race.species&&(s=!1);break;case"genus":Jt[i].reqs[n]!==T[e.race.species].type&&(s=!1);break;case"nogenus":Jt[i].reqs[n]===T[e.race.species].type&&(s=!1);break;case"resource":(!e.resource[Jt[i].reqs[n]]||!e.resource[Jt[i].reqs[n]].display)&&(s=!1);break;case"trait":e.race[Jt[i].reqs[n]]||(s=!1);break;case"notrait":e.race[Jt[i].reqs[n]]&&(s=!1);break;case"tech":e.tech[Jt[i].reqs[n]]||(s=!1);break;case"notech":e.tech[Jt[i].reqs[n]]&&(s=!1);break;case"high_tax_rate":e.civic.taxes.tax_rate<=Jt[i].reqs[n]&&(s=!1);break;case"low_morale":e.city.morale.current>=Jt[i].reqs[n]&&(s=!1);break;case"biome":e.city.biome!==Jt[i].reqs[n]&&(s=!1);break;default:s=!1;break}}),s&&Jt[i].condition&&!Jt[i].condition()&&(s=!1),s&&a.push(i)}),a}function fp(){let r=["Soul_Gem","Corrupt_Gem","Codex","Demonic_Essence"],a=e.civic.govern.type==="oligarchy"?45:25,i=_e("aristocrat",2);i&&(a-=i);let s=(e.civic.taxes.tax_rate-a)*.04;return Object.keys(e.resource).forEach(function(n){if(!r.includes(n)){let o=Math.rand(1,Math.round(e.resource[n].amount*s)),c=e.resource[n].amount-o;c<0&&(c=0),e.resource[n].amount=c}}),t("event_tax_revolt")}var xs=new Date,mp=Po(),gp=ha(),Ic=["angry","arrogant","atrophy","diverse","dumb","fragrant","frail","freespirit","gluttony","gnawer","greedy","hard_of_hearing","heavy","hooved","invertebrate","lazy","mistrustful","nearsighted","nyctophilia","paranoid","pathetic","pessimistic","puny","pyrophobia","skittish","slow","slow_regen","snowy","solitary","unorganized","unfavored"];function fe(r,a){if(e.settings.boring)return e.race.hrt&&delete e.race.hrt,!1;switch(r){case"elven":case"capybara":case"centaur":case"wendigo":case"entish":case"yeti":return xs.getMonth()===11&&xs.getDate()>=17||e.race.hrt&&e.race.hrt===r?(a&&(e.race.hrt=r),!0):!1;case"wolven":case"vulpine":return mp.active||e.race.hrt&&e.race.hrt===r?(a&&(e.race.hrt=r),!0):!1;case"arraak":return xs.getMonth()===10&&xs.getDate()>=22&&xs.getDate()<=28||e.race.hrt&&e.race.hrt===r?(a&&(e.race.hrt=r),!0):!1;case"seraph":return xs.getMonth()===1&&xs.getDate()===14||e.race.hrt&&e.race.hrt===r?(a&&(e.race.hrt=r),!0):!1;case"human":case"tortoisan":case"unicorn":case"junker":return gp.active||e.race.hrt&&e.race.hrt===r?(a&&(e.race.hrt=r),!0):!1}return!1}var fr={humanoid:{traits:{adaptable:1,wasteful:1},oppose:["fungi"]},carnivore:{traits:{carnivore:1,beast:1,cautious:1},oppose:["herbivore"]},herbivore:{traits:{herbivore:1,instinct:1},oppose:["carnivore"]},omnivore:{traits:{forager:1,beast:1,cautious:1,instinct:1}},small:{traits:{small:1,weak:1},oppose:["giant"]},giant:{traits:{large:1,strong:1},oppose:["small"]},reptilian:{traits:{cold_blooded:1,scales:1},oppose:["avian"]},avian:{traits:{flier:1,hollow_bones:1,sky_lover:1},oppose:["reptilian"]},insectoid:{traits:{high_pop:1,fast_growth:1,high_metabolism:1},oppose:["plant"]},plant:{traits:{sappy:1,asymmetrical:1},oppose:["insectoid"]},fungi:{traits:{detritivore:1,spongy:1},oppose:["humanoid"]},aquatic:{traits:{submerged:1,low_light:1},oppose:["sand"]},fey:{traits:{elusive:1,iron_allergy:1},oppose:["eldritch","synthetic"]},heat:{traits:{smoldering:1,cold_intolerance:1},oppose:["polar"]},polar:{traits:{chilled:1,heat_intolerance:1},oppose:["heat"]},sand:{traits:{scavenger:1,nomadic:1},oppose:["aquatic"]},demonic:{traits:{immoral:1,evil:1,soul_eater:1},oppose:["angelic"]},angelic:{traits:{blissful:1,pompous:1,holy:1},oppose:["demonic"]},synthetic:{traits:{artifical:1,powered:1},oppose:["eldritch","fey"]},eldritch:{traits:{psychic:1,tormented:1,darkness:1,unfathomable:1},oppose:["synthetic","fey"]},hybrid:{traits:{},oppose:[]}},y={adaptable:{name:t("trait_adaptable_name"),desc:t("trait_adaptable"),type:"genus",origin:"humanoid",taxonomy:"utility",val:3,vars(r){switch(r||ie("adaptable")||1){case .1:return[2];case .25:return[3];case .5:return[5];case 1:return[10];case 2:return[15];case 3:return[20];case 4:return[25]}}},wasteful:{name:t("trait_wasteful_name"),desc:t("trait_wasteful"),type:"genus",origin:"humanoid",taxonomy:"resource",val:-3,vars(r){switch(r||ie("wasteful")||1){case .1:return[16];case .25:return[14];case .5:return[12];case 1:return[10];case 2:return[6];case 3:return[4];case 4:return[2]}}},xenophobic:{name:t("trait_xenophobic_name"),desc:t("trait_xenophobic"),type:"genus",genus:"humanoid",taxonomy:"resource",val:-5},carnivore:{name:t("trait_carnivore_name"),desc:t("trait_carnivore"),type:"genus",origin:"carnivore",taxonomy:"resource",val:3,vars(r){switch(r||ie("carnivore")||1){case .1:return[70];case .25:return[65];case .5:return[60];case 1:return[50];case 2:return[40];case 3:return[35];case 4:return[30]}}},beast:{name:t("trait_beast_name"),desc:t("trait_beast"),type:"genus",origin:"carnivore",taxonomy:"resource",val:2,vars(r){switch(r||ie("beast")||1){case .1:return[3,6,3];case .25:return[4,8,4];case .5:return[5,10,5];case 1:return[8,15,10];case 2:return[10,20,15];case 3:return[12,24,20];case 4:return[14,28,25]}}},cautious:{name:t("trait_cautious_name"),desc:t("trait_cautious"),type:"genus",origin:"carnivore",taxonomy:"combat",val:-2,vars(r){switch(r||ie("cautious")||1){case .1:return[16];case .25:return[14];case .5:return[12];case 1:return[10];case 2:return[8];case 3:return[6];case 4:return[4]}}},herbivore:{name:t("trait_herbivore_name"),desc:t("trait_herbivore"),type:"genus",origin:"herbivore",taxonomy:"resource",val:-7},instinct:{name:t("trait_instinct_name"),desc:t("trait_instinct"),type:"genus",genus:"herbivore",taxonomy:"utility",val:5,vars(r){switch(r||ie("instinct")||1){case .1:return[2,10];case .25:return[3,15];case .5:return[5,25];case 1:return[10,50];case 2:return[15,60];case 3:return[20,65];case 4:return[25,70]}}},forager:{name:t("trait_forager_name"),desc:t("trait_forager"),type:"genus",origin:"hybrid",taxonomy:"resource",val:4,vars(r){switch(r||ie("forager")||1){case .1:return[70];case .25:return[80];case .5:return[90];case 1:return[100];case 2:return[110];case 3:return[120];case 4:return[130]}}},small:{name:t("trait_small_name"),desc:t("trait_small"),type:"genus",origin:"small",taxonomy:"utility",val:6,vars(r){switch(r||ie("small")||1){case .1:return[.0015,.001];case .25:return[.0025,.0015];case .5:return[.005,.0025];case 1:return[.01,.005];case 2:return[.0125,.006];case 3:return[.015,.0075];case 4:return[.016,.008]}}},weak:{name:t("trait_weak_name"),desc:t("trait_weak"),type:"genus",origin:"small",taxonomy:"resource",val:-3,vars(r){switch(r||ie("weak")||1){case .1:return[16];case .25:return[14];case .5:return[12];case 1:return[10];case 2:return[8];case 3:return[6];case 4:return[4]}}},large:{name:t("trait_large_name"),desc:t("trait_large"),type:"genus",origin:"giant",taxonomy:"utility",val:-5,vars(r){switch(r||ie("large")||1){case .1:return[.008];case .25:return[.007];case .5:return[.006];case 1:return[.005];case 2:return[.004];case 3:return[.003];case 4:return[.002]}}},strong:{name:t("trait_strong_name"),desc:t("trait_strong"),type:"genus",origin:"giant",taxonomy:"resource",val:5,vars(r){switch(r||ie("strong")||1){case .1:return[2,1.1];case .25:return[2,1.25];case .5:return[3,1.5];case 1:return[4,2];case 2:return[5,2.25];case 3:return[6,2.5];case 4:return[7,2.75]}}},cold_blooded:{name:t("trait_cold_blooded_name"),desc:t("trait_cold_blooded"),type:"genus",origin:"reptilian",taxonomy:"production",val:-2,vars(r){switch(r||ie("cold_blooded")||1){case .25:return[30,6];case .5:return[25,8];case 1:return[20,10];case 2:return[15,15];case 3:return[12,18];case 4:return[10,20]}}},scales:{name:t("trait_scales_name"),desc:t("trait_scales"),type:"genus",origin:"reptilian",taxonomy:"combat",val:5,vars(r){switch(r||ie("scales")||1){case .1:return[1,0,0];case .25:return[1,0,1];case .5:return[1,1,1];case 1:return[2,1,1];case 2:return[2,2,1];case 3:return[2,2,2];case 4:return[3,2,2]}}},flier:{name:t("trait_flier_name"),desc:t("trait_flier"),type:"genus",origin:"avian",taxonomy:"resource",val:3,vars(r){switch(r||ie("flier")||1){case .1:return[5,0];case .25:return[10,0];case .5:return[15,0];case 1:return[25,1];case 2:return[40,1];case 3:return[50,2];case 4:return[60,2]}}},hollow_bones:{name:t("trait_hollow_bones_name"),desc:t("trait_hollow_bones"),type:"genus",origin:"avian",taxonomy:"resource",val:2,vars(r){switch(r||ie("hollow_bones")||1){case .1:return[1];case .25:return[2];case .5:return[3];case 1:return[5];case 2:return[8];case 3:return[10];case 4:return[12]}}},sky_lover:{name:t("trait_sky_lover_name"),desc:t("trait_sky_lover"),type:"genus",origin:"avian",taxonomy:"utility",val:-2,vars(r){switch(r||ie("sky_lover")||1){case .1:return[50];case .25:return[40];case .5:return[30];case 1:return[20];case 2:return[15];case 3:return[10];case 4:return[8]}}},rigid:{name:t("trait_rigid_name"),desc:t("trait_rigid"),type:"genus",origin:"avian",taxonomy:"resource",val:-2,vars(r){switch(r||ie("rigid")||1){case .1:return[4];case .25:return[3];case .5:return[2];case 1:return[1];case 2:return[.5];case 3:return[.4];case 4:return[.3]}}},high_pop:{name:t("trait_high_pop_name"),desc:t("trait_high_pop"),type:"genus",origin:"insectoid",taxonomy:"utility",val:3,vars(r){switch(r||ie("high_pop")||1){case .1:return[2,50,1.2];case .25:return[2,50,1.5];case .5:return[3,34,2.5];case 1:return[4,26,3.5];case 2:return[5,21.2,4.5];case 3:return[6,18,5.5];case 4:return[7,15.8,6.5]}}},fast_growth:{name:t("trait_fast_growth_name"),desc:t("trait_fast_growth"),type:"genus",origin:"insectoid",taxonomy:"utility",val:2,vars(r){switch(r||ie("fast_growth")||1){case .1:return[1.2,1];case .25:return[1.5,1];case .5:return[2,1];case 1:return[2,2];case 2:return[2.5,3];case 3:return[3,3];case 4:return[3.5,3]}}},high_metabolism:{name:t("trait_high_metabolism_name"),desc:t("trait_high_metabolism"),type:"genus",origin:"insectoid",taxonomy:"utility",val:-1,vars(r){switch(r||ie("high_metabolism")||1){case .1:return[12];case .25:return[10];case .5:return[8];case 1:return[5];case 2:return[3];case 3:return[2];case 4:return[1]}}},photosynth:{name:t("trait_photosynth_name"),desc:t("trait_photosynth"),type:"genus",origin:"plant",taxonomy:"utility",val:3,vars(r){switch(r||ie("photosynth")||1){case .1:return[5,4,3];case .25:return[10,5,4];case .5:return[20,10,5];case 1:return[40,20,10];case 2:return[50,30,15];case 3:return[60,35,20];case 4:return[70,40,25]}}},sappy:{name:t("trait_sappy_name"),desc:t("trait_sappy",[t("resource_Amber_name")]),type:"genus",origin:"plant",taxonomy:"resource",val:4,vars(r){switch(r||ie("sappy")||1){case .1:return[.3];case .25:return[.4];case .5:return[.5];case 1:return[.6];case 2:return[.65];case 3:return[.7];case 4:return[.75]}}},asymmetrical:{name:t("trait_asymmetrical_name"),desc:t("trait_asymmetrical"),type:"genus",origin:"plant",taxonomy:"utility",val:-3,vars(r){switch(r||ie("asymmetrical")||1){case .1:return[35];case .25:return[30];case .5:return[25];case 1:return[20];case 2:return[15];case 3:return[10];case 4:return[5]}}},detritivore:{name:t("trait_detritivore_name"),desc:t("trait_detritivore"),type:"genus",origin:"fungi",taxonomy:"utility",val:2,vars(r){switch(r||ie("detritivore")||1){case .1:return[60];case .25:return[65];case .5:return[72];case 1:return[80];case 2:return[85];case 3:return[90];case 4:return[95]}}},spores:{name:t("trait_spores_name"),desc:t("trait_spores"),type:"genus",origin:"fungi",taxonomy:"utility",val:2,vars(r){switch(r||ie("spores")||1){case .1:return[1,1.2,1];case .25:return[1,1.5,1];case .5:return[2,1.5,1];case 1:return[2,2,1];case 2:return[2,2.5,2];case 3:return[2,3,2];case 4:return[3,3.5,2]}}},spongy:{name:t("trait_spongy_name"),desc:t("trait_spongy"),type:"genus",origin:"fungi",taxonomy:"utility",val:-2},submerged:{name:t("trait_submerged_name"),desc:t("trait_submerged"),type:"genus",origin:"aquatic",taxonomy:"utility",val:3},low_light:{name:t("trait_low_light_name"),desc:t("trait_low_light"),type:"genus",origin:"aquatic",taxonomy:"resource",val:-2,vars(r){switch(r||ie("low_light")||1){case .1:return[16];case .25:return[14];case .5:return[12];case 1:return[10];case 2:return[8];case 3:return[6];case 4:return[4]}}},elusive:{name:t("trait_elusive_name"),desc:t("trait_elusive"),type:"genus",origin:"fey",taxonomy:"utility",val:7,vars(r){switch(r||ie("elusive")||1){case .1:return[5];case .25:return[10];case .5:return[15];case 1:return[20];case 2:return[25];case 3:return[30];case 4:return[35]}}},iron_allergy:{name:t("trait_iron_allergy_name"),desc:t("trait_iron_allergy"),type:"genus",origin:"fey",taxonomy:"resource",val:-4,vars(r){switch(r||ie("iron_allergy")||1){case .1:return[45];case .25:return[40];case .5:return[35];case 1:return[25];case 2:return[18];case 3:return[15];case 4:return[12]}}},smoldering:{name:t("trait_smoldering_name"),desc:t("trait_smoldering"),type:"genus",origin:"heat",taxonomy:"production",val:7,vars(r){switch(r||ie("smoldering")||1){case .1:return[2,.1,.06];case .25:return[3,.14,.08];case .5:return[4,.18,.1];case 1:return[5,.35,.2];case 2:return[10,.38,.22];case 3:return[12,.4,.24];case 4:return[14,.42,.25]}}},cold_intolerance:{name:t("trait_cold_intolerance_name"),desc:t("trait_cold_intolerance"),type:"genus",origin:"heat",taxonomy:"production",val:-4,vars(r){switch(r||ie("cold_intolerance")||1){case .1:return[.4];case .25:return[.35];case .5:return[.3];case 1:return[.25];case 2:return[.2];case 3:return[.18];case 4:return[.16]}}},chilled:{name:t("trait_chilled_name"),desc:t("trait_chilled"),type:"genus",origin:"polar",taxonomy:"production",val:7,vars(r){switch(r||ie("chilled")||1){case .1:return[1,.12,.06,3,2,22];case .25:return[1,.14,.08,5,2,20];case .5:return[2,.18,.1,10,5,18];case 1:return[5,.35,.2,20,10,15];case 2:return[10,.38,.22,25,12,10];case 3:return[12,.4,.24,30,14,8];case 4:return[14,.42,.25,35,15,6]}}},heat_intolerance:{name:t("trait_heat_intolerance_name"),desc:t("trait_heat_intolerance"),type:"genus",origin:"polar",taxonomy:"production",val:-4,vars(r){switch(r||ie("heat_intolerance")||1){case .1:return[.4];case .25:return[.35];case .5:return[.3];case 1:return[.25];case 2:return[.2];case 3:return[.18];case 4:return[.16]}}},scavenger:{name:t("trait_scavenger_name"),desc:t("trait_scavenger"),type:"genus",origin:"sand",taxonomy:"production",val:3,vars(r){switch(r||ie("scavenger")||1){case .1:return[.05,18];case .25:return[.08,20];case .5:return[.1,22];case 1:return[.12,25];case 2:return[.14,30];case 3:return[.16,32];case 4:return[.18,34]}}},nomadic:{name:t("trait_nomadic_name"),desc:t("trait_nomadic"),type:"genus",origin:"sand",taxonomy:"utility",val:-5},immoral:{name:t("trait_immoral_name"),desc:t("trait_immoral"),type:"genus",origin:"demonic",taxonomy:"utility",val:4,vars(r){switch(r||ie("immoral")||1){case .1:return[-40];case .25:return[-30];case .5:return[-20];case 1:return[0];case 2:return[20];case 3:return[30];case 4:return[40]}}},evil:{name:t("trait_evil_name"),desc:t("trait_evil"),type:"genus",origin:"demonic",taxonomy:"utility",val:0},blissful:{name:t("trait_blissful_name"),desc:t("trait_blissful"),type:"genus",origin:"angelic",taxonomy:"utility",val:3,vars(r){switch(r||ie("blissful")||1){case .1:return[75];case .25:return[70];case .5:return[60];case 1:return[50];case 2:return[40];case 3:return[30];case 4:return[25]}}},pompous:{name:t("trait_pompous_name"),desc:t("trait_pompous"),type:"genus",origin:"angelic",taxonomy:"utility",val:-6,vars(r){switch(r||ie("pompous")||1){case .1:return[90];case .25:return[85];case .5:return[80];case 1:return[75];case 2:return[65];case 3:return[58];case 4:return[50]}}},holy:{name:t("trait_holy_name"),desc:t("trait_holy"),type:"genus",origin:"angelic",taxonomy:"combat",val:4,vars(r){switch(r||ie("holy")||1){case .1:return[20,5];case .25:return[25,10];case .5:return[30,15];case 1:return[50,25];case 2:return[60,35];case 3:return[65,40];case 4:return[70,45]}}},artifical:{name:t("trait_artifical_name"),desc:t("trait_artifical"),type:"genus",origin:"synthetic",taxonomy:"utility",val:5,vars(r){switch(r||ie("artifical")||1){case .1:return[3];case .25:return[5];case .5:return[10];case 1:return[20];case 2:return[25];case 3:return[30];case 4:return[35]}}},powered:{name:t("trait_powered_name"),desc:t("trait_powered"),type:"genus",origin:"synthetic",taxonomy:"utility",val:-6,vars(r){switch(r||ie("powered")||1){case .1:return[.4,4];case .25:return[.35,5];case .5:return[.3,8];case 1:return[.2,16];case 2:return[.1,20];case 3:return[.05,24];case 4:return[.05,28]}}},psychic:{name:t("trait_psychic_name"),desc:t("trait_psychic"),type:"genus",origin:"eldritch",taxonomy:"utility",val:10,vars(r){switch(r||ie("psychic")||1){case .1:return[.2,4,.01,15];case .25:return[.35,5,.01,20];case .5:return[.65,10,.025,30];case 1:return[1,15,.05,40];case 2:return[1.25,20,.075,50];case 3:return[1.5,25,.1,60];case 4:return[1.65,30,.12,65]}}},tormented:{name:t("trait_tormented_name"),desc:t("trait_tormented"),type:"genus",origin:"eldritch",taxonomy:"utility",val:-25,vars(r){switch(r||ie("tormented")||1){case .1:return[99];case .25:return[98];case .5:return[95];case 1:return[90];case 2:return[80];case 3:return[75];case 4:return[70]}}},darkness:{name:t("trait_darkness_name"),desc:t("trait_darkness"),type:"genus",origin:"eldritch",taxonomy:"utility",val:1,vars(r){switch(r||ie("darkness")||1){case .1:return[0];case .25:return[1];case .5:return[2];case 1:return[3];case 2:return[4];case 3:return[5];case 4:return[6]}}},unfathomable:{name:t("trait_unfathomable_name"),desc:t("trait_unfathomable"),type:"genus",origin:"eldritch",taxonomy:"utility",val:15,vars(r){switch(r||ie("unfathomable")||1){case .1:return[1,.4,.03];case .25:return[1,.5,.05];case .5:return[1,.65,.08];case 1:return[2,.8,.1];case 2:return[2,.9,.12];case 3:return[3,1,.13];case 4:return[3,1.1,.14]}}},creative:{name:t("trait_creative_name"),desc:t("trait_creative"),type:"major",origin:"human",taxonomy:"resource",val:8,vars(r){switch(r||ie("creative")||1){case .1:return[.001,3];case .25:return[.0015,5];case .5:return[.0025,10];case 1:return[.005,20];case 2:return[.006,22];case 3:return[.0065,24];case 4:return[.0068,26]}}},diverse:{name:t("trait_diverse_name"),desc:t("trait_diverse"),type:"major",origin:"human",taxonomy:"combat",val:-4,vars(r){switch(r||ie("diverse")||1){case .1:return[40];case .25:return[35];case .5:return[30];case 1:return[25];case 2:return[20];case 3:return[15];case 4:return[12]}}},studious:{name:t("trait_studious_name"),desc:t("trait_studious"),type:"major",origin:"elven",taxonomy:"utility",val:2,vars(r){switch(r||ie("studious")||1){case .1:return[.08,4];case .25:return[.1,6];case .5:return[.15,8];case 1:return[.25,10];case 2:return[.35,12];case 3:return[.4,14];case 4:return[.45,16]}}},arrogant:{name:t("trait_arrogant_name"),desc:t("trait_arrogant"),type:"major",origin:"elven",taxonomy:"resource",val:-2,vars(r){switch(r||ie("arrogant")||1){case .1:return[16];case .25:return[14];case .5:return[12];case 1:return[10];case 2:return[8];case 3:return[6];case 4:return[5]}}},brute:{name:t("trait_brute_name"),desc:t("trait_brute"),type:"major",origin:"orc",taxonomy:"combat",val:7,vars(r){switch(r||ie("brute")||1){case .1:return[15,40];case .25:return[20,50];case .5:return[25,60];case 1:return[50,100];case 2:return[60,120];case 3:return[65,140];case 4:return[70,150]}}},angry:{name:t("trait_angry_name"),desc:t("trait_angry"),type:"major",origin:"orc",taxonomy:"production",val:-1,vars(r){switch(r||ie("angry")||1){case .1:return[40];case .25:return[35];case .5:return[30];case 1:return[25];case 2:return[20];case 3:return[15];case 4:return[12]}}},lazy:{name:t("trait_lazy_name"),desc:t("trait_lazy"),type:"major",origin:"cath",taxonomy:"production",val:-4,vars(r){switch(r||ie("lazy")||1){case .1:return[16];case .25:return[14];case .5:return[12];case 1:return[10];case 2:return[8];case 3:return[6];case 4:return[5]}}},curious:{name:t("trait_curious_name"),desc:t("trait_curious"),type:"major",origin:"cath",taxonomy:"utility",val:4,vars(r){switch(r||ie("curious")||1){case .1:return[.02];case .25:return[.03];case .5:return[.05];case 1:return[.1];case 2:return[.12];case 3:return[.13];case 4:return[.14]}}},pack_mentality:{name:t("trait_pack_mentality_name"),desc:t("trait_pack_mentality"),type:"major",origin:"wolven",taxonomy:"utility",val:4,vars(r){switch(r||ie("pack_mentality")||1){case .1:return[.03,.014];case .25:return[.03,.016];case .5:return[.03,.018];case 1:return[.03,.02];case 2:return[.026,.022];case 3:return[.024,.023];case 4:return[.022,.024]}}},tracker:{name:t("trait_tracker_name"),desc:t("trait_tracker"),type:"major",origin:"wolven",taxonomy:"resource",val:2,vars(r){switch(r||ie("tracker")||1){case .1:return[5];case .25:return[10];case .5:return[15];case 1:return[20];case 2:return[25];case 3:return[30];case 4:return[35]}}},playful:{name:t("trait_playful_name"),desc:t("trait_playful"),type:"major",origin:"vulpine",taxonomy:"production",val:5,vars(r){switch(r||ie("playful")||1){case .1:return[.2];case .25:return[.3];case .5:return[.4];case 1:return[.5];case 2:return[.6];case 3:return[.7];case 4:return[.8]}}},freespirit:{name:t("trait_freespirit_name"),desc:t("trait_freespirit"),type:"major",origin:"vulpine",taxonomy:"production",val:-3,vars(r){switch(r||ie("freespirit")||1){case .1:return[70];case .25:return[65];case .5:return[60];case 1:return[50];case 2:return[35];case 3:return[25];case 4:return[20]}}},beast_of_burden:{name:t("trait_beast_of_burden_name"),desc:t("trait_beast_of_burden"),type:"major",origin:"centaur",taxonomy:"combat",val:3},sniper:{name:t("trait_sniper_name"),desc:t("trait_sniper"),type:"major",origin:"centaur",taxonomy:"combat",val:6,vars(r){switch(r||ie("sniper")||1){case .1:return[3];case .25:return[4];case .5:return[6];case 1:return[8];case 2:return[9];case 3:return[10];case 4:return[11]}}},hooved:{name:t("trait_hooved_name"),desc:t("trait_hooved"),type:"major",origin:"centaur",taxonomy:"utility",val:-4,vars(r){switch(r||ie("hooved")||1){case .1:return[140];case .25:return[130];case .5:return[120];case 1:return[100];case 2:return[80];case 3:return[70];case 4:return[60]}}},rage:{name:t("trait_rage_name"),desc:t("trait_rage"),type:"major",origin:"rhinotaur",taxonomy:"combat",val:4,vars(r){switch(r||ie("rage")||1){case .1:return[.2,10];case .25:return[.3,20];case .5:return[.5,30];case 1:return[1,50];case 2:return[1.25,60];case 3:return[1.4,65];case 4:return[1.5,70]}}},heavy:{name:t("trait_heavy_name"),desc:t("trait_heavy"),type:"major",origin:"rhinotaur",taxonomy:"utility",val:-4,vars(r){switch(r||ie("heavy")||1){case .1:return[20,12];case .25:return[18,10];case .5:return[15,8];case 1:return[10,5];case 2:return[8,4];case 3:return[6,3];case 4:return[5,2]}}},gnawer:{name:t("trait_gnawer_name"),desc:t("trait_gnawer"),type:"major",origin:"capybara",taxonomy:"resource",val:-1,vars(r){switch(r||ie("gnawer")||1){case .1:return[.6];case .25:return[.5];case .5:return[.4];case 1:return[.25];case 2:return[.2];case 3:return[.15];case 4:return[.12]}}},calm:{name:t("trait_calm_name"),desc:t("trait_calm"),type:"major",origin:"capybara",taxonomy:"production",val:6,vars(r){switch(r||ie("calm")||1){case .1:return[6];case .25:return[7];case .5:return[8];case 1:return[10];case 2:return[12];case 3:return[13];case 4:return[14]}}},pack_rat:{name:t("trait_pack_rat_name"),desc:t("trait_pack_rat"),type:"major",origin:"kobold",taxonomy:"resource",val:3,vars(r){switch(r||ie("pack_rat")||1){case .1:return[4,1];case .25:return[5,2];case .5:return[6,3];case 1:return[10,5];case 2:return[15,8];case 3:return[20,10];case 4:return[25,12]}}},paranoid:{name:t("trait_paranoid_name"),desc:t("trait_paranoid"),type:"major",origin:"kobold",taxonomy:"resource",val:-3,vars(r){switch(r||ie("paranoid")||1){case .1:return[16];case .25:return[14];case .5:return[12];case 1:return[10];case 2:return[8];case 3:return[6];case 4:return[5]}}},greedy:{name:t("trait_greedy_name"),desc:t("trait_greedy"),type:"major",origin:"goblin",taxonomy:"resource",val:-5,vars(r){switch(r||ie("greedy")||1){case .1:return[20];case .25:return[17.5];case .5:return[15];case 1:return[12.5];case 2:return[10];case 3:return[8];case 4:return[6]}}},merchant:{name:t("trait_merchant_name"),desc:t("trait_merchant"),type:"major",origin:"goblin",taxonomy:"resource",val:3,vars(r){switch(r||ie("merchant")||1){case .1:return[5,2];case .25:return[10,3];case .5:return[15,5];case 1:return[25,10];case 2:return[35,12];case 3:return[40,13];case 4:return[45,14]}}},smart:{name:t("trait_smart_name"),desc:t("trait_smart"),type:"major",origin:"gnome",taxonomy:"utility",val:6,vars(r){switch(r||ie("smart")||1){case .1:return[2];case .25:return[3];case .5:return[5];case 1:return[10];case 2:return[12];case 3:return[13];case 4:return[14]}}},puny:{name:t("trait_puny_name"),desc:t("trait_puny"),type:"major",origin:"gnome",taxonomy:"combat",val:-4,vars(r){switch(r||ie("puny")||1){case .1:return[20];case .25:return[18];case .5:return[15];case 1:return[10];case 2:return[6];case 3:return[4];case 4:return[3]}}},dumb:{name:t("trait_dumb_name"),desc:t("trait_dumb"),type:"major",origin:"ogre",taxonomy:"utility",val:-5,vars(r){switch(r||ie("dumb")||1){case .1:return[8];case .25:return[7];case .5:return[6];case 1:return[5];case 2:return[4];case 3:return[3];case 4:return[2]}}},tough:{name:t("trait_tough_name"),desc:t("trait_tough"),type:"major",origin:"ogre",taxonomy:"resource",val:4,vars(r){switch(r||ie("tough")||1){case .1:return[5];case .25:return[10];case .5:return[15];case 1:return[25];case 2:return[35];case 3:return[40];case 4:return[45]}}},nearsighted:{name:t("trait_nearsighted_name"),desc:t("trait_nearsighted"),type:"major",origin:"cyclops",taxonomy:"utility",val:-4,vars(r){switch(r||ie("nearsighted")||1){case .1:return[20];case .25:return[18];case .5:return[15];case 1:return[12];case 2:return[10];case 3:return[8];case 4:return[6]}}},intelligent:{name:t("trait_intelligent_name"),desc:t("trait_intelligent"),type:"major",origin:"cyclops",taxonomy:"production",val:7,vars(r){switch(r||ie("intelligent")||1){case .1:return[.05,.1];case .25:return[.08,.15];case .5:return[.1,.2];case 1:return[.125,.25];case 2:return[.14,.3];case 3:return[.15,.32];case 4:return[.16,.34]}}},regenerative:{name:t("trait_regenerative_name"),desc:t("trait_regenerative"),type:"major",origin:"troll",taxonomy:"combat",val:8,vars(r){switch(r||ie("regenerative")||1){case .1:return[1];case .25:return[2];case .5:return[3];case 1:return[4];case 2:return[5];case 3:return[6];case 4:return[7]}}},gluttony:{name:t("trait_gluttony_name"),desc:t("trait_gluttony"),type:"major",origin:"troll",taxonomy:"resource",val:-2,vars(r){switch(r||ie("gluttony")||1){case .1:return[25];case .25:return[20];case .5:return[15];case 1:return[10];case 2:return[8];case 3:return[6];case 4:return[5]}}},slow:{name:t("trait_slow_name"),desc:t("trait_slow"),type:"major",origin:"tortoisan",taxonomy:"utility",val:-6,vars(r){switch(r||ie("slow")||1){case .1:return[14];case .25:return[13];case .5:return[12];case 1:return[10];case 2:return[8];case 3:return[6];case 4:return[5]}}},armored:{name:t("trait_armored_name"),desc:t("trait_armored"),type:"major",origin:"tortoisan",taxonomy:"combat",val:4,vars(r){switch(r||ie("armored")||1){case .1:return[10,0];case .25:return[15,1];case .5:return[25,1];case 1:return[50,2];case 2:return[70,2];case 3:return[80,2];case 4:return[85,2]}}},optimistic:{name:t("trait_optimistic_name"),desc:t("trait_optimistic"),type:"major",origin:"gecko",taxonomy:"production",val:3,vars(r){switch(r||ie("optimistic")||1){case .1:return[3,4];case .25:return[4,6];case .5:return[5,8];case 1:return[10,10];case 2:return[15,13];case 3:return[18,15];case 4:return[20,16]}}},chameleon:{name:t("trait_chameleon_name"),desc:t("trait_chameleon"),type:"major",origin:"gecko",taxonomy:"combat",val:6,vars(r){switch(r||ie("chameleon")||1){case .1:return[3,5];case .25:return[5,10];case .5:return[10,15];case 1:return[20,20];case 2:return[25,25];case 3:return[30,30];case 4:return[35,35]}}},slow_digestion:{name:t("trait_slow_digestion_name"),desc:t("trait_slow_digestion"),type:"major",origin:"slitheryn",taxonomy:"production",val:1,vars(r){switch(r||ie("slow_digestion")||1){case .1:return[.2];case .25:return[.3];case .5:return[.5];case 1:return[.75];case 2:return[1];case 3:return[1.25];case 4:return[1.4]}}},astrologer:{name:t("trait_astrologer_name"),desc:t("trait_astrologer"),type:"major",origin:"slitheryn",taxonomy:"utility",val:3,vars(r){switch(r||ie("astrologer")||1){case .1:return[10];case .25:return[20];case .5:return[30];case 1:return[40];case 2:return[50];case 3:return[60];case 4:return[70]}}},hard_of_hearing:{name:t("trait_hard_of_hearing_name"),desc:t("trait_hard_of_hearing"),type:"major",origin:"slitheryn",taxonomy:"utility",val:-3,vars(r){switch(r||ie("hard_of_hearing")||1){case .1:return[8];case .25:return[7];case .5:return[6];case 1:return[5];case 2:return[4];case 3:return[3];case 4:return[2]}}},resourceful:{name:t("trait_resourceful_name"),desc:t("trait_resourceful"),type:"major",origin:"arraak",taxonomy:"resource",val:4,vars(r){switch(r||ie("resourceful")||1){case .1:return[4];case .25:return[6];case .5:return[8];case 1:return[12];case 2:return[16];case 3:return[18];case 4:return[20]}}},selenophobia:{name:t("trait_selenophobia_name"),desc:t("trait_selenophobia"),type:"major",origin:"arraak",taxonomy:"production",val:-6,vars(r){switch(r||ie("selenophobia")||1){case .1:return[1];case .25:return[2];case .5:return[3];case 1:return[4];case 2:return[5];case 3:return[6];case 4:return[7]}}},leathery:{name:t("trait_leathery_name"),desc:t("trait_leathery"),type:"major",origin:"pterodacti",taxonomy:"production",val:2,vars(r){switch(r||ie("leathery")||1){case .1:return[5];case .25:return[4];case .5:return[3];case 1:return[2];case 2:return[1];case 3:return[0];case 4:return[-1]}}},pessimistic:{name:t("trait_pessimistic_name"),desc:t("trait_pessimistic"),type:"major",origin:"pterodacti",taxonomy:"production",val:-1,vars(r){switch(r||ie("pessimistic")||1){case .1:return[5];case .25:return[4];case .5:return[3];case 1:return[2];case 2:return[1];case 3:return[1];case 4:return[0]}}},hoarder:{name:t("trait_hoarder_name"),desc:t("trait_hoarder"),type:"major",origin:"dracnid",taxonomy:"resource",val:4,vars(r){switch(r||ie("hoarder")||1){case .1:return[3];case .25:return[5];case .5:return[10];case 1:return[20];case 2:return[25];case 3:return[30];case 4:return[35]}}},solitary:{name:t("trait_solitary_name"),desc:t("trait_solitary"),type:"major",origin:"dracnid",taxonomy:"utility",val:-1,vars(r){switch(r||ie("solitary")||1){case .1:return[.01,.03];case .25:return[.01,.025];case .5:return[.01,.02];case 1:return[.02,.02];case 2:return[.025,.02];case 3:return[.025,.015];case 4:return[.028,.012]}}},kindling_kindred:{name:t("trait_kindling_kindred_name"),desc:t("trait_kindling_kindred"),type:"major",origin:"entish",taxonomy:"resource",val:8,vars(r){switch(r||ie("kindling_kindred")||1){case .1:return[12];case .25:return[10];case .5:return[8];case 1:return[5];case 2:return[4];case 3:return[3];case 4:return[2]}}},iron_wood:{name:t("trait_iron_wood_name"),desc:t("trait_iron_wood"),type:"major",origin:"entish",taxonomy:"resource",val:4,vars(r){switch(r||ie("iron_wood")||1){case .1:return[3];case .25:return[6];case .5:return[9];case 1:return[12];case 2:return[15];case 3:return[18];case 4:return[21]}}},pyrophobia:{name:t("trait_pyrophobia_name"),desc:t("trait_pyrophobia"),type:"major",origin:"entish",taxonomy:"resource",val:-4,vars(r){switch(r||ie("pyrophobia")||1){case .1:return[16];case .25:return[14];case .5:return[12];case 1:return[10];case 2:return[8];case 3:return[6];case 4:return[5]}}},catnip:{name:t("trait_catnip_name"),desc:t("trait_catnip"),type:"major",origin:"entish",taxonomy:"production",val:1,vars(r){switch(r||ie("catnip")||1){case .1:return[1,2];case .25:return[1,2];case .5:return[1,2];case 1:return[1,2];case 2:return[1,2];case 3:return[2,2];case 4:return[2,4]}}},hyper:{name:t("trait_hyper_name"),desc:t("trait_hyper"),type:"major",origin:"cacti",taxonomy:"utility",val:4,vars(r){switch(r||ie("hyper")||1){case .1:return[1];case .25:return[2];case .5:return[3];case 1:return[5];case 2:return[6];case 3:return[7];case 4:return[8]}}},skittish:{name:t("trait_skittish_name"),desc:t("trait_skittish"),type:"major",origin:"cacti",taxonomy:"production",val:-4,vars(r){switch(r||ie("skittish")||1){case .1:return[20];case .25:return[18];case .5:return[15];case 1:return[12];case 2:return[8];case 3:return[6];case 4:return[4]}}},fragrant:{name:t("trait_fragrant_name"),desc:t("trait_fragrant"),type:"major",origin:"pinguicula",taxonomy:"resource",val:-3,vars(r){switch(r||ie("fragrant")||1){case .1:return[40];case .25:return[35];case .5:return[30];case 1:return[20];case 2:return[15];case 3:return[12];case 4:return[10]}}},sticky:{name:t("trait_sticky_name"),desc:t("trait_sticky"),type:"major",origin:"pinguicula",taxonomy:"combat",val:3,vars(r){switch(r||ie("sticky")||1){case .1:return[3,3];case .25:return[5,5];case .5:return[10,8];case 1:return[20,15];case 2:return[25,18];case 3:return[30,20];case 4:return[35,22]}}},anise:{name:t("trait_anise_name"),desc:t("trait_anise"),type:"major",origin:"pinguicula",taxonomy:"production",val:1,vars(r){switch(r||ie("anise")||1){case .1:return[1,1];case .25:return[1,1];case .5:return[1,1];case 1:return[1,1];case 2:return[1,1];case 3:return[2,1];case 4:return[2,3]}}},infectious:{name:t("trait_infectious_name"),desc:t("trait_infectious"),type:"major",origin:"sporgar",taxonomy:"combat",val:4,vars(r){switch(r||ie("infectious")||1){case .1:return[1,2,3,6,15];case .25:return[1,2,3,7,18];case .5:return[1,2,4,8,20];case 1:return[2,3,5,10,25];case 2:return[2,4,6,12,30];case 3:return[3,4,7,13,32];case 4:return[3,5,8,14,34]}}},parasite:{name:t("trait_parasite_name"),desc:t("trait_parasite"),type:"major",origin:"sporgar",taxonomy:"combat",val:-4,vars(r){switch(r||ie("parasite")||1){case .1:return[0,12];case .25:return[1,10];case .5:return[1,8];case 1:return[2,6];case 2:return[2,4];case 3:return[3,2];case 4:return[3,0]}}},toxic:{name:t("trait_toxic_name"),desc:t("trait_toxic"),type:"major",origin:"shroomi",taxonomy:"resource",val:5,vars(r){switch(r||ie("toxic")||1){case .1:return[3,2,8];case .25:return[5,3,10];case .5:return[10,5,15];case 1:return[20,8,30];case 2:return[25,10,40];case 3:return[30,12,45];case 4:return[35,14,50]}}},nyctophilia:{name:t("trait_nyctophilia_name"),desc:t("trait_nyctophilia"),type:"major",origin:"shroomi",taxonomy:"production",val:-3,vars(r){switch(r||ie("nyctophilia")||1){case .1:return[12,6];case .25:return[10,6];case .5:return[8,5];case 1:return[5,2];case 2:return[3,1];case 3:return[2,1];case 4:return[1,1]}}},infiltrator:{name:t("trait_infiltrator_name"),desc:t("trait_infiltrator"),type:"major",origin:"moldling",taxonomy:"utility",val:4,vars(r){switch(r||ie("infiltrator")||1){case .1:return[120];case .25:return[110];case .5:return[100];case 1:return[90];case 2:return[85];case 3:return[80];case 4:return[75]}}},hibernator:{name:t("trait_hibernator_name"),desc:t("trait_hibernator"),type:"major",origin:"moldling",taxonomy:"production",val:-3,vars(r){switch(r||ie("hibernator")||1){case .1:return[10,10];case .25:return[15,9];case .5:return[20,8];case 1:return[25,8];case 2:return[30,6];case 3:return[35,5];case 4:return[40,4]}}},cannibalize:{name:t("trait_cannibalize_name"),desc:t("trait_cannibalize"),type:"major",origin:"mantis",taxonomy:"utility",val:5,vars(r){switch(r||ie("cannibalize")||1){case .1:return[6];case .25:return[8];case .5:return[10];case 1:return[15];case 2:return[20];case 3:return[22];case 4:return[24]}}},frail:{name:t("trait_frail_name"),desc:t("trait_frail"),type:"major",origin:"mantis",taxonomy:"combat",val:-2,vars(r){switch(r||ie("frail")||1){case .1:return[3,4];case .25:return[3,3];case .5:return[2,3];case 1:return[2,2];case 2:return[1,2];case 3:return[1,1];case 4:return[0,1]}}},malnutrition:{name:t("trait_malnutrition_name"),desc:t("trait_malnutrition"),type:"major",origin:"mantis",taxonomy:"production",val:1,vars(r){switch(r||ie("malnutrition")||1){case .1:return[8];case .25:return[10];case .5:return[12];case 1:return[25];case 2:return[40];case 3:return[50];case 4:return[60]}}},claws:{name:t("trait_claws_name"),desc:t("trait_claws"),type:"major",origin:"scorpid",taxonomy:"combat",val:5,vars(r){switch(r||ie("claws")||1){case .1:return[5];case .25:return[8];case .5:return[12];case 1:return[25];case 2:return[32];case 3:return[35];case 4:return[38]}}},atrophy:{name:t("trait_atrophy_name"),desc:t("trait_atrophy"),type:"major",origin:"scorpid",taxonomy:"production",val:-1,vars(r){switch(r||ie("atrophy")||1){case .1:return[.4];case .25:return[.35];case .5:return[.25];case 1:return[.15];case 2:return[.1];case 3:return[.08];case 4:return[.06]}}},hivemind:{name:t("trait_hivemind_name"),desc:t("trait_hivemind"),type:"major",origin:"antid",taxonomy:"production",val:9,vars(r){switch(r||ie("hivemind")||1){case .1:return[13];case .25:return[12];case .5:return[11];case 1:return[10];case 2:return[8];case 3:return[7];case 4:return[6]}}},tunneler:{name:t("trait_tunneler_name"),desc:t("trait_tunneler"),type:"major",origin:"antid",taxonomy:"utility",val:2,vars(r){switch(r||ie("tunneler")||1){case .1:return[.001];case .25:return[.002];case .5:return[.005];case 1:return[.01];case 2:return[.015];case 3:return[.018];case 4:return[.02]}}},blood_thirst:{name:t("trait_blood_thirst_name"),desc:t("trait_blood_thirst"),type:"major",origin:"sharkin",taxonomy:"combat",val:5,vars(r){switch(r||ie("blood_thirst")||1){case .1:return[15e4];case .25:return[25e4];case .5:return[5e5];case 1:return[1e6];case 2:return[2e6];case 3:return[4e6];case 4:return[5e6]}}},apex_predator:{name:t("trait_apex_predator_name"),desc:t("trait_apex_predator"),type:"major",origin:"sharkin",taxonomy:"combat",val:6,vars(r){switch(r||ie("apex_predator")||1){case .1:return[10,15];case .25:return[15,20];case .5:return[20,30];case 1:return[30,50];case 2:return[40,60];case 3:return[45,65];case 4:return[50,70]}}},invertebrate:{name:t("trait_invertebrate_name"),desc:t("trait_invertebrate"),type:"major",origin:"octigoran",taxonomy:"combat",val:-2,vars(r){switch(r||ie("invertebrate")||1){case .1:return[30];case .25:return[25];case .5:return[20];case 1:return[10];case 2:return[8];case 3:return[5];case 4:return[4]}}},suction_grip:{name:t("trait_suction_grip_name"),desc:t("trait_suction_grip"),type:"major",origin:"octigoran",taxonomy:"production",val:4,vars(r){switch(r||ie("suction_grip")||1){case .1:return[3];case .25:return[5];case .5:return[6];case 1:return[8];case 2:return[12];case 3:return[14];case 4:return[15]}}},befuddle:{name:t("trait_befuddle_name"),desc:t("trait_befuddle"),type:"major",origin:"dryad",taxonomy:"utility",val:4,vars(r){switch(r||ie("befuddle")||1){case .1:return[10];case .25:return[20];case .5:return[30];case 1:return[50];case 2:return[75];case 3:return[85];case 4:return[90]}}},environmentalist:{name:t("trait_environmentalist_name"),desc:t("trait_environmentalist"),type:"major",origin:"dryad",taxonomy:"utility",val:-5,vars(r){switch(r||ie("environmentalist")||1){case .1:return[-2.5,1];case .25:return[-2,1.15];case .5:return[-1.5,1.25];case 1:return[-1,1.35];case 2:return[-.5,1.4];case 3:return[-.25,1.45];case 4:return[0,1.5]}}},unorganized:{name:t("trait_unorganized_name"),desc:t("trait_unorganized"),type:"major",origin:"satyr",taxonomy:"utility",val:-2,vars(r){switch(r||ie("unorganized")||1){case .1:return[100];case .25:return[90];case .5:return[80];case 1:return[50];case 2:return[40];case 3:return[30];case 4:return[25]}}},musical:{name:t("trait_musical_name"),desc:t("trait_musical"),type:"major",origin:"satyr",taxonomy:"production",val:5,vars(r){switch(r||ie("musical")||1){case .1:return[.15];case .25:return[.25];case .5:return[.5];case 1:return[1];case 2:return[1.1];case 3:return[1.2];case 4:return[1.25]}}},revive:{name:t("trait_revive_name"),desc:t("trait_revive"),type:"major",origin:"phoenix",taxonomy:"combat",val:4,vars(r){switch(r||ie("revive")||1){case .1:return[8,6,2,9,7,3.5,4];case .25:return[7,5,2,8,6,3,4];case .5:return[6,4,2,7,5,2.5,4];case 1:return[5,3,1.5,6,4,2,3];case 2:return[4,2,1,5,3,1.5,2];case 3:return[3,1.5,1,4,2.5,1,2];case 4:return[2.5,1.2,1,3.5,2,1,2]}}},slow_regen:{name:t("trait_slow_regen_name"),desc:t("trait_slow_regen"),type:"major",origin:"phoenix",taxonomy:"combat",val:-4,vars(r){switch(r||ie("slow_regen")||1){case .1:return[45];case .25:return[40];case .5:return[35];case 1:return[25];case 2:return[20];case 3:return[15];case 4:return[12]}}},forge:{name:t("trait_forge_name"),desc:t("trait_forge"),type:"major",origin:"salamander",taxonomy:"utility",val:4,vars(r){switch(r||ie("forge")||1){case .1:return[.25];case .25:return[.5];case .5:return[1];case 1:return[2];case 2:return[2.5];case 3:return[3];case 4:return[3.5]}}},autoignition:{name:t("trait_autoignition_name"),desc:t("trait_autoignition"),type:"major",origin:"salamander",taxonomy:"utility",val:-4,vars(r){switch(r||ie("autoignition")||1){case .1:return[5];case .25:return[4];case .5:return[3];case 1:return[2];case 2:return[1.5];case 3:return[1];case 4:return[.5]}}},blurry:{name:t("trait_blurry_name"),desc:t("trait_blurry"),type:"major",origin:"yeti",taxonomy:"utility",val:5,vars(r){switch(r||ie("blurry")||1){case .1:return[5];case .25:return[10];case .5:return[15];case 1:return[25];case 2:return[35];case 3:return[40];case 4:return[45]}}},snowy:{name:t("trait_snowy_name"),desc:t("trait_snowy"),type:"major",origin:"yeti",taxonomy:"production",val:-3,vars(r){switch(r||ie("snowy")||1){case .1:return[5,12];case .25:return[4,10];case .5:return[3,8];case 1:return[2,5];case 2:return[2,4];case 3:return[1,3];case 4:return[1,2]}}},ravenous:{name:t("trait_ravenous_name"),desc:t("trait_ravenous"),type:"major",origin:"wendigo",taxonomy:"resource",val:-5,vars(r){switch(r||ie("ravenous")||1){case .1:return[35,2];case .25:return[30,2];case .5:return[25,2];case 1:return[20,3];case 2:return[15,4];case 3:return[10,4];case 4:return[8,4]}}},ghostly:{name:t("trait_ghostly_name"),desc:t("trait_ghostly"),type:"major",origin:"wendigo",taxonomy:"utility",val:5,vars(r){switch(r||ie("ghostly")||1){case .1:return[15,1.1,2];case .25:return[20,1.2,5];case .5:return[25,1.25,10];case 1:return[50,1.5,15];case 2:return[60,1.6,20];case 3:return[65,1.7,22];case 4:return[70,1.8,23]}}},lawless:{name:t("trait_lawless_name"),desc:t("trait_lawless"),type:"major",origin:"tuskin",taxonomy:"utility",val:3,vars(r){switch(r||ie("lawless")||1){case .1:return[20];case .25:return[30];case .5:return[50];case 1:return[90];case 2:return[95];case 3:return[98];case 4:return[99]}}},mistrustful:{name:t("trait_mistrustful_name"),desc:t("trait_mistrustful"),type:"major",origin:"tuskin",taxonomy:"utility",val:-1,vars(r){switch(r||ie("mistrustful")||1){case .1:return[5];case .25:return[4];case .5:return[3];case 1:return[2];case 2:return[2];case 3:return[1];case 4:return[1]}}},humpback:{name:t("trait_humpback_name"),desc:t("trait_humpback"),type:"major",origin:"kamel",taxonomy:"resource",val:4,vars(r){switch(r||ie("humpback")||1){case .1:return[.15,5];case .25:return[.2,8];case .5:return[.25,10];case 1:return[.5,20];case 2:return[.75,25];case 3:return[.8,30];case 4:return[.85,35]}}},thalassophobia:{name:t("trait_thalassophobia_name"),desc:t("trait_thalassophobia"),type:"major",origin:"kamel",taxonomy:"utility",val:-4},unfavored:{name:t("trait_unfavored_name"),desc:t("trait_unfavored"),type:"major",origin:"kamel",taxonomy:"utility",val:-4,vars(r){switch(r||ie("unfavored")||1){case .1:return[175];case .25:return[150];case .5:return[125];case 1:return[100];case 2:return[75];case 3:return[50];case 4:return[25]}}},fiery:{name:t("trait_fiery_name"),desc:t("trait_fiery"),type:"major",origin:"balorg",taxonomy:"combat",val:10,vars(r){switch(r||ie("fiery")||1){case .1:return[20,12];case .25:return[30,15];case .5:return[40,18];case 1:return[65,25];case 2:return[70,35];case 3:return[72,38];case 4:return[74,40]}}},terrifying:{name:t("trait_terrifying_name"),desc:t("trait_terrifying"),type:"major",origin:"balorg",taxonomy:"resource",val:6,vars(r){switch(r||ie("terrifying")||1){case .1:return[6,15];case .25:return[8,20];case .5:return[10,25];case 1:return[12,32];case 2:return[13,34];case 3:return[14,36];case 4:return[15,38]}}},slaver:{name:t("trait_slaver_name"),desc:t("trait_slaver"),type:"major",origin:"balorg",taxonomy:"production",val:12,vars(r){switch(r||ie("slaver")||1){case .1:return[.05];case .25:return[.1];case .5:return[.14];case 1:return[.28];case 2:return[.3];case 3:return[.32];case 4:return[.33]}}},compact:{name:t("trait_compact_name"),desc:t("trait_compact"),type:"major",origin:"imp",taxonomy:"utility",val:10,vars(r){switch(r||ie("compact")||1){case .1:return[.003,.002];case .25:return[.005,.003];case .5:return[.01,.005];case 1:return[.015,.0075];case 2:return[.018,.0085];case 3:return[.02,.009];case 4:return[.021,.0092]}}},conniving:{name:t("trait_conniving_name"),desc:t("trait_conniving"),type:"major",origin:"imp",taxonomy:"resource",val:4,vars(r){switch(r||ie("conniving")||1){case .1:return[1,6];case .25:return[2,8];case .5:return[3,10];case 1:return[5,15];case 2:return[8,20];case 3:return[10,24];case 4:return[12,28]}}},pathetic:{name:t("trait_pathetic_name"),desc:t("trait_pathetic"),type:"major",origin:"imp",taxonomy:"combat",val:-5,vars(r){switch(r||ie("pathetic")||1){case .1:return[40];case .25:return[35];case .5:return[30];case 1:return[25];case 2:return[20];case 3:return[15];case 4:return[12]}}},spiritual:{name:t("trait_spiritual_name"),desc:t("trait_spiritual"),type:"major",origin:"seraph",taxonomy:"production",val:4,vars(r){switch(r||ie("spiritual")||1){case .1:return[6];case .25:return[8];case .5:return[10];case 1:return[13];case 2:return[15];case 3:return[18];case 4:return[20]}}},truthful:{name:t("trait_truthful_name"),desc:t("trait_truthful"),type:"major",origin:"seraph",taxonomy:"resource",val:-7,vars(r){switch(r||ie("truthful")||1){case .1:return[85];case .25:return[75];case .5:return[65];case 1:return[50];case 2:return[30];case 3:return[20];case 4:return[15]}}},unified:{name:t("trait_unified_name"),desc:t("trait_unified"),type:"major",origin:"seraph",taxonomy:"production",val:4,vars(r){switch(r||ie("unified")||1){case .1:return[0];case .25:return[1];case .5:return[2];case 1:return[3];case 2:return[5];case 3:return[7];case 4:return[8]}}},rainbow:{name:t("trait_rainbow_name"),desc:t("trait_rainbow"),type:"major",origin:"unicorn",taxonomy:"production",val:3,vars(r){switch(r||ie("rainbow")||1){case .1:return[10];case .25:return[20];case .5:return[30];case 1:return[50];case 2:return[80];case 3:return[100];case 4:return[120]}}},gloomy:{name:t("trait_gloomy_name"),desc:t("trait_gloomy"),type:"major",origin:"unicorn",taxonomy:"production",val:3,vars(r){switch(r||ie("gloomy")||1){case .1:return[3];case .25:return[5];case .5:return[8];case 1:return[10];case 2:return[12];case 3:return[13];case 4:return[14]}}},magnificent:{name:t("trait_magnificent_name"),desc:t("trait_magnificent"),type:"major",origin:"unicorn",taxonomy:"utility",val:6,vars(r){switch(r||ie("magnificent")||1){case .1:return[250,1,.35,.65,.5];case .25:return[300,1,.5,.75,1];case .5:return[350,2,.75,.8,1];case 1:return[400,3,1,1,1];case 2:return[450,3,1.5,1.5,1.5];case 3:return[500,3,2,2,2];case 4:return[520,3,2.5,2.5,2.5]}}},noble:{name:t("trait_noble_name"),desc:t("trait_noble"),type:"major",origin:"unicorn",taxonomy:"resource",val:-3,vars(r){switch(r||ie("noble")||1){case .1:return[18,20];case .25:return[15,20];case .5:return[12,20];case 1:return[10,20];case 2:return[10,24];case 3:return[10,28];case 4:return[10,30]}}},imitation:{name:t("trait_imitation_name"),desc:t("trait_imitation"),type:"major",origin:"synth",taxonomy:"utility",val:6,vars(r){switch(r||ie("imitation")||1){case .1:return[.5,.1];case .25:return[.5,.25];case .5:return[.5,.5];case 1:return[.5,1];case 2:return[.5,2];case 3:return[.5,3];case 4:return[.5,4]}}},emotionless:{name:t("trait_emotionless_name"),desc:t("trait_emotionless"),type:"major",origin:"synth",taxonomy:"production",val:-4,vars(r){switch(r||ie("emotionless")||1){case .1:return[55,8];case .25:return[50,10];case .5:return[45,10];case 1:return[35,13];case 2:return[25,15];case 3:return[20,15];case 4:return[18,16]}}},logical:{name:t("trait_logical_name"),desc:t("trait_logical"),type:"major",origin:"synth",taxonomy:"utility",val:6,vars(r){switch(r||ie("logical")||1){case .1:return[10,5];case .25:return[25,10];case .5:return[50,15];case 1:return[100,25];case 2:return[125,30];case 3:return[150,32];case 4:return[160,33]}}},shapeshifter:{name:t("trait_shapeshifter_name"),desc:t("trait_shapeshifter"),type:"major",origin:"nano",taxonomy:"utility",val:10,vars(r){switch(r||ie("shapeshifter")||1){case .1:return[.5,.1];case .25:return[.5,.25];case .5:return[.5,.5];case 1:return[.5,1];case 2:return[.5,2];case 3:return[.5,3];case 4:return[.5,4]}}},deconstructor:{name:t("trait_deconstructor_name"),desc:t("trait_deconstructor"),type:"major",origin:"nano",taxonomy:"utility",val:-4,vars(r){switch(r||ie("deconstructor")||1){case .1:return[25];case .25:return[40];case .5:return[60];case 1:return[100];case 2:return[125];case 3:return[140];case 4:return[150]}}},linked:{name:t("trait_linked_name"),desc:t("trait_linked"),type:"major",origin:"nano",taxonomy:"utility",val:4,vars(r){switch(r||ie("linked")||1){case .1:return[.02,40];case .25:return[.03,40];case .5:return[.05,40];case 1:return[.1,80];case 2:return[.12,100];case 3:return[.14,100];case 4:return[.15,100]}}},dark_dweller:{name:t("trait_dark_dweller_name"),desc:t("trait_dark_dweller"),type:"major",origin:"ghast",taxonomy:"resource",val:-3,vars(r){switch(r||ie("dark_dweller")||1){case .1:return[99];case .25:return[90];case .5:return[75];case 1:return[60];case 2:return[45];case 3:return[30];case 4:return[25]}}},swift:{name:t("trait_swift_name"),desc:t("trait_swift"),type:"major",origin:"ghast",taxonomy:"combat",val:10,vars(r){switch(r||ie("swift")||1){case .1:return[20,8];case .25:return[35,15];case .5:return[55,30];case 1:return[75,45];case 2:return[85,55];case 3:return[90,65];case 4:return[92,70]}}},anthropophagite:{name:t("trait_anthropophagite_name"),desc:t("trait_anthropophagite"),type:"major",origin:"ghast",taxonomy:"utility",val:-2,vars(r){switch(r||ie("anthropophagite")||1){case .1:return[.25];case .25:return[.4];case .5:return[.65];case 1:return[1];case 2:return[1.5];case 3:return[2];case 4:return[2.5]}}},living_tool:{name:t("trait_living_tool_name"),desc:t("trait_living_tool"),type:"major",origin:"shoggoth",taxonomy:"resource",val:12,vars(r){switch(r||ie("living_tool")||1){case .1:return[.5,2];case .25:return[.65,5];case .5:return[.8,12];case 1:return[1,25];case 2:return[1.1,35];case 3:return[1.2,42];case 4:return[1.25,45]}}},bloated:{name:t("trait_bloated_name"),desc:t("trait_bloated"),type:"major",origin:"shoggoth",taxonomy:"utility",val:-10,vars(r){switch(r||ie("bloated")||1){case .1:return[30];case .25:return[25];case .5:return[20];case 1:return[15];case 2:return[10];case 3:return[6];case 4:return[4]}}},artisan:{name:t("trait_artisan_name"),desc:t("trait_artisan"),type:"major",origin:"dwarf",taxonomy:"resource",val:9,vars(r){switch(r||ie("artisan")||1){case .1:return[15,8,.15];case .25:return[20,10,.2];case .5:return[35,15,.35];case 1:return[50,20,.5];case 2:return[60,25,.55];case 3:return[70,30,.6];case 4:return[80,35,.65]}}},stubborn:{name:t("trait_stubborn_name"),desc:t("trait_stubborn"),type:"major",origin:"dwarf",taxonomy:"utility",val:-5,vars(r){switch(r||ie("stubborn")||1){case .1:return[20];case .25:return[18];case .5:return[14];case 1:return[10];case 2:return[6];case 3:return[4];case 4:return[3]}}},rogue:{name:t("trait_rogue_name"),desc:t("trait_rogue"),type:"major",origin:"raccoon",taxonomy:"resource",val:6,vars(r){switch(r||ie("rogue")||1){case .1:return[4];case .25:return[6];case .5:return[8];case 1:return[10];case 2:return[12];case 3:return[14];case 4:return[16]}}},untrustworthy:{name:t("trait_untrustworthy_name"),desc:t("trait_untrustworthy"),type:"major",origin:"raccoon",taxonomy:"utility",val:-4,vars(r){switch(r||ie("untrustworthy")||1){case .1:return[8];case .25:return[7];case .5:return[6];case 1:return[5];case 2:return[4];case 3:return[3];case 4:return[2]}}},living_materials:{name:t("trait_living_materials_name"),desc:t("trait_living_materials"),type:"major",origin:"lichen",taxonomy:"resource",val:6,vars(r){switch(r||ie("living_materials")||1){case .1:return[.995];case .25:return[.99];case .5:return[.98];case 1:return[.97];case 2:return[.96];case 3:return[.95];case 4:return[.94]}}},unstable:{name:t("trait_unstable_name"),desc:t("trait_unstable"),type:"major",origin:"lichen",taxonomy:"utility",val:-5,vars(r){switch(r||ie("unstable")||1){case .1:return[7,10];case .25:return[6,10];case .5:return[5,10];case 1:return[4,10];case 2:return[3,10];case 3:return[2,10];case 4:return[1,10]}}},elemental:{name:t("trait_elemental_name"),desc:t("trait_elemental"),type:"major",origin:"wyvern",taxonomy:"utility",val:5,vars(r){let a="fire";switch(e.city.biome||"grassland"){case"savanna":case"forest":case"swamp":a="acid";break;case"grassland":case"desert":case"eden":a="electric";break;case"oceanic":case"tundra":case"taiga":a="frost";break;case"volcanic":case"ashland":case"hellscape":a="fire";break}switch(r||ie("elemental")||1){case .1:return[a,.08,.01,.02,.005,1];case .25:return[a,.12,.02,.03,.01,2];case .5:return[a,.16,.04,.06,.02,4];case 1:return[a,.2,.06,.09,.03,6];case 2:return[a,.23,.08,.12,.04,8];case 3:return[a,.26,.1,.15,.05,10];case 4:return[a,.28,.12,.18,.06,12]}}},chicken:{name:t("trait_chicken_name"),desc:t("trait_chicken"),type:"major",origin:"wyvern",taxonomy:"combat",val:-8,vars(r){switch(r||ie("chicken")||1){case .1:return[110,20];case .25:return[100,18];case .5:return[75,15];case 1:return[50,12];case 2:return[40,9];case 3:return[30,6];case 4:return[20,3]}}},tusk:{name:t("trait_tusk_name"),desc:t("trait_tusk"),type:"major",origin:"narwhal",taxonomy:"resource",val:6,vars(r){let a=0;switch(e.city.biome||"grassland"){case"oceanic":case"swamp":a=30;break;case"eden":case"forest":case"grassland":case"savanna":a=20;break;case"tundra":case"taiga":a=10;break;case"desert":case"volcanic":case"ashland":case"hellscape":a=0;break}switch(e.city.calendar.weather===0&&e.city.calendar.temp>0&&(a+=10),r||ie("tusk")||1){case .1:return[80,Math.round(a*.4)];case .25:return[100,Math.round(a*.5)];case .5:return[130,Math.round(a*.75)];case 1:return[160,Math.round(a*1)];case 2:return[190,Math.round(a*1.2)];case 3:return[220,Math.round(a*1.4)];case 4:return[250,Math.round(a*1.6)]}}},blubber:{name:t("trait_blubber_name"),desc:t("trait_blubber"),type:"major",origin:"narwhal",taxonomy:"resource",val:-3,vars(r){switch(r||ie("blubber")||1){case .1:return[2.5];case .25:return[2];case .5:return[1.5];case 1:return[1];case 2:return[.75];case 3:return[.5];case 4:return[.25]}}},ocular_power:{name:t("trait_ocular_power_name"),desc:t("trait_ocular_power"),type:"major",origin:"beholder",taxonomy:"utility",val:9,vars(r){switch(r||ie("ocular_power")||1){case .1:return[1,10];case .25:return[1,25];case .5:return[1,50];case 1:return[2,75];case 2:return[2,100];case 3:return[3,125];case 4:return[3,150]}}},floating:{name:t("trait_floating_name"),desc:t("trait_floating"),type:"major",origin:"beholder",taxonomy:"production",val:-3,vars(r){switch(r||ie("floating")||1){case .1:return[16];case .25:return[14];case .5:return[12];case 1:return[10];case 2:return[8];case 3:return[6];case 4:return[4]}}},wish:{name:t("trait_wish_name"),desc:t("trait_wish"),type:"major",origin:"djinn",taxonomy:"utility",val:13,vars(r){switch(r||ie("wish")||1){case .1:return[2520];case .25:return[2160];case .5:return[1800];case 1:return[1440];case 2:return[1080];case 3:return[720];case 4:return[540]}}},devious:{name:t("trait_devious_name"),desc:t("trait_devious"),type:"major",origin:"djinn",taxonomy:"resource",val:-4,vars(r){switch(r||ie("devious")||1){case .1:return[35];case .25:return[30];case .5:return[25];case 1:return[20];case 2:return[15];case 3:return[10];case 4:return[8]}}},grenadier:{name:t("trait_grenadier_name"),desc:t("trait_grenadier"),type:"major",origin:"bombardier",taxonomy:"combat",val:6,vars(r){switch(r||ie("grenadier")||1){case .1:return[100];case .25:return[110];case .5:return[125];case 1:return[150];case 2:return[175];case 3:return[200];case 4:return[225]}}},aggressive:{name:t("trait_aggressive_name"),desc:t("trait_aggressive"),type:"major",origin:"bombardier",taxonomy:"combat",val:-2,vars(r){switch(r||ie("aggressive")||1){case .1:return[35,14];case .25:return[30,12];case .5:return[25,10];case 1:return[20,8];case 2:return[15,6];case 3:return[10,4];case 4:return[5,2]}}},empowered:{name:t("trait_empowered_name"),desc:t("trait_empowered"),type:"major",origin:"nephilim",taxonomy:"utility",val:8,vars(r){switch(r||ie("empowered")||1){case .1:return[-1,2];case .25:return[-2,3];case .5:return[-3,4];case 1:return[-4,6];case 2:return[-6,9];case 3:return[-8,12];case 4:return[-99,99]}}},blasphemous:{name:t("trait_blasphemous_name"),desc:t("trait_blasphemous"),type:"major",origin:"nephilim",taxonomy:"production",val:-5,vars(r){switch(r||ie("blasphemous")||1){case .1:return[25];case .25:return[20];case .5:return[15];case 1:return[10];case 2:return[8];case 3:return[6];case 4:return[4]}}},ooze:{name:t("trait_ooze_name"),desc:t("trait_ooze"),type:"major",origin:"sludge",taxonomy:"production",val:-50,vars(r){switch(r||ie("ooze")||1){case .1:return[25,30,50];case .25:return[20,25,40];case .5:return[15,20,35];case 1:return[12,15,30];case 2:return[10,12,25];case 3:return[8,10,20];case 4:return[6,8,18]}}},soul_eater:{name:t("trait_soul_eater_name"),desc:t("trait_soul_eater"),type:"special",val:0},untapped:{name:t("trait_untapped_name"),desc:t("trait_untapped"),type:"special",val:0},emfield:{name:t("trait_emfield_name"),desc:t("trait_emfield"),type:"special",val:-20},tactical:{name:t("trait_tactical_name"),desc:t("trait_tactical"),type:"minor",vars(r){return[5]}},analytical:{name:t("trait_analytical_name"),desc:t("trait_analytical"),type:"minor",vars(r){return[1]}},promiscuous:{name:t("trait_promiscuous_name"),desc:t("trait_promiscuous"),type:"minor",vars(r){return[1,.02]}},resilient:{name:t("trait_resilient_name"),desc:t("trait_resilient"),type:"minor",vars(r){return[2]}},cunning:{name:t("trait_cunning_name"),desc:t("trait_cunning"),type:"minor",vars(r){return[5]}},hardy:{name:t("trait_hardy_name"),desc:t("trait_hardy"),type:"minor",vars(r){return[1]}},ambidextrous:{name:t("trait_ambidextrous_name"),desc:t("trait_ambidextrous"),type:"minor",vars(r){return[3,2]}},industrious:{name:t("trait_industrious_name"),desc:t("trait_industrious"),type:"minor",vars(r){return[2]}},content:{name:t("trait_content_name"),desc:t("trait_content"),type:"minor"},fibroblast:{name:t("trait_fibroblast_name"),desc:t("trait_fibroblast"),type:"minor",vars(r){return[2]}},metallurgist:{name:t("trait_metallurgist_name"),desc:t("trait_metallurgist"),type:"minor",vars(r){return[4]}},gambler:{name:t("trait_gambler_name"),desc:t("trait_gambler"),type:"minor",vars(r){return[4]}},persuasive:{name:t("trait_persuasive_name"),desc:t("trait_persuasive"),type:"minor",vars(r){return[1]}},fortify:{name:t("trait_fortify_name"),desc:t("trait_fortify"),type:"special"},mastery:{name:t("trait_mastery_name"),desc:t("trait_mastery"),type:"special",vars(r){return[1]}}},T={protoplasm:{name:t("race_protoplasm"),desc:t("race_protoplasm_desc"),type:"organism",home:t("race_prehistoric"),entity:t("race_protoplasm_entity"),traits:{},solar:{red:t("race_human_solar_red"),hell:t("race_human_solar_hell"),gas:t("race_human_solar_gas"),gas_moon:t("race_human_solar_gas_moon"),dwarf:t("race_human_solar_dwarf")},fanaticism:"none",basic(){return!1}},human:{name:t(fe("human")?"race_zombie":"race_human"),desc:t(fe("human")?"race_zombie_desc":"race_human_desc"),type:"humanoid",home:t("race_human_home"),entity:t("race_human_entity"),traits:{creative:1,diverse:1},solar:{red:t(fe("human")?"race_zombie_solar_red":"race_human_solar_red"),hell:t(fe("human")?"race_zombie_solar_hell":"race_human_solar_hell"),gas:t(fe("human")?"race_zombie_solar_gas":"race_human_solar_gas"),gas_moon:t(fe("human")?"race_zombie_solar_gas_moon":"race_human_solar_gas_moon"),dwarf:t(fe("human")?"race_zombie_solar_dwarf":"race_human_solar_dwarf")},fanaticism:"creative",basic(){return!0}},elven:{name:t("race_elven"),desc:t(fe("elven")?"race_xmas_elf_desc":"race_elven_desc"),type:"humanoid",home:t(fe("elven")?"race_xmas_elf_home":"race_elven_home"),entity:fe("elven")?t("race_xmas_elf_entity"):t("race_elven_entity"),traits:{studious:1,arrogant:1},solar:{red:t(fe("elven")?"race_xmas_elf_solar_red":"race_elven_solar_red"),hell:t(fe("elven")?"race_xmas_elf_solar_hell":"race_elven_solar_hell"),gas:t(fe("elven")?"race_xmas_elf_solar_gas":"race_elven_solar_gas"),gas_moon:t(fe("elven")?"race_xmas_elf_solar_gas_moon":"race_elven_solar_gas_moon"),dwarf:t(fe("elven")?"race_xmas_elf_solar_dwarf":"race_elven_solar_dwarf")},fanaticism:"studious",basic(){return!0}},orc:{name:t("race_orc"),desc:t("race_orc_desc"),type:"humanoid",home:t("race_orc_home"),entity:t("race_orc_entity"),traits:{brute:1,angry:1},solar:{red:t("race_orc_solar_red"),hell:t("race_orc_solar_hell"),gas:t("race_orc_solar_gas"),gas_moon:t("race_orc_solar_gas_moon"),dwarf:t("race_orc_solar_dwarf")},fanaticism:"brute",basic(){return!0}},cath:{name:t("race_cath"),desc:t("race_cath_desc"),type:"carnivore",home:t("race_cath_home"),entity:t("race_cath_entity"),traits:{lazy:1,curious:1},solar:{red:t("race_cath_solar_red"),hell:t("race_cath_solar_hell"),gas:t("race_cath_solar_gas"),gas_moon:t("race_cath_solar_gas_moon"),dwarf:t("race_cath_solar_dwarf")},fanaticism:"curious",basic(){return!0}},wolven:{name:fe("wolven")?t("race_rabbit"):t("race_wolven"),desc:fe("wolven")?t("race_rabbit_desc"):t("race_wolven_desc"),type:"carnivore",home:fe("wolven")?t("race_rabbit_home"):t("race_wolven_home"),entity:fe("wolven")?t("race_rabbit_entity"):t("race_wolven_entity"),traits:{pack_mentality:1,tracker:1},solar:{red:fe("wolven")?t("race_rabbit_solar_red"):t("race_wolven_solar_red"),hell:fe("wolven")?t("race_rabbit_solar_hell"):t("race_wolven_solar_hell"),gas:fe("wolven")?t("race_rabbit_solar_gas"):t("race_wolven_solar_gas"),gas_moon:fe("wolven")?t("race_rabbit_solar_gas_moon"):t("race_wolven_solar_gas_moon"),dwarf:fe("wolven")?t("race_rabbit_solar_dwarf"):t("race_wolven_solar_dwarf")},fanaticism:"tracker",basic(){return!0}},vulpine:{name:fe("vulpine")?t("race_chocolate_rabbit"):t(e.race.universe==="magic"?"race_kitsune":"race_vulpine"),desc(){return fe("vulpine")?t("race_chocolate_rabbit_desc"):t("race_vulpine_desc",[t(e.race.universe==="magic"?"race_kitsune":"race_vulpine"),vp()])},type:"carnivore",home:fe("vulpine")?t("race_chocolate_rabbit_home"):t("race_vulpine_home"),entity:fe("vulpine")?t("race_chocolate_rabbit_entity"):t("race_vulpine_entity"),traits:{playful:1,freespirit:1},solar:{red:fe("vulpine")?t("race_chocolate_rabbit_solar_red"):t("race_vulpine_solar_red"),hell:fe("vulpine")?t("race_chocolate_rabbit_solar_hell"):t("race_vulpine_solar_hell"),gas:fe("vulpine")?t("race_chocolate_rabbit_solar_gas"):t("race_vulpine_solar_gas"),gas_moon:fe("vulpine")?t("race_chocolate_rabbit_solar_gas_moon"):t("race_vulpine_solar_gas_moon"),dwarf:fe("vulpine")?t("race_chocolate_rabbit_solar_dwarf"):t("race_vulpine_solar_dwarf")},fanaticism:"playful",basic(){return!0}},centaur:{name:t(fe("centaur")?"race_reindeer":"race_centaur"),desc:t(fe("centaur")?"race_reindeer_desc":"race_centaur_desc"),type:"herbivore",home:t(fe("centaur")?"race_reindeer_home":"race_centaur_home"),entity:t(fe("centaur")?"race_reindeer_entity":"race_centaur_entity"),traits:{sniper:1,hooved:1},solar:{red:t(fe("centaur")?"race_reindeer_solar_red":"race_centaur_solar_red"),hell:t(fe("centaur")?"race_reindeer_solar_hell":"race_centaur_solar_hell"),gas:t(fe("centaur")?"race_reindeer_solar_gas":"race_centaur_solar_gas"),gas_moon:t(fe("centaur")?"race_reindeer_solar_gas_moon":"race_centaur_solar_gas_moon"),dwarf:t(fe("centaur")?"race_reindeer_solar_dwarf":"race_centaur_solar_dwarf")},fanaticism:"sniper",basic(){return!0}},rhinotaur:{name:t("race_rhinotaur"),desc:t("race_rhinotaur_desc"),type:"herbivore",home:t("race_rhinotaur_home"),entity:t("race_rhinotaur_entity"),traits:{rage:1,heavy:1},solar:{red:t("race_rhinotaur_solar_red"),hell:t("race_rhinotaur_solar_hell"),gas:t("race_rhinotaur_solar_gas"),gas_moon:t("race_rhinotaur_solar_gas_moon"),dwarf:t("race_rhinotaur_solar_dwarf")},fanaticism:"rage",basic(){return!0}},capybara:{name:t(fe("capybara")?"race_donkey":"race_capybara"),desc:t(fe("capybara")?"race_donkey_desc":"race_capybara_desc"),type:"herbivore",home:t(fe("capybara")?"race_donkey_home":"race_capybara_home"),entity:t(fe("capybara")?"race_donkey_entity":"race_capybara_entity"),traits:{gnawer:1,calm:1},solar:{red:t(fe("capybara")?"race_donkey_solar_red":"race_capybara_solar_red"),hell:t(fe("capybara")?"race_donkey_solar_hell":"race_capybara_solar_hell"),gas:t(fe("capybara")?"race_donkey_solar_gas":"race_capybara_solar_gas"),gas_moon:t(fe("capybara")?"race_donkey_solar_gas_moon":"race_capybara_solar_gas_moon"),dwarf:t(fe("capybara")?"race_donkey_solar_dwarf":"race_capybara_solar_dwarf")},fanaticism:"calm",basic(){return!0}},kobold:{name:t("race_kobold"),desc:t("race_kobold_desc"),type:"small",home:t("race_kobold_home"),entity:t("race_kobold_entity"),traits:{pack_rat:1,paranoid:1},solar:{red:t("race_kobold_solar_red"),hell:t("race_kobold_solar_hell"),gas:t("race_kobold_solar_gas"),gas_moon:t("race_kobold_solar_gas_moon"),dwarf:t("race_kobold_solar_dwarf")},fanaticism:"pack_rat",basic(){return!0}},goblin:{name:t("race_goblin"),desc:t("race_goblin_desc"),type:"small",home:t("race_goblin_home"),entity:t("race_goblin_entity"),traits:{greedy:1,merchant:1},solar:{red:t("race_goblin_solar_red"),hell:t("race_goblin_solar_hell"),gas:t("race_goblin_solar_gas"),gas_moon:t("race_goblin_solar_gas_moon"),dwarf:t("race_goblin_solar_dwarf")},fanaticism:"merchant",basic(){return!0}},gnome:{name:t("race_gnome"),desc:t("race_gnome_desc"),type:"small",home:t("race_gnome_home"),entity:t("race_gnome_entity"),traits:{smart:1,puny:1},solar:{red:t("race_gnome_solar_red"),hell:t("race_gnome_solar_hell"),gas:t("race_gnome_solar_gas"),gas_moon:t("race_gnome_solar_gas_moon"),dwarf:t("race_gnome_solar_dwarf")},fanaticism:"smart",basic(){return!0}},ogre:{name:t("race_ogre"),desc:t("race_ogre_desc"),type:"giant",home:t("race_ogre_home"),entity:t("race_ogre_entity"),traits:{dumb:1,tough:1},solar:{red:t("race_ogre_solar_red"),hell:t("race_ogre_solar_hell"),gas:t("race_ogre_solar_gas"),gas_moon:t("race_ogre_solar_gas_moon"),dwarf:t("race_ogre_solar_dwarf")},fanaticism:"tough",basic(){return!0}},cyclops:{name:t("race_cyclops"),desc:t("race_cyclops_desc"),type:"giant",home:t("race_cyclops_home"),entity:t("race_cyclops_entity"),traits:{nearsighted:1,intelligent:1},solar:{red:t("race_cyclops_solar_red"),hell:t("race_cyclops_solar_hell"),gas:t("race_cyclops_solar_gas"),gas_moon:t("race_cyclops_solar_gas_moon"),dwarf:t("race_cyclops_solar_dwarf")},fanaticism:"intelligent",basic(){return!0}},troll:{name:t("race_troll"),desc:t("race_troll_desc"),type:"giant",home:t("race_troll_home"),entity:t("race_troll_entity"),traits:{regenerative:1,gluttony:1},solar:{red:t("race_troll_solar_red"),hell:t("race_troll_solar_hell"),gas:t("race_troll_solar_gas"),gas_moon:t("race_troll_solar_gas_moon"),dwarf:t("race_troll_solar_dwarf")},fanaticism:"regenerative",basic(){return!0}},tortoisan:{name:t(fe("tortoisan")?"race_ninja_turtle":"race_tortoisan"),desc(){return fe("tortoisan")?t("race_ninja_turtle_desc",[i0()]):t("race_tortoisan_desc",[i0()])},type:"reptilian",home:t(fe("tortoisan")?"race_ninja_turtle_home":"race_tortoisan_home"),entity:t(fe("tortoisan")?"race_ninja_turtle_entity":"race_tortoisan_entity"),traits:{slow:1,armored:1},solar:{red:t(fe("tortoisan")?"race_ninja_turtle_solar_red":"race_tortoisan_solar_red"),hell:t(fe("tortoisan")?"race_ninja_turtle_solar_hell":"race_tortoisan_solar_hell"),gas:t(fe("tortoisan")?"race_ninja_turtle_solar_gas":"race_tortoisan_solar_gas"),gas_moon:t(fe("tortoisan")?"race_ninja_turtle_solar_gas_moon":"race_tortoisan_solar_gas_moon"),dwarf:t(fe("tortoisan")?"race_ninja_turtle_solar_dwarf":"race_tortoisan_solar_dwarf")},fanaticism:"armored",basic(){return!0}},gecko:{name:t("race_gecko"),desc:t("race_gecko_desc"),type:"reptilian",home:t("race_gecko_home"),entity:t("race_gecko_entity"),traits:{optimistic:1,chameleon:1},solar:{red:t("race_gecko_solar_red"),hell:t("race_gecko_solar_hell"),gas:t("race_gecko_solar_gas"),gas_moon:t("race_gecko_solar_gas_moon"),dwarf:t("race_gecko_solar_dwarf")},fanaticism:"optimistic",basic(){return!0}},slitheryn:{name:t("race_slitheryn"),desc:t("race_slitheryn_desc"),type:"reptilian",home:t("race_slitheryn_home"),entity:t("race_slitheryn_entity"),traits:{astrologer:1,hard_of_hearing:1,slow_digestion:1},solar:{red:t("race_slitheryn_solar_red"),hell:t("race_slitheryn_solar_hell"),gas:t("race_slitheryn_solar_gas"),gas_moon:t("race_slitheryn_solar_gas_moon"),dwarf:t("race_slitheryn_solar_dwarf")},fanaticism:"astrologer",basic(){return!0}},arraak:{name:t(fe("arraak")?"race_turkey":"race_arraak"),desc:t(fe("arraak")?"race_turkey_desc":"race_arraak_desc"),type:"avian",home:t(fe("arraak")?"race_turkey_home":"race_arraak_home"),entity:fe("arraak")?t("race_turkey_entity"):t("race_arraak_entity"),traits:{resourceful:1,selenophobia:1},solar:{red:t(fe("arraak")?"race_turkey_solar_red":"race_arraak_solar_red"),hell:t(fe("arraak")?"race_turkey_solar_hell":"race_arraak_solar_hell"),gas:t(fe("arraak")?"race_turkey_solar_gas":"race_arraak_solar_gas"),gas_moon:t(fe("arraak")?"race_turkey_solar_gas_moon":"race_arraak_solar_gas_moon"),dwarf:t(fe("arraak")?"race_turkey_solar_dwarf":"race_arraak_solar_dwarf")},fanaticism:"resourceful",basic(){return!0}},pterodacti:{name:t("race_pterodacti"),desc:t("race_pterodacti_desc"),type:"avian",home:t("race_pterodacti_home"),entity:t("race_pterodacti_entity"),traits:{leathery:1,pessimistic:1},solar:{red:t("race_pterodacti_solar_red"),hell:t("race_pterodacti_solar_hell"),gas:t("race_pterodacti_solar_gas"),gas_moon:t("race_pterodacti_solar_gas_moon"),dwarf:t("race_pterodacti_solar_dwarf")},fanaticism:"leathery",basic(){return!0}},dracnid:{name:t("race_dracnid"),desc:t("race_dracnid_desc"),type:"avian",home:t("race_dracnid_home"),entity:t("race_dracnid_entity"),traits:{hoarder:1,solitary:1},solar:{red:t("race_dracnid_solar_red"),hell:t("race_dracnid_solar_hell"),gas:t("race_dracnid_solar_gas"),gas_moon:t("race_dracnid_solar_gas_moon"),dwarf:t("race_dracnid_solar_dwarf")},fanaticism:"hoarder",basic(){return!0}},entish:{name:t(fe("entish")?"race_spruce":"race_entish"),desc:t(fe("entish")?"race_spruce_desc":"race_entish_desc"),type:"plant",home:t(fe("entish")?"race_spruce_home":"race_entish_home"),entity:t(fe("entish")?"race_spruce_entity":"race_entish_entity"),traits:{kindling_kindred:1,pyrophobia:1,catnip:1},solar:{red:t(fe("entish")?"race_spruce_solar_red":"race_entish_solar_red"),hell:t(fe("entish")?"race_spruce_solar_hell":"race_entish_solar_hell"),gas:t(fe("entish")?"race_spruce_solar_gas":"race_entish_solar_gas"),gas_moon:t(fe("entish")?"race_spruce_solar_gas_moon":"race_entish_solar_gas_moon"),dwarf:t(fe("entish")?"race_spruce_solar_dwarf":"race_entish_solar_dwarf")},fanaticism:"kindling_kindred",basic(){return!0}},cacti:{name:t("race_cacti"),desc:t("race_cacti_desc"),type:"plant",home:t("race_cacti_home"),entity:t("race_cacti_entity"),traits:{hyper:1,skittish:1},solar:{red:t("race_cacti_solar_red"),hell:t("race_cacti_solar_hell"),gas:t("race_cacti_solar_gas"),gas_moon:t("race_cacti_solar_gas_moon"),dwarf:t("race_cacti_solar_dwarf")},fanaticism:"hyper",basic(){return!0}},pinguicula:{name:t("race_pinguicula"),desc:t("race_pinguicula_desc"),type:"plant",home:t("race_pinguicula_home"),entity:t("race_pinguicula_entity"),traits:{fragrant:1,sticky:1,anise:1},solar:{red:t("race_pinguicula_solar_red"),hell:t("race_pinguicula_solar_hell"),gas:t("race_pinguicula_solar_gas"),gas_moon:t("race_pinguicula_solar_gas_moon"),dwarf:t("race_pinguicula_solar_dwarf")},fanaticism:"sticky",basic(){return!0}},sporgar:{name:t("race_sporgar"),desc:t("race_sporgar_desc"),type:"fungi",home:t("race_sporgar_home"),entity:t("race_sporgar_entity"),traits:{infectious:1,parasite:1},solar:{red:t("race_sporgar_solar_red"),hell:t("race_sporgar_solar_hell"),gas:t("race_sporgar_solar_gas"),gas_moon:t("race_sporgar_solar_gas_moon"),dwarf:t("race_sporgar_solar_dwarf")},fanaticism:"infectious",basic(){return!1}},shroomi:{name:t("race_shroomi"),desc:t("race_shroomi_desc"),type:"fungi",home:t("race_shroomi_home"),entity:t("race_shroomi_entity"),traits:{toxic:1,nyctophilia:1},solar:{red:t("race_shroomi_solar_red"),hell:t("race_shroomi_solar_hell"),gas:t("race_shroomi_solar_gas"),gas_moon:t("race_shroomi_solar_gas_moon"),dwarf:t("race_shroomi_solar_dwarf")},fanaticism:"toxic",basic(){return!0}},moldling:{name:t("race_moldling"),desc:t("race_moldling_desc"),type:"fungi",home:t("race_moldling_home"),entity:t("race_moldling_entity"),traits:{infiltrator:1,hibernator:1},solar:{red:t("race_moldling_solar_red"),hell:t("race_moldling_solar_hell"),gas:t("race_moldling_solar_gas"),gas_moon:t("race_moldling_solar_gas_moon"),dwarf:t("race_moldling_solar_dwarf")},fanaticism:"infiltrator",basic(){return!0}},mantis:{name:t("race_mantis"),desc:t("race_mantis_desc"),type:"insectoid",home:t("race_mantis_home"),entity:t("race_mantis_entity"),traits:{cannibalize:1,malnutrition:1},solar:{red:t("race_mantis_solar_red"),hell:t("race_mantis_solar_hell"),gas:t("race_mantis_solar_gas"),gas_moon:t("race_mantis_solar_gas_moon"),dwarf:t("race_mantis_solar_dwarf")},fanaticism:"cannibalize",basic(){return!0}},scorpid:{name:t("race_scorpid"),desc:t("race_scorpid_desc"),type:"insectoid",home:t("race_scorpid_home"),entity:t("race_scorpid_entity"),traits:{claws:1,atrophy:1},solar:{red:t("race_scorpid_solar_red"),hell:t("race_scorpid_solar_hell"),gas:t("race_scorpid_solar_gas"),gas_moon:t("race_scorpid_solar_gas_moon"),dwarf:t("race_scorpid_solar_dwarf")},fanaticism:"claws",basic(){return!0}},antid:{name:t("race_antid"),desc:t("race_antid_desc"),type:"insectoid",home:t("race_antid_home"),entity:t("race_antid_entity"),traits:{hivemind:1,tunneler:1},solar:{red:t("race_antid_solar_red"),hell:t("race_antid_solar_hell"),gas:t("race_antid_solar_gas"),gas_moon:t("race_antid_solar_gas_moon"),dwarf:t("race_antid_solar_dwarf")},fanaticism:"hivemind",basic(){return!0}},sharkin:{name:t("race_sharkin"),desc:t("race_sharkin_desc"),type:"aquatic",home:t("race_sharkin_home"),entity:t("race_sharkin_entity"),traits:{blood_thirst:1,apex_predator:1},solar:{red:t("race_sharkin_solar_red"),hell:t("race_sharkin_solar_hell"),gas:t("race_sharkin_solar_gas"),gas_moon:t("race_sharkin_solar_gas_moon"),dwarf:t("race_sharkin_solar_dwarf")},fanaticism:"blood_thirst",basic(){return!!["oceanic","swamp"].includes(e.city.biome)}},octigoran:{name:t("race_octigoran"),desc:t("race_octigoran_desc"),type:"aquatic",home:t("race_octigoran_home"),entity:t("race_octigoran_entity"),traits:{invertebrate:1,suction_grip:1},solar:{red:t("race_octigoran_solar_red"),hell:t("race_octigoran_solar_hell"),gas:t("race_octigoran_solar_gas"),gas_moon:t("race_octigoran_solar_gas_moon"),dwarf:t("race_octigoran_solar_dwarf")},fanaticism:"suction_grip",basic(){return!!["oceanic","swamp"].includes(e.city.biome)}},dryad:{name:t("race_dryad"),desc:t("race_dryad_desc"),type:"fey",home:t("race_dryad_home"),entity:t("race_dryad_entity"),traits:{befuddle:1,environmentalist:1,kindling_kindred:1},solar:{red:t("race_dryad_solar_red"),hell:t("race_dryad_solar_hell"),gas:t("race_dryad_solar_gas"),gas_moon:t("race_dryad_solar_gas_moon"),dwarf:t("race_dryad_solar_dwarf")},fanaticism:"befuddle",basic(){return!!["forest","swamp","taiga"].includes(e.city.biome)}},satyr:{name:t("race_satyr"),desc:t("race_satyr_desc"),type:"fey",home:t("race_satyr_home"),entity:t("race_satyr_entity"),traits:{unorganized:1,musical:1},solar:{red:t("race_satyr_solar_red"),hell:t("race_satyr_solar_hell"),gas:t("race_satyr_solar_gas"),gas_moon:t("race_satyr_solar_gas_moon"),dwarf:t("race_satyr_solar_dwarf")},fanaticism:"musical",basic(){return!!["forest","swamp","taiga"].includes(e.city.biome)}},phoenix:{name:t("race_phoenix"),desc:t("race_phoenix_desc"),type:"heat",home:t("race_phoenix_home"),entity:t("race_phoenix_entity"),traits:{revive:1,slow_regen:1},solar:{red:t("race_phoenix_solar_red"),hell:t("race_phoenix_solar_hell"),gas:t("race_phoenix_solar_gas"),gas_moon:t("race_phoenix_solar_gas_moon"),dwarf:t("race_phoenix_solar_dwarf")},fanaticism:"revive",basic(){return!!["volcanic","ashland"].includes(e.city.biome)}},salamander:{name:t("race_salamander"),desc:t("race_salamander_desc"),type:"heat",home:t("race_salamander_home"),entity:t("race_salamander_entity"),traits:{forge:1,autoignition:1},solar:{red:t("race_salamander_solar_red"),hell:t("race_salamander_solar_hell"),gas:t("race_salamander_solar_gas"),gas_moon:t("race_salamander_solar_gas_moon"),dwarf:t("race_salamander_solar_dwarf")},fanaticism:"forge",basic(){return!!["volcanic","ashland"].includes(e.city.biome)}},yeti:{name:t(fe("yeti")?"race_snowman":"race_yeti"),desc:t(fe("yeti")?"race_snowman_desc":"race_yeti_desc"),type:"polar",home:t(fe("yeti")?"race_snowman_home":"race_yeti_home"),entity:t(fe("yeti")?"race_snowman_entity":"race_yeti_entity"),traits:{blurry:1,snowy:1},solar:{red:t(fe("yeti")?"race_snowman_solar_red":"race_yeti_solar_red"),hell:t(fe("yeti")?"race_snowman_solar_hell":"race_yeti_solar_hell"),gas:t(fe("yeti")?"race_snowman_solar_gas":"race_yeti_solar_gas"),gas_moon:t(fe("yeti")?"race_snowman_solar_gas_moon":"race_yeti_solar_gas_moon"),dwarf:t(fe("yeti")?"race_snowman_solar_dwarf":"race_yeti_solar_dwarf")},fanaticism:"blurry",basic(){return!!["tundra","taiga"].includes(e.city.biome)}},wendigo:{name:t(fe("wendigo")?"race_krampus":"race_wendigo"),desc:t(fe("wendigo")?"race_krampus_desc":"race_wendigo_desc"),type:"polar",home:t(fe("wendigo")?"race_krampus_home":"race_wendigo_home"),entity:t(fe("wendigo")?"race_krampus_entity":"race_wendigo_entity"),traits:{ravenous:1,ghostly:1,soul_eater:1},solar:{red:t(fe("wendigo")?"race_krampus_solar_red":"race_wendigo_solar_red"),hell:t(fe("wendigo")?"race_krampus_solar_hell":"race_wendigo_solar_hell"),gas:t(fe("wendigo")?"race_krampus_solar_gas":"race_wendigo_solar_gas"),gas_moon:t(fe("wendigo")?"race_krampus_solar_gas_moon":"race_wendigo_solar_gas_moon"),dwarf:t(fe("wendigo")?"race_krampus_solar_dwarf":"race_wendigo_solar_dwarf")},fanaticism:"ghostly",basic(){return!!["tundra","taiga"].includes(e.city.biome)}},tuskin:{name:t("race_tuskin"),desc:t("race_tuskin_desc"),type:"sand",home:t("race_tuskin_home"),entity:t("race_tuskin_entity"),traits:{lawless:1,mistrustful:1},solar:{red:t("race_tuskin_solar_red"),hell:t("race_tuskin_solar_hell"),gas:t("race_tuskin_solar_gas"),gas_moon:t("race_tuskin_solar_gas_moon"),dwarf:t("race_tuskin_solar_dwarf")},fanaticism:"lawless",basic(){return!!["desert","ashland"].includes(e.city.biome)}},kamel:{name:t("race_kamel"),desc:t("race_kamel_desc"),type:"sand",home:t("race_kamel_home"),entity:t("race_kamel_entity"),traits:{humpback:1,unfavored:1},solar:{red:t("race_kamel_solar_red"),hell:t("race_kamel_solar_hell"),gas:t("race_kamel_solar_gas"),gas_moon:t("race_kamel_solar_gas_moon"),dwarf:t("race_kamel_solar_dwarf")},fanaticism:"humpback",basic(){return!!["desert","ashland"].includes(e.city.biome)}},balorg:{name:t("race_balorg"),desc:t("race_balorg_desc"),type:"demonic",home:t("race_balorg_home"),entity:t("race_balorg_entity"),traits:{fiery:1,terrifying:1,slaver:1},solar:{red:t("race_balorg_solar_red"),hell:t("race_balorg_solar_hell"),gas:t("race_balorg_solar_gas"),gas_moon:t("race_balorg_solar_gas_moon"),dwarf:t("race_balorg_solar_dwarf")},fanaticism:"fiery",basic(){return e.city.biome==="hellscape"}},imp:{name:t("race_imp"),desc:t("race_imp_desc"),type:"demonic",home:t("race_imp_home"),entity:t("race_imp_entity"),traits:{compact:1,conniving:1,pathetic:1},solar:{red:t("race_imp_solar_red"),hell:t("race_imp_solar_hell"),gas:t("race_imp_solar_gas"),gas_moon:t("race_imp_solar_gas_moon"),dwarf:t("race_imp_solar_dwarf")},fanaticism:"conniving",basic(){return e.city.biome==="hellscape"}},seraph:{name:t(fe("seraph")?"race_cherub":"race_seraph"),desc:t(fe("seraph")?"race_cherub_desc":"race_seraph_desc"),type:"angelic",home:t(fe("seraph")?"race_cherub_home":"race_seraph_home"),entity:t(fe("seraph")?"race_cherub_entity":"race_seraph_entity"),traits:{unified:1,spiritual:1,truthful:1},solar:{red:t(fe("seraph")?"race_cherub_solar_red":"race_seraph_solar_red"),hell:t(fe("seraph")?"race_cherub_solar_hell":"race_seraph_solar_hell"),gas:t(fe("seraph")?"race_cherub_solar_gas":"race_seraph_solar_gas"),gas_moon:t(fe("seraph")?"race_cherub_solar_gas_moon":"race_seraph_solar_gas_moon"),dwarf:t(fe("seraph")?"race_cherub_solar_dwarf":"race_seraph_solar_dwarf")},fanaticism:"spiritual",basic(){return e.city.biome==="eden"}},unicorn:{name:t(fe("unicorn")?"race_emocorn":"race_unicorn"),desc:t(fe("unicorn")?"race_emocorn_desc":"race_unicorn_desc"),type:"angelic",home:t(fe("unicorn")?"race_emocorn_home":"race_unicorn_home"),entity:t(fe("unicorn")?"race_emocorn_entity":"race_unicorn_entity"),traits:{rainbow:1,magnificent:1,noble:1},solar:{red:t(fe("unicorn")?"race_emocorn_solar_red":"race_unicorn_solar_red"),hell:t(fe("unicorn")?"race_emocorn_solar_hell":"race_unicorn_solar_hell"),gas:t(fe("unicorn")?"race_emocorn_solar_gas":"race_unicorn_solar_gas"),gas_moon:t(fe("unicorn")?"race_emocorn_solar_gas_moon":"race_unicorn_solar_gas_moon"),dwarf:t(fe("unicorn")?"race_emocorn_solar_dwarf":"race_unicorn_solar_dwarf")},fanaticism:"magnificent",basic(){return e.city.biome==="eden"}},synth:{name:t("race_synth"),desc(){let r=e.race.hasOwnProperty("srace")?e.race.srace:"human";return t("race_synth_desc",[T[r].name])},type:"synthetic",home:t("race_synth_home"),entity:t("race_synth_entity"),traits:{imitation:1,emotionless:1,logical:1},solar:{red:t("race_synth_solar_red"),hell:t("race_synth_solar_hell"),gas:t("race_synth_solar_gas"),gas_moon:t("race_synth_solar_gas_moon"),dwarf:t("race_synth_solar_dwarf")},fanaticism:"logical",basic(){return!1}},nano:{name:t("race_nano"),desc:t("race_nano_desc"),type:"synthetic",home:t("race_nano_home"),entity:t("race_nano_entity"),traits:{deconstructor:1,linked:1,shapeshifter:1},solar:{red:t("race_nano_solar_red"),hell:t("race_nano_solar_hell"),gas:t("race_nano_solar_gas"),gas_moon:t("race_nano_solar_gas_moon"),dwarf:t("race_nano_solar_dwarf")},fanaticism:"shapeshifter",basic(){return!1}},ghast:{name:t("race_ghast"),desc:t("race_ghast_desc"),type:"eldritch",home:t("race_ghast_home"),entity:t("race_ghast_entity"),traits:{dark_dweller:1,swift:1,anthropophagite:1},solar:{red:t("race_ghast_solar_red"),hell:t("race_ghast_solar_hell"),gas:t("race_ghast_solar_gas"),gas_moon:t("race_ghast_solar_gas_moon"),dwarf:t("race_ghast_solar_dwarf")},fanaticism:"swift",basic(){return!1}},shoggoth:{name:t("race_shoggoth"),desc:t("race_shoggoth_desc"),type:"eldritch",home:t("race_shoggoth_home"),entity:t("race_shoggoth_entity"),traits:{living_tool:1,bloated:1},solar:{red:t("race_shoggoth_solar_red"),hell:t("race_shoggoth_solar_hell"),gas:t("race_shoggoth_solar_gas"),gas_moon:t("race_shoggoth_solar_gas_moon"),dwarf:t("race_shoggoth_solar_dwarf")},fanaticism:"living_tool",basic(){return!1}},dwarf:{name:t("race_dwarf"),desc:t("race_dwarf_desc"),type:"hybrid",hybrid:["humanoid","small"],home:t("race_dwarf_home"),entity:t("race_dwarf_entity"),traits:{artisan:1,stubborn:1},solar:{red:t("race_dwarf_solar_red"),hell:t("race_dwarf_solar_hell"),gas:t("race_dwarf_solar_gas"),gas_moon:t("race_dwarf_solar_gas_moon"),dwarf:t("race_dwarf_solar_dwarf")},fanaticism:"artisan",basic(){return!1}},raccoon:{name:t("race_raccoon"),desc:t("race_raccoon_desc"),type:"hybrid",hybrid:["carnivore","herbivore"],home:t("race_raccoon_home"),entity:t("race_raccoon_entity"),traits:{rogue:1,untrustworthy:1},solar:{red:t("race_raccoon_solar_red"),hell:t("race_raccoon_solar_hell"),gas:t("race_raccoon_solar_gas"),gas_moon:t("race_raccoon_solar_gas_moon"),dwarf:t("race_raccoon_solar_dwarf")},fanaticism:"rogue",basic(){return!1}},lichen:{name:t("race_lichen"),desc:t("race_lichen_desc"),type:"hybrid",hybrid:["plant","fungi"],home:t("race_lichen_home"),entity:t("race_lichen_entity"),traits:{living_materials:1,unstable:1},solar:{red:t("race_lichen_solar_red"),hell:t("race_lichen_solar_hell"),gas:t("race_lichen_solar_gas"),gas_moon:t("race_lichen_solar_gas_moon"),dwarf:t("race_lichen_solar_dwarf")},fanaticism:"living_materials",basic(){return!1}},wyvern:{name:t("race_wyvern"),desc:t("race_wyvern_desc"),type:"hybrid",hybrid:["avian","reptilian"],home:t("race_wyvern_home"),entity:t("race_wyvern_entity"),traits:{elemental:1,chicken:1},solar:{red:t("race_wyvern_solar_red"),hell:t("race_wyvern_solar_hell"),gas:t("race_wyvern_solar_gas"),gas_moon:t("race_wyvern_solar_gas_moon"),dwarf:t("race_wyvern_solar_dwarf")},fanaticism:"elemental",basic(){return!1}},beholder:{name:t("race_beholder"),desc:t("race_beholder_desc"),type:"hybrid",hybrid:["eldritch","giant"],home:t("race_beholder_home"),entity:t("race_beholder_entity"),traits:{ocular_power:1,floating:1},solar:{red:t("race_beholder_solar_red"),hell:t("race_beholder_solar_hell"),gas:t("race_beholder_solar_gas"),gas_moon:t("race_beholder_solar_gas_moon"),dwarf:t("race_beholder_solar_dwarf")},fanaticism:"ocular_power",basic(){return!1}},djinn:{name:t("race_djinn"),desc:t("race_djinn_desc"),type:"hybrid",hybrid:["sand","fey"],home:t("race_djinn_home"),entity:t("race_djinn_entity"),traits:{wish:1,devious:1},solar:{red:t("race_djinn_solar_red"),hell:t("race_djinn_solar_hell"),gas:t("race_djinn_solar_gas"),gas_moon:t("race_djinn_solar_gas_moon"),dwarf:t("race_djinn_solar_dwarf")},fanaticism:"wish",basic(){return!1}},narwhal:{name:t("race_narwhal"),desc:t("race_narwhal_desc"),type:"hybrid",hybrid:["aquatic","polar"],home:t("race_narwhal_home"),entity:t("race_narwhal_entity"),traits:{tusk:1,blubber:1},solar:{red:t("race_narwhal_solar_red"),hell:t("race_narwhal_solar_hell"),gas:t("race_narwhal_solar_gas"),gas_moon:t("race_narwhal_solar_gas_moon"),dwarf:t("race_narwhal_solar_dwarf")},fanaticism:"tusk",basic(){return!1}},bombardier:{name:t("race_bombardier"),desc:t("race_bombardier_desc"),type:"hybrid",hybrid:["insectoid","heat"],home:t("race_bombardier_home"),entity:t("race_bombardier_entity"),traits:{grenadier:1,aggressive:1},solar:{red:t("race_bombardier_solar_red"),hell:t("race_bombardier_solar_hell"),gas:t("race_bombardier_solar_gas"),gas_moon:t("race_bombardier_solar_gas_moon"),dwarf:t("race_bombardier_solar_dwarf")},fanaticism:"grenadier",basic(){return!1}},nephilim:{name:t("race_nephilim"),desc:t("race_nephilim_desc"),type:"hybrid",hybrid:["demonic","angelic"],home:t("race_nephilim_home"),entity:t("race_nephilim_entity"),traits:{empowered:2,blasphemous:1},solar:{red:t("race_nephilim_solar_red"),hell:t("race_nephilim_solar_hell"),gas:t("race_nephilim_solar_gas"),gas_moon:t("race_nephilim_solar_gas_moon"),dwarf:t("race_nephilim_solar_dwarf")},fanaticism:"empowered",basic(){return!1}},hellspawn:{name:t("race_hellspawn"),desc:t("race_hellspawn_desc"),type:"demonic",home:t("race_hellspawn_home"),entity:t("race_hellspawn_entity"),traits:{immoral:4},solar:{red:t("race_hellspawn_solar_red"),hell:t("race_hellspawn_solar_hell"),gas:t("race_hellspawn_solar_gas"),gas_moon:t("race_hellspawn_solar_gas_moon"),dwarf:t("race_hellspawn_solar_dwarf")},fanaticism:"immoral",basic(){return!1}},junker:{name:fe("junker")?t("race_ghoul"):t("race_junker"),desc:fe("junker")?t("race_ghoul_desc"):t("race_junker_desc"),type:function(){return e.race.hasOwnProperty("jtype")?e.race.jtype:"humanoid"}(),home:fe("junker")?t("race_ghoul_home"):t("race_junker_home"),entity:fe("junker")?t("race_ghoul_entity"):t("race_junker_entity"),traits:{diverse:1,arrogant:1,angry:1,lazy:1,paranoid:1,greedy:1,puny:1,dumb:1,nearsighted:1,gluttony:1,slow:1,hard_of_hearing:1,pessimistic:1,solitary:1,pyrophobia:1,skittish:1,nyctophilia:1,frail:1,atrophy:1,invertebrate:1,pathetic:1,hibernator:1,freespirit:1,heavy:1,gnawer:1,hooved:1},solar:{red:fe("junker")?t("race_ghoul_solar_red"):t("race_junker_solar_red"),hell:fe("junker")?t("race_ghoul_solar_hell"):t("race_junker_solar_hell"),gas:fe("junker")?t("race_ghoul_solar_gas"):t("race_junker_solar_gas"),gas_moon:fe("junker")?t("race_ghoul_solar_gas_moon"):t("race_junker_solar_gas_moon"),dwarf:fe("junker")?t("race_ghoul_solar_dwarf"):t("race_junker_solar_dwarf")},fanaticism:"none",basic(){return!1}},sludge:{name:t("race_sludge"),desc:t("race_sludge_desc"),type:function(){return e.race.hasOwnProperty("jtype")?e.race.jtype:"humanoid"}(),home:t("race_sludge_home"),entity:t("race_sludge_entity"),traits:{ooze:.25,diverse:.25,arrogant:.25,angry:.25,lazy:.25,hooved:.25,freespirit:.25,heavy:.25,gnawer:.25,paranoid:.25,greedy:.25,puny:.25,dumb:.25,nearsighted:.25,gluttony:.25,slow:.25,hard_of_hearing:.25,selenophobia:.25,pessimistic:.25,solitary:.25,pyrophobia:.25,skittish:.25,fragrant:.25,nyctophilia:.25,hibernator:.25,frail:.25,atrophy:.25,invertebrate:.25,unorganized:.25,slow_regen:.25,autoignition:.25,snowy:.25,mistrustful:.25,thalassophobia:.25,pathetic:.25,truthful:.25},solar:{red:t("race_sludge_solar_red"),hell:t("race_sludge_solar_hell"),gas:t("race_sludge_solar_gas"),gas_moon:t("race_sludge_solar_gas_moon"),dwarf:t("race_sludge_solar_dwarf")},fanaticism:"ooze",basic(){return!1}},ultra_sludge:{name:t("race_ultra_sludge"),desc:t("race_ultra_sludge_desc"),type:function(){return e.race.hasOwnProperty("jtype")?e.race.jtype:"humanoid"}(),home:t("race_sludge_home"),entity:t("race_sludge_entity"),traits:{ooze:.1,diverse:.1,arrogant:.1,angry:.1,lazy:.1,hooved:.1,freespirit:.1,heavy:.1,gnawer:.1,paranoid:.1,greedy:.1,puny:.1,dumb:.1,nearsighted:.1,gluttony:.1,slow:.1,hard_of_hearing:.1,selenophobia:.1,pessimistic:.1,solitary:.1,pyrophobia:.1,skittish:.1,fragrant:.1,nyctophilia:.1,hibernator:.1,frail:.1,atrophy:.1,invertebrate:.1,unorganized:.1,slow_regen:.1,autoignition:.1,snowy:.1,mistrustful:.1,thalassophobia:.1,pathetic:.1,truthful:.1,blubber:.25,aggressive:.25,devious:.25,floating:.25,blasphemous:.25,chicken:.25,unstable:.25,stubborn:.25,untrustworthy:.25,bloated:.25,dark_dweller:.25},solar:{red:t("race_sludge_solar_red"),hell:t("race_sludge_solar_hell"),gas:t("race_sludge_solar_gas"),gas_moon:t("race_sludge_solar_gas_moon"),dwarf:t("race_sludge_solar_dwarf")},fanaticism:"ooze",basic(){return!1}},custom:t0(),hybrid:t0(!0)},vs={organism:{},humanoid:{},carnivore:{},herbivore:{},omnivore:{},small:{},giant:{},reptilian:{},avian:{},insectoid:{},plant:{},fungi:{},aquatic:{},fey:{},heat:{},polar:{},sand:{},demonic:{},angelic:{},synthetic:{},eldritch:{}};Object.keys(vs).forEach(function(r){let a=r==="organism"?"humanoid":r;vs[r].solar={titan:t(`genus_${a}_solar_titan`),enceladus:t(`genus_${a}_solar_enceladus`),triton:t(`genus_${a}_solar_triton`),eris:t(`genus_${a}_solar_eris`)}});function Yu(){T.junker.type=e.race.hasOwnProperty("jtype")?e.race.jtype:"humanoid",T.sludge.type=e.race.hasOwnProperty("jtype")?e.race.jtype:"humanoid",T.ultra_sludge.type=e.race.hasOwnProperty("jtype")?e.race.jtype:"humanoid"}function t0(r){let a=r?"race1":"race0";if(e.hasOwnProperty("custom")&&e.custom.hasOwnProperty(a)){let i={},s=e.custom[a]?.ranks||{};for(let c=0;cy[n].val&&(n=e.custom[a].traits[c])}let o={name:e.custom[a].name,desc:e.custom[a].desc,type:e.custom[a].genus,home:e.custom[a].home,entity:e.custom[a].entity,traits:i,solar:{red:e.custom[a].red,hell:e.custom[a].hell,gas:e.custom[a].gas,gas_moon:e.custom[a].gas_moon,dwarf:e.custom[a].dwarf},fanaticism:n,basic(){return!1}};return r&&(o.hybrid=e.custom[a].hybrid),o}else return{}}function at(r,a){let i=1,s=_e("theorist",1);s&&(a==="factory"||a==="miner"||a==="lumberjack")&&(i*=1-s/100);let n=_e("inspirational",0);n&&(a==="farmer"||a==="factory"||a==="miner"||a==="lumberjack")&&(i*=1+n/100);let o=_e("dirty_jobs",2);if(o&&a==="miner"&&(i*=1+o/100),e.race.rejuvenated&&["lumberjack","miner","factory"].includes(a)&&(i*=1.1),a==="lumberjack"&&e.race.evil&&(e.race.universe==="evil"||!e.race.soul_eater)&&(e.race.living_tool?i*=1+y.living_tool.vars()[0]*(e.tech.science&&e.tech.science>0?e.tech.science*.3:0):i*=1+(e.tech.reclaimer-1)*.4),e.race.powered&&(a==="factory"||a==="miner"||a==="lumberjack")&&(i*=1+y.powered.vars()[1]/100),e.race.artifical&&a==="science"&&(i*=1+y.artifical.vars()[0]/100),e.race.hivemind&&a!=="farmer"&&!e.race.lone_survivor){let _=y.hivemind.vars()[0],g=.05;if(e.race.high_pop&&a!=="army"&&a!=="hellArmy"&&(_*=y.high_pop.vars()[0],g=.5/(y.hivemind.vars()[0]*y.high_pop.vars()[0])),r<=_){let w=1-_*g;i*=r*g+w}else{let w=a==="army"||a==="hellArmy"?.99:e.race.high_pop?.985:.98;i*=1+(1-w**(r-_))}}let c=Pe("antid");if(c>0){let _=a==="army"||a==="hellArmy"?.99:e.race.high_pop?.985:.98;i*=1+(1-_**(r*c/4))/2}if(e.race.cold_blooded&&a!=="army"&&a!=="hellArmy"&&a!=="factory"&&a!=="science"){switch(e.city.calendar.temp){case 0:i*=1-y.cold_blooded.vars()[0]/100;break;case 2:i*=1+y.cold_blooded.vars()[1]/100;break;default:i*=1;break}switch(e.city.calendar.weather){case 0:i*=1-y.cold_blooded.vars()[0]/100;break;case 2:i*=1+y.cold_blooded.vars()[1]/100;break;default:i*=1;break}}e.race.cannibalize&&e.city.s_alter&&e.city.s_alter.count>0&&(a==="miner"&&e.city.s_alter.mine>0&&(i*=1+y.cannibalize.vars()[0]/100),a==="lumberjack"&&e.city.s_alter.harvest>0&&(i*=1+y.cannibalize.vars()[0]/100),(a==="army"||a==="hellArmy")&&e.city.s_alter.rage>0&&(i*=1+y.cannibalize.vars()[0]/100),a==="science"&&e.city.s_alter.mind>0&&(i*=1+y.cannibalize.vars()[0]/100));let l=Pe("mantis");l>0&&(a==="miner"&&(i*=1+y.cannibalize.vars(1)[0]/100*l),a==="lumberjack"&&(i*=1+y.cannibalize.vars(1)[0]/100*l),(a==="army"||a==="hellArmy")&&(i*=1+y.cannibalize.vars(1)[0]/100*l),a==="science"&&(i*=1+y.cannibalize.vars(1)[0]/100*l)),e.race.humpback&&(a==="miner"||a==="lumberjack")&&(i*=1+y.humpback.vars()[1]/100);let h=Pe("kamel");h>0&&(a==="miner"||a==="lumberjack")&&(i*=1+y.humpback.vars(1)[1]/100*h),e.city.ptrait.includes("magnetic")&&a==="miner"&&(i*=et.magnetic.vars()[2]),e.race.weak&&(a==="miner"||a==="lumberjack")&&(i*=1-y.weak.vars()[0]/100),e.race.hydrophilic&&e.city.calendar.weather===0&&e.city.calendar.temp>0&&a!=="factory"&&(i*=.75),e.race.toxic&&a==="factory"&&(i*=1+y.toxic.vars()[2]/100);let v=Pe("shroomi");if(v>0&&a==="factory"&&(i*=1+y.toxic.vars(1)[2]/100*v),e.race.hardy&&a==="factory"&&(i*=1+y.hardy.vars()[0]*e.race.hardy/100),e.race.analytical&&a==="science"&&(i*=1+y.analytical.vars()[0]*e.race.analytical/100),e.race.ooze&&(i*=1-y.ooze.vars()[0]/100),e.civic.govern.type==="democracy"&&(i*=1-je.democracy()[1]/100),e.tech.cyber_worker&&(a==="lumberjack"||a==="miner"||a==="forager")&&(i*=1.25),e.race.ocular_power&&e.race.ocularPowerConfig&&e.race.ocularPowerConfig.t&&["farmer","miner","lumberjack","scavenger","factory"].includes(a)){let _=20*(y.ocular_power.vars()[1]/100);i*=1+_/100}if(a==="hunting"){e.race.tracker&&(i*=1+y.tracker.vars()[0]/100);let _=Pe("wolven");if(_>0&&(i*=1+y.tracker.vars(1)[0]/100*_),e.race.beast){let S=e.city.calendar.wind===1?y.beast.vars()[1]:y.beast.vars()[0];i*=1+S/100}e.race.apex_predator&&(i*=1+y.apex_predator.vars()[1]/100);let g=Pe("sharkin");g>0&&(i*=1+y.apex_predator.vars(1)[1]/100*g),e.race.fiery&&(i*=1+y.fiery.vars()[1]/100);let w=Pe("balorg");w>0&&(i*=1+y.fiery.vars(1)[1]/100*w),e.race.fragrant&&(i*=1-y.fragrant.vars()[0]/100),e.city.ptrait.includes("rage")&&(i*=et.rage.vars()[1]),e.race.cunning&&(i*=1+y.cunning.vars()[0]*e.race.cunning/100),e.city.biome==="savanna"&&(i*=ze.savanna.vars()[1]),e.race.dark_dweller&&e.city.calendar.weather===2&&(i*=1-y.dark_dweller.vars()[0]/100),e.city.banquet&&e.city.banquet.on&&e.city.banquet.level>=3&&(i*=1+e.city.banquet.strength**.65/100)}if(e.race.universe==="magic"&&(a==="science"?i*=.6:a==="army"||a==="hellArmy"?i*=.75:i*=.8,e.race.witch_hunter&&(i*=.75),e.race.hasOwnProperty("casting")&&na[a==="hellArmy"?"army":a])){let _=na[a==="hellArmy"?"army":a];e.race.witch_hunter?i*=1+_/(_+75)*2.5:i*=1+_/(_+75)}if((e.race.living_tool||e.race.tusk)&&a==="miner"){let _=e.race.hivemind?y.hivemind.vars()[0]:1,g=e.race.tusk?1+y.tusk.vars()[0]/100*(nt(N(_),"army",0)/_/100):1,w=e.race.living_tool?1+y.living_tool.vars()[0]*(e.tech.science&&e.tech.science>0?e.tech.science*.12:0):1;i*=w>g?w:g}return e.race.warlord&&(a==="miner"?i*=1.82:a==="lumberjack"?i*=1.3:a==="science"&&(i*=1.5)),e.race.forager&&a==="forager"&&(i*=y.forager.vars()[0]/100),e.race.high_pop&&(i=qe(i)),e.race.gravity_well&&["farmer","miner","lumberjack","factory","hunting","forager"].includes(a)&&(i=ht(i)),i}function xr(r,a){let i=1;return e.race.gravity_well&&["farmer","miner","lumberjack","factory","hunting","scavenger","forager"].includes(a)&&(i=ht(i)),i}function Xi(r){let a=[];Object.keys(y).forEach(function(s){y[s].type==="minor"&&!e.race[s]&&a.push(s)}),a.length===0&&Object.keys(y).forEach(function(s){y[s].type==="minor"&&a.push(s)});let i=a[Math.floor(R(0,a.length))];return e.race[i]?e.race[i]+=r:e.race[i]=r,i}function $t(r,a,i){e.race.purgatory[r].hasOwnProperty(a)?(e[r][a]=e.race.purgatory[r][a],delete e.race.purgatory[r][a]):i&&(e[r][a]=i)}function _a(r,a,i,s){e.race.purgatory[r].hasOwnProperty(a)?(e[r][a]=e.race.purgatory[r][a],delete e.race.purgatory[r][a]):e.race.purgatory[r].hasOwnProperty(i)?(e[r][a]=e.race.purgatory[r][i],delete e.race.purgatory[r][i]):s&&(e[r][a]=s)}function dr(r,a){e[r].hasOwnProperty(a)&&(e.race.purgatory[r][a]=e[r][a],delete e[r][a])}function zi(r,a){if(e.race.purgatory[r].hasOwnProperty(a))return e.race.purgatory[r][a]}function r0(){En("Lumber"),En("Plywood"),Oa(["city-graveyard","city-lumber_yard","city-sawmill"]),ts(["reclaimer","axe","saw"]),dr("city","sawmill"),dr("city","graveyard"),dr("city","lumber_yard"),dr("tech","axe"),dr("tech","reclaimer"),dr("tech","saw"),e.civic.lumberjack.display=!1,e.civic.lumberjack.workers=0,e.civic.lumberjack.assigned=0,e.civic.d_job==="lumberjack"&&(e.civic.d_job=e.race.carnivore||e.race.soul_eater?"hunter":"unemployed"),e.race.casting&&(e.race.casting.total-=e.race.casting.lumberjack,e.race.casting.lumberjack=0,na.lumberjack=0),Ve(),e.city.s_alter&&(e.city.s_alter.harvest=0)}function En(r){e.resource[r].display=!1,e.race.alchemy&&e.race.alchemy.hasOwnProperty(r)&&(e.resource.Mana.diff+=e.race.alchemy[r],e.race.alchemy[r]=0),e.interstellar.mass_ejector&&e.interstellar.mass_ejector.hasOwnProperty(r)&&(e.interstellar.mass_ejector.total-=e.interstellar.mass_ejector[r],e.interstellar.mass_ejector[r]=0),e.city.nanite_factory&&e.city.nanite_factory.hasOwnProperty(r)&&(e.city.nanite_factory[r]=0),e.portal.transport&&e.portal.transport.cargo.hasOwnProperty(r)&&(e.portal.transport.cargo.used-=e.portal.transport.cargo[r],e.portal.transport.cargo[r]=0),e.tech.foundry&&e.city.foundry.hasOwnProperty(r)&&(e.civic.craftsman.workers-=e.city.foundry[r],e.city.foundry.crafting-=e.city.foundry[r],e.city.foundry[r]=0,Tt()),e.resource[r].hasOwnProperty("trade")&&(e.city.market.trade-=Math.abs(e.resource[r].trade),e.resource[r].trade=0),e.resource.Crates.amount+=e.resource[r].crates,e.resource[r].crates=0,e.resource.Containers.amount+=e.resource[r].containers,e.resource[r].containers=0}function Jc(){let r=Ai(d.tech.agriculture),a=Ai(d.tech.smokehouse),i=Ai(d.tech.reclaimer)||Ai(d.tech.stone_axe),s=Ai(d.tech.alt_lodge),n=Ai(d.tech.wind_plant),o=[],c=[];if(!e.race.artifical){if(["agriculture","farm","hunting","s_lodge","wind_plant","compost","soul_eater"].forEach(function(v){dr("tech",v)}),["silo","farm","mill","windmill","smokehouse","lodge","compost","soul_well"].forEach(function(v){dr("city",v)}),s){$t("tech","s_lodge");let v=zi("tech","farm")>=1||zi("tech","hunting")>=2?1:0;v>0&&(!e.tech.s_lodge||e.tech.s_lodge=1&&_a("city","lodge","farm",{count:0})}if(a){$t("tech","hunting");let v=zi("tech","farm")>=1||zi("tech","s_lodge")>=1?2:zi("tech","agriculture")>=3?1:0;v>0&&(!e.tech.hunting||e.tech.hunting=1&&_a("city","smokehouse","silo",{count:0}),e.tech.hunting>=2&&!s&&_a("city","lodge","farm",{count:0})}else c.push("hunting"),o.push("city-smokehouse"),s||c.push("city-lodge");if(r){$t("tech","farm");let v=zi("tech","hunting")>=2||zi("tech","s_lodge")>=1?1:0;v>0&&(!e.tech.farm||e.tech.farm=1?3:zi("tech","s_lodge")>=1?1:0;_>0&&(!e.tech.agriculture||e.tech.agriculture<_)&&(e.tech.agriculture=_),e.tech.agriculture>=1&&_a("city","farm","lodge",{count:0}),e.tech.agriculture>=3&&_a("city","silo","smokehouse",{count:0}),e.tech.agriculture>=4&&!n&&_a("city","mill","windmill",{count:0,on:0})}else c.push("agriculture","farm"),o.push("city-farm","city-silo","city-mill");e.race.soul_eater?($t("tech","soul_eater"),$t("city","soul_well")):(o.push("city-soul_well"),c.push("soul_eater")),e.race.detritivore?($t("tech","compost"),$t("city","compost")):(c.push("compost"),o.push("city-compost")),n?($t("tech","wind_plant"),e.tech.wind_plant>=1&&_a("city","windmill","mill",{count:0,on:0})):(c.push("wind_plant"),o.push("city-windmill"),delete It[t("city_mill_title2")])}let l=[],h=[];!e.race.orbit_decayed&&r&&e.tech.agriculture>=1&&e.city.farm.count>0?l.push("farmer"):h.push("farmer"),e.race.carnivore&&!e.race.herbivore||e.race.soul_eater||e.race.unfathomable?(l.push("hunter"),h.push("unemployed")):(h.push("hunter"),l.push("unemployed")),!e.race.orbit_decayed&&i?l.push("lumberjack"):h.push("lumberjack"),l.forEach(function(v){e.civic[v].display||(e.civic[v].workers=0,e.civic[v].display=!0)}),h.forEach(function(v){e.civic[v].display&&(e.civic.d_job===v&&(e.civic.d_job=l[0]),e.civic[l[0]].workers+=e.civic[v].workers,e.civic[v].workers=0,e.civic[v].assigned=0,e.civic[v].display=!1)}),e.race.casting&&(r||(e.race.casting.total-=e.race.casting.farmer,e.race.casting.farmer=0,na.farmer=0),Ve()),Oa(o),ts(c),aa("Food")}function Oe(r,a){if(!e.race[r])return a;switch(r){case"stubborn":a*=1+y.stubborn.vars()[0]/100;case"untrustworthy":a*=1+y.untrustworthy.vars()[0]/100}return Math.round(a)}function Ii(r){switch(r){case"high_pop":e.resource[e.race.species].amount=Math.round(e.resource[e.race.species].amount*y.high_pop.vars()[0]),e.civic.hasOwnProperty("garrison")&&(e.civic.garrison.workers=Math.round(e.civic.garrison.workers*y.high_pop.vars()[0]));break;case"kindling_kindred":if(e.race.smoldering)break;r0();break;case"smoldering":if(e.resource.Chrysotile.display=!0,e.race.kindling_kindred)break;r0();break;case"iron_wood":if(e.race.smoldering)break;En("Plywood");break;case"forge":Ve();break;case"soul_eater":mo("lumberjack");case"detritivore":case"carnivore":case"herbivore":Jc();break;case"unfathomable":for(Jc(),e.city.hasOwnProperty("surfaceDwellers")||(e.city.surfaceDwellers=[]);e.city.surfaceDwellers.lengthy.unfathomable.vars()[0]&&(e.city.surfaceDwellers.length=y.unfathomable.vars()[0]),e.race.psychic&&Ht();break;case"flier":aa("Stone"),aa("Brick"),En("Cement"),e.civic.cement_worker.display=!1,e.civic.cement_worker.workers=0,e.civic.cement_worker.assigned=0,dr("tech","cement"),dr("city","cement_plant"),dr("eden","eden_cement"),Ve();break;case"sappy":e.civic.d_job==="quarry_worker"&&(e.civic.d_job=e.race.carnivore||e.race.soul_eater?"hunter":"unemployed"),e.civic.quarry_worker.display=!1,e.civic.quarry_worker.workers=0,e.civic.quarry_worker.assigned=0,aa("Stone"),dr("tech","hammer"),dr("city","rock_quarry"),Ve();break;case"apex_predator":ts(["armor"]),dr("tech","armor");break;case"environmentalist":delete It[t("city_coal_power")],delete It[t("city_mana_engine")],delete It[t("city_oil_power")];break;case"terrifying":Object.keys(e.resource).forEach(function(a){e.resource[a].hasOwnProperty("trade")&&(e.resource[a].trade=0)}),e.city.market.active=!1,e.galaxy?.freighter?.count||(e.settings.showMarket=!1,e.settings.marketTabs===0&&(e.settings.marketTabs=1)),Oa(["city-trade"]),ts(["trade"]),dr("tech","trade"),dr("city","trade");break;case"slaver":$t("tech","slaves"),e.tech.slaves>=1&&($t("city","slave_pen",{count:0}),e.city.slave_pen.count>0&&!e.race.orbit_decayed&&(e.resource.Slave.display=!0),e.tech.slaves>=2&<());break;case"cannibalize":$t("tech","sacrifice"),e.tech.mining&&(M(d.city.s_alter),lt());break;case"magnificent":e.tech.theology>=2&&$t("city","shrine",d.city.shrine.struct().d);break;case"unified":e.tech.world_control=1,e.tech.unify=2,Fa($("#garrison"),!0),Fa($("#c_garrison"),!1);for(let a=0;a<3;a++){if(e.civic.foreign[`gov${a}`].occ){let i=N(e.civic.govern.type==="federation"?15:20);e.civic.garrison.max+=i,e.civic.garrison.workers+=i,e.civic.foreign[`gov${a}`].occ=!1}e.civic.foreign[`gov${a}`].buy=!1,e.civic.foreign[`gov${a}`].anx=!1,e.civic.foreign[`gov${a}`].sab=0,e.civic.foreign[`gov${a}`].act="none"}Pr("spy"),Pr("spyop"),Pr("combo_spy"),lt();break;case"noble":e.civic.taxes.tax_rate<10?e.civic.taxes.tax_rate=10:e.civic.taxes.tax_rate>20&&(e.civic.taxes.tax_rate=20);break;case"toxic":e.race.species==="troll"&&e.tech.science&&e.tech.science>=8&&le("godwin");break;case"thalassophobia":Oa(["city-wharf"]),ts(["wharf"]),dr("city","wharf");break;case"hooved":e.resource.Horseshoe.display=!0,e.race.hasOwnProperty("shoecnt")||(e.race.shoecnt=0),lt();break;case"slow":Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),Ae.w?(Ur("stop"),Ur("start")):window.location.reload();break;case"hyper":Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),Ae.w?(Ur("stop"),Ur("start")):window.location.reload();break;case"calm":e.tech.primitive>=3&&($t("city","meditation",d.city.meditation.struct().d),e.race.orbit_decayed||(e.resource.Zen.display=!0));break;case"blood_thirst":e.race.blood_thirst_count=1;break;case"deconstructor":e.resource.Nanite.display=!0,$t("city","nanite_factory",{count:1,Lumber:0,Chrysotile:0,Stone:0,Crystal:0,Furs:0,Copper:0,Iron:0,Aluminium:0,Cement:0,Coal:0,Oil:0,Uranium:0,Steel:0,Titanium:0,Alloy:0,Polymer:0,Iridium:0,Helium_3:0,Water:0,Deuterium:0,Neutronium:0,Adamantite:0,Bolognium:0,Orichalcum:0});break;case"shapeshifter":va(!1,!0);break;case"imitation":ko(!0),e.race.shapeshifter&&va(!1,!0,!1);break;case"evil":aa("Lumber"),aa("Furs"),aa("Plywood");break;case"psychic":e.tech.psychic&&(e.resource.Energy.display=!0,e.settings.showPsychic=!0);break;case"wish":e.tech.wish&&(e.settings.showWish=!0,e.race.wishStats&&e.race.wishStats.strong&&!e.race.strong&&(e.race.strong=.25,Ii("strong")));break;case"ocular_power":e.settings.showWish=!0,e.race.ocularPowerConfig={d:!1,p:!1,w:!1,t:!1,f:!1,c:!1,ds:0,order:[]},pi();break;case"ooze":!e.tech.high_tech&&e.race.species!=="custom"&&(e.race.species!=="sludge"||e.race.species!=="ultra_sludge")&&(e.race.gross_enabled=1),Yt(!0);break;default:break}}function ni(r,a){switch(r){case"high_pop":e.resource[e.race.species].amount=Math.round(e.resource[e.race.species].amount/y.high_pop.vars(a)[0]),e.civic.hasOwnProperty("garrison")&&(e.civic.garrison.workers=Math.round(e.civic.garrison.workers/y.high_pop.vars(a)[0]));break;case"kindling_kindred":if(e.race.smoldering)break;e.resource.Lumber.display=!0,e.tech.foundry&&(e.resource.Plywood.display=!0,Tt()),e.race.casting&&Ve(),$t("city","sawmill"),$t("city","graveyard"),$t("city","lumber_yard"),$t("tech","axe"),$t("tech","reclaimer"),$t("tech","saw"),(e.tech.axe||e.tech.reclaimer)&&!e.race.orbit_decayed&&(e.civic.lumberjack.display=!0);break;case"smoldering":if(En("Chrysotile"),e.race.kindling_kindred)break;e.resource.Lumber.display=!0,e.tech.foundry&&(e.resource.Plywood.display=!0,Tt()),e.race.casting&&Ve(),$t("city","sawmill"),$t("city","graveyard"),$t("city","lumber_yard"),$t("tech","axe"),$t("tech","reclaimer"),$t("tech","saw"),(e.tech.axe||e.tech.reclaimer)&&!e.race.orbit_decayed&&(e.civic.lumberjack.display=!0);break;case"iron_wood":e.tech.foundry&&(e.resource.Plywood.display=!0,Tt());break;case"forge":Ve();break;case"soul_eater":mo("lumberjack");case"detritivore":case"carnivore":case"herbivore":case"unfathomable":Jc(),e.race.psychic&&Ht();break;case"flier":aa("Stone"),aa("Brick"),$t("tech","cement"),e.tech.cement&&($t("city","cement_plant"),$t("eden","eden_cement"),e.resource.Cement.display=!0,e.civic.cement_worker.display=!0),Ve();break;case"sappy":aa("Stone"),$t("tech","hammer"),e.tech.mining>=1&&($t("city","rock_quarry",{count:0,asbestos:0}),(e.city.rock_quarry&&e.city.rock_quarry.count>0||e.race.lone_survivor)&&(e.civic.quarry_worker.display=!0)),Ve();break;case"apex_predator":$t("tech","armor");break;case"environmentalist":delete It[t("city_hydro_power")],delete It[t("city_wind_power")];break;case"terrifying":$t("tech","trade"),$t("city","trade"),e.tech.trade&&(e.settings.showMarket=!0,e.city.market.active=!0,Yr("market"));break;case"slaver":Oa(["city-slave_pen"]),ts(["slaves"]),dr("city","slave_pen"),dr("tech","slaves"),e.resource.Slave.amount=0,e.resource.Slave.max=0,e.resource.Slave.display=!1,Pr("slave"),lt();break;case"cannibalize":Oa(["city-s_alter"]),ts(["sacrifice"]),dr("tech","sacrifice"),delete e.city.s_alter,Pr("sacrifice"),lt();break;case"magnificent":Oa(["city-shrine"]),dr("city","shrine");break;case"thalassophobia":e.tech.wharf&&$t("city","wharf",{count:0});break;case"hooved":Oa(["city-horseshoe","space-horseshoe"]),e.resource.Horseshoe.display=!1,Pr("horseshoe"),lt();break;case"slow":Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),Ae.w?(Ur("stop"),Ur("start")):window.location.reload();break;case"hyper":Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),Ae.w?(Ur("stop"),Ur("start")):window.location.reload();break;case"calm":Oa(["city-meditation"]),e.resource.Zen.display=!1,dr("city","meditation");break;case"blood_thirst":delete e.race.blood_thirst_count;break;case"deconstructor":Oa(["city-nanite_factory"]),e.resource.Nanite.display=!1,dr("city","nanite_factory");break;case"shapeshifter":be($("#sshifter")),va();break;case"imitation":e.race.iTraits&&(Object.keys(e.race.iTraits).forEach(function(i){if(i!=="imitation"){let s=e.race.inactiveTraits[i]?e.race.inactiveTraits:e.race;if(e.race.iTraits[i]===0){let n=s[i];delete s[i],ni(i,n)}else s[i]=e.race.iTraits[i]}}),delete e.race.iTraits,e.race.shapeshifter&&va(!1,!0,!1),os());break;case"evil":aa("Lumber"),aa("Furs"),aa("Plywood");break;case"psychic":e.resource.Energy.display=!1,e.settings.showPsychic=!1;break;case"wish":e.race.ocular_power||(e.settings.showWish=!1),e.race.wishStats&&e.race.wishStats.strong&&(delete e.race.strong,ni("strong"));break;case"ocular_power":e.tech.wish||(e.settings.showWish=!1);break;case"ooze":delete e.race.gross_enabled,Yt(!0);break;default:break}}function ko(r){if(e.race.imitation&&e.race.srace){e.race.iTraits||(e.race.iTraits={}),e.race.shapeshifter&&(T[e.race.srace].type==="hybrid"&&T[e.race.srace].hybrid.includes(e.race.ss_genus)||e.race.ss_genus===T[e.race.srace].type)&&va("none",!0,!0),Object.keys(e.race.inactiveTraits).forEach(function(i){e.race[i]=e.race.inactiveTraits[i]}),e.race.inactiveTraits={};let a=[];if(T[e.race.srace].type==="hybrid"?T[e.race.srace].hybrid.forEach(function(i){Object.keys(fr[i].traits).forEach(function(s){e.race[s]||a.push(s)})}):Object.keys(fr[T[e.race.srace].type].traits).forEach(function(i){e.race[i]||a.push(i)}),["custom","hybrid"].includes(e.race.srace)){let i=[T[e.race.srace].fanaticism,"evil"];Object.keys(T[e.race.srace].traits).forEach(function(s){y[s].val=0?e.race[n]=y.shapeshifter.vars()[0]:e.race[n]=y.shapeshifter.vars()[1],Ii(n),s.push(n))}),e.race.ss_genus=r),a){be($("#sshifter")),e.race.ss_genus=e.race.hasOwnProperty("ss_genus")?e.race.ss_genus:"none";let n="",o=e.race.imitation?T[e.race.srace].type==="hybrid"?T[e.race.srace].hybrid:[T[e.race.srace].type]:[],c=T[e.race.species].type==="hybrid"?T[e.race.species].hybrid:[T[e.race.species].type];Object.keys(fr).forEach(function(l){!["synthetic","eldritch","hybrid",...c,...o].includes(l)&&e.stats.achieve[`genus_${l}`]&&e.stats.achieve[`genus_${l}`].l>0&&(n+=`{{ genus('${l}') }}`)}),$("#sshifter").append(`${t("trait_shapeshifter_name")}: + + {{ genus('none') }}${n} + `),V({el:"#sshifter",data:e.race,methods:{setShape(l){va(l)},genus(l){return t(`genelab_genus_${l}`)}}})}e.race.ss_traits=s,os(),(r||!a||i)&&(tt("Genetics"),Ct(),or(),de())}function os(){if(Object.keys(e.race.inactiveTraits).forEach(function(r){e.race[r]=e.race.inactiveTraits[r]}),e.race.inactiveTraits={},e.race.herbivore&&e.race.carnivore){let r=1;e.race.inactiveTraits.herbivore=e.race.herbivore,e.race.inactiveTraits.carnivore=e.race.carnivore,delete e.race.herbivore,delete e.race.carnivore,e.race.forager!==r&&(Xe("forager",{set:r,force:!0}),ni("carnivore"),ni("herbivore"),Ii("forager"))}else e.race.forager&&(delete e.race.forager,ni("forager"))}function ie(r){if(e.race.empowered&&!["empowered","catnip","anise"].includes(r)){let a=y[r].val;if(a>=y.empowered.vars()[0]&&a<=y.empowered.vars()[1])switch(e.race[r]){case .1:return .25;case .25:return .5;case .5:return 1;case 1:return 2;case 2:return 3;case 3:return 4;case 4:return 4}}return e.race[r]}function Xe(r,a){if(a=a||{},e.race[r]&&!a.force)switch(e.race[r]){case .1:return e.race[r]=a.down?.1:.25,!a.down;case .25:return e.race[r]=a.down?.1:.5,!0;case .5:return e.race[r]=a.down?.25:1,!0;case 1:return e.race[r]=a.down?.5:2,!0;case 2:return e.race[r]=a.down?1:3,!0;case 3:return e.race[r]=a.down?2:4,!0;case 4:return e.race[r]=a.down?3:4,!!a.down}else if(a.set)return e.race[r]=a.set,!0;return!1}function Pe(r){if(e.race.unfathomable&&e.city.surfaceDwellers&&e.city.surfaceDwellers.includes(r)&&e.city.captive_housing){let a=e.city.surfaceDwellers.indexOf(r),i=e.city.captive_housing[`race${a}`];if(i>100&&(i=100),i>e.civic.torturer.workers){let n=i-e.civic.torturer.workers;i-=Math.ceil(n/3)}let s=(e.stats.achieve.nightmare&&e.stats.achieve.nightmare.mg?e.stats.achieve.nightmare.mg:0)/5;return i/100*s}return 0}function Da(r,a,i){let s=i?fr[T[i].type].traits.artifical:e.race.artifical;switch(r){case"name":{let n={hooved:a0(!1,i),promiscuous:s?t("trait_promiscuous_synth_name"):y.promiscuous.name,weak:i==="dwarf"?t("trait_drunk_name"):y.weak.name,spiritual:e.race.universe==="evil"&&e.civic.govern.type!="theocracy"?t("trait_manipulator_name"):y.spiritual.name};return a?n[a]?n[a]:y[a].name:n}case"desc":{let n={hooved:a0(!0,i),promiscuous:s?t("trait_promiscuous_synth"):y.promiscuous.desc,weak:i==="dwarf"?t("trait_drunk"):y.weak.desc,spiritual:e.race.universe==="evil"&&e.civic.govern.type!="theocracy"?t("trait_manipulator"):y.spiritual.desc,blurry:e.race.warlord?t("trait_blurry_warlord"):y.blurry.desc,playful:e.race.warlord?t("trait_playful_warlord"):y.playful.desc,befuddle:e.race.warlord?t("trait_befuddle_warlord"):y.befuddle.desc};return a?n[a]?n[a]:y[a].desc:n}}}function a0(r,a=e.race.species){let i=a===e.race.species&&e.race.maintype||T[a].type;return a==="sludge"||a==="ultra_sludge"?r?t("trait_hooved_slime"):t("trait_hooved_slime_name"):["cath","wolven","dracnid","seraph","cyclops","kobold","tuskin","sharkin","beholder","djinn"].includes(a)?r?t(`trait_hooved_${a}`):t(`trait_hooved_${a}_name`):["humanoid","avian","plant","fungi","reptilian","fey","synthetic"].includes(i)?r?t(`trait_hooved_${i}`):t(`trait_hooved_${i}_name`):r?y.hooved.desc:y.hooved.name}var ze={grassland:{label:t("biome_grassland_name"),desc:t("biome_grassland"),vars(){return e.race.rejuvenated?[1.25]:[1.2]},wiki:["%"]},oceanic:{label:t("biome_oceanic_name"),desc:t("biome_oceanic"),vars(){return e.race.rejuvenated?[1.25,1.12,.92]:[1.12,1.06,.95]},wiki:["%","%","%"]},forest:{label:t("biome_forest_name"),desc:t("biome_forest"),vars(){return e.race.rejuvenated?[1.35]:[1.2]},wiki:["%"]},desert:{label:t("biome_desert_name"),desc:t("biome_desert"),vars(){return e.race.rejuvenated?[1.35,1.18,.6]:[1.2,1.1,.75]},wiki:["%","%","%"]},volcanic:{label:t("biome_volcanic_name"),desc:t("biome_volcanic"),vars(){return e.race.rejuvenated?[.8,1.25,1.15]:[.9,1.12,1.08]},wiki:["%","%","%"]},tundra:{label:t("biome_tundra_name"),desc:t("biome_tundra"),vars(){return e.race.rejuvenated?[1.5,.8]:[1.25,.9]},wiki:["%","%"]},savanna:{label:t("biome_savanna_name"),desc:t("biome_savanna"),vars(){return e.race.rejuvenated?[1.18,1.25,.75]:[1.1,1.18,.8]},wiki:["%","%","%"]},swamp:{label:t("biome_swamp_name"),desc:t("biome_swamp"),vars(){return e.race.rejuvenated?[1.6,1.35,1.15,.78]:[1.4,1.25,1.1,.88]},wiki:["%","%","%","%"]},ashland:{label:t("biome_ashland_name"),desc:t("biome_ashland"),vars(){return e.race.rejuvenated?[.55,1.35,1.2]:[.62,1.25,1.1]},wiki:["%","%","%"]},taiga:{label:t("biome_taiga_name"),desc:t("biome_taiga"),vars(){return e.race.rejuvenated?[1.2,1.65,.88]:[1.1,1.5,.92]},wiki:["%","%","%"]},hellscape:{label:t("biome_hellscape_name"),desc:t("biome_hellscape"),vars(){return e.race.rejuvenated?[.2]:[.25]},wiki:["%"]},eden:{label:t("biome_eden_name"),desc:t("biome_eden")}},et={toxic:{label:t("planet_toxic"),desc:t("planet_toxic_desc"),vars(){return e.race.rejuvenated?[2,1.5]:[1,1.25]},wiki:["A","-%"]},mellow:{label:t("planet_mellow"),desc:t("planet_mellow_desc"),vars(){return e.race.rejuvenated?[2,3,.88]:[1.5,2,.9]},wiki:["%","A","%"]},rage:{label:t("planet_rage"),desc:t("planet_rage_desc"),vars(){return e.race.rejuvenated?[1.1,1.05,1]:[1.05,1.02,1]},wiki:["%","%","A"]},stormy:{label:t("planet_stormy"),desc:t("planet_stormy_desc")},ozone:{label:t("planet_ozone"),desc:t("planet_ozone_desc"),vars(){return e.race.rejuvenated?[.18]:[.25]},wiki:["-A"]},magnetic:{label:t("planet_magnetic"),desc:t("planet_magnetic_desc"),vars(){return e.race.rejuvenated?[2,150,.98]:[1,100,.985]},wiki:["A","A","%"]},trashed:{label:t("planet_trashed"),desc:t("planet_trashed_desc"),vars(){return e.race.rejuvenated?[.8,1.2]:[.75,1]},wiki:["%","%"]},elliptical:{label:t("planet_elliptical"),desc:t("planet_elliptical_desc")},flare:{label:t("planet_flare"),desc:t("planet_flare_desc")},dense:{label:t("planet_dense"),desc:t("planet_dense_desc"),vars(){return e.race.rejuvenated?[1.5,1.2,1.35]:[1.2,1,1.2]},wiki:["%","A","%"]},unstable:{label:t("planet_unstable"),desc:t("planet_unstable_desc")},permafrost:{label:t("planet_permafrost"),desc:t("planet_permafrost_desc"),vars(){return e.race.rejuvenated?[.7,125]:[.75,100]},wiki:["%","A"]},retrograde:{label:t("planet_retrograde"),desc:t("planet_retrograde_desc")},kamikaze:{label:t("planet_kamikaze"),desc:t("planet_kamikaze_desc"),vars(){return[100,-1]},wiki:["A","A"]}};function Kr(){let r=e.city.calendar.orbit;return e.city.ptrait.includes("kamikaze")&&(r-=e.city.calendar.year,(!e.race.truepath||e.race.lone_survivor||e.tech.titan_ai_core||e.race.tidal_decay)&&r<100&&(r=100)),r}function i0(){return e.race.hasOwnProperty("shell_color")?t(`color_${e.race.shell_color}`):t("color_green")}function vp(){return e.race.hasOwnProperty("fox_color")?t(`color_${e.race.fox_color}`):t("color_red")}function Uc(r){r=r||[];let a=Object.keys(T).filter(function(s){return!["custom","hybrid"].includes(s)&&!r.includes(s)&&T[s].basic()}),i=xn(a);return a[i]}function pi(){if(!e.settings.tabLoad&&(e.settings.civTabs!==2||e.settings.govTabs!==7))return;let r=$("#supernatural");be(r),e.race.wish&&e.tech.wish&&e.race.wishStats&&(yp(r),e.tech.wish>=2&&bp(r)),e.race.ocular_power&&wp(r)}function yp(r){let a=$('
');r.append(a),a.append($(`
${t("tech_minor_wish")} -
`));let i=$('
');a.append(i),i.append('
'),i.append(`
`),i.append('
'),i.append(`
`),i.append(`
`),i.append(`
`),i.append(`
`),i.append(`
`),V({el:"#minorWish",data:e.race.wishStats,methods:{know(){if(e.race.wishStats.minor===0){e.race.wishStats.minor=y.wish.vars()[0]/3;let s=["inspire"];switch(!e.race.lone_survivor&&!e.race.cataclysm&&!e.race.orbit_decay&&s.push("know"),e.tech.science&&(e.tech.science>=1&&e.tech.science<=3||e.tech.high_tech&&e.tech.high_tech>=3&&e.tech.science>=4&&e.tech.science<=6||e.tech.high_tech&&e.tech.high_tech>=4&&e.tech.science===7||e.tech.space&&e.tech.space>=3&&e.tech.science===8&&e.tech.luna||e.tech.alpha&&e.tech.alpha>=2&&e.tech.science===11||e.tech.high_tech&&e.tech.high_tech>=12&&e.tech.science===12||e.tech.infernite&&e.tech.infernite>=2&&e.tech.science===13||e.tech.neutron&&e.tech.science===14||e.tech.xeno&&e.tech.xeno>=4&&e.tech.science===15||e.tech.high_tech&&e.tech.high_tech>=16&&e.tech.science===16||e.tech.conflict&&e.tech.conflict>=5&&e.tech.science===17||e.tech.high_tech&&e.tech.high_tech>=17&&e.tech.science===18||e.tech.high_tech&&e.tech.high_tech>=18&&e.tech.science===19||e.tech.asphodel&&e.tech.asphodel>=3&&e.tech.science===21||e.tech.asphodel&&e.tech.asphodel>=8&&e.tech.science===22)&&s.push("science"),s[Math.floor(R(0,s.length))]){case"inspire":{e.race.inspired=Math.floor(R(300,600));let o=t("event_inspiration");L(o,!1,!1,["events","major_events"]);break}case"know":{let o=Math.floor(R(e.resource.Knowledge.max/5,e.resource.Knowledge.max/2));e.resource.Knowledge.amount+=o,e.resource.Knowledge.amount>e.resource.Knowledge.max&&(e.resource.Knowledge.amount=e.resource.Knowledge.max),L(t("wish_know",[e.resource.Knowledge.name,Me(o)]),"warning",!1,["events"]);break}case"science":{switch(e.tech.science++,e.tech.science){case 2:e.city.library={count:0};break;case 8:e.race.toxic&&e.race.species==="troll"&&le("godwin");break;case 9:e.space.observatory={count:0,on:0};break;case 12:e.interstellar.laboratory={count:0,on:0};break}Ct(),de();let o={2:"library",3:"thesis",4:"research_grant",5:"scientific_journal",6:"adjunct_professor",7:"tesla_coil",8:"internet",9:"observatory",12:"laboratory",13:"virtual_assistant",14:"dimensional_readings",15:"quantum_entanglement",16:"expedition",17:"subspace_sensors",18:"alien_database",19:"orichalcum_capacitor",20:"advanced_biotech"},c=typeof d.tech[o[e.tech.science]].title=="function"?d.tech[o[e.tech.science]].title():d.tech[o[e.tech.science]].title;L(t("wish_tech",[c]),"warning",!1,["progress"]);break}}}},money(){if(e.race.wishStats.minor===0){e.race.wishStats.minor=y.wish.vars()[0]/3;let s=["money","robbery"];switch(e.race.wishStats.tax===0&&s.push("taxes"),s[Math.floor(R(0,s.length))]){case"money":{let o=Math.floor(R(1,Math.round(e.resource.Money.max/8)));e.resource.Money.amount+=o,e.resource.Money.amount>e.resource.Money.max&&(e.resource.Money.amount=e.resource.Money.max),L(t("wish_cash",[Me(o)]),"warning",!1,["events"]);break}case"taxes":{e.race.wishStats.tax=5,e.civic.taxes.rax_rate=Wi().max,L(t("wish_taxes"),"warning",!1,["events"]);break}case"robbery":{let o=Math.floor(R(1,Math.round(e.resource.Money.max/8)));e.resource.Money.amount+=o,e.resource.Money.amount>e.resource.Money.max&&(e.resource.Money.amount=e.resource.Money.max);let c=Math.floor(R(0,10));e.race.wishStats.bad+=Math.floor(R(50,100)),L(t("wish_robbery",[t(`wish_robbery${c}`),Me(o)]),"warning",!1,["events"]);break}}}},res(){if(e.race.wishStats.minor===0){e.race.wishStats.minor=y.wish.vars()[0]/3;let s=["useless","common","rare","stolen","2xcommon","2xrare"],n=s[Math.floor(R(0,s.length))],o=[];if(["Lumber","Stone","Furs","Copper","Iron","Aluminium","Cement","Coal","Oil","Uranium","Steel","Titanium","Alloy","Polymer","Iridium","Helium_3","Crystal","Chrysotile"].forEach(function(c){e.resource[c].display&&e.resource[c].amount*1.05e.resource[h].max&&(e.resource[h].amount=e.resource[h].max)),l.push(v)}),["2xcommon","2xrare"].includes(n)?L(t("wish_gain_double",[Me(l[0]),e.resource[c[0]].name,Me(l[1]),e.resource[c[1]].name]),"warning",!1,["events"]):["common","rare"].includes(n)?L(t("wish_gain_res",[Me(l[0]),e.resource[c[0]].name]),"warning",!1,["events"]):n==="stolen"&&(e.race.wishStats.bad+=Math.floor(R(50,100)),L(t("wish_steal_res",[Me(l[0]),e.resource[c[0]].name]),"warning",!1,["events"]))}}},love(){if(e.race.wishStats.minor===0){e.race.wishStats.minor=y.wish.vars()[0]/3;let s=["pet"],n=["gov0","gov1","gov2"];e.race.truepath&&!e.tech.isolation&&e.tech.rival&&n.push("gov3"),n.forEach(function(c){e.civic.foreign[c].hstl>0&&!e.civic.foreign[c].anx&&!e.civic.foreign[c].buy&&!e.civic.foreign[c].occ&&s.push(c)});let o=s[Math.floor(R(0,s.length))];if(o==="pet"){let c=Jt.pet.effect();L(c,!1,!1,["events","minor_events"])}else e.civic.foreign[o].hstl=0,L(t("wish_love_gov",[mt(o.substring(3))]),!1,!1,["minor_events"])}},excite(){if(e.race.wishStats.minor===0){e.race.wishStats.minor=y.wish.vars()[0]/4;let s=en("minor");if(s.length>0){let n=s[Math.floor(R(0,s.length))],o=Jt[n].effect();L(o,!1,!1,["events","minor_events"]),e.m_event.l=n}}},famous(){if(e.race.wishStats.minor===0){e.race.wishStats.minor=y.wish.vars()[0]/3;let s=["notorious","reputable"],n=Math.floor(R(0,10)),o=Bs(!1,!0),c=o[Math.floor(R(0,o.length))];switch(s[Math.floor(R(0,s.length))]){case"notorious":{e.race.wishStats.fame=-10;let h=n===8?[c]:[];L(t("wish_famous",[t(`wish_notorious${n}`,h)]),"warning",!1,["events"]);break}case"reputable":{e.race.wishStats.fame=10;let h=n===4?[c]:[];L(t("wish_famous",[t(`wish_reputable${n}`,h)]),"warning",!1,["events"]);break}}}},strength(){if(e.race.wishStats.minor===0){e.race.wishStats.minor=y.wish.vars()[0]/3;let s=["troops"];switch(e.race.strong||s.push("trait"),e.tech.military&&(e.tech.military===1||e.tech.military===2&&e.tech.explosives||e.tech.military===3&&e.tech.oil||e.tech.military===4&&e.tech.high_tech&&e.tech.high_tech>=4||e.tech.military===5&&e.tech.mass||e.tech.military===6&&e.tech.high_tech&&e.tech.high_tech>=9&&e.tech.elerium||e.tech.military===7&&e.tech.high_tech&&e.tech.high_tech>=13||e.tech.military===8&&e.tech.high_tech&&e.tech.high_tech>=14&&e.tech.science&&e.tech.science>=15&&e.tech.infernite||e.tech.military===9&&e.tech.science&&e.tech.science>=18||e.tech.military===10&&e.tech.high_tech&&e.tech.high_tech>=18||e.tech.military===11&&e.tech.asphodel&&e.tech.asphodel>=5)&&s.push("military"),s[Math.floor(R(0,s.length))]){case"troops":{e.race.wishStats.troop<25&&(e.race.wishStats.troop++,L(t("wish_troop"),"warning",!1,["events"]));break}case"trait":{e.race.wishStats.strong=!0,Xe("strong",{set:.25,force:!0}),L(t("wish_muscle"),"warning",!1,["events"]);break}case"military":{switch(e.tech.military++,e.tech.military){case 7:e.race.species==="sharkin"&&le("laser_shark");break}Ct(),de();let o={2:"bows",3:"flintlock_rifle",4:"machine_gun",5:"bunk_beds",6:"rail_guns",7:"laser_rifles",8:"plasma_rifles",9:"disruptor_rifles",10:"gauss_rifles",11:"cyborg_soldiers",12:"ethereal_weapons"},c=typeof d.tech[o[e.tech.military]].title=="function"?d.tech[o[e.tech.military]].title():d.tech[o[e.tech.military]].title;L(t("wish_tech",[c]),"warning",!1,["progress"]);break}}}},influence(){if(e.race.wishStats.minor===0){e.race.wishStats.minor=y.wish.vars()[0]/3;let s=["magazine"];switch(e.race.wishStats.astro||s.push("astro"),e.race.wishStats.prof<25&&e.civic.professor.display&&s.push("professor"),s[Math.floor(R(0,s.length))]){case"magazine":{L(t("wish_magazine",[T[e.race.species].name]),"warning",!1,["events"]);break}case"astro":{e.race.wishStats.astro=!0,L(t("wish_astro"),"warning",!1,["events"]);break}case"professor":{e.race.wishStats.prof++,L(t("wish_prof"),"warning",!1,["events"]);break}}}},wish(s){return s===0?`${t("power_available")}`:`${s}`},label(s){return t(`wish_${s}`)},know_f(){return e.resource.Knowledge.name},money_f(){return t("resource_Money_name")}}}),["Know","Money","Res","Love","Excite","Fame","Strength","Influence"].forEach(function(s){ve(`wish${s}`,function(){switch(s){case"Know":return t("wish_for",[e.resource.Knowledge.name]);case"Money":return t("wish_for",[t("resource_Money_name")]);case"Res":return t("wish_for",[t("wish_resources")]);case"Love":return t("wish_for",[t("wish_love")]);case"Excite":return t("wish_for",[t("wish_event")]);case"Fame":return t("wish_for",[t("wish_fame")]);case"Strength":return t("wish_for",[t("wish_strength")]);case"Influence":return t("wish_for",[t("wish_influence")])}},{elm:`#wish${s}`})})}function bp(r){let a=$('
');r.append(a),a.append($(`
${t("tech_major_wish")} -
`));let i=$('
');a.append(i),i.append('
'),i.append(`
`),i.append(`
`),i.append(`
`),i.append(`
`),i.append(`
`),i.append(`
`),i.append(`
`),V({el:"#majorWish",data:e.race.wishStats,methods:{money(){if(e.race.wishStats.major===0){e.race.wishStats.major=y.wish.vars()[0];let s=["money","robbery"];switch(e.race.wishStats.casino||s.push("casino"),s[Math.floor(R(0,s.length))]){case"money":{let o=Math.floor(R(Math.round(e.resource.Money.max/12),Math.round(e.resource.Money.max/4)));e.resource.Money.amount+=o,e.resource.Money.amount>e.resource.Money.max&&(e.resource.Money.amount=e.resource.Money.max),L(t("wish_cash",[Me(o)]),"warning",!1,["events"]);break}case"robbery":{let o=Math.floor(R(Math.round(e.resource.Money.max/12),Math.round(e.resource.Money.max/4)));e.resource.Money.amount+=o,e.resource.Money.amount>e.resource.Money.max&&(e.resource.Money.amount=e.resource.Money.max);let c=Math.floor(R(0,10));e.race.wishStats.bad+=Math.floor(R(100,200)),L(t("wish_robbery",[t(`wish_robbery${c}`),Me(o)]),"warning",!1,["events"]);break}case"casino":{e.race.wishStats.casino=!0;let o=Math.floor(R(0,10));L(t("wish_casino",[t(`wish_casino${o}`),Ze("casino")]),"warning",!1,["events"])}}}},res(){if(e.race.wishStats.major===0){e.race.wishStats.major=y.wish.vars()[0];let s=["useless","common","rare","stolen","2xcommon","2xrare"],n=s[Math.floor(R(0,s.length))],o=[];if(["Lumber","Stone","Furs","Copper","Iron","Aluminium","Cement","Coal","Oil","Uranium","Steel","Titanium","Alloy","Polymer","Iridium","Helium_3","Crystal","Chrysotile"].forEach(function(c){e.resource[c].display&&e.resource[c].amount*1.05e.resource[h].max&&(e.resource[h].amount=e.resource[h].max)),l.push(v)}),["2xcommon","2xrare"].includes(n)?L(t("wish_gain_double",[Me(l[0]),e.resource[c[0]].name,Me(l[1]),e.resource[c[1]].name]),"warning",!1,["events"]):["common","rare"].includes(n)?L(t("wish_gain_res",[Me(l[0]),e.resource[c[0]].name]),"warning",!1,["events"]):n==="stolen"&&(e.race.wishStats.bad+=Math.floor(R(100,200)),L(t("wish_steal_res",[Me(l[0]),e.resource[c[0]].name]),"warning",!1,["events"]))}}},plasmid(){if(e.race.wishStats.major===0){e.race.wishStats.major=y.wish.vars()[0];let s=["fake","future"];switch(e.race.warlord||(e.tech.blackhole&&e.tech.blackhole>=5&&e.interstellar.mass_ejector&&e.interstellar.mass_ejector.count>=1?s.push("blackhole"):!e.race.cataclysm&&!e.race.lone_survivor&&e.race.species!=="sludge"&&s.push("mad")),s[Math.floor(R(0,s.length))]){case"fake":{let o=Math.floor(R(100,5e4));e.resource.Knockoff.amount=o,e.resource.Knockoff.display=!0,L(t("wish_plasmid_gain",[o,t("resource_Knockoff_plural_name")]),"warning",!1,["events"]);break}case"future":{let o=Math.floor(R(2,e.tech.science+2));e.stats.pdebt+=o,e.race.wishStats.plas+=o,e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=o,e.stats.antiplasmid+=o):(e.prestige.Plasmid.count+=o,e.stats.plasmid+=o),L(t("wish_plasmid_gain",[o,t(e.race.universe==="antimatter"?"resource_AntiPlasmid_plural_name":"resource_Plasmid_plural_name")]),"warning",!1,["events"]);break}case"mad":{$("body").addClass("nuke");let o=$('
');$("body").append(o),setTimeout(function(){o.addClass("burn")},500),setTimeout(function(){o.addClass("b")},600),setTimeout(function(){e.civic.mad.armed=!1,Un()},4e3);break}case"blackhole":{let o=$('
');$("body").append(o),setTimeout(function(){o.addClass("burn")},125),setTimeout(function(){o.addClass("b")},150),setTimeout(function(){o.addClass("c")},2e3),setTimeout(function(){Wn()},4e3)}}}},power(){if(e.race.wishStats.major===0){e.race.wishStats.major=y.wish.vars()[0];let s=["potato"];switch(!e.race.warlord&&!e.race.wishStats.ship&&(e.tech.shipyard||e.tech.science&&e.tech.science>=16)&&s.push("ship"),e.race.wishStats.gov||s.push("government"),s[Math.floor(R(0,s.length))]){case"potato":{e.race.wishStats.potato++,L(t("wish_energized"),"warning",!1,["events"]);break}case"ship":{e.race.wishStats.ship=!0,L(t("wish_ship"),"warning",!1,["events"]);break}case"government":e.race.wishStats.gov=!0,e.civic.govern.type="dictator",L(t("wish_gov"),"warning",!1,["events"])}}},adoration(){if(e.race.wishStats.major===0){e.race.wishStats.major=y.wish.vars()[0];let s=["priest"];switch(!e.race.wishStats.temple&&!e.race.cataclysm&&!e.race.lone_survivor&&!e.race.warlord&&s.push("temple"),!e.race.wishStats.zigg&&!e.race.lone_survivor&&!e.race.warlord&&s.push("zigg"),s[Math.floor(R(0,s.length))]){case"priest":{e.civic.priest.display&&e.race.wishStats.priest<25?(e.race.wishStats.priest++,L(t("wish_priest"),"warning",!1,["events"])):L(t("wish_priest_fail"),"warning",!1,["events"]);break}case"temple":{e.race.wishStats.temple=!0,L(t("wish_temple",[Ze("temple")]),"warning",!1,["events"]);break}case"zigg":e.race.wishStats.zigg=!0,L(t("wish_temple",[t("space_red_ziggurat_title")]),"warning",!1,["events"])}}},thrill(){if(e.race.wishStats.major===0){e.race.wishStats.major=y.wish.vars()[0];let s=en("major");if(s.length>0){let n=s[Math.floor(R(0,s.length))],o=Jt[n].effect();L(o,"caution",!1,["events","major_events"]),e.m_event.l=n}}},peace(){if(e.race.wishStats.major===0){e.race.wishStats.major=y.wish.vars()[0];let s=["flower"];["gov0","gov1","gov2"].forEach(function(c){!e.civic.foreign[c].anx&&!e.civic.foreign[c].buy&&!e.civic.foreign[c].occ&&!e.tech.world_control&&s.push(c)}),e.race.truepath&&!e.tech.isolation&&e.tech.rival&&e.civic.foreign.gov3.hstl>0&&s.push("gov3"),!e.race.truepath&&e.tech.piracy>1&&s.push("piracy"),e.race.truepath&&e.space.syndicate&&s.push("syndicate");let o=s[Math.floor(R(0,s.length))];if(["gov0","gov1","gov2"].includes(o))e.civic.foreign[o].hstl=0,e.civic.foreign[o].anx=!0,L(t("wish_peace_join",[mt(o.substring(3))]),"warning",!1,["events"]);else switch(o){case"flower":L(t("wish_peace_flower"),"warning",!1,["events"]);break;case"gov3":e.civic.foreign[o].hstl=0;break;case"piracy":e.tech.piracy=Math.floor(R(1,e.tech.piracy)),L(t("wish_piracy"),"warning",!1,["events"]);break;case"syndicate":Object.keys(e.space.syndicate).forEach(function(c){e.space.syndicate[c]>10&&(e.space.syndicate[c]=Math.floor(R(10,e.space.syndicate[c])))}),L(t("wish_piracy"),"warning",!1,["events"]);break}}},greatness(){if(e.race.wishStats.major===0){e.race.wishStats.major=y.wish.vars()[0];let s=["wonder"],n=Xt();switch((!e.race.lone_survivor&&!e.race.warlord&&!e.stats.feat.wish||e.stats.feat.wish&&e.stats.feat.wish=2&&c.push("gardens"):!e.interstellar.hasOwnProperty("wonder_gardens")&&e.tech.alpha&&e.tech.alpha>=2&&c.push("gardens")}if(c.length>0){switch(c[Math.floor(R(0,c.length))]){case"lighthouse":e.city.wonder_lighthouse={count:1};break;case"pyramid":e.city.wonder_pyramid={count:1};break;case"statue":e.space.wonder_statue={count:1};break;case"gardens":e[e.race.warlord?"portal":e.race.truepath?"space":"interstellar"].wonder_gardens={count:1};break}L(t("wish_wonder"),"warning",!1,["events"])}else L(t("wish_no_wonder"),"warning",!1,["events"]);break}case"feat":{We("wish",e.race.universe==="micro");break}}}},wish(s){return s===0?`${t("power_available")}`:`${s}`},label(s){return t(`wish_${s}`)},money_f(){return t("resource_Money_name")}}}),["BigMoney","BigRes","Plasmid","Power","Adoration","Thrill","Peace","Greatness"].forEach(function(s){ve(`wish${s}`,function(){switch(s){case"BigMoney":return t("wish_for",[t("wish_big_money")]);case"BigRes":return t("wish_for",[t("wish_big_resources")]);case"Plasmid":return t("wish_for",[t("wish_plasmid")]);case"Power":return t("wish_for",[t("wish_power")]);case"Adoration":return t("wish_for",[t("wish_adoration")]);case"Thrill":return t("wish_for",[t("wish_thrill")]);case"Peace":return t("wish_for",[t("wish_peace")]);case"Greatness":return t("wish_for",[t("wish_greatness")])}},{elm:`#wish${s}`})})}function wp(r){let a=$('
');r.append(a),a.append($(`
${t("trait_ocular_power_name")} -
`));let i=$('
');a.append(i),i.append(`
${t("ocular_disintegration")}
`),i.append(`
${t("ocular_petrification")}
`),i.append(`
${t("ocular_wound")}
`),i.append(`
${t("ocular_telekinesis")}
`),i.append(`
${t("ocular_fear")}
`),i.append(`
${t("ocular_charm")}
`),V({el:"#ocularPower",data:e.race.ocularPowerConfig,methods:{pow(s){let n=y.ocular_power.vars()[0];if(e.race.ocularPowerConfig.order||(e.race.ocularPowerConfig.order=[]),e.race.ocularPowerConfig[s])e.race.ocularPowerConfig.order.includes(s)||e.race.ocularPowerConfig.order.push(s);else{let l=e.race.ocularPowerConfig.order.indexOf(s);l>-1&&e.race.ocularPowerConfig.order.splice(l,1);return}if(e.race.ocularPowerConfig.order.length>n){let l=e.race.ocularPowerConfig.order.shift();e.race.ocularPowerConfig[l]=!1,pi()}},max(){let s=0;return["d","p","w","t","f","c"].forEach(function(n){e.race.ocularPowerConfig[n]&&s++}),t("ocular_max",[s,y.ocular_power.vars()[0]])}}}),["disintegration","petrification","wound","telekinesis","fear","charm"].forEach(function(s){ve(`ocular${s}`,function(){switch(s){case"disintegration":let n=50*(y.ocular_power.vars()[1]/100);return t(`ocular_${s}_desc`,[n]);case"petrification":return t(`ocular_${s}_desc`,[e.resource.Stone.name]);case"wound":let o=60*(y.ocular_power.vars()[1]/100);return t(`ocular_${s}_desc`,[o]);case"telekinesis":let c=20*(y.ocular_power.vars()[1]/100);return t(`ocular_${s}_desc`,[c]);case"fear":return t(`ocular_${s}_desc`);case"charm":let l=70*(y.ocular_power.vars()[1]/100);return t(`ocular_${s}_desc`,[l])}},{elm:`#ocular${s}`})})}function Ht(){if(!e.settings.tabLoad&&(e.settings.civTabs!==2||e.settings.govTabs!==6))return;let r=$("#psychicPowers");be(r),e.race.psychic&&e.tech.psychic&&($p(r),kp(r),e.tech.psychic>=2&&xp(r),e.tech.psychic>=3&&(e.race.psychicPowers.cash||(e.race.psychicPowers.cash=0),qp(r)),e.tech.psychicthrall&&e.tech.unfathomable&&e.race.unfathomable&&(e.tech.psychicthrall>=2&&Pp(r),Mp(r)))}function $p(r){let a=$('
');r.append(a),a.append($(`
${t("psychic_boost_title")}
`));let i=$("
");a.append(i);let s="";if(Object.keys(Ut).forEach(function(l){e.resource[l].display&&(s+=`${e.resource[l].name}`)}),i.append(`
${s}
`),a.append('
'),e.tech.psychic>=4){let l=$(`
${t("psychic_channel")}
`),h=$('{{ c.boost }}'),v=$(`«`),_=$(`»`);l.append(v),l.append(h),l.append(_),a.append(l)}let n=e.tech.psychic>=5?60:75,o=e.stats.achieve.nightmare&&e.stats.achieve.nightmare.mg?e.stats.achieve.nightmare.mg:0;V({el:"#psychicBoost",data:{b:e.race.psychicPowers.boost,c:e.tech.psychic>=4?e.race.psychicPowers.channel:{}},methods:{boostVal(){e.resource.Energy.amount>=n&&(e.resource.Energy.amount-=n,e.race.psychicPowers.boostTime=72*o)},add(){let l=ke();for(let h=0;h0;h++)e.race.psychicPowers.channel.boost--},boost(l){return t("psychic_boost_button",[e.resource[l]?e.resource[l].name:"N/A",n])},boostTime(){return e.race.psychicPowers.boostTime>0?t("psychic_boost_time",[e.race.psychicPowers.boostTime]):""}}});let c=document.getElementById("psyhscrolltarget");c.addEventListener("wheel",l=>{l.preventDefault(),c.scrollLeft+=l.deltaY}),ve("psychicBoost",function(){return t("psychic_boost_desc",[y.psychic.vars()[3]])},{elm:"#psychicBoost > div > button"})}function kp(r){let a=$('
');r.append(a),a.append($(`
${t("psychic_murder_title")}
`)),a.append('
');let i=e.tech.psychic>=5?8:10;V({el:"#psychicKill",data:{},methods:{murder(){e.resource.Energy.amount>=i&&e.resource[e.race.species].amount>=1&&(e.resource.Energy.amount-=i,e.resource[e.race.species].amount--,e.stats.psykill++,Qr(1),e.race.anthropophagite&&H("Food",1e4*y.anthropophagite.vars()[0],!0),e.stats.psykill===10&&(Ht(),de()))},kill(){return t("psychic_murder_button",[i])}}}),ve("psychicKill",function(){return t("psychic_murder_desc")},{elm:"#psychicKill > div > button"})}function xp(r){let a=$('
');if(r.append(a),a.append($(`
${t("psychic_assault_title")}
`)),a.append('
'),e.tech.psychic>=4){let n=$(`
${t("psychic_channel")}
`),o=$('{{ assault }}'),c=$(`«`),l=$(`»`);n.append(c),n.append(o),n.append(l),a.append(n)}let i=e.tech.psychic>=5?36:45,s=e.stats.achieve.nightmare&&e.stats.achieve.nightmare.mg?e.stats.achieve.nightmare.mg:0;V({el:"#psychicAssault",data:e.tech.psychic>=4?e.race.psychicPowers.channel:{},methods:{boostVal(){e.resource.Energy.amount>=i&&(e.resource.Energy.amount-=i,e.race.psychicPowers.assaultTime=72*s)},add(){let n=ke();for(let o=0;o0;o++)e.race.psychicPowers.channel.assault--},boost(){return t("psychic_boost_button",[t("psychic_attack"),i])},boostTime(){return e.race.psychicPowers.assaultTime>0?t("psychic_boost_time",[e.race.psychicPowers.assaultTime]):""}}}),ve("psychicAssault",function(){return t("psychic_assault_desc",[y.psychic.vars()[3]])},{elm:"#psychicAssault > div > button"})}function qp(r){let a=$('
');if(r.append(a),a.append($(`
${t("psychic_profit_title")}
`)),a.append('
'),e.tech.psychic>=4){let n=$(`
${t("psychic_channel")}
`),o=$('{{ cash }}'),c=$(`«`),l=$(`»`);n.append(c),n.append(o),n.append(l),a.append(n)}let i=e.tech.psychic>=5?52:65,s=e.stats.achieve.nightmare&&e.stats.achieve.nightmare.mg?e.stats.achieve.nightmare.mg:0;V({el:"#psychicFinance",data:e.tech.psychic>=4?e.race.psychicPowers.channel:{},methods:{boostVal(){e.resource.Energy.amount>=i&&(e.resource.Energy.amount-=i,e.race.psychicPowers.cash=72*s)},add(){let n=ke();for(let o=0;o0;o++)e.race.psychicPowers.channel.cash--},boost(){return t("psychic_boost_button",[t("psychic_profit"),i])},boostTime(){return e.race.psychicPowers.cash>0?t("psychic_boost_time",[e.race.psychicPowers.cash]):""}}}),ve("psychicFinance",function(){return t("psychic_profit_desc",[y.psychic.vars()[3]])},{elm:"#psychicFinance > div > button"})}function Mp(r){let a=$('
');r.append(a),a.append($(`
${t("psychic_mind_break_title")}
`)),a.append('
');let i=e.tech.psychic>=5?64:80;V({el:"#psychicMindBreak",data:{},methods:{breakMind(){if(e.resource.Energy.amount>=i&&e.tech.unfathomable){let s=[];if(e.city.hasOwnProperty("surfaceDwellers"))for(let n=0;n0&&s.push(n);if(s.length>0){let n=s[Math.rand(0,s.length)];e.city.captive_housing[`jailrace${n}`]--,e.city.captive_housing[`race${n}`]++,e.resource.Energy.amount-=i}}},mindBreakLabel(){return t("psychic_mind_break_button",[i])}}}),ve("psychicMindBreak",function(){return t("psychic_mind_break_desc")},{elm:"#psychicMindBreak > div > button"})}function Pp(r){let a=$('
');r.append(a),a.append($(`
${t("psychic_stun_title")}
`)),a.append('
');let i=e.tech.psychic>=5?80:100;V({el:"#psychicCapture",data:{},methods:{stun(){if(e.resource.Energy.amount>=i&&e.tech.unfathomable){let s=0;if(e.city.hasOwnProperty("surfaceDwellers"))for(let n=0;n div > button"})}function Qr(r){if(e.race.blubber&&e.city.hasOwnProperty("oil_well")){let a=(e.city.oil_well.count+(e.space.oil_extractor?e.space.oil_extractor.count:0))*50;e.city.oil_well.dead+=r,e.city.oil_well.dead>a&&(e.city.oil_well.dead=a)}}var Ln=!1;function ve(r,a,i){i||(i={}),i.hasOwnProperty("elm")||(i.elm="#"+r),i.hasOwnProperty("bind")||(i.bind=!0),i.hasOwnProperty("unbind")||(i.unbind=!0),i.hasOwnProperty("placement")||(i.placement="bottom"),i.bind&&$(i.elm).on(i.bind_mouse_enter?"mouseenter":"mouseover",function(){(Ln||$("#popper").length>0)&&Ie();let s=i.wide?" wide":"",n=i.classes?i.classes:"has-background-light has-text-dark pop-desc";var o=$(`
`);i.attach?$(i.attach).append(o):$("#main").append(o),a&&o.append(typeof a=="function"?a({this:this,popper:o}):a),Ln=window.Popper.createPopper(i.self?this:$(i.elm)[0],document.querySelector("#popper"),{placement:i.placement,modifiers:[{name:"flip",enabled:!0},{name:"offset",options:{offset:i.offset?i.offset:[0,0]}},{name:"eventListeners",options:{scroll:!1}}]}),o.show(),i.hasOwnProperty("in")&&typeof i.in=="function"&&i.in({this:this,popper:o,id:"popper"}),rt("firework")&&e[e.race.cataclysm||e.race.orbit_decayed?"space":"city"].firework.on>0&&$(o).append('')}),i.unbind&&("ontouchstart"in document.documentElement&&navigator.userAgent.match(/Mobi/)&&e.settings.touch?$(i.elm).on("touchend",function(s){Ie(),i.hasOwnProperty("out")&&typeof i.out=="function"&&i.out({this:this,popper:$("#popper"),id:"popper"})}):$(i.elm).on(i.bind_mouse_enter?"mouseleave":"mouseout",function(){Ie(),i.hasOwnProperty("out")&&typeof i.out=="function"&&i.out({this:this,popper:$("#popper"),id:"popper"})}))}"ontouchstart"in document.documentElement&&navigator.userAgent.match(/Mobi/)&&e.settings.touch&&$(document).on("touchend",function(r){if($(".popper").length===1){Ie();return}});function Ie(r){r&&$("#popper").data("id")!==r||($("#popper").hide(),Ln&&(Ln.destroy(),Ln=!1),be($("#popper"),!0))}function Ur(r){switch(r){case"stop":Ae.w&&Ae.w.postMessage({loop:"clear"}),e.settings.at>0&&(e.settings.at=Ei.t),Ae.s=!1;break;case"start":{jo(Date.now());let a=So();Ae.mt=a.webWorkerMainTimer,Ae.w&&Ae.w.postMessage({loop:"start",period:a.mainTimer}),Ae.s=!0}}}function So(){let r=1;e.race.slow&&(r*=1+y.slow.vars()[0]/100),e.race.hyper&&(r*=1-y.hyper.vars()[0]/100);let a=Math.floor(250*r),i=Ae.midRatio*a,s=Ae.longRatio*a,n=2,o=Ei.t>0?1/n:1;return{webWorkerMainTimer:a,mainTimer:Math.ceil(a*o),longTimer:Math.ceil(s*o),baseLongTimer:s,timeAccelerationFactor:n}}function jo(r){if(Xc(r)||e.stats.hasOwnProperty("current")&&e.settings.at>0){let a=r-e.stats.current;if(e.settings.at>11520&&(e.settings.at=0),a>=12e4){let i=So(),s=i.baseLongTimer;e.settings.at+=Math.floor(2/3*a*i.timeAccelerationFactor/s)}e.settings.at>11520&&(e.settings.at=11520),Ei.t=e.settings.at,e.stats.current=r}}function Xc(r){return e.stats.hasOwnProperty("current")&&r-e.stats.current>=12e4}window.exportGame=function(){return e.race.noexport?`Export is not available during ${e.race.noexport} Creation`:(jo(Date.now()),LZString.compressToBase64(JSON.stringify(e)))};window.importGame=function(a,i){let s=JSON.parse(i?LZString.decompressFromUTF16(a):LZString.decompressFromBase64(a));if(s&&"evolution"in s&&"settings"in s&&"stats"in s&&"plasmid"in s.stats){if(Ae.w&&Ae.w.terminate(),s.hasOwnProperty("tech")&&i&&(s.tech.hasOwnProperty("whitehole")&&s.tech.whitehole>=4&&(s.tech.whitehole=3,s.resource.Soul_Gem.amount+=10,s.resource.Knowledge.amount+=15e5,s.stats.know-=15e5),s.tech.hasOwnProperty("quaked")&&s.tech.quaked===2&&(s.tech.quaked=1,s.resource.Knowledge.amount+=5e5,s.stats.know-=5e5),s.tech.hasOwnProperty("corrupted_ai")&&s.tech.corrupted_ai===3&&(s.tech.corrupted_ai=1,s.resource.Knowledge.amount+=5e6,s.stats.know-=5e6)),Array.isArray(s.lastMsg))for(let n=0;ns.length&&i[r].l.forEach(function(n){s.includes(n)||i[r].l.splice(i[r].l.indexOf(n),1)})}function oo(r){r=r||si,r.forEach(function(a){pr[a]=[],e.settings.msgFilters[pr.view].vis||($(`#msgQueueFilter-${pr.view}`).removeClass("is-active").attr("aria-disabled","false"),$(`#msgQueueFilter-${a}`).addClass("is-active").attr("aria-disabled","true"),pr.view=a)})}function L(r,a,i,s,n){if(s=s||[],!n&&!s.includes("all")&&s.push("all"),a=a||"warning",s.includes(pr.view)){let o=$('

').text(r);$("#msgQueueLog").prepend(o),$("#msgQueueLog").children().length>e.settings.msgFilters[pr.view].max&&$("#msgQueueLog").children().last().remove()}s.forEach(function(o){pr[o].unshift({msg:r,color:a}),pr[o].length>e.settings.msgFilters[o].max&&pr[o].pop()}),i||s.forEach(function(o){e.lastMsg[o]&&(e.lastMsg[o].unshift({m:r,c:a}),e.lastMsg[o].length>e.settings.msgFilters[o].save&&e.lastMsg[o].splice(e.settings.msgFilters[o].save))})}function Oa(r){for(let a=e.queue.queue.length-1;a>=0;a--)r.includes(e.queue.queue[a].id)&&e.queue.queue.splice(a,1)}function ts(r){for(let a=e.r_queue.queue.length-1;a>=0;a--)r.includes(d.tech[e.r_queue.queue[a].type].grant[0])&&e.r_queue.queue.splice(a,1)}function ca(){let r=e.tech.queue>=2?e.tech.queue>=3?8:5:3;if(e.stats.feat.journeyman&&e.stats.feat.journeyman>=2&&e.stats.achieve.seeder&&e.stats.achieve.seeder.l>=2){let i=Math.min(e.stats.achieve.seeder.l,e.stats.feat.journeyman);r+=i>=4?2:1}e.genes.queue&&e.genes.queue>=2&&(r*=2);let a=_e("pragmatist",0);a&&(r=Math.round(r*(1+a/100))),e.queue.max=r}function Ga(){let r=3;if(e.stats.feat.journeyman&&e.stats.achieve.seeder&&e.stats.achieve.seeder.l>0){let i=Math.min(e.stats.achieve.seeder.l,e.stats.feat.journeyman);r+=i>=3?i>=5?3:2:1}e.genes.queue&&e.genes.queue>=2&&(r*=2);let a=_e("theorist",0);a&&(r=Math.round(r*(1+a/100))),e.r_queue.max=r}function Er(){Cp(),be($("#buildQueue")),$("#buildQueue").append($(` +

${t("building_queue")} ({{ used_q() }}/{{ max }})

+ + `)),e.settings.queuestyle&&$("#buildQueue").addClass(e.settings.queuestyle);let r=$('
    ');$("#buildQueue").append(r),r.append($(`
  • {{ item.label }}{{ count(item.q) }} [{{ time(item.time) }}{{ max_t(item.t_max, item.time) }}]
  • `));try{V({el:"#buildQueue",data:e.queue,methods:{remove(a){if(!e.queue.queue[a])return;let i=ke();for(let s=0;s0&&(e.queue.queue[a].q-=e.queue.queue[a].qs),e.queue.queue[a].q<=0){Ie(`q${e.queue.queue[a].id}${a}`),e.queue.queue.splice(a,1),Er();break}},setID(a){return e.queue.queue[a]?`q${e.queue.queue[a].id}${a}`:""},setData(a,i){if(!e.queue.queue[a])return{};let s,n=e.queue.queue[a].id.split("-");if(n[0].substring(0,4)==="arpa")s=n[0].substring(4);else if(n[0]==="tp"&&n[1].substring(0,4)==="ship"){let c=bi(e.queue.queue[a].type),l={};Object.keys(c).forEach(function(h){l[h]=function(){return c[h]}}),s={cost:l}}else n[0]==="hell"&&n[1].substring(0,4)==="mech"?s={cost:kr(e.queue.queue[a].type.size,e.queue.queue[a].type.infernal,!0)}:n[0]==="city"||n[0]==="evolution"||n[0]==="starDock"?s=d[n[0]][n[1]]:Object.keys(d[n[0]]).forEach(function(c){d[n[0]][c].hasOwnProperty(n[1])&&(s=d[n[0]][c][n[1]])});let o={};if(s.cost){let c=Lr(s);Object.keys(c).forEach(function(l){let h=c[l]();h>0&&(o[`${i}-${l}`]=h)})}return o},pauseQueue(){$("#pausequeue").removeClass("play"),$("#pausequeue").removeClass("pause"),e.queue.pause?(e.queue.pause=!1,$("#pausequeue").addClass("play")):(e.queue.pause=!0,$("#pausequeue").addClass("pause"))},pausedesc(){return e.queue.pause?t("queue_play"):t("queue_pause")},time(a){return ft(a)},count(a){return a>1?` (${a})`:""},max_t(a,i){return i===a||i<0?"":` / ${ft(a)}`},used_q(){let a=0;for(let i=0;i0&&(a+=e.resource[r].amount),ur.resource[r].temp_max=a})}function H(r,a,i){if(r==="Food"&&e.race.fasting)return e.resource[r].amount=0,!1;let s=e.resource[r].amount+a,n=!0,o=i?e.resource[r].max:ur.resource[r].temp_max;return s>o&&o>=0?s=o:s<0&&(n=!1,s=0),Number.isNaN(s)||(e.resource[r].amount=s,i||(e.resource[r].delta+=a,r==="Mana"&&a>0?e.resource[r].gen_d+=a:a<0&&o>=0&&(ur.resource[r].temp_max=Math.max(0,ur.resource[r].temp_max+a)))),n}function Xa(r){let a=e.race.maintype||T[e.race.species].type;switch(a){case"animal":a="animalism";break;case"small":a="dwarfism";break;case"giant":a="gigantism";break;case"avian":case"reptilian":a="eggshell";break;case"fungi":a="chitin";break;case"insectoid":a="athropods";break;case"angelic":a="celestial";break;case"organism":a="sentience";break}let i=r?[t("civics_gov_tp_name0"),t("civics_gov_tp_name1"),t("civics_gov_tp_name2"),t("civics_gov_tp_name3"),t("civics_gov_tp_name4"),t("civics_gov_tp_name5"),t("civics_gov_tp_name6"),t("civics_gov_tp_name7"),t("civics_gov_tp_name8"),t("civics_gov_tp_name9")]:[T[e.race.species].name,T[e.race.species].home,t(`biome_${e.city.biome}_name`),t(`evo_${a}_title`),t("civics_gov_name0"),t("civics_gov_name1"),t("civics_gov_name2"),t("civics_gov_name3"),t("civics_gov_name4"),t("civics_gov_name5"),t("civics_gov_name6"),t("civics_gov_name7"),t("civics_gov_name8"),t("civics_gov_name9"),t("civics_gov_name10"),t("civics_gov_name11")];return{s0:Math.rand(0,14),s1:i[Math.rand(0,i.length)]}}function Q(r,a,i,s,n){n||(n="city"),e.race.universe==="micro"&&(s-=xt("micro",!1)),e.race.small&&(s-=y.small.vars()[0]),e.race.large&&(s+=y.large.vars()[0]),e.race.compact&&(s-=y.compact.vars()[0]),e.race.tunneler&&(r==="mine"||r==="coal_mine")&&(s-=y.tunneler.vars()[0]),e.tech.housing_reduction&&(r==="basic_housing"||r==="cottage")&&(s-=e.tech.housing_reduction*.02),e.tech.housing_reduction&&r==="captive_housing"&&(s-=e.tech.housing_reduction*.01),r==="basic_housing"&&(e.race.solitary&&(s-=y.solitary.vars()[0]),e.race.pack_mentality&&(s+=y.pack_mentality.vars()[0])),r==="cottage"&&(e.race.solitary&&(s+=y.solitary.vars()[1]),e.race.pack_mentality&&(s-=y.pack_mentality.vars()[1])),r==="apartment"&&e.race.pack_mentality&&(s-=y.pack_mentality.vars()[1]),e.genes.creep&&!e.race.no_crispr?s-=e.genes.creep*.01:e.genes.creep&&e.race.no_crispr&&(s-=e.genes.creep*.002);let o=_e("noquestions",0);o&&(s-=o),s<1.005&&(s=1.005);var c=r==="citizen"?qe(e.resource[e.race.species].amount):e[n][r]?e[n][r].count:0;return a&&(c+=a),Math.round(s**c*i)}function m(r,a,i,s,n,o){n||(n="space"),o=o||1.005,e.race.universe==="micro"&&(s-=xt("micro",!0)),e.genes.creep&&!e.race.no_crispr?s-=e.genes.creep*.01:e.genes.creep&&e.race.no_crispr&&(s-=e.genes.creep*.002),e.race.small&&(s-=y.small.vars()[1]),e.race.compact&&(s-=y.compact.vars()[1]),e.prestige.Harmony.count>0&&e.stats.achieve.ascended&&(s-=Fn());let c=_e("noquestions",0);c&&(s-=c),s0&&e.stats.achieve.ascended){let r=0;switch(e.race.universe){case"heavy":e.stats.achieve.ascended.hasOwnProperty("h")&&(r=e.stats.achieve.ascended.h*e.prestige.Harmony.count);break;case"antimatter":e.stats.achieve.ascended.hasOwnProperty("a")&&(r=e.stats.achieve.ascended.a*e.prestige.Harmony.count);break;case"evil":e.stats.achieve.ascended.hasOwnProperty("e")&&(r=e.stats.achieve.ascended.e*e.prestige.Harmony.count);break;case"micro":e.stats.achieve.ascended.hasOwnProperty("m")&&(r=e.stats.achieve.ascended.m*e.prestige.Harmony.count);break;case"magic":e.stats.achieve.ascended.hasOwnProperty("mg")&&(r=e.stats.achieve.ascended.mg*e.prestige.Harmony.count);break;default:e.stats.achieve.ascended.hasOwnProperty("l")&&(r=e.stats.achieve.ascended.l*e.prestige.Harmony.count);break}if(r>0)return r=(Math.log(50+r)-3.912023005428146)*.01,+r.toFixed(5)}return 0}function Hr(r,a,i,s){if(s=typeof s>"u"?!0:s,r.cost){let n=0,o=!1,c=a&&a.id[r.id]?a.id[r.id]:!1,l=r.doNotAdjustCost?r.cost:Lr(r,c),h=a?{}:!1,v=a?{}:!1;a&&(Object.keys(a.r).forEach(function(w){h[w]=a.r[w]}),Object.keys(a.rr).forEach(function(w){v[w]=a.rr[w]}));let _=!1;e.interstellar.hasOwnProperty("mass_ejector")&&e.genes.governor&&e.tech.governor&&e.race.governor&&e.race.governor.g&&e.race.governor.tasks&&Object.keys(e.race.governor.tasks).forEach(function(w){e.race.governor.tasks[w]==="trash"&&(_=!0)});let g={};return Object.keys(l).forEach(function(w){if(n>=0&&!e.prestige.hasOwnProperty(w)&&!["Morale","HellArmy","Structs","Bool","Army","Troops"].includes(w)){var S=Number(c?l[w](c):l[w]());if(S>0){let C=w==="Species"?e.race.species:w,z=w==="Supply"?e.portal.purifier.supply:Number(e.resource[C].amount),O=w==="Supply"?e.portal.purifier.sup_max:e.resource[C].max,k=w==="Supply"?e.portal.purifier.diff:e.resource[C].diff;if(_&&e.interstellar.mass_ejector[w]&&(k+=e.interstellar.mass_ejector[w],e.race.governor.config.trash.hasOwnProperty(w)&&(k-=Math.min(e.race.governor.config.trash[w].v,e.interstellar.mass_ejector[w]))),a&&(z+=k*(s?a.t.t:a.t.rt),a.r.hasOwnProperty(C)||(a.r[C]=0),a.rr.hasOwnProperty(C)||(a.rr[C]=0),s?(z-=Number(a.r[C]),a.r[C]+=S,a.rr[C]+=S):(z-=Number(a.rr[C]),a.rr[C]+=S),O>=0&&z>O&&(z=O)),S>z)if(k>0){let A=(S-z)/k;A>n&&(o=C,n=A),g[C]=A}else a&&(a.r=h,a.rr=v),n=-9999999,g[C]=99999999-k,(g[o]&&g[C]>g[o]||!g[o])&&(o=C)}}}),a&&n>=0&&(typeof a.id[r.id]>"u"?a.id[r.id]=1:a.id[r.id]++,s&&(a.t.t+=n),a.t.rt+=n),i?{t:n,r:o,s:g}:n}else return 0}function Ki(r,a,i,s){let n=i&&i.id[r.id]?i.id[r.id]:!1,o=cn(r.cost,n),c=0,l=i?{}:!1,h=i?{}:!1,v=!1;i&&(Object.keys(i.r).forEach(function(w){l[w]=i.r[w]}),Object.keys(i.rr).forEach(function(w){h[w]=i.rr[w]}));let _=!1;e.interstellar.hasOwnProperty("mass_ejector")&&e.genes.governor&&e.tech.governor&&e.race.governor&&e.race.governor.g&&e.race.governor.tasks&&Object.keys(e.race.governor.tasks).forEach(function(w){e.race.governor.tasks[w]==="trash"&&(_=!0)});let g={};return Object.keys(o).forEach(function(w){if(c>=0){let S=Number(o[w](n))*a;if(S>0){let C=Number(e.resource[w].amount),z=e.resource[w].diff;if(i&&(_&&e.interstellar.mass_ejector[w]&&(z+=e.interstellar.mass_ejector[w],e.race.governor.config.trash.hasOwnProperty(w)&&(z-=Math.min(e.race.governor.config.trash[w].v,e.interstellar.mass_ejector[w]))),C+=z*i.t.t,i.r[w]?(C-=Number(i.r[w]),i.r[w]+=S):i.r[w]=S,i.rr[w]?i.rr[w]+=S:i.rr[w]=S,e.resource[w].max>=0&&C>e.resource[w].max&&(C=e.resource[w].max)),S>C)if(z>0){let O=(S-C)/z;O>c&&(c=O,v=w),g[w]=O}else i&&(i.r=l,i.rr=h),c=-9999999,g[w]=99999999-z,(g[v]&&g[w]>g[v]||!g[v])&&(v=w)}}}),i&&c>=0&&(typeof i.id[r.id]>"u"?i.id[r.id]=1:i.id[r.id]++,i.t.t+=c,i.t.rt+=c),s?{t:c,r:v,s:g}:c}function be(r,a){if(r.find(".vb").each(function(){try{$(this)[0].__vue_app__&&($(this)[0].__vue_app__.unmount(),delete $(this)[0].__vue_app__)}catch(i){console.warn("Error unmounting nested Vue app:",i)}}),r[0]&&r[0].__vue_app__)try{r[0].__vue_app__.unmount(),delete r[0].__vue_app__}catch(i){console.warn("Error unmounting element Vue app:",i)}a?r.remove():r.empty()}function V(r,a){if(a=a||"create",$(r.el).length>0&&typeof $(r.el)[0].__vue_app__<"u")try{if(a==="update"){let i=$(r.el)[0].__vue_app__._instance;i&&i.proxy.$forceUpdate()}else a==="destroy"&&($(r.el)[0].__vue_app__.unmount(),delete $(r.el)[0].__vue_app__,$(r.el).removeClass("vb"))}catch(i){console.warn("Error during vBind cleanup:",i)}if(a==="create"&&$(r.el).length>0){if($(r.el)[0].__vue_app__)return console.warn(`vBind: App already mounted on ${r.el}, skipping`),$(r.el)[0].__vue_app__;let i={...r};if(i.data&&typeof i.data=="object"){let n=i.data;i.data=function(){return n}}let s=Vue.createApp(i);return(!r.hasOwnProperty("buefy")||r.buefy)&&s.use(Buefy.default),s.mount(r.el),$(r.el)[0].__vue_app__=s,$(r.el).addClass("vb"),s}}function ft(r){let a;if(r<0)a=t("time_never");else{r=+r.toFixed(0);let i=60;if(r0?a=`${c}m ${o}s`:a=`${c}m`;else{let h=n*24,v=Math.floor(r/n)%24;if(r0?a=`${v}h ${c}m`:o>0?a=`${v}h ${o}s`:a=`${v}h`;else{let _=Math.floor(r/h);v>0?a=`${_}d ${v}h`:c>0?a=`${_}d ${c}m`:o>0?a=`${_}d ${o}s`:a=`${_}d`}}}}return a}function it(r){return e.race.universe==="antimatter"&&(r*=xt("antimatter"),r=+r.toFixed(2)),Ya()==="leo"&&(r*=1+Bt("leo")[0]/100,r=+r.toFixed(2)),r}function he(r){return e.race.emfield?+(r*1.5).toFixed(2):r}function Ao(r){if(e.tech.high_tech&&e.tech.high_tech>=11){let a=e.resource.Knowledge.max,i=25e4,s=0;for(;a>i;)a-=i,i*=1.1,s++;if(s+=+(a/i).toFixed(2),e.interstellar.citadel){let n=r?e.interstellar.citadel.on:x.citadel;e.tech.high_tech&&e.tech.high_tech>=15&&n>0&&(s*=1+n*.05)}if(e.space.ai_core2){let n=r?e.space.ai_core2.on:x.ai_core2;e.tech.titan_ai_core&&n>0&&(s*=1.25)}if(e.stats.achieve.obsolete&&e.stats.achieve.obsolete.l>=5&&e.prestige.AICore.count>0&&(s*=2-.99**e.prestige.AICore.count),e.race.linked){let n=y.linked.vars()[0]/100*e.resource[e.race.species].amount;n>y.linked.vars()[1]/100&&(n-=y.linked.vars()[1]/100,n=n/(n+200-y.linked.vars()[1]),n+=y.linked.vars()[1]/100),s*=1+n}return+s.toFixed(3)}return 0}function Ra(r){return r?Ao(r):Tr}function xt(r,a,i,s){s||(s={});let n=s.dark!==void 0?s.dark:e.prestige.Dark.count,o=s.harmony!==void 0?s.harmony:e.prestige.Harmony.count,c=s.sludge!==void 0?s.sludge:e.stats.achieve.extinct_sludge&&e.stats.achieve.extinct_sludge[wt(r)]?e.stats.achieve.extinct_sludge[wt(r)]:0;switch(r){case"standard":return e.race.universe==="standard"||i?(o>0&&(n*=1+o*.001),c&&(n*=1+c*.03),1+n/200):0;case"evil":return e.race.universe==="evil"||i?(o>0&&(n*=1+o*.01),c&&(n*=1+c*.03),1+(Math.log2(10+n)-3.321928094887362)/(a?10:5)):1;case"micro":return e.race.universe==="micro"||i?a?(o>0&&(n*=1+o*.01),n=.01+(Math.log(100+n)-4.605170185988092)/35,c&&(n*=1+c*.03),n>.04&&(n=.04),+n.toFixed(5)):(o>0&&(n*=1+o*.01),n=.02+(Math.log(100+n)-4.605170185988092)/20,c&&(n*=1+c*.03),n>.06&&(n=.06),+n.toFixed(5)):0;case"heavy":return e.race.universe==="heavy"||i?(o>0&&(n*=1+o*.01),c&&(n*=1+c*.03),.995**n):1;case"antimatter":return e.race.universe==="antimatter"||i?(o>0&&(n*=1+o*.01),c&&(n*=1+c*.03),1+(Math.log(50+n)-3.912023005428146)/5):0;case"magic":return e.race.universe==="magic"||i?(o>0&&(n*=1+o*.01),c&&(n*=1+c*.03),1+(Math.log(50+n)-3.912023005428146)/3):0}return 0}var Yt=function(){var r;return function(a){return r&&!a?r:e.genes.challenge&&e.genes.challenge>=2?(r=el(e.race.universe),r):0}}();function el(r,a,i){if(e.genes.challenge&&e.genes.challenge>=2){r=r||e.race.universe;let s=rl(r),n=r==="standard"?.25:.15,o=e.genes.challenge>=3?.15:.1;e.genes.challenge>=4&&r!=="standard"&&(n+=.05,o-=.05);let c=e.stats.feat.grandmaster&&e.stats.achieve.corrupted&&e.stats.achieve.corrupted.l>0?Math.min(e.stats.achieve.corrupted.l,e.stats.feat.grandmaster):0;c>0&&(n*=1+c/100,o*=1+c/100),i||(e.race.weak_mastery&&r==="antimatter"&&(n/=10,o/=10),e.race.nerfed&&(n/=r==="antimatter"?5:2,o/=r==="antimatter"?5:2),e.race.ooze&&(n*=1-y.ooze.vars()[2]/100,o*=1-y.ooze.vars()[2]/100),e.genes.challenge>=5&&e.race.hasOwnProperty("mastery")&&(n*=1+y.mastery.vars()[0]*e.race.mastery/100,o*=1+y.mastery.vars()[0]*e.race.mastery/100));let l=s.aLvl*n,h=0;return r!=="standard"&&(h=s.uLvl*o),a?{g:l,u:h,m:l+h}:l+h}return a?{g:0,u:0,m:0}:0}var Ea=function(){var r;return function(a){if(!r||a){let i=0;Object.keys(e.pillars).forEach(function(s){T[s]&&e.race.species===s?i+=4:T[s]&&i++}),r=[1+i/100,1+i*2/100]}return r}}();function Co(r,a,i,s){i=i||0,s=s||{};let n=s.genes;n===void 0&&(n=Xt()-1,n>4&&(n=4));let o=s.uni||e.race.universe;if(o==="micro"&&(r=r*.25),o==="antimatter"&&(r=r*1.1),o==="heavy"&&a!=="mad")switch(n){case 1:r=r*1.1;break;case 2:r=r*1.15;break;case 3:r=r*1.2;break;case 4:r=r*1.25;break;default:r=r*1.05;break}switch((s.tp!==void 0?s.tp:e.race.truepath)&&(r=r*1.1),n){case 1:return+(r*1.05).toFixed(i);case 2:return+(r*1.12).toFixed(i);case 3:return+(r*1.25).toFixed(i);case 4:return+(r*1.45).toFixed(i);default:return+r.toFixed(i)}}function Ap(r,a){a||(a={});let i={pop_divisor:999,k_inc:1e6,k_mult:100,phage_mult:0,plasmid_cap:150};switch(r){case"mad":i.pop_divisor=3,i.k_inc=1e5,i.k_mult=1.1,i.plasmid_cap=150,(a.synth===!0||a.synth.val===!0)&&(i.pop_divisor=5,i.k_inc=125e3,i.plasmid_cap=100);break;case"cataclysm":case"bioseed":i.pop_divisor=3,i.k_inc=5e4,i.k_mult=1.015,i.phage_mult=1,i.plasmid_cap=400;break;case"ai":i.pop_divisor=2.5,i.k_inc=45e3,i.k_mult=1.014,i.phage_mult=2,i.plasmid_cap=600;break;case"vacuum":case"bigbang":i.pop_divisor=2.2,i.k_inc=4e4,i.k_mult=1.012,i.phage_mult=2.5,i.plasmid_cap=800;break;case"ascend":case"terraform":i.pop_divisor=1.15,i.k_inc=3e4,i.k_mult=1.008,i.phage_mult=4,i.plasmid_cap=2e3;break;case"matrix":i.pop_divisor=1.5,i.k_inc=32e3,i.k_mult=1.01,i.phage_mult=3.2,i.plasmid_cap=1800;break;case"retired":i.pop_divisor=1.15,i.k_inc=32e3,i.k_mult=1.006,i.phage_mult=3.2,i.plasmid_cap=1800;break;case"eden":i.pop_divisor=1,i.k_inc=18e3,i.k_mult=1.004,i.phage_mult=2.5,i.plasmid_cap=1800;break;default:i.unknown=!0;break}return i}function dt(r,a){let i={plasmid:0,phage:0,dark:0,harmony:0,artifact:0,cores:0,supercoiled:0,pdebt:0};a||(a={}),a.synth===void 0&&(a.synth=T[e.race.species].type==="synthetic");let s=a.genes,n=a.uni;n=n||e.race.universe;let o=0;if(a.cit===void 0){let w=e.civic.hasOwnProperty("garrison")?e.civic.garrison.workers:0;for(let S=0;S<3;S++)e.civic.foreign[`gov${S}`].occ&&(w+=N(e.civic.govern.type==="federation"?15:20));e.race.high_pop?o=Math.round(e.resource[e.race.species].amount/y.high_pop.vars()[0])+Math.round(w/y.high_pop.vars()[0]):o=e.resource[e.race.species].amount+w}else a.high_pop?o=Math.round(a.cit/y.high_pop.vars(a.high_pop)[0])+Math.round(a.sol/y.high_pop.vars(a.high_pop)[0]):o=a.cit+a.sol;let c=Ap(r,a),l=c.pop_divisor,h=c.k_inc,v=c.k_mult,_=c.phage_mult,g=c.plasmid_cap;if(s!==void 0?g=Math.floor(g*(1+(s+(a.tp?1:0))/8)):g=Math.floor(g*(1+(Xt()-(e.race.truepath?0:1))/8)),a.plas===void 0){let w=a.know!==void 0?a.know:e.stats.know,S=Math.round(o/l);for(;w>h;)S++,w-=h,h*=v;if(e.race.cataclysm?S+=300:e.race.lone_survivor&&(S+=800),i.plasmid=Co(S,r,!1,a),!a.rawPlasmids&&i.plasmid>g){let C=i.plasmid-g;i.plasmid=g,C=Math.floor(C/(C+g)*g),i.plasmid+=C}}else i.plasmid=a.plas;if(i.phage=i.plasmid>0?Co(Math.floor(Math.log2(i.plasmid)*Math.E*_),r,!1,a):0,r==="bigbang"){let w=a.exotic,S=a.mass;w===void 0&&e.interstellar&&e.interstellar.stellar_engine&&(w=e.interstellar.stellar_engine.exotic,S=e.interstellar.stellar_engine.mass);let C=+Math.log(1+w*40).toFixed(3);C+=+(Math.log2(S-7)/2.5).toFixed(3),C=Co(C,"bigbang",3,a),i.dark=C}else if(r==="vacuum"){let w=a.mana!==void 0?a.mana:e.resource.Mana.gen,S=+(Math.log2(w)/5).toFixed(3);S=Co(S,"vacuum",3,a),i.dark=S}if(["ascend","descend","terraform","apotheosis"].includes(r)){let w=1;if(s===void 0?(w=Xt(),w>5&&(w=5)):w=s+1,r==="ascend"||r==="terraform"){switch(n){case"micro":w*=.25;break;case"heavy":w*=1.2;break;case"antimatter":w*=1.1;break;default:break}i.harmony=parseFloat(w.toFixed(2))}else if(r==="descend"){let S=n==="micro"?1:w,C=a.floor;C!==void 0?C++:C=e.portal.hasOwnProperty("spire")?e.portal.spire.count:0,[50,100].forEach(function(z){C>z&&S++}),i.artifact=S}else r==="apotheosis"&&(i.plasmid=16**4-65535,n==="micro"?i.supercoiled=w**2:i.supercoiled=w**3,e.race.warlord&&(i.artifact=5,i.supercoiled=64))}return r==="ai"&&(i.cores=n==="micro"?2:5),e.stats.pdebt>0&&(i.plasmid-=e.stats.pdebt,i.plasmid<0?(i.pdebt=Math.abs(i.plasmid),i.plasmid=0):i.pdebt=0),i}function Lr(r,a,i){let s=r.cost||{};if((s.RNA||s.DNA)&&e.genes.evolve){var n={};return Object.keys(s).forEach(function(o){(o==="RNA"||o==="DNA")&&(n[o]=function(){return Math.round(s[o](a,i)*.8)})}),n}return s=Fp(s,a,i),s=Tp(s,r,a,i),s=zp(s,a,i),s=Ep(s,a,i),s=Ip(s,a,i),s=Bp(s,a,i),s=Dp(s,a,i),s=Np(s,a,i),s=Kp(s,a,i),s=Qp(s,a,i),s=Lp(s,a,i),s=Wp(s,a,i),s=Rp(s,a,i),s=Hp(s,r,a,i),s=Up(s,r,a,i),Gp(s,a,i)}function Fp(r,a,i){if(e.race.bloated){let n=1+y.bloated.vars()[0]/100;var s={};return Object.keys(r).forEach(function(o){["Food","Lumber","Stone","Furs","Copper","Iron","Aluminium","Cement","Coal","Steel","Titanium","Alloy","Polymer","Iridium"].includes(o)?s[o]=function(){return r[o](a,i)*n}:s[o]=function(){return r[o](a,i)}}),s}return r}function zp(r,a,i){if(e.race.lone_survivor){var s={};return Object.keys(r).forEach(function(n){["Structs","Custom","Soul_Gem","Plasmid","Phage","Dark","Harmony","Blood_Stone","Artifact","Supercoiled","Corrupt_Gem","Codex","Demonic_Essence","Horseshoe"].includes(n)?s[n]=function(){return r[n](a,i)}:["Knowledge"].includes(n)?s[n]=function(){return Math.round(r[n](a,i)*.5)}:["Money"].includes(n)?s[n]=function(){return Math.round(r[n](a,i)*.22)}:["Plywood","Brick","Wrought_Iron","Sheet_Metal","Mythril","Quantium"].includes(n)?s[n]=function(){return Math.round(r[n](a,i)*.14)}:s[n]=function(){return Math.round(r[n](a,i)*.28)}}),s}return r}function Tp(r,a,i,s){if((s?s.truepath:e.race.truepath)&&(!a.hasOwnProperty("path")||!a.path.includes("truepath"))){var n={};return Object.keys(r).forEach(function(o){o==="Money"?n[o]=function(){return Math.round(r[o](i,s)*3)}:["Structs","Knowledge","Custom","Soul_Gem","Plasmid","Phage","Dark","Harmony","Blood_Stone","Artifact","Supercoiled","Corrupt_Gem","Codex","Demonic_Essence","Horseshoe"].includes(o)?n[o]=function(){return r[o](i,s)}:n[o]=function(){return Math.round(r[o](i,s)*2)}}),n}return r}function Ep(r,a,i){if(e.race.inflation){var s={};return Object.keys(r).forEach(function(n){if(n==="Money"){let o=1+e.race.inflation/75;s[n]=function(){return Math.round(r[n](a,i)*o)}}else s[n]=function(){return r[n](a,i)}}),s}return r}function Lp(r,a,i){let s=_e("extravagant",0);if(s){var n={};return Object.keys(r).forEach(function(o){if(o==="Money"){let c=1+s/100;n[o]=function(){return Math.round(r[o](a,i)*c)}}else n[o]=function(){return r[o](a,i)}}),n}return r}function Ip(r,a,i){if(e.civic.govern.type==="technocracy"){let n=1+je.technocracy()[1]/100;var s={};return Object.keys(r).forEach(function(o){if(o==="Knowledge"){let c=1-je.technocracy()[0]/100;s[o]=function(){return Math.round(r[o](a,i)*c)}}else o==="Money"||o==="Structs"||o==="Custom"?s[o]=function(){return r[o](a,i)}:s[o]=function(){return Math.round(r[o](a,i)*n)}}),s}return r}function Kp(r,a,i){let s=_e("pragmatist",1),n=Pe("gnome");if((e.race.smart||e.race.dumb||s||n>0)&&r.Knowledge){var o={};return Object.keys(r).forEach(function(c){c==="Knowledge"?o[c]=function(){let l=r[c](a,i);return e.race.smart&&(l*=1-y.smart.vars()[0]/100),n>0&&(l*=1-y.smart.vars(1)[0]/100*n),e.race.dumb&&(l*=1+y.dumb.vars()[0]/100),s&&(l*=1+s/100),Math.round(l)}:o[c]=function(){return r[c](a,i)}}),o}return r}function Np(r,a,i){if(e.race.smoldering){let s={};return Object.keys(r).forEach(function(n){if(n==="Lumber"||n==="Plywood"){let o=n==="Plywood"?2:1;s.Chrysotile=function(){return Math.round(r[n](a,i)*o)||0}}else["HellArmy","Army","Troops","Structs","Chrysotile","Knowledge","Custom","Soul_Gem","Plasmid","Phage","Dark","Harmony","Blood_Stone","Artifact","Supercoiled","Corrupt_Gem","Codex","Demonic_Essence","Horseshoe","Mana","Energy"].includes(n)?s[n]=function(){return r[n](a,i)}:s[n]=function(){return Math.round(r[n](a,i)*.9)}}),!s.hasOwnProperty("Chrysotile")&&r.hasOwnProperty("Money")&&e.tech.primitive&&e.tech.primitive>=3&&(s.Chrysotile=function(){let n=r.Money(a,i)||0;return n>0?Math.round(n/50):0}),s}return r}function Dp(r,a,i){if((e.race.kindling_kindred||e.race.iron_wood)&&(r.Lumber||r.Plywood)){var s={};let n=1+y.kindling_kindred.vars()[0]/100;return Object.keys(r).forEach(function(o){e.race.kindling_kindred&&o!=="Lumber"&&o!=="Plywood"&&o!=="Structs"?s[o]=function(){return Math.round(r[o](a,i)*n)||0}:e.race.iron_wood&&o!=="Plywood"?s[o]=function(){return r[o](a,i)}:o==="Structs"&&(s[o]=function(){return r[o](a,i)})}),s}else if(e.race.unfathomable&&e.city.captive_housing){let n=Pe("entish");if(n>0){var s={};let c=1-.4*n;return Object.keys(r).forEach(function(l){l==="Lumber"&&l==="Plywood"?s[l]=function(){return Math.round(r[l](a,i)*c)||0}:s[l]=function(){return r[l](a,i)}}),s}}return r}function Bp(r,a,i){if(e.race.flier&&(r.Stone||r.Cement)){var s={};let n=1-y.flier.vars()[0]/100;return Object.keys(r).forEach(function(o){o==="Stone"&&!r.Cement?s[o]=function(){return Math.round(r[o](a,i)*n)||0}:o==="Cement"?r.Stone?s.Stone=function(){return Math.round(r.Stone(a,i)*n+r[o](a,i)*1.8*n)||0}:s.Stone=function(){return Math.round(r[o](a,i)*1.75*n)}:s[o]=function(){return r[o](a,i)}}),s}return r}function Gp(r,a,i){let s=Pe("pterodacti");if((e.race.hollow_bones||s>0)&&(r.Plywood||r.Brick||r.Wrought_Iron||r.Sheet_Metal||r.Mythril||r.Aerogel||r.Nanoweave||r.Scarletite||r.Quantium)){var n={};return Object.keys(r).forEach(function(o){o==="Plywood"||o==="Brick"||o==="Wrought_Iron"||o==="Sheet_Metal"||o==="Mythril"||o==="Aerogel"||o==="Nanoweave"||o==="Scarletite"||o==="Quantium"?n[o]=function(){let c=r[o](a,i);return e.race.hollow_bones&&(c*=1-y.hollow_bones.vars()[0]/100),s>0&&(c*=1-y.hollow_bones.vars(3)[0]/100*s),Math.round(c)}:n[o]=function(){return r[o](a,i)}}),n}return r}function Rp(r,a,i){if(e.civic.govern.type==="dictator"){let s=1-je.dictator()[2]/100,n={};return Object.keys(r).forEach(function(o){["Lumber","Stone","Furs","Copper","Iron","Aluminium","Cement","Coal"].includes(o)?n[o]=function(){return r[o](a,i)*s}:n[o]=function(){return r[o](a,i)}}),n}return r}function Hp(r,a,i,s){if(e.race.living_materials){let n={},o=a.hasOwnProperty("struct")?a.struct().p:!1;return Object.keys(r).forEach(function(c){o&&e[o[1]].hasOwnProperty(o[0])&&e[o[1]][o[0]].hasOwnProperty("l_m")&&(["Lumber","Furs","Plywood"].includes(c)||c==="Stone"&&e.race.sappy)?n[c]=function(){return Math.round(r[c](i,s)*y.living_materials.vars()[0]**(e[o[1]][o[0]].l_m/25))}:n[c]=function(){return r[c](i,s)}}),n}return r}function Up(r,a,i,s){if(e.tech.nexus&&e.race.witch_hunter&&e.tech.roguemagic&&e.tech.roguemagic>=7){let n={},o=.96**e.tech.nexus;return Object.keys(r).forEach(function(c){["Mana"].includes(c)?n[c]=function(){return r[c](i,s)*o}:n[c]=function(){return r[c](i,s)}}),n}return r}function Ui(r){return e.race.high_pop&&(r*=y.high_pop.vars()[0]),r}function Wp(r,a,i){if(e.race.heavy){var s={};return Object.keys(r).forEach(function(n){n==="Stone"||n==="Cement"||n==="Wrought_Iron"?s[n]=function(){return Math.round(r[n](a,i)*(1+y.heavy.vars()[1]/100))}:s[n]=function(){return r[n](a,i)}}),s}return r}function Qp(r,a,i){if(r.Cement&&e.tech.cement&&e.tech.cement>=2){let n=e.tech.cement>=3?.8:.9;var s={};return Object.keys(r).forEach(function(o){o==="Cement"?s[o]=function(){return Math.round(r[o](a,i)*n)||0}:s[o]=function(){return r[o](a,i)}}),s}return r}function rn(r){switch(r){case"star":return'';case"atom":return'';case"heavy":return'';case"evil":return'';case"micro":return'';case"magic":return'';case"rocket":return'';case"heart":return'';case"clover":return'';case"candy":return'';case"ghost":return'';case"turkey":return'';case"present":return'';case"nuclear":return'';case"zombie":return'';case"fire":return'';case"mask":return'';case"skull":return'';case"taijitu":return'';case"trash":return'';case"martini":return'';case"lightbulb":return'';case"bunny":return'';case"egg":return'';case"turtle":return'';case"candycorn":return'';case"banana":return` + `;case"sun":return'';case"firework":return'';case"floppy":return'';case"slime":return'';case"lightning":return` - `; - case "meat": - return ``; - case "trophy": - return ``; - case "sludge": - return ``; - case "robot": - return ``; - case "cat": - return ``; - case "dog": - return ``; - } - } - function svgViewBox(icon) { - switch (icon) { - case "star": - return `0 0 640 640`; - case "atom": - return `0 0 100 88.379`; - case "heavy": - return `0 0 24 24`; - case "evil": - return `0 0 240 240`; - case "micro": - return `0 0 276 276`; - case "magic": - return `0 0 2666 2666`; - case "rocket": - return `0 0 165 173`; - case "sun": - return `0 0 48 48`; - case "heart": - return `0 0 20 16`; - case "clover": - return `0 0 660.51 780.1`; - case "candy": - return `0 0 200 200`; - case "ghost": - return `0 0 399 432.23`; - case "turkey": - return "0 0 250 300"; - case "present": - return `0 0 410.98 434.75`; - case "nuclear": - return `0 0 101.22 101.22`; - case "zombie": - return `0 0 175 304`; - case "fire": - return `0 0 615.18 879.36`; - case "mask": - return `0 0 24 24`; - case "skull": - return `0 0 256.27 300.86`; - case "taijitu": - return `0 -10 256 256 `; - case "pizza": - return `0 0 217.444 144.397`; - case "trash": - return `0 0 15 15`; - case "party": - return `0 0 528.69 983.1`; - case "martini": - return `0 0 15 15`; - case "lightbulb": - return `0 0 100 156`; - case "bunny": - return `0 0 128 128`; - case "egg": - return `0 0 273.61 295.02`; - case "ant": - return `0 0 128 128`; - case "turtle": - return `20 40 270 50`; - case "candycorn": - return `0 0 325 449.98`; - case "banana": - return `0 0 113.38582 111.81719`; - case "firework": - return `0 10 12 35`; - case "floppy": - return `0 0 60 60`; - case "slime": - return `0 0 552 495`; - case "lightning": - return `0 0 16 16`; - case "meat": - return `0 0 200 200`; - case "trophy": - return `0 0 24 24`; - case "sludge": - return `0 0 512 512`; - case "robot": - return `0 0 24 24`; - case "cat": - return `0 0 546.19 445.84`; - case "dog": - return `0 0 349.85 422.66`; - } - } - function getBaseIcon(name, type) { - if (type === "feat") { - switch (name) { - case "steelem": - return "nuclear"; - case "the_misery": - return "zombie"; - case "ill_advised": - return "fire"; - case "garbage_pie": - return "trash"; - case "demon_slayer": - return "skull"; - case "equilibrium": - return "taijitu"; - case "utopia": - return "martini"; - case "energetic": - return "lightbulb"; - case "finish_line": - return "turtle"; - case "banana": - return "banana"; - case "digital_ascension": - return "floppy"; - case "slime_lord": - return "slime"; - case "annihilation": - return "lightning"; - case "immortal": - return "meat"; - case "wish": - return "trophy"; - case "planned_obsolescence": - return "robot"; - case "friday": - return "mask"; - case "valentine": - return "heart"; - case "leprechaun": - return "clover"; - case "easter": - return "bunny"; - case "launch_day": - return "rocket"; - case "solstice": - return "sun"; - case "firework": - return "firework"; - case "egghunt": - return "egg"; - case "halloween": - return "ghost"; - case "trickortreat": - return "candy"; - case "thanksgiving": - return "turkey"; - case "xmas": - return "present"; - default: - return "star"; - } - } - return global.settings.icon; - } - function drawIcon(icon, size, shade, id, inject) { - let select = ""; - if (id) { - select = `id="${id}" `; - } - inject = inject || ""; - return `${svgIcons(icon)}`; - } - function drawPet() { - if ($("#playerPet span.flair")) { - clearElement($("#playerPet span.flair"), true); - } - if ($("#playerPet .flair").length === 0 && global.race["pet"]) { - let color = "black"; - if (global.race.pet["color"]) { - color = global.race.pet.color; - } else { - if (global.race.pet.type === "cat") { - switch (global.race.pet.name) { - case 0: - color = "gray"; - break; - case 1: - case 4: - case 8: - color = "orange"; - break; - case 10: - color = "black"; - global.race.pet["pattern"] = "solid"; - break; - default: - let colors = ["black", "white", "gray", "orange", "cream"]; - color = colors[Math.rand(0, colors.length)]; - break; - } - } else { - let colors = ["black", "white", "gray", "brown"]; - color = colors[Math.rand(0, colors.length)]; - } - global.race.pet["color"] = color; - } - let pattern = "solid"; - if (global.race.pet["pattern"]) { - pattern = global.race.pet.pattern; - } else { - let patterns = ["solid"]; - if (global.race.pet.type === "cat") { - patterns.push("stripe"); - } else { - patterns.push("patched"); - } - pattern = patterns[Math.rand(0, patterns.length)]; - global.race.pet["pattern"] = pattern; - } - let coat = ``; - if (pattern === "patched") { - coat = ` + `;case"meat":return'';case"trophy":return``;case"sludge":return'';case"robot":return'';case"cat":return'';case"dog":return''}}function an(r){switch(r){case"star":return"0 0 640 640";case"atom":return"0 0 100 88.379";case"heavy":return"0 0 24 24";case"evil":return"0 0 240 240";case"micro":return"0 0 276 276";case"magic":return"0 0 2666 2666";case"rocket":return"0 0 165 173";case"sun":return"0 0 48 48";case"heart":return"0 0 20 16";case"clover":return"0 0 660.51 780.1";case"candy":return"0 0 200 200";case"ghost":return"0 0 399 432.23";case"turkey":return"0 0 250 300";case"present":return"0 0 410.98 434.75";case"nuclear":return"0 0 101.22 101.22";case"zombie":return"0 0 175 304";case"fire":return"0 0 615.18 879.36";case"mask":return"0 0 24 24";case"skull":return"0 0 256.27 300.86";case"taijitu":return"0 -10 256 256 ";case"pizza":return"0 0 217.444 144.397";case"trash":return"0 0 15 15";case"party":return"0 0 528.69 983.1";case"martini":return"0 0 15 15";case"lightbulb":return"0 0 100 156";case"bunny":return"0 0 128 128";case"egg":return"0 0 273.61 295.02";case"ant":return"0 0 128 128";case"turtle":return"20 40 270 50";case"candycorn":return"0 0 325 449.98";case"banana":return"0 0 113.38582 111.81719";case"firework":return"0 10 12 35";case"floppy":return"0 0 60 60";case"slime":return"0 0 552 495";case"lightning":return"0 0 16 16";case"meat":return"0 0 200 200";case"trophy":return"0 0 24 24";case"sludge":return"0 0 512 512";case"robot":return"0 0 24 24";case"cat":return"0 0 546.19 445.84";case"dog":return"0 0 349.85 422.66"}}function In(r,a){if(a==="feat")switch(r){case"steelem":return"nuclear";case"the_misery":return"zombie";case"ill_advised":return"fire";case"garbage_pie":return"trash";case"demon_slayer":return"skull";case"equilibrium":return"taijitu";case"utopia":return"martini";case"energetic":return"lightbulb";case"finish_line":return"turtle";case"banana":return"banana";case"digital_ascension":return"floppy";case"slime_lord":return"slime";case"annihilation":return"lightning";case"immortal":return"meat";case"wish":return"trophy";case"planned_obsolescence":return"robot";case"friday":return"mask";case"valentine":return"heart";case"leprechaun":return"clover";case"easter":return"bunny";case"launch_day":return"rocket";case"solstice":return"sun";case"firework":return"firework";case"egghunt":return"egg";case"halloween":return"ghost";case"trickortreat":return"candy";case"thanksgiving":return"turkey";case"xmas":return"present";default:return"star"}return e.settings.icon}function bn(r,a,i,s,n){let o="";return s&&(o=`id="${s}" `),n=n||"",`${rn(r)}`}function Mo(){if($("#playerPet span.flair")&&be($("#playerPet span.flair"),!0),$("#playerPet .flair").length===0&&e.race.pet){let r="black";if(e.race.pet.color)r=e.race.pet.color;else{if(e.race.pet.type==="cat")switch(e.race.pet.name){case 0:r="gray";break;case 1:case 4:case 8:r="orange";break;case 10:r="black",e.race.pet.pattern="solid";break;default:let s=["black","white","gray","orange","cream"];r=s[Math.rand(0,s.length)];break}else{let s=["black","white","gray","brown"];r=s[Math.rand(0,s.length)]}e.race.pet.color=r}let a="solid";if(e.race.pet.pattern)a=e.race.pet.pattern;else{let s=["solid"];e.race.pet.type==="cat"?s.push("stripe"):s.push("patched"),a=s[Math.rand(0,s.length)],e.race.pet.pattern=a}let i="";a==="patched"?i=` - `; - } else if (pattern === "stripe") { - coat = ` + `:a==="stripe"&&(i=` @@ -90728,19182 +717,17 @@ ${effect}`); - `; - } - $("#playerPet").append(`${coat}${svgIcons(global.race.pet.type)}`); - popover( - "playerPet", - function(obj) { - let popper = $(`
    `); - obj.popper.append(popper); - popper.append(`
    ${loc(`event_${global.race.pet.type}_name${global.race.pet.name}`)}
    `); - return void 0; - }, - { - elm: `#playerPet .flair`, - classes: `has-background-light has-text-dark` - } - ); - } - } - function easterEgg(num, size) { - let easter2 = getEaster(); - const date2 = /* @__PURE__ */ new Date(); - if (easter2.active && !global.special.egg[date2.getFullYear()][`egg${num}`] && $(`#egg${num}`).length === 0) { - return drawIcon("egg", size ? size : 16, 2, `egg${num}`, `role="button" aria-label="Egg" `); - } - return ""; - } - function easterEggBind(id) { - $(`#egg${id}`).click(function() { - const date2 = /* @__PURE__ */ new Date(); - let year = date2.getFullYear(); - if (!global.special.egg[year][`egg${id}`]) { - global.special.egg[year][`egg${id}`] = true; - if (id <= 12) { - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += 9; - global.stats.antiplasmid += 9; - messageQueue(loc("city_egg_msg", [9, loc("resource_AntiPlasmid_plural_name")]), "success", false, ["events"]); - } else { - global.prestige.Plasmid.count += 9; - global.stats.plasmid += 9; - messageQueue(loc("city_egg_msg", [9, loc("resource_Plasmid_plural_name")]), "success", false, ["events"]); - } - } else { - global.prestige.Phage.count += 4; - global.stats.phage += 4; - messageQueue(loc("city_egg_msg", [4, loc("resource_Phage_name")]), "success", false, ["events"]); - } - $(`#egg${id}`).remove(); - $(".popper").hide(); - } - }); - } - function trickOrTreat(num, size, trick) { - let halloween = getHalloween(); - const date2 = /* @__PURE__ */ new Date(); - const year = date2.getFullYear(); - let tot = trick ? "trick" : "treat"; - if (halloween.active && !global.special.trick[year][`${tot}${num}`] && $(`#${tot}${num}`).length === 0) { - let label = trick ? `Ghost` : `Candy Corn`; - return drawIcon(trick ? "ghost" : "candycorn", size ? size : 16, 2, `${tot}${num}`, `role="button" aria-label="${label}" `); - } - return ""; - } - function trickOrTreatBind(id, trick) { - const date2 = /* @__PURE__ */ new Date(); - const year = date2.getFullYear(); - let tot = trick ? "trick" : "treat"; - $(`#${tot}${id}`).click(function() { - if (!global.special.trick[year][`${tot}${id}`]) { - global.special.trick[year][`${tot}${id}`] = true; - if (trick) { - global.prestige.Phage.count += 2; - global.stats.phage += 2; - messageQueue(loc("city_ghost_msg", [2, loc("resource_Phage_name")]), "success", false, ["events"]); - } else { - if (global.race.universe === "antimatter") { - global.prestige.AntiPlasmid.count += 12; - global.stats.antiplasmid += 12; - messageQueue(loc("city_trick_msg", [12, loc("resource_AntiPlasmid_plural_name")]), "success", false, ["events"]); - } else { - global.prestige.Plasmid.count += 12; - global.stats.plasmid += 12; - messageQueue(loc("city_trick_msg", [12, loc("resource_Plasmid_plural_name")]), "success", false, ["events"]); - } - } - $(`#${tot}${id}`).remove(); - setTimeout(function() { - if (id === 1 && trick) { - $(".popper").hide(); - } - }, 250); - } - }); - } - function single_emblem(achieve, size, icon, iconName, fool, uAffix) { - return global.stats.achieve[achieve] && (fool ? global.stats.achieve[achieve][uAffix] - 1 : global.stats.achieve[achieve][uAffix]) > 0 ? `

    ${svgIcons(icon)}${sLevel(global.stats.achieve[achieve][uAffix])} ${iconName}

    ` : ""; - } - function format_emblem(achieve, size, baseIcon, fool, universe) { - if (!size) { - size = 10; - } - if (!baseIcon) { - baseIcon = getBaseIcon(achieve, "achievement"); - } - let emblem = ``; - if (!universe) { - emblem = emblem + single_emblem(achieve, size, baseIcon, loc(global.settings.icon), fool, "l"); - emblem = emblem + single_emblem(achieve, size, "atom", loc("universe_antimatter"), fool, "a"); - emblem = emblem + single_emblem(achieve, size, "evil", loc("universe_evil"), fool, "e"); - emblem = emblem + single_emblem(achieve, size, "heavy", loc("universe_heavy"), fool, "h"); - emblem = emblem + single_emblem(achieve, size, "micro", loc("universe_micro"), fool, "m"); - emblem = emblem + single_emblem(achieve, size, "magic", loc("universe_magic"), fool, "mg"); - } else { - switch (universe) { - case "standard": - emblem = emblem + single_emblem(achieve, size, baseIcon, loc(global.settings.icon), fool, "l"); - break; - case "antimatter": - emblem = emblem + single_emblem(achieve, size, "atom", loc("universe_antimatter"), fool, "a"); - break; - case "evil": - emblem = emblem + single_emblem(achieve, size, "evil", loc("universe_evil"), fool, "e"); - break; - case "heavy": - emblem = emblem + single_emblem(achieve, size, "heavy", loc("universe_heavy"), fool, "h"); - break; - case "micro": - emblem = emblem + single_emblem(achieve, size, "micro", loc("universe_micro"), fool, "m"); - break; - case "magic": - emblem = emblem + single_emblem(achieve, size, "magic", loc("universe_magic"), fool, "mg"); - break; - } - } - return emblem; - } - function binary_limit_test(f, start = 1, startIsMin = true) { - if (start !== Math.floor(start) || start < 1) { - return 0; - } - let num = start; - while (f(num)) { - num *= 2; - } - let test = Math.floor(num / 2); - if (num === start) { - num = 0; - if (startIsMin) { - test = 0; - } - } else { - num = test; - } - while (test > 1) { - test = Math.floor(test / 2); - if (f(num + test)) { - num += test; - } - } - return num; - } - function fibonacci(num, memo) { - memo = memo || {}; - if (memo[num]) - return memo[num]; - if (num <= 1) - return 1; - return memo[num] = fibonacci(num - 1, memo) + fibonacci(num - 2, memo); - } - function randomKey(obj) { - var keys = Object.keys(obj); - return keys[keys.length * Math.random() << 0]; - } - function sLevel(level) { - switch (level) { - case 1: - return loc("basic"); - case 2: - return loc("plain"); - case 3: - return loc("bronze"); - case 4: - return loc("silver"); - case 5: - return loc("gold"); - default: - return ""; - } - } - function calcGenomeScore(genome, wiki, tRanks) { - if (!tRanks) { - tRanks = genome.ranks || {}; - } - let genes = 0; - if (wiki) { - Object.keys(wiki.ascended).forEach(function(uni) { - genes += wiki.ascended[uni]; - }); - } else if (global.stats.achieve[`ascended`]) { - for (let i = 0; i < universe_affixes.length; i++) { - if (global.stats.achieve.ascended.hasOwnProperty(universe_affixes[i])) { - genes += global.stats.achieve.ascended[universe_affixes[i]]; - } - } - } - let active_genus = genome.genus === "hybrid" ? genome.hybrid : [genome.genus]; - let oppose_genus = []; - active_genus.forEach(function(g) { - Object.keys(genus_def[g].traits).forEach(function(t) { - let value = traits[t].val; - genes -= value; - }); - oppose_genus = oppose_genus.concat(genus_def[g].oppose); - }); - if (wiki) { - genes += wiki.technophobe * 4; - } else if (global.stats.achieve["technophobe"] && global.stats.achieve.technophobe.l >= 1) { - genes += global.stats.achieve.technophobe.l * 4; - } - let max_complexity = 1; - let complexity = { utility: 0, resource: 0, production: 0, combat: 0 }; - let neg_complexity = { utility: 0, resource: 0, production: 0, combat: 0 }; - for (let i = 0; i < genome.traitlist.length; i++) { - let taxonomy = traits[genome.traitlist[i]].taxonomy; - let gene_cost = traits[genome.traitlist[i]].val; - if (traits[genome.traitlist[i]].val >= 0) { - if (complexity[taxonomy] > max_complexity) { - gene_cost -= max_complexity - complexity[taxonomy]; - } - complexity[taxonomy]++; - } else { - if (neg_complexity[taxonomy] >= max_complexity) { - gene_cost += neg_complexity[taxonomy]; - } - neg_complexity[taxonomy]++; - } - if (tRanks[genome.traitlist[i]]) { - if (traits[genome.traitlist[i]].val >= 0) { - switch (tRanks[genome.traitlist[i]]) { - case 0.1: - gene_cost -= 3; - break; - case 0.25: - gene_cost -= 2; - break; - case 0.5: - gene_cost--; - break; - case 2: - gene_cost = Math.max(Math.round(gene_cost * 1.5), gene_cost + 1); - ; - break; - case 3: - gene_cost = Math.max(Math.round(gene_cost * 2), gene_cost + 2); - ; - break; - case 4: - gene_cost = Math.max(Math.round(gene_cost * 2.5), gene_cost + 3); - ; - break; - } - if (gene_cost < 1) { - gene_cost = 1; - } - } else { - switch (tRanks[genome.traitlist[i]]) { - case 0.1: - gene_cost -= 3; - break; - case 0.25: - gene_cost -= 2; - break; - case 0.5: - gene_cost--; - break; - case 2: - gene_cost++; - break; - case 3: - gene_cost += 2; - break; - case 4: - gene_cost += 3; - break; - } - } - } - let genus_origin = races[traits[genome.traitlist[i]].origin].type === "hybrid" ? races[traits[genome.traitlist[i]].origin].hybrid : [races[traits[genome.traitlist[i]].origin].type]; - if (active_genus.filter((x) => genus_origin.includes(x)).length > 0) { - active_genus.filter((x) => genus_origin.includes(x)).length === 1 ? gene_cost-- : gene_cost -= 2; - } - if (oppose_genus.filter((x) => genus_origin.includes(x)).length > 0) { - oppose_genus.filter((x) => genus_origin.includes(x)).length === 1 ? gene_cost++ : gene_cost += 2; - } - genes -= gene_cost; - } - return genes; - } - function updateResetStats() { - global.stats.reset++; - global.stats.tdays += global.stats.days; - global.stats.days = 0; - global.stats.tknow += global.stats.know; - global.stats.know = 0; - global.stats.tstarved += global.stats.starved; - global.stats.starved = 0; - global.stats.tdied += global.stats.died; - global.stats.died = 0; - global.stats.tsac += global.stats.sac; - global.stats.sac = 0; - global.stats.tcattle += global.stats.cattle; - global.stats.cattle = 0; - global.stats.tmurders += global.stats.murders; - global.stats.murders = 0; - global.stats.tpsykill += global.stats.psykill; - global.stats.psykill = 0; - } - function deepClone(obj) { - if (obj === null || typeof obj !== "object") { - return obj; - } - if (obj instanceof Date) { - return new Date(obj.getTime()); - } - if (Array.isArray(obj)) { - var clonedArr = []; - obj.forEach(function(element) { - clonedArr.push(deepClone(element)); - }); - return clonedArr; - } - let clonedObj = new obj.constructor(); - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - clonedObj[prop] = deepClone(obj[prop]); - } - } - return clonedObj; - } - function flib(func, val, val2) { - switch (func) { - case "reverse": { - let str = val.toLowerCase().split("").reverse().join(""); - return str.charAt(0).toUpperCase() + str.slice(1); - } - case "name": { - if (eventActive("fool", 2021)) { - return flib("reverse", races[global.race.species].name); - } - return races[global.race.species].name; - } - case "curve": { - let exp = val2 || 1.5; - return 1 - (1 - val) ** exp; - } - } - return false; - } - function eventActive(event, val) { - switch (event) { - case "easter": - return getEaster(); - case "halloween": - return getHalloween(); - case "fool": { - const date2 = /* @__PURE__ */ new Date(); - if (!global.settings.boring && date2.getMonth() === 3 && date2.getDate() === 1) { - if (val) { - return date2.getFullYear() === val ? true : false; - } else { - return true; - } - } - return false; - } - case "launch_day": { - const date2 = /* @__PURE__ */ new Date(); - if (!global.settings.boring && date2.getMonth() === 4 && date2.getDate() === 6) { - return true; - } - return false; - } - case "summer": { - const date2 = /* @__PURE__ */ new Date(); - if (!global.settings.boring && date2.getMonth() === 5 && [20, 21, 22].includes(date2.getDate())) { - if (global.city.hasOwnProperty("foundry") && !global.city.foundry.hasOwnProperty("Thermite")) { - global.city.foundry["Thermite"] = 0; - } - if (!global.resource.hasOwnProperty("Thermite")) { - global.resource["Thermite"] = { - name: loc(`resource_Thermite_name`), - display: false, - value: 0, - amount: 0, - crates: 0, - diff: 0, - delta: 0, - max: -1, - rate: 0 - }; - } - return true; - } else if (global.city.hasOwnProperty("foundry") && global.city.foundry.hasOwnProperty("Thermite")) { - global.city.foundry.crafting -= global.city.foundry["Thermite"]; - global.civic.craftsman.workers -= global.city.foundry["Thermite"]; - global.civic[global.civic.d_job].workers += global.city.foundry["Thermite"]; - delete global.city.foundry["Thermite"]; - } - return false; - } - case "firework": { - const date2 = /* @__PURE__ */ new Date(); - if (!global.settings.boring && date2.getMonth() === 6 && [1, 2, 3, 4].includes(date2.getDate())) { - let region = global.race["cataclysm"] || global.race["orbit_decayed"] ? "space" : "city"; - if (!global[region].hasOwnProperty("firework")) { - global[region]["firework"] = { - count: 0, - on: 0 - }; - } - return true; - } else if (global.city.hasOwnProperty("firework") || global.space.hasOwnProperty("firework")) { - delete global.city["firework"]; - delete global.space["firework"]; - } - return false; - } - } - return false; - } - function getEaster() { - const date2 = /* @__PURE__ */ new Date(); - let year = date2.getFullYear(); - if (!global.special.egg.hasOwnProperty(year)) { - global.special.egg[year] = { - egg1: false, - egg2: false, - egg3: false, - egg4: false, - egg5: false, - egg6: false, - egg7: false, - egg8: false, - egg9: false, - egg10: false, - egg11: false, - egg12: false - }; - } - if (global.special.egg.hasOwnProperty(year) && !global.special.egg[year].hasOwnProperty("egg13")) { - global.special.egg[year]["egg13"] = false; - global.special.egg[year]["egg14"] = false; - global.special.egg[year]["egg15"] = false; - } - if (global.special.egg.hasOwnProperty(year) && !global.special.egg[year].hasOwnProperty("egg16")) { - global.special.egg[year]["egg16"] = false; - global.special.egg[year]["egg17"] = false; - global.special.egg[year]["egg18"] = false; - } - let f = Math.floor, G = year % 19, C = f(year / 100), H = (C - f(C / 4) - f((8 * C + 13) / 25) + 19 * G + 15) % 30, I = H - f(H / 28) * (1 - f(29 / (H + 1)) * f((21 - G) / 11)), J = (year + f(year / 4) + I + 2 - C + f(C / 4)) % 7, L = I - J, month = 3 + f((L + 40) / 44), day = L + 28 - 31 * f(month / 4); - let easter2 = { - date: [month - 1, day], - active: false, - endDate: [month - 1, day], - hint: false, - hintDate: [month - 1, day], - solve: false, - solveDate: [month - 1, day] - }; - if (global.settings.boring) { - return easter2; - } - easter2.endDate[1] += 10; - if (easter2.endDate[0] === 2 && easter2.endDate[1] > 31 || easter2.endDate[0] === 3 && easter2.endDate[1] > 30) { - easter2.endDate[1] -= easter2.endDate[0] === 2 ? 31 : 30; - easter2.endDate[0]++; - } - easter2.hintDate[1] += 1; - if (easter2.hintDate[0] === 2 && easter2.hintDate[1] > 31 || easter2.hintDate[0] === 3 && easter2.hintDate[1] > 30) { - easter2.hintDate[1] -= easter2.hintDate[0] === 2 ? 31 : 30; - easter2.hintDate[0]++; - } - easter2.solveDate[1] += 3; - if (easter2.solveDate[0] === 2 && easter2.solveDate[1] > 31 || easter2.solveDate[0] === 3 && easter2.solveDate[1] > 30) { - easter2.solveDate[1] -= easter2.solveDate[0] === 2 ? 31 : 30; - easter2.solveDate[0]++; - } - let cur_day = date2.getDate(); - let cur_month = date2.getMonth(); - const isAfterBeginning = cur_month > easter2.date[0] || cur_month === easter2.date[0] && cur_day >= easter2.date[1]; - const isBeforeEnd = cur_month < easter2.endDate[0] || cur_month === easter2.endDate[0] && cur_day <= easter2.endDate[1]; - if (isAfterBeginning && isBeforeEnd) { - easter2.active = true; - if (cur_month >= easter2.hintDate[0] && cur_day >= easter2.hintDate[1] && cur_month <= easter2.endDate[0] && cur_day <= easter2.endDate[1]) { - easter2.hint = true; - } - if (cur_month >= easter2.solveDate[0] && cur_day >= easter2.solveDate[1] && cur_month <= easter2.endDate[0] && cur_day <= easter2.endDate[1]) { - easter2.solve = true; - } - } - return easter2; - } - function getHalloween() { - const date2 = /* @__PURE__ */ new Date(); - let year = date2.getFullYear(); - if (!global.special.trick.hasOwnProperty(year)) { - global.special.trick[year] = { - trick1: false, - trick2: false, - trick3: false, - trick4: false, - trick5: false, - trick6: false, - trick7: false, - treat1: false, - treat2: false, - treat3: false, - treat4: false, - treat5: false, - treat6: false, - treat7: false - }; - } - let halloween = { - date: [9, 28], - active: false, - endDate: [10, 4], - hint: false, - hintDate: [9, 29], - solve: false, - solveDate: [9, 31] - }; - if (global.settings.boring) { - return halloween; - } - let start = /* @__PURE__ */ new Date(`${halloween.date[0] + 1}/${halloween.date[1]}/${year}`); - let end = /* @__PURE__ */ new Date(`${halloween.endDate[0] + 1}/${halloween.endDate[1]}/${year}`); - if (date2 >= start && date2 <= end) { - halloween.active = true; - let hint = /* @__PURE__ */ new Date(`${halloween.hintDate[0] + 1}/${halloween.hintDate[1]}/${year}`); - if (date2 >= hint && date2 <= end) { - halloween.hint = true; - } - let sol = /* @__PURE__ */ new Date(`${halloween.solveDate[0] + 1}/${halloween.solveDate[1]}/${year}`); - if (date2 >= sol && date2 <= end) { - halloween.solve = true; - } - } - return halloween; - } - function shrineBonusActive() { - return global.race["magnificent"] && global.city.hasOwnProperty("shrine") && global.city.shrine.count > 0; - } - function getShrineBonus(type) { - let shrine_bonus = { - mult: 1, - add: 0, - active: false - }; - if (shrineBonusActive()) { - switch (type) { - case "metal": - let metal = global.city.shrine.metal; - if (global.city.calendar.moon >= 7 && global.city.calendar.moon < 14 || global.city.calendar.moon === 14) { - metal += global.city.shrine.cycle; - } - shrine_bonus.mult += +(metal / 100 * traits.magnificent.vars()[3]); - if (metal > 0) { - shrine_bonus.active = true; - } - break; - case "tax": - let tax = global.city.shrine.tax; - if (global.city.calendar.moon >= 21 || global.city.calendar.moon === 14) { - tax += global.city.shrine.cycle; - } - shrine_bonus.mult += +(tax / 100 * traits.magnificent.vars()[2]); - if (tax > 0) { - shrine_bonus.active = true; - } - break; - case "know": - let know = global.city.shrine.know; - if (global.city.calendar.moon > 14 && global.city.calendar.moon <= 21 || global.city.calendar.moon === 14) { - know += global.city.shrine.cycle; - } - shrine_bonus.add += +(know * traits.magnificent.vars()[0]); - shrine_bonus.mult += +(know * traits.magnificent.vars()[1] / 100); - if (know > 0) { - shrine_bonus.active = true; - } - break; - case "morale": - let morale = global.city.shrine.morale; - if (global.city.calendar.moon > 0 && global.city.calendar.moon <= 7 || global.city.calendar.moon === 14) { - morale += global.city.shrine.cycle; - } - shrine_bonus.add += morale * traits.magnificent.vars()[4]; - if (morale > 0) { - shrine_bonus.active = true; - } - break; - default: - break; - } - } - return shrine_bonus; - } - var valAdjust = { - promiscuous: false, - revive: false, - fast_growth: false, - spores: false, - terrifying: false, - fibroblast: true, - hivemind: true, - imitation: true, - elusive: true, - chameleon: true, - blood_thirst: true, - selenophobia: true, - hooved: true, - anthropophagite: true, - unfathomable: false, - darkness: false, - living_tool: false, - living_materials: true, - blurry: true, - playful: true, - ghostly: true, - environmentalist: true, - catnip: true, - anise: true - }; - function getTraitVals(trait, rank, species) { - let vals = traits[trait].hasOwnProperty("vars") ? traits[trait].vars(rank) : []; - if (valAdjust.hasOwnProperty(trait)) { - if (trait === "fibroblast") { - vals = [vals[0] * 5]; - } else if (trait === "hivemind" && global.race["high_pop"]) { - vals = [vals[0] * traits.high_pop.vars()[0]]; - } else if (trait === "imitation") { - vals.push(races[global.race["srace"] || "protoplasm"].name); - } else if (trait === "elusive") { - vals = [Math.round((1 / 30 / (1 / (30 + vals[0])) - 1) * 100)]; - } else if (trait === "chameleon") { - vals = [vals[0], Math.round((1 / 30 / (1 / (30 + vals[1])) - 1) * 100)]; - } else if (trait === "blood_thirst") { - vals = [Math.ceil(Math.log2(vals[0]))]; - } else if (trait === "selenophobia") { - vals = [14 - vals[0], vals[0]]; - } else if (trait === "hooved") { - vals.unshift(hoovedRename(false, species)); - } else if (trait === "anthropophagite") { - vals = [vals[0] * 1e4]; - } else if (trait === "living_materials") { - vals = [global.resource.Lumber.name, global.resource.Plywood.name, global.resource.Furs.name, loc("resource_Amber_name")]; - } else if (trait === "environmentalist") { - let coal = -actions.city.coal_power.powered(true); - let oil = -actions.city.oil_power.powered(true); - vals = [coal + vals[0], oil + vals[0] - 1, oil + vals[0] + 1, coal, oil, vals[1]]; - } else if (trait === "blurry") { - if (global.race["warlord"]) { - vals = [+((100 / (100 - vals[0]) - 1) * 100).toFixed(1)]; - } - } else if (trait === "playful") { - if (global.race["warlord"]) { - vals = [vals[0] * 100, global.resource.Furs.name]; - } - } else if (trait === "ghostly") { - if (global.race["warlord"]) { - vals = [vals[0], +((vals[1] - 1) * 100).toFixed(0), global.resource.Soul_Gem.name]; - } - } else if (trait === "catnip" || trait === "anise") { - vals = rank <= 2 ? [] : rank === 3 ? [vals[0]] : [vals[0], vals[1]]; - } else if (!valAdjust[trait]) { - vals = []; - } - } else if (trait === "elemental") { - switch (traits.elemental.vars(rank)[0]) { - case "electric": - vals = [loc(`element_electric`), traits.elemental.vars(rank)[1], traits.elemental.vars(rank)[5]]; - break; - case "acid": - vals = [loc(`element_acid`), traits.elemental.vars(rank)[2], traits.elemental.vars(rank)[5]]; - break; - case "fire": - vals = [loc(`element_fire`), traits.elemental.vars(rank)[3], traits.elemental.vars(rank)[5]]; - break; - case "frost": - vals = [loc(`element_frost`), traits.elemental.vars(rank)[4], traits.elemental.vars(rank)[5], loc("city_biolab")]; - break; - } - } - return vals; - } - function hoovedRename(style, species = global.race.species) { - let type = species === global.race.species ? global.race.maintype || races[species].type : races[species].type; - if (species === "sludge") { - return style ? "craft" : loc("resource_Beaker_name"); - } else if (species === "cath") { - return style ? "craft" : loc("resource_Box_name"); - } else if (species === "wolven") { - return style ? "craft" : loc("resource_ChewToy_name"); - } else if (species === "dracnid") { - return style ? "craft" : loc("resource_Hoard_name"); - } else if (species === "seraph") { - return style ? "forge" : loc("resource_Halo_name"); - } else if (species === "cyclops") { - return style ? "craft" : loc("resource_Monocle_name"); - } else if (species === "kobold") { - return style ? "craft" : loc("resource_Candle_name"); - } else if (species === "tuskin") { - return style ? "craft" : loc("resource_Goggles_name"); - } else if (species === "sharkin") { - return style ? "craft" : loc("resource_ToothSharpener_name"); - } else if (species === "beholder") { - return style ? "craft" : loc("resource_ContactLens_name"); - } else if (species === "djinn") { - return style ? "craft" : loc("resource_Bottle_name"); - } else if (races[species].type === "humanoid") { - return style ? "craft" : loc("resource_Sandals_name"); - } else if (races[species].type === "avian") { - return style ? "craft" : loc("resource_Perch_name"); - } else if (races[species].type === "plant") { - return style ? "craft" : loc("resource_Planter_name"); - } else if (races[species].type === "fungi") { - return style ? "craft" : loc("resource_DampCloth_name"); - } else if (races[species].type === "reptilian") { - return style ? "craft" : loc("resource_HeatRock_name"); - } else if (races[species].type === "fey") { - return style ? "craft" : loc("resource_PixieDust_name"); - } else if (races[species].type === "synthetic") { - return style ? "craft" : loc("resource_Battery_name"); - } else { - return style ? "forge" : loc("resource_Horseshoe_name"); - } - } - var traitExtra = { - infiltrator: [ - loc(`wiki_trait_effect_infiltrator_ex1`), - loc(`wiki_trait_effect_infiltrator_ex2`, [ - [ - `${loc("tech_steel")}`, - `${loc("tech_electricity")}`, - `${loc("tech_electronics")}`, - `${loc("tech_fission")}`, - `${loc("tech_rocketry")}`, - `${loc("tech_artificial_intelligence")}`, - `${loc("tech_quantum_computing")}`, - `${loc("tech_virtual_reality")}`, - `${loc("tech_shields")}`, - `${loc("tech_ai_core")}`, - `${loc("tech_graphene_processing")}`, - `${loc("tech_nanoweave")}`, - `${loc("tech_orichalcum_analysis")}`, - `${loc("tech_infernium_fuel")}` - ].join(", ") - ]) - ], - heavy: [ - loc(`wiki_trait_effect_heavy_ex1`, [rName("Stone"), rName("Cement"), rName("Wrought_Iron")]) - ], - sniper: [ - loc(`wiki_trait_effect_sniper_ex1`) - ], - hooved: [ - function(opts) { - return loc(`wiki_trait_effect_hooved_ex1`, [hoovedRename(false, opts.species)]); - }, - loc(`wiki_trait_effect_hooved_ex2`, [ - `${global.resource.hasOwnProperty("Lumber") ? global.resource.Lumber.name : loc("resource_Lumber_name")}`, - `${global.resource.hasOwnProperty("Copper") ? global.resource.Copper.name : loc("resource_Copper_name")}`, - `${global.resource.hasOwnProperty("Iron") ? global.resource.Iron.name : loc("resource_Iron_name")}`, - `${global.resource.hasOwnProperty("Steel") ? global.resource.Steel.name : loc("resource_Steel_name")}`, - `${global.resource.hasOwnProperty("Adamantite") ? global.resource.Adamantite.name : loc("resource_Adamantite_name")}`, - `${global.resource.hasOwnProperty("Orichalcum") ? global.resource.Orichalcum.name : loc("resource_Orichalcum_name")}`, - 12, - 75, - 150, - 500, - 5e3 - ]), - loc(`wiki_trait_effect_hooved_ex3`), - function(opts) { - return loc(`wiki_trait_effect_hooved_ex4`, [`${5}`, hoovedRename(false, opts.species)]); - }, - loc(`wiki_trait_effect_hooved_ex5`, [ - `${global.resource.hasOwnProperty("Lumber") ? global.resource.Lumber.name : loc("resource_Lumber_name")}`, - `${global.resource.hasOwnProperty("Copper") ? global.resource.Copper.name : loc("resource_Copper_name")}` - ]) - ], - instinct: [ - loc(`wiki_trait_effect_instinct_ex1`, [6.67, loc("galaxy_chthonian"), 10]) - ], - logical: [ - loc(`wiki_trait_effect_logical_ex1`, [ - global.tech.hasOwnProperty("science") ? global.tech.science : 0, - global.tech.hasOwnProperty("high_tech") ? global.tech.high_tech : 0 - ]) - ], - high_pop: [ - loc(`wiki_trait_effect_high_pop_ex1`) - ], - flier: [ - loc(`wiki_trait_effect_flier_ex1`) - ], - unfathomable: [ - loc(`wiki_trait_effect_unfathomable_ex1`), - loc(`wiki_trait_effect_unfathomable_ex2`) - ] - }; - function rName(r) { - let res = global.hasOwnProperty("resource") && global.resource.hasOwnProperty(r) ? global.resource[r].name : loc(`resource_${r}_name`); - return `${res}`; - } - var altTraitDesc = { - befuddle: "warlord", - blurry: "warlord", - ghostly: "warlord", - playful: "warlord" - }; - function getTraitDesc(info, trait, opts) { - let fanatic = opts["fanatic"] || false; - let tpage = opts["tpage"] || false; - let rpage = opts["rpage"] || false; - let trank = opts["trank"] || false; - let wiki = opts["wiki"] || false; - let species = opts["species"]; - let rank = ""; - let traitName = traitSkin("name", trait, species); - let traitDesc = traitSkin("desc", trait, species); - if (tpage && ["genus", "major"].includes(traits[trait].type)) { - rank = `«${loc(`wiki_trait_rank`)} {{ rank }}»`; - } - if (tpage || rpage) { - info.append(`

    ${traitName}

    ${rank}
    `); - if (tpage && traits[trait].hasOwnProperty("val")) { - info.append(`
    ${loc(`wiki_trait_${traits[trait].type}`)}${loc(`wiki_trait_value`, [traits[trait].val])}
    `); - } else { - info.append(`
    ${loc(`wiki_trait_${traits[trait].type}`)}
    `); - } - if (fanatic) { - info.append(`
    ${loc(`wiki_trait_fanaticism`, [fanatic])}
    `); - } - } - info.append(`
    ${traitDesc}
    `); - let color = "warning"; - if (traits[trait].hasOwnProperty("val")) { - color = traits[trait].val >= 0 ? "success" : "danger"; - } - if (tpage && ["genus", "major"].includes(traits[trait].type)) { - info.append(`
    `); - } else { - if (wiki || global.stats.feat["journeyman"] && global.stats.achieve["seeder"] && global.stats.achieve.seeder.l > 0) { - let trait_desc = ""; - if (trait === "elemental") { - trait_desc = loc(`wiki_trait_effect_${trait}_${traits.elemental.vars()[0]}`, getTraitVals(trait, trank, species)); - } else if (["catnip", "anise"].includes(trait)) { - let rank2 = trank; - trait_desc = loc(`wiki_trait_effect_${trait}${rank2}`, getTraitVals(trait, trank, species)); - } else { - if (global?.race?.universe === "evil" && global?.civic?.govern?.type != "theocracy" && ["spiritual", "blasphemous"].includes(trait)) { - let alt_trait = trait === "spiritual" ? "manipulator" : "blasphemous_evil"; - trait_desc = loc(`wiki_trait_effect_${alt_trait}`, getTraitVals(trait, trank, species)); - } else { - let key = altTraitDesc[trait] && global.race.hasOwnProperty(altTraitDesc[trait]) ? altTraitDesc[trait] : "effect"; - trait_desc = loc(`wiki_trait_${key}_${trait}`, getTraitVals(trait, trank, species)); - } - } - info.append(`
    ${trait_desc}
    `); - } - } - if (traitExtra[trait] && (tpage || rpage)) { - traitExtra[trait].forEach(function(te) { - if (typeof te !== "string") { - te = te(opts); - } - info.append(`
    ${te}
    `); - }); - } - if (tpage && ["genus", "major"].includes(traits[trait].type)) { - let data = { rank: global.race[trait] || 1 }; - vBind({ - el: `#${traits[trait].type}_${trait}`, - data, - methods: { - getTraitDesc(rk) { - if (trait === "elemental") { - return loc(`wiki_trait_effect_${trait}_${traits.elemental.vars()[0]}`, getTraitVals(trait, rk, species)); - } else if (["catnip", "anise"].includes(trait)) { - return loc(`wiki_trait_effect_${trait}${rk}`, getTraitVals(trait, rk, species)); - } else if (global?.race?.universe === "evil" && global?.civic?.govern?.type != "theocracy" && ["spiritual", "blasphemous"].includes(trait)) { - let alt_trait = trait === "spiritual" ? "manipulator" : "blasphemous_evil"; - return loc(`wiki_trait_effect_${alt_trait}`, getTraitVals(trait, rk, species)); - } - let key = altTraitDesc[trait] && global.race.hasOwnProperty(altTraitDesc[trait]) ? altTraitDesc[trait] : "effect"; - return loc(`wiki_trait_${key}_${trait}`, getTraitVals(trait, rk, species)); - }, - up() { - switch (data.rank) { - case 0.1: - data.rank = 0.25; - break; - case 0.25: - data.rank = 0.5; - break; - case 0.5: - data.rank = 1; - break; - case 1: - data.rank = 2; - break; - case 2: - data.rank = 3; - break; - case 3: - data.rank = 4; - break; - case 4: - data.rank = 4; - break; - } - }, - down() { - switch (data.rank) { - case 0.1: - data.rank = 0.1; - break; - case 0.25: - data.rank = 0.1; - break; - case 0.5: - data.rank = 0.25; - break; - case 1: - data.rank = 0.5; - break; - case 2: - data.rank = 1; - break; - case 3: - data.rank = 2; - break; - case 4: - data.rank = 3; - break; - } - } - } - }); - } - } - - // src/achieve.js - var achieve_list = { - misc: [ - "apocalypse", - "ascended", - "dreaded", - "anarchist", - "second_evolution", - "blackhole", - "warmonger", - "red_tactics", - "pacifist", - "neutralized", - "paradise", - "scrooge", - "madagascar_tree", - "godwin", - "laser_shark", - "infested", - "mass_starvation", - "colonist", - "world_domination", - "illuminati", - "syndicate", - "cult_of_personality", - "doomed", - "pandemonium", - "blood_war", - "landfill", - "seeder", - "miners_dream", - "shaken", - "blacken_the_sun", - "trade", - "resonance", - "enlightenment", - "gladiator", - "corrupted", - "red_dead", - "godslayer", - "traitor", - "doppelganger" - ], - species: [ - "mass_extinction", - "extinct_human", - "extinct_elven", - "extinct_orc", - "extinct_cath", - "extinct_wolven", - "extinct_vulpine", - "extinct_centaur", - "extinct_rhinotaur", - "extinct_capybara", - "extinct_kobold", - "extinct_goblin", - //'extinct_rhinotaur','extinct_capybara','extinct_bearkin','extinct_porkenari','extinct_hedgeoken','extinct_kobold','extinct_goblin', - "extinct_gnome", - "extinct_ogre", - "extinct_cyclops", - "extinct_troll", - "extinct_tortoisan", - "extinct_gecko", - "extinct_slitheryn", - "extinct_arraak", - "extinct_pterodacti", - "extinct_dracnid", - "extinct_entish", - "extinct_cacti", - "extinct_pinguicula", - "extinct_sporgar", - "extinct_shroomi", - "extinct_moldling", - "extinct_mantis", - "extinct_scorpid", - "extinct_antid", - "extinct_sharkin", - "extinct_octigoran", - "extinct_dryad", - "extinct_satyr", - "extinct_phoenix", - "extinct_salamander", - "extinct_yeti", - "extinct_wendigo", - "extinct_tuskin", - "extinct_kamel", - "extinct_balorg", - "extinct_imp", - "extinct_seraph", - "extinct_unicorn", - "extinct_synth", - "extinct_nano", - "extinct_ghast", - "extinct_shoggoth", - "extinct_dwarf", - "extinct_raccoon", - "extinct_lichen", - "extinct_wyvern", - "extinct_beholder", - "extinct_djinn", - "extinct_narwhal", - "extinct_bombardier", - "extinct_nephilim", - "extinct_junker", - "extinct_sludge", - "extinct_ultra_sludge", - "extinct_custom", - "extinct_hybrid" - ], - genus: [ - "creator", - "genus_humanoid", - "genus_carnivore", - "genus_herbivore", - "genus_small", - "genus_giant", - "genus_reptilian", - "genus_avian", - //'creator','genus_humanoid','genus_carnivore','genus_omnivore','genus_herbivore','genus_small','genus_giant','genus_reptilian','genus_avian', - "genus_insectoid", - "genus_plant", - "genus_fungi", - "genus_aquatic", - "genus_fey", - "genus_heat", - "genus_polar", - "genus_sand", - "genus_demonic", - "genus_angelic", - "genus_synthetic", - "genus_eldritch" - ], - planet: [ - "explorer", - "biome_grassland", - "biome_oceanic", - "biome_forest", - "biome_desert", - "biome_volcanic", - "biome_tundra", - "biome_savanna", - "biome_swamp", - "biome_ashland", - "biome_taiga", - "biome_hellscape", - "biome_eden", - "atmo_toxic", - "atmo_mellow", - "atmo_rage", - "atmo_stormy", - "atmo_ozone", - "atmo_magnetic", - "atmo_trashed", - "atmo_elliptical", - "atmo_flare", - "atmo_dense", - "atmo_unstable", - "atmo_permafrost", - "atmo_retrograde", - "atmo_kamikaze" - ], - universe: [ - "vigilante", - "squished", - "double_density", - "cross", - "macro", - "marble", - "heavyweight", - "whitehole", - "heavy", - "canceled", - "eviltwin", - "microbang", - "pw_apocalypse", - "fullmetal", - "pass", - "soul_sponge", - "nightmare", - "escape_velocity", - "what_is_best" - ], - challenge: [ - "joyless", - "steelen", - "dissipated", - "technophobe", - "wheelbarrow", - "iron_will", - "failed_history", - "banana", - "pathfinder", - "ashanddust", - "exodus", - "obsolete", - "bluepill", - "retired", - "gross", - "lamentis", - "overlord", - `adam_eve`, - "endless_hunger" - ] - }; - var flairData = { - colonist: [flib("name")] - }; - var descData = { - trade: [750, 50] - }; - var achievements = {}; - Object.keys(achieve_list).forEach(function(type) { - achieve_list[type].forEach((achieve) => achievements[achieve] = { - name: loc(`achieve_${achieve}_name`), - desc: descData[achieve] ? loc(`achieve_${achieve}_desc`, descData[achieve]) : loc(`achieve_${achieve}_desc`), - flair: flairData[achieve] ? loc(`achieve_${achieve}_flair`, flairData[achieve]) : loc(`achieve_${achieve}_flair`), - type - }); - }); - var feats = { - utopia: { - name: loc("feat_utopia_name"), - desc: loc("feat_utopia_desc"), - flair: loc("feat_utopia_flair") - }, - take_no_advice: { - name: loc("feat_take_no_advice_name"), - desc: loc("feat_take_no_advice_desc"), - flair: loc("feat_take_no_advice_flair") - }, - ill_advised: { - name: loc("feat_ill_advised_name"), - desc: loc("feat_ill_advised_desc"), - flair: loc("feat_ill_advised_flair") - }, - organ_harvester: { - name: loc("feat_organ_harvester_name"), - desc: loc("feat_organ_harvester_desc"), - flair: loc("feat_organ_harvester_flair") - }, - the_misery: { - name: loc("feat_the_misery_name"), - desc: loc("feat_the_misery_desc"), - flair: loc("feat_the_misery_flair") - }, - energetic: { - name: loc("feat_energetic_name"), - desc: loc("feat_energetic_desc"), - flair: loc("feat_energetic_flair") - }, - garbage_pie: { - name: loc("feat_garbage_pie_name"), - desc: loc("feat_garbage_pie_desc"), - flair: loc("feat_garbage_pie_flair") - }, - finish_line: { - name: loc("feat_finish_line_name"), - desc: loc("feat_finish_line_desc"), - flair: loc("feat_finish_line_flair") - }, - blank_slate: { - name: loc("feat_blank_slate_name"), - desc: loc("feat_blank_slate_desc"), - flair: loc("feat_blank_slate_flair") - }, - supermassive: { - name: loc("feat_supermassive_name"), - desc: loc("feat_supermassive_desc"), - flair: loc("feat_supermassive_flair") - }, - steelem: { - name: loc("feat_steelem_name"), - desc: loc("feat_steelem_desc"), - flair: loc("feat_steelem_flair") - }, - banana: { - name: loc("feat_banana_name"), - desc: loc("feat_banana_desc", [500, 500]), - flair: loc("feat_banana_flair") - }, - rocky_road: { - name: loc("feat_rocky_road_name"), - desc: loc("feat_rocky_road_desc"), - flair: loc("feat_rocky_road_flair") - }, - demon_slayer: { - name: loc("feat_demon_slayer_name"), - desc: loc("feat_demon_slayer_desc"), - flair: loc("feat_demon_slayer_flair") - }, - equilibrium: { - name: loc("feat_equilibrium_name"), - desc: loc("feat_equilibrium_desc"), - flair: loc("feat_equilibrium_flair") - }, - planned_obsolescence: { - name: loc("feat_planned_obsolescence_name"), - desc: loc("feat_planned_obsolescence_desc"), - flair: loc("feat_planned_obsolescence_flair") - }, - digital_ascension: { - name: loc("feat_digital_ascension_name"), - desc: loc("feat_digital_ascension_desc"), - flair: loc("feat_digital_ascension_flair") - }, - grand_death_tour: { - name: loc("feat_grand_death_tour_name"), - desc: loc("feat_grand_death_tour_desc", [6]), - flair: loc("feat_grand_death_tour_flair") - }, - novice: { - name: loc("feat_novice_name"), - desc: loc("feat_achievement_hunter_desc", [10]), - flair: loc("feat_novice_flair") - }, - journeyman: { - name: loc("feat_journeyman_name"), - desc: loc("feat_achievement_hunter_desc", [25]), - flair: loc("feat_journeyman_flair") - }, - adept: { - name: loc("feat_adept_name"), - desc: loc("feat_achievement_hunter_desc", [50]), - flair: loc("feat_adept_flair") - }, - master: { - name: loc("feat_master_name"), - desc: loc("feat_achievement_hunter_desc", [75]), - flair: loc("feat_master_flair") - }, - grandmaster: { - name: loc("feat_grandmaster_name"), - desc: loc("feat_achievement_hunter_desc", [100]), - flair: loc("feat_grandmaster_flair") - }, - god: { - name: loc("feat_god_name"), - desc: loc("feat_achievement_hunter_desc", [150]), - flair: loc("feat_god_flair") - }, - nephilim: { - name: loc("feat_nephilim_name"), - desc: loc("feat_nephilim_desc"), - flair: loc("feat_nephilim_flair") - }, - twisted: { - name: loc("feat_twisted_name"), - desc: loc("feat_twisted_desc"), - flair: loc("feat_twisted_flair") - }, - slime_lord: { - name: loc("feat_slime_lord_name"), - desc: loc("feat_slime_lord_desc"), - flair: loc("feat_slime_lord_flair") - }, - annihilation: { - name: loc("feat_annihilation_name"), - desc: loc("feat_annihilation_desc"), - flair: loc("feat_annihilation_flair") - }, - immortal: { - name: loc("feat_immortal_name"), - desc: loc("feat_immortal_desc"), - flair: loc("feat_immortal_flair") - }, - wish: { - name: loc("feat_wish_name"), - desc: loc("feat_wish_desc"), - flair: loc("feat_wish_flair") - }, - friday: { - name: loc("feat_friday_name"), - desc: loc("feat_friday_desc"), - flair: loc("feat_friday_flair") - }, - valentine: { - name: loc("feat_love_name"), - desc: loc("feat_love_desc"), - flair: loc("feat_love_flair") - }, - leprechaun: { - name: loc("feat_leprechaun_name"), - desc: loc("feat_leprechaun_desc"), - flair: loc("feat_leprechaun_flair") - }, - easter: { - name: loc("feat_easter_name"), - desc: loc("feat_easter_desc"), - flair: loc("feat_easter_flair") - }, - egghunt: { - name: loc("feat_egghunt_name"), - desc: loc("feat_egghunt_desc"), - flair: loc("feat_egghunt_flair") - }, - launch_day: { - name: loc("feat_launch_day_name"), - desc: loc("feat_launch_day_desc"), - flair: loc("feat_launch_day_flair") - }, - solstice: { - name: loc("feat_solstice_name"), - desc: loc("feat_solstice_desc"), - flair: loc("feat_solstice_flair") - }, - firework: { - name: loc("feat_firework_name"), - desc: loc("feat_firework_desc"), - flair: loc("feat_firework_flair") - }, - halloween: { - name: loc("feat_boo_name"), - desc: loc("feat_boo_desc"), - flair: loc("feat_boo_flair") - }, - trickortreat: { - name: loc("feat_trickortreat_name"), - desc: loc("feat_trickortreat_desc"), - flair: loc("feat_trickortreat_flair") - }, - thanksgiving: { - name: loc("feat_gobble_gobble_name"), - desc: loc("feat_gobble_gobble_desc"), - flair: loc("feat_gobble_gobble_flair") - }, - xmas: { - name: loc("feat_xmas_name"), - desc: loc("feat_xmas_desc"), - flair: loc("feat_xmas_flair") - }, - fool: { - name: loc("feat_fool_name"), - desc: loc("feat_fool_desc"), - flair: loc("feat_fool_flair") - } - }; - { - let al = universeLevel(); - set_alevel(al.aLvl); - set_ulevel(al.uLvl); - } - function universeLevel(universe) { - universe = universe || global.race.universe; - let affix = universeAffix(universe); - let lvl = 0; - let ulvl = 0; - Object.keys(achievements).forEach(function(achievement) { - if (global.stats.achieve[achievement]) { - lvl += global.stats.achieve[achievement].l > 5 ? 5 : global.stats.achieve[achievement].l; - if (global.stats.achieve[achievement][affix]) { - ulvl += global.stats.achieve[achievement][affix] > 5 ? 5 : global.stats.achieve[achievement][affix]; - } - } - }); - return { aLvl: lvl, uLvl: ulvl }; - } - function universeAffix(universe) { - universe = universe || global.race.universe; - switch (universe) { - case "evil": - return "e"; - case "antimatter": - return "a"; - case "heavy": - return "h"; - case "micro": - return "m"; - case "magic": - return "mg"; - default: - return "l"; - } - } - function unlockAchieve(achievement, small, rank, universe) { - if (global.race.universe !== "micro" && small === true) { - return false; - } - if (!global.settings.msgFilters.achievements.unlocked) { - global.settings.msgFilters.achievements.unlocked = true; - global.settings.msgFilters.achievements.vis = true; - } - let a_level = alevel(); - let unlock = false; - let redraw = false; - if (typeof rank === "undefined" || rank > a_level) { - rank = a_level; - } - let upgrade = true; - if (typeof global.stats.achieve[achievement] === "undefined") { - global.stats.achieve[achievement] = { l: 0 }; - upgrade = false; - } - if (global.race.universe === "micro" && small === true || global.race.universe !== "micro" && small !== true) { - if (global.stats.achieve[achievement] && global.stats.achieve[achievement].l < rank) { - global.settings.showAchieve = true; - global.stats.achieve[achievement].l = rank; - messageQueue(loc(upgrade ? "achieve_unlock_achieve_upgrade" : "achieve_unlock_achieve", [achievements[achievement].name]), "special", false, ["achievements"]); - redraw = true; - unlock = true; - } - } - if (global.stats.achieve[achievement] && universe !== "l") { - let u_affix = universe || universeAffix(); - if (!global.stats.achieve[achievement][u_affix] || global.stats.achieve[achievement][u_affix] && global.stats.achieve[achievement][u_affix] < rank) { - let i_upgrade = global.stats.achieve[achievement][u_affix] ? true : false; - global.stats.achieve[achievement][u_affix] = rank; - redraw = true; - if (!unlock) { - messageQueue(loc(i_upgrade ? "achieve_unlock_achieve_icon_upgrade" : "achieve_unlock_achieve_icon", [achievements[achievement].name]), "special", false, ["achievements"]); - } - } - } - if (redraw) { - calc_mastery(true); - drawPerks(); - drawAchieve(); - } - return unlock; - } - function unlockFeat(feat, small, rank) { - if (global.race.universe === "micro" && small !== true || global.race.universe !== "micro" && small === true) { - return false; - } - if (!global.settings.msgFilters.achievements.unlocked) { - global.settings.msgFilters.achievements.unlocked = true; - global.settings.msgFilters.achievements.vis = true; - } - let a_level = alevel(); - if (typeof rank === "undefined" || rank > a_level) { - rank = a_level; - } - if (!global.stats.feat[feat] || global.stats.feat[feat] && global.stats.feat[feat] < rank) { - let upgrade = global.stats.feat[feat] ? true : false; - global.settings.showAchieve = true; - global.stats.feat[feat] = rank; - messageQueue(loc(upgrade ? "feat_upgraded" : "feat_unlocked", [feats[feat].name]), "special", false, ["achievements"]); - drawPerks(); - drawAchieve(); - return true; - } - return false; - } - function setupStats2() { - clearElement($("#achieve")); - clearElement($("#stats")); - let stats = $('
    '); - $("#stats").append(stats); - let perks = $('
    '); - $("#perks").append(perks); - let achieve = $('
    '); - $("#achieve").append(achieve); - drawStats(); - drawPerks(); - if ($(`body`).hasClass("fool")) { - drawAchieve({ fool: true }); - } else { - drawAchieve(); - } - } - function drawAchieve(args) { - clearElement($("#achievePanel")); - let achieve = $("#achievePanel"); - let earned = 0; - let total = 0; - let level = 0; - let ulevel = 0; - let affix = universeAffix(); - let fool = typeof args === "object" && args["fool"] ? args.fool : false; - Object.keys(achievements).forEach(function(achievement) { - let baseIcon = getBaseIcon(achievement, "achievement"); - total++; - if (global.stats.achieve[achievement]) { - earned++; - level += global.stats.achieve[achievement].l > 5 ? 5 : global.stats.achieve[achievement].l; - if (global.stats.achieve[achievement][affix]) { - ulevel += global.stats.achieve[achievement][affix] > 5 ? 5 : global.stats.achieve[achievement][affix]; - } - let emblem = format_emblem(achievement, 16, baseIcon, fool); - if (fool && global.stats.achieve[achievement].l > 1 || !fool) { - achieve.append($(`
    ${achievements[achievement].name}${achievements[achievement].desc}${emblem}
    `)); - } else if (fool && global.stats.achieve[achievement].l === 1) { - earned--; - } - } - }); - set_alevel(level); - set_ulevel(ulevel); - if (fool && !global.stats.feat["fool"]) { - let thefool = $(`
    ${feats.fool.name}${loc("feat_fool_spoof")}
    `); - achieve.append(thefool); - } else { - Object.keys(feats).forEach(function(feat) { - let baseIcon = getBaseIcon(feat, "feat"); - if (global.stats.feat[feat]) { - let star = global.stats.feat[feat] > 1 ? `

    ${svgIcons(baseIcon)}

    ` : ""; - if (feat === "easter") { - let egg = easterEgg(4, 14); - if (egg.length > 0) { - star = egg; - } - } - achieve.append($(`
    ${feats[feat].name}${feats[feat].desc}${star}
    `)); - } - }); - } - let trick = trickOrTreat(5, 12, false); - achieve.prepend(`
    ${loc("achieve_draw_achieve_earned", [earned, total])}${trick}
    `); - vBind({ - el: "#achievePanel", - methods: { - flair(flair) { - return achievements[flair].flair; - }, - feat(flair) { - return feats[flair].flair; - } - } - }); - if (fool && !global.stats.feat["fool"]) { - $(`#thefool`).on("mouseover", function() { - if (global.race.universe === "micro") { - unlockFeat("fool", true); - } else { - unlockFeat("fool"); - } - drawAchieve(); - }); - } - } - function challengeIcon() { - let a_level = alevel(); - if ($("#topBar span.flair")) { - clearElement($("#topBar span.flair"), true); - } - let egg = easterEgg(1, 14); - if (egg.length > 0) { - $("#topBar .planet").after($(egg)); - } - if (a_level > 1 && $("#topBar .planet .flair").length === 0) { - if (egg.length === 0) { - let bIcon = getBaseIcon("topbar", "challenge"); - $("#topBar .planet").after(`${svgIcons(bIcon)}`); - } - let desc = ""; - if (global.race["no_plasmid"]) { - desc += `
    ${loc("evo_challenge_plasmid")}
    `; - } - if (global.race["weak_mastery"]) { - desc += `
    ${loc("evo_challenge_mastery")}
    `; - } - if (global.race["no_trade"]) { - desc += `
    ${loc("evo_challenge_trade")}
    `; - } - if (global.race["no_craft"]) { - desc += `
    ${loc("evo_challenge_craft")}
    `; - } - if (global.race["no_crispr"]) { - desc += `
    ${loc("evo_challenge_crispr")}
    `; - } - if (global.race["nerfed"]) { - desc += `
    ${loc("evo_challenge_nerfed")}
    `; - } - if (global.race["badgenes"]) { - desc += `
    ${loc("evo_challenge_badgenes")}
    `; - } - if (desc.length > 0) { - $("#topBar .planetWrap .flair").append($(`
    Active Challenge Genes
    ${desc}
    `)); - } - popover( - "topbarPlanet", - function(obj) { - let popper = $(`
    `); - obj.popper.append(popper); - popper.append($(desc)); - return void 0; - }, - { - elm: `#topBar .planetWrap .flair`, - classes: `has-background-light has-text-dark` - } - ); - } - } - function alevel() { - let a_level = 1; - if (global.race["no_plasmid"]) { - a_level++; - } - if (global.race["no_trade"]) { - a_level++; - } - if (global.race["no_craft"]) { - a_level++; - } - if (global.race["no_crispr"]) { - a_level++; - } - if (global.race["weak_mastery"]) { - a_level++; - } - if (global.race["nerfed"]) { - a_level++; - } - if (global.race["badgenes"]) { - a_level++; - } - if (a_level > 5) { - a_level = 5; - } - return a_level; - } - function checkAchievements() { - let a_level = alevel(); - for (let t_level = a_level; t_level >= 0; t_level--) { - checkBigAchievement("extinct_", "mass_extinction", 25, t_level); - if (global.race.universe === "evil") { - checkBigAchievementUniverse("extinct_", "vigilante", 12, t_level); - } - checkBigAchievement("genus_", "creator", 9, t_level); - checkBigAchievement("biome_", "explorer", 6, t_level); - if (global.race.universe === "heavy") { - checkBigAchievementUniverse("genus_", "heavyweight", 8, t_level); - } - } - if (global.tech["supercollider"] && global.tech["supercollider"] >= 99) { - unlockAchieve("blackhole"); - } - if (global.stats.starved >= 100) { - unlockAchieve("mass_starvation"); - } - if (Math.round(Math.log2(global.civic.garrison.protest + global.civic.garrison.fatigue)) >= 8) { - unlockAchieve("warmonger"); - } - if (global.stats.died >= 250) { - unlockAchieve("red_tactics"); - } - if (global.interstellar["stellar_engine"] && global.interstellar["stellar_engine"].mass >= 12) { - unlockAchieve("landfill"); - } - if (global.interstellar["stellar_engine"] && global.interstellar["stellar_engine"].mass >= 100) { - unlockFeat("supermassive"); - } - if (global.tech["piracy"] && global.tech["chthonian"] && global.tech["chthonian"] >= 2 && global.galaxy) { - let chthonian = piracy("gxy_chthonian"); - let stargate = piracy("gxy_stargate"); - if (stargate === 1 && piracy("gxy_gateway") === 1 && piracy("gxy_gorddon") === 1 && piracy("gxy_alien1") === 1 && piracy("gxy_alien2") === 1 && chthonian === 1) { - unlockAchieve("neutralized"); - } - if (global.race["fasting"] && chthonian - stargate === 0) { - let affix = universeAffix(); - global.stats.endless_hunger.b2[affix] = true; - if (affix !== "m" && affix !== "l") { - global.stats.endless_hunger.b2.l = true; - } - } - } - if (eventActive("summer") && global.resource.hasOwnProperty("Thermite")) { - let thermite = 1e5 + global.stats.reset * 9e3; - if (thermite > 1e6) { - thermite = 1e6; - } - if (global.resource.Thermite.amount > thermite) { - unlockFeat("solstice", global.race.universe === "micro" ? true : false); - } - } - if (eventActive("firework") && global[global.race["cataclysm"] || global.race["orbit_decayed"] ? "space" : "city"].firework.on > 0) { - unlockFeat("firework", global.race.universe === "micro" ? true : false); - } - if (global.city.morale.current >= 200) { - unlockAchieve("paradise"); - if (global.city.morale.current >= 500) { - unlockFeat("utopia"); - } - } - if (global.resource.hasOwnProperty("Money") && global.resource.Money.amount >= 1e9) { - unlockAchieve("scrooge"); - } - if (global.resource.hasOwnProperty("Money") && global.race["inflation"] && global.resource.Money.amount >= 25e10) { - unlockAchieve("wheelbarrow"); - } - if (global.civic.hasOwnProperty("govern") && global.galaxy.hasOwnProperty("trade") && global.city.hasOwnProperty("market") && global.galaxy.trade.cur >= 50 && global.city.market.trade >= 750 && global.civic.govern.type === "federation") { - unlockAchieve("trade"); - } - if (global.tech["pillars"]) { - let genus = {}; - let rCnt = 0; - let equilProgress = Array(5 + 1).fill(0); - Object.keys(global.pillars).forEach(function(race) { - if (races[race]) { - const type = races[race].type; - if (type !== "hybrid" && (!genus[type] || global.pillars[race] > genus[type])) { - genus[type] = global.pillars[race]; - } - rCnt++; - equilProgress[global.pillars[race]]++; - } - }); - if (Object.keys(genus).length >= Object.keys(genus_def).length - 2) { - let rank = 5; - Object.keys(genus).forEach(function(g) { - if (genus[g] < rank && g !== "hybrid") { - rank = genus[g]; - } - }); - unlockAchieve("enlightenment", false, rank); - } - if (rCnt >= Object.keys(races).length - 1) { - unlockAchieve("resonance"); - } - if (rCnt >= 50) { - let eligPillars = 0; - for (let equilRank = 5; equilRank > 0; equilRank--) { - eligPillars += equilProgress[equilRank]; - if (eligPillars >= 50) { - unlockFeat("equilibrium", false, equilRank); - break; - } - } - } - } - if (global.stats["synth"] && Object.keys(global.stats.synth).length >= 32) { - unlockFeat("planned_obsolescence", false, 5); - } - if (global.portal.hasOwnProperty("mechbay") && global.tech.hasOwnProperty("hell_spire") && global.tech.hell_spire >= 9) { - let mobs = Object.keys(monsters).length; - let highest = {}; - Object.keys(global.stats.spire).forEach(function(universe) { - let current = {}; - Object.keys(global.stats.spire[universe]).forEach(function(boss) { - if (monsters[boss]) { - if (universe !== "m" && (!highest.hasOwnProperty(boss) || highest[boss] < global.stats.spire[universe][boss])) { - highest[boss] = global.stats.spire[universe][boss]; - } - if (global.stats.spire[universe][boss] > 0) { - current[boss] = global.stats.spire[universe][boss]; - } - } - }); - if (Object.keys(current).length === mobs) { - unlockAchieve("gladiator", false, Math.min(...Object.values(current)), universe); - } - }); - if (Object.keys(highest).length === mobs) { - unlockAchieve("gladiator", false, Math.min(...Object.values(highest)), "l"); - } - } - if (global.race["banana"]) { - let affix = universeAffix(); - if (global.tech.hasOwnProperty("monuments") && global.tech.monuments >= 50) { - global.stats.banana.b5[affix] = true; - if (affix !== "m" && affix !== "l") { - global.stats.banana.b5.l = true; - } - } - let slist = 0; - let ulist = 0; - ["b1", "b2", "b3", "b4", "b5"].forEach(function(b) { - if (global.stats.banana[b].l) { - slist++; - } - if (affix !== "l" && global.stats.banana[b][affix]) { - ulist++; - } - }); - if (slist > 0) { - unlockAchieve("banana", false, slist, "l"); - } - if (ulist > 0 && affix !== "l") { - unlockAchieve("banana", false, ulist, affix); - } - if (global.interstellar.hasOwnProperty("stellar_engine") && global.interstellar.stellar_engine.mass >= 12 && global.interstellar.stellar_engine.exotic === 0) { - global.stats.banana.b3[affix] = true; - if (affix !== "m" && affix !== "l") { - global.stats.banana.b3.l = true; - } - } - } - { - let uAffix = universeAffix(); - ["l", uAffix].forEach(function(affix) { - let rank = 0; - ["ashanddust", "exodus", "obsolete", "bluepill", "retired"].forEach(function(achieve) { - if (global.stats.achieve[achieve] && global.stats.achieve[achieve][affix] && global.stats.achieve[achieve][affix] >= 5) { - rank++; - } - }); - if (rank > 0) { - unlockAchieve("pathfinder", false, rank, affix); - } - }); - } - if (global.race["fasting"]) { - let affix = universeAffix(); - if (global.tech.hasOwnProperty("stock_exchange") && global.tech.stock_exchange >= 80) { - global.stats.endless_hunger.b3[affix] = true; - if (affix !== "m" && affix !== "l") { - global.stats.endless_hunger.b3.l = true; - } - } - if (global.resource[global.race.species].amount >= 1200) { - global.stats.endless_hunger.b4[affix] = true; - if (affix !== "m" && affix !== "l") { - global.stats.endless_hunger.b4.l = true; - } - } - let slist = 0; - let ulist = 0; - ["b1", "b2", "b3", "b4", "b5"].forEach(function(b) { - if (global.stats.endless_hunger[b].l) { - slist++; - } - if (affix !== "l" && global.stats.endless_hunger[b][affix]) { - ulist++; - } - }); - if (slist > 0) { - unlockAchieve("endless_hunger", false, slist, "l"); - } - if (ulist > 0 && affix !== "l") { - unlockAchieve("endless_hunger", false, ulist, affix); - } - } - const date2 = /* @__PURE__ */ new Date(); - let easter2 = eventActive("easter"); - let halloween = eventActive("halloween"); - let year = date2.getFullYear(); - if (!global.settings.boring && date2.getDate() === 13 && date2.getDay() === 5 && global.resource[global.race.species].amount >= 1) { - let murder = false; - murder = unlockFeat("friday", global.race.universe === "micro" ? true : false); - if (murder) { - global.resource[global.race.species].amount--; - } - } else if (!global.settings.boring && date2.getMonth() === 1 && date2.getDate() === 14) { - unlockFeat("valentine", global.race.universe === "micro" ? true : false); - } else if (!global.settings.boring && date2.getMonth() === 2 && date2.getDate() === 17) { - unlockFeat("leprechaun", global.race.universe === "micro" ? true : false); - } else if (easter2.active) { - unlockFeat("easter", global.race.universe === "micro" ? true : false); - let eggs = 0; - for (let i = 1; i <= 18; i++) { - if (global.special.egg[year][`egg${i}`]) { - eggs++; - } - } - if (eggs >= 12) { - unlockFeat("egghunt", global.race.universe === "micro" ? true : false); - } - } else if (eventActive("launch_day")) { - unlockFeat("launch_day", global.race.universe === "micro" ? true : false); - } else if (halloween.active) { - let total = 0; - for (let i = 1; i <= 7; i++) { - if (global.special.trick[year][`trick${i}`]) { - total++; - } - } - for (let i = 1; i <= 7; i++) { - if (global.special.trick[year][`treat${i}`]) { - total++; - } - } - if (total >= 12) { - unlockFeat("trickortreat", global.race.universe === "micro" ? true : false); - } - if (date2.getMonth() === 9 && date2.getDate() === 31) { - unlockFeat("halloween", global.race.universe === "micro" ? true : false); - } - } else if (!global.settings.boring && date2.getMonth() === 10 && date2.getDate() >= 22 && date2.getDate() <= 28) { - unlockFeat("thanksgiving", global.race.universe === "micro" ? true : false); - } else if (!global.settings.boring && date2.getMonth() === 11 && date2.getDate() == 25) { - unlockFeat("xmas", global.race.universe === "micro" ? true : false); - } - if (!global.settings.boring && date2.getMonth() === 3 && date2.getDate() >= 1 && date2.getDate() <= 3 && global.stats.feat.hasOwnProperty("fool") && global.stats.feat.fool > 0) { - unlockFeat("fool", global.race.universe === "micro" ? true : false); - } - if (global.stats.dkills >= 666e6) { - unlockFeat("demon_slayer"); - } - { - for (let t_level = a_level; t_level >= 1; t_level--) { - let total = 0; - const keys = Object.keys(achievements); - for (const key of keys) { - if (global.stats.achieve[key] && global.stats.achieve[key].l >= t_level) { - total++; - } - } - let progress = [ - { c: 10, f: "novice" }, - { c: 25, f: "journeyman" }, - { c: 50, f: "adept" }, - { c: 75, f: "master" }, - { c: 100, f: "grandmaster" }, - { c: 150, f: "god" } - ]; - for (let i = 0; i < 6; i++) { - if (total >= progress[i].c && (!global.stats.feat[progress[i].f] || global.stats.feat[progress[i].f] < t_level)) { - if (global.race.universe === "micro") { - unlockFeat(progress[i].f, true, t_level); - } else { - unlockFeat(progress[i].f, false, t_level); - } - calcQueueMax(); - calcRQueueMax(); - } - } - } - } - } - function checkAdept() { - let rank = 0; - ["whitehole", "eviltwin", "canceled", "heavy", "pw_apocalypse"].forEach(function(x) { - if (global.stats.achieve[x]) { - rank = Math.max(global.stats.achieve[x].l, rank); - } - }); - rank = global.stats.feat["adept"] ? Math.min(rank, global.stats.feat["adept"]) : 0; - return rank; - } - function checkBigAchievement(frag, name, num, level) { - if (!global.stats.achieve[name] || global.stats.achieve[name].l < level) { - let total = 0; - const keys = Object.keys(achievements); - for (const key of keys) { - if (key.includes(frag)) { - if (global.stats.achieve[key] && global.stats.achieve[key].l >= level) { - total++; - } - } - } - if (total >= num) { - unlockAchieve(name, false, level); - if (global.race.universe !== "standard") { - switch (global.race.universe) { - case "evil": - global.stats.achieve[name].e = void 0; - break; - case "antimatter": - global.stats.achieve[name].a = void 0; - break; - case "heavy": - global.stats.achieve[name].h = void 0; - break; - case "micro": - global.stats.achieve[name].m = void 0; - break; - case "magic": - global.stats.achieve[name].mg = void 0; - break; - default: - break; - } - } - } - } - if (global.race.universe !== "standard") { - checkBigAchievementUniverse(frag, name, num, level); - } - } - function checkBigAchievementUniverse(frag, name, num, level) { - let proceed = false; - switch (global.race.universe) { - case "evil": - if (typeof global.stats.achieve[name] === "undefined" || typeof global.stats.achieve[name].e === "undefined" || global.stats.achieve[name].e < level) { - proceed = true; - } - break; - case "antimatter": - if (typeof global.stats.achieve[name] === "undefined" || typeof global.stats.achieve[name].a === "undefined" || global.stats.achieve[name].a < level) { - proceed = true; - } - break; - case "heavy": - if (typeof global.stats.achieve[name] === "undefined" || typeof global.stats.achieve[name].h === "undefined" || global.stats.achieve[name].h < level) { - proceed = true; - } - break; - case "micro": - if (typeof global.stats.achieve[name] === "undefined" || typeof global.stats.achieve[name].m === "undefined" || global.stats.achieve[name].m < level) { - proceed = true; - } - break; - case "magic": - if (typeof global.stats.achieve[name] === "undefined" || typeof global.stats.achieve[name].mg === "undefined" || global.stats.achieve[name].mg < level) { - proceed = true; - } - break; - default: - break; - } - if (proceed) { - let total = 0; - const keys = Object.keys(achievements); - for (const key of keys) { - if (key.includes(frag)) { - switch (global.race.universe) { - case "evil": - if (global.stats.achieve[key] && global.stats.achieve[key]["e"] && global.stats.achieve[key].e >= level) { - total++; - } - break; - case "antimatter": - if (global.stats.achieve[key] && global.stats.achieve[key]["a"] && global.stats.achieve[key].a >= level) { - total++; - } - break; - case "heavy": - if (global.stats.achieve[key] && global.stats.achieve[key]["h"] && global.stats.achieve[key].h >= level) { - total++; - } - break; - case "micro": - if (global.stats.achieve[key] && global.stats.achieve[key]["m"] && global.stats.achieve[key].m >= level) { - total++; - } - break; - case "magic": - if (global.stats.achieve[key] && global.stats.achieve[key]["mg"] && global.stats.achieve[key].mg >= level) { - total++; - } - break; - default: - break; - } - } - } - if (total >= num) { - unlockAchieve(name, false, level); - } - } - } - var perkList = { - mastery: { - name: loc(`mastery`), - desc() { - let desc = ""; - Object.keys(universe_types).forEach(function(universe) { - let mastery = masteryType(universe, true, true); - if (universe === "standard") { - desc += ` + `),$("#playerPet").append(`${i}${rn(e.race.pet.type)}`),ve("playerPet",function(s){let n=$('
    ');s.popper.append(n),n.append(`
    ${t(`event_${e.race.pet.type}_name${e.race.pet.name}`)}
    `)},{elm:"#playerPet .flair",classes:"has-background-light has-text-dark"})}}function Wt(r,a){let i=Po(),s=new Date;return i.active&&!e.special.egg[s.getFullYear()][`egg${r}`]&&$(`#egg${r}`).length===0?bn("egg",a||16,2,`egg${r}`,'role="button" aria-label="Egg" '):""}function c0(r){$(`#egg${r}`).click(function(){let i=new Date().getFullYear();e.special.egg[i][`egg${r}`]||(e.special.egg[i][`egg${r}`]=!0,r<=12?e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=9,e.stats.antiplasmid+=9,L(t("city_egg_msg",[9,t("resource_AntiPlasmid_plural_name")]),"success",!1,["events"])):(e.prestige.Plasmid.count+=9,e.stats.plasmid+=9,L(t("city_egg_msg",[9,t("resource_Plasmid_plural_name")]),"success",!1,["events"])):(e.prestige.Phage.count+=4,e.stats.phage+=4,L(t("city_egg_msg",[4,t("resource_Phage_name")]),"success",!1,["events"])),$(`#egg${r}`).remove(),$(".popper").hide())})}function ar(r,a,i){let s=ha(),o=new Date().getFullYear(),c=i?"trick":"treat";if(s.active&&!e.special.trick[o][`${c}${r}`]&&$(`#${c}${r}`).length===0){let l=i?"Ghost":"Candy Corn";return bn(i?"ghost":"candycorn",a||16,2,`${c}${r}`,`role="button" aria-label="${l}" `)}return""}function tl(r,a){let s=new Date().getFullYear(),n=a?"trick":"treat";$(`#${n}${r}`).click(function(){e.special.trick[s][`${n}${r}`]||(e.special.trick[s][`${n}${r}`]=!0,a?(e.prestige.Phage.count+=2,e.stats.phage+=2,L(t("city_ghost_msg",[2,t("resource_Phage_name")]),"success",!1,["events"])):e.race.universe==="antimatter"?(e.prestige.AntiPlasmid.count+=12,e.stats.antiplasmid+=12,L(t("city_trick_msg",[12,t("resource_AntiPlasmid_plural_name")]),"success",!1,["events"])):(e.prestige.Plasmid.count+=12,e.stats.plasmid+=12,L(t("city_trick_msg",[12,t("resource_Plasmid_plural_name")]),"success",!1,["events"])),$(`#${n}${r}`).remove(),setTimeout(function(){r===1&&a&&$(".popper").hide()},250))})}function Va(r,a,i,s,n,o){return e.stats.achieve[r]&&(n?e.stats.achieve[r][o]-1:e.stats.achieve[r][o])>0?`

    ${rn(i)}${Oo(e.stats.achieve[r][o])} ${s}

    `:""}function tr(r,a,i,s,n){a||(a=10),i||(i=In(r,"achievement"));let o="";if(!n)o=o+Va(r,a,i,t(e.settings.icon),s,"l"),o=o+Va(r,a,"atom",t("universe_antimatter"),s,"a"),o=o+Va(r,a,"evil",t("universe_evil"),s,"e"),o=o+Va(r,a,"heavy",t("universe_heavy"),s,"h"),o=o+Va(r,a,"micro",t("universe_micro"),s,"m"),o=o+Va(r,a,"magic",t("universe_magic"),s,"mg");else switch(n){case"standard":o=o+Va(r,a,i,t(e.settings.icon),s,"l");break;case"antimatter":o=o+Va(r,a,"atom",t("universe_antimatter"),s,"a");break;case"evil":o=o+Va(r,a,"evil",t("universe_evil"),s,"e");break;case"heavy":o=o+Va(r,a,"heavy",t("universe_heavy"),s,"h");break;case"micro":o=o+Va(r,a,"micro",t("universe_micro"),s,"m");break;case"magic":o=o+Va(r,a,"magic",t("universe_magic"),s,"mg");break}return o}function e0(r,a=1,i=!0){if(a!==Math.floor(a)||a<1)return 0;let s=a;for(;r(s);)s*=2;let n=Math.floor(s/2);for(s===a?(s=0,i&&(n=0)):s=n;n>1;)n=Math.floor(n/2),r(s+n)&&(s+=n);return s}function gi(r,a){return a=a||{},a[r]?a[r]:r<=1?1:a[r]=gi(r-1,a)+gi(r-2,a)}function xn(r){var a=Object.keys(r);return a[a.length*Math.random()<<0]}function Oo(r){switch(r){case 1:return t("basic");case 2:return t("plain");case 3:return t("bronze");case 4:return t("silver");case 5:return t("gold");default:return""}}function Ua(r,a,i){i||(i=r.ranks||{});let s=0;if(a)Object.keys(a.ascended).forEach(function(v){s+=a.ascended[v]});else if(e.stats.achieve.ascended)for(let v=0;v=1&&(s+=e.stats.achieve.technophobe.l*4);let c=1,l={utility:0,resource:0,production:0,combat:0},h={utility:0,resource:0,production:0,combat:0};for(let v=0;v=0?(l[_]>c&&(g-=c-l[_]),l[_]++):(h[_]>=c&&(g+=h[_]),h[_]++),i[r.traitlist[v]])if(y[r.traitlist[v]].val>=0){switch(i[r.traitlist[v]]){case .1:g-=3;break;case .25:g-=2;break;case .5:g--;break;case 2:g=Math.max(Math.round(g*1.5),g+1);break;case 3:g=Math.max(Math.round(g*2),g+2);break;case 4:g=Math.max(Math.round(g*2.5),g+3);break}g<1&&(g=1)}else switch(i[r.traitlist[v]]){case .1:g-=3;break;case .25:g-=2;break;case .5:g--;break;case 2:g++;break;case 3:g+=2;break;case 4:g+=3;break}let w=T[y[r.traitlist[v]].origin].type==="hybrid"?T[y[r.traitlist[v]].origin].hybrid:[T[y[r.traitlist[v]].origin].type];n.filter(S=>w.includes(S)).length>0&&(n.filter(S=>w.includes(S)).length===1?g--:g-=2),o.filter(S=>w.includes(S)).length>0&&(o.filter(S=>w.includes(S)).length===1?g++:g+=2),s-=g}return s}function ma(){e.stats.reset++,e.stats.tdays+=e.stats.days,e.stats.days=0,e.stats.tknow+=e.stats.know,e.stats.know=0,e.stats.tstarved+=e.stats.starved,e.stats.starved=0,e.stats.tdied+=e.stats.died,e.stats.died=0,e.stats.tsac+=e.stats.sac,e.stats.sac=0,e.stats.tcattle+=e.stats.cattle,e.stats.cattle=0,e.stats.tmurders+=e.stats.murders,e.stats.murders=0,e.stats.tpsykill+=e.stats.psykill,e.stats.psykill=0}function pt(r){if(r===null||typeof r!="object")return r;if(r instanceof Date)return new Date(r.getTime());if(Array.isArray(r)){var a=[];return r.forEach(function(n){a.push(pt(n))}),a}let i=new r.constructor;for(var s in r)r.hasOwnProperty(s)&&(i[s]=pt(r[s]));return i}function ut(r,a,i){switch(r){case"reverse":{let s=a.toLowerCase().split("").reverse().join("");return s.charAt(0).toUpperCase()+s.slice(1)}case"name":return rt("fool",2021)?ut("reverse",T[e.race.species].name):e.race.species;case"curve":{let s=i||1.5;return 1-(1-a)**s}}return!1}function rt(r,a){switch(r){case"easter":return Po();case"halloween":return ha();case"fool":{let i=new Date;return!e.settings.boring&&i.getMonth()===3&&i.getDate()===1?a?i.getFullYear()===a:!0:!1}case"launch_day":{let i=new Date;return!e.settings.boring&&i.getMonth()===4&&i.getDate()===6}case"summer":{let i=new Date;return!e.settings.boring&&i.getMonth()===5&&[20,21,22].includes(i.getDate())?(e.city.hasOwnProperty("foundry")&&!e.city.foundry.hasOwnProperty("Thermite")&&(e.city.foundry.Thermite=0),e.resource.hasOwnProperty("Thermite")||(e.resource.Thermite={name:t("resource_Thermite_name"),display:!1,value:0,amount:0,crates:0,diff:0,delta:0,max:-1,rate:0}),!0):(e.city.hasOwnProperty("foundry")&&e.city.foundry.hasOwnProperty("Thermite")&&(e.city.foundry.crafting-=e.city.foundry.Thermite,e.civic.craftsman.workers-=e.city.foundry.Thermite,e.civic[e.civic.d_job].workers+=e.city.foundry.Thermite,delete e.city.foundry.Thermite),!1)}case"firework":{let i=new Date;if(!e.settings.boring&&i.getMonth()===6&&[1,2,3,4].includes(i.getDate())){let s=e.race.cataclysm||e.race.orbit_decayed?"space":"city";return e[s].hasOwnProperty("firework")||(e[s].firework={count:0,on:0}),!0}else(e.city.hasOwnProperty("firework")||e.space.hasOwnProperty("firework"))&&(delete e.city.firework,delete e.space.firework);return!1}}return!1}function Po(){let r=new Date,a=r.getFullYear();e.special.egg.hasOwnProperty(a)||(e.special.egg[a]={egg1:!1,egg2:!1,egg3:!1,egg4:!1,egg5:!1,egg6:!1,egg7:!1,egg8:!1,egg9:!1,egg10:!1,egg11:!1,egg12:!1}),e.special.egg.hasOwnProperty(a)&&!e.special.egg[a].hasOwnProperty("egg13")&&(e.special.egg[a].egg13=!1,e.special.egg[a].egg14=!1,e.special.egg[a].egg15=!1),e.special.egg.hasOwnProperty(a)&&!e.special.egg[a].hasOwnProperty("egg16")&&(e.special.egg[a].egg16=!1,e.special.egg[a].egg17=!1,e.special.egg[a].egg18=!1);let i=Math.floor,s=a%19,n=i(a/100),o=(n-i(n/4)-i((8*n+13)/25)+19*s+15)%30,c=o-i(o/28)*(1-i(29/(o+1))*i((21-s)/11)),l=(a+i(a/4)+c+2-n+i(n/4))%7,h=c-l,v=3+i((h+40)/44),_=h+28-31*i(v/4),g={date:[v-1,_],active:!1,endDate:[v-1,_],hint:!1,hintDate:[v-1,_],solve:!1,solveDate:[v-1,_]};if(e.settings.boring)return g;g.endDate[1]+=10,(g.endDate[0]===2&&g.endDate[1]>31||g.endDate[0]===3&&g.endDate[1]>30)&&(g.endDate[1]-=g.endDate[0]===2?31:30,g.endDate[0]++),g.hintDate[1]+=1,(g.hintDate[0]===2&&g.hintDate[1]>31||g.hintDate[0]===3&&g.hintDate[1]>30)&&(g.hintDate[1]-=g.hintDate[0]===2?31:30,g.hintDate[0]++),g.solveDate[1]+=3,(g.solveDate[0]===2&&g.solveDate[1]>31||g.solveDate[0]===3&&g.solveDate[1]>30)&&(g.solveDate[1]-=g.solveDate[0]===2?31:30,g.solveDate[0]++);let w=r.getDate(),S=r.getMonth(),C=S>g.date[0]||S===g.date[0]&&w>=g.date[1],z=S=g.hintDate[0]&&w>=g.hintDate[1]&&S<=g.endDate[0]&&w<=g.endDate[1]&&(g.hint=!0),S>=g.solveDate[0]&&w>=g.solveDate[1]&&S<=g.endDate[0]&&w<=g.endDate[1]&&(g.solve=!0)),g}function ha(){let r=new Date,a=r.getFullYear();e.special.trick.hasOwnProperty(a)||(e.special.trick[a]={trick1:!1,trick2:!1,trick3:!1,trick4:!1,trick5:!1,trick6:!1,trick7:!1,treat1:!1,treat2:!1,treat3:!1,treat4:!1,treat5:!1,treat6:!1,treat7:!1});let i={date:[9,28],active:!1,endDate:[10,4],hint:!1,hintDate:[9,29],solve:!1,solveDate:[9,31]};if(e.settings.boring)return i;let s=new Date(`${i.date[0]+1}/${i.date[1]}/${a}`),n=new Date(`${i.endDate[0]+1}/${i.endDate[1]}/${a}`);if(r>=s&&r<=n){i.active=!0;let o=new Date(`${i.hintDate[0]+1}/${i.hintDate[1]}/${a}`);r>=o&&r<=n&&(i.hint=!0);let c=new Date(`${i.solveDate[0]+1}/${i.solveDate[1]}/${a}`);r>=c&&r<=n&&(i.solve=!0)}return i}function Qa(){return e.race.magnificent&&e.city.hasOwnProperty("shrine")&&e.city.shrine.count>0}function $a(r){let a={mult:1,add:0,active:!1};if(Qa())switch(r){case"metal":let i=e.city.shrine.metal;(e.city.calendar.moon>=7&&e.city.calendar.moon<14||e.city.calendar.moon===14)&&(i+=e.city.shrine.cycle),a.mult+=+(i/100*y.magnificent.vars()[3]),i>0&&(a.active=!0);break;case"tax":let s=e.city.shrine.tax;(e.city.calendar.moon>=21||e.city.calendar.moon===14)&&(s+=e.city.shrine.cycle),a.mult+=+(s/100*y.magnificent.vars()[2]),s>0&&(a.active=!0);break;case"know":let n=e.city.shrine.know;(e.city.calendar.moon>14&&e.city.calendar.moon<=21||e.city.calendar.moon===14)&&(n+=e.city.shrine.cycle),a.add+=+(n*y.magnificent.vars()[0]),a.mult+=+(n*y.magnificent.vars()[1]/100),n>0&&(a.active=!0);break;case"morale":let o=e.city.shrine.morale;(e.city.calendar.moon>0&&e.city.calendar.moon<=7||e.city.calendar.moon===14)&&(o+=e.city.shrine.cycle),a.add+=o*y.magnificent.vars()[4],o>0&&(a.active=!0);break;default:break}return a}var s0={promiscuous:!1,revive:!1,fast_growth:!1,spores:!1,terrifying:!1,fibroblast:!0,hivemind:!0,imitation:!0,elusive:!0,chameleon:!0,blood_thirst:!0,selenophobia:!0,hooved:!0,anthropophagite:!0,unfathomable:!1,darkness:!1,living_tool:!1,living_materials:!0,blurry:!0,playful:!0,ghostly:!0,environmentalist:!0,catnip:!0,anise:!0};function rs(r,a,i){let s=y[r].hasOwnProperty("vars")?y[r].vars(a):[];if(s0.hasOwnProperty(r))if(r==="fibroblast")s=[s[0]*5];else if(r==="hivemind"&&e.race.high_pop)s=[s[0]*y.high_pop.vars()[0]];else if(r==="imitation")s.push(T[e.race.srace||"protoplasm"].name);else if(r==="elusive")s=[Math.round((1/30/(1/(30+s[0]))-1)*100)];else if(r==="chameleon")s=[s[0],Math.round((1/30/(1/(30+s[1]))-1)*100)];else if(r==="blood_thirst")s=[Math.ceil(Math.log2(s[0]))];else if(r==="selenophobia")s=[14-s[0],s[0]];else if(r==="hooved")s.unshift(Ia(!1,i));else if(r==="anthropophagite")s=[s[0]*1e4];else if(r==="living_materials")s=[e.resource.Lumber.name,e.resource.Plywood.name,e.resource.Furs.name,t("resource_Amber_name")];else if(r==="environmentalist"){let n=-d.city.coal_power.powered(!0),o=-d.city.oil_power.powered(!0);s=[n+s[0],o+s[0]-1,o+s[0]+1,n,o,s[1]]}else r==="blurry"?e.race.warlord&&(s=[+((100/(100-s[0])-1)*100).toFixed(1)]):r==="playful"?e.race.warlord&&(s=[s[0]*100,e.resource.Furs.name]):r==="ghostly"?e.race.warlord&&(s=[s[0],+((s[1]-1)*100).toFixed(0),e.resource.Soul_Gem.name]):r==="catnip"||r==="anise"?s=a<=2?[]:a===3?[s[0]]:[s[0],s[1]]:s0[r]||(s=[]);else if(r==="elemental")switch(y.elemental.vars(a)[0]){case"electric":s=[t("element_electric"),y.elemental.vars(a)[1],y.elemental.vars(a)[5]];break;case"acid":s=[t("element_acid"),y.elemental.vars(a)[2],y.elemental.vars(a)[5]];break;case"fire":s=[t("element_fire"),y.elemental.vars(a)[3],y.elemental.vars(a)[5]];break;case"frost":s=[t("element_frost"),y.elemental.vars(a)[4],y.elemental.vars(a)[5],t("city_biolab")];break}return s}function Ia(r,a=e.race.species){let i=a===e.race.species?e.race.maintype||T[a].type:T[a].type;return a==="sludge"?r?"craft":t("resource_Beaker_name"):a==="cath"?r?"craft":t("resource_Box_name"):a==="wolven"?r?"craft":t("resource_ChewToy_name"):a==="dracnid"?r?"craft":t("resource_Hoard_name"):a==="seraph"?r?"forge":t("resource_Halo_name"):a==="cyclops"?r?"craft":t("resource_Monocle_name"):a==="kobold"?r?"craft":t("resource_Candle_name"):a==="tuskin"?r?"craft":t("resource_Goggles_name"):a==="sharkin"?r?"craft":t("resource_ToothSharpener_name"):a==="beholder"?r?"craft":t("resource_ContactLens_name"):a==="djinn"?r?"craft":t("resource_Bottle_name"):T[a].type==="humanoid"?r?"craft":t("resource_Sandals_name"):T[a].type==="avian"?r?"craft":t("resource_Perch_name"):T[a].type==="plant"?r?"craft":t("resource_Planter_name"):T[a].type==="fungi"?r?"craft":t("resource_DampCloth_name"):T[a].type==="reptilian"?r?"craft":t("resource_HeatRock_name"):T[a].type==="fey"?r?"craft":t("resource_PixieDust_name"):T[a].type==="synthetic"?r?"craft":t("resource_Battery_name"):r?"forge":t("resource_Horseshoe_name")}var n0={infiltrator:[t("wiki_trait_effect_infiltrator_ex1"),t("wiki_trait_effect_infiltrator_ex2",[[`${t("tech_steel")}`,`${t("tech_electricity")}`,`${t("tech_electronics")}`,`${t("tech_fission")}`,`${t("tech_rocketry")}`,`${t("tech_artificial_intelligence")}`,`${t("tech_quantum_computing")}`,`${t("tech_virtual_reality")}`,`${t("tech_shields")}`,`${t("tech_ai_core")}`,`${t("tech_graphene_processing")}`,`${t("tech_nanoweave")}`,`${t("tech_orichalcum_analysis")}`,`${t("tech_infernium_fuel")}`].join(", ")])],heavy:[t("wiki_trait_effect_heavy_ex1",[Yc("Stone"),Yc("Cement"),Yc("Wrought_Iron")])],sniper:[t("wiki_trait_effect_sniper_ex1")],hooved:[function(r){return t("wiki_trait_effect_hooved_ex1",[Ia(!1,r.species)])},t("wiki_trait_effect_hooved_ex2",[`${e.resource.hasOwnProperty("Lumber")?e.resource.Lumber.name:t("resource_Lumber_name")}`,`${e.resource.hasOwnProperty("Copper")?e.resource.Copper.name:t("resource_Copper_name")}`,`${e.resource.hasOwnProperty("Iron")?e.resource.Iron.name:t("resource_Iron_name")}`,`${e.resource.hasOwnProperty("Steel")?e.resource.Steel.name:t("resource_Steel_name")}`,`${e.resource.hasOwnProperty("Adamantite")?e.resource.Adamantite.name:t("resource_Adamantite_name")}`,`${e.resource.hasOwnProperty("Orichalcum")?e.resource.Orichalcum.name:t("resource_Orichalcum_name")}`,12,75,150,500,5e3]),t("wiki_trait_effect_hooved_ex3"),function(r){return t("wiki_trait_effect_hooved_ex4",['5',Ia(!1,r.species)])},t("wiki_trait_effect_hooved_ex5",[`${e.resource.hasOwnProperty("Lumber")?e.resource.Lumber.name:t("resource_Lumber_name")}`,`${e.resource.hasOwnProperty("Copper")?e.resource.Copper.name:t("resource_Copper_name")}`])],instinct:[t("wiki_trait_effect_instinct_ex1",[6.67,t("galaxy_chthonian"),10])],logical:[t("wiki_trait_effect_logical_ex1",[e.tech.hasOwnProperty("science")?e.tech.science:0,e.tech.hasOwnProperty("high_tech")?e.tech.high_tech:0])],high_pop:[t("wiki_trait_effect_high_pop_ex1")],flier:[t("wiki_trait_effect_flier_ex1")],unfathomable:[t("wiki_trait_effect_unfathomable_ex1"),t("wiki_trait_effect_unfathomable_ex2")]};function Yc(r){return`${e.hasOwnProperty("resource")&&e.resource.hasOwnProperty(r)?e.resource[r].name:t(`resource_${r}_name`)}`}var tn={befuddle:"warlord",blurry:"warlord",ghostly:"warlord",playful:"warlord"};function Ba(r,a,i){let s=i.fanatic||!1,n=i.tpage||!1,o=i.rpage||!1,c=i.trank||!1,l=i.wiki||!1,h=i.species,v="",_=Da("name",a,h),g=Da("desc",a,h);n&&["genus","major"].includes(y[a].type)&&(v=`« ${t("wiki_trait_rank")} {{ rank }} »`),(n||o)&&(r.append(`

    ${_}

    ${v}
    `),n&&y[a].hasOwnProperty("val")?r.append(`
    ${t(`wiki_trait_${y[a].type}`)}${t("wiki_trait_value",[y[a].val])}
    `):r.append(`
    ${t(`wiki_trait_${y[a].type}`)}
    `),s&&r.append(`
    ${t("wiki_trait_fanaticism",[s])}
    `)),r.append(`
    ${g}
    `);let w="warning";if(y[a].hasOwnProperty("val")&&(w=y[a].val>=0?"success":"danger"),n&&["genus","major"].includes(y[a].type))r.append(`
    `);else if(l||e.stats.feat.journeyman&&e.stats.achieve.seeder&&e.stats.achieve.seeder.l>0){let S="";if(a==="elemental")S=t(`wiki_trait_effect_${a}_${y.elemental.vars()[0]}`,rs(a,c,h));else if(["catnip","anise"].includes(a))S=t(`wiki_trait_effect_${a}${c}`,rs(a,c,h));else if(e?.race?.universe==="evil"&&e?.civic?.govern?.type!="theocracy"&&["spiritual","blasphemous"].includes(a))S=t(`wiki_trait_effect_${a==="spiritual"?"manipulator":"blasphemous_evil"}`,rs(a,c,h));else{let C=tn[a]&&e.race.hasOwnProperty(tn[a])?tn[a]:"effect";S=t(`wiki_trait_${C}_${a}`,rs(a,c,h))}r.append(`
    ${S}
    `)}if(n0[a]&&(n||o)&&n0[a].forEach(function(S){typeof S!="string"&&(S=S(i)),r.append(`
    ${S}
    `)}),n&&["genus","major"].includes(y[a].type)){let S={rank:e.race[a]||1};V({el:`#${y[a].type}_${a}`,data:S,methods:{getTraitDesc(C){if(a==="elemental")return t(`wiki_trait_effect_${a}_${y.elemental.vars()[0]}`,rs(a,C,h));if(["catnip","anise"].includes(a))return t(`wiki_trait_effect_${a}${C}`,rs(a,C,h));if(e?.race?.universe==="evil"&&e?.civic?.govern?.type!="theocracy"&&["spiritual","blasphemous"].includes(a))return t(`wiki_trait_effect_${a==="spiritual"?"manipulator":"blasphemous_evil"}`,rs(a,C,h));let z=tn[a]&&e.race.hasOwnProperty(tn[a])?tn[a]:"effect";return t(`wiki_trait_${z}_${a}`,rs(a,C,h))},up(){switch(this.rank){case .1:this.rank=.25;break;case .25:this.rank=.5;break;case .5:this.rank=1;break;case 1:this.rank=2;break;case 2:this.rank=3;break;case 3:this.rank=4;break;case 4:this.rank=4;break}},down(){switch(this.rank){case .1:this.rank=.1;break;case .25:this.rank=.1;break;case .5:this.rank=.25;break;case 1:this.rank=.5;break;case 2:this.rank=1;break;case 3:this.rank=2;break;case 4:this.rank=3;break}}}})}}var l0={misc:["apocalypse","ascended","dreaded","anarchist","second_evolution","blackhole","warmonger","red_tactics","pacifist","neutralized","paradise","scrooge","madagascar_tree","godwin","laser_shark","infested","mass_starvation","colonist","world_domination","illuminati","syndicate","cult_of_personality","doomed","pandemonium","blood_war","landfill","seeder","miners_dream","shaken","blacken_the_sun","trade","resonance","enlightenment","gladiator","corrupted","red_dead","godslayer","traitor","doppelganger"],species:["mass_extinction","extinct_human","extinct_elven","extinct_orc","extinct_cath","extinct_wolven","extinct_vulpine","extinct_centaur","extinct_rhinotaur","extinct_capybara","extinct_kobold","extinct_goblin","extinct_gnome","extinct_ogre","extinct_cyclops","extinct_troll","extinct_tortoisan","extinct_gecko","extinct_slitheryn","extinct_arraak","extinct_pterodacti","extinct_dracnid","extinct_entish","extinct_cacti","extinct_pinguicula","extinct_sporgar","extinct_shroomi","extinct_moldling","extinct_mantis","extinct_scorpid","extinct_antid","extinct_sharkin","extinct_octigoran","extinct_dryad","extinct_satyr","extinct_phoenix","extinct_salamander","extinct_yeti","extinct_wendigo","extinct_tuskin","extinct_kamel","extinct_balorg","extinct_imp","extinct_seraph","extinct_unicorn","extinct_synth","extinct_nano","extinct_ghast","extinct_shoggoth","extinct_dwarf","extinct_raccoon","extinct_lichen","extinct_wyvern","extinct_beholder","extinct_djinn","extinct_narwhal","extinct_bombardier","extinct_nephilim","extinct_junker","extinct_sludge","extinct_ultra_sludge","extinct_custom","extinct_hybrid"],genus:["creator","genus_humanoid","genus_carnivore","genus_herbivore","genus_small","genus_giant","genus_reptilian","genus_avian","genus_insectoid","genus_plant","genus_fungi","genus_aquatic","genus_fey","genus_heat","genus_polar","genus_sand","genus_demonic","genus_angelic","genus_synthetic","genus_eldritch"],planet:["explorer","biome_grassland","biome_oceanic","biome_forest","biome_desert","biome_volcanic","biome_tundra","biome_savanna","biome_swamp","biome_ashland","biome_taiga","biome_hellscape","biome_eden","atmo_toxic","atmo_mellow","atmo_rage","atmo_stormy","atmo_ozone","atmo_magnetic","atmo_trashed","atmo_elliptical","atmo_flare","atmo_dense","atmo_unstable","atmo_permafrost","atmo_retrograde","atmo_kamikaze"],universe:["vigilante","squished","double_density","cross","macro","marble","heavyweight","whitehole","heavy","canceled","eviltwin","microbang","pw_apocalypse","fullmetal","pass","soul_sponge","nightmare","escape_velocity","what_is_best"],challenge:["joyless","steelen","dissipated","technophobe","wheelbarrow","iron_will","failed_history","banana","pathfinder","ashanddust","exodus","obsolete","bluepill","retired","gross","lamentis","overlord","adam_eve","endless_hunger"]},u0={colonist:[ut("name")]},d0={trade:[750,50]},ei={};Object.keys(l0).forEach(function(r){l0[r].forEach(a=>ei[a]={name:t(`achieve_${a}_name`),desc:d0[a]?t(`achieve_${a}_desc`,d0[a]):t(`achieve_${a}_desc`),flair:u0[a]?t(`achieve_${a}_flair`,u0[a]):t(`achieve_${a}_flair`),type:r})});var sn={utopia:{name:t("feat_utopia_name"),desc:t("feat_utopia_desc"),flair:t("feat_utopia_flair")},take_no_advice:{name:t("feat_take_no_advice_name"),desc:t("feat_take_no_advice_desc"),flair:t("feat_take_no_advice_flair")},ill_advised:{name:t("feat_ill_advised_name"),desc:t("feat_ill_advised_desc"),flair:t("feat_ill_advised_flair")},organ_harvester:{name:t("feat_organ_harvester_name"),desc:t("feat_organ_harvester_desc"),flair:t("feat_organ_harvester_flair")},the_misery:{name:t("feat_the_misery_name"),desc:t("feat_the_misery_desc"),flair:t("feat_the_misery_flair")},energetic:{name:t("feat_energetic_name"),desc:t("feat_energetic_desc"),flair:t("feat_energetic_flair")},garbage_pie:{name:t("feat_garbage_pie_name"),desc:t("feat_garbage_pie_desc"),flair:t("feat_garbage_pie_flair")},finish_line:{name:t("feat_finish_line_name"),desc:t("feat_finish_line_desc"),flair:t("feat_finish_line_flair")},blank_slate:{name:t("feat_blank_slate_name"),desc:t("feat_blank_slate_desc"),flair:t("feat_blank_slate_flair")},supermassive:{name:t("feat_supermassive_name"),desc:t("feat_supermassive_desc"),flair:t("feat_supermassive_flair")},steelem:{name:t("feat_steelem_name"),desc:t("feat_steelem_desc"),flair:t("feat_steelem_flair")},banana:{name:t("feat_banana_name"),desc:t("feat_banana_desc",[500,500]),flair:t("feat_banana_flair")},rocky_road:{name:t("feat_rocky_road_name"),desc:t("feat_rocky_road_desc"),flair:t("feat_rocky_road_flair")},demon_slayer:{name:t("feat_demon_slayer_name"),desc:t("feat_demon_slayer_desc"),flair:t("feat_demon_slayer_flair")},equilibrium:{name:t("feat_equilibrium_name"),desc:t("feat_equilibrium_desc"),flair:t("feat_equilibrium_flair")},planned_obsolescence:{name:t("feat_planned_obsolescence_name"),desc:t("feat_planned_obsolescence_desc"),flair:t("feat_planned_obsolescence_flair")},digital_ascension:{name:t("feat_digital_ascension_name"),desc:t("feat_digital_ascension_desc"),flair:t("feat_digital_ascension_flair")},grand_death_tour:{name:t("feat_grand_death_tour_name"),desc:t("feat_grand_death_tour_desc",[6]),flair:t("feat_grand_death_tour_flair")},novice:{name:t("feat_novice_name"),desc:t("feat_achievement_hunter_desc",[10]),flair:t("feat_novice_flair")},journeyman:{name:t("feat_journeyman_name"),desc:t("feat_achievement_hunter_desc",[25]),flair:t("feat_journeyman_flair")},adept:{name:t("feat_adept_name"),desc:t("feat_achievement_hunter_desc",[50]),flair:t("feat_adept_flair")},master:{name:t("feat_master_name"),desc:t("feat_achievement_hunter_desc",[75]),flair:t("feat_master_flair")},grandmaster:{name:t("feat_grandmaster_name"),desc:t("feat_achievement_hunter_desc",[100]),flair:t("feat_grandmaster_flair")},god:{name:t("feat_god_name"),desc:t("feat_achievement_hunter_desc",[150]),flair:t("feat_god_flair")},nephilim:{name:t("feat_nephilim_name"),desc:t("feat_nephilim_desc"),flair:t("feat_nephilim_flair")},twisted:{name:t("feat_twisted_name"),desc:t("feat_twisted_desc"),flair:t("feat_twisted_flair")},slime_lord:{name:t("feat_slime_lord_name"),desc:t("feat_slime_lord_desc"),flair:t("feat_slime_lord_flair")},annihilation:{name:t("feat_annihilation_name"),desc:t("feat_annihilation_desc"),flair:t("feat_annihilation_flair")},immortal:{name:t("feat_immortal_name"),desc:t("feat_immortal_desc"),flair:t("feat_immortal_flair")},wish:{name:t("feat_wish_name"),desc:t("feat_wish_desc"),flair:t("feat_wish_flair")},friday:{name:t("feat_friday_name"),desc:t("feat_friday_desc"),flair:t("feat_friday_flair")},valentine:{name:t("feat_love_name"),desc:t("feat_love_desc"),flair:t("feat_love_flair")},leprechaun:{name:t("feat_leprechaun_name"),desc:t("feat_leprechaun_desc"),flair:t("feat_leprechaun_flair")},easter:{name:t("feat_easter_name"),desc:t("feat_easter_desc"),flair:t("feat_easter_flair")},egghunt:{name:t("feat_egghunt_name"),desc:t("feat_egghunt_desc"),flair:t("feat_egghunt_flair")},launch_day:{name:t("feat_launch_day_name"),desc:t("feat_launch_day_desc"),flair:t("feat_launch_day_flair")},solstice:{name:t("feat_solstice_name"),desc:t("feat_solstice_desc"),flair:t("feat_solstice_flair")},firework:{name:t("feat_firework_name"),desc:t("feat_firework_desc"),flair:t("feat_firework_flair")},halloween:{name:t("feat_boo_name"),desc:t("feat_boo_desc"),flair:t("feat_boo_flair")},trickortreat:{name:t("feat_trickortreat_name"),desc:t("feat_trickortreat_desc"),flair:t("feat_trickortreat_flair")},thanksgiving:{name:t("feat_gobble_gobble_name"),desc:t("feat_gobble_gobble_desc"),flair:t("feat_gobble_gobble_flair")},xmas:{name:t("feat_xmas_name"),desc:t("feat_xmas_desc"),flair:t("feat_xmas_flair")},fool:{name:t("feat_fool_name"),desc:t("feat_fool_desc"),flair:t("feat_fool_flair")}};{let r=rl();Lo(r.aLvl),Io(r.uLvl)}function rl(r){r=r||e.race.universe;let a=wt(r),i=0,s=0;return Object.keys(ei).forEach(function(n){e.stats.achieve[n]&&(i+=e.stats.achieve[n].l>5?5:e.stats.achieve[n].l,e.stats.achieve[n][a]&&(s+=e.stats.achieve[n][a]>5?5:e.stats.achieve[n][a]))}),{aLvl:i,uLvl:s}}function wt(r){switch(r=r||e.race.universe,r){case"evil":return"e";case"antimatter":return"a";case"heavy":return"h";case"micro":return"m";case"magic":return"mg";default:return"l"}}function le(r,a,i,s){if(e.race.universe!=="micro"&&a===!0)return!1;e.settings.msgFilters.achievements.unlocked||(e.settings.msgFilters.achievements.unlocked=!0,e.settings.msgFilters.achievements.vis=!0);let n=Xt(),o=!1,c=!1;(typeof i>"u"||i>n)&&(i=n);let l=!0;if(typeof e.stats.achieve[r]>"u"&&(e.stats.achieve[r]={l:0},l=!1),(e.race.universe==="micro"&&a===!0||e.race.universe!=="micro"&&a!==!0)&&e.stats.achieve[r]&&e.stats.achieve[r].l"u"||i>s)&&(i=s),!e.stats.feat[r]||e.stats.feat[r]&&e.stats.feat[r]');$("#stats").append(r);let a=$('
    ');$("#perks").append(a);let i=$('
    ');$("#achieve").append(i),Vp(),sl(),$("body").hasClass("fool")?as({fool:!0}):as()}function as(r){be($("#achievePanel"));let a=$("#achievePanel"),i=0,s=0,n=0,o=0,c=wt(),l=typeof r=="object"&&r.fool?r.fool:!1;if(Object.keys(ei).forEach(function(v){let _=In(v,"achievement");if(s++,e.stats.achieve[v]){i++,n+=e.stats.achieve[v].l>5?5:e.stats.achieve[v].l,e.stats.achieve[v][c]&&(o+=e.stats.achieve[v][c]>5?5:e.stats.achieve[v][c]);let g=tr(v,16,_,l);l&&e.stats.achieve[v].l>1||!l?a.append($(`
    ${ei[v].name}${ei[v].desc}${g}
    `)):l&&e.stats.achieve[v].l===1&&i--}}),Lo(n),Io(o),l&&!e.stats.feat.fool){let v=$(`
    ${sn.fool.name}${t("feat_fool_spoof")}
    `);a.append(v)}else Object.keys(sn).forEach(function(v){let _=In(v,"feat");if(e.stats.feat[v]){let g=e.stats.feat[v]>1?`

    ${rn(_)}

    `:"";if(v==="easter"){let w=Wt(4,14);w.length>0&&(g=w)}a.append($(`
    ${sn[v].name}${sn[v].desc}${g}
    `))}});let h=ar(5,12,!1);a.prepend(`
    ${t("achieve_draw_achieve_earned",[i,s])}${h}
    `),V({el:"#achievePanel",methods:{flair(v){return ei[v].flair},feat(v){return sn[v].flair}}}),l&&!e.stats.feat.fool&&$("#thefool").on("mouseover",function(){e.race.universe==="micro"?We("fool",!0):We("fool"),as()})}function Zs(){let r=Xt();$("#topBar span.flair")&&be($("#topBar span.flair"),!0);let a=Wt(1,14);if(a.length>0&&$("#topBar .planet").after($(a)),r>1&&$("#topBar .planet .flair").length===0){if(a.length===0){let s=In("topbar","challenge");$("#topBar .planet").after(`${rn(s)}`)}let i="";e.race.no_plasmid&&(i+=`
    ${t("evo_challenge_plasmid")}
    `),e.race.weak_mastery&&(i+=`
    ${t("evo_challenge_mastery")}
    `),e.race.no_trade&&(i+=`
    ${t("evo_challenge_trade")}
    `),e.race.no_craft&&(i+=`
    ${t("evo_challenge_craft")}
    `),e.race.no_crispr&&(i+=`
    ${t("evo_challenge_crispr")}
    `),e.race.nerfed&&(i+=`
    ${t("evo_challenge_nerfed")}
    `),e.race.badgenes&&(i+=`
    ${t("evo_challenge_badgenes")}
    `),i.length>0&&$("#topBar .planetWrap .flair").append($(`
    Active Challenge Genes
    ${i}
    `)),ve("topbarPlanet",function(s){let n=$('
    ');s.popper.append(n),n.append($(i))},{elm:"#topBar .planetWrap .flair",classes:"has-background-light has-text-dark"})}}function Xt(){let r=1;return e.race.no_plasmid&&r++,e.race.no_trade&&r++,e.race.no_craft&&r++,e.race.no_crispr&&r++,e.race.weak_mastery&&r++,e.race.nerfed&&r++,e.race.badgenes&&r++,r>5&&(r=5),r}function Zr(){let r=Xt();for(let o=r;o>=0;o--)al("extinct_","mass_extinction",25,o),e.race.universe==="evil"&&il("extinct_","vigilante",12,o),al("genus_","creator",9,o),al("biome_","explorer",6,o),e.race.universe==="heavy"&&il("genus_","heavyweight",8,o);if(e.tech.supercollider&&e.tech.supercollider>=99&&le("blackhole"),e.stats.starved>=100&&le("mass_starvation"),Math.round(Math.log2(e.civic.garrison.protest+e.civic.garrison.fatigue))>=8&&le("warmonger"),e.stats.died>=250&&le("red_tactics"),e.interstellar.stellar_engine&&e.interstellar.stellar_engine.mass>=12&&le("landfill"),e.interstellar.stellar_engine&&e.interstellar.stellar_engine.mass>=100&&We("supermassive"),e.tech.piracy&&e.tech.chthonian&&e.tech.chthonian>=2&&e.galaxy){let o=qt("gxy_chthonian"),c=qt("gxy_stargate");if(c===1&&qt("gxy_gateway")===1&&qt("gxy_gorddon")===1&&qt("gxy_alien1")===1&&qt("gxy_alien2")===1&&o===1&&le("neutralized"),e.race.fasting&&o-c===0){let l=wt();e.stats.endless_hunger.b2[l]=!0,l!=="m"&&l!=="l"&&(e.stats.endless_hunger.b2.l=!0)}}if(rt("summer")&&e.resource.hasOwnProperty("Thermite")){let o=1e5+e.stats.reset*9e3;o>1e6&&(o=1e6),e.resource.Thermite.amount>o&&We("solstice",e.race.universe==="micro")}if(rt("firework")&&e[e.race.cataclysm||e.race.orbit_decayed?"space":"city"].firework.on>0&&We("firework",e.race.universe==="micro"),e.city.morale.current>=200&&(le("paradise"),e.city.morale.current>=500&&We("utopia")),e.resource.hasOwnProperty("Money")&&e.resource.Money.amount>=1e9&&le("scrooge"),e.resource.hasOwnProperty("Money")&&e.race.inflation&&e.resource.Money.amount>=25e10&&le("wheelbarrow"),e.civic.hasOwnProperty("govern")&&e.galaxy.hasOwnProperty("trade")&&e.city.hasOwnProperty("market")&&e.galaxy.trade.cur>=50&&e.city.market.trade>=750&&e.civic.govern.type==="federation"&&le("trade"),e.tech.pillars){let o={},c=0,l=Array(6).fill(0);if(Object.keys(e.pillars).forEach(function(h){if(T[h]){let v=T[h].type;v!=="hybrid"&&(!o[v]||e.pillars[h]>o[v])&&(o[v]=e.pillars[h]),c++,l[e.pillars[h]]++}}),Object.keys(o).length>=Object.keys(fr).length-2){let h=5;Object.keys(o).forEach(function(v){o[v]=Object.keys(T).length-1&&le("resonance"),c>=50){let h=0;for(let v=5;v>0;v--)if(h+=l[v],h>=50){We("equilibrium",!1,v);break}}}if(e.stats.synth&&Object.keys(e.stats.synth).length>=32&&We("planned_obsolescence",!1,5),e.portal.hasOwnProperty("mechbay")&&e.tech.hasOwnProperty("hell_spire")&&e.tech.hell_spire>=9){let o=Object.keys($s).length,c={};Object.keys(e.stats.spire).forEach(function(l){let h={};Object.keys(e.stats.spire[l]).forEach(function(v){$s[v]&&(l!=="m"&&(!c.hasOwnProperty(v)||c[v]0&&(h[v]=e.stats.spire[l][v]))}),Object.keys(h).length===o&&le("gladiator",!1,Math.min(...Object.values(h)),l)}),Object.keys(c).length===o&&le("gladiator",!1,Math.min(...Object.values(c)),"l")}if(e.race.banana){let o=wt();e.tech.hasOwnProperty("monuments")&&e.tech.monuments>=50&&(e.stats.banana.b5[o]=!0,o!=="m"&&o!=="l"&&(e.stats.banana.b5.l=!0));let c=0,l=0;["b1","b2","b3","b4","b5"].forEach(function(h){e.stats.banana[h].l&&c++,o!=="l"&&e.stats.banana[h][o]&&l++}),c>0&&le("banana",!1,c,"l"),l>0&&o!=="l"&&le("banana",!1,l,o),e.interstellar.hasOwnProperty("stellar_engine")&&e.interstellar.stellar_engine.mass>=12&&e.interstellar.stellar_engine.exotic===0&&(e.stats.banana.b3[o]=!0,o!=="m"&&o!=="l"&&(e.stats.banana.b3.l=!0))}if(["l",wt()].forEach(function(c){let l=0;["ashanddust","exodus","obsolete","bluepill","retired"].forEach(function(h){e.stats.achieve[h]&&e.stats.achieve[h][c]&&e.stats.achieve[h][c]>=5&&l++}),l>0&&le("pathfinder",!1,l,c)}),e.race.fasting){let o=wt();e.tech.hasOwnProperty("stock_exchange")&&e.tech.stock_exchange>=80&&(e.stats.endless_hunger.b3[o]=!0,o!=="m"&&o!=="l"&&(e.stats.endless_hunger.b3.l=!0)),e.resource[e.race.species].amount>=1200&&(e.stats.endless_hunger.b4[o]=!0,o!=="m"&&o!=="l"&&(e.stats.endless_hunger.b4.l=!0));let c=0,l=0;["b1","b2","b3","b4","b5"].forEach(function(h){e.stats.endless_hunger[h].l&&c++,o!=="l"&&e.stats.endless_hunger[h][o]&&l++}),c>0&&le("endless_hunger",!1,c,"l"),l>0&&o!=="l"&&le("endless_hunger",!1,l,o)}let a=new Date,i=rt("easter"),s=rt("halloween"),n=a.getFullYear();if(!e.settings.boring&&a.getDate()===13&&a.getDay()===5&&e.resource[e.race.species].amount>=1){let o=!1;o=We("friday",e.race.universe==="micro"),o&&e.resource[e.race.species].amount--}else if(!e.settings.boring&&a.getMonth()===1&&a.getDate()===14)We("valentine",e.race.universe==="micro");else if(!e.settings.boring&&a.getMonth()===2&&a.getDate()===17)We("leprechaun",e.race.universe==="micro");else if(i.active){We("easter",e.race.universe==="micro");let o=0;for(let c=1;c<=18;c++)e.special.egg[n][`egg${c}`]&&o++;o>=12&&We("egghunt",e.race.universe==="micro")}else if(rt("launch_day"))We("launch_day",e.race.universe==="micro");else if(s.active){let o=0;for(let c=1;c<=7;c++)e.special.trick[n][`trick${c}`]&&o++;for(let c=1;c<=7;c++)e.special.trick[n][`treat${c}`]&&o++;o>=12&&We("trickortreat",e.race.universe==="micro"),a.getMonth()===9&&a.getDate()===31&&We("halloween",e.race.universe==="micro")}else!e.settings.boring&&a.getMonth()===10&&a.getDate()>=22&&a.getDate()<=28?We("thanksgiving",e.race.universe==="micro"):!e.settings.boring&&a.getMonth()===11&&a.getDate()==25&&We("xmas",e.race.universe==="micro");!e.settings.boring&&a.getMonth()===3&&a.getDate()>=1&&a.getDate()<=3&&e.stats.feat.hasOwnProperty("fool")&&e.stats.feat.fool>0&&We("fool",e.race.universe==="micro"),e.stats.dkills>=666e6&&We("demon_slayer");for(let o=r;o>=1;o--){let c=0,l=Object.keys(ei);for(let v of l)e.stats.achieve[v]&&e.stats.achieve[v].l>=o&&c++;let h=[{c:10,f:"novice"},{c:25,f:"journeyman"},{c:50,f:"adept"},{c:75,f:"master"},{c:100,f:"grandmaster"},{c:150,f:"god"}];for(let v=0;v<6;v++)c>=h[v].c&&(!e.stats.feat[h[v].f]||e.stats.feat[h[v].f]=s&&n++;if(n>=i&&(le(a,!1,s),e.race.universe!=="standard"))switch(e.race.universe){case"evil":e.stats.achieve[a].e=void 0;break;case"antimatter":e.stats.achieve[a].a=void 0;break;case"heavy":e.stats.achieve[a].h=void 0;break;case"micro":e.stats.achieve[a].m=void 0;break;case"magic":e.stats.achieve[a].mg=void 0;break;default:break}}e.race.universe!=="standard"&&il(r,a,i,s)}function il(r,a,i,s){let n=!1;switch(e.race.universe){case"evil":(typeof e.stats.achieve[a]>"u"||typeof e.stats.achieve[a].e>"u"||e.stats.achieve[a].e"u"||typeof e.stats.achieve[a].a>"u"||e.stats.achieve[a].a"u"||typeof e.stats.achieve[a].h>"u"||e.stats.achieve[a].h"u"||typeof e.stats.achieve[a].m>"u"||e.stats.achieve[a].m"u"||typeof e.stats.achieve[a].mg>"u"||e.stats.achieve[a].mg=s&&o++;break;case"antimatter":e.stats.achieve[l]&&e.stats.achieve[l].a&&e.stats.achieve[l].a>=s&&o++;break;case"heavy":e.stats.achieve[l]&&e.stats.achieve[l].h&&e.stats.achieve[l].h>=s&&o++;break;case"micro":e.stats.achieve[l]&&e.stats.achieve[l].m&&e.stats.achieve[l].m>=s&&o++;break;case"magic":e.stats.achieve[l]&&e.stats.achieve[l].mg&&e.stats.achieve[l].mg>=s&&o++;break;default:break}o>=i&&le(a,!1,s)}}var qs={mastery:{name:t("mastery"),desc(){let r="";return Object.keys(ba).forEach(function(a){let i=el(a,!0,!0);a==="standard"?r+=` - ${universe_types[universe].name}: - ${loc("perks_mastery_general", [`${+mastery.g.toFixed(2)}%`])} + ${ba[a].name}: + ${t("perks_mastery_general",[`${+i.g.toFixed(2)}%`])} - `; - } else if (global.stats.achieve["whitehole"]) { - desc += ` + `:e.stats.achieve.whitehole&&(r+=` - ${universe_types[universe].name}: + ${ba[a].name}: - ${loc("perks_mastery_general", [`${+mastery.g.toFixed(2)}%`])}, - ${loc("perks_mastery_universe", [`${+mastery.u.toFixed(2)}%`])}, - ${loc("perks_mastery_total", [`${+(mastery.g + mastery.u).toFixed(2)}%`])} + ${t("perks_mastery_general",[`${+i.g.toFixed(2)}%`])}, + ${t("perks_mastery_universe",[`${+i.u.toFixed(2)}%`])}, + ${t("perks_mastery_total",[`${+(i.g+i.u).toFixed(2)}%`])} - `; - } - }); - return desc; - }, - active() { - return global.genes["challenge"] && global.genes["challenge"] >= 2 ? true : false; - }, - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_unlocked_title`)}`]) - ] - }, - blackhole: { - name: loc(`achieve_blackhole_name`), - desc(wiki) { - let bonus = wiki ? "5/10/15/20/25" : global.stats.achieve["blackhole"] ? global.stats.achieve.blackhole.l * 5 : 5; - return loc("achieve_perks_blackhole", [bonus]); - }, - active() { - return global.stats.achieve["blackhole"] && global.stats.achieve.blackhole.l >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_blackhole_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_blackhole_name`)}`]) - ] - }, - trade: { - name: loc(`achieve_trade_name`), - desc(wiki) { - let bonus1 = wiki ? "2/4/6/8/10" : global.stats.achieve["trade"] ? global.stats.achieve.trade.l * 2 : 2; - let bonus2 = wiki ? "1/2/3/4/5" : global.stats.achieve["trade"] ? global.stats.achieve.trade.l : 1; - return loc("achieve_perks_trade", [bonus1, bonus2]); - }, - active() { - return global.stats.achieve["trade"] && global.stats.achieve.trade.l >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_trade_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_trade_name`)}`]) - ] - }, - creator: { - name: loc(`achieve_creator_name`), - desc(wiki) { - let bonus = wiki ? "1.5/2/2.5/3/3.5" : 1 + (global.stats.achieve["creator"] ? global.stats.achieve["creator"].l * 0.5 : 0.5); - return loc("achieve_perks_creator", [bonus]); - }, - active() { - return global.stats.achieve["creator"] && global.stats.achieve.creator.l >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_creator_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_creator_name`)}`]) - ] - }, - mass_extinction: { - name: loc(`achieve_mass_extinction_name`), - group: [ - { - desc() { - return loc("achieve_perks_mass_extinction"); - }, - active() { - return global.stats.achieve["mass_extinction"] && global.stats.achieve["mass_extinction"].l >= 1 ? true : false; - } - }, - { - desc(wiki) { - let rank = global.stats.achieve["mass_extinction"] ? global.stats.achieve.mass_extinction.l : 1; - let bonus = wiki ? "0/50/100/150/200" : (rank - 1) * 50; - return loc("achieve_perks_mass_extinction2", [bonus]); - }, - active() { - return global.stats.achieve["mass_extinction"] && global.stats.achieve.mass_extinction.l > 1 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_mass_extinction_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_mass_extinction_name`)}`]) - ] - }, - doomed: { - name: loc(`achieve_doomed_name`), - desc(wiki) { - return loc("achieve_perks_doomed"); - }, - active() { - return global.stats.portals >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_doomed_name`)}`]) - ] - }, - explorer: { - name: loc(`achieve_explorer_name`), - desc(wiki) { - let bonus = wiki ? "1/2/3/4/5" : global.stats.achieve["explorer"] ? global.stats.achieve["explorer"].l : 1; - return loc("achieve_perks_explorer", [bonus]); - }, - active() { - return global.stats.achieve["explorer"] && global.stats.achieve.explorer.l >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_explorer_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_explorer_name`)}`]) - ] - }, - miners_dream: { - name: loc(`achieve_miners_dream_name`), - desc(wiki) { - let numGeo = wiki ? "1/2/3/5/7" : global.stats.achieve["miners_dream"] ? global.stats.achieve["miners_dream"].l >= 4 ? global.stats.achieve["miners_dream"].l * 2 - 3 : global.stats.achieve["miners_dream"].l : 0; - return loc("achieve_perks_miners_dream", [numGeo]); - }, - active() { - return global.stats.achieve["miners_dream"] && global.stats.achieve.miners_dream.l >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_miners_dream_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_miners_dream_name`)}`]) - ] - }, - extinct_junker: { - name: loc(`achieve_extinct_junker_name`), - desc() { - return loc("achieve_perks_enlightened"); - }, - active() { - return global.stats.achieve["extinct_junker"] && global.stats.achieve.extinct_junker.l >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_extinct_junker_name`)}`]) - ] - }, - joyless: { - name: loc(`achieve_joyless_name`), - desc(wiki) { - let bonus = wiki ? "2/4/6/8/10" : global.stats.achieve["joyless"] ? global.stats.achieve["joyless"].l * 2 : 2; - return loc("achieve_perks_joyless", [bonus]); - }, - active() { - return global.stats.achieve["joyless"] && global.stats.achieve.joyless.l >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_joyless_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_joyless_name`)}`]) - ] - }, - steelen: { - name: loc(`achieve_steelen_name`), - desc(wiki) { - let bonus = wiki ? "2/4/6/8/10" : global.stats.achieve["steelen"] ? global.stats.achieve["steelen"].l * 2 : 2; - return loc("achieve_perks_steelen", [bonus]); - }, - active() { - return global.stats.achieve["steelen"] && global.stats.achieve.steelen.l >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_steelen_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_steelen_name`)}`]) - ] - }, - wheelbarrow: { - name: loc(`achieve_wheelbarrow_name`), - desc(wiki) { - let bonus = wiki ? "2/4/6/8/10" : global.stats.achieve["wheelbarrow"] ? global.stats.achieve["wheelbarrow"].l * 2 : 2; - return loc("achieve_perks_wheelbarrow", [bonus]); - }, - active() { - return global.stats.achieve["wheelbarrow"] && global.stats.achieve.wheelbarrow.l >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_wheelbarrow_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_wheelbarrow_name`)}`]) - ] - }, - extinct_sludge: { - name: loc(`achieve_extinct_sludge_name`), - group: [ - { - desc(wiki) { - let bonus = wiki ? "3/6/9/12/15" : global.stats.achieve["extinct_sludge"] ? global.stats.achieve["extinct_sludge"].l * 3 : 3; - return loc("achieve_perks_extinct_sludge", [bonus, loc(`universe_standard`)]); - }, - active() { - return global.stats.achieve["extinct_sludge"] && global.stats.achieve.extinct_sludge.l >= 1 ? true : false; - } - }, - { - desc(wiki) { - let bonus = wiki ? "3/6/9/12/15" : global.stats.achieve["extinct_sludge"] ? global.stats.achieve["extinct_sludge"].h * 3 : 3; - return loc("achieve_perks_extinct_sludge", [bonus, loc(`universe_heavy`)]); - }, - active() { - return global.stats.achieve["extinct_sludge"] && global.stats.achieve.extinct_sludge.h >= 1 ? true : false; - } - }, - { - desc(wiki) { - let bonus = wiki ? "3/6/9/12/15" : global.stats.achieve["extinct_sludge"] ? global.stats.achieve["extinct_sludge"].a * 3 : 3; - return loc("achieve_perks_extinct_sludge", [bonus, loc(`universe_antimatter`)]); - }, - active() { - return global.stats.achieve["extinct_sludge"] && global.stats.achieve.extinct_sludge.a >= 1 ? true : false; - } - }, - { - desc(wiki) { - let bonus = wiki ? "3/6/9/12/15" : global.stats.achieve["extinct_sludge"] ? global.stats.achieve["extinct_sludge"].e * 3 : 3; - return loc("achieve_perks_extinct_sludge", [bonus, loc(`universe_evil`)]); - }, - active() { - return global.stats.achieve["extinct_sludge"] && global.stats.achieve.extinct_sludge.e >= 1 ? true : false; - } - }, - { - desc(wiki) { - let bonus = wiki ? "3/6/9/12/15" : global.stats.achieve["extinct_sludge"] ? global.stats.achieve["extinct_sludge"].m * 3 : 3; - return loc("achieve_perks_extinct_sludge", [bonus, loc(`universe_micro`)]); - }, - active() { - return global.stats.achieve["extinct_sludge"] && global.stats.achieve.extinct_sludge.m >= 1 ? true : false; - } - }, - { - desc(wiki) { - let bonus = wiki ? "3/6/9/12/15" : global.stats.achieve["extinct_sludge"] ? global.stats.achieve["extinct_sludge"].mg * 3 : 3; - return loc("achieve_perks_extinct_sludge", [bonus, loc(`universe_magic`)]); - }, - active() { - return global.stats.achieve["extinct_sludge"] && global.stats.achieve.extinct_sludge.mg >= 1 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_extinct_sludge_name`)}`]), - loc(`wiki_perks_achievement_note_universe_scale`, [`${loc(`achieve_extinct_sludge_name`)}`]) - ] - }, - whitehole: { - name: loc(`achieve_whitehole_name`), - group: [ - { - desc() { - return loc("achieve_perks_whitehole"); - }, - active() { - return global.stats.achieve["whitehole"] ? true : false; - } - }, - { - desc(wiki) { - let bonus = wiki ? "5/10/15/20/25" : global.stats.achieve["whitehole"] ? global.stats.achieve["whitehole"].l * 5 : 5; - return loc("achieve_perks_whitehole2", [bonus]); - }, - active() { - return global.stats.achieve["whitehole"] ? true : false; - } - }, - { - desc(wiki) { - let bonus = wiki ? "1/2/3/4/5" : global.stats.achieve["whitehole"] ? global.stats.achieve["whitehole"].l : 1; - return loc("achieve_perks_whitehole3", [bonus]); - }, - active() { - return global.stats.achieve["whitehole"] ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_whitehole_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_whitehole_name`)}`]) - ] - }, - heavyweight: { - name: loc(`achieve_heavyweight_name`), - desc(wiki) { - let bonus = wiki ? "4/8/12/16/20" : global.stats.achieve["heavyweight"] ? global.stats.achieve["heavyweight"].l * 4 : 4; - return loc("achieve_perks_heavyweight", [bonus]); - }, - active() { - return global.stats.achieve["heavyweight"] ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_heavyweight_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_heavyweight_name`)}`]) - ] - }, - dissipated: { - name: loc(`achieve_dissipated_name`), - group: [ - { - desc() { - return loc("achieve_perks_dissipated1", [1]); - }, - active() { - return global.stats.achieve["dissipated"] && global.stats.achieve["dissipated"].l >= 1 ? true : false; - } - }, - { - desc(wiki) { - let bonus = wiki ? "1/2" : global.stats.achieve["dissipated"] && global.stats.achieve["dissipated"].l >= 5 ? 2 : 1; - return loc("achieve_perks_dissipated2", [bonus]); - }, - active() { - return global.stats.achieve["dissipated"] && global.stats.achieve["dissipated"].l >= 3 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_dissipated3", [1]); - }, - active() { - return global.stats.achieve["dissipated"] && global.stats.achieve["dissipated"].l >= 2 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_dissipated4", [1]); - }, - active() { - return global.stats.achieve["dissipated"] && global.stats.achieve["dissipated"].l >= 4 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_dissipated_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_dissipated_name`)}`]) - ] - }, - banana: { - name: loc(`achieve_banana_name`), - group: [ - { - desc() { - return loc("achieve_perks_banana1", [50]); - }, - active() { - return global.stats.achieve["banana"] && global.stats.achieve.banana.l >= 1 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_banana2", [1]); - }, - active() { - return global.stats.achieve["banana"] && global.stats.achieve.banana.l >= 2 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_banana3", [10]); - }, - active() { - return global.stats.achieve["banana"] && global.stats.achieve.banana.l >= 3 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_banana4", [3]); - }, - active() { - return global.stats.achieve["banana"] && global.stats.achieve.banana.l >= 4 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_banana5", [0.01]); - }, - active() { - return global.stats.achieve["banana"] && global.stats.achieve.banana.l >= 5 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_banana_name`)}`]), - loc(`wiki_perks_achievement_note_task`, [`${loc(`achieve_banana_name`)}`]), - loc(`wiki_perks_achievement_note_task_num`, [1, `${loc(`wiki_achieve_banana1`)}`]), - loc(`wiki_perks_achievement_note_task_num`, [2, `${loc(`wiki_achieve_banana2`)}`]), - loc(`wiki_perks_achievement_note_task_num`, [3, `${loc(`wiki_achieve_banana3`)}`]), - loc(`wiki_perks_achievement_note_task_num`, [4, `${loc(`wiki_achieve_banana4`, [500])}`]), - loc(`wiki_perks_achievement_note_task_num`, [5, `${loc(`wiki_achieve_banana5`, [50])}`]) - ] - }, - anarchist: { - name: loc(`achieve_anarchist_name`), - desc(wiki) { - let bonus = wiki ? "10/20/30/40/50" : global.stats.achieve["anarchist"] ? global.stats.achieve["anarchist"].l * 10 : 10; - return loc("achieve_perks_anarchist", [bonus]); - }, - active() { - return global.stats.achieve["anarchist"] && global.stats.achieve["anarchist"].l >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_anarchist_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_anarchist_name`)}`]) - ] - }, - ascended: { - name: loc(`achieve_ascended_name`), - group: [ - { - desc(wiki) { - let genes; - if (wiki) { - genes = "1-30"; - } else { - genes = 0; - if (global.stats.achieve["ascended"]) { - for (let i = 0; i < universe_affixes.length; i++) { - if (global.stats.achieve.ascended.hasOwnProperty(universe_affixes[i])) { - genes += global.stats.achieve.ascended[universe_affixes[i]]; - } - } - } - } - return loc("achieve_perks_ascended1", [genes]); - }, - active() { - return global.stats.achieve["ascended"] && global.stats.achieve["ascended"].l >= 1 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_ascended2", [harmonyEffect()]); - }, - active() { - return global.stats.achieve["ascended"] && global.stats.achieve["ascended"][universeAffix()] >= 1 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_ascended_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_ascended_name`)}`]), - loc(`wiki_perks_achievement_note_universe`, [`${loc(`achieve_ascended_name`)}`]) - ] - }, - technophobe: { - name: loc(`achieve_technophobe_name`), - group: [ - { - desc() { - return loc("achieve_perks_technophobe1", [25]); - }, - active() { - return global.stats.achieve["technophobe"] && global.stats.achieve["technophobe"].l >= 1 ? true : false; - } - }, - { - desc(wiki) { - let bonus; - if (wiki) { - bonus = "10/25/30/35/40/45/50"; - } else { - bonus = global.stats.achieve["technophobe"] && global.stats.achieve.technophobe.l >= 4 ? 25 : 10; - for (let i = 1; i < universe_affixes.length; i++) { - if (global.stats.achieve["technophobe"] && global.stats.achieve.technophobe[universe_affixes[i]] && global.stats.achieve.technophobe[universe_affixes[i]] >= 5) { - bonus += 5; - } - } - } - return loc("achieve_perks_technophobe2", [bonus]); - }, - active() { - return global.stats.achieve["technophobe"] && global.stats.achieve.technophobe.l >= 2 ? true : false; - } - }, - { - desc(wiki) { - let gems; - if (wiki) { - gems = "1/2/3/4/5/6"; - } else { - gems = 1; - for (let i = 1; i < universe_affixes.length; i++) { - if (global.stats.achieve["technophobe"] && global.stats.achieve.technophobe[universe_affixes[i]] && global.stats.achieve.technophobe[universe_affixes[i]] >= 5) { - gems += 1; - } - } - } - return wiki || gems > 1 ? loc("achieve_perks_technophobe3a", [gems]) : loc("achieve_perks_technophobe3", [gems]); - }, - active() { - return global.stats.achieve["technophobe"] && global.stats.achieve.technophobe.l >= 3 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_technophobe4", [10]); - }, - active() { - return global.stats.achieve["technophobe"] && global.stats.achieve.technophobe.l >= 5 ? true : false; - } - }, - { - desc(wiki) { - let bonus = wiki ? "4/8/12/16/20" : global.stats.achieve["technophobe"] ? global.stats.achieve.technophobe.l : 0; - return loc("achieve_perks_technophobe5", [bonus]); - }, - active() { - return global.stats.achieve["technophobe"] && global.stats.achieve.technophobe.l >= 1 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_technophobe_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_technophobe_name`)}`]), - loc(`wiki_perks_achievement_note_universe`, [`${loc(`achieve_technophobe_name`)}`]) - ] - }, - iron_will: { - name: loc(`achieve_iron_will_name`), - group: [ - { - desc() { - return loc("achieve_perks_iron_will1", [0.15]); - }, - active() { - return global.stats.achieve["iron_will"] && global.stats.achieve.iron_will.l >= 1 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_iron_will2", [10]); - }, - active() { - return global.stats.achieve["iron_will"] && global.stats.achieve.iron_will.l >= 2 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_iron_will3", [6]); - }, - active() { - return global.stats.achieve["iron_will"] && global.stats.achieve.iron_will.l >= 3 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_iron_will4", [1]); - }, - active() { - return global.stats.achieve["iron_will"] && global.stats.achieve.iron_will.l >= 4 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_iron_will5"); - }, - active() { - return global.stats.achieve["iron_will"] && global.stats.achieve.iron_will.l >= 5 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_iron_will_name`)}`]), - loc(`wiki_perks_achievement_note_ironwill`, [`${loc(`evo_challenge_cataclysm`)}`]), - loc(`wiki_perks_achievement_note_ironwill2`, [1, `${loc(`space_red_ziggurat_title`)}`]), - loc(`wiki_perks_achievement_note_ironwill3`, [2, `${loc(`tech_elerium_mining`)}`]), - loc(`wiki_perks_achievement_note_ironwill3`, [3, `${loc(`tech_lasers`)}`]), - loc(`wiki_perks_achievement_note_ironwill3`, [4, `${loc(`tech_generational_ship`)}`]), - loc(`wiki_perks_achievement_note_ironwill4`, [5, `${loc(`wiki_resets_bioseed`)}`]) - ] - }, - failed_history: { - name: loc(`achieve_failed_history_name`), - desc() { - return loc("achieve_perks_failed_history", [2]); - }, - active() { - return global.stats.achieve["failed_history"] && global.stats.achieve.failed_history.l >= 5 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_failed_history_name`)}`]), - loc(`wiki_perks_achievement_note_failed_history`, [`${loc(`evo_challenge_cataclysm`)}`]) - ] - }, - lamentis: { - name: loc(`achieve_lamentis_name`), - group: [ - { - desc() { - return loc("achieve_perks_lamentis1", [`10%`]); - }, - active() { - return global.stats.achieve["lamentis"] && global.stats.achieve.lamentis.l >= 1 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_lamentis2", [`10%`]); - }, - active() { - return global.stats.achieve["lamentis"] && global.stats.achieve.lamentis.l >= 2 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_lamentis3", [`10%`]); - }, - active() { - return global.stats.achieve["lamentis"] && global.stats.achieve.lamentis.l >= 3 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_lamentis4"); - }, - active() { - return global.stats.achieve["lamentis"] && global.stats.achieve.lamentis.l >= 4 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_lamentis5"); - }, - active() { - return global.stats.achieve["lamentis"] && global.stats.achieve.lamentis.l >= 5 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_lamentis_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_lamentis_name`)}`]) - ] - }, - soul_sponge: { - name: loc(`achieve_soul_sponge_name`), - desc(wiki) { - let soul = wiki ? "100/200/300/400/500" : global.stats.achieve["soul_sponge"] ? global.stats.achieve.soul_sponge.mg * 100 : 100; - return loc("achieve_perks_soul_sponge", [soul]); - }, - active() { - return global.stats.achieve["soul_sponge"] && global.stats.achieve.soul_sponge.mg >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_soul_sponge_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_soul_sponge_name`)}`]) - ] - }, - nightmare: { - name: loc(`achieve_nightmare_name`), - desc() { - return loc("achieve_perks_nightmare"); - }, - active() { - return global.stats.achieve["nightmare"] && global.stats.achieve.nightmare.mg >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_nightmare_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_nightmare_name`)}`]) - ] - }, - escape_velocity: { - name: loc(`achieve_escape_velocity_name`), - desc(wiki) { - let ev = wiki ? "2/4/6/8/10" : global.stats.achieve["escape_velocity"] ? global.stats.achieve.escape_velocity.h * 2 : 2; - return loc("achieve_perks_escape_velocity", [ev]); - }, - active() { - return global.stats.achieve["escape_velocity"] && global.stats.achieve.escape_velocity.h >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_escape_velocity_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_escape_velocity_name`)}`]) - ] - }, - endless_hunger: { - name: loc(`achieve_endless_hunger_name`), - group: [ - { - desc() { - return loc("achieve_perks_endless_hunger1"); - }, - active() { - return global.stats.achieve["endless_hunger"] && global.stats.achieve.endless_hunger.l >= 1 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_endless_hunger2"); - }, - active() { - return global.stats.achieve["endless_hunger"] && global.stats.achieve.endless_hunger.l >= 2 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_endless_hunger3"); - }, - active() { - return global.stats.achieve["endless_hunger"] && global.stats.achieve.endless_hunger.l >= 3 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_endless_hunger4"); - }, - active() { - return global.stats.achieve["endless_hunger"] && global.stats.achieve.endless_hunger.l >= 4 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_endless_hunger5"); - }, - active() { - return global.stats.achieve["endless_hunger"] && global.stats.achieve.endless_hunger.l >= 5 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_endless_hunger_name`)}`]), - loc(`wiki_perks_achievement_note_task`, [`${loc(`achieve_endless_hunger_name`)}`]), - loc(`wiki_perks_achievement_note_task_num`, [1, `${loc(`wiki_achieve_endless_hunger1`)}`]), - loc(`wiki_perks_achievement_note_task_num`, [2, `${loc(`wiki_achieve_endless_hunger2`)}`]), - loc(`wiki_perks_achievement_note_task_num`, [3, `${loc(`wiki_achieve_endless_hunger3`, [80])}`]), - loc(`wiki_perks_achievement_note_task_num`, [4, `${loc(`wiki_achieve_endless_hunger4`, [1200])}`]), - loc(`wiki_perks_achievement_note_task_num`, [5, `${loc(`wiki_achieve_endless_hunger5`)}`]) - ] - }, - gladiator: { - name: loc(`achieve_gladiator_name`), - desc(wiki) { - let mech = wiki ? "20/40/60/80/100" : global.stats.achieve["gladiator"] ? global.stats.achieve.gladiator.l * 20 : 20; - return loc("achieve_perks_gladiator", [mech]); - }, - active() { - return global.stats.achieve["gladiator"] && global.stats.achieve.gladiator.l >= 1 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_gladiator_name`)}`]), - loc(`wiki_perks_achievement_note_scale`, [`${loc(`achieve_gladiator_name`)}`]) - ] - }, - what_is_best: { - name: loc(`achieve_what_is_best_name`), - group: [ - { - desc() { - return loc("achieve_perks_what_is_best1", [actions.portal.prtl_ruins.hell_forge.title(), "20%"]); - }, - active() { - return global.stats.achieve["what_is_best"] && global.stats.achieve.what_is_best.e >= 1 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_what_is_best2", [actions.portal.prtl_spire.purifier.title(), "25 MW"]); - }, - active() { - return global.stats.achieve["what_is_best"] && global.stats.achieve.what_is_best.e >= 2 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_what_is_best3", [actions.portal.prtl_pit.soul_forge.title(), actions.portal.prtl_pit.soul_attractor.title(), "1%"]); - }, - active() { - return global.stats.achieve["what_is_best"] && global.stats.achieve.what_is_best.e >= 3 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_what_is_best4", [actions.portal.prtl_lake.transport.title(), 3]); - }, - active() { - return global.stats.achieve["what_is_best"] && global.stats.achieve.what_is_best.e >= 4 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_what_is_best5"); - }, - active() { - return global.stats.achieve["what_is_best"] && global.stats.achieve.what_is_best.e >= 5 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_what_is_best_name`)}`]), - loc(`wiki_perks_achievement_note_task`, [`${loc(`achieve_what_is_best_name`)}`]), - loc(`wiki_perks_achievement_note_task_num`, [1, `${loc(`wiki_achieve_what_is_best_k`, [50])}`]), - loc(`wiki_perks_achievement_note_task_num`, [2, `${loc(`wiki_achieve_what_is_best_p`)}`]), - loc(`wiki_perks_achievement_note_task_num`, [3, `${loc(`wiki_achieve_what_is_best_a`, [250])}`]), - loc(`wiki_perks_achievement_note_task_num`, [4, `${loc(`wiki_achieve_what_is_best_r`)}`]), - loc(`wiki_perks_achievement_note_task_num`, [5, `${loc(`wiki_achieve_what_is_best_g`)}`]) - ] - }, - pathfinder: { - name: loc(`achieve_pathfinder_name`), - group: [ - { - desc() { - return loc("achieve_perks_pathfinder1", [10]); - }, - active() { - return global.stats.achieve["pathfinder"] && global.stats.achieve.pathfinder.l >= 1 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_pathfinder2", [10]); - }, - active() { - return global.stats.achieve["pathfinder"] && global.stats.achieve.pathfinder.l >= 2 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_pathfinder3"); - }, - active() { - return global.stats.achieve["pathfinder"] && global.stats.achieve.pathfinder.l >= 3 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_pathfinder4"); - }, - active() { - return global.stats.achieve["pathfinder"] && global.stats.achieve.pathfinder.l >= 4 ? true : false; - } - }, - { - desc() { - return loc("achieve_perks_pathfinder5"); - }, - active() { - return global.stats.achieve["pathfinder"] && global.stats.achieve.pathfinder.l >= 5 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_pathfinder_name`)}`]), - loc(`wiki_perks_achievement_note_pathfinder`, [`${loc(`evo_challenge_truepath`)}`]), - loc(`wiki_perks_achievement_note_pathfinder_reset`, [`${loc(`wiki_resets_mad`)}`]), - loc(`wiki_perks_achievement_note_pathfinder_reset`, [`${loc(`wiki_resets_bioseed`)}`]), - loc(`wiki_perks_achievement_note_pathfinder_reset`, [`${loc(`wiki_resets_ai`)}`]), - loc(`wiki_perks_achievement_note_pathfinder_reset`, [`${loc(`wiki_resets_matrix`)}`]), - loc(`wiki_perks_achievement_note_pathfinder_reset`, [`${loc(`wiki_resets_retired`)}`]) - ] - }, - overlord: { - name: loc(`achieve_overlord_name`), - desc() { - let desc = `
    ${loc("achieve_perks_overlord1", [10])}
    `; - desc += `
    ${loc("achieve_perks_overlord2")}
    `; - desc += `
    ${loc("achieve_perks_overlord3")}
    `; - desc += `
    ${loc("achieve_perks_overlord4")}
    `; - return desc; - }, - active() { - return global.stats.achieve["overlord"] && global.stats.achieve.overlord.l >= 5 ? true : false; - }, - notes: [ - loc(`wiki_perks_achievement_note`, [`${loc(`achieve_overlord_name`)}`]) - ] - }, - adam_eve: { - name: loc(`achieve_adam_eve_name`), - desc() { - return loc(`achieve_perks_adam_eve`); - }, - active() { - return global.stats.achieve["adam_eve"] && global.stats.achieve.adam_eve.l >= 5 ? true : false; - }, - notes: [] - }, - creep: { - name: loc(`wiki_arpa_crispr_creep`), - desc(wiki) { - let bonus = wiki ? "0.01/0.02/0.03/0.04/0.05" : global.genes["creep"] ? global.genes.creep * 0.01 : 0; - return loc("arpa_perks_creep", [bonus]); - }, - active() { - return global.genes["creep"] ? true : false; - }, - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_genetic_memory_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_animus_title`)}`, - `${loc(`arpa_genepool_divine_remembrance_title`)}`, - `${loc(`arpa_genepool_divine_proportion_title`)}`, - `${loc(`arpa_genepool_genetic_repository_title`)}` - ].join(", ") - ]) - ] - }, - store: { - name: loc(`wiki_arpa_crispr_store`), - desc(wiki) { - let psb = wiki ? "0.04/0.06/0.08" : global.genes["store"] && global.genes.store > 1 ? global.genes.store === 2 ? 0.06 : 0.08 : 0.04; - return loc(global.genes["store"] && global.genes.store >= 4 ? "arpa_perks_store2" : "arpa_perks_store1", [psb]); - }, - active() { - return global.genes["store"] ? true : false; - }, - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_spatial_reasoning_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_spatial_superiority_title`)}`, - `${loc(`arpa_genepool_spatial_supremacy_title`)}`, - `${loc(`arpa_genepool_dimensional_warping_title`)}` - ].join(", ") - ]) - ] - }, - evolve: { - name: loc(`wiki_arpa_crispr_evolve`), - group: [ - { - desc() { - return loc("arpa_perks_evolve"); - }, - active() { - return global.genes["evolve"] ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_recombination_desc"); - }, - active() { - return global.genes["evolve"] && global.genes.evolve >= 2 ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_homologous_recombination_desc"); - }, - active() { - return global.genes["evolve"] && global.genes.evolve >= 3 ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_genetic_reshuffling_desc"); - }, - active() { - return global.genes["evolve"] && global.genes.evolve >= 4 ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_recombinant_dna_desc"); - }, - active() { - return global.genes["evolve"] && global.genes.evolve >= 5 ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_chimeric_dna_desc"); - }, - active() { - return global.genes["evolve"] && global.genes.evolve >= 6 ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_molecular_cloning_desc"); - }, - active() { - return global.genes["evolve"] && global.genes.evolve >= 7 ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_transgenes_desc"); - }, - active() { - return global.genes["evolve"] && global.genes.evolve >= 8 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_morphogenesis_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_recombination_title`)}`, - `${loc(`arpa_genepool_homologous_recombination_title`)}`, - `${loc(`arpa_genepool_genetic_reshuffling_title`)}`, - `${loc(`arpa_genepool_recombinant_dna_title`)}`, - `${loc(`arpa_genepool_chimeric_dna_title`)}`, - `${loc(`arpa_genepool_molecular_cloning_title`)}`, - `${loc(`arpa_genepool_transgenes_title`)}` - ].join(", ") - ]) - ] - }, - birth: { - name: loc(`wiki_arpa_crispr_birth`), - desc() { - return loc("arpa_perks_birth"); - }, - active() { - return global.genes["birth"] ? true : false; - }, - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_replication_title`)}`]) - ] - }, - enhance: { - name: loc(`wiki_arpa_crispr_enhance`), - desc() { - return loc("arpa_perks_enhance"); - }, - active() { - return global.genes["enhance"] ? true : false; - }, - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_enhanced_muscle_fiber_title`)}`]) - ] - }, - crafty: { - name: loc(`wiki_arpa_crispr_crafty`), - group: [ - { - desc() { - return loc("arpa_genepool_artificer_desc"); - }, - active() { - return global.genes["crafty"] ? true : false; - } - }, - { - desc(wiki) { - let bonus = wiki ? "50/100" : global.genes["crafty"] && global.genes.crafty >= 3 ? 100 : 50; - return loc("arpa_genepool_crafting_desc", [bonus]); - }, - active() { - return global.genes["crafty"] && global.genes.crafty >= 2 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_artificer_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_detail_oriented_title`)}`, - `${loc(`arpa_genepool_rigorous_title`)}` - ].join(", ") - ]) - ] - }, - governor: { - name: loc(`wiki_arpa_crispr_governor`), - desc() { - return loc("arpa_perks_governor"); - }, - active() { - return global.genes["governor"] ? true : false; - }, - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_governance_title`)}`]) - ] - }, - synthesis: { - name: loc(`wiki_arpa_crispr_synthesis`), - desc(wiki) { - let base = wiki ? "2/3/4" : global.genes["synthesis"] && global.genes["synthesis"] >= 2 ? global.genes["synthesis"] >= 3 ? 4 : 3 : 2; - let auto = wiki ? "10/25/50" : global.genes["synthesis"] && global.genes["synthesis"] >= 2 ? global.genes["synthesis"] >= 3 ? 50 : 25 : 10; - return loc("arpa_genepool_synthesis_desc", [base, auto]); - }, - active() { - return global.genes["synthesis"] ? true : false; - }, - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_synthesis_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_karyokinesis_title`)}`, - `${loc(`arpa_genepool_cytokinesis_title`)}` - ].join(", ") - ]) - ] - }, - challenge: { - name: loc(`wiki_arpa_crispr_challenge`), - group: [ - { - desc() { - return loc("arpa_perks_challenge"); - }, - active() { - return global.genes["challenge"] ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_unlocked_desc"); - }, - active() { - return global.genes["challenge"] && global.genes.challenge >= 2 ? true : false; - } - }, - { - desc(wiki) { - return loc("arpa_perks_challenge2", [ - wiki ? "60/80" : global.genes["challenge"] && global.genes.challenge >= 4 ? 80 : 60, - wiki ? "60/40" : global.genes["challenge"] && global.genes.challenge >= 4 ? 40 : 60 - ]); - }, - active() { - return global.genes["challenge"] && global.genes.challenge >= 3 ? true : false; - } - }, - { - desc() { - return loc("arpa_perks_challenge3"); - }, - active() { - return global.genes["challenge"] && global.genes.challenge >= 5 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_hardened_genes_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_unlocked_title`)}`, - `${loc(`arpa_genepool_universal_title`)}`, - `${loc(`arpa_genepool_standard_title`)}`, - `${loc(`arpa_genepool_mastered_title`)}` - ].join(", ") - ]), - loc(`wiki_perks_crispr_note_challenge`, [loc(`arpa_genepool_universal_title`), loc(`arpa_genepool_standard_title`)]) - ] - }, - ancients: { - name: loc(`wiki_arpa_crispr_ancients`), - group: [ - { - desc() { - return loc("arpa_perks_ancients"); - }, - active() { - return global.genes["ancients"] ? true : false; - } - }, - { - desc() { - return global.genes["ancients"] && global.genes.ancients >= 4 ? loc("arpa_perks_ancients3") : loc("arpa_perks_ancients2"); - }, - active() { - return global.genes["ancients"] && global.genes.ancients >= 2 ? true : false; - } - }, - { - desc(wiki) { - return loc("arpa_perks_ancients4", [wiki ? "25/50" : global.genes["ancients"] && global.genes.ancients >= 5 ? 50 : 25]); - }, - active() { - return global.genes["ancients"] && global.genes.ancients >= 3 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_ancients_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_faith_title`)}`, - `${loc(`arpa_genepool_devotion_title`)}`, - `${loc(`arpa_genepool_acolyte_title`)}`, - `${loc(`arpa_genepool_conviction_title`)}` - ].join(", ") - ]) - ] - }, - trader: { - name: loc(`wiki_arpa_crispr_trader`), - desc() { - return loc("arpa_genepool_negotiator_desc"); - }, - active() { - return global.genes["trader"] ? true : false; - }, - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_negotiator_title`)}`]) - ] - }, - transcendence: { - name: loc(`wiki_arpa_crispr_transcendence`), - desc() { - return loc("arpa_genepool_transcendence_desc"); - }, - active() { - return global.genes["transcendence"] ? true : false; - }, - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_transcendence_title`)}`]) - ] - }, - queue: { - name: loc(`wiki_arpa_crispr_queue`), - group: [ - { - desc() { - return loc("arpa_genepool_geographer_desc"); - }, - active() { - return global.genes["queue"] ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_architect_desc"); - }, - active() { - return global.genes["queue"] && global.genes.queue >= 2 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_geographer_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_architect_title`)}` - ].join(", ") - ]) - ] - }, - plasma: { - name: loc(`wiki_arpa_crispr_plasma`), - desc(wiki) { - let plasmid_cap = wiki ? "3/5" : global.genes["plasma"] >= 2 ? 5 : 3; - return loc("arpa_genepool_mitosis_desc", [plasmid_cap]); - }, - active() { - return global.genes["plasma"] ? true : false; - }, - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_mitosis_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_metaphase_title`)}` - ].join(", ") - ]) - ] - }, - mutation: { - name: loc(`wiki_arpa_crispr_mutation`), - group: [ - { - desc() { - return global.genes["mutation"] && global.genes.mutation > 1 ? loc("arpa_perks_mutation2") : loc("arpa_perks_mutation1"); - }, - active() { - return global.genes["mutation"] ? true : false; - } - }, - { - desc() { - return loc("arpa_perks_mutation3"); - }, - active() { - return global.genes["mutation"] && global.genes.mutation >= 3 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_mutation_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_transformation_title`)}`, - `${loc(`arpa_genepool_metamorphosis_title`)}` - ].join(", ") - ]) - ] - }, - bleed: { - name: loc(`wiki_arpa_crispr_bleed`), - group: [ - { - desc() { - return loc("arpa_genepool_bleeding_effect_desc", [2.5]); - }, - active() { - return global.genes["bleed"] ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_synchronicity_desc", [25]); - }, - active() { - return global.genes["bleed"] && global.genes.bleed >= 2 ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_astral_awareness_desc"); - }, - active() { - return global.genes["bleed"] && global.genes.bleed >= 3 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_bleeding_effect_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_synchronicity_title`)}`, - `${loc(`arpa_genepool_astral_awareness_title`)}` - ].join(", ") - ]), - loc(`wiki_perks_crispr_note_bleed`, [`${loc(`arpa_genepool_bleeding_effect_title`)}`]) - ] - }, - blood: { - name: loc(`wiki_arpa_crispr_blood`), - group: [ - { - desc() { - return loc("arpa_genepool_blood_remembrance_desc"); - }, - active() { - return global.genes["blood"] ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_blood_sacrifice_desc"); - }, - active() { - return global.genes["blood"] && global.genes.blood >= 2 ? true : false; - } - }, - { - desc() { - return loc("arpa_genepool_essence_absorber_desc"); - }, - active() { - return global.genes["blood"] && global.genes.blood >= 3 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_crispr_note`, [`${loc(`arpa_genepool_blood_remembrance_title`)}`]), - loc(`wiki_perks_crispr_note_upgrade`, [ - [ - `${loc(`arpa_genepool_blood_sacrifice_title`)}`, - `${loc(`arpa_genepool_essence_absorber_title`)}` - ].join(", ") - ]), - loc(`wiki_perks_crispr_note_blood`, [loc(`arpa_genepool_blood_remembrance_title`)]) - ] - }, - spire: { - name: loc(`wiki_arpa_blood_spire`), - group: [ - { - desc() { - return loc("arpa_blood_purify_desc"); - }, - active() { - return global.blood["spire"] ? true : false; - } - }, - { - desc() { - return loc("arpa_blood_chum_desc"); - }, - active() { - return global.blood["spire"] && global.blood.spire >= 2 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_blood_note`, [`${loc(`arpa_blood_purify_title`)}`]), - loc(`wiki_perks_blood_note_upgrade`, [ - [ - `${loc(`arpa_blood_chum_title`)}` - ].join(", ") - ]) - ] - }, - lust: { - name: loc(`wiki_arpa_blood_lust`), - group: [ - { - desc(wiki) { - return loc("arpa_perks_lust", [wiki ? 0.2 : 0.2 * (global.blood["lust"] ? global.blood["lust"] : 1)]); - }, - active() { - return global.blood["lust"] ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_blood_note`, [`${loc(`arpa_blood_lust_title`)}`]), - loc(`wiki_perks_blood_note_repeat`, [loc(`arpa_blood_lust_title`)]) - ] - }, - illuminate: { - name: loc(`wiki_arpa_blood_illuminate`), - group: [ - { - desc(wiki) { - return loc("arpa_perks_illuminate", [wiki ? 0.01 : 0.01 * (global.blood["illuminate"] ? global.blood["illuminate"] : 1)]); - }, - active() { - return global.blood["illuminate"] ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_blood_note`, [`${loc(`arpa_blood_illuminate_title`)}`]), - loc(`wiki_perks_blood_note_repeat`, [loc(`arpa_blood_illuminate_title`)]) - ] - }, - greed: { - name: loc(`wiki_arpa_blood_greed`), - group: [ - { - desc(wiki) { - return loc("arpa_perks_greed", [wiki ? 1 : 1 * (global.blood["greed"] ? global.blood["greed"] : 1)]); - }, - active() { - return global.blood["greed"] ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_blood_note`, [`${loc(`arpa_blood_greed_title`)}`]), - loc(`wiki_perks_blood_note_repeat`, [loc(`arpa_blood_greed_title`)]) - ] - }, - hoarder: { - name: loc(`wiki_arpa_blood_hoarder`), - group: [ - { - desc(wiki) { - return loc("arpa_perks_hoarder", [wiki ? 1 : 1 * (global.blood["hoarder"] ? global.blood["hoarder"] : 1)]); - }, - active() { - return global.blood["hoarder"] ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_blood_note`, [`${loc(`arpa_blood_hoarder_title`)}`]), - loc(`wiki_perks_blood_note_repeat`, [loc(`arpa_blood_hoarder_title`)]) - ] - }, - artisan: { - name: loc(`wiki_arpa_blood_artisan`), - group: [ - { - desc(wiki) { - return loc("arpa_perks_artisan", [wiki ? 1 : 1 * (global.blood["artisan"] ? global.blood["artisan"] : 1)]); - }, - active() { - return global.blood["artisan"] ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_blood_note`, [`${loc(`arpa_blood_artisan_title`)}`]), - loc(`wiki_perks_blood_note_repeat`, [loc(`arpa_blood_artisan_title`)]) - ] - }, - attract: { - name: loc(`wiki_arpa_blood_attract`), - group: [ - { - desc(wiki) { - return loc("arpa_perks_attract", [wiki ? 5 : 5 * (global.blood["attract"] ? global.blood["attract"] : 1)]); - }, - active() { - return global.blood["attract"] ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_blood_note`, [`${loc(`arpa_blood_attract_title`)}`]), - loc(`wiki_perks_blood_note_repeat`, [loc(`arpa_blood_attract_title`)]) - ] - }, - wrath: { - name: loc(`wiki_arpa_blood_wrath`), - group: [ - { - desc(wiki) { - return loc("arpa_perks_wrath", [wiki ? 5 : 5 * (global.blood["wrath"] ? global.blood["wrath"] : 1)]); - }, - active() { - return global.blood["wrath"] ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_blood_note`, [`${loc(`arpa_blood_wrath_title`)}`]), - loc(`wiki_perks_blood_note_repeat`, [loc(`arpa_blood_wrath_title`)]) - ] - }, - prepared: { - name: loc(`wiki_arpa_blood_prepared`), - group: [ - { - desc() { - return loc("arpa_blood_prepared_desc"); - }, - active() { - return global.blood["prepared"] ? true : false; - } - }, - { - desc() { - return loc("arpa_blood_compact_desc"); - }, - active() { - return global.blood["prepared"] && global.blood.prepared >= 2 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_blood_note`, [`${loc(`arpa_blood_prepared_title`)}`]), - loc(`wiki_perks_blood_note_upgrade`, [ - [ - `${loc(`arpa_blood_compact_title`)}` - ].join(", ") - ]) - ] - }, - unbound: { - name: loc(`wiki_arpa_blood_unbound`), - group: [ - { - desc() { - return loc("arpa_blood_unbound_desc"); - }, - active() { - return global.blood["unbound"] ? true : false; - } - }, - { - desc() { - return loc("arpa_blood_shadow_war_desc"); - }, - active() { - return global.blood["unbound"] && global.blood.unbound >= 3 ? true : false; - } - }, - { - desc(wiki) { - return loc("arpa_perks_unbound_resist", [wiki ? "10/5" : global.blood["unbound"] && global.blood.unbound >= 4 ? 5 : 10]); - }, - active() { - return global.blood["unbound"] && global.blood.unbound >= 2 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_blood_note`, [`${loc(`arpa_blood_unbound_title`)}`]), - loc(`wiki_perks_blood_note_upgrade`, [ - [ - `${loc(`arpa_blood_unbound_resistance_title`)}`, - `${loc(`arpa_blood_shadow_war_title`)}`, - `${loc(`arpa_blood_unbound_immunity_title`)}` - ].join(", ") - ]) - ] - }, - aware: { - name: loc(`wiki_arpa_blood_aware`), - group: [ - { - desc() { - return loc("arpa_blood_blood_aware_desc"); - }, - active() { - return global.blood["aware"] ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_blood_note`, [`${loc(`arpa_blood_blood_aware_title`)}`]) - ] - }, - harmonic: { - name: loc(`harmonic`), - group: [ - { - desc(wiki) { - let harmonic = calcPillar(); - return loc("perks_harmonic", [wiki ? `1-${Object.keys(races).length + 2}` : +((harmonic[0] - 1) * 100).toFixed(0), wiki ? `2-${(Object.keys(races).length + 2) * 2}` : +((harmonic[1] - 1) * 100).toFixed(0)]); - }, - active() { - let harmonic = calcPillar(); - return global["pillars"] && harmonic[0] > 1 ? true : false; - } - }, - { - desc(wiki) { - let harmonic = calcPillar(); - return loc("perks_harmonic2", [loc("portal_west_tower"), loc("portal_east_tower"), wiki ? `12-${(Object.keys(races).length - 1) * 12}` : +(Object.keys(global.pillars).length * 12)]); - }, - active() { - let harmonic = calcPillar(); - return global["pillars"] && harmonic[0] > 1 ? true : false; - } - } - ], - notes: [ - loc(`wiki_perks_harmonic_note1`), - loc(`wiki_perks_harmonic_note2`) - ] - }, - novice: { - name: loc(`perk_novice`), - desc(wiki) { - let rank = global.stats.feat["novice"] && global.stats.achieve["apocalypse"] && global.stats.achieve.apocalypse.l > 0 ? Math.min(global.stats.achieve.apocalypse.l, global.stats.feat["novice"]) : 1; - let rna = wiki ? "0.5/1/1.5/2/2.5" : rank / 2; - let dna = wiki ? "0.25/0.5/0.75/1/1.25" : rank / 4; - return `
    ${loc("achieve_perks_novice", [rna, dna])}
    ${loc("achieve_perks_novice2")}
    `; - }, - active() { - return global.stats.feat["novice"] && global.stats.mad > 0 ? true : false; - }, - notes: [ - loc(`wiki_perks_progress_note1`, [10, loc(`wiki_resets_mad`)]), - loc(`wiki_perks_progress_note2`) - ] - }, - journeyman: { - name: loc(`perk_journeyman`), - desc(wiki) { - let rank = global.stats.feat["journeyman"] && global.stats.achieve["seeder"] && global.stats.achieve.seeder.l > 0 ? Math.min(global.stats.achieve.seeder.l, global.stats.feat["journeyman"]) : 1; - if (wiki || rank > 1) { - let rqueue = wiki ? "1/2/3" : rank >= 3 ? rank >= 5 ? 3 : 2 : 1; - let queue = wiki ? "1/2" : rank >= 4 ? 2 : 1; - return `
    ${loc("achieve_perks_journeyman2", [rqueue, queue])}
    ${loc("achieve_perks_journeyman3")}
    `; - } else { - return `
    ${loc("achieve_perks_journeyman1", [1])}
    ${loc("achieve_perks_journeyman3")}
    `; - } - }, - active() { - return global.stats.feat["journeyman"] && global.stats.bioseed > 0 ? true : false; - }, - notes: [ - loc(`wiki_perks_progress_note1`, [25, loc(`wiki_resets_bioseed`)]), - loc(`wiki_perks_progress_note2`) - ] - }, - adept: { - name: loc(`perk_adept`), - desc(wiki) { - let rank = checkAdept() || 1; - let res = wiki ? "100/200/300/400/500" : rank * 100; - let cap = wiki ? "60/120/180/240/300" : rank * 60; - return loc("achieve_perks_adept", [res, cap]); - }, - active() { - return checkAdept() > 0; - }, - notes: [ - loc(`wiki_perks_progress_note1`, [50, loc(`wiki_resets_blackhole`)]), - loc(`wiki_perks_progress_note2`) - ] - }, - master: { - name: loc(`perk_master`), - desc(wiki) { - let rank = global.stats.feat["master"] && global.stats.achieve["ascended"] && global.stats.achieve.ascended.l > 0 ? Math.min(global.stats.achieve.ascended.l, global.stats.feat["master"]) : 1; - let boost1 = wiki ? "1/2/3/4/5" : rank; - let boost2 = wiki ? "2/4/6/8/10" : rank * 2; - return loc("achieve_perks_master", [boost1, boost2, loc("evo_mitochondria_title"), loc("evo_eukaryotic_title"), loc("evo_membrane_title"), loc("evo_organelles_title"), loc("evo_nucleus_title")]); - }, - active() { - return global.stats.feat["master"] && global.stats.achieve["ascended"] && global.stats.achieve.ascended.l > 0 ? true : false; - }, - notes: [ - loc(`wiki_perks_progress_note1`, [75, loc(`wiki_resets_ascension`)]), - loc(`wiki_perks_progress_note2`) - ] - }, - grandmaster: { - name: loc(`perk_grandmaster`), - desc(wiki) { - let rank = global.stats.feat["grandmaster"] && global.stats.achieve["corrupted"] && global.stats.achieve.corrupted.l > 0 ? Math.min(global.stats.achieve.corrupted.l, global.stats.feat["grandmaster"]) : 1; - let boost = wiki ? "1/2/3/4/5" : rank; - return loc("achieve_perks_grandmaster", [boost]); - }, - active() { - return global.stats.feat["grandmaster"] && global.stats.achieve["corrupted"] && global.stats.achieve.corrupted.l > 0 ? true : false; - }, - notes: [ - loc(`wiki_perks_progress_note1`, [100, loc(`wiki_resets_infusion`)]), - loc(`wiki_perks_progress_note2`) - ] - } - }; - function drawPerks() { - clearElement($("#perksPanel")); - let perks = $("#perksPanel"); - let hasPerk = false; - Object.keys(perkList).forEach(function(perk) { - if (perkList[perk].hasOwnProperty("group")) { - let isactive = false; - let gperk = $(`
    ${perkList[perk].name}
    `); - perkList[perk].group.forEach(function(subperk) { - if (subperk.active()) { - isactive = true; - gperk.append($(`
    ${subperk.desc()}
    `)); - } - }); - if (isactive) { - hasPerk = true; - perks.append(gperk); - } - } else { - if (perkList[perk].active()) { - hasPerk = true; - perks.append($(`
    ${perkList[perk].name}${perkList[perk].desc()}
    `)); - } - } - }); - if (!hasPerk) { - perks.append($(`
    ${loc(`perks_none`)}
    `)); - } - } - function drawStats() { - clearElement($("#statsPanel")); - let stats = $("#statsPanel"); - stats.append(`
    ${loc("achieve_stats_overall")}
    `); - stats.append(`
    ${loc("achieve_stats_plasmid_earned")} {{ format(s.plasmid) }}
    `); - if (global.stats.antiplasmid > 0) { - stats.append(`
    ${loc("achieve_stats_antiplasmid_earned")} {{ format(s.antiplasmid) }}
    `); - } - if (global.stats.phage > 0) { - stats.append(`
    ${loc("achieve_stats_phage_earned")} {{ format(s.phage) }}
    `); - } - if (global.stats.dark > 0) { - stats.append(`
    ${loc("achieve_stats_dark_earned")} {{ format(s.dark) }}
    `); - } - if (global.stats.harmony > 0) { - stats.append(`
    ${loc("achieve_stats_harmony_earned")} {{ format(s.harmony) }}
    `); - } - if (global.stats.blood > 0) { - stats.append(`
    ${loc("achieve_stats_blood_earned")} {{ format(s.blood) }}
    `); - } - if (global.stats.artifact > 0) { - stats.append(`
    ${loc("achieve_stats_artifact_earned")} {{ format(s.artifact) }}
    `); - } - stats.append(`
    ${loc("achieve_stats_knowledge_spent")} {{ format(t_know(s.know)) }}
    `); - stats.append(`
    ${loc("achieve_stats_starved_to_death")} {{ format(t_starved(s.starved)) }}
    `); - stats.append(`
    ${loc("achieve_stats_died_in_combat")} {{ format(t_died(s.died)) }}
    `); - stats.append(`
    ${loc("achieve_stats_game_days_played")} {{ format(played(s.days)) }}
    `); - if (global.stats.portals > 0) { - stats.append(`
    ${loc("achieve_stats_portals")} {{ format(s.portals) }}
    `); - } - stats.append(`
    ${loc("achieve_stats_total_resets")} {{ format(s.reset) }}
    `); - if (global.stats.mad > 0) { - stats.append(`
    ${loc("achieve_stats_mad_resets")} {{ format(s.mad) }}
    `); - } - if (global.stats.bioseed > 0) { - stats.append(`
    ${loc("achieve_stats_bioseed_resets")} {{ format(s.bioseed) }}
    `); - } - if (global.stats.cataclysm > 0) { - stats.append(`
    ${loc("achieve_stats_cataclysm_resets")} {{ format(s.cataclysm) }}
    `); - } - if (global.stats.blackhole > 0) { - stats.append(`
    ${loc("achieve_stats_blackhole_resets")} {{ format(s.blackhole) }}
    `); - } - if (global.stats.ascend > 0) { - stats.append(`
    ${loc("achieve_stats_ascension_resets")} {{ format(s.ascend) }}
    `); - } - if (global.stats.descend > 0) { - stats.append(`
    ${loc("achieve_stats_descension_resets")} {{ format(s.descend) }}
    `); - } - if (global.stats.apotheosis > 0) { - stats.append(`
    ${loc("achieve_stats_apotheosis_resets")} {{ format(s.apotheosis) }}
    `); - } - if (global.stats.aiappoc > 0) { - stats.append(`
    ${loc("achieve_stats_aiappoc_resets")} {{ format(s.aiappoc) }}
    `); - } - if (global.stats.matrix > 0) { - stats.append(`
    ${loc("achieve_stats_matrix_resets")} {{ format(s.matrix) }}
    `); - } - if (global.stats.retire > 0) { - stats.append(`
    ${loc("achieve_stats_retire_resets")} {{ format(s.retire) }}
    `); - } - if (global.stats.eden > 0) { - stats.append(`
    ${loc("achieve_stats_eden_resets")} {{ format(s.eden) }}
    `); - } - if (global.stats.terraform > 0) { - stats.append(`
    ${loc("achieve_stats_terraform_resets")} {{ format(s.terraform) }}
    `); - } - if (global.stats.geck > 0) { - stats.append(`
    ${loc("achieve_stats_gecks")} {{ format(s.geck) }}
    `); - } - stats.append(`
    ${loc("achieve_stats_current_game")}
    `); - stats.append(`
    ${loc("achieve_stats_knowledge_spent")} {{ format(s.know) }}
    `); - stats.append(`
    ${loc("achieve_stats_starved_to_death")} {{ format(s.starved) }}
    `); - stats.append(`
    ${loc("achieve_stats_died_in_combat")} {{ format(s.died) }}
    `); - stats.append(`
    ${loc("achieve_stats_attacks_made")} {{ format(s.attacks) }}
    `); - stats.append(`
    ${loc("achieve_stats_game_days_played")} {{ format(s.days) }}
    `); - if (global.stats.dkills > 0) { - stats.append(`
    ${loc("achieve_stats_demons_kills")} {{ format(s.dkills) }}
    `); - } - if (global.stats.sac > 0) { - stats.append(`
    ${loc("achieve_stats_sacrificed")} {{ format(s.sac) }}
    `); - } - if (global.stats.murders > 0) { - stats.append(`
    ${loc("achieve_stats_murders")} {{ format(s.murders) }}
    `); - } - if (global.stats.psykill > 0) { - stats.append(`
    ${loc("achieve_stats_psymurders")} {{ format(s.psykill) }}
    `); - } - if (global.stats.uDead > 0) { - stats.append(`
    ${loc("achieve_stats_unstable")} {{ format(s.uDead) }}
    `); - } - if (global.resource.hasOwnProperty("Thermite") && global.resource.Thermite.amount > 0) { - stats.append(`
    ${loc("achieve_stats_thermite")} {{ res(r.Thermite.amount) }}
    `); - } - let hallowed2 = getHalloween(); - if (hallowed2.active) { - let trick = ""; - if (global.stats.cfood >= 13 || global.race["cataclysm"] || global.race["orbit_decayed"] || global.race["warlord"]) { - trick = `${trickOrTreat(7, 12, true)}`; - } - stats.append(`
    ${loc("achieve_stats_trickortreat")} {{ format(s.cfood) }} ${trick}
    `); - } - if (global.race.hasOwnProperty("gods") && global.race.gods != "none") { - stats.append(`
    ${loc("achieve_stats_gods")} {{ species(g.gods) }}
    `); - } - if (global.race.hasOwnProperty("old_gods") && global.race.old_gods != "none") { - stats.append(`
    ${loc("achieve_stats_old_gods")} {{ species(g.old_gods) }}
    `); - } - vBind({ - el: "#statsPanel", - data: { - s: global.stats, - r: global.resource, - g: global.race - }, - methods: { - played(d) { - return d + global.stats.tdays; - }, - t_know(k) { - return k + global.stats.tknow; - }, - t_starved(s) { - return s + global.stats.tstarved; - }, - t_died(d) { - return d + global.stats.tdied; - }, - format(s) { - return s.toLocaleString(); - }, - res(r) { - return (+r.toFixed(2)).toLocaleString(); - }, - species(s) { - switch (s) { - case "custom": - return global.custom.race0.name; - case "hybrid": - return global.custom.race1.name; - default: - return loc(`race_${s}`); - } - } - } - }); - } - - // src/wiki/change.js - var changeList = [ - { - version: `1.4.9`, - date: `9/21/2025`, - changes: [ - `Bluecollar Governor: Raised production effect from 10/12% to 14/18%, now also affects factories.`, - `Educator Governor: Raises professor effect by +30%.`, - `Noble Governor: Mansion gives +7 citizens when upgraded.`, - `Media Governor: 30/35% of overcapped morale can go past the morale cap.`, - `Sports Governor: No longer has a soldier healing bonus, now raises surveyor infernite by 10/12%`, - `Soldier Governor: Added 40%/50% healing bonus.`, - `Added Japanese language.`, - `Added an "All" tab to the custom race lab.`, - `Added filled rate animation for resources, click resource name to disable.`, - `Untrustworthy now affects Titan banks.`, - `Soul capacitors now lose stored energy if you turn off all capacitors.`, - `Discharge now affects the processing factory bonus instead of adamantite directly.`, - `Servant hunters no longer produce 4x more furs with high pop.`, - `Hunter job stress is now affected by high pop.`, - `Synth assembly scales slower with high population.`, - `Eldritch cattle slaughtering gives more food.`, - `Tusked no longer penalized by hivemind`, - `Adv. Spy operator is no longer free to use in Truepath without unlocking.`, - `Many misc bug fixes, can't be bothered to document them.` - ] - }, - { - version: `1.4.8`, - date: `5/16/2025`, - changes: [ - `Psychic now works with Elysanite.`, - `Parasite Assembly now works on a delay timer rather than a wind restriction.`, - `Fixed bugs with trait mutation costs.` - ] - }, - { - version: `1.4.7`, - date: `5/15/2025`, - changes: [ - `Pit Miners now produce Chrysotile outside of Isolation.`, - `Fixed issue with "Hybrid" and Enlightenment.`, - `Fixed some problems with entering Isolation and ending Quarantine.`, - `Fixed some broken wiki trait displays.` - ] - }, - { - version: `1.4.6`, - date: `5/13/2025`, - changes: [ - `Added Catnip and Anise traits to Ent/Pinguicula.`, - `Fixed issue with saving trait ranks to custom export.`, - `Performance Optimizations.` - ] - }, - { - version: `1.4.5`, - revision: `b`, - date: `5/12/2025`, - changes: [ - `Fixed issues with loading custom race data into custom lab.`, - `Crates now correctly cost Bones instead of Boneweave with Iron Wood trait.` - ] - }, - { - version: `1.4.5`, - revision: `a`, - date: `5/12/2025`, - changes: [ - `Parasite now scales with rank.`, - `Synthetic parasites can now only assemble new citizens when it's windy.` - ] - }, - { - version: `1.4.5`, - date: `5/11/2025`, - changes: [ - `New Custom/Hybrid Lab mechanics.`, - `Added New Theme GrubBox (RedGreen CB) for Red/Green color blind players.`, - `Technophobe perk race complexity changed to flat gene point bonus.`, - `Overtapped has been removed, Negative traits instead pay a complexity tax.`, - `Enviromentalist now scales with trait rank.`, - `Thalassophobia replaced with Unfavored.`, - `Optimistic cost lowered from 5 points to 3.`, - `Fixed bug that could cause archfiends to queue with extra weapons.` - ] - }, - { - version: `1.4.4`, - date: `5/7/2025`, - changes: [ - `The native rank of Empowered for Nephilim is now 2.`, - `Build queue will no longer spend Warlord skill points.`, - `Dreaded will no longer unlock from Apotheosis.`, - `Custom Hybrids will no longer unlock Gross.` - ] - }, - { - version: `1.4.3`, - date: `5/4/2025`, - changes: [ - `Evil Universe Scenario: Warlord.`, - `Added Planned Obsolescence Feat.`, - `You can now queue Spire Mechs.`, - `You can now pet your cat or dog once every 5 minutes.`, - `Symposium now gain Knowledge for all crew in Andromeda.`, - `Evil Authority adjustments for Cataclysm, Lone Survivor, and Orbit Decay.`, - `Soldiers assigned to Fortress guard duty now contribute Authority.`, - `Updated Empowered trait mechanics.`, - `Adjusted values for Master Artisan.`, - `Evil Wendigo can now use Shovels.`, - `Racconar can now recruit quarry workers.`, - `You can no longer get more then 100 servants from each TP T4 reset.`, - `You are now capped at 100 skilled servants from TP resets.`, - `Empowered Concealment Wards changed to Empowered Nexus in Witch Hunter.`, - `Breakdown improvements for some resources.`, - `Uranium geology bonus now applies to Uranium Ash.`, - `Spire boss resists now have a random element.`, - `Slitheryn once again have slow digestion.`, - `Fixed bug with Rogue trait that set crafted resources to 0.`, - `Fixed bug that caused Hybrid species to throw an error when triggering greatness resets.`, - `Fixed bug that caused Hybrid species to throw an error when triggering a Cataclysm reset.`, - `Fixed issue with Iridium Smelters miscalculating result.`, - `Fixed a variety of Joyless edge cases.`, - `Fixed Space Casino appearing improperly in power grid.`, - `Fixed Potato Battery in antimatter universe not benefiting from dark energy.`, - `Fixed issue with Resonance not unlocking if you pillared without unlocking the gate towers.`, - `Fixed divide by zero error with Soul Forge when you have 0 Authority.`, - `Deprecated trait Frail will no longer show up in the Custom Lab.`, - `Accessibility improvements.`, - `Minor misc bug fixes.` - ] - }, - { - version: `1.4.2`, - date: `3/23/2025`, - changes: [ - `New Evil Universe Mechanics.`, - `You now must maintain your Evil Authority.`, - `Evil Hell now spawns 10% more demons than other universes.`, - `Evil Dark Energy effects changed.`, - `Evil Biodome produces less food but boosts marine garrison.`, - `Various Evil flavor updates.`, - `Various bug fixes.` - ] - }, - { - version: `1.4.1`, - revision: `a`, - date: `12/2/2024`, - changes: [ - `Fixed Ore Processor.` - ] - }, - { - version: `1.4.1`, - date: `12/1/2024`, - changes: [ - `Racconar now use the special Forager trait in place of Herbivore and Carnivore.`, - `Genetics Lab now shows rank adjustments with Empowered.`, - `Fixed wiki display of the Grand Death Tour progress.`, - `Normalized Mimic and Imitate ranks.`, - `Fliers will no longer be offered a new cement production method in Edenic realm.`, - `Fixed issues with powered down Stargate.`, - `Fixed various minor bugs.` - ] - }, - { - version: `1.4.0`, - date: `11/28/2024`, - changes: [ - `Push past the Spire and invade the Edenic Realms.`, - `Added new planet trait: Kamikaze.`, - `Added new CRISPR upgrade Bureaucratic Efficiency.`, - `The Grand Death Tour is available after completing Apotheosis.`, - `Custom Race lab now allows player to set a desired fanaticism trait.`, - `You can no longer have more than 10 negative traits on a custom.`, - `Invalid legacy customs will take a penalty called Overtapped in future game versions.`, - `Truepath Ships can now be queued for construction.`, - `Exotic Materials are now harder to replicate.`, - `Progenitor races are now shown on stats page.`, - `Symposium is now affected by piracy.`, - `Gate Turrets will now kill demons when the Soul Forge is turned off.`, - `Stellar Engine now has diminishing returns when pushed to extreme levels.`, - `The number of spies available when starting a spy op now affects mission time.`, - `Fluidized Bed Reactor no longer incorrectly applies to Nano Tubes.`, - `Shrines now cycle their effect with moon phase if purchased during a full, new, or quarter moon.`, - `Slitheryn Slow Digestion replaced with Astrologer.`, - `Slow trait value changed from -5 to -6.` - ] - }, - { - version: `1.3.17`, - revision: `c`, - date: `11/1/2024`, - changes: [ - `Non-Evil Wendigo can now Trick or Treat!` - ] - }, - { - version: `1.3.17`, - revision: `b`, - date: `10/29/2024`, - changes: [ - `Fixed Ghost #3 with Forge Trait.`, - `Fixed Emocorn gloomy trait.` - ] - }, - { - version: `1.3.17`, - revision: `a`, - date: `10/27/2024`, - changes: [ - `Fixed Trick or Treat! Feat tracker.` - ] - }, - { - version: `1.3.17`, - date: `10/13/2024`, - changes: [ - `Cruisers now grant the correct number of soldiers in Fasting scenario.`, - `Mass Ejector will now show a timer until destabilization if T3 previously completed.`, - `Fixed Coal income in Cataclysm.`, - `Adjusted High Pop growth rates.`, - `Craftsmen have been renamed to Crafters.`, - `Fixed some issues with the Wiki.`, - `Fixed display error with Cultural Center.` - ] - }, - { - version: `1.3.16`, - revision: `a`, - date: `9/30/2024`, - changes: [ - `Fixed an issue with with Gravity Well challenge and having too many Railways.` - ] - }, - { - version: `1.3.16`, - revision: `a`, - date: `9/30/2024`, - changes: [ - `Fixed an issue with with Gravity Well challenge and having too many Railways.` - ] - }, - { - version: `1.3.16`, - date: `9/29/2024`, - changes: [ - `Pickaxes once again affect Coal Mines.`, - `Changed Scientific Notation to Engineering Notation.`, - `Added Scientific Notation option.` - ] - }, - { - version: `1.3.15`, - revision: `a`, - date: `9/21/2024`, - changes: [ - `Fixed Secret to Immortality feat not being awarded.` - ] - }, - { - version: `1.3.15`, - date: `9/19/2024`, - changes: [ - `Fasting scenario Demonic Infusion goal updated with new tastier experience.`, - `Starvation risk tooltips added for Fasting scenario.`, - `Mastery listed under stats tab now displays unmodified value.`, - `Dark Bomb will no longer appear as an option after the demon lord is defeated.` - ] - }, - { - version: `1.3.14`, - revision: `a`, - date: `9/2/2024`, - changes: [ - `Fixed incorrect scientist label.` - ] - }, - { - version: `1.3.14`, - date: `9/2/2024`, - changes: [ - `Fixed various bugs with Fasting scenario.`, - `Difficulty tweaks to Fasting scenario.`, - `Added feat Icon for Fasting.`, - `Ships in route to the Dwarf planet now check their fuel consumption.`, - `Manual crafting is no longer affected by High Population trait.`, - `Misc bug fixes.` - ] - }, - { - version: `1.3.13`, - revision: `b`, - date: `8/6/2024`, - changes: [ - `Fixed issue with starting Cataclysm Scenerio.`, - `Fixed some issues with Fasting Scenario.`, - `Fixed an issue with Replicator scheduler and supplies.` - ] - }, - { - version: `1.3.13`, - revision: `a`, - date: `8/6/2024`, - changes: [ - `Fix a bug that prevented crafting in Cataclysm and Lone Survivor modes.` - ] - }, - { - version: `1.3.13`, - date: `8/6/2024`, - changes: [ - `New Scenario by CondoSlime: Fasting.`, - `More queue config options.`, - `Wiki Search feature by sm3232`, - `Language Updates.`, - `Random bug fixes.` - ] - }, - { - version: `1.3.12`, - date: `3/30/2024`, - changes: [ - `Fixed Easter Event.` - ] - }, - { - version: `1.3.11`, - date: `2/19/2024`, - changes: [ - `Community fixes:`, - `New Power settings.`, - `Fixed loot bug with Gravity Well and Dark Energy.`, - `Fixed pet names in pet events.`, - `Fixed issue with Aquarius sign and Tourist Centers.`, - `Fixed bugs with Arraak and Human thralls.`, - `Many bug fixes related to High Population trait.`, - `Many language updates.` - ] - }, - { - version: `1.3.10`, - date: `1/23/2024`, - changes: [ - `Added Gravity Well challenge mode.`, - `Prepping the Bioseed ship for launch now has a Helium-3 cost.`, - `Added new pet minor event`, - `Polish language translation by Wied\u017Amin.`, - `German language translation by FutterSillo.`, - `Various UI improvements and language updates.` - ] - }, - { - version: `1.3.9`, - date: `8/20/2023`, - changes: [ - `Pressing the same tab key multiple times will now cycle the subtabs.`, - `Reduced Mana costs of Improved Concealment, Study Corrupt Gem, & Outerplane Summon in Witch Hunter for non-gold star players.`, - `Fixed Bilateral Symmetry DNA bonus.`, - `Updated Korean and Chinese langs.`, - `Screen Reader improvement for achievements display.` - ] - }, - { - version: `1.3.8`, - revision: `a`, - date: `6/1/2023`, - changes: [ - `Fixed high pop scaling.` - ] - }, - { - version: `1.3.8`, - date: `6/1/2023`, - changes: [ - `Unfathomable bug fixes.`, - `Psychic powers up time now scale with rank of Ancient Nightmare.`, - `Additional Psychic power upgrades.`, - `Intergalactic Raider renamed to Corsair.` - ] - }, - { - version: `1.3.7`, - revision: `a`, - date: `5/30/2023`, - changes: [ - `Fixed issue with drawing the same alien species twice in intergalactic content.`, - `Adjusted Mana costs for some research techs in Witch Hunter.` - ] - }, - { - version: `1.3.7`, - date: `5/29/2023`, - changes: [ - `Added Magic universe exclusive challenge: Witch Hunter.`, - `Reduced Encrypted Data cost of Data Analysis, Advanced Medkits, Automated Warehousing, Elerium Extraction, and Drone Warfare techs.`, - `Star Forge smelting bonus rebalanced.`, - `Antimatter Dark Energy effect now applies to Truepath Ship power generation.`, - `Fixed Magocracy Crystal bonus.`, - `Reduced Crystal cost of Alchemy.`, - `Fixed Humpback trait rank scaling.`, - `Infiltrator can now steal Alien Biotech on Truepath.`, - `Fixed brownout issue with using Replicator Gov task when constructing a new powered building.`, - `Fixed rejuvenated trashed planet bonus.`, - `Fixed orbit period on reterraformed planets.` - ] - }, - { - version: `1.3.6`, - date: `4/22/2023`, - changes: [ - `Added Astrological signs.`, - `Added Motivated Event.`, - `Operating Bases now function as Hospitals in Orbit Decay scenario.`, - `Stellar Forge is now locked to using Star Fuel for smelting.`, - `Species with the Forge trait can now use Inferno Fuel and Star Fuel.`, - `Reduced Wireless Signal needed to Contact womlings in Lone Survivor.` - ] - }, - { - version: `1.3.5`, - revision: `c`, - date: `4/16/2023`, - changes: [ - `Made Egg #17 easier to get in Cataclysm mode.` - ] - }, - { - version: `1.3.5`, - revision: `b`, - date: `4/9/2023`, - changes: [ - `Increased egg accessibility with certain traits or challenge modes.` - ] - }, - { - version: `1.3.5`, - revision: `a`, - date: `4/8/2023`, - changes: [ - `Fixed a bug that caused eggs 16-18 not to count for unlocking the egg hunt feat.` - ] - }, - { - version: `1.3.5`, - date: `4/7/2023`, - changes: [ - `Avian species now have the Flier trait.`, - `Avian Rigid trait replaced with Sky Lover.`, - `Added Wireless storage to High-Tech farm in isolation`, - `Fixed truepath dreadnought power costs.`, - `Fixed a bug that could assign extra challenge genes.`, - `Fixed a bug with changing languages with active Tau Ceti content.`, - `Fixed many issues with preload tab content in the early game.` - ] - }, - { - version: `1.3.4`, - revision: `b`, - date: `3/30/2023`, - changes: [ - `Prevented some bugs caused by distributed power mode from occurring.`, - `You can now unlock World Domination, Illuminati, Syndicate, and Pacifist in Truepath.` - ] - }, - { - version: `1.3.4`, - revision: `a`, - date: `3/25/2023`, - changes: [ - `A restore point is now made if you select isolation protocol.` - ] - }, - { - version: `1.3.4`, - date: `3/24/2023`, - changes: [ - `Evolving Synth can now choose imitation race from any species killed by an AI Apocalypse.`, - `Fixed issue with miscalculating low fuel usage for various power generating structures.`, - `Extractor Ship Isolation output boosted by 20%.`, - `Added additional Hooved reskins.`, - `Fixed various issues with Preload Tab Content.`, - `Explorer Ship config is now locked down for Engine, Sensor, and Weapon components.`, - `Skilled Servants assigned to craft inactive resources will now be refunded.` - ] - }, - { - version: `1.3.3`, - revision: `a`, - date: `3/20/2023`, - changes: [ - `Fixed a bug that could cause the Test Launch to be unavailable.` - ] - }, - { - version: `1.3.3`, - date: `3/15/2023`, - changes: [ - `Rebalanced Soul Gem drop mechanics.`, - `Added Annihilation Feat.`, - `Added additional Mass Ejector Optimizer config mode.`, - `Servants are no longer affected by most racial traits.`, - `The Lone Survivor can no longer benefit from Hivemind.`, - `Fixed High Pop issue with Pit Miners.`, - `Fixed bug with unlocking Replicator without a Governor.` - ] - }, - { - version: `1.3.2`, - revision: `c`, - date: `3/8/2023`, - changes: [ - `Fixed cataclysm reset while having preload tab content enabled.` - ] - }, - { - version: `1.3.2`, - revision: `b`, - date: `3/5/2023`, - changes: [ - `Fixed Rock Quarry under industry tab for Smoldering players.` - ] - }, - { - version: `1.3.2`, - revision: `a`, - date: `3/5/2023`, - changes: [ - `Adjusted hell calculation.` - ] - }, - { - version: `1.3.2`, - date: `3/4/2023`, - changes: [ - `High-Tech Factory changed back to tool modifier, however value is increased from original 25% to 90%.`, - `Advanced Material Synthesis increased from 50% to 65%.`, - `Added new interaction between Hell Surveyors and Drone victims.`, - `Fixed bug that would cause Replicator Governor task to swap resources when focusing a resource without a cap.`, - `Fixed inability to produce Chrysotile in Isolation.` - ] - }, - { - version: `1.3.1`, - date: `3/3/2023`, - changes: [ - `Added Advanced Material Synthesis tech to Isolation path.`, - `High-Tech Factory crafting bonus changed from a Tool modifier to a direct multiplier.`, - `Updated Mass Ejector Optimizer logic.`, - `Fixed a bug that broke Cataclysm reset.`, - `Fixed fuel calculation bug with Moon Bases and Spaceports.`, - `Fixed issue with self replicating Synth and Nano.`, - `Fixed bugs with purchasing CRISPR techs in Antimatter universe.` - ] - }, - { - version: `1.3.0`, - revision: `b`, - date: `3/1/2023`, - changes: [ - `Fixed issue with Mass Ejector Optimizer gov task breaking the governor subtab.` - ] - }, - { - version: `1.3.0`, - revision: `a`, - date: `3/1/2023`, - changes: [ - `Fixed Antimatter universe.` - ] - }, - { - version: `1.3.0`, - date: `3/1/2023`, - changes: [ - `The True Path has been extended, explore Tau Ceti and expand your civilization.`, - `Added Perks: Evolve Master and Evolve Grandmaster.`, - `Added Distributed Low Power mode setting.`, - `Added Precognition CRISPR upgrade.`, - `Strong trait now buffs basic jobs but has a weaker effect on manual resource collection.`, - `Ships in Truepath can now only be scrapped at the Shipyard.`, - `Truepath Sensor Range and Costs adjusted. Range now depends partly on base ship class.`, - `Queue stacks now indicate first block vs last blocking resource with a gradient indicator.`, - `Added screen reader improvements for blocking resources.`, - `You can no longer unlock Anarchist by Cataclysm.`, - `Syndicate will now also steal food from Biodomes.`, - `Reinforced Shed upgrade now requires unlocking Iron Mining.`, - `You must now construct a Titan Habitat before a Titan Mine.`, - `Removed dark background effect from modal popups.`, - `Increased Entrepreneur Governor trade bonus from 75% to 125% and Bank capacity boost from 10% to 12%.`, - `Increased Media Governor morale bonuses and Library bonus.`, - `Increased Soldier Governor combat bonus from 5% to 25%.`, - `Increased Educator Governor knowledge bonus from 5% to 6%.`, - `Increased Spiritualist Governor worker bonus from 10% to 20% and tourism bonus from $2 to $5 per Temple.`, - `Increased Noble Governor tax cap bonus from 10% to 20%.`, - `Bluecollar Governor now increases output of Coal and Oil power plants and boosts Miners, Smelter, and Oil Derrick.`, - `Bureaucrat Governor now provides a slight boost to government effects.` - ] - }, - { - version: `1.2.21`, - date: `1/10/2023`, - changes: [ - `New Achievement filtering options in Wiki.`, - `Updated Chinese lang file.`, - `Updated Korean lang file.` - ] - }, - { - version: `1.2.20`, - date: `9/16/2022`, - changes: [ - `New homelessness system.`, - `Factory, Mining Droids, and Graphene Plants will remember resource assignment after a low power shutdown.`, - `Terraforming and Ascension can no longer be queued or multi-clicked.`, - `AI Cores show correct bonus in tooltip.`, - `Stealing Rocketry will now unlock rival in Truepath.`, - `Playful will no longer remove unemployed stress with no hunters.`, - `Andromeda Citizens will no longer stick around if abandoned by a stargate shutdown.`, - `Fixed various bugs with mutating in or out some traits.`, - `Made some improvements for screen readers to determine active state of challenges.` - ] - }, - { - version: `1.2.19`, - revision: `a`, - date: `8/21/2022`, - changes: [ - `Home Planet Orbital structures are now merged with the Moon instead of Red Planet in Cataclysm.` - ] - }, - { - version: `1.2.19`, - date: `8/20/2022`, - changes: [ - `Added rank scaling effects to traits: Carnivore, Hooved, Leathery, Unified, & Magnificent.`, - `Structures orbiting the home planet are now moved to the Red planet after Orbit Decay or during Cataclysm.`, - `Fixed a bug with deactivating fuel consuming structures when fuel runs dry.`, - `Already active Governor tasks will no longer display for assignment in other task slots.`, - `Constructing a Stellar or Infernal Forge will now assign Iron as a default resource instead of nothing.`, - `Buffed effects of Star Forge fueled smelting.`, - `Fixed an incorrect source label for money storage in Orbit Decay.` - ] - }, - { - version: `1.2.18`, - revision: `a`, - date: `8/14/2022`, - changes: [ - `Fixed ARPA queueing.` - ] - }, - { - version: `1.2.18`, - date: `8/14/2022`, - changes: [ - `More accurate timers when using Governor Trash Management task.`, - `Optimistic Min Morale effect now scales with trait rank.`, - `Fixed TP loot table when Assaulting or Sieging rival.` - ] - }, - { - version: `1.2.17`, - revision: `a`, - date: `8/10/2022`, - changes: [ - `Cheese Event power is now scaled with your cheese level.`, - `Fixed Soft Reset bug with Rejuvenated.` - ] - }, - { - version: `1.2.17`, - date: `8/10/2022`, - changes: [ - `New Hell stats tracking and analytics.`, - `Fixed Genetics not unlocking in Cataclysm.`, - `Fixed many High Pop scaling interactions.`, - `Fixed some loading bugs with wiki when no save data is present.`, - `Updated various wiki entries and calculators.`, - `Updated Pig Latin.` - ] - }, - { - version: `1.2.16`, - revision: `a`, - date: `8/8/2022`, - changes: [ - `Fixed OD bugs with Ziggurat, Garage, and Fabrication.`, - `Fixed Launch Facility sometimes getting stuck in queue.` - ] - }, - { - version: `1.2.16`, - date: `8/4/2022`, - changes: [ - `Added Orbit Decay Challenge.`, - `Added Retrograde planetary trait.`, - `New achievement: Better dead than red.`, - `New CRISPR upgrade: Civil Service.`, - `Other stuff the dev was too lazy to document.` - ] - }, - { - version: `1.2.15`, - revision: `a`, - date: `7/1/2022`, - changes: [ - `Fixed bug that prevented games without save data from loading.` - ] - }, - { - version: `1.2.15`, - date: `7/1/2022`, - changes: [ - `Firework Festival now starts on July 1st and ends July 4th.`, - `Added Dracula theme by azzzertyy.`, - `Fixed bug with Horseshoe governor and multiplier keys.`, - `Fixed issues with starting Cataclysm as Synth.`, - `Fixed bugs with wrong path techs being displayed.`, - `Evil Synth now start with a Graveyard instead of a Lumberyard.`, - `Deify and study can no longer be queued at same time.`, - `Restore backup no longer requires double clicking to trigger confirmation box.` - ] - }, - { - version: `1.2.14`, - revision: `a`, - date: `4/19/2022`, - changes: [ - `Fixed some minor bugs.`, - `Updated some translations.` - ] - }, - { - version: `1.2.14`, - date: `4/1/2022`, - changes: [ - `Added Titan Mine slider to Industry tab.`, - `Added additional popup confirmation to Restore Backup.`, - `Nanite Factory interface now has tooltips for each resource`, - `The Vault Discovery event can no longer occur if there are 0 Archaeologists and/or if Suppression is at 0%`, - `Fixed bugs related to unlocking the Fool feat.`, - `Fixed bugs with Mass Ejector optimizor governor task.` - ] - }, - { - version: `1.2.13`, - date: `3/31/2022`, - changes: [ - `Restore Backup must now be clicked twice to trigger.` - ] - }, - { - version: `1.2.12`, - revision: `c`, - date: `3/7/2022`, - changes: [ - `Fixed Double Density achievement.` - ] - }, - { - version: `1.2.12`, - revision: `b`, - date: `3/2/2022`, - changes: [ - `Fixed logic fault with mech constructor inferno upgrades.` - ] - }, - { - version: `1.2.12`, - revision: `a`, - date: `3/1/2022`, - changes: [ - `Fixed some bugs with planet traits.`, - `Fixed bug with attacking on Swamp planets.` - ] - }, - { - version: `1.2.12`, - date: `2/28/2022`, - changes: [ - `Planets can now have upto two traits.`, - `Advanced Biomes: Savanna, Swamp, Ashland, and Taiga can now appear.`, - `Added Permafrost planetary trait.`, - `Forest Biome lumber bonus changed from 15% to 20%.`, - `Exotic materials are now ranked higher by the Mass Optimizer governor task.`, - `Repair droid effect on Carport repairs buffed from 5% to 8%.`, - `You must now discover the Hell Vault through Archaeology.`, - `Water now has Mass.` - ] - }, - { - version: `1.2.11`, - date: `2/16/2022`, - changes: [ - `Added Doomed achievement to the perks lists.`, - `Added Governor CRISPR tree to perks list.`, - `Updated prestige gain/bonus calculators.`, - `Fixed Ritual Casting not showing up in Industry in Cataclysm.`, - `Detritivores no longer see the Farming ritual.`, - `Fixed Entertainer tooltip showing twice the effect of Musical.`, - `Fixed Gauss Rifles showing the effect for Disruptor Rifles.`, - `Fixed Water Freighter tooltip showing half the Helium-3 cost.`, - `Fixed some affordability checks.` - ] - }, - { - version: `1.2.10`, - date: `2/7/2022`, - changes: [ - `Bioseed probes now have significantly less cost creep inside True Path scenario.`, - `You can no longer manually buy or sell resources while the game is paused.`, - `Fixed bug with High Pop trait and Savings Bonds granting too much money.`, - `Minor bug fixes` - ] - }, - { - version: `1.2.9`, - date: `1/29/2022`, - changes: [ - `Spies may now sell you out when caught or escape when failing a mission.`, - `Infiltrator can now steal Quantium tech inside True Path.`, - `Genetics Lab UI updated.` - ] - }, - { - version: `1.2.8`, - revision: `a`, - date: `1/19/2022`, - changes: [ - `Fixed Farmer per Farm scaling with High Pop trait.`, - `Adjusted low end scaling of High Pop Hivemind trait.`, - `Wireless Signal cost for Symposium lowered.`, - `Added Anarchy scaling with High Pop` - ] - }, - { - version: `1.2.8`, - date: `1/19/2022`, - changes: [ - `Insectoid genus redesigned with High Population trait.`, - `Fixed bug that caused incorrect timer calculations when using Slow or Hyper trait at any rank other than 1.` - ] - }, - { - version: `1.2.7`, - revision: `a`, - date: `1/11/2022`, - changes: [ - `Fixed storage bug with standard universe.` - ] - }, - { - version: `1.2.7`, - date: `1/11/2022`, - changes: [ - `Failed Experiment Challenge mode.`, - `Ziggurat bonus separated from base production of buildings.`, - `Fixed bug that prevented smoldering races from being able to loot Chrysotile`, - `Fixed bug that would cause Intergalactic Tech page in wiki not to load if you were playing in Antimatter universe.` - ] - }, - { - version: `1.2.6`, - date: `12/24/2021`, - changes: [ - `Fixed bug that prevented custom Synthetic race from showing if you refreshed the page.`, - `Fixed bugs with Synthetic evolution and traits: Calm, Cannibalize, and Magnificent.`, - `Fixed bugs with using the quick tab keys when preload tabs is enabled.` - ] - }, - { - version: `1.2.5`, - date: `12/21/2021`, - changes: [ - `Fixed bug that caused a planet to lose its geology traits after an AI reset.`, - `Fixed bug with scavenger job description.` - ] - }, - { - version: `1.2.4`, - date: `12/19/2021`, - changes: [ - `Solar system now has elliptical orbits.`, - `Fixed Evolve Adept Food bonus.`, - `Rank of each aquired trait is now listed in genetics tab.`, - `Crate/Container sources are now listed in resource popup.`, - `Manual buying/selling will auto scale down to prevent "waste".` - ] - }, - { - version: `1.2.3`, - date: `12/16/2021`, - changes: [ - `Expanded Festive Season to include additional species.` - ] - }, - { - version: `1.2.2`, - date: `12/15/2021`, - changes: [ - `Graphene Plants now show on industry tab for True Path.`, - `Added entry for Festive Season into wiki.`, - `The game wiki will now load without any game data.` - ] - }, - { - version: `1.2.1`, - date: `12/14/2021`, - changes: [ - `Smelter metals can now be reallocated without unassigning.`, - `Increased accuracy of syndicate intel data`, - `Fixed bug with removing Weak & Bad genes when toggling True Path.`, - `Fixed bug with adding or removing Professors not updating indoctrination value.`, - `Fixed bug with Planet Wiki entry that prevented some data from loading.`, - `Added trait rankings to wiki.` - ] - }, - { - version: `1.2.0`, - revision: `a`, - date: `12/12/2021`, - changes: [ - `Fixed bug with Plasmid Storage.`, - `Fixed bug with Befuddle trait and Espionage.`, - `Fixed bug with Composting.`, - `Updated Solar Map.`, - `Added setting to enable mobile device support.`, - `Minor buff to TP Frigate power.` - ] - }, - { - version: `1.2.0`, - date: `12/12/2021`, - changes: [ - `Unlock the True Path (Requires completion of Ascension or Demonic Infusion).`, - `Using Fanaticism to gain an unempowered trait you already possess will now empower that trait.`, - `Added option to Hell Fortress to prevent using ship crew as reinforcements.`, - `Shrine Metal bonus now applies to Mining Droid Aluminium production.`, - `Armored trait now prevents 50% of deaths.`, - `Cannibalize healing now applies a percent based bonus instead of being equivalent to 3 5% Hospitals.`, - `GruvBox Dark is now the default theme.`, - `Added Evolve Adept Perk.`, - `Themed several additional weapon techs in magic universe for immersion.`, - `Smoldering and Chilled effects now display as Smoldering or Chilled in production breakdowns instead of Hot/Cold.`, - `Improved touch device support.` - ] - }, - { - version: `1.1.17`, - date: `11/28/2021`, - changes: [ - `Job stress from Civilian Ship Crew is now calculated correctly.`, - `Things will now show as unaffordable if they require a locked resource.`, - `Added new entries to Mechanics section of Wiki: Job Stress, Cost Creep, and Warmonger.`, - `Evolve Novice and Evolve Journeyman perk conditions updated.` - ] - }, - { - version: `1.1.16`, - date: `10/30/2021`, - changes: [ - `Ghost #3 can now be captured with Smoldering.`, - `Ghost #7 can now be captured in Cataclysm mode.`, - `Updated description of Trick or Treat feat.`, - `Llamas will no longer harass carnivores, detritivores, and soul eaters by grazing their fields.` - ] - }, - { - version: `1.1.15`, - date: `10/20/2021`, - changes: [ - `Added buttons to pause queues.`, - `Cracked Pylons now correctly add to Mana cap.`, - `Pillar of Bones will no longer be rolled with the Smoldering trait.`, - `Fixed bugs with removing Terrifying trait.`, - `Fixed bug with items in queue blocking the next item when it couldn't be completed due to negative production of a resource.`, - `The Tax-Morale governor task is now slightly smarter.` - ] - }, - { - version: `1.1.14`, - revision: `a`, - date: `9/30/2021`, - changes: [ - `Fixed Pylon bug with upgraded save games in Magic Cataclysm runs.`, - `Fixed a Message Log filtering problem where some players might not unlock some options.` - ] - }, - { - version: `1.1.14`, - date: `9/29/2021`, - changes: [ - `New settings options for message log filters.`, - `Added Cracked Pylons for Magic Cataclysm mode.`, - `Conjuring is no longer researchable in Cataclysm mode.`, - `Challenges section added to Wiki under Gameplay.`, - `Smoldering Gnawer will now consume Stone instead of nothing.` - ] - }, - { - version: `1.1.13`, - date: `9/5/2021`, - changes: [ - `Expanded Mechanics entries in wiki.`, - `Fixed some errors in wiki prestige calculators.`, - `Added a Custom Lab calculator to wiki under species.` - ] - }, - { - version: `1.1.12`, - date: `8/19/2021`, - changes: [ - `Training Timer for Military tab.`, - `Draggable config options for Spy Operator.`, - `Bug fixes for log and queue windows.` - ] - }, - { - version: `1.1.11`, - date: `8/12/2021`, - changes: [ - `ARPA projects now contribute to inflation.`, - `Mercenaries costs are now affected by inflation.`, - `Trade is now affected by inflation.`, - `Casino income is now affected by inflation.`, - `Luxury Goods income is now affected by inflation.`, - `Rescaled inflation levels.`, - `Wheelbarrow achievement now requires $250 billion.`, - `Inflation bug fixes.`, - `New message log filters.`, - `Fixed Luxury Goods tooltip money value.` - ] - }, - { - version: `1.1.10`, - date: `8/8/2021`, - changes: [ - `Added Inflation Challenge Mode. Requires Scrooge achievement to unlock.`, - `Import/Export race feature added to Ascension lab.`, - `Added merge options for queue.`, - `Available space in queue is now shown.`, - `Added Blackhole + Mass Ejector mechanic entry to wiki.`, - `Fixed some display bugs with Alchemy.`, - `Fixed bug where Protoplasm could be required by some structures late in hell phase.` - ] - }, - { - version: `1.1.9`, - date: `7/7/2021`, - changes: [ - `Firework festival bug fix for cataclysm mode.` - ] - }, - { - version: `1.1.8`, - date: `7/3/2021`, - changes: [ - `Added firework festival event (July 4th - July 8th).`, - `Added Copper and Iron settings to Mass Ejector Optimizer task.`, - `Current Quantum Level now shown on Citadel Stations.`, - `Updated wiki prestige calculators.`, - `Added a Quantum Level section to wiki.` - ] - }, - { - version: `1.1.7`, - date: `6/29/2021`, - changes: [ - `Added a Mass Ejector Optimizer governor task.`, - `Fixed precision error with Tech Scavengers.`, - `Prestige calculators added to wiki.`, - `Progress related event section added to wiki.`, - `Anti-plasmids gained from MAD in antimatter universe are now correctly calculated.` - ] - }, - { - version: `1.1.6`, - date: `6/19/2021`, - changes: [ - `Solstice event is now easier for less seasoned players.`, - `Wharves are no longer affected by the Nomadic trait.`, - `Decreased cost of Iron Horseshoes.` - ] - }, - { - version: `1.1.5`, - date: `6/16/2021`, - changes: [ - `Support for String Packs.`, - `Separate research queue behavior option.`, - `Balorg can now use the governor tax task.` - ] - }, - { - version: `1.1.4`, - date: `6/11/2021`, - changes: [ - `Fixed a bug that would sometimes cause mechs to be constructed without weapons.`, - `Fixed a bug that would cause an open tooltip to change descriptions when a queue item completes.` - ] - }, - { - version: `1.1.3`, - date: `6/7/2021`, - changes: [ - `Improvements to tooltip reliability.`, - `The first Horseshoes can now be constructed out of Lumber if available as a resource.`, - `Horseshoe pacing updated, see Hooved entry in wiki for expanded information.` - ] - }, - { - version: `1.1.2`, - date: `6/6/2021`, - changes: [ - `Added Money Reserve % config value to Slave replacement task.`, - `Various special buildings are now dropped from the queue if you remove their required trait.`, - `Spy Operator will no longer attempt espionage against controlled cities.`, - `Fixed many issues with labels not updating` - ] - }, - { - version: `1.1.1`, - date: `6/5/2021`, - changes: [ - `Unifying during banana republic now triggers an automatic backup save.`, - `Holding a key multiplier with the queue key will now queue mulitple of a building.`, - `Dealmaker import bonus buffed from 40% to 75%.`, - `Nerfed Beast trait to 8% hunting / 15% windy hunting / 10% soldier training.`, - `Restored Cautious trait to Carnivore genus.`, - `Added Money Reserve % config values to Merc and Spy recruiter tasks.`, - `Horseshoes can now be queued.`, - `Adamantite Horseshoes are now much cheaper.`, - `Changed progression system for Horseshoe costs, will not change to next resource unless it's unlocked.` - ] - }, - { - version: `1.1.0`, - date: `6/4/2021`, - changes: [ - `Appoint a Governor to help run the everyday tasks, unlock in the CRISPR lab.`, - `Animal genus split into 2 new beast genus: Carnivore & Herbivore.`, - `Carnivore Species: Cath, Wolven, Vulpine.`, - `Herbivore Species: Centaur, Rhinotaur, Capybara.`, - //`Omnivore Species: Bearkin, Porkenari, Hedgeoken.`, - `Cath, Wolven, and Centaur redesigned.`, - `Spire Mech Combat rebalanced.`, - `Titan mechs now have 4 weapon slots and an extra equipment slot.`, - `New Equipment: Jump Jet (All but Heavy & Titan), Battery (Heavy Only), and Targeting Computer (Titan Only).`, - `New Scavenger mech type`, - `Reweighted Angelic genus trait costs.`, - `Major event messages are now shown in a different color from minor ones.`, - `Decreased frequency of minor events.`, - `Smoldering no longer applies to a variety of special resources.`, - `Frenzy renamed to Blood Thirst.`, - `Madagascar Tree achievement now requires inheriting Blood Thirst instead of Carnivore.`, - `Expanded Hell section of Wiki` - ] - }, - { - version: `1.0.43`, - date: `5/18/2021`, - changes: [ - `Banana Smoothie will no longer unlock for free in alternate universes.`, - `Added a Spire Floor clear timer for previously beaten monsters.`, - `Gate Turrets now correctly contribute to demon kills.` - ] - }, - { - version: `1.0.42`, - date: `5/4/2021`, - changes: [ - `Minor bug fixes with new events.` - ] - }, - { - version: `1.0.41`, - date: `5/3/2021`, - changes: [ - `Added launch day event for May 6th.`, - `New minor event system.`, - `The same event can no longer trigger twice in a row.` - ] - }, - { - version: `1.0.40`, - date: `4/11/2021`, - changes: [ - `Special event race reskins will now persist after event ends until reset.`, - `Added a warning to Unification tech if playing Banana Republic scenario.` - ] - }, - { - version: `1.0.39`, - date: `4/9/2021`, - changes: [ - `Added challenge win conditions to planet description popover.` - ] - }, - { - version: `1.0.38`, - date: `4/4/2021`, - changes: [ - `Fixed a bug that prevented some races from acquiring Egg #3.` - ] - }, - { - version: `1.0.37`, - date: `4/3/2021`, - changes: [ - `Fixed a bug with unlocking the Egg Hunt feat.` - ] - }, - { - version: `1.0.36`, - date: `4/1/2021`, - changes: [ - `Fool Feat will automatically upgrade to current challenge level for eligible players.` - ] - }, - { - version: `1.0.35`, - date: `3/31/2021`, - changes: [ - `Changed Blackhole objective of Banana Republic scenerio from stabilize a blackhole to Expand a blackhole to 12 solar mass without exotic matter.`, - `Fixed Terrifying trade exploit in Banana Republic scenerio.` - ] - }, - { - version: `1.0.34`, - date: `3/28/2021`, - changes: [ - `Added the Banana Republic challenge.`, - `Tax Riots will no longer cause loss of Artifacts, Blood Stones, and other key resources.`, - `Cancel all routes option for trade screen.`, - `Protests no longer apply their penalty twice.`, - `Minor genetic traits can now be reordered by dragging.`, - `Max trade routes per resource type are now governed by Large Trade and Massive Trade upgrades.`, - `Misc minor bug fixes.` - ] - }, - { - version: `1.0.33`, - date: `3/20/2021`, - changes: [ - `Enhanced threat assessment for Spire.`, - `Added a Save as File option for exporting game state.` - ] - }, - { - version: `1.0.32`, - date: `3/19/2021`, - changes: [ - `Unemployment Rework.`, - `Fixed reactivity of some tooltips.`, - `Fixed cut off tooltips on settings tab.`, - `Xeno Tourism now requires 10 Monuments and Tourism.` - ] - }, - { - version: `1.0.31`, - date: `3/15/2021`, - changes: [ - `Alien 1 system is now named after their homeworld.`, - `Alien 2 system is now named after their red planet.`, - `Fixed various cut off tooltips.` - ] - }, - { - version: `1.0.30`, - date: `3/4/2021`, - changes: [ - `Wharves once again now grant the correct number of trade routes.`, - `Fixed errors with Casino vault size.`, - `Sacrificed Citizens stat for Mantis players.`, - `Factory production can be assigned without first removing it from Alloy production.` - ] - }, - { - version: `1.0.29`, - date: `2/25/2021`, - changes: [ - `Evolved species will no longer be stuck in the queue after evolution.`, - `Fixed potential viewport scrolling issues with Settings and Evolution tabs.`, - `Added a warning for users running Evolve in multiple tabs.`, - `The game will now remind players to backup their game data once every 100,000 game days.` - ] - }, - { - version: `1.0.28`, - date: `2/21/2021`, - changes: [ - `Queue can now be used during evolution stage if unlocked with CRISPR tech.`, - `Fixed incorrect Scarletite costs with Wasteful trait.`, - `Graphene Plants now default to Oil with Smoldering.`, - `Fixed many string errors.` - ] - }, - { - version: `1.0.27`, - date: `2/11/2021`, - changes: [ - `Added Trade Federation achievement.`, - `Added Mastery section to perks page.`, - `Fixed aria label of jobs.`, - `Squished achievement will now unlock from Blackhole or Demonic Infusion.` - ] - }, - { - version: `1.0.26`, - date: `1/30/2021`, - changes: [ - `Enhanced crafted material popovers.`, - `Universe filters for wiki achievements page.`, - `Cheese Guide.` - ] - }, - { - version: `1.0.25`, - date: `1/23/2021`, - changes: [ - `Added Piracy section to Wiki under Gameplay-Mechanics.`, - `Numerous minor bug fixes.` - ] - }, - { - version: `1.0.24`, - date: `1/17/2021`, - changes: [ - `Evil Smoldering races can now research bone tools.` - ] - }, - { - version: `1.0.23`, - date: `1/16/2021`, - changes: [ - `Redesigned Heat based Genus mechanics.`, - `Untapped Potential formula changed: now has diminishing returns for stacking unspent genes.`, - `Faith now has an effect on auto crafting (Craftsmen Only).`, - `Added new topics to Mechanics section of Wiki.`, - `Minor bug fixes.` - ] - }, - { - version: `1.0.22`, - date: `1/15/2021`, - changes: [ - `Fixed Cataclysm mode game start.` - ] - }, - { - version: `1.0.21`, - date: `1/10/2021`, - changes: [ - `Gain upto 8 hours of accelerated time when game is stopped/closed.`, - `Optimized tab content loading for performance.`, - `Pause game feature.` - ] - }, - { - version: `1.0.20`, - date: `12/29/2020`, - changes: [ - `Fixed issue with keyup event not releasing multiplier keys.` - ] - }, - { - version: `1.0.19`, - date: `12/28/2020`, - changes: [ - `Studious now improves library knowledge by 10%.`, - `Merchant now increases the amount of resources gained from trading by 10%.`, - `Tracker raised from 10% to 20%.`, - `Resourceful raised from 10% to 12%.`, - `Claws raised from 20% to 25%.`, - `Apex Predator combat bonus raised from 25% to 30%.`, - `Forge Geothermal power boost raised from +1MW to +2MW.`, - `Beast trait now boosts Hunting by 10% or 20% when windy and improves soldier training time by 20%.`, - `Beast gene point cost changed from 2 to 3 points.`, - `Top level tab quick selection key bindings (default 1-7).` - ] - }, - { - version: `1.0.18`, - date: `12/24/2020`, - changes: [ - `Fixed issue with species costs on some techs requiring protoplasm without a reload.` - ] - }, - { - version: `1.0.17`, - date: `12/19/2020`, - changes: [ - `Larger font size modes.`, - `Added descriptions for city sectors.`, - `Last 3 event messages will now be preserved on reload.`, - `Fixed Evolution bugs with Unbound Infusion active.`, - `Improved timer accuracy of stacked queue items when No Queue Order is used.` - ] - }, - { - version: `1.0.16`, - date: `12/16/2020`, - changes: [ - `Dark Bomb: Kill and Reset the Demon Lord's accumulated strength using the new Dark Bomb.`, - `Bonus Artifacts can now be earned during Demonic Infusion if Spire floor 50 or 100 are cleared.`, - `Renamed the tech upgrade Purify to Enhanced Air Filters in order to prevent confusion with the Blood Infusion Purify.` - ] - }, - { - version: `1.0.15`, - date: `12/12/2020`, - changes: [ - `Redesigned Inferno Reactor, output is now tied to Infernal Forge.`, - `Steel can once again be discovered by Ambush attacks.`, - `Power Grid is now shown in Cataclysm.`, - `Cataclysm reset no longer incorrectly grants Rapid Mutation or Ancient Ruins.`, - `Many minor bug fixes.` - ] - }, - { - version: `1.0.14`, - date: `12/8/2020`, - changes: [ - `Vacuum Collapse no longer removes all charges of Corrupted bonus.`, - `Vacuum Collapse now correctly increases Dark Energy earned on the stats page.`, - `Lumber Ritual is no longer displayed to Evil races.`, - `Multiplier keys now work when hiring mercenaries.` - ] - }, - { - version: `1.0.13`, - date: `12/4/2020`, - changes: [ - `Power Grid now correctly unlocks when gaining Electricity from Infiltrator trait.`, - `Feats Garbage Pie and Finish Line can now be unlocked by Demonic Infusion.` - ] - }, - { - version: `1.0.12`, - date: `12/4/2020`, - changes: [ - `MechBay tab improvements.`, - `Mechlist can now be reordered by dragging.`, - `Power Grid can now control On/Off state.`, - `Support type structures can now be controlled by the power grid.` - ] - }, - { - version: `1.0.11`, - date: `12/2/2020`, - changes: [ - `Fixed a memory leak.`, - `Minor adjustments to GruvBox Dark theme.`, - `Cheesy Goodness.` - ] - }, - { - version: `1.0.10`, - date: `12/1/2020`, - changes: [ - `Ascended buff now persists after Demonic Infusion.`, - `New Themes: GruvBox Light, GruvBox Dark, and Orange Soda.` - ] - }, - { - version: `1.0.9`, - date: `11/29/2020`, - changes: [ - `Perks separated on to a separate tab under Stats.`, - `Added Perks section to Wiki.` - ] - }, - { - version: `1.0.8`, - date: `11/28/2020`, - changes: [ - `Base Neutronium cost of Inferno Reactor lowered to 3,750,000.`, - `Fixed Valdi genus traits after evolution.`, - `Prepared rank 2 now correctly applies when building mechs.`, - `Power Grid is now more strict in checking what is available.`, - `Fixed bug that sometimes caused crafting to use a wrong Mastery value.` - ] - }, - { - version: `1.0.7`, - date: `11/25/2020`, - changes: [ - `Fixed a bug where Technocracy prevented Alien 2 & Chthonian invasions from working.` - ] - }, - { - version: `1.0.6`, - date: `11/24/2020`, - changes: [ - `Fixed Mechlab quick switch button.`, - `Titan class mech power increased by 12.5%.` - ] - }, - { - version: `1.0.5`, - date: `11/22/2020`, - changes: [ - `Adjustable Power Grid`, - `Light Theme bug fixes.` - ] - }, - { - version: `1.0.4`, - date: `11/21/2020`, - changes: [ - `Gains from Alchemy are now higher.`, - `Any mixed fleet can now invade the Alien 2 and Chthonian systems as long as the invasion force is strong enough.`, - `Alien 2 Invasion requires minimum of 400 fleet rating and at least 650 to take no losses.`, - `Chthonian Invasion requires a minimum 1250 fleet rating, 2500 for average losses, and 4500 for minimum losses.` - ] - }, - { - version: `1.0.3`, - date: `11/15/2020`, - changes: [ - `Fixed compost heap values.`, - `Added combat section to the wiki under gameplay.`, - `Added Equilibrium feat for pillaring every species.`, - `The Misery feat can now be earned from Demonic Infusion.` - ] - }, - { - version: `1.0.2`, - date: `11/10/2020`, - changes: [ - `Valdi now take your chosen Genus instead of humanoid.`, - `Wrath Blood Infusion now properly applies to all Mech fights.`, - `Artifacts can now be spent properly on the CRISPR tab.`, - `Crystal trade prices adjusted.`, - `Megalith base price reduced from 100k to 55k.`, - `Many minor bug fixes.` - ] - }, - { - version: `1.0.1`, - date: `11/08/2020`, - changes: [ - `Fixed display bug with CRISPR costs and Technocracy.`, - `Fixed issue with some Windmills not producing power.`, - `The Resort now properly formats its vault size.` - ] - }, - { - version: `1.0.0`, - date: `11/07/2020`, - changes: [ - `Expanded Interdimensional content, delve deep into the hell dimension.`, - `New Magic Universe.`, - `Fling asteroids into the blackhole with the Asteroid Redirect ARPA project.`, - `The same monument type will no longer be chosen twice in a row.`, - `Evil races can now construct a Pillar of Bones monument type.`, - `Democracy now only affects Entertainers.`, - `Some government bonuses now scale with tech era.`, - `Races with Detritivore can now build Windmills.`, - `Base Aluminium income for plant based species is now roughly 10% higher.`, - `Beast of Burden now grants an extra loot roll instead of a 10% boost.`, - `Revamped combat loot formulas.`, - `Build queue resource highlighting.`, - `Low Contrast Dark Night Theme.`, - `Ewnay igpay atinlay anguagelay.` - ] - }, - { - version: `0.9.24`, - date: `11/1/2020`, - changes: [ - `Holiday icons from feats earned with no stars can now be accessed.`, - `Challenge feat icons still require at least 1 star.` - ] - }, - { - version: `0.9.23`, - date: `10/30/2020`, - changes: [ - `New settings option for people who hate fun.`, - `Added ability for an obscure combination of settings and racial traits to get Ghost #3` - ] - }, - { - version: `0.9.22`, - date: `10/28/2020`, - changes: [ - `Halloween cosmetic effects will now run for the duration of the Trick or Treat event instead of just on Halloween.`, - `Ents, Dryads, and Salamanders can now find all the Ghosts.`, - `A certain Ghost is now easier to obtain in Cataclysm.`, - `Accessibility improvements for the event.` - ] - }, - { - version: `0.9.21`, - date: `10/27/2020`, - changes: [ - `Trick or Treat Event, runs from 10/28 - 11/4.` - ] - }, - { - version: `0.9.20`, - date: `10/16/2020`, - changes: [ - `Fixed bug with the holy trait that improperly applied its bonus.` - ] - }, - { - version: `0.9.19`, - date: `9/1/2020`, - changes: [ - `Swarm Control AI now provides a base increase of +2 before unlocking Quantum Computing.`, - `Fixed bugs with manual crafting popover.`, - `Fixed bug that stopped DNA & RNA generation during evolution if the Cataclysm scenario was toggled on.` - ] - }, - { - version: `0.9.18`, - date: `8/28/2020`, - changes: [ - `ARPA Queue timer fixes.`, - `Swarm Control AI upgrade now make Control Stations scale with Quantum level.` - ] - }, - { - version: `0.9.17`, - date: `8/22/2020`, - changes: [ - `Fixed bug that prevented Cataclysm Ascension from completing.`, - `Rank 1 sacrifice is slightly less effective`, - `Rank 3 sacrifice is significantly more effective`, - `New Research is now shown by Era.` - ] - }, - { - version: `0.9.16`, - date: `8/12/2020`, - changes: [ - `Bug Fixes by Beorseder:`, - `Fixed issue where Exotic Materials Lab and Fortifications would clear current queue.`, - `Fixed Scavengers not working during Cataclysm.`, - `Fixed display bug with Galactic Exchange during Cataclysm.`, - `Genomic Mutations no longer give the wrong number of Genes without Synthesis upgrades.`, - `Genomic Mutations now tell how many Plasmids/Antiplasmids are gained from them.`, - `Techs now display their requirements on the wiki.` - ] - }, - { - version: `0.9.15`, - date: `8/10/2020`, - changes: [ - `Tax revolts can no longer destroy Soul Gems.`, - `If you lose your sample of Elerium before researching Elerium Mining it will now be replaced.` - ] - }, - { - version: `0.9.14`, - date: `8/9/2020`, - changes: [ - `Angelic races now have an innate bonus vs demonic creatures.`, - `Enhanced Muscle Fibers added to perks page.`, - `Genome sequencing will now be off by default in Cataclysm.`, - `Reorganized achievements page in Wiki.` - ] - }, - { - version: `0.9.13`, - date: `8/6/2020`, - changes: [ - `Special resource descriptions now update.` - ] - }, - { - version: `0.9.12`, - date: `8/3/2020`, - changes: [ - `Added Crossed the Finish Line feat for Ascending with Cataclysm.`, - `Adjusted many post World Collider Cataclysm things that referenced none existent planetary structures.`, - `Added a fix for Stabilize Blackhole being stuck in an untriggerable state.`, - `Upgrading achievements will now send a notification.` - ] - }, - { - version: `0.9.11`, - date: `8/1/2020`, - changes: [ - `Fixed a bug that caused Factories to charge the wrong amount of Polymer for producing Synthetic Furs.` - ] - }, - { - version: `0.9.10`, - date: `7/30/2020`, - changes: [ - `Expanded list of potential enemy city names.`, - `Added Synthetic Fur option to Factories.`, - `Restoring a backup after a Cataclysm will now allow you to Cataclysm again.`, - `Fixed Lumber penalty on Desert worlds.`, - `Many minor bug fixes.` - ] - }, - { - version: `0.9.9`, - date: `7/21/2020`, - changes: [ - `Added Devotion upgrade to ancients CRISPR line between Faith and Acolyte. The total cost is the same, it's just spread out more.`, - `Players with Ancients 4 are granted Ancients 5 automatically, those with Ancients 3 are refunded 300 Plasmids.`, - `Added Enhanced Muscle Fiber CRISPR upgrade.`, - `High tax morale penalty under Oligarchy is now reduced.`, - `Fixed bugs with Blackhole reset and restoring backups.`, - `Fixed bug with adjusting taxes as a Noble race that would set it to the max.` - ] - }, - { - version: `0.9.8`, - date: `7/18/2020`, - changes: [ - `Czech translation by Mousesama`, - `The slaves have staged a successful hunger strike to demand better living conditions, as a result slave pens can now only hold 4 slaves each.`, - `Autocracy and Frenzy no longer block Immoral races from gaining a Warmonger bonus.`, - `Geology traits now display under planet information.`, - `Popovers added to building and research queues.` - ] - }, - { - version: `0.9.7`, - date: `7/13/2020`, - changes: [ - `Seasons no longer exist in Cataclysm mode.`, - `It is no longer Sunny in Cataclysm mode.`, - `Parasites are no longer unable to grow population in Cataclysm mode, but they do take a growth penalty.`, - `Base Sawmill effect is now separated from lumberjack in production breakdown.` - ] - }, - { - version: `0.9.6`, - date: `7/10/2020`, - changes: [ - `Fixed bug with Infiltrator not unlocking Nanoweave.`, - `Fixed bug with Railways not adding traderoutes correctly in Cataclysm mode.` - ] - }, - { - version: `0.9.5`, - date: `7/6/2020`, - changes: [ - `Fixed a bug that occurred when combining the Terrifying trait with the gold star Iron Will perk.` - ] - }, - { - version: `0.9.4`, - date: `7/3/2020`, - changes: [ - `Failed History perk raised from +1 Geothermal to +2 Geothermal energy.`, - `Fixed Oligarchy tax riot immunity between 36%-45%.`, - `Infiltrator can now steal Graphene Processing, Nanoweave, and Orichalcum Analysis techs.` - ] - }, - { - version: `0.9.3`, - date: `7/1/2020`, - changes: [ - `Increased base number of Plasmids earned in Cataclysm mode.` - ] - }, - { - version: `0.9.2`, - date: `6/30/2020`, - changes: [ - `Added Restore Backup option, restores game to just before your last prestige reset.`, - `Extended Recombination CRISPR line.`, - `When gaining a random minor trait from Fanaticism, you will now gain 5 ranks of it.` - ] - }, - { - version: `0.9.1`, - date: `6/21/2020`, - changes: [ - `Fixed Dyson Net.` - ] - }, - { - version: `0.9.0`, - date: `6/21/2020`, - changes: [ - `Added Scenarios Section to Evolution Challenges.`, - `Added Cataclysm Scenario for those who value science over caution.`, - `Genetic Dead End is now classified as a Scenario.`, - `Plant genus redesign. Photosynth trait replaced with Sappy.`, - `Added 3rd race option for Plant genus: Pinguicula.`, - `Dyson Net now provides partial power as it is constructed.`, - `Added Orichalcum upgrade for Dyson Sphere.`, - `Added Xeno Tourism upgrade.`, - `Added Fertility Clinic upgrade for Hospitals.`, - `Added OTB, Online Gambling, & Bolognium Vault upgrade for Casinos.`, - `Added Scrooge achievement.`, - `Added Soul Link upgrade for Soul Forge/Soul Attractors.`, - `Reduced Bolognium cost of Freighters & Corvette Ships.`, - `Increased rating of Corvette Ships to 30.`, - `Piracy will no longer start until after you construct the Embassy.`, - `Reduced power requirement of Soul Forge and Soul Attractor.`, - `Gun Emplacements and Soul Attractors are now more potent.`, - `Reduced requirement of Demon Slayer feat to 666 Million demon kills.` - ] - }, - { - version: `0.8.17`, - date: `5/30/2020`, - changes: [ - `Added 3rd race option for Fungus genus: Moldling.`, - `Fungi genus Spore trait replaced with Detritivore.`, - `Casinos now start powered and generated money immediately.`, - `Extreme Dazzle upgrade now boosts Casino income by 50%.`, - `Reduced power requirement of Casino by 1.`, - `Casino Max Morale boost no longer works unless casino is powered.`, - `Occupation will now unlock Federation research.`, - `Added Double Density achievement in heavyverse.`, - `Stoned penalty on mellow planets raised to 10%.`, - `Unemployed citizens on mellow planets no longer generate any stress (note: hunters are NOT unemployed).`, - `Life on mellow planets is now overall less stressful.`, - `Slaver trait rating raised to 12.`, - `Barracks can now be switched off.`, - `Space Stations will now automatically staff Space Miners from the default job when constructed.`, - `Factories now default to producing Alloy instead of Nothing.` - ] - }, - { - version: `0.8.16`, - date: `5/8/2020`, - changes: [ - `Oceanic biome now applies a 6% bonus to Titanium from Steel smelting.`, - `Oceanic biome now applies a 12% bonus to Titanium from Iron smelting.`, - `Oceanic biome now applies a 5% penalty to Fur generation.`, - `Tundra biome now applies a 25% bonus to Fur generation.`, - `Tundra biome now applies a 10% penalty to Oil generation.`, - `New planetary modifiers: Elliptical, Flare, Dense, and Unstable.`, - `Oligarchy tax riot immunity raised from 35% to 45%.` - ] - }, - { - version: `0.8.15`, - date: `5/2/2020`, - changes: [ - `Grassland biome Food bonus raised to 20%.`, - `Forest biome Lumber bonus raised to 15%.`, - `Desert biome now applies a 25% Lumber penalty.`, - `Desert biome now gives a 20% stone bonus and a 10% Oil bonus.`, - `Volcanic biome now applies a 10% Food penalty.`, - `Volcanic biome now gives an 8% Iron and 12% Copper bonus.`, - `Added partial Korean translation.`, - `Achievements in the wiki are now sorted Alphabetically.`, - `Some achievements now show completion progress in the wiki.` - ] - }, - { - version: `0.8.14`, - date: `4/30/2020`, - changes: [ - `Post unification Federation now gives a 32% bonus (raised from 30%).`, - `Federation now increases morale by 10%.`, - `Socialist factory bonus is now 10% (raised from 5%).`, - `Socialist crafting bonus is now 35% (raised from 25%).`, - `Corpocracy factory bonus is now 30% (raised from 20%).`, - `Corpocracy factory bonus now applies to Cement, Graphene, and Vitreloy.`, - `Republic now increases morale by 20%.`, - `Oligarchy tax revenue penalty is now 5% (lowered from 10%).`, - `Oligarchy can now set taxes 20% higher than other governments (raised from 10%).`, - `Technocracy now adds a 10% Knowledge gain bonus.`, - `Autocracy governments are now immune to the warmonger penalty.`, - `Priests now apply a bonus to Ziggurats under Theocracy.`, - `Fixed display of Theocracy effect on temples. This gives a 12% bonus but was only displaying as a 5% increase.`, - `Noble Oligarchy can now set their taxes as high as 40%.` - ] - }, - { - version: `0.8.13`, - date: `4/29/2020`, - changes: [ - `New research is now sorted by knowledge cost.`, - `Added popover descriptions for prestige resources.`, - `Harmony Crystals now boost standard Dark Energy by 0.1% instead of 0.01%.`, - `Lots of minor bug fixes.` - ] - }, - { - version: `0.8.12`, - date: `4/24/2020`, - changes: [ - `Farming has been redesigned. Farms no longer directly generate food, Farmers now generate food in combination with Farms.`, - `Added Energizer Feat for ascending without building any Thermal Collectors.`, - `Bad traits no longer count for Ascension Species Creator complexity.`, - `Dreaded Achievement will now unlock if you never researched dreadnoughts.`, - `Fixed issue with some feats spamming the log due to micro achievements.`, - `Fixed base training rate of soldiers.`, - `Fixed bug with diverse trait that made it do the opposite of what it was suppose to do.`, - `Adjusted color of "purple" text on Night theme.`, - `Kilowatts are now Megawatts.` - ] - }, - { - version: `0.8.11`, - date: `4/16/2020`, - changes: [ - `Ascension reset no longer offers planet choices, instead your next race is created on the old planet with bonuses added to that planet.`, - `Ascended planets now gain +2% to all geology deposits, +5% production, +10% storage, and +2 Sundial base Knowledge gain.`, - `Unspent gene points in the Ascension Lab will be converted into Untapped Potential.`, - `Ascension lab now has a complexity gene tax for adding more than 4 traits.`, - `Technophobe perk now applies an additional bonus to custom race complexity.`, - `Paranoid and Hoarder can now be combined.`, - `Over capped slaves will now be released.` - ] - }, - { - version: `0.8.10`, - date: `4/13/2020`, - changes: [ - `Added EM (Electromagnetic) Field Challenge.` - ] - }, - { - version: `0.8.9`, - date: `4/12/2020`, - changes: [ - `Added a Feat for finding all the Eggs.`, - `Current egg count can now be checked in the Wiki.` - ] - }, - { - version: `0.8.8`, - date: `4/12/2020`, - changes: [ - `Easter Event Activated`, - `Event ends 10 days after the start of Easter.` - ] - }, - { - version: `0.8.7`, - date: `4/11/2020`, - changes: [ - `Fixed Pathetic trait.` - ] - }, - { - version: `0.8.6`, - date: `4/11/2020`, - changes: [ - `Fixed Brute trait.`, - `Added section for Achievements and Feats to Wiki.` - ] - }, - { - version: `0.8.5`, - date: `4/11/2020`, - changes: [ - `Added New Work in Progress Game Wiki`, - `Sentience is now more likely to grant a species where the extinction achievement has not yet been earned.`, - `Sentience can now include custom races.`, - `Incorporeal Existence research now costs Phage instead of Plasmids.`, - `Ascension research now Plasmids instead of Phage.`, - `The change log is now part of the Wiki.` - ] - }, - { - version: `0.8.4`, - date: `4/4/2020`, - changes: [ - `Fixed breaking bug with Rigid trait.` - ] - }, - { - version: `0.8.3`, - date: `4/3/2020`, - changes: [ - `Federation now reduces the soldier requirement of occupied cities by 5.`, - `Fixed incorrect Industrious string.` - ] - }, - { - version: `0.8.2`, - date: `3/30/2020`, - changes: [ - `Piracy in the Gateway and Stargate regions ramp up more slowly as you explore Andromeda.`, - `Fixed formatting of multiline Crafting Tooltip cost display.`, - `Fixed incorrect string used by completed Dyson Sphere.` - ] - }, - { - version: `0.8.1`, - date: `3/29/2020`, - changes: [ - `Piracy now slowly takes effect in the Gateway System and Stargate region over 1000 days after piracy begins.`, - `Purchasing Negotiator and levels of Persuasive will now update the regular Market as well as the Galactic Market.`, - `Added new CRISPR upgrade effects from the Challenge, Ancients, and Trader trees to the perks list.`, - `Queued Monuments will update their name in the queue when a Monument is constructed.`, - `Fixed bug where ARPA projects at the end of the Queue while No Queue Order was active would cause No Queue Order to not work as intended.`, - `The name of the trait gained from a Mutation in the message is now localized.`, - `Adding Apex Predator will remove currently obtained Armor techs.`, - `Annexed/Purchased powers will now have a respective " - Annexed"/" - Purchased" tag next to their name, like Occupied powers do.`, - `Blackhole reset gives its proper reward again.`, - `The amount of Gene/Phage levels of Minor Traits purchased is now affected by Multiplier Keys.`, - `The amount of Ships moved from one area to another is now affected by Multiplier Keys.`, - `Manual Crafting button tooltips are more informational.`, - `Constructing the first Foundry of a game will log a message briefly explaining what Crafted Resources are and the ways to make them.`, - `Informative messages (mission results, messages that explain newly unlocked mechanics, the Launch Facility message that informs the player of the space tab, etc.) are now displayed in blue, to separate them from less important messages.`, - `Added the missing Wormhole Mission result string.` - ] - }, - { - version: `0.8.0`, - date: `3/27/2020`, - changes: [ - `Intergalactic Content.`, - `Universe Mastery Rework.`, - `-Each Universe now tracks its own mastery level responsible for 40% of the mastery bonus, the remaining 60% comes from the general mastery level.`, - `-Standard Universe mastery rules remains unchanged.`, - `Micro icons can now be earned for none Micro achievements. These will not count for standard mastery, only Micro mastery.`, - `Unification 3.0, the unification system has been reworked.`, - `Federation Government type.`, - `New Faith CRISPR line of upgrades, unlocks priest job.`, - `Universal, Standard and Mastered CRISPR Upgrades, for masters of the universes.`, - `Added Negotiator CRISPR upgrade.`, - `Added Persuasive Minor Gene.`, - `Extended the Deify and Study Ancients tech trees.`, - `Enhanced Droids upgrade for War Droids.`, - `Repair Droids for Fortress.`, - `Smoldering and Chilled now have reduced effectiveness after 100 stacks.`, - `Removed Heavy Genus Feats, these were redundant with Universe Icons.`, - `Blackhole reset now also grants species level extinction achievement.`, - `Power cost of Mass Ejector increased to 3kW.`, - `Genetics lab custom mutation costs rescaled to static values depending on the genetic trait.`, - `Colonists will now be automatically assigned when a Living Quarter is completed if the default job has any available citizens.`, - `Biodome redesigned, produces less food but increases living quarter capacity for Citizens.`, - `More robust research categories.`, - `Various racial traits now apply to ARPA projects.`, - `Human Creative trait rescaled.`, - `Large cost creep penalty reduced to 0.005 from 0.01.`, - `Strong gathering bonus increased from 2 to 5.`, - `Compact lowered from -0.02 to -0.015.` - ] - }, - { - version: `0.7.28`, - date: `3/16/2020`, - changes: [ - `Antimatter Universe now gives a 10% prestige bonus post MAD.`, - `St. Patrick's Day event.`, - `Blood War can no longer be earned by none demonic evil races.`, - `Build Crate/Container buttons now update create/container values when upgraded by research.` - ] - }, - { - version: `0.7.27`, - date: `3/10/2020`, - changes: [ - `Memory leak fixes.` - ] - }, - { - version: `0.7.26`, - date: `3/5/2020`, - changes: [ - `Any race where the associated extinction achievement has been unlocked is now always available during evolution.`, - `Joyless perk changed to +2% Max Morale per star level.`, - `The effects of the Mass Extinction and Creator perks have been swapped.`, - `Creator perk (old mass extinction) changed to 1.5x / 2x / 2.5x / 3x / 3.5x genes gained on mutation.`, - `Minor traits bought with Phage now count twice when you complete evolution.` - ] - }, - { - version: `0.7.25`, - date: `2/26/2020`, - changes: [ - `Unicorn Shrine bonus is now determined by the moon phase when constructed.`, - `Shrine Knowledge bonus now applies an additional affect to universities.`, - `Smelters in Evil universe when using Kindling Kindred default to Flesh instead of Coal.`, - `Evil Wendigo Smelters correctly display that they use 1 Flesh/s instead of 3 Souls/s. Also fixed the bug where they end up using 3 Flesh/s instead of 1.`, - `Fixed bug where the Evil Wendigo Reclaimer description would show the Lumberjack description.`, - `If Containers have not yet been unlocked as a resource, getting a Wharf will unlock it.`, - `Fixed bug where, if Freight Trains was gotten after ARPA, the Railway project would need a refresh to appear.` - ] - }, - { - version: `0.7.24`, - date: `2/12/2020`, - changes: [ - `Special Prestige icons awarded to players from certain feats can now be set to replace the standard Star icon.` - ] - }, - { - version: `0.7.23`, - date: `2/11/2020`, - changes: [ - `Steelen Challenge now requires Bioseed as its win condition.`, - `Added Feat for Blackhole reset with Steelen Challenge.`, - `Added V-Day Event stuff.` - ] - }, - { - version: `0.7.22`, - date: `2/9/2020`, - changes: [ - `Steelen Challenge.`, - `Graveyards are now removed upon gaining Kindling Kindred.`, - `If Default job is set to Farmer/Lumberjack for Carnivore/Kindling Kindred, it will be changed to Unemployed upon adding those traits.`, - `Fixed bug where gaining Carnivore and having no Grain Mills would make Smokehouses unpurchasable until refresh.`, - `Cargo Yard now requires the construction of a Transfer Station to be unlocked.`, - `Mitosis/Metaphase effect now appears on perks list.` - ] - }, - { - version: `0.7.21`, - date: `1/28/2020`, - changes: [ - `More bug fixes.` - ] - }, - { - version: `0.7.20`, - date: `1/20/2020`, - changes: [ - `Bug Fixes by Beorseder.`, - `Fixed bug where purchasing Multicellular would double DNA generation from Nuclei instead of Bilateral Symmetry/Poikilohydric/Spores.`, - `New population from the Infectious trait now go into the set Default job, instead of always Unemployed.`, - `Controlled Mutation will no longer offer conflicting traits.` - ] - }, - { - version: `0.7.19`, - date: `1/14/2020`, - changes: [ - `Bug Fixes.` - ] - }, - { - version: `0.7.18`, - date: `1/12/2020`, - changes: [ - `Theocracy temple bonus raised from 5% to 12%.`, - `Technocracy knowledge discount raised from 5% to 8%.`, - `Corpocracy Casino Bonus raised from +100% to +200%.`, - `Corpocracy Luxury Good Bonus raised from +50% to +150%.`, - `Corpocracy Tourism Bonus raised from +50% to +100%.`, - `Corpocracy morale penalty lowered from -15% to -10%.`, - `Corpocracy Manufacturing Bonus raised from +15% to +20%.`, - `Miner's Dream now scales the information that is revealed depending on the star level of the achievement.`, - `Slaves now appear as a resource.`, - `Alternate universes now award icons for complex achievements.` - ] - }, - { - version: `0.7.17`, - date: `1/9/2020`, - changes: [ - `Fixed an issue with displaying foreign powers in civics tab on unlock.` - ] - }, - { - version: `0.7.16`, - date: `1/8/2020`, - changes: [ - `Exploration Missions can be queued again.`, - `The game will now notify the user if the current version is out of date.`, - `Changes by Beorseder.`, - `Geology deposit aesthetic changes on planet selection.`, - `Miner's Dream Achievement & Perk.` - ] - }, - { - version: `0.7.15`, - date: `1/7/2020`, - changes: [ - `Queueing the World Collider will no longer lag the game.`, - `Multi-segment projects will now have extra segments cleared from the queue on completion.`, - `Spy and Government related popovers that would sometimes get stuck open will now clear.`, - `Queued projects that will not complete due to lack of production will now display a green [Never] instead of -1 second timer.`, - `Multi-segment projects no longer block queueing ARPA projects unless they consumed the entire queue space.` - ] - }, - { - version: `0.7.14`, - date: `12/31/2019`, - changes: [ - `Research Categorization option by Naryl.` - ] - }, - { - version: `0.7.13`, - date: `12/30/2019`, - changes: [ - `Gene decay will no longer result in a negative plasmid count.`, - `Gene fortification is slightly more effective.` - ] - }, - { - version: `0.7.12`, - date: `12/19/2019`, - changes: [ - `Gene Fortification.`, - `Fixed Cultural Supremacy popover.` - ] - }, - { - version: `0.7.11`, - date: `12/15/2019`, - changes: [ - `Decaying resources will now use a warning color if you are losing that resource but at a slower rate than the decay rate.`, - `The most bottlenecked resource will now display in red while other trouble resources will be marked with an alert color.`, - `CRISPR upgrades are now darkened when unaffordable.`, - `Transfer Station now lists its uranium storage.`, - `Wendigo bug fixes.` - ] - }, - { - version: `0.7.10`, - date: `12/12/2019`, - changes: [ - `Craftsman now continuously output product instead of once/twice a month.`, - `Cumulative achievements now check for lower tier unlocks.` - ] - }, - { - version: `0.7.9`, - date: `12/7/2019`, - changes: [ - `Many bug fixes.` - ] - }, - { - version: `0.7.8`, - date: `12/6/2019`, - changes: [ - `The default job can now be set to: Unemployed, Farmer, Lumberjack, Quarry Worker, or Scavenger.`, - `New line of feats for achievement hunting.`, - `Novice Perk.`, - `Journeyman Perk.` - ] - }, - { - version: `0.7.7`, - date: `12/5/2019`, - changes: [ - `Super projects now queue in larger batches.`, - `Super projects now only report completion by the queue if actually complete instead of for each segment constructed.` - ] - }, - { - version: `0.7.6`, - date: `12/2/2019`, - changes: [ - `Adjacent queue items of the same type will now combine.`, - `Architect now doubles queue sizes instead of adding a flat +2.`, - `Misc minor bug fixes.` - ] - }, - { - version: `0.7.5`, - date: `11/28/2019`, - changes: [ - `Queueing 2x or more of the same building in a row will now stack them in the queue.`, - `Queue timer now adjusts for cost creep.`, - `ARPA Projects can now be queued.`, - `Fixed a bug that could break the game when Yeti or Wendigo unlocked the genetics lab.` - ] - }, - { - version: `0.7.4`, - date: `11/27/2019`, - changes: [ - `Wendigo can now build hunting lodges.`, - `Trade route prices are now tracked to 1 decimal.`, - `Elusive spies will no longer be killed when they fail a mission.`, - `Disruptor Rifles now require researching Quantum Entanglement.` - ] - }, - { - version: `0.7.3`, - date: `11/26/2019`, - changes: [ - `Night Theme trade volume control made more night theme friendly.`, - `Contrast improvements for Night and R/G Theme.` - ] - }, - { - version: `0.7.2`, - date: `11/24/2019`, - changes: [ - `New market buy/sell volume control.`, - `Large Trade upgrade now raises the buy/sell cap to 5,000.`, - `Massive Trades upgrade now raises the buy/sell cap to 1,000,000.`, - `Various bug fixes by Beorseder.` - ] - }, - { - version: `0.7.1`, - date: `11/23/2019`, - changes: [ - `Garrison controls reintegrated into government section.`, - `Mutation plasmids now track correctly in no plasmid challenge runs.`, - `Fixed many issues with foreign power name generation.`, - `Feat star icon is no longer tiny.` - ] - }, - { - version: `0.7.0`, - date: `11/21/2019`, - changes: [ - `Establish a Government.`, - `Battle rival cities.`, - `Biome races added for Forest, Desert, Tundra, and Volcanic.`, - `New ARPA Project: Railway.`, - `New CRISPR upgrades: Mitosis & Metaphase.`, - `Construct advanced AI stations in deep space.`, - `Rapid Gene Sequencing upgrade.`, - `Civics tab split into Government, Industry, and Military sections.`, - `Inspiration no longer adds an upfront knowledge bonus.`, - `Vigilante requirement lowered to 12.`, - `Xenophobic replaced with Wasteful.`, - `Added Rocky Road Feat.`, - `Configurable number notations.` - ] - }, - { - version: `0.6.27`, - date: `11/12/2019`, - changes: [ - `Tundra planets are now always cold in winter.`, - `Volcanic planets are now always hot in summer.`, - `Stormy planets are now more likely to be windy.`, - `Fixed issue with last rites not showing up as affordable.`, - `2-4x Challenge Multipliers changed:.`, - `2 Challenges: +12% Prestige.`, - `3 Challenges: +25% Prestige.`, - `4 Challenges: +45% Prestige.`, - `Heavy Universe prestige bonus now scales with challenge level:.`, - `0 Challenges: +5% Prestige.`, - `1 Challenge: +10% Prestige.`, - `2 Challenges: +15% Prestige.`, - `3 Challenges: +20% Prestige.`, - `4 Challenges: +25% Prestige.` - ] - }, - { - version: `0.6.26`, - date: `11/7/2019`, - changes: [ - `ARPA costs now update without mousing off and back on the buttons.`, - `Fixed issues with incorrectly powering on newly built structures.`, - `None-demonic evil smelters now correctly state they burn 1 flesh/s.`, - `Added whitehole perk to stats page.` - ] - }, - { - version: `0.6.25`, - date: `11/2/2019`, - changes: [ - `Geology bonus is now preserved on MAD reset.`, - `Key Mappings are now configurable for multiplier and queue keys.` - ] - }, - { - version: `0.6.24`, - date: `10/31/2019`, - changes: [ - `The Halloween feat will now unlock inside a micro universe.` - ] - }, - { - version: `0.6.23`, - date: `10/28/2019`, - changes: [ - `Exotic mass now counts towards Galactic Landfill and Supermassive.`, - `Fixed issues with queue timers and kindling kindred trait.`, - `Dark Energy now applies to windmills in antimatter universe.` - ] - }, - { - version: `0.6.22`, - date: `10/26/2019`, - changes: [ - `Game optimizations.`, - `Bug fixes for queues.`, - `Fixed bug with war droids.` - ] - }, - { - version: `0.6.21`, - date: `10/24/2019`, - changes: [ - `Freight Train upgrade now adds a trade route to freight yards instead of trade posts.`, - `Toxic troll achievement.`, - `Spatial reasoning rounding fix.` - ] - }, - { - version: `0.6.20`, - date: `10/21/2019`, - changes: [ - `Fixed application of plasmids with antiplasmids.`, - `Updated description of bleeding effect.`, - `Added achievement for synthesizing an anti-plasmid.`, - `More readable achievement page.` - ] - }, - { - version: `0.6.19`, - date: `10/20/2019`, - changes: [ - `Fixed power errors with hell dimension turrets.`, - `Crate/Container rounding is now applied after spatial reasoning.`, - `Added extra text to the asteroid belt description to call out the necessity of assigning space miners.`, - `Evil Ents can now burn flesh in the smelter.` - ] - }, - { - version: `0.6.18`, - date: `10/16/2019`, - changes: [ - `Swarm Satellite redesign.`, - `Swarm Satellites cost and output decreased.`, - `Control Stations can now control 10/18 swarm satellites.`, - `Iron mining ship swarm plant discount now applies to all swarm plant costs.`, - `New upgrades to increase output of swarm satellites.` - ] - }, - { - version: `0.6.17`, - date: `10/14/2019`, - changes: [ - `"Q" key now works with research queue.`, - `Added settings option to not enforce queue order.`, - `Decay challenge no longer shows the star level for Joyless.`, - `All universe types can now be seen on achievements.`, - `Genus completion is now marked on sentience.`, - `Challenges can now be toggled during evolution.`, - `Inspiration event now gives a temporary buff to all science production.`, - `Added Slave Market for slaver races to buy slaves as an alternative to catching them.`, - `Added Crate/Container storage amount to the build crate/container tooltip.`, - `Added a button to cancel all trade routes for each resource.` - ] - }, - { - version: `0.6.16`, - date: `10/13/2019`, - changes: [ - `Employment is now color coded depending on staffing levels.`, - `GPS satellites now add additional trade routes.`, - `Added stats tracking on reset mechanics used.`, - `Added a message when completing the launch facility.`, - `Added icons to challenges and races in evolution stage to indicate level of challenge completion.` - ] - }, - { - version: `0.6.15`, - date: `10/11/2019`, - changes: [ - `Added a settings option to disable the queue hot key.`, - `The queue hot key is now disabled by default because it breaks the game for some users.` - ] - }, - { - version: `0.6.14`, - date: `10/9/2019`, - changes: [ - `Fixed several bugs with celestial races.`, - `Only one demonic invasion event is now required to reach a hellscape planet.`, - `New city categorization can now be switched off in the settings tab.`, - `Holding Q while clicking a building will now queue it instead of constructing it.` - ] - }, - { - version: `0.6.13`, - date: `10/7/2019`, - changes: [ - `Fixed bioseed reset bug when seeding from a planet without a special property.` - ] - }, - { - version: `0.6.12`, - date: `10/6/2019`, - changes: [ - `Added a hire merc option to fortress, mercs hired here go directly to the fortress.`, - `Default patrol size is now 10 instead of 4.`, - `Adjusted margins in city tab/space tabs to slightly reduce vertical scrolling.`, - `New Tower of Babel flair.` - ] - }, - { - version: `0.6.11`, - date: `10/5/2019`, - changes: [ - `New planetary modifiers: Toxic, Mellow, Rage, Stormy, Ozone, Magnetic, and Trashed.`, - `City Categorization by NotOats.`, - `Chinese Translation.` - ] - }, - { - version: `0.6.10`, - date: `10/1/2019`, - changes: [ - `Fixed issue with gene editing costing the wrong type of Plasmid.`, - `Fixed Bone label in Graphene plant.`, - `Fixed issue with Plywood not unlocking when removing Kindling Kindred trait.` - ] - }, - { - version: `0.6.9`, - date: `9/30/2019`, - changes: [ - `Antimatter Universe.`, - `Bleeding Effect line of CRISPR upgrades, requires Anti-Plasmids to unlock.`, - `Balorg can now unlock queues.`, - `Fixed aria labels in mass ejector.` - ] - }, - { - version: `0.6.8`, - date: `9/24/2019`, - changes: [ - `Queue reordering no longer swaps the dragged item with the one in the target spot.`, - `Added timers to research queue.`, - `Cost adjustments are now applied to queue timers increasing their accuracy.` - ] - }, - { - version: `0.6.7`, - date: `9/24/2019`, - changes: [ - `Cath windmills now generate power instead of just looking pretty.`, - `Fixed Spanish strings file, language now loads again.` - ] - }, - { - version: `0.6.6`, - date: `9/23/2019`, - changes: [ - `Added special tech tree to sacrificial altar to boost its effectiveness per sacrifice.`, - `Restored windmills to cath.`, - `Challenge Multiplier Dark Energy rounding calculation fixed.`, - `Added extra information to blackhole description when it reaches destabilization point.`, - `Added a warning to stabilize option that it will reset your exotic matter.` - ] - }, - { - version: `0.6.5`, - date: `9/21/2019`, - changes: [ - `Fixed display issue with frenzy appearing to never drop below 1%.`, - `Updated the tooltip values on farms and farmers to include the hellscape penalty.`, - `Fixed Evil Ents so they start with Gather Stone option.` - ] - }, - { - version: `0.6.4`, - date: `9/19/2019`, - changes: [ - `Fixed double windmill issue with evil universe races.`, - `Spanish language updates.`, - `Added warnings to challenge modes in micro universe that you will not receive credit.` - ] - }, - { - version: `0.6.3`, - date: `9/17/2019`, - changes: [ - `Restored broken perks.` - ] - }, - { - version: `0.6.2`, - date: `9/17/2019`, - changes: [ - `Bug Fixes.` - ] - }, - { - version: `0.6.1`, - date: `9/17/2019`, - changes: [ - `Universe Update, explore ~~ 4 ~~ 3 new universe types:.`, - `Heavy Gravity Universe.`, - `Micro Universe.`, - `Evil Universe.`, - `New Decay Challenge.`, - `Antimatter universe is still forming, coming soon.`, - `Dark Energy effects added, unique per universe type.`, - `New Plasmid scaling formula.`, - `Blackhole mass added to Stellar Engine.`, - `Stuff I probably forgot about.` - ] - }, - { - version: `0.5.18`, - date: `9/11/2019`, - changes: [ - `Spanish translation provided by RanaPeluda.`, - `Fixed Ent fanaticism.`, - `Modals are no longer unnecessarily wide.`, - `Smelter modal now shows the fuel production for each type.` - ] - }, - { - version: `0.5.17`, - date: `9/5/2019`, - changes: [ - `Mantis Frail trait replaced with new Cannibalize trait, eat your own citizens for buffs.`, - `The Fortress will now remember the number of troops assigned to it and attempt to keep it at that level.` - ] - }, - { - version: `0.5.16`, - date: `9/3/2019`, - changes: [ - `Made some adjustments to Soul Gem drop odds.`, - `Added a message when you discover your first Soul Gem.` - ] - }, - { - version: `0.5.15`, - date: `9/1/2019`, - changes: [ - `Portuguese translations updated by Rodrigodd.` - ] - }, - { - version: `0.5.14`, - date: `9/1/2019`, - changes: [ - `Buildings will no longer be added to the queue if holding down a multiplier key.`, - `Fixed a problem with smelters that could cause their production to become stuck in a high state.`, - `Fixed initial display state of containers in storage management tab.` - ] - }, - { - version: `0.5.13`, - date: `8/30/2019`, - changes: [ - `New layout for selecting challenge genes/modes during end of evolution stage.`, - `Fixed bug with low support elerium miners that caused them to miscalculate miner outputs.`, - `Added a threat level warning to fortress.` - ] - }, - { - version: `0.5.12`, - date: `8/30/2019`, - changes: [ - `Pacifist Achievement is now unlocked by unifying without ever initiating an attack.` - ] - }, - { - version: `0.5.11`, - date: `8/28/2019`, - changes: [ - `Fixed issue with nucleus DNA bonus not applying from correct cell stage evolutions.`, - `Building timers now count down without refreshing the popover.`, - `Long action titles will now wrap instead of overflowing the button.`, - `Fixed a bug that could cause the research queue to clear items from the building queue.` - ] - }, - { - version: `0.5.10`, - date: `8/28/2019`, - changes: [ - `Fixed bug with some construction projects not refreshing the page after being built with the queue.`, - `Space exploration missions can no longer be queued more than once at a time.`, - `One off projects are now removed from the queue if completed manually.`, - `Queue timers now track crafted resources.`, - `Demonic attractor soul gem drop rate increase buffed from 5% to 8%.`, - `Updated some fortress related tooltips.`, - `Mousing over the star rating in the top left corner now lists which challenges are active.`, - `Time until ready added to unaffordable actions.` - ] - }, - { - version: `0.5.9`, - date: `8/27/2019`, - changes: [ - `Active build queues wiped due do internal game breaking format change.` - ] - }, - { - version: `0.5.8`, - date: `8/27/2019`, - changes: [ - `Construction timers added to build queue.`, - `Construction and research completed by queues are now logged to the message list.`, - `Improved drag and drop support for queues.` - ] - }, - { - version: `0.5.7`, - date: `8/25/2019`, - changes: [ - `Drag support for queue sorting.`, - `Fixed resource display bug that occurred when buying a mass ejector.`, - `Minor traits now show the number of ranks from phage or genes spent.` - ] - }, - { - version: `0.5.6`, - date: `8/23/2019`, - changes: [ - `Building queue now works in space.`, - `Added a separate research queue.`, - `Fixed rock quarry awarding 4% stone bonus instead of the stated 2%.`, - `Fixed rendering bugs with the blackhole and mass ejector.` - ] - }, - { - version: `0.5.5`, - date: `8/22/2019`, - changes: [ - `Bug Fixes for queueing system.` - ] - }, - { - version: `0.5.4`, - date: `8/22/2019`, - changes: [ - `Building Queue system v1.0.`, - `Urban Planning, Zoning Permits, and Urbanization queue related techs.`, - `New CRISPR upgrades for enhanced queueing.` - ] - }, - { - version: `0.5.3`, - date: `8/20/2019`, - changes: [ - `Stats and Achievements separated into separate sub tabs.`, - `Disruptor rifle upgrade for soldiers.`, - `Mass Ejector can no longer be unlocked before completing the Stellar Engine.` - ] - }, - { - version: `0.5.2`, - date: `8/20/2019`, - changes: [ - `Fixed misnamed mantis trait key.`, - `Fixed Iron smelter paying out 10x intended amount.` - ] - }, - { - version: `0.5.1`, - date: `8/20/2019`, - changes: [ - `Disappearing craftsman fix.` - ] - }, - { - version: `0.5.0`, - date: `8/19/2019`, - changes: [ - `Interstellar space is now unlockable.`, - `Interdimensional travel is now unlockable.`, - `New management tab for Crates & Containers.`, - `Power generation breakdown.`, - `Improved resource breakdown layout.`, - `Leathery trait buffed.`, - `Chameleon trait now adds a combat rating bonus.`, - `Optimistic now also applies to the minimum morale rating.`, - `Smarter Smelter fuel switching.`, - `New CRISPR unlocks.` - ] - }, - { - version: `0.4.42`, - date: `8/16/2019`, - changes: [ - `Fixed some screen reader issues with the crate modal launch button.`, - `Added a warning to the Genetic Dead End challenge if you are on a hellscape planet.` - ] - }, - { - version: `0.4.41`, - date: `8/15/2019`, - changes: [ - `Joyless Challenge.`, - `??? - Nothing to see here, move along.` - ] - }, - { - version: `0.4.40`, - date: `8/9/2019`, - changes: [ - `Changed No Crispr gene into the Weak Crispr gene.` - ] - }, - { - version: `0.4.39`, - date: `8/6/2019`, - changes: [ - `Genetic Disaster Challenge.` - ] - }, - { - version: `0.4.38`, - date: `8/5/2019`, - changes: [ - `Special action icon is now properly flagged as a button.` - ] - }, - { - version: `0.4.37`, - date: `7/31/2019`, - changes: [ - `ARIA Improvements for Factory and A.R.P.A.` - ] - }, - { - version: `0.4.36`, - date: `7/27/2019`, - changes: [ - `Slow and Hyper traits can now combine.`, - `Added new achievements: Creator & Explorer.`, - `Added perks for Mass Extinction, Creator, and Explorer.` - ] - }, - { - version: `0.4.35`, - date: `7/25/2019`, - changes: [ - `Centaur can now pick Fanaticism.`, - `Challenge multiplier is now applied to phage gain.` - ] - }, - { - version: `0.4.34`, - date: `7/23/2019`, - changes: [ - `Fixed SR descriptions of buildings that lack affordability.`, - `Fixed resource highlighting of buildings that have zero costs.` - ] - }, - { - version: `0.4.33`, - date: `7/23/2019`, - changes: [ - `Fixes for Ent Fanaticism not releasing some resources.`, - `Aria improvements for the smelter modal.`, - `Improved screen reader resource affordability description of buildings/research.`, - `Resource highlighting on structures.` - ] - }, - { - version: `0.4.32`, - date: `7/21/2019`, - changes: [ - `Balorg slaver trait added.`, - `Ziggurat bonus now applies to the oil extractor.`, - `Geology Oil rich/poor no longer applies to oil extractor.`, - `Added resource alternate row coloring.`, - `Added an affordability hint for screen readers.`, - `Fixed some bugs with awarding a random minor trait from fanaticism.`, - `Dimensional Compression now charges the correct cost.` - ] - }, - { - version: `0.4.31`, - date: `7/20/2019`, - changes: [ - `Extreme Dazzle casino upgrade.`, - `Metallurgist minor trait, buffs alloy.`, - `Gambler minor trait, buffs casinos.`, - `A.R.P.A. projects now use resource approximations for large numbers.`, - `Cement Factory renamed to Cement Plant to reduce confusion with the regular Factory.`, - `Key multipliers now work inside the factory modal.`, - `Imps and Balorg now have access to advanced crafting tech.`, - `Imps and Balorg now have access to windmills.`, - `Balorg can now set their taxes below 10% and above 30%.` - ] - }, - { - version: `0.4.30`, - date: `7/19/2019`, - changes: [ - `Portuguese translation by Rodrigodd.`, - `DNA Sequencer upgrade.`, - `Gene Assembly cost increase to 200k.`, - `Synthesis now applies a bonus to auto crafted genes.`, - `Ambidextrous buffed.`, - `Ambidextrous now has a greater effect on auto crafting.` - ] - }, - { - version: `0.4.29`, - date: `7/18/2019`, - changes: [ - `Genetic modification system, customize your race with minor traits.`, - `Shotgun Sequencing upgrade for genome research.`, - `Randomly gained minor traits will no longer stack unless they have all been unlocked.`, - `Genes are now gained from random mutations.`, - `Synthesis line of CRISPR upgrades.`, - `Satellite and Observatory cost reductions.`, - `Fibroblast minor trait.`, - `Iridium is now unlocked by constructing an iridium mine instead of the moon base.`, - `Helium-3 is now unlocked by constructing a helium-3 mine instead of the moon base.`, - `Genome sequencing now defaults to on when first unlocked.` - ] - }, - { - version: `0.4.28`, - date: `7/16/2019`, - changes: [ - `Added missing hellscape achievement.`, - `Fixed spatial reasoning and phage interaction.`, - `Fixed warmonger unlocking requirement.` - ] - }, - { - version: `0.4.27`, - date: `7/13/2019`, - changes: [ - `Added special action description buttons for screen readers.` - ] - }, - { - version: `0.4.26`, - date: `7/12/2019`, - changes: [ - `Unlocked CRISPR upgrades are now listed as perks.`, - `Control/Shift/Alt click now works with power on and off buttons.` - ] - }, - { - version: `0.4.25`, - date: `7/11/2019`, - changes: [ - `Quantum Manufacturing upgrade.`, - `Quantum Swarm cost lowered from 465k to 450k.` - ] - }, - { - version: `0.4.24`, - date: `7/10/2019`, - changes: [ - `Thermomechanics upgrade for alloy production.`, - `Ziggurats unlockable via ancients upgrade.`, - `Cement factory has a more clear label in breakdown lists.` - ] - }, - { - version: `0.4.23`, - date: `7/7/2019`, - changes: [ - `Resources at the millions breakpoint and above are now shown with 2 significant decimal points.`, - `Reduced the creep cost of Observatory.`, - `Reduced the base knowledge cost of Observatory.`, - `Reduced the Brick cost of Boot Camps.`, - `Evil has been unleashed.` - ] - }, - { - version: `0.4.22`, - date: `7/6/2019`, - changes: [ - `Fixed issue with having exactly 251 Plasmids that would break your resources.`, - `Fixed issue with planet generation that caused it to always use the same seed.` - ] - }, - { - version: `0.4.21`, - date: `7/6/2019`, - changes: [ - `Fixed unlocking of mass extinction achievement.`, - `Fixed potential fuel consumption bug with power plants.` - ] - }, - { - version: `0.4.20`, - date: `7/4/2019`, - changes: [ - `Phage can now be earned from space resets, phage extends the plasmid diminishing return breakpoint.`, - `Dimensional Warping crispr upgrade, applies phages to spatial reasoning.`, - `Added special windmill tech for carnivore path to equalize power grid.`, - `Space Stations now give 5 Elerium storage instead of 4.` - ] - }, - { - version: `0.4.19`, - date: `7/2/2019`, - changes: [ - `Fixed bugs with the hell planet and gas planet survey mission.`, - `Fixed bug that prevented the planet description tooltip from triggering.`, - `Aluminium now properly requires you to build a metal refinery.` - ] - }, - { - version: `0.4.18`, - date: `7/1/2019`, - changes: [ - `Planets choice now has more depth to it, each planet can be poor or rich in various resource types.`, - `A mineral poor planet suffers anywhere from 1 to 10% penalty for that resource.`, - `A mineral rich planet gains anywhere from 1 to 20% bonus for that resource.`, - `The fire event no longer triggers for aquatic races.`, - `The first interstellar probe now contributes to the number of potential target worlds.`, - `All interstellar space probe costs are now cheaper.` - ] - }, - { - version: `0.4.17`, - date: `6/29/2019`, - changes: [ - `Added indication of current challenge level to top bar.`, - `Added H tags for accessibility.` - ] - }, - { - version: `0.4.16`, - date: `6/28/2019`, - changes: [ - `New Hospital, heals wounded soldiers faster.`, - `New Boot Camp, train new soldiers quicker.`, - `Lowered research cost of Mass Driver from 170k to 160k.`, - `Lowered Iridium cost of Mass Drivers.`, - `Updated Mass Extinction unlock requirement.` - ] - }, - { - version: `0.4.15`, - date: `6/28/2019`, - changes: [ - `Global bonuses are now multiplicative instead of additive.`, - `Decreased base Elerium cost of Exotic Lab by 4.`, - `Creative trait decreases cost creep instead of providing a flat discount.`, - `ARPA 100% button replaced with remaining percentage value.`, - `New experimental military advice.` - ] - }, - { - version: `0.4.14`, - date: `6/27/2019`, - changes: [ - `Statues now cost Aluminium instead of Wrought Iron.`, - `Nav Beacon now costs Aluminium instead of Iron.`, - `Helium-3 Mine now costs Aluminium instead of Copper.`, - `Elerium Mining Ship now costs Titanium instead of Iridium.`, - `Iron Mining Ship now costs Aluminium instead of Titanium.`, - `Dimension Compression upgrade now works correctly.`, - `Aluminium can now be looted from battle.` - ] - }, - { - version: `0.4.13`, - date: `6/26/2019`, - changes: [ - `Aluminium resource added to the game, research Bayer Process to unlock Metal Refinery which in turn unlocks Aluminum.`, - `New Metal Refinery structure for producing Aluminium.`, - `Alloy is now made out of Aluminium and Copper.`, - `Sheet Metal is now made out of Aluminium.`, - `Oil Powerplant and Propellant Depot now cost Aluminium instead of Steel.`, - `Some minor accessibility improvements.` - ] - }, - { - version: `0.4.12`, - date: `6/24/2019`, - changes: [ - `Blackhole achievement now gives a permanent perk for completing it, the perk strength depends on the achievement level.`, - `Fixed issue with event timer being frozen after changing planets.`, - `Fixed the unlocking of upgraded versions of some achievements.`, - `Cost descriptions now show approximations above 10,000.` - ] - }, - { - version: `0.4.11`, - date: `6/24/2019`, - changes: [ - `Re-evaluated starvation breakpoint.`, - `Added Infested Terran achievement.`, - `Titanium price is now reset after unlocking Hunter Process.`, - `Resources now have a 25% chance of their market price changing per day, up from 10%.` - ] - }, - { - version: `0.4.10`, - date: `6/23/2019`, - changes: [ - `Fixed stats tracking on demonic invasions so it actually tracks new invasions.` - ] - }, - { - version: `0.4.9`, - date: `6/23/2019`, - changes: [ - `Fabrication facilities now increase craftsman cap.`, - `Added stats tracking on demonic invasions.`, - `Detail Oriented buffed to 50% from 33%.`, - `Rigorous buffed to 100% from 66%.`, - `Crafting bonus now shown for each resource.`, - `Temple Faith bonus now applies to crafting in no plasmid challenge mode.`, - `Mastery bonus now applies to crafting.` - ] - }, - { - version: `0.4.8`, - date: `6/22/2019`, - changes: [ - `Fixed a bug that removed MAD when achieving unification.`, - `Fixed missing options in evolution stage with picking avians after space reset.` - ] - }, - { - version: `0.4.7`, - date: `6/21/2019`, - changes: [ - `Activating challenge genes now provide a bonus to the number of plasmids earned.` - ] - }, - { - version: `0.4.6`, - date: `6/21/2019`, - changes: [ - `Reduced Nano Tube and Neutronium costs of bioseeder ship.`, - `Reduced Mythril cost of Space Probes.` - ] - }, - { - version: `0.4.5`, - date: `6/19/2019`, - changes: [ - `Mastery Bonus now unlockable in CRISPR.`, - `Fixed bug with elerium mining that could cause negative mining when you lacked asteroid miners.`, - `Fixed low power warning not clearing when you have no buildings active.`, - `Fixed Sporgar label of Cottages in Steel & Mythril Beams research.`, - `Gene Mutation research will no longer turn off when you run out of knowledge, instead it will pause.`, - `Human creative trait buffed from 2% to 5%.`, - `Troll regenerative trait buffed to heal 4 wounded per day instead of 2.`, - `Ogre tough trait buffed to 25% from 10%.`, - `Gecko optimistic trait buffed to 10% from 2%.`, - `Arraak resourceful trait buffed from 5% to 10%.`, - `Dracnid hoarder trait buffed from 10% to 20%.`, - `Shroomi toxic trait buffed from 10% to 25%.`, - `Wolven pack mentality trait now applies to apartments.`, - `Reduced Nano Tube cost of Mining Drones.` - ] - }, - { - version: `0.4.4`, - date: `6/18/2019`, - changes: [ - `Matter compression now applies to Wharves.`, - `Xenophobia now applies to Wharves.`, - `Plasmids earned by mutation now apply to no plasmid challenge run.`, - `Reduced Nano Tube cost of Mining Drones.` - ] - }, - { - version: `0.4.3`, - date: `6/17/2019`, - changes: [ - `Challenge mode achievement tracking.`, - `Vocational Training for craftsman.`, - `Spelling and grammar fixes.`, - `Fixed incorrect reject unity reward text.` - ] - }, - { - version: `0.4.2`, - date: `6/16/2019`, - changes: [ - `Added some clarification to breakdown of stress.` - ] - }, - { - version: `0.4.1`, - date: `6/16/2019`, - changes: [ - `Fixed a bug with factories converted from some pre 0.4.0 save files.` - ] - }, - { - version: `0.4.0`, - date: `6/16/2019`, - changes: [ - `Space reset option, control the destiny of your next race.`, - `Challenge Modes.`, - `New Stuff to discover.`, - `New Achievements to unlock.`, - `Added missing Cyclops racial trait.`, - `World Domination, maybe.`, - `Added soft reset option.` - ] - }, - { - version: `0.3.12`, - date: `6/11/2019`, - changes: [ - `Fixed bug with riot event that caused it to trigger on high morale instead of low morale.` - ] - }, - { - version: `0.3.11`, - date: `6/10/2019`, - changes: [ - `The Gas Moon and the Dwarf planets are now accessible.`, - `New technologies based on new discoveries made in deep space.`, - `Wharves can now be unlocked after discovering oil.`, - `There is now an alternative method of unlocking steel.`, - `Night Theme updated, popovers are no longer bright.`, - `Trade route tooltips now include money being imported or exported.`, - `New crispr upgrades for crafting.`, - `Warmonger achievement requirement lowered from 10% to 8%.` - ] - }, - { - version: `0.3.10`, - date: `6/9/2019`, - changes: [ - `Added code to fix peculiar failed space launch game state.` - ] - }, - { - version: `0.3.9`, - date: `6/8/2019`, - changes: [ - `New official Evolve [Discord](https://discordapp.com/invite/dcwdQEr).` - ] - }, - { - version: `0.3.8`, - date: `6/7/2019`, - changes: [ - `Fixed a problem with negative craftsman counts that could result from craftsman dying.` - ] - }, - { - version: `0.3.7`, - date: `6/6/2019`, - changes: [ - `Warmongering is now tracked and high casualties may impact morale.`, - `Depleting the mercenary pool will temporarily increase their cost.`, - `Three new achievements related to war.` - ] - }, - { - version: `0.3.6`, - date: `6/5/2019`, - changes: [ - `Fixed issue with production breakdowns not showing when income was only produced by trade.`, - `Fixed issue that prevented affordability check from refreshing on space missions.` - ] - }, - { - version: `0.3.5`, - date: `6/5/2019`, - changes: [ - `Mythril Craftsman now unlock correctly.`, - `Fixed a bug that could pause the game if you ran out of Titanium.` - ] - }, - { - version: `0.3.4`, - date: `6/4/2019`, - changes: [ - `The Asteroid Belt is now open for business.`, - `Robotics Upgrades.`, - `Automation renamed to Machinery.`, - `Assembly Line upgrade for factory.` - ] - }, - { - version: `0.3.3`, - date: `6/3/2019`, - changes: [ - `New Orbit Structure: Navigation Beacon.`, - `New Red Planet Structures: Space Control Tower and Space Factory.`, - `Reduced number of monuments required to unlock tourism from 4 to 2.`, - `Cement plant workers now round their contribution to 2 decimal places.`, - `Red planet mining now correctly attributes to the red planet in breakdowns.` - ] - }, - { - version: `0.3.2`, - date: `6/3/2019`, - changes: [ - `Fixed bug that would let you launch the space missions without the proper resources, this would corrupt your game file and break the game.`, - `Added code to detect games corrupted by the previous bug and fix them.`, - `Fixed Fanaticism bug that wouldn't release lumberjacks when you have ent gods.` - ] - }, - { - version: `0.3.1`, - date: `6/3/2019`, - changes: [ - `Added building check redundancy to auto correct game states that shouldn't occur anyway.` - ] - }, - { - version: `0.3.0`, - date: `6/2/2019`, - changes: [ - `Space V1 Update.`, - `This opens the first steps into space exploration, more to come... this is not the end.`, - `Rebalanced storage caps to help the game feel more idle friendly.` - ] - }, - { - version: `0.2.70`, - date: `6/2/2019`, - changes: [ - `Fixed bug when picking Fanaticism with cath gods that wouldn't release your farmers.`, - `Fixed bug when upgrading weapon technology that wouldn't immediately show the increase in army rating.` - ] - }, - { - version: `0.2.69`, - date: `5/26/2019`, - changes: [ - `Fixed bug which could let you get free barn or warehouse upgrade by essentially skipping over the tech.`, - `Added aria button roles to many button like elements that were not technically buttons.` - ] - }, - { - version: `0.2.68`, - date: `5/26/2019`, - changes: [ - `Fixed bug with Rock Quarry that prevented the 2% bonus from working unless you had electricity unlocked.` - ] - }, - { - version: `0.2.67`, - date: `5/24/2019`, - changes: [ - `Revamp of farmer, lumberjack, and quarry worker jobs. These govern the most basic materials produced and can now assign as many workers as you like to these positions.`, - `Farms now directly produce food instead of determining farmer cap.`, - `Lumber Yards now increase lumber production instead of governing lumberjack cap.`, - `Rock Quarry now increase stone production instead of governing quarry worker cap.`, - `Sawmill powered on bonus reduced from 5% to 4%.`, - `Rock Quarry powered on bonus reduced from 5% to 4%.`, - `Stock Exchanges no longer cost Knowledge.`, - `Fixed a display bug that could cause farmers to falsely show they produced more food than they actual did.` - ] - }, - { - version: `0.2.66`, - date: `5/22/2019`, - changes: [ - `Added alternate row coloring to the market to help distinguish rows.` - ] - }, - { - version: `0.2.65`, - date: `5/21/2019`, - changes: [ - `Sporgar race redesigned into a parasitic race that spreads through infecting victims.` - ] - }, - { - version: `0.2.64`, - date: `5/20/2019`, - changes: [ - `Currency is now required before unlocking Basic Storage.`, - `Primitive Axes are no longer gated behind Basic Storage.`, - `Foundry now requires Metal Working to unlock and no longer requires Cement.`, - `Research tab now defaults back to new when resetting.`, - `Fixed issue with not being able to buy something if you had consumption on a resource and the cost was the same as your max capacity.`, - `Fixed issue with max affordability check not refreshing on evolution stage.`, - `Experimental Red-Green color blind theme.` - ] - }, - { - version: `0.2.63`, - date: `5/20/2019`, - changes: [ - `Fixed an issue that accidentally set the default tax rate to 2% instead of 20% for new games.` - ] - }, - { - version: `0.2.62`, - date: `5/19/2019`, - changes: [ - `Tax system revamped. Taxes can now be adjusted more granularly and effect morale instead of production.`, - `Cement is now a requirement for theology since cement is needed for temples.` - ] - }, - { - version: `0.2.61`, - date: `5/19/2019`, - changes: [ - `Every genus type now has its own evolution path.` - ] - }, - { - version: `0.2.60`, - date: `5/18/2019`, - changes: [ - `Rescaled crate/container volumes. There are now substantially less crates/containers but they do a lot more per crate/container.`, - `Spatial Reasoning now correctly applies to crates & containers.`, - `Increased base value of several major storage facilities.`, - `Added storage timers.`, - `A.R.P.A. costs in popover now update their affordability check.`, - `Buildings and Research that can not be afforded due to low capacity are now marked in red text.` - ] - }, - { - version: `0.2.59`, - date: `5/17/2019`, - changes: [ - `Added additional validation to ensure save strings belong to evolve before importing.`, - `Fixed army rating display when rating doesn't calculate to a whole number.`, - `Fixed listing order of some resources.`, - `Smelter Iron bonus breakdown fixed.`, - `Added Selenophobia to breakdown lists.` - ] - }, - { - version: `0.2.58`, - date: `5/15/2019`, - changes: [ - `Settings option to disable multiplier keys.` - ] - }, - { - version: `0.2.57`, - date: `5/15/2019`, - changes: [ - `Added labor validation to coal miners.`, - `Key Multipliers now work with job and trade route assignment.` - ] - }, - { - version: `0.2.56`, - date: `5/15/2019`, - changes: [ - `Added +- symbols to trade route to distinguish import vs export.` - ] - }, - { - version: `0.2.55`, - date: `5/14/2019`, - changes: [ - `Manually crafting resources now gets all the same bonuses as auto crafting.`, - `Fixed Recombination crispr upgrade.`, - `Death limits added to each war campaign level.`, - `War assessment added for each war campaign level.` - ] - }, - { - version: `0.2.54`, - date: `5/13/2019`, - changes: [ - `Uranium Breakdown Fixes.` - ] - }, - { - version: `0.2.53`, - date: `5/13/2019`, - changes: [ - `Breakdown Accuracy Enhancements.`, - `Some Kindling Kindred costs reduced.`, - `Fixed bug related to Fanaticism and Ent gods with foundry workers assigned to make plywood.`, - `Plasmid bonus now applies to the sundial.`, - `Fixed some spelling errors.` - ] - }, - { - version: `0.2.52`, - date: `5/11/2019`, - changes: [ - `Completed research can now be viewed on a separate tab under research.`, - `Removed Plywood requirement from Stock Exchange for players with Kindling Kindred trait.`, - `Fixed a CSS issue in the A.R.P.A. projects tab.` - ] - }, - { - version: `0.2.51`, - date: `5/11/2019`, - changes: [ - `University starts slightly cheaper.`, - `Added Spatial Superiority crispr upgrade.`, - `Added Spatial Supremacy crispr upgrade.`, - `Exporting a save string now automatically selects the text and copies it to the clipboard.` - ] - }, - { - version: `0.2.50`, - date: `5/10/2019`, - changes: [ - `Added new capacity breakdowns for various resources.` - ] - }, - { - version: `0.2.49`, - date: `5/10/2019`, - changes: [ - `Added changelog link to version listing.`, - `Added protection against loading a corrupt save string.`, - `Greedy trait is now less greedy.`, - `Spelling error fixes.` - ] - }, - { - version: `0.2.48`, - date: `5/8/2019`, - changes: [ - `Resources that are at greater than 99% capacity now change color to indicate they are at cap.`, - `Attacks from rival cities should no longer cause more wounded soldiers than you have.`, - `Assigning craftsman when no citizens are free will no longer take the labor from another job.` - ] - }, - { - version: `0.2.47`, - date: `5/8/2019`, - changes: [ - `Gluttony trait lowered to 10% from 25% .`, - `High Metabolism trait lowered to 5% from 10% .`, - `Fixed Sheet Metal not being added to craftsman list when unlocked.` - ] - }, - { - version: `0.2.46`, - date: `5/8/2019`, - changes: [ - `The 5% library bonus was only applying to scientists which was not intended. This now applies to the sundial and professors as well.` - ] - }, - { - version: `0.2.45`, - date: `5/8/2019`, - changes: [ - `Fixed an issue that allowed you to get extra benefits from under-powered wardenclyffe towers and biolabs.` - ] - }, - { - version: `0.2.44`, - date: `5/8/2019`, - changes: [ - `Fixed Key Multipliers getting stuck down.` - ] - }, - { - version: `0.2.43`, - date: `5/7/2019`, - changes: [ - `Fixed bug that could cause player to get free extra crafted resources when using the +5 option.`, - `Reordered buildings in Village tab to group them more logically.` - ] - }, - { - version: `0.2.42`, - date: `5/7/2019`, - changes: [ - `Fixed a bug that was causing soldiers to become immortal.`, - `Fixed some bugs with morale that caused some weather patterns to apply a different value than was reported.`, - `Added weather to Food breakdown.` - ] - }, - { - version: `0.2.41`, - date: `5/7/2019`, - changes: [ - `Added a 5% bonus to global knowledge production on libraries.` - ] - }, - { - version: `0.2.40`, - date: `5/7/2019`, - changes: [ - `The Hivemind trait no longer applies to farmers as this was especially punishing.` - ] - }, - { - version: `0.2.39`, - date: `5/7/2019`, - changes: [ - `Evolution 2.0: Redid the evolution stage of the game to make it feel less tedious and like it matters more to the next phase of the game.`, - `Fixed a bug that has the intended effects of Pessimism and Optimism traits swapped.` - ] - }, - { - version: `0.2.38`, - date: `5/6/2019`, - changes: [ - `First public release.` - ] - } - ]; - function getTopChange(elm) { - let index2 = 0; - for (index2 = 0; index2 < changeList.length; index2++) { - if (!changeList[index2].hasOwnProperty("revision")) { - break; - } - } - for (let idx = index2; idx >= 0; idx--) { - elm.append(`

    v${changeList[idx].version}${changeList[idx].hasOwnProperty("revision") ? changeList[idx].revision : ""}

    ${changeList[idx].date}
    `); - for (let i = 0; i < changeList[idx].changes.length; i++) { - elm.append(`
    ${changeList[idx].changes[i]}
    `); - } - } - return elm; - } - - // src/debug.js - function enableDebug() { - if (global.settings.expose) { - window.evolve = { - actions: deepClone(actions), - races: deepClone(races), - traits: deepClone(traits), - tradeRatio: deepClone(tradeRatio), - craftCost: deepClone(craftCost(true)), - atomic_mass: deepClone(atomic_mass), - f_rate: deepClone(f_rate), - checkAffordable: deepClone(checkAffordable), - adjustCosts: deepClone(adjustCosts), - armyRating: deepClone(armyRating), - tradeBuyPrice: deepClone(tradeBuyPrice), - tradeSellPrice: deepClone(tradeSellPrice), - fuel_adjust: deepClone(fuel_adjust), - int_fuel_adjust: deepClone(int_fuel_adjust), - alevel: deepClone(alevel), - messageQueue: deepClone(messageQueue), - loc: deepClone(loc), - shipCosts: deepClone(shipCosts), - updateDebugData: deepClone(updateDebugData), - global: {}, - breakdown: {} - }; - } - } - function updateDebugData() { - if (global.settings.expose) { - window.evolve.global = deepClone(global); - window.evolve.craftCost = deepClone(craftCost(true)), window.evolve.breakdown = deepClone(breakdown); - } - } - - // src/main.js - { - $(document).ready(function() { - if (!window.matchMedia) - return; - var current = $('head > link[rel="icon"][media]'); - $.each(current, function(i, icon) { - var match = window.matchMedia(icon.media); - function swap() { - if (match.matches) { - current.remove(); - current = $(icon).appendTo("head"); - } - } - match.addListener(swap); - swap(); - }); - }); - } - var multitab = false; - window.addEventListener("storage", (e) => { - if (multitab === false) { - messageQueue(loc(`multitab_warning`), "danger", true); - } - multitab = true; - }); - if (global.settings.expose) { - enableDebug(); - } - var quickMap = { - showCiv: 1, - showCivic: 2, - showResearch: 3, - showResources: 4, - showGenetics: 5, - showAchieve: 6, - settings: 7 - }; - $(document).keydown(function(e) { - e = e || window.event; - let key = e.key || e.keyCode; - Object.keys(keyMap).forEach(function(k) { - if (key === global.settings.keyMap[k]) { - keyMap[k] = true; - } - }); - if (!$(`input`).is(":focus") && !$(`textarea`).is(":focus")) { - Object.keys(quickMap).forEach(function(k) { - if (key === global.settings.keyMap[k] && global.settings.civTabs !== 0 && (k === "settings" || global.settings[k])) { - if (global.settings.civTabs !== quickMap[k]) { - global.settings.civTabs = quickMap[k]; - } else { - let s = global.settings; - let tabName = null; - let tabList = null; - switch (quickMap[k]) { - case quickMap.showCiv: - tabName = "spaceTabs"; - tabList = [s.showCity, s.showSpace, s.showDeep, s.showGalactic, s.showPortal, s.showOuter, s.showTau, s.showEden]; - break; - case quickMap.showCivic: - tabName = "govTabs"; - tabList = ["Government", s.showIndustry, s.showPowerGrid, s.showMil, s.showMechLab, s.showShipYard, s.showPsychic, s.showWish]; - break; - case quickMap.showResearch: - tabName = "resTabs"; - tabList = ["New", "Completed"]; - break; - case quickMap.showResources: - tabName = "marketTabs"; - tabList = [s.showMarket, s.showStorage, s.showEjector, s.showCargo, s.showAlchemy]; - break; - case quickMap.showGenetics: - s = global.settings.arpa; - tabName = "arpaTabs"; - tabList = [s.physics, s.genetics, s.crispr, s.blood]; - break; - case quickMap.showAchieve: - tabName = "statsTabs"; - tabList = ["Stats", "Achievements", "Perks"]; - break; - case quickMap.settings: - default: - tabName = ""; - tabList = []; - break; - } - for (let i = 1; i < tabList.length; i += 1) { - let next = (s[tabName] + i) % tabList.length; - if (tabList[next]) { - s[tabName] = next; - break; - } - } - } - if (!global.settings.tabLoad) { - loadTab(global.settings.civTabs); - } - } - }); - } - }); - $(document).keyup(function(e) { - e = e || window.event; - let key = e.key || e.keyCode; - Object.keys(keyMap).forEach(function(k) { - if (key === global.settings.keyMap[k]) { - keyMap[k] = false; - } - }); - }); - $(document).mousemove(function(e) { - e = e || window.event; - Object.keys(global.settings.keyMap).forEach(function(k) { - switch (global.settings.keyMap[k]) { - case "Shift": - case 16: - keyMap[k] = e.shiftKey ? true : false; - break; - case "Control": - case 17: - keyMap[k] = e.ctrlKey ? true : false; - break; - case "Alt": - case 18: - keyMap[k] = e.altKey ? true : false; - break; - case "Meta": - case 91: - keyMap[k] = e.metaKey ? true : false; - break; - } - }); - }); - index(); - var revision = global["revision"] ? global["revision"] : ""; - if (global["beta"]) { - $("#topBar .version > a").html(`v${global.version} Beta ${global.beta}${revision}`); - } else { - $("#topBar .version > a").html("v" + global.version + revision); - } - initMessageQueue(); - if (global.lastMsg) { - Object.keys(global.lastMsg).forEach(function(tag) { - global.lastMsg[tag].reverse().forEach(function(msg) { - messageQueue(msg.m, msg.c, true, [tag], true); - }); - global.lastMsg[tag].reverse(); - }); - } - $(`#msgQueue`).height(global.settings.msgQueueHeight); - $(`#buildQueue`).height(global.settings.buildQueueHeight); - if (global.queue.rename === true) { - updateQueueNames(true); - global.queue.rename = false; - } - global.settings.sPackMsg = save.getItem("string_pack_name") ? loc(`string_pack_using`, [save.getItem("string_pack_name")]) : loc(`string_pack_none`); - if (global.queue.display) { - calcQueueMax(); - } - if (global.r_queue.display) { - calcRQueueMax(); - } - mainVue(); - if (global["new"]) { - messageQueue(loc("new"), "warning", false, ["progress"]); - global["new"] = false; - } - if (global.city["mass_driver"]) { - p_on["mass_driver"] = global.city["mass_driver"].on; - } - if (global.portal["turret"]) { - p_on["turret"] = global.portal.turret.on; - } - if (global.interstellar["starport"]) { - p_on["starport"] = global.interstellar.starport.on; - } - if (global.interstellar["fusion"]) { - int_on["fusion"] = global.interstellar.fusion.on; - } - if (global.interstellar["s_gate"]) { - p_on["s_gate"] = global.interstellar.s_gate.on; - } - if (global.portal["hell_forge"]) { - p_on["hell_forge"] = global.portal.hell_forge.on; - } - if (global.portal["demon_forge"]) { - p_on["demon_forge"] = global.portal.demon_forge.on; - } - if (global.space["sam"]) { - p_on["sam"] = global.space.sam.on; - } - if (global.space["operating_base"]) { - p_on["operating_base"] = global.space.operating_base.on; - support_on["operating_base"] = global.space.operating_base.on; - } - if (global.space["fob"]) { - p_on["fob"] = global.space.fob.on; - } - if (global.tauceti["fusion_generator"]) { - p_on["fusion_generator"] = global.tauceti.fusion_generator.on; - } - if (global.eden["encampment"]) { - p_on["encampment"] = global.eden.encampment.on; - } - if (global.eden["soul_engine"]) { - p_on["soul_engine"] = global.eden.soul_engine.on; - support_on["soul_engine"] = global.eden.soul_engine.on; - } - if (global.eden["corruptor"]) { - p_on["corruptor"] = global.eden.corruptor.on; - } - if (global.eden["ectoplasm_processor"]) { - p_on["ectoplasm_processor"] = global.eden.ectoplasm_processor.on; - support_on["ectoplasm_processor"] = global.eden.ectoplasm_processor.on; - } - if (global.eden["research_station"]) { - p_on["research_station"] = global.eden.research_station.on; - support_on["research_station"] = global.eden.research_station.on; - } - if (global.eden["bunker"]) { - p_on["bunker"] = global.eden.bunker.on; - support_on["bunker"] = global.eden.bunker.on; - } - if (global.eden["spirit_vacuum"]) { - p_on["spirit_vacuum"] = global.eden.spirit_vacuum.on; - } - if (global.eden["spirit_battery"]) { - p_on["spirit_battery"] = global.eden.spirit_battery.on; - } - if (global.city["replicator"] && global.race?.replicator?.pow && global.race?.governor?.config?.replicate?.pow?.on) { - if (Object.values(global.race.governor.tasks || {}).includes("replicate")) { - global.city.replicator.on = 0; - global.city.replicator.count = 0; - global.race.replicator.pow = 0; - } - } - defineJobs(true); - defineResources(); - initTabs(); - buildQueue(); - if (global.race["shapeshifter"]) { - shapeShift(false, true); - } - setupRituals(); - Object.keys(gridDefs()).forEach(function(gridtype) { - powerGrid(gridtype); - }); - resizeGame(); - vBind({ - el: "#race", - data: { - race: global.race, - city: global.city - }, - methods: { - name() { - return flib("name"); - }, - replicate(kw) { - if (global.race.hasOwnProperty("governor") && global.race.governor.hasOwnProperty("tasks") && global.race.hasOwnProperty("replicator") && Object.values(global.race.governor.tasks).includes("replicate") && global.race.governor.config.replicate.pow.on && global.race.replicator.pow > 0) { - return kw + global.race.replicator.pow; - } - return kw; - }, - approx(kw) { - return +kw.toFixed(2); - }, - mRound(m) { - return +m.toFixed(1); - } - } - }); - popover( - "race", - function() { - return typeof races[global.race.species].desc === "string" ? races[global.race.species].desc : races[global.race.species].desc(); - }, - { - elm: "#race > .name" - } - ); - var moraleCap = 125; - popover( - "morale", - function(obj) { - if (global.city.morale.unemployed !== 0) { - let type = global.city.morale.unemployed > 0 ? "success" : "danger"; - obj.popper.append(``); - } - if (global.city.morale.stress !== 0) { - let type = global.city.morale.stress > 0 ? "success" : "danger"; - obj.popper.append(``); - } - let total = 100 + global.city.morale.unemployed + global.city.morale.stress; - Object.keys(global.city.morale).forEach(function(morale) { - if (!["current", "unemployed", "stress", "season", "cap", "potential"].includes(morale) && global.city.morale[morale] !== 0) { - total += global.city.morale[morale]; - let type = global.city.morale[morale] > 0 ? "success" : "danger"; - let value = global.city.morale[morale]; - if (morale === "entertain" && global.civic.govern.type === "democracy") { - let democracy = 1 + govEffect.democracy()[0] / 100; - value /= democracy; - } - let label = {}; - obj.popper.append(``); - if (morale === "entertain" && global.civic.govern.type === "democracy") { - let democracy = govEffect.democracy()[0]; - obj.popper.append(``); - } - } - }); - if (global.city.morale.season !== 0) { - total += global.city.morale.season; - let season = global.city.calendar.season === 0 ? loc("morale_spring") : global.city.calendar.season === 1 ? loc("morale_summer") : loc("morale_winter"); - let type = global.city.morale.season > 0 ? "success" : "danger"; - obj.popper.append(``); - } - if (global.civic.govern.type === "corpocracy") { - let penalty = govEffect.corpocracy()[3]; - total -= penalty; - obj.popper.append(``); - } - if (global.civic.govern.type === "republic") { - let repub = govEffect.republic()[1]; - total += repub; - obj.popper.append(``); - } - if (global.civic.govern.type === "federation") { - let fed = govEffect.federation()[1]; - total += fed; - obj.popper.append(``); - } - let milVal = govActive("militant", 1); - if (milVal) { - total -= milVal; - obj.popper.append(``); - } - if (global.race["cheese"]) { - let raw_cheese = global.stats.hasOwnProperty("reset") ? global.stats.reset + 1 : 1; - let cheese = +(raw_cheese / (raw_cheese + 10) * 11).toFixed(2); - total += cheese; - obj.popper.append(``); - } - if (global.race["motivated"]) { - let boost = Math.ceil(global.race["motivated"] ** 0.4); - total += boost; - obj.popper.append(``); - } - if (global.race["artisan"] && global.civic.craftsman.workers > 0) { - let boost = +(traits.artisan.vars()[2] * global.civic.craftsman.workers).toFixed(2); - total += boost; - obj.popper.append(``); - } - if (global.race["pet"]) { - let change = 1; - if (global.race["catnip"]) { - change = traits.catnip.vars()[0]; - } else if (global.race["anise"]) { - change = traits.anise.vars()[0]; - } - if (global.race["pet"]) { - if (global.race.pet.event > 0) { - if (global.race["catnip"]) { - change += traits.catnip.vars()[0]; - } else if (global.race["anise"]) { - change += traits.anise.vars()[0]; - } else { - change++; - } - } - if (global.race.pet.pet > 0) { - change += global.race.pet.type === "cat" ? global.race["catnip"] ? traits.catnip.vars()[1] : 2 : global.race["anise"] ? traits.anise.vars()[1] : 1; - } else if (global.race.pet.pet < 0) { - change -= global.race.pet.type === "cat" ? global.race["catnip"] ? traits.catnip.vars()[1] : 2 : global.race["anise"] ? traits.anise.vars()[1] : 1; - } - } - if (change !== 0) { - total += change; - let style = change > 0 ? "success" : "danger"; - obj.popper.append(``); - } - } - if (global.race["wishStats"] && global.race.wishStats.fame !== 0) { - total += global.race.wishStats.fame; - if (global.race.wishStats.fame > 0) { - obj.popper.append(``); - } else { - obj.popper.append(``); - } - } - if (global.civic["homeless"]) { - let homeless = global.civic.homeless / 2; - total -= homeless; - obj.popper.append(``); - } - if (global.tech["vax_c"] || global.tech["vax_f"]) { - let drop = global.tech["vax_c"] ? 10 : 50; - total -= drop; - obj.popper.append(``); - } else if (global.tech["vax_s"]) { - let gain = 20; - total += gain; - obj.popper.append(``); - } - if (global.city["tormented"]) { - total -= global.city.tormented; - obj.popper.append(``); - } - if (global.race["wish"] && global.race["wishStats"] && global.race.wishStats.bad > 0) { - let badPress = Math.floor(global.race.wishStats.bad / 75) + 1; - total -= badPress * 5; - obj.popper.append(``); - } - total = +total.toFixed(1); - let container = $(`
    `); - obj.popper.append(container); - container.append(``); - container.append(``); - container.append(``); - return void 0; - }, - { - classes: `has-background-light has-text-dark` - } - ); - popover( - "powerStatus", - function(obj) { - let drain = +(global.city.power_total - global.city.power).toFixed(2); - Object.keys(power_generated).forEach(function(k) { - if (power_generated[k]) { - let gen = +power_generated[k]; - obj.popper.append(``); - } - }); - obj.popper.append(``); - let avail = +global.city.power.toFixed(2); - if (global.city.power > 0) { - obj.popper.append(``); - } else { - obj.popper.append(``); - } - }, - { - classes: `has-background-light has-text-dark` - } - ); - if (global.settings.pause) { - $(`#pausegame`).addClass("pause"); - } else { - $(`#pausegame`).addClass("play"); - } - vBind({ - el: "#topBar", - data: { - city: global.city, - race: global.race, - s: global.settings - }, - methods: { - sign() { - return seasonDesc("sign"); - }, - getAstroSign() { - return seasonDesc("astrology"); - }, - weather() { - return seasonDesc("weather"); - }, - temp() { - return seasonDesc("temp"); - }, - moon() { - return seasonDesc("moon"); - }, - season() { - return seasonDesc("season"); - }, - showUniverse() { - return global.race.universe === "standard" || global.race.universe === "bigbang" ? false : true; - }, - showSim() { - return global["sim"] ? true : false; - }, - atRemain() { - return loc(`accelerated_time`); - }, - pause() { - $(`#pausegame`).removeClass("play"); - $(`#pausegame`).removeClass("pause"); - if (global.settings.pause) { - global.settings.pause = false; - $(`#pausegame`).addClass("play"); - } else { - global.settings.pause = true; - $(`#pausegame`).addClass("pause"); - } - if (!global.settings.pause && !webWorker.s) { - gameLoop("start"); - } - }, - pausedesc() { - return global.settings.pause ? loc("game_play") : loc("game_pause"); - }, - showPet() { - return global.race["pet"] ? true : false; - }, - petPet() { - if (global.race["pet"] && global.race.pet.pet === 0) { - let outcome = global.race.pet.type === "cat" ? Math.rand(0, 3) : Math.rand(0, 10); - if (outcome === 0) { - global.race.pet.pet = -60; - messageQueue(loc(`event_${global.race.pet.type}_pet_failure`, [loc(`event_${global.race.pet.type}_name${global.race.pet.name}`)]), false, false, ["events", "minor_events"]); - } else { - global.race.pet.pet = 60; - messageQueue(loc(`event_${global.race.pet.type}_pet_success`, [loc(`event_${global.race.pet.type}_name${global.race.pet.name}`)]), false, false, ["events", "minor_events"]); - } - } - }, - planet(species) { - return races[species].home; - }, - universe(universe) { - return universe === "standard" || universe === "bigbang" ? "" : universe_types[universe].name; - }, - remain(at) { - let minutes = Math.ceil(at * loopTimers().longTimer / 6e4); - if (minutes > 0) { - let hours = Math.floor(minutes / 60); - minutes -= hours * 60; - return `${hours}:${minutes.toString().padStart(2, "0")}`; - } - return; - } - } - }); - ["astroSign"].forEach(function(topId) { - popover(`${topId}`, function() { - return seasonDesc("sign"); - }, { - elm: $(`#${topId}`) - }); - }); - popover( - "topBarPlanet", - function(obj) { - if (global.race.species === "protoplasm") { - obj.popper.append($(`${loc("infant")}`)); - } else { - let planet = races[global.race.species].home; - let race = flib("name"); - let planet_label = biomes[global.city.biome].label; - let trait = global.city.ptrait; - if (trait.length > 0) { - let traits2 = ""; - trait.forEach(function(t) { - if (planetTraits.hasOwnProperty(t)) { - if (t === "mellow" && global.race.species === "entish") { - traits2 += `${loc("planet_mellow_eg")} `; - } else { - traits2 += `${planetTraits[t].label} `; - } - } - }); - planet_label = `${traits2}${planet_label}`; - } - let orbit = orbitLength(); - let geo_traits = planetGeology(global.city.geology); - let challenges = ""; - if (global.race["truepath"]) { - challenges = challenges + `
    ${loc("evo_challenge_truepath_recap")}
    `; - } - if (global.race["junker"]) { - challenges = challenges + `
    ${loc("evo_challenge_junker_desc")} ${loc("evo_challenge_junker_conditions")}
    `; - } - if (global.race["joyless"]) { - challenges = challenges + `
    ${loc("evo_challenge_joyless_desc")} ${loc("evo_challenge_joyless_conditions")}
    `; - } - if (global.race["steelen"]) { - challenges = challenges + `
    ${loc("evo_challenge_steelen_desc")} ${loc("evo_challenge_steelen_conditions")}
    `; - } - if (global.race["decay"]) { - challenges = challenges + `
    ${loc("evo_challenge_decay_desc")} ${loc("evo_challenge_decay_conditions")}
    `; - } - if (global.race["emfield"]) { - challenges = challenges + `
    ${loc("evo_challenge_emfield_desc")} ${loc("evo_challenge_emfield_conditions")}
    `; - } - if (global.race["inflation"]) { - challenges = challenges + `
    ${loc("evo_challenge_inflation_desc")} ${loc("evo_challenge_inflation_conditions")}
    `; - } - if (global.race["banana"]) { - challenges = challenges + `
    ${loc("evo_challenge_banana_desc")} ${loc("wiki_achieve_banana1")}. ${loc("wiki_achieve_banana2")}. ${loc("wiki_achieve_banana3")}. ${loc("wiki_achieve_banana4", [500])}. ${loc("wiki_achieve_banana5", [50])}.
    `; - } - if (global.race["witch_hunter"]) { - challenges = challenges + `
    ${loc("evo_challenge_witch_hunter_desc")}
    `; - } - if (global.race["nonstandard"]) { - challenges = challenges + `
    ${loc("evo_challenge_nonstandard_desc")}
    `; - } - if (global.race["gravity_well"]) { - challenges = challenges + `
    ${loc("evo_challenge_gravity_well_desc")}
    `; - } - if (global.race["warlord"]) { - challenges = challenges + `
    ${loc("evo_challenge_warlord_desc")}
    `; - } - if (global.race["fasting"]) { - challenges = challenges + `
    ${loc("evo_challenge_fasting_desc")}
    `; - } - if (global.race["lone_survivor"]) { - challenges = challenges + `
    ${loc("evo_challenge_lone_survivor_desc")}
    `; - } - if (global.race["sludge"]) { - challenges = challenges + `
    ${loc("evo_challenge_sludge_desc")} ${loc("evo_challenge_sludge_conditions")}
    `; - } - if (global.race["ultra_sludge"]) { - challenges = challenges + `
    ${loc("evo_challenge_ultra_sludge_desc")} ${loc("evo_challenge_ultra_sludge_conditions")}
    `; - } - if (global.race["orbit_decay"]) { - let impact = global.race["orbit_decayed"] ? "" : loc("evo_challenge_orbit_decay_impact", [global.race["orbit_decay"] - global.stats.days]); - let state = global.race["orbit_decayed"] ? global.race["tidal_decay"] ? loc(`planet_kamikaze_msg`) : loc("evo_challenge_orbit_decay_impacted", [races[global.race.species].home]) : loc("evo_challenge_orbit_decay_desc"); - challenges = challenges + `
    ${state} ${loc("evo_challenge_orbit_decay_conditions")} ${impact}
    `; - if (calc_mastery() >= 100 && global.race.universe !== "antimatter") { - challenges = challenges + `
    ${loc("evo_challenge_cataclysm_warn")}
    `; - } else { - challenges = challenges + `
    ${loc("evo_challenge_scenario_warn")}
    `; - } - } - if (global.race["cataclysm"]) { - if (calc_mastery() >= 50 && global.race.universe !== "antimatter") { - challenges = challenges + `
    ${loc("evo_challenge_cataclysm_desc")}
    ${loc("evo_challenge_cataclysm_warn")}
    `; - } else { - challenges = challenges + `
    ${loc("evo_challenge_cataclysm_desc")}
    ${loc("evo_challenge_scenario_warn")}
    `; - } - } - obj.popper.append($(`
    ${loc(global.race["cataclysm"] ? "no_home" : "home", [planet, race, planet_label, orbit])}
    ${geo_traits}${challenges}`)); - } - return void 0; - }, - { - elm: `#topBar .planetWrap .planet`, - classes: `has-background-light has-text-dark` - } - ); - popover( - "topBarUniverse", - function(obj) { - obj.popper.append($(`
    ${universe_types[global.race.universe].desc}
    `)); - obj.popper.append($(`
    ${universe_types[global.race.universe].effect}
    `)); - return void 0; - }, - { - elm: `#topBar .planetWrap .universe`, - classes: `has-background-light has-text-dark` - } - ); - popover( - "topBarSimulation", - function(obj) { - obj.popper.append($(`
    ${loc(`evo_challenge_simulation_topbar`)}
    `)); - return void 0; - }, - { - elm: `#topBar .planetWrap .simulation`, - classes: `has-background-light has-text-dark` - } - ); - if (global.race["orbit_decay"] && !global.race["orbit_decayed"]) { - popover( - `infoTimer`, - function() { - return global.race["orbit_decayed"] ? "" : loc("evo_challenge_orbit_decay_impact", [global.race["orbit_decay"] - global.stats.days]); - }, - { - elm: `#infoTimer`, - classes: `has-background-light has-text-dark` - } - ); - } - challengeIcon(); - drawPet(); - if (global.race.species === "protoplasm") { - global.resource.RNA.display = true; - let perk_rank = global.stats.feat["master"] && global.stats.achieve["ascended"] && global.stats.achieve.ascended.l > 0 ? Math.min(global.stats.achieve.ascended.l, global.stats.feat["master"]) : 0; - if (global["sim"]) { - perk_rank = 5; - } - if (perk_rank > 0 && !global.evolution["mloaded"]) { - let evolve_actions = ["dna", "membrane", "organelles", "nucleus", "eukaryotic_cell", "mitochondria"]; - for (let i = 0; i < evolve_actions.length; i++) { - if (!global.evolution[evolve_actions[i]]) { - global.evolution[evolve_actions[i]] = { count: 0 }; - } - } - global.evolution["dna"] = 1; - global.resource.DNA.display = true; - global.evolution.membrane.count = perk_rank * 2; - global.evolution.eukaryotic_cell.count = perk_rank; - global.evolution.mitochondria.count = perk_rank; - global.evolution.organelles.count = perk_rank * 2; - global.evolution.nucleus.count = perk_rank * 2; - global.tech["evo"] = 2; - global.evolution["mloaded"] = 1; - } - let grand_rank = global.stats.feat["grandmaster"] && global.stats.achieve["corrupted"] && global.stats.achieve.corrupted.l > 0 ? Math.min(global.stats.achieve.corrupted.l, global.stats.feat["grandmaster"]) : 0; - if (global["sim"]) { - grand_rank = 5; - } - if (grand_rank >= 5 && !global.evolution["gmloaded"]) { - global.tech["evo"] = 6; - global.evolution["gselect"] = true; - global.evolution["gmloaded"] = 1; - global.evolution["final"] = 80; - global.tech["evo_humanoid"] = 1; - global.tech["evo_giant"] = 1; - global.tech["evo_small"] = 1; - global.tech["evo_animalism"] = 2; - global.tech["evo_demonic"] = 1; - global.tech["evo_angelic"] = 1; - global.tech["evo_insectoid"] = 1; - global.tech["evo_eggshell"] = 2; - global.tech["evo_eldritch"] = 1; - global.tech["evo_sand"] = 1; - global.tech["evo_polar"] = 1; - global.tech["evo_heat"] = 1; - global.tech["evo_fey"] = 1; - global.tech["evo_aquatic"] = 1; - } - if (global.race.universe === "bigbang") { - global.seed = global.race.seed; - setUniverse(); - } else if (global.race.seeded && !global.race["chose"]) { - global.seed = global.race.seed; - genPlanets(); - } else { - drawEvolution(); - } - } else { - if (global.portal.hasOwnProperty("soul_forge") && global.portal.soul_forge.on) { - p_on["soul_forge"] = 1; - } - setWeather(); - } - set_qlevel(calcQuantumLevel(true)); - $("#lbl_city").html("Village"); - var loopTick = 0; - function execGameLoops(periods = 1) { - const maxCatchUp = webWorker.longRatio * 12; - periods = Math.min(periods, maxCatchUp); - while (webWorker.s && periods--) { - ++loopTick; - const doMid = loopTick % webWorker.midRatio === 0; - const doLong = loopTick % webWorker.longRatio === 0; - fastLoop(); - if (doMid) { - midLoop(); - } - doCallbacks(); - if (doLong) { - longLoop(); - } - if (doMid && doLong) { - loopTick = 0; - } - } - } - if (window.Worker) { - webWorker.w = new Worker("evolve/evolve.js"); - webWorker.w.addEventListener("message", function(e) { - const data = e.data; - switch (data.loop) { - case "main": - execGameLoops(data.periods); - break; - } - }, false); - } - gameLoop("start"); - resourceAlt(); - var firstRun = true; - var gene_sequence = global.arpa["sequence"] && global.arpa["sequence"]["on"] ? global.arpa.sequence.on : 0; - function fastLoop() { - if (!global.race["no_craft"]) { - $(".craft").each(function(e) { - if (typeof $(this).data("val") === "number") { - $(this).html(sizeApproximation($(this).data("val") * keyMultiplier(), 1)); - } - }); - } - const date2 = /* @__PURE__ */ new Date(); - const astroSign2 = astrologySign(); - breakdown.p["Global"] = {}; - var global_multiplier = 1; - let applyPlasmid = false; - let pBonus = plasmidBonus("raw"); - if (global.prestige.Plasmid.count > 0 && (global.race.universe !== "antimatter" || global.genes["bleed"] && global.race.universe === "antimatter")) { - breakdown.p["Global"][loc("resource_Plasmid_name")] = pBonus[1] * 100 + "%"; - applyPlasmid = true; - } - if (global.prestige.AntiPlasmid.count > 0 && (global.race.universe === "antimatter" || global.genes["bleed"] && global.genes["bleed"] >= 2 && global.race.universe !== "antimatter")) { - breakdown.p["Global"][loc("resource_AntiPlasmid_name")] = pBonus[2] * 100 + "%"; - applyPlasmid = true; - } - if (applyPlasmid) { - global_multiplier += pBonus[0]; - } - if (global.prestige.Supercoiled.count > 0) { - let bonus = global.prestige.Supercoiled.count / (global.prestige.Supercoiled.count + 5e3); - breakdown.p["Global"][loc("resource_Supercoiled_short")] = +(bonus * 100).toFixed(2) + "%"; - global_multiplier *= 1 + bonus; - } - if (global.race["no_plasmid"] || global.race.universe === "antimatter") { - if (faithTempleCount()) { - let faith = faithBonus(); - breakdown.p["Global"][loc("faith")] = faith * 100 + "%"; - global_multiplier *= 1 + faith; - } - } - if (global.race.universe === "evil" && global.resource.Authority.display) { - if (global.resource.Authority.amount < 100) { - let malus = (100 - global.resource.Authority.amount) * 35e-4; - breakdown.p["Global"][global.resource.Authority.name] = -(malus * 100).toFixed(2) + "%"; - global_multiplier *= 1 - malus; - } else if (global.resource.Authority.amount > 100) { - let bonus = (global.resource.Authority.amount - 100) * 15e-4; - breakdown.p["Global"][global.resource.Authority.name] = +(bonus * 100).toFixed(2) + "%"; - global_multiplier *= 1 + bonus; - } - } - if (global.race["untapped"]) { - if (global.race["untapped"] > 0) { - let untapped = +(global.race.untapped / (global.race.untapped + 20) / 10 + 24e-5).toFixed(4); - breakdown.p["Global"][loc("trait_untapped_bd")] = `${untapped * 100}%`; - global_multiplier *= 1 + untapped; - } - } - if (global.race["rainbow_active"] && global.race["rainbow_active"] > 1) { - breakdown.p["Global"][loc("trait_rainbow_bd")] = `${traits.rainbow.vars()[0]}%`; - global_multiplier *= 1 + traits.rainbow.vars()[0] / 100; - } - if (global.race["gloomy"] && global.city.calendar.weather <= 1) { - breakdown.p["Global"][loc("trait_gloomy_name")] = `${traits.gloomy.vars()[0]}%`; - global_multiplier *= 1 + traits.gloomy.vars()[0] / 100; - } - if (global.race["floating"] && global.city.calendar.wind === 1) { - breakdown.p["Global"][loc("trait_floating_name")] = `-${traits.floating.vars()[0]}%`; - global_multiplier *= 1 - traits.floating.vars()[0] / 100; - } - if (global.tech["world_control"]) { - let bonus = 25; - if (global.civic.govern.type === "federation") { - bonus = govEffect.federation()[2]; - } - if (global.race["unified"]) { - bonus += traits.unified.vars()[0]; - } - if (astroSign2 === "taurus") { - bonus += astroVal2("taurus")[0]; - } - breakdown.p["Global"][loc("tech_unification")] = `${bonus}%`; - global_multiplier *= 1 + bonus / 100; - } else { - let occupy = 0; - for (let i2 = 0; i2 < 3; i2++) { - if (global.civic.foreign[`gov${i2}`].occ || global.civic.foreign[`gov${i2}`].anx || global.civic.foreign[`gov${i2}`].buy) { - occupy += global.civic.govern.type === "federation" ? 5 + govEffect.federation()[0] : 5; - } - } - if (occupy > 0) { - breakdown.p["Global"][loc("civics_garrison_occupy")] = `${occupy}%`; - global_multiplier *= 1 + occupy / 100; - } - } - if (global.genes["challenge"] && global.genes.challenge >= 2) { - let mastery = calc_mastery(); - breakdown.p["Global"][loc("mastery")] = mastery + "%"; - global_multiplier *= 1 + mastery / 100; - } - if (global["pillars"]) { - let harmonic = calcPillar(); - breakdown.p["Global"][loc("harmonic")] = `${(harmonic[0] - 1) * 100}%`; - global_multiplier *= harmonic[0]; - } - if (global.race["ascended"]) { - breakdown.p["Global"][loc("achieve_ascended_name")] = `5%`; - global_multiplier *= 1.05; - } - if (global.race["corruption"]) { - let corruption = global.race["corruption"] * 2; - breakdown.p["Global"][loc("achieve_corrupted_name")] = `${corruption}%`; - global_multiplier *= 1 + corruption / 100; - } - if (global.race["rejuvenated"]) { - let decay = global.stats.days < 996 ? (1e3 - global.stats.days) / 2e3 : 0.02; - breakdown.p["Global"][loc("rejuvenated")] = `${decay * 100}%`; - global_multiplier *= 1 + decay; - } - let octFathom = fathomCheck("octigoran"); - if (global.race["suction_grip"] || octFathom > 0) { - let bonus = 0; - if (global.race["suction_grip"]) { - bonus += traits.suction_grip.vars()[0]; - } - if (octFathom > 0) { - bonus += +(traits.suction_grip.vars(1)[0] * octFathom).toFixed(2); - } - breakdown.p["Global"][loc("trait_suction_grip_bd")] = bonus + "%"; - global_multiplier *= 1 + bonus / 100; - } - let cyclopsFathom = fathomCheck("cyclops"); - if (global.race["intelligent"] || cyclopsFathom > 0) { - let bonus = 0; - if (global.race["intelligent"]) { - bonus += workerScale(global.civic.scientist.workers, "scientist") * traits.intelligent.vars()[1] + workerScale(global.civic.professor.workers, "professor") * traits.intelligent.vars()[0]; - } - if (cyclopsFathom > 0) { - bonus += workerScale(global.civic.scientist.workers, "scientist") * traits.intelligent.vars(1)[1] * cyclopsFathom + workerScale(global.civic.professor.workers, "professor") * traits.intelligent.vars(1)[0] * cyclopsFathom; - } - if (global.race["high_pop"]) { - bonus = highPopAdjust(bonus); - } - breakdown.p["Global"][loc("trait_intelligent_bd")] = bonus + "%"; - global_multiplier *= 1 + bonus / 100; - } - if (global.race["slaver"] && global.city["slave_pen"] && global.city["slave_pen"]) { - let bonus = global.resource.Slave.amount * traits.slaver.vars()[0]; - breakdown.p["Global"][loc("trait_slaver_bd")] = bonus + "%"; - global_multiplier *= 1 + bonus / 100; - } - if ((global.city.ptrait.includes("trashed") || global.race["scavenger"] || global.race["servants"] && global.race.servants["force_scavenger"]) && global.civic["scavenger"]) { - let scavenger = global.city.ptrait.includes("trashed") || global.race["scavenger"] ? workerScale(global.civic.scavenger.workers, "scavenger") : 0; - if (global.race["servants"]) { - scavenger += jobScale(global.race.servants.jobs.scavenger); - } - if (scavenger > 0) { - let bonus = scavenger * traits.scavenger.vars()[0]; - if (global.city.ptrait.includes("trashed") && global.race["scavenger"]) { - bonus *= 1 + traits.scavenger.vars()[1] / 100; - } - if (global.city.ptrait.includes("trashed")) { - bonus *= planetTraits.trashed.vars()[1]; - } - if (global.race["high_pop"]) { - bonus = highPopAdjust(bonus); - } - breakdown.p["Global"][jobName("scavenger")] = bonus + "%"; - global_multiplier *= 1 + bonus / 100; - } - } - if (global.race["unfathomable"] && global.city["surfaceDwellers"] && global.city["captive_housing"]) { - let thralls = 0; - let rank = global.stats.achieve["nightmare"] && global.stats.achieve.nightmare["mg"] ? global.stats.achieve.nightmare.mg : 0; - if (global.city.hasOwnProperty("surfaceDwellers")) { - for (let i2 = 0; i2 < global.city.surfaceDwellers.length; i2++) { - thralls += global.city.captive_housing[`race${i2}`]; - } - if (thralls > global.civic.torturer.workers * rank / 2) { - let unsupervised = thralls - global.civic.torturer.workers * rank / 2; - thralls -= Math.ceil(unsupervised / 3); - } - } - if (thralls > 0) { - let bonus = thralls * traits.unfathomable.vars()[2] * rank / 5; - if (global.race["psychic"]) { - bonus *= 1 + traits.psychic.vars()[1] / 100; - } - breakdown.p["Global"][loc("trait_unfathomable_bd")] = bonus + "%"; - global_multiplier *= 1 + bonus / 100; - } - } - if (global.city.ptrait.includes("mellow")) { - breakdown.p["Global"][loc("planet_mellow_bd")] = "-" + (100 - planetTraits.mellow.vars()[2] * 100) + "%"; - global_multiplier *= planetTraits.mellow.vars()[2]; - } - if (global.city.ptrait.includes("ozone") && global.city["sun"]) { - let uv = global.city["sun"] * planetTraits.ozone.vars()[0]; - breakdown.p["Global"][loc("planet_ozone_bd")] = `-${uv}%`; - global_multiplier *= 1 - uv / 100; - } - let phoenixFathom = fathomCheck("phoenix"); - if ((global.race["smoldering"] || phoenixFathom > 0) && global.city["hot"]) { - let heat = 0; - if (global.race["smoldering"]) { - if (global.city["hot"] > 100) { - heat += 100 * traits.smoldering.vars()[1]; - heat += (global.city["hot"] - 100) * traits.smoldering.vars()[2]; - } else { - heat += global.city["hot"] * traits.smoldering.vars()[1]; - } - } - if (phoenixFathom > 0) { - if (global.city["hot"] > 100) { - heat += 100 * traits.smoldering.vars(0.25)[1] * phoenixFathom; - heat += (global.city["hot"] - 100) * traits.smoldering.vars(0.25)[2] * phoenixFathom; - } else { - heat += global.city["hot"] * traits.smoldering.vars(0.25)[1] * phoenixFathom; - } - } - breakdown.p["Global"][loc("trait_smoldering_name")] = `${heat}%`; - global_multiplier *= 1 + heat / 100; - } - if (global.race["heat_intolerance"] && global.city["hot"]) { - let heat = Math.min(100, global.city["hot"] * traits.heat_intolerance.vars()[0]); - breakdown.p["Global"][loc("hot")] = `-${heat}%`; - global_multiplier *= 1 - heat / 100; - } - if (global.race["chilled"] && global.city["cold"]) { - let cold = 0; - if (global.city["cold"] > 100) { - cold += 100 * traits.chilled.vars()[1]; - cold += (global.city["cold"] - 100) * traits.chilled.vars()[2]; - } else { - cold = global.city["cold"] * traits.chilled.vars()[1]; - } - breakdown.p["Global"][loc("trait_chilled_name")] = `${cold}%`; - global_multiplier *= 1 + cold / 100; - } - if (global.race["cold_intolerance"] && global.city["cold"]) { - let cold = Math.min(100, global.city["cold"] * traits.cold_intolerance.vars()[0]); - breakdown.p["Global"][loc("cold")] = `-${cold}%`; - global_multiplier *= 1 - cold / 100; - } - if (global.civic.govern.type === "anarchy" && global.resource[global.race.species].amount > jobScale(10)) { - let chaos = (global.resource[global.race.species].amount - jobScale(10)) * (global.race["high_pop"] ? 0.25 / traits.high_pop.vars()[0] : 0.25); - breakdown.p["Global"][loc("govern_anarchy")] = `-${chaos}%`; - global_multiplier *= 1 - chaos / 100; - } - if (global.civic.govern["protest"] && global.civic.govern.protest > 0) { - breakdown.p["Global"][loc("event_protest")] = `-${30}%`; - global_multiplier *= 0.7; - } - if (global.civic.govern["scandal"] && global.civic.govern.scandal > 0) { - let muckVal = govActive("muckraker", 0); - if (muckVal) { - breakdown.p["Global"][loc("event_scandal")] = `-${muckVal}%`; - global_multiplier *= 1 - muckVal / 100; - } - } - let capyFathom = fathomCheck("capybara"); - if (capyFathom > 0 || global.race["calm"] && global.city["meditation"] && global.resource.Zen.display) { - let rawZen = global.resource.Zen.amount; - if (capyFathom > 0) { - rawZen += Math.round(capyFathom * 500); - } - let zen = rawZen / (rawZen + 5e3); - breakdown.p["Global"][loc("trait_calm_bd")] = `+${(zen * 100).toFixed(2)}%`; - global_multiplier *= 1 + zen; - } - if (global.city["firestorm"] && global.city.firestorm > 0) { - global.city.firestorm--; - breakdown.p["Global"][loc("event_flare_bd")] = `-${20}%`; - global_multiplier *= 0.8; - } - if (races[global.race.species].type === "aquatic" && !["swamp", "oceanic"].includes(global.city.biome) || races[global.race.species].type === "fey" && !["forest", "swamp", "taiga"].includes(global.city.biome) || races[global.race.species].type === "heat" && !["ashland", "volcanic"].includes(global.city.biome) || races[global.race.species].type === "polar" && !["tundra", "taiga"].includes(global.city.biome) || races[global.race.species].type === "sand" && !["ashland", "desert"].includes(global.city.biome) || races[global.race.species].type === "demonic" && global.city.biome !== "hellscape" || races[global.race.species].type === "angelic" && global.city.biome !== "eden") { - if (!global.race["warlord"]) { - let unsuited = 1; - if (global.blood["unbound"] && global.blood.unbound >= 4) { - unsuited = global.race["rejuvenated"] ? 0.975 : 0.95; - } else if (global.blood["unbound"] && global.blood.unbound >= 2) { - unsuited = global.race["rejuvenated"] ? 0.95 : 0.9; - } else { - unsuited = global.race["rejuvenated"] ? 0.9 : 0.8; - } - breakdown.p["Global"][loc("unsuited")] = `-${Math.round((1 - unsuited) * 100)}%`; - global_multiplier *= unsuited; - } - } - if (global.race["hibernator"] && global.city.calendar.season === 3) { - global_multiplier *= 1 - traits.hibernator.vars()[1] / 100; - breakdown.p["Global"][loc("morale_winter")] = `-${traits.hibernator.vars()[1]}%`; - } - if (global.race.universe === "magic" && global.tech["syphon"]) { - let entropy = global.tech.syphon / 8; - breakdown.p["Global"][loc("arpa_syphon_damage")] = `-${entropy}%`; - global_multiplier *= 1 - entropy / 100; - } - let resList = [ - "Money", - "Knowledge", - "Omniscience", - "Food", - "Lumber", - "Stone", - "Chrysotile", - "Crystal", - "Furs", - "Copper", - "Iron", - "Cement", - "Coal", - "Oil", - "Uranium", - "Aluminium", - "Steel", - "Titanium", - "Alloy", - "Polymer", - "Iridium", - "Helium_3", - "Water", - "Deuterium", - "Neutronium", - "Adamantite", - "Infernite", - "Elerium", - "Nano_Tube", - "Graphene", - "Stanene", - "Bolognium", - "Vitreloy", - "Orichalcum", - "Asphodel_Powder", - "Elysanite", - "Unobtainium", - "Quantium", - "Plywood", - "Brick", - "Wrought_Iron", - "Sheet_Metal", - "Mythril", - "Aerogel", - "Nanoweave", - "Scarletite", - "Cipher", - "Nanite", - "Mana", - "Authority" - ]; - breakdown.p["consume"] = {}; - resList.forEach(function(res) { - breakdown.p["consume"][res] = {}; - breakdown.p[res] = {}; - }); - if (global.race["fasting"]) { - breakdown.p["consume"][global.race.species] = {}; - breakdown.p[global.race.species] = {}; - } - var time_multiplier = 0.25; - resetResBuffer(); - if (global.race.species === "protoplasm") { - if (global.evolution["nucleus"] && global["resource"]["DNA"].amount < global["resource"]["DNA"].max) { - var increment = global.evolution["nucleus"].count; - while (global["resource"]["RNA"].amount < increment * 2) { - increment--; - if (increment <= 0) { - break; - } - } - let rna = increment; - if (global.tech["evo"] && global.tech.evo >= 5) { - increment *= 2; - } - modRes("DNA", increment * global_multiplier * time_multiplier); - modRes("RNA", -(rna * 2 * time_multiplier)); - } - if (global.evolution["organelles"]) { - let rna_multiplier = global.race["rapid_mutation"] ? 2 : 1; - if (global.tech["evo"] && global.tech.evo >= 2) { - rna_multiplier++; - } - modRes("RNA", global.evolution["organelles"].count * rna_multiplier * global_multiplier * time_multiplier); - } - if ((global.stats.feat["novice"] && global.stats.achieve["apocalypse"] && global.stats.achieve.apocalypse.l > 0 || global["sim"]) && global.race.universe !== "bigbang" && (!global.race.seeded || global.race.seeded && global.race["chose"])) { - let rank = global["sim"] ? 5 : Math.min(global.stats.achieve.apocalypse.l, global.stats.feat["novice"]); - modRes("RNA", rank / 2 * time_multiplier * global_multiplier); - if (global.resource.DNA.display) { - modRes("DNA", rank / 4 * time_multiplier * global_multiplier); - } - } - if (global["resource"]["RNA"].amount >= 2 && !global.evolution["dna"]) { - global.evolution["dna"] = 1; - global.resource.DNA.display = true; - if (global.stats.achieve["mass_extinction"] && global.stats.achieve["mass_extinction"].l > 1) { - modRes("RNA", global.resource.RNA.max); - modRes("DNA", global.resource.RNA.max); - } - drawEvolution(); - } else if (global["resource"]["RNA"].amount >= 10 && !global.evolution["membrane"]) { - global.evolution["membrane"] = { count: 0 }; - drawEvolution(); - } else if (global["resource"]["DNA"].amount >= 4 && !global.evolution["organelles"]) { - global.evolution["organelles"] = { count: 0 }; - drawEvolution(); - } else if (global.evolution["organelles"] && global.evolution.organelles.count >= 2 && !global.evolution["nucleus"]) { - global.evolution["nucleus"] = { count: 0 }; - drawEvolution(); - } else if (global.evolution["nucleus"] && global.evolution.nucleus.count >= 1 && !global.evolution["eukaryotic_cell"]) { - global.evolution["eukaryotic_cell"] = { count: 0 }; - drawEvolution(); - } else if (global.evolution["eukaryotic_cell"] && global.evolution.eukaryotic_cell.count >= 1 && !global.evolution["mitochondria"]) { - global.evolution["mitochondria"] = { count: 0 }; - drawEvolution(); - } else if (global.evolution["mitochondria"] && !global.tech["evo"]) { - global.tech["evo"] = 1; - drawEvolution(); - } - } else { - let zigVal = zigguratBonus(); - let morale = 100; - let q_multiplier = 1; - let qs_multiplier = 1; - if (global.race["quarantine"] && global.race["qDays"]) { - let qDays = 1 - (global.race.qDays <= 1e3 ? global.race.qDays : 1e3) / 1e3; - switch (global.race.quarantine) { - case 1: - q_multiplier = 0.5 + 0.5 * qDays; - break; - case 2: - q_multiplier = 0.25 + 0.25 * qDays; - qs_multiplier = 0.5 + 0.5 * qDays; - break; - case 3: - q_multiplier = 0.1 + 0.15 * qDays; - qs_multiplier = 0.25 + 0.25 * qDays; - break; - case 4: - q_multiplier = 0.08 + 0.02 * qDays; - ; - qs_multiplier = 0.12 + 0.13 * qDays; - ; - break; - } - if (global.race["vax"] && global.tech["focus_cure"] && global.tech.focus_cure >= 4) { - let vax = +global.race.vax.toFixed(2) / 100; - if (vax > 1) { - vax = 1; - } - q_multiplier = q_multiplier + (1 - q_multiplier) * vax; - qs_multiplier = qs_multiplier + (1 - qs_multiplier) * vax; - } - } - if (global.city.calendar.season === 0 && global.city.calendar.year > 0) { - let spring = global.race["chilled"] || global.race["smoldering"] ? 0 : 5; - morale += spring; - global.city.morale.season = spring; - } else if (global.city.calendar.season === 1 && global.race["smoldering"]) { - morale += traits.smoldering.vars()[0]; - global.city.morale.season = traits.smoldering.vars()[0]; - } else if (global.city.calendar.season === 3) { - if (global.race["chilled"]) { - morale += traits.chilled.vars()[0]; - global.city.morale.season = traits.chilled.vars()[0]; - } else { - morale -= global.race["leathery"] ? traits.leathery.vars()[0] : 5; - global.city.morale.season = global.race["leathery"] ? -traits.leathery.vars()[0] : -5; - } - } else { - global.city.morale.season = 0; - } - if (global.race["cheese"]) { - let raw_cheese = global.stats.hasOwnProperty("reset") ? global.stats.reset + 1 : 1; - let cheese = +(raw_cheese / (raw_cheese + 10) * 11).toFixed(2); - morale += cheese; - } - if (global.civic["homeless"]) { - morale -= global.civic.homeless / 2; - } - if (global.tech["vax_c"] || global.tech["vax_f"]) { - morale -= global.tech["vax_c"] ? 10 : 50; - } else if (global.tech["vax_s"]) { - morale += 20; - } - if (global.tech["m_boost"]) { - global.city.morale.leadership = 20; - morale += 20; - } else { - global.city.morale.leadership = 0; - } - if (shrineBonusActive()) { - let shrineMorale = getShrineBonus("morale"); - global.city.morale.shrine = shrineMorale.add; - morale += shrineMorale.add; - } else { - global.city.morale.shrine = 0; - } - let milVal = govActive("militant", 1); - if (milVal) { - morale -= milVal; - } - if (global.civic.govern.type === "corpocracy") { - morale -= govEffect.corpocracy()[3]; - } - if (global.civic.govern.type === "republic") { - morale += govEffect.republic()[1]; - } - if (global.civic.govern.type === "federation") { - morale += govEffect.federation()[1]; - } - if (global.race["blood_thirst"] && global.race.blood_thirst_count >= 1) { - let blood_thirst = Math.ceil(Math.log2(global.race.blood_thirst_count)); - global.city.morale.blood_thirst = blood_thirst; - morale += blood_thirst; - } else { - global.city.morale.blood_thirst = 0; - } - let weather_morale = 0; - if (global.city.calendar.weather === 0) { - if (global.city.calendar.temp > 0) { - if (global.city.calendar.wind === 1) { - if (global.race["skittish"]) { - weather_morale = -traits.skittish.vars()[0]; - } else { - weather_morale = global.race["leathery"] ? -traits.leathery.vars()[0] : -5; - } - } else { - weather_morale = global.race["leathery"] ? 0 : -2; - } - } - } else if (global.city.calendar.weather === 2) { - if (global.race["nyctophilia"]) { - weather_morale = -traits.nyctophilia.vars()[0]; - } else if (global.city.calendar.wind === 0 && global.city.calendar.temp < 2 || global.city.calendar.wind === 1 && global.city.calendar.temp === 2) { - weather_morale = 2; - } - } else { - if (global.race["nyctophilia"]) { - weather_morale = traits.nyctophilia.vars()[1]; - } - } - if (global.race["snowy"] && (global.city.calendar.temp !== 0 || global.city.calendar.weather !== 0)) { - weather_morale -= global.city.calendar.temp >= 2 ? traits.snowy.vars()[1] : traits.snowy.vars()[0]; - } - global.city.morale.weather = global.race["submerged"] ? 0 : weather_morale; - morale += global.race["submerged"] ? 0 : weather_morale; - if (global.race["motivated"]) { - let boost = Math.ceil(global.race["motivated"] ** 0.4); - morale += boost; - } - if (global.race["pet"]) { - morale++; - if (global.race.pet.event > 0) { - morale++; - } - if (global.race.pet.pet > 0) { - morale += global.race.pet.type === "cat" ? 2 : 1; - } else if (global.race.pet.pet < 0) { - morale -= global.race.pet.type === "cat" ? 2 : 1; - } - } - if (global.race["wish"] && global.race["wishStats"] && global.race.wishStats.fame !== 0) { - morale += global.race.wishStats.fame; - } - if (global.race["artisan"] && !global.race["joyless"]) { - morale += traits.artisan.vars()[2] * global.civic.craftsman.workers; - } - let stress = 0; - let divisor = 5; - global.city.morale.unemployed = 0; - if (!global.city.ptrait.includes("mellow")) { - let unemployed = global.civic.unemployed.workers / (global.race["high_pop"] ? traits.high_pop.vars()[0] : 1); - morale -= unemployed; - global.city.morale.unemployed = -unemployed; - } else { - divisor *= planetTraits.mellow.vars()[0]; - } - let vulFathom = fathomCheck("vulpine"); - if (global.civic.hunter.display && (global.race["playful"] || vulFathom > 0)) { - let val = 0; - if (vulFathom > 0) { - val += traits.playful.vars(1)[0] * vulFathom; - } - if (global.race["playful"]) { - val += traits.playful.vars()[0]; - } - morale += global.civic.hunter.workers * val; - global.city.morale.unemployed = global.civic.hunter.workers * val; - } else { - stress -= highPopAdjust(global.civic.hunter.workers) / divisor; - } - if (global.race["optimistic"]) { - stress += traits.optimistic.vars()[0]; - } - let geckoFathom = fathomCheck("gecko"); - if (geckoFathom > 0) { - stress += traits.optimistic.vars(1)[0] * geckoFathom; - } - if (global.race["pessimistic"]) { - stress -= traits.pessimistic.vars()[0]; - } - if (global.civic["garrison"]) { - let divisor2 = 2; - if (global.city.ptrait.includes("mellow")) { - divisor2 *= planetTraits.mellow.vars()[0]; - } - let army_stress = global.civic.garrison.max / divisor2; - if (global.race["high_pop"]) { - army_stress /= traits.high_pop.vars()[0]; - } - stress -= army_stress; - } - breakdown.p.consume.Money[loc("trade")] = 0; - if (global.tech["trade"] || global.race["banana"] && global.tech["primitive"] && global.tech.primitive >= 3) { - let used_trade = 0; - let dealVal = govActive("dealmaker", 0); - if (dealVal) { - let exporting = 0; - let importing = 0; - Object.keys(global.resource).forEach(function(res) { - if (global.resource[res].hasOwnProperty("trade") && global.resource[res].trade < 0) { - exporting -= global.resource[res].trade; - } - if (global.resource[res].hasOwnProperty("trade") && global.resource[res].trade > 0) { - importing += global.resource[res].trade; - } - }); - if (exporting < importing) { - Object.keys(global.resource).forEach(function(res) { - global.resource[res].trade = 0; - }); - } - } - Object.keys(global.resource).forEach(function(res) { - let routes = global.resource[res].trade; - if (routes > 0) { - used_trade += routes; - let price = tradeBuyPrice(res); - const affordable_routes = Math.floor(global.resource.Money.amount / (price * time_multiplier)); - routes = Math.min(routes, affordable_routes); - if (routes > 0) { - price *= routes; - let rate = tradeRatio[res]; - if (dealVal) { - rate *= 1 + dealVal / 100; - } - if (global.race["persuasive"]) { - rate *= 1 + traits.persuasive.vars()[0] * global.race["persuasive"] / 100; - } - if (global.race["merchant"]) { - rate *= 1 + traits.merchant.vars()[1] / 100; - } - if (global.race["ocular_power"] && global.race["ocularPowerConfig"] && global.race.ocularPowerConfig.c) { - let trade = 70 * (traits.ocular_power.vars()[1] / 100); - rate *= 1 + trade / 100; - } - let fathom = fathomCheck("goblin"); - if (fathom > 0) { - rate *= 1 + traits.merchant.vars(1)[1] / 100 * fathom; - } - if (astroSign2 === "capricorn") { - rate *= 1 + astroVal2("capricorn")[0] / 100; - } - if (global.race["devious"]) { - rate *= 1 - traits.devious.vars()[0] / 100; - } - if (global.genes["trader"]) { - let mastery = calc_mastery(); - rate *= 1 + mastery / 100; - if (global.genes.trader >= 2) { - let coiled = global.prestige.Supercoiled.count; - rate *= 1 + coiled / (coiled + 500); - } - } - if (global.stats.achieve.hasOwnProperty("trade")) { - let rank = global.stats.achieve.trade.l * 2; - if (rank > 10) { - rank = 10; - } - rate *= 1 + rank / 100; - } - if (global.race["truepath"]) { - rate *= 1 - global.civic.foreign.gov3.hstl / 101; - } - modRes(res, routes * time_multiplier * rate); - modRes("Money", -(price * time_multiplier)); - breakdown.p.consume.Money[loc("trade")] -= price; - breakdown.p.consume[res][loc("trade")] = routes * rate; - } - steelCheck(); - } else if (routes < 0) { - used_trade -= routes; - let rate = tradeRatio[res]; - if (global.stats.achieve.hasOwnProperty("trade")) { - let rank = global.stats.achieve.trade.l; - if (rank > 5) { - rank = 5; - } - rate *= 1 - rank / 100; - } - const affordable_routes = Math.floor(global.resource[res].amount / (rate * time_multiplier)); - routes = Math.max(routes, -affordable_routes); - if (routes < 0) { - let price = tradeSellPrice(res) * routes; - modRes(res, routes * time_multiplier * rate); - modRes("Money", -(price * time_multiplier)); - breakdown.p.consume.Money[loc("trade")] -= price; - breakdown.p.consume[res][loc("trade")] = routes * rate; - } - steelCheck(); - } - }); - global.city.market.trade = used_trade; - } - if (breakdown.p.consume.Money[loc("trade")] === 0) { - delete breakdown.p.consume.Money[loc("trade")]; - } - if (global.tech["alchemy"]) { - let totMana = 0; - let totCrystal = 0; - let totTransmute = 0; - Object.keys(global.race.alchemy).forEach(function(res) { - if (global.race.alchemy[res] > 0) { - let trasmute = Number(global.race.alchemy[res]); - if (global.resource.Mana.amount < trasmute) { - trasmute = global.resource.Mana.amount; - } - if (global.resource.Crystal.amount < trasmute * 0.15) { - trasmute = Math.floor(global.resource.Crystal.amount * (1 / 0.15)); - } - totTransmute += trasmute; - if (trasmute >= time_multiplier) { - let rate = global.resource[res].basic && global.tech.alchemy >= 2 ? tradeRatio[res] * 8 : tradeRatio[res] * 2; - if (global.race["witch_hunter"]) { - rate *= 3; - } - if (global.stats.achieve["soul_sponge"] && global.stats.achieve.soul_sponge["mg"]) { - rate *= global.stats.achieve.soul_sponge.mg + 1; - } - modRes(res, trasmute * time_multiplier * rate); - modRes("Mana", -(trasmute * time_multiplier)); - modRes("Crystal", -(trasmute * 0.15 * time_multiplier)); - totMana -= trasmute; - totCrystal -= trasmute * 0.15; - breakdown.p.consume[res][loc("tab_alchemy")] = trasmute * rate; - if (global.race.universe === "magic" && !global.resource[res].basic && global.tech.alchemy >= 2) { - unlockAchieve("fullmetal"); - } - } - } - }); - global.race["totTransmute"] = totTransmute; - breakdown.p.consume.Mana[loc("tab_alchemy")] = totMana; - breakdown.p.consume.Crystal[loc("tab_alchemy")] = totCrystal; - } - if (global.galaxy["trade"] && (gal_on.hasOwnProperty("freighter") || gal_on.hasOwnProperty("super_freighter"))) { - let cap = 0; - if (global.galaxy["freighter"]) { - cap += gal_on["freighter"] * 2; - } - if (global.galaxy["super_freighter"]) { - cap += gal_on["super_freighter"] * 5; - } - global.galaxy.trade.max = cap; - let used = 0; - let offers = galaxyOffers(); - for (let i2 = 0; i2 < offers.length; i2++) { - let exprt_res = offers[i2].sell.res; - let exprt_vol = offers[i2].sell.vol; - let imprt_res = offers[i2].buy.res; - let imprt_vol = offers[i2].buy.vol; - let exp_total = 0; - let imp_total = 0; - if (global.race["persuasive"]) { - imprt_vol *= 1 + global.race["persuasive"] / 100; - } - if (global.race["merchant"]) { - imprt_vol *= 1 + traits.merchant.vars()[1] / 100; - } - let fathom = fathomCheck("goblin"); - if (fathom > 0) { - imprt_vol *= 1 + traits.merchant.vars(1)[1] / 100 * fathom; - } - if (astroSign2 === "capricorn") { - imprt_vol *= 1 + astroVal2("capricorn")[0] / 100; - } - if (global.race["devious"]) { - imprt_vol *= 1 - traits.devious.vars()[0] / 100; - } - if (global.genes["trader"]) { - let mastery = calc_mastery(); - imprt_vol *= 1 + mastery / 100; - } - if (global.stats.achieve.hasOwnProperty("trade")) { - let rank = global.stats.achieve.trade.l; - if (rank > 5) { - rank = 5; - } - imprt_vol *= 1 + rank / 50; - exprt_vol *= 1 - rank / 100; - } - used += global.galaxy.trade[`f${i2}`]; - if (used > cap) { - global.galaxy.trade[`f${i2}`] -= used - cap; - if (global.galaxy.trade[`f${i2}`] < 0) { - global.galaxy.trade[`f${i2}`] = 0; - } - } - let pirate = piracy("gxy_gorddon"); - for (let j = 0; j < global.galaxy.trade[`f${i2}`]; j++) { - exp_total += exprt_vol; - if (modRes(exprt_res, -(exprt_vol * time_multiplier))) { - modRes(imprt_res, imprt_vol * time_multiplier * pirate); - imp_total += imprt_vol; - } - } - if (exp_total > 0) { - if (breakdown.p.consume[exprt_res][loc("trade")]) { - breakdown.p.consume[exprt_res][loc("trade")] -= exp_total; - } else { - breakdown.p.consume[exprt_res][loc("trade")] = -exp_total; - } - } - if (imp_total > 0) { - if (breakdown.p.consume[imprt_res][loc("trade")]) { - breakdown.p.consume[imprt_res][loc("trade")] += imp_total; - } else { - breakdown.p.consume[imprt_res][loc("trade")] = imp_total; - } - } - if (pirate < 1) { - if (breakdown.p.consume[imprt_res][loc("galaxy_piracy")]) { - breakdown.p.consume[imprt_res][loc("galaxy_piracy")] += -((1 - pirate) * imp_total); - } else { - breakdown.p.consume[imprt_res][loc("galaxy_piracy")] = -((1 - pirate) * imp_total); - } - } - if (breakdown.p.consume[exprt_res][loc("trade")] === 0) { - delete breakdown.p.consume[exprt_res][loc("trade")]; - } - if (breakdown.p.consume[imprt_res][loc("trade")] === 0) { - delete breakdown.p.consume[imprt_res][loc("trade")]; - } - } - global.galaxy.trade.cur = used; - } - if (global.race["deconstructor"] && global.city["nanite_factory"]) { - nf_resources.forEach(function(r) { - if (global.resource[r].display) { - let vol = global.city.nanite_factory[r] * time_multiplier; - if (vol > 0) { - if (global.resource[r].amount < vol) { - vol = global.resource[r].amount; - } - if (modRes(r, -vol)) { - breakdown.p.consume[r][loc("city_nanite_factory")] = -(vol / time_multiplier); - let trait = traits.deconstructor.vars()[0] / 100; - let nanite_vol = vol * atomic_mass[r] / 100 * trait; - breakdown.p.consume["Nanite"][global.resource[r].name] = nanite_vol / time_multiplier; - modRes("Nanite", nanite_vol); - } - } - } - }); - } - let power_grid = 0; - let max_power = 0; - if (global.tauceti["ringworld"] && global.tauceti.ringworld.count >= 1e3) { - let output = global.race["lone_survivor"] ? 100 : 1e4; - max_power -= output; - power_grid += output; - power_generated[loc("tau_star_ringworld")] = output; - } - if (global.interstellar["elysanite_sphere"] && global.interstellar.elysanite_sphere.count > 0) { - let output = 0; - if (global.interstellar.elysanite_sphere.count >= 1e3) { - output = powerModifier(22500); - } else { - output = powerModifier(1750 + global.interstellar.elysanite_sphere.count * 18); - } - max_power -= output; - power_grid += output; - power_generated[loc("interstellar_dyson_sphere_title")] = output; - delete power_generated[loc("tech_dyson_net")]; - } else if (global.interstellar["orichalcum_sphere"] && global.interstellar.orichalcum_sphere.count > 0) { - let output = 0; - if (global.interstellar.orichalcum_sphere.count >= 100) { - output = powerModifier(1750); - } else { - output = powerModifier(750 + global.interstellar.orichalcum_sphere.count * 8); - } - max_power -= output; - power_grid += output; - power_generated[loc("interstellar_dyson_sphere_title")] = output; - delete power_generated[loc("tech_dyson_net")]; - } else if (global.interstellar["dyson_sphere"] && global.interstellar.dyson_sphere.count > 0) { - let output = 0; - if (global.interstellar.dyson_sphere.count >= 100) { - output = powerModifier(750); - } else { - output = powerModifier(175 + global.interstellar.dyson_sphere.count * 5); - } - max_power -= output; - power_grid += output; - power_generated[loc("interstellar_dyson_sphere_title")] = output; - delete power_generated[loc("tech_dyson_net")]; - } else if (global.interstellar["dyson"] && global.interstellar.dyson.count >= 1) { - let output = 0; - if (global.interstellar.dyson.count >= 100) { - output = powerModifier(175); - } else { - output = powerModifier(global.interstellar.dyson.count * 1.25); - } - max_power -= output; - power_grid += output; - power_generated[loc("tech_dyson_net")] = output; - } - if (global.interstellar["stellar_engine"] && global.interstellar.stellar_engine.count >= 100) { - let output = actions.interstellar.int_blackhole.stellar_engine.powered(); - max_power += output; - power_grid -= output; - power_generated[loc("tech_stellar_engine")] = -output; - } - [ - { r: "city", s: "coal_power" }, - { r: "city", s: "oil_power" }, - { r: "city", s: "fission_power" }, - { r: "spc_hell", s: "geothermal" }, - { r: "spc_dwarf", s: "e_reactor" }, - { r: "int_alpha", s: "fusion" }, - { r: "tau_home", s: "fusion_generator" }, - { r: "tau_gas2", s: "alien_space_station" } - ].forEach(function(generator) { - let space2 = convertSpaceSector(generator.r); - let region = generator.r === "city" ? generator.r : space2; - let c_action = generator.r === "city" ? actions.city : actions[space2][generator.r]; - let title = typeof c_action[generator.s].title === "string" ? c_action[generator.s].title : c_action[generator.s].title(); - if (global[region][generator.s] && global[region][generator.s]["on"]) { - let watts = c_action[generator.s].powered(); - p_on[generator.s] = global[region][generator.s].on; - if (c_action[generator.s].hasOwnProperty("p_fuel")) { - let s_fuels = c_action[generator.s].p_fuel(); - if (!Array.isArray(s_fuels)) { - s_fuels = [s_fuels]; - } - for (let j = 0; j < s_fuels.length; j++) { - let fuel = s_fuels[j]; - let fuel_cost = fuel.a; - if (["Oil", "Helium_3"].includes(fuel.r) && region !== "city") { - fuel_cost = region === "space" ? +fuel_adjust(fuel_cost, true) : +int_fuel_adjust(fuel_cost); - } - let mb_consume = p_on[generator.s] * fuel_cost; - breakdown.p.consume[fuel.r][title] = -mb_consume; - for (let k = 0; k < p_on[generator.s]; k++) { - if (!modRes(fuel.r, -(time_multiplier * fuel_cost))) { - mb_consume -= p_on[generator.s] * fuel_cost - k * fuel_cost; - p_on[generator.s] = k; - break; - } - } - } - } - let power = p_on[generator.s] * watts; - max_power += power; - power_grid -= power; - power_generated[title] = -power; - if (p_on[generator.s] !== global[region][generator.s].on) { - $(`#${region}-${generator.s} .on`).addClass("warn"); - $(`#${region}-${generator.s} .on`).prop("title", `ON ${p_on[generator.s]}/${global[region][generator.s].on}`); - } else { - $(`#${region}-${generator.s} .on`).removeClass("warn"); - $(`#${region}-${generator.s} .on`).prop("title", `ON`); - } - } else { - power_generated[title] = 0; - p_on[generator.s] = 0; - $(`#${region}-${generator.s} .on`).removeClass("warn"); - $(`#${region}-${generator.s} .on`).prop("title", `ON`); - } - }); - if (global.tech["uranium"] && global.tech["uranium"] >= 3 && p_on["coal_power"]) { - const fuel = actions.city.coal_power.p_fuel(); - if (fuel.r === "Coal" && fuel.a > 0) { - let coal = p_on["coal_power"] * fuel.a; - let ash = coal / 65; - if (global.city.geology["Uranium"]) { - ash *= global.city.geology["Uranium"] + 1; - } - ash *= production("psychic_boost", "Uranium"); - modRes("Uranium", ash * time_multiplier); - breakdown.p.consume["Uranium"][loc("city_coal_ash")] = ash; - } - } - if (global.space["hydrogen_plant"]) { - let output = actions.space.spc_titan.hydrogen_plant.powered(); - if (global.space.hydrogen_plant.on > global.space.electrolysis.on) { - global.space.hydrogen_plant.on = global.space.electrolysis.on; - } - let power = global.space.hydrogen_plant.on * output; - max_power += power; - power_grid -= power; - power_generated[loc("space_hydrogen_plant_title")] = -power; - } - if (global.portal["incinerator"]) { - let output = actions.portal.prtl_wasteland.incinerator.powered(); - let power = global.portal.incinerator.on * output; - max_power += power; - power_grid -= power; - power_generated[loc("portal_incinerator_title")] = -power; - } - if (global.portal["inferno_power"]) { - let fuels = actions.portal.prtl_ruins.inferno_power.fuel; - let operating = global.portal.inferno_power.on; - Object.keys(fuels).forEach(function(fuel) { - let consume = operating * fuels[fuel]; - while (consume * time_multiplier > global.resource[fuel].amount + (global.resource[fuel].diff > 0 ? global.resource[fuel].diff * time_multiplier : 0) && consume > 0) { - operating--; - consume -= fuels[fuel]; - } - breakdown.p.consume[fuel][loc("portal_inferno_power_title")] = -consume; - modRes(fuel, -(consume * time_multiplier)); - }); - let power = operating * actions.portal.prtl_ruins.inferno_power.powered(); - max_power += power; - power_grid -= power; - power_generated[loc("portal_inferno_power_title")] = -power; - } - if (global.eden["soul_engine"] && global.tech["asphodel"] && global.tech.asphodel >= 4) { - let power = (support_on["soul_engine"] || 0) * actions.eden.eden_asphodel.soul_engine.powered(); - max_power += power; - power_grid -= power; - power_generated[loc("eden_soul_engine_title")] = -power; - } - if (global.space["swarm_satellite"] && global.space["swarm_control"]) { - let active = global.space.swarm_satellite.count; - if (active > global.space.swarm_control.s_max) { - active = global.space.swarm_control.s_max; - } - global.space.swarm_control.support = active; - let solar = 0.35; - if (global.tech.swarm >= 4) { - solar += 0.15 * (global.tech.swarm - 3); - } - if (global.stats.achieve["iron_will"] && global.stats.achieve.iron_will.l >= 1) { - solar += 0.15; - } - if (global.blood["illuminate"]) { - solar += 0.01 * global.blood.illuminate; - } - solar = +solar.toFixed(2); - let output = powerModifier(active * solar); - max_power -= output; - power_grid += output; - power_generated[loc("space_sun_swarm_satellite_title")] = output; - } - if (global.race["wish"] && global.race["wishStats"] && global.race.wishStats.potato) { - let power = powerModifier(global.race.wishStats.potato); - max_power -= power; - power_grid += power; - power_generated[loc("wish_potato")] = power; - } - if (global.city["mill"] && global.tech["agriculture"] && global.tech["agriculture"] >= 6) { - let power = powerModifier(global.city.mill.on * actions.city.mill.powered()); - max_power += power; - power_grid -= power; - power_generated[loc("city_mill_title2")] = -power; - } - if (global.city["windmill"] && global.tech["wind_plant"]) { - let power = powerModifier(global.city.windmill.count * actions.city.windmill.powered()); - max_power += power; - power_grid -= power; - power_generated[loc("city_mill_title2")] = -power; - } - if (global.race["elemental"] && traits.elemental.vars()[0] === "electric") { - let power = powerModifier(highPopAdjust((global.resource[global.race.species].amount * traits.elemental.vars()[1]) ** 1.28)); - max_power -= power; - power_grid += power; - power_generated[loc("trait_elemental_name")] = power; - } - if (global.race["powered"]) { - let citizens = traits.powered.vars()[0] * global.resource[global.race.species].amount; - if (global.race["discharge"] && global.race["discharge"] > 0) { - citizens = +(citizens * 1.25).toFixed(3); - } - power_grid -= citizens; - } - if (global.race["replicator"]) { - global.city["replicator"] = { count: global.race.replicator.pow, on: global.race.replicator.pow }; - } - let p_structs = global.power; - let totalPowerDemand = 0; - let pb_list = []; - for (let i2 = 0; i2 < p_structs.length; i2++) { - const parts = p_structs[i2].split(":"); - const struct = parts[1]; - const region = parts[0] === "city" ? parts[0] : convertSpaceSector(parts[0]); - const c_action = parts[0] === "city" ? actions.city[struct] : actions[region][parts[0]][struct]; - if (global[region][struct]?.on) { - if (checkPowerRequirements(c_action) && (region !== "galaxy" || p_on["s_gate"])) { - totalPowerDemand += global[region][struct].on * c_action.powered(); - p_on[struct] = global[region][struct].on; - } else { - p_on[struct] = 0; - } - } - if (global.settings.lowPowerBalance && c_action.hasOwnProperty("powerBalancer")) { - pb_list.push(p_structs[i2]); - } - } - if (global.settings.lowPowerBalance && totalPowerDemand > power_grid) { - let totalPowerUsage = totalPowerDemand; - for (let i2 = pb_list.length - 1; i2 >= 0; i2--) { - const parts = pb_list[i2].split(":"); - const struct = parts[1]; - let on = p_on[struct]; - if (totalPowerUsage > power_grid && on > 0) { - const region = parts[0] === "city" ? parts[0] : convertSpaceSector(parts[0]); - const c_action = parts[0] === "city" ? actions.city[struct] : actions[region][parts[0]][struct]; - let balValues = c_action.powerBalancer(); - if (balValues) { - balValues.forEach(function(v) { - let off = 0; - if (v.hasOwnProperty("r") && v.hasOwnProperty("k")) { - let val = global[region][struct][v.k] ?? 0; - if (global.resource[v.r]["odif"] && global.resource[v.r]["odif"] < 0) { - global.resource[v.r]["odif"] = 0; - } - let diff = global.resource[v.r].diff + (global.resource[v.r]["odif"] ? global.resource[v.r]["odif"] : 0); - while (diff - off * val > val && on > 0 && totalPowerUsage > power_grid) { - on--; - off++; - totalPowerUsage -= c_action.powered(); - } - global.resource[v.r]["odif"] = val * off; - } else if (v.hasOwnProperty("s")) { - let sup = c_action.support(); - if (global[region][struct]["soff"] && global[region][struct]["soff"] < 0) { - global[region][struct]["soff"] = 0; - } - let support = v.s + (global[region][struct]["soff"] ? global[region][struct]["soff"] : 0); - while (support - sup * off >= sup && on > 0 && totalPowerUsage > power_grid) { - on--; - off++; - totalPowerUsage -= c_action.powered(); - } - global[region][struct]["soff"] = sup * off; - } - }); - p_on[struct] = on; - } - } - } - } - let power_grid_temp = power_grid; - for (let i2 = 0; i2 < p_structs.length; i2++) { - const parts = p_structs[i2].split(":"); - const struct = parts[1]; - const region = parts[0] === "city" ? parts[0] : convertSpaceSector(parts[0]); - const c_action = parts[0] === "city" ? actions.city[struct] : actions[region][parts[0]][struct]; - if (global[region][struct]?.on) { - let power = p_on[struct] * c_action.powered(); - while (power > power_grid_temp && power > 0) { - p_on[struct]--; - power = p_on[struct] * c_action.powered(); - } - if (c_action.hasOwnProperty("p_fuel")) { - let s_fuels = c_action.p_fuel(); - if (!Array.isArray(s_fuels)) { - s_fuels = [s_fuels]; - } - for (let j = 0; j < s_fuels.length; j++) { - const title = typeof c_action.title === "string" ? c_action.title : c_action.title(); - const fuel = s_fuels[j]; - const fuel_cost = ["Oil", "Helium_3"].includes(fuel.r) && region === "space" ? fuel_adjust(fuel.a, true) : fuel.a; - let mb_consume = p_on[struct] * fuel_cost; - for (let k = 0; k < p_on[struct]; k++) { - if (!modRes(fuel.r, -(time_multiplier * fuel_cost))) { - mb_consume = k * fuel_cost; - p_on[struct] = k; - power = p_on[struct] * c_action.powered(); - break; - } - } - breakdown.p.consume[fuel.r][title] = -mb_consume; - } - } - power_grid_temp -= power; - if (p_on[struct] !== global[region][struct].on) { - $(`#${region}-${struct} .on`).addClass("warn"); - $(`#${region}-${struct} .on`).prop("title", `ON ${p_on[struct]}/${global[region][struct].on}`); - if (["matrix", "atmo_terraformer", "ascension_trigger"].includes(struct)) { - callback_queue.set([c_action, "postPower"], [true]); - } - } else { - $(`#${region}-${struct} .on`).removeClass("warn"); - $(`#${region}-${struct} .on`).prop("title", `ON`); - } - } else { - p_on[struct] = 0; - $(`#${region}-${struct} .on`).removeClass("warn"); - $(`#${region}-${struct} .on`).prop("title", `ON`); - } - } - power_grid -= totalPowerDemand; - if (global.space["m_relay"]) { - if (p_on["m_relay"]) { - if (global.space.m_relay.charged < 1e4) { - global.space.m_relay.charged++; - } - } else { - global.space.m_relay.charged = 0; - } - } - if (global.space["fob"] && global.space["lander"]) { - if (p_on["fob"]) { - let fuel = fuel_adjust(50, true); - support_on["lander"] = global.space.lander.on; - let total2 = garrisonSize(false, { nofob: true }); - let troopReq = jobScale(3); - let deployed = support_on["lander"] * troopReq; - if (deployed <= total2) { - global.space.fob.troops = deployed; - } else { - support_on["lander"] -= Math.ceil((deployed - total2) / troopReq); - global.space.fob.troops = support_on["lander"] * troopReq; - } - let mb_consume = support_on["lander"] * fuel; - breakdown.p.consume.Oil[loc("space_lander_title")] = -mb_consume; - for (let i2 = 0; i2 < support_on["lander"]; i2++) { - if (!modRes("Oil", -(time_multiplier * fuel))) { - mb_consume -= support_on["lander"] * fuel - i2 * fuel; - support_on["lander"] -= i2; - break; - } - } - if (support_on["lander"] !== global.space.lander.on) { - $(`#space-lander .on`).addClass("warn"); - $(`#space-lander .on`).prop("title", `ON ${support_on["lander"]}/${global.space.lander.on}`); - } else { - $(`#space-lander .on`).removeClass("warn"); - $(`#space-lander .on`).prop("title", `ON`); - } - } else { - global.space.fob.troops = 0; - $(`#space-lander .on`).addClass("warn"); - $(`#space-lander .on`).prop("title", `ON 0/${global.space.lander.on}`); - } - } - if (p_on["s_gate"] && p_on["foothold"]) { - let increment2 = 2.5; - let consume = p_on["foothold"] * increment2; - while (consume * time_multiplier > global.resource["Elerium"].amount && consume > 0) { - consume -= increment2; - p_on["foothold"]--; - } - breakdown.p.consume.Elerium[loc("galaxy_foothold")] = -consume; - let number = consume * time_multiplier; - modRes("Elerium", -number); - } - if (global.race["fasting"]) { - const foodBuildings = ["city:tourist_center", "space:spaceport", "int_:starport", "gxy_:starbase", "space:space_barracks", "int_:zoo", "eden_:restaurant"]; - for (let i2 = 0; i2 < foodBuildings.length; i2++) { - let parts = foodBuildings[i2].split(":"); - let space2 = convertSpaceSector(parts[0]); - let region = parts[0] === "city" ? parts[0] : space2; - if (global[region][parts[1]] && global[region][parts[1]]["on"]) { - if (p_on[parts[1]]) { - p_on[parts[1]] = 0; - } - $(`#${region}-${parts[1]} .on`).addClass("warn"); - $(`#${region}-${parts[1]} .on`).prop("title", `ON 0`); - } else { - $(`#${region}-${parts[1]} .on`).removeClass("warn"); - $(`#${region}-${parts[1]} .on`).prop("title", `ON`); - } - } - global.civic.meditator.display = true; - } - [ - { a: "space", r: "spc_moon", s: "moon_base", g: "moon" }, - { a: "space", r: "spc_red", s: "spaceport", g: "red" }, - { a: "space", r: "spc_titan", s: "electrolysis", g: "titan" }, - { a: "space", r: "spc_titan", r2: "spc_enceladus", s: "titan_spaceport", g: "enceladus" }, - { a: "space", r: "spc_eris", s: "drone_control", g: "eris" }, - { a: "tauceti", r: "tau_home", s: "orbital_station", g: "tau_home" }, - { a: "tauceti", r: "tau_red", s: "orbital_platform", g: "tau_red" }, - { a: "tauceti", r: "tau_roid", s: "patrol_ship", g: "tau_roid", oc: true }, - { a: "eden", r: "eden_asphodel", s: "encampment", g: "asphodel" } - ].forEach(function(sup) { - sup["r2"] = sup["r2"] || sup.r; - if (global[sup.a][sup.s] && global[sup.a][sup.s].count > 0) { - if (!p_structs.includes(`${sup.r}:${sup.s}`)) { - p_on[sup.s] = global[sup.a][sup.s].on; - } - if (actions[sup.a][sup.r][sup.s].hasOwnProperty("support_fuel")) { - let s_fuels = actions[sup.a][sup.r][sup.s].support_fuel(); - if (!Array.isArray(s_fuels)) { - s_fuels = [s_fuels]; - } - for (let j = 0; j < s_fuels.length; j++) { - let fuel = s_fuels[j]; - let fuel_cost = ["Oil", "Helium_3"].includes(fuel.r) ? sup.a === "space" ? +fuel_adjust(fuel.a, true) : +int_fuel_adjust(fuel.a) : fuel.a; - let mb_consume = p_on[sup.s] * fuel_cost; - breakdown.p.consume[fuel.r][actions[sup.a][sup.r][sup.s].title] = -mb_consume; - for (let i3 = 0; i3 < p_on[sup.s]; i3++) { - if (!modRes(fuel.r, -(time_multiplier * fuel_cost))) { - mb_consume -= p_on[sup.s] * fuel_cost - i3 * fuel_cost; - p_on[sup.s] = i3; - break; - } - } - if (p_on[sup.s] < global[sup.a][sup.s].on) { - $(`#space-${sup.s} .on`).addClass("warn"); - $(`#space-${sup.s} .on`).prop("title", `ON ${p_on[sup.s]}/${global[sup.a][sup.s].on}`); - } else { - $(`#space-${sup.s} .on`).removeClass("warn"); - $(`#space-${sup.s} .on`).prop("title", `ON`); - } - } - } - global[sup.a][sup.s].s_max = p_on[sup.s] * actions[sup.a][sup.r][sup.s].support(); - switch (sup.g) { - case "moon": - { - global[sup.a][sup.s].s_max += global.tech["luna"] && global.tech["luna"] >= 2 ? p_on["nav_beacon"] * actions.space.spc_home.nav_beacon.support() : 0; - } - break; - case "red": - { - global[sup.a][sup.s].s_max += global.tech["mars"] && global.tech["mars"] >= 3 ? p_on["red_tower"] * actions.space.spc_red.red_tower.support() : 0; - global[sup.a][sup.s].s_max += global.tech["luna"] && global.tech["luna"] >= 3 ? p_on["nav_beacon"] * actions.space.spc_home.nav_beacon.support() : 0; - } - break; - case "tau_home": - { - global[sup.a][sup.s].s_max += p_on["tau_farm"] ? p_on["tau_farm"] : 0; - } - break; - case "asphodel": - { - global[sup.a][sup.s].s_max += (p_on["rectory"] ? p_on["rectory"] : 0) * actions.eden.eden_asphodel.rectory.support(); - global[sup.a][sup.s].s_max += (p_on["corruptor"] ? p_on["corruptor"] : 0) * actions.eden.eden_asphodel.corruptor.support(); - } - break; - } - } - if (global[sup.a][sup.s] && sup.r === "spc_eris" && !p_on["ai_core2"]) { - global[sup.a][sup.s].s_max = 0; - } - if (global[sup.a][sup.s]) { - let used_support = 0; - let area_structs = global.support[sup.g].map((x) => x.split(":")[1]); - for (var i2 = 0; i2 < area_structs.length; i2++) { - if (global[sup.a][area_structs[i2]]) { - let id = actions[sup.a][sup.r2][area_structs[i2]].id; - let supportSize = actions[sup.a][sup.r2][area_structs[i2]].hasOwnProperty("support") ? actions[sup.a][sup.r2][area_structs[i2]].support() * -1 : 1; - let operating = global[sup.a][area_structs[i2]].on; - let remaining_support = global[sup.a][sup.s].s_max - used_support; - if (operating * supportSize > remaining_support && !sup.oc) { - operating = Math.floor(remaining_support / supportSize); - $(`#${id} .on`).addClass("warn"); - $(`#${id} .on`).prop("title", `ON ${operating}/${global[sup.a][area_structs[i2]].on}`); - } else { - $(`#${id} .on`).removeClass("warn"); - $(`#${id} .on`).prop("title", `ON`); - } - if (actions[sup.a][sup.r2][area_structs[i2]].hasOwnProperty("support_fuel")) { - let s_fuels = actions[sup.a][sup.r2][area_structs[i2]].support_fuel(); - if (!Array.isArray(s_fuels)) { - s_fuels = [s_fuels]; - } - for (let j = 0; j < s_fuels.length; j++) { - let fuel = s_fuels[j]; - let fuel_cost = ["Oil", "Helium_3"].includes(fuel.r) ? sup.a === "space" ? +fuel_adjust(fuel.a, true) : +int_fuel_adjust(fuel.a) : fuel.a; - let mb_consume = operating * fuel_cost; - breakdown.p.consume[fuel.r][actions[sup.a][sup.r2][area_structs[i2]].title] = -mb_consume; - for (let i3 = 0; i3 < operating; i3++) { - if (!modRes(fuel.r, -(time_multiplier * fuel_cost))) { - mb_consume -= operating * fuel_cost - i3 * fuel_cost; - operating -= i3; - break; - } - } - } - } - used_support += operating * supportSize; - support_on[area_structs[i2]] = operating; - } else { - support_on[area_structs[i2]] = 0; - } - } - global[sup.a][sup.s].support = used_support; - } - }); - let womling_technician = 1; - if (global.tech["womling_technicians"]) { - womling_technician = 1 + p_on["womling_station"] * (global.tech["isolation"] ? 0.3 : 0.08); - if (global.tech["womling_gene"]) { - womling_technician *= 1.25; - } - } - if (global.space["space_barracks"] && !global.race["fasting"]) { - let oil_cost = +fuel_adjust(2, true); - let sm_consume = global.space.space_barracks.on * oil_cost; - breakdown.p.consume.Oil[loc("tech_space_marines_bd")] = -sm_consume; - for (let i2 = 0; i2 < global.space.space_barracks.on; i2++) { - if (!modRes("Oil", -(time_multiplier * oil_cost))) { - sm_consume -= global.space.space_barracks.on * oil_cost - i2 * oil_cost; - global.space.space_barracks.on -= i2; - break; - } - } - } - if (p_on["red_factory"] && p_on["red_factory"] > 0) { - let h_consume = p_on["red_factory"] * fuel_adjust(1, true); - modRes("Helium_3", -(h_consume * time_multiplier)); - breakdown.p.consume.Helium_3[structName("factory")] = -h_consume; - } - if (p_on["int_factory"] && p_on["int_factory"] > 0) { - let d_consume = p_on["int_factory"] * int_fuel_adjust(5); - modRes("Deuterium", -(d_consume * time_multiplier)); - breakdown.p.consume.Deuterium[loc("interstellar_int_factory_title")] = -d_consume; - } - if (support_on["water_freighter"] && support_on["water_freighter"] > 0) { - let h_cost = fuel_adjust(5, true); - let h_consume = support_on["water_freighter"] * h_cost; - for (let i2 = 0; i2 < support_on["water_freighter"]; i2++) { - if (!modRes("Helium_3", -(time_multiplier * h_cost))) { - h_consume -= support_on["water_freighter"] * h_cost - i2 * h_cost; - support_on["water_freighter"] -= i2; - break; - } - } - breakdown.p.consume.Helium_3[loc("space_water_freighter_title")] = -h_consume; - } - if (global.interstellar["starport"] && global.interstellar["starport"].count > 0) { - let fuel_cost = +int_fuel_adjust(5); - let mb_consume = p_on["starport"] * fuel_cost; - breakdown.p.consume.Helium_3[loc("interstellar_alpha_starport_title")] = -mb_consume; - for (let i2 = 0; i2 < p_on["starport"]; i2++) { - if (!modRes("Helium_3", -(time_multiplier * fuel_cost))) { - mb_consume -= p_on["starport"] * fuel_cost - i2 * fuel_cost; - p_on["starport"] -= i2; - break; - } - } - global.interstellar.starport.s_max = p_on["starport"] * actions.interstellar.int_alpha.starport.support(); - global.interstellar.starport.s_max += p_on["habitat"] * actions.interstellar.int_alpha.habitat.support(); - global.interstellar.starport.s_max += p_on["xfer_station"] * actions.interstellar.int_proxima.xfer_station.support(); - } - let miner_droids = { - adam: 0, - uran: 0, - coal: 0, - alum: 0 - }; - if (global.interstellar["starport"]) { - let used_support = 0; - let structs = global.support.alpha.map((x) => x.split(":")[1]); - for (var i = 0; i < structs.length; i++) { - if (global.interstellar[structs[i]]) { - let operating = global.interstellar[structs[i]].on; - let id = actions.interstellar.int_alpha[structs[i]].id; - if (used_support + operating > global.interstellar.starport.s_max) { - operating -= used_support + operating - global.interstellar.starport.s_max; - $(`#${id} .on`).addClass("warn"); - $(`#${id} .on`).prop("title", `ON ${operating}/${global.interstellar[structs[i]].on}`); - } else { - $(`#${id} .on`).removeClass("warn"); - $(`#${id} .on`).prop("title", `ON`); - } - used_support += operating; - int_on[structs[i]] = operating; - } else { - int_on[structs[i]] = 0; - } - } - global.interstellar.starport.support = used_support; - if (global.interstellar.hasOwnProperty("mining_droid") && global.interstellar.mining_droid.count > 0) { - let on_droid = int_on["mining_droid"]; - let max_droid = global.interstellar.mining_droid.on; - let eff = max_droid > 0 ? on_droid / max_droid : 0; - let remaining = max_droid; - ["adam", "uran", "coal", "alum"].forEach(function(res) { - remaining -= global.interstellar.mining_droid[res]; - if (remaining < 0) { - global.interstellar.mining_droid[res] += remaining; - remaining = 0; - } - miner_droids[res] = global.interstellar.mining_droid[res] * eff; - }); - } - } - if (global.galaxy["starbase"] && global.galaxy["starbase"].count > 0) { - let fuel_cost = +int_fuel_adjust(25); - let mb_consume = p_on["starbase"] * fuel_cost; - breakdown.p.consume.Helium_3[loc("galaxy_starbase")] = -mb_consume; - for (let i2 = 0; i2 < p_on["starbase"]; i2++) { - if (!modRes("Helium_3", -(time_multiplier * fuel_cost))) { - mb_consume -= p_on["starbase"] * fuel_cost - i2 * fuel_cost; - p_on["starbase"] -= i2; - break; - } - } - if (p_on["s_gate"]) { - global.galaxy.starbase.s_max = p_on["starbase"] * actions.galaxy.gxy_gateway.starbase.support(); - if (p_on["gateway_station"]) { - global.galaxy.starbase.s_max += p_on["gateway_station"] * actions.galaxy.gxy_stargate.gateway_station.support(); - } - if (p_on["telemetry_beacon"]) { - global.galaxy.starbase.s_max += p_on["telemetry_beacon"] * actions.galaxy.gxy_stargate.telemetry_beacon.support(); - } - if (p_on["ship_dock"]) { - global.galaxy.starbase.s_max += p_on["ship_dock"] * actions.galaxy.gxy_gateway.ship_dock.support(); - } - } else { - global.galaxy.starbase.s_max = 0; - } - } - if (global.galaxy["starbase"]) { - let used_support = 0; - let gateway_structs = global.support.gateway.map((x) => x.split(":")[1]); - for (var i = 0; i < gateway_structs.length; i++) { - if (global.galaxy[gateway_structs[i]]) { - let operating = global.galaxy[gateway_structs[i]].on; - let id = actions.galaxy.gxy_gateway[gateway_structs[i]].id; - let operating_cost = -actions.galaxy.gxy_gateway[gateway_structs[i]].support(); - let max_operating = Math.floor((global.galaxy.starbase.s_max - used_support) / operating_cost); - if (operating > max_operating) { - operating = max_operating; - $(`#${id} .on`).addClass("warn"); - $(`#${id} .on`).prop("title", `ON ${operating}/${global.galaxy[gateway_structs[i]].on}`); - } else { - $(`#${id} .on`).removeClass("warn"); - $(`#${id} .on`).prop("title", `ON`); - } - used_support += operating * operating_cost; - gal_on[gateway_structs[i]] = operating; - } else { - gal_on[gateway_structs[i]] = 0; - } - } - global.galaxy.starbase.support = used_support; - } - if (global.galaxy["foothold"] && global.galaxy.foothold.count > 0) { - global.galaxy.foothold.s_max = p_on["s_gate"] * p_on["foothold"] * actions.galaxy.gxy_alien2.foothold.support(); - } - if (global.portal["guard_post"]) { - global.portal.guard_post.s_max = global.portal.guard_post.count * actions.portal.prtl_ruins.guard_post.support(); - if (global.portal.guard_post.on > 0) { - let army = global.portal.fortress.garrison - global.portal.fortress.patrols * global.portal.fortress.patrol_size; - if (p_on["soul_forge"]) { - let forge = soulForgeSoldiers(); - if (forge <= army) { - army -= forge; - } - } - if (army < jobScale(global.portal.guard_post.on)) { - global.portal.guard_post.on = Math.floor(army / jobScale(1)); - p_on["guard_post"] = Math.min(global.portal.guard_post.on, p_on["guard_post"]); - } - } - global.portal.guard_post.support = global.portal.guard_post.on; - } - if (global.portal["harbor"]) { - global.portal.harbor.s_max = p_on["harbor"] * actions.portal.prtl_lake.harbor.support(); - } - if (global.portal["purifier"]) { - global.portal.purifier.s_max = +(p_on["purifier"] * actions.portal.prtl_spire.purifier.support()).toFixed(2); - let used_support = 0; - let purifier_structs = global.support.spire.map((x) => x.split(":")[1]); - for (var i = 0; i < purifier_structs.length; i++) { - if (global.portal[purifier_structs[i]]) { - let operating = global.portal[purifier_structs[i]].on; - let id = actions.portal.prtl_spire[purifier_structs[i]].id; - if (used_support + operating > global.portal.purifier.s_max) { - operating -= used_support + operating - global.portal.purifier.s_max; - $(`#${id} .on`).addClass("warn"); - $(`#${id} .on`).prop("title", `ON ${operating}/${global.portal[purifier_structs[i]].on}`); - } else { - $(`#${id} .on`).removeClass("warn"); - $(`#${id} .on`).prop("title", `ON`); - } - used_support += operating * -actions.portal.prtl_spire[purifier_structs[i]].support(); - spire_on[purifier_structs[i]] = operating; - } else { - spire_on[purifier_structs[i]] = 0; - } - } - global.portal.purifier.support = used_support; - } - if (global.space["space_station"] && global.space["space_station"].count > 0) { - let fuel_cost = +fuel_adjust(2.5, true); - let ss_consume = p_on["space_station"] * fuel_cost; - breakdown.p.consume.Helium_3[loc("space_belt_station_title")] = -ss_consume; - for (let i2 = 0; i2 < p_on["space_station"]; i2++) { - if (!modRes("Helium_3", -(time_multiplier * fuel_cost))) { - ss_consume -= p_on["space_station"] * fuel_cost - i2 * fuel_cost; - p_on["space_station"] -= i2; - break; - } - } - } - if (global.space["space_station"]) { - let used_support = 0; - let belt_structs = global.support.belt.map((x) => x.split(":")[1]); - for (var i = 0; i < belt_structs.length; i++) { - if (global.space[belt_structs[i]]) { - let operating = global.space[belt_structs[i]].on; - let id = actions.space.spc_belt[belt_structs[i]].id; - if (used_support + operating * -actions.space.spc_belt[belt_structs[i]].support() > global.space.space_station.s_max) { - let excess = used_support + operating * -actions.space.spc_belt[belt_structs[i]].support() - global.space.space_station.s_max; - operating -= Math.ceil(excess / -actions.space.spc_belt[belt_structs[i]].support()); - $(`#${id} .on`).addClass("warn"); - $(`#${id} .on`).prop("title", `ON ${operating}/${global.space[belt_structs[i]].on}`); - } else { - $(`#${id} .on`).removeClass("warn"); - $(`#${id} .on`).prop("title", `ON`); - } - used_support += operating * -actions.space.spc_belt[belt_structs[i]].support(); - support_on[belt_structs[i]] = operating; - } else { - support_on[belt_structs[i]] = 0; - } - } - global.space.space_station.support = used_support; - } - if (global.interstellar["nexus"] && global.interstellar["nexus"].count > 0) { - let cash_cost = 350; - let mb_consume = p_on["nexus"] * cash_cost; - breakdown.p.consume.Money[loc("interstellar_nexus_bd")] = -mb_consume; - for (let i2 = 0; i2 < p_on["nexus"]; i2++) { - if (!modRes("Money", -(time_multiplier * cash_cost))) { - mb_consume -= p_on["nexus"] * cash_cost - i2 * cash_cost; - p_on["nexus"] -= i2; - break; - } - } - global.interstellar.nexus.s_max = p_on["nexus"] * actions.interstellar.int_nebula.nexus.support(); - } - if (global.interstellar["nexus"]) { - let used_support = 0; - let structs = global.support.nebula.map((x) => x.split(":")[1]); - for (var i = 0; i < structs.length; i++) { - if (global.interstellar[structs[i]]) { - let operating = global.interstellar[structs[i]].on; - let id = actions.interstellar.int_nebula[structs[i]].id; - if (used_support + operating > global.interstellar.nexus.s_max) { - operating -= used_support + operating - global.interstellar.nexus.s_max; - $(`#${id} .on`).addClass("warn"); - $(`#${id} .on`).prop("title", `ON ${operating}/${global.interstellar[structs[i]].on}`); - } else { - $(`#${id} .on`).removeClass("warn"); - $(`#${id} .on`).prop("title", `ON`); - } - used_support += operating; - int_on[structs[i]] = operating; - } else { - int_on[structs[i]] = 0; - } - } - global.interstellar.nexus.support = used_support; - } - if (global.interstellar["xfer_station"] && p_on["xfer_station"]) { - let fuel_cost = 0.28; - let xfer_consume = p_on["xfer_station"] * fuel_cost; - breakdown.p.consume.Uranium[loc("interstellar_xfer_station_title")] = -xfer_consume; - for (let i2 = 0; i2 < p_on["xfer_station"]; i2++) { - if (!modRes("Uranium", -(time_multiplier * fuel_cost))) { - xfer_consume -= p_on["xfer_station"] * fuel_cost - i2 * fuel_cost; - p_on["xfer_station"] -= i2; - break; - } - } - } - if (global.space["fob"] && p_on["fob"]) { - let fuel_cost = +fuel_adjust(125, true); - let xfer_consume = p_on["fob"] * fuel_cost; - breakdown.p.consume.Helium_3[loc("tech_fob")] = -xfer_consume; - for (let i2 = 0; i2 < p_on["fob"]; i2++) { - if (!modRes("Helium_3", -(time_multiplier * fuel_cost))) { - xfer_consume -= p_on["fob"] * fuel_cost - i2 * fuel_cost; - p_on["fob"] -= i2; - break; - } - } - } - if (p_on["outpost"] && p_on["outpost"] > 0) { - let fuel_cost = +fuel_adjust(2, true); - let out_consume = p_on["outpost"] * fuel_cost; - breakdown.p.consume.Oil[loc("space_gas_moon_outpost_bd")] = -out_consume; - for (let i2 = 0; i2 < p_on["outpost"]; i2++) { - if (!modRes("Oil", -(time_multiplier * fuel_cost))) { - out_consume -= p_on["outpost"] * fuel_cost - i2 * fuel_cost; - p_on["outpost"] -= i2; - break; - } - } - } - if (p_on["neutron_miner"] && p_on["neutron_miner"] > 0) { - let fuel_cost = +int_fuel_adjust(3); - let out_consume = p_on["neutron_miner"] * fuel_cost; - breakdown.p.consume.Helium_3[loc("interstellar_neutron_miner_title")] = -out_consume; - for (let i2 = 0; i2 < p_on["neutron_miner"]; i2++) { - if (!modRes("Helium_3", -(time_multiplier * fuel_cost))) { - out_consume -= p_on["neutron_miner"] * fuel_cost - i2 * fuel_cost; - p_on["neutron_miner"] -= i2; - break; - } - } - } - if (global.interstellar["cruiser"]) { - let fuel_cost = +int_fuel_adjust(6); - let active = global.interstellar["cruiser"].on; - let out_consume = active * fuel_cost; - breakdown.p.consume.Helium_3[loc("interstellar_cruiser_title")] = -out_consume; - for (let i2 = 0; i2 < global.interstellar["cruiser"].on; i2++) { - if (!modRes("Helium_3", -(time_multiplier * fuel_cost))) { - out_consume -= global.interstellar["cruiser"].on * fuel_cost - i2 * fuel_cost; - active -= i2; - break; - } - } - int_on["cruiser"] = active; - } - if (global.eden["pillbox"]) { - let pillsize = jobScale(10); - if (p_on["pillbox"]) { - var staff = p_on["pillbox"] * pillsize; - let soldiers = garrisonSize(false, { nopill: true }); - if (soldiers < staff) { - staff = Math.floor(soldiers / pillsize) * pillsize; - } - global.eden.pillbox.staffed = staff; - } else { - global.eden.pillbox.staffed = 0; - } - if (global.eden.pillbox.staffed < p_on["pillbox"] * pillsize) { - $(`#eden-pillbox .on`).addClass("warn"); - } else { - $(`#eden-pillbox .on`).removeClass("warn"); - } - } - if (global.tech["isolation"] && global.race["truepath"]) { - support_on["g_factory"] = p_on["refueling_station"]; - global.space.g_factory.count = global.tauceti.refueling_station.count; - global.space.g_factory.on = global.tauceti.refueling_station.on; - } - if (global.race["replicator"] && p_on["replicator"]) { - let res = global.race.replicator.res; - if (!["Asphodel_Powder", "Elysanite"].includes(res)) { - let vol = replicator(res, p_on["replicator"]); - breakdown.p.consume[res][loc("tau_replicator_db")] = vol; - modRes(res, time_multiplier * vol); - } - } - if (p_on["s_gate"]) { - if (!global.settings.showGalactic) { - global.settings.showGalactic = true; - global.settings.space.stargate = true; - renderSpace(); - } - } else { - global.settings.showGalactic = false; - global.settings.space.stargate = false; - } - if (p_on["shipyard"]) { - global.settings.showShipYard = true; - } else { - global.settings.showShipYard = false; - if (global.settings.govTabs === 5) { - global.settings.govTabs = 0; - } - } - let crew_civ = 0; - let crew_mil = 0; - let total = 0; - let andromeda_helium = 0; - let andromeda_deuterium = 0; - for (let j = 0; j < galaxy_ship_types.length; j++) { - const area = galaxy_ship_types[j].area; - const region = galaxy_ship_types[j].region; - const req = galaxy_ship_types[j].hasOwnProperty("req") ? p_on[galaxy_ship_types[j].req] > 0 : true; - const support_home = actions[area][region].info?.support; - let used_support = 0; - for (let i2 = 0; i2 < galaxy_ship_types[j].ships.length; i2++) { - const ship = galaxy_ship_types[j].ships[i2]; - if (global[area][ship]) { - let operating = 0; - if (global[area][ship].hasOwnProperty("on") && req && (p_on["s_gate"] || area !== "galaxy")) { - const id = actions[area][region][ship].id; - const num_on = global[area][ship].on; - operating = num_on; - const operating_cost = actions[area][region][ship].hasOwnProperty("support") ? -actions[area][region][ship].support() : 0; - if (operating_cost > 0) { - const max_operating = Math.floor((global[area][support_home].s_max - used_support) / operating_cost); - operating = Math.min(operating, max_operating); - } - if (actions[area][region][ship].hasOwnProperty("ship")) { - if (actions[area][region][ship].ship.civ && global[area][ship].hasOwnProperty("crew")) { - let civPerShip = actions[area][region][ship].ship.civ(); - if (civPerShip > 0) { - if (global[area][ship].crew < 0) { - global[area][ship].crew = 0; - } - if (global[area][ship].crew < operating * civPerShip) { - if (total < global.resource[global.race.species].amount) { - if (global.civic[global.civic.d_job].workers >= civPerShip) { - global.civic[global.civic.d_job].workers -= civPerShip; - global.civic.crew.workers += civPerShip; - global[area][ship].crew += civPerShip; - } - } - } else if (global[area][ship].crew > operating * civPerShip) { - global.civic[global.civic.d_job].workers += civPerShip; - global.civic.crew.workers -= civPerShip; - global[area][ship].crew -= civPerShip; - } - global.civic.crew.assigned = global.civic.crew.workers; - crew_civ += global[area][ship].crew; - total += global[area][ship].crew; - operating = Math.min(operating, Math.floor(global[area][ship].crew / civPerShip)); - } - } - if (actions[area][region][ship].ship.mil && global[area][ship].hasOwnProperty("mil")) { - let milPerShip = actions[area][region][ship].ship.mil(); - if (milPerShip > 0) { - if (global[area][ship].mil !== operating * milPerShip) { - global[area][ship].mil = operating * milPerShip; - } - if (global.civic.garrison.workers - global.portal.fortress.garrison < 0) { - let underflow = global.civic.garrison.workers - global.portal.fortress.garrison; - global[area][ship].mil -= underflow; - } - if (crew_mil + global[area][ship].mil > global.civic.garrison.workers - global.portal.fortress.garrison) { - global[area][ship].mil = global.civic.garrison.workers - global.portal.fortress.garrison - crew_mil; - } - if (global[area][ship].mil < 0) { - global[area][ship].mil = 0; - } - crew_mil += global[area][ship].mil; - operating = Math.min(operating, Math.floor(global[area][ship].mil / milPerShip)); - } - } - if (actions[area][region][ship].ship.hasOwnProperty("helium")) { - let increment2 = +int_fuel_adjust(actions[area][region][ship].ship.helium).toFixed(2); - let consume = operating * increment2; - while (consume * time_multiplier > global.resource.Helium_3.amount + (global.resource.Helium_3.diff > 0 ? global.resource.Helium_3.diff * time_multiplier : 0) && operating > 0) { - consume -= increment2; - operating--; - } - modRes("Helium_3", -(consume * time_multiplier)); - andromeda_helium += consume; - } - if (actions[area][region][ship].ship.hasOwnProperty("deuterium")) { - let increment2 = +int_fuel_adjust(actions[area][region][ship].ship.deuterium).toFixed(2); - let consume = operating * increment2; - while (consume * time_multiplier > global.resource.Deuterium.amount + (global.resource.Deuterium.diff > 0 ? global.resource.Deuterium.diff * time_multiplier : 0) && operating > 0) { - consume -= increment2; - operating--; - } - modRes("Deuterium", -(consume * time_multiplier)); - andromeda_deuterium += consume; - } - } - if (operating < num_on) { - $(`#${id} .on`).addClass("warn"); - $(`#${id} .on`).prop("title", `ON ${operating}/${num_on}`); - } else { - $(`#${id} .on`).removeClass("warn"); - $(`#${id} .on`).prop("title", `ON`); - } - used_support += operating * operating_cost; - } - gal_on[ship] = operating; - } - } - if (support_home && global?.[area]?.[support_home]?.hasOwnProperty("support")) { - global[area][support_home].support = used_support; - } - } - breakdown.p.consume.Helium_3[loc("galaxy_fuel_consume")] = -andromeda_helium; - breakdown.p.consume.Deuterium[loc("galaxy_fuel_consume")] = -andromeda_deuterium; - global.civic.crew.workers = crew_civ; - if (global.civic.garrison.hasOwnProperty("crew")) { - if (global.space.hasOwnProperty("shipyard") && global.space.shipyard.hasOwnProperty("ships")) { - global.space.shipyard.ships.forEach(function(ship) { - if (ship.location !== "spc_dwarf" || ship.location === "spc_dwarf" && ship.transit > 0) { - crew_mil += shipCrewSize(ship); - } - }); - } - global.civic.garrison.crew = crew_mil; - } - Object.keys(job_desc).forEach(function(job) { - if (global.civic[job]) { - if (job !== "crew") { - total += global.civic[job].workers; - if (total > global.resource[global.race.species].amount) { - global.civic[job].workers -= total - global.resource[global.race.species].amount; - } - if (!global.civic[job].display || global.civic[job].workers < 0) { - global.civic[job].workers = 0; - } - } - if (job !== "unemployed" && job !== "hunter" && job !== "forager") { - let stress_level = global.civic[job].stress; - if (global.city.ptrait.includes("mellow")) { - stress_level += planetTraits.mellow.vars()[1]; - } - if (global.race["content"]) { - let effectiveness = job === "hell_surveyor" ? 0.2 : 0.4; - stress_level += global.race["content"] * effectiveness; - } - if (global.city.ptrait.includes("dense") && job === "miner") { - stress_level -= planetTraits.dense.vars()[1]; - } - if (global.race["freespirit"] && job !== "farmer" && job !== "lumberjack" && job !== "quarry_worker" && job !== "crystal_miner" && job !== "scavenger") { - stress_level /= 1 + traits.freespirit.vars()[0] / 100; - } - let workers = global.civic[job].workers; - if (global.race["high_pop"]) { - workers /= traits.high_pop.vars()[0]; - } - if (global.race["sky_lover"] && ["miner", "coal_miner", "crystal_miner", "pit_miner"].includes(job)) { - workers *= 1 + traits.sky_lover.vars()[0] / 100; - } - stress -= workers / stress_level; - } - } - }); - global.civic[global.civic.d_job].workers += global.resource[global.race.species].amount - total; - if (global.civic[global.civic.d_job].workers < 0) { - global.civic[global.civic.d_job].workers = 0; - } - Object.keys(job_desc).forEach(function(job) { - if (job !== "craftsman" && global.civic[job] && global.civic[job].display && global.civic[job].workers < global.civic[job].assigned && global.civic[global.civic.d_job].workers > 0 && global.civic[job].workers < global.civic[job].max) { - global.civic[job].workers++; - global.civic[global.civic.d_job].workers--; - } - }); - let entertainment = 0; - if (global.tech["theatre"] && !global.race["joyless"]) { - entertainment += workerScale(global.civic.entertainer.workers, "entertainer") * global.tech.theatre; - if (global.race["musical"]) { - entertainment += workerScale(global.civic.entertainer.workers, "entertainer") * traits.musical.vars()[0]; - } - if (astroSign2 === "sagittarius") { - entertainment *= 1 + astroVal2("sagittarius")[0] / 100; - } - if (global.race["emotionless"]) { - entertainment *= 1 - traits.emotionless.vars()[0] / 100; - } - if (global.race["high_pop"]) { - entertainment *= traits.high_pop.vars()[1] / 100; - } - } - if (global.civic.govern.type === "democracy") { - let democracy = 1 + govEffect.democracy()[0] / 100; - entertainment *= democracy; - } - global.city.morale.entertain = entertainment; - morale += entertainment; - if (global.tech["broadcast"] && !global.race["joyless"]) { - let gasVal = govActive("gaslighter", 0) || 0; - let signalVal; - let mVal = gasVal + global.tech.broadcast; - if (global.race["orbit_decayed"]) { - signalVal = p_on["nav_beacon"] || 0; - mVal /= 2; - } else if (global.tech["isolation"] && global.race["truepath"]) { - signalVal = support_on["colony"]; - mVal *= 2; - } else { - signalVal = p_on["wardenclyffe"]; - } - global.city.morale.broadcast = signalVal * mVal; - morale += signalVal * mVal; - } else { - global.city.morale.broadcast = 0; - } - if (support_on["vr_center"] && !global.race["joyless"]) { - let gasVal = govActive("gaslighter", 1) || 0; - let vr_morale = gasVal + 1; - if (global.race["orbit_decayed"]) { - vr_morale += 2; - } - global.city.morale.vr = support_on["vr_center"] * vr_morale; - morale += support_on["vr_center"] * vr_morale; - } else { - global.city.morale.vr = 0; - } - if (int_on["zoo"] && !global.race["fasting"]) { - global.city.morale.zoo = int_on["zoo"] * 5; - morale += int_on["zoo"] * 5; - } else { - global.city.morale.zoo = 0; - } - if (p_on["tavern"] && !global.race["joyless"]) { - global.city.morale.tavern = p_on["tavern"] * p_on["shadow_mine"] * 0.35; - morale += p_on["tavern"] * p_on["shadow_mine"] * 0.35; - } else { - global.city.morale.tavern = 0; - } - if (support_on["bliss_den"] && !global.race["joyless"]) { - global.city.morale.bliss_den = support_on["bliss_den"] * 8; - morale += support_on["bliss_den"] * 8; - } else { - global.city.morale.bliss_den = 0; - } - if (p_on["restaurant"] && !global.race["fasting"] && !global.race["joyless"]) { - let val = 0; - val += global.eden.hasOwnProperty("pillbox") && p_on["pillbox"] ? 0.35 * p_on["pillbox"] : 0; - val += global.civic.elysium_miner.workers * 0.15; - val += global.eden.hasOwnProperty("archive") && p_on["archive"] ? 0.4 * p_on["archive"] : 0; - global.city.morale.restaurant = p_on["restaurant"] * val; - morale += p_on["restaurant"] * val; - } else { - global.city.morale.restaurant = 0; - } - if (eventActive("summer")) { - let boost = global.resource.Thermite.diff * 2.5 / (global.resource.Thermite.diff * 2.5 + 500) * 500; - global.city.morale["bonfire"] = boost; - morale += boost; - } else { - delete global.city.morale["bonfire"]; - } - if (global.civic.govern.type === "anarchy") { - stress /= 2; - } - if (global.civic.govern.type === "autocracy") { - stress *= 1 + govEffect.autocracy()[0] / 100; - } - if (global.civic.govern.type === "socialist") { - stress *= 1 + govEffect.socialist()[2] / 100; - } - if (global.race["emotionless"]) { - stress *= 1 - traits.emotionless.vars()[1] / 100; - } - for (let i2 = 0; i2 < 3; i2++) { - if (global.civic.govern.type !== "federation" && global.civic.foreign[`gov${i2}`].anx) { - stress *= 1.1; - } - } - if (global.civic.govern.type === "dictator") { - stress *= 1 + govEffect.dictator()[0] / 100; - } - stress = +stress.toFixed(1); - global.city.morale.stress = stress; - morale += stress; - global.city.morale.tax = 20 - global.civic.taxes.tax_rate; - morale -= global.civic.taxes.tax_rate - 20; - if (global.civic.taxes.tax_rate > 40) { - let high_tax = global.civic.taxes.tax_rate - 40; - global.city.morale.tax -= high_tax * 0.5; - morale -= high_tax * 0.5; - } - if (global.civic.govern.type === "oligarchy" && global.civic.taxes.tax_rate > 20) { - let high_tax = global.civic.taxes.tax_rate - 20; - global.city.morale.tax += high_tax * 0.5; - morale += high_tax * 0.5; - } - if ((global.civic.govern.type !== "autocracy" && !global.race["blood_thirst"] || global.race["immoral"]) && global.civic.garrison.protest + global.civic.garrison.fatigue > 2) { - let immoral = global.race["immoral"] ? 1 + traits.immoral.vars()[0] / 100 : 1; - let warmonger = Math.round(Math.log2(global.civic.garrison.protest + global.civic.garrison.fatigue) * immoral); - global.city.morale.warmonger = global.race["immoral"] ? warmonger : -warmonger; - morale += global.city.morale.warmonger; - } else { - global.city.morale.warmonger = 0; - } - let mBaseCap = 100; - mBaseCap += global.city["casino"] ? p_on["casino"] : 0; - mBaseCap += global.space["spc_casino"] ? p_on["spc_casino"] : 0; - mBaseCap += global.tauceti["tauceti_casino"] ? p_on["tauceti_casino"] : 0; - mBaseCap += global.portal["hell_casino"] ? p_on["hell_casino"] : 0; - if (global.city["amphitheatre"]) { - let athVal = govActive("athleticism", 0); - mBaseCap += athVal ? global.city.amphitheatre.count * athVal : global.city.amphitheatre.count; - } - if (support_on["vr_center"]) { - mBaseCap += support_on["vr_center"] * 2; - } - if (int_on["zoo"] && !global.race["fasting"]) { - mBaseCap += int_on["zoo"] * 2; - } - if (support_on["bliss_den"]) { - mBaseCap += support_on["bliss_den"] * 2; - } - if (p_on["resort"]) { - mBaseCap += p_on["resort"] * 2; - } - if (global.eden["rushmore"] && global.eden.rushmore.count === 1) { - mBaseCap += 10; - } - if (global.tech["superstar"]) { - let mcapval = global.race["high_pop"] ? highPopAdjust(1) : 1; - mBaseCap += workerScale(global.civic.entertainer.workers, "entertainer") * mcapval; - } - moraleCap = mBaseCap; - if (global.tech["monuments"]) { - let gasVal = govActive("gaslighter", 2); - let mcap = gasVal ? 2 - gasVal : 2; - let monuments = global.tech.monuments; - if (global.race["wish"] && global.race["wishStats"]) { - if (global.city["wonder_lighthouse"]) { - monuments += 5; - } - if (global.city["wonder_pyramid"]) { - monuments += 5; - } - if (global.space["wonder_statue"]) { - monuments += 5; - } - if (global.interstellar["wonder_gardens"] || global.space["wonder_gardens"] || global.portal["wonder_gardens"]) { - monuments += 5; - } - } - moraleCap += monuments * mcap; - } - if (global.civic.taxes.tax_rate < 20 && !global.race["banana"]) { - moraleCap += 10 - Math.floor(global.civic.taxes.tax_rate / 2); - } - if (global.stats.achieve["joyless"]) { - moraleCap += global.stats.achieve["joyless"].l * 2; - } - if (global.race["motivated"]) { - let boost = Math.ceil(global.race["motivated"] ** 0.4); - moraleCap += Math.round(boost / 2); - } - let m_min = 50; - if (global.race["optimistic"]) { - m_min += traits.optimistic.vars()[1]; - } - if (geckoFathom > 0) { - m_min += Math.round(traits.optimistic.vars(1)[1] * geckoFathom); - } - if (global.race["truepath"]) { - m_min -= 25; - } - if (global.civic.govern.fr > 0) { - let rev = morale / 2; - global.city.morale.rev = rev; - morale -= rev; - m_min -= 10; - } else { - global.city.morale.rev = 0; - } - if (global.race["tormented"]) { - if (morale > 100) { - let excess = morale - 100; - excess = Math.ceil(excess * traits.tormented.vars()[0] / 100); - morale -= excess; - global.city["tormented"] = excess; - } else { - global.city["tormented"] = 0; - } - } else { - delete global.city["tormented"]; - } - if (global.race["wish"] && global.race["wishStats"] && global.race.wishStats.bad > 0) { - let badPress = Math.floor(global.race.wishStats.bad / 75) + 1; - morale -= badPress * 5; - } - global.city.morale.potential = +morale.toFixed(1); - if (morale < m_min) { - morale = m_min; - } else if (morale > moraleCap) { - let gasVal = govActive("gaslighter", 3) || 0; - morale = moraleCap + (morale - moraleCap) * gasVal / 100; - } - global.city.morale.cap = moraleCap; - global.city.morale.current = morale; - if (global.city.morale.current < 100) { - if (global.race["blissful"]) { - let mVal = global.city.morale.current - 100; - let bliss = traits.blissful.vars()[0] / 100; - global_multiplier *= 1 + mVal * bliss / 100; - breakdown.p["Global"][loc("morale")] = mVal * bliss + "%"; - } else { - global_multiplier *= global.city.morale.current / 100; - breakdown.p["Global"][loc("morale")] = +(global.city.morale.current - 100).toFixed(2) + "%"; - } - } else { - global_multiplier *= 1 + (global.city.morale.current - 100) / 200; - breakdown.p["Global"][loc("morale")] = +((global.city.morale.current - 100) / 2).toFixed(2) + "%"; - } - if (global.race["lazy"] && global.city.calendar.temp === 2) { - breakdown.p["Global"][loc("trait_lazy_bd")] = "-" + traits.lazy.vars()[0] + "%"; - global_multiplier *= 1 - traits.lazy.vars()[0] / 100; - } - if (global.race["distracted"]) { - breakdown.p["Global"][loc("event_m_curious3_bd")] = "-5%"; - global_multiplier *= 0.95; - } - if (global.race["stimulated"]) { - breakdown.p["Global"][loc("event_m_curious4_bd")] = "+10%"; - global_multiplier *= 1.1; - } - if (global.civic.govern.type === "dictator") { - breakdown.p["Global"][loc("wish_dictator")] = `+${govEffect.dictator()[1]}%`; - global_multiplier *= 1 + govEffect.dictator()[1] / 100; - } - if (global.race["selenophobia"]) { - let moon = global.city.calendar.moon > 14 ? 28 - global.city.calendar.moon : global.city.calendar.moon; - breakdown.p["Global"][loc("moon_phase")] = -moon + traits.selenophobia.vars()[0] + "%"; - moon = 1 + traits.selenophobia.vars()[0] / 100 - moon / 100; - global_multiplier *= moon; - } - if (global.interstellar["mass_ejector"]) { - let total2 = 0; - let mass = 0; - let exotic = 0; - Object.keys(global.interstellar.mass_ejector).forEach(function(res) { - if (atomic_mass[res]) { - let ejected = global.interstellar.mass_ejector[res]; - if (total2 + ejected > p_on["mass_ejector"] * 1e3) { - ejected = p_on["mass_ejector"] * 1e3 - total2; - } - total2 += ejected; - if (ejected > 0) { - breakdown.p.consume[res][loc("interstellar_blackhole_name")] = -ejected; - } - if (ejected * time_multiplier > global.resource[res].amount) { - ejected = global.resource[res].amount / time_multiplier; - } - if (ejected < 0) { - ejected = 0; - } - modRes(res, -(time_multiplier * ejected)); - mass += ejected * atomic_mass[res]; - if (global.race.universe !== "magic" && (res === "Elerium" || res === "Infernite")) { - exotic += ejected * atomic_mass[res]; - } - } - }); - global.interstellar.mass_ejector.mass = mass; - global.interstellar.mass_ejector.total = total2; - global.interstellar.stellar_engine.mass += mass / 1e10 * time_multiplier; - global.interstellar.stellar_engine.exotic += exotic / 1e10 * time_multiplier; - } - if (global.portal["transport"] && global.portal["purifier"]) { - let total2 = 0; - let supply = 0; - let bireme_rating = global.blood["spire"] && global.blood.spire >= 2 ? 0.8 : 0.85; - let cargoSize = global.stats.achieve["what_is_best"] && global.stats.achieve.what_is_best.e >= 4 ? 8 : 5; - Object.keys(global.portal.transport.cargo).forEach(function(res) { - if (supplyValue[res]) { - let shipped = global.portal.transport.cargo[res]; - if (total2 + shipped > gal_on["transport"] * cargoSize) { - shipped = gal_on["transport"] * cargoSize - total2; - } - total2 += shipped; - let volume = shipped * supplyValue[res].out; - while (volume * time_multiplier > global.resource[res].amount && volume > 0) { - volume -= supplyValue[res].out; - shipped--; - } - if (volume > 0) { - breakdown.p.consume[res][loc("portal_transport_title")] = -volume; - } - let bireme = 1 - bireme_rating ** (gal_on["bireme"] || 0); - modRes(res, -(time_multiplier * volume)); - supply += Number(shipped * supplyValue[res].in * time_multiplier * bireme); - } - }); - if (global.tech["hell_lake"] && global.tech.hell_lake >= 7 && global.tech["railway"]) { - supply *= 1 + global.tech.railway / 100; - } - if (global.portal["mechbay"]) { - for (let i2 = 0; i2 < global.portal.mechbay.active; i2++) { - let mech = global.portal.mechbay.mechs[i2]; - if (mech.size === "collector") { - supply += mechCollect(mech) * time_multiplier; - } else if (mech.size === "minion" && mech.equip.includes("scavenger")) { - supply += mechCollect(mech) * time_multiplier; - } - } - } - global.portal.purifier.supply += supply; - global.portal.purifier.diff = supply / time_multiplier; - if (global.portal.purifier.supply > global.portal.purifier.sup_max) { - global.portal.purifier.supply = global.portal.purifier.sup_max; - } - } - if (global.race["carnivore"] && !global.race["herbivore"] && !global.race["soul_eater"] && !global.race["artifical"]) { - if (global.resource["Food"].amount > 10) { - let rotPercent = traits.carnivore.vars()[0] / 100; - let rot = +((global.resource["Food"].amount - 10) * rotPercent).toFixed(3); - if (global.city["smokehouse"]) { - rot *= 0.9 ** global.city.smokehouse.count; - } - modRes("Food", -(rot * time_multiplier)); - breakdown.p.consume["Food"][loc("spoilage")] = -rot; - } - } - if (global.race["gnawer"]) { - let res = global.race["kindling_kindred"] || global.race["smoldering"] ? "Stone" : "Lumber"; - if (global.resource[res].display) { - let pop = global.resource[global.race.species].amount + global.civic.garrison.workers; - if (global.race["high_pop"]) { - pop /= traits.high_pop.vars()[0]; - } - let res_cost = pop * traits.gnawer.vars()[0]; - breakdown.p.consume[res][loc("trait_gnawer_bd")] = -res_cost; - modRes(res, -(res_cost * time_multiplier)); - } - } - var fed = true; - if (global.resource[global.race.species].amount >= 1 || global.city["farm"] || global.city["soul_well"] || global.city["compost"] || global.city["tourist_center"] || global.city["transmitter"]) { - let food_base = 0; - let virgo = astroSign2 === "virgo" ? 1 + astroVal2("virgo")[0] / 100 : 1; - if (global.race["artifical"]) { - if (global.city["transmitter"]) { - food_base = p_on["transmitter"] * production("transmitter") * production("psychic_boost", "Food"); - breakdown.p["Food"][loc("city_transmitter")] = food_base + "v"; - global.city.transmitter["lpmod"] = production("transmitter") * global_multiplier * production("psychic_boost", "Food"); - } - } else { - if (global.race["detritivore"]) { - if (global.city["compost"]) { - let operating = global.city.compost.on; - if (!global.race["kindling_kindred"] && !global.race["smoldering"]) { - let lumberIncrement = 0.5; - let lumber_cost = operating * lumberIncrement; - while (lumber_cost * time_multiplier > global.resource.Lumber.amount && lumber_cost > 0) { - lumber_cost -= lumberIncrement; - operating--; - } - breakdown.p.consume.Lumber[loc("city_compost_heap")] = -lumber_cost; - modRes("Lumber", -(lumber_cost * time_multiplier)); - } - let c_factor = traits.detritivore.vars()[0] / 100; - let food_compost = operating * (1.2 + global.tech["compost"] * c_factor); - food_compost *= global.city.biome === "grassland" ? biomes.grassland.vars()[0] : 1; - food_compost *= global.city.biome === "savanna" ? biomes.savanna.vars()[0] : 1; - food_compost *= global.city.biome === "ashland" ? biomes.ashland.vars()[0] : 1; - food_compost *= global.city.biome === "volcanic" ? biomes.volcanic.vars()[0] : 1; - food_compost *= global.city.biome === "hellscape" ? biomes.hellscape.vars()[0] : 1; - food_compost *= global.city.ptrait.includes("trashed") ? planetTraits.trashed.vars()[0] : 1; - food_compost *= production("psychic_boost", "Food"); - breakdown.p["Food"][loc("city_compost_heap")] = food_compost + "v"; - food_base += food_compost; - } - } else if (global.race["carnivore"] || global.race["soul_eater"]) { - let strength = weaponTechModifer(); - let food_hunt = workerScale(global.civic.hunter.workers, "hunter"); - food_hunt *= racialTrait(food_hunt, "hunting"); - if (global.race["servants"]) { - let serve_hunt = global.race.servants.jobs.hunter; - serve_hunt *= servantTrait(global.race.servants.jobs.hunter, "hunting"); - food_hunt += serve_hunt; - } - food_hunt *= strength * (global.race["carnivore"] ? 2 : 0.5); - if (global.race["ghostly"]) { - food_hunt *= 1 + traits.ghostly.vars()[0] / 100; - } - food_hunt *= production("psychic_boost", "Food"); - breakdown.p["Food"][jobName("hunter")] = food_hunt + "v"; - if (global.race["carnivore"] && global.city["lodge"] && food_hunt > 0) { - food_hunt *= 1 + global.city.lodge.count / 20; - breakdown.p["Food"][`\u1102${loc("city_lodge")}`] = global.city.lodge.count * 5 + "%"; - } - if (global.city["soul_well"]) { - let souls = global.city["soul_well"].count * (global.race["ghostly"] ? 2 + traits.ghostly.vars()[1] : 2); - food_hunt += souls * production("psychic_boost", "Food"); - breakdown.p["Food"][loc("city_soul_well")] = souls + "v"; - } - food_base += food_hunt; - } else if (global.race["unfathomable"]) { - if (global.city["captive_housing"]) { - let strength = weaponTechModifer(); - let hunt = workerScale(global.civic.hunter.workers, "hunter"); - hunt *= racialTrait(hunt, "hunting") * strength; - if (global.race["servants"]) { - let serve_hunt = global.race.servants.jobs.hunter * strength; - serve_hunt *= servantTrait(global.race.servants.jobs.hunter, "hunting"); - hunt += serve_hunt; - } - let minHunt = hunt * 8e-3; - if (global.city.captive_housing.cattle < global.city.captive_housing.cattleCap && hunt > 0) { - hunt -= Math.round(global.city.captive_housing.cattle ** 1.25); - if (hunt < minHunt) { - hunt = minHunt; - } - global.city.captive_housing.cattleCatch += hunt * time_multiplier; - if (global.city.captive_housing.cattleCatch >= global.city.captive_housing.cattle ** 2) { - global.city.captive_housing.cattle++; - global.city.captive_housing.cattleCatch = 0; - } - } - if (global.city.captive_housing.cattle > 0) { - let food = global.city.captive_housing.cattle / 3 * production("psychic_boost", "Food"); - breakdown.p["Food"][loc("city_captive_housing_cattle_bd")] = food + "v"; - food_base += food; - if (global.resource.Food.amount < global.resource.Food.max * 0.01) { - global.city.captive_housing.cattle--; - modRes("Food", 1e3 * production("psychic_boost", "Food") * global_multiplier, true); - global.stats.cattle++; - } - } - } - } else if (global.city["farm"] || global.race["forager"] || global.race["warlord"]) { - let weather_multiplier = 1; - if (!global.race["submerged"]) { - if (global.city.calendar.temp === 0) { - if (global.city.calendar.weather === 0) { - weather_multiplier *= global.race["chilled"] ? 1 + traits.chilled.vars()[3] / 100 : 0.7; - } else { - weather_multiplier *= global.race["chilled"] ? 1 + traits.chilled.vars()[4] / 100 : 0.85; - } - } - if (global.city.calendar.weather === 2) { - weather_multiplier *= global.race["chilled"] ? 1 - traits.chilled.vars()[5] / 100 : 1.1; - } - } - if (global.race["forager"]) { - let forage = 1 + (global.tech["foraging"] ? 0.75 * global.tech["foraging"] : 0); - let foragers = workerScale(global.civic.forager.workers, "forager"); - foragers *= racialTrait(foragers, "forager"); - if (global.race["servants"]) { - let serve = global.race.servants.jobs.forager; - serve *= servantTrait(global.race.servants.jobs.forager, "forager"); - foragers += serve; - } - let food_forage = foragers * forage * 0.35; - breakdown.p["Food"][jobName("forager")] = food_forage + "v"; - food_base += food_forage; - } - if (global.race["warlord"]) { - let food = workerScale(global.civic.lumberjack.workers, "farmer") * farmerValue(true); - breakdown.p["Food"][jobName("lumberjack")] = food + "v"; - food_base += food; - } - if (global.city["farm"]) { - let farmers = workerScale(global.civic.farmer.workers, "farmer"); - let farmhands = 0; - if (farmers > jobScale(global.city.farm.count)) { - farmhands = farmers - jobScale(global.city.farm.count); - farmers = jobScale(global.city.farm.count); - } - let food = farmers * farmerValue(true) + farmhands * farmerValue(false); - if (global.race["servants"]) { - let servants = global.race.servants.jobs.farmer; - let servehands = 0; - let open = global.city.farm.count - farmers / (global.race["high_pop"] ? traits.high_pop.vars()[0] : 1); - if (servants > open) { - servehands = servants - open; - servants = open; - } - food += servants * farmerValue(true, true) + servehands * farmerValue(false, true); - } - let mill_multiplier = 1; - if (global.city["mill"]) { - let mill_bonus = global.tech["agriculture"] >= 5 ? 0.05 : 0.03; - let working = global.city["mill"].count - global.city["mill"].on; - mill_multiplier += working * mill_bonus; - } - breakdown.p["Food"][jobName("farmer")] = food + "v"; - food_base += food * virgo * weather_multiplier * mill_multiplier * q_multiplier * production("psychic_boost", "Food"); - if (food > 0) { - breakdown.p["Food"][`\u1102${loc("city_mill_title1")}`] = (mill_multiplier - 1) * 100 + "%"; - breakdown.p["Food"][`\u1102${loc("sign_virgo")}+0`] = (virgo - 1) * 100 + "%"; - breakdown.p["Food"][`\u1102${loc("morale_weather")}`] = (weather_multiplier - 1) * 100 + "%"; - breakdown.p["Food"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - } - } - } - if (global.tauceti["tau_farm"] && p_on["tau_farm"]) { - let colony_val = 1 + (support_on["colony"] || 0) * 0.5; - let food_base2 = production("tau_farm", "food") * p_on["tau_farm"] * production("psychic_boost", "Food"); - let delta2 = food_base2 * global_multiplier * colony_val; - breakdown.p["Food"][loc("tau_home_tau_farm")] = food_base2 + "v"; - if (food_base2 > 0) { - breakdown.p["Food"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - modRes("Food", delta2 * time_multiplier); - } - let hunting = 0; - if (global.tech["military"]) { - hunting = global.race["herbivore"] && !global.race["carnivore"] || global.race["artifical"] ? 0 : armyRating(garrisonSize(), "hunting") / 3; - hunting *= production("psychic_boost", "Food"); - } - let biodome = 0; - let red_synd = syndicate("spc_red"); - if (global.tech["mars"]) { - biodome = support_on["biodome"] * workerScale(global.civic.colonist.workers, "colonist") * production("biodome", "food") * production("psychic_boost", "Food"); - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - biodome += support_on["biodome"] * production("biodome", "cat_food") * production("psychic_boost", "Food"); - } - } - breakdown.p["Food"][actions.space.spc_red.biodome.title()] = biodome + "v"; - if (biodome > 0) { - breakdown.p["Food"][`\u1102${loc("space_syndicate")}+0`] = -((1 - red_synd) * 100) + "%"; - breakdown.p["Food"][`\u1102${loc("space_red_ziggurat_title")}+0`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Food"][`\u1102${loc("sign_virgo")}+0`] = (virgo - 1) * 100 + "%"; - } - let generated = food_base + hunting * q_multiplier + biodome * red_synd * zigVal * virgo; - generated *= global_multiplier; - let soldiers = global.civic.garrison.workers; - if (global.race["parasite"] && !global.tech["isolation"]) { - soldiers -= jobScale(traits.parasite.vars()[0]); - if (soldiers < 0) { - soldiers = 0; - } - } - let consume = 0; - let food_consume_mod = 1; - if (global.race["gluttony"]) { - food_consume_mod *= 1 + traits.gluttony.vars()[0] / 100; - } - if (global.race["high_metabolism"]) { - food_consume_mod *= 1 + traits.high_metabolism.vars()[0] / 100; - } - if (global.race["sticky"]) { - food_consume_mod *= 1 - traits.sticky.vars()[0] / 100; - } - let pingFathom = fathomCheck("pinguicula"); - if (pingFathom > 0) { - food_consume_mod *= 1 - traits.sticky.vars(1)[0] / 100 * pingFathom; - } - if (global.race["photosynth"]) { - switch (global.city.calendar.weather) { - case 0: - food_consume_mod *= global.city.calendar.temp === 0 ? 1 : 1 - traits.photosynth.vars()[2] / 100; - break; - case 1: - food_consume_mod *= 1 - traits.photosynth.vars()[1] / 100; - break; - case 2: - food_consume_mod *= 1 - traits.photosynth.vars()[0] / 100; - break; - } - } - if (global.race["ravenous"]) { - food_consume_mod *= 1 + traits.ravenous.vars()[0] / 100; - } - if (global.race["hibernator"] && global.city.calendar.season === 3) { - food_consume_mod *= 1 - traits.hibernator.vars()[0] / 100; - } - if (global.race["high_pop"]) { - food_consume_mod /= traits.high_pop.vars()[0]; - } - let banquet = 1; - if (global.city.banquet) { - if (global.city.banquet.on) { - banquet *= (global.city.banquet.level >= 5 ? 1.02 : 1.022) ** global.city.banquet.strength; - } else { - global.city.banquet.strength = 0; - } - } - let ravenous = 0; - let tourism = 0; - let spaceport = 0; - let starport = 0; - let starbase = 0; - let space_station = 0; - let space_marines = 0; - let embassy = 0; - let zoo = 0; - let restaurant = 0; - if (!global.race["fasting"]) { - consume = (global.resource[global.race.species].amount + soldiers - (global.civic.unemployed.workers + workerScale(global.civic.hunter.workers, "hunter")) * 0.5) * food_consume_mod; - if (global.race["forager"]) { - consume -= workerScale(global.civic.forager.workers, "forager"); - } - if (global.race["ravenous"]) { - ravenous = global.resource.Food.amount / traits.ravenous.vars()[1]; - } - breakdown.p.consume.Food[flib("name")] = -(consume + ravenous); - if (global.city.banquet && global.city.banquet.on) { - consume = Math.max(consume, 100); - } - if (consume * banquet + ravenous >= global.resource.Food.amount) { - if (global.city.banquet && banquet > 1) { - global.city.banquet.strength = 0; - } - } else { - if (banquet > 1) { - breakdown.p.consume.Food[`${loc("city_banquet")}`] = -(consume * (banquet - 1)); - } - consume *= banquet; - } - if (global.city["tourist_center"]) { - tourism = global.city["tourist_center"].on * 50; - breakdown.p.consume.Food[loc("tech_tourism")] = -tourism; - } - if (global.space["spaceport"]) { - spaceport = p_on["spaceport"] * (global.race["cataclysm"] || global.race["orbit_decayed"] ? 2 : 25); - breakdown.p.consume.Food[loc("space_red_spaceport_title")] = -spaceport; - } - if (global.interstellar["starport"]) { - starport = p_on["starport"] * 100; - breakdown.p.consume.Food[loc("interstellar_alpha_starport_title")] = -starport; - } - if (global.galaxy["starbase"]) { - starbase = p_on["s_gate"] * p_on["starbase"] * 250; - breakdown.p.consume.Food[loc("galaxy_starbase")] = -starbase; - } - if (global.space["space_station"]) { - space_station = p_on["space_station"] * (global.race["cataclysm"] ? 1 : 10); - breakdown.p.consume.Food[loc("space_belt_station_title")] = -space_station; - } - if (global.space["space_barracks"] && !global.race["cataclysm"]) { - space_marines = global.space.space_barracks.on * 10; - breakdown.p.consume.Food[loc("tech_space_marines_bd")] = -space_marines; - } - if (global.galaxy["embassy"]) { - embassy = p_on["s_gate"] * p_on["embassy"] * 7500; - breakdown.p.consume.Food[loc("galaxy_embassy")] = -embassy; - } - if (global.interstellar["zoo"]) { - zoo = int_on["zoo"] * 12e3; - breakdown.p.consume.Food[loc("tech_zoo")] = -zoo; - } - if (global.eden["restaurant"]) { - restaurant = p_on["restaurant"] * 25e4; - breakdown.p.consume.Food[loc("eden_restaurant_bd")] = -restaurant; - } - } - breakdown.p["Food"][loc("soldiers")] = hunting + "v"; - if (hunting > 0) { - breakdown.p["Food"][`\u1102${loc("quarantine")}+1`] = (q_multiplier - 1) * 100 + "%"; - } - if (global.race["fasting"]) { - breakdown.p["Food"][`${loc("evo_challenge_fasting")}`] = "-100%"; - generated *= 0; - } - let delta = generated - consume - ravenous - tourism - spaceport - starport - starbase - space_station - space_marines - embassy - zoo - restaurant; - if (!modRes("Food", delta * time_multiplier) || global.race["fasting"]) { - if (global.race["anthropophagite"] && global.resource[global.race.species].amount > 1 && !global.race["fasting"]) { - global.resource[global.race.species].amount--; - modRes("Food", 1e4 * traits.anthropophagite.vars()[0]); - global.stats.murders++; - blubberFill(1); - } else { - fed = false; - if (global.resource[global.race.species].amount > 0) { - let threshold = 1.25; - let digestion = 0; - let humpback = 0; - let meditators = 0; - let atrophy = 0; - let infusion = 1; - if (global.race["slow_digestion"]) { - digestion += traits.slow_digestion.vars()[0]; - } - let fathom = fathomCheck("slitheryn"); - if (fathom > 0) { - digestion += traits.slow_digestion.vars(1)[0] * fathom; - } - if (global.race["humpback"]) { - humpback = traits.humpback.vars()[0]; - } - if (global.race["fasting"]) { - meditators = highPopAdjust(global.civic.meditator.workers) * 0.03; - } - if (global.race["atrophy"]) { - atrophy = traits.atrophy.vars()[0]; - } - if (global.portal["dish_life_infuser"] && global.portal["dish_life_infuser"].on) { - infusion = 0.95 ** global.portal["dish_life_infuser"].on; - } - threshold += digestion + humpback + meditators; - threshold -= atrophy; - threshold *= infusion; - if (global.race["fasting"]) { - let base = global.resource[global.race.species].amount / 100; - breakdown.p.consume[global.race.species][global.resource[global.race.species].name] = -base.toFixed(2); - breakdown.p.consume[global.race.species][loc("genelab_traits")] = (1 - food_consume_mod) * base.toFixed(2); - breakdown.p.consume[global.race.species][loc("Threshold")] = threshold.toFixed(2); - global.resource[global.race.species].delta = -(base * food_consume_mod - threshold) * time_multiplier; - } - if (Math.rand(0, 10) === 0) { - if (global.race["fasting"]) { - let starved = global.resource[global.race.species].amount / 100 * food_consume_mod - threshold; - if (starved < 0) { - starved = 0; - } - if (starved % 1 > Math.random()) { - starved = Math.ceil(starved); - } else { - starved = Math.floor(starved); - } - if (starved > global.resource[global.race.species].amount) { - starved = global.resource[global.race.species].amount; - } - global.resource[global.race.species].amount -= starved; - global.stats.starved += starved; - blubberFill(starved); - } else if (generated < consume / threshold) { - global["resource"][global.race.species].amount--; - global.stats.starved++; - blubberFill(1); - } - } - } - } - } - if (global.race["anthropophagite"] && global.resource[global.race.species].amount > 1 && Math.rand(0, 400) === 0) { - global.resource[global.race.species].amount--; - modRes("Food", 1e4 * traits.anthropophagite.vars()[0]); - global.stats.murders++; - blubberFill(1); - } - } - if (global.portal["fortress"] && global.portal.fortress.walls < 100) { - if (modRes("Stone", -(200 * time_multiplier))) { - global.portal.fortress.repair++; - breakdown.p.consume.Stone[loc("portal_fortress_name")] = -200; - } - if (global.portal.fortress.repair >= actions.portal.prtl_fortress.info.repair()) { - global.portal.fortress.repair = 0; - global.portal.fortress.walls++; - } - } - if (global.race["psychic"] && global.resource.Energy.display) { - let energy_bd = {}; - let charge = traits.psychic.vars()[2]; - energy_bd[loc("trait_psychic_name")] = charge + "v"; - modRes(`Energy`, charge * time_multiplier); - breakdown.p["Energy"] = energy_bd; - } - if (global.civic.homeless > 0) { - let missing = Math.min(global.civic.homeless, global.resource[global.race.species].max - global.resource[global.race.species].amount); - global.civic.homeless -= missing; - global.resource[global.race.species].amount += missing; - global.civic[global.civic.d_job].workers += missing; - } else if ((fed && global["resource"]["Food"].amount > 0 || global.race["fasting"]) && global["resource"][global.race.species].max > global["resource"][global.race.species].amount) { - if (global.race["artifical"] || global.race["spongy"] && global.city.calendar.weather === 0) { - } else if (global.race["parasite"] && global.city.calendar.wind === 0 && !global.race["cataclysm"] && !global.race["orbit_decayed"]) { - } else if (global.race["vax"] && global.race.vax >= 100) { - } else { - let lowerBound = global.tech["reproduction"] ? global.tech["reproduction"] : 0; - let upperBound = global["resource"][global.race.species].amount; - if (global.tech["reproduction"] && date2.getMonth() === 1 && date2.getDate() === 14) { - lowerBound += 5; - } - if (global.race["fast_growth"]) { - lowerBound *= traits.fast_growth.vars()[0]; - lowerBound += traits.fast_growth.vars()[1]; - } - if (global.race["spores"] && global.city.calendar.wind === 1) { - if (global.race["parasite"]) { - lowerBound += traits.spores.vars()[2]; - } else { - lowerBound += traits.spores.vars()[0]; - lowerBound *= traits.spores.vars()[1]; - } - } - if (global.tech["reproduction"] && global.tech.reproduction >= 2 && global.city["hospital"]) { - lowerBound += global.city.hospital.count; - } - if (global.genes["birth"]) { - lowerBound += global.genes["birth"]; - } - if (global.race["promiscuous"]) { - lowerBound += traits.promiscuous.vars()[0] * global.race["promiscuous"]; - } - if (global.race["fasting"]) { - lowerBound += highPopAdjust(global.civic.meditator.workers) * 0.15; - } - if (global.city.banquet && global.city.banquet.on && global.city.banquet.level >= 1) { - lowerBound *= 1 + global.city.banquet.strength ** 0.75 / 100; - } - if (astroSign2 === "libra") { - lowerBound *= 1 + astroVal2("libra")[0] / 100; - } - if (global.race["high_pop"]) { - lowerBound *= traits.high_pop.vars()[2]; - upperBound /= jobScale(1); - } - if (global.city.biome === "taiga") { - lowerBound *= biomes.taiga.vars()[1]; - } - if (global.city.ptrait.includes("toxic")) { - upperBound *= planetTraits.toxic.vars()[1]; - } - if (global.race["parasite"] && (global.race["cataclysm"] || global.race["orbit_decayed"])) { - lowerBound = Math.round(lowerBound / 5); - upperBound *= 3; - } - upperBound *= 3 - 2 ** time_multiplier; - if (Math.rand(0, upperBound) <= lowerBound) { - global["resource"][global.race.species].amount++; - global.civic[global.civic.d_job].workers++; - } - } - } - if (global.space["shipyard"] && global.space.shipyard["ships"]) { - let fuels = { - Oil: 0, - Helium_3: 0, - Uranium: 0, - Elerium: 0 - }; - global.space.shipyard.ships.forEach(function(ship) { - if (ship.location !== "spc_dwarf" || ship.transit !== 0) { - let fuel = shipFuelUse(ship); - if (fuel.res && fuel.burn > 0) { - if (fuel.burn * time_multiplier < global.resource[fuel.res].amount + (global.resource[fuel.res].diff > 0 ? global.resource[fuel.res].diff * time_multiplier : 0)) { - modRes(fuel.res, -(fuel.burn * time_multiplier)); - ship.fueled = true; - fuels[fuel.res] += fuel.burn; - } else { - ship.fueled = false; - } - } else { - ship.fueled = true; - } - } - }); - breakdown.p.consume.Oil[loc("outer_shipyard_fleet")] = -fuels.Oil; - breakdown.p.consume.Helium_3[loc("outer_shipyard_fleet")] = -fuels.Helium_3; - breakdown.p.consume.Uranium[loc("outer_shipyard_fleet")] = -fuels.Uranium; - breakdown.p.consume.Elerium[loc("outer_shipyard_fleet")] = -fuels.Elerium; - } - if (global.race["emfield"]) { - if (global.race["discharge"] && global.race["discharge"] > 0) { - global.race.discharge--; - } else { - global.race.emfield++; - if (Math.rand(0, 500) === 0) { - global.race["discharge"] = global.race.emfield; - global.race.emfield = 1; - } - } - } - let hunger = fed ? 1 : 0.5; - if (global.race["angry"] && fed === false) { - hunger -= traits.angry.vars()[0] / 100; - } - if (global.race["malnutrition"] && fed === false) { - hunger += traits.malnutrition.vars()[0] / 100; - } - if (global.portal["dish_soul_steeper"] && global.portal["dish_soul_steeper"].on) { - hunger -= (0.03 + (global.race["malnutrition"] ? 0.01 : 0) + (global.race["angry"] ? -0.01 : 0)) * global.portal["dish_soul_steeper"].on; - } - hunger = Math.max(hunger, 0); - if (global.resource.Furs.display) { - if (global.race["evil"] || global.race["artifical"] || global.race["unfathomable"]) { - let weapons = weaponTechModifer(); - let hunters = workerScale(global.civic.hunter.workers, "hunter"); - hunters *= racialTrait(hunters, "hunting"); - if (global.race["servants"]) { - let serve = global.race.servants.jobs.hunter; - serve *= servantTrait(global.race.servants.jobs.hunter, "hunting"); - hunters += serve; - } - if (global.city.biome === "oceanic") { - hunters *= biomes.oceanic.vars()[2]; - } else if (global.city.biome === "tundra") { - hunters *= biomes.tundra.vars()[0]; - } - hunters *= weapons / 20; - hunters *= production("psychic_boost", "Furs"); - breakdown.p["Furs"][jobName("hunter")] = hunters + "v"; - if (hunters > 0) { - breakdown.p["Furs"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - modRes("Furs", hunters * hunger * global_multiplier * time_multiplier * q_multiplier); - if (!global.race["soul_eater"] && global.race["evil"]) { - let reclaimers = workerScale(global.civic.lumberjack.workers, "lumberjack"); - reclaimers *= racialTrait(reclaimers, "lumberjack"); - if (global.race["warlord"] && global.race["playful"]) { - reclaimers *= 1 + traits.playful.vars()[0]; - } - if (global.race["servants"]) { - let serve = global.race.servants.jobs.lumberjack; - serve *= servantTrait(global.race.servants.jobs.lumberjack, "lumberjack"); - reclaimers += serve; - } - reclaimers /= 4; - reclaimers *= production("psychic_boost", "Furs"); - breakdown.p["Furs"][jobName("lumberjack")] = reclaimers + "v"; - if (reclaimers > 0) { - breakdown.p["Furs"][`\u1102${loc("quarantine")}+1`] = (q_multiplier - 1) * 100 + "%"; - } - modRes("Furs", reclaimers * hunger * global_multiplier * time_multiplier * q_multiplier); - } - } - let hunting = armyRating(garrisonSize(), "hunting") / 10; - if (global.city.biome === "oceanic") { - hunting *= biomes.oceanic.vars()[2]; - } else if (global.city.biome === "tundra") { - hunting *= biomes.tundra.vars()[0]; - } - hunting *= production("psychic_boost", "Furs"); - breakdown.p["Furs"][loc("soldiers")] = hunting + "v"; - if (hunting > 0) { - breakdown.p["Furs"][`\u1102${loc("quarantine")}+2`] = (q_multiplier - 1) * 100 + "%"; - } - modRes("Furs", hunting * hunger * global_multiplier * q_multiplier * time_multiplier); - if (global.race["forager"]) { - let forage = 1 + (global.tech["foraging"] ? 0.5 * global.tech["foraging"] : 0); - let foragers = workerScale(global.civic.forager.workers, "forager"); - foragers *= racialTrait(foragers, "forager"); - if (global.race["servants"]) { - let serve = global.race.servants.jobs.forager; - serve *= servantTrait(global.race.servants.jobs.forager, "forager"); - foragers += serve; - } - let forage_base = foragers * forage * 0.05 * production("psychic_boost", "Furs"); - breakdown.p["Furs"][jobName("forager")] = forage_base + "v"; - if (forage_base > 0) { - breakdown.p["Furs"][`\u1102${loc("quarantine")}+3`] = (q_multiplier - 1) * 100 + "%"; - } - modRes("Furs", forage_base * hunger * q_multiplier * time_multiplier); - } - } - if (global.resource.Furs.display && global.tech["isolation"] && global.tauceti["womling_farm"]) { - let base = global.tauceti.womling_farm.farmers * production("psychic_boost", "Furs"); - let delta = base * global_multiplier; - breakdown.p["Furs"][loc("tau_red_womlings")] = base + "v"; - modRes("Furs", delta); - } - if (global.race["unfathomable"] && global.civic.hunter.display) { - let weapons = weaponTechModifer(); - let hunters = workerScale(global.civic.hunter.workers, "hunter"); - hunters *= racialTrait(hunters, "hunting"); - if (global.race["servants"]) { - let serve = jobScale(global.race.servants.jobs.hunter); - serve *= servantTrait(global.race.servants.jobs.hunter, "hunting"); - hunters += highPopAdjust(serve); - } - hunters *= weapons / 20; - let stealable = ["Lumber", "Chrysotile", "Stone", "Crystal", "Copper", "Iron", "Aluminium", "Cement", "Coal", "Oil", "Uranium", "Steel", "Titanium", "Alloy", "Polymer", "Iridium"]; - stealable.forEach(function(res) { - if (global.resource[res].display) { - let raid = hunters * production("psychic_boost", res) * tradeRatio[res] / 5; - if (["Crystal", "Uranium"].includes(res)) { - raid *= 0.2; - } else if (["Alloy", "Polymer", "Iridium"].includes(res)) { - raid *= 0.35; - } else if (["Steel", "Cement"].includes(res)) { - raid *= 0.85; - } else if (["Titanium"].includes(res)) { - raid *= 0.65; - } - breakdown.p[res][jobName("hunter")] = raid + "v"; - if (raid > 0) { - breakdown.p[res][`\u1102${loc("quarantine")}+99`] = (q_multiplier - 1) * 100 + "%"; - } - modRes(res, raid * hunger * global_multiplier * time_multiplier * q_multiplier); - } - }); - } - { - let sundial_base = global.tech["primitive"] && global.tech["primitive"] >= 3 ? 1 : 0; - if (global.race["ancient_ruins"]) { - sundial_base++; - } - if (global.stats.achieve["extinct_junker"] && global.stats.achieve["extinct_junker"].l >= 1) { - sundial_base++; - } - if (global.city.ptrait.includes("magnetic")) { - sundial_base += planetTraits.magnetic.vars()[0]; - } - if (global.race["ascended"]) { - sundial_base += 2; - } - let professors_base = workerScale(global.civic.professor.workers, "professor"); - let prof_impact = global.race["studious"] ? global.civic.professor.impact + traits.studious.vars()[0] : global.civic.professor.impact; - let fathom = fathomCheck("elven"); - if (fathom > 0) { - prof_impact += traits.studious.vars(1)[0] * fathom; - } - professors_base *= prof_impact; - professors_base *= global.race["pompous"] ? 1 - traits.pompous.vars()[0] / 100 : 1; - professors_base *= racialTrait(workerScale(global.civic.professor.workers, "professor"), "science"); - if (global.tech["anthropology"] && global.tech["anthropology"] >= 3) { - professors_base *= 1 + faithTempleCount() * 0.05; - } - if (global.civic.govern.type === "theocracy") { - professors_base *= 1 - govEffect.theocracy()[1] / 100; - } - let scientist_base = workerScale(global.civic.scientist.workers, "scientist"); - scientist_base *= global.civic.scientist.impact; - scientist_base *= racialTrait(workerScale(global.civic.scientist.workers, "scientist"), "science"); - if (global.tech["science"] >= 6 && global.city["wardenclyffe"]) { - let professor = workerScale(global.civic.professor.workers, "professor"); - if (global.race["high_pop"]) { - professor = highPopAdjust(professor); - } - scientist_base *= 1 + professor * p_on["wardenclyffe"] * 0.01; - } - if (global.space["satellite"]) { - scientist_base *= 1 + global.space.satellite.count * 0.01; - } - if (global.civic.govern.type === "theocracy") { - scientist_base *= 1 - govEffect.theocracy()[2] / 100; - } - let gene_consume = 0; - if (global.arpa["sequence"] && global.arpa.sequence.on && global.arpa.sequence.time > 0 && sequenceLabs() > 0) { - let gene_cost = 50 + global.race.mutation * 10; - if (global.arpa.sequence.boost) { - gene_cost *= 4; - } - if (gene_cost * time_multiplier <= global.resource.Knowledge.amount) { - gene_consume = gene_cost; - gene_sequence = true; - } else { - gene_sequence = false; - } - } else { - if (global.arpa.hasOwnProperty("sequence") && global.arpa.sequence.time === null) { - global.arpa.sequence.time = global.arpa.sequence.max; - } - gene_sequence = false; - } - let womling = global.tauceti.hasOwnProperty("womling_lab") ? global.tauceti.womling_lab.scientist * (global.tech["womling_gene"] ? 10 : 8) : 0; - let delta = professors_base + scientist_base + womling; - delta *= hunger * global_multiplier; - delta += sundial_base * global_multiplier; - breakdown.p["Knowledge"][jobName("professor")] = professors_base + "v"; - if (global.race.universe === "magic") { - breakdown.p["Knowledge"][jobName("wizard")] = scientist_base + "v"; - } else { - breakdown.p["Knowledge"][global.civic?.scientist?.name || jobName("scientist")] = scientist_base + "v"; - } - breakdown.p["Knowledge"][loc("tau_red_womlings")] = womling + "v"; - breakdown.p["Knowledge"][loc("hunger")] = (hunger - 1) * 100 + "%"; - breakdown.p["Knowledge"][global.race["unfathomable"] ? loc("tech_moondial") : loc("tech_sundial")] = sundial_base + "v"; - if (global.race["inspired"]) { - breakdown.p["Knowledge"][loc("event_inspiration_bd")] = "100%"; - delta *= 2; - } - if (global.city["library"] || global.race["warlord"]) { - let lib_multiplier = 0.05; - let muckVal = govActive("muckraker", 2); - if (muckVal) { - lib_multiplier -= muckVal / 100; - } - if (global.race["autoignition"]) { - lib_multiplier -= traits.autoignition.vars()[0] / 100; - if (lib_multiplier < 0) { - lib_multiplier = 0; - } - } - let lib_count = global.race["warlord"] ? (global.race?.absorbed?.length || 1) * 10 : global.city.library.count; - let library_mult = 1 + lib_count * lib_multiplier; - breakdown.p["Knowledge"][global.race["warlord"] ? loc("portal_throne_of_evil_title") : loc("city_library")] = (library_mult - 1) * 100 + "%"; - delta *= library_mult; - } - if (astroSign2 === "gemini") { - let astro_mult = 1 + astroVal2("gemini")[0] / 100; - breakdown.p["Knowledge"][loc(`sign_${astroSign2}`)] = (astro_mult - 1) * 100 + "%"; - delta *= astro_mult; - } - if (global.tech["isolation"] && support_on["infectious_disease_lab"]) { - let lab_mult = 1 + support_on["infectious_disease_lab"] * 0.75; - breakdown.p["Knowledge"][actions.tauceti.tau_home.infectious_disease_lab.title()] = (lab_mult - 1) * 100 + "%"; - delta *= lab_mult; - } - if (global.civic.govern.type === "technocracy") { - breakdown.p["Knowledge"][loc("govern_technocracy")] = govEffect.technocracy()[2] + "%"; - delta *= 1 + govEffect.technocracy()[2] / 100; - } - if (gene_consume > 0) { - delta -= gene_consume; - breakdown.p.consume.Knowledge[loc("genome_bd")] = -gene_consume; - } - modRes("Knowledge", delta * time_multiplier); - if (global.tech["tau_gas2"] && global.tech.tau_gas2 >= 6 && (!global.tech["alien_data"] || global.tech.alien_data < 6) && global.tauceti["alien_space_station"] && p_on["alien_space_station"]) { - let focus = global.tauceti.alien_space_station.focus / 100 * delta; - breakdown.p.consume.Knowledge[loc("tau_gas2_alien_station")] = -focus; - modRes("Knowledge", -focus * time_multiplier); - global.tauceti.alien_space_station.decrypted += +focus.toFixed(3); - global.stats.know += +focus.toFixed(0); - if (global.tauceti.alien_space_station.decrypted >= (global.race["lone_survivor"] ? 1e6 : 25e7) && !global.tech["alien_data"]) { - global.tech["alien_data"] = 1; - messageQueue(loc("tau_gas2_alien_station_data1", [loc("tech_dist_womling")]), "success", false, ["progress"]); - drawTech(); - } else if (global.tauceti.alien_space_station.decrypted >= (global.race["lone_survivor"] ? 2e6 : 5e8) && global.tech["alien_data"] && global.tech.alien_data === 1) { - global.tech.alien_data = 2; - global.race.tau_food_item = Math.rand(0, 10); - messageQueue(loc("tau_gas2_alien_station_data2", [loc(`tau_gas2_alien_station_data2_r${global.race.tau_food_item || 0}`)]), "success", false, ["progress"]); - drawTech(); - } else if (global.tauceti.alien_space_station.decrypted >= (global.race["lone_survivor"] ? 3e6 : 75e7) && global.tech["alien_data"] && global.tech.alien_data === 2) { - global.tech.alien_data = 3; - messageQueue(loc("tau_gas2_alien_station_data3"), "success", false, ["progress"]); - drawTech(); - } else if (global.tauceti.alien_space_station.decrypted >= (global.race["lone_survivor"] ? 48e5 : 12e8) && global.tech["alien_data"] && global.tech.alien_data === 3) { - global.tech.alien_data = 4; - global.race.tau_junk_item = Math.rand(0, 10); - messageQueue(loc("tau_gas2_alien_station_data4", [loc(`tau_gas2_alien_station_data4_r${global.race.tau_junk_item || 0}`)]), "success", false, ["progress"]); - drawTech(); - } else if (global.tauceti.alien_space_station.decrypted >= (global.race["lone_survivor"] ? 6e6 : 15e8) && global.tech["alien_data"] && global.tech.alien_data === 4) { - global.tech.alien_data = 5; - messageQueue(loc("tau_gas2_alien_station_data5"), "success", false, ["progress"]); - drawTech(); - } else if (global.tauceti.alien_space_station.decrypted >= (global.race["lone_survivor"] ? 1e7 : 25e8) && global.tech["alien_data"] && global.tech.alien_data === 5) { - global.tech.alien_data = 6; - global.tauceti.alien_space_station.decrypted = 25e8; - if (global.race["lone_survivor"]) { - global.settings.tau.star = true; - global.tech["matrix"] = 2; - global.tauceti["ringworld"] = { count: 0 }; - messageQueue(loc("tau_gas2_alien_station_data6_alt"), "success", false, ["progress"]); - } else { - messageQueue(loc("tau_gas2_alien_station_data6"), "success", false, ["progress"]); - } - drawTech(); - } - } - } - if (global.resource.Omniscience.display) { - if (support_on["research_station"]) { - let ghost_base = workerScale(global.civic.ghost_trapper.workers, "ghost_trapper"); - ghost_base *= racialTrait(ghost_base, "science"); - ghost_base *= global.race["pompous"] ? 1 - traits.pompous.vars()[0] / 100 : 1; - let corruptor = 1; - if (global.race["warlord"] && global.eden["corruptor"]) { - corruptor = 1 + (p_on["corruptor"] || 0) * 0.04; - } - let ghost_gain = support_on["research_station"] * ghost_base * 325e-7 * corruptor; - breakdown.p["Omniscience"][loc("eden_research_station_title")] = ghost_gain + "v"; - if (corruptor > 1) { - breakdown.p["Omniscience"][`\u1102${loc("eden_corruptor_title")}`] = (corruptor - 1) * 100 + "%"; - } - let delta = ghost_gain; - delta *= hunger * global_multiplier; - modRes("Omniscience", delta * time_multiplier); - } - if (global.tech["science"] && global.tech.science >= 23) { - let scientist = workerScale(global.civic.scientist.workers, "scientist"); - scientist *= racialTrait(scientist, "science"); - scientist *= global.race["pompous"] ? 1 - traits.pompous.vars()[0] / 100 : 1; - let sci_gain = scientist * 707e-6; - breakdown.p["Omniscience"][global.civic.scientist.name] = sci_gain + "v"; - let delta = sci_gain; - delta *= hunger * global_multiplier; - modRes("Omniscience", delta * time_multiplier); - } - } - let FactoryMoney = 0; - if (global.city["factory"]) { - let on_factories = (p_on["factory"] || 0) + (p_on["red_factory"] || 0) + (p_on["int_factory"] || 0) * 2 + (p_on["hell_factory"] || 0) * actions.portal.prtl_wasteland.hell_factory.lines() + (support_on["tau_factory"] || 0) * (global.tech["isolation"] ? 5 : 3); - let max_factories = global.city["factory"].on + (global.space["red_factory"] ? global.space["red_factory"].on : 0) + (global.interstellar["int_factory"] ? global.interstellar["int_factory"].on * 2 : 0) + (global.portal["hell_factory"] ? global.portal["hell_factory"].on * actions.portal.prtl_wasteland.hell_factory.lines() : 0) + (global.tauceti["tau_factory"] ? global.tauceti["tau_factory"].on * (global.tech["isolation"] ? 5 : 3) : 0); - let eff = max_factories > 0 ? on_factories / max_factories : 0; - let remaining = max_factories; - ["Lux", "Furs", "Alloy", "Polymer", "Nano", "Stanene"].forEach(function(res) { - remaining -= global.city.factory[res]; - if (remaining < 0) { - global.city.factory[res] += remaining; - remaining = 0; - } - }); - let assembly = global.tech["factory"] || 0; - let tauBonus = global.tech["isolation"] ? 1 + (support_on["colony"] || 0) * 0.5 : 1; - if (global.city.factory["Lux"] && global.city.factory["Lux"] > 0) { - let fur_cost = global.city.factory.Lux * f_rate.Lux.fur[assembly] * eff; - let workDone = global.city.factory.Lux; - while (fur_cost * time_multiplier > global.resource.Furs.amount && fur_cost > 0) { - fur_cost -= f_rate.Lux.fur[assembly] * eff; - workDone--; - } - breakdown.p.consume.Furs[loc("city_factory")] = -fur_cost; - modRes("Furs", -(fur_cost * time_multiplier)); - let demand = highPopAdjust(global.resource[global.race.species].amount) * f_rate.Lux.demand[assembly] * eff; - demand = luxGoodPrice(demand); - let delta = workDone * demand; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - FactoryMoney = delta; - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - } - modRes("Money", delta * hunger * global_multiplier * time_multiplier); - } - if (global.city.factory["Furs"] && global.city.factory["Furs"] > 0) { - let moneyIncrement = f_rate.Furs.money[assembly] * eff; - let polymerIncrement = f_rate.Furs.polymer[assembly] * eff; - let money_cost = global.city.factory.Furs * moneyIncrement; - let polymer_cost = global.city.factory.Furs * polymerIncrement; - let workDone = global.city.factory.Furs; - while (polymer_cost * time_multiplier > global.resource.Polymer.amount && polymer_cost > 0) { - polymer_cost -= polymerIncrement; - money_cost -= moneyIncrement; - workDone--; - } - while (money_cost * time_multiplier > global.resource.Money.amount && money_cost > 0) { - polymer_cost -= polymerIncrement; - money_cost -= moneyIncrement; - workDone--; - } - breakdown.p.consume.Money[loc("city_factory")] = -money_cost; - breakdown.p.consume.Polymer[loc("city_factory")] = -polymer_cost; - modRes("Money", -(money_cost * time_multiplier)); - modRes("Polymer", -(polymer_cost * time_multiplier)); - let factory_output = workDone * f_rate.Furs.output[assembly] * eff * production("psychic_boost", "Furs"); - factory_output = factoryBonus(factory_output); - let delta = factory_output * tauBonus; - delta *= hunger * global_multiplier; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - breakdown.p["Furs"][loc("city_factory")] = factory_output + "v"; - if (delta > 0) { - if (tauBonus > 0) { - breakdown.p["Furs"][`\u1102${loc("tau_home_colony")}`] = (tauBonus - 1) * 100 + "%"; - } - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - breakdown.p["Furs"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - if (global.tech["q_factory"]) { - let q_bonus = (quantum_level - 1) / 8 + 1; - delta *= q_bonus; - breakdown.p["Furs"][`\u1102${loc("quantum")}`] = (q_bonus - 1) * 100 + "%"; - } - } - if (global.race["gravity_well"]) { - breakdown.p["Furs"][`\u1102${loc("evo_challenge_gravity_well")}+0`] = -((1 - teamster(1)) * 100) + "%"; - } - modRes("Furs", delta * time_multiplier); - } - if (global.city.factory["Alloy"] && global.city.factory["Alloy"] > 0) { - let copper_cost = global.city.factory.Alloy * f_rate.Alloy.copper[assembly] * eff; - let aluminium_cost = global.city.factory.Alloy * f_rate.Alloy.aluminium[assembly] * eff; - let workDone = global.city.factory.Alloy; - while (copper_cost * time_multiplier > global.resource.Copper.amount && copper_cost > 0) { - copper_cost -= f_rate.Alloy.copper[assembly] * eff; - aluminium_cost -= f_rate.Alloy.aluminium[assembly] * eff; - workDone--; - } - while (aluminium_cost * time_multiplier > global.resource.Aluminium.amount && aluminium_cost > 0) { - copper_cost -= f_rate.Alloy.copper[assembly] * eff; - aluminium_cost -= f_rate.Alloy.aluminium[assembly] * eff; - workDone--; - } - breakdown.p.consume.Copper[loc("city_factory")] = -copper_cost; - breakdown.p.consume.Aluminium[loc("city_factory")] = -aluminium_cost; - modRes("Copper", -(copper_cost * time_multiplier)); - modRes("Aluminium", -(aluminium_cost * time_multiplier)); - let factory_output = workDone * f_rate.Alloy.output[assembly] * eff * production("psychic_boost", "Alloy"); - factory_output = factoryBonus(factory_output); - if (global.tech["alloy"]) { - factory_output *= 1.37; - } - if (global.race["metallurgist"]) { - factory_output *= 1 + traits.metallurgist.vars()[0] * global.race["metallurgist"] / 100; - } - let delta = factory_output * tauBonus; - delta *= hunger * global_multiplier; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - breakdown.p["Alloy"][loc("city_factory")] = factory_output + "v"; - if (delta > 0) { - if (tauBonus > 0) { - breakdown.p["Alloy"][`\u1102${loc("tau_home_colony")}`] = (tauBonus - 1) * 100 + "%"; - } - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - breakdown.p["Alloy"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - if (global.tech["q_factory"]) { - let q_bonus = (quantum_level - 1) / 2 + 1; - delta *= q_bonus; - breakdown.p["Alloy"][`\u1102${loc("quantum")}`] = (q_bonus - 1) * 100 + "%"; - } - breakdown.p["Alloy"][loc("hunger")] = (hunger - 1) * 100 + "%"; - } - if (global.race["gravity_well"]) { - breakdown.p["Alloy"][`\u1102${loc("evo_challenge_gravity_well")}+0`] = -((1 - teamster(1)) * 100) + "%"; - } - modRes("Alloy", delta * time_multiplier); - } else { - breakdown.p["Alloy"] = 0; - } - if (global.city.factory["Polymer"] && global.city.factory["Polymer"] > 0) { - let oilIncrement = global.race["kindling_kindred"] || global.race["smoldering"] ? f_rate.Polymer.oil_kk[assembly] * eff : f_rate.Polymer.oil[assembly] * eff; - let lumberIncrement = global.race["kindling_kindred"] || global.race["smoldering"] ? 0 : f_rate.Polymer.lumber[assembly] * eff; - let oil_cost = global.city.factory.Polymer * oilIncrement; - let lumber_cost = global.city.factory.Polymer * lumberIncrement; - let workDone = global.city.factory.Polymer; - while (lumber_cost * time_multiplier > global.resource.Lumber.amount && lumber_cost > 0) { - lumber_cost -= lumberIncrement; - oil_cost -= oilIncrement; - workDone--; - } - while (oil_cost * time_multiplier > global.resource.Oil.amount && oil_cost > 0) { - lumber_cost -= lumberIncrement; - oil_cost -= oilIncrement; - workDone--; - } - breakdown.p.consume.Lumber[loc("city_factory")] = -lumber_cost; - breakdown.p.consume.Oil[loc("city_factory")] = -oil_cost; - modRes("Lumber", -(lumber_cost * time_multiplier)); - modRes("Oil", -(oil_cost * time_multiplier)); - let factory_output = workDone * f_rate.Polymer.output[assembly] * eff * production("psychic_boost", "Polymer"); - factory_output = factoryBonus(factory_output); - if (global.tech["polymer"] >= 2) { - factory_output *= 1.42; - } - let delta = factory_output * tauBonus; - delta *= hunger * global_multiplier; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - breakdown.p["Polymer"][loc("city_factory")] = factory_output + "v"; - if (delta > 0) { - if (tauBonus > 0) { - breakdown.p["Polymer"][`\u1102${loc("tau_home_colony")}`] = (tauBonus - 1) * 100 + "%"; - } - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - breakdown.p["Polymer"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - if (global.tech["q_factory"]) { - let q_bonus = (quantum_level - 1) / 2 + 1; - delta *= q_bonus; - breakdown.p["Polymer"][`\u1102${loc("quantum")}`] = (q_bonus - 1) * 100 + "%"; - } - } - if (global.race["gravity_well"]) { - breakdown.p["Polymer"][`\u1102${loc("evo_challenge_gravity_well")}+0`] = -((1 - teamster(1)) * 100) + "%"; - } - modRes("Polymer", delta * time_multiplier); - } - if (p_on["s_gate"] && global.galaxy["raider"] && gal_on["raider"] > 0) { - let base = gal_on["raider"] * 2.3 * production("psychic_boost", "Polymer"); - let pirate = piracy("gxy_chthonian"); - let delta = base * global_multiplier * pirate * hunger * zigVal; - breakdown.p["Polymer"][loc("galaxy_raider")] = base + "v"; - if (base > 0) { - breakdown.p["Polymer"][`\u1102${loc("galaxy_piracy")}`] = -((1 - pirate) * 100) + "%"; - breakdown.p["Polymer"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - } - modRes("Polymer", delta * time_multiplier); - } - breakdown.p["Polymer"][loc("hunger")] = (hunger - 1) * 100 + "%"; - if (global.city.factory["Nano"] && global.city.factory["Nano"] > 0) { - let coalIncrement = f_rate.Nano_Tube.coal[assembly] * eff; - let neutroniumIncrement = f_rate.Nano_Tube.neutronium[assembly] * eff; - let coal_cost = global.city.factory.Nano * coalIncrement; - let neutronium_cost = global.city.factory.Nano * neutroniumIncrement; - let workDone = global.city.factory.Nano; - while (neutronium_cost * time_multiplier > global.resource.Neutronium.amount && neutronium_cost > 0) { - neutronium_cost -= neutroniumIncrement; - coal_cost -= coalIncrement; - workDone--; - } - while (coal_cost * time_multiplier > global.resource.Coal.amount && coal_cost > 0) { - neutronium_cost -= neutroniumIncrement; - coal_cost -= coalIncrement; - workDone--; - } - breakdown.p.consume.Coal[loc("city_factory")] = -coal_cost; - breakdown.p.consume.Neutronium[loc("city_factory")] = -neutronium_cost; - modRes("Neutronium", -(neutronium_cost * time_multiplier)); - modRes("Coal", -(coal_cost * time_multiplier)); - let factory_output = workDone * f_rate.Nano_Tube.output[assembly] * eff * production("psychic_boost", "Nano_Tube"); - factory_output = factoryBonus(factory_output); - let delta = factory_output * tauBonus; - delta *= hunger * global_multiplier; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - breakdown.p["Nano_Tube"][loc("city_factory")] = factory_output + "v"; - if (delta > 0) { - if (tauBonus > 0) { - breakdown.p["Nano_Tube"][`\u1102${loc("tau_home_colony")}`] = (tauBonus - 1) * 100 + "%"; - } - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - breakdown.p["Nano_Tube"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - if (global.tech["q_factory"]) { - let q_bonus = (quantum_level - 1) / 2 + 1; - delta *= q_bonus; - breakdown.p["Nano_Tube"][`\u1102${loc("quantum")}`] = (q_bonus - 1) * 100 + "%"; - } - breakdown.p["Nano_Tube"][loc("hunger")] = (hunger - 1) * 100 + "%"; - } - if (global.race["gravity_well"]) { - breakdown.p["Nano_Tube"][`\u1102${loc("evo_challenge_gravity_well")}+0`] = -((1 - teamster(1)) * 100) + "%"; - } - modRes("Nano_Tube", delta * time_multiplier); - } else { - breakdown.p["Nano_Tube"] = 0; - } - if (global.city.factory["Stanene"] && global.city.factory["Stanene"] > 0) { - let alumIncrement = f_rate.Stanene.aluminium[assembly] * eff; - let nanoIncrement = f_rate.Stanene.nano[assembly] * eff; - let alum_cost = global.city.factory.Stanene * alumIncrement; - let nano_cost = global.city.factory.Stanene * nanoIncrement; - let workDone = global.city.factory.Stanene; - while (alum_cost * time_multiplier > global.resource.Aluminium.amount && alum_cost > 0) { - nano_cost -= nanoIncrement; - alum_cost -= alumIncrement; - workDone--; - } - while (nano_cost * time_multiplier > global.resource.Nano_Tube.amount && nano_cost > 0) { - nano_cost -= nanoIncrement; - alum_cost -= alumIncrement; - workDone--; - } - breakdown.p.consume.Aluminium[loc("city_factory")] = breakdown.p.consume.Aluminium[loc("city_factory")] ? breakdown.p.consume.Aluminium[loc("city_factory")] - alum_cost : -alum_cost; - breakdown.p.consume.Nano_Tube[loc("city_factory")] = -nano_cost; - modRes("Aluminium", -(alum_cost * time_multiplier)); - modRes("Nano_Tube", -(nano_cost * time_multiplier)); - let factory_output = workDone * f_rate.Stanene.output[assembly] * eff * production("psychic_boost", "Stanene"); - factory_output = factoryBonus(factory_output); - let delta = factory_output * tauBonus; - delta *= hunger * global_multiplier; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - breakdown.p["Stanene"][loc("city_factory")] = factory_output + "v"; - if (delta > 0) { - if (tauBonus > 0) { - breakdown.p["Stanene"][`\u1102${loc("tau_home_colony")}`] = (tauBonus - 1) * 100 + "%"; - } - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - breakdown.p["Stanene"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - if (global.tech["q_factory"]) { - let q_bonus = (quantum_level - 1) / 2 + 1; - delta *= q_bonus; - breakdown.p["Stanene"][`\u1102${loc("quantum")}`] = (q_bonus - 1) * 100 + "%"; - } - breakdown.p["Stanene"][loc("hunger")] = (hunger - 1) * 100 + "%"; - } - if (global.race["gravity_well"]) { - breakdown.p["Stanene"][`\u1102${loc("evo_challenge_gravity_well")}+0`] = -((1 - teamster(1)) * 100) + "%"; - } - modRes("Stanene", delta * time_multiplier); - } else { - breakdown.p["Stanene"] = 0; - } - } - if (global.resource.Furs.display) { - breakdown.p["Furs"][loc("hunger")] = (hunger - 1) * 100 + "%"; - } - if (global.resource.Cement.display) { - let unit_price = global.race["high_pop"] ? 3 / traits.high_pop.vars()[0] : 3; - if (global.city.biome === "ashland") { - unit_price *= biomes.ashland.vars()[1]; - } - let stone_cost = workerScale(global.civic.cement_worker.workers, "cement_worker") * unit_price; - let workDone = workerScale(global.civic.cement_worker.workers, "cement_worker"); - while (stone_cost * time_multiplier > global.resource.Stone.amount && stone_cost > 0) { - stone_cost -= unit_price; - workDone--; - } - let tauBonus = global.tech["isolation"] ? 1 + (support_on["colony"] || 0) * 0.5 : 1; - breakdown.p.consume.Stone[loc(global.tech["isolation"] ? "job_cement_worker_bd" : "city_cement_plant_bd")] = -stone_cost; - modRes("Stone", -(stone_cost * time_multiplier)); - let cement_base = global.tech["cement"] >= 4 ? global.tech.cement >= 7 ? 1.45 : 1.2 : 1; - cement_base *= global.civic.cement_worker.impact; - cement_base *= racialTrait(workerScale(global.civic.cement_worker.workers, "cement_worker"), "factory"); - if (global.city.biome === "ashland") { - cement_base *= biomes.ashland.vars()[1]; - } - if (global.stats.achieve["lamentis"] && global.stats.achieve.lamentis.l >= 3) { - cement_base *= 1.1; - } - let factory_output = workDone * cement_base * production("psychic_boost", "Cement"); - if (global.civic.govern.type === "corpocracy") { - factory_output *= 1 + govEffect.corpocracy()[4] / 100; - } - if (global.civic.govern.type === "socialist") { - factory_output *= 1 + govEffect.socialist()[1] / 100; - } - let dirtVal = govActive("dirty_jobs", 2); - if (dirtVal) { - factory_output *= 1 + dirtVal / 100; - } - let powered_mult = 1; - let power_single = 1; - if (global.city.powered && p_on["cement_plant"]) { - let rate = global.tech["cement"] >= 6 ? 0.08 : 0.05; - powered_mult += p_on["cement_plant"] * rate; - power_single += rate; - } - let ai_core = 1; - if (global.tech["ai_core"] && p_on["citadel"] > 0) { - let ai = +(quantum_level / 1.75).toFixed(1) / 100; - ai_core += p_on["citadel"] * ai; - } - let hell_factory = 1; - if (global.race["warlord"] && global.portal["hell_factory"] && p_on["hell_factory"] > 0) { - hell_factory += p_on["hell_factory"] * 8 * (global.portal.hell_factory.rank - 1) / 100; - } - let mining_pit = global.tech["isolation"] ? 1 + support_on["mining_pit"] * 0.08 : 1; - let cq_multiplier = global.tech["isolation"] ? 1 : q_multiplier; - breakdown.p["Cement"][loc(global.tech["isolation"] ? "job_cement_worker_bd" : "city_cement_plant_bd")] = factory_output + "v"; - if (factory_output > 0) { - if (global.tech["isolation"]) { - breakdown.p["Cement"][`\u1102${loc("tau_home_colony")}+0`] = (tauBonus - 1) * 100 + "%"; - breakdown.p["Cement"][`\u1102${loc("tau_home_mining_pit")}+0`] = (mining_pit - 1) * 100 + "%"; - } - breakdown.p["Cement"][`\u1102${loc("power")}+0`] = (powered_mult - 1) * 100 + "%"; - breakdown.p["Cement"][`\u1102${loc("quarantine")}+0`] = (cq_multiplier - 1) * 100 + "%"; - } - if (hell_factory > 1) { - breakdown.p["Cement"][`\u1102${loc("portal_factory_title")}+0`] = (hell_factory - 1) * 100 + "%"; - } - if (global.race["discharge"] && global.race["discharge"] > 0 && p_on["cement_plant"] > 0) { - powered_mult = (powered_mult - 1) * 0.5 + 1; - power_single = (power_single - 1) * 0.5 + 1; - breakdown.p["Cement"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - let delta = factory_output * ai_core * tauBonus * mining_pit * hell_factory; - if (global.city["cement_plant"]) { - global.city.cement_plant["cnvay"] = +(delta * hunger * cq_multiplier * global_multiplier * (power_single - 1)).toFixed(5); - } - delta *= powered_mult * hunger * cq_multiplier * global_multiplier; - if (global.tech["ai_core"] && p_on["citadel"] > 0) { - breakdown.p["Cement"][loc("interstellar_citadel_effect_bd")] = (ai_core - 1) * 100 + "%"; - } - breakdown.p["Cement"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Cement", delta * time_multiplier); - } - let shrineMetal = getShrineBonus("metal"); - let iron_smelter = 0; - let star_forge = 0; - let iridium_smelter = 0; - if (smelterUnlocked()) { - let capacity = global.city.smelter.count; - if (p_on["stellar_forge"]) { - star_forge = p_on["stellar_forge"] * actions.interstellar.int_neutron.stellar_forge.smelting(); - global.city.smelter.Star = Math.max(global.city.smelter.Star, star_forge); - capacity += star_forge; - } - if (p_on["hell_forge"]) { - capacity += p_on["hell_forge"] * actions.portal.prtl_ruins.hell_forge.smelting(); - } - if (p_on["demon_forge"]) { - capacity += p_on["demon_forge"] * actions.portal.prtl_wasteland.demon_forge.smelting(); - } - if (p_on["sacred_smelter"]) { - capacity += p_on["sacred_smelter"] * actions.eden.eden_elysium.sacred_smelter.smelting(); - } - if (p_on["ore_refinery"]) { - capacity += p_on["ore_refinery"] * actions.tauceti.tau_gas.ore_refinery.smelting(); - } - if (global.space["hell_smelter"]) { - capacity += global.space.hell_smelter.count * actions.space.spc_hell.hell_smelter.smelting(); - } - if (p_on["geothermal"]) { - capacity += p_on["geothermal"] * actions.space.spc_hell.geothermal.smelting(); - } - global.city.smelter.cap = capacity; - global.city.smelter.StarCap = star_forge; - if (global.race["forge"]) { - global.city.smelter.Wood = 0; - global.city.smelter.Coal = 0; - global.city.smelter.Oil = Math.max(0, global.city.smelter.cap - global.city.smelter.Star - global.city.smelter.Inferno); - } - if ((global.race["kindling_kindred"] || global.race["smoldering"]) && !global.race["evil"]) { - if (global.city.smelter.Wood !== 0) { - global.city.smelter.Coal += global.city.smelter.Wood; - global.city.smelter.Wood = 0; - } - } - let total_fuel = 0; - ["Wood", "Coal", "Oil", "Star", "Inferno"].forEach(function(fuel) { - if (total_fuel + global.city.smelter[fuel] > global.city.smelter.cap) { - global.city.smelter[fuel] = global.city.smelter.cap - total_fuel; - } - total_fuel += global.city.smelter[fuel]; - }); - if (global.city.smelter.Iron + global.city.smelter.Steel + global.city.smelter.Iridium > total_fuel) { - let overflow = global.city.smelter.Iron + global.city.smelter.Steel + global.city.smelter.Iridium - total_fuel; - global.city.smelter.Iron -= overflow; - if (global.city.smelter.Iron < 0) { - overflow = global.city.smelter.Iron; - global.city.smelter.Iron = 0; - global.city.smelter.Iridium += overflow; - if (global.city.smelter.Iridium < 0) { - overflow = global.city.smelter.Iridium; - global.city.smelter.Iridium = 0; - } else { - overflow = 0; - } - global.city.smelter.Steel += overflow; - if (global.city.smelter.Steel < 0) { - global.city.smelter.Steel = 0; - } - } - } else if (global.city.smelter.Iron + global.city.smelter.Steel + global.city.smelter.Iridium < total_fuel) { - let irid_smelt = global.tech["irid_smelting"] || global.tech["m_smelting"] && global.tech.m_smelting >= 2 ? true : false; - if (!(global.resource.Iridium.display && irid_smelt) && !(global.resource.Steel.display && global.tech.smelting >= 2 && !global.race["steelen"])) { - global.city.smelter.Iron++; - } - } - if (global.city.smelter.Star > global.city.smelter.StarCap) { - let overflow = global.city.smelter.Star - global.city.smelter.StarCap; - global.city.smelter.Star = global.city.smelter.StarCap; - global.city.smelter.Oil += overflow; - } - let fuel_config = smelterFuelConfig(); - let consume_wood = global.city.smelter.Wood * fuel_config.l_cost; - let consume_coal = global.city.smelter.Coal * fuel_config.c_cost; - let consume_oil = global.city.smelter.Oil * fuel_config.o_cost; - iron_smelter = global.city.smelter.Iron; - let steel_smelter = global.city.smelter.Steel; - iridium_smelter = global.city.smelter.Iridium; - let oil_bonus = global.city.smelter.Oil; - let inferno_bonus = global.city.smelter.Inferno; - if (global.race["steelen"]) { - iron_smelter += steel_smelter; - steel_smelter = 0; - } - let disable_smelters = Math.max(0, iron_smelter + steel_smelter + iridium_smelter - total_fuel); - if (consume_wood > 0) { - let max_operable = Math.max(0, Math.floor(global.resource[fuel_config.l_type].amount / (fuel_config.l_cost * time_multiplier))); - if (max_operable < global.city.smelter.Wood) { - disable_smelters += global.city.smelter.Wood - max_operable; - consume_wood = max_operable * fuel_config.l_cost; - } - } - if (consume_coal > 0) { - let max_operable = Math.max(0, Math.floor(global.resource.Coal.amount / (fuel_config.c_cost * time_multiplier))); - if (max_operable < global.city.smelter.Coal) { - disable_smelters += global.city.smelter.Coal - max_operable; - consume_coal = max_operable * fuel_config.c_cost; - } - } - if (consume_oil > 0) { - let max_operable = Math.max(0, Math.floor(global.resource.Oil.amount / (fuel_config.o_cost * time_multiplier))); - if (max_operable < oil_bonus) { - disable_smelters += oil_bonus - max_operable; - consume_oil = max_operable * fuel_config.o_cost; - oil_bonus = max_operable; - } - } - if (inferno_bonus > 0) { - let inferno_rate = { - Oil: 35, - Coal: 50, - Infernite: 0.5 - }; - let max_operable_oil = Math.floor((global.resource.Oil.amount - consume_oil) / (inferno_rate.Oil * time_multiplier)); - let max_operable_coal = Math.floor((global.resource.Coal.amount - consume_coal) / (inferno_rate.Coal * time_multiplier)); - let max_operable_infernite = Math.floor(global.resource.Infernite.amount / (inferno_rate.Infernite * time_multiplier)); - let max_operable = Math.max(0, Math.min(max_operable_oil, max_operable_coal, max_operable_infernite)); - if (max_operable < inferno_bonus) { - disable_smelters += inferno_bonus - max_operable; - inferno_bonus = max_operable; - } - consume_oil += inferno_rate.Oil * inferno_bonus; - consume_coal += inferno_rate.Coal * inferno_bonus; - let consume_infernite = inferno_rate.Infernite * inferno_bonus; - breakdown.p.consume.Infernite[loc("city_smelter")] = -consume_infernite; - modRes("Infernite", -(consume_infernite * time_multiplier)); - } - if (disable_smelters > 0) { - let disable_steel = Math.min(disable_smelters, steel_smelter); - steel_smelter -= disable_steel; - disable_smelters -= disable_steel; - let disable_iron = Math.min(disable_smelters, iron_smelter); - iron_smelter -= disable_iron; - disable_smelters -= disable_iron; - let disable_iridium = Math.min(disable_smelters, iridium_smelter); - iridium_smelter -= disable_iridium; - disable_smelters -= disable_iridium; - } - iron_smelter *= global.tech["smelting"] >= 3 ? 1.2 : 1; - iridium_smelter *= 0.05; - let dirtVal = govActive("dirty_jobs", 2); - if (dirtVal) { - iron_smelter *= 1 + dirtVal / 100; - iridium_smelter *= 1 + dirtVal / 100; - } - if (global.tech["smelting"] >= 7) { - iron_smelter *= 1.25; - iridium_smelter *= 1.25; - } - if (oil_bonus > 0) { - iron_smelter *= 1 + oil_bonus / 200; - iridium_smelter *= 1 + oil_bonus / 200; - } - if (inferno_bonus > 0) { - iron_smelter *= 1 + inferno_bonus / 125; - iridium_smelter *= 1 + inferno_bonus / 125; - } - if (star_forge > 0) { - iron_smelter *= 1 + star_forge / 500; - iridium_smelter *= 1 + star_forge / 75; - } - if (global.race["pyrophobia"]) { - iron_smelter *= 1 - traits.pyrophobia.vars()[0] / 100; - iridium_smelter *= 1 - traits.pyrophobia.vars()[0] / 100; - } - if (global.race["elemental"] && traits.elemental.vars()[0] === "fire") { - iron_smelter *= 1 + highPopAdjust(traits.elemental.vars()[3] * global.resource[global.race.species].amount / 100); - iridium_smelter *= 1 + highPopAdjust(traits.elemental.vars()[3] * global.resource[global.race.species].amount / 100); - } - let salFathom = fathomCheck("salamander"); - if (salFathom > 0) { - iron_smelter *= 1 + 0.2 * salFathom; - iridium_smelter *= 1 + 0.2 * salFathom; - } - breakdown.p.consume[fuel_config.l_type][loc("city_smelter")] = -consume_wood; - breakdown.p.consume.Coal[loc("city_smelter")] = -consume_coal; - breakdown.p.consume.Oil[loc("city_smelter")] = -consume_oil; - modRes(fuel_config.l_type, -(consume_wood * time_multiplier)); - modRes("Coal", -(consume_coal * time_multiplier)); - modRes("Oil", -(consume_oil * time_multiplier)); - if (consume_coal > 0 && global.tech["uranium"] && global.tech["uranium"] >= 3) { - let ash = consume_coal / 65; - if (global.city.geology["Uranium"]) { - ash *= global.city.geology["Uranium"] + 1; - } - ash *= production("psychic_boost", "Uranium"); - modRes("Uranium", ash * time_multiplier); - breakdown.p.consume["Uranium"][loc("city_coal_ash")] = (breakdown.p.consume["Uranium"][loc("city_coal_ash")] ?? 0) + ash; - } - if (global.resource.Steel.display) { - let iron_consume = steel_smelter * 2; - let coal_consume = steel_smelter * 0.25; - while (iron_consume * time_multiplier > global.resource.Iron.amount && iron_consume > 0 || coal_consume * time_multiplier > global.resource.Coal.amount && coal_consume > 0) { - iron_consume -= 2; - coal_consume -= 0.25; - steel_smelter--; - } - breakdown.p.consume.Coal[loc("city_smelter")] -= coal_consume; - breakdown.p.consume.Iron[loc("city_smelter")] = -iron_consume; - modRes("Iron", -(iron_consume * time_multiplier)); - modRes("Coal", -(coal_consume * time_multiplier)); - let steel_base = 1; - if (global.stats.achieve["steelen"] && global.stats.achieve["steelen"].l >= 1) { - let steelen_bonus = global.stats.achieve["steelen"].l * 2 / 100; - steel_base *= 1 + steelen_bonus; - } - if (global.stats.achieve["lamentis"] && global.stats.achieve.lamentis.l >= 2) { - steel_base *= 1.1; - } - for (i = 4; i <= 6; i++) { - if (global.tech["smelting"] >= i) { - steel_base *= 1.2; - } - } - if (global.tech["smelting"] >= 7) { - steel_base *= 1.25; - } - if (oil_bonus > 0) { - steel_smelter *= 1 + oil_bonus / 200; - } - if (inferno_bonus > 0) { - steel_smelter *= 1 + inferno_bonus / 125; - } - if (star_forge) { - steel_smelter *= 1 + star_forge / 500; - } - if (dirtVal) { - steel_smelter *= 1 + dirtVal / 100; - } - if (global.race["elemental"] && traits.elemental.vars()[0] === "fire") { - steel_smelter *= 1 + highPopAdjust(traits.elemental.vars()[3] * global.resource[global.race.species].amount / 100); - } - if (salFathom > 0) { - steel_smelter *= 1 + 0.2 * salFathom; - } - let smelter_output = steel_smelter * steel_base * production("psychic_boost", "Steel"); - if (global.race["pyrophobia"]) { - smelter_output *= 1 - traits.pyrophobia.vars()[0] / 100; - } - let delta = smelter_output; - delta *= hunger * global_multiplier * shrineMetal.mult; - breakdown.p["Steel"][loc("city_smelter")] = smelter_output + "v"; - breakdown.p["Steel"][loc("city_shrine")] = ((shrineMetal.mult - 1) * 100).toFixed(1) + "%"; - breakdown.p["Steel"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Steel", delta * time_multiplier); - if (global.tech["titanium"] && global.tech["titanium"] >= 1) { - let titanium = smelter_output * hunger * production("psychic_boost", "Titanium"); - if (star_forge > 0) { - delta *= 1 + star_forge / 50; - } - if (global.city.geology["Titanium"]) { - delta *= global.city.geology["Titanium"] + 1; - } - if (global.city.biome === "oceanic") { - delta *= biomes.oceanic.vars()[1]; - } - delta *= shrineMetal.mult; - let divisor2 = global.tech["titanium"] >= 3 ? 10 : 25; - modRes("Titanium", delta * time_multiplier / divisor2); - breakdown.p["Titanium"][loc("resource_Steel_name")] = titanium / divisor2 + "v"; - } - } - } - let graph_source = global.race["truepath"] ? "space" : "interstellar"; - let graph_struct = "g_factory"; - if (global.race["warlord"]) { - graph_source = "portal"; - graph_struct = "twisted_lab"; - } - if (global[graph_source][graph_struct] && global[graph_source][graph_struct].count > 0) { - let on_graph = global.race["truepath"] ? support_on["g_factory"] : global.race["warlord"] ? p_on["twisted_lab"] : int_on["g_factory"]; - let max_graph = global[graph_source][graph_struct].on; - let eff = max_graph > 0 ? on_graph / max_graph : 0; - let remaining = max_graph; - if (global.race["kindling_kindred"] || global.race["smoldering"]) { - global[graph_source][graph_struct].Lumber = 0; - } - ["Oil", "Coal", "Lumber"].forEach(function(res) { - remaining -= global[graph_source][graph_struct][res]; - if (remaining < 0) { - global[graph_source][graph_struct][res] += remaining; - remaining = 0; - } - }); - let graphene_production = global[graph_source][graph_struct].Lumber + global[graph_source][graph_struct].Coal + global[graph_source][graph_struct].Oil; - if (graphene_production > 0) { - let consume_wood = global[graph_source][graph_struct].Lumber * 350 * eff; - let consume_coal = global[graph_source][graph_struct].Coal * 25 * eff; - let consume_oil = global[graph_source][graph_struct].Oil * 15 * eff; - while (consume_wood * time_multiplier > global.resource.Lumber.amount && consume_wood > 0) { - consume_wood -= 350 * eff; - graphene_production--; - } - while (consume_coal * time_multiplier > global.resource.Coal.amount && consume_coal > 0) { - consume_coal -= 25 * eff; - graphene_production--; - } - while (consume_oil * time_multiplier > global.resource.Oil.amount && consume_oil > 0) { - consume_oil -= 15 * eff; - graphene_production--; - } - graphene_production *= production("g_factory") * production("psychic_boost", "Graphene"); - breakdown.p.consume.Lumber[global.race["warlord"] ? loc("portal_twisted_lab_title") : loc("interstellar_g_factory_bd")] = -consume_wood; - breakdown.p.consume.Coal[global.race["warlord"] ? loc("portal_twisted_lab_title") : loc("interstellar_g_factory_bd")] = -consume_coal; - breakdown.p.consume.Oil[global.race["warlord"] ? loc("portal_twisted_lab_title") : loc("interstellar_g_factory_bd")] = -consume_oil; - modRes("Lumber", -(consume_wood * time_multiplier)); - modRes("Coal", -(consume_coal * time_multiplier)); - modRes("Oil", -(consume_oil * time_multiplier)); - if (global.civic.govern.type === "corpocracy") { - graphene_production *= 1 + govEffect.corpocracy()[4] / 100; - } - if (global.civic.govern.type === "socialist") { - graphene_production *= 1 + govEffect.socialist()[1] / 100; - } - let ai = 1; - if (global.tech["ai_core"] >= 3) { - let graph = +(quantum_level / 5).toFixed(1) / 100; - ai += graph * p_on["citadel"]; - } - let incinerator = 1; - if (global.race["warlord"] && global.portal.hasOwnProperty("incinerator") && global.portal.incinerator.rank > 1) { - let rank = global.portal.incinerator.rank - 1; - incinerator += rank * 15 * global.portal.incinerator.on / 100; - } - let synd = global.race["truepath"] ? syndicate("spc_titan") : 1; - let delta = graphene_production * ai * zigVal * hunger * global_multiplier * synd * eff * incinerator; - breakdown.p["Graphene"][global.race["warlord"] ? loc("portal_twisted_lab_title") : loc("interstellar_g_factory_bd")] = graphene_production + "v"; - if (global.tech["isolation"] && graphene_production > 0) { - delta *= womling_technician; - if (womling_technician > 1) { - breakdown.p["Graphene"][`\u1102${loc("tau_red_womlings")}+0`] = (womling_technician - 1) * 100 + "%"; - } - } - if (incinerator > 1) { - breakdown.p["Graphene"][`\u1102${loc("portal_incinerator_title")}`] = (incinerator - 1) * 100 + "%"; - } - if (graphene_production > 0) { - breakdown.p["Graphene"][`\u1102${loc("space_syndicate")}`] = -((1 - synd) * 100) + "%"; - breakdown.p["Graphene"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - } - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - breakdown.p["Graphene"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - if (p_on["citadel"] > 0) { - breakdown.p["Graphene"][loc("interstellar_citadel_effect_bd")] = (ai - 1) * 100 + "%"; - } - breakdown.p["Graphene"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Graphene", delta * time_multiplier); - } else { - breakdown.p["Graphene"] = 0; - } - } - if (global.galaxy["vitreloy_plant"] && p_on["vitreloy_plant"] > 0) { - let consume_money = 5e4; - let consume_bolognium = 2.5; - let consume_stanene = 100; - let vitreloy_production = p_on["vitreloy_plant"]; - vitreloy_production = Math.min(vitreloy_production, Math.floor(global.resource.Money.amount / (consume_money * time_multiplier))); - vitreloy_production = Math.min(vitreloy_production, Math.floor(global.resource.Bolognium.amount / (consume_bolognium * time_multiplier))); - vitreloy_production = Math.min(vitreloy_production, Math.floor(global.resource.Stanene.amount / (consume_stanene * time_multiplier))); - vitreloy_production = Math.max(vitreloy_production, 0); - if (vitreloy_production > 0) { - consume_money *= vitreloy_production; - consume_bolognium *= vitreloy_production; - consume_stanene *= vitreloy_production; - vitreloy_production *= production("vitreloy_plant") * production("psychic_boost", "Vitreloy"); - breakdown.p.consume.Money[loc("galaxy_vitreloy_plant_bd")] = -consume_money; - breakdown.p.consume.Bolognium[loc("galaxy_vitreloy_plant_bd")] = -consume_bolognium; - breakdown.p.consume.Stanene[loc("galaxy_vitreloy_plant_bd")] = -consume_stanene; - modRes("Money", -(consume_money * time_multiplier)); - modRes("Bolognium", -(consume_bolognium * time_multiplier)); - modRes("Stanene", -(consume_stanene * time_multiplier)); - let pirate = piracy("gxy_alien1"); - breakdown.p["Vitreloy"][loc("galaxy_vitreloy_plant_bd")] = vitreloy_production + "v"; - if (global.race["discharge"] && global.race["discharge"] > 0) { - vitreloy_production *= 0.5; - breakdown.p["Vitreloy"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - if (vitreloy_production > 0) { - breakdown.p["Vitreloy"][`\u1102${loc("galaxy_piracy")}+0`] = -((1 - pirate) * 100) + "%"; - breakdown.p["Vitreloy"][`\u1102${loc("space_red_ziggurat_title")}+0`] = (zigVal - 1) * 100 + "%"; - } - modRes("Vitreloy", vitreloy_production * hunger * global_multiplier * pirate * time_multiplier * zigVal); - } - } - if (p_on["shadow_mine"]) { - let attract = p_on["soul_attractor"] ? 1 + p_on["soul_attractor"] * (global.tech.pitspawn >= 3 ? 0.2 : 0.1) : 1; - if (global.resource.Vitreloy.display) { - let rate = production("shadow_mine", "vitreloy"); - let mine_base = p_on["shadow_mine"] * rate * production("psychic_boost", "Vitreloy"); - let mine_delta = mine_base * attract * global_multiplier; - if (mine_base > 0) { - breakdown.p["Vitreloy"][loc("portal_shadow_mine_title")] = mine_base + "v"; - breakdown.p["Vitreloy"][`\u1102${loc("portal_soul_attractor_title")}+0`] = (attract - 1) * 100 + "%"; - } - modRes("Vitreloy", mine_delta * time_multiplier); - } - if (global.resource.Elerium.display) { - let rate = production("shadow_mine", "elerium"); - let mine_base = p_on["shadow_mine"] * rate * production("psychic_boost", "Elerium"); - let mine_delta = mine_base * attract * global_multiplier; - if (mine_base > 0) { - breakdown.p["Elerium"][loc("portal_shadow_mine_title")] = mine_base + "v"; - breakdown.p["Elerium"][`\u1102${loc("portal_soul_attractor_title")}+0`] = (attract - 1) * 100 + "%"; - } - modRes("Elerium", mine_delta * time_multiplier); - } - if (global.resource.Infernite.display) { - let rate = production("shadow_mine", "infernite"); - let mine_base = p_on["shadow_mine"] * rate * production("psychic_boost", "Infernite"); - let mine_delta = mine_base * attract * global_multiplier; - if (mine_base > 0) { - breakdown.p["Infernite"][loc("portal_shadow_mine_title")] = mine_base + "v"; - breakdown.p["Infernite"][`\u1102${loc("portal_soul_attractor_title")}+0`] = (attract - 1) * 100 + "%"; - } - modRes("Infernite", mine_delta * time_multiplier); - } - } - if (p_on["s_gate"] && global.galaxy["raider"] && gal_on["raider"] > 0) { - let base = gal_on["raider"] * 0.05 * production("psychic_boost", "Vitreloy"); - let pirate = piracy("gxy_chthonian"); - let delta = base * global_multiplier * pirate * hunger * zigVal; - breakdown.p["Vitreloy"][loc("galaxy_raider")] = base + "v"; - if (base > 0) { - breakdown.p["Vitreloy"][`\u1102${loc("galaxy_piracy")}+1`] = -((1 - pirate) * 100) + "%"; - breakdown.p["Vitreloy"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - } - modRes("Vitreloy", delta * time_multiplier); - } - breakdown.p["Vitreloy"][loc("hunger")] = (hunger - 1) * 100 + "%"; - if (!global.tech["isolation"] && global.space["lander"] && global.space["crashed_ship"] && global.space.crashed_ship.count === 100) { - let synd = syndicate("spc_triton"); - let base = support_on["lander"] * production("lander"); - let delta = base * global_multiplier * synd * hunger; - breakdown.p["Cipher"][loc("space_lander_title")] = base + "v"; - breakdown.p["Cipher"][`\u1102${loc("space_syndicate")}+0`] = -((1 - synd) * 100) + "%"; - breakdown.p["Cipher"][`\u1102${loc("hunger")}`] = (hunger - 1) * 100 + "%"; - modRes("Cipher", delta * time_multiplier); - if (global.resource.Cipher.display && global.tech["outer"] && global.tech.outer === 2) { - global.tech.outer = 3; - drawTech(); - } - } - if (!global.tech["isolation"] && global.space["digsite"] && global.space.digsite.count === 100) { - if (!global.tech["dig_control"]) { - global.tech["dig_control"] = 1; - drawTech(); - } - let synd = syndicate("spc_eris"); - let shock_base = support_on["shock_trooper"] * production("shock_trooper"); - let tank_base = support_on["tank"] * production("tank"); - if (support_on["shock_trooper"]) { - breakdown.p["Cipher"][loc("space_shock_trooper_title")] = shock_base + "v"; - breakdown.p["Cipher"][`\u1102${loc("space_syndicate")}+1`] = -((1 - synd) * 100) + "%"; - } - if (support_on["tank"]) { - breakdown.p["Cipher"][loc("space_tank_title")] = tank_base + "v"; - breakdown.p["Cipher"][`\u1102${loc("space_syndicate")}+2`] = -((1 - synd) * 100) + "%"; - } - let delta = (shock_base + tank_base) * global_multiplier * synd; - modRes("Cipher", delta * time_multiplier); - } - if (global.portal["oven_complete"] && p_on["oven_complete"] && !global.tech["dish_reset"] && global.portal["devilish_dish"].done >= 100) { - global.tech["dish_reset"] = 1; - drawTech(); - } - if (global.tech["isolation"] && global.tauceti["alien_outpost"] && p_on["alien_outpost"]) { - let base = production("alien_outpost"); - let colony_val = 1 + (support_on["colony"] || 0) * 0.5; - breakdown.p["Cipher"][loc("tech_alien_outpost")] = base + "v"; - if (base > 0) { - breakdown.p["Cipher"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - let delta = base * global_multiplier * colony_val; - modRes("Cipher", delta * time_multiplier); - } - let e_ship = {}; - if (global.tauceti["ore_refinery"] && global.tauceti["mining_ship"] && global.tech["tau_roid"] && global.tech.tau_roid >= 4) { - global.tauceti.ore_refinery.max = global.tauceti.ore_refinery.count * 1e3; - if (global.tauceti.ore_refinery.fill > 0) { - let raw = p_on["ore_refinery"] * production("ore_refinery"); - if (raw > global.tauceti.ore_refinery.fill) { - raw = global.tauceti.ore_refinery.fill; - } - global.tauceti.ore_refinery.fill -= raw * time_multiplier; - let c_ratio = global.tech.tau_roid >= 5 ? 0.6 : 0.64; - let u_ratio = global.tech.tau_roid >= 5 ? 0.35 : 0.36; - e_ship["iron"] = raw * c_ratio * (100 - global.tauceti.mining_ship.common) / 100 * production("mining_ship_ore", "iron") * production("psychic_boost", "Iron"); - e_ship["aluminium"] = raw * c_ratio * global.tauceti.mining_ship.common / 100 * production("mining_ship_ore", "aluminium") * production("psychic_boost", "Aluminium"); - e_ship["iridium"] = raw * u_ratio * (100 - global.tauceti.mining_ship.uncommon) / 100 * production("mining_ship_ore", "iridium") * production("psychic_boost", "Iridium"); - e_ship["neutronium"] = raw * u_ratio * global.tauceti.mining_ship.uncommon / 100 * production("mining_ship_ore", "neutronium") * production("psychic_boost", "Neutronium"); - if (global.tech.tau_roid >= 5) { - e_ship["orichalcum"] = raw * 0.05 * (100 - global.tauceti.mining_ship.rare) / 10 * production("mining_ship_ore", "orichalcum") * production("psychic_boost", "Orichalcum"); - e_ship["elerium"] = raw * 0.05 * global.tauceti.mining_ship.rare / 10 * production("mining_ship_ore", "elerium") * production("psychic_boost", "Elerium"); - } - } - let ore = support_on["mining_ship"] * production("mining_ship"); - global.tauceti.ore_refinery.fill += ore * time_multiplier; - if (global.tauceti.ore_refinery.fill > global.tauceti.ore_refinery.max) { - global.tauceti.ore_refinery.fill = global.tauceti.ore_refinery.max; - } - } - { - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - if (global.tech["mars"] && support_on["biodome"] && !global.race["kindling_kindred"] && !global.race["smoldering"]) { - let lumber = support_on["biodome"] * workerScale(global.civic.colonist.workers, "colonist") * production("biodome", "lumber") * production("psychic_boost", "Lumber"); - breakdown.p["Lumber"][actions.space.spc_red.biodome.title()] = lumber + "v"; - if (lumber > 0) { - breakdown.p["Lumber"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - } - breakdown.p["Lumber"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Lumber", lumber * hunger * global_multiplier * time_multiplier * zigVal); - } - } else if (global.race["soul_eater"] && global.race.species !== "wendigo" && global.race["evil"]) { - let weapons = weaponTechModifer(); - let hunters = workerScale(global.civic.hunter.workers, "hunter"); - hunters *= racialTrait(hunters, "hunting"); - if (global.race["servants"]) { - let serve = jobScale(global.race.servants.jobs.hunter); - serve *= servantTrait(global.race.servants.jobs.hunter, "hunting"); - hunters += highPopAdjust(serve); - } - hunters *= weapons / 2; - hunters *= production("psychic_boost", "Lumber"); - let soldiers = armyRating(garrisonSize(), "hunting") / 3; - soldiers *= production("psychic_boost", "Lumber"); - breakdown.p["Lumber"][jobName("hunter")] = hunters + "v"; - breakdown.p["Lumber"][loc("soldiers")] = soldiers + "v"; - breakdown.p["Lumber"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Lumber", hunters * hunger * global_multiplier * time_multiplier); - modRes("Lumber", soldiers * hunger * global_multiplier * time_multiplier); - } else if (global.race["evil"]) { - let reclaimers = workerScale(global.civic.lumberjack.workers, "lumberjack"); - reclaimers *= racialTrait(reclaimers, "lumberjack"); - if (global.race["servants"]) { - let serve = global.race.servants.jobs.lumberjack; - serve *= servantTrait(global.race.servants.jobs.lumberjack, "lumberjack"); - reclaimers += serve; - } - reclaimers *= production("psychic_boost", "Lumber"); - let graveyard = 1; - if (global.city["graveyard"]) { - graveyard += global.city["graveyard"].count * 0.08; - } - let soldiers = armyRating(garrisonSize(), "hunting") / 5; - soldiers *= production("psychic_boost", "Lumber"); - breakdown.p["Lumber"][jobName("lumberjack")] = reclaimers + "v"; - if (reclaimers > 0) { - breakdown.p["Lumber"][`\u1102${loc("city_graveyard")}+0`] = (graveyard - 1) * 100 + "%"; - breakdown.p["Lumber"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - breakdown.p["Lumber"][loc("soldiers")] = soldiers + "v"; - if (soldiers > 0) { - breakdown.p["Lumber"][`\u1102${loc("quarantine")}+1`] = (q_multiplier - 1) * 100 + "%"; - } - if (global.race["forager"]) { - let forage = 1; - let foragers = workerScale(global.civic.forager.workers, "forager"); - foragers *= racialTrait(foragers, "forager"); - if (global.race["servants"]) { - let serve = global.race.servants.jobs.forager; - serve *= servantTrait(global.race.servants.jobs.forager, "forager"); - foragers += serve; - } - let forage_base = foragers * forage * 0.25; - breakdown.p["Lumber"][jobName("forager")] = forage_base + "v"; - if (forage_base > 0) { - breakdown.p["Lumber"][`\u1102${loc("city_graveyard")}+1`] = (graveyard - 1) * 100 + "%"; - breakdown.p["Lumber"][`\u1102${loc("quarantine")}+2`] = (q_multiplier - 1) * 100 + "%"; - } - modRes("Lumber", forage_base * hunger * graveyard * global_multiplier * q_multiplier * time_multiplier); - } - breakdown.p["Lumber"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Lumber", reclaimers * hunger * graveyard * global_multiplier * q_multiplier * time_multiplier); - modRes("Lumber", soldiers * hunger * global_multiplier * q_multiplier * time_multiplier); - } else { - let lumber_base = workerScale(global.civic.lumberjack.workers, "lumberjack"); - lumber_base *= racialTrait(lumber_base, "lumberjack"); - if (global.race["servants"]) { - let serve = global.race.servants.jobs.lumberjack; - serve *= servantTrait(global.race.servants.jobs.lumberjack, "lumberjack"); - lumber_base += serve; - } - lumber_base *= global.city.biome === "forest" ? biomes.forest.vars()[0] : 1; - lumber_base *= global.city.biome === "savanna" ? biomes.savanna.vars()[2] : 1; - lumber_base *= global.city.biome === "desert" ? biomes.desert.vars()[2] : 1; - lumber_base *= global.city.biome === "swamp" ? biomes.swamp.vars()[2] : 1; - lumber_base *= global.city.biome === "taiga" ? biomes.taiga.vars()[0] : 1; - lumber_base *= global.civic.lumberjack.impact; - if (global.race["living_tool"]) { - lumber_base *= traits.living_tool.vars()[0] * (global.tech["science"] && global.tech.science > 0 ? global.tech.science * 0.25 : 0) + 1; - } else { - lumber_base *= (global.tech["axe"] && global.tech.axe > 1 ? (global.tech.axe - 1) * 0.35 : 0) + 1; - } - lumber_base *= production("psychic_boost", "Lumber"); - let sawmills = 1; - if (global.city["sawmill"]) { - let saw = global.tech["saw"] >= 2 ? 0.08 : 0.05; - sawmills *= global.city.sawmill.count * saw + 1; - } - let power_mult = 1; - let power_single = 1; - if (global.city.powered && global.city.sawmill && p_on["sawmill"]) { - power_mult += p_on["sawmill"] * 0.04; - power_single += 0.04; - } - let lumber_yard = 1; - if (global.city["lumber_yard"]) { - lumber_yard += global.city["lumber_yard"].count * 0.02; - } - breakdown.p["Lumber"][jobName("lumberjack")] = lumber_base + "v"; - if (lumber_base > 0) { - breakdown.p["Lumber"][`\u1102${loc("city_lumber_yard")}`] = (lumber_yard - 1) * 100 + "%"; - breakdown.p["Lumber"][`\u1102${loc("city_sawmill")}`] = (sawmills - 1) * 100 + "%"; - breakdown.p["Lumber"][`\u1102${loc("power")}`] = (power_mult - 1) * 100 + "%"; - breakdown.p["Lumber"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - if (global.race["discharge"] && global.race["discharge"] > 0 && p_on["sawmill"] > 0) { - power_mult = (power_mult - 1) * 0.5 + 1; - power_single = (power_single - 1) * 0.5 + 1; - breakdown.p["Lumber"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - let delta = lumber_base * sawmills * lumber_yard; - if (global.city["sawmill"]) { - global.city.sawmill["psaw"] = +(delta * hunger * q_multiplier * global_multiplier * (power_single - 1)).toFixed(5); - } - delta *= power_mult * hunger * q_multiplier * global_multiplier; - if (global.race["forager"]) { - let forage = 1; - let foragers = workerScale(global.civic.forager.workers, "forager"); - foragers *= racialTrait(foragers, "forager"); - if (global.race["servants"]) { - let serve = global.race.servants.jobs.forager; - serve *= servantTrait(global.race.servants.jobs.forager, "forager"); - foragers += serve; - } - let forage_base = foragers * forage * 0.25 * production("psychic_boost", "Lumber"); - breakdown.p["Lumber"][jobName("forager")] = forage_base + "v"; - if (lumber_base > 0) { - breakdown.p["Lumber"][`\u1102${loc("city_lumber_yard")}`] = (lumber_yard - 1) * 100 + "%"; - breakdown.p["Lumber"][`\u1102${loc("city_sawmill")}`] = (sawmills - 1) * 100 + "%"; - breakdown.p["Lumber"][`\u1102${loc("power")}`] = (power_mult - 1) * 100 + "%"; - breakdown.p["Lumber"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - modRes("Lumber", forage_base * hunger * q_multiplier * sawmills * lumber_yard * power_mult * global_multiplier * time_multiplier); - } - breakdown.p["Lumber"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Lumber", delta * time_multiplier); - } - } - let refinery = global.city["metal_refinery"] ? global.city["metal_refinery"].count * 6 : 0; - refinery *= q_multiplier; - if (global.race["sappy"]) { - if (global.tech["mining"] && global.resource[global.race.species].amount > 0) { - let stone_base = global.resource[global.race.species].amount * traits.sappy.vars()[0] * production("psychic_boost", "Stone"); - if (global.race["high_pop"]) { - stone_base = highPopAdjust(stone_base); - } - let cactiFathom = fathomCheck("cacti"); - if (cactiFathom > 0) { - stone_base *= 1 + 0.32 * cactiFathom; - } - breakdown.p["Stone"][flib("name")] = stone_base + "v"; - if (global.city.hasOwnProperty("basic_housing")) { - let grove = global.city.basic_housing.count * 0.025; - stone_base *= 1 + grove; - breakdown.p["Stone"][`\u1102${housingLabel("small")}`] = grove * 100 + "%"; - } - let soldiers = 0; - if (global.civic.hasOwnProperty("garrison")) { - soldiers = global.civic.garrison.workers * traits.sappy.vars()[0]; - if (global.race["high_pop"]) { - soldiers = highPopAdjust(soldiers); - } - breakdown.p["Stone"][loc("soldiers")] = soldiers + "v"; - } - let delta = (stone_base + soldiers) * hunger * global_multiplier; - breakdown.p["Stone"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Stone", delta * time_multiplier); - } - } else { - let quarriers = global.race["warlord"] ? global.civic.miner.workers : global.civic.quarry_worker.workers; - let stone_prod_name = global.race["warlord"] ? jobName("miner") : loc("workers"); - quarriers = workerScale(quarriers, "quarry_worker"); - let stone_base = quarriers * racialTrait(quarriers, "miner"); - let cactiFathom = fathomCheck("cacti"); - if (cactiFathom > 0) { - stone_base *= 1 + 0.32 * cactiFathom; - } - if (global.race["servants"]) { - let serve = global.race.servants.jobs.quarry_worker; - serve *= servantTrait(global.race.servants.jobs.quarry_worker, "miner"); - stone_base += serve; - } - stone_base *= global.civic.quarry_worker.impact; - let asbestos_base = 0; - let forage_base = 0; - if (global.race["forager"] && global.resource.Stone.display) { - let foragers = workerScale(global.civic.forager.workers, "forager"); - forage_base = foragers * racialTrait(foragers, "forager"); - if (global.race["servants"]) { - let serve = global.race.servants.jobs.forager; - serve *= servantTrait(global.race.servants.jobs.forager, "forager"); - forage_base += serve; - } - forage_base *= 0.22; - } - if (global.race["living_tool"] || global.race["tusk"]) { - const balance = global.race["hivemind"] ? traits.hivemind.vars()[0] : 1; - let tusk = global.race["tusk"] ? 1 + traits.tusk.vars()[0] / 100 * (armyRating(jobScale(balance), "army", 0) / balance / 100) : 1; - let lt = global.race["living_tool"] ? traits.living_tool.vars()[0] * (global.tech["science"] && global.tech.science > 0 ? global.tech.science * 0.06 : 0) + 1 : 1; - stone_base *= lt > tusk ? lt : tusk; - } else { - stone_base *= (global.tech["hammer"] && global.tech["hammer"] > 0 ? global.tech["hammer"] * 0.4 : 0) + 1; - } - let stone_environment = 1; - if (global.city.biome === "desert") { - stone_environment *= biomes.desert.vars()[0]; - } - if (global.city.biome === "swamp") { - stone_environment *= biomes.swamp.vars()[3]; - } - if (global.tech["explosives"] && global.tech.explosives >= 2) { - stone_environment *= 1 + global.tech.explosives * 0.25; - } - stone_base *= stone_environment; - forage_base *= stone_environment; - let tunneler = 1; - if (global.race["warlord"] && global.portal["tunneler"]) { - tunneler = 1 + (global.portal.tunneler.rank + 3) / 100 * global.portal.tunneler.count; - } - let rock_quarry = 1; - let power_single = 1; - let power_mult = 1; - let quarry_discharge = false; - let zigValStone = 1; - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - stone_prod_name = structName("mine"); - if (global.tech["mars"] && support_on["red_mine"]) { - let mine_base = support_on["red_mine"] * workerScale(global.civic.colonist.workers, "colonist"); - stone_base = mine_base * production("red_mine", "stone"); - zigValStone = zigVal; - if (global.race["smoldering"] && global.resource.Chrysotile.display) { - asbestos_base = mine_base * production("red_mine", "asbestos"); - asbestos_base *= production("psychic_boost", "Chrysotile"); - } - } - } else if (global.city["rock_quarry"]) { - rock_quarry += global.city["rock_quarry"].count * 0.02; - if (p_on["rock_quarry"]) { - power_single += 0.04; - power_mult += p_on["rock_quarry"] * 0.04; - quarry_discharge = global.race["discharge"] && global.race["discharge"] > 0; - } - if (global.race["smoldering"] && global.resource.Chrysotile.display) { - let asbestos_ratio = global.city.rock_quarry.asbestos / 100; - asbestos_base = (stone_base + forage_base) * asbestos_ratio; - asbestos_base *= production("psychic_boost", "Chrysotile"); - let stone_ratio = (100 - global.city.rock_quarry.asbestos) / 100; - stone_base *= stone_ratio; - forage_base *= stone_ratio; - } - } - stone_base *= production("psychic_boost", "Stone"); - forage_base *= production("psychic_boost", "Stone"); - breakdown.p["Stone"][stone_prod_name] = stone_base + "v"; - if (stone_base > 0) { - if (zigValStone > 1) { - breakdown.p["Stone"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - } - breakdown.p["Stone"][`\u1102${loc("city_rock_quarry")}`] = (rock_quarry - 1) * 100 + "%"; - breakdown.p["Stone"][`\u1102${loc("power")}`] = (power_mult - 1) * 100 + "%"; - if (quarry_discharge) { - breakdown.p["Stone"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - breakdown.p["Stone"][`\u1102${loc("portal_tunneler_bd")}`] = (tunneler - 1) * 100 + "%"; - breakdown.p["Stone"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - if (global.race["smoldering"] && global.resource.Chrysotile.display) { - breakdown.p["Chrysotile"][stone_prod_name] = asbestos_base + "v"; - if (asbestos_base > 0) { - if (zigValStone > 1) { - breakdown.p["Chrysotile"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - } - breakdown.p["Chrysotile"][`\u1102${loc("city_rock_quarry")}`] = (rock_quarry - 1) * 100 + "%"; - breakdown.p["Chrysotile"][`\u1102${loc("power")}`] = (power_mult - 1) * 100 + "%"; - if (quarry_discharge) { - breakdown.p["Chrysotile"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - breakdown.p["Chrysotile"][`\u1102${loc("portal_tunneler_bd")}`] = (tunneler - 1) * 100 + "%"; - breakdown.p["Chrysotile"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - } - if (forage_base > 0) { - breakdown.p["Stone"][jobName("forager")] = forage_base + "v"; - if (forage_base > 0) { - breakdown.p["Stone"][`\u1102${loc("city_rock_quarry")}+1`] = (rock_quarry - 1) * 100 + "%"; - breakdown.p["Stone"][`\u1102${loc("power")}+1`] = (power_mult - 1) * 100 + "%"; - if (quarry_discharge) { - breakdown.p["Stone"][`\u1102${loc("evo_challenge_discharge")}+1`] = "-50%"; - } - breakdown.p["Stone"][`\u1102${loc("portal_tunneler_bd")}+1`] = (tunneler - 1) * 100 + "%"; - breakdown.p["Stone"][`\u1102${loc("quarantine")}+1`] = (q_multiplier - 1) * 100 + "%"; - } - } - if (quarry_discharge) { - power_mult = (power_mult - 1) * 0.5 + 1; - power_single = (power_single - 1) * 0.5 + 1; - } - let delta = (stone_base * zigValStone + forage_base) * rock_quarry * tunneler; - if (global.city["rock_quarry"]) { - global.city.rock_quarry["cnvay"] = +(delta * hunger * q_multiplier * global_multiplier * (power_single - 1)).toFixed(5); - } - delta *= power_mult * hunger * q_multiplier * global_multiplier; - breakdown.p["Stone"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Stone", delta * time_multiplier); - if (global.race["smoldering"] && global.resource.Chrysotile.display) { - let a_delta = asbestos_base * zigValStone * rock_quarry * tunneler; - a_delta *= power_mult * hunger * q_multiplier * global_multiplier; - breakdown.p["Chrysotile"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Chrysotile", a_delta * time_multiplier); - } - if (global.city["metal_refinery"] && (global.city["metal_refinery"].count > 0 || global.race["cataclysm"] || global.race["orbit_decayed"] || global.race["warlord"])) { - let alum_ratio = global.race["cataclysm"] ? 0.16 : 0.08; - let base = stone_base * alum_ratio; - if (quarry_discharge) { - power_mult = (power_mult - 1) * 2 + 1; - power_single = (power_single - 1) * 2 + 1; - } - if (base > 0) { - if (global.city.geology["Aluminium"]) { - base *= global.city.geology["Aluminium"] + 1; - } - base *= production("psychic_boost", "Aluminium"); - breakdown.p["Aluminium"][stone_prod_name] = base + "v"; - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - breakdown.p["Aluminium"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - } - breakdown.p["Aluminium"][`\u1102${loc("city_rock_quarry")}+0`] = (rock_quarry - 1) * 100 + "%"; - breakdown.p["Aluminium"][`\u1102${loc("power")}+0`] = (power_mult - 1) * 100 + "%"; - if (quarry_discharge) { - breakdown.p["Aluminium"][`\u1102${loc("evo_challenge_discharge")}+0`] = "-50%"; - } - breakdown.p["Aluminium"][`\u1102${loc("portal_tunneler_bd")}+0`] = (tunneler - 1) * 100 + "%"; - breakdown.p["Aluminium"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - let forage_alum_base = forage_base * alum_ratio; - if (forage_alum_base > 0) { - if (global.city.geology["Aluminium"]) { - forage_alum_base *= global.city.geology["Aluminium"] + 1; - } - forage_alum_base *= production("psychic_boost", "Aluminium"); - breakdown.p["Aluminium"][jobName("forager")] = forage_alum_base + "v"; - breakdown.p["Aluminium"][`\u1102${loc("city_rock_quarry")}+1`] = (rock_quarry - 1) * 100 + "%"; - breakdown.p["Aluminium"][`\u1102${loc("power")}+1`] = (power_mult - 1) * 100 + "%"; - if (quarry_discharge) { - breakdown.p["Aluminium"][`\u1102${loc("evo_challenge_discharge")}+1`] = "-50%"; - } - breakdown.p["Aluminium"][`\u1102${loc("portal_tunneler_bd")}+1`] = (tunneler - 1) * 100 + "%"; - breakdown.p["Aluminium"][`\u1102${loc("quarantine")}+1`] = (q_multiplier - 1) * 100 + "%"; - } - if (quarry_discharge) { - power_mult = (power_mult - 1) * 0.5 + 1; - power_single = (power_single - 1) * 0.5 + 1; - } - let delta2 = base * zigValStone + forage_alum_base; - delta2 *= rock_quarry * tunneler * shrineMetal.mult * hunger * q_multiplier * global_multiplier; - global.city.metal_refinery["cnvay"] = +(delta2 * (power_single - 1)).toFixed(5); - global.city.rock_quarry["almcvy"] = global.city.metal_refinery["cnvay"]; - delta2 *= power_mult; - if (global.tech["alumina"] >= 2) { - refinery += p_on["metal_refinery"] * 6 * q_multiplier; - let ref_single = 6 * q_multiplier / 100; - global.city.metal_refinery["pwr"] = +(delta2 * ref_single).toFixed(5); - } - delta2 *= 1 + refinery / 100; - breakdown.p["Aluminium"][loc("city_shrine")] = ((shrineMetal.mult - 1) * 100).toFixed(1) + "%"; - breakdown.p["Aluminium"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Aluminium", delta2 * time_multiplier); - } - } - if (global.race["ocular_power"] && global.race["ocularPowerConfig"] && global.race.ocularPowerConfig.p && global.race.ocularPowerConfig.ds > 0) { - if (!global.race.ocularPowerConfig.hasOwnProperty("ticks") || global.race.ocularPowerConfig.ticks <= 0) { - global.race.ocularPowerConfig["dsl"] = Math.round(global.race.ocularPowerConfig.ds / 10); - global.race.ocularPowerConfig.ds = 0; - global.race.ocularPowerConfig["ticks"] = Math.round(10 / time_multiplier); - } - let base = global.race.ocularPowerConfig.dsl; - let delta = base * hunger * q_multiplier * global_multiplier; - global.race.ocularPowerConfig.ticks--; - breakdown.p["Stone"][loc("ocular_petrification")] = base + "v"; - modRes("Stone", delta * time_multiplier); - } - if (global.resource.Water.display) { - if (support_on["water_freighter"]) { - let synd = syndicate("spc_enceladus"); - let base = production("water_freighter") * support_on["water_freighter"] * production("psychic_boost", "Water"); - ; - let delta = base * hunger * global_multiplier * synd * zigVal; - breakdown.p["Water"][loc("space_water_freighter_title")] = base + "v"; - if (base > 0) { - breakdown.p["Water"][`\u1102${loc("space_syndicate")}`] = -((1 - synd) * 100) + "%"; - breakdown.p["Water"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Water"][`\u1102${loc("hunger")}`] = (hunger - 1) * 100 + "%"; - } - modRes("Water", delta * time_multiplier); - } - if (global.tech["isolation"] && global.tauceti["tau_farm"] && p_on["tau_farm"]) { - let colony_val = 1 + (support_on["colony"] || 0) * 0.5; - let base = production("tau_farm", "water") * p_on["tau_farm"] * production("psychic_boost", "Water"); - let delta = base * global_multiplier * colony_val; - breakdown.p["Water"][loc("tau_home_tau_farm")] = base + "v"; - if (base > 0) { - breakdown.p["Water"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - modRes("Water", delta * time_multiplier); - } - } - if (global.eden["palace"] && p_on["spirit_vacuum"] && global.tech["isle"]) { - let drain = 1653439 * p_on["spirit_vacuum"]; - if (global.tech.isle >= 6 && p_on["spirit_battery"]) { - let battery = p_on["spirit_battery"] || 0; - let boost = 0.08; - if (global.race["warlord"] && global.eden["corruptor"] && global.tech?.asphodel >= 13) { - boost *= 1 + (p_on["corruptor"] || 0) * 0.03; - } - drain *= 1 + battery * boost; - } - if (global.eden["soul_compactor"] && global.eden.soul_compactor.count === 1) { - global.eden.soul_compactor.energy += Math.round(drain / 2); - if (global.eden.soul_compactor.energy >= 1e9) { - global.eden.soul_compactor.energy -= 1e9; - global.resource.Soul_Gem.amount++; - global.eden.soul_compactor.report++; - } - } - if (global.eden.palace.energy > 0) { - global.eden.palace.rate = drain; - global.eden.palace.energy -= drain * time_multiplier; - global.eden.palace.energy = Math.round(global.eden.palace.energy); - if (global.eden.palace.energy <= 0) { - global.eden.palace.energy = 0; - global.tech["palace"] = 1; - drawTech(); - renderEdenic(); - } - } - } - if (global.resource.Mana.display) { - if (global.race["casting"]) { - ritual_types.forEach(function(spell) { - if (global.race.casting[spell]) { - if (global.race.casting[spell] > 0) { - const consume_mana = manaCost(global.race.casting[spell]); - const consume_mana_dt = consume_mana * time_multiplier; - if (consume_mana_dt > global.resource.Mana.amount) { - active_rituals[spell] = maxRitualNum(global.resource.Mana.amount, time_multiplier); - } else { - active_rituals[spell] = global.race.casting[spell]; - } - breakdown.p.consume.Mana[loc(`modal_pylon_spell_${spell}`)] = -consume_mana; - modRes("Mana", -consume_mana_dt); - } else { - active_rituals[spell] = 0; - } - } - }); - } - if (global.city["pylon"] || global.space["pylon"] || global.tauceti["pylon"]) { - let mana_base = 0; - let name = "city_pylon"; - if ((global.race["cataclysm"] || global.race["orbit_decayed"]) && global.space["pylon"]) { - mana_base = global.space.pylon.count * 5e-3; - name = "space_red_pylon"; - } else if (global.tech["isolation"] && global.tauceti["pylon"]) { - mana_base = global.tauceti.pylon.count * 0.0125; - name = "tau_home_pylon"; - } else if (global.city["pylon"]) { - mana_base = global.city.pylon.count * 0.01; - } - mana_base *= darkEffect("magic"); - let delta = mana_base * hunger * global_multiplier; - breakdown.p["Mana"][loc(name)] = mana_base + "v"; - if (global.tech["nexus"]) { - let nexus = global.tech["nexus"] * 5; - delta *= 1 + nexus / 100; - breakdown.p["Mana"][`\u1102${loc("arpa_projects_nexus_title")}`] = nexus + "%"; - } - modRes("Mana", delta * time_multiplier); - } - if (global.tech["cleric"] && global.civic.priest.display) { - let mana_base = workerScale(global.civic.priest.workers, "priest") * 25e-4; - if (global.race["high_pop"]) { - mana_base = highPopAdjust(mana_base); - } - mana_base *= darkEffect("magic"); - let delta = mana_base * hunger * global_multiplier; - breakdown.p["Mana"][jobName("priest")] = mana_base + "v"; - modRes("Mana", delta * time_multiplier); - } - if (global.race.universe === "magic" && global.civic.scientist.display) { - let mana_base = workerScale(global.civic.scientist.workers, "scientist") * 0.025; - if (global.race["high_pop"]) { - mana_base = highPopAdjust(mana_base); - } - mana_base *= darkEffect("magic"); - let delta = mana_base * hunger * global_multiplier; - breakdown.p["Mana"][jobName("wizard")] = mana_base + "v"; - if (global.civic.govern.type === "magocracy") { - delta *= 1 + govEffect.magocracy()[0] / 100; - breakdown.p["Mana"][`\u1102${loc("govern_magocracy")}`] = govEffect.magocracy()[0] + "%"; - } - modRes("Mana", delta * time_multiplier); - } - if (global.race.universe === "magic" && global.tech["syphon"]) { - let mana_base = global.tech.syphon / 3; - mana_base *= darkEffect("magic"); - let delta = mana_base * hunger * global_multiplier; - breakdown.p["Mana"][loc("arpa_syphon_title")] = mana_base + "v"; - modRes("Mana", delta * time_multiplier); - } - breakdown.p["Mana"][loc("hunger")] = (hunger - 1) * 100 + "%"; - } - if (global.resource.Crystal.display) { - let crystal_base = workerScale(global.civic.crystal_miner.workers, "crystal_miner"); - crystal_base *= racialTrait(crystal_base, "miner"); - if (global.race["servants"]) { - let serve = global.race.servants.jobs.crystal_miner; - serve *= servantTrait(global.race.servants.jobs.crystal_miner, "miner"); - crystal_base += serve; - } - crystal_base *= global.civic.crystal_miner.impact * production("psychic_boost", "Crystal"); - breakdown.p["Crystal"][jobName("crystal_miner")] = crystal_base + "v"; - if (global.civic.govern.type === "magocracy") { - let bonus = govEffect.magocracy()[1]; - crystal_base *= 1 + bonus / 100; - breakdown.p["Crystal"][`\u1102${loc("govern_magocracy")}`] = `${bonus}%`; - } - let delta = crystal_base * hunger * global_multiplier; - breakdown.p["Crystal"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Crystal", delta * time_multiplier); - } - if (global.resource.Copper.display || global.resource.Iron.display) { - let miner_base = workerScale(global.civic.miner.workers, "miner"); - miner_base *= racialTrait(miner_base, "miner"); - miner_base *= global.civic.miner.impact; - if (global.race["tough"]) { - miner_base *= 1 + traits.tough.vars()[0] / 100; - } - let ogreFathom = fathomCheck("ogre"); - if (ogreFathom > 0) { - miner_base *= 1 + traits.tough.vars(1)[0] / 100 * ogreFathom; - } - if (global.race["industrious"]) { - let bonus = 1 + traits.industrious.vars()[0] * global.race["industrious"] / 100; - miner_base *= bonus; - } - if (global.city.ptrait.includes("dense")) { - miner_base *= planetTraits.dense.vars()[0]; - } - if (global.city.ptrait.includes("permafrost")) { - miner_base *= planetTraits.permafrost.vars()[0]; - } - if (!global.race["living_tool"] && !global.race["tusk"]) { - miner_base *= (global.tech["pickaxe"] && global.tech.pickaxe > 0 ? global.tech.pickaxe * 0.15 : 0) + 1; - } - if (global.tech["explosives"] && global.tech.explosives >= 2) { - miner_base *= 0.95 + global.tech.explosives * 0.15; - } - let power_mult = 1; - let pow_single = 1; - if (global.city["mine"]["on"]) { - power_mult += p_on["mine"] * 0.05; - pow_single += 1.05; - } - let tunneler = 1; - if (global.race["warlord"] && global.portal["tunneler"]) { - tunneler = 1 + (global.portal.tunneler.rank + 3) / 100 * global.portal.tunneler.count; - } - if (global.resource.Copper.display) { - let copper_mult = 1 / 7; - if (global.tech["copper"]) { - copper_mult *= 1.2; - } - let copper_base = miner_base * copper_mult * production("psychic_boost", "Copper"); - if (global.city.geology["Copper"]) { - copper_base *= global.city.geology["Copper"] + 1; - } - if (global.city.biome === "volcanic") { - copper_base *= biomes.volcanic.vars()[1]; - } else if (global.city.biome === "ashland") { - copper_base *= biomes.ashland.vars()[2]; - } - let copper_power = power_mult; - let cop_single = pow_single; - breakdown.p["Copper"][jobName("miner")] = copper_base + "v"; - if (copper_base > 0) { - breakdown.p["Copper"][`\u1102${loc("power")}`] = (copper_power - 1) * 100 + "%"; - breakdown.p["Copper"][`\u1102${loc("portal_tunneler_bd")}`] = (tunneler - 1) * 100 + "%"; - breakdown.p["Copper"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - if (global.race["discharge"] && global.race["discharge"] > 0 && p_on["mine"] > 0) { - copper_power = (copper_power - 1) * 0.5 + 1; - cop_single = (cop_single - 1) * 0.5 + 1; - breakdown.p["Copper"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - } - let delta = copper_base * shrineMetal.mult * tunneler * hunger * q_multiplier * global_multiplier; - global.city.mine["cpow"] = +(delta * (cop_single - 1)).toFixed(5); - delta *= copper_power; - modRes("Copper", delta * time_multiplier); - if (global.race["forager"] && global.tech["dowsing"]) { - let forage = global.tech.dowsing >= 2 ? 5 : 1; - let foragers = workerScale(global.civic.forager.workers, "forager"); - foragers *= racialTrait(foragers, "forager"); - if (global.race["servants"]) { - let serve = global.race.servants.jobs.forager; - serve *= servantTrait(global.race.servants.jobs.forager, "forager"); - foragers += serve; - } - let forage_base = foragers * forage * 0.025 * production("psychic_boost", "Copper"); - if (global.city.geology["Copper"]) { - forage_base *= global.city.geology["Copper"] + 1; - } - if (global.city.biome === "volcanic") { - forage_base *= biomes.volcanic.vars()[1]; - } else if (global.city.biome === "ashland") { - forage_base *= biomes.ashland.vars()[2]; - } - breakdown.p["Copper"][jobName("forager")] = forage_base + "v"; - if (forage_base > 0) { - breakdown.p["Copper"][`\u1102${loc("quarantine")}+1`] = (q_multiplier - 1) * 100 + "%"; - } - modRes("Copper", forage_base * hunger * global_multiplier * q_multiplier * time_multiplier); - } - } - if (global.resource.Iron.display) { - let iron_mult = 1 / 4; - let iron_base = miner_base * iron_mult * production("psychic_boost", "Iron"); - if (global.race["iron_allergy"]) { - iron_base *= 1 - traits.iron_allergy.vars()[0] / 100; - } - let smelter_mult = 1 + iron_smelter * 0.1; - if (global.city.geology["Iron"]) { - iron_base *= global.city.geology["Iron"] + 1; - } - if (global.city.biome === "volcanic") { - iron_base *= biomes.volcanic.vars()[2]; - } else if (global.city.biome === "ashland") { - iron_base *= biomes.ashland.vars()[2]; - } - let space_iron = 0; - let synd = syndicate("spc_belt"); - if (support_on["iron_ship"]) { - space_iron = support_on["iron_ship"] * production("iron_ship") * production("psychic_boost", "Iron"); - space_iron *= synd; - } - let iron_power = power_mult; - let iron_single = power_mult; - breakdown.p["Iron"][jobName("miner")] = iron_base + "v"; - if (iron_base > 0) { - breakdown.p["Iron"][`\u1102${loc("portal_tunneler_bd")}`] = (tunneler - 1) * 100 + "%"; - breakdown.p["Iron"][`\u1102${loc("power")}`] = (iron_power - 1) * 100 + "%"; - if (global.race["discharge"] && global.race["discharge"] > 0 && p_on["mine"] > 0) { - iron_power = (iron_power - 1) * 0.5 + 1; - iron_single = (iron_single - 1) * 0.5 + 1; - breakdown.p["Iron"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - breakdown.p["Iron"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - let pit_miner = 0; - let womling = 0; - if (global.tech["isolation"] && global.race["lone_survivor"]) { - { - let miner_base2 = workerScale(global.civic.pit_miner.workers, "pit_miner"); - miner_base2 *= racialTrait(miner_base2, "miner"); - let colony_val = 1 + (support_on["colony"] || 0) * 0.5; - let pit_base = miner_base2 * production("psychic_boost", "Iron"); - pit_base *= production("mining_pit", "iron"); - pit_miner = pit_base * colony_val; - breakdown.p["Iron"][jobName("pit_miner")] = pit_base + "v"; - if (pit_base > 0) { - breakdown.p["Iron"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - } - if (global.tauceti.hasOwnProperty("womling_mine") && global.tauceti.hasOwnProperty("overseer")) { - let prod = global.tauceti.overseer.prod / 100; - let iron_base2 = global.tauceti.womling_mine.miners * production("womling_mine", "iron") * production("psychic_boost", "Iron"); - breakdown.p["Iron"][loc("tau_red_womlings")] = iron_base2 + "v"; - womling = iron_base2 * prod; - if (iron_base2 > 0) { - breakdown.p["Iron"][`\u1102${loc("tau_red_womling_prod_label")}`] = -((1 - prod) * 100) + "%"; - } - } - } - breakdown.p["Iron"][jobName("space_miner")] = space_iron + "v"; - if (space_iron > 0) { - breakdown.p["Iron"][`\u1102${loc("space_syndicate")}`] = -((1 - synd) * 100) + "%"; - breakdown.p["Iron"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Iron"][`\u1102${loc("quarantine")}+1`] = (qs_multiplier - 1) * 100 + "%"; - } - if (global.race["gravity_well"]) { - space_iron = teamster(space_iron); - } - if (global.race["gravity_well"]) { - breakdown.p["Iron"][`\u1102${loc("evo_challenge_gravity_well")}+1`] = -((1 - teamster(1)) * 100) + "%"; - } - let eship_iron = e_ship["iron"] ? e_ship.iron * womling_technician : 0; - let delta = (iron_base * tunneler * iron_power * q_multiplier + space_iron * qs_multiplier * zigVal + eship_iron + pit_miner + womling) * smelter_mult * shrineMetal.mult; - global.city.mine["ipow"] = +(iron_base * q_multiplier * hunger * global_multiplier * (iron_single - 1)).toFixed(5); - delta *= hunger * global_multiplier; - if (e_ship["iron"] && e_ship.iron > 0) { - breakdown.p["Iron"][loc("tau_roid_mining_ship")] = e_ship.iron + "v"; - if (womling_technician > 1) { - breakdown.p["Iron"][`\u1102${loc("tau_red_womlings")}+0`] = (womling_technician - 1) * 100 + "%"; - } - } - breakdown.p["Iron"][loc("city_smelter")] = (smelter_mult - 1) * 100 + "%"; - breakdown.p["Iron"][loc("city_shrine")] = ((shrineMetal.mult - 1) * 100).toFixed(1) + "%"; - if (global.race["forager"] && global.tech["dowsing"]) { - let forage = global.tech.dowsing >= 2 ? 2 : 1; - let foragers = workerScale(global.civic.forager.workers, "forager"); - foragers *= racialTrait(foragers, "forager"); - if (global.race["servants"]) { - let serve = global.race.servants.jobs.forager; - serve *= servantTrait(global.race.servants.jobs.forager, "forager"); - foragers += serve; - } - let forage_base = foragers * forage * 0.035 * production("psychic_boost", "Iron"); - ; - if (global.city.geology["Iron"]) { - forage_base *= global.city.geology["Iron"] + 1; - } - if (global.city.biome === "volcanic") { - forage_base *= biomes.volcanic.vars()[2]; - } else if (global.city.biome === "ashland") { - forage_base *= biomes.ashland.vars()[2]; - } - breakdown.p["Iron"][jobName("forager")] = forage_base + "v"; - if (forage_base > 0) { - breakdown.p["Iron"][`\u1102${loc("quarantine")}+2`] = (q_multiplier - 1) * 100 + "%"; - } - modRes("Iron", forage_base * hunger * global_multiplier * q_multiplier * time_multiplier); - } - breakdown.p["Iron"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Iron", delta * time_multiplier); - if (global.tech["titanium"] && global.tech["titanium"] >= 2) { - let labor_base = highPopAdjust(workerScale(global.civic.miner.workers, "miner")) / 4; - if (support_on["iron_ship"]) { - labor_base += support_on["iron_ship"] / 2; - } - let iron = labor_base * iron_smelter * 0.1; - delta = iron * global_multiplier; - if (star_forge > 0) { - delta *= 1 + star_forge / 50; - } - if (global.city.geology["Titanium"]) { - delta *= global.city.geology["Titanium"] + 1; - } - if (global.city.biome === "oceanic") { - delta *= biomes.oceanic.vars()[0]; - } - delta *= shrineMetal.mult * production("psychic_boost", "Titanium"); - let divisor2 = global.tech["titanium"] >= 3 ? 10 : 25; - modRes("Titanium", delta * time_multiplier / divisor2); - breakdown.p["Titanium"][loc("resource_Iron_name")] = iron / divisor2 + "v"; - } - } - if (global.race["sappy"]) { - if (global.city["metal_refinery"] && global.city["metal_refinery"].count > 0 || global.race["cataclysm"] || global.race["orbit_decayed"]) { - let base = 0; - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - if (global.tech["mars"] && support_on["red_mine"]) { - base = support_on["red_mine"] * workerScale(global.civic.colonist.workers, "colonist") * production("red_mine", "aluminium"); - } - } else { - base = miner_base * power_mult * 0.088; - } - if (global.city.geology["Aluminium"]) { - base *= global.city.geology["Aluminium"] + 1; - } - base *= production("psychic_boost", "Aluminium"); - let delta = base * shrineMetal.mult * hunger * global_multiplier; - if (global.tech["alumina"] >= 2) { - refinery += p_on["metal_refinery"] * 6; - } - delta *= 1 + refinery / 100; - breakdown.p["Aluminium"][`${global.race["cataclysm"] || global.race["orbit_decayed"] ? structName("mine") : jobName("miner")}+2`] = base + "v"; - if ((global.race["cataclysm"] || global.race["orbit_decayed"]) && base > 0 && zigVal > 0) { - delta *= zigVal; - breakdown.p["Aluminium"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - } - breakdown.p["Aluminium"][loc("city_shrine")] = (shrineMetal.mult - 1) * 100 + "%"; - breakdown.p["Aluminium"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Aluminium", delta * time_multiplier); - } - if (global.race["smoldering"] && global.resource.Chrysotile.display) { - let cry_base = miner_base / 2 * production("psychic_boost", "Chrysotile"); - let cry_power = power_mult; - breakdown.p["Chrysotile"][jobName("miner")] = cry_base + "v"; - if (cry_base > 0) { - breakdown.p["Chrysotile"][`\u1102${loc("power")}`] = (cry_power - 1) * 100 + "%"; - if (global.race["discharge"] && global.race["discharge"] > 0 && p_on["mine"] > 0) { - cry_power = (cry_power - 1) * 0.5 + 1; - breakdown.p["Chrysotile"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - } - let delta = cry_base * cry_power; - delta *= hunger * global_multiplier; - breakdown.p["Chrysotile"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Chrysotile", delta * time_multiplier); - } - } - } - { - if (global.interstellar["mining_droid"] && miner_droids["alum"] > 0) { - let base = miner_droids["alum"] * 2.75 * production("psychic_boost", "Aluminium"); - let delta = base * shrineMetal.mult * global_multiplier * zigVal; - delta *= 1 + refinery / 100; - breakdown.p["Aluminium"][loc("interstellar_mining_droid_title")] = base + "v"; - if (base > 0) { - breakdown.p["Aluminium"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - } - modRes("Aluminium", delta * time_multiplier); - } - if (global.resource.Aluminium.display && global.space["titan_mine"]) { - let synd = syndicate("spc_titan"); - let titan_colonists = p_on["ai_colonist"] ? workerScale(global.civic.titan_colonist.workers, "titan_colonist") + jobScale(p_on["ai_colonist"]) : workerScale(global.civic.titan_colonist.workers, "titan_colonist"); - let alum_base = production("titan_mine", "aluminium") * support_on["titan_mine"] * titan_colonists * production("psychic_boost", "Aluminium"); - let alum_delta = alum_base * shrineMetal.mult * global_multiplier * qs_multiplier * synd * zigVal; - alum_delta *= 1 + refinery / 100; - breakdown.p["Aluminium"][`${loc("city_mine")}+0`] = +alum_base.toFixed(3) + "v"; - if (alum_base > 0) { - breakdown.p["Aluminium"][`\u1102${loc("space_syndicate")}`] = -((1 - synd) * 100) + "%"; - breakdown.p["Aluminium"][`\u1102${loc("space_red_ziggurat_title")}+2`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Aluminium"][`\u1102${loc("quarantine")}+2`] = (qs_multiplier - 1) * 100 + "%"; - } - modRes("Aluminium", alum_delta * time_multiplier); - } - if (global.resource.Aluminium.display && e_ship["aluminium"] && e_ship.aluminium > 0) { - let alum_delta = e_ship.aluminium * shrineMetal.mult * global_multiplier * womling_technician; - alum_delta *= 1 + refinery / 100; - breakdown.p["Aluminium"][loc("tau_roid_mining_ship")] = e_ship.aluminium + "v"; - if (womling_technician > 1) { - breakdown.p["Aluminium"][`\u1102${loc("tau_red_womlings")}+0`] = (womling_technician - 1) * 100 + "%"; - } - modRes("Aluminium", alum_delta * time_multiplier); - } - if (refinery > 0) { - breakdown.p["Aluminium"][loc("city_metal_refinery")] = refinery + "%"; - breakdown.p["Aluminium"][`\u1102${loc("quarantine")}+3`] = (q_multiplier - 1) * 100 + "%"; - } - } - if (support_on["red_mine"] && support_on["red_mine"] > 0) { - let synd = syndicate("spc_red"); - let copper_base = support_on["red_mine"] * workerScale(global.civic.colonist.workers, "colonist") * production("red_mine", "copper").f; - copper_base *= production("psychic_boost", "Copper"); - breakdown.p["Copper"][loc("space_red_mine_desc_bd", [planetName().red])] = copper_base + "v"; - if (copper_base > 0) { - breakdown.p["Copper"][`\u1102${loc("space_syndicate")}`] = -((1 - synd) * 100) + "%"; - breakdown.p["Copper"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Copper"][`\u1102${loc("quarantine")}+1`] = (qs_multiplier - 1) * 100 + "%"; - } - modRes("Copper", copper_base * shrineMetal.mult * time_multiplier * global_multiplier * qs_multiplier * hunger * synd * zigVal); - let titanium_base = support_on["red_mine"] * workerScale(global.civic.colonist.workers, "colonist") * hunger * production("red_mine", "titanium").f; - titanium_base *= production("psychic_boost", "Titanium"); - breakdown.p["Titanium"][loc("space_red_mine_desc_bd", [planetName().red])] = titanium_base + "v"; - if (titanium_base > 0) { - breakdown.p["Titanium"][`\u1102${loc("space_syndicate")}`] = -((1 - synd) * 100) + "%"; - breakdown.p["Titanium"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Titanium"][`\u1102${loc("quarantine")}+0`] = (qs_multiplier - 1) * 100 + "%"; - } - modRes("Titanium", titanium_base * shrineMetal.mult * time_multiplier * global_multiplier * qs_multiplier * synd * zigVal); - } - if (shrineBonusActive()) { - breakdown.p["Copper"][loc("city_shrine")] = ((shrineMetal.mult - 1) * 100).toFixed(1) + "%"; - breakdown.p["Titanium"][loc("city_shrine")] = ((shrineMetal.mult - 1) * 100).toFixed(1) + "%"; - } - breakdown.p["Copper"][loc("hunger")] = (hunger - 1) * 100 + "%"; - if (breakdown.p["Uranium"].hasOwnProperty(loc("city_coal_ash"))) { - breakdown.p["Uranium"][loc("city_coal_ash")] = breakdown.p["Uranium"][loc("city_coal_ash")] + "v"; - } - if (global.resource.Coal.display) { - let coal_base = workerScale(global.race["warlord"] ? global.civic.miner.workers : global.civic.coal_miner.workers, "coal_miner"); - coal_base *= racialTrait(coal_base, "miner"); - if (global.race["tough"]) { - coal_base *= 1 + traits.tough.vars()[0] / 100; - } - let ogreFathom = fathomCheck("ogre"); - if (ogreFathom > 0) { - coal_base *= 1 + traits.tough.vars(1)[0] / 100 * ogreFathom; - } - if (global.race["resilient"]) { - let bonus = 1 + traits.resilient.vars()[0] * global.race["resilient"] / 100; - coal_base *= bonus; - } - if (!global.race["living_tool"] && !global.race["tusk"]) { - coal_base *= (global.tech["pickaxe"] && global.tech.pickaxe > 0 ? global.tech.pickaxe * 0.12 : 0) + 1; - } - if (global.tech["explosives"] && global.tech.explosives >= 2) { - coal_base *= 0.95 + global.tech.explosives * 0.15; - } - if (global.city.geology["Coal"]) { - coal_base *= global.city.geology["Coal"] + 1; - } - let power_mult = 1; - let coal_single = 1; - if (global.city["coal_mine"]["on"]) { - power_mult += p_on["coal_mine"] * 0.05; - coal_single += 0.05; - } - let tunneler = 1; - if (global.race["warlord"] && global.portal["tunneler"]) { - tunneler = 1 + (global.portal.tunneler.rank + 3) / 100 * global.portal.tunneler.count; - } - coal_base *= global.civic.coal_miner.impact * production("psychic_boost", "Coal"); - breakdown.p["Coal"][global.race["warlord"] ? jobName("miner") : jobName("coal_miner")] = coal_base + "v"; - if (coal_base > 0) { - breakdown.p["Coal"][`\u1102${loc("power")}`] = (power_mult - 1) * 100 + "%"; - breakdown.p["Coal"][`\u1102${loc("portal_tunneler_bd")}`] = (tunneler - 1) * 100 + "%"; - breakdown.p["Coal"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - if (global.race["discharge"] && global.race["discharge"] > 0 && p_on["coal_mine"] > 0) { - power_mult = (power_mult - 1) * 0.5 + 1; - coal_single = (coal_single - 1) * 0.5 + 1; - breakdown.p["Coal"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - if (global.race["cataclysm"] && support_on["iridium_mine"]) { - coal_base = support_on["iridium_mine"] * production("iridium_mine", "coal"); - coal_base *= production("psychic_boost", "Coal"); - breakdown.p["Coal"][loc("space_moon_iridium_mine_title")] = coal_base + "v"; - if (coal_base > 0) { - breakdown.p["Coal"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Coal"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - power_mult = 1 * zigVal; - } - let delta = coal_base * tunneler * hunger * q_multiplier * global_multiplier; - global.city.coal_mine["cpow"] = +(delta * (coal_single - 1)).toFixed(5); - delta *= power_mult; - breakdown.p["Coal"][loc("hunger")] = (hunger - 1) * 100 + "%"; - if (global.interstellar["mining_droid"] && miner_droids["coal"] > 0) { - let driod_base = miner_droids["coal"] * 3.75 * production("psychic_boost", "Coal"); - let driod_delta = driod_base * global_multiplier * zigVal; - breakdown.p["Coal"][loc("interstellar_mining_droid_title")] = driod_base + "v"; - if (driod_base > 0) { - breakdown.p["Coal"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - } - modRes("Coal", driod_delta * time_multiplier); - } - modRes("Coal", delta * time_multiplier); - if (global.resource.Uranium.display) { - let uranium = delta / (global.race["cataclysm"] ? 48 : 115) * production("psychic_boost", "Uranium"); - global.city.coal_mine["upow"] = +(global.city.coal_mine["cpow"] / (global.race["cataclysm"] ? 48 : 115)).toFixed(5); - if (global.city.geology["Uranium"]) { - uranium *= global.city.geology["Uranium"] + 1; - } - breakdown.p["Uranium"][global.race["cataclysm"] ? loc("space_moon_iridium_mine_title") : global.race["warlord"] ? jobName("miner") : jobName("coal_miner")] = uranium / global_multiplier + "v"; - let u_delta = uranium * tunneler; - if (u_delta > 0) { - breakdown.p["Uranium"][`\u1102${loc("portal_tunneler_bd")}`] = (tunneler - 1) * 100 + "%"; - } - modRes("Uranium", u_delta * time_multiplier); - } - } - if (global.race["warlord"] && global.portal["tunneler"] && global.portal.tunneler.count > 0) { - let res_base = workerScale(global.civic.miner.workers, "miner"); - res_base *= racialTrait(res_base, "miner"); - if (global.race["tough"]) { - res_base *= 1 + traits.tough.vars()[0] / 100; - } - let ogreFathom = fathomCheck("ogre"); - if (ogreFathom > 0) { - res_base *= 1 + traits.tough.vars(1)[0] / 100 * ogreFathom; - } - if (global.race["resilient"]) { - let bonus = 1 + traits.resilient.vars()[0] * global.race["resilient"] / 100; - res_base *= bonus; - } - if (!global.race["living_tool"] && !global.race["tusk"]) { - res_base *= (global.tech["pickaxe"] && global.tech.pickaxe > 0 ? global.tech.pickaxe * 0.12 : 0) + 1; - } - if (global.tech["explosives"] && global.tech.explosives >= 2) { - res_base *= 0.95 + global.tech.explosives * 0.15; - } - let tunneler = 1; - if (global.race["warlord"] && global.portal["tunneler"]) { - tunneler = 1 + (global.portal.tunneler.rank + 3) / 100 * global.portal.tunneler.count; - } - ["Neutronium", "Adamantite", "Bolognium", "Orichalcum"].forEach(function(res) { - let cur_base = res_base; - cur_base *= production("psychic_boost", res); - switch (res) { - case "Neutronium": - cur_base /= 10; - break; - case "Adamantite": - cur_base /= 5; - break; - case "Bolognium": - cur_base /= 8; - break; - case "Orichalcum": - cur_base /= 6; - break; - } - breakdown.p[res][jobName("miner")] = cur_base + "v"; - if (cur_base > 0) { - breakdown.p[res][`\u1102${loc("portal_tunneler_bd")}`] = (tunneler - 1) * 100 + "%"; - breakdown.p[res][loc("hunger")] = (hunger - 1) * 100 + "%"; - } - let delta = cur_base * tunneler; - delta *= hunger * q_multiplier * global_multiplier; - modRes(res, delta * time_multiplier); - }); - } - if (global.interstellar["mining_droid"] && miner_droids["uran"] > 0) { - let driod_base = miner_droids["uran"] * 0.12 * production("psychic_boost", "Uranium"); - let driod_delta = driod_base * global_multiplier * zigVal; - breakdown.p["Uranium"][loc("interstellar_mining_droid_title")] = driod_base + "v"; - if (driod_base > 0) { - breakdown.p["Uranium"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - } - modRes("Uranium", driod_delta * time_multiplier); - } - if (global.space["uranium_mine"] && p_on["uranium_mine"]) { - let synd = syndicate("spc_kuiper"); - let mine_base = p_on["uranium_mine"] * production("uranium_mine") * production("psychic_boost", "Uranium"); - let mine_delta = mine_base * global_multiplier * qs_multiplier * synd * zigVal; - breakdown.p["Uranium"][loc("space_kuiper_mine", [global.resource.Uranium.name])] = mine_base + "v"; - if (mine_base > 0) { - breakdown.p["Uranium"][`\u1102${loc("space_syndicate")}`] = -((1 - synd) * 100) + "%"; - breakdown.p["Uranium"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Uranium"][`\u1102${loc("quarantine")}+0`] = (qs_multiplier - 1) * 100 + "%"; - } - modRes("Uranium", mine_delta * time_multiplier); - } - if (global.resource.Oil.display) { - let whale_oil = 0; - if (global.tauceti["whaling_station"] && global.tauceti["whaling_ship"]) { - global.tauceti.whaling_station.max = global.tauceti.whaling_station.count * 750; - if (global.tauceti.whaling_station.fill > 0) { - let raw = p_on["whaling_station"] * production("whaling_station"); - if (raw > global.tauceti.whaling_station.fill) { - raw = global.tauceti.whaling_station.fill; - } - global.tauceti.whaling_station.fill -= raw * time_multiplier; - whale_oil = raw * production("whaling_ship_oil") * production("psychic_boost", "Oil"); - } - let blubber = support_on["whaling_ship"] * production("whaling_ship"); - global.tauceti.whaling_station.fill += blubber * time_multiplier; - if (global.tauceti.whaling_station.fill > global.tauceti.whaling_station.max) { - global.tauceti.whaling_station.fill = global.tauceti.whaling_station.max; - } - } - let synd = syndicate("spc_gas_moon"); - let fueled_oil_wells = global.race["warlord"] ? global.portal.pumpjack.count : global.city.oil_well.count; - let fueled_oil_extractor = p_on["oil_extractor"]; - let oil_prod = global.city["oil_well"] ? production("oil_well") : 0; - let oil_prod_mod = q_multiplier; - let extract_prod = global.space["oil_extractor"] ? production("oil_extractor") : 0; - let extract_prod_mod = qs_multiplier * synd * zigVal; - if (global.race["blubber"]) { - let tick = traits.blubber.vars()[0] * time_multiplier / 5; - let check_dead = function(amount) { - if (amount > 0) { - if (global.city.oil_well.dead < amount * tick) { - amount = Math.floor(global.city.oil_well.dead / tick); - } - global.city.oil_well.dead -= amount * tick; - if (global.city.oil_well.dead < tick) { - global.city.oil_well.dead = 0; - } - } - return amount; - }; - if (oil_prod * oil_prod_mod >= extract_prod * extract_prod_mod) { - fueled_oil_wells = check_dead(fueled_oil_wells); - fueled_oil_extractor = check_dead(fueled_oil_extractor); - } else { - fueled_oil_extractor = check_dead(fueled_oil_extractor); - fueled_oil_wells = check_dead(fueled_oil_wells); - } - } - let oil_well = oil_prod * fueled_oil_wells; - let oil_extractor = extract_prod * fueled_oil_extractor; - oil_extractor *= production("psychic_boost", "Oil"); - oil_well *= production("psychic_boost", "Oil"); - let delta = oil_well * oil_prod_mod + oil_extractor * extract_prod_mod + whale_oil * womling_technician; - delta *= hunger * global_multiplier; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - if (global.space["oil_extractor"]) { - global.space.oil_extractor["lpmod"] = production("oil_extractor") * qs_multiplier * synd * zigVal; - } - breakdown.p["Oil"][global.race["warlord"] ? loc("portal_pumpjack_title") : loc("city_oil_well")] = oil_well + "v"; - if (oil_well > 0) { - breakdown.p["Oil"][`\u1102${loc("quarantine")}+0`] = (q_multiplier - 1) * 100 + "%"; - } - breakdown.p["Oil"][loc("space_gas_moon_oil_extractor_title")] = oil_extractor + "v"; - if (oil_extractor > 0) { - breakdown.p["Oil"][`\u1102${loc("space_syndicate")}`] = -((1 - synd) * 100) + "%"; - breakdown.p["Oil"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Oil"][`\u1102${loc("quarantine")}+1`] = (qs_multiplier - 1) * 100 + "%"; - } - breakdown.p["Oil"][loc("tau_roid_whaling_ship")] = whale_oil + "v"; - if (womling_technician > 1) { - breakdown.p["Oil"][`\u1102${loc("tau_red_womlings")}+0`] = (womling_technician - 1) * 100 + "%"; - } - if (global.race["gravity_well"]) { - breakdown.p["Oil"][`${loc("evo_challenge_gravity_well")}+0`] = -((1 - teamster(1)) * 100) + "%"; - } - breakdown.p["Oil"][loc("hunger")] = (hunger - 1) * 100 + "%"; - modRes("Oil", delta * time_multiplier); - } - let iridium_smelter_mult = 1 + iridium_smelter; - if (support_on["iridium_mine"] || global.race["warlord"]) { - let iridium_base = 0; - if (global.race["warlord"]) { - iridium_base = workerScale(global.civic.miner.workers, "miner"); - iridium_base *= racialTrait(iridium_base, "miner"); - iridium_base *= 0.45; - } else { - iridium_base = support_on["iridium_mine"] * production("iridium_mine", "iridium").f; - } - let tunneler = 1; - if (global.race["warlord"] && global.portal["tunneler"]) { - tunneler = 1 + (global.portal.tunneler.rank + 3) / 100 * global.portal.tunneler.count; - } - iridium_base *= production("psychic_boost", "Iridium"); - let synd = syndicate("spc_moon"); - let delta = iridium_base * tunneler * hunger * shrineMetal.mult * global_multiplier * synd * qs_multiplier * iridium_smelter_mult * zigVal; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - breakdown.p["Iridium"][global.race["warlord"] ? jobName("miner") : loc("space_moon_iridium_mine_title")] = iridium_base + "v"; - if (iridium_base > 0) { - breakdown.p["Iridium"][`\u1102${loc("city_smelter")}+0`] = iridium_smelter * 100 + "%"; - breakdown.p["Iridium"][`\u1102${loc("portal_tunneler_bd")}+0`] = (tunneler - 1) * 100 + "%"; - breakdown.p["Iridium"][`\u1102${loc("space_syndicate")}+0`] = -((1 - synd) * 100) + "%"; - breakdown.p["Iridium"][`\u1102${loc("space_red_ziggurat_title")}+0`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Iridium"][`\u1102${loc("quarantine")}+0`] = (qs_multiplier - 1) * 100 + "%"; - if (global.race["gravity_well"]) { - breakdown.p["Iridium"][`\u1102${loc("evo_challenge_gravity_well")}+0`] = -((1 - teamster(1)) * 100) + "%"; - } - } - modRes("Iridium", delta * time_multiplier); - } - if (support_on["iridium_ship"]) { - let iridium_base = support_on["iridium_ship"] * production("iridium_ship"); - iridium_base *= production("psychic_boost", "Iridium"); - let synd = syndicate("spc_belt"); - let delta = iridium_base * hunger * shrineMetal.mult * global_multiplier * synd * qs_multiplier * iridium_smelter_mult * zigVal; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - breakdown.p["Iridium"][jobName("space_miner")] = iridium_base + "v"; - if (iridium_base > 0) { - breakdown.p["Iridium"][`\u1102${loc("city_smelter")}+1`] = iridium_smelter * 100 + "%"; - breakdown.p["Iridium"][`\u1102${loc("space_syndicate")}+1`] = -((1 - synd) * 100) + "%"; - breakdown.p["Iridium"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Iridium"][`\u1102${loc("quarantine")}+1`] = (qs_multiplier - 1) * 100 + "%"; - if (global.race["gravity_well"]) { - breakdown.p["Iridium"][`\u1102${loc("evo_challenge_gravity_well")}+1`] = -((1 - teamster(1)) * 100) + "%"; - } - } - modRes("Iridium", delta * time_multiplier); - } - if (p_on["s_gate"] && global.resource.Adamantite.display && global.galaxy["armed_miner"] && gal_on["armed_miner"] > 0) { - let base = gal_on["armed_miner"] * 0.65 * production("psychic_boost", "Iridium"); - let foothold = 1 + (gal_on["ore_processor"] ?? 0) * 0.1; - let pirate = piracy("gxy_alien2"); - let delta = base * global_multiplier * pirate * foothold * hunger * shrineMetal.mult * iridium_smelter_mult * zigVal; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - breakdown.p["Iridium"][loc("galaxy_armed_miner_bd")] = base + "v"; - if (base > 0) { - breakdown.p["Iridium"][`\u1102${loc("galaxy_ore_processor")}`] = -((1 - foothold) * 100) + "%"; - breakdown.p["Iridium"][`\u1102${loc("city_smelter")}+2`] = iridium_smelter * 100 + "%"; - breakdown.p["Iridium"][`\u1102${loc("galaxy_piracy")}`] = -((1 - pirate) * 100) + "%"; - breakdown.p["Iridium"][`\u1102${loc("space_red_ziggurat_title")}+2`] = (zigVal - 1) * 100 + "%"; - if (global.race["gravity_well"]) { - breakdown.p["Iridium"][`\u1102${loc("evo_challenge_gravity_well")}+2`] = -((1 - teamster(1)) * 100) + "%"; - } - } - modRes("Iridium", delta * time_multiplier); - } - if (global.resource.Iridium.display && e_ship["iridium"] && e_ship.iridium > 0) { - let iridium_delta = e_ship.iridium * shrineMetal.mult * global_multiplier * iridium_smelter_mult * hunger * womling_technician; - if (global.race["gravity_well"]) { - iridium_delta = teamster(iridium_delta); - } - breakdown.p["Iridium"][loc("tau_roid_mining_ship")] = e_ship.iridium + "v"; - breakdown.p["Iridium"][`\u1102${loc("city_smelter")}+3`] = iridium_smelter * 100 + "%"; - if (womling_technician > 1) { - breakdown.p["Iridium"][`\u1102${loc("tau_red_womlings")}+0`] = (womling_technician - 1) * 100 + "%"; - } - if (global.race["gravity_well"]) { - breakdown.p["Iridium"][`\u1102${loc("evo_challenge_gravity_well")}+3`] = -((1 - teamster(1)) * 100) + "%"; - } - modRes("Iridium", iridium_delta * time_multiplier); - } - if (global.space["moon_base"] && support_on["helium_mine"] || global.race["warlord"]) { - let helium_base = (global.race["warlord"] ? global.portal.pumpjack.count : support_on["helium_mine"]) * production("helium_mine").f; - helium_base *= production("psychic_boost", "Helium_3"); - let synd = syndicate("spc_moon"); - let delta = helium_base * hunger * global_multiplier * synd * qs_multiplier * zigVal; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - breakdown.p["Helium_3"][global.race["warlord"] ? loc("portal_pumpjack_title") : loc("space_moon_helium_mine_title")] = helium_base + "v"; - if (helium_base > 0) { - breakdown.p["Helium_3"][`\u1102${loc("space_syndicate")}+0`] = -((1 - synd) * 100) + "%"; - breakdown.p["Helium_3"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Helium_3"][`\u1102${loc("quarantine")}+0`] = (qs_multiplier - 1) * 100 + "%"; - if (global.race["gravity_well"]) { - breakdown.p["Helium_3"][`\u1102${loc("evo_challenge_gravity_well")}+0`] = -((1 - teamster(1)) * 100) + "%"; - } - } - modRes("Helium_3", delta * time_multiplier); - } - if (global.space["gas_mining"] && p_on["gas_mining"]) { - let gas_mining = p_on["gas_mining"] * production("gas_mining"); - gas_mining *= production("psychic_boost", "Helium_3"); - let synd = syndicate("spc_gas"); - let delta = gas_mining * hunger * global_multiplier * synd * qs_multiplier * zigVal; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - breakdown.p["Helium_3"][loc("space_gas_mining_title")] = gas_mining + "v"; - if (gas_mining > 0) { - breakdown.p["Helium_3"][`\u1102${loc("space_syndicate")}+1`] = -((1 - synd) * 100) + "%"; - breakdown.p["Helium_3"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Helium_3"][`\u1102${loc("quarantine")}+1`] = (qs_multiplier - 1) * 100 + "%"; - if (global.race["gravity_well"]) { - breakdown.p["Helium_3"][`\u1102${loc("evo_challenge_gravity_well")}+1`] = -((1 - teamster(1)) * 100) + "%"; - } - } - modRes("Helium_3", delta * time_multiplier); - } - if (p_on["refueling_station"]) { - let gas_mining = p_on["refueling_station"] * production("refueling_station"); - gas_mining *= production("psychic_boost", "Helium_3"); - let delta = gas_mining * hunger * global_multiplier * womling_technician; - breakdown.p["Helium_3"][loc("tau_gas_refueling_station_title")] = gas_mining + "v"; - if (womling_technician > 1) { - breakdown.p["Helium_3"][`\u1102${loc("tau_red_womlings")}+0`] = (womling_technician - 1) * 100 + "%"; - } - modRes("Helium_3", delta * time_multiplier); - } - if (global.interstellar["harvester"] && int_on["harvester"]) { - let gas_mining = int_on["harvester"] * production("harvester", "helium"); - gas_mining *= production("psychic_boost", "Helium_3"); - let delta = gas_mining * hunger * global_multiplier * zigVal; - breakdown.p["Helium_3"][loc("interstellar_harvester_title")] = gas_mining + "v"; - if (gas_mining > 0) { - breakdown.p["Helium_3"][`\u1102${loc("space_red_ziggurat_title")}+2`] = (zigVal - 1) * 100 + "%"; - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - breakdown.p["Helium_3"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - } - modRes("Helium_3", delta * time_multiplier); - if (global.tech["ram_scoop"]) { - let deut_mining = int_on["harvester"] * production("harvester", "deuterium"); - deut_mining *= production("psychic_boost", "Deuterium"); - let deut_delta = deut_mining * hunger * global_multiplier * zigVal; - breakdown.p["Deuterium"][loc("interstellar_harvester_title")] = deut_mining + "v"; - if (deut_mining > 0) { - breakdown.p["Deuterium"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - } - modRes("Deuterium", deut_delta * time_multiplier); - } - } - if (p_on["s_gate"] && global.galaxy["raider"] && gal_on["raider"] > 0) { - let base = gal_on["raider"] * 0.65 * production("psychic_boost", "Deuterium"); - let pirate = piracy("gxy_chthonian"); - let delta = base * global_multiplier * pirate * hunger * zigVal; - breakdown.p["Deuterium"][loc("galaxy_raider")] = base + "v"; - if (base > 0) { - breakdown.p["Deuterium"][`\u1102${loc("galaxy_piracy")}`] = -((1 - pirate) * 100) + "%"; - breakdown.p["Deuterium"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - } - modRes("Deuterium", delta * time_multiplier); - } - breakdown.p["Helium_3"][loc("hunger")] = (hunger - 1) * 100 + "%"; - breakdown.p["Deuterium"][loc("hunger")] = (hunger - 1) * 100 + "%"; - if (p_on["outpost"]) { - let p_values = production("outpost"); - let psy = production("psychic_boost", "Neutronium"); - breakdown.p["Neutronium"][loc("space_gas_moon_outpost_bd")] = p_values.b * psy * p_on["outpost"] + "v"; - if (global.tech["drone"]) { - breakdown.p["Neutronium"][`\u1102${loc("tech_worker_drone")}`] = p_values.d * 100 + "%"; - } - let synd = syndicate("spc_gas_moon"); - let delta = p_on["outpost"] * p_values.n * psy * hunger * global_multiplier * qs_multiplier * synd * zigVal; - global.space.outpost["lpmod"] = p_values.n * psy * hunger * global_multiplier * qs_multiplier * synd * zigVal; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - if (p_values.b > 0) { - breakdown.p["Neutronium"][`\u1102${loc("space_syndicate")}+0`] = -((1 - synd) * 100) + "%"; - breakdown.p["Neutronium"][`\u1102${loc("space_red_ziggurat_title")}+0`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Neutronium"][`\u1102${loc("quarantine")}+0`] = (qs_multiplier - 1) * 100 + "%"; - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - global.space.outpost["lpmod"] *= 0.5; - breakdown.p["Neutronium"][`\u1102${loc("evo_challenge_discharge")}+0`] = "-50%"; - } - if (global.race["gravity_well"]) { - breakdown.p["Neutronium"][`\u1102${loc("evo_challenge_gravity_well")}+0`] = -((1 - teamster(1)) * 100) + "%"; - } - } - modRes("Neutronium", delta * time_multiplier); - } - if (p_on["neutron_miner"]) { - let n_base = p_on["neutron_miner"] * production("neutron_miner") * production("psychic_boost", "Neutronium"); - let delta = n_base * hunger * global_multiplier * zigVal; - breakdown.p["Neutronium"][loc("interstellar_neutron_miner_bd")] = n_base + "v"; - global.interstellar.neutron_miner["lpmod"] = production("neutron_miner") * hunger * global_multiplier * zigVal; - if (n_base > 0) { - breakdown.p["Neutronium"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - global.interstellar.neutron_miner["lpmod"] *= 0.5; - breakdown.p["Neutronium"][`\u1102${loc("evo_challenge_discharge")}+1`] = "-50%"; - } - } - modRes("Neutronium", delta * time_multiplier); - } - if (p_on["s_gate"] && global.galaxy["raider"] && gal_on["raider"] > 0) { - let base = gal_on["raider"] * 0.8 * production("psychic_boost", "Neutronium"); - let pirate = piracy("gxy_chthonian"); - let delta = base * global_multiplier * pirate * hunger * zigVal; - breakdown.p["Neutronium"][loc("galaxy_raider")] = base + "v"; - if (base > 0) { - breakdown.p["Neutronium"][`\u1102${loc("galaxy_piracy")}`] = -((1 - pirate) * 100) + "%"; - breakdown.p["Neutronium"][`\u1102${loc("space_red_ziggurat_title")}+2`] = (zigVal - 1) * 100 + "%"; - } - modRes("Neutronium", delta * time_multiplier); - } - if (global.space["neutronium_mine"] && p_on["neutronium_mine"]) { - let synd = syndicate("spc_kuiper"); - let mine_base = p_on["neutronium_mine"] * production("neutronium_mine") * production("psychic_boost", "Neutronium"); - let mine_delta = mine_base * global_multiplier * qs_multiplier * synd * zigVal; - breakdown.p["Neutronium"][loc("space_kuiper_mine", [global.resource.Neutronium.name])] = mine_base + "v"; - if (mine_base > 0) { - breakdown.p["Neutronium"][`\u1102${loc("space_syndicate")}+1`] = -((1 - synd) * 100) + "%"; - breakdown.p["Neutronium"][`\u1102${loc("space_red_ziggurat_title")}+3`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Neutronium"][`\u1102${loc("quarantine")}+1`] = (qs_multiplier - 1) * 100 + "%"; - } - modRes("Neutronium", mine_delta * time_multiplier); - } - if (global.resource.Neutronium.display && e_ship["neutronium"] && e_ship.neutronium > 0) { - let neutronium_delta = e_ship.neutronium * global_multiplier * womling_technician; - breakdown.p["Neutronium"][loc("tau_roid_mining_ship")] = e_ship.neutronium + "v"; - if (womling_technician > 1) { - breakdown.p["Neutronium"][`\u1102${loc("tau_red_womlings")}+0`] = (womling_technician - 1) * 100 + "%"; - } - modRes("Neutronium", neutronium_delta * time_multiplier); - } - if (support_on["elerium_ship"]) { - let elerium_base = support_on["elerium_ship"] * production("elerium_ship") * production("psychic_boost", "Elerium"); - let synd = syndicate("spc_belt"); - let delta = elerium_base * hunger * global_multiplier * qs_multiplier * synd * zigVal; - if (global.race["gravity_well"]) { - delta = teamster(delta); - } - breakdown.p["Elerium"][jobName("space_miner")] = elerium_base + "v"; - if (elerium_base > 0) { - breakdown.p["Elerium"][`\u1102${loc("space_syndicate")}+0`] = -((1 - synd) * 100) + "%"; - breakdown.p["Elerium"][`\u1102${loc("space_red_ziggurat_title")}+0`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Elerium"][`\u1102${loc("quarantine")}+0`] = (qs_multiplier - 1) * 100 + "%"; - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.75; - breakdown.p["Elerium"][`\u1102${loc("evo_challenge_discharge")}`] = "-25%"; - } - if (global.race["gravity_well"]) { - breakdown.p["Elerium"][`\u1102${loc("evo_challenge_gravity_well")}+1`] = -((1 - teamster(1)) * 100) + "%"; - } - } - modRes("Elerium", delta * time_multiplier); - } - if (int_on["elerium_prospector"]) { - let elerium_base = int_on["elerium_prospector"] * production("elerium_prospector") * production("psychic_boost", "Elerium"); - let delta = elerium_base * hunger * global_multiplier * zigVal; - breakdown.p["Elerium"][loc("interstellar_elerium_prospector_bd")] = elerium_base + "v"; - if (elerium_base > 0) { - breakdown.p["Elerium"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - } - modRes("Elerium", delta * time_multiplier); - } - if (global.space["elerium_mine"] && p_on["elerium_mine"]) { - let synd = syndicate("spc_kuiper"); - let mine_base = p_on["elerium_mine"] * production("elerium_mine") * production("psychic_boost", "Elerium"); - let mine_delta = mine_base * global_multiplier * qs_multiplier * synd * hunger * zigVal; - breakdown.p["Elerium"][loc("space_kuiper_mine", [global.resource.Elerium.name])] = mine_base + "v"; - if (mine_base > 0) { - breakdown.p["Elerium"][`\u1102${loc("space_syndicate")}+1`] = -((1 - synd) * 100) + "%"; - breakdown.p["Elerium"][`\u1102${loc("space_red_ziggurat_title")}+2`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Elerium"][`\u1102${loc("quarantine")}+1`] = (qs_multiplier - 1) * 100 + "%"; - } - modRes("Elerium", mine_delta * time_multiplier); - } - if (global.resource.Elerium.display && e_ship["elerium"] && e_ship.elerium > 0) { - let elerium_delta = e_ship.elerium * global_multiplier * womling_technician; - breakdown.p["Elerium"][loc("tau_roid_mining_ship")] = e_ship.elerium + "v"; - if (womling_technician > 1) { - breakdown.p["Elerium"][`\u1102${loc("tau_red_womlings")}+0`] = (womling_technician - 1) * 100 + "%"; - } - modRes("Elerium", elerium_delta * time_multiplier); - } - breakdown.p["Elerium"][loc("hunger")] = (hunger - 1) * 100 + "%"; - if (global.resource.Adamantite.display && global.interstellar["mining_droid"] && miner_droids["adam"] > 0) { - let driod_base = miner_droids["adam"] * 0.075 * production("psychic_boost", "Adamantite"); - let driod_delta = driod_base * shrineMetal.mult * global_multiplier * zigVal; - breakdown.p["Adamantite"][loc("interstellar_mining_droid_title")] = driod_base + "v"; - if (driod_base > 0) { - if (global.interstellar["processing"] && int_on["processing"]) { - let rate = 0.12; - if (global.tech["ai_core"] && global.tech["ai_core"] >= 2 && p_on["citadel"] > 0) { - rate += p_on["citadel"] * 0.02; - } - let bonus = int_on["processing"] * rate; - breakdown.p["Adamantite"][`\u1102${loc("interstellar_processing_title")}`] = bonus * 100 + "%"; - if (global.race["discharge"] && global.race["discharge"] > 0) { - bonus *= 0.5; - breakdown.p["Adamantite"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - driod_delta *= 1 + bonus; - } - breakdown.p["Adamantite"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - } - modRes("Adamantite", driod_delta * time_multiplier); - } - if (p_on["s_gate"] && global.resource.Adamantite.display && global.galaxy["armed_miner"] && gal_on["armed_miner"] > 0) { - let base = gal_on["armed_miner"] * 0.23 * production("psychic_boost", "Adamantite"); - let foothold = 1 + (gal_on["ore_processor"] ?? 0) * 0.1; - let pirate = piracy("gxy_alien2"); - let delta = base * global_multiplier * pirate * foothold * shrineMetal.mult * zigVal; - breakdown.p["Adamantite"][loc("galaxy_armed_miner_bd")] = base + "v"; - if (base > 0) { - breakdown.p["Adamantite"][`\u1102${loc("galaxy_ore_processor")}`] = -((1 - foothold) * 100) + "%"; - breakdown.p["Adamantite"][`\u1102${loc("galaxy_piracy")}`] = -((1 - pirate) * 100) + "%"; - breakdown.p["Adamantite"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - } - modRes("Adamantite", delta * time_multiplier); - } - if (global.resource.Adamantite.display && global.space["titan_mine"]) { - let synd = syndicate("spc_titan"); - let titan_colonists = p_on["ai_colonist"] ? workerScale(global.civic.titan_colonist.workers, "titan_colonist") + jobScale(p_on["ai_colonist"]) : workerScale(global.civic.titan_colonist.workers, "titan_colonist"); - let adam_base = production("titan_mine", "adamantite") * support_on["titan_mine"] * titan_colonists * production("psychic_boost", "Adamantite"); - let adam_delta = adam_base * shrineMetal.mult * global_multiplier * qs_multiplier * synd * zigVal; - breakdown.p["Adamantite"][loc("city_mine")] = adam_base + "v"; - if (adam_base > 0) { - breakdown.p["Adamantite"][`\u1102${loc("space_syndicate")}`] = -((1 - synd) * 100) + "%"; - breakdown.p["Adamantite"][`\u1102${loc("space_red_ziggurat_title")}+2`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Adamantite"][`\u1102${loc("quarantine")}+0`] = (qs_multiplier - 1) * 100 + "%"; - } - modRes("Adamantite", adam_delta * time_multiplier); - } - if (global.resource.Infernite.display) { - let workers = global.race["warlord"] ? global.tech?.hellspawn >= 2 && global.portal?.tunneler?.count >= 1 ? global.civic.miner.workers : 0 : global.civic.hell_surveyor.workers; - if (workers > 0) { - let rate = global.tech.infernite >= 3 ? 0.015 : 0.01; - if (global.race["warlord"]) { - rate = 75e-4; - } - let surveyor_base = workerScale(highPopAdjust(workers), "hell_surveyor") * rate * production("psychic_boost", "Infernite"); - let sensors = 1; - if (global.tech["infernite"] >= 2 && p_on["sensor_drone"]) { - let drone_rate = global.tech.infernite >= 4 ? global.tech.infernite >= 6 ? 0.5 : 0.2 : 0.1; - sensors = 1 + p_on["sensor_drone"] * drone_rate; - } - let runner = govActive("runner", 1); - let runBonus = 1; - if (runner) { - runBonus = 1 + runner / 100; - } - let tunneler = 1; - if (global.race["warlord"] && global.portal["tunneler"]) { - tunneler = 1 + (global.portal.tunneler.rank + 3) / 100 * global.portal.tunneler.count; - } - let surveyor_delta = surveyor_base * tunneler * sensors * runBonus * global_multiplier; - breakdown.p["Infernite"][global.race["warlord"] ? jobName("miner") : jobName("hell_surveyor")] = surveyor_base + "v"; - breakdown.p["Infernite"][`\u1102${loc("portal_sensor_drone_title")}`] = (sensors - 1) * 100 + "%"; - breakdown.p["Infernite"][`\u1102${loc("portal_tunneler_bd")}`] = (tunneler - 1) * 100 + "%"; - modRes("Infernite", surveyor_delta * time_multiplier); - } - if (p_on["infernite_mine"]) { - let rate = production("infernite_mine"); - let mine_base = p_on["infernite_mine"] * rate * production("psychic_boost", "Infernite"); - let mine_delta = mine_base * global_multiplier; - global.portal.infernite_mine["lpmod"] = rate * global_multiplier; - breakdown.p["Infernite"][loc("city_mine")] = mine_base + "v"; - modRes("Infernite", mine_delta * time_multiplier); - } - } - if (p_on["s_gate"] && global.resource.Bolognium.display && global.galaxy["bolognium_ship"] && gal_on["bolognium_ship"] > 0) { - let base = gal_on["bolognium_ship"] * production("bolognium_ship") * production("psychic_boost", "Bolognium"); - let pirate = piracy("gxy_gateway"); - let delta = base * global_multiplier * pirate * zigVal; - breakdown.p["Bolognium"][loc("galaxy_bolognium_ship")] = base + "v"; - if (base > 0) { - breakdown.p["Bolognium"][`\u1102${loc("galaxy_piracy")}+0`] = -((1 - pirate) * 100) + "%"; - breakdown.p["Bolognium"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - breakdown.p["Bolognium"][`\u1102${loc("evo_challenge_discharge")}+0`] = "-50%"; - } - } - modRes("Bolognium", delta * time_multiplier); - } - if (global.eden["asphodel_harvester"] && support_on["asphodel_harvester"]) { - let powder_base = support_on["asphodel_harvester"] * production("asphodel_harvester", "powder"); - powder_base *= production("psychic_boost", "Asphodel_Powder"); - let delta = powder_base * hunger * global_multiplier; - breakdown.p["Asphodel_Powder"][loc("eden_asphodel_harvester_title")] = powder_base + "v"; - if (global.tech.asphodel >= 5) { - let penalty = asphodelResist(); - delta *= penalty; - if (penalty <= 1) { - breakdown.p["Asphodel_Powder"][`\u1102${loc("eden_asphodel_hostility")}+0`] = -((1 - penalty) * 100) + "%"; - } else { - breakdown.p["Asphodel_Powder"][`\u1102${loc("eden_mech_station_overkill")}+0`] = (penalty - 1) * 100 + "%"; - } - } - modRes("Asphodel_Powder", delta * time_multiplier); - } - if (global.resource.Elysanite.display) { - if (global.civic.elysium_miner.display) { - let miner_base = workerScale(global.civic.elysium_miner.workers, "elysium_miner"); - miner_base *= racialTrait(miner_base, "miner") * 0.36; - if (!global.race["living_tool"] && !global.race["tusk"]) { - miner_base *= (global.tech["pickaxe"] && global.tech.pickaxe > 0 ? global.tech.pickaxe * 0.15 : 0) + 1; - } - if (global.tech["explosives"] && global.tech.explosives >= 2) { - miner_base *= 0.95 + global.tech.explosives * 0.15; - } - if (global.race["tough"]) { - miner_base *= 1 + traits.tough.vars()[0] / 100; - } - let ogreFathom = fathomCheck("ogre"); - if (ogreFathom > 0) { - miner_base *= 1 + traits.tough.vars(1)[0] / 100 * ogreFathom; - } - miner_base *= production("psychic_boost", "Elysanite"); - breakdown.p["Elysanite"][jobName("elysium_miner")] = miner_base + "v"; - let delta = miner_base; - delta *= hunger * global_multiplier; - modRes("Elysanite", delta * time_multiplier); - } - } - if (global.civic.pit_miner.display) { - if (tauEnabled()) { - let miner_base = workerScale(global.civic.pit_miner.workers, "pit_miner"); - miner_base *= racialTrait(miner_base, "miner"); - let colony_val = 1 + (support_on["colony"] || 0) * 0.5; - { - let bol_base = miner_base * production("psychic_boost", "Bolognium"); - bol_base *= production("mining_pit", "bolognium"); - let delta = bol_base * global_multiplier * colony_val; - breakdown.p["Bolognium"][jobName("pit_miner")] = bol_base + "v"; - if (bol_base > 0) { - breakdown.p["Bolognium"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - modRes("Bolognium", delta * time_multiplier); - } - { - let stone_base = miner_base * production("psychic_boost", "Stone"); - stone_base *= production("mining_pit", "stone"); - let delta = stone_base * global_multiplier * colony_val; - breakdown.p["Stone"][jobName("pit_miner")] = stone_base + "v"; - if (stone_base > 0) { - breakdown.p["Stone"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - modRes("Stone", delta * time_multiplier); - } - if (global.race["smoldering"]) { - let cry_base = miner_base * production("psychic_boost", "Chrysotile"); - cry_base *= production("mining_pit", "chrysotile"); - let delta = cry_base * global_multiplier * colony_val * hunger; - breakdown.p["Chrysotile"][jobName("pit_miner")] = cry_base + "v"; - if (cry_base > 0) { - breakdown.p["Chrysotile"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - breakdown.p["Chrysotile"][loc("hunger")] = (hunger - 1) * 100 + "%"; - } - modRes("Chrysotile", delta * time_multiplier); - } - { - let adam_base = miner_base * production("psychic_boost", "Adamantite"); - adam_base *= production("mining_pit", "adamantite"); - let delta = adam_base * shrineMetal.mult * global_multiplier * colony_val; - breakdown.p["Adamantite"][jobName("pit_miner")] = adam_base + "v"; - if (adam_base > 0) { - breakdown.p["Adamantite"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - modRes("Adamantite", delta * time_multiplier); - } - if (global.tech["isolation"]) { - { - let copper_base = miner_base * production("psychic_boost", "Copper"); - copper_base *= production("mining_pit", "copper"); - let delta = copper_base * shrineMetal.mult * global_multiplier * colony_val; - breakdown.p["Copper"][jobName("pit_miner")] = copper_base + "v"; - if (copper_base > 0) { - breakdown.p["Copper"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - modRes("Copper", delta * time_multiplier); - } - { - let coal_base = miner_base * production("psychic_boost", "Coal"); - coal_base *= production("mining_pit", "coal"); - let delta = coal_base * global_multiplier * colony_val; - breakdown.p["Coal"][jobName("pit_miner")] = coal_base + "v"; - if (coal_base > 0) { - breakdown.p["Coal"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - modRes("Coal", delta * time_multiplier); - } - if (global.race["lone_survivor"]) { - let alum_base = miner_base * production("psychic_boost", "Aluminium"); - alum_base *= production("mining_pit", "aluminium"); - let delta = alum_base * shrineMetal.mult * global_multiplier * colony_val; - breakdown.p["Aluminium"][jobName("pit_miner")] = alum_base + "v"; - if (alum_base > 0) { - breakdown.p["Aluminium"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - modRes("Aluminium", delta * time_multiplier); - } - } - } else { - let materials_bd = {}; - let miner_base = workerScale(global.civic.pit_miner.workers, "pit_miner"); - miner_base *= racialTrait(miner_base, "miner"); - miner_base *= production("mining_pit", "materials"); - let colony_val = 1 + (support_on["colony"] || 0) * 0.5; - let delta = miner_base * global_multiplier * colony_val; - materials_bd[jobName("pit_miner")] = miner_base + "v"; - if (miner_base > 0) { - materials_bd[`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - breakdown.p["Materials"] = materials_bd; - modRes("Materials", delta * time_multiplier); - } - } - if (global.tauceti["tau_farm"] && p_on["tau_farm"]) { - let colony_val = 1 + (support_on["colony"] || 0) * 0.5; - if (!global.race["kindling_kindred"] && !global.race["smoldering"]) { - let lumber_base = production("tau_farm", "lumber") * p_on["tau_farm"] * production("psychic_boost", "Lumber"); - let delta = lumber_base * global_multiplier * colony_val; - breakdown.p["Lumber"][loc("tau_home_tau_farm")] = lumber_base + "v"; - if (lumber_base > 0) { - breakdown.p["Lumber"][`\u1102${loc("tau_home_colony")}`] = (colony_val - 1) * 100 + "%"; - } - modRes("Lumber", delta * time_multiplier); - } - } - if (shrineBonusActive()) { - breakdown.p["Adamantite"][loc("city_shrine")] = ((shrineMetal.mult - 1) * 100).toFixed(1) + "%"; - } - if (p_on["s_gate"] && global.resource.Bolognium.display && global.galaxy["armed_miner"] && gal_on["armed_miner"] > 0) { - let base = gal_on["armed_miner"] * 0.032 * production("psychic_boost", "Bolognium"); - let foothold = 1 + (gal_on["ore_processor"] ?? 0) * 0.1; - let pirate = piracy("gxy_alien2"); - let delta = base * global_multiplier * pirate * foothold * zigVal; - breakdown.p["Bolognium"][loc("galaxy_armed_miner_bd")] = base + "v"; - if (base > 0) { - breakdown.p["Bolognium"][`\u1102${loc("galaxy_ore_processor")}`] = -((1 - foothold) * 100) + "%"; - breakdown.p["Bolognium"][`\u1102${loc("galaxy_piracy")}+1`] = -((1 - pirate) * 100) + "%"; - breakdown.p["Bolognium"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - breakdown.p["Bolognium"][`\u1102${loc("evo_challenge_discharge")}+1`] = "-50%"; - } - } - modRes("Bolognium", delta * time_multiplier); - } - if (p_on["s_gate"] && global.resource.Orichalcum.display && global.galaxy["excavator"] && p_on["excavator"] > 0) { - let base = p_on["excavator"] * production("excavator") * production("psychic_boost", "Orichalcum"); - let pirate = piracy("gxy_chthonian"); - let delta = base * global_multiplier * pirate * zigVal; - global.galaxy.excavator["lpmod"] = production("excavator") * global_multiplier * pirate * zigVal; - breakdown.p["Orichalcum"][loc("galaxy_excavator")] = base + "v"; - if (base > 0) { - breakdown.p["Orichalcum"][`\u1102${loc("galaxy_piracy")}`] = -((1 - pirate) * 100) + "%"; - breakdown.p["Orichalcum"][`\u1102${loc("space_red_ziggurat_title")}`] = (zigVal - 1) * 100 + "%"; - if (global.race["discharge"] && global.race["discharge"] > 0) { - delta *= 0.5; - global.galaxy.excavator["lpmod"] *= 0.5; - breakdown.p["Orichalcum"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - } - modRes("Orichalcum", delta * time_multiplier); - } - if (global.space["orichalcum_mine"] && p_on["orichalcum_mine"]) { - let synd = syndicate("spc_kuiper"); - let mine_base = p_on["orichalcum_mine"] * production("orichalcum_mine") * production("psychic_boost", "Orichalcum"); - let mine_delta = mine_base * global_multiplier * qs_multiplier * synd * zigVal; - breakdown.p["Orichalcum"][loc("space_kuiper_mine", [global.resource.Orichalcum.name])] = mine_base + "v"; - if (mine_base > 0) { - breakdown.p["Orichalcum"][`\u1102${loc("space_syndicate")}`] = -((1 - synd) * 100) + "%"; - breakdown.p["Orichalcum"][`\u1102${loc("space_red_ziggurat_title")}+1`] = (zigVal - 1) * 100 + "%"; - breakdown.p["Orichalcum"][`\u1102${loc("quarantine")}+0`] = (qs_multiplier - 1) * 100 + "%"; - } - modRes("Orichalcum", mine_delta * time_multiplier); - } - if (global.resource.Orichalcum.display && e_ship["orichalcum"] && e_ship.orichalcum > 0) { - let orichalcum_delta = e_ship.orichalcum * global_multiplier * womling_technician; - breakdown.p["Orichalcum"][loc("tau_roid_mining_ship")] = e_ship.orichalcum + "v"; - if (womling_technician > 1) { - breakdown.p["Orichalcum"][`\u1102${loc("tau_red_womlings")}+0`] = (womling_technician - 1) * 100 + "%"; - } - modRes("Orichalcum", orichalcum_delta * time_multiplier); - } - if (global.race["truepath"] && global.tech["tau_red"] && global.tech.tau_red >= 5) { - if (global.tauceti["womling_mine"] && global.tauceti["overseer"]) { - let miner_base = global.tauceti.womling_mine.miners * production("womling_mine", "unobtainium") * production("psychic_boost", "Unobtainium"); - let prod = global.tauceti.overseer.prod / 100; - let miner_delta = miner_base * prod * global_multiplier; - breakdown.p["Unobtainium"][loc("tau_red_womlings")] = miner_base + "v"; - if (miner_base > 0) { - breakdown.p["Unobtainium"][`\u1102${loc("tau_red_womling_prod_label")}`] = -((1 - prod) * 100) + "%"; - } - modRes("Unobtainium", miner_delta * time_multiplier); - if (global.tech["isolation"]) { - let uranium_base = global.tauceti.womling_mine.miners * production("womling_mine", "uranium") * production("psychic_boost", "Uranium"); - breakdown.p["Uranium"][loc("tau_red_womlings")] = uranium_base + "v"; - let uranium_delta = uranium_base * prod * global_multiplier; - if (uranium_base > 0) { - breakdown.p["Uranium"][`\u1102${loc("tau_red_womling_prod_label")}`] = -((1 - prod) * 100) + "%"; - } - modRes("Uranium", uranium_delta * time_multiplier); - let titanium_base = global.tauceti.womling_mine.miners * production("womling_mine", "titanium") * production("psychic_boost", "Titanium"); - breakdown.p["Titanium"][loc("tau_red_womlings")] = titanium_base + "v"; - let titanium_delta = titanium_base * prod * shrineMetal.mult * global_multiplier; - if (titanium_base > 0) { - breakdown.p["Titanium"][`\u1102${loc("tau_red_womling_prod_label")}`] = -((1 - prod) * 100) + "%"; - } - modRes("Titanium", titanium_delta * time_multiplier); - if (global.race["lone_survivor"]) { - let copper_base = global.tauceti.womling_mine.miners * production("womling_mine", "copper") * production("psychic_boost", "Copper"); - breakdown.p["Copper"][loc("tau_red_womlings")] = copper_base + "v"; - let copper_delta = copper_base * prod * shrineMetal.mult * global_multiplier; - if (copper_delta > 0) { - breakdown.p["Copper"][`\u1102${loc("tau_red_womling_prod_label")}`] = -((1 - prod) * 100) + "%"; - } - modRes("Copper", copper_delta * time_multiplier); - let alumina_base = global.tauceti.womling_mine.miners * production("womling_mine", "aluminium") * production("psychic_boost", "Aluminium"); - breakdown.p["Aluminium"][loc("tau_red_womlings")] = alumina_base + "v"; - let alumina_delta = alumina_base * prod * shrineMetal.mult * global_multiplier; - if (alumina_base > 0) { - breakdown.p["Aluminium"][`\u1102${loc("tau_red_womling_prod_label")}`] = -((1 - prod) * 100) + "%"; - } - modRes("Aluminium", alumina_delta * time_multiplier); - let iridium_base = global.tauceti.womling_mine.miners * production("womling_mine", "iridium") * production("psychic_boost", "Iridium"); - breakdown.p["Iridium"][loc("tau_red_womlings")] = iridium_base + "v"; - let iridium_delta = iridium_base * prod * hunger * shrineMetal.mult * global_multiplier; - if (iridium_base > 0) { - breakdown.p["Iridium"][`\u1102${loc("tau_red_womling_prod_label")}`] = -((1 - prod) * 100) + "%"; - } - modRes("Iridium", iridium_delta * time_multiplier); - let neutronium_base = global.tauceti.womling_mine.miners * production("womling_mine", "neutronium") * production("psychic_boost", "Neutronium"); - breakdown.p["Neutronium"][loc("tau_red_womlings")] = neutronium_base + "v"; - let neutronium_delta = neutronium_base * prod * hunger * global_multiplier; - if (neutronium_base > 0) { - breakdown.p["Neutronium"][`\u1102${loc("tau_red_womling_prod_label")}`] = -((1 - prod) * 100) + "%"; - } - modRes("Neutronium", neutronium_delta * time_multiplier); - } - } - } - } - breakdown.p["Neutronium"][loc("hunger")] = (hunger - 1) * 100 + "%"; - if (shrineBonusActive()) { - breakdown.p["Iridium"][loc("city_shrine")] = ((shrineMetal.mult - 1) * 100).toFixed(1) + "%"; - } - breakdown.p["Iridium"][loc("hunger")] = (hunger - 1) * 100 + "%"; - let rawCash = FactoryMoney ? FactoryMoney * global_multiplier * hunger : 0; - if (FactoryMoney && global.race["discharge"] && global.race["discharge"] > 0) { - rawCash *= 0.5; - } - if (global.tech["currency"] >= 1) { - let citizens = global.resource[global.race.species].amount + global.civic.garrison.workers - global.civic.unemployed.workers; - let income_base = citizens; - if (global.race["high_pop"]) { - income_base = highPopAdjust(income_base); - } - income_base *= global.race["truepath"] ? 0.2 : 0.4; - if (global.race["greedy"]) { - income_base *= 1 - traits.greedy.vars()[0] / 100; - } - if (global.tech["isolation"]) { - income_base *= 15; - } - income_base *= production("psychic_cash"); - if (fed && global.tech["banking"] && global.tech["banking"] >= 2) { - let impact = +workerScale(global.civic.banker.impact, "banker"); - if (global.tech["banking"] >= 10) { - impact += 0.02 * global.tech["stock_exchange"]; - } - if (global.race["truthful"]) { - impact *= 1 - traits.truthful.vars()[0] / 100; - } - if (global.civic.govern.type === "republic") { - impact *= 1 + govEffect.republic()[0] / 100; - } - if (global.race["high_pop"]) { - impact = highPopAdjust(impact); - } - income_base *= 1 + global.civic.banker.workers * impact; - } - let extra_income = 0; - if (govActive("extravagant", 0) && global.city["apartment"]) { - let mult = income_base / citizens; - let pop = p_on["apartment"] * actions.city.apartment.citizens(); - pop = Math.min(citizens, pop); - extra_income = pop * mult * (govCivics("tax_cap") / 20); - income_base -= pop * mult; - } - income_base *= global.civic.taxes.tax_rate / 20; - income_base += extra_income; - if (global.civic.govern.type === "oligarchy") { - income_base *= 1 - govEffect.oligarchy()[0] / 100; - } - if (global.civic.govern.type === "corpocracy") { - income_base *= 0.5; - } - if (global.civic.govern.type === "socialist") { - income_base *= 1 - govEffect.socialist()[3] / 100; - } - if (global.race["banana"]) { - income_base *= 0.05; - } - let temple_mult = 1; - if (global.tech["anthropology"] && global.tech["anthropology"] >= 4 && !global.race["truepath"]) { - temple_mult += faithTempleCount() * 0.025; - } - let upkeep = 0; - if (!global.tech["world_control"] && global.civic.govern.type !== "federation") { - for (let i2 = 0; i2 < 3; i2++) { - if (global.civic.foreign[`gov${i2}`].buy) { - upkeep += income_base * 0.2; - } - } - } - let getShrineResult = getShrineBonus("tax"); - let delta = (income_base - upkeep) * temple_mult * hunger * getShrineResult.mult; - delta *= global_multiplier; - breakdown.p["Money"][loc("morale_tax")] = income_base + "v"; - if (income_base > 0) { - breakdown.p["Money"][`\u1102${loc("civics_spy_purchase_bd")}`] = -upkeep + "v"; - breakdown.p["Money"][global.race["cataclysm"] || global.race["orbit_decayed"] ? `\u1102${loc("space_red_ziggurat_title")}` : `\u1102${structName("temple")}`] = (temple_mult - 1) * 100 + "%"; - breakdown.p["Money"][`\u1102${loc("city_shrine")}`] = (getShrineResult.mult - 1) * 100 + "%"; - } - breakdown.p["Money"][loc("city_factory")] = FactoryMoney + "v"; - if (global.race["discharge"] && global.race["discharge"] > 0 && FactoryMoney > 0) { - breakdown.p["Money"][`\u1102${loc("evo_challenge_discharge")}`] = "-50%"; - } - modRes("Money", +(delta * time_multiplier).toFixed(2)); - rawCash += delta; - } - if (global.tech["gambling"] && (p_on["casino"] || p_on["spc_casino"] || p_on["tauceti_casino"] || p_on["hell_casino"])) { - let casinos = 0; - if (p_on["casino"]) { - casinos += p_on["casino"]; - } - if (p_on["spc_casino"]) { - casinos += p_on["spc_casino"]; - } - if (p_on["tauceti_casino"]) { - casinos += p_on["tauceti_casino"]; - } - if (p_on["hell_casino"]) { - casinos += p_on["hell_casino"]; - } - let cash = casinos * casinoEarn(); - breakdown.p["Money"][structName("casino")] = cash + "v"; - modRes("Money", +(cash * time_multiplier * global_multiplier * hunger).toFixed(2)); - rawCash += cash * global_multiplier * hunger; - } - if (global.city["tourist_center"] && global.city["tourist_center"].on && !global.race["fasting"] && !global.race["warlord"]) { - let tourism = 0; - let amp = global.tech["monument"] && global.tech.monument >= 3 && p_on["s_gate"] ? 3 : 1; - if (global.city["amphitheatre"]) { - tourism += global.city["tourist_center"].on * global.city.amphitheatre.count * amp; - } - if (global.city["casino"]) { - tourism += global.city["tourist_center"].on * global.city.casino.count * 5 * amp; - } - if (global.space["spc_casino"]) { - tourism += global.city["tourist_center"].on * global.space.spc_casino.count * 5 * amp; - } - if (global.tech["monuments"]) { - let monuments = global.tech.monuments; - if (global.race["wish"] && global.race["wishStats"]) { - if (global.city["wonder_lighthouse"]) { - monuments += 5; - } - if (global.city["wonder_pyramid"]) { - monuments += 5; - } - if (global.space["wonder_statue"]) { - monuments += 5; - } - if (global.interstellar["wonder_gardens"] || global.space["wonder_gardens"]) { - monuments += 5; - } - } - tourism += global.city["tourist_center"].on * monuments * 2 * amp; - } - if (global.city["trade"] && global.stats.achieve["banana"] && global.stats.achieve.banana.l >= 4) { - tourism += global.city["tourist_center"].on * global.city.trade.count * 3 * amp; - } - let piousVal = govActive("pious", 1); - if (piousVal && global.city["temple"]) { - tourism += global.city["tourist_center"].on * templeCount() * piousVal * amp; - } - if (global.civic.govern.type === "corpocracy") { - tourism *= 1 + govEffect.corpocracy()[2] / 100; - } - if (global.civic.govern.type === "socialist") { - tourism *= 1 - govEffect.socialist()[3] / 100; - } - if (astroSign2 === "aquarius") { - tourism *= 1 + astroVal2("aquarius")[0] / 100; - } - tourism *= production("psychic_cash"); - breakdown.p["Money"][loc("tech_tourism")] = Math.round(tourism) + "v"; - if (astroSign2 === "aquarius") { - breakdown.p["Money"][`\u1102${loc("sign_aquarius")}`] = astroVal2("aquarius")[0] + "%"; - } - modRes("Money", +(tourism * time_multiplier * global_multiplier * hunger).toFixed(2)); - rawCash += tourism * global_multiplier * hunger; - } - if (global.portal["bazaar"] && global.portal["spire"] && global.tech["monuments"]) { - let monuments = global.tech.monuments; - if (global.race["wish"] && global.race["wishStats"] && global.portal["wonder_gardens"]) { - monuments += 5; - } - let revenue = global.portal.bazaar.count * monuments * global.portal.spire.count; - revenue *= production("psychic_cash"); - breakdown.p["Money"][loc("portal_bazaar_title")] = Math.round(revenue) + "v"; - if (astroSign2 === "aquarius") { - revenue *= 1 + astroVal2("aquarius")[0] / 100; - breakdown.p["Money"][`\u1102${loc("sign_aquarius")}`] = astroVal2("aquarius")[0] + "%"; - } - modRes("Money", +(revenue * time_multiplier * global_multiplier * hunger).toFixed(2)); - rawCash += revenue * global_multiplier * hunger; - } - if (global.tauceti["tau_cultural_center"]) { - let revenue = 0; - if (global.tauceti["tauceti_casino"]) { - revenue += p_on["tau_cultural_center"] * p_on["tauceti_casino"] * 20; - } - if (global.tech["monuments"]) { - let monuments = global.tech.monuments; - if (global.race["wish"] && global.race["wishStats"]) { - if (global.city["wonder_lighthouse"]) { - monuments += 5; - } - if (global.city["wonder_pyramid"]) { - monuments += 5; - } - if (global.space["wonder_statue"]) { - monuments += 5; - } - if (global.interstellar["wonder_gardens"] || global.space["wonder_gardens"]) { - monuments += 5; - } - } - revenue += p_on["tau_cultural_center"] * monuments * 5; - } - if (global.tech["tau_culture"] && global.tech.tau_culture >= 2) { - revenue += p_on["tau_cultural_center"] * support_on["colony"] * 15; - } - if (global.civic.govern.type === "corpocracy") { - revenue *= 1 + govEffect.corpocracy()[2] / 100; - } else if (global.civic.govern.type === "socialist") { - revenue *= 1 - govEffect.socialist()[3] / 100; - } - revenue *= production("psychic_cash"); - breakdown.p["Money"][loc("tech_cultural_center")] = Math.round(revenue) + "v"; - if (astroSign2 === "aquarius") { - revenue *= 1 + astroVal2("aquarius")[0] / 100; - breakdown.p["Money"][`\u1102${loc("sign_aquarius")}`] = astroVal2("aquarius")[0] + "%"; - } - modRes("Money", +(revenue * time_multiplier * global_multiplier * hunger).toFixed(2)); - rawCash += revenue * global_multiplier * hunger; - } - if (global.tech["tau_junksale"]) { - let revenue = support_on["womling_village"] * 40; - let culture = p_on["tau_cultural_center"] ? 1 + p_on["tau_cultural_center"] * 0.08 : 1; - breakdown.p["Money"][loc("tau_red_womling_village")] = Math.round(revenue) + "v"; - breakdown.p["Money"][`\u1102${loc("tech_cultural_center")}+1`] = (culture - 1) * 100 + "%"; - modRes("Money", +(revenue * culture * time_multiplier * global_multiplier * hunger).toFixed(2)); - rawCash += revenue * culture * global_multiplier * hunger; - } - if (global.race["gravity_well"] && global.tech["teamster"] && global.tech.teamster >= 2) { - let teamsters = global.civic.teamster.workers; - let revenue = teamsters * rawCash * 0.01; - breakdown.p["Money"][jobName("teamster")] = Math.round(revenue / global_multiplier) + "v"; - modRes("Money", +(revenue * time_multiplier * hunger).toFixed(2)); - rawCash += revenue * hunger; - } - breakdown.p["Money"][loc("hunger")] = (hunger - 1) * 100 + "%"; - if (global.tech["anthropology"] && global.tech["anthropology"] >= 4 && global.race["truepath"]) { - let merchsales = global.resource[global.race.species].amount * templeCount() * 0.08; - breakdown.p["Money"][structName("temple")] = merchsales + "v"; - modRes("Money", +(merchsales * global_multiplier * time_multiplier).toFixed(2)); - rawCash += merchsales * global_multiplier; - } - if (global.race["truepath"] && global.tauceti["overseer"]) { - let rate = (global.tauceti.overseer.loyal + global.tauceti.overseer.morale) / 200; - let pop = global.tauceti.overseer.pop; - if (p_on["womling_station"]) { - pop += p_on["womling_station"] * 2; - } - let base = pop * rate * (global.tech["isolation"] ? 25 : 12); - let culture = p_on["tau_cultural_center"] ? 1 + p_on["tau_cultural_center"] * 0.08 : 1; - let delta = base * global_multiplier * culture; - breakdown.p["Money"][loc("tau_red_womlings")] = base + "v"; - breakdown.p["Money"][`\u1102${loc("tech_cultural_center")}`] = (culture - 1) * 100 + "%"; - modRes("Money", +(delta * time_multiplier).toFixed(2)); - rawCash += delta; - } - { - let racVal = govActive("racketeer", 0); - if (racVal) { - let theft = -Math.round(rawCash * (racVal / 100)); - breakdown.p.consume.Money[loc("gov_trait_racketeer_bd")] = theft; - modRes("Money", +(theft * time_multiplier).toFixed(2)); - } - } - { - let psVal = govActive("pious", 0); - if (psVal) { - let tithe = -Math.round(rawCash * (psVal / 100)); - breakdown.p.consume.Money[loc("gov_trait_pious_bd")] = tithe; - modRes("Money", +(tithe * time_multiplier).toFixed(2)); - } - } - if (global.tech["foundry"]) { - let craft_costs = global.race["resourceful"] ? 1 - traits.resourceful.vars()[0] / 100 : 1; - let arraakFathom = fathomCheck("arraak"); - if (arraakFathom > 0) { - craft_costs -= traits.resourceful.vars(1)[0] / 100 * arraakFathom; - } - let crafting_costs = craftCost(); - let crafting_usage = {}; - craftingRatio("", "", true); - Object.keys(crafting_costs).forEach(function(craft) { - if (craft === "Thermite" && !eventActive("summer")) { - return; - } - breakdown.p[craft] = {}; - let num = workerScale(global.city.foundry[craft], "craftsman"); - if (global.race["servants"] && global.race.servants.hasOwnProperty("sjobs") && global.race.servants.sjobs.hasOwnProperty(craft)) { - num += jobScale(global.race.servants.sjobs[craft]); - } - let craft_ratio = craftingRatio(craft, "auto").multiplier; - let speed = global.genes["crafty"] ? 2 : 1; - let volume = Math.floor(global.resource[crafting_costs[craft][0].r].amount / (crafting_costs[craft][0].a * speed * craft_costs / 140)); - for (let i2 = 1; i2 < crafting_costs[craft].length; i2++) { - let temp = Math.floor(global.resource[crafting_costs[craft][i2].r].amount / (crafting_costs[craft][i2].a * speed * craft_costs / 140)); - if (temp < volume) { - volume = temp; - } - } - if (num < volume) { - volume = num; - } - for (let i2 = 0; i2 < crafting_costs[craft].length; i2++) { - let final = volume * crafting_costs[craft][i2].a * craft_costs * speed * time_multiplier / 140; - modRes(crafting_costs[craft][i2].r, -final); - if (typeof crafting_usage[crafting_costs[craft][i2].r] === "undefined") { - crafting_usage[crafting_costs[craft][i2].r] = final / time_multiplier; - } else { - crafting_usage[crafting_costs[craft][i2].r] += final / time_multiplier; - } - } - if (global.race["high_pop"]) { - volume = highPopAdjust(volume); - } - breakdown.p[craft][jobName("craftsman")] = volume * speed / 140 + "v"; - modRes(craft, craft_ratio * volume * speed * time_multiplier / 140 * production("psychic_boost", craft)); - }); - Object.keys(crafting_usage).forEach(function(used) { - if (crafting_usage[used] > 0) { - breakdown.p.consume[used][jobName("craftsman")] = -crafting_usage[used]; - } - }); - } - if (!global.settings.showResearch && (global.resource.Lumber.amount >= 5 || global.resource.Stone.amount >= 6)) { - global.settings.showResearch = true; - } - global.city.power_total = -max_power; - global.city.power = power_grid; - if (global.city.power < 0) { - $("#powerMeter").addClass("low"); - $("#powerMeter").removeClass("neutral"); - $("#powerMeter").removeClass("high"); - } else if (global.city.power > 0) { - $("#powerMeter").removeClass("low"); - $("#powerMeter").removeClass("neutral"); - $("#powerMeter").addClass("high"); - } else { - $("#powerMeter").removeClass("low"); - $("#powerMeter").addClass("neutral"); - $("#powerMeter").removeClass("high"); - } - if (p_on["world_controller"] && p_on["world_controller"] > 0) { - if (global.tech["wsc"] === 0) { - global.tech["wsc"] = 1; - drawTech(); - } - } else if (global.tech["wsc"] !== 0) { - global.tech["wsc"] = 0; - drawTech(); - } - if (global.tech["portal"] >= 2) { - if (global.portal.fortress.garrison > 0) { - global.tech["portal_guard"] = 1; - } else { - global.tech["portal_guard"] = 0; - } - } - if (global.race["decay"]) { - Object.keys(tradeRatio).forEach(function(res) { - if (global.resource[res].amount > 50) { - let decay = +((global.resource[res].amount - 50) * (1e-3 * tradeRatio[res])).toFixed(3); - modRes(res, -(decay * time_multiplier)); - breakdown.p.consume[res][loc("evo_challenge_decay")] = -decay; - } else { - delete breakdown.p.consume[res][loc("evo_challenge_decay")]; - } - }); - } - if (global.resource.Asphodel_Powder.display) { - if (global.resource.Asphodel_Powder.amount > 0) { - let decay = +(global.resource.Asphodel_Powder.amount * 45e-4).toFixed(3); - let stabilize = 0.92; - if (p_on["ascension_trigger"] && global.eden.hasOwnProperty("encampment") && global.eden.encampment.asc) { - let heatSink = actions.interstellar.int_sirius.ascension_trigger.heatSink(); - heatSink = heatSink < 0 ? Math.abs(heatSink) : 0; - if (heatSink > 0) { - let coefficent = 0.08 * (1 + heatSink / 17500); - stabilize = 1 - coefficent; - } - } - if (global.race["warlord"] && global.eden["corruptor"] && p_on["corruptor"]) { - stabilize -= 4e-3 * p_on["corruptor"]; - } - if (stabilize < 0.01) { - stabilize = 0.01; - } - if (global.eden["stabilizer"]) { - decay *= stabilize ** global.eden.stabilizer.count; - } - modRes("Asphodel_Powder", -(decay * time_multiplier)); - breakdown.p.consume.Asphodel_Powder[loc("evo_challenge_decay")] = -decay; - } else { - delete breakdown.p.consume.Asphodel_Powder[loc("evo_challenge_decay")]; - } - } - if (firstRun) { - if (global.tech["piracy"]) { - renderSpace(); - } - if (global.settings.portal.ruins) { - vBind({ el: `#srprtl_ruins` }, "update"); - vBind({ el: `#foundry` }, "update"); - } - if (global.settings.portal.gate) { - vBind({ el: `#srprtl_gate` }, "update"); - } - } - } - if (global.civic["garrison"] && global.civic.garrison.workers < global.civic.garrison.max) { - let rate = 2.5; - if (global.race["high_pop"]) { - rate *= traits.high_pop.vars()[2]; - } - if (global.race["diverse"]) { - rate /= 1 + traits.diverse.vars()[0] / 100; - } - if (global.city["boot_camp"]) { - let train = global.tech["boot_camp"] >= 2 ? 0.08 : 0.05; - if (global.blood["lust"]) { - train += global.blood.lust * 2e-3; - } - let milVal = govActive("militant", 0); - if (milVal) { - train *= 1 + milVal / 100; - } - rate *= 1 + (global.race["orbit_decayed"] && global.space["space_barracks"] ? global.space.space_barracks.on : global.city.boot_camp.count) * train; - } - if (global.tech["celestial_warfare"] && global.tech.celestial_warfare >= 5 && global.eden["bunker"]) { - let train = 0.1; - if (global.blood["lust"]) { - train += global.blood.lust * 2e-3; - } - let milVal = govActive("militant", 0); - if (milVal) { - train *= 1 + milVal / 100; - } - rate *= 1 + global.eden.bunker.count * train; - } - if (global.race["beast"]) { - rate *= 1 + traits.beast.vars()[2] / 100; - } - global.civic.garrison.rate = rate * time_multiplier; - if (global.race["brute"]) { - global.civic.garrison.rate += traits.brute.vars()[1] / 40 * time_multiplier; - } - let fathom = fathomCheck("orc"); - if (fathom > 0) { - global.civic.garrison.rate += traits.brute.vars(1)[1] / 40 * fathom * time_multiplier; - } - global.civic.garrison.progress += global.civic.garrison.rate; - while (global.civic.garrison.progress >= 100) { - global.civic.garrison.progress -= 100; - global.civic.garrison.workers++; - if (global.portal["fortress"] && global.portal.fortress["assigned"] && global.portal.fortress.garrison < global.portal.fortress.assigned) { - global.portal.fortress.garrison++; - } - ; - } - } - if (global.portal["carport"]) { - if (global.portal.carport.damaged > 0) { - if (!$("#portal-carport .count").hasClass("has-text-alert")) { - $("#portal-carport .count").addClass("has-text-alert"); - } - global.portal.carport.repair++; - if (global.portal.carport.repair >= actions.portal.prtl_fortress.carport.repair()) { - global.portal.carport.repair = 0; - global.portal.carport.damaged--; - } - global.portal.carport.damaged = Math.min(global.portal.carport.damaged, jobScale(global.portal.carport.count)); - } else { - if ($("#portal-carport .count").hasClass("has-text-alert")) { - $("#portal-carport .count").removeClass("has-text-alert"); - } - } - } - Object.keys(global.resource).forEach(function(res) { - if (global.resource[res].amount > global.resource[res].max && global.resource[res].max >= 0) { - global.resource[res].amount = global.resource[res].max; - } - if (global["resource"][res].rate > 0 || global["resource"][res].rate === 0 && global["resource"][res].max === -1) { - diffCalc(res, webWorker.mt); - } - }); - if (global.race["fasting"]) { - diffCalc(global.race.species, webWorker.mt); - } - if (global.settings.expose) { - if (!window["evolve"]) { - enableDebug(); - } - updateDebugData(); - } - let easter2 = eventActive("easter"); - if (easter2.active) { - for (i = 1; i <= 18; i++) { - if ($(`#egg${i}`).length > 0 && !$(`#egg${i}`).hasClass("binded")) { - easterEggBind(i); - $(`#egg${i}`).addClass("binded"); - } - } - } - let halloween = eventActive("halloween"); - if (halloween.active) { - for (i = 1; i <= 8; i++) { - if ($(`#treat${i}`).length > 0 && !$(`#treat${i}`).hasClass("binded")) { - trickOrTreatBind(i, false); - $(`#treat${i}`).addClass("binded"); - } - } - for (i = 1; i <= 8; i++) { - if ($(`#trick${i}`).length > 0 && !$(`#trick${i}`).hasClass("binded")) { - trickOrTreatBind(i, true); - $(`#trick${i}`).addClass("binded"); - } - } - } - firstRun = false; - } - function midLoop() { - const astroSign2 = astrologySign(); - if (global.race.species === "protoplasm") { - let base = 100; - if (global.stats.achieve["mass_extinction"] && global.stats.achieve["mass_extinction"].l > 1) { - base += 50 * (global.stats.achieve["mass_extinction"].l - 1); - } - var caps = { - RNA: base, - DNA: base - }; - if (global.evolution["membrane"]) { - let effect = global.evolution["mitochondria"] ? global.evolution["mitochondria"].count * 5 + 5 : 5; - caps["RNA"] += global.evolution["membrane"].count * effect; - } - if (global.evolution["eukaryotic_cell"]) { - let effect = global.evolution["mitochondria"] ? global.evolution["mitochondria"].count * 10 + 10 : 10; - caps["DNA"] += global.evolution["eukaryotic_cell"].count * effect; - } - global.resource.RNA.max = caps["RNA"]; - global.resource.DNA.max = caps["DNA"]; - Object.keys(actions.evolution).forEach(function(action) { - if (actions.evolution[action] && actions.evolution[action].cost) { - let c_action = actions.evolution[action]; - let element = $("#" + c_action.id); - if (element.length > 0) { - if (checkAffordable(c_action, true)) { - if (element.hasClass("cnam")) { - element.removeClass("cnam"); - } - if (checkAffordable(c_action)) { - if (element.hasClass("cna")) { - element.removeClass("cna"); - } - } else if (!element.hasClass("cna")) { - element.addClass("cna"); - } - } else { - if (!element.hasClass("cnam")) { - element.addClass("cnam"); - } - if (!element.hasClass("cna")) { - element.addClass("cna"); - } - } - } - } - }); - } else { - var caps = { - Money: 1e3, - Slave: 0, - Authority: global.race["cataclysm"] || global.race["orbit_decayed"] ? 90 : global.race["lone_survivor"] ? 100 : 80, - Mana: 0, - Energy: 100, - Sus: 100, - Knowledge: global.stats.achieve["extinct_junker"] && global.stats.achieve["extinct_junker"].l >= 1 ? 1e3 : 100, - Omniscience: 0, - Zen: 0, - Food: 1e3, - Crates: 0, - Containers: 0, - Lumber: 200, - Stone: 200, - Chrysotile: 200, - Crystal: 10, - Furs: 100, - Copper: 100, - Iron: 100, - Cement: 100, - Coal: 50, - Oil: 0, - Uranium: 10, - Aluminium: 50, - Steel: 50, - Titanium: 50, - Alloy: 50, - Polymer: 50, - Iridium: 0, - Helium_3: 0, - Water: 0, - Deuterium: 0, - Neutronium: 0, - Adamantite: 0, - Infernite: 0, - Elerium: 1, - Nano_Tube: 0, - Graphene: 0, - Stanene: 0, - Bolognium: 0, - Vitreloy: 0, - Orichalcum: 0, - Asphodel_Powder: 0, - Elysanite: 0, - Unobtainium: 0, - Cipher: 0, - Nanite: 0, - Materials: 0 - }; - var lCaps = { - unemployed: -1, - hunter: -1, - forager: -1, - farmer: -1, - lumberjack: -1, - quarry_worker: -1, - crystal_miner: -1, - scavenger: -1, - teamster: -1, - meditator: -1, - torturer: 0, - miner: 0, - coal_miner: 0, - craftsman: 0, - cement_worker: 0, - banker: 0, - entertainer: 0, - priest: 0, - professor: 0, - scientist: 0, - garrison: 0, - colonist: 0, - titan_colonist: 0, - space_miner: 0, - hell_surveyor: 0, - archaeologist: 0, - ghost_trapper: 0, - elysium_miner: 0, - pit_miner: 0, - crew: 0 - }; - if (global.race["cataclysm"]) { - caps["Money"] += 25e4; - caps["Knowledge"] += 1e5; - caps["Lumber"] += 1e5; - caps["Stone"] += 1e5; - caps["Chrysotile"] += 1e5; - caps["Furs"] += 1e5; - caps["Aluminium"] += 1e5; - caps["Steel"] += 1e5; - caps["Copper"] += 1e5; - caps["Iron"] += 1e5; - caps["Coal"] += 1e5; - caps["Cement"] += 1e5; - caps["Titanium"] += 75e3; - caps["Alloy"] += 2e4; - caps["Polymer"] += 2e4; - caps["Uranium"] += 1e3; - } else if (global.race["lone_survivor"]) { - caps["Money"] += 1e9; - caps["Knowledge"] += 1e5; - caps["Food"] += 9e3; - caps["Water"] += 1e4; - caps["Elerium"] += 999; - } - if (global.stats.feat["adept"]) { - let rank = checkAdept(); - if (global.race["smoldering"]) { - caps["Chrysotile"] += rank * 60; - } else { - caps["Lumber"] += rank * 60; - } - caps["Stone"] += rank * 60; - } - if (global.race.hasOwnProperty("psychicPowers") && global.race.psychicPowers.hasOwnProperty("channel")) { - caps["Energy"] -= global.race.psychicPowers.channel.boost; - caps["Energy"] -= global.race.psychicPowers.channel.assault; - caps["Energy"] -= global.race.psychicPowers.channel.cash; - if (caps["Energy"] < 0) { - caps["Energy"] = 100; - global.race.psychicPowers.channel.boost = 0; - global.race.psychicPowers.channel.assault = 0; - global.race.psychicPowers.channel.cash = 0; - } - } - caps[global.race.species] = 0; - breakdown.c = {}; - Object.keys(caps).forEach(function(res) { - breakdown.c[res] = { [loc("base")]: caps[res] + "v" }; - }); - if (global.race.universe === "evil" && global.tech["primitive"] && global.tech.primitive >= 3) { - global.resource.Authority.display = true; - let garrison = garrisonSize() || 0; - if (global.civic.govern.type === "autocracy") { - let gain = 10; - caps.Authority += gain; - breakdown.c.Authority[loc("govern_autocracy")] = gain + "v"; - } else if (global.civic.govern.type === "oligarchy") { - let gain = 20; - caps.Authority += gain; - breakdown.c.Authority[loc("govern_oligarchy")] = gain + "v"; - } - if (global.city["garrison"]) { - let gain = global.city.garrison.on * 0.5; - caps.Authority += gain; - breakdown.c.Authority[actions.city.garrison.title()] = gain + "v"; - } - if (global.city["temple"] && !global.race["warlord"]) { - let gain = templeCount() * 0.5; - caps.Authority += gain; - breakdown.c.Authority[structName("temple")] = gain + "v"; - } - if (global.space["space_barracks"]) { - let gain = global.space.space_barracks.on * (global.race["cataclysm"] ? 2 : 1); - caps.Authority += gain; - breakdown.c.Authority[loc("space_red_space_barracks_title")] = gain + "v"; - } - if (global.interstellar["cruiser"] && int_on["cruiser"]) { - let gain = int_on["cruiser"]; - caps.Authority += gain; - breakdown.c.Authority[loc("interstellar_cruiser_title")] = gain + "v"; - } - if (global.race["warlord"]) { - let gain = global.race?.absorbed?.length || 1; - caps.Authority += gain; - breakdown.c.Authority[loc("portal_throne_of_evil_title")] = gain + "v"; - } - if (global.portal["brute"]) { - let gain = global.portal.brute.on; - caps.Authority += gain; - breakdown.c.Authority[loc("portal_brute_bd")] = gain + "v"; - } - if (global.portal["minions"]) { - let gain = global.portal.minions.on; - caps.Authority += gain; - breakdown.c.Authority[loc("portal_minions_bd")] = gain + "v"; - } - if (global.race["warlord"] && global.eden["bunker"] && support_on["bunker"]) { - let gain = support_on["bunker"]; - caps.Authority += gain; - breakdown.c.Authority[loc("eden_bunker_title")] = gain + "v"; - } - if (global.race["lone_survivor"] || global.tech["isolation"]) { - let gain = p_on["orbital_station"]; - caps.Authority += gain; - breakdown.c.Authority[loc("tau_home_orbital_station")] = gain + "v"; - } - let pet = 0; - if (global.race["pet"]) { - pet = 1; - if (global.race["pet"]) { - if (global.race.pet.event > 0) { - pet++; - } - if (global.race.pet.pet > 0) { - pet += global.race.pet.type === "cat" ? 2 : 1; - } else if (global.race.pet.pet < 0) { - pet -= global.race.pet.type === "cat" ? 2 : 1; - } - } - caps.Authority += pet; - breakdown.c.Authority[loc(`event_pet_${global.race.pet.type}_owner`)] = pet + "v"; - } - global.resource.Authority.amount = global.race["cataclysm"] || global.race["orbit_decayed"] ? 90 : global.race["lone_survivor"] ? 100 : 80; - if (global.city.morale.current > 100) { - let excess = global.city.morale.current - 100; - if (global.civic.govern.type === "democracy") { - excess *= 0.9; - } - global.resource.Authority.amount -= excess; - } - if (global.civic["garrison"]) { - let adjust = 0.7; - if (global.tech["evil"]) { - adjust += 0.1 * global.tech.evil; - } - if (global.portal["fortress"]) { - garrison += global.portal.fortress.garrison - global.portal.fortress.patrols * global.portal.fortress.patrol_size; - } - let gain = highPopAdjust(garrison) * adjust; - if (global.race["grenadier"]) { - gain *= 1.75; - } - if (global.civic.govern.type === "autocracy") { - gain *= 1.08; - } else if (global.civic.govern.type === "dictator") { - gain *= 1.12; - } - global.resource.Authority.amount += gain; - } - if (pet !== 0) { - global.resource.Authority.amount += pet; - } - if ((global.race["lone_survivor"] || global.tech["isolation"]) && global.tauceti["colony"] && support_on["colony"]) { - global.resource.Authority.amount += support_on["colony"] * 5; - } - global.resource.Authority.amount = Math.floor(global.resource.Authority.amount); - if (global.resource.Authority.amount < 0) { - global.resource.Authority.amount = 0; - } - } else { - global.resource.Authority.display = false; - } - if (global.race["unfathomable"] && global.city["captive_housing"]) { - let strength = weaponTechModifer(); - let hunt = workerScale(global.civic.hunter.workers, "hunter"); - hunt *= racialTrait(hunt, "hunting") * strength; - if (global.race["swift"]) { - hunt *= 1 + traits.swift.vars()[1] / 100; - } - if (global.race["servants"]) { - let serve = global.race.servants.jobs.hunter * strength; - serve *= servantTrait(global.race.servants.jobs.hunter, "hunting"); - hunt += serve; - } - let usedCap = 0; - let thralls = 0; - let imprisoned = []; - if (global.city.hasOwnProperty("surfaceDwellers")) { - for (let i = 0; i < global.city.surfaceDwellers.length; i++) { - let mindbreak = global.city.captive_housing[`race${i}`]; - let jailed = global.city.captive_housing[`jailrace${i}`]; - usedCap += mindbreak + jailed; - thralls += mindbreak; - if (jailed > 0) { - imprisoned.push(i); - } - } - } - let catchVar = Math.round(40 / traits.unfathomable.vars()[1]); - if (usedCap < global.city.captive_housing.raceCap && Math.rand(0, catchVar * usedCap - hunt) <= 0) { - let k = Math.rand(0, global.city.surfaceDwellers.length); - global.city.captive_housing[`jailrace${k}`]++; - } - if (global.tech["unfathomable"] && global.tech.unfathomable >= 2 && global.civic.torturer.workers > 0 && imprisoned.length > 0) { - if (Math.rand(0, Math.ceil((thralls + 1) ** 1.45)) < global.civic.torturer.workers / 2 * (1 + traits.psychic.vars()[0])) { - let k = imprisoned[Math.rand(0, imprisoned.length)]; - global.city.captive_housing[`jailrace${k}`]--; - global.city.captive_housing[`race${k}`]++; - } - } - } - if (global.race["psychic"]) { - if (global.race["psychicPowers"] && global.race.psychicPowers.boostTime > 0) { - global.race.psychicPowers.boostTime--; - if (global.race.psychicPowers.boostTime < 0 || global.race.psychicPowers.boostTime > 360) { - global.race.psychicPowers.boostTime = 0; - } - } - if (global.race["psychicPowers"] && global.race.psychicPowers["assaultTime"] && global.race.psychicPowers.assaultTime > 0) { - global.race.psychicPowers.assaultTime--; - if (global.race.psychicPowers.assaultTime < 0 || global.race.psychicPowers.assaultTime > 360) { - global.race.psychicPowers.assaultTime = 0; - } - } - if (global.race["psychicPowers"] && global.race.psychicPowers["cash"] && global.race.psychicPowers.cash > 0) { - global.race.psychicPowers.cash--; - if (global.race.psychicPowers.cash < 0 || global.race.psychicPowers.cash > 360) { - global.race.psychicPowers.cash = 0; - } - } - } - if (global.city["nanite_factory"]) { - let gain = global.city.nanite_factory.count * spatialReasoning(2500); - caps["Nanite"] += gain; - breakdown.c.Nanite[loc("city_nanite_factory")] = gain + "v"; - } - if (p_on["transmitter"] && global.race["artifical"]) { - let gain = p_on["transmitter"] * spatialReasoning(100); - caps["Food"] += gain; - breakdown.c.Food[loc("city_transmitter")] = gain + "v"; - } - if (global.city["pylon"] || global.space["pylon"] || global.tauceti["pylon"]) { - let gain = 0; - let name = "city_pylon"; - if ((global.race["cataclysm"] || global.race["orbit_decayed"]) && global.space["pylon"]) { - gain = spatialReasoning(2) * global.space.pylon.count; - name = "space_red_pylon"; - } else if (global.tech["isolation"] && global.tauceti["pylon"]) { - gain = spatialReasoning(2) * global.tauceti.pylon.count; - ; - name = "tau_home_pylon"; - } else if (global.city["pylon"]) { - gain = spatialReasoning(5) * global.city.pylon.count; - ; - } - caps["Mana"] += gain; - breakdown.c.Mana[loc(name)] = gain + "v"; - } - if (global.city["captive_housing"]) { - let houses = global.city.captive_housing.count; - global.city.captive_housing.raceCap = houses * (global.tech["unfathomable"] && global.tech.unfathomable >= 3 ? 3 : 2); - global.city.captive_housing.cattleCap = houses * 5; - } - if (global.city["farm"]) { - if (global.tech["farm"]) { - let pop = global.city.farm.count * actions.city.farm.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][loc("city_farm")] = pop + "v"; - } - } - if (global.city["wharf"]) { - let vol = global.tech["world_control"] ? 15 : 10; - if (global.tech["particles"] && global.tech["particles"] >= 2) { - vol *= 2; - } - caps["Crates"] += global.city.wharf.count * vol; - breakdown.c.Crates[loc("city_wharf")] = global.city.wharf.count * vol + "v"; - caps["Containers"] += global.city.wharf.count * vol; - breakdown.c.Containers[loc("city_wharf")] = global.city.wharf.count * vol + "v"; - } - if (global.space["munitions_depot"]) { - let vol = 25; - caps["Crates"] += global.space.munitions_depot.count * vol; - breakdown.c.Crates[loc("tech_munitions_depot")] = global.space.munitions_depot.count * vol + "v"; - caps["Containers"] += global.space.munitions_depot.count * vol; - breakdown.c.Containers[loc("tech_munitions_depot")] = global.space.munitions_depot.count * vol + "v"; - } - if (global.interstellar["cargo_yard"]) { - caps["Crates"] += global.interstellar.cargo_yard.count * 50; - breakdown.c.Crates[loc("interstellar_cargo_yard_title")] = global.interstellar.cargo_yard.count * 50 + "v"; - caps["Containers"] += global.interstellar.cargo_yard.count * 50; - breakdown.c.Containers[loc("interstellar_cargo_yard_title")] = global.interstellar.cargo_yard.count * 50 + "v"; - let gain = global.interstellar.cargo_yard.count * spatialReasoning(200); - caps["Neutronium"] += gain; - breakdown.c.Neutronium[loc("interstellar_cargo_yard_title")] = gain + "v"; - gain = global.interstellar.cargo_yard.count * spatialReasoning(150); - caps["Infernite"] += gain; - breakdown.c.Infernite[loc("interstellar_cargo_yard_title")] = gain + "v"; - } - if (global.interstellar["neutron_miner"] && p_on["neutron_miner"]) { - let gain = p_on["neutron_miner"] * spatialReasoning(500); - caps["Neutronium"] += gain; - breakdown.c.Neutronium[loc("interstellar_neutron_miner_title")] = gain + "v"; - } - if (global.city["storage_yard"]) { - let size = global.tech.container >= 3 ? 20 : 10; - if (global.stats.achieve["pathfinder"] && global.stats.achieve.pathfinder.l >= 1) { - size += 10; - } - if (global.tech["world_control"]) { - size += 10; - } - if (global.tech["particles"] && global.tech["particles"] >= 2) { - size *= 2; - } - caps["Crates"] += global.city["storage_yard"].count * size; - breakdown.c.Crates[loc("city_storage_yard")] = global.city["storage_yard"].count * size + "v"; - } - if (global.space["garage"]) { - let g_vol = global.tech["particles"] >= 4 ? 20 + global.tech["supercollider"] : 20; - if (global.tech["world_control"] || global.race["cataclysm"]) { - g_vol += 10; - } - caps["Containers"] += global.space.garage.count * g_vol; - breakdown.c.Containers[loc("space_red_garage_title")] = global.space.garage.count * g_vol + "v"; - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - caps["Crates"] += global.space.garage.count * g_vol; - breakdown.c.Crates[loc("space_red_garage_title")] = global.space.garage.count * g_vol + "v"; - } - } - if (global.tech["tp_depot"]) { - caps["Containers"] += global.tech.tp_depot * 50; - breakdown.c.Containers[loc("galaxy_gateway_depot")] = global.tech.tp_depot * 50 + "v"; - caps["Crates"] += global.tech.tp_depot * 50; - breakdown.c.Crates[loc("galaxy_gateway_depot")] = global.tech.tp_depot * 50 + "v"; - } - if (global.city["warehouse"]) { - let volume = global.tech["steel_container"] >= 2 ? 20 : 10; - if (global.stats.achieve["pathfinder"] && global.stats.achieve.pathfinder.l >= 2) { - volume += 10; - } - if (global.tech["world_control"]) { - volume += 10; - } - if (global.tech["particles"] && global.tech["particles"] >= 2) { - volume *= 2; - } - caps["Containers"] += global.city["warehouse"].count * volume; - breakdown.c.Containers[loc("city_warehouse")] = global.city["warehouse"].count * volume + "v"; - } - if (global.city["rock_quarry"]) { - let gain = BHStorageMulti(global.city.rock_quarry.count * spatialReasoning(100)); - caps["Stone"] += gain; - breakdown.c.Stone[loc("city_rock_quarry")] = gain + "v"; - caps["Chrysotile"] += gain; - breakdown.c.Chrysotile[loc("city_rock_quarry")] = gain + "v"; - } - if (global.city["lumber_yard"]) { - let gain = BHStorageMulti(global.city.lumber_yard.count * spatialReasoning(100)); - caps["Lumber"] += gain; - breakdown.c.Lumber[loc("city_lumber_yard")] = gain + "v"; - } else if (global.city["graveyard"]) { - let gain = BHStorageMulti(global.city.graveyard.count * spatialReasoning(100)); - caps["Lumber"] += gain; - breakdown.c.Lumber[loc("city_graveyard")] = gain + "v"; - } - if (global.city["sawmill"]) { - let gain = BHStorageMulti(global.city.sawmill.count * spatialReasoning(200)); - caps["Lumber"] += gain; - breakdown.c.Lumber[loc("city_sawmill")] = gain + "v"; - } - if (global.city["mine"]) { - lCaps["miner"] += jobScale(global.city.mine.count); - } - if (global.portal["dig_demon"] && global.race["warlord"]) { - let demons = global.portal.dig_demon.on * actions.portal.prtl_wasteland.dig_demon.citizens(); - caps[global.race.species] += demons; - breakdown.c[global.race.species][loc("portal_dig_demon_title")] = demons + "v"; - lCaps["miner"] += demons; - global.civic.miner.max = demons; - global.civic.miner.workers = demons; - global.civic.miner.assigned = demons; - } - if (global.city["coal_mine"]) { - lCaps["coal_miner"] += jobScale(global.city.coal_mine.count); - } - if (global.city["bank"]) { - lCaps["banker"] += jobScale(global.city.bank.count); - } - if (global.city["amphitheatre"]) { - let athVal = govActive("athleticism", 1); - lCaps["entertainer"] += jobScale(athVal ? global.city.amphitheatre.count * athVal : global.city.amphitheatre.count); - } - if (global.city["casino"]) { - if (global.tech["theatre"] && !global.race["joyless"]) { - lCaps["entertainer"] += jobScale(global.city.casino.count); - } - } - if (global.space["spc_casino"]) { - if (global.tech["theatre"] && !global.race["joyless"]) { - lCaps["entertainer"] += jobScale(global.space.spc_casino.count); - } - if (global.race["orbit_decayed"]) { - lCaps["banker"] += jobScale(global.space.spc_casino.count); - } - } - if (global.portal["hell_casino"]) { - if (global.tech["theatre"] && !global.race["joyless"]) { - lCaps["entertainer"] += jobScale(global.portal.hell_casino.count * 3); - } - lCaps["banker"] += jobScale(global.portal.hell_casino.count); - } - if (global.tauceti["tauceti_casino"]) { - if (global.tech["theatre"] && !global.race["joyless"]) { - lCaps["entertainer"] += jobScale(global.tauceti.tauceti_casino.count); - } - if (global.tech["isolation"]) { - lCaps["banker"] += jobScale(global.tauceti.tauceti_casino.count); - let pop = p_on["tauceti_casino"] * actions.tauceti.tau_home.tauceti_casino.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][structName("casino")] = pop + "v"; - } - } - if (global.galaxy["resort"]) { - if (global.tech["theatre"] && !global.race["joyless"]) { - lCaps["entertainer"] += jobScale(p_on["resort"] * 2); - } - } - if (global.city["cement_plant"]) { - lCaps["cement_worker"] += jobScale(global.city.cement_plant.count * 2); - } - if (global.eden["eden_cement"]) { - let ec = p_on["eden_cement"] || 0; - lCaps["cement_worker"] += jobScale(ec * 5); - } - if (global.race["orbit_decayed"] && p_on["red_factory"]) { - lCaps["cement_worker"] += jobScale(p_on["red_factory"]); - } - if (global.race["parasite"] && !global.tech["isolation"]) { - lCaps["garrison"] += jobScale(traits.parasite.vars()[0]); - } - if (global.city["garrison"]) { - lCaps["garrison"] += global.city.garrison.on * actions.city.garrison.soldiers(); - } - if (global.space["space_barracks"] && !global.race["fasting"]) { - let soldiers = actions.space.spc_red.space_barracks.soldiers(); - lCaps["garrison"] += Math.round(global.space.space_barracks.on * soldiers); - } - if (global.interstellar["cruiser"]) { - let soldiers = actions.interstellar.int_proxima.cruiser.soldiers(); - lCaps["garrison"] += int_on["cruiser"] * soldiers; - } - if (global.portal["brute"]) { - let soldiers = actions.portal.prtl_wasteland.brute.soldiers(); - lCaps["garrison"] += global.portal.brute.on * soldiers; - } - if (global.race["wish"] && global.race["wishStats"]) { - lCaps["garrison"] += jobScale(global.race.wishStats.troop); - } - if (p_on["s_gate"] && global.galaxy["starbase"]) { - let soldiers = actions.galaxy.gxy_gateway.starbase.soldiers(); - lCaps["garrison"] += p_on["starbase"] * soldiers; - } - if (global.eden["bunker"]) { - let soldiers = actions.eden.eden_asphodel.bunker.soldiers(); - lCaps["garrison"] += support_on["bunker"] * soldiers; - } - if (global.eden["fire_support_base"] && global.eden.fire_support_base.count === 100) { - lCaps["garrison"] += actions.eden.eden_elysium.fire_support_base.soldiers(); - } - if (global.race["orbit_decayed"] && global.space.hasOwnProperty("red_mine")) { - lCaps["miner"] += jobScale(support_on["red_mine"]); - lCaps["coal_miner"] += jobScale(support_on["red_mine"]); - } - if (!global.tech["world_control"]) { - let occ_amount = jobScale(global.civic.govern.type === "federation" ? 15 : 20); - for (let i = 2; i >= 0; i--) { - if (global.civic.foreign[`gov${i}`].occ) { - lCaps["garrison"] -= occ_amount; - if (lCaps["garrison"] < 0) { - global.civic.foreign[`gov${i}`].occ = false; - lCaps["garrison"] += occ_amount; - global.civic.garrison.workers += occ_amount; - messageQueue(loc("civics_garrison_autodeoccupy_desc", [govTitle(i)]), "danger", false, ["spy"]); - } - } - } - } - if (global.race["slaver"] && global.tech["slaves"] && global.city["slave_pen"]) { - caps["Slave"] = global.city.slave_pen.count * 4; - breakdown.c.Slave[loc("city_slave_housing", [global.resource.Slave.name])] = global.city.slave_pen.count * 4 + "v"; - if (caps["Slave"] < global.resource.Slave.amount) { - global.resource.Slave.amount = caps["Slave"]; - } - } - if (global.race["calm"] && global.city["meditation"]) { - caps["Zen"] = global.city.meditation.count * traits.calm.vars()[0]; - breakdown.c.Zen[loc("city_meditation")] = global.city.meditation.count * traits.calm.vars()[0] + "v"; - global.resource.Zen.amount = global.resource[global.race.species].amount * 2 + global.civic.garrison.workers; - if (global.resource.Zen.amount > global.resource.Zen.max) { - global.resource.Zen.amount = global.resource.Zen.max; - } - let zen = global.resource.Zen.amount / (global.resource.Zen.amount + 5e3); - breakdown.c.Zen[loc("trait_calm_desc")] = `+${(zen * 100).toFixed(2)}%`; - } - if (global.city["basic_housing"]) { - let pop = global.city.basic_housing.count * actions.city.basic_housing.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][housingLabel("small")] = pop + "v"; - } - if (global.tauceti["tau_housing"] && global.tech["isolation"]) { - let pop = global.tauceti.tau_housing.count * actions.tauceti.tau_home.tau_housing.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][housingLabel("small")] = pop + "v"; - } - if (global.city["cottage"]) { - let pop = global.city.cottage.count * actions.city.cottage.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][housingLabel("medium")] = pop + "v"; - if (global.tech["home_safe"]) { - let gain = global.city["cottage"].count * spatialReasoning(global.tech.home_safe >= 2 ? global.tech.home_safe >= 3 ? 5e3 : 2e3 : 1e3); - caps["Money"] += gain; - breakdown.c.Money[housingLabel("medium")] = gain + "v"; - } - } - if (global.city["apartment"]) { - let pop = p_on["apartment"] * actions.city.apartment.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][housingLabel("large")] = pop + "v"; - if (global.tech["home_safe"]) { - let gain = p_on["apartment"] * spatialReasoning(global.tech.home_safe >= 2 ? global.tech.home_safe >= 3 ? 1e4 : 5e3 : 2e3); - caps["Money"] += gain; - breakdown.c.Money[housingLabel("large")] = gain + "v"; - } - } - if (global.eden["rectory"]) { - let pop = p_on["rectory"] * actions.eden.eden_asphodel.rectory.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][loc(`eden_rectory_title`)] = pop + "v"; - } - if (p_on["s_gate"] && global.galaxy["consulate"] && global.galaxy.consulate.count >= 1) { - let pop = actions.galaxy.gxy_alien1.consulate.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][loc("galaxy_consulate")] = pop + "v"; - } - if (p_on["s_gate"] && p_on["embassy"] && global.tech.xeno >= 11) { - let pop = actions.galaxy.gxy_gorddon.embassy.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][loc("galaxy_embassy")] = pop + "v"; - } - if (p_on["s_gate"] && p_on["embassy"] && global.galaxy["dormitory"]) { - let pop = p_on["dormitory"] * actions.galaxy.gxy_gorddon.dormitory.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][loc("galaxy_dormitory")] = pop + "v"; - } - if (p_on["arcology"]) { - let pop = p_on["arcology"] * actions.portal.prtl_ruins.arcology.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][loc("portal_arcology_title")] = pop + "v"; - lCaps["garrison"] += p_on["arcology"] * actions.portal.prtl_ruins.arcology.soldiers(); - caps["Containers"] += p_on["arcology"] * Math.round(quantum_level) * 10; - breakdown.c.Containers[loc("portal_arcology_title")] = p_on["arcology"] * Math.round(quantum_level) * 10 + "v"; - caps["Crates"] += p_on["arcology"] * Math.round(quantum_level) * 10; - breakdown.c.Crates[loc("portal_arcology_title")] = p_on["arcology"] * Math.round(quantum_level) * 10 + "v"; - let sup = hellSupression("ruins"); - let money = p_on["arcology"] * spatialReasoning(bank_vault() * 8 * sup.supress); - caps["Money"] += money; - breakdown.c.Money[loc("portal_arcology_title")] = money + "v"; - } - if (global.portal["bazaar"] && global.portal["spire"]) { - let containers = global.portal.bazaar.count * global.portal.spire.count * 8; - caps["Containers"] += containers; - breakdown.c.Containers[loc("portal_bazaar_title")] = containers + "v"; - caps["Crates"] += containers; - breakdown.c.Crates[loc("portal_bazaar_title")] = containers + "v"; - let money = spatialReasoning(bank_vault() * global.portal.spire.count * global.portal.bazaar.count / 3); - caps["Money"] += money; - breakdown.c.Money[loc("portal_bazaar_title")] = money + "v"; - } - if (support_on["colony"]) { - let containers = global.tech["isolation"] ? 900 : 250; - caps["Containers"] += support_on["colony"] * containers; - breakdown.c.Containers[loc("tau_home_colony")] = support_on["colony"] * containers + "v"; - caps["Crates"] += support_on["colony"] * containers; - breakdown.c.Crates[loc("tau_home_colony")] = support_on["colony"] * containers + "v"; - let pop = support_on["colony"] * actions.tauceti.tau_home.colony.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][loc("tau_home_colony")] = pop + "v"; - } - if (p_on["operating_base"]) { - lCaps["garrison"] += Math.min(support_on["operating_base"], p_on["operating_base"]) * actions.space.spc_enceladus.operating_base.soldiers(); - } - if (p_on["fob"]) { - lCaps["garrison"] += actions.space.spc_triton.fob.soldiers(); - } - if (global.space["living_quarters"]) { - let gain = Math.round(support_on["living_quarters"] * actions.space.spc_red.living_quarters.citizens()); - caps[global.race.species] += gain; - lCaps["colonist"] += jobScale(support_on["living_quarters"]); - breakdown.c[global.race.species][`${planetName().red}`] = gain + "v"; - if ((global.race["cataclysm"] || global.race["orbit_decayed"]) && global.tech["home_safe"]) { - let gain2 = support_on["living_quarters"] * spatialReasoning(global.tech.home_safe >= 2 ? global.tech.home_safe >= 3 ? 1e5 : 5e4 : 25e3); - caps["Money"] += gain2; - breakdown.c.Money[loc("space_red_living_quarters_title")] = gain2 + "v"; - } - } - if (support_on["biodome"] && (global.race["artifical"] || global.race["orbit_decayed"])) { - let gain = support_on["biodome"] * spatialReasoning(global.race["artifical"] ? 500 : 100); - caps["Food"] += gain; - breakdown.c.Food[loc("space_red_signal_tower_title")] = gain + "v"; - } - if (global.space["titan_quarters"]) { - let gain = Math.round(support_on["titan_quarters"] * actions.space.spc_titan.titan_quarters.citizens()); - caps[global.race.species] += gain; - lCaps["titan_colonist"] += jobScale(support_on["titan_quarters"]); - breakdown.c[global.race.species][`${planetName().titan}`] = gain + "v"; - } - if (global.interstellar["habitat"] && p_on["habitat"]) { - let pop = p_on["habitat"] * actions.interstellar.int_alpha.habitat.citizens(); - caps[global.race.species] += pop; - breakdown.c[global.race.species][loc("interstellar_habitat_title")] = pop + "v"; - } - if (global.interstellar["luxury_condo"] && p_on["luxury_condo"]) { - let cit = p_on["luxury_condo"] * actions.interstellar.int_alpha.luxury_condo.citizens(); - caps[global.race.species] += cit; - breakdown.c[global.race.species][loc("tech_luxury_condo")] = cit + "v"; - let gain = p_on["luxury_condo"] * spatialReasoning(75e4); - caps["Money"] += gain; - breakdown.c.Money[loc("tech_luxury_condo")] = gain + "v"; - } - if (global.city["lodge"]) { - let cit = global.city.lodge.count * actions.city.lodge.citizens(); - caps[global.race.species] += cit; - breakdown.c[global.race.species][loc("city_lodge")] = cit + "v"; - } - if (global.portal["hovel"]) { - let cit = global.portal.hovel.count * actions.portal.prtl_wasteland.hovel.citizens(); - caps[global.race.species] += cit; - breakdown.c[global.race.species][loc("portal_hovel_title")] = cit + "v"; - } - if (global.space["outpost"]) { - let gain = global.space["outpost"].count * spatialReasoning(500); - caps["Neutronium"] += gain; - breakdown.c.Neutronium[loc("space_gas_moon_outpost_title")] = gain + "v"; - } - if (global.city["shed"]) { - var multiplier = storageMultipler(); - let label = global.tech["storage"] <= 2 ? loc("city_shed_title1") : global.tech["storage"] >= 4 ? loc("city_shed_title3") : loc("city_shed_title2"); - for (const res of actions.city.shed.res()) { - if (global.resource[res].display) { - let gain = global.city.shed.count * spatialReasoning(actions.city.shed.val(res) * multiplier); - caps[res] += gain; - breakdown.c[res][label] = gain + "v"; - } - } - ; - } - if (global.race["lone_survivor"]) { - breakdown.c[global.race.species][loc("base")] = "1v"; - caps[global.race.species] = 1; - } - if (global.interstellar["warehouse"]) { - var multiplier = storageMultipler(); - let label = loc("interstellar_alpha_name"); - for (const res of actions.interstellar.int_alpha.warehouse.res()) { - if (global.resource[res].display) { - let gain = global.interstellar.warehouse.count * spatialReasoning(actions.interstellar.int_alpha.warehouse.val(res) * multiplier); - caps[res] += gain; - breakdown.c[res][label] = gain + "v"; - } - } - ; - } - if (global.eden["warehouse"]) { - var multiplier = storageMultipler(global.race["warlord"] ? 1 : 0.2); - if (global.race["warlord"] && global.eden["corruptor"]) { - multiplier *= 1 + (p_on["corruptor"] || 0) * (global.tech.asphodel >= 12 ? global.tech.asphodel >= 13 ? 0.16 : 0.12 : 0.08); - } - let label = loc("eden_asphodel_name"); - for (const res of actions.eden.eden_asphodel.warehouse.res()) { - if (global.resource[res].display) { - let gain = global.eden.warehouse.count * spatialReasoning(actions.eden.eden_asphodel.warehouse.val(res) * multiplier); - caps[res] += gain; - breakdown.c[res][label] = gain + "v"; - } - } - ; - } - if (global.portal["warehouse"]) { - var multiplier = storageMultipler(); - if (global.race["warlord"] && global.eden["corruptor"] && global.tech.asphodel >= 12) { - multiplier *= 1 + (p_on["corruptor"] || 0) * (global.tech.asphodel >= 13 ? 0.16 : 0.12); - } - let label = global.tech["storage"] <= 2 ? loc("city_shed_title1") : global.tech["storage"] >= 4 ? loc("city_shed_title3") : loc("city_shed_title2"); - for (const res of actions.portal.prtl_wasteland.warehouse.res()) { - if (global.resource[res].display) { - let gain = global.portal.warehouse.count * spatialReasoning(actions.portal.prtl_wasteland.warehouse.val(res) * multiplier); - caps[res] += gain; - breakdown.c[res][label] = gain + "v"; - } - } - ; - let cc_gain = global.portal.warehouse.count * (65 + global.portal.warehouse.rank * 35); - caps["Crates"] += cc_gain; - breakdown.c["Crates"][label] = cc_gain + "v"; - caps["Containers"] += cc_gain; - breakdown.c["Containers"][label] = cc_gain + "v"; - } - if (global.space["storehouse"]) { - var multiplier = tpStorageMultiplier("storehouse", false); - var h_multiplier = tpStorageMultiplier("storehouse", true); - let label = loc("space_storehouse_title"); - for (const res of actions.space.spc_titan.storehouse.res()) { - if (global.resource[res].display) { - let heavy = actions.space.spc_titan.storehouse.heavy(res); - let gain = global.space.storehouse.count * spatialReasoning(actions.space.spc_titan.storehouse.val(res) * (heavy ? h_multiplier : multiplier)); - caps[res] += gain; - breakdown.c[res][label] = gain + "v"; - } - } - ; - } - if (global.tauceti["repository"]) { - var multiplier = tpStorageMultiplier("repository"); - let label = loc("tech_repository"); - for (const res of actions.tauceti.tau_home.repository.res()) { - if (global.resource[res].display) { - let gain = global.tauceti.repository.count * spatialReasoning(actions.tauceti.tau_home.repository.val(res) * multiplier); - caps[res] += gain; - breakdown.c[res][label] = gain + "v"; - } - } - ; - if (global.tech["isolation"]) { - let containers = 250; - caps["Containers"] += global.tauceti.repository.count * containers; - breakdown.c.Containers[loc("tech_repository")] = global.tauceti.repository.count * containers + "v"; - caps["Crates"] += global.tauceti.repository.count * containers; - breakdown.c.Crates[loc("tech_repository")] = global.tauceti.repository.count * containers + "v"; - } - } - if (global.tech["isolation"] && p_on["tau_farm"] && global.race["artifical"]) { - let gain = p_on["tau_farm"] * spatialReasoning(350); - caps["Food"] += gain; - breakdown.c.Food[loc("tau_home_tau_farm")] = gain + "v"; - } - if (global.galaxy["gateway_depot"]) { - let containers = global.tech["world_control"] ? 150 : 100; - caps["Crates"] += global.galaxy.gateway_depot.count * containers; - breakdown.c.Crates[loc("galaxy_gateway_depot")] = global.galaxy.gateway_depot.count * containers + "v"; - caps["Containers"] += global.galaxy.gateway_depot.count * containers; - breakdown.c.Containers[loc("galaxy_gateway_depot")] = global.galaxy.gateway_depot.count * containers + "v"; - let label = loc("galaxy_gateway_depot"); - let multiplier2 = gatewayStorage(); - if (global.resource.Uranium.display) { - let gain = global.galaxy.gateway_depot.count * spatialReasoning(3e3 * multiplier2); - caps["Uranium"] += gain; - breakdown.c.Uranium[label] = gain + "v"; - } - if (global.resource.Nano_Tube.display) { - let gain = global.galaxy.gateway_depot.count * spatialReasoning(25e4 * multiplier2); - caps["Nano_Tube"] += gain; - breakdown.c.Nano_Tube[label] = gain + "v"; - } - if (global.resource.Neutronium.display) { - let gain = global.galaxy.gateway_depot.count * spatialReasoning(9001 * multiplier2); - caps["Neutronium"] += gain; - breakdown.c.Neutronium[label] = gain + "v"; - } - if (global.resource.Infernite.display) { - let gain = global.galaxy.gateway_depot.count * spatialReasoning(6660 * multiplier2); - caps["Infernite"] += gain; - breakdown.c.Infernite[label] = gain + "v"; - } - if (global.resource.Elerium.display && p_on["gateway_depot"] && p_on["s_gate"]) { - let gain = p_on["gateway_depot"] * spatialReasoning(200); - caps["Elerium"] += gain; - breakdown.c.Elerium[label] = gain + "v"; - } - } - if (global.resource.Infernite.display && global.portal["fortress"] && !global.race["warlord"]) { - let gain = spatialReasoning(1e3); - caps["Infernite"] += gain; - breakdown.c.Infernite[loc("portal_fortress_name")] = gain + "v"; - } - if (global.space["garage"]) { - var multiplier = actions.space.spc_red.garage.multiplier(false); - var h_multiplier = actions.space.spc_red.garage.multiplier(true); - let label = loc("space_red_garage_title"); - for (const res of actions.space.spc_red.garage.res()) { - if (global.resource[res].display) { - let heavy = actions.space.spc_red.garage.heavy(res); - let gain = global.space.garage.count * spatialReasoning(actions.space.spc_red.garage.val(res) * (heavy ? h_multiplier : multiplier)); - caps[res] += gain; - breakdown.c[res][label] = gain + "v"; - } - } - ; - } - if (global.portal["harbor"] && p_on["harbor"]) { - let multiplier2 = 1; - if (global.race["warlord"] && global.eden["corruptor"] && global.tech?.asphodel >= 12) { - multiplier2 *= 1 + (p_on["corruptor"] || 0) * (global.tech.asphodel >= 13 ? 0.12 : 0.1); - } - let label = loc("portal_harbor_title"); - for (const res of actions.portal.prtl_lake.harbor.res()) { - if (global.resource[res].display) { - let gain = p_on["harbor"] * spatialReasoning(actions.portal.prtl_lake.harbor.val(res) * multiplier2); - caps[res] += gain; - breakdown.c[res][label] = gain + "v"; - } - } - ; - } - if (global.city["silo"]) { - let gain = BHStorageMulti(global.city["silo"].count * spatialReasoning(500)); - caps["Food"] += gain; - breakdown.c.Food[loc("city_silo")] = gain + "v"; - } - if (global.city["compost"]) { - let gain = BHStorageMulti(global.city["compost"].count * spatialReasoning(200)); - caps["Food"] += gain; - breakdown.c.Food[loc("city_compost_heap")] = gain + "v"; - } - if (global.city["soul_well"]) { - let gain = BHStorageMulti(global.city["soul_well"].count * spatialReasoning(500)); - caps["Food"] += gain; - breakdown.c.Food[loc("city_soul_well")] = gain + "v"; - } - if (global.city["smokehouse"]) { - let gain = BHStorageMulti(global.city["smokehouse"].count * spatialReasoning(100)); - caps["Food"] += gain; - breakdown.c.Food[loc("city_smokehouse")] = gain + "v"; - } - if (global.city["oil_well"]) { - let gain = global.city["oil_well"].count * spatialReasoning(500); - caps["Oil"] += gain; - breakdown.c.Oil[loc("city_oil_well")] = gain + "v"; - } - if (global.city["oil_depot"]) { - let gain = global.city["oil_depot"].count * spatialReasoning(1e3); - gain *= global.tech["world_control"] ? 1.5 : 1; - caps["Oil"] += gain; - breakdown.c.Oil[loc("city_oil_depot")] = gain + "v"; - if (global.tech["uranium"] >= 2) { - gain = global.city["oil_depot"].count * spatialReasoning(250); - gain *= global.tech["world_control"] ? 1.5 : 1; - caps["Uranium"] += gain; - breakdown.c.Uranium[loc("city_oil_depot")] = gain + "v"; - } - if (global.resource["Helium_3"].display) { - gain = global.city["oil_depot"].count * spatialReasoning(400); - gain *= global.tech["world_control"] ? 1.5 : 1; - caps["Helium_3"] += gain; - breakdown.c.Helium_3[loc("city_oil_depot")] = gain + "v"; - } - } - if (global.space["propellant_depot"]) { - let gain = global.space["propellant_depot"].count * spatialReasoning(1250); - gain *= global.tech["world_control"] ? 1.5 : 1; - caps["Oil"] += gain; - breakdown.c.Oil[loc("space_home_propellant_depot_title")] = gain + "v"; - if (global.resource["Helium_3"].display) { - gain = global.space["propellant_depot"].count * spatialReasoning(1e3); - gain *= global.tech["world_control"] ? 1.5 : 1; - caps["Helium_3"] += gain; - breakdown.c.Helium_3[loc("space_home_propellant_depot_title")] = gain + "v"; - } - } - if (p_on["orbital_station"]) { - let gain = p_on["orbital_station"] * spatialReasoning(15e3); - caps["Helium_3"] += gain; - breakdown.c.Helium_3[loc("tau_home_orbital_station")] = gain + "v"; - } - if (p_on["refueling_station"]) { - let h_gain = p_on["refueling_station"] * spatialReasoning(1e4); - caps["Helium_3"] += h_gain; - breakdown.c.Helium_3[loc("tau_gas_refueling_station_title")] = h_gain + "v"; - if (global.tech["tau_whale"] >= 2) { - let o_gain = p_on["refueling_station"] * spatialReasoning(6500); - caps["Oil"] += o_gain; - breakdown.c.Oil[loc("tau_gas_refueling_station_title")] = o_gain + "v"; - } - } - if (p_on["orbital_platform"]) { - let gain = p_on["orbital_platform"] * spatialReasoning(17500); - caps["Oil"] += gain; - breakdown.c.Oil[loc("tau_red_orbital_platform")] = gain + "v"; - } - if (global.space["gas_storage"]) { - let gain = global.space["gas_storage"].count * spatialReasoning(3500); - gain *= global.tech["world_control"] ? 1.5 : 1; - caps["Oil"] += gain; - breakdown.c.Oil[`${planetName().gas} ${loc("depot")}`] = gain + "v"; - gain = global.space["gas_storage"].count * spatialReasoning(2500); - gain *= global.tech["world_control"] ? 1.5 : 1; - caps["Helium_3"] += gain; - breakdown.c.Helium_3[`${planetName().gas} ${loc("depot")}`] = gain + "v"; - gain = global.space["gas_storage"].count * spatialReasoning(1e3); - gain *= global.tech["world_control"] ? 1.5 : 1; - caps["Uranium"] += gain; - breakdown.c.Uranium[`${planetName().gas} ${loc("depot")}`] = gain + "v"; - } - if (p_on["xfer_station"]) { - let gain = p_on["xfer_station"] * spatialReasoning(5e3); - caps["Helium_3"] += gain; - breakdown.c.Helium_3[loc("interstellar_xfer_station_title")] = gain + "v"; - gain = p_on["xfer_station"] * spatialReasoning(4e3); - caps["Oil"] += gain; - breakdown.c.Oil[loc("interstellar_xfer_station_title")] = gain + "v"; - gain = p_on["xfer_station"] * spatialReasoning(2500); - caps["Uranium"] += gain; - breakdown.c.Uranium[loc("interstellar_xfer_station_title")] = gain + "v"; - if (global.resource.Deuterium.display) { - let deuterium_gain = p_on["xfer_station"] * spatialReasoning(2e3); - caps["Deuterium"] += deuterium_gain; - breakdown.c.Deuterium[loc("interstellar_xfer_station_title")] = deuterium_gain + "v"; - } - } - if (global.space["helium_mine"]) { - let gain = global.space["helium_mine"].count * spatialReasoning(100); - caps["Helium_3"] += gain; - breakdown.c.Helium_3[loc("space_moon_helium_mine_title")] = gain + "v"; - } - if (global.portal["pumpjack"]) { - let gain = global.portal.pumpjack.count * spatialReasoning(500); - caps["Oil"] += gain; - breakdown.c.Oil[loc("portal_pumpjack_title")] = gain + "v"; - } - if (global.portal["pumpjack"]) { - let gain = global.portal.pumpjack.count * spatialReasoning(250); - caps["Helium_3"] += gain; - breakdown.c.Helium_3[loc("portal_pumpjack_title")] = gain + "v"; - } - if (shrineBonusActive()) { - let getShrineResult = getShrineBonus("know"); - caps["Knowledge"] += getShrineResult.add; - breakdown.c.Knowledge[loc("city_shrine")] = getShrineResult.add + "v"; - } - if (global.city["temple"] && global.genes["ancients"] && global.genes["ancients"] >= 2) { - lCaps["priest"] += jobScale(templeCount()); - } - if (global.space["ziggurat"] && global.genes["ancients"] && global.genes["ancients"] >= 4) { - lCaps["priest"] += jobScale(templeCount(true)); - } - if (global.eden["rectory"] && global.genes["ancients"] && global.genes["ancients"] >= 2 && p_on["rectory"]) { - lCaps["priest"] += jobScale(p_on["rectory"]); - } - if (global.race["wish"] && global.race["wishStats"] && global.race.wishStats.priest) { - lCaps["priest"] += jobScale(global.race.wishStats.priest); - } - let pirate_alien2 = piracy("gxy_alien2"); - if (global.city["university"]) { - let gain = actions.city.university.knowVal() * global.city.university.count; - lCaps["professor"] += jobScale(global.city.university.count); - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("city_university")] = gain + "v"; - } - if (global.race["lone_survivor"] && global.tauceti["alien_outpost"]) { - lCaps["professor"] += jobScale(global.tauceti.alien_outpost.count); - } - if (global.city["library"]) { - let shelving = 125; - if (global.race["nearsighted"]) { - shelving *= 1 - traits.nearsighted.vars()[0] / 100; - } - if (global.race["studious"]) { - shelving *= 1 + traits.studious.vars()[1] / 100; - } - let fathom = fathomCheck("elven"); - if (fathom > 0) { - shelving *= 1 + traits.studious.vars(1)[1] / 100 * fathom; - } - if (global.tech["science"] && global.tech["science"] >= 8) { - shelving *= 1.4; - } - if (global.tech["science"] && global.tech["science"] >= 5) { - let sci_val = workerScale(global.civic.scientist.workers, "scientist"); - if (global.race["high_pop"]) { - sci_val = highPopAdjust(sci_val); - } - shelving *= 1 + sci_val * 0.12; - } - if (global.tech["anthropology"] && global.tech["anthropology"] >= 2) { - shelving *= 1 + faithTempleCount() * 0.05; - } - let teachVal = govActive("teacher", 0); - if (teachVal) { - shelving *= 1 + teachVal / 100; - } - let athVal = govActive("athleticism", 2); - if (athVal) { - shelving *= 1 - athVal / 100; - } - let muckVal = govActive("muckraker", 1); - if (muckVal) { - shelving *= 1 + muckVal / 100; - } - let gain = Math.round(global.city.library.count * shelving); - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("city_library")] = gain + "v"; - if (global.tech["science"] && global.tech["science"] >= 3) { - global.civic.professor.impact = 0.5 + global.city.library.count * 0.01; - } - } - if (global.city["wardenclyffe"]) { - let gain_base = 1e3; - if (global.city.ptrait.includes("magnetic")) { - gain_base += planetTraits.magnetic.vars()[1]; - } - let gain = global.city["wardenclyffe"].count * gain_base; - lCaps["scientist"] += jobScale(global.city["wardenclyffe"].count); - let powered_gain = global.tech["science"] >= 7 ? 1500 : 1e3; - gain += p_on["wardenclyffe"] * powered_gain; - if (global.tech["supercollider"]) { - let ratio = global.tech["tp_particles"] || global.tech["particles"] && global.tech["particles"] >= 3 ? 12.5 : 25; - gain *= global.tech["supercollider"] / ratio + 1; - } - if (global.space["satellite"]) { - gain *= 1 + global.space.satellite.count * 0.04; - } - let athVal = govActive("athleticism", 2); - if (athVal) { - gain *= 1 - athVal / 100; - } - caps["Knowledge"] += gain; - breakdown.c.Knowledge[wardenLabel()] = gain + "v"; - if (global.race.universe === "magic") { - let mana = global.city.wardenclyffe.count * spatialReasoning(8); - caps["Mana"] += mana; - breakdown.c.Mana[wardenLabel()] = mana + "v"; - } - if (global.race["artifical"]) { - let gain2 = p_on["wardenclyffe"] * spatialReasoning(250); - caps["Food"] += gain2; - breakdown.c.Food[wardenLabel()] = gain2 + "v"; - } - } - if (global.race["logical"]) { - let factor = global.tech.hasOwnProperty("high_tech") ? global.tech.high_tech : 0; - factor += global.tech.hasOwnProperty("science") ? global.tech.science : 0; - let gain = global.resource[global.race.species].amount * traits.logical.vars()[1] * factor; - caps["Knowledge"] += gain; - breakdown.c.Knowledge[races[global.race.species].name] = gain + "v"; - } - if (global.portal["sensor_drone"]) { - let gain = p_on["sensor_drone"] * (global.tech.infernite >= 6 ? 2500 : 1e3); - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("portal_sensor_drone_title")] = gain + "v"; - } - if (global.space["satellite"]) { - let gain = global.space.satellite.count * (global.race["cataclysm"] || global.race["orbit_decayed"] ? 2e3 : 750); - if ((global.race["cataclysm"] || global.race["orbit_decayed"]) && global.tech["supercollider"]) { - let ratio = global.tech["tp_particles"] || global.tech["particles"] && global.tech["particles"] >= 3 ? 5 : 10; - gain *= global.tech["supercollider"] / ratio + 1; - } - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("space_home_satellite_title")] = gain + "v"; - } - if (global.space["observatory"] && global.space.observatory.count > 0) { - let gain = support_on["observatory"] * 5e3; - if (global.race["cataclysm"] && global.space["satellite"] && global.space.satellite.count > 0) { - gain *= 1 + global.space.satellite.count * 0.25; - } - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("space_moon_observatory_title")] = gain + "v"; - if (global.race["cataclysm"]) { - lCaps["professor"] += jobScale(support_on["observatory"]); - } - } - if (global.interstellar["laboratory"] && int_on["laboratory"] > 0) { - if (global.tech.science >= 16) { - lCaps["scientist"] += jobScale(int_on["laboratory"]); - } - let gain = int_on["laboratory"] * 1e4; - if (global.tech.science >= 15) { - gain *= 1 + (global.race["cataclysm"] ? support_on["exotic_lab"] : global.city.wardenclyffe.count) * 0.02; - } - if (global.race["cataclysm"] && p_on["s_gate"] && gal_on["scavenger"]) { - gain *= 1 + gal_on["scavenger"] * piracy("gxy_alien2") * 0.75; - } - if (global.tech["science"] >= 21) { - gain *= 1.45; - } - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc(global.race.universe === "magic" ? "tech_sanctum" : "interstellar_laboratory_title")] = gain + "v"; - if (global.race.universe === "magic") { - let mana = int_on["laboratory"] * spatialReasoning(12); - caps["Mana"] += mana; - breakdown.c.Mana[loc(global.race.universe === "magic" ? "tech_sanctum" : "interstellar_laboratory_title")] = mana + "v"; - } - } - if (global.city["biolab"]) { - let gain = 3e3; - if (global.portal["sensor_drone"] && global.tech["science"] >= 14) { - gain *= 1 + p_on["sensor_drone"] * 0.02; - } - if (global.tech["science"] >= 20) { - gain *= 3; - } - if (global.tech["science"] >= 21) { - gain *= 1.45; - } - if (global.tech["biotech"] >= 1) { - gain *= 2.5; - } - if (global.race["elemental"] && traits.elemental.vars()[0] === "frost") { - gain *= 1 + highPopAdjust(traits.elemental.vars()[4] * global.resource[global.race.species].amount / 100); - } - caps["Knowledge"] += p_on["biolab"] * gain; - breakdown.c.Knowledge[loc("city_biolab")] = p_on["biolab"] * gain + "v"; - } - if (global.space["zero_g_lab"] && Math.min(support_on["zero_g_lab"], p_on["zero_g_lab"]) > 0) { - let using = Math.min(support_on["zero_g_lab"], p_on["zero_g_lab"]); - let synd = syndicate("spc_enceladus"); - let gain = Math.round(using * 1e4 * synd); - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("tech_zero_g_lab")] = gain + "v"; - if (global.resource.Cipher.display) { - let cipher = 1e4 * using; - caps["Cipher"] += cipher; - breakdown.c.Cipher[loc("tech_zero_g_lab")] = cipher + "v"; - } - } - if (global.race["warlord"]) { - let gain = (global.race?.absorbed?.length || 1) * 5e5; - if (shrineBonusActive()) { - let shrineBonus = getShrineBonus("know"); - gain *= shrineBonus.mult; - } - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("portal_throne_of_evil_title")] = gain + "v"; - caps["Crates"] += 500; - breakdown.c.Crates[loc("portal_throne_of_evil_title")] = "500v"; - caps["Containers"] += 500; - breakdown.c.Containers[loc("portal_throne_of_evil_title")] = "500v"; - } - if (global.portal["twisted_lab"] && global.portal.twisted_lab.count > 0 && global.race["absorbed"]) { - let baseVal = 6e3 + global.portal.twisted_lab.rank * 2e3; - let gain = p_on["twisted_lab"] * baseVal * global.race.absorbed.length; - if (global.tech["supercollider"] && global.race["warlord"]) { - let ratio = global.tech["tp_particles"] || global.tech["particles"] && global.tech["particles"] >= 3 ? 12.5 : 25; - gain *= global.tech["supercollider"] / ratio + 1; - } - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("portal_twisted_lab_title")] = gain + "v"; - } - if (global.resource.Omniscience.display) { - if (global.eden["research_station"]) { - let corruptor = 1; - if (global.race["warlord"] && global.eden["corruptor"]) { - corruptor = 1 + (p_on["corruptor"] || 0) * 0.04; - } - let gain = (support_on["research_station"] || 0) * Math.round(777 * corruptor); - caps["Omniscience"] += gain; - breakdown.c.Omniscience[loc("eden_research_station_title")] = gain + "v"; - } - if (global.race["warlord"] && global.portal["mortuary"] && global.portal["corpse_pile"]) { - let gain = global.portal.corpse_pile.count * (p_on["mortuary"] || 0) * (p_on["encampment"] || 0) * 2; - caps["Omniscience"] += gain; - breakdown.c.Omniscience[loc("eden_encampment_title")] = gain + "v"; - } else if (p_on["ascension_trigger"] && global.eden.hasOwnProperty("encampment") && global.eden.encampment.asc) { - let heatSink = actions.interstellar.int_sirius.ascension_trigger.heatSink(); - heatSink = heatSink < 0 ? Math.abs(heatSink) : 0; - let omniscience = +(150 + heatSink ** 0.95 / 10).toFixed(0); - let gain = (p_on["encampment"] || 0) * omniscience; - caps["Omniscience"] += gain; - breakdown.c.Omniscience[loc("eden_encampment_title")] = gain + "v"; - } - if (global.eden["archive"]) { - let gain = (p_on["archive"] || 0) * 1013; - caps["Omniscience"] += gain; - breakdown.c.Omniscience[loc("eden_archive_bd")] = gain + "v"; - } - } - if (global.tech["isolation"] && global.tauceti["alien_outpost"] && global.resource.Cipher.display) { - let cipher = 2e5; - caps["Cipher"] += cipher; - breakdown.c.Cipher[loc("tech_alien_outpost")] = cipher + "v"; - } - if (global.portal["archaeology"]) { - let sup = hellSupression("ruins"); - let value = 25e4; - if (global.race["high_pop"]) { - value = highPopAdjust(value); - } - let gain = Math.round(value * sup.supress); - caps["Knowledge"] += workerScale(global.civic.archaeologist.workers, "archaeologist") * gain; - breakdown.c.Knowledge[loc("portal_archaeology_bd")] = workerScale(global.civic.archaeologist.workers, "archaeologist") * gain + "v"; - } - if (p_on["embassy"] && global.galaxy["symposium"]) { - let dorm = 1750 * p_on["dormitory"]; - let gtrade = 650 * global.galaxy.trade.cur; - let leave = 0; - if (global.tech.xeno >= 7) { - for (let j = 0; j < galaxy_ship_types.length; j++) { - const area = galaxy_ship_types[j].area; - const region = galaxy_ship_types[j].region; - if (area !== "galaxy") { - continue; - } - let crew = 0; - for (const ship of gatewayArmada) { - crew += global.galaxy.defense[region][ship] * (actions[area]["gxy_gateway"][ship].ship.civ() + actions[area]["gxy_gateway"][ship].ship.mil()); - } - for (let i = 0; i < galaxy_ship_types[j].ships.length; i++) { - const ship = galaxy_ship_types[j].ships[i]; - if (!gatewayArmada.includes(ship) && actions[area][region][ship].hasOwnProperty("ship") && gal_on[ship]) { - crew += gal_on[ship] * (actions[area][region][ship].ship.civ() + actions[area][region][ship].ship.mil()); - } - } - if (region === "gxy_gorddon") { - leave += +highPopAdjust(crew).toFixed(2) * 300; - } else { - leave += +highPopAdjust(crew).toFixed(2) * 100 * piracy(region); - } - } - } - let pirate = piracy("gxy_gorddon"); - let know = (dorm + gtrade + leave) * pirate * p_on["symposium"]; - caps["Knowledge"] += know; - breakdown.c.Knowledge[loc("galaxy_symposium")] = know + "v"; - } - if (global.city["bank"] || global.race["cataclysm"] && p_on["spaceport"]) { - let vault = global.race["cataclysm"] || global.race["orbit_decayed"] ? bank_vault() * 4 : bank_vault(); - let banks = global.race["cataclysm"] || global.race["orbit_decayed"] ? p_on["spaceport"] : global.city["bank"].count; - let gain = banks * spatialReasoning(vault); - caps["Money"] += gain; - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - breakdown.c.Money[loc("space_red_spaceport_title")] = gain + "v"; - } else { - breakdown.c.Money[loc("city_bank")] = gain + "v"; - } - if (global.interstellar["exchange"]) { - if (global.eden["eternal_bank"]) { - banks += global.eden.eternal_bank.count * 2; - } - let g_vault = spatialReasoning(int_on["exchange"] * (vault * banks / 18)); - if (global.race["inflation"]) { - g_vault *= 2; - } - if (global.tech.banking >= 13) { - if (global.galaxy["freighter"]) { - g_vault *= 1 + gal_on["freighter"] * 0.03; - } - if (global.galaxy["super_freighter"]) { - g_vault *= 1 + gal_on["super_freighter"] * 0.08; - } - } - g_vault = Math.round(g_vault); - caps["Money"] += g_vault; - breakdown.c.Money[loc("interstellar_exchange_bd")] = g_vault + "v"; - } - } - if (global.eden["eternal_bank"]) { - let vault = bank_vault() * (global.race["warlord"] ? 20 : 10); - if (global.race["warlord"] && global.eden["corruptor"] && global.tech.asphodel >= 12) { - vault *= 1 + (p_on["corruptor"] || 0) * 0.08; - } - let banks = global.eden.eternal_bank.count; - let gain = banks * spatialReasoning(vault); - caps["Money"] += gain; - breakdown.c.Money[loc("eden_eternal_bank_title")] = gain + "v"; - } - if (global.space["titan_bank"]) { - let vault = bank_vault() * 2; - let banks = global.space.titan_bank.count; - let gain = banks * spatialReasoning(vault); - caps["Money"] += gain; - breakdown.c.Money[`${planetName().titan} ${loc("city_bank")}`] = gain + "v"; - } - if (global.tauceti["colony"] && global.tech["isolation"]) { - let vault = bank_vault() * 25; - let gain = global.tauceti.colony.count * spatialReasoning(vault); - caps["Money"] += gain; - breakdown.c.Money[loc("tau_home_colony")] = gain + "v"; - } - if (global.city["casino"] || global.space["spc_casino"] || global.tauceti["tauceti_casino"] || global.portal["hell_casino"]) { - let casinos = 0; - if (global.city["casino"] && global.city.casino.count > 0) { - casinos += global.city.casino.count; - } - if (global.space["spc_casino"] && global.space.spc_casino.count > 0) { - casinos += global.space.spc_casino.count; - } - if (global.tauceti["tauceti_casino"] && global.tauceti.tauceti_casino.count > 0) { - casinos += global.tauceti.tauceti_casino.count; - } - if (global.portal["hell_casino"] && global.portal.hell_casino.count > 0) { - casinos += global.portal.hell_casino.count; - } - let vault = casinos * casino_vault(); - caps["Money"] += vault; - breakdown.c.Money[structName("casino")] = vault + "v"; - } - if (global.galaxy["resort"]) { - let vault = p_on["resort"] * spatialReasoning(global.tech["world_control"] ? 1875e3 : 15e5); - caps["Money"] += vault; - breakdown.c.Money[loc("galaxy_resort")] = vault + "v"; - } - if (global.tech["banking"] >= 4) { - let cm = 250; - if (global.tech.banking >= 14) { - cm = 1e6; - } else if (global.tech.banking >= 11) { - cm = 1e3; - } else if (global.tech.banking >= 6) { - cm = 600; - } - let gain = cm * (global.resource[global.race.species].amount + global.civic.garrison.workers); - if (global.race["high_pop"]) { - gain = highPopAdjust(gain); - } - caps["Money"] += gain; - breakdown.c.Money[global.tech.banking >= 14 ? loc("tech_crypto_currency") : loc("tech_bonds")] = gain + "v"; - } - if (p_on["moon_base"]) { - let gain = p_on["moon_base"] * spatialReasoning(500); - caps["Iridium"] += gain; - breakdown.c.Iridium[loc("space_moon_base_title")] = gain + "v"; - } - if (p_on["space_station"]) { - lCaps["space_miner"] += jobScale(p_on["space_station"] * 3); - if (global.tech["asteroid"] >= 5) { - let gain = p_on["space_station"] * spatialReasoning(5); - caps["Elerium"] += gain; - breakdown.c.Elerium[loc("space_belt_station_title")] = gain + "v"; - } - } - if (support_on["exotic_lab"]) { - let el_gain = support_on["exotic_lab"] * spatialReasoning(10); - caps["Elerium"] += el_gain; - breakdown.c.Elerium[loc("space_red_exotic_lab_bd")] = el_gain + "v"; - let sci = 500; - if (global.tech["science"] >= 13 && global.interstellar["laboratory"]) { - sci += int_on["laboratory"] * 25; - } - if (global.tech["ancient_study"] && global.tech["ancient_study"] >= 2) { - sci += templeCount(true) * 15; - } - if (global.tech.mass >= 2) { - let brain = workerScale(global.civic.scientist.workers, "scientist"); - if (global.race["high_pop"]) { - brain = highPopAdjust(brain); - } - sci += p_on["mass_driver"] * brain; - } - if (global.race["cataclysm"] && support_on["observatory"]) { - sci *= 1 + support_on["observatory"] * 0.25; - } - if ((global.race["cataclysm"] || global.race["orbit_decayed"]) && global.portal["sensor_drone"] && global.tech["science"] >= 14) { - sci *= 1 + p_on["sensor_drone"] * 0.02; - } - if (global.tech["science"] >= 21) { - sci *= 1.45; - } - if (global.race["high_pop"]) { - sci = highPopAdjust(sci); - } - let gain = support_on["exotic_lab"] * workerScale(global.civic.colonist.workers, "colonist") * sci; - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("tech_exotic_bd")] = gain + "v"; - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - lCaps["scientist"] += jobScale(support_on["exotic_lab"]); - } - } - if (support_on["research_station"]) { - let attact = global.blood["attract"] ? global.blood.attract * 5 : 0; - let sci = 200 + attact; - if (global.tech["science"] && global.tech.science >= 22 && p_on["embassy"] && p_on["symposium"]) { - sci *= 1 + p_on["symposium"] * piracy("gxy_gorddon"); - } - let gain = support_on["research_station"] * highPopAdjust(global.civic.ghost_trapper.workers) * sci; - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("eden_research_station_title")] = gain + "v"; - } - if (global.tech["isolation"] && support_on["infectious_disease_lab"]) { - lCaps["professor"] += jobScale(support_on["infectious_disease_lab"] * 2); - lCaps["scientist"] += jobScale(support_on["infectious_disease_lab"]); - } - if (global.race["warlord"] && p_on["twisted_lab"]) { - lCaps["professor"] += jobScale(p_on["twisted_lab"] * 3); - lCaps["scientist"] += jobScale(p_on["twisted_lab"] * 2); - } - if (global.race["wish"] && global.race["wishStats"] && global.race.wishStats.prof) { - lCaps["scientist"] += jobScale(global.race.wishStats.prof); - } - if (support_on["decoder"]) { - let titan_colonists = p_on["ai_colonist"] ? workerScale(global.civic.titan_colonist.workers, "titan_colonist") + jobScale(p_on["ai_colonist"]) : workerScale(global.civic.titan_colonist.workers, "titan_colonist"); - let gain = support_on["decoder"] * titan_colonists * 2500; - if (global.race["high_pop"]) { - gain = highPopAdjust(gain); - } - if (p_on["ai_core2"]) { - gain *= 1.25; - } - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("space_decoder_title")] = gain + "v"; - } - if (p_on["elerium_contain"]) { - let el_gain = p_on["elerium_contain"] * spatialReasoning(100); - caps["Elerium"] += el_gain; - breakdown.c.Elerium[loc("space_dwarf_elerium_contain_title")] = el_gain + "v"; - } - if (p_on["elerium_containment"]) { - let el_gain = p_on["elerium_containment"] * spatialReasoning(1e3); - caps["Elerium"] += el_gain; - breakdown.c.Elerium[loc("eden_elerium_containment", [global.resource.Elerium.name])] = el_gain + "v"; - } - if (p_on["shadow_mine"]) { - let el_gain = p_on["shadow_mine"] * spatialReasoning(200); - caps["Elerium"] += el_gain; - breakdown.c.Elerium[loc("portal_shadow_mine_title")] = el_gain + "v"; - } - if (p_on["corruptor"]) { - let el_gain = p_on["corruptor"] * spatialReasoning(200); - caps["Elerium"] += el_gain; - breakdown.c.Elerium[loc("eden_corruptor_title")] = el_gain + "v"; - } - if (global.city["foundry"]) { - lCaps["craftsman"] += jobScale(global.city["foundry"].count); - } - if (support_on["fabrication"]) { - lCaps["craftsman"] += jobScale(support_on["fabrication"]); - if (global.race["cataclysm"]) { - lCaps["cement_worker"] += jobScale(support_on["fabrication"]); - } - } - if (global.tech["isolation"] && support_on["tau_factory"]) { - lCaps["craftsman"] += jobScale(support_on["tau_factory"] * 5); - lCaps["cement_worker"] += jobScale(support_on["tau_factory"] * 2); - } - if (global.race["warlord"] && p_on["hell_factory"]) { - lCaps["cement_worker"] += jobScale(p_on["hell_factory"] * 5); - } - if (p_on["womling_station"]) { - lCaps["craftsman"] += jobScale(p_on["womling_station"] * 1); - lCaps["cement_worker"] += jobScale(p_on["womling_station"] * 1); - } - if (p_on["stellar_forge"]) { - lCaps["craftsman"] += jobScale(p_on["stellar_forge"] * 2); - } - if (p_on["demon_forge"]) { - lCaps["craftsman"] += jobScale(p_on["demon_forge"] * actions.portal.prtl_wasteland.demon_forge.crafters()); - } - if (global.tech["elysium"] && global.tech.elysium >= 18 && p_on["sacred_smelter"]) { - lCaps["craftsman"] += jobScale(p_on["sacred_smelter"] * 3); - } - if (global.portal["carport"]) { - lCaps["hell_surveyor"] += jobScale(global.portal.carport.count) - global.portal.carport.damaged; - } - if (p_on["archaeology"]) { - lCaps["archaeologist"] += jobScale(p_on["archaeology"] * 2); - } - if (support_on["ectoplasm_processor"]) { - lCaps["ghost_trapper"] += jobScale(support_on["ectoplasm_processor"] * 5); - } - if (p_on["elysanite_mine"]) { - lCaps["elysium_miner"] += jobScale(p_on["elysanite_mine"] * 2); - } - if (p_on["nexus"]) { - let helium_gain = p_on["nexus"] * spatialReasoning(4e3); - caps["Helium_3"] += helium_gain; - breakdown.c.Helium_3[loc("interstellar_nexus_title")] = helium_gain + "v"; - let oil_gain = p_on["nexus"] * spatialReasoning(3500); - caps["Oil"] += oil_gain; - breakdown.c.Oil[loc("interstellar_nexus_title")] = oil_gain + "v"; - let deuterium_gain = p_on["nexus"] * spatialReasoning(3e3); - caps["Deuterium"] += deuterium_gain; - breakdown.c.Deuterium[loc("interstellar_nexus_title")] = deuterium_gain + "v"; - let elerium_gain = p_on["nexus"] * spatialReasoning(25); - caps["Elerium"] += elerium_gain; - breakdown.c.Elerium[loc("interstellar_nexus_title")] = elerium_gain + "v"; - } - if (p_on["s_gate"] && global.galaxy["gateway_station"]) { - let helium_gain = p_on["gateway_station"] * spatialReasoning(2e3); - caps["Helium_3"] += helium_gain; - breakdown.c.Helium_3[loc("galaxy_gateway_station")] = helium_gain + "v"; - let deuterium_gain = p_on["gateway_station"] * spatialReasoning(4500); - caps["Deuterium"] += deuterium_gain; - breakdown.c.Deuterium[loc("galaxy_gateway_station")] = deuterium_gain + "v"; - let gain = p_on["gateway_station"] * spatialReasoning(50); - caps["Elerium"] += gain; - breakdown.c.Elerium[loc("galaxy_gateway_station")] = gain + "v"; - } - if (p_on["s_gate"] && p_on["telemetry_beacon"]) { - let base_val = global.tech["telemetry"] ? 1200 : 800; - if (global.tech.science >= 17) { - base_val += gal_on["scout_ship"] * 25; - } - let gain = p_on["telemetry_beacon"] ** 2 * base_val; - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("galaxy_telemetry_beacon_bd")] = gain + "v"; - } - if (p_on["s_gate"] && gal_on["scavenger"]) { - let gain = gal_on["scavenger"] * Math.round(pirate_alien2 * 25e3); - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("galaxy_scavenger")] = gain + "v"; - } - if (global.eden["encampment"]) { - let powder = global.eden.encampment.count * spatialReasoning(250); - caps["Asphodel_Powder"] += powder; - breakdown.c.Asphodel_Powder[loc("eden_encampment_title")] = powder + "v"; - } - breakdown["t_route"] = {}; - global.city.market.mtrade = 0; - if (global.race["banana"]) { - global.city.market.mtrade++; - breakdown.t_route[loc("base")] = 1; - } - if (global.city["trade"]) { - let routes = global.race["nomadic"] || global.race["xenophobic"] ? global.tech.trade : global.tech.trade + 1; - if (global.tech["trade"] && global.tech["trade"] >= 3) { - routes--; - } - if (global.race["flier"]) { - routes += traits.flier.vars()[1]; - } - global.city.market.mtrade += routes * global.city.trade.count; - breakdown.t_route[loc("city_trade")] = routes * global.city.trade.count; - if (global.tech["fanaticism"] && global.tech["fanaticism"] >= 3) { - let r_count = faithTempleCount(); - global.city.market.mtrade += r_count; - breakdown.t_route[global.race["cataclysm"] ? loc("space_red_ziggurat_title") : structName("temple")] = r_count; - } - } - if (global.city["wharf"]) { - let r_count = global.city.wharf.count * 2; - global.city.market.mtrade += r_count; - breakdown.t_route[loc("city_wharf")] = r_count; - } - if (global.space["gps"] && global.space.gps.count >= 4) { - let r_count = global.space.gps.count * 2; - global.city.market.mtrade += global.space.gps.count * 2; - breakdown.t_route[loc("space_home_gps_title")] = r_count; - } - if (global.city["storage_yard"] && global.tech["trade"] && global.tech["trade"] >= 3) { - let r_count = global.city.storage_yard.count; - global.city.market.mtrade += r_count; - breakdown.t_route[loc("city_storage_yard")] = r_count; - } - if (global.portal["bazaar"] && global.portal["spire"]) { - let r_count = global.portal.bazaar.count * global.portal.spire.count; - global.city.market.mtrade += r_count; - breakdown.t_route[loc("portal_bazaar_title")] = r_count; - } - if (global.tech["railway"]) { - let routes = 0; - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - routes = global.space["gps"] ? Math.floor(global.space.gps.count / 3) : 0; - } else if (global.race["warlord"]) { - routes = 5; - } else { - routes = global.city["storage_yard"] ? Math.floor(global.city.storage_yard.count / 6) : 0; - } - if (global.stats.achieve["banana"] && global.stats.achieve.banana.l >= 2) { - routes++; - } - global.city.market.mtrade += global.tech["railway"] * routes; - breakdown.t_route[loc("arpa_projects_railway_title")] = global.tech["railway"] * routes; - } - if (p_on["titan_spaceport"]) { - let water = p_on["titan_spaceport"] * spatialReasoning(250); - caps["Water"] += water; - breakdown.c.Water[loc("space_red_spaceport_title")] = water + "v"; - } - if (global.tauceti["mining_pit"]) { - lCaps["pit_miner"] += jobScale(support_on["mining_pit"] * (global.tech["isolation"] ? 6 : 8)); - caps["Materials"] += support_on["mining_pit"] * 1e6; - } - if (global.civic.torturer.display && global.tech["unfathomable"] && global.tech.unfathomable >= 2) { - lCaps["torturer"] = global.city.captive_housing.count; - } - if (global.race["universe"] === "magic" && global.race["witch_hunter"]) { - let sus = 0; - if (global.city["wardenclyffe"]) { - let wiz = global.city.wardenclyffe.count; - wiz += p_on["wardenclyffe"]; - if (global.tech["roguemagic"] && global.tech.roguemagic >= 6) { - wiz /= 2; - } - breakdown.c.Sus[wardenLabel()] = wiz + "v"; - sus += wiz; - } - if (global.civic.scientist.workers > 0) { - let wiz = global.civic.scientist.workers; - if (global.civic.govern.type === "magocracy") { - wiz /= 2; - } - wiz = highPopAdjust(wiz); - breakdown.c.Sus[jobName("wizard")] = wiz + "v"; - sus += wiz; - } - if (global.city["coal_power"] && !global.race["environmentalist"]) { - let mana_engine = p_on["coal_power"]; - if (global.tech["roguemagic"] && global.tech.roguemagic >= 6) { - mana_engine /= 2; - } - breakdown.c.Sus[loc("city_mana_engine")] = mana_engine + "v"; - sus += mana_engine; - } - if (global.city["pylon"] || global.space["pylon"] || global.tauceti["pylon"]) { - let p_count = 0; - let name = "city_pylon"; - if ((global.race["cataclysm"] || global.race["orbit_decayed"]) && global.space["pylon"]) { - p_count = global.space.pylon.count; - name = "space_red_pylon"; - } else if (global.tech["isolation"] && global.tauceti["pylon"]) { - p_count = global.tauceti.pylon.count; - name = "tau_home_pylon"; - } else if (global.city["pylon"]) { - p_count = global.city.pylon.count; - } - if (global.tech["roguemagic"] && global.tech.roguemagic >= 5) { - p_count /= 3; - } - breakdown.c.Sus[loc(name)] = p_count + "v"; - sus += p_count; - } - if (global.race["casting"]) { - let ritual = global.race.casting.total; - if (global.tech["roguemagic"] && global.tech.roguemagic >= 2) { - if (global.tech.roguemagic >= 4) { - ritual /= 4; - } - ritual -= highPopAdjust(global.civic.priest.workers); - if (ritual < 0) { - ritual = 0; - } - } - breakdown.c.Sus[loc("tech_rituals")] = ritual + "v"; - sus += ritual; - } - if (global.race["totTransmute"] && global.race.totTransmute > 0) { - let transmute = global.race.totTransmute / 5; - breakdown.c.Sus[loc("tech_alchemy")] = transmute + "v"; - sus += transmute; - } - let mtech = 0; - if (global.tech["explosives"]) { - mtech += 4; - } - if (global.tech["military"]) { - if (global.tech.military >= 10) { - mtech += 28; - } else if (global.tech.military >= 9) { - mtech += 24; - } else if (global.tech.military >= 8) { - mtech += 20; - } else if (global.tech.military >= 7) { - mtech += 16; - } else if (global.tech.military >= 6) { - mtech += 12; - } else if (global.tech.military >= 4) { - mtech += 8; - } else if (global.tech.military >= 3) { - mtech += 4; - } - } - breakdown.c.Sus[loc("witch_hunter_magic_tech")] = mtech + "v"; - sus += mtech; - if (!global.tech["roguemagic"]) { - breakdown.c.Sus[loc("overt")] = sus * 5 - sus + "v"; - sus *= 5; - } - if (global.tech["nexus"]) { - let nexus = global.tech["nexus"] * 0.15; - breakdown.c.Sus[loc("arpa_projects_nexus_title")] = nexus + "v"; - sus += nexus; - } - if (global.tech["syphon"]) { - let syphon = global.tech["syphon"] * 2.5; - breakdown.c.Sus[loc("arpa_syphon_title")] = syphon + "v"; - sus += syphon; - } - if (global.portal.hasOwnProperty("soul_capacitor")) { - let capacitors = p_on["soul_capacitor"] || 0; - global.portal.soul_capacitor["ecap"] = 25e5 * capacitors; - breakdown.c.Sus[loc("portal_soul_capacitor_title")] = capacitors / 3 + "v"; - sus += capacitors / 3; - } - if (global.tech["roguemagic"] && global.tech.roguemagic >= 3 && global.city["conceal_ward"]) { - let wards = global.city.conceal_ward.count; - if (global.tech.roguemagic >= 8) { - wards *= 1.25; - } - breakdown.c.Sus[loc("city_conceal_ward")] = -wards + "v"; - sus -= wards; - } - if (sus < 0) { - sus = 0; - } - sus = Math.floor(sus); - global.resource.Sus.amount = sus; - if (sus >= 50 && !global.race["witch_hunter_warned"]) { - global.race["witch_hunter_warned"] = 1; - messageQueue(loc("witch_hunter_warning"), "danger", false, ["progress"]); - } else if (sus >= 80 && global.race["witch_hunter_warned"] && global.race.witch_hunter_warned === 1) { - global.race.witch_hunter_warned = 2; - messageQueue(loc("witch_hunter_warning2"), "danger", false, ["progress"]); - } - if (sus >= 100) { - global.civic.foreign.gov0.hstl = 100; - global.civic.foreign.gov1.hstl = 100; - global.civic.foreign.gov2.hstl = 100; - if (global.race["truepath"]) { - global.civic.foreign.gov3.hstl = 100; - } - } - } - breakdown["gt_route"] = {}; - if (global.galaxy["freighter"]) { - breakdown.gt_route[loc("galaxy_freighter")] = gal_on["freighter"] * 2; - } - if (global.galaxy["super_freighter"]) { - breakdown.gt_route[loc("galaxy_super_freighter")] = gal_on["super_freighter"] * 5; - } - if (global.galaxy["bolognium_ship"]) { - lCaps["crew"] += global.galaxy.bolognium_ship.on * actions.galaxy.gxy_gateway.bolognium_ship.ship.civ(); - } - if (global.galaxy["scout_ship"]) { - lCaps["crew"] += global.galaxy.scout_ship.on * actions.galaxy.gxy_gateway.scout_ship.ship.civ(); - } - if (global.galaxy["corvette_ship"]) { - lCaps["crew"] += global.galaxy.corvette_ship.on * actions.galaxy.gxy_gateway.corvette_ship.ship.civ(); - } - if (global.galaxy["frigate_ship"]) { - lCaps["crew"] += global.galaxy.frigate_ship.on * actions.galaxy.gxy_gateway.frigate_ship.ship.civ(); - } - if (global.galaxy["cruiser_ship"]) { - lCaps["crew"] += global.galaxy.cruiser_ship.on * actions.galaxy.gxy_gateway.cruiser_ship.ship.civ(); - } - if (global.galaxy["dreadnought"]) { - lCaps["crew"] += global.galaxy.dreadnought.on * actions.galaxy.gxy_gateway.dreadnought.ship.civ(); - } - if (global.galaxy["freighter"]) { - lCaps["crew"] += global.galaxy.freighter.on * actions.galaxy.gxy_gorddon.freighter.ship.civ(); - } - if (global.galaxy["super_freighter"]) { - lCaps["crew"] += global.galaxy.super_freighter.on * actions.galaxy.gxy_alien1.super_freighter.ship.civ(); - } - if (global.galaxy["armed_miner"]) { - lCaps["crew"] += global.galaxy.armed_miner.on * actions.galaxy.gxy_alien2.armed_miner.ship.civ(); - } - if (global.galaxy["scavenger"]) { - lCaps["crew"] += global.galaxy.scavenger.on * actions.galaxy.gxy_alien2.scavenger.ship.civ(); - } - if (global.portal["transport"]) { - lCaps["crew"] += global.portal.transport.on * actions.portal.prtl_lake.transport.ship.civ(); - } - if (global.tauceti["infectious_disease_lab"]) { - let gain = 39616; - if (global.tech["supercollider"] && global.tech["isolation"]) { - let ratio = global.tech["tp_particles"] || global.tech["particles"] && global.tech["particles"] >= 3 ? 12.5 : 25; - gain *= global.tech["supercollider"] / ratio + 1; - } - caps["Knowledge"] += p_on["infectious_disease_lab"] * Math.round(gain); - breakdown.c.Knowledge[actions.tauceti.tau_home.infectious_disease_lab.title()] = p_on["infectious_disease_lab"] * gain + "v"; - if (global.tech["isolation"]) { - let el_gain = support_on["infectious_disease_lab"] * spatialReasoning(375); - caps["Elerium"] += el_gain; - breakdown.c.Elerium[actions.tauceti.tau_home.infectious_disease_lab.title()] = el_gain + "v"; - } - } - if (global.race["truepath"] && global.tauceti["overseer"] && global.tech["tau_red"] && global.tech.tau_red >= 5) { - let pop = 0; - let injured = global.tauceti.overseer.injured; - let morale = 0; - let loyal = 0; - let prod = 0; - if (global.race["womling_friend"]) { - loyal += 25 + support_on["overseer"] * actions.tauceti.tau_red.overseer.val(); - morale += 75 + support_on["womling_fun"] * actions.tauceti.tau_red.womling_fun.val(); - } else if (global.race["womling_god"]) { - loyal += 75 + support_on["overseer"] * actions.tauceti.tau_red.overseer.val(); - morale += 40 + support_on["womling_fun"] * actions.tauceti.tau_red.womling_fun.val(); - } else if (global.race["womling_lord"]) { - loyal += support_on["overseer"] * actions.tauceti.tau_red.overseer.val(); - morale += 30 + support_on["womling_fun"] * actions.tauceti.tau_red.womling_fun.val(); - } - let vil_pop = global.tech["womling_pop"] && global.tech.womling_pop >= 2 ? 6 : 5; - pop = support_on["womling_village"] * vil_pop; - let farmers = support_on["womling_farm"] * 2; - if (farmers > pop) { - farmers = pop; - } - let crop_per_farmer = global.tech["womling_pop"] ? 8 : 6; - if (global.tech["womling_gene"]) { - crop_per_farmer += 2; - } - if (pop > farmers * crop_per_farmer) { - pop = farmers * crop_per_farmer; - } - let unemployed = pop - farmers - injured; - let scientist = 0; - if (support_on["womling_lab"]) { - scientist = support_on["womling_lab"]; - if (scientist > unemployed) { - scientist = unemployed; - } - unemployed -= scientist; - let gain = scientist * Math.round(25e3 * global.tauceti.overseer.prod / 100); - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("interstellar_laboratory_title")] = gain + "v"; - if (Math.rand(0, 10) < global.tauceti.womling_lab.scientist) { - global.tauceti.womling_lab.tech += Math.rand(0, global.tauceti.womling_lab.scientist + 1); - let expo = global.stats.achieve["overlord"] && global.stats.achieve.overlord.l >= 5 ? 4.9 : 5; - if (global.race["lone_survivor"]) { - expo -= 0.1; - } - if (global.tauceti.womling_lab.tech >= Math.round((global.tech.womling_tech + 2) ** expo)) { - global.tech.womling_tech++; - global.tauceti.womling_lab.tech = 0; - messageQueue(loc("tau_red_womling_advancement", [global.tech.womling_tech]), "advanced", false, ["progress"]); - drawTech(); - } - } - } - let miners = support_on["womling_mine"] * 6; - if (miners > unemployed) { - miners = unemployed; - } - unemployed -= miners; - let heal_chance = global.tech["tech_womling_firstaid"] ? 3 : 4; - if (Math.rand(0, 10) === 0) { - let raw = Math.rand(0, miners + scientist); - if (raw > injured) { - injured = raw; - } - } else if (injured > 0 && Math.rand(0, heal_chance) === 0) { - injured--; - } - if (global.tauceti.hasOwnProperty("womling_farm")) { - global.tauceti.womling_farm.farmers = farmers; - } - if (global.tauceti.hasOwnProperty("womling_mine")) { - global.tauceti.womling_mine.miners = miners; - } - if (global.tauceti.hasOwnProperty("womling_lab")) { - global.tauceti.womling_lab.scientist = scientist; - } - loyal -= miners; - morale -= miners; - morale -= farmers; - morale -= injured; - if (loyal > 100) { - loyal = 100; - } else if (loyal < 0) { - loyal = 0; - } - if (morale > 100) { - morale = 100; - } else if (morale < 0) { - morale = 0; - } - prod = Math.round((loyal + morale) / 2); - global.tauceti.overseer.loyal = loyal; - global.tauceti.overseer.morale = morale; - global.tauceti.overseer.pop = pop; - global.tauceti.overseer.working = farmers + miners + scientist; - global.tauceti.overseer.injured = injured; - global.tauceti.overseer.prod = prod; - } - ["inspired", "distracted", "stimulated", "motivated"].forEach(function(t) { - if (global.race[t]) { - global.race[t]--; - if (global.race[t] <= 0) { - delete global.race[t]; - } - } - }); - let pop_loss = global.resource[global.race.species].amount - caps[global.race.species]; - if (pop_loss > 0) { - if (global.race["orbit_decayed"] && global.stats.days === global.race["orbit_decay"]) { - messageQueue(loc("tragic_death", [pop_loss]), "danger"); - } else { - messageQueue(loc(pop_loss === 1 ? "abandon1" : "abandon2", [pop_loss]), "danger"); - global.civic.homeless += pop_loss; - } - } - if (p_on["world_controller"]) { - let boost = 0.25; - if (global.interstellar["far_reach"] && p_on["far_reach"] > 0) { - boost += p_on["far_reach"] * 0.01; - } - if (global.tech.science >= 19) { - boost += 0.15; - } - let gain = Math.round(caps["Knowledge"] * boost); - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("space_dwarf_collider_title")] = gain + "v"; - } - if (p_on["alien_outpost"]) { - let iso = 0; - if (global.tech["isolation"]) { - iso = global.race["lone_survivor"] ? 35e5 : 65e5; - caps["Knowledge"] += iso; - } - let boost = 0.2; - let gain = Math.round(caps["Knowledge"] * boost); - caps["Knowledge"] += gain; - breakdown.c.Knowledge[loc("tech_alien_outpost")] = gain + iso + "v"; - } - if (global.eden["fortress"] && global.tech.hasOwnProperty("celestial_warfare")) { - let warefare_bonus = global.tech.celestial_warfare * 10; - if (warefare_bonus > 30) { - warefare_bonus = 30; - } - global.eden.fortress.detector = 100 - warefare_bonus; - if (support_on["bunker"] && global.tech.celestial_warfare >= 4) { - global.eden.fortress.detector -= support_on["bunker"] * 3; - if (global.eden.fortress.detector < 0) { - global.eden.fortress.detector = 0; - } - } - } - let tempCrates = caps["Crates"], tempContainers = caps["Containers"]; - Object.keys(caps).forEach(function(res) { - caps["Crates"] -= global.resource[res].crates; - }); - Object.keys(caps).forEach(function(res) { - caps["Containers"] -= global.resource[res].containers; - }); - if (caps["Crates"] < 0) { - let diff = 0 - caps["Crates"]; - Object.keys(caps).forEach(function(res) { - if (diff > 0) { - let subAmount = global.resource[res].crates; - if (subAmount > diff) { - subAmount = diff; - } - caps["Crates"] += subAmount; - global.resource[res].crates -= subAmount; - diff -= subAmount; - } - }); - } - if (caps["Containers"] < 0) { - let diff = 0 - caps["Containers"]; - Object.keys(caps).forEach(function(res) { - if (diff > 0) { - let subAmount = global.resource[res].containers; - if (subAmount > diff) { - subAmount = diff; - } - caps["Containers"] += subAmount; - global.resource[res].containers -= subAmount; - diff -= subAmount; - } - }); - } - breakdown.c.Crates[loc("crates_used")] = caps["Crates"] - tempCrates + "v"; - breakdown.c.Containers[loc("crates_used")] = caps["Containers"] - tempContainers + "v"; - let create_value = crateValue(); - let container_value = containerValue(); - Object.keys(caps).forEach(function(res) { - let crate = global.resource[res].crates * create_value; - caps[res] += crate; - let container = global.resource[res].containers * container_value; - caps[res] += container; - if (breakdown.c[res]) { - breakdown.c[res][loc("resource_Crates_plural")] = crate + "v"; - breakdown.c[res][loc("resource_Containers_plural")] = container + "v"; - } - global.resource[res].max = caps[res]; - if (global.resource[res].amount > global.resource[res].max && res != "Sus") { - global.resource[res].amount = global.resource[res].max; - } else if (global.resource[res].amount < 0) { - } - if (global.resource[res].amount >= global.resource[res].max * 0.99) { - if (!$(`#res${res} .count`).hasClass("has-text-warning")) { - $(`#res${res} .count`).addClass("has-text-warning"); - } - } else if ($(`#res${res} .count`).hasClass("has-text-warning")) { - $(`#res${res} .count`).removeClass("has-text-warning"); - } - }); - let unlock_servants = false; - let total_servants = 0; - let not_scavanger_jobs_avail = 0; - Object.keys(lCaps).forEach(function(job) { - if (global.civic[job].max === -1 && global.civic[job].display && job !== "unemployed" && job !== "scavenger") { - not_scavanger_jobs_avail++; - } - }); - ["Scarletite", "Quantium"].forEach(function(res) { - limitCraftsmen(res); - }); - Object.keys(lCaps).forEach(function(job) { - global.civic[job].max = lCaps[job]; - if (global.civic[job].workers > global.civic[job].max && global.civic[job].max !== -1) { - global.civic[job].workers = global.civic[job].max; - } else if (!global.civic[job].display || global.civic[job].workers < 0) { - global.civic[job].workers = 0; - } - if (global.race["servants"]) { - if (global.civic[job].max === -1 && !global.race.servants.jobs.hasOwnProperty(job)) { - global.race.servants.jobs[job] = 0; - unlock_servants = true; - } - if (global.race.servants.jobs.hasOwnProperty(job)) { - if (!global.civic[job].display && (job !== "scavenger" || not_scavanger_jobs_avail > 0)) { - global.race.servants.jobs[job] = 0; - } else { - total_servants += global.race.servants.jobs[job]; - } - if (total_servants > global.race.servants.max && global.race.servants.jobs[job] > 0) { - global.race.servants.jobs[job]--; - total_servants--; - } - } - } - }); - if (unlock_servants) { - loadServants(); - } else if (global.race["servants"]) { - global.race.servants["force_scavenger"] = not_scavanger_jobs_avail === 0 ? true : false; - global.race.servants.used = total_servants; - } - if (global.race["servants"] && global.race.servants.hasOwnProperty("smax") && global.race.servants.smax > 0) { - let used = 0; - Object.keys(global.race.servants.sjobs).forEach(function(res) { - if (!global.resource[res].display) { - global.race.servants.sjobs[res] = 0; - } - used += global.race.servants.sjobs[res]; - if (used > global.race.servants.smax) { - global.race.servants.sjobs[res] -= used - global.race.servants.smax; - } - if (global.race.servants.sjobs[res] < 0) { - global.race.servants.sjobs[res] = 0; - } - }); - global.race.servants.sused = used; - } - if (global.race["gravity_well"]) { - let teamster2 = 0; - [ - "hunter", - "forager", - "farmer", - "lumberjack", - "quarry_worker", - "crystal_miner", - "scavenger", - "miner", - "coal_miner", - "craftsman", - "cement_worker", - "space_miner", - "hell_surveyor", - "pit_miner" - ].forEach(function(job) { - teamster2 += global.civic[job].workers; - if (global.race["servants"] && global.race.servants.jobs[job]) { - teamster2 += global.race.servants.jobs[job]; - } - }); - if (global.city["oil_well"]) { - teamster2 += global.city.oil_well.count * (global.tech["teamster"] && global.tech.teamster >= 3 ? 0 : 2); - } - if (global.city["factory"] && p_on["factory"]) { - teamster2 += p_on["factory"] * 2; - } - if (global.space["red_factory"] && p_on["red_factory"]) { - teamster2 += p_on["red_factory"] * 2; - } - if (global.space["moon_base"] && support_on["iridium_mine"]) { - teamster2 += support_on["iridium_mine"] * 2; - } - if (global.space["moon_base"] && support_on["helium_mine"]) { - teamster2 += support_on["helium_mine"]; - } - if (global.tech["mars"] && support_on["red_mine"]) { - teamster2 += support_on["red_mine"] * 3; - } - if (p_on["outpost"]) { - teamster2 += p_on["outpost"] * 3; - } - if (global.race["servants"] && global.race.servants.hasOwnProperty("smax") && global.race.servants.smax > 0) { - teamster2 += global.race.servants.sused; - } - global.race["teamster"] = teamster2; - } - if (global.civic.space_miner.display && global.space["space_station"]) { - global.space.space_station.s_max = workerScale(global.civic.space_miner.workers, "space_miner"); - } - if (global.portal.hasOwnProperty("transport")) { - let max = 0; - if (gal_on["transport"]) { - max = gal_on["transport"] * (global.stats.achieve["what_is_best"] && global.stats.achieve.what_is_best.e >= 4 ? 8 : 5); - } - global.portal.transport.cargo.max = max; - } - if (global.portal.hasOwnProperty("purifier")) { - let max = 100; - let port_value = 1e4; - if (spire_on["base_camp"]) { - port_value *= 1 + spire_on["base_camp"] * 0.4; - } - if (spire_on["port"]) { - max += spire_on["port"] * port_value; - } - global.portal.purifier.sup_max = Math.round(max); - } - let espEnd = global.race["truepath"] ? 5 : 3; - let spyCatchMod = global.race["blurry"] ? 2 : 0; - let yetiFathom = fathomCheck("yeti"); - if (yetiFathom >= 0.25) { - spyCatchMod += yetiFathom >= 0.5 ? 2 : 1; - } - for (let i = 0; i < espEnd; i++) { - if (global.civic.foreign[`gov${i}`].trn > 0) { - global.civic.foreign[`gov${i}`].trn--; - if (global.civic.foreign[`gov${i}`].trn === 0) { - global.civic.foreign[`gov${i}`].spy++; - } - } - if (global.civic.foreign[`gov${i}`].sab > 0) { - global.civic.foreign[`gov${i}`].sab--; - if (global.civic.foreign[`gov${i}`].sab === 0) { - switch (global.civic.foreign[`gov${i}`].act) { - case "influence": - if (Math.floor(seededRandom(0, 4 + spyCatchMod)) === 0) { - spyCaught(i); - } else { - let covert = Math.floor(seededRandom(global.tech["spy"] >= 5 ? 2 : 1, global.tech["spy"] >= 5 ? 8 : 6)); - if (astroSign2 === "scorpio") { - covert += astroVal2("scorpio")[1]; - } - global.civic.foreign[`gov${i}`].hstl -= covert; - if (global.civic.foreign[`gov${i}`].hstl < 0) { - global.civic.foreign[`gov${i}`].hstl = 0; - } - messageQueue(loc("civics_spy_influence_success", [govTitle(i), covert]), "success", false, ["spy"]); - } - break; - case "sabotage": - if (Math.floor(seededRandom(0, 3 + spyCatchMod)) === 0) { - spyCaught(i); - } else { - let covert = Math.floor(seededRandom(global.tech["spy"] >= 5 ? 2 : 1, global.tech["spy"] >= 5 ? 8 : 6)); - if (astroSign2 === "scorpio") { - covert += astroVal2("scorpio")[1]; - } - global.civic.foreign[`gov${i}`].mil -= covert; - if (global.civic.foreign[`gov${i}`].mil < 50) { - global.civic.foreign[`gov${i}`].mil = 50; - } - messageQueue(loc("civics_spy_sabotage_success", [govTitle(i), covert]), "success", false, ["spy"]); - } - break; - case "incite": - if (Math.floor(seededRandom(0, 2 + Math.floor(spyCatchMod / 2))) === 0) { - spyCaught(i); - } else { - let covert = Math.floor(seededRandom(global.tech["spy"] >= 5 ? 2 : 1, global.tech["spy"] >= 5 ? 8 : 6)); - if (astroSign2 === "scorpio") { - covert += astroVal2("scorpio")[1]; - } - global.civic.foreign[`gov${i}`].unrest += covert; - if (global.civic.foreign[`gov${i}`].unrest > 100) { - global.civic.foreign[`gov${i}`].unrest = 100; - } - messageQueue(loc("civics_spy_incite_success", [govTitle(i), covert]), "success", false, ["spy"]); - } - break; - case "annex": - if (i >= 3) { - break; - } - let drawTechs = !global.tech["gov_fed"] && !checkControlling(); - global.civic.foreign[`gov${i}`].anx = true; - messageQueue(loc("civics_spy_annex_success", [govTitle(i)]), "success", false, ["spy"]); - if (drawTechs) { - drawTech(); - } - break; - case "purchase": - if (i >= 3) { - break; - } - let drawTechsAlt = !global.tech["gov_fed"] && !checkControlling(); - global.civic.foreign[`gov${i}`].buy = true; - messageQueue(loc("civics_spy_purchase_success", [govTitle(i)]), "success", false, ["spy"]); - if (drawTechsAlt) { - drawTech(); - } - break; - } - } - } - } - if (global.race["banana"]) { - let exporting = false; - let importing = 0; - Object.keys(global.resource).forEach(function(res) { - if (global.resource[res].hasOwnProperty("trade") && global.resource[res].trade < 0) { - if (exporting) { - global.resource[res].trade = 0; - } else { - exporting = res; - } - } - if (global.resource[res].hasOwnProperty("trade") && global.resource[res].trade > 0) { - importing += global.resource[res].trade; - } - }); - if (global.resource[exporting] && global.resource[exporting].trade <= -500) { - let affix = universeAffix(); - global.stats.banana.b4[affix] = true; - if (affix !== "m" && affix !== "l") { - global.stats.banana.b4.l = true; - } - if (importing >= 500) { - unlockFeat("banana"); - } - } - } - if (global.galaxy["defense"]) { - for (let i = gatewayArmada.length - 1; i >= 0; i--) { - let ship = gatewayArmada[i]; - let count = 0; - for (let j = galaxyRegions.length - 1; j >= 0; j--) { - let region = galaxyRegions[j]; - if (global.galaxy.defense.hasOwnProperty(region)) { - count += global.galaxy.defense[region][ship]; - if (isNaN(global.galaxy.defense[region][ship])) { - global.galaxy.defense[region][ship] = 0; - } - if (count > gal_on[ship]) { - let overflow = count - gal_on[ship]; - global.galaxy.defense[region][ship] -= overflow; - } - if (global.galaxy.defense[region][ship] < 0) { - global.galaxy.defense[region][ship] = 0; - } - } - } - if (count < gal_on[ship]) { - let underflow = gal_on[ship] - count; - global.galaxy.defense.gxy_gateway[ship] += underflow; - } - } - } - let cityList = Object.keys(global.city); - if (global.race["hooved"]) { - cityList.push("horseshoe"); - } - if (global.tech["slaves"] && global.tech["slaves"] >= 2) { - cityList.push("slave_market"); - } - cityList.forEach(function(action) { - if (actions.city[action] && actions.city[action].cost) { - let c_action = actions.city[action]; - let element = $("#" + c_action.id); - if (element.length > 0) { - if (checkAffordable(c_action, true)) { - if (element.hasClass("cnam")) { - element.removeClass("cnam"); - } - if (checkAffordable(c_action)) { - if (element.hasClass("cna")) { - element.removeClass("cna"); - } - } else if (!element.hasClass("cna")) { - element.addClass("cna"); - } - } else { - if (!element.hasClass("cnam")) { - element.addClass("cnam"); - } - if (!element.hasClass("cna")) { - element.addClass("cna"); - } - } - } - if (global.city[action]) { - let tc = timeCheck(c_action, false, true); - global.city[action]["time"] = timeFormat(tc.t); - global.city[action]["bn"] = tc.r; - } - } - }); - Object.keys(actions.tech).forEach(function(action) { - if (actions.tech[action] && actions.tech[action].cost) { - let c_action = actions.tech[action]; - let element = $("#" + c_action.id); - if (element.length > 0) { - if (checkAffordable(c_action, true)) { - if (element.hasClass("cnam")) { - element.removeClass("cnam"); - } - if (checkAffordable(c_action)) { - if (element.hasClass("cna")) { - element.removeClass("cna"); - } - } else if (!element.hasClass("cna")) { - element.addClass("cna"); - } - } else { - if (!element.hasClass("cnam")) { - element.addClass("cnam"); - } - if (!element.hasClass("cna")) { - element.addClass("cna"); - } - } - } - } - }); - let spc_locations = ["space", "interstellar", "galaxy", "portal", "tauceti", "eden"]; - for (let i = 0; i < spc_locations.length; i++) { - let location = spc_locations[i]; - Object.keys(actions[location]).forEach(function(region) { - Object.keys(actions[location][region]).forEach(function(action) { - let s_region = actions[location][region][action] && actions[location][region][action].hasOwnProperty("region") ? actions[location][region][action].region : location; - if ((global[s_region][action] || actions[location][region][action].grant) && actions[location][region][action] && actions[location][region][action].cost) { - let c_action = actions[location][region][action]; - let element = $("#" + c_action.id); - if (element.length > 0) { - if (checkAffordable(c_action, true)) { - if (element.hasClass("cnam")) { - element.removeClass("cnam"); - } - if (checkAffordable(c_action)) { - if (element.hasClass("cna")) { - element.removeClass("cna"); - } - } else if (!element.hasClass("cna")) { - element.addClass("cna"); - } - } else { - if (!element.hasClass("cnam")) { - element.addClass("cnam"); - } - if (!element.hasClass("cna")) { - element.addClass("cna"); - } - } - } - if (global[s_region][action]) { - global[s_region][action]["time"] = timeFormat(timeCheck(c_action)); - } - } - }); - }); - } - if (global.space["swarm_control"]) { - global.space.swarm_control.s_max = global.space.swarm_control.count * actions.space.spc_sun.swarm_control.support(); - } - if (global.arpa["sequence"] && global.arpa.sequence.on && gene_sequence) { - let labs = sequenceLabs(); - global.arpa.sequence.labs = labs; - global.arpa.sequence.time -= global.arpa.sequence.boost ? labs * 2 : labs; - global.arpa.sequence.progress = global.arpa.sequence.max - global.arpa.sequence.time; - if (global.arpa.sequence.time <= 0) { - global.arpa.sequence.max = 5e4 * (1 + global.race.mutation ** 2); - if (global.race["adaptable"]) { - let adapt = 1 - traits.adaptable.vars()[0] / 100; - global.arpa.sequence.max = Math.floor(global.arpa.sequence.max * adapt); - } - global.arpa.sequence.progress = 0; - global.arpa.sequence.time = global.arpa.sequence.max; - if (global.tech["genetics"] === 2) { - messageQueue(loc("genome", [flib("name")]), "success", false, ["progress"]); - global.tech["genetics"] = 3; - } else { - global.race.mutation++; - let trait = randomMinorTrait(1); - let gene_multi = 1 + (global.genes["synthesis"] ? global.genes["synthesis"] : 0); - let gene = 2 ** (global.race.mutation - 1) * gene_multi; - if (global.stats.achieve["creator"]) { - gene = Math.round(gene * (1 + global.stats.achieve["creator"].l * 0.5)); - } - global.resource.Genes.amount += gene; - global.resource.Genes.display = true; - let plasma = global.genes["plasma"] ? global.race.mutation : 1; - if (global.genes["plasma"] && plasma > 3) { - if (global.genes["plasma"] >= 2) { - plasma = plasma > 5 ? 5 : plasma; - } else { - plasma = 3; - } - } - let plasmid_type = plasma > 1 ? "_plural" : ""; - if (global.race["universe"] === "antimatter") { - plasmid_type = loc("resource_AntiPlasmid" + plasmid_type + "_name"); - global.stats.antiplasmid += plasma; - global.prestige.AntiPlasmid.count += plasma; - unlockAchieve("cross"); - } else { - plasmid_type = loc("resource_Plasmid" + plasmid_type + "_name"); - global.stats.plasmid += plasma; - global.prestige.Plasmid.count += plasma; - } - arpa("Crispr"); - messageQueue(loc("gene_therapy", [loc("trait_" + trait + "_name"), gene, plasma, plasmid_type]), "success", false, ["progress"]); - } - arpa("Genetics"); - drawTech(); - } - } - if (global.city["foundry"]) { - let fworkers = global.civic.craftsman.workers; - if ((global.race["kindling_kindred"] || global.race["smoldering"]) && global.city.foundry["Plywood"] > 0) { - global.civic.craftsman.workers -= global.city.foundry["Plywood"]; - global.city.foundry.crafting -= global.city.foundry["Plywood"]; - global.city.foundry["Plywood"] = 0; - } - let craft_costs = craftCost(); - Object.keys(craft_costs).forEach(function(craft) { - while (global.city.foundry[craft] > fworkers && global.city.foundry[craft] > 0) { - global.city.foundry[craft]--; - global.city.foundry.crafting--; - } - fworkers -= global.city.foundry[craft]; - }); - } - if (global.tech["foundry"] === 3 && (global.race["kindling_kindred"] || global.race["smoldering"])) { - global.tech["foundry"] = 4; - drawTech(); - } - if (global.race["kindling_kindred"] || global.race["smoldering"]) { - global.civic.lumberjack.workers = 0; - global.civic.lumberjack.assigned = 0; - global.resource.Lumber.crates = 0; - global.resource.Lumber.containers = 0; - global.resource.Lumber.trade = 0; - } - if ((global.race["kindling_kindred"] || global.race["smoldering"]) && global.city["foundry"] && global.city.foundry["Plywood"]) { - global.city.foundry["Plywood"] = 0; - } - if (eventActive("fool", 2023) && !global.race["hooved"]) { - global.resource.Horseshoe.display = true; - } else if (!global.race["hooved"]) { - global.resource.Horseshoe.display = false; - } - set_qlevel(calcQuantumLevel(false)); - let belt_mining = support_on["iron_ship"] + support_on["iridium_ship"]; - if (belt_mining > 0 && global.tech["asteroid"] && global.tech["asteroid"] === 3) { - if (Math.rand(0, 250) <= belt_mining) { - global.tech["asteroid"] = 4; - global.resource.Elerium.display = true; - modRes("Elerium", 1, true); - drawTech(); - messageQueue(loc("discover_elerium"), "info", false, ["progress"]); - } - } - if (global.tech["asteroid"] && global.tech.asteroid === 4 && global.resource.Elerium.amount === 0) { - modRes("Elerium", 1, true); - } - if (p_on["outpost"] > 0 && global.tech["gas_moon"] && global.tech["gas_moon"] === 1) { - if (Math.rand(0, 100) <= p_on["outpost"]) { - initStruct(actions.space.spc_gas_moon.oil_extractor); - global.tech["gas_moon"] = 2; - messageQueue(loc("discover_oil", [planetName().gas_moon]), "info", false, ["progress"]); - renderSpace(); - } - } - if (global.portal.hasOwnProperty("mechbay") && global.tech["hell_spire"] && global.tech.hell_spire >= 9) { - if (!global.portal.spire["boss"]) { - genSpireFloor(); - } - updateMechbay(); - if (global.portal.hasOwnProperty("spire") && global.portal.spire.count >= 50 && !global.tech["edenic"] && Object.keys(global.pillars).length >= 10) { - messageQueue(loc("eden_purify_well_msg", [50]), "info", false, ["progress"]); - global.tech["edenic"] = 1; - drawTech(); - } - let progress = 0; - let mechSkips = global.eden["mech_station"] ? global.eden.mech_station.mechs : 0; - for (let i = 0; i < global.portal.mechbay.active; i++) { - let mech = global.portal.mechbay.mechs[i]; - if (mechSkips > 0 && mech.size !== "collector") { - mechSkips--; - } else { - if (global.portal.hasOwnProperty("waygate") && global.tech.hasOwnProperty("waygate") && global.portal.waygate.on === 1 && global.tech.waygate >= 2 && global.portal.waygate.progress < 100) { - progress += mechRating(mech, true); - } else { - progress += mechRating(mech, false); - } - } - } - if (global.portal.hasOwnProperty("waygate") && global.tech.hasOwnProperty("waygate") && global.portal.waygate.on === 1 && global.tech.waygate >= 2 && global.portal.waygate.progress < 100) { - global.portal.waygate.progress += progress; - global.portal.waygate.time = progress === 0 ? timeFormat(-1) : timeFormat((100 - global.portal.waygate.progress) / progress); - global.portal.spire.time = timeFormat(-1); - } else { - global.portal.spire.progress += progress; - global.portal.spire.time = progress === 0 ? timeFormat(-1) : timeFormat((100 - global.portal.spire.progress) / progress); - if (global.tech["waygate"] && global.tech.waygate >= 2) { - global.portal.waygate.time = timeFormat(-1); - } - } - if (global.portal.hasOwnProperty("waygate") && global.portal.waygate.on === 1 && global.portal.waygate.progress >= 100) { - global.portal.waygate.progress = 100; - global.portal.waygate.on = 0; - global.tech.waygate = 3; - global.resource.Demonic_Essence.display = true; - global.resource.Demonic_Essence.amount = 1; - drawTech(); - } - if (global.portal.spire.progress >= 100) { - global.portal.spire.progress = 0; - let rank = Number(alevel()); - let stones = rank; - if (global.genes["blood"] && global.genes["blood"] >= 2) { - stones *= 2; - } - global.prestige.Blood_Stone.count += stones; - global.stats.blood += stones; - arpa("Blood"); - if (!global.tech.hasOwnProperty("b_stone")) { - global.tech["b_stone"] = 1; - drawTech(); - } - messageQueue( - `${loc("portal_spire_conquest", [loc(`portal_mech_boss_${global.portal.spire.boss}`), global.portal.spire.count])} ${loc(stones === 1 ? "portal_spire_conquest_stone" : "portal_spire_conquest_stones", [stones])}`, - "info", - false, - ["progress", "hell"] - ); - global.portal.spire.count++; - if (global.portal.spire.count > 10 && global.tech["hell_spire"] && global.tech.hell_spire < 10) { - global.tech["hell_spire"] = 10; - drawTech(); - } - let affix = universeAffix(); - if (!global.stats.spire.hasOwnProperty(affix)) { - global.stats.spire[affix] = { s0: 0, s1: 0, s2: 0, s3: 0, s4: 0 }; - } - if (global.portal.spire.count > global.stats.spire[affix][`s${rank - 1}`]) { - global.stats.spire[affix][`s${rank - 1}`] = global.portal.spire.count; - } - if (!global.stats.spire[affix].hasOwnProperty(global.portal.spire.boss) || rank > global.stats.spire[affix][global.portal.spire.boss]) { - global.stats.spire[affix][global.portal.spire.boss] = rank; - } - if (global.portal.spire.boss === "djinni" && global.race.species === "djinn" || global.portal.spire.boss === global.race.species) { - unlockAchieve("doppelganger"); - } - genSpireFloor(); - renderFortress(); - } - } - if (global.race["fasting"] && global.portal["oven_complete"]) { - let progress = 0; - if (p_on["oven_complete"]) { - progress = 25e-5; - if (global.portal["dish_life_infuser"] && global.portal["dish_life_infuser"].on) { - progress *= 1 + 0.15 * global.portal["dish_life_infuser"].on; - } - if (global.portal["dish_soul_steeper"] && global.portal["dish_soul_steeper"].on && global.portal["spire"]) { - let hunger = 0.5; - if (global.race["angry"]) { - hunger -= traits.angry.vars()[0] / 100; - } - if (global.race["malnutrition"]) { - hunger += traits.malnutrition.vars()[0] / 100; - } - let mult = 0.03 + (global.race["malnutrition"] ? 0.01 : 0) + (global.race["angry"] ? -0.01 : 0); - let working = Math.min(global.portal["dish_soul_steeper"].on, Math.floor(hunger / mult)); - progress *= 1 + 0.05 * (global.portal["spire"].count - 1) * working; - } - global.portal["devilish_dish"].done += progress; - global.portal["devilish_dish"].done = Math.min(global.portal["devilish_dish"].done, 100); - global.portal["devilish_dish"].count = Math.floor(global.portal["devilish_dish"].done); - if (global.portal["devilish_dish"].done >= 0.05 && global.tech["dish"] === 3) { - messageQueue(loc("dish_progress"), "info", false, ["progress"]); - global.tech["dish"] = 4; - drawTech(); - } - } - global.portal["devilish_dish"].time = progress === 0 ? timeFormat(-1) : timeFormat((100 - global.portal["devilish_dish"].done) / progress); - } - if (global.tech["asphodel"] && global.tech.asphodel === 4 && Math.rand(0, 25) === 0) { - global.tech["asphodel"] = 5; - drawTech(); - messageQueue(loc("eden_asphodel_hostile"), "info", false, ["progress"]); - } - if (global.race["cannibalize"] && global.city["s_alter"]) { - if (global.city.s_alter.rage > 0) { - global.city.s_alter.rage--; - } - if (global.city.s_alter.regen > 0) { - global.city.s_alter.regen--; - } - if (global.city.s_alter.mind > 0) { - global.city.s_alter.mind--; - } - if (global.city.s_alter.mine > 0) { - global.city.s_alter.mine--; - } - if (global.city.s_alter.harvest > 0) { - global.city.s_alter.harvest--; - } - if ($(`#popper[data-id="city-s_alter"]`).length > 0) { - updateDesc(actions.city.s_alter, "city", "s_alter"); - } - } - if (global.race["casting"]) { - let total = 0; - ritual_types.forEach(function(spell) { - if (global.race.casting[spell]) { - total += global.race.casting[spell]; - } - }); - global.race.casting.total = total; - } - let blockGeneBuffer = false; - if (global.tech["r_queue"] && global.r_queue.display) { - let idx = -1; - let c_action = false; - let stop = false; - let time = 0; - let untime = 0; - let spent = { t: { t: 0, rt: 0 }, r: {}, rr: {}, id: {} }; - for (let i = 0; i < global.r_queue.queue.length; i++) { - let struct = global.r_queue.queue[i]; - let t_action = actions[struct.action][struct.type]; - time = global.settings.qAny_res ? 0 : time; - untime = global.settings.qAny_res ? 0 : untime; - if (t_action["grant"] && global.tech[t_action.grant[0]] && global.tech[t_action.grant[0]] >= t_action.grant[1]) { - global.r_queue.queue.splice(i, 1); - clearPopper(`rq${c_action.id}`); - break; - } else { - if (checkAffordable(t_action, true)) { - global.r_queue.queue[i].cna = false; - let reqMet = checkTechRequirements(struct.type, false); - let t_time = global.settings.qAny_res ? timeCheck(t_action) : timeCheck(t_action, spent, false, reqMet); - if (t_time >= 0) { - if (!stop && checkAffordable(t_action) && reqMet) { - c_action = t_action; - idx = i; - if (global.settings.qAny_res) { - stop = true; - } - } else { - if (reqMet) { - if (!stop && t_time <= 1) { - blockGeneBuffer = true; - } - time += t_time; - } - untime += t_time; - } - if (!global.settings.qAny_res && reqMet) { - stop = true; - } - global.r_queue.queue[i]["time"] = reqMet ? time : untime; - } else { - global.r_queue.queue[i]["time"] = t_time; - } - global.r_queue.queue[i]["req"] = reqMet ? true : false; - } else { - global.r_queue.queue[i].cna = true; - global.r_queue.queue[i]["time"] = -1; - } - } - global.r_queue.queue[i].qa = global.settings.qAny_res ? true : false; - } - if (idx >= 0 && c_action && !global.r_queue.pause) { - if (c_action.action({ isQueue: true })) { - messageQueue(loc("research_success", [global.r_queue.queue[idx].label]), "success", false, ["queue", "research_queue"]); - gainTech(global.r_queue.queue[idx].type); - if (c_action["post"]) { - c_action.post(); - } - global.r_queue.queue.splice(idx, 1); - clearPopper(`rq${c_action.id}`); - resQueue(); - } - } - if (global.r_queue.queue.length > global.r_queue.max) { - global.r_queue.queue.splice(global.r_queue.max); - } - let q_techs = {}; - let remove = []; - checkTechRequirements("club", q_techs); - for (let i = 0; i < global.r_queue.queue.length; i++) { - Object.keys(actions.tech[global.r_queue.queue[i].type].reqs).forEach(function(req) { - if (skipRequirement(req, global.tech[req] || 0)) { - return; - } - if ((!global.tech[req] || global.tech[req] < actions.tech[global.r_queue.queue[i].type].reqs[req]) && (!q_techs[req] || q_techs[req] && q_techs[req].v < actions.tech[global.r_queue.queue[i].type].reqs[req])) { - remove.push(i); - } - }); - } - if (remove.length > 0) { - for (let i = remove.length - 1; i >= 0; i--) { - global.r_queue.queue.splice(remove[i], 1); - } - } - } - if (global.arpa.sequence && global.arpa.sequence["auto"] && global.tech["genetics"] && global.tech["genetics"] >= 8) { - buildGene(blockGeneBuffer); - } - if (p_on["soul_forge"]) { - vBind({ el: `#fort` }, "update"); - } - checkAchievements(); - } - if (global.tech["queue"] && global.queue.display) { - let idx = -1; - let c_action = false; - let stop = false; - let deepScan = ["space", "interstellar", "galaxy", "portal", "tauceti", "eden"]; - let time = 0; - let spent = { t: { t: 0, rt: 0 }, r: {}, rr: {}, id: {} }; - let arpa2 = false; - for (let i = 0; i < global.queue.queue.length; i++) { - if (global.settings.qAny) { - spent = { t: { t: 0, rt: 0 }, r: {}, rr: {}, id: {} }; - time = 0; - } - let struct = global.queue.queue[i]; - let t_action = false; - if (struct.action === "tp-ship") { - let raw = shipCosts(struct.type); - let costs = {}; - Object.keys(raw).forEach(function(res) { - costs[res] = function() { - return raw[res]; - }; - }); - t_action = { - id: struct.id, - cost: costs, - type: "tp-ship", - bp: struct.type, - doNotAdjustCost: true - }; - } else if (struct.action === "hell-mech") { - let costs = mechCost(struct.type.size, struct.type.infernal, true); - t_action = { - id: struct.id, - cost: costs, - type: "hell-mech", - bp: struct.type, - doNotAdjustCost: true - }; - } else if (deepScan.includes(struct.action)) { - for (let region in actions[struct.action]) { - if (actions[struct.action][region][struct.type]) { - t_action = actions[struct.action][region][struct.type]; - break; - } - } - } else { - t_action = actions[struct.action][struct.type]; - } - if (struct.action === "arpa") { - let remain = (100 - global.arpa[struct.type].complete) / 100; - let t_time = arpaTimeCheck(t_action, remain, spent); - struct["bres"] = false; - if (t_time >= 0) { - time += t_time; - struct["time"] = time; - for (let j = 1; j < struct.q; j++) { - let tc = arpaTimeCheck(t_action, 1, spent, true); - time += tc.t; - struct["bres"] = tc.r; - } - struct["t_max"] = time; - } else { - struct["time"] = -1; - } - if (arpaTimeCheck(t_action, 0.01) >= 0) { - if (global.settings.qAny && !global.queue.pause && struct["time"] > 1) { - buildArpa(struct.type, 100, true); - } else if (!stop) { - c_action = t_action; - idx = i; - arpa2 = true; - stop = true; - } - } - } else { - if (checkAffordable(t_action, true, t_action["doNotAdjustCost"] ? true : false, true)) { - struct.cna = false; - let t_time = timeCheck(t_action, spent); - struct["bres"] = false; - if (t_time >= 0) { - if (!stop && checkAffordable(t_action, false, t_action["doNotAdjustCost"] ? true : false)) { - c_action = t_action; - idx = i; - arpa2 = false; - if (global.settings.qAny) { - stop = true; - } - } else { - time += t_time; - } - if (!global.settings.qAny) { - stop = true; - } - struct["time"] = time; - let br = false; - for (let j = 1; j < struct.q; j++) { - let tc = timeCheck(t_action, spent, true); - time += tc.t; - br = tc.r; - } - struct["t_max"] = time; - struct["bres"] = br; - } else { - struct["time"] = t_time; - } - } else { - struct.cna = true; - struct["time"] = -1; - } - } - struct.qa = global.settings.qAny ? true : false; - } - if (idx >= 0 && c_action && !global.queue.pause) { - let triggerd = false; - if (arpa2) { - let label = global.queue.queue[idx].label; - if (buildArpa(global.queue.queue[idx].type, 100, true, true)) { - messageQueue(loc("build_success", [label]), "success", false, ["queue", "building_queue"]); - if (global.queue.queue[idx].q > 1) { - global.queue.queue[idx].q--; - } else { - clearPopper(`q${c_action.id}${idx}`); - global.queue.queue.splice(idx, 1); - buildQueue(); - } - } - } else if (c_action.hasOwnProperty("type") && c_action.type === "tp-ship") { - if (buildTPShipQueue(c_action)) { - clearPopper(`q${c_action.id}${idx}`); - global.queue.queue.splice(idx, 1); - buildQueue(); - } - } else if (c_action.hasOwnProperty("type") && c_action.type === "hell-mech") { - if (buildMechQueue(c_action)) { - clearPopper(`q${c_action.id}${idx}`); - global.queue.queue.splice(idx, 1); - buildQueue(); - } - } else { - let attempts = global.queue.queue[idx].q; - let struct = global.queue.queue[idx]; - let report_in = c_action["queue_complete"] ? c_action.queue_complete() : 1; - for (let i = 0; i < attempts; i++) { - if (c_action.action({ isQueue: true }) !== false) { - triggerd = true; - if (report_in - i <= 1) { - messageQueue(loc("build_success", [global.queue.queue[idx].label]), "success", false, ["queue", "building_queue"]); - } - if (global.queue.queue[idx].q > 1) { - global.queue.queue[idx].q--; - } else { - clearPopper(`q${c_action.id}${idx}`); - global.queue.queue.splice(idx, 1); - buildQueue(); - } - if (global.race["inflation"] && global.tech["primitive"]) { - if (!c_action.hasOwnProperty("inflation") || c_action.inflation) { - global.race.inflation++; - } - } - } else { - break; - } - } - if (triggerd) { - postBuild(c_action, struct.action, struct.type); - } - } - } - let last = false; - let used_slots = 0; - let merged_queue = []; - let update_queue = false; - for (let i = 0; i < global.queue.queue.length; i++) { - used_slots += Math.ceil(global.queue.queue[i].q / global.queue.queue[i].qs); - if (used_slots > global.queue.max) { - let remaining = Math.ceil(global.queue.queue[i].q / global.queue.queue[i].qs) - (used_slots - global.queue.max); - if (remaining === 0) { - global.queue.queue.splice(i); - } else { - global.queue.queue[i].q = remaining * global.queue.queue[i].qs; - global.queue.queue.splice(i + 1); - } - } - if (global.settings.q_merge === "merge_nearby") { - if (last === global.queue.queue[i].id) { - clearPopper(`q${global.queue.queue[i].id}${i}`); - global.queue.queue[i - 1].q += global.queue.queue[i].q; - global.queue.queue.splice(i, 1); - buildQueue(); - break; - } - last = global.queue.queue[i].id; - } else if (global.settings.q_merge === "merge_all") { - let found = false; - for (let k = 0; k < merged_queue.length; k++) { - if (merged_queue[k].id === global.queue.queue[i].id) { - found = true; - update_queue = true; - merged_queue[k].q += global.queue.queue[i].q; - clearPopper(`q${global.queue.queue[i].id}${i}`); - break; - } - } - if (!found) { - merged_queue.push(global.queue.queue[i]); - } - } - } - if (update_queue) { - for (let i = merged_queue.length; i < global.queue.queue.length; i++) { - clearPopper(`q${global.queue.queue[i].id}${i}`); - } - global.queue.queue = merged_queue; - buildQueue(); - } - } - resourceAlt(); - $(`.costList`).each(function() { - $(this).children().each(function() { - let elm = $(this); - this.className.split(/\s+/).forEach(function(cls) { - if (cls.startsWith(`res-`)) { - let res = cls.split(`-`)[1]; - if (global.resource.hasOwnProperty(res)) { - let res_val = elm.attr(`data-${res}`); - let fail_max = global.resource[res].max >= 0 && res_val > global.resource[res].max ? true : false; - let avail = elm.attr(`data-ok`) ? elm.attr(`data-ok`) : "has-text-dark"; - if (global.resource[res].amount + global.resource[res].diff < res_val || fail_max) { - if (elm.hasClass(avail)) { - elm.removeClass(avail); - elm.addClass("has-text-danger"); - } - } else if (elm.hasClass("has-text-danger") || elm.hasClass("has-text-alert")) { - elm.removeClass("has-text-danger"); - elm.addClass(avail); - } - } - } - }); - }); - }); - { - let msgHeight = $(`#msgQueue`).height(); - let buildHeight = $(`#buildQueue`).height(); - let totHeight = $(`.leftColumn`).height(); - let rem = $(`#topBar`).height(); - let min = rem * 5; - let max = totHeight - 5 * rem; - if (global.settings.q_resize !== "manual") { - const buildQueueElement = $(`#buildQueue`).get(0); - if (["auto", "grow"].includes(global.settings.q_resize) && buildQueueElement.scrollHeight > buildQueueElement.clientHeight) { - buildHeight += buildQueueElement.scrollHeight - buildQueueElement.clientHeight; - } else if (["auto", "shrink"].includes(global.settings.q_resize)) { - let minHeight = rem; - buildQueueElement.childNodes.forEach(function(e) { - minHeight += e.clientHeight || 0; - }); - if (buildQueueElement.clientHeight > minHeight) { - buildHeight = Math.min(buildHeight, minHeight); - } - } - } - if (msgHeight < min) { - if (buildHeight > min) { - buildHeight -= min - msgHeight; - } - msgHeight = min; - } - if (buildHeight < min) { - buildHeight = min; - } - if (msgHeight + buildHeight > max) { - msgHeight -= msgHeight + buildHeight - max; - if (msgHeight < rem) { - msgHeight = rem; - } - if (msgHeight + buildHeight > max) { - buildHeight -= msgHeight + buildHeight - max; - if (buildHeight < rem) { - buildHeight = rem; - } - } - } - if ($(`#msgQueue`).hasClass("right")) { - $(`#resources`).height(`calc(100vh - 5rem)`); - if ($(`#msgQueue`).hasClass("vscroll")) { - $(`#msgQueue`).removeClass("vscroll"); - $(`#msgQueue`).addClass("sticky"); - } - msgHeight = `calc(100vh - ${buildHeight}px - 6rem)`; - } else { - $(`#resources`).height(`calc(100vh - 5rem - ${buildHeight}px - ${msgHeight}px)`); - if ($(`#msgQueue`).hasClass("sticky")) { - $(`#msgQueue`).removeClass("sticky"); - $(`#msgQueue`).addClass("vscroll"); - msgHeight = 100; - } - } - $(`#msgQueue`).height(msgHeight); - $(`#buildQueue`).height(buildHeight); - global.settings.msgQueueHeight = msgHeight; - global.settings.buildQueueHeight = buildHeight; - } - if ($(`#mechList`).length > 0) { - $(`#mechList`).css("height", `calc(100vh - 11.5rem - ${$(`#mechAssembly`).height()}px)`); - } - if ($(`#shipList`).length > 0) { - $(`#shipList`).css("height", `calc(100vh - 11.5rem - ${$(`#shipPlans`).height()}px)`); - } - } - var sythMap = { - 1: 1.1, - 2: 1.25, - 3: 1.5 - }; - var kplv = 60; - function longLoop() { - const date2 = /* @__PURE__ */ new Date(); - const astroSign2 = astrologySign(); - if (global.race.species !== "protoplasm") { - if (global.settings.tabLoad || global.settings.civTabs === 2 && global.settings.govTabs === 2) { - let grids = gridDefs(); - let updatePowerGrid = false; - Object.keys(grids).forEach(function(grid) { - grids[grid].l.forEach(function(struct) { - let parts = struct.split(":"); - let space2 = convertSpaceSector(parts[0]); - let region = parts[0] === "city" ? parts[0] : space2; - let c_action = parts[0] === "city" ? actions.city[parts[1]] : actions[space2][parts[0]][parts[1]]; - let breaker = $(`#pg${c_action.id}${grid}`); - if (grids[grid].s && (breaker.length === 0 || gridEnabled(c_action, region, parts[0], parts[1]) && breaker.hasClass("inactive"))) { - updatePowerGrid = true; - } - }); - }); - if (updatePowerGrid) { - setPowerGrid(); - } - } - if (global.tech["syphon"] && global.tech.syphon >= 80) { - if (webWorker.w) { - webWorker.w.terminate(); - } - let bang = $('
    '); - $("body").append(bang); - setTimeout(function() { - bang.addClass("burn"); - }, 125); - setTimeout(function() { - bang.addClass("b"); - }, 150); - setTimeout(function() { - bang.addClass("c"); - }, 2e3); - setTimeout(function() { - vacuumCollapse(); - }, 4e3); - } - if (global.portal["fortress"] && !global.race["warlord"]) { - bloodwar(); - } else if (global.race["warlord"] && global.portal["minions"] && global.portal.minions.count > 0) { - hellguard(); - } - if (global.civic.govern.rev > 0) { - global.civic.govern.rev--; - } - if (global.civic.govern.fr > 0) { - global.civic.govern.fr--; - } - if (global.civic.govern.rev < 0) { - global.civic.govern.rev = 0; - } - if (global.city.ptrait.includes("trashed") || global.race["scavenger"]) { - global.civic.scavenger.display = true; - } else { - global.civic.scavenger.display = false; - global.civic.scavenger.workers = 0; - } - if (global.civic.homeless > 0) { - let railway = global.arpa["railway"] ? global.arpa.railway.rank : 0; - let abandon_odds = Math.floor(railway / (railway + 25) * 10); - if (Math.rand(0, 10) <= abandon_odds) { - global.civic.homeless--; - } - } - if (global.race["unstable"]) { - if (global.resource[global.race.species].amount > 0 && Math.rand(0, 100) < traits.unstable.vars()[0]) { - let bound = Math.ceil(global.resource[global.race.species].amount ** 0.9 * traits.unstable.vars()[1] / 100); - let died = Math.rand(0, bound); - global.resource[global.race.species].amount -= died; - if (global.resource[global.race.species].amount < 0) { - global.resource[global.race.species].amount = 0; - } - global.stats.uDead += died; - } - } - if (global.race["blubber"] && global.resource[global.race.species].amount >= 50) { - let oldAge = Math.rand(0, 1 + Math.floor(global.resource[global.race.species].amount / 50)); - blubberFill(oldAge); - } - if (global.tech["currency"] && global.tech["currency"] >= 2) { - let fluxVal = govActive("risktaker", 0) ? 2 : 4; - Object.keys(resource_values).forEach(function(res) { - let r_val = global.race["truepath"] ? resource_values[res] * 2 : resource_values[res]; - if (res === "Copper" && global.tech["high_tech"] && global.tech["high_tech"] >= 2) { - r_val *= 2; - } - if (res === "Titanium") { - if (global.tech["titanium"] && global.tech["titanium"] > 0) { - r_val *= global.resource.Alloy.display ? 1 : 2.5; - } else { - r_val *= 5; - } - } - if (global.resource[res].display && Math.rand(0, fluxVal) === 0) { - let max = r_val * 3; - let min = r_val / 2; - let variance = (Math.rand(0, 200) - 100) / 100; - let new_value = global.resource[res].value + variance; - if (new_value < min) { - new_value = r_val; - } else if (new_value > max) { - new_value = max - r_val; - } - global.resource[res].value = new_value; - } - }); - } - if (global.race["blood_thirst"]) { - if (!global.race.hasOwnProperty("blood_thirst_count")) { - global.race["blood_thirst_count"] = 1; - } - if (global.race.blood_thirst_count > 1) { - global.race.blood_thirst_count--; - } - } - if (global.race["truepath"] && global.civic.foreign.gov3.mil < 500) { - if (Math.rand(0, 50) === 0) { - global.civic.foreign.gov3.mil++; - } - } - if (global.race["pet"]) { - if (global.race.pet.event > 0) { - global.race.pet.event--; - } - if (global.race.pet.pet > 0) { - global.race.pet.pet--; - } else if (global.race.pet.pet < 0) { - global.race.pet.pet++; - } - } - if (global.civic.garrison.wounded > 0) { - let healed = global.race["regenerative"] ? traits.regenerative.vars()[0] : 1; - let hc = global.city["hospital"] ? global.city.hospital.count : 0; - if (global.race["orbit_decayed"] && global.race["truepath"]) { - hc = Math.min(support_on["operating_base"], p_on["operating_base"]); - } else if (global.race["artifical"] && global.city["boot_camp"]) { - hc = global.city.boot_camp.count; - } - if (global.race["rejuvenated"] && global.stats.achieve["lamentis"]) { - let bonus = global.stats.achieve.lamentis.l; - if (bonus > 5) { - bonus = 5; - } - hc += bonus; - } - if (astroSign2 === "cancer") { - hc += astroVal2("cancer")[0]; - if (hc < 0) { - hc = 0; - } - } - if (global.tech["medic"] && global.tech["medic"] >= 2) { - hc *= global.tech["medic"]; - } - if (global.race["fibroblast"]) { - hc += traits.fibroblast.vars()[0] * global.race["fibroblast"]; - } - if (global.race["cannibalize"] && global.city["s_alter"] && global.city.s_alter.regen > 0) { - hc >= 20 ? hc *= 1 + traits.cannibalize.vars()[0] / 100 : hc += Math.floor(traits.cannibalize.vars()[0] / 5); - } - let mantisFathom = fathomCheck("mantis"); - if (mantisFathom > 0) { - hc >= 20 ? hc *= 1 + traits.cannibalize.vars(1)[0] / 100 * mantisFathom : hc += Math.floor(traits.cannibalize.vars(1)[0] / 5 * mantisFathom); - } - if (global.race["high_pop"]) { - hc *= traits.high_pop.vars()[2]; - } - let painVal = govActive("nopain", 0); - if (painVal) { - hc *= 1 + painVal / 100; - } - if (global.city.banquet && global.city.banquet.on && global.city.banquet.level >= 2) { - hc *= 1 + global.city.banquet.strength ** 0.65 / 100; - } - let fathom = fathomCheck("troll"); - if (fathom > 0) { - hc += Math.round(20 * traits.regenerative.vars(1)[0] * fathom); - } - let max_bound = 20; - if (global.race["slow_regen"]) { - max_bound *= 1 + traits.slow_regen.vars()[0] / 100; - } - hc = Math.round(hc); - if (hc > 0) { - while (hc >= max_bound) { - healed++; - hc -= max_bound; - } - if (Math.rand(0, max_bound) < hc) { - healed++; - } - } - global.civic.garrison.wounded -= healed; - if (global.civic.garrison.wounded < 0) { - global.civic.garrison.wounded = 0; - } - } - if (global.civic.garrison["fatigue"] && global.civic.garrison.fatigue > 0) { - global.civic.garrison.fatigue--; - } - if (global.civic.garrison["protest"] && global.civic.garrison.protest > 0) { - global.civic.garrison.protest--; - } - if (global.civic.garrison["m_use"] && global.civic.garrison.m_use > 0) { - let merc_bound = global.tech["mercs"] && global.tech["mercs"] >= 2 ? 3 : 4; - let max_merc_roll = global.race["high_pop"] ? traits.high_pop.vars()[0] : 1; - let num_restore = 0; - for (let roll_num = 0; roll_num < max_merc_roll; roll_num++) { - if (Math.rand(0, merc_bound) === 0) { - num_restore++; - } - } - global.civic.garrison.m_use = Math.max(0, global.civic.garrison.m_use - num_restore); - } - if (global.race["rainbow_active"] && global.race["rainbow_active"] > 1) { - global.race["rainbow_active"]--; - } - if (global.city.calendar.day > 0) { - global.city.calendar.day++; - global.stats.days++; - if (global.city.calendar.day > orbitLength()) { - global.city.calendar.day = 1; - global.city.calendar.year++; - } - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - global.city.calendar.season = -1; - } else { - let s_segments = global.city.ptrait.includes("elliptical") ? 6 : 4; - let season_length = Math.round(orbitLength() / s_segments); - let days = global.city.calendar.day; - let season = 0; - while (days > season_length) { - days -= season_length; - season++; - } - if (global.city.ptrait.includes("elliptical")) { - switch (season) { - case 0: - global.city.calendar.season = 0; - break; - case 1: - case 2: - global.city.calendar.season = 1; - break; - case 3: - global.city.calendar.season = 2; - break; - default: - global.city.calendar.season = 3; - break; - } - } else { - global.city.calendar.season = season; - } - } - if (global.race["cataclysm"] || global.race["orbit_decayed"]) { - global.city.calendar.wind = 0; - global.city.calendar.temp = 1; - global.city.calendar.weather = -1; - } else if (Math.rand(0, 5) === 0) { - let temp = Math.rand(0, 3); - let sky = Math.rand(0, 5); - let wind = Math.rand(0, 3); - switch (global.city.biome) { - case "oceanic": - case "swamp": - if (Math.rand(0, 2) === 0 && sky > 0) { - sky--; - } - break; - case "tundra": - case "taiga": - if (global.city.calendar.season === 3) { - temp = 0; - } else if (Math.rand(0, 2) === 0 && temp > 0) { - temp--; - } - break; - case "desert": - if (Math.rand(0, 2) === 0 && sky < 4) { - sky++; - } - break; - case "ashland": - if (Math.rand(0, 2) === 0) { - if (sky < 1) { - sky++; - } else if (sky > 2) { - sky--; - } - } - case "volcanic": - if (global.city.calendar.season === 1) { - temp = 2; - } else if (Math.rand(0, 2) === 0 && temp < 2 && !global.city.ptrait.includes("permafrost")) { - temp++; - } - break; - default: - break; - } - switch (global.city.calendar.season) { - case 0: - if (Math.rand(0, 3) === 0 && sky > 0) { - sky--; - } - break; - case 1: - if (Math.rand(0, 3) === 0 && temp < 2) { - temp++; - } - break; - case 2: - if (Math.rand(0, 3) === 0 && wind > 0) { - wind--; - } - break; - case 3: - if (Math.rand(0, 3) === 0 && temp > 0) { - temp--; - } - break; - default: - break; - } - if (global.city.ptrait.includes("stormy") && wind > 0) { - if (global.race["rejuvenated"] || Math.rand(0, 2) === 0) { - wind--; - } - } - if (sky === 0) { - if (global.race["rainbow"]) { - global.race["rainbow_active"] = 1; - } - global.city.calendar.weather = 0; - } else if (sky >= 1 && sky <= 2) { - if (global.race["rainbow"]) { - global.race["rainbow_active"] = 1; - } - global.city.calendar.weather = 1; - } else { - if (global.race["rainbow"] && global.city.calendar.weather === 0) { - global.race["rainbow_active"] = Math.rand(10, 20); - } - global.city.calendar.weather = 2; - if (global.race["darkness"]) { - if (Math.rand(0, 7 - traits.darkness.vars()[0]) === 0) { - global.city.calendar.weather = 1; - } - } - } - if (temp === 0) { - let new_temp = global.city.calendar.temp - 1; - if (new_temp < 0) { - new_temp = 0; - } - if (global.city.calendar.season === 1 && new_temp === 0) { - new_temp = 1; - } - if (new_temp === 0 && global.city.biome === "hellscape" && !global.city.ptrait.includes("permafrost")) { - new_temp = 1; - } - if (new_temp === 0 && global.city.biome === "eden" && global.city.calendar.season !== 3) { - new_temp = 1; - } - global.city.calendar.temp = new_temp; - } else if (temp === 2) { - let new_temp = global.city.calendar.temp + 1; - if (new_temp > 2) { - new_temp = 2; - } - if (global.city.calendar.season === 3 && new_temp === 2) { - new_temp = 1; - } - if (new_temp === 2 && global.city.biome === "eden" && global.city.calendar.season !== 1) { - new_temp = 1; - } - global.city.calendar.temp = new_temp; - } - global.city.calendar.wind = wind === 0 ? 1 : 0; - } - if (global.city.calendar.weather === 2) { - global.city.sun++; - } else { - global.city.sun = 0; - } - if (global.city.calendar.temp === 0) { - global.city.cold++; - } else { - global.city.cold = 0; - } - if (global.city.calendar.temp === 2) { - global.city.hot++; - } else { - global.city.hot = 0; - } - if (!global.race["orbit_decayed"]) { - if (global.city.ptrait.includes("retrograde")) { - global.city.calendar.moon--; - if (global.city.calendar.moon < 0) { - global.city.calendar.moon = 27; - } - } else { - global.city.calendar.moon++; - if (global.city.calendar.moon > 27) { - global.city.calendar.moon = 0; - } - } - } - setWeather(); - } - if (!global.race["cataclysm"] && !global.race["orbit_decayed"] && !global.race["lone_survivor"] && !global.race["vax"]) { - let deterioration = Math.floor(5e7 / (1 + global.race.mutation)) - global.stats.days; - if (global.race.deterioration === 0 && deterioration < 4e7) { - global.race.deterioration = 1; - let death_clock = Math.round(deterioration / orbitLength()); - messageQueue(loc("deterioration1", [flib("name"), death_clock]), "danger", false, ["progress"]); - } else if (global.race.deterioration === 1 && deterioration < 2e7) { - global.race.deterioration = 2; - let death_clock = Math.round(deterioration / orbitLength()); - messageQueue(loc("deterioration2", [flib("name"), death_clock]), "danger", false, ["progress"]); - } else if (global.race.deterioration === 2 && deterioration < 5e6) { - global.race.deterioration = 3; - let death_clock = Math.round(deterioration / orbitLength()); - messageQueue(loc("deterioration3", [flib("name"), death_clock]), "danger", false, ["progress"]); - } else if (global.race.deterioration === 3 && deterioration < 1e6) { - global.race.deterioration = 4; - let death_clock = Math.round(deterioration / orbitLength()); - messageQueue(loc("deterioration4", [flib("name"), death_clock]), "danger", false, ["progress"]); - } else if (global.race.deterioration === 4 && deterioration <= 0) { - global.race.deterioration = 5; - global.race["decayed"] = global.stats.days; - global.tech["decay"] = 1; - messageQueue(loc("deterioration5", [flib("name")]), "danger", false, ["progress"]); - drawTech(); - } - } - if (global.tech["decay"] && global.tech["decay"] >= 2) { - let fortify = 0; - if (global.genes.minor["fortify"]) { - fortify += global.genes.minor["fortify"]; - } - if (global.race.minor["fortify"]) { - fortify += global.race.minor["fortify"]; - } - if (global.tech["decay"] >= 3) { - fortify *= 100; - } - global.race.gene_fortify = fortify; - } else { - global.race.gene_fortify = 0; - } - if (!global.tech["genesis"] && global.race.deterioration >= 1 && global.tech["high_tech"] && global.tech["high_tech"] >= 10) { - global.tech["genesis"] = 1; - messageQueue(loc("genesis"), "special", false, ["progress"]); - drawTech(); - } - if (global.settings["cLabels"] !== cLabels) { - drawCity(); - } - if (global.tech["xeno"] && global.tech["xeno"] >= 5 && !global.tech["piracy"]) { - if (Math.rand(0, 5) === 0) { - global.tech["piracy"] = 1; - messageQueue(loc("galaxy_piracy_msg", [races[global.galaxy.alien2.id].name]), "info", false, ["progress"]); - renderSpace(); - } - } - if (global.race["cheese"]) { - global.race.cheese--; - if (global.race.cheese <= 0) { - delete global.race.cheese; - } - } - if (global.tech["piracy"]) { - if (global.tech.piracy < 1e3) { - global.tech.piracy++; - } else if (global.tech.xeno >= 8 && global.tech.piracy < 2500) { - global.tech.piracy++; - } else if (global.tech["conflict"] && global.tech.piracy < 5e3) { - global.tech.piracy++; - } - } - if (global.race["wish"] && global.race["wishStats"]) { - if (global.race.wishStats.minor > 0) { - global.race.wishStats.minor--; - } - if (global.race.wishStats.major > 0) { - global.race.wishStats.major--; - } - if (global.race.wishStats.bad > 0) { - global.race.wishStats.bad--; - } - } - if (global.portal["archaeology"] && global.tech.hasOwnProperty("hell_ruins") && global.tech.hell_ruins >= 2 && !global.tech["hell_vault"]) { - let sup = hellSupression("ruins"); - let value = 25e4; - if (global.race["high_pop"]) { - value = highPopAdjust(value); - } - value = Math.round(value * sup.supress) * workerScale(global.civic.archaeologist.workers, "archaeologist") / 1e3; - if (Math.rand(0, 1e4) + 1 <= value) { - global.tech["hell_vault"] = 1; - messageQueue(loc("portal_ruins_vault"), "info", false, ["progress"]); - renderFortress(); - } - } - if (global.tech["syndicate"] && global.race["truepath"]) { - let regions = spaceTech(); - Object.keys(regions).forEach(function(region) { - if (regions[region].info.hasOwnProperty("syndicate") && regions[region].info.syndicate()) { - let cap = regions[region].info.hasOwnProperty("syndicate_cap") ? regions[region].info.syndicate_cap() : 500; - if (!global.space.syndicate.hasOwnProperty(region)) { - global.space.syndicate[region] = 0; - } - let reinforce = region === "spc_triton" ? 5 : 10; - if (global.space.syndicate[region] < cap && Math.rand(0, reinforce) === 0) { - global.space.syndicate[region]++; - } - if (global.space.syndicate[region] > cap) { - global.space.syndicate[region] = cap; - } - } - }); - if (global.space.hasOwnProperty("shipyard") && global.space.shipyard.hasOwnProperty("ships")) { - let eScan = 0; - let tScan = 0; - let tShip = false; - global.space.shipyard.ships.forEach(function(ship) { - if (ship.transit > 0 && ship.fueled) { - ship.transit--; - let trip = 1 - ship.transit / ship.dist; - let mx = Math.abs(ship.origin.x - ship.destination.x) * trip; - let my = Math.abs(ship.origin.y - ship.destination.y) * trip; - if (ship.origin.x <= ship.destination.x) { - ship.xy.x = ship.origin.x + mx; - } else { - ship.xy.x = ship.origin.x - mx; - } - if (ship.origin.y <= ship.destination.y) { - ship.xy.y = ship.origin.y + my; - } else { - ship.xy.y = ship.origin.y - my; - } - } - if (ship.transit === 0) { - ship.xy = genXYcoord(ship.location); - ship.origin = deepClone(ship.xy); - ship.dist = 0; - } - if (ship.damage > 0 && p_on["shipyard"]) { - ship.damage--; - } - if (ship.location !== "spc_dwarf" && Math.rand(0, 10) === 0) { - let dm = ship.location === "spc_triton" ? 2 : 1; - switch (ship.armor) { - case "steel": - ship.damage += Math.rand(1, 8 * dm); - break; - case "alloy": - ship.damage += Math.rand(1, 6 * dm); - break; - case "neutronium": - ship.damage += Math.rand(1, 4 * dm); - break; - } - if (ship.damage > 90) { - ship.damage = 90; - } - } - if (global.tech.hasOwnProperty("eris_scan") && ship.location === "spc_eris" && ship.transit === 0) { - eScan += sensorRange(ship); - } - if (global.tech.hasOwnProperty("tauceti") && ship.location === "tauceti" && ship.transit === 0) { - tScan += sensorRange(ship); - tShip = ship.name; - } - }); - if (global.tech.hasOwnProperty("eris_scan") && global.tech.hasOwnProperty("eris") && global.tech.eris === 1 && eScan > 50) { - global.tech.eris_scan += eScan - 50; - if (global.tech.eris_scan >= 100) { - global.tech.eris_scan = 100; - global.tech.eris = 2; - messageQueue(loc("space_eris_scan", [planetName().eris]), "info", false, ["progress"]); - renderSpace(); - } - } - if (global.tech.hasOwnProperty("tauceti") && global.tech.tauceti >= 1 && tScan >= 1) { - if (global.tech.tauceti === 1) { - initStruct(actions.tauceti.tau_home.orbital_station); - initStruct(actions.tauceti.tau_red.orbital_platform); - global.tech.tauceti = 2; - global.settings.showTau = true; - global.settings.tau.home = true; - global.settings.tau.red = true; - global.settings.tau.gas = false; - global.settings.tau.roid = false; - messageQueue(loc("tau_scan", [tShip]), "info", false, ["progress"]); - renderTauCeti(); - } - } - if (global.space.hasOwnProperty("position")) { - Object.keys(spacePlanetStats).forEach(function(planet) { - if (global.space.position.hasOwnProperty(planet)) { - let orbit = spacePlanetStats[planet].orbit === -1 ? orbitLength() : spacePlanetStats[planet].orbit; - if (orbit === -2) { - return; - } else if (orbit === 0) { - global.space.position[planet] = 0; - } else { - global.space.position[planet] += +(360 / orbit).toFixed(4); - if (global.space.position[planet] >= 360) { - global.space.position[planet] -= 360; - } - } - } - }); - } - if ($("#mapCanvas").length > 0) { - drawMap(); - } - } - if (global.tech["triton"] && global.tech.triton >= 3) { - tritonWar(); - } - if (global.tech["eris"] && global.tech.eris >= 3) { - erisWar(); - } - } - if (!global.race["warlord"] && (global.stats.matrix > 0 || global.stats.retire > 0) && !global.race["servants"] && Math.rand(0, 25) === 0) { - let womlings = Math.min(global.stats.matrix, 100) + Math.min(global.stats.retire, 100) + Math.min(global.stats.eden, 100); - let skilled = Math.min(Math.min(global.stats.matrix, global.stats.retire), 100); - skilled += global.stats.achieve["pathfinder"] && global.stats.achieve.pathfinder.l >= 5 ? 2 : 0; - if (global.stats.achieve["overlord"] && global.stats.achieve.overlord.l >= 5) { - universe_affixes.forEach(function(uni) { - if (global.stats.achieve.overlord[uni] >= 5) { - skilled++; - womlings += 2; - } - }); - } - global.race["servants"] = { - max: womlings, - used: 0, - smax: skilled, - sused: 0, - jobs: {}, - sjobs: {}, - force_scavenger: false - }; - messageQueue(womlings + skilled === 1 ? loc("civics_servants_msg1") : loc("civics_servants_msg2", [womlings + skilled]), "caution", false, ["events", "major_events"]); - } - if (global.race["truepath"] && global.tech["focus_cure"] && global.tech.focus_cure >= 2 && global.tauceti["infectious_disease_lab"]) { - if (global.tauceti.infectious_disease_lab.cure < 100) { - let labs = (support_on["infectious_disease_lab"] || 0) / 100; - if (labs > 1) { - labs = 1; - } - let gain = +flib("curve", labs).toFixed(5) / 5; - global.tauceti.infectious_disease_lab.cure += gain; - if (global.tauceti.infectious_disease_lab.cure > 100) { - global.tauceti.infectious_disease_lab.cure = 100; - } - } else if (global.tauceti.infectious_disease_lab.cure >= 100 && global.tech.focus_cure === 2) { - global.tech.focus_cure = 3; - if (races[global.race.species].type === "synthetic") { - messageQueue(loc("tech_decode_virus_msg2s"), "info", false, ["progress"]); - } else { - messageQueue(loc("tech_decode_virus_msg2"), "info", false, ["progress"]); - } - } else if (global.tech.focus_cure >= 4 && global.race.hasOwnProperty("vax")) { - let med = global.race["artifical"] ? global.city.boot_camp.count : global.city.hospital.count; - if (global.race["orbit_decayed"]) { - med = Math.min(support_on["operating_base"], p_on["operating_base"]); - } - if (global.tech.focus_cure === 4 && global.race.vax < 25) { - global.race.vax += Math.rand(0, med * 2) / 150; - } else if (global.tech.focus_cure === 4 && global.race.vax >= 25) { - global.tech.focus_cure = 5; - messageQueue(loc("tech_vaccine_campaign_msg1"), "info", false, ["progress"]); - } else if (global.tech.focus_cure === 5 && global.race.vax < 50) { - global.race.vax += Math.rand(0, med * 2) / 450; - } else if (global.tech.focus_cure === 5 && global.race.vax < 75) { - global.race.vax += Math.rand(0, med * 2) / 1200; - } else if (global.tech.focus_cure === 6 && global.race.vax < 100) { - let div = 1e3; - if (global.tech["vax_p"]) { - div = 250; - } else if (global.tech["vax_s"]) { - div = 390; - } else if (global.tech["vax_f"]) { - div = 25; - } else if (global.tech["vax_c"]) { - div = 125; - } - global.race.vax += Math.rand(0, med * 2) / div; - } else if (global.race.vax >= 100 && global.tech.focus_cure <= 6) { - global.race.vax = 100; - global.tech.focus_cure = 7; - messageQueue(loc("tech_vaccine_campaign_msg2"), "info", false, ["progress"]); - removeTask("assemble"); - defineGovernor(); - } - } - } - if (global.race["infiltrator"]) { - let tech_source = global.tech["world_control"] ? `trait_infiltrator_steal_alt` : `trait_infiltrator_steal`; - let know_adjust = traits.infiltrator.vars()[0] / 100; - if (global.resource.Knowledge.max >= actions.tech.steel.cost.Knowledge() * know_adjust && !global.race["steelen"] && global.tech["smelting"] && global.tech.smelting === 1) { - messageQueue(loc(tech_source, [loc("tech_steel")]), "info", false, ["progress"]); - global.resource.Steel.display = true; - global.tech.smelting = 2; - defineIndustry(); - drawTech(); - } - if (global.resource.Knowledge.max >= actions.tech.electricity.cost.Knowledge() * know_adjust && global.tech["high_tech"] && global.tech.high_tech === 1) { - messageQueue(loc(tech_source, [loc("tech_electricity")]), "info", false, ["progress"]); - global.tech.high_tech = 2; - global.city["power"] = 0; - global.city["powered"] = true; - initStruct(actions.city.coal_power); - global.settings.showPowerGrid = true; - setPowerGrid(); - drawTech(); - drawCity(); - } - if (global.resource.Knowledge.max >= actions.tech.electronics.cost.Knowledge() * know_adjust && global.tech["high_tech"] && global.tech.high_tech === 3 && global.tech["titanium"]) { - messageQueue(loc(tech_source, [loc("tech_electronics")]), "info", false, ["progress"]); - global.tech.high_tech = 4; - if (global.race["terrifying"]) { - global.tech["gambling"] = 1; - initStruct(actions.city.casino); - initStruct(actions.space.spc_hell.spc_casino); - } - drawTech(); - drawCity(); - } - if (global.resource.Knowledge.max >= actions.tech.fission.cost.Knowledge() * know_adjust && global.tech["high_tech"] && global.tech.high_tech === 4 && global.tech["uranium"]) { - messageQueue(loc(tech_source, [loc("tech_fission")]), "info", false, ["progress"]); - global.tech.high_tech = 5; - initStruct(actions.city.fission_power); - drawTech(); - drawCity(); - } - if (global.resource.Knowledge.max >= actions.tech.rocketry.cost.Knowledge() * know_adjust && global.tech["high_tech"] && global.tech.high_tech === 6) { - messageQueue(loc(tech_source, [loc("tech_rocketry")]), "info", false, ["progress"]); - global.tech.high_tech = 7; - if (global.race["truepath"] && !global.tech["rival"]) { - global.tech["rival"] = 1; - messageQueue(loc(`civics_rival_unlocked`, [govTitle(3)]), "info", false, ["progress", "combat"]); - } - arpa("Physics"); - drawTech(); - drawCity(); - } - if (global.resource.Knowledge.max >= actions.tech.artifical_intelligence.cost.Knowledge() * know_adjust && global.tech["high_tech"] && global.tech.high_tech === 9) { - messageQueue(loc(tech_source, [loc("tech_artificial_intelligence")]), "info", false, ["progress"]); - global.tech.high_tech = 10; - drawTech(); - drawCity(); - } - if (global.resource.Knowledge.max >= actions.tech.quantum_computing.cost.Knowledge() * know_adjust && global.tech["high_tech"] && global.tech.high_tech === 10 && global.tech["nano"]) { - messageQueue(loc(tech_source, [loc("tech_quantum_computing")]), "info", false, ["progress"]); - global.tech.high_tech = 11; - drawTech(); - drawCity(); - } - if (global.resource.Knowledge.max >= actions.tech[global.race["truepath"] ? "virtual_reality_tp" : "virtual_reality"].cost.Knowledge() * know_adjust && global.tech["high_tech"] && global.tech.high_tech === 11 && global.tech["stanene"] && (global.tech["infernite"] && global.tech["alpha"] && global.tech["alpha"] >= 2 || global.race["truepath"])) { - messageQueue(loc(tech_source, [loc("tech_virtual_reality")]), "info", false, ["progress"]); - global.tech.high_tech = 12; - drawTech(); - drawCity(); - } - if (global.race["truepath"]) { - if (global.resource.Knowledge.max >= actions.tech.quantium.cost.Knowledge() * know_adjust && global.tech["supercollider"] && global.tech.supercollider >= 10 && global.tech["enceladus"] && global.tech.enceladus >= 3 && !global.tech["quantium"]) { - messageQueue(loc(tech_source, [loc("tech_quantium")]), "info", false, ["progress"]); - global.tech["quantium"] = 1; - global.resource.Quantium.display = true; - drawTech(); - loadFoundry(); - } - if (global.resource.Knowledge.max >= actions.tech.alien_biotech.cost.Knowledge() * know_adjust && global.tech["genetics"] && global.tech.genetics >= 8 && global.tech["kuiper"] && !global.tech["biotech"]) { - messageQueue(loc(tech_source, [loc("tech_alien_biotech")]), "info", false, ["progress"]); - global.tech["biotech"] = 1; - drawTech(); - } - } else { - if (global.resource.Knowledge.max >= actions.tech.shields.cost.Knowledge() * know_adjust && global.tech["high_tech"] && global.tech.high_tech === 13) { - messageQueue(loc(tech_source, [loc("tech_shields")]), "info", false, ["progress"]); - global.tech.high_tech = 14; - global.settings.space.neutron = true; - global.settings.space.blackhole = true; - drawTech(); - drawCity(); - } - if (global.resource.Knowledge.max >= actions.tech.ai_core.cost.Knowledge() * know_adjust && global.tech["high_tech"] && global.tech.high_tech === 14 && global.tech["blackhole"] && global.tech["blackhole"] >= 3) { - messageQueue(loc(tech_source, [loc("tech_ai_core")]), "info", false, ["progress"]); - global.tech.high_tech = 15; - initStruct(actions.interstellar.int_neutron.citadel); - drawTech(); - drawCity(); - } - if (global.resource.Knowledge.max >= actions.tech.graphene_processing.cost.Knowledge() * know_adjust && global.tech["ai_core"] && global.tech.ai_core === 2) { - messageQueue(loc(tech_source, [loc("tech_graphene_processing")]), "info", false, ["progress"]); - global.tech.ai_core = 3; - drawTech(); - } - if (global.resource.Knowledge.max >= actions.tech.nanoweave.cost.Knowledge() * know_adjust && global.tech["science"] && global.tech.science >= 18 && !global.tech["nanoweave"]) { - messageQueue(loc(tech_source, [loc("tech_nanoweave")]), "info", false, ["progress"]); - global.tech["nanoweave"] = 1; - global.resource.Nanoweave.display = true; - drawTech(); - loadFoundry(); - } - if (global.resource.Knowledge.max >= actions.tech.orichalcum_analysis.cost.Knowledge() * know_adjust && global.tech["high_tech"] && global.tech.high_tech === 16 && global.tech["chthonian"] && global.tech["chthonian"] >= 3) { - messageQueue(loc(tech_source, [loc("tech_orichalcum_analysis")]), "info", false, ["progress"]); - messageQueue(loc("tech_orichalcum_analysis_result"), "info", false, ["progress"]); - global.tech.high_tech = 17; - drawTech(); - drawCity(); - } - if (global.resource.Knowledge.max >= actions.tech.infernium_fuel.cost.Knowledge() * know_adjust && global.tech["smelting"] && global.tech.smelting === 7 && global.tech["hell_ruins"] && global.tech["hell_ruins"] >= 4) { - messageQueue(loc(tech_source, [loc("tech_infernium_fuel")]), "info", false, ["progress"]); - global.tech.smelting = 8; - defineIndustry(); - drawTech(); - } - } - } - let moldFathom = fathomCheck("moldling"); - if (moldFathom > 0) { - let tech_source = `trait_infiltrator_thrall`; - let know_adjust = 1 - (100 - traits.infiltrator.vars(1)[0]) * moldFathom / 100; - if (moldFathom >= 0.02 && global.resource.Knowledge.max >= actions.tech.smelting.cost.Knowledge() * know_adjust && checkTechRequirements("smelting", false) && !global.tech["smelting"]) { - messageQueue(loc(tech_source, [loc("tech_smelting")]), "info", false, ["progress"]); - global.tech["smelting"] = 1; - initStruct(actions.city.smelter); - if (global.race["steelen"]) { - global.tech["smelting"] = 2; - } - drawTech(); - drawCity(); - } - if (moldFathom >= 0.04 && global.resource.Knowledge.max >= actions.tech.dynamite.cost.Knowledge() * know_adjust && checkTechRequirements("dynamite", false) && global.tech["explosives"] && global.tech.explosives === 1) { - messageQueue(loc(tech_source, [loc("tech_dynamite")]), "info", false, ["progress"]); - global.tech.explosives = 2; - drawTech(); - } - if (moldFathom >= 0.08 && global.resource.Knowledge.max >= actions.tech.portland_cement.cost.Knowledge() * know_adjust && checkTechRequirements("portland_cement", false) && global.tech["cement"] && global.tech.cement === 3) { - messageQueue(loc(tech_source, [loc("tech_portland_cement")]), "info", false, ["progress"]); - global.tech.cement = 4; - drawTech(); - } - if (moldFathom >= 0.12 && global.resource.Knowledge.max >= actions.tech.oxygen_converter.cost.Knowledge() * know_adjust && checkTechRequirements("oxygen_converter", false) && global.tech["smelting"] && global.tech.smelting === 4) { - messageQueue(loc(tech_source, [loc("tech_oxygen_converter")]), "info", false, ["progress"]); - global.tech.smelting = 5; - drawTech(); - } - if (moldFathom >= 0.15 && global.resource.Knowledge.max >= actions.tech.machinery.cost.Knowledge() * know_adjust && checkTechRequirements("machinery", false) && global.tech["foundry"] && global.tech.foundry === 6) { - messageQueue(loc(tech_source, [loc("tech_machinery")]), "info", false, ["progress"]); - global.tech.foundry = 7; - drawTech(); - } - if (moldFathom >= 0.2 && global.resource.Knowledge.max >= actions.tech.uranium_storage.cost.Knowledge() * know_adjust && checkTechRequirements("uranium_storage", false) && global.tech["uranium"] && global.tech.uranium === 1) { - messageQueue(loc(tech_source, [loc("tech_uranium_storage")]), "info", false, ["progress"]); - global.tech.uranium = 1; - drawTech(); - } - if (moldFathom >= 0.25 && global.resource.Knowledge.max >= actions.tech.synthetic_fur.cost.Knowledge() * know_adjust && checkTechRequirements("synthetic_fur", false) && !global.tech["synthetic_fur"]) { - messageQueue(loc(tech_source, [actions.tech.synthetic_fur.title()]), "info", false, ["progress"]); - global.tech["synthetic_fur"] = 1; - drawTech(); - } - if (moldFathom >= 0.35 && global.resource.Knowledge.max >= actions.tech.rover.cost.Knowledge() * know_adjust && checkTechRequirements("rover", false) && global.tech["space_explore"] && global.tech.space_explore === 1) { - messageQueue(loc(tech_source, [loc("tech_rover")]), "info", false, ["progress"]); - global.tech.space_explore = 2; - global.settings.space.moon = true; - global.space["moon_base"] = { - count: 0, - on: 0, - support: 0, - s_max: 0 - }; - drawTech(); - } - let late_tech_source = `trait_infiltrator_thrall_alt`; - if (moldFathom >= 0.4 && global.resource.Knowledge.max >= actions.tech.starcharts.cost.Knowledge() * know_adjust && checkTechRequirements("starcharts", false) && global.tech["space_explore"] && global.tech.space_explore === 3) { - messageQueue(loc(late_tech_source, [loc("tech_starcharts")]), "info", false, ["progress"]); - global.tech.space_explore = 4; - drawTech(); - } - if (moldFathom >= 0.5 && global.resource.Knowledge.max >= actions.tech.nano_tubes.cost.Knowledge() * know_adjust && checkTechRequirements("nano_tubes", false) && !global.tech["nano"]) { - messageQueue(loc(late_tech_source, [loc("tech_nano_tubes")]), "info", false, ["progress"]); - global.tech["nano"] = 1; - global.resource.Nano_Tube.display = true; - drawTech(); - } - if (global.race["truepath"]) { - if (moldFathom >= 0.65 && global.resource.Knowledge.max >= actions.tech.stanene_tp.cost.Knowledge() * know_adjust && checkTechRequirements("stanene_tp", false) && !global.tech["stanene"]) { - messageQueue(loc(late_tech_source, [loc("tech_stanene")]), "info", false, ["progress"]); - global.tech["stanene"] = 1; - global.resource.Stanene.display = true; - drawTech(); - } - if (moldFathom >= 0.8 && global.resource.Knowledge.max >= actions.tech.anitgrav_bunk.cost.Knowledge() * know_adjust && checkTechRequirements("anitgrav_bunk", false) && global.tech["marines"] && global.tech.marines === 1) { - messageQueue(loc(late_tech_source, [loc("tech_anitgrav_bunk")]), "info", false, ["progress"]); - global.tech.marines = 2; - drawTech(); - } - } else { - if (moldFathom >= 0.65 && global.resource.Knowledge.max >= actions.tech.stanene.cost.Knowledge() * know_adjust && checkTechRequirements("stanene", false) && !global.tech["stanene"]) { - messageQueue(loc(late_tech_source, [loc("tech_stanene")]), "info", false, ["progress"]); - global.tech["stanene"] = 1; - global.resource.Stanene.display = true; - drawTech(); - } - if (moldFathom >= 0.78 && global.resource.Knowledge.max >= actions.tech.hydroponics.cost.Knowledge() * know_adjust && checkTechRequirements("hydroponics", false) && global.tech["mars"] && global.tech.mars === 5) { - messageQueue(loc(late_tech_source, [loc("tech_hydroponics")]), "info", false, ["progress"]); - global.tech.mars = 6; - drawTech(); - } - if (moldFathom >= 0.92 && global.resource.Knowledge.max >= actions.tech.orichalcum_panels.cost.Knowledge() * know_adjust && checkTechRequirements("orichalcum_panels", false) && global.tech["swarm"] && global.tech.swarm === 5) { - messageQueue(loc(late_tech_source, [loc("tech_orichalcum_panels")]), "info", false, ["progress"]); - global.tech.swarm = 6; - drawTech(); - } - if (moldFathom >= 1 && global.resource.Knowledge.max >= actions.tech.cybernetics.cost.Knowledge() * know_adjust && checkTechRequirements("cybernetics", false) && global.tech["high_tech"] && global.tech.high_tech === 17) { - messageQueue(loc(late_tech_source, [loc("tech_cybernetics")]), "info", false, ["progress"]); - global.tech.high_tech = 18; - drawTech(); - } - } - } - if (global.race["truepath"] && global.tech["tauceti"] && global.tech.tauceti === 3 && global.space.hasOwnProperty("jump_gate") && global.tauceti.hasOwnProperty("jump_gate") && global.space.jump_gate.count >= 100 && global.tauceti.jump_gate.count >= 100) { - global.tech.tauceti = 4; - global.resource.Materials.display = false; - global.resource.Bolognium.display = true; - renderSpace(); - renderTauCeti(); - drawTech(); - } - if (global.race["truepath"] && global.tech["tauceti"] && !global.race["lone_survivor"]) { - if (global.tech.tauceti === 5 && !global.tech["plague"] && Math.rand(0, 50) === 0) { - global.tech["plague"] = 1; - messageQueue(loc("tau_plague", [govTitle(3)]), "info", false, ["progress"]); - } else if (global.tech["plague"] && global.tech["tau_roid"] && global.tech["tau_whale"]) { - if (global.tech.plague === 1 && (global.tech.tau_roid >= 4 || global.tech.tau_whale >= 2) && Math.rand(0, 50) === 0) { - global.tech.plague = 2; - global.race["quarantine"] = 1; - global.race["qDays"] = 0; - messageQueue(loc("tau_plague2", [govTitle(3)]), "info", false, ["progress"]); - } else if (global.tech.plague === 2 && global.tech.tau_roid >= 5 && global.tech.tau_whale >= 2 && Math.rand(0, 50) === 0) { - global.tech.plague = 3; - global.race["quarantine"] = 2; - global.race["qDays"] = 0; - messageQueue(loc("tau_plague3", [govTitle(3), races[global.race.species].home]), "info", false, ["progress"]); - } else if (global.tech["isolation"]) { - if (global.tech.plague < 5 && Math.rand(0, 50) === 0) { - global.tech.plague = 5; - delete global.race["quarantine"]; - delete global.race["qDays"]; - messageQueue(loc("tau_plague5b", [races[global.race.species].home]), "info", false, ["progress"]); - drawTech(); - } - } else if (global.tech.plague === 3 && global.tech["disease"] && global.tech.disease >= 2 && Math.rand(0, 50) === 0) { - global.tech.plague = 4; - global.race["quarantine"] = 3; - global.race["qDays"] = 0; - messageQueue(loc("tau_plague5a", [races[global.race.species].home]), "info", false, ["progress"]); - } else if (global.tech.plague === 4 && global.tech["disease"] && global.tech.disease >= 3 && Math.rand(0, 50) === 0) { - global.tech.plague = 5; - global.race["quarantine"] = 4; - global.race["qDays"] = 0; - messageQueue(loc("tau_plague5a", [races[global.race.species].home]), "info", false, ["progress"]); - } - if (global.race["quarantine"]) { - if (!global.race.hasOwnProperty("qDays")) { - global.race["qDays"] = 0; - } - global.race.qDays++; - } - } - } else if (global.tech["tau_gas"] && global.tech.tau_gas >= 4 && !global.tech["plague"] && global.race["lone_survivor"]) { - global.tech["plague"] = 5; - } - if (global.civic.govern["protest"] && global.civic.govern.protest > 0) { - global.civic.govern.protest--; - } - if (global.civic.govern["scandal"] && global.civic.govern.scandal > 0) { - global.civic.govern.scandal--; - } - { - let tax_cap = govCivics("tax_cap"); - let tax_min = govCivics("tax_cap", true); - if (global.civic.taxes.tax_rate > tax_cap) { - global.civic.taxes.tax_rate = tax_cap; - } else if (global.civic.taxes.tax_rate < tax_min) { - global.civic.taxes.tax_rate = tax_min; - } - } - if (global.queue.display) { - calcQueueMax(); - } - if (global.r_queue.display) { - calcRQueueMax(); - } - if (global.race.mutation > 0) { - let total = 0; - for (let i = 0; i < global.race.mutation; i++) { - let mut_level = i + 1; - let plasma = global.genes["plasma"] ? mut_level : 1; - if (global.genes["plasma"] && plasma > 3) { - if (global.genes["plasma"] >= 2) { - plasma = plasma > 5 ? 5 : plasma; - } else { - plasma = 3; - } - } - total += plasma; - } - global.race["p_mutation"] = total; - } - if (!global.tech["whitehole"] && global.interstellar["stellar_engine"] && global.interstellar.stellar_engine.exotic >= 0.025) { - global.tech["whitehole"] = 1; - if (global.tech["stablized"]) { - delete global.tech["stablized"]; - } - if (!global.race.governor.config.hasOwnProperty("trash") || global.race.governor.config.hasOwnProperty("trash") && !global.race.governor.config.trash["stab"]) { - messageQueue(loc("interstellar_blackhole_unstable"), "danger", false, ["progress"]); - } - drawTech(); - } else if (global.interstellar["stellar_engine"] && global.interstellar.stellar_engine.exotic >= 0.025) { - if (global.tech["whitehole"] && global.tech["stablized"]) { - delete global.tech["stablized"]; - drawTech(); - } - } - if (!global.tech["xeno"] && global.galaxy["scout_ship"] && gal_on["scout_ship"] > 0 && Math.rand(0, 10) === 0) { - global.tech["xeno"] = 1; - global.galaxy.scout_ship.count--; - global.galaxy.scout_ship.on--; - let civPerShip = actions.galaxy.gxy_gateway.scout_ship.ship.civ(); - let milPerShip = actions.galaxy.gxy_gateway.scout_ship.ship.mil(); - global.galaxy.scout_ship.crew -= civPerShip; - global.galaxy.scout_ship.mil -= milPerShip; - global.resource[global.race.species].amount -= civPerShip; - global.civic.garrison.workers -= milPerShip; - global.civic.garrison.crew -= milPerShip; - messageQueue(loc("galaxy_encounter"), "info", false, ["progress"]); - drawTech(); - } - if (global.galaxy["scavenger"] && global.tech["conflict"] && global.tech["conflict"] === 4 && gal_on["scavenger"] > 0 && Math.rand(0, 50) <= gal_on["scavenger"]) { - global.tech["conflict"] = 5; - messageQueue(loc("galaxy_scavenger_find"), "info", false, ["progress"]); - drawTech(); - } - if (!global.tech["syndicate"] && !global.race["lone_survivor"] && global.tech["outer"] && Math.rand(0, 20) === 0) { - messageQueue(loc("outer_syndicate", [govTitle(4)]), "info", false, ["progress"]); - global.tech["syndicate"] = 1; - global.space["syndicate"] = {}; - } - if (!global.tech["corrupted_ai"] && p_on["ai_core2"] && calcAIDrift() === 100) { - global.tech["corrupted_ai"] = 1; - drawTech(); - } - if (global.arpa.sequence && global.arpa.sequence["auto"] && global.tech["genetics"] && global.tech["genetics"] === 7) { - buildGene(); - } - if (global.race["orbit_decay"]) { - if (!global.race["orbit_decayed"]) { - $(`#infoTimer`).html(`T-${global.race["orbit_decay"] - global.stats.days}`); - } - orbitDecayed(); - } - if (global.race["truepath"] && global.city.ptrait.includes("kamikaze") && orbitLength() <= 10) { - global.race["orbit_decay"] = 1; - global.race["tidal_decay"] = 1; - orbitDecayed(); - } - if (global.race["living_materials"]) { - ["city", "space", "interstellar", "galaxy", "portal", "eden", "tauceti"].forEach(function(sector) { - Object.keys(global[sector]).forEach(function(struct) { - if (global[sector][struct].hasOwnProperty("l_m")) { - global[sector][struct].l_m++; - } - }); - }); - } - govern(); - } - if (!global.race.seeded || global.race.seeded && global.race["chose"]) { - if (Math.rand(0, global.event.t) === 0) { - let event_pool = eventList("major"); - if (event_pool.length > 0) { - let event = event_pool[Math.floor(seededRandom(0, event_pool.length))]; - let msg = events[event].effect(); - messageQueue(msg, "caution", false, ["events", "major_events"]); - global.event.l = event; - } - global.event.t = 999; - if (astroSign2 === "pisces") { - global.event.t -= astroVal2("pisces")[0]; - } - } else { - global.event.t--; - } - if (global.race.species !== "protoplasm") { - if (Math.rand(0, global.m_event.t) === 0) { - let event_pool = eventList("minor"); - if (!global.race["pet"] && (global.race["catnip"] && global.race.catnip >= 2 || global.race["anise"] && global.race.anise >= 2)) { - event_pool = ["pet"]; - } - if (event_pool.length > 0) { - let event = event_pool[Math.floor(seededRandom(0, event_pool.length))]; - let msg = events[event].effect(); - messageQueue(msg, false, false, ["events", "minor_events"]); - global.m_event.l = event; - } - global.m_event.t = 850; - if (astroSign2 === "pisces") { - global.m_event.t -= astroVal2("pisces")[1]; - } - } else { - global.m_event.t--; - } - } - if (global.race["witch_hunter"] && global.resource.Sus.amount >= 100) { - let odds = 300 - global.resource.Sus.amount; - if (odds < 1) { - odds = 1; - } - if (Math.rand(0, odds) === 0) { - let msg = events["witch_hunt_crusade"].effect(); - messageQueue(msg, "caution", false, ["events", "major_events"]); - } - } - if (global.race["witch_hunter"] && global.resource.Sus.amount >= 50 && global.civic.scientist.workers > 0) { - let odds = 250 - global.resource.Sus.amount * 2; - if (odds < 50) { - odds = 50; - } - if (Math.rand(0, odds) === 0) { - let msg = events["witch_hunt"].effect(); - messageQueue(msg, false, false, ["events", "minor_events"]); - } - } - if (global.stats.achieve["endless_hunger"] && global.city.banquet && global.city.banquet.on) { - global.city.banquet.strength++; - } - if (global.eden["mech_station"]) { - mechStationEffect(); - } - } - if (global.race["warlord"] && global.race["shapeshifter"]) { - cleanRemoveTrait("shapeshifter"); - } - if (date2.getMonth() === 11 && date2.getDate() >= 17 && date2.getDate() <= 24) { - global.special.gift[`g${date2.getFullYear()}`] = true; - global.tech["santa"] = 1; - } else { - delete global.tech["santa"]; - } - if (eventActive("fool")) { - if (!$(`body`).hasClass("fool")) { - $(`body`).addClass("fool"); - drawAchieve({ fool: true }); - } - } else if ($(`body`).hasClass("fool")) { - $(`body`).removeClass("fool"); - drawAchieve(); - } - const currentTimestamp = date2.valueOf(); - let restartNeeded = false; - if (!global.settings.pause && exceededATimeThreshold(currentTimestamp)) { - addATime(currentTimestamp); - restartNeeded = true; - } - global.stats["current"] = currentTimestamp; - if (!global.race.hasOwnProperty("geck")) { - save.setItem("evolved", LZString.compressToUTF16(JSON.stringify(global))); - } - if (global.race.species !== "protoplasm" && (global.stats.days + global.stats.tdays) % 1e5 === 99999) { - messageQueue(loc(`backup_warning`), "advanced", true); - } - kplv--; - if (kplv <= 0) { - kplv = 60; - tagEvent("page_view", { page_title: `Game Loop` }); - } - if (global.settings.pause && webWorker.s) { - gameLoop("stop"); - } - if (atrack.t > 0) { - atrack.t--; - global.settings.at--; - if (global.settings.at <= 0 || atrack.t <= 0) { - global.settings.at = 0; - restartNeeded = true; - } - } - if (restartNeeded) { - gameLoop("stop"); - gameLoop("start"); - } - } - function buildGene(blockGeneBuffer = false) { - let buffer = blockGeneBuffer ? 0 : 1e4; - if (global.resource.Knowledge.amount >= 2e5 && global.resource.Knowledge.amount >= global.resource.Knowledge.max - buffer) { - global.resource.Knowledge.amount -= 2e5; - let gene = global.genes["synthesis"] ? sythMap[global.genes["synthesis"]] : 1; - global.resource.Genes.amount += gene; - } - } - function diffCalc(res, period) { - let sec = 1e3; - if (global.race["slow"]) { - let slow = 1 + traits.slow.vars()[0] / 100; - sec = Math.floor(sec * slow); - } - if (global.race["hyper"]) { - let fast = 1 - traits.hyper.vars()[0] / 100; - sec = Math.floor(sec * fast); - } - global.resource[res].diff = +(global.resource[res].delta / (period / sec)).toFixed(2); - global.resource[res].delta = 0; - if (global.resource[res].hasOwnProperty("gen") && global.resource[res].hasOwnProperty("gen_d")) { - global.resource[res].gen = +(global.resource[res].gen_d / (period / sec)).toFixed(2); - global.resource[res].gen_d = 0; - } - let el = $(`#res${res} .diff`); - if (global.race["decay"]) { - if (global.resource[res].diff < 0) { - if (global.resource[res].diff >= breakdown.p.consume[res][loc("evo_challenge_decay")]) { - if (!el.hasClass("has-text-warning")) { - el.removeClass("has-text-danger"); - el.addClass("has-text-warning"); - } - } else { - if (!el.hasClass("has-text-danger")) { - el.removeClass("has-text-warning"); - el.addClass("has-text-danger"); - } - } - } else if (global.resource[res].diff >= 0 && (el.hasClass("has-text-danger") || el.hasClass("has-text-warning"))) { - el.removeClass("has-text-danger"); - el.removeClass("has-text-warning"); - } - } else if (res === global.race.species && global.race["fasting"]) { - if (global.resource[res].diff >= 0 && global.resource[res].diff < 0.75) { - el.addClass("has-text-warning"); - el.removeClass("has-text-danger"); - } else if (global.resource[res].diff < 0) { - el.removeClass("has-text-warning"); - el.addClass("has-text-danger"); - } else if (global.resource[res].diff >= 0.75) { - el.removeClass("has-text-danger"); - el.removeClass("has-text-warning"); - } - } else { - if (global.resource[res].diff < 0 && !el.hasClass("has-text-danger")) { - el.addClass("has-text-danger"); - } else if (global.resource[res].diff >= 0 && el.hasClass("has-text-danger")) { - el.removeClass("has-text-danger"); - } - } - } - function steelCheck() { - if (global.resource.Steel.display === false && Math.rand(0, 1250) === 0) { - global.resource.Steel.display = true; - modRes("Steel", 1, true); - messageQueue(loc("steel_sample"), "info", false, ["progress"]); - } - } - function resourceAlt() { - ["#resources .resource", ".tab-item > .market-item", "#galaxyTrade > .market-item"].forEach(function(id) { - let alt = false; - $(`${id}:visible`).each(function() { - if (alt) { - $(this).addClass("alt"); - $(this).removeClass("prime"); - alt = false; - } else { - $(this).removeClass("alt"); - $(this).addClass("prime"); - alt = true; - } - }); - }); - } - function spyCaught(i) { - let escape = global.race["elusive"] || Math.floor(seededRandom(0, 3)) === 0 ? true : false; - let fathom = fathomCheck("satyr"); - if (fathom > 0 && Math.floor(seededRandom(0, 100)) <= fathom * 100) { - escape = true; - } - if (!escape && global.civic.foreign[`gov${i}`].spy > 0) { - global.civic.foreign[`gov${i}`].spy -= 1; - } - if (!escape && Math.floor(seededRandom(0, 4)) === 0) { - messageQueue(loc("event_spy_sellout", [govTitle(i)]), "danger", false, ["spy"]); - let max = global.race["mistrustful"] ? 5 + traits.mistrustful.vars()[0] : 5; - global.civic.foreign[`gov${i}`].hstl += Math.floor(seededRandom(1, max)); - if (global.civic.foreign[`gov${i}`].hstl > 100) { - global.civic.foreign[`gov${i}`].hstl = 100; - } - } else { - messageQueue(loc(escape ? "event_spy_fail" : "event_spy", [govTitle(i)]), "danger", false, ["spy"]); - } - } - intervals["version_check"] = setInterval(function() { - $.ajax({ - url: "https://pmotschmann.github.io/Evolve/package.json", - type: "GET", - dataType: "json", - success: function(res) { - if (res["version"] && res["version"] != global["version"] && !global["beta"]) { - $("#topBar .version > a").html(`${loc(`update_avail`)} v` + global.version + revision); - } - } - }); - }, 9e5); - var changeLog = $(`
    `); - popover("versionLog", getTopChange(changeLog), { wide: true }); - if (global.race["start_cataclysm"]) { - start_cataclysm(); - } -})(); -//# sourceMappingURL=main.js.map + `)}),r},active(){return!!(e.genes.challenge&&e.genes.challenge>=2)},notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_unlocked_title")}`])]},blackhole:{name:t("achieve_blackhole_name"),desc(r){let a=r?"5/10/15/20/25":e.stats.achieve.blackhole?e.stats.achieve.blackhole.l*5:5;return t("achieve_perks_blackhole",[a])},active(){return!!(e.stats.achieve.blackhole&&e.stats.achieve.blackhole.l>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_blackhole_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_blackhole_name")}`])]},trade:{name:t("achieve_trade_name"),desc(r){let a=r?"2/4/6/8/10":e.stats.achieve.trade?e.stats.achieve.trade.l*2:2,i=r?"1/2/3/4/5":e.stats.achieve.trade?e.stats.achieve.trade.l:1;return t("achieve_perks_trade",[a,i])},active(){return!!(e.stats.achieve.trade&&e.stats.achieve.trade.l>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_trade_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_trade_name")}`])]},creator:{name:t("achieve_creator_name"),desc(r){let a=r?"1.5/2/2.5/3/3.5":1+(e.stats.achieve.creator?e.stats.achieve.creator.l*.5:.5);return t("achieve_perks_creator",[a])},active(){return!!(e.stats.achieve.creator&&e.stats.achieve.creator.l>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_creator_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_creator_name")}`])]},mass_extinction:{name:t("achieve_mass_extinction_name"),group:[{desc(){return t("achieve_perks_mass_extinction")},active(){return!!(e.stats.achieve.mass_extinction&&e.stats.achieve.mass_extinction.l>=1)}},{desc(r){let a=e.stats.achieve.mass_extinction?e.stats.achieve.mass_extinction.l:1,i=r?"0/50/100/150/200":(a-1)*50;return t("achieve_perks_mass_extinction2",[i])},active(){return!!(e.stats.achieve.mass_extinction&&e.stats.achieve.mass_extinction.l>1)}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_mass_extinction_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_mass_extinction_name")}`])]},doomed:{name:t("achieve_doomed_name"),desc(r){return t("achieve_perks_doomed")},active(){return e.stats.portals>=1},notes:[t("wiki_perks_achievement_note",[`${t("achieve_doomed_name")}`])]},explorer:{name:t("achieve_explorer_name"),desc(r){let a=r?"1/2/3/4/5":e.stats.achieve.explorer?e.stats.achieve.explorer.l:1;return t("achieve_perks_explorer",[a])},active(){return!!(e.stats.achieve.explorer&&e.stats.achieve.explorer.l>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_explorer_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_explorer_name")}`])]},miners_dream:{name:t("achieve_miners_dream_name"),desc(r){let a=r?"1/2/3/5/7":e.stats.achieve.miners_dream?e.stats.achieve.miners_dream.l>=4?e.stats.achieve.miners_dream.l*2-3:e.stats.achieve.miners_dream.l:0;return t("achieve_perks_miners_dream",[a])},active(){return!!(e.stats.achieve.miners_dream&&e.stats.achieve.miners_dream.l>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_miners_dream_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_miners_dream_name")}`])]},extinct_junker:{name:t("achieve_extinct_junker_name"),desc(){return t("achieve_perks_enlightened")},active(){return!!(e.stats.achieve.extinct_junker&&e.stats.achieve.extinct_junker.l>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_extinct_junker_name")}`])]},joyless:{name:t("achieve_joyless_name"),desc(r){let a=r?"2/4/6/8/10":e.stats.achieve.joyless?e.stats.achieve.joyless.l*2:2;return t("achieve_perks_joyless",[a])},active(){return!!(e.stats.achieve.joyless&&e.stats.achieve.joyless.l>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_joyless_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_joyless_name")}`])]},steelen:{name:t("achieve_steelen_name"),desc(r){let a=r?"2/4/6/8/10":e.stats.achieve.steelen?e.stats.achieve.steelen.l*2:2;return t("achieve_perks_steelen",[a])},active(){return!!(e.stats.achieve.steelen&&e.stats.achieve.steelen.l>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_steelen_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_steelen_name")}`])]},wheelbarrow:{name:t("achieve_wheelbarrow_name"),desc(r){let a=r?"2/4/6/8/10":e.stats.achieve.wheelbarrow?e.stats.achieve.wheelbarrow.l*2:2;return t("achieve_perks_wheelbarrow",[a])},active(){return!!(e.stats.achieve.wheelbarrow&&e.stats.achieve.wheelbarrow.l>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_wheelbarrow_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_wheelbarrow_name")}`])]},extinct_sludge:{name:t("achieve_extinct_sludge_name"),group:[{desc(r){let a=r?"3/6/9/12/15":e.stats.achieve.extinct_sludge?e.stats.achieve.extinct_sludge.l*3:3;return t("achieve_perks_extinct_sludge",[a,t("universe_standard")])},active(){return!!(e.stats.achieve.extinct_sludge&&e.stats.achieve.extinct_sludge.l>=1)}},{desc(r){let a=r?"3/6/9/12/15":e.stats.achieve.extinct_sludge?e.stats.achieve.extinct_sludge.h*3:3;return t("achieve_perks_extinct_sludge",[a,t("universe_heavy")])},active(){return!!(e.stats.achieve.extinct_sludge&&e.stats.achieve.extinct_sludge.h>=1)}},{desc(r){let a=r?"3/6/9/12/15":e.stats.achieve.extinct_sludge?e.stats.achieve.extinct_sludge.a*3:3;return t("achieve_perks_extinct_sludge",[a,t("universe_antimatter")])},active(){return!!(e.stats.achieve.extinct_sludge&&e.stats.achieve.extinct_sludge.a>=1)}},{desc(r){let a=r?"3/6/9/12/15":e.stats.achieve.extinct_sludge?e.stats.achieve.extinct_sludge.e*3:3;return t("achieve_perks_extinct_sludge",[a,t("universe_evil")])},active(){return!!(e.stats.achieve.extinct_sludge&&e.stats.achieve.extinct_sludge.e>=1)}},{desc(r){let a=r?"3/6/9/12/15":e.stats.achieve.extinct_sludge?e.stats.achieve.extinct_sludge.m*3:3;return t("achieve_perks_extinct_sludge",[a,t("universe_micro")])},active(){return!!(e.stats.achieve.extinct_sludge&&e.stats.achieve.extinct_sludge.m>=1)}},{desc(r){let a=r?"3/6/9/12/15":e.stats.achieve.extinct_sludge?e.stats.achieve.extinct_sludge.mg*3:3;return t("achieve_perks_extinct_sludge",[a,t("universe_magic")])},active(){return!!(e.stats.achieve.extinct_sludge&&e.stats.achieve.extinct_sludge.mg>=1)}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_extinct_sludge_name")}`]),t("wiki_perks_achievement_note_universe_scale",[`${t("achieve_extinct_sludge_name")}`])]},whitehole:{name:t("achieve_whitehole_name"),group:[{desc(){return t("achieve_perks_whitehole")},active(){return!!e.stats.achieve.whitehole}},{desc(r){let a=r?"5/10/15/20/25":e.stats.achieve.whitehole?e.stats.achieve.whitehole.l*5:5;return t("achieve_perks_whitehole2",[a])},active(){return!!e.stats.achieve.whitehole}},{desc(r){let a=r?"1/2/3/4/5":e.stats.achieve.whitehole?e.stats.achieve.whitehole.l:1;return t("achieve_perks_whitehole3",[a])},active(){return!!e.stats.achieve.whitehole}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_whitehole_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_whitehole_name")}`])]},heavyweight:{name:t("achieve_heavyweight_name"),desc(r){let a=r?"4/8/12/16/20":e.stats.achieve.heavyweight?e.stats.achieve.heavyweight.l*4:4;return t("achieve_perks_heavyweight",[a])},active(){return!!e.stats.achieve.heavyweight},notes:[t("wiki_perks_achievement_note",[`${t("achieve_heavyweight_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_heavyweight_name")}`])]},dissipated:{name:t("achieve_dissipated_name"),group:[{desc(){return t("achieve_perks_dissipated1",[1])},active(){return!!(e.stats.achieve.dissipated&&e.stats.achieve.dissipated.l>=1)}},{desc(r){let a=r?"1/2":e.stats.achieve.dissipated&&e.stats.achieve.dissipated.l>=5?2:1;return t("achieve_perks_dissipated2",[a])},active(){return!!(e.stats.achieve.dissipated&&e.stats.achieve.dissipated.l>=3)}},{desc(){return t("achieve_perks_dissipated3",[1])},active(){return!!(e.stats.achieve.dissipated&&e.stats.achieve.dissipated.l>=2)}},{desc(){return t("achieve_perks_dissipated4",[1])},active(){return!!(e.stats.achieve.dissipated&&e.stats.achieve.dissipated.l>=4)}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_dissipated_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_dissipated_name")}`])]},banana:{name:t("achieve_banana_name"),group:[{desc(){return t("achieve_perks_banana1",[50])},active(){return!!(e.stats.achieve.banana&&e.stats.achieve.banana.l>=1)}},{desc(){return t("achieve_perks_banana2",[1])},active(){return!!(e.stats.achieve.banana&&e.stats.achieve.banana.l>=2)}},{desc(){return t("achieve_perks_banana3",[10])},active(){return!!(e.stats.achieve.banana&&e.stats.achieve.banana.l>=3)}},{desc(){return t("achieve_perks_banana4",[3])},active(){return!!(e.stats.achieve.banana&&e.stats.achieve.banana.l>=4)}},{desc(){return t("achieve_perks_banana5",[.01])},active(){return!!(e.stats.achieve.banana&&e.stats.achieve.banana.l>=5)}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_banana_name")}`]),t("wiki_perks_achievement_note_task",[`${t("achieve_banana_name")}`]),t("wiki_perks_achievement_note_task_num",[1,`${t("wiki_achieve_banana1")}`]),t("wiki_perks_achievement_note_task_num",[2,`${t("wiki_achieve_banana2")}`]),t("wiki_perks_achievement_note_task_num",[3,`${t("wiki_achieve_banana3")}`]),t("wiki_perks_achievement_note_task_num",[4,`${t("wiki_achieve_banana4",[500])}`]),t("wiki_perks_achievement_note_task_num",[5,`${t("wiki_achieve_banana5",[50])}`])]},anarchist:{name:t("achieve_anarchist_name"),desc(r){let a=r?"10/20/30/40/50":e.stats.achieve.anarchist?e.stats.achieve.anarchist.l*10:10;return t("achieve_perks_anarchist",[a])},active(){return!!(e.stats.achieve.anarchist&&e.stats.achieve.anarchist.l>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_anarchist_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_anarchist_name")}`])]},ascended:{name:t("achieve_ascended_name"),group:[{desc(r){let a;if(r)a="1-30";else if(a=0,e.stats.achieve.ascended)for(let i=0;i=1)}},{desc(){return t("achieve_perks_ascended2",[Fn()])},active(){return!!(e.stats.achieve.ascended&&e.stats.achieve.ascended[wt()]>=1)}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_ascended_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_ascended_name")}`]),t("wiki_perks_achievement_note_universe",[`${t("achieve_ascended_name")}`])]},technophobe:{name:t("achieve_technophobe_name"),group:[{desc(){return t("achieve_perks_technophobe1",[25])},active(){return!!(e.stats.achieve.technophobe&&e.stats.achieve.technophobe.l>=1)}},{desc(r){let a;if(r)a="10/25/30/35/40/45/50";else{a=e.stats.achieve.technophobe&&e.stats.achieve.technophobe.l>=4?25:10;for(let i=1;i=5&&(a+=5)}return t("achieve_perks_technophobe2",[a])},active(){return!!(e.stats.achieve.technophobe&&e.stats.achieve.technophobe.l>=2)}},{desc(r){let a;if(r)a="1/2/3/4/5/6";else{a=1;for(let i=1;i=5&&(a+=1)}return r||a>1?t("achieve_perks_technophobe3a",[a]):t("achieve_perks_technophobe3",[a])},active(){return!!(e.stats.achieve.technophobe&&e.stats.achieve.technophobe.l>=3)}},{desc(){return t("achieve_perks_technophobe4",[10])},active(){return!!(e.stats.achieve.technophobe&&e.stats.achieve.technophobe.l>=5)}},{desc(r){let a=r?"4/8/12/16/20":e.stats.achieve.technophobe?e.stats.achieve.technophobe.l:0;return t("achieve_perks_technophobe5",[a])},active(){return!!(e.stats.achieve.technophobe&&e.stats.achieve.technophobe.l>=1)}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_technophobe_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_technophobe_name")}`]),t("wiki_perks_achievement_note_universe",[`${t("achieve_technophobe_name")}`])]},iron_will:{name:t("achieve_iron_will_name"),group:[{desc(){return t("achieve_perks_iron_will1",[.15])},active(){return!!(e.stats.achieve.iron_will&&e.stats.achieve.iron_will.l>=1)}},{desc(){return t("achieve_perks_iron_will2",[10])},active(){return!!(e.stats.achieve.iron_will&&e.stats.achieve.iron_will.l>=2)}},{desc(){return t("achieve_perks_iron_will3",[6])},active(){return!!(e.stats.achieve.iron_will&&e.stats.achieve.iron_will.l>=3)}},{desc(){return t("achieve_perks_iron_will4",[1])},active(){return!!(e.stats.achieve.iron_will&&e.stats.achieve.iron_will.l>=4)}},{desc(){return t("achieve_perks_iron_will5")},active(){return!!(e.stats.achieve.iron_will&&e.stats.achieve.iron_will.l>=5)}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_iron_will_name")}`]),t("wiki_perks_achievement_note_ironwill",[`${t("evo_challenge_cataclysm")}`]),t("wiki_perks_achievement_note_ironwill2",[1,`${t("space_red_ziggurat_title")}`]),t("wiki_perks_achievement_note_ironwill3",[2,`${t("tech_elerium_mining")}`]),t("wiki_perks_achievement_note_ironwill3",[3,`${t("tech_lasers")}`]),t("wiki_perks_achievement_note_ironwill3",[4,`${t("tech_generational_ship")}`]),t("wiki_perks_achievement_note_ironwill4",[5,`${t("wiki_resets_bioseed")}`])]},failed_history:{name:t("achieve_failed_history_name"),desc(){return t("achieve_perks_failed_history",[2])},active(){return!!(e.stats.achieve.failed_history&&e.stats.achieve.failed_history.l>=5)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_failed_history_name")}`]),t("wiki_perks_achievement_note_failed_history",[`${t("evo_challenge_cataclysm")}`])]},lamentis:{name:t("achieve_lamentis_name"),group:[{desc(){return t("achieve_perks_lamentis1",["10%"])},active(){return!!(e.stats.achieve.lamentis&&e.stats.achieve.lamentis.l>=1)}},{desc(){return t("achieve_perks_lamentis2",["10%"])},active(){return!!(e.stats.achieve.lamentis&&e.stats.achieve.lamentis.l>=2)}},{desc(){return t("achieve_perks_lamentis3",["10%"])},active(){return!!(e.stats.achieve.lamentis&&e.stats.achieve.lamentis.l>=3)}},{desc(){return t("achieve_perks_lamentis4")},active(){return!!(e.stats.achieve.lamentis&&e.stats.achieve.lamentis.l>=4)}},{desc(){return t("achieve_perks_lamentis5")},active(){return!!(e.stats.achieve.lamentis&&e.stats.achieve.lamentis.l>=5)}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_lamentis_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_lamentis_name")}`])]},soul_sponge:{name:t("achieve_soul_sponge_name"),desc(r){let a=r?"100/200/300/400/500":e.stats.achieve.soul_sponge?e.stats.achieve.soul_sponge.mg*100:100;return t("achieve_perks_soul_sponge",[a])},active(){return!!(e.stats.achieve.soul_sponge&&e.stats.achieve.soul_sponge.mg>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_soul_sponge_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_soul_sponge_name")}`])]},nightmare:{name:t("achieve_nightmare_name"),desc(){return t("achieve_perks_nightmare")},active(){return!!(e.stats.achieve.nightmare&&e.stats.achieve.nightmare.mg>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_nightmare_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_nightmare_name")}`])]},escape_velocity:{name:t("achieve_escape_velocity_name"),desc(r){let a=r?"2/4/6/8/10":e.stats.achieve.escape_velocity?e.stats.achieve.escape_velocity.h*2:2;return t("achieve_perks_escape_velocity",[a])},active(){return!!(e.stats.achieve.escape_velocity&&e.stats.achieve.escape_velocity.h>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_escape_velocity_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_escape_velocity_name")}`])]},endless_hunger:{name:t("achieve_endless_hunger_name"),group:[{desc(){return t("achieve_perks_endless_hunger1")},active(){return!!(e.stats.achieve.endless_hunger&&e.stats.achieve.endless_hunger.l>=1)}},{desc(){return t("achieve_perks_endless_hunger2")},active(){return!!(e.stats.achieve.endless_hunger&&e.stats.achieve.endless_hunger.l>=2)}},{desc(){return t("achieve_perks_endless_hunger3")},active(){return!!(e.stats.achieve.endless_hunger&&e.stats.achieve.endless_hunger.l>=3)}},{desc(){return t("achieve_perks_endless_hunger4")},active(){return!!(e.stats.achieve.endless_hunger&&e.stats.achieve.endless_hunger.l>=4)}},{desc(){return t("achieve_perks_endless_hunger5")},active(){return!!(e.stats.achieve.endless_hunger&&e.stats.achieve.endless_hunger.l>=5)}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_endless_hunger_name")}`]),t("wiki_perks_achievement_note_task",[`${t("achieve_endless_hunger_name")}`]),t("wiki_perks_achievement_note_task_num",[1,`${t("wiki_achieve_endless_hunger1")}`]),t("wiki_perks_achievement_note_task_num",[2,`${t("wiki_achieve_endless_hunger2")}`]),t("wiki_perks_achievement_note_task_num",[3,`${t("wiki_achieve_endless_hunger3",[80])}`]),t("wiki_perks_achievement_note_task_num",[4,`${t("wiki_achieve_endless_hunger4",[1200])}`]),t("wiki_perks_achievement_note_task_num",[5,`${t("wiki_achieve_endless_hunger5")}`])]},gladiator:{name:t("achieve_gladiator_name"),desc(r){let a=r?"20/40/60/80/100":e.stats.achieve.gladiator?e.stats.achieve.gladiator.l*20:20;return t("achieve_perks_gladiator",[a])},active(){return!!(e.stats.achieve.gladiator&&e.stats.achieve.gladiator.l>=1)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_gladiator_name")}`]),t("wiki_perks_achievement_note_scale",[`${t("achieve_gladiator_name")}`])]},what_is_best:{name:t("achieve_what_is_best_name"),group:[{desc(){return t("achieve_perks_what_is_best1",[d.portal.prtl_ruins.hell_forge.title(),"20%"])},active(){return!!(e.stats.achieve.what_is_best&&e.stats.achieve.what_is_best.e>=1)}},{desc(){return t("achieve_perks_what_is_best2",[d.portal.prtl_spire.purifier.title(),"25 MW"])},active(){return!!(e.stats.achieve.what_is_best&&e.stats.achieve.what_is_best.e>=2)}},{desc(){return t("achieve_perks_what_is_best3",[d.portal.prtl_pit.soul_forge.title(),d.portal.prtl_pit.soul_attractor.title(),"1%"])},active(){return!!(e.stats.achieve.what_is_best&&e.stats.achieve.what_is_best.e>=3)}},{desc(){return t("achieve_perks_what_is_best4",[d.portal.prtl_lake.transport.title(),3])},active(){return!!(e.stats.achieve.what_is_best&&e.stats.achieve.what_is_best.e>=4)}},{desc(){return t("achieve_perks_what_is_best5")},active(){return!!(e.stats.achieve.what_is_best&&e.stats.achieve.what_is_best.e>=5)}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_what_is_best_name")}`]),t("wiki_perks_achievement_note_task",[`${t("achieve_what_is_best_name")}`]),t("wiki_perks_achievement_note_task_num",[1,`${t("wiki_achieve_what_is_best_k",[50])}`]),t("wiki_perks_achievement_note_task_num",[2,`${t("wiki_achieve_what_is_best_p")}`]),t("wiki_perks_achievement_note_task_num",[3,`${t("wiki_achieve_what_is_best_a",[250])}`]),t("wiki_perks_achievement_note_task_num",[4,`${t("wiki_achieve_what_is_best_r")}`]),t("wiki_perks_achievement_note_task_num",[5,`${t("wiki_achieve_what_is_best_g")}`])]},pathfinder:{name:t("achieve_pathfinder_name"),group:[{desc(){return t("achieve_perks_pathfinder1",[10])},active(){return!!(e.stats.achieve.pathfinder&&e.stats.achieve.pathfinder.l>=1)}},{desc(){return t("achieve_perks_pathfinder2",[10])},active(){return!!(e.stats.achieve.pathfinder&&e.stats.achieve.pathfinder.l>=2)}},{desc(){return t("achieve_perks_pathfinder3")},active(){return!!(e.stats.achieve.pathfinder&&e.stats.achieve.pathfinder.l>=3)}},{desc(){return t("achieve_perks_pathfinder4")},active(){return!!(e.stats.achieve.pathfinder&&e.stats.achieve.pathfinder.l>=4)}},{desc(){return t("achieve_perks_pathfinder5")},active(){return!!(e.stats.achieve.pathfinder&&e.stats.achieve.pathfinder.l>=5)}}],notes:[t("wiki_perks_achievement_note",[`${t("achieve_pathfinder_name")}`]),t("wiki_perks_achievement_note_pathfinder",[`${t("evo_challenge_truepath")}`]),t("wiki_perks_achievement_note_pathfinder_reset",[`${t("wiki_resets_mad")}`]),t("wiki_perks_achievement_note_pathfinder_reset",[`${t("wiki_resets_bioseed")}`]),t("wiki_perks_achievement_note_pathfinder_reset",[`${t("wiki_resets_ai")}`]),t("wiki_perks_achievement_note_pathfinder_reset",[`${t("wiki_resets_matrix")}`]),t("wiki_perks_achievement_note_pathfinder_reset",[`${t("wiki_resets_retired")}`])]},overlord:{name:t("achieve_overlord_name"),desc(){let r=`
    ${t("achieve_perks_overlord1",[10])}
    `;return r+=`
    ${t("achieve_perks_overlord2")}
    `,r+=`
    ${t("achieve_perks_overlord3")}
    `,r+=`
    ${t("achieve_perks_overlord4")}
    `,r},active(){return!!(e.stats.achieve.overlord&&e.stats.achieve.overlord.l>=5)},notes:[t("wiki_perks_achievement_note",[`${t("achieve_overlord_name")}`])]},adam_eve:{name:t("achieve_adam_eve_name"),desc(){return t("achieve_perks_adam_eve")},active(){return!!(e.stats.achieve.adam_eve&&e.stats.achieve.adam_eve.l>=5)},notes:[]},creep:{name:t("wiki_arpa_crispr_creep"),desc(r){let a=r?"0.01/0.02/0.03/0.04/0.05":e.genes.creep?e.genes.creep*.01:0;return t("arpa_perks_creep",[a])},active(){return!!e.genes.creep},notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_genetic_memory_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_animus_title")}`,`${t("arpa_genepool_divine_remembrance_title")}`,`${t("arpa_genepool_divine_proportion_title")}`,`${t("arpa_genepool_genetic_repository_title")}`].join(", ")])]},store:{name:t("wiki_arpa_crispr_store"),desc(r){let a=r?"0.04/0.06/0.08":e.genes.store&&e.genes.store>1?e.genes.store===2?.06:.08:.04;return t(e.genes.store&&e.genes.store>=4?"arpa_perks_store2":"arpa_perks_store1",[a])},active(){return!!e.genes.store},notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_spatial_reasoning_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_spatial_superiority_title")}`,`${t("arpa_genepool_spatial_supremacy_title")}`,`${t("arpa_genepool_dimensional_warping_title")}`].join(", ")])]},evolve:{name:t("wiki_arpa_crispr_evolve"),group:[{desc(){return t("arpa_perks_evolve")},active(){return!!e.genes.evolve}},{desc(){return t("arpa_genepool_recombination_desc")},active(){return!!(e.genes.evolve&&e.genes.evolve>=2)}},{desc(){return t("arpa_genepool_homologous_recombination_desc")},active(){return!!(e.genes.evolve&&e.genes.evolve>=3)}},{desc(){return t("arpa_genepool_genetic_reshuffling_desc")},active(){return!!(e.genes.evolve&&e.genes.evolve>=4)}},{desc(){return t("arpa_genepool_recombinant_dna_desc")},active(){return!!(e.genes.evolve&&e.genes.evolve>=5)}},{desc(){return t("arpa_genepool_chimeric_dna_desc")},active(){return!!(e.genes.evolve&&e.genes.evolve>=6)}},{desc(){return t("arpa_genepool_molecular_cloning_desc")},active(){return!!(e.genes.evolve&&e.genes.evolve>=7)}},{desc(){return t("arpa_genepool_transgenes_desc")},active(){return!!(e.genes.evolve&&e.genes.evolve>=8)}}],notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_morphogenesis_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_recombination_title")}`,`${t("arpa_genepool_homologous_recombination_title")}`,`${t("arpa_genepool_genetic_reshuffling_title")}`,`${t("arpa_genepool_recombinant_dna_title")}`,`${t("arpa_genepool_chimeric_dna_title")}`,`${t("arpa_genepool_molecular_cloning_title")}`,`${t("arpa_genepool_transgenes_title")}`].join(", ")])]},birth:{name:t("wiki_arpa_crispr_birth"),desc(){return t("arpa_perks_birth")},active(){return!!e.genes.birth},notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_replication_title")}`])]},enhance:{name:t("wiki_arpa_crispr_enhance"),desc(){return t("arpa_perks_enhance")},active(){return!!e.genes.enhance},notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_enhanced_muscle_fiber_title")}`])]},crafty:{name:t("wiki_arpa_crispr_crafty"),group:[{desc(){return t("arpa_genepool_artificer_desc")},active(){return!!e.genes.crafty}},{desc(r){let a=r?"50/100":e.genes.crafty&&e.genes.crafty>=3?100:50;return t("arpa_genepool_crafting_desc",[a])},active(){return!!(e.genes.crafty&&e.genes.crafty>=2)}}],notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_artificer_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_detail_oriented_title")}`,`${t("arpa_genepool_rigorous_title")}`].join(", ")])]},governor:{name:t("wiki_arpa_crispr_governor"),desc(){return t("arpa_perks_governor")},active(){return!!e.genes.governor},notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_governance_title")}`])]},synthesis:{name:t("wiki_arpa_crispr_synthesis"),desc(r){let a=r?"2/3/4":e.genes.synthesis&&e.genes.synthesis>=2?e.genes.synthesis>=3?4:3:2,i=r?"10/25/50":e.genes.synthesis&&e.genes.synthesis>=2?e.genes.synthesis>=3?50:25:10;return t("arpa_genepool_synthesis_desc",[a,i])},active(){return!!e.genes.synthesis},notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_synthesis_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_karyokinesis_title")}`,`${t("arpa_genepool_cytokinesis_title")}`].join(", ")])]},challenge:{name:t("wiki_arpa_crispr_challenge"),group:[{desc(){return t("arpa_perks_challenge")},active(){return!!e.genes.challenge}},{desc(){return t("arpa_genepool_unlocked_desc")},active(){return!!(e.genes.challenge&&e.genes.challenge>=2)}},{desc(r){return t("arpa_perks_challenge2",[r?"60/80":e.genes.challenge&&e.genes.challenge>=4?80:60,r?"60/40":e.genes.challenge&&e.genes.challenge>=4?40:60])},active(){return!!(e.genes.challenge&&e.genes.challenge>=3)}},{desc(){return t("arpa_perks_challenge3")},active(){return!!(e.genes.challenge&&e.genes.challenge>=5)}}],notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_hardened_genes_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_unlocked_title")}`,`${t("arpa_genepool_universal_title")}`,`${t("arpa_genepool_standard_title")}`,`${t("arpa_genepool_mastered_title")}`].join(", ")]),t("wiki_perks_crispr_note_challenge",[t("arpa_genepool_universal_title"),t("arpa_genepool_standard_title")])]},ancients:{name:t("wiki_arpa_crispr_ancients"),group:[{desc(){return t("arpa_perks_ancients")},active(){return!!e.genes.ancients}},{desc(){return e.genes.ancients&&e.genes.ancients>=4?t("arpa_perks_ancients3"):t("arpa_perks_ancients2")},active(){return!!(e.genes.ancients&&e.genes.ancients>=2)}},{desc(r){return t("arpa_perks_ancients4",[r?"25/50":e.genes.ancients&&e.genes.ancients>=5?50:25])},active(){return!!(e.genes.ancients&&e.genes.ancients>=3)}}],notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_ancients_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_faith_title")}`,`${t("arpa_genepool_devotion_title")}`,`${t("arpa_genepool_acolyte_title")}`,`${t("arpa_genepool_conviction_title")}`].join(", ")])]},trader:{name:t("wiki_arpa_crispr_trader"),desc(){return t("arpa_genepool_negotiator_desc")},active(){return!!e.genes.trader},notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_negotiator_title")}`])]},transcendence:{name:t("wiki_arpa_crispr_transcendence"),desc(){return t("arpa_genepool_transcendence_desc")},active(){return!!e.genes.transcendence},notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_transcendence_title")}`])]},queue:{name:t("wiki_arpa_crispr_queue"),group:[{desc(){return t("arpa_genepool_geographer_desc")},active(){return!!e.genes.queue}},{desc(){return t("arpa_genepool_architect_desc")},active(){return!!(e.genes.queue&&e.genes.queue>=2)}}],notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_geographer_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_architect_title")}`].join(", ")])]},plasma:{name:t("wiki_arpa_crispr_plasma"),desc(r){let a=r?"3/5":e.genes.plasma>=2?5:3;return t("arpa_genepool_mitosis_desc",[a])},active(){return!!e.genes.plasma},notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_mitosis_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_metaphase_title")}`].join(", ")])]},mutation:{name:t("wiki_arpa_crispr_mutation"),group:[{desc(){return e.genes.mutation&&e.genes.mutation>1?t("arpa_perks_mutation2"):t("arpa_perks_mutation1")},active(){return!!e.genes.mutation}},{desc(){return t("arpa_perks_mutation3")},active(){return!!(e.genes.mutation&&e.genes.mutation>=3)}}],notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_mutation_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_transformation_title")}`,`${t("arpa_genepool_metamorphosis_title")}`].join(", ")])]},bleed:{name:t("wiki_arpa_crispr_bleed"),group:[{desc(){return t("arpa_genepool_bleeding_effect_desc",[2.5])},active(){return!!e.genes.bleed}},{desc(){return t("arpa_genepool_synchronicity_desc",[25])},active(){return!!(e.genes.bleed&&e.genes.bleed>=2)}},{desc(){return t("arpa_genepool_astral_awareness_desc")},active(){return!!(e.genes.bleed&&e.genes.bleed>=3)}}],notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_bleeding_effect_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_synchronicity_title")}`,`${t("arpa_genepool_astral_awareness_title")}`].join(", ")]),t("wiki_perks_crispr_note_bleed",[`${t("arpa_genepool_bleeding_effect_title")}`])]},blood:{name:t("wiki_arpa_crispr_blood"),group:[{desc(){return t("arpa_genepool_blood_remembrance_desc")},active(){return!!e.genes.blood}},{desc(){return t("arpa_genepool_blood_sacrifice_desc")},active(){return!!(e.genes.blood&&e.genes.blood>=2)}},{desc(){return t("arpa_genepool_essence_absorber_desc")},active(){return!!(e.genes.blood&&e.genes.blood>=3)}}],notes:[t("wiki_perks_crispr_note",[`${t("arpa_genepool_blood_remembrance_title")}`]),t("wiki_perks_crispr_note_upgrade",[[`${t("arpa_genepool_blood_sacrifice_title")}`,`${t("arpa_genepool_essence_absorber_title")}`].join(", ")]),t("wiki_perks_crispr_note_blood",[t("arpa_genepool_blood_remembrance_title")])]},spire:{name:t("wiki_arpa_blood_spire"),group:[{desc(){return t("arpa_blood_purify_desc")},active(){return!!e.blood.spire}},{desc(){return t("arpa_blood_chum_desc")},active(){return!!(e.blood.spire&&e.blood.spire>=2)}}],notes:[t("wiki_perks_blood_note",[`${t("arpa_blood_purify_title")}`]),t("wiki_perks_blood_note_upgrade",[[`${t("arpa_blood_chum_title")}`].join(", ")])]},lust:{name:t("wiki_arpa_blood_lust"),group:[{desc(r){return t("arpa_perks_lust",[r?.2:.2*(e.blood.lust?e.blood.lust:1)])},active(){return!!e.blood.lust}}],notes:[t("wiki_perks_blood_note",[`${t("arpa_blood_lust_title")}`]),t("wiki_perks_blood_note_repeat",[t("arpa_blood_lust_title")])]},illuminate:{name:t("wiki_arpa_blood_illuminate"),group:[{desc(r){return t("arpa_perks_illuminate",[r?.01:.01*(e.blood.illuminate?e.blood.illuminate:1)])},active(){return!!e.blood.illuminate}}],notes:[t("wiki_perks_blood_note",[`${t("arpa_blood_illuminate_title")}`]),t("wiki_perks_blood_note_repeat",[t("arpa_blood_illuminate_title")])]},greed:{name:t("wiki_arpa_blood_greed"),group:[{desc(r){return t("arpa_perks_greed",[r?1:1*(e.blood.greed?e.blood.greed:1)])},active(){return!!e.blood.greed}}],notes:[t("wiki_perks_blood_note",[`${t("arpa_blood_greed_title")}`]),t("wiki_perks_blood_note_repeat",[t("arpa_blood_greed_title")])]},hoarder:{name:t("wiki_arpa_blood_hoarder"),group:[{desc(r){return t("arpa_perks_hoarder",[r?1:1*(e.blood.hoarder?e.blood.hoarder:1)])},active(){return!!e.blood.hoarder}}],notes:[t("wiki_perks_blood_note",[`${t("arpa_blood_hoarder_title")}`]),t("wiki_perks_blood_note_repeat",[t("arpa_blood_hoarder_title")])]},artisan:{name:t("wiki_arpa_blood_artisan"),group:[{desc(r){return t("arpa_perks_artisan",[r?1:1*(e.blood.artisan?e.blood.artisan:1)])},active(){return!!e.blood.artisan}}],notes:[t("wiki_perks_blood_note",[`${t("arpa_blood_artisan_title")}`]),t("wiki_perks_blood_note_repeat",[t("arpa_blood_artisan_title")])]},attract:{name:t("wiki_arpa_blood_attract"),group:[{desc(r){return t("arpa_perks_attract",[r?5:5*(e.blood.attract?e.blood.attract:1)])},active(){return!!e.blood.attract}}],notes:[t("wiki_perks_blood_note",[`${t("arpa_blood_attract_title")}`]),t("wiki_perks_blood_note_repeat",[t("arpa_blood_attract_title")])]},wrath:{name:t("wiki_arpa_blood_wrath"),group:[{desc(r){return t("arpa_perks_wrath",[r?5:5*(e.blood.wrath?e.blood.wrath:1)])},active(){return!!e.blood.wrath}}],notes:[t("wiki_perks_blood_note",[`${t("arpa_blood_wrath_title")}`]),t("wiki_perks_blood_note_repeat",[t("arpa_blood_wrath_title")])]},prepared:{name:t("wiki_arpa_blood_prepared"),group:[{desc(){return t("arpa_blood_prepared_desc")},active(){return!!e.blood.prepared}},{desc(){return t("arpa_blood_compact_desc")},active(){return!!(e.blood.prepared&&e.blood.prepared>=2)}}],notes:[t("wiki_perks_blood_note",[`${t("arpa_blood_prepared_title")}`]),t("wiki_perks_blood_note_upgrade",[[`${t("arpa_blood_compact_title")}`].join(", ")])]},unbound:{name:t("wiki_arpa_blood_unbound"),group:[{desc(){return t("arpa_blood_unbound_desc")},active(){return!!e.blood.unbound}},{desc(){return t("arpa_blood_shadow_war_desc")},active(){return!!(e.blood.unbound&&e.blood.unbound>=3)}},{desc(r){return t("arpa_perks_unbound_resist",[r?"10/5":e.blood.unbound&&e.blood.unbound>=4?5:10])},active(){return!!(e.blood.unbound&&e.blood.unbound>=2)}}],notes:[t("wiki_perks_blood_note",[`${t("arpa_blood_unbound_title")}`]),t("wiki_perks_blood_note_upgrade",[[`${t("arpa_blood_unbound_resistance_title")}`,`${t("arpa_blood_shadow_war_title")}`,`${t("arpa_blood_unbound_immunity_title")}`].join(", ")])]},aware:{name:t("wiki_arpa_blood_aware"),group:[{desc(){return t("arpa_blood_blood_aware_desc")},active(){return!!e.blood.aware}}],notes:[t("wiki_perks_blood_note",[`${t("arpa_blood_blood_aware_title")}`])]},harmonic:{name:t("harmonic"),group:[{desc(r){let a=Ea();return t("perks_harmonic",[r?`1-${Object.keys(T).length+2}`:+((a[0]-1)*100).toFixed(0),r?`2-${(Object.keys(T).length+2)*2}`:+((a[1]-1)*100).toFixed(0)])},active(){let r=Ea();return!!(e.pillars&&r[0]>1)}},{desc(r){let a=Ea();return t("perks_harmonic2",[t("portal_west_tower"),t("portal_east_tower"),r?`12-${(Object.keys(T).length-1)*12}`:+(Object.keys(e.pillars).length*12)])},active(){let r=Ea();return!!(e.pillars&&r[0]>1)}}],notes:[t("wiki_perks_harmonic_note1"),t("wiki_perks_harmonic_note2")]},novice:{name:t("perk_novice"),desc(r){let a=e.stats.feat.novice&&e.stats.achieve.apocalypse&&e.stats.achieve.apocalypse.l>0?Math.min(e.stats.achieve.apocalypse.l,e.stats.feat.novice):1,i=r?"0.5/1/1.5/2/2.5":a/2,s=r?"0.25/0.5/0.75/1/1.25":a/4;return`
    ${t("achieve_perks_novice",[i,s])}
    ${t("achieve_perks_novice2")}
    `},active(){return!!(e.stats.feat.novice&&e.stats.mad>0)},notes:[t("wiki_perks_progress_note1",[10,t("wiki_resets_mad")]),t("wiki_perks_progress_note2")]},journeyman:{name:t("perk_journeyman"),desc(r){let a=e.stats.feat.journeyman&&e.stats.achieve.seeder&&e.stats.achieve.seeder.l>0?Math.min(e.stats.achieve.seeder.l,e.stats.feat.journeyman):1;if(r||a>1){let i=r?"1/2/3":a>=3?a>=5?3:2:1,s=r?"1/2":a>=4?2:1;return`
    ${t("achieve_perks_journeyman2",[i,s])}
    ${t("achieve_perks_journeyman3")}
    `}else return`
    ${t("achieve_perks_journeyman1",[1])}
    ${t("achieve_perks_journeyman3")}
    `},active(){return!!(e.stats.feat.journeyman&&e.stats.bioseed>0)},notes:[t("wiki_perks_progress_note1",[25,t("wiki_resets_bioseed")]),t("wiki_perks_progress_note2")]},adept:{name:t("perk_adept"),desc(r){let a=Js()||1,i=r?"100/200/300/400/500":a*100,s=r?"60/120/180/240/300":a*60;return t("achieve_perks_adept",[i,s])},active(){return Js()>0},notes:[t("wiki_perks_progress_note1",[50,t("wiki_resets_blackhole")]),t("wiki_perks_progress_note2")]},master:{name:t("perk_master"),desc(r){let a=e.stats.feat.master&&e.stats.achieve.ascended&&e.stats.achieve.ascended.l>0?Math.min(e.stats.achieve.ascended.l,e.stats.feat.master):1,i=r?"1/2/3/4/5":a,s=r?"2/4/6/8/10":a*2;return t("achieve_perks_master",[i,s,t("evo_mitochondria_title"),t("evo_eukaryotic_title"),t("evo_membrane_title"),t("evo_organelles_title"),t("evo_nucleus_title")])},active(){return!!(e.stats.feat.master&&e.stats.achieve.ascended&&e.stats.achieve.ascended.l>0)},notes:[t("wiki_perks_progress_note1",[75,t("wiki_resets_ascension")]),t("wiki_perks_progress_note2")]},grandmaster:{name:t("perk_grandmaster"),desc(r){let a=e.stats.feat.grandmaster&&e.stats.achieve.corrupted&&e.stats.achieve.corrupted.l>0?Math.min(e.stats.achieve.corrupted.l,e.stats.feat.grandmaster):1;return t("achieve_perks_grandmaster",[r?"1/2/3/4/5":a])},active(){return!!(e.stats.feat.grandmaster&&e.stats.achieve.corrupted&&e.stats.achieve.corrupted.l>0)},notes:[t("wiki_perks_progress_note1",[100,t("wiki_resets_infusion")]),t("wiki_perks_progress_note2")]}};function sl(){be($("#perksPanel"));let r=$("#perksPanel"),a=!1;Object.keys(qs).forEach(function(i){if(qs[i].hasOwnProperty("group")){let s=!1,n=$(`
    ${qs[i].name}
    `);qs[i].group.forEach(function(o){o.active()&&(s=!0,n.append($(`
    ${o.desc()}
    `)))}),s&&(a=!0,r.append(n))}else qs[i].active()&&(a=!0,r.append($(`
    ${qs[i].name}${qs[i].desc()}
    `)))}),a||r.append($(`
    ${t("perks_none")}
    `))}function Vp(){be($("#statsPanel"));let r=$("#statsPanel");if(r.append(`
    ${t("achieve_stats_overall")}
    `),r.append(`
    ${t("achieve_stats_plasmid_earned")} {{ format(s.plasmid) }}
    `),e.stats.antiplasmid>0&&r.append(`
    ${t("achieve_stats_antiplasmid_earned")} {{ format(s.antiplasmid) }}
    `),e.stats.phage>0&&r.append(`
    ${t("achieve_stats_phage_earned")} {{ format(s.phage) }}
    `),e.stats.dark>0&&r.append(`
    ${t("achieve_stats_dark_earned")} {{ format(s.dark) }}
    `),e.stats.harmony>0&&r.append(`
    ${t("achieve_stats_harmony_earned")} {{ format(s.harmony) }}
    `),e.stats.blood>0&&r.append(`
    ${t("achieve_stats_blood_earned")} {{ format(s.blood) }}
    `),e.stats.artifact>0&&r.append(`
    ${t("achieve_stats_artifact_earned")} {{ format(s.artifact) }}
    `),r.append(`
    ${t("achieve_stats_knowledge_spent")} {{ format(t_know(s.know)) }}
    `),r.append(`
    ${t("achieve_stats_starved_to_death")} {{ format(t_starved(s.starved)) }}
    `),r.append(`
    ${t("achieve_stats_died_in_combat")} {{ format(t_died(s.died)) }}
    `),r.append(`
    ${t("achieve_stats_game_days_played")} {{ format(played(s.days)) }}
    `),e.stats.portals>0&&r.append(`
    ${t("achieve_stats_portals")} {{ format(s.portals) }}
    `),r.append(`
    ${t("achieve_stats_total_resets")} {{ format(s.reset) }}
    `),e.stats.mad>0&&r.append(`
    ${t("achieve_stats_mad_resets")} {{ format(s.mad) }}
    `),e.stats.bioseed>0&&r.append(`
    ${t("achieve_stats_bioseed_resets")} {{ format(s.bioseed) }}
    `),e.stats.cataclysm>0&&r.append(`
    ${t("achieve_stats_cataclysm_resets")} {{ format(s.cataclysm) }}
    `),e.stats.blackhole>0&&r.append(`
    ${t("achieve_stats_blackhole_resets")} {{ format(s.blackhole) }}
    `),e.stats.ascend>0&&r.append(`
    ${t("achieve_stats_ascension_resets")} {{ format(s.ascend) }}
    `),e.stats.descend>0&&r.append(`
    ${t("achieve_stats_descension_resets")} {{ format(s.descend) }}
    `),e.stats.apotheosis>0&&r.append(`
    ${t("achieve_stats_apotheosis_resets")} {{ format(s.apotheosis) }}
    `),e.stats.aiappoc>0&&r.append(`
    ${t("achieve_stats_aiappoc_resets")} {{ format(s.aiappoc) }}
    `),e.stats.matrix>0&&r.append(`
    ${t("achieve_stats_matrix_resets")} {{ format(s.matrix) }}
    `),e.stats.retire>0&&r.append(`
    ${t("achieve_stats_retire_resets")} {{ format(s.retire) }}
    `),e.stats.eden>0&&r.append(`
    ${t("achieve_stats_eden_resets")} {{ format(s.eden) }}
    `),e.stats.terraform>0&&r.append(`
    ${t("achieve_stats_terraform_resets")} {{ format(s.terraform) }}
    `),e.stats.geck>0&&r.append(`
    ${t("achieve_stats_gecks")} {{ format(s.geck) }}
    `),r.append(`
    ${t("achieve_stats_current_game")}
    `),r.append(`
    ${t("achieve_stats_knowledge_spent")} {{ format(s.know) }}
    `),r.append(`
    ${t("achieve_stats_starved_to_death")} {{ format(s.starved) }}
    `),r.append(`
    ${t("achieve_stats_died_in_combat")} {{ format(s.died) }}
    `),r.append(`
    ${t("achieve_stats_attacks_made")} {{ format(s.attacks) }}
    `),r.append(`
    ${t("achieve_stats_game_days_played")} {{ format(s.days) }}
    `),e.stats.dkills>0&&r.append(`
    ${t("achieve_stats_demons_kills")} {{ format(s.dkills) }}
    `),e.stats.sac>0&&r.append(`
    ${t("achieve_stats_sacrificed")} {{ format(s.sac) }}
    `),e.stats.murders>0&&r.append(`
    ${t("achieve_stats_murders")} {{ format(s.murders) }}
    `),e.stats.psykill>0&&r.append(`
    ${t("achieve_stats_psymurders")} {{ format(s.psykill) }}
    `),e.stats.uDead>0&&r.append(`
    ${t("achieve_stats_unstable")} {{ format(s.uDead) }}
    `),e.resource.hasOwnProperty("Thermite")&&e.resource.Thermite.amount>0&&r.append(`
    ${t("achieve_stats_thermite")} {{ res(r.Thermite.amount) }}
    `),ha().active){let i="";(e.stats.cfood>=13||e.race.cataclysm||e.race.orbit_decayed||e.race.warlord)&&(i=`${ar(7,12,!0)}`),r.append(`
    ${t("achieve_stats_trickortreat")} {{ format(s.cfood) }} ${i}
    `)}e.race.hasOwnProperty("gods")&&e.race.gods!="none"&&r.append(`
    ${t("achieve_stats_gods")} {{ species(g.gods) }}
    `),e.race.hasOwnProperty("old_gods")&&e.race.old_gods!="none"&&r.append(`
    ${t("achieve_stats_old_gods")} {{ species(g.old_gods) }}
    `),V({el:"#statsPanel",data:{s:e.stats,r:e.resource,g:e.race},methods:{played(i){return i+e.stats.tdays},t_know(i){return i+e.stats.tknow},t_starved(i){return i+e.stats.tstarved},t_died(i){return i+e.stats.tdied},format(i){return i.toLocaleString()},res(i){return(+i.toFixed(2)).toLocaleString()},species(i){switch(i){case"custom":return e.custom.race0.name;case"hybrid":return e.custom.race1.name;default:return t(`race_${i}`)}}}})}var is=[{version:"1.4.9",date:"9/21/2025",changes:["Bluecollar Governor: Raised production effect from 10/12% to 14/18%, now also affects factories.","Educator Governor: Raises professor effect by +30%.","Noble Governor: Mansion gives +7 citizens when upgraded.","Media Governor: 30/35% of overcapped morale can go past the morale cap.","Sports Governor: No longer has a soldier healing bonus, now raises surveyor infernite by 10/12%","Soldier Governor: Added 40%/50% healing bonus.","Added Japanese language.",'Added an "All" tab to the custom race lab.',"Added filled rate animation for resources, click resource name to disable.","Untrustworthy now affects Titan banks.","Soul capacitors now lose stored energy if you turn off all capacitors.","Discharge now affects the processing factory bonus instead of adamantite directly.","Servant hunters no longer produce 4x more furs with high pop.","Hunter job stress is now affected by high pop.","Synth assembly scales slower with high population.","Eldritch cattle slaughtering gives more food.","Tusked no longer penalized by hivemind","Adv. Spy operator is no longer free to use in Truepath without unlocking.","Many misc bug fixes, can't be bothered to document them."]},{version:"1.4.8",date:"5/16/2025",changes:["Psychic now works with Elysanite.","Parasite Assembly now works on a delay timer rather than a wind restriction.","Fixed bugs with trait mutation costs."]},{version:"1.4.7",date:"5/15/2025",changes:["Pit Miners now produce Chrysotile outside of Isolation.",'Fixed issue with "Hybrid" and Enlightenment.',"Fixed some problems with entering Isolation and ending Quarantine.","Fixed some broken wiki trait displays."]},{version:"1.4.6",date:"5/13/2025",changes:["Added Catnip and Anise traits to Ent/Pinguicula.","Fixed issue with saving trait ranks to custom export.","Performance Optimizations."]},{version:"1.4.5",revision:"b",date:"5/12/2025",changes:["Fixed issues with loading custom race data into custom lab.","Crates now correctly cost Bones instead of Boneweave with Iron Wood trait."]},{version:"1.4.5",revision:"a",date:"5/12/2025",changes:["Parasite now scales with rank.","Synthetic parasites can now only assemble new citizens when it's windy."]},{version:"1.4.5",date:"5/11/2025",changes:["New Custom/Hybrid Lab mechanics.","Added New Theme GrubBox (RedGreen CB) for Red/Green color blind players.","Technophobe perk race complexity changed to flat gene point bonus.","Overtapped has been removed, Negative traits instead pay a complexity tax.","Enviromentalist now scales with trait rank.","Thalassophobia replaced with Unfavored.","Optimistic cost lowered from 5 points to 3.","Fixed bug that could cause archfiends to queue with extra weapons."]},{version:"1.4.4",date:"5/7/2025",changes:["The native rank of Empowered for Nephilim is now 2.","Build queue will no longer spend Warlord skill points.","Dreaded will no longer unlock from Apotheosis.","Custom Hybrids will no longer unlock Gross."]},{version:"1.4.3",date:"5/4/2025",changes:["Evil Universe Scenario: Warlord.","Added Planned Obsolescence Feat.","You can now queue Spire Mechs.","You can now pet your cat or dog once every 5 minutes.","Symposium now gain Knowledge for all crew in Andromeda.","Evil Authority adjustments for Cataclysm, Lone Survivor, and Orbit Decay.","Soldiers assigned to Fortress guard duty now contribute Authority.","Updated Empowered trait mechanics.","Adjusted values for Master Artisan.","Evil Wendigo can now use Shovels.","Racconar can now recruit quarry workers.","You can no longer get more then 100 servants from each TP T4 reset.","You are now capped at 100 skilled servants from TP resets.","Empowered Concealment Wards changed to Empowered Nexus in Witch Hunter.","Breakdown improvements for some resources.","Uranium geology bonus now applies to Uranium Ash.","Spire boss resists now have a random element.","Slitheryn once again have slow digestion.","Fixed bug with Rogue trait that set crafted resources to 0.","Fixed bug that caused Hybrid species to throw an error when triggering greatness resets.","Fixed bug that caused Hybrid species to throw an error when triggering a Cataclysm reset.","Fixed issue with Iridium Smelters miscalculating result.","Fixed a variety of Joyless edge cases.","Fixed Space Casino appearing improperly in power grid.","Fixed Potato Battery in antimatter universe not benefiting from dark energy.","Fixed issue with Resonance not unlocking if you pillared without unlocking the gate towers.","Fixed divide by zero error with Soul Forge when you have 0 Authority.","Deprecated trait Frail will no longer show up in the Custom Lab.","Accessibility improvements.","Minor misc bug fixes."]},{version:"1.4.2",date:"3/23/2025",changes:["New Evil Universe Mechanics.","You now must maintain your Evil Authority.","Evil Hell now spawns 10% more demons than other universes.","Evil Dark Energy effects changed.","Evil Biodome produces less food but boosts marine garrison.","Various Evil flavor updates.","Various bug fixes."]},{version:"1.4.1",revision:"a",date:"12/2/2024",changes:["Fixed Ore Processor."]},{version:"1.4.1",date:"12/1/2024",changes:["Racconar now use the special Forager trait in place of Herbivore and Carnivore.","Genetics Lab now shows rank adjustments with Empowered.","Fixed wiki display of the Grand Death Tour progress.","Normalized Mimic and Imitate ranks.","Fliers will no longer be offered a new cement production method in Edenic realm.","Fixed issues with powered down Stargate.","Fixed various minor bugs."]},{version:"1.4.0",date:"11/28/2024",changes:["Push past the Spire and invade the Edenic Realms.","Added new planet trait: Kamikaze.","Added new CRISPR upgrade Bureaucratic Efficiency.","The Grand Death Tour is available after completing Apotheosis.","Custom Race lab now allows player to set a desired fanaticism trait.","You can no longer have more than 10 negative traits on a custom.","Invalid legacy customs will take a penalty called Overtapped in future game versions.","Truepath Ships can now be queued for construction.","Exotic Materials are now harder to replicate.","Progenitor races are now shown on stats page.","Symposium is now affected by piracy.","Gate Turrets will now kill demons when the Soul Forge is turned off.","Stellar Engine now has diminishing returns when pushed to extreme levels.","The number of spies available when starting a spy op now affects mission time.","Fluidized Bed Reactor no longer incorrectly applies to Nano Tubes.","Shrines now cycle their effect with moon phase if purchased during a full, new, or quarter moon.","Slitheryn Slow Digestion replaced with Astrologer.","Slow trait value changed from -5 to -6."]},{version:"1.3.17",revision:"c",date:"11/1/2024",changes:["Non-Evil Wendigo can now Trick or Treat!"]},{version:"1.3.17",revision:"b",date:"10/29/2024",changes:["Fixed Ghost #3 with Forge Trait.","Fixed Emocorn gloomy trait."]},{version:"1.3.17",revision:"a",date:"10/27/2024",changes:["Fixed Trick or Treat! Feat tracker."]},{version:"1.3.17",date:"10/13/2024",changes:["Cruisers now grant the correct number of soldiers in Fasting scenario.","Mass Ejector will now show a timer until destabilization if T3 previously completed.","Fixed Coal income in Cataclysm.","Adjusted High Pop growth rates.","Craftsmen have been renamed to Crafters.","Fixed some issues with the Wiki.","Fixed display error with Cultural Center."]},{version:"1.3.16",revision:"a",date:"9/30/2024",changes:["Fixed an issue with with Gravity Well challenge and having too many Railways."]},{version:"1.3.16",revision:"a",date:"9/30/2024",changes:["Fixed an issue with with Gravity Well challenge and having too many Railways."]},{version:"1.3.16",date:"9/29/2024",changes:["Pickaxes once again affect Coal Mines.","Changed Scientific Notation to Engineering Notation.","Added Scientific Notation option."]},{version:"1.3.15",revision:"a",date:"9/21/2024",changes:["Fixed Secret to Immortality feat not being awarded."]},{version:"1.3.15",date:"9/19/2024",changes:["Fasting scenario Demonic Infusion goal updated with new tastier experience.","Starvation risk tooltips added for Fasting scenario.","Mastery listed under stats tab now displays unmodified value.","Dark Bomb will no longer appear as an option after the demon lord is defeated."]},{version:"1.3.14",revision:"a",date:"9/2/2024",changes:["Fixed incorrect scientist label."]},{version:"1.3.14",date:"9/2/2024",changes:["Fixed various bugs with Fasting scenario.","Difficulty tweaks to Fasting scenario.","Added feat Icon for Fasting.","Ships in route to the Dwarf planet now check their fuel consumption.","Manual crafting is no longer affected by High Population trait.","Misc bug fixes."]},{version:"1.3.13",revision:"b",date:"8/6/2024",changes:["Fixed issue with starting Cataclysm Scenerio.","Fixed some issues with Fasting Scenario.","Fixed an issue with Replicator scheduler and supplies."]},{version:"1.3.13",revision:"a",date:"8/6/2024",changes:["Fix a bug that prevented crafting in Cataclysm and Lone Survivor modes."]},{version:"1.3.13",date:"8/6/2024",changes:["New Scenario by CondoSlime: Fasting.","More queue config options.","Wiki Search feature by sm3232","Language Updates.","Random bug fixes."]},{version:"1.3.12",date:"3/30/2024",changes:["Fixed Easter Event."]},{version:"1.3.11",date:"2/19/2024",changes:["Community fixes:","New Power settings.","Fixed loot bug with Gravity Well and Dark Energy.","Fixed pet names in pet events.","Fixed issue with Aquarius sign and Tourist Centers.","Fixed bugs with Arraak and Human thralls.","Many bug fixes related to High Population trait.","Many language updates."]},{version:"1.3.10",date:"1/23/2024",changes:["Added Gravity Well challenge mode.","Prepping the Bioseed ship for launch now has a Helium-3 cost.","Added new pet minor event","Polish language translation by Wied\u017Amin.","German language translation by FutterSillo.","Various UI improvements and language updates."]},{version:"1.3.9",date:"8/20/2023",changes:["Pressing the same tab key multiple times will now cycle the subtabs.","Reduced Mana costs of Improved Concealment, Study Corrupt Gem, & Outerplane Summon in Witch Hunter for non-gold star players.","Fixed Bilateral Symmetry DNA bonus.","Updated Korean and Chinese langs.","Screen Reader improvement for achievements display."]},{version:"1.3.8",revision:"a",date:"6/1/2023",changes:["Fixed high pop scaling."]},{version:"1.3.8",date:"6/1/2023",changes:["Unfathomable bug fixes.","Psychic powers up time now scale with rank of Ancient Nightmare.","Additional Psychic power upgrades.","Intergalactic Raider renamed to Corsair."]},{version:"1.3.7",revision:"a",date:"5/30/2023",changes:["Fixed issue with drawing the same alien species twice in intergalactic content.","Adjusted Mana costs for some research techs in Witch Hunter."]},{version:"1.3.7",date:"5/29/2023",changes:["Added Magic universe exclusive challenge: Witch Hunter.","Reduced Encrypted Data cost of Data Analysis, Advanced Medkits, Automated Warehousing, Elerium Extraction, and Drone Warfare techs.","Star Forge smelting bonus rebalanced.","Antimatter Dark Energy effect now applies to Truepath Ship power generation.","Fixed Magocracy Crystal bonus.","Reduced Crystal cost of Alchemy.","Fixed Humpback trait rank scaling.","Infiltrator can now steal Alien Biotech on Truepath.","Fixed brownout issue with using Replicator Gov task when constructing a new powered building.","Fixed rejuvenated trashed planet bonus.","Fixed orbit period on reterraformed planets."]},{version:"1.3.6",date:"4/22/2023",changes:["Added Astrological signs.","Added Motivated Event.","Operating Bases now function as Hospitals in Orbit Decay scenario.","Stellar Forge is now locked to using Star Fuel for smelting.","Species with the Forge trait can now use Inferno Fuel and Star Fuel.","Reduced Wireless Signal needed to Contact womlings in Lone Survivor."]},{version:"1.3.5",revision:"c",date:"4/16/2023",changes:["Made Egg #17 easier to get in Cataclysm mode."]},{version:"1.3.5",revision:"b",date:"4/9/2023",changes:["Increased egg accessibility with certain traits or challenge modes."]},{version:"1.3.5",revision:"a",date:"4/8/2023",changes:["Fixed a bug that caused eggs 16-18 not to count for unlocking the egg hunt feat."]},{version:"1.3.5",date:"4/7/2023",changes:["Avian species now have the Flier trait.","Avian Rigid trait replaced with Sky Lover.","Added Wireless storage to High-Tech farm in isolation","Fixed truepath dreadnought power costs.","Fixed a bug that could assign extra challenge genes.","Fixed a bug with changing languages with active Tau Ceti content.","Fixed many issues with preload tab content in the early game."]},{version:"1.3.4",revision:"b",date:"3/30/2023",changes:["Prevented some bugs caused by distributed power mode from occurring.","You can now unlock World Domination, Illuminati, Syndicate, and Pacifist in Truepath."]},{version:"1.3.4",revision:"a",date:"3/25/2023",changes:["A restore point is now made if you select isolation protocol."]},{version:"1.3.4",date:"3/24/2023",changes:["Evolving Synth can now choose imitation race from any species killed by an AI Apocalypse.","Fixed issue with miscalculating low fuel usage for various power generating structures.","Extractor Ship Isolation output boosted by 20%.","Added additional Hooved reskins.","Fixed various issues with Preload Tab Content.","Explorer Ship config is now locked down for Engine, Sensor, and Weapon components.","Skilled Servants assigned to craft inactive resources will now be refunded."]},{version:"1.3.3",revision:"a",date:"3/20/2023",changes:["Fixed a bug that could cause the Test Launch to be unavailable."]},{version:"1.3.3",date:"3/15/2023",changes:["Rebalanced Soul Gem drop mechanics.","Added Annihilation Feat.","Added additional Mass Ejector Optimizer config mode.","Servants are no longer affected by most racial traits.","The Lone Survivor can no longer benefit from Hivemind.","Fixed High Pop issue with Pit Miners.","Fixed bug with unlocking Replicator without a Governor."]},{version:"1.3.2",revision:"c",date:"3/8/2023",changes:["Fixed cataclysm reset while having preload tab content enabled."]},{version:"1.3.2",revision:"b",date:"3/5/2023",changes:["Fixed Rock Quarry under industry tab for Smoldering players."]},{version:"1.3.2",revision:"a",date:"3/5/2023",changes:["Adjusted hell calculation."]},{version:"1.3.2",date:"3/4/2023",changes:["High-Tech Factory changed back to tool modifier, however value is increased from original 25% to 90%.","Advanced Material Synthesis increased from 50% to 65%.","Added new interaction between Hell Surveyors and Drone victims.","Fixed bug that would cause Replicator Governor task to swap resources when focusing a resource without a cap.","Fixed inability to produce Chrysotile in Isolation."]},{version:"1.3.1",date:"3/3/2023",changes:["Added Advanced Material Synthesis tech to Isolation path.","High-Tech Factory crafting bonus changed from a Tool modifier to a direct multiplier.","Updated Mass Ejector Optimizer logic.","Fixed a bug that broke Cataclysm reset.","Fixed fuel calculation bug with Moon Bases and Spaceports.","Fixed issue with self replicating Synth and Nano.","Fixed bugs with purchasing CRISPR techs in Antimatter universe."]},{version:"1.3.0",revision:"b",date:"3/1/2023",changes:["Fixed issue with Mass Ejector Optimizer gov task breaking the governor subtab."]},{version:"1.3.0",revision:"a",date:"3/1/2023",changes:["Fixed Antimatter universe."]},{version:"1.3.0",date:"3/1/2023",changes:["The True Path has been extended, explore Tau Ceti and expand your civilization.","Added Perks: Evolve Master and Evolve Grandmaster.","Added Distributed Low Power mode setting.","Added Precognition CRISPR upgrade.","Strong trait now buffs basic jobs but has a weaker effect on manual resource collection.","Ships in Truepath can now only be scrapped at the Shipyard.","Truepath Sensor Range and Costs adjusted. Range now depends partly on base ship class.","Queue stacks now indicate first block vs last blocking resource with a gradient indicator.","Added screen reader improvements for blocking resources.","You can no longer unlock Anarchist by Cataclysm.","Syndicate will now also steal food from Biodomes.","Reinforced Shed upgrade now requires unlocking Iron Mining.","You must now construct a Titan Habitat before a Titan Mine.","Removed dark background effect from modal popups.","Increased Entrepreneur Governor trade bonus from 75% to 125% and Bank capacity boost from 10% to 12%.","Increased Media Governor morale bonuses and Library bonus.","Increased Soldier Governor combat bonus from 5% to 25%.","Increased Educator Governor knowledge bonus from 5% to 6%.","Increased Spiritualist Governor worker bonus from 10% to 20% and tourism bonus from $2 to $5 per Temple.","Increased Noble Governor tax cap bonus from 10% to 20%.","Bluecollar Governor now increases output of Coal and Oil power plants and boosts Miners, Smelter, and Oil Derrick.","Bureaucrat Governor now provides a slight boost to government effects."]},{version:"1.2.21",date:"1/10/2023",changes:["New Achievement filtering options in Wiki.","Updated Chinese lang file.","Updated Korean lang file."]},{version:"1.2.20",date:"9/16/2022",changes:["New homelessness system.","Factory, Mining Droids, and Graphene Plants will remember resource assignment after a low power shutdown.","Terraforming and Ascension can no longer be queued or multi-clicked.","AI Cores show correct bonus in tooltip.","Stealing Rocketry will now unlock rival in Truepath.","Playful will no longer remove unemployed stress with no hunters.","Andromeda Citizens will no longer stick around if abandoned by a stargate shutdown.","Fixed various bugs with mutating in or out some traits.","Made some improvements for screen readers to determine active state of challenges."]},{version:"1.2.19",revision:"a",date:"8/21/2022",changes:["Home Planet Orbital structures are now merged with the Moon instead of Red Planet in Cataclysm."]},{version:"1.2.19",date:"8/20/2022",changes:["Added rank scaling effects to traits: Carnivore, Hooved, Leathery, Unified, & Magnificent.","Structures orbiting the home planet are now moved to the Red planet after Orbit Decay or during Cataclysm.","Fixed a bug with deactivating fuel consuming structures when fuel runs dry.","Already active Governor tasks will no longer display for assignment in other task slots.","Constructing a Stellar or Infernal Forge will now assign Iron as a default resource instead of nothing.","Buffed effects of Star Forge fueled smelting.","Fixed an incorrect source label for money storage in Orbit Decay."]},{version:"1.2.18",revision:"a",date:"8/14/2022",changes:["Fixed ARPA queueing."]},{version:"1.2.18",date:"8/14/2022",changes:["More accurate timers when using Governor Trash Management task.","Optimistic Min Morale effect now scales with trait rank.","Fixed TP loot table when Assaulting or Sieging rival."]},{version:"1.2.17",revision:"a",date:"8/10/2022",changes:["Cheese Event power is now scaled with your cheese level.","Fixed Soft Reset bug with Rejuvenated."]},{version:"1.2.17",date:"8/10/2022",changes:["New Hell stats tracking and analytics.","Fixed Genetics not unlocking in Cataclysm.","Fixed many High Pop scaling interactions.","Fixed some loading bugs with wiki when no save data is present.","Updated various wiki entries and calculators.","Updated Pig Latin."]},{version:"1.2.16",revision:"a",date:"8/8/2022",changes:["Fixed OD bugs with Ziggurat, Garage, and Fabrication.","Fixed Launch Facility sometimes getting stuck in queue."]},{version:"1.2.16",date:"8/4/2022",changes:["Added Orbit Decay Challenge.","Added Retrograde planetary trait.","New achievement: Better dead than red.","New CRISPR upgrade: Civil Service.","Other stuff the dev was too lazy to document."]},{version:"1.2.15",revision:"a",date:"7/1/2022",changes:["Fixed bug that prevented games without save data from loading."]},{version:"1.2.15",date:"7/1/2022",changes:["Firework Festival now starts on July 1st and ends July 4th.","Added Dracula theme by azzzertyy.","Fixed bug with Horseshoe governor and multiplier keys.","Fixed issues with starting Cataclysm as Synth.","Fixed bugs with wrong path techs being displayed.","Evil Synth now start with a Graveyard instead of a Lumberyard.","Deify and study can no longer be queued at same time.","Restore backup no longer requires double clicking to trigger confirmation box."]},{version:"1.2.14",revision:"a",date:"4/19/2022",changes:["Fixed some minor bugs.","Updated some translations."]},{version:"1.2.14",date:"4/1/2022",changes:["Added Titan Mine slider to Industry tab.","Added additional popup confirmation to Restore Backup.","Nanite Factory interface now has tooltips for each resource","The Vault Discovery event can no longer occur if there are 0 Archaeologists and/or if Suppression is at 0%","Fixed bugs related to unlocking the Fool feat.","Fixed bugs with Mass Ejector optimizor governor task."]},{version:"1.2.13",date:"3/31/2022",changes:["Restore Backup must now be clicked twice to trigger."]},{version:"1.2.12",revision:"c",date:"3/7/2022",changes:["Fixed Double Density achievement."]},{version:"1.2.12",revision:"b",date:"3/2/2022",changes:["Fixed logic fault with mech constructor inferno upgrades."]},{version:"1.2.12",revision:"a",date:"3/1/2022",changes:["Fixed some bugs with planet traits.","Fixed bug with attacking on Swamp planets."]},{version:"1.2.12",date:"2/28/2022",changes:["Planets can now have upto two traits.","Advanced Biomes: Savanna, Swamp, Ashland, and Taiga can now appear.","Added Permafrost planetary trait.","Forest Biome lumber bonus changed from 15% to 20%.","Exotic materials are now ranked higher by the Mass Optimizer governor task.","Repair droid effect on Carport repairs buffed from 5% to 8%.","You must now discover the Hell Vault through Archaeology.","Water now has Mass."]},{version:"1.2.11",date:"2/16/2022",changes:["Added Doomed achievement to the perks lists.","Added Governor CRISPR tree to perks list.","Updated prestige gain/bonus calculators.","Fixed Ritual Casting not showing up in Industry in Cataclysm.","Detritivores no longer see the Farming ritual.","Fixed Entertainer tooltip showing twice the effect of Musical.","Fixed Gauss Rifles showing the effect for Disruptor Rifles.","Fixed Water Freighter tooltip showing half the Helium-3 cost.","Fixed some affordability checks."]},{version:"1.2.10",date:"2/7/2022",changes:["Bioseed probes now have significantly less cost creep inside True Path scenario.","You can no longer manually buy or sell resources while the game is paused.","Fixed bug with High Pop trait and Savings Bonds granting too much money.","Minor bug fixes"]},{version:"1.2.9",date:"1/29/2022",changes:["Spies may now sell you out when caught or escape when failing a mission.","Infiltrator can now steal Quantium tech inside True Path.","Genetics Lab UI updated."]},{version:"1.2.8",revision:"a",date:"1/19/2022",changes:["Fixed Farmer per Farm scaling with High Pop trait.","Adjusted low end scaling of High Pop Hivemind trait.","Wireless Signal cost for Symposium lowered.","Added Anarchy scaling with High Pop"]},{version:"1.2.8",date:"1/19/2022",changes:["Insectoid genus redesigned with High Population trait.","Fixed bug that caused incorrect timer calculations when using Slow or Hyper trait at any rank other than 1."]},{version:"1.2.7",revision:"a",date:"1/11/2022",changes:["Fixed storage bug with standard universe."]},{version:"1.2.7",date:"1/11/2022",changes:["Failed Experiment Challenge mode.","Ziggurat bonus separated from base production of buildings.","Fixed bug that prevented smoldering races from being able to loot Chrysotile","Fixed bug that would cause Intergalactic Tech page in wiki not to load if you were playing in Antimatter universe."]},{version:"1.2.6",date:"12/24/2021",changes:["Fixed bug that prevented custom Synthetic race from showing if you refreshed the page.","Fixed bugs with Synthetic evolution and traits: Calm, Cannibalize, and Magnificent.","Fixed bugs with using the quick tab keys when preload tabs is enabled."]},{version:"1.2.5",date:"12/21/2021",changes:["Fixed bug that caused a planet to lose its geology traits after an AI reset.","Fixed bug with scavenger job description."]},{version:"1.2.4",date:"12/19/2021",changes:["Solar system now has elliptical orbits.","Fixed Evolve Adept Food bonus.","Rank of each aquired trait is now listed in genetics tab.","Crate/Container sources are now listed in resource popup.",'Manual buying/selling will auto scale down to prevent "waste".']},{version:"1.2.3",date:"12/16/2021",changes:["Expanded Festive Season to include additional species."]},{version:"1.2.2",date:"12/15/2021",changes:["Graphene Plants now show on industry tab for True Path.","Added entry for Festive Season into wiki.","The game wiki will now load without any game data."]},{version:"1.2.1",date:"12/14/2021",changes:["Smelter metals can now be reallocated without unassigning.","Increased accuracy of syndicate intel data","Fixed bug with removing Weak & Bad genes when toggling True Path.","Fixed bug with adding or removing Professors not updating indoctrination value.","Fixed bug with Planet Wiki entry that prevented some data from loading.","Added trait rankings to wiki."]},{version:"1.2.0",revision:"a",date:"12/12/2021",changes:["Fixed bug with Plasmid Storage.","Fixed bug with Befuddle trait and Espionage.","Fixed bug with Composting.","Updated Solar Map.","Added setting to enable mobile device support.","Minor buff to TP Frigate power."]},{version:"1.2.0",date:"12/12/2021",changes:["Unlock the True Path (Requires completion of Ascension or Demonic Infusion).","Using Fanaticism to gain an unempowered trait you already possess will now empower that trait.","Added option to Hell Fortress to prevent using ship crew as reinforcements.","Shrine Metal bonus now applies to Mining Droid Aluminium production.","Armored trait now prevents 50% of deaths.","Cannibalize healing now applies a percent based bonus instead of being equivalent to 3 5% Hospitals.","GruvBox Dark is now the default theme.","Added Evolve Adept Perk.","Themed several additional weapon techs in magic universe for immersion.","Smoldering and Chilled effects now display as Smoldering or Chilled in production breakdowns instead of Hot/Cold.","Improved touch device support."]},{version:"1.1.17",date:"11/28/2021",changes:["Job stress from Civilian Ship Crew is now calculated correctly.","Things will now show as unaffordable if they require a locked resource.","Added new entries to Mechanics section of Wiki: Job Stress, Cost Creep, and Warmonger.","Evolve Novice and Evolve Journeyman perk conditions updated."]},{version:"1.1.16",date:"10/30/2021",changes:["Ghost #3 can now be captured with Smoldering.","Ghost #7 can now be captured in Cataclysm mode.","Updated description of Trick or Treat feat.","Llamas will no longer harass carnivores, detritivores, and soul eaters by grazing their fields."]},{version:"1.1.15",date:"10/20/2021",changes:["Added buttons to pause queues.","Cracked Pylons now correctly add to Mana cap.","Pillar of Bones will no longer be rolled with the Smoldering trait.","Fixed bugs with removing Terrifying trait.","Fixed bug with items in queue blocking the next item when it couldn't be completed due to negative production of a resource.","The Tax-Morale governor task is now slightly smarter."]},{version:"1.1.14",revision:"a",date:"9/30/2021",changes:["Fixed Pylon bug with upgraded save games in Magic Cataclysm runs.","Fixed a Message Log filtering problem where some players might not unlock some options."]},{version:"1.1.14",date:"9/29/2021",changes:["New settings options for message log filters.","Added Cracked Pylons for Magic Cataclysm mode.","Conjuring is no longer researchable in Cataclysm mode.","Challenges section added to Wiki under Gameplay.","Smoldering Gnawer will now consume Stone instead of nothing."]},{version:"1.1.13",date:"9/5/2021",changes:["Expanded Mechanics entries in wiki.","Fixed some errors in wiki prestige calculators.","Added a Custom Lab calculator to wiki under species."]},{version:"1.1.12",date:"8/19/2021",changes:["Training Timer for Military tab.","Draggable config options for Spy Operator.","Bug fixes for log and queue windows."]},{version:"1.1.11",date:"8/12/2021",changes:["ARPA projects now contribute to inflation.","Mercenaries costs are now affected by inflation.","Trade is now affected by inflation.","Casino income is now affected by inflation.","Luxury Goods income is now affected by inflation.","Rescaled inflation levels.","Wheelbarrow achievement now requires $250 billion.","Inflation bug fixes.","New message log filters.","Fixed Luxury Goods tooltip money value."]},{version:"1.1.10",date:"8/8/2021",changes:["Added Inflation Challenge Mode. Requires Scrooge achievement to unlock.","Import/Export race feature added to Ascension lab.","Added merge options for queue.","Available space in queue is now shown.","Added Blackhole + Mass Ejector mechanic entry to wiki.","Fixed some display bugs with Alchemy.","Fixed bug where Protoplasm could be required by some structures late in hell phase."]},{version:"1.1.9",date:"7/7/2021",changes:["Firework festival bug fix for cataclysm mode."]},{version:"1.1.8",date:"7/3/2021",changes:["Added firework festival event (July 4th - July 8th).","Added Copper and Iron settings to Mass Ejector Optimizer task.","Current Quantum Level now shown on Citadel Stations.","Updated wiki prestige calculators.","Added a Quantum Level section to wiki."]},{version:"1.1.7",date:"6/29/2021",changes:["Added a Mass Ejector Optimizer governor task.","Fixed precision error with Tech Scavengers.","Prestige calculators added to wiki.","Progress related event section added to wiki.","Anti-plasmids gained from MAD in antimatter universe are now correctly calculated."]},{version:"1.1.6",date:"6/19/2021",changes:["Solstice event is now easier for less seasoned players.","Wharves are no longer affected by the Nomadic trait.","Decreased cost of Iron Horseshoes."]},{version:"1.1.5",date:"6/16/2021",changes:["Support for String Packs.","Separate research queue behavior option.","Balorg can now use the governor tax task."]},{version:"1.1.4",date:"6/11/2021",changes:["Fixed a bug that would sometimes cause mechs to be constructed without weapons.","Fixed a bug that would cause an open tooltip to change descriptions when a queue item completes."]},{version:"1.1.3",date:"6/7/2021",changes:["Improvements to tooltip reliability.","The first Horseshoes can now be constructed out of Lumber if available as a resource.","Horseshoe pacing updated, see Hooved entry in wiki for expanded information."]},{version:"1.1.2",date:"6/6/2021",changes:["Added Money Reserve % config value to Slave replacement task.","Various special buildings are now dropped from the queue if you remove their required trait.","Spy Operator will no longer attempt espionage against controlled cities.","Fixed many issues with labels not updating"]},{version:"1.1.1",date:"6/5/2021",changes:["Unifying during banana republic now triggers an automatic backup save.","Holding a key multiplier with the queue key will now queue mulitple of a building.","Dealmaker import bonus buffed from 40% to 75%.","Nerfed Beast trait to 8% hunting / 15% windy hunting / 10% soldier training.","Restored Cautious trait to Carnivore genus.","Added Money Reserve % config values to Merc and Spy recruiter tasks.","Horseshoes can now be queued.","Adamantite Horseshoes are now much cheaper.","Changed progression system for Horseshoe costs, will not change to next resource unless it's unlocked."]},{version:"1.1.0",date:"6/4/2021",changes:["Appoint a Governor to help run the everyday tasks, unlock in the CRISPR lab.","Animal genus split into 2 new beast genus: Carnivore & Herbivore.","Carnivore Species: Cath, Wolven, Vulpine.","Herbivore Species: Centaur, Rhinotaur, Capybara.","Cath, Wolven, and Centaur redesigned.","Spire Mech Combat rebalanced.","Titan mechs now have 4 weapon slots and an extra equipment slot.","New Equipment: Jump Jet (All but Heavy & Titan), Battery (Heavy Only), and Targeting Computer (Titan Only).","New Scavenger mech type","Reweighted Angelic genus trait costs.","Major event messages are now shown in a different color from minor ones.","Decreased frequency of minor events.","Smoldering no longer applies to a variety of special resources.","Frenzy renamed to Blood Thirst.","Madagascar Tree achievement now requires inheriting Blood Thirst instead of Carnivore.","Expanded Hell section of Wiki"]},{version:"1.0.43",date:"5/18/2021",changes:["Banana Smoothie will no longer unlock for free in alternate universes.","Added a Spire Floor clear timer for previously beaten monsters.","Gate Turrets now correctly contribute to demon kills."]},{version:"1.0.42",date:"5/4/2021",changes:["Minor bug fixes with new events."]},{version:"1.0.41",date:"5/3/2021",changes:["Added launch day event for May 6th.","New minor event system.","The same event can no longer trigger twice in a row."]},{version:"1.0.40",date:"4/11/2021",changes:["Special event race reskins will now persist after event ends until reset.","Added a warning to Unification tech if playing Banana Republic scenario."]},{version:"1.0.39",date:"4/9/2021",changes:["Added challenge win conditions to planet description popover."]},{version:"1.0.38",date:"4/4/2021",changes:["Fixed a bug that prevented some races from acquiring Egg #3."]},{version:"1.0.37",date:"4/3/2021",changes:["Fixed a bug with unlocking the Egg Hunt feat."]},{version:"1.0.36",date:"4/1/2021",changes:["Fool Feat will automatically upgrade to current challenge level for eligible players."]},{version:"1.0.35",date:"3/31/2021",changes:["Changed Blackhole objective of Banana Republic scenerio from stabilize a blackhole to Expand a blackhole to 12 solar mass without exotic matter.","Fixed Terrifying trade exploit in Banana Republic scenerio."]},{version:"1.0.34",date:"3/28/2021",changes:["Added the Banana Republic challenge.","Tax Riots will no longer cause loss of Artifacts, Blood Stones, and other key resources.","Cancel all routes option for trade screen.","Protests no longer apply their penalty twice.","Minor genetic traits can now be reordered by dragging.","Max trade routes per resource type are now governed by Large Trade and Massive Trade upgrades.","Misc minor bug fixes."]},{version:"1.0.33",date:"3/20/2021",changes:["Enhanced threat assessment for Spire.","Added a Save as File option for exporting game state."]},{version:"1.0.32",date:"3/19/2021",changes:["Unemployment Rework.","Fixed reactivity of some tooltips.","Fixed cut off tooltips on settings tab.","Xeno Tourism now requires 10 Monuments and Tourism."]},{version:"1.0.31",date:"3/15/2021",changes:["Alien 1 system is now named after their homeworld.","Alien 2 system is now named after their red planet.","Fixed various cut off tooltips."]},{version:"1.0.30",date:"3/4/2021",changes:["Wharves once again now grant the correct number of trade routes.","Fixed errors with Casino vault size.","Sacrificed Citizens stat for Mantis players.","Factory production can be assigned without first removing it from Alloy production."]},{version:"1.0.29",date:"2/25/2021",changes:["Evolved species will no longer be stuck in the queue after evolution.","Fixed potential viewport scrolling issues with Settings and Evolution tabs.","Added a warning for users running Evolve in multiple tabs.","The game will now remind players to backup their game data once every 100,000 game days."]},{version:"1.0.28",date:"2/21/2021",changes:["Queue can now be used during evolution stage if unlocked with CRISPR tech.","Fixed incorrect Scarletite costs with Wasteful trait.","Graphene Plants now default to Oil with Smoldering.","Fixed many string errors."]},{version:"1.0.27",date:"2/11/2021",changes:["Added Trade Federation achievement.","Added Mastery section to perks page.","Fixed aria label of jobs.","Squished achievement will now unlock from Blackhole or Demonic Infusion."]},{version:"1.0.26",date:"1/30/2021",changes:["Enhanced crafted material popovers.","Universe filters for wiki achievements page.","Cheese Guide."]},{version:"1.0.25",date:"1/23/2021",changes:["Added Piracy section to Wiki under Gameplay-Mechanics.","Numerous minor bug fixes."]},{version:"1.0.24",date:"1/17/2021",changes:["Evil Smoldering races can now research bone tools."]},{version:"1.0.23",date:"1/16/2021",changes:["Redesigned Heat based Genus mechanics.","Untapped Potential formula changed: now has diminishing returns for stacking unspent genes.","Faith now has an effect on auto crafting (Craftsmen Only).","Added new topics to Mechanics section of Wiki.","Minor bug fixes."]},{version:"1.0.22",date:"1/15/2021",changes:["Fixed Cataclysm mode game start."]},{version:"1.0.21",date:"1/10/2021",changes:["Gain upto 8 hours of accelerated time when game is stopped/closed.","Optimized tab content loading for performance.","Pause game feature."]},{version:"1.0.20",date:"12/29/2020",changes:["Fixed issue with keyup event not releasing multiplier keys."]},{version:"1.0.19",date:"12/28/2020",changes:["Studious now improves library knowledge by 10%.","Merchant now increases the amount of resources gained from trading by 10%.","Tracker raised from 10% to 20%.","Resourceful raised from 10% to 12%.","Claws raised from 20% to 25%.","Apex Predator combat bonus raised from 25% to 30%.","Forge Geothermal power boost raised from +1MW to +2MW.","Beast trait now boosts Hunting by 10% or 20% when windy and improves soldier training time by 20%.","Beast gene point cost changed from 2 to 3 points.","Top level tab quick selection key bindings (default 1-7)."]},{version:"1.0.18",date:"12/24/2020",changes:["Fixed issue with species costs on some techs requiring protoplasm without a reload."]},{version:"1.0.17",date:"12/19/2020",changes:["Larger font size modes.","Added descriptions for city sectors.","Last 3 event messages will now be preserved on reload.","Fixed Evolution bugs with Unbound Infusion active.","Improved timer accuracy of stacked queue items when No Queue Order is used."]},{version:"1.0.16",date:"12/16/2020",changes:["Dark Bomb: Kill and Reset the Demon Lord's accumulated strength using the new Dark Bomb.","Bonus Artifacts can now be earned during Demonic Infusion if Spire floor 50 or 100 are cleared.","Renamed the tech upgrade Purify to Enhanced Air Filters in order to prevent confusion with the Blood Infusion Purify."]},{version:"1.0.15",date:"12/12/2020",changes:["Redesigned Inferno Reactor, output is now tied to Infernal Forge.","Steel can once again be discovered by Ambush attacks.","Power Grid is now shown in Cataclysm.","Cataclysm reset no longer incorrectly grants Rapid Mutation or Ancient Ruins.","Many minor bug fixes."]},{version:"1.0.14",date:"12/8/2020",changes:["Vacuum Collapse no longer removes all charges of Corrupted bonus.","Vacuum Collapse now correctly increases Dark Energy earned on the stats page.","Lumber Ritual is no longer displayed to Evil races.","Multiplier keys now work when hiring mercenaries."]},{version:"1.0.13",date:"12/4/2020",changes:["Power Grid now correctly unlocks when gaining Electricity from Infiltrator trait.","Feats Garbage Pie and Finish Line can now be unlocked by Demonic Infusion."]},{version:"1.0.12",date:"12/4/2020",changes:["MechBay tab improvements.","Mechlist can now be reordered by dragging.","Power Grid can now control On/Off state.","Support type structures can now be controlled by the power grid."]},{version:"1.0.11",date:"12/2/2020",changes:["Fixed a memory leak.","Minor adjustments to GruvBox Dark theme.","Cheesy Goodness."]},{version:"1.0.10",date:"12/1/2020",changes:["Ascended buff now persists after Demonic Infusion.","New Themes: GruvBox Light, GruvBox Dark, and Orange Soda."]},{version:"1.0.9",date:"11/29/2020",changes:["Perks separated on to a separate tab under Stats.","Added Perks section to Wiki."]},{version:"1.0.8",date:"11/28/2020",changes:["Base Neutronium cost of Inferno Reactor lowered to 3,750,000.","Fixed Valdi genus traits after evolution.","Prepared rank 2 now correctly applies when building mechs.","Power Grid is now more strict in checking what is available.","Fixed bug that sometimes caused crafting to use a wrong Mastery value."]},{version:"1.0.7",date:"11/25/2020",changes:["Fixed a bug where Technocracy prevented Alien 2 & Chthonian invasions from working."]},{version:"1.0.6",date:"11/24/2020",changes:["Fixed Mechlab quick switch button.","Titan class mech power increased by 12.5%."]},{version:"1.0.5",date:"11/22/2020",changes:["Adjustable Power Grid","Light Theme bug fixes."]},{version:"1.0.4",date:"11/21/2020",changes:["Gains from Alchemy are now higher.","Any mixed fleet can now invade the Alien 2 and Chthonian systems as long as the invasion force is strong enough.","Alien 2 Invasion requires minimum of 400 fleet rating and at least 650 to take no losses.","Chthonian Invasion requires a minimum 1250 fleet rating, 2500 for average losses, and 4500 for minimum losses."]},{version:"1.0.3",date:"11/15/2020",changes:["Fixed compost heap values.","Added combat section to the wiki under gameplay.","Added Equilibrium feat for pillaring every species.","The Misery feat can now be earned from Demonic Infusion."]},{version:"1.0.2",date:"11/10/2020",changes:["Valdi now take your chosen Genus instead of humanoid.","Wrath Blood Infusion now properly applies to all Mech fights.","Artifacts can now be spent properly on the CRISPR tab.","Crystal trade prices adjusted.","Megalith base price reduced from 100k to 55k.","Many minor bug fixes."]},{version:"1.0.1",date:"11/08/2020",changes:["Fixed display bug with CRISPR costs and Technocracy.","Fixed issue with some Windmills not producing power.","The Resort now properly formats its vault size."]},{version:"1.0.0",date:"11/07/2020",changes:["Expanded Interdimensional content, delve deep into the hell dimension.","New Magic Universe.","Fling asteroids into the blackhole with the Asteroid Redirect ARPA project.","The same monument type will no longer be chosen twice in a row.","Evil races can now construct a Pillar of Bones monument type.","Democracy now only affects Entertainers.","Some government bonuses now scale with tech era.","Races with Detritivore can now build Windmills.","Base Aluminium income for plant based species is now roughly 10% higher.","Beast of Burden now grants an extra loot roll instead of a 10% boost.","Revamped combat loot formulas.","Build queue resource highlighting.","Low Contrast Dark Night Theme.","Ewnay igpay atinlay anguagelay."]},{version:"0.9.24",date:"11/1/2020",changes:["Holiday icons from feats earned with no stars can now be accessed.","Challenge feat icons still require at least 1 star."]},{version:"0.9.23",date:"10/30/2020",changes:["New settings option for people who hate fun.","Added ability for an obscure combination of settings and racial traits to get Ghost #3"]},{version:"0.9.22",date:"10/28/2020",changes:["Halloween cosmetic effects will now run for the duration of the Trick or Treat event instead of just on Halloween.","Ents, Dryads, and Salamanders can now find all the Ghosts.","A certain Ghost is now easier to obtain in Cataclysm.","Accessibility improvements for the event."]},{version:"0.9.21",date:"10/27/2020",changes:["Trick or Treat Event, runs from 10/28 - 11/4."]},{version:"0.9.20",date:"10/16/2020",changes:["Fixed bug with the holy trait that improperly applied its bonus."]},{version:"0.9.19",date:"9/1/2020",changes:["Swarm Control AI now provides a base increase of +2 before unlocking Quantum Computing.","Fixed bugs with manual crafting popover.","Fixed bug that stopped DNA & RNA generation during evolution if the Cataclysm scenario was toggled on."]},{version:"0.9.18",date:"8/28/2020",changes:["ARPA Queue timer fixes.","Swarm Control AI upgrade now make Control Stations scale with Quantum level."]},{version:"0.9.17",date:"8/22/2020",changes:["Fixed bug that prevented Cataclysm Ascension from completing.","Rank 1 sacrifice is slightly less effective","Rank 3 sacrifice is significantly more effective","New Research is now shown by Era."]},{version:"0.9.16",date:"8/12/2020",changes:["Bug Fixes by Beorseder:","Fixed issue where Exotic Materials Lab and Fortifications would clear current queue.","Fixed Scavengers not working during Cataclysm.","Fixed display bug with Galactic Exchange during Cataclysm.","Genomic Mutations no longer give the wrong number of Genes without Synthesis upgrades.","Genomic Mutations now tell how many Plasmids/Antiplasmids are gained from them.","Techs now display their requirements on the wiki."]},{version:"0.9.15",date:"8/10/2020",changes:["Tax revolts can no longer destroy Soul Gems.","If you lose your sample of Elerium before researching Elerium Mining it will now be replaced."]},{version:"0.9.14",date:"8/9/2020",changes:["Angelic races now have an innate bonus vs demonic creatures.","Enhanced Muscle Fibers added to perks page.","Genome sequencing will now be off by default in Cataclysm.","Reorganized achievements page in Wiki."]},{version:"0.9.13",date:"8/6/2020",changes:["Special resource descriptions now update."]},{version:"0.9.12",date:"8/3/2020",changes:["Added Crossed the Finish Line feat for Ascending with Cataclysm.","Adjusted many post World Collider Cataclysm things that referenced none existent planetary structures.","Added a fix for Stabilize Blackhole being stuck in an untriggerable state.","Upgrading achievements will now send a notification."]},{version:"0.9.11",date:"8/1/2020",changes:["Fixed a bug that caused Factories to charge the wrong amount of Polymer for producing Synthetic Furs."]},{version:"0.9.10",date:"7/30/2020",changes:["Expanded list of potential enemy city names.","Added Synthetic Fur option to Factories.","Restoring a backup after a Cataclysm will now allow you to Cataclysm again.","Fixed Lumber penalty on Desert worlds.","Many minor bug fixes."]},{version:"0.9.9",date:"7/21/2020",changes:["Added Devotion upgrade to ancients CRISPR line between Faith and Acolyte. The total cost is the same, it's just spread out more.","Players with Ancients 4 are granted Ancients 5 automatically, those with Ancients 3 are refunded 300 Plasmids.","Added Enhanced Muscle Fiber CRISPR upgrade.","High tax morale penalty under Oligarchy is now reduced.","Fixed bugs with Blackhole reset and restoring backups.","Fixed bug with adjusting taxes as a Noble race that would set it to the max."]},{version:"0.9.8",date:"7/18/2020",changes:["Czech translation by Mousesama","The slaves have staged a successful hunger strike to demand better living conditions, as a result slave pens can now only hold 4 slaves each.","Autocracy and Frenzy no longer block Immoral races from gaining a Warmonger bonus.","Geology traits now display under planet information.","Popovers added to building and research queues."]},{version:"0.9.7",date:"7/13/2020",changes:["Seasons no longer exist in Cataclysm mode.","It is no longer Sunny in Cataclysm mode.","Parasites are no longer unable to grow population in Cataclysm mode, but they do take a growth penalty.","Base Sawmill effect is now separated from lumberjack in production breakdown."]},{version:"0.9.6",date:"7/10/2020",changes:["Fixed bug with Infiltrator not unlocking Nanoweave.","Fixed bug with Railways not adding traderoutes correctly in Cataclysm mode."]},{version:"0.9.5",date:"7/6/2020",changes:["Fixed a bug that occurred when combining the Terrifying trait with the gold star Iron Will perk."]},{version:"0.9.4",date:"7/3/2020",changes:["Failed History perk raised from +1 Geothermal to +2 Geothermal energy.","Fixed Oligarchy tax riot immunity between 36%-45%.","Infiltrator can now steal Graphene Processing, Nanoweave, and Orichalcum Analysis techs."]},{version:"0.9.3",date:"7/1/2020",changes:["Increased base number of Plasmids earned in Cataclysm mode."]},{version:"0.9.2",date:"6/30/2020",changes:["Added Restore Backup option, restores game to just before your last prestige reset.","Extended Recombination CRISPR line.","When gaining a random minor trait from Fanaticism, you will now gain 5 ranks of it."]},{version:"0.9.1",date:"6/21/2020",changes:["Fixed Dyson Net."]},{version:"0.9.0",date:"6/21/2020",changes:["Added Scenarios Section to Evolution Challenges.","Added Cataclysm Scenario for those who value science over caution.","Genetic Dead End is now classified as a Scenario.","Plant genus redesign. Photosynth trait replaced with Sappy.","Added 3rd race option for Plant genus: Pinguicula.","Dyson Net now provides partial power as it is constructed.","Added Orichalcum upgrade for Dyson Sphere.","Added Xeno Tourism upgrade.","Added Fertility Clinic upgrade for Hospitals.","Added OTB, Online Gambling, & Bolognium Vault upgrade for Casinos.","Added Scrooge achievement.","Added Soul Link upgrade for Soul Forge/Soul Attractors.","Reduced Bolognium cost of Freighters & Corvette Ships.","Increased rating of Corvette Ships to 30.","Piracy will no longer start until after you construct the Embassy.","Reduced power requirement of Soul Forge and Soul Attractor.","Gun Emplacements and Soul Attractors are now more potent.","Reduced requirement of Demon Slayer feat to 666 Million demon kills."]},{version:"0.8.17",date:"5/30/2020",changes:["Added 3rd race option for Fungus genus: Moldling.","Fungi genus Spore trait replaced with Detritivore.","Casinos now start powered and generated money immediately.","Extreme Dazzle upgrade now boosts Casino income by 50%.","Reduced power requirement of Casino by 1.","Casino Max Morale boost no longer works unless casino is powered.","Occupation will now unlock Federation research.","Added Double Density achievement in heavyverse.","Stoned penalty on mellow planets raised to 10%.","Unemployed citizens on mellow planets no longer generate any stress (note: hunters are NOT unemployed).","Life on mellow planets is now overall less stressful.","Slaver trait rating raised to 12.","Barracks can now be switched off.","Space Stations will now automatically staff Space Miners from the default job when constructed.","Factories now default to producing Alloy instead of Nothing."]},{version:"0.8.16",date:"5/8/2020",changes:["Oceanic biome now applies a 6% bonus to Titanium from Steel smelting.","Oceanic biome now applies a 12% bonus to Titanium from Iron smelting.","Oceanic biome now applies a 5% penalty to Fur generation.","Tundra biome now applies a 25% bonus to Fur generation.","Tundra biome now applies a 10% penalty to Oil generation.","New planetary modifiers: Elliptical, Flare, Dense, and Unstable.","Oligarchy tax riot immunity raised from 35% to 45%."]},{version:"0.8.15",date:"5/2/2020",changes:["Grassland biome Food bonus raised to 20%.","Forest biome Lumber bonus raised to 15%.","Desert biome now applies a 25% Lumber penalty.","Desert biome now gives a 20% stone bonus and a 10% Oil bonus.","Volcanic biome now applies a 10% Food penalty.","Volcanic biome now gives an 8% Iron and 12% Copper bonus.","Added partial Korean translation.","Achievements in the wiki are now sorted Alphabetically.","Some achievements now show completion progress in the wiki."]},{version:"0.8.14",date:"4/30/2020",changes:["Post unification Federation now gives a 32% bonus (raised from 30%).","Federation now increases morale by 10%.","Socialist factory bonus is now 10% (raised from 5%).","Socialist crafting bonus is now 35% (raised from 25%).","Corpocracy factory bonus is now 30% (raised from 20%).","Corpocracy factory bonus now applies to Cement, Graphene, and Vitreloy.","Republic now increases morale by 20%.","Oligarchy tax revenue penalty is now 5% (lowered from 10%).","Oligarchy can now set taxes 20% higher than other governments (raised from 10%).","Technocracy now adds a 10% Knowledge gain bonus.","Autocracy governments are now immune to the warmonger penalty.","Priests now apply a bonus to Ziggurats under Theocracy.","Fixed display of Theocracy effect on temples. This gives a 12% bonus but was only displaying as a 5% increase.","Noble Oligarchy can now set their taxes as high as 40%."]},{version:"0.8.13",date:"4/29/2020",changes:["New research is now sorted by knowledge cost.","Added popover descriptions for prestige resources.","Harmony Crystals now boost standard Dark Energy by 0.1% instead of 0.01%.","Lots of minor bug fixes."]},{version:"0.8.12",date:"4/24/2020",changes:["Farming has been redesigned. Farms no longer directly generate food, Farmers now generate food in combination with Farms.","Added Energizer Feat for ascending without building any Thermal Collectors.","Bad traits no longer count for Ascension Species Creator complexity.","Dreaded Achievement will now unlock if you never researched dreadnoughts.","Fixed issue with some feats spamming the log due to micro achievements.","Fixed base training rate of soldiers.","Fixed bug with diverse trait that made it do the opposite of what it was suppose to do.",'Adjusted color of "purple" text on Night theme.',"Kilowatts are now Megawatts."]},{version:"0.8.11",date:"4/16/2020",changes:["Ascension reset no longer offers planet choices, instead your next race is created on the old planet with bonuses added to that planet.","Ascended planets now gain +2% to all geology deposits, +5% production, +10% storage, and +2 Sundial base Knowledge gain.","Unspent gene points in the Ascension Lab will be converted into Untapped Potential.","Ascension lab now has a complexity gene tax for adding more than 4 traits.","Technophobe perk now applies an additional bonus to custom race complexity.","Paranoid and Hoarder can now be combined.","Over capped slaves will now be released."]},{version:"0.8.10",date:"4/13/2020",changes:["Added EM (Electromagnetic) Field Challenge."]},{version:"0.8.9",date:"4/12/2020",changes:["Added a Feat for finding all the Eggs.","Current egg count can now be checked in the Wiki."]},{version:"0.8.8",date:"4/12/2020",changes:["Easter Event Activated","Event ends 10 days after the start of Easter."]},{version:"0.8.7",date:"4/11/2020",changes:["Fixed Pathetic trait."]},{version:"0.8.6",date:"4/11/2020",changes:["Fixed Brute trait.","Added section for Achievements and Feats to Wiki."]},{version:"0.8.5",date:"4/11/2020",changes:["Added New Work in Progress Game Wiki","Sentience is now more likely to grant a species where the extinction achievement has not yet been earned.","Sentience can now include custom races.","Incorporeal Existence research now costs Phage instead of Plasmids.","Ascension research now Plasmids instead of Phage.","The change log is now part of the Wiki."]},{version:"0.8.4",date:"4/4/2020",changes:["Fixed breaking bug with Rigid trait."]},{version:"0.8.3",date:"4/3/2020",changes:["Federation now reduces the soldier requirement of occupied cities by 5.","Fixed incorrect Industrious string."]},{version:"0.8.2",date:"3/30/2020",changes:["Piracy in the Gateway and Stargate regions ramp up more slowly as you explore Andromeda.","Fixed formatting of multiline Crafting Tooltip cost display.","Fixed incorrect string used by completed Dyson Sphere."]},{version:"0.8.1",date:"3/29/2020",changes:["Piracy now slowly takes effect in the Gateway System and Stargate region over 1000 days after piracy begins.","Purchasing Negotiator and levels of Persuasive will now update the regular Market as well as the Galactic Market.","Added new CRISPR upgrade effects from the Challenge, Ancients, and Trader trees to the perks list.","Queued Monuments will update their name in the queue when a Monument is constructed.","Fixed bug where ARPA projects at the end of the Queue while No Queue Order was active would cause No Queue Order to not work as intended.","The name of the trait gained from a Mutation in the message is now localized.","Adding Apex Predator will remove currently obtained Armor techs.",'Annexed/Purchased powers will now have a respective " - Annexed"/" - Purchased" tag next to their name, like Occupied powers do.',"Blackhole reset gives its proper reward again.","The amount of Gene/Phage levels of Minor Traits purchased is now affected by Multiplier Keys.","The amount of Ships moved from one area to another is now affected by Multiplier Keys.","Manual Crafting button tooltips are more informational.","Constructing the first Foundry of a game will log a message briefly explaining what Crafted Resources are and the ways to make them.","Informative messages (mission results, messages that explain newly unlocked mechanics, the Launch Facility message that informs the player of the space tab, etc.) are now displayed in blue, to separate them from less important messages.","Added the missing Wormhole Mission result string."]},{version:"0.8.0",date:"3/27/2020",changes:["Intergalactic Content.","Universe Mastery Rework.","-Each Universe now tracks its own mastery level responsible for 40% of the mastery bonus, the remaining 60% comes from the general mastery level.","-Standard Universe mastery rules remains unchanged.","Micro icons can now be earned for none Micro achievements. These will not count for standard mastery, only Micro mastery.","Unification 3.0, the unification system has been reworked.","Federation Government type.","New Faith CRISPR line of upgrades, unlocks priest job.","Universal, Standard and Mastered CRISPR Upgrades, for masters of the universes.","Added Negotiator CRISPR upgrade.","Added Persuasive Minor Gene.","Extended the Deify and Study Ancients tech trees.","Enhanced Droids upgrade for War Droids.","Repair Droids for Fortress.","Smoldering and Chilled now have reduced effectiveness after 100 stacks.","Removed Heavy Genus Feats, these were redundant with Universe Icons.","Blackhole reset now also grants species level extinction achievement.","Power cost of Mass Ejector increased to 3kW.","Genetics lab custom mutation costs rescaled to static values depending on the genetic trait.","Colonists will now be automatically assigned when a Living Quarter is completed if the default job has any available citizens.","Biodome redesigned, produces less food but increases living quarter capacity for Citizens.","More robust research categories.","Various racial traits now apply to ARPA projects.","Human Creative trait rescaled.","Large cost creep penalty reduced to 0.005 from 0.01.","Strong gathering bonus increased from 2 to 5.","Compact lowered from -0.02 to -0.015."]},{version:"0.7.28",date:"3/16/2020",changes:["Antimatter Universe now gives a 10% prestige bonus post MAD.","St. Patrick's Day event.","Blood War can no longer be earned by none demonic evil races.","Build Crate/Container buttons now update create/container values when upgraded by research."]},{version:"0.7.27",date:"3/10/2020",changes:["Memory leak fixes."]},{version:"0.7.26",date:"3/5/2020",changes:["Any race where the associated extinction achievement has been unlocked is now always available during evolution.","Joyless perk changed to +2% Max Morale per star level.","The effects of the Mass Extinction and Creator perks have been swapped.","Creator perk (old mass extinction) changed to 1.5x / 2x / 2.5x / 3x / 3.5x genes gained on mutation.","Minor traits bought with Phage now count twice when you complete evolution."]},{version:"0.7.25",date:"2/26/2020",changes:["Unicorn Shrine bonus is now determined by the moon phase when constructed.","Shrine Knowledge bonus now applies an additional affect to universities.","Smelters in Evil universe when using Kindling Kindred default to Flesh instead of Coal.","Evil Wendigo Smelters correctly display that they use 1 Flesh/s instead of 3 Souls/s. Also fixed the bug where they end up using 3 Flesh/s instead of 1.","Fixed bug where the Evil Wendigo Reclaimer description would show the Lumberjack description.","If Containers have not yet been unlocked as a resource, getting a Wharf will unlock it.","Fixed bug where, if Freight Trains was gotten after ARPA, the Railway project would need a refresh to appear."]},{version:"0.7.24",date:"2/12/2020",changes:["Special Prestige icons awarded to players from certain feats can now be set to replace the standard Star icon."]},{version:"0.7.23",date:"2/11/2020",changes:["Steelen Challenge now requires Bioseed as its win condition.","Added Feat for Blackhole reset with Steelen Challenge.","Added V-Day Event stuff."]},{version:"0.7.22",date:"2/9/2020",changes:["Steelen Challenge.","Graveyards are now removed upon gaining Kindling Kindred.","If Default job is set to Farmer/Lumberjack for Carnivore/Kindling Kindred, it will be changed to Unemployed upon adding those traits.","Fixed bug where gaining Carnivore and having no Grain Mills would make Smokehouses unpurchasable until refresh.","Cargo Yard now requires the construction of a Transfer Station to be unlocked.","Mitosis/Metaphase effect now appears on perks list."]},{version:"0.7.21",date:"1/28/2020",changes:["More bug fixes."]},{version:"0.7.20",date:"1/20/2020",changes:["Bug Fixes by Beorseder.","Fixed bug where purchasing Multicellular would double DNA generation from Nuclei instead of Bilateral Symmetry/Poikilohydric/Spores.","New population from the Infectious trait now go into the set Default job, instead of always Unemployed.","Controlled Mutation will no longer offer conflicting traits."]},{version:"0.7.19",date:"1/14/2020",changes:["Bug Fixes."]},{version:"0.7.18",date:"1/12/2020",changes:["Theocracy temple bonus raised from 5% to 12%.","Technocracy knowledge discount raised from 5% to 8%.","Corpocracy Casino Bonus raised from +100% to +200%.","Corpocracy Luxury Good Bonus raised from +50% to +150%.","Corpocracy Tourism Bonus raised from +50% to +100%.","Corpocracy morale penalty lowered from -15% to -10%.","Corpocracy Manufacturing Bonus raised from +15% to +20%.","Miner's Dream now scales the information that is revealed depending on the star level of the achievement.","Slaves now appear as a resource.","Alternate universes now award icons for complex achievements."]},{version:"0.7.17",date:"1/9/2020",changes:["Fixed an issue with displaying foreign powers in civics tab on unlock."]},{version:"0.7.16",date:"1/8/2020",changes:["Exploration Missions can be queued again.","The game will now notify the user if the current version is out of date.","Changes by Beorseder.","Geology deposit aesthetic changes on planet selection.","Miner's Dream Achievement & Perk."]},{version:"0.7.15",date:"1/7/2020",changes:["Queueing the World Collider will no longer lag the game.","Multi-segment projects will now have extra segments cleared from the queue on completion.","Spy and Government related popovers that would sometimes get stuck open will now clear.","Queued projects that will not complete due to lack of production will now display a green [Never] instead of -1 second timer.","Multi-segment projects no longer block queueing ARPA projects unless they consumed the entire queue space."]},{version:"0.7.14",date:"12/31/2019",changes:["Research Categorization option by Naryl."]},{version:"0.7.13",date:"12/30/2019",changes:["Gene decay will no longer result in a negative plasmid count.","Gene fortification is slightly more effective."]},{version:"0.7.12",date:"12/19/2019",changes:["Gene Fortification.","Fixed Cultural Supremacy popover."]},{version:"0.7.11",date:"12/15/2019",changes:["Decaying resources will now use a warning color if you are losing that resource but at a slower rate than the decay rate.","The most bottlenecked resource will now display in red while other trouble resources will be marked with an alert color.","CRISPR upgrades are now darkened when unaffordable.","Transfer Station now lists its uranium storage.","Wendigo bug fixes."]},{version:"0.7.10",date:"12/12/2019",changes:["Craftsman now continuously output product instead of once/twice a month.","Cumulative achievements now check for lower tier unlocks."]},{version:"0.7.9",date:"12/7/2019",changes:["Many bug fixes."]},{version:"0.7.8",date:"12/6/2019",changes:["The default job can now be set to: Unemployed, Farmer, Lumberjack, Quarry Worker, or Scavenger.","New line of feats for achievement hunting.","Novice Perk.","Journeyman Perk."]},{version:"0.7.7",date:"12/5/2019",changes:["Super projects now queue in larger batches.","Super projects now only report completion by the queue if actually complete instead of for each segment constructed."]},{version:"0.7.6",date:"12/2/2019",changes:["Adjacent queue items of the same type will now combine.","Architect now doubles queue sizes instead of adding a flat +2.","Misc minor bug fixes."]},{version:"0.7.5",date:"11/28/2019",changes:["Queueing 2x or more of the same building in a row will now stack them in the queue.","Queue timer now adjusts for cost creep.","ARPA Projects can now be queued.","Fixed a bug that could break the game when Yeti or Wendigo unlocked the genetics lab."]},{version:"0.7.4",date:"11/27/2019",changes:["Wendigo can now build hunting lodges.","Trade route prices are now tracked to 1 decimal.","Elusive spies will no longer be killed when they fail a mission.","Disruptor Rifles now require researching Quantum Entanglement."]},{version:"0.7.3",date:"11/26/2019",changes:["Night Theme trade volume control made more night theme friendly.","Contrast improvements for Night and R/G Theme."]},{version:"0.7.2",date:"11/24/2019",changes:["New market buy/sell volume control.","Large Trade upgrade now raises the buy/sell cap to 5,000.","Massive Trades upgrade now raises the buy/sell cap to 1,000,000.","Various bug fixes by Beorseder."]},{version:"0.7.1",date:"11/23/2019",changes:["Garrison controls reintegrated into government section.","Mutation plasmids now track correctly in no plasmid challenge runs.","Fixed many issues with foreign power name generation.","Feat star icon is no longer tiny."]},{version:"0.7.0",date:"11/21/2019",changes:["Establish a Government.","Battle rival cities.","Biome races added for Forest, Desert, Tundra, and Volcanic.","New ARPA Project: Railway.","New CRISPR upgrades: Mitosis & Metaphase.","Construct advanced AI stations in deep space.","Rapid Gene Sequencing upgrade.","Civics tab split into Government, Industry, and Military sections.","Inspiration no longer adds an upfront knowledge bonus.","Vigilante requirement lowered to 12.","Xenophobic replaced with Wasteful.","Added Rocky Road Feat.","Configurable number notations."]},{version:"0.6.27",date:"11/12/2019",changes:["Tundra planets are now always cold in winter.","Volcanic planets are now always hot in summer.","Stormy planets are now more likely to be windy.","Fixed issue with last rites not showing up as affordable.","2-4x Challenge Multipliers changed:.","2 Challenges: +12% Prestige.","3 Challenges: +25% Prestige.","4 Challenges: +45% Prestige.","Heavy Universe prestige bonus now scales with challenge level:.","0 Challenges: +5% Prestige.","1 Challenge: +10% Prestige.","2 Challenges: +15% Prestige.","3 Challenges: +20% Prestige.","4 Challenges: +25% Prestige."]},{version:"0.6.26",date:"11/7/2019",changes:["ARPA costs now update without mousing off and back on the buttons.","Fixed issues with incorrectly powering on newly built structures.","None-demonic evil smelters now correctly state they burn 1 flesh/s.","Added whitehole perk to stats page."]},{version:"0.6.25",date:"11/2/2019",changes:["Geology bonus is now preserved on MAD reset.","Key Mappings are now configurable for multiplier and queue keys."]},{version:"0.6.24",date:"10/31/2019",changes:["The Halloween feat will now unlock inside a micro universe."]},{version:"0.6.23",date:"10/28/2019",changes:["Exotic mass now counts towards Galactic Landfill and Supermassive.","Fixed issues with queue timers and kindling kindred trait.","Dark Energy now applies to windmills in antimatter universe."]},{version:"0.6.22",date:"10/26/2019",changes:["Game optimizations.","Bug fixes for queues.","Fixed bug with war droids."]},{version:"0.6.21",date:"10/24/2019",changes:["Freight Train upgrade now adds a trade route to freight yards instead of trade posts.","Toxic troll achievement.","Spatial reasoning rounding fix."]},{version:"0.6.20",date:"10/21/2019",changes:["Fixed application of plasmids with antiplasmids.","Updated description of bleeding effect.","Added achievement for synthesizing an anti-plasmid.","More readable achievement page."]},{version:"0.6.19",date:"10/20/2019",changes:["Fixed power errors with hell dimension turrets.","Crate/Container rounding is now applied after spatial reasoning.","Added extra text to the asteroid belt description to call out the necessity of assigning space miners.","Evil Ents can now burn flesh in the smelter."]},{version:"0.6.18",date:"10/16/2019",changes:["Swarm Satellite redesign.","Swarm Satellites cost and output decreased.","Control Stations can now control 10/18 swarm satellites.","Iron mining ship swarm plant discount now applies to all swarm plant costs.","New upgrades to increase output of swarm satellites."]},{version:"0.6.17",date:"10/14/2019",changes:['"Q" key now works with research queue.',"Added settings option to not enforce queue order.","Decay challenge no longer shows the star level for Joyless.","All universe types can now be seen on achievements.","Genus completion is now marked on sentience.","Challenges can now be toggled during evolution.","Inspiration event now gives a temporary buff to all science production.","Added Slave Market for slaver races to buy slaves as an alternative to catching them.","Added Crate/Container storage amount to the build crate/container tooltip.","Added a button to cancel all trade routes for each resource."]},{version:"0.6.16",date:"10/13/2019",changes:["Employment is now color coded depending on staffing levels.","GPS satellites now add additional trade routes.","Added stats tracking on reset mechanics used.","Added a message when completing the launch facility.","Added icons to challenges and races in evolution stage to indicate level of challenge completion."]},{version:"0.6.15",date:"10/11/2019",changes:["Added a settings option to disable the queue hot key.","The queue hot key is now disabled by default because it breaks the game for some users."]},{version:"0.6.14",date:"10/9/2019",changes:["Fixed several bugs with celestial races.","Only one demonic invasion event is now required to reach a hellscape planet.","New city categorization can now be switched off in the settings tab.","Holding Q while clicking a building will now queue it instead of constructing it."]},{version:"0.6.13",date:"10/7/2019",changes:["Fixed bioseed reset bug when seeding from a planet without a special property."]},{version:"0.6.12",date:"10/6/2019",changes:["Added a hire merc option to fortress, mercs hired here go directly to the fortress.","Default patrol size is now 10 instead of 4.","Adjusted margins in city tab/space tabs to slightly reduce vertical scrolling.","New Tower of Babel flair."]},{version:"0.6.11",date:"10/5/2019",changes:["New planetary modifiers: Toxic, Mellow, Rage, Stormy, Ozone, Magnetic, and Trashed.","City Categorization by NotOats.","Chinese Translation."]},{version:"0.6.10",date:"10/1/2019",changes:["Fixed issue with gene editing costing the wrong type of Plasmid.","Fixed Bone label in Graphene plant.","Fixed issue with Plywood not unlocking when removing Kindling Kindred trait."]},{version:"0.6.9",date:"9/30/2019",changes:["Antimatter Universe.","Bleeding Effect line of CRISPR upgrades, requires Anti-Plasmids to unlock.","Balorg can now unlock queues.","Fixed aria labels in mass ejector."]},{version:"0.6.8",date:"9/24/2019",changes:["Queue reordering no longer swaps the dragged item with the one in the target spot.","Added timers to research queue.","Cost adjustments are now applied to queue timers increasing their accuracy."]},{version:"0.6.7",date:"9/24/2019",changes:["Cath windmills now generate power instead of just looking pretty.","Fixed Spanish strings file, language now loads again."]},{version:"0.6.6",date:"9/23/2019",changes:["Added special tech tree to sacrificial altar to boost its effectiveness per sacrifice.","Restored windmills to cath.","Challenge Multiplier Dark Energy rounding calculation fixed.","Added extra information to blackhole description when it reaches destabilization point.","Added a warning to stabilize option that it will reset your exotic matter."]},{version:"0.6.5",date:"9/21/2019",changes:["Fixed display issue with frenzy appearing to never drop below 1%.","Updated the tooltip values on farms and farmers to include the hellscape penalty.","Fixed Evil Ents so they start with Gather Stone option."]},{version:"0.6.4",date:"9/19/2019",changes:["Fixed double windmill issue with evil universe races.","Spanish language updates.","Added warnings to challenge modes in micro universe that you will not receive credit."]},{version:"0.6.3",date:"9/17/2019",changes:["Restored broken perks."]},{version:"0.6.2",date:"9/17/2019",changes:["Bug Fixes."]},{version:"0.6.1",date:"9/17/2019",changes:["Universe Update, explore ~~ 4 ~~ 3 new universe types:.","Heavy Gravity Universe.","Micro Universe.","Evil Universe.","New Decay Challenge.","Antimatter universe is still forming, coming soon.","Dark Energy effects added, unique per universe type.","New Plasmid scaling formula.","Blackhole mass added to Stellar Engine.","Stuff I probably forgot about."]},{version:"0.5.18",date:"9/11/2019",changes:["Spanish translation provided by RanaPeluda.","Fixed Ent fanaticism.","Modals are no longer unnecessarily wide.","Smelter modal now shows the fuel production for each type."]},{version:"0.5.17",date:"9/5/2019",changes:["Mantis Frail trait replaced with new Cannibalize trait, eat your own citizens for buffs.","The Fortress will now remember the number of troops assigned to it and attempt to keep it at that level."]},{version:"0.5.16",date:"9/3/2019",changes:["Made some adjustments to Soul Gem drop odds.","Added a message when you discover your first Soul Gem."]},{version:"0.5.15",date:"9/1/2019",changes:["Portuguese translations updated by Rodrigodd."]},{version:"0.5.14",date:"9/1/2019",changes:["Buildings will no longer be added to the queue if holding down a multiplier key.","Fixed a problem with smelters that could cause their production to become stuck in a high state.","Fixed initial display state of containers in storage management tab."]},{version:"0.5.13",date:"8/30/2019",changes:["New layout for selecting challenge genes/modes during end of evolution stage.","Fixed bug with low support elerium miners that caused them to miscalculate miner outputs.","Added a threat level warning to fortress."]},{version:"0.5.12",date:"8/30/2019",changes:["Pacifist Achievement is now unlocked by unifying without ever initiating an attack."]},{version:"0.5.11",date:"8/28/2019",changes:["Fixed issue with nucleus DNA bonus not applying from correct cell stage evolutions.","Building timers now count down without refreshing the popover.","Long action titles will now wrap instead of overflowing the button.","Fixed a bug that could cause the research queue to clear items from the building queue."]},{version:"0.5.10",date:"8/28/2019",changes:["Fixed bug with some construction projects not refreshing the page after being built with the queue.","Space exploration missions can no longer be queued more than once at a time.","One off projects are now removed from the queue if completed manually.","Queue timers now track crafted resources.","Demonic attractor soul gem drop rate increase buffed from 5% to 8%.","Updated some fortress related tooltips.","Mousing over the star rating in the top left corner now lists which challenges are active.","Time until ready added to unaffordable actions."]},{version:"0.5.9",date:"8/27/2019",changes:["Active build queues wiped due do internal game breaking format change."]},{version:"0.5.8",date:"8/27/2019",changes:["Construction timers added to build queue.","Construction and research completed by queues are now logged to the message list.","Improved drag and drop support for queues."]},{version:"0.5.7",date:"8/25/2019",changes:["Drag support for queue sorting.","Fixed resource display bug that occurred when buying a mass ejector.","Minor traits now show the number of ranks from phage or genes spent."]},{version:"0.5.6",date:"8/23/2019",changes:["Building queue now works in space.","Added a separate research queue.","Fixed rock quarry awarding 4% stone bonus instead of the stated 2%.","Fixed rendering bugs with the blackhole and mass ejector."]},{version:"0.5.5",date:"8/22/2019",changes:["Bug Fixes for queueing system."]},{version:"0.5.4",date:"8/22/2019",changes:["Building Queue system v1.0.","Urban Planning, Zoning Permits, and Urbanization queue related techs.","New CRISPR upgrades for enhanced queueing."]},{version:"0.5.3",date:"8/20/2019",changes:["Stats and Achievements separated into separate sub tabs.","Disruptor rifle upgrade for soldiers.","Mass Ejector can no longer be unlocked before completing the Stellar Engine."]},{version:"0.5.2",date:"8/20/2019",changes:["Fixed misnamed mantis trait key.","Fixed Iron smelter paying out 10x intended amount."]},{version:"0.5.1",date:"8/20/2019",changes:["Disappearing craftsman fix."]},{version:"0.5.0",date:"8/19/2019",changes:["Interstellar space is now unlockable.","Interdimensional travel is now unlockable.","New management tab for Crates & Containers.","Power generation breakdown.","Improved resource breakdown layout.","Leathery trait buffed.","Chameleon trait now adds a combat rating bonus.","Optimistic now also applies to the minimum morale rating.","Smarter Smelter fuel switching.","New CRISPR unlocks."]},{version:"0.4.42",date:"8/16/2019",changes:["Fixed some screen reader issues with the crate modal launch button.","Added a warning to the Genetic Dead End challenge if you are on a hellscape planet."]},{version:"0.4.41",date:"8/15/2019",changes:["Joyless Challenge.","??? - Nothing to see here, move along."]},{version:"0.4.40",date:"8/9/2019",changes:["Changed No Crispr gene into the Weak Crispr gene."]},{version:"0.4.39",date:"8/6/2019",changes:["Genetic Disaster Challenge."]},{version:"0.4.38",date:"8/5/2019",changes:["Special action icon is now properly flagged as a button."]},{version:"0.4.37",date:"7/31/2019",changes:["ARIA Improvements for Factory and A.R.P.A."]},{version:"0.4.36",date:"7/27/2019",changes:["Slow and Hyper traits can now combine.","Added new achievements: Creator & Explorer.","Added perks for Mass Extinction, Creator, and Explorer."]},{version:"0.4.35",date:"7/25/2019",changes:["Centaur can now pick Fanaticism.","Challenge multiplier is now applied to phage gain."]},{version:"0.4.34",date:"7/23/2019",changes:["Fixed SR descriptions of buildings that lack affordability.","Fixed resource highlighting of buildings that have zero costs."]},{version:"0.4.33",date:"7/23/2019",changes:["Fixes for Ent Fanaticism not releasing some resources.","Aria improvements for the smelter modal.","Improved screen reader resource affordability description of buildings/research.","Resource highlighting on structures."]},{version:"0.4.32",date:"7/21/2019",changes:["Balorg slaver trait added.","Ziggurat bonus now applies to the oil extractor.","Geology Oil rich/poor no longer applies to oil extractor.","Added resource alternate row coloring.","Added an affordability hint for screen readers.","Fixed some bugs with awarding a random minor trait from fanaticism.","Dimensional Compression now charges the correct cost."]},{version:"0.4.31",date:"7/20/2019",changes:["Extreme Dazzle casino upgrade.","Metallurgist minor trait, buffs alloy.","Gambler minor trait, buffs casinos.","A.R.P.A. projects now use resource approximations for large numbers.","Cement Factory renamed to Cement Plant to reduce confusion with the regular Factory.","Key multipliers now work inside the factory modal.","Imps and Balorg now have access to advanced crafting tech.","Imps and Balorg now have access to windmills.","Balorg can now set their taxes below 10% and above 30%."]},{version:"0.4.30",date:"7/19/2019",changes:["Portuguese translation by Rodrigodd.","DNA Sequencer upgrade.","Gene Assembly cost increase to 200k.","Synthesis now applies a bonus to auto crafted genes.","Ambidextrous buffed.","Ambidextrous now has a greater effect on auto crafting."]},{version:"0.4.29",date:"7/18/2019",changes:["Genetic modification system, customize your race with minor traits.","Shotgun Sequencing upgrade for genome research.","Randomly gained minor traits will no longer stack unless they have all been unlocked.","Genes are now gained from random mutations.","Synthesis line of CRISPR upgrades.","Satellite and Observatory cost reductions.","Fibroblast minor trait.","Iridium is now unlocked by constructing an iridium mine instead of the moon base.","Helium-3 is now unlocked by constructing a helium-3 mine instead of the moon base.","Genome sequencing now defaults to on when first unlocked."]},{version:"0.4.28",date:"7/16/2019",changes:["Added missing hellscape achievement.","Fixed spatial reasoning and phage interaction.","Fixed warmonger unlocking requirement."]},{version:"0.4.27",date:"7/13/2019",changes:["Added special action description buttons for screen readers."]},{version:"0.4.26",date:"7/12/2019",changes:["Unlocked CRISPR upgrades are now listed as perks.","Control/Shift/Alt click now works with power on and off buttons."]},{version:"0.4.25",date:"7/11/2019",changes:["Quantum Manufacturing upgrade.","Quantum Swarm cost lowered from 465k to 450k."]},{version:"0.4.24",date:"7/10/2019",changes:["Thermomechanics upgrade for alloy production.","Ziggurats unlockable via ancients upgrade.","Cement factory has a more clear label in breakdown lists."]},{version:"0.4.23",date:"7/7/2019",changes:["Resources at the millions breakpoint and above are now shown with 2 significant decimal points.","Reduced the creep cost of Observatory.","Reduced the base knowledge cost of Observatory.","Reduced the Brick cost of Boot Camps.","Evil has been unleashed."]},{version:"0.4.22",date:"7/6/2019",changes:["Fixed issue with having exactly 251 Plasmids that would break your resources.","Fixed issue with planet generation that caused it to always use the same seed."]},{version:"0.4.21",date:"7/6/2019",changes:["Fixed unlocking of mass extinction achievement.","Fixed potential fuel consumption bug with power plants."]},{version:"0.4.20",date:"7/4/2019",changes:["Phage can now be earned from space resets, phage extends the plasmid diminishing return breakpoint.","Dimensional Warping crispr upgrade, applies phages to spatial reasoning.","Added special windmill tech for carnivore path to equalize power grid.","Space Stations now give 5 Elerium storage instead of 4."]},{version:"0.4.19",date:"7/2/2019",changes:["Fixed bugs with the hell planet and gas planet survey mission.","Fixed bug that prevented the planet description tooltip from triggering.","Aluminium now properly requires you to build a metal refinery."]},{version:"0.4.18",date:"7/1/2019",changes:["Planets choice now has more depth to it, each planet can be poor or rich in various resource types.","A mineral poor planet suffers anywhere from 1 to 10% penalty for that resource.","A mineral rich planet gains anywhere from 1 to 20% bonus for that resource.","The fire event no longer triggers for aquatic races.","The first interstellar probe now contributes to the number of potential target worlds.","All interstellar space probe costs are now cheaper."]},{version:"0.4.17",date:"6/29/2019",changes:["Added indication of current challenge level to top bar.","Added H tags for accessibility."]},{version:"0.4.16",date:"6/28/2019",changes:["New Hospital, heals wounded soldiers faster.","New Boot Camp, train new soldiers quicker.","Lowered research cost of Mass Driver from 170k to 160k.","Lowered Iridium cost of Mass Drivers.","Updated Mass Extinction unlock requirement."]},{version:"0.4.15",date:"6/28/2019",changes:["Global bonuses are now multiplicative instead of additive.","Decreased base Elerium cost of Exotic Lab by 4.","Creative trait decreases cost creep instead of providing a flat discount.","ARPA 100% button replaced with remaining percentage value.","New experimental military advice."]},{version:"0.4.14",date:"6/27/2019",changes:["Statues now cost Aluminium instead of Wrought Iron.","Nav Beacon now costs Aluminium instead of Iron.","Helium-3 Mine now costs Aluminium instead of Copper.","Elerium Mining Ship now costs Titanium instead of Iridium.","Iron Mining Ship now costs Aluminium instead of Titanium.","Dimension Compression upgrade now works correctly.","Aluminium can now be looted from battle."]},{version:"0.4.13",date:"6/26/2019",changes:["Aluminium resource added to the game, research Bayer Process to unlock Metal Refinery which in turn unlocks Aluminum.","New Metal Refinery structure for producing Aluminium.","Alloy is now made out of Aluminium and Copper.","Sheet Metal is now made out of Aluminium.","Oil Powerplant and Propellant Depot now cost Aluminium instead of Steel.","Some minor accessibility improvements."]},{version:"0.4.12",date:"6/24/2019",changes:["Blackhole achievement now gives a permanent perk for completing it, the perk strength depends on the achievement level.","Fixed issue with event timer being frozen after changing planets.","Fixed the unlocking of upgraded versions of some achievements.","Cost descriptions now show approximations above 10,000."]},{version:"0.4.11",date:"6/24/2019",changes:["Re-evaluated starvation breakpoint.","Added Infested Terran achievement.","Titanium price is now reset after unlocking Hunter Process.","Resources now have a 25% chance of their market price changing per day, up from 10%."]},{version:"0.4.10",date:"6/23/2019",changes:["Fixed stats tracking on demonic invasions so it actually tracks new invasions."]},{version:"0.4.9",date:"6/23/2019",changes:["Fabrication facilities now increase craftsman cap.","Added stats tracking on demonic invasions.","Detail Oriented buffed to 50% from 33%.","Rigorous buffed to 100% from 66%.","Crafting bonus now shown for each resource.","Temple Faith bonus now applies to crafting in no plasmid challenge mode.","Mastery bonus now applies to crafting."]},{version:"0.4.8",date:"6/22/2019",changes:["Fixed a bug that removed MAD when achieving unification.","Fixed missing options in evolution stage with picking avians after space reset."]},{version:"0.4.7",date:"6/21/2019",changes:["Activating challenge genes now provide a bonus to the number of plasmids earned."]},{version:"0.4.6",date:"6/21/2019",changes:["Reduced Nano Tube and Neutronium costs of bioseeder ship.","Reduced Mythril cost of Space Probes."]},{version:"0.4.5",date:"6/19/2019",changes:["Mastery Bonus now unlockable in CRISPR.","Fixed bug with elerium mining that could cause negative mining when you lacked asteroid miners.","Fixed low power warning not clearing when you have no buildings active.","Fixed Sporgar label of Cottages in Steel & Mythril Beams research.","Gene Mutation research will no longer turn off when you run out of knowledge, instead it will pause.","Human creative trait buffed from 2% to 5%.","Troll regenerative trait buffed to heal 4 wounded per day instead of 2.","Ogre tough trait buffed to 25% from 10%.","Gecko optimistic trait buffed to 10% from 2%.","Arraak resourceful trait buffed from 5% to 10%.","Dracnid hoarder trait buffed from 10% to 20%.","Shroomi toxic trait buffed from 10% to 25%.","Wolven pack mentality trait now applies to apartments.","Reduced Nano Tube cost of Mining Drones."]},{version:"0.4.4",date:"6/18/2019",changes:["Matter compression now applies to Wharves.","Xenophobia now applies to Wharves.","Plasmids earned by mutation now apply to no plasmid challenge run.","Reduced Nano Tube cost of Mining Drones."]},{version:"0.4.3",date:"6/17/2019",changes:["Challenge mode achievement tracking.","Vocational Training for craftsman.","Spelling and grammar fixes.","Fixed incorrect reject unity reward text."]},{version:"0.4.2",date:"6/16/2019",changes:["Added some clarification to breakdown of stress."]},{version:"0.4.1",date:"6/16/2019",changes:["Fixed a bug with factories converted from some pre 0.4.0 save files."]},{version:"0.4.0",date:"6/16/2019",changes:["Space reset option, control the destiny of your next race.","Challenge Modes.","New Stuff to discover.","New Achievements to unlock.","Added missing Cyclops racial trait.","World Domination, maybe.","Added soft reset option."]},{version:"0.3.12",date:"6/11/2019",changes:["Fixed bug with riot event that caused it to trigger on high morale instead of low morale."]},{version:"0.3.11",date:"6/10/2019",changes:["The Gas Moon and the Dwarf planets are now accessible.","New technologies based on new discoveries made in deep space.","Wharves can now be unlocked after discovering oil.","There is now an alternative method of unlocking steel.","Night Theme updated, popovers are no longer bright.","Trade route tooltips now include money being imported or exported.","New crispr upgrades for crafting.","Warmonger achievement requirement lowered from 10% to 8%."]},{version:"0.3.10",date:"6/9/2019",changes:["Added code to fix peculiar failed space launch game state."]},{version:"0.3.9",date:"6/8/2019",changes:["New official Evolve [Discord](https://discordapp.com/invite/dcwdQEr)."]},{version:"0.3.8",date:"6/7/2019",changes:["Fixed a problem with negative craftsman counts that could result from craftsman dying."]},{version:"0.3.7",date:"6/6/2019",changes:["Warmongering is now tracked and high casualties may impact morale.","Depleting the mercenary pool will temporarily increase their cost.","Three new achievements related to war."]},{version:"0.3.6",date:"6/5/2019",changes:["Fixed issue with production breakdowns not showing when income was only produced by trade.","Fixed issue that prevented affordability check from refreshing on space missions."]},{version:"0.3.5",date:"6/5/2019",changes:["Mythril Craftsman now unlock correctly.","Fixed a bug that could pause the game if you ran out of Titanium."]},{version:"0.3.4",date:"6/4/2019",changes:["The Asteroid Belt is now open for business.","Robotics Upgrades.","Automation renamed to Machinery.","Assembly Line upgrade for factory."]},{version:"0.3.3",date:"6/3/2019",changes:["New Orbit Structure: Navigation Beacon.","New Red Planet Structures: Space Control Tower and Space Factory.","Reduced number of monuments required to unlock tourism from 4 to 2.","Cement plant workers now round their contribution to 2 decimal places.","Red planet mining now correctly attributes to the red planet in breakdowns."]},{version:"0.3.2",date:"6/3/2019",changes:["Fixed bug that would let you launch the space missions without the proper resources, this would corrupt your game file and break the game.","Added code to detect games corrupted by the previous bug and fix them.","Fixed Fanaticism bug that wouldn't release lumberjacks when you have ent gods."]},{version:"0.3.1",date:"6/3/2019",changes:["Added building check redundancy to auto correct game states that shouldn't occur anyway."]},{version:"0.3.0",date:"6/2/2019",changes:["Space V1 Update.","This opens the first steps into space exploration, more to come... this is not the end.","Rebalanced storage caps to help the game feel more idle friendly."]},{version:"0.2.70",date:"6/2/2019",changes:["Fixed bug when picking Fanaticism with cath gods that wouldn't release your farmers.","Fixed bug when upgrading weapon technology that wouldn't immediately show the increase in army rating."]},{version:"0.2.69",date:"5/26/2019",changes:["Fixed bug which could let you get free barn or warehouse upgrade by essentially skipping over the tech.","Added aria button roles to many button like elements that were not technically buttons."]},{version:"0.2.68",date:"5/26/2019",changes:["Fixed bug with Rock Quarry that prevented the 2% bonus from working unless you had electricity unlocked."]},{version:"0.2.67",date:"5/24/2019",changes:["Revamp of farmer, lumberjack, and quarry worker jobs. These govern the most basic materials produced and can now assign as many workers as you like to these positions.","Farms now directly produce food instead of determining farmer cap.","Lumber Yards now increase lumber production instead of governing lumberjack cap.","Rock Quarry now increase stone production instead of governing quarry worker cap.","Sawmill powered on bonus reduced from 5% to 4%.","Rock Quarry powered on bonus reduced from 5% to 4%.","Stock Exchanges no longer cost Knowledge.","Fixed a display bug that could cause farmers to falsely show they produced more food than they actual did."]},{version:"0.2.66",date:"5/22/2019",changes:["Added alternate row coloring to the market to help distinguish rows."]},{version:"0.2.65",date:"5/21/2019",changes:["Sporgar race redesigned into a parasitic race that spreads through infecting victims."]},{version:"0.2.64",date:"5/20/2019",changes:["Currency is now required before unlocking Basic Storage.","Primitive Axes are no longer gated behind Basic Storage.","Foundry now requires Metal Working to unlock and no longer requires Cement.","Research tab now defaults back to new when resetting.","Fixed issue with not being able to buy something if you had consumption on a resource and the cost was the same as your max capacity.","Fixed issue with max affordability check not refreshing on evolution stage.","Experimental Red-Green color blind theme."]},{version:"0.2.63",date:"5/20/2019",changes:["Fixed an issue that accidentally set the default tax rate to 2% instead of 20% for new games."]},{version:"0.2.62",date:"5/19/2019",changes:["Tax system revamped. Taxes can now be adjusted more granularly and effect morale instead of production.","Cement is now a requirement for theology since cement is needed for temples."]},{version:"0.2.61",date:"5/19/2019",changes:["Every genus type now has its own evolution path."]},{version:"0.2.60",date:"5/18/2019",changes:["Rescaled crate/container volumes. There are now substantially less crates/containers but they do a lot more per crate/container.","Spatial Reasoning now correctly applies to crates & containers.","Increased base value of several major storage facilities.","Added storage timers.","A.R.P.A. costs in popover now update their affordability check.","Buildings and Research that can not be afforded due to low capacity are now marked in red text."]},{version:"0.2.59",date:"5/17/2019",changes:["Added additional validation to ensure save strings belong to evolve before importing.","Fixed army rating display when rating doesn't calculate to a whole number.","Fixed listing order of some resources.","Smelter Iron bonus breakdown fixed.","Added Selenophobia to breakdown lists."]},{version:"0.2.58",date:"5/15/2019",changes:["Settings option to disable multiplier keys."]},{version:"0.2.57",date:"5/15/2019",changes:["Added labor validation to coal miners.","Key Multipliers now work with job and trade route assignment."]},{version:"0.2.56",date:"5/15/2019",changes:["Added +- symbols to trade route to distinguish import vs export."]},{version:"0.2.55",date:"5/14/2019",changes:["Manually crafting resources now gets all the same bonuses as auto crafting.","Fixed Recombination crispr upgrade.","Death limits added to each war campaign level.","War assessment added for each war campaign level."]},{version:"0.2.54",date:"5/13/2019",changes:["Uranium Breakdown Fixes."]},{version:"0.2.53",date:"5/13/2019",changes:["Breakdown Accuracy Enhancements.","Some Kindling Kindred costs reduced.","Fixed bug related to Fanaticism and Ent gods with foundry workers assigned to make plywood.","Plasmid bonus now applies to the sundial.","Fixed some spelling errors."]},{version:"0.2.52",date:"5/11/2019",changes:["Completed research can now be viewed on a separate tab under research.","Removed Plywood requirement from Stock Exchange for players with Kindling Kindred trait.","Fixed a CSS issue in the A.R.P.A. projects tab."]},{version:"0.2.51",date:"5/11/2019",changes:["University starts slightly cheaper.","Added Spatial Superiority crispr upgrade.","Added Spatial Supremacy crispr upgrade.","Exporting a save string now automatically selects the text and copies it to the clipboard."]},{version:"0.2.50",date:"5/10/2019",changes:["Added new capacity breakdowns for various resources."]},{version:"0.2.49",date:"5/10/2019",changes:["Added changelog link to version listing.","Added protection against loading a corrupt save string.","Greedy trait is now less greedy.","Spelling error fixes."]},{version:"0.2.48",date:"5/8/2019",changes:["Resources that are at greater than 99% capacity now change color to indicate they are at cap.","Attacks from rival cities should no longer cause more wounded soldiers than you have.","Assigning craftsman when no citizens are free will no longer take the labor from another job."]},{version:"0.2.47",date:"5/8/2019",changes:["Gluttony trait lowered to 10% from 25% .","High Metabolism trait lowered to 5% from 10% .","Fixed Sheet Metal not being added to craftsman list when unlocked."]},{version:"0.2.46",date:"5/8/2019",changes:["The 5% library bonus was only applying to scientists which was not intended. This now applies to the sundial and professors as well."]},{version:"0.2.45",date:"5/8/2019",changes:["Fixed an issue that allowed you to get extra benefits from under-powered wardenclyffe towers and biolabs."]},{version:"0.2.44",date:"5/8/2019",changes:["Fixed Key Multipliers getting stuck down."]},{version:"0.2.43",date:"5/7/2019",changes:["Fixed bug that could cause player to get free extra crafted resources when using the +5 option.","Reordered buildings in Village tab to group them more logically."]},{version:"0.2.42",date:"5/7/2019",changes:["Fixed a bug that was causing soldiers to become immortal.","Fixed some bugs with morale that caused some weather patterns to apply a different value than was reported.","Added weather to Food breakdown."]},{version:"0.2.41",date:"5/7/2019",changes:["Added a 5% bonus to global knowledge production on libraries."]},{version:"0.2.40",date:"5/7/2019",changes:["The Hivemind trait no longer applies to farmers as this was especially punishing."]},{version:"0.2.39",date:"5/7/2019",changes:["Evolution 2.0: Redid the evolution stage of the game to make it feel less tedious and like it matters more to the next phase of the game.","Fixed a bug that has the intended effects of Pessimism and Optimism traits swapped."]},{version:"0.2.38",date:"5/6/2019",changes:["First public release."]}];function p0(r){let a=0;for(a=0;a=0;i--){r.append(`

    v${is[i].version}${is[i].hasOwnProperty("revision")?is[i].revision:""}

    ${is[i].date}
    `);for(let s=0;s${is[i].changes[s]}`)}return r}rc();hn();$(document).ready(function(){if(window.matchMedia){var r=$('head > link[rel="icon"][media]');$.each(r,function(a,i){var s=window.matchMedia(i.media);function n(){s.matches&&(r.remove(),r=$(i).appendTo("head"))}s.addEventListener("change",n),n()})}});var _0=!1;window.addEventListener("storage",r=>{_0===!1&&L(t("multitab_warning"),"danger",!0),_0=!0});e.settings.expose&&enableDebug();var ti={showCiv:1,showCivic:2,showResearch:3,showResources:4,showGenetics:5,showAchieve:6,settings:7};$(document).keydown(function(r){r=r||window.event;let a=r.key||r.keyCode;Object.keys(vr).forEach(function(i){a===e.settings.keyMap[i]&&(vr[i]=!0)}),!$("input").is(":focus")&&!$("textarea").is(":focus")&&Object.keys(ti).forEach(function(i){if(a===e.settings.keyMap[i]&&e.settings.civTabs!==0&&(i==="settings"||e.settings[i])){if(e.settings.civTabs!==ti[i])e.settings.civTabs=ti[i];else{let s=e.settings,n=null,o=null;switch(ti[i]){case ti.showCiv:n="spaceTabs",o=[s.showCity,s.showSpace,s.showDeep,s.showGalactic,s.showPortal,s.showOuter,s.showTau,s.showEden];break;case ti.showCivic:n="govTabs",o=["Government",s.showIndustry,s.showPowerGrid,s.showMil,s.showMechLab,s.showShipYard,s.showPsychic,s.showWish];break;case ti.showResearch:n="resTabs",o=["New","Completed"];break;case ti.showResources:n="marketTabs",o=[s.showMarket,s.showStorage,s.showEjector,s.showCargo,s.showAlchemy];break;case ti.showGenetics:s=e.settings.arpa,n="arpaTabs",o=[s.physics,s.genetics,s.crispr,s.blood];break;case ti.showAchieve:n="statsTabs",o=["Stats","Achievements","Perks"];break;case ti.settings:default:n="",o=[];break}for(let c=1;c a").html(`v${e.version} Beta ${e.beta}${cl}`):$("#topBar .version > a").html("v"+e.version+cl);oo();e.lastMsg&&Object.keys(e.lastMsg).forEach(function(r){e.lastMsg[r].reverse().forEach(function(a){L(a.m,a.c,!0,[r],!0)}),e.lastMsg[r].reverse()});window.innerWidth>768&&($("#msgQueue").height(e.settings.msgQueueHeight),$("#buildQueue").height(e.settings.buildQueueHeight));e.queue.rename===!0&&(Ca(!0),e.queue.rename=!1);e.settings.sPackMsg=Le.getItem("string_pack_name")?t("string_pack_using",[Le.getItem("string_pack_name")]):t("string_pack_none");e.queue.display&&ca();e.r_queue.display&&Ga();rc();wi(e.settings.theme);Ul();e.new&&(L(t("new"),"warning",!1,["progress"]),e.new=!1);e.city.mass_driver&&(x.mass_driver=e.city.mass_driver.on);e.portal.turret&&(x.turret=e.portal.turret.on);e.interstellar.starport&&(x.starport=e.interstellar.starport.on);e.interstellar.fusion&&(yt.fusion=e.interstellar.fusion.on);e.interstellar.s_gate&&(x.s_gate=e.interstellar.s_gate.on);e.portal.hell_forge&&(x.hell_forge=e.portal.hell_forge.on);e.portal.demon_forge&&(x.demon_forge=e.portal.demon_forge.on);e.space.sam&&(x.sam=e.space.sam.on);e.space.operating_base&&(x.operating_base=e.space.operating_base.on,W.operating_base=e.space.operating_base.on);e.space.fob&&(x.fob=e.space.fob.on);e.tauceti.fusion_generator&&(x.fusion_generator=e.tauceti.fusion_generator.on);e.eden.encampment&&(x.encampment=e.eden.encampment.on);e.eden.soul_engine&&(x.soul_engine=e.eden.soul_engine.on,W.soul_engine=e.eden.soul_engine.on);e.eden.corruptor&&(x.corruptor=e.eden.corruptor.on);e.eden.ectoplasm_processor&&(x.ectoplasm_processor=e.eden.ectoplasm_processor.on,W.ectoplasm_processor=e.eden.ectoplasm_processor.on);e.eden.research_station&&(x.research_station=e.eden.research_station.on,W.research_station=e.eden.research_station.on);e.eden.bunker&&(x.bunker=e.eden.bunker.on,W.bunker=e.eden.bunker.on);e.eden.spirit_vacuum&&(x.spirit_vacuum=e.eden.spirit_vacuum.on);e.eden.spirit_battery&&(x.spirit_battery=e.eden.spirit_battery.on);e.city.replicator&&e.race?.replicator?.pow&&e.race?.governor?.config?.replicate?.pow?.on&&Object.values(e.race.governor.tasks||{}).includes("replicate")&&(e.city.replicator.on=0,e.city.replicator.count=0,e.race.replicator.pow=0);fs(!0);vo();sc();Er();e.race.shapeshifter&&va(!1,!0);Es();Object.keys(ga()).forEach(function(r){ms(r)});Os();V({el:"#race",data:{race:e.race,city:e.city},methods:{name(){return ut("name")},replicate(r){return e.race.hasOwnProperty("governor")&&e.race.governor.hasOwnProperty("tasks")&&e.race.hasOwnProperty("replicator")&&Object.values(e.race.governor.tasks).includes("replicate")&&e.race.governor.config.replicate.pow.on&&e.race.replicator.pow>0?r+e.race.replicator.pow:r},approx(r){return+r.toFixed(2)},mRound(r){return+r.toFixed(1)}}});ve("race",function(){return typeof T[e.race.species].desc=="string"?T[e.race.species].desc:T[e.race.species].desc()},{elm:"#race > .name"});var ri=125;ve("morale",function(r){if(e.city.morale.unemployed!==0){let n=e.city.morale.unemployed>0?"success":"danger";r.popper.append(``)}if(e.city.morale.stress!==0){let n=e.city.morale.stress>0?"success":"danger";r.popper.append(``)}let a=100+e.city.morale.unemployed+e.city.morale.stress;if(Object.keys(e.city.morale).forEach(function(n){if(!["current","unemployed","stress","season","cap","potential"].includes(n)&&e.city.morale[n]!==0){a+=e.city.morale[n];let o=e.city.morale[n]>0?"success":"danger",c=e.city.morale[n];if(n==="entertain"&&e.civic.govern.type==="democracy"){let h=1+je.democracy()[0]/100;c/=h}let l={};if(r.popper.append(``),n==="entertain"&&e.civic.govern.type==="democracy"){let h=je.democracy()[0];r.popper.append(``)}}}),e.city.morale.season!==0){a+=e.city.morale.season;let n=e.city.calendar.season===0?t("morale_spring"):e.city.calendar.season===1?t("morale_summer"):t("morale_winter"),o=e.city.morale.season>0?"success":"danger";r.popper.append(``)}if(e.civic.govern.type==="corpocracy"){let n=je.corpocracy()[3];a-=n,r.popper.append(``)}if(e.civic.govern.type==="republic"){let n=je.republic()[1];a+=n,r.popper.append(``)}if(e.civic.govern.type==="federation"){let n=je.federation()[1];a+=n,r.popper.append(``)}let i=_e("militant",1);if(i&&(a-=i,r.popper.append(``)),e.race.cheese){let n=e.stats.hasOwnProperty("reset")?e.stats.reset+1:1,o=+(n/(n+10)*11).toFixed(2);a+=o,r.popper.append(``)}if(e.race.motivated){let n=Math.ceil(e.race.motivated**.4);a+=n,r.popper.append(``)}if(e.race.artisan&&e.civic.craftsman.workers>0){let n=+(y.artisan.vars()[2]*e.civic.craftsman.workers).toFixed(2);a+=n,r.popper.append(``)}if(e.race.pet){let n=1;if(e.race.catnip?n=y.catnip.vars()[0]:e.race.anise&&(n=y.anise.vars()[0]),e.race.pet&&(e.race.pet.event>0&&(e.race.catnip?n+=y.catnip.vars()[0]:e.race.anise?n+=y.anise.vars()[0]:n++),e.race.pet.pet>0?n+=e.race.pet.type==="cat"?e.race.catnip?y.catnip.vars()[1]:2:e.race.anise?y.anise.vars()[1]:1:e.race.pet.pet<0&&(n-=e.race.pet.type==="cat"?e.race.catnip?y.catnip.vars()[1]:2:e.race.anise?y.anise.vars()[1]:1)),n!==0){a+=n;let o=n>0?"success":"danger";r.popper.append(``)}}if(e.race.wishStats&&e.race.wishStats.fame!==0&&(a+=e.race.wishStats.fame,e.race.wishStats.fame>0?r.popper.append(``):r.popper.append(``)),e.civic.homeless){let n=e.civic.homeless/2;a-=n,r.popper.append(``)}if(e.tech.vax_c||e.tech.vax_f){let n=e.tech.vax_c?10:50;a-=n,r.popper.append(``)}else if(e.tech.vax_s){let n=20;a+=n,r.popper.append(``)}if(e.city.tormented&&(a-=e.city.tormented,r.popper.append(``)),e.race.wish&&e.race.wishStats&&e.race.wishStats.bad>0){let n=Math.floor(e.race.wishStats.bad/75)+1;a-=n*5,r.popper.append(``)}a=+a.toFixed(1);let s=$("
    ");r.popper.append(s),s.append(``),s.append(``),s.append(``)},{classes:"has-background-light has-text-dark"});ve("powerStatus",function(r){let a=+(e.city.power_total-e.city.power).toFixed(2);Object.keys(It).forEach(function(s){if(It[s]){let n=+It[s];r.popper.append(``)}}),r.popper.append(``);let i=+e.city.power.toFixed(2);e.city.power>0?r.popper.append(``):r.popper.append(``)},{classes:"has-background-light has-text-dark"});e.settings.pause?$("#pausegame").addClass("pause"):$("#pausegame").addClass("play");V({el:"#topBar",data:{city:e.city,race:e.race,s:e.settings},methods:{sign(){return Qi("sign")},getAstroSign(){return Qi("astrology")},weather(){return Qi("weather")},temp(){return Qi("temp")},moon(){return Qi("moon")},season(){return Qi("season")},showUniverse(){return!(e.race.universe==="standard"||e.race.universe==="bigbang")},showSim(){return!!e.sim},atRemain(){return t("accelerated_time")},pause(){$("#pausegame").removeClass("play"),$("#pausegame").removeClass("pause"),e.settings.pause?(e.settings.pause=!1,$("#pausegame").addClass("play")):(e.settings.pause=!0,$("#pausegame").addClass("pause")),!e.settings.pause&&!Ae.s&&Ur("start")},pausedesc(){return e.settings.pause?t("game_play"):t("game_pause")},showPet(){return!!e.race.pet},petPet(){e.race.pet&&e.race.pet.pet===0&&((e.race.pet.type==="cat"?Math.rand(0,3):Math.rand(0,10))===0?(e.race.pet.pet=-60,L(t(`event_${e.race.pet.type}_pet_failure`,[t(`event_${e.race.pet.type}_name${e.race.pet.name}`)]),!1,!1,["events","minor_events"])):(e.race.pet.pet=60,L(t(`event_${e.race.pet.type}_pet_success`,[t(`event_${e.race.pet.type}_name${e.race.pet.name}`)]),!1,!1,["events","minor_events"])))},planet(r){return T[r].home},universe(r){return r==="standard"||r==="bigbang"?"":ba[r].name},remain(r){let a=Math.ceil(r*So().longTimer/6e4);if(a>0){let i=Math.floor(a/60);return a-=i*60,`${i}:${a.toString().padStart(2,"0")}`}}}});["astroSign"].forEach(function(r){ve(`${r}`,function(){return Qi("sign")},{elm:$(`#${r}`)})});ve("topBarPlanet",function(r){if(e.race.species==="protoplasm")r.popper.append($(`${t("infant")}`));else{let a=T[e.race.species].home,i=ut("name"),s=ze[e.city.biome].label,n=e.city.ptrait;if(n.length>0){let h="";n.forEach(function(v){et.hasOwnProperty(v)&&(v==="mellow"&&e.race.species==="entish"?h+=`${t("planet_mellow_eg")} `:h+=`${et[v].label} `)}),s=`${h}${s}`}let o=Kr(),c=Rc(e.city.geology),l="";if(e.race.truepath&&(l=l+`
    ${t("evo_challenge_truepath_recap")}
    `),e.race.junker&&(l=l+`
    ${t("evo_challenge_junker_desc")} ${t("evo_challenge_junker_conditions")}
    `),e.race.joyless&&(l=l+`
    ${t("evo_challenge_joyless_desc")} ${t("evo_challenge_joyless_conditions")}
    `),e.race.steelen&&(l=l+`
    ${t("evo_challenge_steelen_desc")} ${t("evo_challenge_steelen_conditions")}
    `),e.race.decay&&(l=l+`
    ${t("evo_challenge_decay_desc")} ${t("evo_challenge_decay_conditions")}
    `),e.race.emfield&&(l=l+`
    ${t("evo_challenge_emfield_desc")} ${t("evo_challenge_emfield_conditions")}
    `),e.race.inflation&&(l=l+`
    ${t("evo_challenge_inflation_desc")} ${t("evo_challenge_inflation_conditions")}
    `),e.race.banana&&(l=l+`
    ${t("evo_challenge_banana_desc")} ${t("wiki_achieve_banana1")}. ${t("wiki_achieve_banana2")}. ${t("wiki_achieve_banana3")}. ${t("wiki_achieve_banana4",[500])}. ${t("wiki_achieve_banana5",[50])}.
    `),e.race.witch_hunter&&(l=l+`
    ${t("evo_challenge_witch_hunter_desc")}
    `),e.race.nonstandard&&(l=l+`
    ${t("evo_challenge_nonstandard_desc")}
    `),e.race.gravity_well&&(l=l+`
    ${t("evo_challenge_gravity_well_desc")}
    `),e.race.warlord&&(l=l+`
    ${t("evo_challenge_warlord_desc")}
    `),e.race.fasting&&(l=l+`
    ${t("evo_challenge_fasting_desc")}
    `),e.race.lone_survivor&&(l=l+`
    ${t("evo_challenge_lone_survivor_desc")}
    `),e.race.sludge&&(l=l+`
    ${t("evo_challenge_sludge_desc")} ${t("evo_challenge_sludge_conditions")}
    `),e.race.ultra_sludge&&(l=l+`
    ${t("evo_challenge_ultra_sludge_desc")} ${t("evo_challenge_ultra_sludge_conditions")}
    `),e.race.orbit_decay){let h=e.race.orbit_decayed?"":t("evo_challenge_orbit_decay_impact",[e.race.orbit_decay-e.stats.days]),v=e.race.orbit_decayed?e.race.tidal_decay?t("planet_kamikaze_msg"):t("evo_challenge_orbit_decay_impacted",[T[e.race.species].home]):t("evo_challenge_orbit_decay_desc");l=l+`
    ${v} ${t("evo_challenge_orbit_decay_conditions")} ${h}
    `,Yt()>=100&&e.race.universe!=="antimatter"?l=l+`
    ${t("evo_challenge_cataclysm_warn")}
    `:l=l+`
    ${t("evo_challenge_scenario_warn")}
    `}e.race.cataclysm&&(Yt()>=50&&e.race.universe!=="antimatter"?l=l+`
    ${t("evo_challenge_cataclysm_desc")}
    ${t("evo_challenge_cataclysm_warn")}
    `:l=l+`
    ${t("evo_challenge_cataclysm_desc")}
    ${t("evo_challenge_scenario_warn")}
    `),r.popper.append($(`
    ${t(e.race.cataclysm?"no_home":"home",[a,i,s,o])}
    ${c}${l}`))}},{elm:"#topBar .planetWrap .planet",classes:"has-background-light has-text-dark"});ve("topBarUniverse",function(r){r.popper.append($(`
    ${ba[e.race.universe].desc}
    `)),r.popper.append($(`
    ${ba[e.race.universe].effect}
    `))},{elm:"#topBar .planetWrap .universe",classes:"has-background-light has-text-dark"});ve("topBarSimulation",function(r){r.popper.append($(`
    ${t("evo_challenge_simulation_topbar")}
    `))},{elm:"#topBar .planetWrap .simulation",classes:"has-background-light has-text-dark"});e.race.orbit_decay&&!e.race.orbit_decayed&&ve("infoTimer",function(){return e.race.orbit_decayed?"":t("evo_challenge_orbit_decay_impact",[e.race.orbit_decay-e.stats.days])},{elm:"#infoTimer",classes:"has-background-light has-text-dark"});Zs();Mo();if(e.race.species==="protoplasm"){e.resource.RNA.display=!0;let r=e.stats.feat.master&&e.stats.achieve.ascended&&e.stats.achieve.ascended.l>0?Math.min(e.stats.achieve.ascended.l,e.stats.feat.master):0;if(e.sim&&(r=5),r>0&&!e.evolution.mloaded){let i=["dna","membrane","organelles","nucleus","eukaryotic_cell","mitochondria"];for(let s=0;s0?Math.min(e.stats.achieve.corrupted.l,e.stats.feat.grandmaster):0;e.sim&&(a=5),a>=5&&!e.evolution.gmloaded&&(e.tech.evo=6,e.evolution.gselect=!0,e.evolution.gmloaded=1,e.evolution.final=80,e.tech.evo_humanoid=1,e.tech.evo_giant=1,e.tech.evo_small=1,e.tech.evo_animalism=2,e.tech.evo_demonic=1,e.tech.evo_angelic=1,e.tech.evo_insectoid=1,e.tech.evo_eggshell=2,e.tech.evo_eldritch=1,e.tech.evo_sand=1,e.tech.evo_polar=1,e.tech.evo_heat=1,e.tech.evo_fey=1,e.tech.evo_aquatic=1),e.race.universe==="bigbang"?(e.seed=e.race.seed,ru()):e.race.seeded&&!e.race.chose?(e.seed=e.race.seed,pc()):ua()}else e.portal.hasOwnProperty("soul_forge")&&e.portal.soul_forge.on&&(x.soul_forge=1),xc();Eo(Ao(!0));$("#lbl_city").html("Village");var Fo=0;function Zp(r=1){let a=Ae.longRatio*12;for(r=Math.min(r,a);Ae.s&&r--;){++Fo;let i=Fo%Ae.midRatio===0,s=Fo%Ae.longRatio===0;Jp(),i&&Yp(),Ju(),s&&e_(),i&&s&&(Fo=0)}}window.Worker&&(Ae.w=new Worker("evolve/evolve.js"),Ae.w.addEventListener("message",function(r){let a=r.data;switch(a.loop){case"main":Zp(a.periods);break}},!1));Ur("start");v0();var h0=!0,zo=e.arpa.sequence&&e.arpa.sequence.on?e.arpa.sequence.on:0;function Jp(){e.race.no_craft||$(".craft").each(function(k){typeof $(this).data("val")=="number"&&$(this).html(Me($(this).data("val")*ke(),1))});let r=new Date,a=Ya();f.p.Global={};var i=1;let s=!1,n=Us("raw");if(e.prestige.Plasmid.count>0&&(e.race.universe!=="antimatter"||e.genes.bleed&&e.race.universe==="antimatter")&&(f.p.Global[t("resource_Plasmid_name")]=n[1]*100+"%",s=!0),e.prestige.AntiPlasmid.count>0&&(e.race.universe==="antimatter"||e.genes.bleed&&e.genes.bleed>=2&&e.race.universe!=="antimatter")&&(f.p.Global[t("resource_AntiPlasmid_name")]=n[2]*100+"%",s=!0),s&&(i+=n[0]),e.prestige.Supercoiled.count>0){let k=e.prestige.Supercoiled.count/(e.prestige.Supercoiled.count+5e3);f.p.Global[t("resource_Supercoiled_short")]=+(k*100).toFixed(2)+"%",i*=1+k}if((e.race.no_plasmid||e.race.universe==="antimatter")&&Ka()){let k=An();f.p.Global[t("faith")]=k*100+"%",i*=1+k}if(e.race.universe==="evil"&&e.resource.Authority.display){if(e.resource.Authority.amount<100){let k=(100-e.resource.Authority.amount)*.0035;f.p.Global[e.resource.Authority.name]=-(k*100).toFixed(2)+"%",i*=1-k}else if(e.resource.Authority.amount>100){let k=(e.resource.Authority.amount-100)*.0015;f.p.Global[e.resource.Authority.name]=+(k*100).toFixed(2)+"%",i*=1+k}}if(e.race.untapped&&e.race.untapped>0){let k=+(e.race.untapped/(e.race.untapped+20)/10+24e-5).toFixed(4);f.p.Global[t("trait_untapped_bd")]=`${k*100}%`,i*=1+k}if(e.race.rainbow_active&&e.race.rainbow_active>1&&(f.p.Global[t("trait_rainbow_bd")]=`${y.rainbow.vars()[0]}%`,i*=1+y.rainbow.vars()[0]/100),e.race.gloomy&&e.city.calendar.weather<=1&&(f.p.Global[t("trait_gloomy_name")]=`${y.gloomy.vars()[0]}%`,i*=1+y.gloomy.vars()[0]/100),e.race.floating&&e.city.calendar.wind===1&&(f.p.Global[t("trait_floating_name")]=`-${y.floating.vars()[0]}%`,i*=1-y.floating.vars()[0]/100),e.tech.world_control){let k=25;e.civic.govern.type==="federation"&&(k=je.federation()[2]),e.race.unified&&(k+=y.unified.vars()[0]),a==="taurus"&&(k+=Bt("taurus")[0]),f.p.Global[t("tech_unification")]=`${k}%`,i*=1+k/100}else{let k=0;for(let A=0;A<3;A++)(e.civic.foreign[`gov${A}`].occ||e.civic.foreign[`gov${A}`].anx||e.civic.foreign[`gov${A}`].buy)&&(k+=e.civic.govern.type==="federation"?5+je.federation()[0]:5);k>0&&(f.p.Global[t("civics_garrison_occupy")]=`${k}%`,i*=1+k/100)}if(e.genes.challenge&&e.genes.challenge>=2){let k=Yt();f.p.Global[t("mastery")]=k+"%",i*=1+k/100}if(e.pillars){let k=Ea();f.p.Global[t("harmonic")]=`${(k[0]-1)*100}%`,i*=k[0]}if(e.race.ascended&&(f.p.Global[t("achieve_ascended_name")]="5%",i*=1.05),e.race.corruption){let k=e.race.corruption*2;f.p.Global[t("achieve_corrupted_name")]=`${k}%`,i*=1+k/100}if(e.race.rejuvenated){let k=e.stats.days<996?(1e3-e.stats.days)/2e3:.02;f.p.Global[t("rejuvenated")]=`${k*100}%`,i*=1+k}let o=Pe("octigoran");if(e.race.suction_grip||o>0){let k=0;e.race.suction_grip&&(k+=y.suction_grip.vars()[0]),o>0&&(k+=+(y.suction_grip.vars(1)[0]*o).toFixed(2)),f.p.Global[t("trait_suction_grip_bd")]=k+"%",i*=1+k/100}let c=Pe("cyclops");if(e.race.intelligent||c>0){let k=0;e.race.intelligent&&(k+=$e(e.civic.scientist.workers,"scientist")*y.intelligent.vars()[1]+$e(e.civic.professor.workers,"professor")*y.intelligent.vars()[0]),c>0&&(k+=$e(e.civic.scientist.workers,"scientist")*y.intelligent.vars(1)[1]*c+$e(e.civic.professor.workers,"professor")*y.intelligent.vars(1)[0]*c),e.race.high_pop&&(k=qe(k)),f.p.Global[t("trait_intelligent_bd")]=k+"%",i*=1+k/100}if(e.race.slaver&&e.city.slave_pen&&e.city.slave_pen){let k=e.resource.Slave.amount*y.slaver.vars()[0];f.p.Global[t("trait_slaver_bd")]=k+"%",i*=1+k/100}if((e.city.ptrait.includes("trashed")||e.race.scavenger||e.race.servants&&e.race.servants.force_scavenger)&&e.civic.scavenger){let k=e.city.ptrait.includes("trashed")||e.race.scavenger?$e(e.civic.scavenger.workers,"scavenger"):0;if(e.race.servants&&(k+=N(e.race.servants.jobs.scavenger)),k>0){let A=k*y.scavenger.vars()[0];e.city.ptrait.includes("trashed")&&e.race.scavenger&&(A*=1+y.scavenger.vars()[1]/100),e.city.ptrait.includes("trashed")&&(A*=et.trashed.vars()[1]),e.race.high_pop&&(A=qe(A)),f.p.Global[Se("scavenger")]=A+"%",i*=1+A/100}}if(e.race.unfathomable&&e.city.surfaceDwellers&&e.city.captive_housing){let k=0,A=e.stats.achieve.nightmare&&e.stats.achieve.nightmare.mg?e.stats.achieve.nightmare.mg:0;if(e.city.hasOwnProperty("surfaceDwellers")){for(let G=0;Ge.civic.torturer.workers*A/2){let G=k-e.civic.torturer.workers*A/2;k-=Math.ceil(G/3)}}if(k>0){let G=k*y.unfathomable.vars()[2]*A/5;e.race.psychic&&(G*=1+y.psychic.vars()[1]/100),f.p.Global[t("trait_unfathomable_bd")]=G+"%",i*=1+G/100}}if(e.city.ptrait.includes("mellow")&&(f.p.Global[t("planet_mellow_bd")]="-"+(100-et.mellow.vars()[2]*100)+"%",i*=et.mellow.vars()[2]),e.city.ptrait.includes("ozone")&&e.city.sun){let k=e.city.sun*et.ozone.vars()[0];f.p.Global[t("planet_ozone_bd")]=`-${k}%`,i*=1-k/100}let l=Pe("phoenix");if((e.race.smoldering||l>0)&&e.city.hot){let k=0;e.race.smoldering&&(e.city.hot>100?(k+=100*y.smoldering.vars()[1],k+=(e.city.hot-100)*y.smoldering.vars()[2]):k+=e.city.hot*y.smoldering.vars()[1]),l>0&&(e.city.hot>100?(k+=100*y.smoldering.vars(.25)[1]*l,k+=(e.city.hot-100)*y.smoldering.vars(.25)[2]*l):k+=e.city.hot*y.smoldering.vars(.25)[1]*l),f.p.Global[t("trait_smoldering_name")]=`${k}%`,i*=1+k/100}if(e.race.heat_intolerance&&e.city.hot){let k=Math.min(100,e.city.hot*y.heat_intolerance.vars()[0]);f.p.Global[t("hot")]=`-${k}%`,i*=1-k/100}if(e.race.chilled&&e.city.cold){let k=0;e.city.cold>100?(k+=100*y.chilled.vars()[1],k+=(e.city.cold-100)*y.chilled.vars()[2]):k=e.city.cold*y.chilled.vars()[1],f.p.Global[t("trait_chilled_name")]=`${k}%`,i*=1+k/100}if(e.race.cold_intolerance&&e.city.cold){let k=Math.min(100,e.city.cold*y.cold_intolerance.vars()[0]);f.p.Global[t("cold")]=`-${k}%`,i*=1-k/100}if(e.civic.govern.type==="anarchy"&&e.resource[e.race.species].amount>N(10)){let k=(e.resource[e.race.species].amount-N(10))*(e.race.high_pop?.25/y.high_pop.vars()[0]:.25);f.p.Global[t("govern_anarchy")]=`-${k}%`,i*=1-k/100}if(e.civic.govern.protest&&e.civic.govern.protest>0&&(f.p.Global[t("event_protest")]="-30%",i*=.7),e.civic.govern.scandal&&e.civic.govern.scandal>0){let k=_e("muckraker",0);k&&(f.p.Global[t("event_scandal")]=`-${k}%`,i*=1-k/100)}let h=Pe("capybara");if(h>0||e.race.calm&&e.city.meditation&&e.resource.Zen.display){let k=e.resource.Zen.amount;h>0&&(k+=Math.round(h*500));let A=k/(k+5e3);f.p.Global[t("trait_calm_bd")]=`+${(A*100).toFixed(2)}%`,i*=1+A}if(e.city.firestorm&&e.city.firestorm>0&&(e.city.firestorm--,f.p.Global[t("event_flare_bd")]="-20%",i*=.8),(T[e.race.species].type==="aquatic"&&!["swamp","oceanic"].includes(e.city.biome)||T[e.race.species].type==="fey"&&!["forest","swamp","taiga"].includes(e.city.biome)||T[e.race.species].type==="heat"&&!["ashland","volcanic"].includes(e.city.biome)||T[e.race.species].type==="polar"&&!["tundra","taiga"].includes(e.city.biome)||T[e.race.species].type==="sand"&&!["ashland","desert"].includes(e.city.biome)||T[e.race.species].type==="demonic"&&e.city.biome!=="hellscape"||T[e.race.species].type==="angelic"&&e.city.biome!=="eden")&&!e.race.warlord){let k=1;e.blood.unbound&&e.blood.unbound>=4?k=e.race.rejuvenated?.975:.95:e.blood.unbound&&e.blood.unbound>=2?k=e.race.rejuvenated?.95:.9:k=e.race.rejuvenated?.9:.8,f.p.Global[t("unsuited")]=`-${Math.round((1-k)*100)}%`,i*=k}if(e.race.hibernator&&e.city.calendar.season===3&&(i*=1-y.hibernator.vars()[1]/100,f.p.Global[t("morale_winter")]=`-${y.hibernator.vars()[1]}%`),e.race.universe==="magic"&&e.tech.syphon){let k=e.tech.syphon/8;f.p.Global[t("arpa_syphon_damage")]=`-${k}%`,i*=1-k/100}let v=["Money","Knowledge","Omniscience","Food","Lumber","Stone","Chrysotile","Crystal","Furs","Copper","Iron","Cement","Coal","Oil","Uranium","Aluminium","Steel","Titanium","Alloy","Polymer","Iridium","Helium_3","Water","Deuterium","Neutronium","Adamantite","Infernite","Elerium","Nano_Tube","Graphene","Stanene","Bolognium","Vitreloy","Orichalcum","Asphodel_Powder","Elysanite","Unobtainium","Quantium","Plywood","Brick","Wrought_Iron","Sheet_Metal","Mythril","Aerogel","Nanoweave","Scarletite","Cipher","Nanite","Mana","Authority"];f.p.consume={},v.forEach(function(k){f.p.consume[k]={},f.p[k]={}}),e.race.fasting&&(f.p.consume[e.race.species]={},f.p[e.race.species]={});var _=.25;if(o0(),e.race.species==="protoplasm"){if(e.evolution.nucleus&&e.resource.DNA.amount=5&&(g*=2),H("DNA",g*i*_),H("RNA",-(k*2*_))}if(e.evolution.organelles){let k=e.race.rapid_mutation?2:1;e.tech.evo&&e.tech.evo>=2&&k++,H("RNA",e.evolution.organelles.count*k*i*_)}if((e.stats.feat.novice&&e.stats.achieve.apocalypse&&e.stats.achieve.apocalypse.l>0||e.sim)&&e.race.universe!=="bigbang"&&(!e.race.seeded||e.race.seeded&&e.race.chose)){let k=e.sim?5:Math.min(e.stats.achieve.apocalypse.l,e.stats.feat.novice);H("RNA",k/2*_*i),e.resource.DNA.display&&H("DNA",k/4*_*i)}e.resource.RNA.amount>=2&&!e.evolution.dna?(e.evolution.dna=1,e.resource.DNA.display=!0,e.stats.achieve.mass_extinction&&e.stats.achieve.mass_extinction.l>1&&(H("RNA",e.resource.RNA.max),H("DNA",e.resource.RNA.max)),ua()):e.resource.RNA.amount>=10&&!e.evolution.membrane?(e.evolution.membrane={count:0},ua()):e.resource.DNA.amount>=4&&!e.evolution.organelles?(e.evolution.organelles={count:0},ua()):e.evolution.organelles&&e.evolution.organelles.count>=2&&!e.evolution.nucleus?(e.evolution.nucleus={count:0},ua()):e.evolution.nucleus&&e.evolution.nucleus.count>=1&&!e.evolution.eukaryotic_cell?(e.evolution.eukaryotic_cell={count:0},ua()):e.evolution.eukaryotic_cell&&e.evolution.eukaryotic_cell.count>=1&&!e.evolution.mitochondria?(e.evolution.mitochondria={count:0},ua()):e.evolution.mitochondria&&!e.tech.evo&&(e.tech.evo=1,ua())}else{let k=tu(),A=100,G=1,te=1;if(e.race.quarantine&&e.race.qDays){let p=1-(e.race.qDays<=1e3?e.race.qDays:1e3)/1e3;switch(e.race.quarantine){case 1:G=.5+.5*p;break;case 2:G=.25+.25*p,te=.5+.5*p;break;case 3:G=.1+.15*p,te=.25+.25*p;break;case 4:G=.08+.02*p,te=.12+.13*p;break}if(e.race.vax&&e.tech.focus_cure&&e.tech.focus_cure>=4){let q=+e.race.vax.toFixed(2)/100;q>1&&(q=1),G=G+(1-G)*q,te=te+(1-te)*q}}if(e.city.calendar.season===0&&e.city.calendar.year>0){let p=e.race.chilled||e.race.smoldering?0:5;A+=p,e.city.morale.season=p}else e.city.calendar.season===1&&e.race.smoldering?(A+=y.smoldering.vars()[0],e.city.morale.season=y.smoldering.vars()[0]):e.city.calendar.season===3?e.race.chilled?(A+=y.chilled.vars()[0],e.city.morale.season=y.chilled.vars()[0]):(A-=e.race.leathery?y.leathery.vars()[0]:5,e.city.morale.season=e.race.leathery?-y.leathery.vars()[0]:-5):e.city.morale.season=0;if(e.race.cheese){let p=e.stats.hasOwnProperty("reset")?e.stats.reset+1:1,q=+(p/(p+10)*11).toFixed(2);A+=q}if(e.civic.homeless&&(A-=e.civic.homeless/2),e.tech.vax_c||e.tech.vax_f?A-=e.tech.vax_c?10:50:e.tech.vax_s&&(A+=20),e.tech.m_boost?(e.city.morale.leadership=20,A+=20):e.city.morale.leadership=0,Qa()){let p=$a("morale");e.city.morale.shrine=p.add,A+=p.add}else e.city.morale.shrine=0;let Y=_e("militant",1);if(Y&&(A-=Y),e.civic.govern.type==="corpocracy"&&(A-=je.corpocracy()[3]),e.civic.govern.type==="republic"&&(A+=je.republic()[1]),e.civic.govern.type==="federation"&&(A+=je.federation()[1]),e.race.blood_thirst&&e.race.blood_thirst_count>=1){let p=Math.ceil(Math.log2(e.race.blood_thirst_count));e.city.morale.blood_thirst=p,A+=p}else e.city.morale.blood_thirst=0;let se=0;if(e.city.calendar.weather===0?e.city.calendar.temp>0&&(e.city.calendar.wind===1?e.race.skittish?se=-y.skittish.vars()[0]:se=e.race.leathery?-y.leathery.vars()[0]:-5:se=e.race.leathery?0:-2):e.city.calendar.weather===2?e.race.nyctophilia?se=-y.nyctophilia.vars()[0]:(e.city.calendar.wind===0&&e.city.calendar.temp<2||e.city.calendar.wind===1&&e.city.calendar.temp===2)&&(se=2):e.race.nyctophilia&&(se=y.nyctophilia.vars()[1]),e.race.snowy&&(e.city.calendar.temp!==0||e.city.calendar.weather!==0)&&(se-=e.city.calendar.temp>=2?y.snowy.vars()[1]:y.snowy.vars()[0]),e.city.morale.weather=e.race.submerged?0:se,A+=e.race.submerged?0:se,e.race.motivated){let p=Math.ceil(e.race.motivated**.4);A+=p}e.race.pet&&(A++,e.race.pet.event>0&&A++,e.race.pet.pet>0?A+=e.race.pet.type==="cat"?2:1:e.race.pet.pet<0&&(A-=e.race.pet.type==="cat"?2:1)),e.race.wish&&e.race.wishStats&&e.race.wishStats.fame!==0&&(A+=e.race.wishStats.fame),e.race.artisan&&!e.race.joyless&&(A+=y.artisan.vars()[2]*e.civic.craftsman.workers);let b=0,F=5;if(e.city.morale.unemployed=0,e.city.ptrait.includes("mellow"))F*=et.mellow.vars()[0];else{let p=e.civic.unemployed.workers/(e.race.high_pop?y.high_pop.vars()[0]:1);A-=p,e.city.morale.unemployed=-p}let E=Pe("vulpine");if(e.civic.hunter.display&&(e.race.playful||E>0)){let p=0;E>0&&(p+=y.playful.vars(1)[0]*E),e.race.playful&&(p+=y.playful.vars()[0]),A+=e.civic.hunter.workers*p,e.city.morale.unemployed=e.civic.hunter.workers*p}else b-=qe(e.civic.hunter.workers)/F;e.race.optimistic&&(b+=y.optimistic.vars()[0]);let B=Pe("gecko");if(B>0&&(b+=y.optimistic.vars(1)[0]*B),e.race.pessimistic&&(b-=y.pessimistic.vars()[0]),e.civic.garrison){let p=2;e.city.ptrait.includes("mellow")&&(p*=et.mellow.vars()[0]);let q=e.civic.garrison.max/p;e.race.high_pop&&(q/=y.high_pop.vars()[0]),b-=q}if(f.p.consume.Money[t("trade")]=0,e.tech.trade||e.race.banana&&e.tech.primitive&&e.tech.primitive>=3){let p=0,q=_e("dealmaker",0);if(q){let P=0,j=0;Object.keys(e.resource).forEach(function(K){e.resource[K].hasOwnProperty("trade")&&e.resource[K].trade<0&&(P-=e.resource[K].trade),e.resource[K].hasOwnProperty("trade")&&e.resource[K].trade>0&&(j+=e.resource[K].trade)}),P0){p+=j;let K=jc(P),ae=Math.floor(e.resource.Money.amount/(K*_));if(j=Math.min(j,ae),j>0){K*=j;let Z=Dr[P];if(q&&(Z*=1+q/100),e.race.persuasive&&(Z*=1+y.persuasive.vars()[0]*e.race.persuasive/100),e.race.merchant&&(Z*=1+y.merchant.vars()[1]/100),e.race.ocular_power&&e.race.ocularPowerConfig&&e.race.ocularPowerConfig.c){let J=70*(y.ocular_power.vars()[1]/100);Z*=1+J/100}let ee=Pe("goblin");if(ee>0&&(Z*=1+y.merchant.vars(1)[1]/100*ee),a==="capricorn"&&(Z*=1+Bt("capricorn")[0]/100),e.race.devious&&(Z*=1-y.devious.vars()[0]/100),e.genes.trader){let J=Yt();if(Z*=1+J/100,e.genes.trader>=2){let ce=e.prestige.Supercoiled.count;Z*=1+ce/(ce+500)}}if(e.stats.achieve.hasOwnProperty("trade")){let J=e.stats.achieve.trade.l*2;J>10&&(J=10),Z*=1+J/100}e.race.truepath&&(Z*=1-e.civic.foreign.gov3.hstl/101),H(P,j*_*Z),H("Money",-(K*_)),f.p.consume.Money[t("trade")]-=K,f.p.consume[P][t("trade")]=j*Z}m0()}else if(j<0){p-=j;let K=Dr[P];if(e.stats.achieve.hasOwnProperty("trade")){let Z=e.stats.achieve.trade.l;Z>5&&(Z=5),K*=1-Z/100}let ae=Math.floor(e.resource[P].amount/(K*_));if(j=Math.max(j,-ae),j<0){let Z=Sc(P)*j;H(P,j*_*K),H("Money",-(Z*_)),f.p.consume.Money[t("trade")]-=Z,f.p.consume[P][t("trade")]=j*K}m0()}}),e.city.market.trade=p}if(f.p.consume.Money[t("trade")]===0&&delete f.p.consume.Money[t("trade")],e.tech.alchemy){let p=0,q=0,P=0;Object.keys(e.race.alchemy).forEach(function(j){if(e.race.alchemy[j]>0){let K=Number(e.race.alchemy[j]);if(e.resource.Mana.amount=_){let ae=e.resource[j].basic&&e.tech.alchemy>=2?Dr[j]*8:Dr[j]*2;e.race.witch_hunter&&(ae*=3),e.stats.achieve.soul_sponge&&e.stats.achieve.soul_sponge.mg&&(ae*=e.stats.achieve.soul_sponge.mg+1),H(j,K*_*ae),H("Mana",-(K*_)),H("Crystal",-(K*.15*_)),p-=K,q-=K*.15,f.p.consume[j][t("tab_alchemy")]=K*ae,e.race.universe==="magic"&&!e.resource[j].basic&&e.tech.alchemy>=2&&le("fullmetal")}}}),e.race.totTransmute=P,f.p.consume.Mana[t("tab_alchemy")]=p,f.p.consume.Crystal[t("tab_alchemy")]=q}if(e.galaxy.trade&&(Ke.hasOwnProperty("freighter")||Ke.hasOwnProperty("super_freighter"))){let p=0;e.galaxy.freighter&&(p+=Ke.freighter*2),e.galaxy.super_freighter&&(p+=Ke.super_freighter*5),e.galaxy.trade.max=p;let q=0,P=Hs();for(let j=0;j0&&(ee*=1+y.merchant.vars(1)[1]/100*ge),a==="capricorn"&&(ee*=1+Bt("capricorn")[0]/100),e.race.devious&&(ee*=1-y.devious.vars()[0]/100),e.genes.trader){let ne=Yt();ee*=1+ne/100}if(e.stats.achieve.hasOwnProperty("trade")){let ne=e.stats.achieve.trade.l;ne>5&&(ne=5),ee*=1+ne/50,ae*=1-ne/100}q+=e.galaxy.trade[`f${j}`],q>p&&(e.galaxy.trade[`f${j}`]-=q-p,e.galaxy.trade[`f${j}`]<0&&(e.galaxy.trade[`f${j}`]=0));let xe=qt("gxy_gorddon");for(let ne=0;ne0&&(f.p.consume[K][t("trade")]?f.p.consume[K][t("trade")]-=J:f.p.consume[K][t("trade")]=-J),ce>0&&(f.p.consume[Z][t("trade")]?f.p.consume[Z][t("trade")]+=ce:f.p.consume[Z][t("trade")]=ce),xe<1&&(f.p.consume[Z][t("galaxy_piracy")]?f.p.consume[Z][t("galaxy_piracy")]+=-((1-xe)*ce):f.p.consume[Z][t("galaxy_piracy")]=-((1-xe)*ce)),f.p.consume[K][t("trade")]===0&&delete f.p.consume[K][t("trade")],f.p.consume[Z][t("trade")]===0&&delete f.p.consume[Z][t("trade")]}e.galaxy.trade.cur=q}e.race.deconstructor&&e.city.nanite_factory&&Za.forEach(function(p){if(e.resource[p].display){let q=e.city.nanite_factory[p]*_;if(q>0&&(e.resource[p].amount=1e3){let p=e.race.lone_survivor?100:1e4;we-=p,oe+=p,It[t("tau_star_ringworld")]=p}if(e.interstellar.elysanite_sphere&&e.interstellar.elysanite_sphere.count>0){let p=0;e.interstellar.elysanite_sphere.count>=1e3?p=it(22500):p=it(1750+e.interstellar.elysanite_sphere.count*18),we-=p,oe+=p,It[t("interstellar_dyson_sphere_title")]=p,delete It[t("tech_dyson_net")]}else if(e.interstellar.orichalcum_sphere&&e.interstellar.orichalcum_sphere.count>0){let p=0;e.interstellar.orichalcum_sphere.count>=100?p=it(1750):p=it(750+e.interstellar.orichalcum_sphere.count*8),we-=p,oe+=p,It[t("interstellar_dyson_sphere_title")]=p,delete It[t("tech_dyson_net")]}else if(e.interstellar.dyson_sphere&&e.interstellar.dyson_sphere.count>0){let p=0;e.interstellar.dyson_sphere.count>=100?p=it(750):p=it(175+e.interstellar.dyson_sphere.count*5),we-=p,oe+=p,It[t("interstellar_dyson_sphere_title")]=p,delete It[t("tech_dyson_net")]}else if(e.interstellar.dyson&&e.interstellar.dyson.count>=1){let p=0;e.interstellar.dyson.count>=100?p=it(175):p=it(e.interstellar.dyson.count*1.25),we-=p,oe+=p,It[t("tech_dyson_net")]=p}if(e.interstellar.stellar_engine&&e.interstellar.stellar_engine.count>=100){let p=d.interstellar.int_blackhole.stellar_engine.powered();we+=p,oe-=p,It[t("tech_stellar_engine")]=-p}if([{r:"city",s:"coal_power"},{r:"city",s:"oil_power"},{r:"city",s:"fission_power"},{r:"spc_hell",s:"geothermal"},{r:"spc_dwarf",s:"e_reactor"},{r:"int_alpha",s:"fusion"},{r:"tau_home",s:"fusion_generator"},{r:"tau_gas2",s:"alien_space_station"}].forEach(function(p){let q=$i(p.r),P=p.r==="city"?p.r:q,j=p.r==="city"?d.city:d[q][p.r],K=typeof j[p.s].title=="string"?j[p.s].title:j[p.s].title();if(e[P][p.s]&&e[P][p.s].on){let ae=j[p.s].powered();if(x[p.s]=e[P][p.s].on,j[p.s].hasOwnProperty("p_fuel")){let ee=j[p.s].p_fuel();Array.isArray(ee)||(ee=[ee]);for(let J=0;J=3&&x.coal_power){let p=d.city.coal_power.p_fuel();if(p.r==="Coal"&&p.a>0){let P=x.coal_power*p.a/65;e.city.geology.Uranium&&(P*=e.city.geology.Uranium+1),P*=D("psychic_boost","Uranium"),H("Uranium",P*_),f.p.consume.Uranium[t("city_coal_ash")]=P}}if(e.space.hydrogen_plant){let p=d.space.spc_titan.hydrogen_plant.powered();e.space.hydrogen_plant.on>e.space.electrolysis.on&&(e.space.hydrogen_plant.on=e.space.electrolysis.on);let q=e.space.hydrogen_plant.on*p;we+=q,oe-=q,It[t("space_hydrogen_plant_title")]=-q}if(e.portal.incinerator){let p=d.portal.prtl_wasteland.incinerator.powered(),q=e.portal.incinerator.on*p;we+=q,oe-=q,It[t("portal_incinerator_title")]=-q}if(e.portal.inferno_power){let p=d.portal.prtl_ruins.inferno_power.fuel,q=e.portal.inferno_power.on;Object.keys(p).forEach(function(j){let K=q*p[j];for(;K*_>e.resource[j].amount+(e.resource[j].diff>0?e.resource[j].diff*_:0)&&K>0;)q--,K-=p[j];f.p.consume[j][t("portal_inferno_power_title")]=-K,H(j,-(K*_))});let P=q*d.portal.prtl_ruins.inferno_power.powered();we+=P,oe-=P,It[t("portal_inferno_power_title")]=-P}if(e.eden.soul_engine&&e.tech.asphodel&&e.tech.asphodel>=4){let p=(W.soul_engine||0)*d.eden.eden_asphodel.soul_engine.powered();we+=p,oe-=p,It[t("eden_soul_engine_title")]=-p}if(e.space.swarm_satellite&&e.space.swarm_control){let p=e.space.swarm_satellite.count;p>e.space.swarm_control.s_max&&(p=e.space.swarm_control.s_max),e.space.swarm_control.support=p;let q=.35;e.tech.swarm>=4&&(q+=.15*(e.tech.swarm-3)),e.stats.achieve.iron_will&&e.stats.achieve.iron_will.l>=1&&(q+=.15),e.blood.illuminate&&(q+=.01*e.blood.illuminate),q=+q.toFixed(2);let P=it(p*q);we-=P,oe+=P,It[t("space_sun_swarm_satellite_title")]=P}if(e.race.wish&&e.race.wishStats&&e.race.wishStats.potato){let p=it(e.race.wishStats.potato);we-=p,oe+=p,It[t("wish_potato")]=p}if(e.city.mill&&e.tech.agriculture&&e.tech.agriculture>=6){let p=it(e.city.mill.on*d.city.mill.powered());we+=p,oe-=p,It[t("city_mill_title2")]=-p}if(e.city.windmill&&e.tech.wind_plant){let p=it(e.city.windmill.count*d.city.windmill.powered());we+=p,oe-=p,It[t("city_mill_title2")]=-p}if(e.race.elemental&&y.elemental.vars()[0]==="electric"){let p=it(qe((e.resource[e.race.species].amount*y.elemental.vars()[1])**1.28));we-=p,oe+=p,It[t("trait_elemental_name")]=p}if(e.race.powered){let p=y.powered.vars()[0]*e.resource[e.race.species].amount;e.race.discharge&&e.race.discharge>0&&(p=+(p*1.25).toFixed(3)),oe-=p}e.race.replicator&&(e.city.replicator={count:e.race.replicator.pow,on:e.race.replicator.pow});let me=e.power,De=0,ue=[];for(let p=0;poe){let p=De;for(let q=ue.length-1;q>=0;q--){let P=ue[q].split(":"),j=P[1],K=x[j];if(p>oe&&K>0){let ae=P[0]==="city"?P[0]:$i(P[0]),Z=P[0]==="city"?d.city[j]:d[ae][P[0]][j],ee=Z.powerBalancer();ee&&(ee.forEach(function(J){let ce=0;if(J.hasOwnProperty("r")&&J.hasOwnProperty("k")){let ge=e[ae][j][J.k]??0;e.resource[J.r].odif&&e.resource[J.r].odif<0&&(e.resource[J.r].odif=0);let xe=e.resource[J.r].diff+(e.resource[J.r].odif?e.resource[J.r].odif:0);for(;xe-ce*ge>ge&&K>0&&p>oe;)K--,ce++,p-=Z.powered();e.resource[J.r].odif=ge*ce}else if(J.hasOwnProperty("s")){let ge=Z.support();e[ae][j].soff&&e[ae][j].soff<0&&(e[ae][j].soff=0);let xe=J.s+(e[ae][j].soff?e[ae][j].soff:0);for(;xe-ge*ce>=ge&&K>0&&p>oe;)K--,ce++,p-=Z.powered();e[ae][j].soff=ge*ce}}),x[j]=K)}}}let Be=oe;for(let p=0;pBe&&ae>0;)x[P]--,ae=x[P]*K.powered();if(K.hasOwnProperty("p_fuel")){let Z=K.p_fuel();Array.isArray(Z)||(Z=[Z]);for(let ee=0;eee.resource.Elerium.amount&&q>0;)q-=p,x.foothold--;f.p.consume.Elerium[t("galaxy_foothold")]=-q;let P=q*_;H("Elerium",-P)}if(e.race.fasting){let p=["city:tourist_center","space:spaceport","int_:starport","gxy_:starbase","space:space_barracks","int_:zoo","eden_:restaurant"];for(let q=0;q0){if(me.includes(`${p.r}:${p.s}`)||(x[p.s]=e[p.a][p.s].on),d[p.a][p.r][p.s].hasOwnProperty("support_fuel")){let P=d[p.a][p.r][p.s].support_fuel();Array.isArray(P)||(P=[P]);for(let j=0;j=2?x.nav_beacon*d.space.spc_home.nav_beacon.support():0;break;case"red":e[p.a][p.s].s_max+=e.tech.mars&&e.tech.mars>=3?x.red_tower*d.space.spc_red.red_tower.support():0,e[p.a][p.s].s_max+=e.tech.luna&&e.tech.luna>=3?x.nav_beacon*d.space.spc_home.nav_beacon.support():0;break;case"tau_home":e[p.a][p.s].s_max+=x.tau_farm?x.tau_farm:0;break;case"asphodel":e[p.a][p.s].s_max+=(x.rectory?x.rectory:0)*d.eden.eden_asphodel.rectory.support(),e[p.a][p.s].s_max+=(x.corruptor?x.corruptor:0)*d.eden.eden_asphodel.corruptor.support();break}}if(e[p.a][p.s]&&p.r==="spc_eris"&&!x.ai_core2&&(e[p.a][p.s].s_max=0),e[p.a][p.s]){let P=0,j=e.support[p.g].map(K=>K.split(":")[1]);for(var q=0;qee&&!p.oc?(Z=Math.floor(ee/ae),$(`#${K} .on`).addClass("warn"),$(`#${K} .on`).prop("title",`ON ${Z}/${e[p.a][j[q]].on}`)):($(`#${K} .on`).removeClass("warn"),$(`#${K} .on`).prop("title","ON")),d[p.a][p.r2][j[q]].hasOwnProperty("support_fuel")){let J=d[p.a][p.r2][j[q]].support_fuel();Array.isArray(J)||(J=[J]);for(let ce=0;ce0){let p=x.red_factory*He(1,!0);H("Helium_3",-(p*_)),f.p.consume.Helium_3[Ze("factory")]=-p}if(x.int_factory&&x.int_factory>0){let p=x.int_factory*Ue(5);H("Deuterium",-(p*_)),f.p.consume.Deuterium[t("interstellar_int_factory_title")]=-p}if(W.water_freighter&&W.water_freighter>0){let p=He(5,!0),q=W.water_freighter*p;for(let P=0;P0){let p=+Ue(5),q=x.starport*p;f.p.consume.Helium_3[t("interstellar_alpha_starport_title")]=-q;for(let P=0;PP.split(":")[1]);for(var w=0;we.interstellar.starport.s_max?(P-=p+P-e.interstellar.starport.s_max,$(`#${j} .on`).addClass("warn"),$(`#${j} .on`).prop("title",`ON ${P}/${e.interstellar[q[w]].on}`)):($(`#${j} .on`).removeClass("warn"),$(`#${j} .on`).prop("title","ON")),p+=P,yt[q[w]]=P}else yt[q[w]]=0;if(e.interstellar.starport.support=p,e.interstellar.hasOwnProperty("mining_droid")&&e.interstellar.mining_droid.count>0){let P=yt.mining_droid,j=e.interstellar.mining_droid.on,K=j>0?P/j:0,ae=j;["adam","uran","coal","alum"].forEach(function(Z){ae-=e.interstellar.mining_droid[Z],ae<0&&(e.interstellar.mining_droid[Z]+=ae,ae=0),gt[Z]=e.interstellar.mining_droid[Z]*K})}}if(e.galaxy.starbase&&e.galaxy.starbase.count>0){let p=+Ue(25),q=x.starbase*p;f.p.consume.Helium_3[t("galaxy_starbase")]=-q;for(let P=0;PP.split(":")[1]);for(var w=0;wZ?(j=Z,$(`#${K} .on`).addClass("warn"),$(`#${K} .on`).prop("title",`ON ${j}/${e.galaxy[q[w]].on}`)):($(`#${K} .on`).removeClass("warn"),$(`#${K} .on`).prop("title","ON")),p+=j*ae,Ke[q[w]]=j}else Ke[q[w]]=0;e.galaxy.starbase.support=p}if(e.galaxy.foothold&&e.galaxy.foothold.count>0&&(e.galaxy.foothold.s_max=x.s_gate*x.foothold*d.galaxy.gxy_alien2.foothold.support()),e.portal.guard_post){if(e.portal.guard_post.s_max=e.portal.guard_post.count*d.portal.prtl_ruins.guard_post.support(),e.portal.guard_post.on>0){let p=e.portal.fortress.garrison-e.portal.fortress.patrols*e.portal.fortress.patrol_size;if(x.soul_forge){let q=Ta();q<=p&&(p-=q)}pP.split(":")[1]);for(var w=0;we.portal.purifier.s_max?(j-=p+j-e.portal.purifier.s_max,$(`#${K} .on`).addClass("warn"),$(`#${K} .on`).prop("title",`ON ${j}/${e.portal[q[w]].on}`)):($(`#${K} .on`).removeClass("warn"),$(`#${K} .on`).prop("title","ON")),p+=j*-d.portal.prtl_spire[q[w]].support(),Pa[q[w]]=j}else Pa[q[w]]=0;e.portal.purifier.support=p}if(e.space.space_station&&e.space.space_station.count>0){let p=+He(2.5,!0),q=x.space_station*p;f.p.consume.Helium_3[t("space_belt_station_title")]=-q;for(let P=0;PP.split(":")[1]);for(var w=0;we.space.space_station.s_max){let ae=p+j*-d.space.spc_belt[q[w]].support()-e.space.space_station.s_max;j-=Math.ceil(ae/-d.space.spc_belt[q[w]].support()),$(`#${K} .on`).addClass("warn"),$(`#${K} .on`).prop("title",`ON ${j}/${e.space[q[w]].on}`)}else $(`#${K} .on`).removeClass("warn"),$(`#${K} .on`).prop("title","ON");p+=j*-d.space.spc_belt[q[w]].support(),W[q[w]]=j}else W[q[w]]=0;e.space.space_station.support=p}if(e.interstellar.nexus&&e.interstellar.nexus.count>0){let p=350,q=x.nexus*p;f.p.consume.Money[t("interstellar_nexus_bd")]=-q;for(let P=0;PP.split(":")[1]);for(var w=0;we.interstellar.nexus.s_max?(j-=p+j-e.interstellar.nexus.s_max,$(`#${K} .on`).addClass("warn"),$(`#${K} .on`).prop("title",`ON ${j}/${e.interstellar[q[w]].on}`)):($(`#${K} .on`).removeClass("warn"),$(`#${K} .on`).prop("title","ON")),p+=j,yt[q[w]]=j}else yt[q[w]]=0;e.interstellar.nexus.support=p}if(e.interstellar.xfer_station&&x.xfer_station){let p=.28,q=x.xfer_station*p;f.p.consume.Uranium[t("interstellar_xfer_station_title")]=-q;for(let P=0;P0){let p=+He(2,!0),q=x.outpost*p;f.p.consume.Oil[t("space_gas_moon_outpost_bd")]=-q;for(let P=0;P0){let p=+Ue(3),q=x.neutron_miner*p;f.p.consume.Helium_3[t("interstellar_neutron_miner_title")]=-q;for(let P=0;P0:!0,K=d[q][P].info?.support,ae=0;for(let Z=0;Z0){let ne=Math.floor((e[q][K].s_max-ae)/xe);J=Math.min(J,ne)}if(d[q][P][ee].hasOwnProperty("ship")){if(d[q][P][ee].ship.civ&&e[q][ee].hasOwnProperty("crew")){let ne=d[q][P][ee].ship.civ();ne>0&&(e[q][ee].crew<0&&(e[q][ee].crew=0),e[q][ee].crew=ne&&(e.civic[e.civic.d_job].workers-=ne,e.civic.crew.workers+=ne,e[q][ee].crew+=ne):e[q][ee].crew>J*ne&&(e.civic[e.civic.d_job].workers+=ne,e.civic.crew.workers-=ne,e[q][ee].crew-=ne),e.civic.crew.assigned=e.civic.crew.workers,Ne+=e[q][ee].crew,fa+=e[q][ee].crew,J=Math.min(J,Math.floor(e[q][ee].crew/ne)))}if(d[q][P][ee].ship.mil&&e[q][ee].hasOwnProperty("mil")){let ne=d[q][P][ee].ship.mil();if(ne>0){if(e[q][ee].mil!==J*ne&&(e[q][ee].mil=J*ne),e.civic.garrison.workers-e.portal.fortress.garrison<0){let Te=e.civic.garrison.workers-e.portal.fortress.garrison;e[q][ee].mil-=Te}qr+e[q][ee].mil>e.civic.garrison.workers-e.portal.fortress.garrison&&(e[q][ee].mil=e.civic.garrison.workers-e.portal.fortress.garrison-qr),e[q][ee].mil<0&&(e[q][ee].mil=0),qr+=e[q][ee].mil,J=Math.min(J,Math.floor(e[q][ee].mil/ne))}}if(d[q][P][ee].ship.hasOwnProperty("helium")){let ne=+Ue(d[q][P][ee].ship.helium).toFixed(2),Te=J*ne;for(;Te*_>e.resource.Helium_3.amount+(e.resource.Helium_3.diff>0?e.resource.Helium_3.diff*_:0)&&J>0;)Te-=ne,J--;H("Helium_3",-(Te*_)),ss+=Te}if(d[q][P][ee].ship.hasOwnProperty("deuterium")){let ne=+Ue(d[q][P][ee].ship.deuterium).toFixed(2),Te=J*ne;for(;Te*_>e.resource.Deuterium.amount+(e.resource.Deuterium.diff>0?e.resource.Deuterium.diff*_:0)&&J>0;)Te-=ne,J--;H("Deuterium",-(Te*_)),nn+=Te}}J0)&&(qr+=un(p))}),e.civic.garrison.crew=qr),Object.keys(Gi).forEach(function(p){if(e.civic[p]&&(p!=="crew"&&(fa+=e.civic[p].workers,fa>e.resource[e.race.species].amount&&(e.civic[p].workers-=fa-e.resource[e.race.species].amount),(!e.civic[p].display||e.civic[p].workers<0)&&(e.civic[p].workers=0)),p!=="unemployed"&&p!=="hunter"&&p!=="forager")){let q=e.civic[p].stress;if(e.city.ptrait.includes("mellow")&&(q+=et.mellow.vars()[1]),e.race.content){let j=p==="hell_surveyor"?.2:.4;q+=e.race.content*j}e.city.ptrait.includes("dense")&&p==="miner"&&(q-=et.dense.vars()[1]),e.race.freespirit&&p!=="farmer"&&p!=="lumberjack"&&p!=="quarry_worker"&&p!=="crystal_miner"&&p!=="scavenger"&&(q/=1+y.freespirit.vars()[0]/100);let P=e.civic[p].workers;e.race.high_pop&&(P/=y.high_pop.vars()[0]),e.race.sky_lover&&["miner","coal_miner","crystal_miner","pit_miner"].includes(p)&&(P*=1+y.sky_lover.vars()[0]/100),b-=P/q}}),e.civic[e.civic.d_job].workers+=e.resource[e.race.species].amount-fa,e.civic[e.civic.d_job].workers<0&&(e.civic[e.civic.d_job].workers=0),Object.keys(Gi).forEach(function(p){p!=="craftsman"&&e.civic[p]&&e.civic[p].display&&e.civic[p].workers0&&e.civic[p].workers40){let p=e.civic.taxes.tax_rate-40;e.city.morale.tax-=p*.5,A-=p*.5}if(e.civic.govern.type==="oligarchy"&&e.civic.taxes.tax_rate>20){let p=e.civic.taxes.tax_rate-20;e.city.morale.tax+=p*.5,A+=p*.5}if((e.civic.govern.type!=="autocracy"&&!e.race.blood_thirst||e.race.immoral)&&e.civic.garrison.protest+e.civic.garrison.fatigue>2){let p=e.race.immoral?1+y.immoral.vars()[0]/100:1,q=Math.round(Math.log2(e.civic.garrison.protest+e.civic.garrison.fatigue)*p);e.city.morale.warmonger=e.race.immoral?q:-q,A+=e.city.morale.warmonger}else e.city.morale.warmonger=0;let Na=100;if(Na+=e.city.casino?x.casino:0,Na+=e.space.spc_casino?x.spc_casino:0,Na+=e.tauceti.tauceti_casino?x.tauceti_casino:0,Na+=e.portal.hell_casino?x.hell_casino:0,e.city.amphitheatre){let p=_e("athleticism",0);Na+=p?e.city.amphitheatre.count*p:e.city.amphitheatre.count}if(W.vr_center&&(Na+=W.vr_center*2),yt.zoo&&!e.race.fasting&&(Na+=yt.zoo*2),W.bliss_den&&(Na+=W.bliss_den*2),x.resort&&(Na+=x.resort*2),e.eden.rushmore&&e.eden.rushmore.count===1&&(Na+=10),e.tech.superstar){let p=e.race.high_pop?qe(1):1;Na+=$e(e.civic.entertainer.workers,"entertainer")*p}if(ri=Na,e.tech.monuments){let p=_e("gaslighter",2),q=p?2-p:2,P=e.tech.monuments;e.race.wish&&e.race.wishStats&&(e.city.wonder_lighthouse&&(P+=5),e.city.wonder_pyramid&&(P+=5),e.space.wonder_statue&&(P+=5),(e.interstellar.wonder_gardens||e.space.wonder_gardens||e.portal.wonder_gardens)&&(P+=5)),ri+=P*q}if(e.civic.taxes.tax_rate<20&&!e.race.banana&&(ri+=10-Math.floor(e.civic.taxes.tax_rate/2)),e.stats.achieve.joyless&&(ri+=e.stats.achieve.joyless.l*2),e.race.motivated){let p=Math.ceil(e.race.motivated**.4);ri+=Math.round(p/2)}let Ms=50;if(e.race.optimistic&&(Ms+=y.optimistic.vars()[1]),B>0&&(Ms+=Math.round(y.optimistic.vars(1)[1]*B)),e.race.truepath&&(Ms-=25),e.civic.govern.fr>0){let p=A/2;e.city.morale.rev=p,A-=p,Ms-=10}else e.city.morale.rev=0;if(e.race.tormented)if(A>100){let p=A-100;p=Math.ceil(p*y.tormented.vars()[0]/100),A-=p,e.city.tormented=p}else e.city.tormented=0;else delete e.city.tormented;if(e.race.wish&&e.race.wishStats&&e.race.wishStats.bad>0){let p=Math.floor(e.race.wishStats.bad/75)+1;A-=p*5}if(e.city.morale.potential=+A.toFixed(1),Ari){let p=_e("gaslighter",3)||0;A=ri+(A-ri)*p/100}if(e.city.morale.cap=ri,e.city.morale.current=A,e.city.morale.current<100)if(e.race.blissful){let p=e.city.morale.current-100,q=y.blissful.vars()[0]/100;i*=1+p*q/100,f.p.Global[t("morale")]=p*q+"%"}else i*=e.city.morale.current/100,f.p.Global[t("morale")]=+(e.city.morale.current-100).toFixed(2)+"%";else i*=1+(e.city.morale.current-100)/200,f.p.Global[t("morale")]=+((e.city.morale.current-100)/2).toFixed(2)+"%";if(e.race.lazy&&e.city.calendar.temp===2&&(f.p.Global[t("trait_lazy_bd")]="-"+y.lazy.vars()[0]+"%",i*=1-y.lazy.vars()[0]/100),e.race.distracted&&(f.p.Global[t("event_m_curious3_bd")]="-5%",i*=.95),e.race.stimulated&&(f.p.Global[t("event_m_curious4_bd")]="+10%",i*=1.1),e.civic.govern.type==="dictator"&&(f.p.Global[t("wish_dictator")]=`+${je.dictator()[1]}%`,i*=1+je.dictator()[1]/100),e.race.selenophobia){let p=e.city.calendar.moon>14?28-e.city.calendar.moon:e.city.calendar.moon;f.p.Global[t("moon_phase")]=-p+y.selenophobia.vars()[0]+"%",p=1+y.selenophobia.vars()[0]/100-p/100,i*=p}if(e.interstellar.mass_ejector){let p=0,q=0,P=0;Object.keys(e.interstellar.mass_ejector).forEach(function(j){if(Ut[j]){let K=e.interstellar.mass_ejector[j];p+K>x.mass_ejector*1e3&&(K=x.mass_ejector*1e3-p),p+=K,K>0&&(f.p.consume[j][t("interstellar_blackhole_name")]=-K),K*_>e.resource[j].amount&&(K=e.resource[j].amount/_),K<0&&(K=0),H(j,-(_*K)),q+=K*Ut[j],e.race.universe!=="magic"&&(j==="Elerium"||j==="Infernite")&&(P+=K*Ut[j])}}),e.interstellar.mass_ejector.mass=q,e.interstellar.mass_ejector.total=p,e.interstellar.stellar_engine.mass+=q/1e10*_,e.interstellar.stellar_engine.exotic+=P/1e10*_}if(e.portal.transport&&e.portal.purifier){let p=0,q=0,P=e.blood.spire&&e.blood.spire>=2?.8:.85,j=e.stats.achieve.what_is_best&&e.stats.achieve.what_is_best.e>=4?8:5;if(Object.keys(e.portal.transport.cargo).forEach(function(K){if(Ci[K]){let ae=e.portal.transport.cargo[K];p+ae>Ke.transport*j&&(ae=Ke.transport*j-p),p+=ae;let Z=ae*Ci[K].out;for(;Z*_>e.resource[K].amount&&Z>0;)Z-=Ci[K].out,ae--;Z>0&&(f.p.consume[K][t("portal_transport_title")]=-Z);let ee=1-P**(Ke.bireme||0);H(K,-(_*Z)),q+=Number(ae*Ci[K].in*_*ee)}}),e.tech.hell_lake&&e.tech.hell_lake>=7&&e.tech.railway&&(q*=1+e.tech.railway/100),e.portal.mechbay)for(let K=0;Ke.portal.purifier.sup_max&&(e.portal.purifier.supply=e.portal.purifier.sup_max)}if(e.race.carnivore&&!e.race.herbivore&&!e.race.soul_eater&&!e.race.artifical&&e.resource.Food.amount>10){let p=y.carnivore.vars()[0]/100,q=+((e.resource.Food.amount-10)*p).toFixed(3);e.city.smokehouse&&(q*=.9**e.city.smokehouse.count),H("Food",-(q*_)),f.p.consume.Food[t("spoilage")]=-q}if(e.race.gnawer){let p=e.race.kindling_kindred||e.race.smoldering?"Stone":"Lumber";if(e.resource[p].display){let q=e.resource[e.race.species].amount+e.civic.garrison.workers;e.race.high_pop&&(q/=y.high_pop.vars()[0]);let P=q*y.gnawer.vars()[0];f.p.consume[p][t("trait_gnawer_bd")]=-P,H(p,-(P*_))}}var C=!0;if(e.resource[e.race.species].amount>=1||e.city.farm||e.city.soul_well||e.city.compost||e.city.tourist_center||e.city.transmitter){let p=0,q=a==="virgo"?1+Bt("virgo")[0]/100:1;if(e.race.artifical)e.city.transmitter&&(p=x.transmitter*D("transmitter")*D("psychic_boost","Food"),f.p.Food[t("city_transmitter")]=p+"v",e.city.transmitter.lpmod=D("transmitter")*i*D("psychic_boost","Food"));else if(e.race.detritivore){if(e.city.compost){let rr=e.city.compost.on;if(!e.race.kindling_kindred&&!e.race.smoldering){let Sr=.5,ia=rr*Sr;for(;ia*_>e.resource.Lumber.amount&&ia>0;)ia-=Sr,rr--;f.p.consume.Lumber[t("city_compost_heap")]=-ia,H("Lumber",-(ia*_))}let ot=y.detritivore.vars()[0]/100,Lt=rr*(1.2+e.tech.compost*ot);Lt*=e.city.biome==="grassland"?ze.grassland.vars()[0]:1,Lt*=e.city.biome==="savanna"?ze.savanna.vars()[0]:1,Lt*=e.city.biome==="ashland"?ze.ashland.vars()[0]:1,Lt*=e.city.biome==="volcanic"?ze.volcanic.vars()[0]:1,Lt*=e.city.biome==="hellscape"?ze.hellscape.vars()[0]:1,Lt*=e.city.ptrait.includes("trashed")?et.trashed.vars()[0]:1,Lt*=D("psychic_boost","Food"),f.p.Food[t("city_compost_heap")]=Lt+"v",p+=Lt}}else if(e.race.carnivore||e.race.soul_eater){let rr=Vi(),ot=$e(e.civic.hunter.workers,"hunter");if(ot*=at(ot,"hunting"),e.race.servants){let Lt=e.race.servants.jobs.hunter;Lt*=xr(e.race.servants.jobs.hunter,"hunting"),ot+=Lt}if(ot*=rr*(e.race.carnivore?2:.5),e.race.ghostly&&(ot*=1+y.ghostly.vars()[0]/100),ot*=D("psychic_boost","Food"),f.p.Food[Se("hunter")]=ot+"v",e.race.carnivore&&e.city.lodge&&ot>0&&(ot*=1+e.city.lodge.count/20,f.p.Food[`\u1102${t("city_lodge")}`]=e.city.lodge.count*5+"%"),e.city.soul_well){let Lt=e.city.soul_well.count*(e.race.ghostly?2+y.ghostly.vars()[1]:2);ot+=Lt*D("psychic_boost","Food"),f.p.Food[t("city_soul_well")]=Lt+"v"}p+=ot}else if(e.race.unfathomable){if(e.city.captive_housing){let rr=Vi(),ot=$e(e.civic.hunter.workers,"hunter");if(ot*=at(ot,"hunting")*rr,e.race.servants){let Sr=e.race.servants.jobs.hunter*rr;Sr*=xr(e.race.servants.jobs.hunter,"hunting"),ot+=Sr}let Lt=ot*.008;if(e.city.captive_housing.cattle0&&(ot-=Math.round(e.city.captive_housing.cattle**1.25),ot=e.city.captive_housing.cattle**2&&(e.city.captive_housing.cattle++,e.city.captive_housing.cattleCatch=0)),e.city.captive_housing.cattle>0){let Sr=e.city.captive_housing.cattle/3*D("psychic_boost","Food");f.p.Food[t("city_captive_housing_cattle_bd")]=Sr+"v",p+=Sr,e.resource.Food.amountN(e.city.farm.count)&&(Lt=ot-N(e.city.farm.count),ot=N(e.city.farm.count));let Sr=ot*Zi(!0)+Lt*Zi(!1);if(e.race.servants){let mi=e.race.servants.jobs.farmer,ns=0,Mr=e.city.farm.count-ot/(e.race.high_pop?y.high_pop.vars()[0]:1);mi>Mr&&(ns=mi-Mr,mi=Mr),Sr+=mi*Zi(!0,!0)+ns*Zi(!1,!0)}let ia=1;if(e.city.mill){let mi=e.tech.agriculture>=5?.05:.03,ns=e.city.mill.count-e.city.mill.on;ia+=ns*mi}f.p.Food[Se("farmer")]=Sr+"v",p+=Sr*q*rr*ia*G*D("psychic_boost","Food"),Sr>0&&(f.p.Food[`\u1102${t("city_mill_title1")}`]=(ia-1)*100+"%",f.p.Food[`\u1102${t("sign_virgo")}+0`]=(q-1)*100+"%",f.p.Food[`\u1102${t("morale_weather")}`]=(rr-1)*100+"%",f.p.Food[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%")}}if(e.tauceti.tau_farm&&x.tau_farm){let rr=1+(W.colony||0)*.5,ot=D("tau_farm","food")*x.tau_farm*D("psychic_boost","Food"),Lt=ot*i*rr;f.p.Food[t("tau_home_tau_farm")]=ot+"v",ot>0&&(f.p.Food[`\u1102${t("tau_home_colony")}`]=(rr-1)*100+"%"),H("Food",Lt*_)}let P=0;e.tech.military&&(P=e.race.herbivore&&!e.race.carnivore||e.race.artifical?0:nt(Ge(),"hunting")/3,P*=D("psychic_boost","Food"));let j=0,K=At("spc_red");e.tech.mars&&(j=W.biodome*$e(e.civic.colonist.workers,"colonist")*D("biodome","food")*D("psychic_boost","Food"),(e.race.cataclysm||e.race.orbit_decayed)&&(j+=W.biodome*D("biodome","cat_food")*D("psychic_boost","Food"))),f.p.Food[d.space.spc_red.biodome.title()]=j+"v",j>0&&(f.p.Food[`\u1102${t("space_syndicate")}+0`]=-((1-K)*100)+"%",f.p.Food[`\u1102${t("space_red_ziggurat_title")}+0`]=(k-1)*100+"%",f.p.Food[`\u1102${t("sign_virgo")}+0`]=(q-1)*100+"%");let ae=p+P*G+j*K*k*q;ae*=i;let Z=e.civic.garrison.workers;e.race.parasite&&!e.tech.isolation&&(Z-=N(y.parasite.vars()[0]),Z<0&&(Z=0));let ee=0,J=1;e.race.gluttony&&(J*=1+y.gluttony.vars()[0]/100),e.race.high_metabolism&&(J*=1+y.high_metabolism.vars()[0]/100),e.race.sticky&&(J*=1-y.sticky.vars()[0]/100);let ce=Pe("pinguicula");if(ce>0&&(J*=1-y.sticky.vars(1)[0]/100*ce),e.race.photosynth)switch(e.city.calendar.weather){case 0:J*=e.city.calendar.temp===0?1:1-y.photosynth.vars()[2]/100;break;case 1:J*=1-y.photosynth.vars()[1]/100;break;case 2:J*=1-y.photosynth.vars()[0]/100;break}e.race.ravenous&&(J*=1+y.ravenous.vars()[0]/100),e.race.hibernator&&e.city.calendar.season===3&&(J*=1-y.hibernator.vars()[0]/100),e.race.high_pop&&(J/=y.high_pop.vars()[0]);let ge=1;e.city.banquet&&(e.city.banquet.on?ge*=(e.city.banquet.level>=5?1.02:1.022)**e.city.banquet.strength:e.city.banquet.strength=0);let xe=0,ne=0,Te=0,st=0,Pt=0,vt=0,Ft=0,lr=0,Cs=0,To=0;e.race.fasting||(ee=(e.resource[e.race.species].amount+Z-(e.civic.unemployed.workers+$e(e.civic.hunter.workers,"hunter"))*.5)*J,e.race.forager&&(ee-=$e(e.civic.forager.workers,"forager")),e.race.ravenous&&(xe=e.resource.Food.amount/y.ravenous.vars()[1]),f.p.consume.Food[ut("name")]=-(ee+xe),e.city.banquet&&e.city.banquet.on&&(ee=Math.max(ee,100)),ee*ge+xe>=e.resource.Food.amount?e.city.banquet&&ge>1&&(e.city.banquet.strength=0):(ge>1&&(f.p.consume.Food[`${t("city_banquet")}`]=-(ee*(ge-1))),ee*=ge),e.city.tourist_center&&(ne=e.city.tourist_center.on*50,f.p.consume.Food[t("tech_tourism")]=-ne),e.space.spaceport&&(Te=x.spaceport*(e.race.cataclysm||e.race.orbit_decayed?2:25),f.p.consume.Food[t("space_red_spaceport_title")]=-Te),e.interstellar.starport&&(st=x.starport*100,f.p.consume.Food[t("interstellar_alpha_starport_title")]=-st),e.galaxy.starbase&&(Pt=x.s_gate*x.starbase*250,f.p.consume.Food[t("galaxy_starbase")]=-Pt),e.space.space_station&&(vt=x.space_station*(e.race.cataclysm?1:10),f.p.consume.Food[t("space_belt_station_title")]=-vt),e.space.space_barracks&&!e.race.cataclysm&&(Ft=e.space.space_barracks.on*10,f.p.consume.Food[t("tech_space_marines_bd")]=-Ft),e.galaxy.embassy&&(lr=x.s_gate*x.embassy*7500,f.p.consume.Food[t("galaxy_embassy")]=-lr),e.interstellar.zoo&&(Cs=yt.zoo*12e3,f.p.consume.Food[t("tech_zoo")]=-Cs),e.eden.restaurant&&(To=x.restaurant*25e4,f.p.consume.Food[t("eden_restaurant_bd")]=-To)),f.p.Food[t("soldiers")]=P+"v",P>0&&(f.p.Food[`\u1102${t("quarantine")}+1`]=(G-1)*100+"%"),e.race.fasting&&(f.p.Food[`${t("evo_challenge_fasting")}`]="-100%",ae*=0);let y0=ae-ee-xe-ne-Te-st-Pt-vt-Ft-lr-Cs-To;if(!H("Food",y0*_)||e.race.fasting){if(e.race.anthropophagite&&e.resource[e.race.species].amount>1&&!e.race.fasting)e.resource[e.race.species].amount--,H("Food",1e4*y.anthropophagite.vars()[0]),e.stats.murders++,Qr(1);else if(C=!1,e.resource[e.race.species].amount>0){let rr=1.25,ot=0,Lt=0,Sr=0,ia=0,mi=1;e.race.slow_digestion&&(ot+=y.slow_digestion.vars()[0]);let ns=Pe("slitheryn");if(ns>0&&(ot+=y.slow_digestion.vars(1)[0]*ns),e.race.humpback&&(Lt=y.humpback.vars()[0]),e.race.fasting&&(Sr=qe(e.civic.meditator.workers)*.03),e.race.atrophy&&(ia=y.atrophy.vars()[0]),e.portal.dish_life_infuser&&e.portal.dish_life_infuser.on&&(mi=.95**e.portal.dish_life_infuser.on),rr+=ot+Lt+Sr,rr-=ia,rr*=mi,e.race.fasting){let Mr=e.resource[e.race.species].amount/100;f.p.consume[e.race.species][e.resource[e.race.species].name]=-Mr.toFixed(2),f.p.consume[e.race.species][t("genelab_traits")]=(1-J)*Mr.toFixed(2),f.p.consume[e.race.species][t("Threshold")]=rr.toFixed(2),e.resource[e.race.species].delta=-(Mr*J-rr)*_}if(Math.rand(0,10)===0)if(e.race.fasting){let Mr=e.resource[e.race.species].amount/100*J-rr;Mr<0&&(Mr=0),Mr%1>Math.random()?Mr=Math.ceil(Mr):Mr=Math.floor(Mr),Mr>e.resource[e.race.species].amount&&(Mr=e.resource[e.race.species].amount),e.resource[e.race.species].amount-=Mr,e.stats.starved+=Mr,Qr(Mr)}else ae1&&Math.rand(0,400)===0&&(e.resource[e.race.species].amount--,H("Food",1e4*y.anthropophagite.vars()[0]),e.stats.murders++,Qr(1))}if(e.portal.fortress&&e.portal.fortress.walls<100&&(H("Stone",-(200*_))&&(e.portal.fortress.repair++,f.p.consume.Stone[t("portal_fortress_name")]=-200),e.portal.fortress.repair>=d.portal.prtl_fortress.info.repair()&&(e.portal.fortress.repair=0,e.portal.fortress.walls++)),e.race.psychic&&e.resource.Energy.display){let p={},q=y.psychic.vars()[2];p[t("trait_psychic_name")]=q+"v",H("Energy",q*_),f.p.Energy=p}if(e.civic.homeless>0){let p=Math.min(e.civic.homeless,e.resource[e.race.species].max-e.resource[e.race.species].amount);e.civic.homeless-=p,e.resource[e.race.species].amount+=p,e.civic[e.civic.d_job].workers+=p}else if((C&&e.resource.Food.amount>0||e.race.fasting)&&e.resource[e.race.species].max>e.resource[e.race.species].amount&&!(e.race.artifical||e.race.spongy&&e.city.calendar.weather===0)){if(!(e.race.parasite&&e.city.calendar.wind===0&&!e.race.cataclysm&&!e.race.orbit_decayed)){if(!(e.race.vax&&e.race.vax>=100)){let p=e.tech.reproduction?e.tech.reproduction:0,q=e.resource[e.race.species].amount;e.tech.reproduction&&r.getMonth()===1&&r.getDate()===14&&(p+=5),e.race.fast_growth&&(p*=y.fast_growth.vars()[0],p+=y.fast_growth.vars()[1]),e.race.spores&&e.city.calendar.wind===1&&(e.race.parasite?p+=y.spores.vars()[2]:(p+=y.spores.vars()[0],p*=y.spores.vars()[1])),e.tech.reproduction&&e.tech.reproduction>=2&&e.city.hospital&&(p+=e.city.hospital.count),e.genes.birth&&(p+=e.genes.birth),e.race.promiscuous&&(p+=y.promiscuous.vars()[0]*e.race.promiscuous),e.race.fasting&&(p+=qe(e.civic.meditator.workers)*.15),e.city.banquet&&e.city.banquet.on&&e.city.banquet.level>=1&&(p*=1+e.city.banquet.strength**.75/100),a==="libra"&&(p*=1+Bt("libra")[0]/100),e.race.high_pop&&(p*=y.high_pop.vars()[2],q/=N(1)),e.city.biome==="taiga"&&(p*=ze.taiga.vars()[1]),e.city.ptrait.includes("toxic")&&(q*=et.toxic.vars()[1]),e.race.parasite&&(e.race.cataclysm||e.race.orbit_decayed)&&(p=Math.round(p/5),q*=3),q*=3-2**_,Math.rand(0,q)<=p&&(e.resource[e.race.species].amount++,e.civic[e.civic.d_job].workers++)}}}if(e.space.shipyard&&e.space.shipyard.ships){let p={Oil:0,Helium_3:0,Uranium:0,Elerium:0};e.space.shipyard.ships.forEach(function(q){if(q.location!=="spc_dwarf"||q.transit!==0){let P=Yn(q);P.res&&P.burn>0?P.burn*_0?e.resource[P.res].diff*_:0)?(H(P.res,-(P.burn*_)),q.fueled=!0,p[P.res]+=P.burn):q.fueled=!1:q.fueled=!0}}),f.p.consume.Oil[t("outer_shipyard_fleet")]=-p.Oil,f.p.consume.Helium_3[t("outer_shipyard_fleet")]=-p.Helium_3,f.p.consume.Uranium[t("outer_shipyard_fleet")]=-p.Uranium,f.p.consume.Elerium[t("outer_shipyard_fleet")]=-p.Elerium}e.race.emfield&&(e.race.discharge&&e.race.discharge>0?e.race.discharge--:(e.race.emfield++,Math.rand(0,500)===0&&(e.race.discharge=e.race.emfield,e.race.emfield=1)));let pe=C?1:.5;if(e.race.angry&&C===!1&&(pe-=y.angry.vars()[0]/100),e.race.malnutrition&&C===!1&&(pe+=y.malnutrition.vars()[0]/100),e.portal.dish_soul_steeper&&e.portal.dish_soul_steeper.on&&(pe-=(.03+(e.race.malnutrition?.01:0)+(e.race.angry?-.01:0))*e.portal.dish_soul_steeper.on),pe=Math.max(pe,0),e.resource.Furs.display){if(e.race.evil||e.race.artifical||e.race.unfathomable){let q=Vi(),P=$e(e.civic.hunter.workers,"hunter");if(P*=at(P,"hunting"),e.race.servants){let j=e.race.servants.jobs.hunter;j*=xr(e.race.servants.jobs.hunter,"hunting"),P+=j}if(e.city.biome==="oceanic"?P*=ze.oceanic.vars()[2]:e.city.biome==="tundra"&&(P*=ze.tundra.vars()[0]),P*=q/20,P*=D("psychic_boost","Furs"),f.p.Furs[Se("hunter")]=P+"v",P>0&&(f.p.Furs[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%"),H("Furs",P*pe*i*_*G),!e.race.soul_eater&&e.race.evil){let j=$e(e.civic.lumberjack.workers,"lumberjack");if(j*=at(j,"lumberjack"),e.race.warlord&&e.race.playful&&(j*=1+y.playful.vars()[0]),e.race.servants){let K=e.race.servants.jobs.lumberjack;K*=xr(e.race.servants.jobs.lumberjack,"lumberjack"),j+=K}j/=4,j*=D("psychic_boost","Furs"),f.p.Furs[Se("lumberjack")]=j+"v",j>0&&(f.p.Furs[`\u1102${t("quarantine")}+1`]=(G-1)*100+"%"),H("Furs",j*pe*i*_*G)}}let p=nt(Ge(),"hunting")/10;if(e.city.biome==="oceanic"?p*=ze.oceanic.vars()[2]:e.city.biome==="tundra"&&(p*=ze.tundra.vars()[0]),p*=D("psychic_boost","Furs"),f.p.Furs[t("soldiers")]=p+"v",p>0&&(f.p.Furs[`\u1102${t("quarantine")}+2`]=(G-1)*100+"%"),H("Furs",p*pe*i*G*_),e.race.forager){let q=1+(e.tech.foraging?.5*e.tech.foraging:0),P=$e(e.civic.forager.workers,"forager");if(P*=at(P,"forager"),e.race.servants){let K=e.race.servants.jobs.forager;K*=xr(e.race.servants.jobs.forager,"forager"),P+=K}let j=P*q*.05*D("psychic_boost","Furs");f.p.Furs[Se("forager")]=j+"v",j>0&&(f.p.Furs[`\u1102${t("quarantine")}+3`]=(G-1)*100+"%"),H("Furs",j*pe*G*_)}}if(e.resource.Furs.display&&e.tech.isolation&&e.tauceti.womling_farm){let p=e.tauceti.womling_farm.farmers*D("psychic_boost","Furs"),q=p*i;f.p.Furs[t("tau_red_womlings")]=p+"v",H("Furs",q)}if(e.race.unfathomable&&e.civic.hunter.display){let p=Vi(),q=$e(e.civic.hunter.workers,"hunter");if(q*=at(q,"hunting"),e.race.servants){let j=N(e.race.servants.jobs.hunter);j*=xr(e.race.servants.jobs.hunter,"hunting"),q+=qe(j)}q*=p/20,["Lumber","Chrysotile","Stone","Crystal","Copper","Iron","Aluminium","Cement","Coal","Oil","Uranium","Steel","Titanium","Alloy","Polymer","Iridium"].forEach(function(j){if(e.resource[j].display){let K=q*D("psychic_boost",j)*Dr[j]/5;["Crystal","Uranium"].includes(j)?K*=.2:["Alloy","Polymer","Iridium"].includes(j)?K*=.35:["Steel","Cement"].includes(j)?K*=.85:["Titanium"].includes(j)&&(K*=.65),f.p[j][Se("hunter")]=K+"v",K>0&&(f.p[j][`\u1102${t("quarantine")}+99`]=(G-1)*100+"%"),H(j,K*pe*i*_*G)}})}{let p=e.tech.primitive&&e.tech.primitive>=3?1:0;e.race.ancient_ruins&&p++,e.stats.achieve.extinct_junker&&e.stats.achieve.extinct_junker.l>=1&&p++,e.city.ptrait.includes("magnetic")&&(p+=et.magnetic.vars()[0]),e.race.ascended&&(p+=2);let q=$e(e.civic.professor.workers,"professor"),P=e.race.studious?e.civic.professor.impact+y.studious.vars()[0]:e.civic.professor.impact,j=Pe("elven");j>0&&(P+=y.studious.vars(1)[0]*j),q*=P,q*=e.race.pompous?1-y.pompous.vars()[0]/100:1,q*=at($e(e.civic.professor.workers,"professor"),"science"),e.tech.anthropology&&e.tech.anthropology>=3&&(q*=1+Ka()*.05),e.civic.govern.type==="theocracy"&&(q*=1-je.theocracy()[1]/100);let K=$e(e.civic.scientist.workers,"scientist");if(K*=e.civic.scientist.impact,K*=at($e(e.civic.scientist.workers,"scientist"),"science"),e.tech.science>=6&&e.city.wardenclyffe){let J=$e(e.civic.professor.workers,"professor");e.race.high_pop&&(J=qe(J)),K*=1+J*x.wardenclyffe*.01}e.space.satellite&&(K*=1+e.space.satellite.count*.01),e.civic.govern.type==="theocracy"&&(K*=1-je.theocracy()[2]/100);let ae=0;if(e.arpa.sequence&&e.arpa.sequence.on&&e.arpa.sequence.time>0&&Go()>0){let J=50+e.race.mutation*10;e.arpa.sequence.boost&&(J*=4),J*_<=e.resource.Knowledge.amount?(ae=J,zo=!0):zo=!1}else e.arpa.hasOwnProperty("sequence")&&e.arpa.sequence.time===null&&(e.arpa.sequence.time=e.arpa.sequence.max),zo=!1;let Z=e.tauceti.hasOwnProperty("womling_lab")?e.tauceti.womling_lab.scientist*(e.tech.womling_gene?10:8):0,ee=q+K+Z;if(ee*=pe*i,ee+=p*i,f.p.Knowledge[Se("professor")]=q+"v",e.race.universe==="magic"?f.p.Knowledge[Se("wizard")]=K+"v":f.p.Knowledge[e.civic?.scientist?.name||Se("scientist")]=K+"v",f.p.Knowledge[t("tau_red_womlings")]=Z+"v",f.p.Knowledge[t("hunger")]=(pe-1)*100+"%",f.p.Knowledge[e.race.unfathomable?t("tech_moondial"):t("tech_sundial")]=p+"v",e.race.inspired&&(f.p.Knowledge[t("event_inspiration_bd")]="100%",ee*=2),e.city.library||e.race.warlord){let J=.05,ce=_e("muckraker",2);ce&&(J-=ce/100),e.race.autoignition&&(J-=y.autoignition.vars()[0]/100,J<0&&(J=0));let xe=1+(e.race.warlord?(e.race?.absorbed?.length||1)*10:e.city.library.count)*J;f.p.Knowledge[e.race.warlord?t("portal_throne_of_evil_title"):t("city_library")]=(xe-1)*100+"%",ee*=xe}if(a==="gemini"){let J=1+Bt("gemini")[0]/100;f.p.Knowledge[t(`sign_${a}`)]=(J-1)*100+"%",ee*=J}if(e.tech.isolation&&W.infectious_disease_lab){let J=1+W.infectious_disease_lab*.75;f.p.Knowledge[d.tauceti.tau_home.infectious_disease_lab.title()]=(J-1)*100+"%",ee*=J}if(e.civic.govern.type==="technocracy"&&(f.p.Knowledge[t("govern_technocracy")]=je.technocracy()[2]+"%",ee*=1+je.technocracy()[2]/100),ae>0&&(ee-=ae,f.p.consume.Knowledge[t("genome_bd")]=-ae),H("Knowledge",ee*_),e.tech.tau_gas2&&e.tech.tau_gas2>=6&&(!e.tech.alien_data||e.tech.alien_data<6)&&e.tauceti.alien_space_station&&x.alien_space_station){let J=e.tauceti.alien_space_station.focus/100*ee;f.p.consume.Knowledge[t("tau_gas2_alien_station")]=-J,H("Knowledge",-J*_),e.tauceti.alien_space_station.decrypted+=+J.toFixed(3),e.stats.know+=+J.toFixed(0),e.tauceti.alien_space_station.decrypted>=(e.race.lone_survivor?1e6:25e7)&&!e.tech.alien_data?(e.tech.alien_data=1,L(t("tau_gas2_alien_station_data1",[t("tech_dist_womling")]),"success",!1,["progress"]),de()):e.tauceti.alien_space_station.decrypted>=(e.race.lone_survivor?2e6:5e8)&&e.tech.alien_data&&e.tech.alien_data===1?(e.tech.alien_data=2,e.race.tau_food_item=Math.rand(0,10),L(t("tau_gas2_alien_station_data2",[t(`tau_gas2_alien_station_data2_r${e.race.tau_food_item||0}`)]),"success",!1,["progress"]),de()):e.tauceti.alien_space_station.decrypted>=(e.race.lone_survivor?3e6:75e7)&&e.tech.alien_data&&e.tech.alien_data===2?(e.tech.alien_data=3,L(t("tau_gas2_alien_station_data3"),"success",!1,["progress"]),de()):e.tauceti.alien_space_station.decrypted>=(e.race.lone_survivor?48e5:12e8)&&e.tech.alien_data&&e.tech.alien_data===3?(e.tech.alien_data=4,e.race.tau_junk_item=Math.rand(0,10),L(t("tau_gas2_alien_station_data4",[t(`tau_gas2_alien_station_data4_r${e.race.tau_junk_item||0}`)]),"success",!1,["progress"]),de()):e.tauceti.alien_space_station.decrypted>=(e.race.lone_survivor?6e6:15e8)&&e.tech.alien_data&&e.tech.alien_data===4?(e.tech.alien_data=5,L(t("tau_gas2_alien_station_data5"),"success",!1,["progress"]),de()):e.tauceti.alien_space_station.decrypted>=(e.race.lone_survivor?1e7:25e8)&&e.tech.alien_data&&e.tech.alien_data===5&&(e.tech.alien_data=6,e.tauceti.alien_space_station.decrypted=25e8,e.race.lone_survivor?(e.settings.tau.star=!0,e.tech.matrix=2,e.tauceti.ringworld={count:0},L(t("tau_gas2_alien_station_data6_alt"),"success",!1,["progress"])):L(t("tau_gas2_alien_station_data6"),"success",!1,["progress"]),de())}}if(e.resource.Omniscience.display){if(W.research_station){let p=$e(e.civic.ghost_trapper.workers,"ghost_trapper");p*=at(p,"science"),p*=e.race.pompous?1-y.pompous.vars()[0]/100:1;let q=1;e.race.warlord&&e.eden.corruptor&&(q=1+(x.corruptor||0)*.04);let P=W.research_station*p*325e-7*q;f.p.Omniscience[t("eden_research_station_title")]=P+"v",q>1&&(f.p.Omniscience[`\u1102${t("eden_corruptor_title")}`]=(q-1)*100+"%");let j=P;j*=pe*i,H("Omniscience",j*_)}if(e.tech.science&&e.tech.science>=23){let p=$e(e.civic.scientist.workers,"scientist");p*=at(p,"science"),p*=e.race.pompous?1-y.pompous.vars()[0]/100:1;let q=p*707e-6;f.p.Omniscience[e.civic.scientist.name]=q+"v";let P=q;P*=pe*i,H("Omniscience",P*_)}}let Ps=0;if(e.city.factory){let p=(x.factory||0)+(x.red_factory||0)+(x.int_factory||0)*2+(x.hell_factory||0)*d.portal.prtl_wasteland.hell_factory.lines()+(W.tau_factory||0)*(e.tech.isolation?5:3),q=e.city.factory.on+(e.space.red_factory?e.space.red_factory.on:0)+(e.interstellar.int_factory?e.interstellar.int_factory.on*2:0)+(e.portal.hell_factory?e.portal.hell_factory.on*d.portal.prtl_wasteland.hell_factory.lines():0)+(e.tauceti.tau_factory?e.tauceti.tau_factory.on*(e.tech.isolation?5:3):0),P=q>0?p/q:0,j=q;["Lux","Furs","Alloy","Polymer","Nano","Stanene"].forEach(function(Z){j-=e.city.factory[Z],j<0&&(e.city.factory[Z]+=j,j=0)});let K=e.tech.factory||0,ae=e.tech.isolation?1+(W.colony||0)*.5:1;if(e.city.factory.Lux&&e.city.factory.Lux>0){let Z=e.city.factory.Lux*Ye.Lux.fur[K]*P,ee=e.city.factory.Lux;for(;Z*_>e.resource.Furs.amount&&Z>0;)Z-=Ye.Lux.fur[K]*P,ee--;f.p.consume.Furs[t("city_factory")]=-Z,H("Furs",-(Z*_));let J=qe(e.resource[e.race.species].amount)*Ye.Lux.demand[K]*P;J=Qc(J);let ce=ee*J;e.race.gravity_well&&(ce=ht(ce)),Ps=ce,e.race.discharge&&e.race.discharge>0&&(ce*=.5),H("Money",ce*pe*i*_)}if(e.city.factory.Furs&&e.city.factory.Furs>0){let Z=Ye.Furs.money[K]*P,ee=Ye.Furs.polymer[K]*P,J=e.city.factory.Furs*Z,ce=e.city.factory.Furs*ee,ge=e.city.factory.Furs;for(;ce*_>e.resource.Polymer.amount&&ce>0;)ce-=ee,J-=Z,ge--;for(;J*_>e.resource.Money.amount&&J>0;)ce-=ee,J-=Z,ge--;f.p.consume.Money[t("city_factory")]=-J,f.p.consume.Polymer[t("city_factory")]=-ce,H("Money",-(J*_)),H("Polymer",-(ce*_));let xe=ge*Ye.Furs.output[K]*P*D("psychic_boost","Furs");xe=Rs(xe);let ne=xe*ae;if(ne*=pe*i,e.race.gravity_well&&(ne=ht(ne)),f.p.Furs[t("city_factory")]=xe+"v",ne>0&&(ae>0&&(f.p.Furs[`\u1102${t("tau_home_colony")}`]=(ae-1)*100+"%"),e.race.discharge&&e.race.discharge>0&&(ne*=.5,f.p.Furs[`\u1102${t("evo_challenge_discharge")}`]="-50%"),e.tech.q_factory)){let Te=(Tr-1)/8+1;ne*=Te,f.p.Furs[`\u1102${t("quantum")}`]=(Te-1)*100+"%"}e.race.gravity_well&&(f.p.Furs[`\u1102${t("evo_challenge_gravity_well")}+0`]=-((1-ht(1))*100)+"%"),H("Furs",ne*_)}if(e.city.factory.Alloy&&e.city.factory.Alloy>0){let Z=e.city.factory.Alloy*Ye.Alloy.copper[K]*P,ee=e.city.factory.Alloy*Ye.Alloy.aluminium[K]*P,J=e.city.factory.Alloy;for(;Z*_>e.resource.Copper.amount&&Z>0;)Z-=Ye.Alloy.copper[K]*P,ee-=Ye.Alloy.aluminium[K]*P,J--;for(;ee*_>e.resource.Aluminium.amount&&ee>0;)Z-=Ye.Alloy.copper[K]*P,ee-=Ye.Alloy.aluminium[K]*P,J--;f.p.consume.Copper[t("city_factory")]=-Z,f.p.consume.Aluminium[t("city_factory")]=-ee,H("Copper",-(Z*_)),H("Aluminium",-(ee*_));let ce=J*Ye.Alloy.output[K]*P*D("psychic_boost","Alloy");ce=Rs(ce),e.tech.alloy&&(ce*=1.37),e.race.metallurgist&&(ce*=1+y.metallurgist.vars()[0]*e.race.metallurgist/100);let ge=ce*ae;if(ge*=pe*i,e.race.gravity_well&&(ge=ht(ge)),f.p.Alloy[t("city_factory")]=ce+"v",ge>0){if(ae>0&&(f.p.Alloy[`\u1102${t("tau_home_colony")}`]=(ae-1)*100+"%"),e.race.discharge&&e.race.discharge>0&&(ge*=.5,f.p.Alloy[`\u1102${t("evo_challenge_discharge")}`]="-50%"),e.tech.q_factory){let xe=(Tr-1)/2+1;ge*=xe,f.p.Alloy[`\u1102${t("quantum")}`]=(xe-1)*100+"%"}f.p.Alloy[t("hunger")]=(pe-1)*100+"%"}e.race.gravity_well&&(f.p.Alloy[`\u1102${t("evo_challenge_gravity_well")}+0`]=-((1-ht(1))*100)+"%"),H("Alloy",ge*_)}else f.p.Alloy=0;if(e.city.factory.Polymer&&e.city.factory.Polymer>0){let Z=e.race.kindling_kindred||e.race.smoldering?Ye.Polymer.oil_kk[K]*P:Ye.Polymer.oil[K]*P,ee=e.race.kindling_kindred||e.race.smoldering?0:Ye.Polymer.lumber[K]*P,J=e.city.factory.Polymer*Z,ce=e.city.factory.Polymer*ee,ge=e.city.factory.Polymer;for(;ce*_>e.resource.Lumber.amount&&ce>0;)ce-=ee,J-=Z,ge--;for(;J*_>e.resource.Oil.amount&&J>0;)ce-=ee,J-=Z,ge--;f.p.consume.Lumber[t("city_factory")]=-ce,f.p.consume.Oil[t("city_factory")]=-J,H("Lumber",-(ce*_)),H("Oil",-(J*_));let xe=ge*Ye.Polymer.output[K]*P*D("psychic_boost","Polymer");xe=Rs(xe),e.tech.polymer>=2&&(xe*=1.42);let ne=xe*ae;if(ne*=pe*i,e.race.gravity_well&&(ne=ht(ne)),f.p.Polymer[t("city_factory")]=xe+"v",ne>0&&(ae>0&&(f.p.Polymer[`\u1102${t("tau_home_colony")}`]=(ae-1)*100+"%"),e.race.discharge&&e.race.discharge>0&&(ne*=.5,f.p.Polymer[`\u1102${t("evo_challenge_discharge")}`]="-50%"),e.tech.q_factory)){let Te=(Tr-1)/2+1;ne*=Te,f.p.Polymer[`\u1102${t("quantum")}`]=(Te-1)*100+"%"}e.race.gravity_well&&(f.p.Polymer[`\u1102${t("evo_challenge_gravity_well")}+0`]=-((1-ht(1))*100)+"%"),H("Polymer",ne*_)}if(x.s_gate&&e.galaxy.raider&&Ke.raider>0){let Z=Ke.raider*2.3*D("psychic_boost","Polymer"),ee=qt("gxy_chthonian"),J=Z*i*ee*pe*k;f.p.Polymer[t("galaxy_raider")]=Z+"v",Z>0&&(f.p.Polymer[`\u1102${t("galaxy_piracy")}`]=-((1-ee)*100)+"%",f.p.Polymer[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%"),H("Polymer",J*_)}if(f.p.Polymer[t("hunger")]=(pe-1)*100+"%",e.city.factory.Nano&&e.city.factory.Nano>0){let Z=Ye.Nano_Tube.coal[K]*P,ee=Ye.Nano_Tube.neutronium[K]*P,J=e.city.factory.Nano*Z,ce=e.city.factory.Nano*ee,ge=e.city.factory.Nano;for(;ce*_>e.resource.Neutronium.amount&&ce>0;)ce-=ee,J-=Z,ge--;for(;J*_>e.resource.Coal.amount&&J>0;)ce-=ee,J-=Z,ge--;f.p.consume.Coal[t("city_factory")]=-J,f.p.consume.Neutronium[t("city_factory")]=-ce,H("Neutronium",-(ce*_)),H("Coal",-(J*_));let xe=ge*Ye.Nano_Tube.output[K]*P*D("psychic_boost","Nano_Tube");xe=Rs(xe);let ne=xe*ae;if(ne*=pe*i,e.race.gravity_well&&(ne=ht(ne)),f.p.Nano_Tube[t("city_factory")]=xe+"v",ne>0){if(ae>0&&(f.p.Nano_Tube[`\u1102${t("tau_home_colony")}`]=(ae-1)*100+"%"),e.race.discharge&&e.race.discharge>0&&(ne*=.5,f.p.Nano_Tube[`\u1102${t("evo_challenge_discharge")}`]="-50%"),e.tech.q_factory){let Te=(Tr-1)/2+1;ne*=Te,f.p.Nano_Tube[`\u1102${t("quantum")}`]=(Te-1)*100+"%"}f.p.Nano_Tube[t("hunger")]=(pe-1)*100+"%"}e.race.gravity_well&&(f.p.Nano_Tube[`\u1102${t("evo_challenge_gravity_well")}+0`]=-((1-ht(1))*100)+"%"),H("Nano_Tube",ne*_)}else f.p.Nano_Tube=0;if(e.city.factory.Stanene&&e.city.factory.Stanene>0){let Z=Ye.Stanene.aluminium[K]*P,ee=Ye.Stanene.nano[K]*P,J=e.city.factory.Stanene*Z,ce=e.city.factory.Stanene*ee,ge=e.city.factory.Stanene;for(;J*_>e.resource.Aluminium.amount&&J>0;)ce-=ee,J-=Z,ge--;for(;ce*_>e.resource.Nano_Tube.amount&&ce>0;)ce-=ee,J-=Z,ge--;f.p.consume.Aluminium[t("city_factory")]=f.p.consume.Aluminium[t("city_factory")]?f.p.consume.Aluminium[t("city_factory")]-J:-J,f.p.consume.Nano_Tube[t("city_factory")]=-ce,H("Aluminium",-(J*_)),H("Nano_Tube",-(ce*_));let xe=ge*Ye.Stanene.output[K]*P*D("psychic_boost","Stanene");xe=Rs(xe);let ne=xe*ae;if(ne*=pe*i,e.race.gravity_well&&(ne=ht(ne)),f.p.Stanene[t("city_factory")]=xe+"v",ne>0){if(ae>0&&(f.p.Stanene[`\u1102${t("tau_home_colony")}`]=(ae-1)*100+"%"),e.race.discharge&&e.race.discharge>0&&(ne*=.5,f.p.Stanene[`\u1102${t("evo_challenge_discharge")}`]="-50%"),e.tech.q_factory){let Te=(Tr-1)/2+1;ne*=Te,f.p.Stanene[`\u1102${t("quantum")}`]=(Te-1)*100+"%"}f.p.Stanene[t("hunger")]=(pe-1)*100+"%"}e.race.gravity_well&&(f.p.Stanene[`\u1102${t("evo_challenge_gravity_well")}+0`]=-((1-ht(1))*100)+"%"),H("Stanene",ne*_)}else f.p.Stanene=0}if(e.resource.Furs.display&&(f.p.Furs[t("hunger")]=(pe-1)*100+"%"),e.resource.Cement.display){let p=e.race.high_pop?3/y.high_pop.vars()[0]:3;e.city.biome==="ashland"&&(p*=ze.ashland.vars()[1]);let q=$e(e.civic.cement_worker.workers,"cement_worker")*p,P=$e(e.civic.cement_worker.workers,"cement_worker");for(;q*_>e.resource.Stone.amount&&q>0;)q-=p,P--;let j=e.tech.isolation?1+(W.colony||0)*.5:1;f.p.consume.Stone[t(e.tech.isolation?"job_cement_worker_bd":"city_cement_plant_bd")]=-q,H("Stone",-(q*_));let K=e.tech.cement>=4?e.tech.cement>=7?1.45:1.2:1;K*=e.civic.cement_worker.impact,K*=at($e(e.civic.cement_worker.workers,"cement_worker"),"factory"),e.city.biome==="ashland"&&(K*=ze.ashland.vars()[1]),e.stats.achieve.lamentis&&e.stats.achieve.lamentis.l>=3&&(K*=1.1);let ae=P*K*D("psychic_boost","Cement");e.civic.govern.type==="corpocracy"&&(ae*=1+je.corpocracy()[4]/100),e.civic.govern.type==="socialist"&&(ae*=1+je.socialist()[1]/100);let Z=_e("dirty_jobs",2);Z&&(ae*=1+Z/100);let ee=1,J=1;if(e.city.powered&&x.cement_plant){let st=e.tech.cement>=6?.08:.05;ee+=x.cement_plant*st,J+=st}let ce=1;if(e.tech.ai_core&&x.citadel>0){let st=+(Tr/1.75).toFixed(1)/100;ce+=x.citadel*st}let ge=1;e.race.warlord&&e.portal.hell_factory&&x.hell_factory>0&&(ge+=x.hell_factory*8*(e.portal.hell_factory.rank-1)/100);let xe=e.tech.isolation?1+W.mining_pit*.08:1,ne=e.tech.isolation?1:G;f.p.Cement[t(e.tech.isolation?"job_cement_worker_bd":"city_cement_plant_bd")]=ae+"v",ae>0&&(e.tech.isolation&&(f.p.Cement[`\u1102${t("tau_home_colony")}+0`]=(j-1)*100+"%",f.p.Cement[`\u1102${t("tau_home_mining_pit")}+0`]=(xe-1)*100+"%"),f.p.Cement[`\u1102${t("power")}+0`]=(ee-1)*100+"%",f.p.Cement[`\u1102${t("quarantine")}+0`]=(ne-1)*100+"%"),ge>1&&(f.p.Cement[`\u1102${t("portal_factory_title")}+0`]=(ge-1)*100+"%"),e.race.discharge&&e.race.discharge>0&&x.cement_plant>0&&(ee=(ee-1)*.5+1,J=(J-1)*.5+1,f.p.Cement[`\u1102${t("evo_challenge_discharge")}`]="-50%");let Te=ae*ce*j*xe*ge;e.city.cement_plant&&(e.city.cement_plant.cnvay=+(Te*pe*ne*i*(J-1)).toFixed(5)),Te*=ee*pe*ne*i,e.tech.ai_core&&x.citadel>0&&(f.p.Cement[t("interstellar_citadel_effect_bd")]=(ce-1)*100+"%"),f.p.Cement[t("hunger")]=(pe-1)*100+"%",H("Cement",Te*_)}let Mt=$a("metal"),Vr=0,ka=0,zr=0;if(Wc()){let p=e.city.smelter.count;x.stellar_forge&&(ka=x.stellar_forge*d.interstellar.int_neutron.stellar_forge.smelting(),e.city.smelter.Star=Math.max(e.city.smelter.Star,ka),p+=ka),x.hell_forge&&(p+=x.hell_forge*d.portal.prtl_ruins.hell_forge.smelting()),x.demon_forge&&(p+=x.demon_forge*d.portal.prtl_wasteland.demon_forge.smelting()),x.sacred_smelter&&(p+=x.sacred_smelter*d.eden.eden_elysium.sacred_smelter.smelting()),x.ore_refinery&&(p+=x.ore_refinery*d.tauceti.tau_gas.ore_refinery.smelting()),e.space.hell_smelter&&(p+=e.space.hell_smelter.count*d.space.spc_hell.hell_smelter.smelting()),x.geothermal&&(p+=x.geothermal*d.space.spc_hell.geothermal.smelting()),e.city.smelter.cap=p,e.city.smelter.StarCap=ka,e.race.forge&&(e.city.smelter.Wood=0,e.city.smelter.Coal=0,e.city.smelter.Oil=Math.max(0,e.city.smelter.cap-e.city.smelter.Star-e.city.smelter.Inferno)),(e.race.kindling_kindred||e.race.smoldering)&&!e.race.evil&&e.city.smelter.Wood!==0&&(e.city.smelter.Coal+=e.city.smelter.Wood,e.city.smelter.Wood=0);let q=0;if(["Wood","Coal","Oil","Star","Inferno"].forEach(function(ne){q+e.city.smelter[ne]>e.city.smelter.cap&&(e.city.smelter[ne]=e.city.smelter.cap-q),q+=e.city.smelter[ne]}),e.city.smelter.Iron+e.city.smelter.Steel+e.city.smelter.Iridium>q){let ne=e.city.smelter.Iron+e.city.smelter.Steel+e.city.smelter.Iridium-q;e.city.smelter.Iron-=ne,e.city.smelter.Iron<0&&(ne=e.city.smelter.Iron,e.city.smelter.Iron=0,e.city.smelter.Iridium+=ne,e.city.smelter.Iridium<0?(ne=e.city.smelter.Iridium,e.city.smelter.Iridium=0):ne=0,e.city.smelter.Steel+=ne,e.city.smelter.Steel<0&&(e.city.smelter.Steel=0))}else if(e.city.smelter.Iron+e.city.smelter.Steel+e.city.smelter.Iridium=2);!(e.resource.Iridium.display&&ne)&&!(e.resource.Steel.display&&e.tech.smelting>=2&&!e.race.steelen)&&e.city.smelter.Iron++}if(e.city.smelter.Star>e.city.smelter.StarCap){let ne=e.city.smelter.Star-e.city.smelter.StarCap;e.city.smelter.Star=e.city.smelter.StarCap,e.city.smelter.Oil+=ne}let P=xo(),j=e.city.smelter.Wood*P.l_cost,K=e.city.smelter.Coal*P.c_cost,ae=e.city.smelter.Oil*P.o_cost;Vr=e.city.smelter.Iron;let Z=e.city.smelter.Steel;zr=e.city.smelter.Iridium;let ee=e.city.smelter.Oil,J=e.city.smelter.Inferno;e.race.steelen&&(Vr+=Z,Z=0);let ce=Math.max(0,Vr+Z+zr-q);if(j>0){let ne=Math.max(0,Math.floor(e.resource[P.l_type].amount/(P.l_cost*_)));ne0){let ne=Math.max(0,Math.floor(e.resource.Coal.amount/(P.c_cost*_)));ne0){let ne=Math.max(0,Math.floor(e.resource.Oil.amount/(P.o_cost*_)));ne0){let ne={Oil:35,Coal:50,Infernite:.5},Te=Math.floor((e.resource.Oil.amount-ae)/(ne.Oil*_)),st=Math.floor((e.resource.Coal.amount-K)/(ne.Coal*_)),Pt=Math.floor(e.resource.Infernite.amount/(ne.Infernite*_)),vt=Math.max(0,Math.min(Te,st,Pt));vt0){let ne=Math.min(ce,Z);Z-=ne,ce-=ne;let Te=Math.min(ce,Vr);Vr-=Te,ce-=Te;let st=Math.min(ce,zr);zr-=st,ce-=st}Vr*=e.tech.smelting>=3?1.2:1,zr*=.05;let ge=_e("dirty_jobs",2);ge&&(Vr*=1+ge/100,zr*=1+ge/100),e.tech.smelting>=7&&(Vr*=1.25,zr*=1.25),ee>0&&(Vr*=1+ee/200,zr*=1+ee/200),J>0&&(Vr*=1+J/125,zr*=1+J/125),ka>0&&(Vr*=1+ka/500,zr*=1+ka/75),e.race.pyrophobia&&(Vr*=1-y.pyrophobia.vars()[0]/100,zr*=1-y.pyrophobia.vars()[0]/100),e.race.elemental&&y.elemental.vars()[0]==="fire"&&(Vr*=1+qe(y.elemental.vars()[3]*e.resource[e.race.species].amount/100),zr*=1+qe(y.elemental.vars()[3]*e.resource[e.race.species].amount/100));let xe=Pe("salamander");if(xe>0&&(Vr*=1+.2*xe,zr*=1+.2*xe),f.p.consume[P.l_type][t("city_smelter")]=-j,f.p.consume.Coal[t("city_smelter")]=-K,f.p.consume.Oil[t("city_smelter")]=-ae,H(P.l_type,-(j*_)),H("Coal",-(K*_)),H("Oil",-(ae*_)),K>0&&e.tech.uranium&&e.tech.uranium>=3){let ne=K/65;e.city.geology.Uranium&&(ne*=e.city.geology.Uranium+1),ne*=D("psychic_boost","Uranium"),H("Uranium",ne*_),f.p.consume.Uranium[t("city_coal_ash")]=(f.p.consume.Uranium[t("city_coal_ash")]??0)+ne}if(e.resource.Steel.display){let ne=Z*2,Te=Z*.25;for(;ne*_>e.resource.Iron.amount&&ne>0||Te*_>e.resource.Coal.amount&&Te>0;)ne-=2,Te-=.25,Z--;f.p.consume.Coal[t("city_smelter")]-=Te,f.p.consume.Iron[t("city_smelter")]=-ne,H("Iron",-(ne*_)),H("Coal",-(Te*_));let st=1;if(e.stats.achieve.steelen&&e.stats.achieve.steelen.l>=1){let Ft=e.stats.achieve.steelen.l*2/100;st*=1+Ft}for(e.stats.achieve.lamentis&&e.stats.achieve.lamentis.l>=2&&(st*=1.1),w=4;w<=6;w++)e.tech.smelting>=w&&(st*=1.2);e.tech.smelting>=7&&(st*=1.25),ee>0&&(Z*=1+ee/200),J>0&&(Z*=1+J/125),ka&&(Z*=1+ka/500),ge&&(Z*=1+ge/100),e.race.elemental&&y.elemental.vars()[0]==="fire"&&(Z*=1+qe(y.elemental.vars()[3]*e.resource[e.race.species].amount/100)),xe>0&&(Z*=1+.2*xe);let Pt=Z*st*D("psychic_boost","Steel");e.race.pyrophobia&&(Pt*=1-y.pyrophobia.vars()[0]/100);let vt=Pt;if(vt*=pe*i*Mt.mult,f.p.Steel[t("city_smelter")]=Pt+"v",f.p.Steel[t("city_shrine")]=((Mt.mult-1)*100).toFixed(1)+"%",f.p.Steel[t("hunger")]=(pe-1)*100+"%",H("Steel",vt*_),e.tech.titanium&&e.tech.titanium>=1){let Ft=Pt*pe*D("psychic_boost","Titanium");ka>0&&(vt*=1+ka/50),e.city.geology.Titanium&&(vt*=e.city.geology.Titanium+1),e.city.biome==="oceanic"&&(vt*=ze.oceanic.vars()[1]),vt*=Mt.mult;let lr=e.tech.titanium>=3?10:25;H("Titanium",vt*_/lr),f.p.Titanium[t("resource_Steel_name")]=Ft/lr+"v"}}}let xa=e.race.truepath?"space":"interstellar",qa="g_factory";if(e.race.warlord&&(xa="portal",qa="twisted_lab"),e[xa][qa]&&e[xa][qa].count>0){let p=e.race.truepath?W.g_factory:e.race.warlord?x.twisted_lab:yt.g_factory,q=e[xa][qa].on,P=q>0?p/q:0,j=q;(e.race.kindling_kindred||e.race.smoldering)&&(e[xa][qa].Lumber=0),["Oil","Coal","Lumber"].forEach(function(ae){j-=e[xa][qa][ae],j<0&&(e[xa][qa][ae]+=j,j=0)});let K=e[xa][qa].Lumber+e[xa][qa].Coal+e[xa][qa].Oil;if(K>0){let ae=e[xa][qa].Lumber*350*P,Z=e[xa][qa].Coal*25*P,ee=e[xa][qa].Oil*15*P;for(;ae*_>e.resource.Lumber.amount&&ae>0;)ae-=350*P,K--;for(;Z*_>e.resource.Coal.amount&&Z>0;)Z-=25*P,K--;for(;ee*_>e.resource.Oil.amount&&ee>0;)ee-=15*P,K--;K*=D("g_factory")*D("psychic_boost","Graphene"),f.p.consume.Lumber[e.race.warlord?t("portal_twisted_lab_title"):t("interstellar_g_factory_bd")]=-ae,f.p.consume.Coal[e.race.warlord?t("portal_twisted_lab_title"):t("interstellar_g_factory_bd")]=-Z,f.p.consume.Oil[e.race.warlord?t("portal_twisted_lab_title"):t("interstellar_g_factory_bd")]=-ee,H("Lumber",-(ae*_)),H("Coal",-(Z*_)),H("Oil",-(ee*_)),e.civic.govern.type==="corpocracy"&&(K*=1+je.corpocracy()[4]/100),e.civic.govern.type==="socialist"&&(K*=1+je.socialist()[1]/100);let J=1;if(e.tech.ai_core>=3){let ne=+(Tr/5).toFixed(1)/100;J+=ne*x.citadel}let ce=1;if(e.race.warlord&&e.portal.hasOwnProperty("incinerator")&&e.portal.incinerator.rank>1){let ne=e.portal.incinerator.rank-1;ce+=ne*15*e.portal.incinerator.on/100}let ge=e.race.truepath?At("spc_titan"):1,xe=K*J*k*pe*i*ge*P*ce;f.p.Graphene[e.race.warlord?t("portal_twisted_lab_title"):t("interstellar_g_factory_bd")]=K+"v",e.tech.isolation&&K>0&&(xe*=ye,ye>1&&(f.p.Graphene[`\u1102${t("tau_red_womlings")}+0`]=(ye-1)*100+"%")),ce>1&&(f.p.Graphene[`\u1102${t("portal_incinerator_title")}`]=(ce-1)*100+"%"),K>0&&(f.p.Graphene[`\u1102${t("space_syndicate")}`]=-((1-ge)*100)+"%",f.p.Graphene[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%"),e.race.discharge&&e.race.discharge>0&&(xe*=.5,f.p.Graphene[`\u1102${t("evo_challenge_discharge")}`]="-50%"),x.citadel>0&&(f.p.Graphene[t("interstellar_citadel_effect_bd")]=(J-1)*100+"%"),f.p.Graphene[t("hunger")]=(pe-1)*100+"%",H("Graphene",xe*_)}else f.p.Graphene=0}if(e.galaxy.vitreloy_plant&&x.vitreloy_plant>0){let p=5e4,q=2.5,P=100,j=x.vitreloy_plant;if(j=Math.min(j,Math.floor(e.resource.Money.amount/(p*_))),j=Math.min(j,Math.floor(e.resource.Bolognium.amount/(q*_))),j=Math.min(j,Math.floor(e.resource.Stanene.amount/(P*_))),j=Math.max(j,0),j>0){p*=j,q*=j,P*=j,j*=D("vitreloy_plant")*D("psychic_boost","Vitreloy"),f.p.consume.Money[t("galaxy_vitreloy_plant_bd")]=-p,f.p.consume.Bolognium[t("galaxy_vitreloy_plant_bd")]=-q,f.p.consume.Stanene[t("galaxy_vitreloy_plant_bd")]=-P,H("Money",-(p*_)),H("Bolognium",-(q*_)),H("Stanene",-(P*_));let K=qt("gxy_alien1");f.p.Vitreloy[t("galaxy_vitreloy_plant_bd")]=j+"v",e.race.discharge&&e.race.discharge>0&&(j*=.5,f.p.Vitreloy[`\u1102${t("evo_challenge_discharge")}`]="-50%"),j>0&&(f.p.Vitreloy[`\u1102${t("galaxy_piracy")}+0`]=-((1-K)*100)+"%",f.p.Vitreloy[`\u1102${t("space_red_ziggurat_title")}+0`]=(k-1)*100+"%"),H("Vitreloy",j*pe*i*K*_*k)}}if(x.shadow_mine){let p=x.soul_attractor?1+x.soul_attractor*(e.tech.pitspawn>=3?.2:.1):1;if(e.resource.Vitreloy.display){let q=D("shadow_mine","vitreloy"),P=x.shadow_mine*q*D("psychic_boost","Vitreloy"),j=P*p*i;P>0&&(f.p.Vitreloy[t("portal_shadow_mine_title")]=P+"v",f.p.Vitreloy[`\u1102${t("portal_soul_attractor_title")}+0`]=(p-1)*100+"%"),H("Vitreloy",j*_)}if(e.resource.Elerium.display){let q=D("shadow_mine","elerium"),P=x.shadow_mine*q*D("psychic_boost","Elerium"),j=P*p*i;P>0&&(f.p.Elerium[t("portal_shadow_mine_title")]=P+"v",f.p.Elerium[`\u1102${t("portal_soul_attractor_title")}+0`]=(p-1)*100+"%"),H("Elerium",j*_)}if(e.resource.Infernite.display){let q=D("shadow_mine","infernite"),P=x.shadow_mine*q*D("psychic_boost","Infernite"),j=P*p*i;P>0&&(f.p.Infernite[t("portal_shadow_mine_title")]=P+"v",f.p.Infernite[`\u1102${t("portal_soul_attractor_title")}+0`]=(p-1)*100+"%"),H("Infernite",j*_)}}if(x.s_gate&&e.galaxy.raider&&Ke.raider>0){let p=Ke.raider*.05*D("psychic_boost","Vitreloy"),q=qt("gxy_chthonian"),P=p*i*q*pe*k;f.p.Vitreloy[t("galaxy_raider")]=p+"v",p>0&&(f.p.Vitreloy[`\u1102${t("galaxy_piracy")}+1`]=-((1-q)*100)+"%",f.p.Vitreloy[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%"),H("Vitreloy",P*_)}if(f.p.Vitreloy[t("hunger")]=(pe-1)*100+"%",!e.tech.isolation&&e.space.lander&&e.space.crashed_ship&&e.space.crashed_ship.count===100){let p=At("spc_triton"),q=W.lander*D("lander"),P=q*i*p*pe;f.p.Cipher[t("space_lander_title")]=q+"v",f.p.Cipher[`\u1102${t("space_syndicate")}+0`]=-((1-p)*100)+"%",f.p.Cipher[`\u1102${t("hunger")}`]=(pe-1)*100+"%",H("Cipher",P*_),e.resource.Cipher.display&&e.tech.outer&&e.tech.outer===2&&(e.tech.outer=3,de())}if(!e.tech.isolation&&e.space.digsite&&e.space.digsite.count===100){e.tech.dig_control||(e.tech.dig_control=1,de());let p=At("spc_eris"),q=W.shock_trooper*D("shock_trooper"),P=W.tank*D("tank");W.shock_trooper&&(f.p.Cipher[t("space_shock_trooper_title")]=q+"v",f.p.Cipher[`\u1102${t("space_syndicate")}+1`]=-((1-p)*100)+"%"),W.tank&&(f.p.Cipher[t("space_tank_title")]=P+"v",f.p.Cipher[`\u1102${t("space_syndicate")}+2`]=-((1-p)*100)+"%");let j=(q+P)*i*p;H("Cipher",j*_)}if(e.portal.oven_complete&&x.oven_complete&&!e.tech.dish_reset&&e.portal.devilish_dish.done>=100&&(e.tech.dish_reset=1,de()),e.tech.isolation&&e.tauceti.alien_outpost&&x.alien_outpost){let p=D("alien_outpost"),q=1+(W.colony||0)*.5;f.p.Cipher[t("tech_alien_outpost")]=p+"v",p>0&&(f.p.Cipher[`\u1102${t("tau_home_colony")}`]=(q-1)*100+"%");let P=p*i*q;H("Cipher",P*_)}let Et={};if(e.tauceti.ore_refinery&&e.tauceti.mining_ship&&e.tech.tau_roid&&e.tech.tau_roid>=4){if(e.tauceti.ore_refinery.max=e.tauceti.ore_refinery.count*1e3,e.tauceti.ore_refinery.fill>0){let q=x.ore_refinery*D("ore_refinery");q>e.tauceti.ore_refinery.fill&&(q=e.tauceti.ore_refinery.fill),e.tauceti.ore_refinery.fill-=q*_;let P=e.tech.tau_roid>=5?.6:.64,j=e.tech.tau_roid>=5?.35:.36;Et.iron=q*P*(100-e.tauceti.mining_ship.common)/100*D("mining_ship_ore","iron")*D("psychic_boost","Iron"),Et.aluminium=q*P*e.tauceti.mining_ship.common/100*D("mining_ship_ore","aluminium")*D("psychic_boost","Aluminium"),Et.iridium=q*j*(100-e.tauceti.mining_ship.uncommon)/100*D("mining_ship_ore","iridium")*D("psychic_boost","Iridium"),Et.neutronium=q*j*e.tauceti.mining_ship.uncommon/100*D("mining_ship_ore","neutronium")*D("psychic_boost","Neutronium"),e.tech.tau_roid>=5&&(Et.orichalcum=q*.05*(100-e.tauceti.mining_ship.rare)/10*D("mining_ship_ore","orichalcum")*D("psychic_boost","Orichalcum"),Et.elerium=q*.05*e.tauceti.mining_ship.rare/10*D("mining_ship_ore","elerium")*D("psychic_boost","Elerium"))}let p=W.mining_ship*D("mining_ship");e.tauceti.ore_refinery.fill+=p*_,e.tauceti.ore_refinery.fill>e.tauceti.ore_refinery.max&&(e.tauceti.ore_refinery.fill=e.tauceti.ore_refinery.max)}if(e.race.cataclysm||e.race.orbit_decayed){if(e.tech.mars&&W.biodome&&!e.race.kindling_kindred&&!e.race.smoldering){let p=W.biodome*$e(e.civic.colonist.workers,"colonist")*D("biodome","lumber")*D("psychic_boost","Lumber");f.p.Lumber[d.space.spc_red.biodome.title()]=p+"v",p>0&&(f.p.Lumber[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%"),f.p.Lumber[t("hunger")]=(pe-1)*100+"%",H("Lumber",p*pe*i*_*k)}}else if(e.race.soul_eater&&e.race.species!=="wendigo"&&e.race.evil){let p=Vi(),q=$e(e.civic.hunter.workers,"hunter");if(q*=at(q,"hunting"),e.race.servants){let j=N(e.race.servants.jobs.hunter);j*=xr(e.race.servants.jobs.hunter,"hunting"),q+=qe(j)}q*=p/2,q*=D("psychic_boost","Lumber");let P=nt(Ge(),"hunting")/3;P*=D("psychic_boost","Lumber"),f.p.Lumber[Se("hunter")]=q+"v",f.p.Lumber[t("soldiers")]=P+"v",f.p.Lumber[t("hunger")]=(pe-1)*100+"%",H("Lumber",q*pe*i*_),H("Lumber",P*pe*i*_)}else if(e.race.evil){let p=$e(e.civic.lumberjack.workers,"lumberjack");if(p*=at(p,"lumberjack"),e.race.servants){let j=e.race.servants.jobs.lumberjack;j*=xr(e.race.servants.jobs.lumberjack,"lumberjack"),p+=j}p*=D("psychic_boost","Lumber");let q=1;e.city.graveyard&&(q+=e.city.graveyard.count*.08);let P=nt(Ge(),"hunting")/5;if(P*=D("psychic_boost","Lumber"),f.p.Lumber[Se("lumberjack")]=p+"v",p>0&&(f.p.Lumber[`\u1102${t("city_graveyard")}+0`]=(q-1)*100+"%",f.p.Lumber[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%"),f.p.Lumber[t("soldiers")]=P+"v",P>0&&(f.p.Lumber[`\u1102${t("quarantine")}+1`]=(G-1)*100+"%"),e.race.forager){let j=1,K=$e(e.civic.forager.workers,"forager");if(K*=at(K,"forager"),e.race.servants){let Z=e.race.servants.jobs.forager;Z*=xr(e.race.servants.jobs.forager,"forager"),K+=Z}let ae=K*j*.25;f.p.Lumber[Se("forager")]=ae+"v",ae>0&&(f.p.Lumber[`\u1102${t("city_graveyard")}+1`]=(q-1)*100+"%",f.p.Lumber[`\u1102${t("quarantine")}+2`]=(G-1)*100+"%"),H("Lumber",ae*pe*q*i*G*_)}f.p.Lumber[t("hunger")]=(pe-1)*100+"%",H("Lumber",p*pe*q*i*G*_),H("Lumber",P*pe*i*G*_)}else{let p=$e(e.civic.lumberjack.workers,"lumberjack");if(p*=at(p,"lumberjack"),e.race.servants){let Z=e.race.servants.jobs.lumberjack;Z*=xr(e.race.servants.jobs.lumberjack,"lumberjack"),p+=Z}p*=e.city.biome==="forest"?ze.forest.vars()[0]:1,p*=e.city.biome==="savanna"?ze.savanna.vars()[2]:1,p*=e.city.biome==="desert"?ze.desert.vars()[2]:1,p*=e.city.biome==="swamp"?ze.swamp.vars()[2]:1,p*=e.city.biome==="taiga"?ze.taiga.vars()[0]:1,p*=e.civic.lumberjack.impact,e.race.living_tool?p*=y.living_tool.vars()[0]*(e.tech.science&&e.tech.science>0?e.tech.science*.25:0)+1:p*=(e.tech.axe&&e.tech.axe>1?(e.tech.axe-1)*.35:0)+1,p*=D("psychic_boost","Lumber");let q=1;if(e.city.sawmill){let Z=e.tech.saw>=2?.08:.05;q*=e.city.sawmill.count*Z+1}let P=1,j=1;e.city.powered&&e.city.sawmill&&x.sawmill&&(P+=x.sawmill*.04,j+=.04);let K=1;e.city.lumber_yard&&(K+=e.city.lumber_yard.count*.02),f.p.Lumber[Se("lumberjack")]=p+"v",p>0&&(f.p.Lumber[`\u1102${t("city_lumber_yard")}`]=(K-1)*100+"%",f.p.Lumber[`\u1102${t("city_sawmill")}`]=(q-1)*100+"%",f.p.Lumber[`\u1102${t("power")}`]=(P-1)*100+"%",f.p.Lumber[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%"),e.race.discharge&&e.race.discharge>0&&x.sawmill>0&&(P=(P-1)*.5+1,j=(j-1)*.5+1,f.p.Lumber[`\u1102${t("evo_challenge_discharge")}`]="-50%");let ae=p*q*K;if(e.city.sawmill&&(e.city.sawmill.psaw=+(ae*pe*G*i*(j-1)).toFixed(5)),ae*=P*pe*G*i,e.race.forager){let Z=1,ee=$e(e.civic.forager.workers,"forager");if(ee*=at(ee,"forager"),e.race.servants){let ce=e.race.servants.jobs.forager;ce*=xr(e.race.servants.jobs.forager,"forager"),ee+=ce}let J=ee*Z*.25*D("psychic_boost","Lumber");f.p.Lumber[Se("forager")]=J+"v",p>0&&(f.p.Lumber[`\u1102${t("city_lumber_yard")}`]=(K-1)*100+"%",f.p.Lumber[`\u1102${t("city_sawmill")}`]=(q-1)*100+"%",f.p.Lumber[`\u1102${t("power")}`]=(P-1)*100+"%",f.p.Lumber[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%"),H("Lumber",J*pe*G*q*K*P*i*_)}f.p.Lumber[t("hunger")]=(pe-1)*100+"%",H("Lumber",ae*_)}let ai=e.city.metal_refinery?e.city.metal_refinery.count*6:0;if(ai*=G,e.race.sappy){if(e.tech.mining&&e.resource[e.race.species].amount>0){let p=e.resource[e.race.species].amount*y.sappy.vars()[0]*D("psychic_boost","Stone");e.race.high_pop&&(p=qe(p));let q=Pe("cacti");if(q>0&&(p*=1+.32*q),f.p.Stone[ut("name")]=p+"v",e.city.hasOwnProperty("basic_housing")){let K=e.city.basic_housing.count*.025;p*=1+K,f.p.Stone[`\u1102${Rt("small")}`]=K*100+"%"}let P=0;e.civic.hasOwnProperty("garrison")&&(P=e.civic.garrison.workers*y.sappy.vars()[0],e.race.high_pop&&(P=qe(P)),f.p.Stone[t("soldiers")]=P+"v");let j=(p+P)*pe*i;f.p.Stone[t("hunger")]=(pe-1)*100+"%",H("Stone",j*_)}}else{let p=e.race.warlord?e.civic.miner.workers:e.civic.quarry_worker.workers,q=e.race.warlord?Se("miner"):t("workers");p=$e(p,"quarry_worker");let P=p*at(p,"miner"),j=Pe("cacti");if(j>0&&(P*=1+.32*j),e.race.servants){let st=e.race.servants.jobs.quarry_worker;st*=xr(e.race.servants.jobs.quarry_worker,"miner"),P+=st}P*=e.civic.quarry_worker.impact;let K=0,ae=0;if(e.race.forager&&e.resource.Stone.display){let st=$e(e.civic.forager.workers,"forager");if(ae=st*at(st,"forager"),e.race.servants){let Pt=e.race.servants.jobs.forager;Pt*=xr(e.race.servants.jobs.forager,"forager"),ae+=Pt}ae*=.22}if(e.race.living_tool||e.race.tusk){let st=e.race.hivemind?y.hivemind.vars()[0]:1,Pt=e.race.tusk?1+y.tusk.vars()[0]/100*(nt(N(st),"army",0)/st/100):1,vt=e.race.living_tool?y.living_tool.vars()[0]*(e.tech.science&&e.tech.science>0?e.tech.science*.06:0)+1:1;P*=vt>Pt?vt:Pt}else P*=(e.tech.hammer&&e.tech.hammer>0?e.tech.hammer*.4:0)+1;let Z=1;e.city.biome==="desert"&&(Z*=ze.desert.vars()[0]),e.city.biome==="swamp"&&(Z*=ze.swamp.vars()[3]),e.tech.explosives&&e.tech.explosives>=2&&(Z*=1+e.tech.explosives*.25),P*=Z,ae*=Z;let ee=1;e.race.warlord&&e.portal.tunneler&&(ee=1+(e.portal.tunneler.rank+3)/100*e.portal.tunneler.count);let J=1,ce=1,ge=1,xe=!1,ne=1;if(e.race.cataclysm||e.race.orbit_decayed){if(q=Ze("mine"),e.tech.mars&&W.red_mine){let st=W.red_mine*$e(e.civic.colonist.workers,"colonist");P=st*D("red_mine","stone"),ne=k,e.race.smoldering&&e.resource.Chrysotile.display&&(K=st*D("red_mine","asbestos"),K*=D("psychic_boost","Chrysotile"))}}else if(e.city.rock_quarry&&(J+=e.city.rock_quarry.count*.02,x.rock_quarry&&(ce+=.04,ge+=x.rock_quarry*.04,xe=e.race.discharge&&e.race.discharge>0),e.race.smoldering&&e.resource.Chrysotile.display)){let st=e.city.rock_quarry.asbestos/100;K=(P+ae)*st,K*=D("psychic_boost","Chrysotile");let Pt=(100-e.city.rock_quarry.asbestos)/100;P*=Pt,ae*=Pt}P*=D("psychic_boost","Stone"),ae*=D("psychic_boost","Stone"),f.p.Stone[q]=P+"v",P>0&&(ne>1&&(f.p.Stone[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%"),f.p.Stone[`\u1102${t("city_rock_quarry")}`]=(J-1)*100+"%",f.p.Stone[`\u1102${t("power")}`]=(ge-1)*100+"%",xe&&(f.p.Stone[`\u1102${t("evo_challenge_discharge")}`]="-50%"),f.p.Stone[`\u1102${t("portal_tunneler_bd")}`]=(ee-1)*100+"%",f.p.Stone[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%"),e.race.smoldering&&e.resource.Chrysotile.display&&(f.p.Chrysotile[q]=K+"v",K>0&&(ne>1&&(f.p.Chrysotile[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%"),f.p.Chrysotile[`\u1102${t("city_rock_quarry")}`]=(J-1)*100+"%",f.p.Chrysotile[`\u1102${t("power")}`]=(ge-1)*100+"%",xe&&(f.p.Chrysotile[`\u1102${t("evo_challenge_discharge")}`]="-50%"),f.p.Chrysotile[`\u1102${t("portal_tunneler_bd")}`]=(ee-1)*100+"%",f.p.Chrysotile[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%")),ae>0&&(f.p.Stone[Se("forager")]=ae+"v",ae>0&&(f.p.Stone[`\u1102${t("city_rock_quarry")}+1`]=(J-1)*100+"%",f.p.Stone[`\u1102${t("power")}+1`]=(ge-1)*100+"%",xe&&(f.p.Stone[`\u1102${t("evo_challenge_discharge")}+1`]="-50%"),f.p.Stone[`\u1102${t("portal_tunneler_bd")}+1`]=(ee-1)*100+"%",f.p.Stone[`\u1102${t("quarantine")}+1`]=(G-1)*100+"%")),xe&&(ge=(ge-1)*.5+1,ce=(ce-1)*.5+1);let Te=(P*ne+ae)*J*ee;if(e.city.rock_quarry&&(e.city.rock_quarry.cnvay=+(Te*pe*G*i*(ce-1)).toFixed(5)),Te*=ge*pe*G*i,f.p.Stone[t("hunger")]=(pe-1)*100+"%",H("Stone",Te*_),e.race.smoldering&&e.resource.Chrysotile.display){let st=K*ne*J*ee;st*=ge*pe*G*i,f.p.Chrysotile[t("hunger")]=(pe-1)*100+"%",H("Chrysotile",st*_)}if(e.city.metal_refinery&&(e.city.metal_refinery.count>0||e.race.cataclysm||e.race.orbit_decayed||e.race.warlord)){let st=e.race.cataclysm?.16:.08,Pt=P*st;xe&&(ge=(ge-1)*2+1,ce=(ce-1)*2+1),Pt>0&&(e.city.geology.Aluminium&&(Pt*=e.city.geology.Aluminium+1),Pt*=D("psychic_boost","Aluminium"),f.p.Aluminium[q]=Pt+"v",(e.race.cataclysm||e.race.orbit_decayed)&&(f.p.Aluminium[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%"),f.p.Aluminium[`\u1102${t("city_rock_quarry")}+0`]=(J-1)*100+"%",f.p.Aluminium[`\u1102${t("power")}+0`]=(ge-1)*100+"%",xe&&(f.p.Aluminium[`\u1102${t("evo_challenge_discharge")}+0`]="-50%"),f.p.Aluminium[`\u1102${t("portal_tunneler_bd")}+0`]=(ee-1)*100+"%",f.p.Aluminium[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%");let vt=ae*st;vt>0&&(e.city.geology.Aluminium&&(vt*=e.city.geology.Aluminium+1),vt*=D("psychic_boost","Aluminium"),f.p.Aluminium[Se("forager")]=vt+"v",f.p.Aluminium[`\u1102${t("city_rock_quarry")}+1`]=(J-1)*100+"%",f.p.Aluminium[`\u1102${t("power")}+1`]=(ge-1)*100+"%",xe&&(f.p.Aluminium[`\u1102${t("evo_challenge_discharge")}+1`]="-50%"),f.p.Aluminium[`\u1102${t("portal_tunneler_bd")}+1`]=(ee-1)*100+"%",f.p.Aluminium[`\u1102${t("quarantine")}+1`]=(G-1)*100+"%"),xe&&(ge=(ge-1)*.5+1,ce=(ce-1)*.5+1);let Ft=Pt*ne+vt;if(Ft*=J*ee*Mt.mult*pe*G*i,e.city.metal_refinery.cnvay=+(Ft*(ce-1)).toFixed(5),e.city.rock_quarry.almcvy=e.city.metal_refinery.cnvay,Ft*=ge,e.tech.alumina>=2){ai+=x.metal_refinery*6*G;let lr=6*G/100;e.city.metal_refinery.pwr=+(Ft*lr).toFixed(5)}Ft*=1+ai/100,f.p.Aluminium[t("city_shrine")]=((Mt.mult-1)*100).toFixed(1)+"%",f.p.Aluminium[t("hunger")]=(pe-1)*100+"%",H("Aluminium",Ft*_)}}if(e.race.ocular_power&&e.race.ocularPowerConfig&&e.race.ocularPowerConfig.p&&e.race.ocularPowerConfig.ds>0){(!e.race.ocularPowerConfig.hasOwnProperty("ticks")||e.race.ocularPowerConfig.ticks<=0)&&(e.race.ocularPowerConfig.dsl=Math.round(e.race.ocularPowerConfig.ds/10),e.race.ocularPowerConfig.ds=0,e.race.ocularPowerConfig.ticks=Math.round(10/_));let p=e.race.ocularPowerConfig.dsl,q=p*pe*G*i;e.race.ocularPowerConfig.ticks--,f.p.Stone[t("ocular_petrification")]=p+"v",H("Stone",q*_)}if(e.resource.Water.display){if(W.water_freighter){let p=At("spc_enceladus"),q=D("water_freighter")*W.water_freighter*D("psychic_boost","Water"),P=q*pe*i*p*k;f.p.Water[t("space_water_freighter_title")]=q+"v",q>0&&(f.p.Water[`\u1102${t("space_syndicate")}`]=-((1-p)*100)+"%",f.p.Water[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%",f.p.Water[`\u1102${t("hunger")}`]=(pe-1)*100+"%"),H("Water",P*_)}if(e.tech.isolation&&e.tauceti.tau_farm&&x.tau_farm){let p=1+(W.colony||0)*.5,q=D("tau_farm","water")*x.tau_farm*D("psychic_boost","Water"),P=q*i*p;f.p.Water[t("tau_home_tau_farm")]=q+"v",q>0&&(f.p.Water[`\u1102${t("tau_home_colony")}`]=(p-1)*100+"%"),H("Water",P*_)}}if(e.eden.palace&&x.spirit_vacuum&&e.tech.isle){let p=1653439*x.spirit_vacuum;if(e.tech.isle>=6&&x.spirit_battery){let q=x.spirit_battery||0,P=.08;e.race.warlord&&e.eden.corruptor&&e.tech?.asphodel>=13&&(P*=1+(x.corruptor||0)*.03),p*=1+q*P}e.eden.soul_compactor&&e.eden.soul_compactor.count===1&&(e.eden.soul_compactor.energy+=Math.round(p/2),e.eden.soul_compactor.energy>=1e9&&(e.eden.soul_compactor.energy-=1e9,e.resource.Soul_Gem.amount++,e.eden.soul_compactor.report++)),e.eden.palace.energy>0&&(e.eden.palace.rate=p,e.eden.palace.energy-=p*_,e.eden.palace.energy=Math.round(e.eden.palace.energy),e.eden.palace.energy<=0&&(e.eden.palace.energy=0,e.tech.palace=1,de(),or()))}if(e.resource.Mana.display){if(e.race.casting&&qo.forEach(function(p){if(e.race.casting[p])if(e.race.casting[p]>0){let q=Fi(e.race.casting[p]),P=q*_;P>e.resource.Mana.amount?na[p]=Xu(e.resource.Mana.amount,_):na[p]=e.race.casting[p],f.p.consume.Mana[t(`modal_pylon_spell_${p}`)]=-q,H("Mana",-P)}else na[p]=0}),e.city.pylon||e.space.pylon||e.tauceti.pylon){let p=0,q="city_pylon";(e.race.cataclysm||e.race.orbit_decayed)&&e.space.pylon?(p=e.space.pylon.count*.005,q="space_red_pylon"):e.tech.isolation&&e.tauceti.pylon?(p=e.tauceti.pylon.count*.0125,q="tau_home_pylon"):e.city.pylon&&(p=e.city.pylon.count*.01),p*=xt("magic");let P=p*pe*i;if(f.p.Mana[t(q)]=p+"v",e.tech.nexus){let j=e.tech.nexus*5;P*=1+j/100,f.p.Mana[`\u1102${t("arpa_projects_nexus_title")}`]=j+"%"}H("Mana",P*_)}if(e.tech.cleric&&e.civic.priest.display){let p=$e(e.civic.priest.workers,"priest")*.0025;e.race.high_pop&&(p=qe(p)),p*=xt("magic");let q=p*pe*i;f.p.Mana[Se("priest")]=p+"v",H("Mana",q*_)}if(e.race.universe==="magic"&&e.civic.scientist.display){let p=$e(e.civic.scientist.workers,"scientist")*.025;e.race.high_pop&&(p=qe(p)),p*=xt("magic");let q=p*pe*i;f.p.Mana[Se("wizard")]=p+"v",e.civic.govern.type==="magocracy"&&(q*=1+je.magocracy()[0]/100,f.p.Mana[`\u1102${t("govern_magocracy")}`]=je.magocracy()[0]+"%"),H("Mana",q*_)}if(e.race.universe==="magic"&&e.tech.syphon){let p=e.tech.syphon/3;p*=xt("magic");let q=p*pe*i;f.p.Mana[t("arpa_syphon_title")]=p+"v",H("Mana",q*_)}f.p.Mana[t("hunger")]=(pe-1)*100+"%"}if(e.resource.Crystal.display){let p=$e(e.civic.crystal_miner.workers,"crystal_miner");if(p*=at(p,"miner"),e.race.servants){let P=e.race.servants.jobs.crystal_miner;P*=xr(e.race.servants.jobs.crystal_miner,"miner"),p+=P}if(p*=e.civic.crystal_miner.impact*D("psychic_boost","Crystal"),f.p.Crystal[Se("crystal_miner")]=p+"v",e.civic.govern.type==="magocracy"){let P=je.magocracy()[1];p*=1+P/100,f.p.Crystal[`\u1102${t("govern_magocracy")}`]=`${P}%`}let q=p*pe*i;f.p.Crystal[t("hunger")]=(pe-1)*100+"%",H("Crystal",q*_)}if(e.resource.Copper.display||e.resource.Iron.display){let p=$e(e.civic.miner.workers,"miner");p*=at(p,"miner"),p*=e.civic.miner.impact,e.race.tough&&(p*=1+y.tough.vars()[0]/100);let q=Pe("ogre");if(q>0&&(p*=1+y.tough.vars(1)[0]/100*q),e.race.industrious){let ae=1+y.industrious.vars()[0]*e.race.industrious/100;p*=ae}e.city.ptrait.includes("dense")&&(p*=et.dense.vars()[0]),e.city.ptrait.includes("permafrost")&&(p*=et.permafrost.vars()[0]),!e.race.living_tool&&!e.race.tusk&&(p*=(e.tech.pickaxe&&e.tech.pickaxe>0?e.tech.pickaxe*.15:0)+1),e.tech.explosives&&e.tech.explosives>=2&&(p*=.95+e.tech.explosives*.15);let P=1,j=1;e.city.mine.on&&(P+=x.mine*.05,j+=1.05);let K=1;if(e.race.warlord&&e.portal.tunneler&&(K=1+(e.portal.tunneler.rank+3)/100*e.portal.tunneler.count),e.resource.Copper.display){let ae=.14285714285714285;e.tech.copper&&(ae*=1.2);let Z=p*ae*D("psychic_boost","Copper");e.city.geology.Copper&&(Z*=e.city.geology.Copper+1),e.city.biome==="volcanic"?Z*=ze.volcanic.vars()[1]:e.city.biome==="ashland"&&(Z*=ze.ashland.vars()[2]);let ee=P,J=j;f.p.Copper[Se("miner")]=Z+"v",Z>0&&(f.p.Copper[`\u1102${t("power")}`]=(ee-1)*100+"%",f.p.Copper[`\u1102${t("portal_tunneler_bd")}`]=(K-1)*100+"%",f.p.Copper[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%",e.race.discharge&&e.race.discharge>0&&x.mine>0&&(ee=(ee-1)*.5+1,J=(J-1)*.5+1,f.p.Copper[`\u1102${t("evo_challenge_discharge")}`]="-50%"));let ce=Z*Mt.mult*K*pe*G*i;if(e.city.mine.cpow=+(ce*(J-1)).toFixed(5),ce*=ee,H("Copper",ce*_),e.race.forager&&e.tech.dowsing){let ge=e.tech.dowsing>=2?5:1,xe=$e(e.civic.forager.workers,"forager");if(xe*=at(xe,"forager"),e.race.servants){let Te=e.race.servants.jobs.forager;Te*=xr(e.race.servants.jobs.forager,"forager"),xe+=Te}let ne=xe*ge*.025*D("psychic_boost","Copper");e.city.geology.Copper&&(ne*=e.city.geology.Copper+1),e.city.biome==="volcanic"?ne*=ze.volcanic.vars()[1]:e.city.biome==="ashland"&&(ne*=ze.ashland.vars()[2]),f.p.Copper[Se("forager")]=ne+"v",ne>0&&(f.p.Copper[`\u1102${t("quarantine")}+1`]=(G-1)*100+"%"),H("Copper",ne*pe*i*G*_)}}if(e.resource.Iron.display){let Z=p*.25*D("psychic_boost","Iron");e.race.iron_allergy&&(Z*=1-y.iron_allergy.vars()[0]/100);let ee=1+Vr*.1;e.city.geology.Iron&&(Z*=e.city.geology.Iron+1),e.city.biome==="volcanic"?Z*=ze.volcanic.vars()[2]:e.city.biome==="ashland"&&(Z*=ze.ashland.vars()[2]);let J=0,ce=At("spc_belt");W.iron_ship&&(J=W.iron_ship*D("iron_ship")*D("psychic_boost","Iron"),J*=ce);let ge=P,xe=P;f.p.Iron[Se("miner")]=Z+"v",Z>0&&(f.p.Iron[`\u1102${t("portal_tunneler_bd")}`]=(K-1)*100+"%",f.p.Iron[`\u1102${t("power")}`]=(ge-1)*100+"%",e.race.discharge&&e.race.discharge>0&&x.mine>0&&(ge=(ge-1)*.5+1,xe=(xe-1)*.5+1,f.p.Iron[`\u1102${t("evo_challenge_discharge")}`]="-50%"),f.p.Iron[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%");let ne=0,Te=0;if(e.tech.isolation&&e.race.lone_survivor){{let vt=$e(e.civic.pit_miner.workers,"pit_miner");vt*=at(vt,"miner");let Ft=1+(W.colony||0)*.5,lr=vt*D("psychic_boost","Iron");lr*=D("mining_pit","iron"),ne=lr*Ft,f.p.Iron[Se("pit_miner")]=lr+"v",lr>0&&(f.p.Iron[`\u1102${t("tau_home_colony")}`]=(Ft-1)*100+"%")}if(e.tauceti.hasOwnProperty("womling_mine")&&e.tauceti.hasOwnProperty("overseer")){let vt=e.tauceti.overseer.prod/100,Ft=e.tauceti.womling_mine.miners*D("womling_mine","iron")*D("psychic_boost","Iron");f.p.Iron[t("tau_red_womlings")]=Ft+"v",Te=Ft*vt,Ft>0&&(f.p.Iron[`\u1102${t("tau_red_womling_prod_label")}`]=-((1-vt)*100)+"%")}}f.p.Iron[Se("space_miner")]=J+"v",J>0&&(f.p.Iron[`\u1102${t("space_syndicate")}`]=-((1-ce)*100)+"%",f.p.Iron[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%",f.p.Iron[`\u1102${t("quarantine")}+1`]=(te-1)*100+"%"),e.race.gravity_well&&(J=ht(J)),e.race.gravity_well&&(f.p.Iron[`\u1102${t("evo_challenge_gravity_well")}+1`]=-((1-ht(1))*100)+"%");let st=Et.iron?Et.iron*ye:0,Pt=(Z*K*ge*G+J*te*k+st+ne+Te)*ee*Mt.mult;if(e.city.mine.ipow=+(Z*G*pe*i*(xe-1)).toFixed(5),Pt*=pe*i,Et.iron&&Et.iron>0&&(f.p.Iron[t("tau_roid_mining_ship")]=Et.iron+"v",ye>1&&(f.p.Iron[`\u1102${t("tau_red_womlings")}+0`]=(ye-1)*100+"%")),f.p.Iron[t("city_smelter")]=(ee-1)*100+"%",f.p.Iron[t("city_shrine")]=((Mt.mult-1)*100).toFixed(1)+"%",e.race.forager&&e.tech.dowsing){let vt=e.tech.dowsing>=2?2:1,Ft=$e(e.civic.forager.workers,"forager");if(Ft*=at(Ft,"forager"),e.race.servants){let Cs=e.race.servants.jobs.forager;Cs*=xr(e.race.servants.jobs.forager,"forager"),Ft+=Cs}let lr=Ft*vt*.035*D("psychic_boost","Iron");e.city.geology.Iron&&(lr*=e.city.geology.Iron+1),e.city.biome==="volcanic"?lr*=ze.volcanic.vars()[2]:e.city.biome==="ashland"&&(lr*=ze.ashland.vars()[2]),f.p.Iron[Se("forager")]=lr+"v",lr>0&&(f.p.Iron[`\u1102${t("quarantine")}+2`]=(G-1)*100+"%"),H("Iron",lr*pe*i*G*_)}if(f.p.Iron[t("hunger")]=(pe-1)*100+"%",H("Iron",Pt*_),e.tech.titanium&&e.tech.titanium>=2){let vt=qe($e(e.civic.miner.workers,"miner"))/4;W.iron_ship&&(vt+=W.iron_ship/2);let Ft=vt*Vr*.1;Pt=Ft*i,ka>0&&(Pt*=1+ka/50),e.city.geology.Titanium&&(Pt*=e.city.geology.Titanium+1),e.city.biome==="oceanic"&&(Pt*=ze.oceanic.vars()[0]),Pt*=Mt.mult*D("psychic_boost","Titanium");let lr=e.tech.titanium>=3?10:25;H("Titanium",Pt*_/lr),f.p.Titanium[t("resource_Iron_name")]=Ft/lr+"v"}}if(e.race.sappy){if(e.city.metal_refinery&&e.city.metal_refinery.count>0||e.race.cataclysm||e.race.orbit_decayed){let ae=0;e.race.cataclysm||e.race.orbit_decayed?e.tech.mars&&W.red_mine&&(ae=W.red_mine*$e(e.civic.colonist.workers,"colonist")*D("red_mine","aluminium")):ae=p*P*.088,e.city.geology.Aluminium&&(ae*=e.city.geology.Aluminium+1),ae*=D("psychic_boost","Aluminium");let Z=ae*Mt.mult*pe*i;e.tech.alumina>=2&&(ai+=x.metal_refinery*6),Z*=1+ai/100,f.p.Aluminium[`${e.race.cataclysm||e.race.orbit_decayed?Ze("mine"):Se("miner")}+2`]=ae+"v",(e.race.cataclysm||e.race.orbit_decayed)&&ae>0&&k>0&&(Z*=k,f.p.Aluminium[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%"),f.p.Aluminium[t("city_shrine")]=(Mt.mult-1)*100+"%",f.p.Aluminium[t("hunger")]=(pe-1)*100+"%",H("Aluminium",Z*_)}if(e.race.smoldering&&e.resource.Chrysotile.display){let ae=p/2*D("psychic_boost","Chrysotile"),Z=P;f.p.Chrysotile[Se("miner")]=ae+"v",ae>0&&(f.p.Chrysotile[`\u1102${t("power")}`]=(Z-1)*100+"%",e.race.discharge&&e.race.discharge>0&&x.mine>0&&(Z=(Z-1)*.5+1,f.p.Chrysotile[`\u1102${t("evo_challenge_discharge")}`]="-50%"));let ee=ae*Z;ee*=pe*i,f.p.Chrysotile[t("hunger")]=(pe-1)*100+"%",H("Chrysotile",ee*_)}}}{if(e.interstellar.mining_droid&>.alum>0){let p=gt.alum*2.75*D("psychic_boost","Aluminium"),q=p*Mt.mult*i*k;q*=1+ai/100,f.p.Aluminium[t("interstellar_mining_droid_title")]=p+"v",p>0&&(f.p.Aluminium[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%"),H("Aluminium",q*_)}if(e.resource.Aluminium.display&&e.space.titan_mine){let p=At("spc_titan"),q=x.ai_colonist?$e(e.civic.titan_colonist.workers,"titan_colonist")+N(x.ai_colonist):$e(e.civic.titan_colonist.workers,"titan_colonist"),P=D("titan_mine","aluminium")*W.titan_mine*q*D("psychic_boost","Aluminium"),j=P*Mt.mult*i*te*p*k;j*=1+ai/100,f.p.Aluminium[`${t("city_mine")}+0`]=+P.toFixed(3)+"v",P>0&&(f.p.Aluminium[`\u1102${t("space_syndicate")}`]=-((1-p)*100)+"%",f.p.Aluminium[`\u1102${t("space_red_ziggurat_title")}+2`]=(k-1)*100+"%",f.p.Aluminium[`\u1102${t("quarantine")}+2`]=(te-1)*100+"%"),H("Aluminium",j*_)}if(e.resource.Aluminium.display&&Et.aluminium&&Et.aluminium>0){let p=Et.aluminium*Mt.mult*i*ye;p*=1+ai/100,f.p.Aluminium[t("tau_roid_mining_ship")]=Et.aluminium+"v",ye>1&&(f.p.Aluminium[`\u1102${t("tau_red_womlings")}+0`]=(ye-1)*100+"%"),H("Aluminium",p*_)}ai>0&&(f.p.Aluminium[t("city_metal_refinery")]=ai+"%",f.p.Aluminium[`\u1102${t("quarantine")}+3`]=(G-1)*100+"%")}if(W.red_mine&&W.red_mine>0){let p=At("spc_red"),q=W.red_mine*$e(e.civic.colonist.workers,"colonist")*D("red_mine","copper").f;q*=D("psychic_boost","Copper"),f.p.Copper[t("space_red_mine_desc_bd",[X().red])]=q+"v",q>0&&(f.p.Copper[`\u1102${t("space_syndicate")}`]=-((1-p)*100)+"%",f.p.Copper[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%",f.p.Copper[`\u1102${t("quarantine")}+1`]=(te-1)*100+"%"),H("Copper",q*Mt.mult*_*i*te*pe*p*k);let P=W.red_mine*$e(e.civic.colonist.workers,"colonist")*pe*D("red_mine","titanium").f;P*=D("psychic_boost","Titanium"),f.p.Titanium[t("space_red_mine_desc_bd",[X().red])]=P+"v",P>0&&(f.p.Titanium[`\u1102${t("space_syndicate")}`]=-((1-p)*100)+"%",f.p.Titanium[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%",f.p.Titanium[`\u1102${t("quarantine")}+0`]=(te-1)*100+"%"),H("Titanium",P*Mt.mult*_*i*te*p*k)}if(Qa()&&(f.p.Copper[t("city_shrine")]=((Mt.mult-1)*100).toFixed(1)+"%",f.p.Titanium[t("city_shrine")]=((Mt.mult-1)*100).toFixed(1)+"%"),f.p.Copper[t("hunger")]=(pe-1)*100+"%",f.p.Uranium.hasOwnProperty(t("city_coal_ash"))&&(f.p.Uranium[t("city_coal_ash")]=f.p.Uranium[t("city_coal_ash")]+"v"),e.resource.Coal.display){let p=$e(e.race.warlord?e.civic.miner.workers:e.civic.coal_miner.workers,"coal_miner");p*=at(p,"miner"),e.race.tough&&(p*=1+y.tough.vars()[0]/100);let q=Pe("ogre");if(q>0&&(p*=1+y.tough.vars(1)[0]/100*q),e.race.resilient){let Z=1+y.resilient.vars()[0]*e.race.resilient/100;p*=Z}!e.race.living_tool&&!e.race.tusk&&(p*=(e.tech.pickaxe&&e.tech.pickaxe>0?e.tech.pickaxe*.12:0)+1),e.tech.explosives&&e.tech.explosives>=2&&(p*=.95+e.tech.explosives*.15),e.city.geology.Coal&&(p*=e.city.geology.Coal+1);let P=1,j=1;e.city.coal_mine.on&&(P+=x.coal_mine*.05,j+=.05);let K=1;e.race.warlord&&e.portal.tunneler&&(K=1+(e.portal.tunneler.rank+3)/100*e.portal.tunneler.count),p*=e.civic.coal_miner.impact*D("psychic_boost","Coal"),f.p.Coal[e.race.warlord?Se("miner"):Se("coal_miner")]=p+"v",p>0&&(f.p.Coal[`\u1102${t("power")}`]=(P-1)*100+"%",f.p.Coal[`\u1102${t("portal_tunneler_bd")}`]=(K-1)*100+"%",f.p.Coal[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%"),e.race.discharge&&e.race.discharge>0&&x.coal_mine>0&&(P=(P-1)*.5+1,j=(j-1)*.5+1,f.p.Coal[`\u1102${t("evo_challenge_discharge")}`]="-50%"),e.race.cataclysm&&W.iridium_mine&&(p=W.iridium_mine*D("iridium_mine","coal"),p*=D("psychic_boost","Coal"),f.p.Coal[t("space_moon_iridium_mine_title")]=p+"v",p>0&&(f.p.Coal[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%",f.p.Coal[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%"),P=1*k);let ae=p*K*pe*G*i;if(e.city.coal_mine.cpow=+(ae*(j-1)).toFixed(5),ae*=P,f.p.Coal[t("hunger")]=(pe-1)*100+"%",e.interstellar.mining_droid&>.coal>0){let Z=gt.coal*3.75*D("psychic_boost","Coal"),ee=Z*i*k;f.p.Coal[t("interstellar_mining_droid_title")]=Z+"v",Z>0&&(f.p.Coal[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%"),H("Coal",ee*_)}if(H("Coal",ae*_),e.resource.Uranium.display){let Z=ae/(e.race.cataclysm?48:115)*D("psychic_boost","Uranium");e.city.coal_mine.upow=+(e.city.coal_mine.cpow/(e.race.cataclysm?48:115)).toFixed(5),e.city.geology.Uranium&&(Z*=e.city.geology.Uranium+1),f.p.Uranium[e.race.cataclysm?t("space_moon_iridium_mine_title"):e.race.warlord?Se("miner"):Se("coal_miner")]=Z/i+"v";let ee=Z*K;ee>0&&(f.p.Uranium[`\u1102${t("portal_tunneler_bd")}`]=(K-1)*100+"%"),H("Uranium",ee*_)}}if(e.race.warlord&&e.portal.tunneler&&e.portal.tunneler.count>0){let p=$e(e.civic.miner.workers,"miner");p*=at(p,"miner"),e.race.tough&&(p*=1+y.tough.vars()[0]/100);let q=Pe("ogre");if(q>0&&(p*=1+y.tough.vars(1)[0]/100*q),e.race.resilient){let j=1+y.resilient.vars()[0]*e.race.resilient/100;p*=j}!e.race.living_tool&&!e.race.tusk&&(p*=(e.tech.pickaxe&&e.tech.pickaxe>0?e.tech.pickaxe*.12:0)+1),e.tech.explosives&&e.tech.explosives>=2&&(p*=.95+e.tech.explosives*.15);let P=1;e.race.warlord&&e.portal.tunneler&&(P=1+(e.portal.tunneler.rank+3)/100*e.portal.tunneler.count),["Neutronium","Adamantite","Bolognium","Orichalcum"].forEach(function(j){let K=p;switch(K*=D("psychic_boost",j),j){case"Neutronium":K/=10;break;case"Adamantite":K/=5;break;case"Bolognium":K/=8;break;case"Orichalcum":K/=6;break}f.p[j][Se("miner")]=K+"v",K>0&&(f.p[j][`\u1102${t("portal_tunneler_bd")}`]=(P-1)*100+"%",f.p[j][t("hunger")]=(pe-1)*100+"%");let ae=K*P;ae*=pe*G*i,H(j,ae*_)})}if(e.interstellar.mining_droid&>.uran>0){let p=gt.uran*.12*D("psychic_boost","Uranium"),q=p*i*k;f.p.Uranium[t("interstellar_mining_droid_title")]=p+"v",p>0&&(f.p.Uranium[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%"),H("Uranium",q*_)}if(e.space.uranium_mine&&x.uranium_mine){let p=At("spc_kuiper"),q=x.uranium_mine*D("uranium_mine")*D("psychic_boost","Uranium"),P=q*i*te*p*k;f.p.Uranium[t("space_kuiper_mine",[e.resource.Uranium.name])]=q+"v",q>0&&(f.p.Uranium[`\u1102${t("space_syndicate")}`]=-((1-p)*100)+"%",f.p.Uranium[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%",f.p.Uranium[`\u1102${t("quarantine")}+0`]=(te-1)*100+"%"),H("Uranium",P*_)}if(e.resource.Oil.display){let p=0;if(e.tauceti.whaling_station&&e.tauceti.whaling_ship){if(e.tauceti.whaling_station.max=e.tauceti.whaling_station.count*750,e.tauceti.whaling_station.fill>0){let ne=x.whaling_station*D("whaling_station");ne>e.tauceti.whaling_station.fill&&(ne=e.tauceti.whaling_station.fill),e.tauceti.whaling_station.fill-=ne*_,p=ne*D("whaling_ship_oil")*D("psychic_boost","Oil")}let xe=W.whaling_ship*D("whaling_ship");e.tauceti.whaling_station.fill+=xe*_,e.tauceti.whaling_station.fill>e.tauceti.whaling_station.max&&(e.tauceti.whaling_station.fill=e.tauceti.whaling_station.max)}let q=At("spc_gas_moon"),P=e.race.warlord?e.portal.pumpjack.count:e.city.oil_well.count,j=x.oil_extractor,K=e.city.oil_well?D("oil_well"):0,ae=G,Z=e.space.oil_extractor?D("oil_extractor"):0,ee=te*q*k;if(e.race.blubber){let xe=y.blubber.vars()[0]*_/5,ne=function(Te){return Te>0&&(e.city.oil_well.dead=Z*ee?(P=ne(P),j=ne(j)):(j=ne(j),P=ne(P))}let J=K*P,ce=Z*j;ce*=D("psychic_boost","Oil"),J*=D("psychic_boost","Oil");let ge=J*ae+ce*ee+p*ye;ge*=pe*i,e.race.gravity_well&&(ge=ht(ge)),e.space.oil_extractor&&(e.space.oil_extractor.lpmod=D("oil_extractor")*te*q*k),f.p.Oil[e.race.warlord?t("portal_pumpjack_title"):t("city_oil_well")]=J+"v",J>0&&(f.p.Oil[`\u1102${t("quarantine")}+0`]=(G-1)*100+"%"),f.p.Oil[t("space_gas_moon_oil_extractor_title")]=ce+"v",ce>0&&(f.p.Oil[`\u1102${t("space_syndicate")}`]=-((1-q)*100)+"%",f.p.Oil[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%",f.p.Oil[`\u1102${t("quarantine")}+1`]=(te-1)*100+"%"),f.p.Oil[t("tau_roid_whaling_ship")]=p+"v",ye>1&&(f.p.Oil[`\u1102${t("tau_red_womlings")}+0`]=(ye-1)*100+"%"),e.race.gravity_well&&(f.p.Oil[`${t("evo_challenge_gravity_well")}+0`]=-((1-ht(1))*100)+"%"),f.p.Oil[t("hunger")]=(pe-1)*100+"%",H("Oil",ge*_)}let Kn=1+zr;if(W.iridium_mine||e.race.warlord){let p=0;e.race.warlord?(p=$e(e.civic.miner.workers,"miner"),p*=at(p,"miner"),p*=.45):p=W.iridium_mine*D("iridium_mine","iridium").f;let q=1;e.race.warlord&&e.portal.tunneler&&(q=1+(e.portal.tunneler.rank+3)/100*e.portal.tunneler.count),p*=D("psychic_boost","Iridium");let P=At("spc_moon"),j=p*q*pe*Mt.mult*i*P*te*Kn*k;e.race.gravity_well&&(j=ht(j)),f.p.Iridium[e.race.warlord?Se("miner"):t("space_moon_iridium_mine_title")]=p+"v",p>0&&(f.p.Iridium[`\u1102${t("city_smelter")}+0`]=zr*100+"%",f.p.Iridium[`\u1102${t("portal_tunneler_bd")}+0`]=(q-1)*100+"%",f.p.Iridium[`\u1102${t("space_syndicate")}+0`]=-((1-P)*100)+"%",f.p.Iridium[`\u1102${t("space_red_ziggurat_title")}+0`]=(k-1)*100+"%",f.p.Iridium[`\u1102${t("quarantine")}+0`]=(te-1)*100+"%",e.race.gravity_well&&(f.p.Iridium[`\u1102${t("evo_challenge_gravity_well")}+0`]=-((1-ht(1))*100)+"%")),H("Iridium",j*_)}if(W.iridium_ship){let p=W.iridium_ship*D("iridium_ship");p*=D("psychic_boost","Iridium");let q=At("spc_belt"),P=p*pe*Mt.mult*i*q*te*Kn*k;e.race.gravity_well&&(P=ht(P)),f.p.Iridium[Se("space_miner")]=p+"v",p>0&&(f.p.Iridium[`\u1102${t("city_smelter")}+1`]=zr*100+"%",f.p.Iridium[`\u1102${t("space_syndicate")}+1`]=-((1-q)*100)+"%",f.p.Iridium[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%",f.p.Iridium[`\u1102${t("quarantine")}+1`]=(te-1)*100+"%",e.race.gravity_well&&(f.p.Iridium[`\u1102${t("evo_challenge_gravity_well")}+1`]=-((1-ht(1))*100)+"%")),H("Iridium",P*_)}if(x.s_gate&&e.resource.Adamantite.display&&e.galaxy.armed_miner&&Ke.armed_miner>0){let p=Ke.armed_miner*.65*D("psychic_boost","Iridium"),q=1+(Ke.ore_processor??0)*.1,P=qt("gxy_alien2"),j=p*i*P*q*pe*Mt.mult*Kn*k;e.race.gravity_well&&(j=ht(j)),f.p.Iridium[t("galaxy_armed_miner_bd")]=p+"v",p>0&&(f.p.Iridium[`\u1102${t("galaxy_ore_processor")}`]=-((1-q)*100)+"%",f.p.Iridium[`\u1102${t("city_smelter")}+2`]=zr*100+"%",f.p.Iridium[`\u1102${t("galaxy_piracy")}`]=-((1-P)*100)+"%",f.p.Iridium[`\u1102${t("space_red_ziggurat_title")}+2`]=(k-1)*100+"%",e.race.gravity_well&&(f.p.Iridium[`\u1102${t("evo_challenge_gravity_well")}+2`]=-((1-ht(1))*100)+"%")),H("Iridium",j*_)}if(e.resource.Iridium.display&&Et.iridium&&Et.iridium>0){let p=Et.iridium*Mt.mult*i*Kn*pe*ye;e.race.gravity_well&&(p=ht(p)),f.p.Iridium[t("tau_roid_mining_ship")]=Et.iridium+"v",f.p.Iridium[`\u1102${t("city_smelter")}+3`]=zr*100+"%",ye>1&&(f.p.Iridium[`\u1102${t("tau_red_womlings")}+0`]=(ye-1)*100+"%"),e.race.gravity_well&&(f.p.Iridium[`\u1102${t("evo_challenge_gravity_well")}+3`]=-((1-ht(1))*100)+"%"),H("Iridium",p*_)}if(e.space.moon_base&&W.helium_mine||e.race.warlord){let p=(e.race.warlord?e.portal.pumpjack.count:W.helium_mine)*D("helium_mine").f;p*=D("psychic_boost","Helium_3");let q=At("spc_moon"),P=p*pe*i*q*te*k;e.race.gravity_well&&(P=ht(P)),f.p.Helium_3[e.race.warlord?t("portal_pumpjack_title"):t("space_moon_helium_mine_title")]=p+"v",p>0&&(f.p.Helium_3[`\u1102${t("space_syndicate")}+0`]=-((1-q)*100)+"%",f.p.Helium_3[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%",f.p.Helium_3[`\u1102${t("quarantine")}+0`]=(te-1)*100+"%",e.race.gravity_well&&(f.p.Helium_3[`\u1102${t("evo_challenge_gravity_well")}+0`]=-((1-ht(1))*100)+"%")),H("Helium_3",P*_)}if(e.space.gas_mining&&x.gas_mining){let p=x.gas_mining*D("gas_mining");p*=D("psychic_boost","Helium_3");let q=At("spc_gas"),P=p*pe*i*q*te*k;e.race.gravity_well&&(P=ht(P)),f.p.Helium_3[t("space_gas_mining_title")]=p+"v",p>0&&(f.p.Helium_3[`\u1102${t("space_syndicate")}+1`]=-((1-q)*100)+"%",f.p.Helium_3[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%",f.p.Helium_3[`\u1102${t("quarantine")}+1`]=(te-1)*100+"%",e.race.gravity_well&&(f.p.Helium_3[`\u1102${t("evo_challenge_gravity_well")}+1`]=-((1-ht(1))*100)+"%")),H("Helium_3",P*_)}if(x.refueling_station){let p=x.refueling_station*D("refueling_station");p*=D("psychic_boost","Helium_3");let q=p*pe*i*ye;f.p.Helium_3[t("tau_gas_refueling_station_title")]=p+"v",ye>1&&(f.p.Helium_3[`\u1102${t("tau_red_womlings")}+0`]=(ye-1)*100+"%"),H("Helium_3",q*_)}if(e.interstellar.harvester&&yt.harvester){let p=yt.harvester*D("harvester","helium");p*=D("psychic_boost","Helium_3");let q=p*pe*i*k;if(f.p.Helium_3[t("interstellar_harvester_title")]=p+"v",p>0&&(f.p.Helium_3[`\u1102${t("space_red_ziggurat_title")}+2`]=(k-1)*100+"%",e.race.discharge&&e.race.discharge>0&&(q*=.5,f.p.Helium_3[`\u1102${t("evo_challenge_discharge")}`]="-50%")),H("Helium_3",q*_),e.tech.ram_scoop){let P=yt.harvester*D("harvester","deuterium");P*=D("psychic_boost","Deuterium");let j=P*pe*i*k;f.p.Deuterium[t("interstellar_harvester_title")]=P+"v",P>0&&(f.p.Deuterium[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%"),H("Deuterium",j*_)}}if(x.s_gate&&e.galaxy.raider&&Ke.raider>0){let p=Ke.raider*.65*D("psychic_boost","Deuterium"),q=qt("gxy_chthonian"),P=p*i*q*pe*k;f.p.Deuterium[t("galaxy_raider")]=p+"v",p>0&&(f.p.Deuterium[`\u1102${t("galaxy_piracy")}`]=-((1-q)*100)+"%",f.p.Deuterium[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%"),H("Deuterium",P*_)}if(f.p.Helium_3[t("hunger")]=(pe-1)*100+"%",f.p.Deuterium[t("hunger")]=(pe-1)*100+"%",x.outpost){let p=D("outpost"),q=D("psychic_boost","Neutronium");f.p.Neutronium[t("space_gas_moon_outpost_bd")]=p.b*q*x.outpost+"v",e.tech.drone&&(f.p.Neutronium[`\u1102${t("tech_worker_drone")}`]=p.d*100+"%");let P=At("spc_gas_moon"),j=x.outpost*p.n*q*pe*i*te*P*k;e.space.outpost.lpmod=p.n*q*pe*i*te*P*k,e.race.gravity_well&&(j=ht(j)),p.b>0&&(f.p.Neutronium[`\u1102${t("space_syndicate")}+0`]=-((1-P)*100)+"%",f.p.Neutronium[`\u1102${t("space_red_ziggurat_title")}+0`]=(k-1)*100+"%",f.p.Neutronium[`\u1102${t("quarantine")}+0`]=(te-1)*100+"%",e.race.discharge&&e.race.discharge>0&&(j*=.5,e.space.outpost.lpmod*=.5,f.p.Neutronium[`\u1102${t("evo_challenge_discharge")}+0`]="-50%"),e.race.gravity_well&&(f.p.Neutronium[`\u1102${t("evo_challenge_gravity_well")}+0`]=-((1-ht(1))*100)+"%")),H("Neutronium",j*_)}if(x.neutron_miner){let p=x.neutron_miner*D("neutron_miner")*D("psychic_boost","Neutronium"),q=p*pe*i*k;f.p.Neutronium[t("interstellar_neutron_miner_bd")]=p+"v",e.interstellar.neutron_miner.lpmod=D("neutron_miner")*pe*i*k,p>0&&(f.p.Neutronium[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%",e.race.discharge&&e.race.discharge>0&&(q*=.5,e.interstellar.neutron_miner.lpmod*=.5,f.p.Neutronium[`\u1102${t("evo_challenge_discharge")}+1`]="-50%")),H("Neutronium",q*_)}if(x.s_gate&&e.galaxy.raider&&Ke.raider>0){let p=Ke.raider*.8*D("psychic_boost","Neutronium"),q=qt("gxy_chthonian"),P=p*i*q*pe*k;f.p.Neutronium[t("galaxy_raider")]=p+"v",p>0&&(f.p.Neutronium[`\u1102${t("galaxy_piracy")}`]=-((1-q)*100)+"%",f.p.Neutronium[`\u1102${t("space_red_ziggurat_title")}+2`]=(k-1)*100+"%"),H("Neutronium",P*_)}if(e.space.neutronium_mine&&x.neutronium_mine){let p=At("spc_kuiper"),q=x.neutronium_mine*D("neutronium_mine")*D("psychic_boost","Neutronium"),P=q*i*te*p*k;f.p.Neutronium[t("space_kuiper_mine",[e.resource.Neutronium.name])]=q+"v",q>0&&(f.p.Neutronium[`\u1102${t("space_syndicate")}+1`]=-((1-p)*100)+"%",f.p.Neutronium[`\u1102${t("space_red_ziggurat_title")}+3`]=(k-1)*100+"%",f.p.Neutronium[`\u1102${t("quarantine")}+1`]=(te-1)*100+"%"),H("Neutronium",P*_)}if(e.resource.Neutronium.display&&Et.neutronium&&Et.neutronium>0){let p=Et.neutronium*i*ye;f.p.Neutronium[t("tau_roid_mining_ship")]=Et.neutronium+"v",ye>1&&(f.p.Neutronium[`\u1102${t("tau_red_womlings")}+0`]=(ye-1)*100+"%"),H("Neutronium",p*_)}if(W.elerium_ship){let p=W.elerium_ship*D("elerium_ship")*D("psychic_boost","Elerium"),q=At("spc_belt"),P=p*pe*i*te*q*k;e.race.gravity_well&&(P=ht(P)),f.p.Elerium[Se("space_miner")]=p+"v",p>0&&(f.p.Elerium[`\u1102${t("space_syndicate")}+0`]=-((1-q)*100)+"%",f.p.Elerium[`\u1102${t("space_red_ziggurat_title")}+0`]=(k-1)*100+"%",f.p.Elerium[`\u1102${t("quarantine")}+0`]=(te-1)*100+"%",e.race.discharge&&e.race.discharge>0&&(P*=.75,f.p.Elerium[`\u1102${t("evo_challenge_discharge")}`]="-25%"),e.race.gravity_well&&(f.p.Elerium[`\u1102${t("evo_challenge_gravity_well")}+1`]=-((1-ht(1))*100)+"%")),H("Elerium",P*_)}if(yt.elerium_prospector){let p=yt.elerium_prospector*D("elerium_prospector")*D("psychic_boost","Elerium"),q=p*pe*i*k;f.p.Elerium[t("interstellar_elerium_prospector_bd")]=p+"v",p>0&&(f.p.Elerium[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%"),H("Elerium",q*_)}if(e.space.elerium_mine&&x.elerium_mine){let p=At("spc_kuiper"),q=x.elerium_mine*D("elerium_mine")*D("psychic_boost","Elerium"),P=q*i*te*p*pe*k;f.p.Elerium[t("space_kuiper_mine",[e.resource.Elerium.name])]=q+"v",q>0&&(f.p.Elerium[`\u1102${t("space_syndicate")}+1`]=-((1-p)*100)+"%",f.p.Elerium[`\u1102${t("space_red_ziggurat_title")}+2`]=(k-1)*100+"%",f.p.Elerium[`\u1102${t("quarantine")}+1`]=(te-1)*100+"%"),H("Elerium",P*_)}if(e.resource.Elerium.display&&Et.elerium&&Et.elerium>0){let p=Et.elerium*i*ye;f.p.Elerium[t("tau_roid_mining_ship")]=Et.elerium+"v",ye>1&&(f.p.Elerium[`\u1102${t("tau_red_womlings")}+0`]=(ye-1)*100+"%"),H("Elerium",p*_)}if(f.p.Elerium[t("hunger")]=(pe-1)*100+"%",e.resource.Adamantite.display&&e.interstellar.mining_droid&>.adam>0){let p=gt.adam*.075*D("psychic_boost","Adamantite"),q=p*Mt.mult*i*k;if(f.p.Adamantite[t("interstellar_mining_droid_title")]=p+"v",p>0){if(e.interstellar.processing&&yt.processing){let P=.12;e.tech.ai_core&&e.tech.ai_core>=2&&x.citadel>0&&(P+=x.citadel*.02);let j=yt.processing*P;f.p.Adamantite[`\u1102${t("interstellar_processing_title")}`]=j*100+"%",e.race.discharge&&e.race.discharge>0&&(j*=.5,f.p.Adamantite[`\u1102${t("evo_challenge_discharge")}`]="-50%"),q*=1+j}f.p.Adamantite[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%"}H("Adamantite",q*_)}if(x.s_gate&&e.resource.Adamantite.display&&e.galaxy.armed_miner&&Ke.armed_miner>0){let p=Ke.armed_miner*.23*D("psychic_boost","Adamantite"),q=1+(Ke.ore_processor??0)*.1,P=qt("gxy_alien2"),j=p*i*P*q*Mt.mult*k;f.p.Adamantite[t("galaxy_armed_miner_bd")]=p+"v",p>0&&(f.p.Adamantite[`\u1102${t("galaxy_ore_processor")}`]=-((1-q)*100)+"%",f.p.Adamantite[`\u1102${t("galaxy_piracy")}`]=-((1-P)*100)+"%",f.p.Adamantite[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%"),H("Adamantite",j*_)}if(e.resource.Adamantite.display&&e.space.titan_mine){let p=At("spc_titan"),q=x.ai_colonist?$e(e.civic.titan_colonist.workers,"titan_colonist")+N(x.ai_colonist):$e(e.civic.titan_colonist.workers,"titan_colonist"),P=D("titan_mine","adamantite")*W.titan_mine*q*D("psychic_boost","Adamantite"),j=P*Mt.mult*i*te*p*k;f.p.Adamantite[t("city_mine")]=P+"v",P>0&&(f.p.Adamantite[`\u1102${t("space_syndicate")}`]=-((1-p)*100)+"%",f.p.Adamantite[`\u1102${t("space_red_ziggurat_title")}+2`]=(k-1)*100+"%",f.p.Adamantite[`\u1102${t("quarantine")}+0`]=(te-1)*100+"%"),H("Adamantite",j*_)}if(e.resource.Infernite.display){let p=e.race.warlord?e.tech?.hellspawn>=2&&e.portal?.tunneler?.count>=1?e.civic.miner.workers:0:e.civic.hell_surveyor.workers;if(p>0){let q=e.tech.infernite>=3?.015:.01;e.race.warlord&&(q=.0075);let P=$e(qe(p),"hell_surveyor")*q*D("psychic_boost","Infernite"),j=1;if(e.tech.infernite>=2&&x.sensor_drone){let J=e.tech.infernite>=4?e.tech.infernite>=6?.5:.2:.1;j=1+x.sensor_drone*J}let K=_e("runner",1),ae=1;K&&(ae=1+K/100);let Z=1;e.race.warlord&&e.portal.tunneler&&(Z=1+(e.portal.tunneler.rank+3)/100*e.portal.tunneler.count);let ee=P*Z*j*ae*i;f.p.Infernite[e.race.warlord?Se("miner"):Se("hell_surveyor")]=P+"v",f.p.Infernite[`\u1102${t("portal_sensor_drone_title")}`]=(j-1)*100+"%",f.p.Infernite[`\u1102${t("portal_tunneler_bd")}`]=(Z-1)*100+"%",H("Infernite",ee*_)}if(x.infernite_mine){let q=D("infernite_mine"),P=x.infernite_mine*q*D("psychic_boost","Infernite"),j=P*i;e.portal.infernite_mine.lpmod=q*i,f.p.Infernite[t("city_mine")]=P+"v",H("Infernite",j*_)}}if(x.s_gate&&e.resource.Bolognium.display&&e.galaxy.bolognium_ship&&Ke.bolognium_ship>0){let p=Ke.bolognium_ship*D("bolognium_ship")*D("psychic_boost","Bolognium"),q=qt("gxy_gateway"),P=p*i*q*k;f.p.Bolognium[t("galaxy_bolognium_ship")]=p+"v",p>0&&(f.p.Bolognium[`\u1102${t("galaxy_piracy")}+0`]=-((1-q)*100)+"%",f.p.Bolognium[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%",e.race.discharge&&e.race.discharge>0&&(P*=.5,f.p.Bolognium[`\u1102${t("evo_challenge_discharge")}+0`]="-50%")),H("Bolognium",P*_)}if(e.eden.asphodel_harvester&&W.asphodel_harvester){let p=W.asphodel_harvester*D("asphodel_harvester","powder");p*=D("psychic_boost","Asphodel_Powder");let q=p*pe*i;if(f.p.Asphodel_Powder[t("eden_asphodel_harvester_title")]=p+"v",e.tech.asphodel>=5){let P=_s();q*=P,P<=1?f.p.Asphodel_Powder[`\u1102${t("eden_asphodel_hostility")}+0`]=-((1-P)*100)+"%":f.p.Asphodel_Powder[`\u1102${t("eden_mech_station_overkill")}+0`]=(P-1)*100+"%"}H("Asphodel_Powder",q*_)}if(e.resource.Elysanite.display&&e.civic.elysium_miner.display){let p=$e(e.civic.elysium_miner.workers,"elysium_miner");p*=at(p,"miner")*.36,!e.race.living_tool&&!e.race.tusk&&(p*=(e.tech.pickaxe&&e.tech.pickaxe>0?e.tech.pickaxe*.15:0)+1),e.tech.explosives&&e.tech.explosives>=2&&(p*=.95+e.tech.explosives*.15),e.race.tough&&(p*=1+y.tough.vars()[0]/100);let q=Pe("ogre");q>0&&(p*=1+y.tough.vars(1)[0]/100*q),p*=D("psychic_boost","Elysanite"),f.p.Elysanite[Se("elysium_miner")]=p+"v";let P=p;P*=pe*i,H("Elysanite",P*_)}if(e.civic.pit_miner.display)if(Ir()){let p=$e(e.civic.pit_miner.workers,"pit_miner");p*=at(p,"miner");let q=1+(W.colony||0)*.5;{let P=p*D("psychic_boost","Bolognium");P*=D("mining_pit","bolognium");let j=P*i*q;f.p.Bolognium[Se("pit_miner")]=P+"v",P>0&&(f.p.Bolognium[`\u1102${t("tau_home_colony")}`]=(q-1)*100+"%"),H("Bolognium",j*_)}{let P=p*D("psychic_boost","Stone");P*=D("mining_pit","stone");let j=P*i*q;f.p.Stone[Se("pit_miner")]=P+"v",P>0&&(f.p.Stone[`\u1102${t("tau_home_colony")}`]=(q-1)*100+"%"),H("Stone",j*_)}if(e.race.smoldering){let P=p*D("psychic_boost","Chrysotile");P*=D("mining_pit","chrysotile");let j=P*i*q*pe;f.p.Chrysotile[Se("pit_miner")]=P+"v",P>0&&(f.p.Chrysotile[`\u1102${t("tau_home_colony")}`]=(q-1)*100+"%",f.p.Chrysotile[t("hunger")]=(pe-1)*100+"%"),H("Chrysotile",j*_)}{let P=p*D("psychic_boost","Adamantite");P*=D("mining_pit","adamantite");let j=P*Mt.mult*i*q;f.p.Adamantite[Se("pit_miner")]=P+"v",P>0&&(f.p.Adamantite[`\u1102${t("tau_home_colony")}`]=(q-1)*100+"%"),H("Adamantite",j*_)}if(e.tech.isolation){{let P=p*D("psychic_boost","Copper");P*=D("mining_pit","copper");let j=P*Mt.mult*i*q;f.p.Copper[Se("pit_miner")]=P+"v",P>0&&(f.p.Copper[`\u1102${t("tau_home_colony")}`]=(q-1)*100+"%"),H("Copper",j*_)}{let P=p*D("psychic_boost","Coal");P*=D("mining_pit","coal");let j=P*i*q;f.p.Coal[Se("pit_miner")]=P+"v",P>0&&(f.p.Coal[`\u1102${t("tau_home_colony")}`]=(q-1)*100+"%"),H("Coal",j*_)}if(e.race.lone_survivor){let P=p*D("psychic_boost","Aluminium");P*=D("mining_pit","aluminium");let j=P*Mt.mult*i*q;f.p.Aluminium[Se("pit_miner")]=P+"v",P>0&&(f.p.Aluminium[`\u1102${t("tau_home_colony")}`]=(q-1)*100+"%"),H("Aluminium",j*_)}}}else{let p={},q=$e(e.civic.pit_miner.workers,"pit_miner");q*=at(q,"miner"),q*=D("mining_pit","materials");let P=1+(W.colony||0)*.5,j=q*i*P;p[Se("pit_miner")]=q+"v",q>0&&(p[`\u1102${t("tau_home_colony")}`]=(P-1)*100+"%"),f.p.Materials=p,H("Materials",j*_)}if(e.tauceti.tau_farm&&x.tau_farm){let p=1+(W.colony||0)*.5;if(!e.race.kindling_kindred&&!e.race.smoldering){let q=D("tau_farm","lumber")*x.tau_farm*D("psychic_boost","Lumber"),P=q*i*p;f.p.Lumber[t("tau_home_tau_farm")]=q+"v",q>0&&(f.p.Lumber[`\u1102${t("tau_home_colony")}`]=(p-1)*100+"%"),H("Lumber",P*_)}}if(Qa()&&(f.p.Adamantite[t("city_shrine")]=((Mt.mult-1)*100).toFixed(1)+"%"),x.s_gate&&e.resource.Bolognium.display&&e.galaxy.armed_miner&&Ke.armed_miner>0){let p=Ke.armed_miner*.032*D("psychic_boost","Bolognium"),q=1+(Ke.ore_processor??0)*.1,P=qt("gxy_alien2"),j=p*i*P*q*k;f.p.Bolognium[t("galaxy_armed_miner_bd")]=p+"v",p>0&&(f.p.Bolognium[`\u1102${t("galaxy_ore_processor")}`]=-((1-q)*100)+"%",f.p.Bolognium[`\u1102${t("galaxy_piracy")}+1`]=-((1-P)*100)+"%",f.p.Bolognium[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%",e.race.discharge&&e.race.discharge>0&&(j*=.5,f.p.Bolognium[`\u1102${t("evo_challenge_discharge")}+1`]="-50%")),H("Bolognium",j*_)}if(x.s_gate&&e.resource.Orichalcum.display&&e.galaxy.excavator&&x.excavator>0){let p=x.excavator*D("excavator")*D("psychic_boost","Orichalcum"),q=qt("gxy_chthonian"),P=p*i*q*k;e.galaxy.excavator.lpmod=D("excavator")*i*q*k,f.p.Orichalcum[t("galaxy_excavator")]=p+"v",p>0&&(f.p.Orichalcum[`\u1102${t("galaxy_piracy")}`]=-((1-q)*100)+"%",f.p.Orichalcum[`\u1102${t("space_red_ziggurat_title")}`]=(k-1)*100+"%",e.race.discharge&&e.race.discharge>0&&(P*=.5,e.galaxy.excavator.lpmod*=.5,f.p.Orichalcum[`\u1102${t("evo_challenge_discharge")}`]="-50%")),H("Orichalcum",P*_)}if(e.space.orichalcum_mine&&x.orichalcum_mine){let p=At("spc_kuiper"),q=x.orichalcum_mine*D("orichalcum_mine")*D("psychic_boost","Orichalcum"),P=q*i*te*p*k;f.p.Orichalcum[t("space_kuiper_mine",[e.resource.Orichalcum.name])]=q+"v",q>0&&(f.p.Orichalcum[`\u1102${t("space_syndicate")}`]=-((1-p)*100)+"%",f.p.Orichalcum[`\u1102${t("space_red_ziggurat_title")}+1`]=(k-1)*100+"%",f.p.Orichalcum[`\u1102${t("quarantine")}+0`]=(te-1)*100+"%"),H("Orichalcum",P*_)}if(e.resource.Orichalcum.display&&Et.orichalcum&&Et.orichalcum>0){let p=Et.orichalcum*i*ye;f.p.Orichalcum[t("tau_roid_mining_ship")]=Et.orichalcum+"v",ye>1&&(f.p.Orichalcum[`\u1102${t("tau_red_womlings")}+0`]=(ye-1)*100+"%"),H("Orichalcum",p*_)}if(e.race.truepath&&e.tech.tau_red&&e.tech.tau_red>=5&&e.tauceti.womling_mine&&e.tauceti.overseer){let p=e.tauceti.womling_mine.miners*D("womling_mine","unobtainium")*D("psychic_boost","Unobtainium"),q=e.tauceti.overseer.prod/100,P=p*q*i;if(f.p.Unobtainium[t("tau_red_womlings")]=p+"v",p>0&&(f.p.Unobtainium[`\u1102${t("tau_red_womling_prod_label")}`]=-((1-q)*100)+"%"),H("Unobtainium",P*_),e.tech.isolation){let j=e.tauceti.womling_mine.miners*D("womling_mine","uranium")*D("psychic_boost","Uranium");f.p.Uranium[t("tau_red_womlings")]=j+"v";let K=j*q*i;j>0&&(f.p.Uranium[`\u1102${t("tau_red_womling_prod_label")}`]=-((1-q)*100)+"%"),H("Uranium",K*_);let ae=e.tauceti.womling_mine.miners*D("womling_mine","titanium")*D("psychic_boost","Titanium");f.p.Titanium[t("tau_red_womlings")]=ae+"v";let Z=ae*q*Mt.mult*i;if(ae>0&&(f.p.Titanium[`\u1102${t("tau_red_womling_prod_label")}`]=-((1-q)*100)+"%"),H("Titanium",Z*_),e.race.lone_survivor){let ee=e.tauceti.womling_mine.miners*D("womling_mine","copper")*D("psychic_boost","Copper");f.p.Copper[t("tau_red_womlings")]=ee+"v";let J=ee*q*Mt.mult*i;J>0&&(f.p.Copper[`\u1102${t("tau_red_womling_prod_label")}`]=-((1-q)*100)+"%"),H("Copper",J*_);let ce=e.tauceti.womling_mine.miners*D("womling_mine","aluminium")*D("psychic_boost","Aluminium");f.p.Aluminium[t("tau_red_womlings")]=ce+"v";let ge=ce*q*Mt.mult*i;ce>0&&(f.p.Aluminium[`\u1102${t("tau_red_womling_prod_label")}`]=-((1-q)*100)+"%"),H("Aluminium",ge*_);let xe=e.tauceti.womling_mine.miners*D("womling_mine","iridium")*D("psychic_boost","Iridium");f.p.Iridium[t("tau_red_womlings")]=xe+"v";let ne=xe*q*pe*Mt.mult*i;xe>0&&(f.p.Iridium[`\u1102${t("tau_red_womling_prod_label")}`]=-((1-q)*100)+"%"),H("Iridium",ne*_);let Te=e.tauceti.womling_mine.miners*D("womling_mine","neutronium")*D("psychic_boost","Neutronium");f.p.Neutronium[t("tau_red_womlings")]=Te+"v";let st=Te*q*pe*i;Te>0&&(f.p.Neutronium[`\u1102${t("tau_red_womling_prod_label")}`]=-((1-q)*100)+"%"),H("Neutronium",st*_)}}}f.p.Neutronium[t("hunger")]=(pe-1)*100+"%",Qa()&&(f.p.Iridium[t("city_shrine")]=((Mt.mult-1)*100).toFixed(1)+"%"),f.p.Iridium[t("hunger")]=(pe-1)*100+"%";let Ma=Ps?Ps*i*pe:0;if(Ps&&e.race.discharge&&e.race.discharge>0&&(Ma*=.5),e.tech.currency>=1){let p=e.resource[e.race.species].amount+e.civic.garrison.workers-e.civic.unemployed.workers,q=p;if(e.race.high_pop&&(q=qe(q)),q*=e.race.truepath?.2:.4,e.race.greedy&&(q*=1-y.greedy.vars()[0]/100),e.tech.isolation&&(q*=15),q*=D("psychic_cash"),C&&e.tech.banking&&e.tech.banking>=2){let ee=+$e(e.civic.banker.impact,"banker");e.tech.banking>=10&&(ee+=.02*e.tech.stock_exchange),e.race.truthful&&(ee*=1-y.truthful.vars()[0]/100),e.civic.govern.type==="republic"&&(ee*=1+je.republic()[0]/100),e.race.high_pop&&(ee=qe(ee)),q*=1+e.civic.banker.workers*ee}let P=0;if(_e("extravagant",0)&&e.city.apartment){let ee=q/p,J=x.apartment*d.city.apartment.citizens();J=Math.min(p,J),P=J*ee*(Wi().max/20),q-=J*ee}q*=e.civic.taxes.tax_rate/20,q+=P,e.civic.govern.type==="oligarchy"&&(q*=1-je.oligarchy()[0]/100),e.civic.govern.type==="corpocracy"&&(q*=.5),e.civic.govern.type==="socialist"&&(q*=1-je.socialist()[3]/100),e.race.banana&&(q*=.05);let j=1;e.tech.anthropology&&e.tech.anthropology>=4&&!e.race.truepath&&(j+=Ka()*.025);let K=0;if(!e.tech.world_control&&e.civic.govern.type!=="federation")for(let ee=0;ee<3;ee++)e.civic.foreign[`gov${ee}`].buy&&(K+=q*.2);let ae=$a("tax"),Z=(q-K)*j*pe*ae.mult;Z*=i,f.p.Money[t("morale_tax")]=q+"v",q>0&&(f.p.Money[`\u1102${t("civics_spy_purchase_bd")}`]=-K+"v",f.p.Money[e.race.cataclysm||e.race.orbit_decayed?`\u1102${t("space_red_ziggurat_title")}`:`\u1102${Ze("temple")}`]=(j-1)*100+"%",f.p.Money[`\u1102${t("city_shrine")}`]=(ae.mult-1)*100+"%"),f.p.Money[t("city_factory")]=Ps+"v",e.race.discharge&&e.race.discharge>0&&Ps>0&&(f.p.Money[`\u1102${t("evo_challenge_discharge")}`]="-50%"),H("Money",+(Z*_).toFixed(2)),Ma+=Z}if(e.tech.gambling&&(x.casino||x.spc_casino||x.tauceti_casino||x.hell_casino)){let p=0;x.casino&&(p+=x.casino),x.spc_casino&&(p+=x.spc_casino),x.tauceti_casino&&(p+=x.tauceti_casino),x.hell_casino&&(p+=x.hell_casino);let q=p*Nc();f.p.Money[Ze("casino")]=q+"v",H("Money",+(q*_*i*pe).toFixed(2)),Ma+=q*i*pe}if(e.city.tourist_center&&e.city.tourist_center.on&&!e.race.fasting&&!e.race.warlord){let p=0,q=e.tech.monument&&e.tech.monument>=3&&x.s_gate?3:1;if(e.city.amphitheatre&&(p+=e.city.tourist_center.on*e.city.amphitheatre.count*q),e.city.casino&&(p+=e.city.tourist_center.on*e.city.casino.count*5*q),e.space.spc_casino&&(p+=e.city.tourist_center.on*e.space.spc_casino.count*5*q),e.tech.monuments){let j=e.tech.monuments;e.race.wish&&e.race.wishStats&&(e.city.wonder_lighthouse&&(j+=5),e.city.wonder_pyramid&&(j+=5),e.space.wonder_statue&&(j+=5),(e.interstellar.wonder_gardens||e.space.wonder_gardens)&&(j+=5)),p+=e.city.tourist_center.on*j*2*q}e.city.trade&&e.stats.achieve.banana&&e.stats.achieve.banana.l>=4&&(p+=e.city.tourist_center.on*e.city.trade.count*3*q);let P=_e("pious",1);P&&e.city.temple&&(p+=e.city.tourist_center.on*$r()*P*q),e.civic.govern.type==="corpocracy"&&(p*=1+je.corpocracy()[2]/100),e.civic.govern.type==="socialist"&&(p*=1-je.socialist()[3]/100),a==="aquarius"&&(p*=1+Bt("aquarius")[0]/100),p*=D("psychic_cash"),f.p.Money[t("tech_tourism")]=Math.round(p)+"v",a==="aquarius"&&(f.p.Money[`\u1102${t("sign_aquarius")}`]=Bt("aquarius")[0]+"%"),H("Money",+(p*_*i*pe).toFixed(2)),Ma+=p*i*pe}if(e.portal.bazaar&&e.portal.spire&&e.tech.monuments){let p=e.tech.monuments;e.race.wish&&e.race.wishStats&&e.portal.wonder_gardens&&(p+=5);let q=e.portal.bazaar.count*p*e.portal.spire.count;q*=D("psychic_cash"),f.p.Money[t("portal_bazaar_title")]=Math.round(q)+"v",a==="aquarius"&&(q*=1+Bt("aquarius")[0]/100,f.p.Money[`\u1102${t("sign_aquarius")}`]=Bt("aquarius")[0]+"%"),H("Money",+(q*_*i*pe).toFixed(2)),Ma+=q*i*pe}if(e.tauceti.tau_cultural_center){let p=0;if(e.tauceti.tauceti_casino&&(p+=x.tau_cultural_center*x.tauceti_casino*20),e.tech.monuments){let q=e.tech.monuments;e.race.wish&&e.race.wishStats&&(e.city.wonder_lighthouse&&(q+=5),e.city.wonder_pyramid&&(q+=5),e.space.wonder_statue&&(q+=5),(e.interstellar.wonder_gardens||e.space.wonder_gardens)&&(q+=5)),p+=x.tau_cultural_center*q*5}e.tech.tau_culture&&e.tech.tau_culture>=2&&(p+=x.tau_cultural_center*W.colony*15),e.civic.govern.type==="corpocracy"?p*=1+je.corpocracy()[2]/100:e.civic.govern.type==="socialist"&&(p*=1-je.socialist()[3]/100),p*=D("psychic_cash"),f.p.Money[t("tech_cultural_center")]=Math.round(p)+"v",a==="aquarius"&&(p*=1+Bt("aquarius")[0]/100,f.p.Money[`\u1102${t("sign_aquarius")}`]=Bt("aquarius")[0]+"%"),H("Money",+(p*_*i*pe).toFixed(2)),Ma+=p*i*pe}if(e.tech.tau_junksale){let p=W.womling_village*40,q=x.tau_cultural_center?1+x.tau_cultural_center*.08:1;f.p.Money[t("tau_red_womling_village")]=Math.round(p)+"v",f.p.Money[`\u1102${t("tech_cultural_center")}+1`]=(q-1)*100+"%",H("Money",+(p*q*_*i*pe).toFixed(2)),Ma+=p*q*i*pe}if(e.race.gravity_well&&e.tech.teamster&&e.tech.teamster>=2){let q=e.civic.teamster.workers*Ma*.01;f.p.Money[Se("teamster")]=Math.round(q/i)+"v",H("Money",+(q*_*pe).toFixed(2)),Ma+=q*pe}if(f.p.Money[t("hunger")]=(pe-1)*100+"%",e.tech.anthropology&&e.tech.anthropology>=4&&e.race.truepath){let p=e.resource[e.race.species].amount*$r()*.08;f.p.Money[Ze("temple")]=p+"v",H("Money",+(p*i*_).toFixed(2)),Ma+=p*i}if(e.race.truepath&&e.tauceti.overseer){let p=(e.tauceti.overseer.loyal+e.tauceti.overseer.morale)/200,q=e.tauceti.overseer.pop;x.womling_station&&(q+=x.womling_station*2);let P=q*p*(e.tech.isolation?25:12),j=x.tau_cultural_center?1+x.tau_cultural_center*.08:1,K=P*i*j;f.p.Money[t("tau_red_womlings")]=P+"v",f.p.Money[`\u1102${t("tech_cultural_center")}`]=(j-1)*100+"%",H("Money",+(K*_).toFixed(2)),Ma+=K}{let p=_e("racketeer",0);if(p){let q=-Math.round(Ma*(p/100));f.p.consume.Money[t("gov_trait_racketeer_bd")]=q,H("Money",+(q*_).toFixed(2))}}{let p=_e("pious",0);if(p){let q=-Math.round(Ma*(p/100));f.p.consume.Money[t("gov_trait_pious_bd")]=q,H("Money",+(q*_).toFixed(2))}}if(e.tech.foundry){let p=e.race.resourceful?1-y.resourceful.vars()[0]/100:1,q=Pe("arraak");q>0&&(p-=y.resourceful.vars(1)[0]/100*q);let P=Ji(),j={};Mi("","",!0),Object.keys(P).forEach(function(K){if(K==="Thermite"&&!rt("summer"))return;f.p[K]={};let ae=$e(e.city.foundry[K],"craftsman");e.race.servants&&e.race.servants.hasOwnProperty("sjobs")&&e.race.servants.sjobs.hasOwnProperty(K)&&(ae+=N(e.race.servants.sjobs[K]));let Z=Mi(K,"auto").multiplier,ee=e.genes.crafty?2:1,J=Math.floor(e.resource[P[K][0].r].amount/(P[K][0].a*ee*p/140));for(let ce=1;ce"u"?j[P[K][ce].r]=ge/_:j[P[K][ce].r]+=ge/_}e.race.high_pop&&(J=qe(J)),f.p[K][Se("craftsman")]=J*ee/140+"v",H(K,Z*J*ee*_/140*D("psychic_boost",K))}),Object.keys(j).forEach(function(K){j[K]>0&&(f.p.consume[K][Se("craftsman")]=-j[K])})}if(!e.settings.showResearch&&(e.resource.Lumber.amount>=5||e.resource.Stone.amount>=6)&&(e.settings.showResearch=!0),e.city.power_total=-we,e.city.power=oe,e.city.power<0?($("#powerMeter").addClass("low"),$("#powerMeter").removeClass("neutral"),$("#powerMeter").removeClass("high")):e.city.power>0?($("#powerMeter").removeClass("low"),$("#powerMeter").removeClass("neutral"),$("#powerMeter").addClass("high")):($("#powerMeter").removeClass("low"),$("#powerMeter").addClass("neutral"),$("#powerMeter").removeClass("high")),x.world_controller&&x.world_controller>0?e.tech.wsc===0&&(e.tech.wsc=1,de()):e.tech.wsc!==0&&(e.tech.wsc=0,de()),e.tech.portal>=2&&(e.portal.fortress.garrison>0?e.tech.portal_guard=1:e.tech.portal_guard=0),e.race.decay&&Object.keys(Dr).forEach(function(p){if(e.resource[p].amount>50){let q=+((e.resource[p].amount-50)*(.001*Dr[p])).toFixed(3);H(p,-(q*_)),f.p.consume[p][t("evo_challenge_decay")]=-q}else delete f.p.consume[p][t("evo_challenge_decay")]}),e.resource.Asphodel_Powder.display)if(e.resource.Asphodel_Powder.amount>0){let p=+(e.resource.Asphodel_Powder.amount*.0045).toFixed(3),q=.92;if(x.ascension_trigger&&e.eden.hasOwnProperty("encampment")&&e.eden.encampment.asc){let P=d.interstellar.int_sirius.ascension_trigger.heatSink();P=P<0?Math.abs(P):0,P>0&&(q=1-.08*(1+P/17500))}e.race.warlord&&e.eden.corruptor&&x.corruptor&&(q-=.004*x.corruptor),q<.01&&(q=.01),e.eden.stabilizer&&(p*=q**e.eden.stabilizer.count),H("Asphodel_Powder",-(p*_)),f.p.consume.Asphodel_Powder[t("evo_challenge_decay")]=-p}else delete f.p.consume.Asphodel_Powder[t("evo_challenge_decay")];h0&&(e.tech.piracy&&Nt(),e.settings.portal.ruins&&(V({el:"#srprtl_ruins"},"update"),V({el:"#foundry"},"update")),e.settings.portal.gate&&V({el:"#srprtl_gate"},"update"))}if(e.civic.garrison&&e.civic.garrison.workers=2?.08:.05;e.blood.lust&&(G+=e.blood.lust*.002);let te=_e("militant",0);te&&(G*=1+te/100),k*=1+(e.race.orbit_decayed&&e.space.space_barracks?e.space.space_barracks.on:e.city.boot_camp.count)*G}if(e.tech.celestial_warfare&&e.tech.celestial_warfare>=5&&e.eden.bunker){let G=.1;e.blood.lust&&(G+=e.blood.lust*.002);let te=_e("militant",0);te&&(G*=1+te/100),k*=1+e.eden.bunker.count*G}e.race.beast&&(k*=1+y.beast.vars()[2]/100),e.civic.garrison.rate=k*_,e.race.brute&&(e.civic.garrison.rate+=y.brute.vars()[1]/40*_);let A=Pe("orc");for(A>0&&(e.civic.garrison.rate+=y.brute.vars(1)[1]/40*A*_),e.civic.garrison.progress+=e.civic.garrison.rate;e.civic.garrison.progress>=100;)e.civic.garrison.progress-=100,e.civic.garrison.workers++,e.portal.fortress&&e.portal.fortress.assigned&&e.portal.fortress.garrison0?($("#portal-carport .count").hasClass("has-text-alert")||$("#portal-carport .count").addClass("has-text-alert"),e.portal.carport.repair++,e.portal.carport.repair>=d.portal.prtl_fortress.carport.repair()&&(e.portal.carport.repair=0,e.portal.carport.damaged--),e.portal.carport.damaged=Math.min(e.portal.carport.damaged,N(e.portal.carport.count))):$("#portal-carport .count").hasClass("has-text-alert")&&$("#portal-carport .count").removeClass("has-text-alert")),Object.keys(e.resource).forEach(function(k){e.resource[k].amount>e.resource[k].max&&e.resource[k].max>=0&&(e.resource[k].amount=e.resource[k].max),(e.resource[k].rate>0||e.resource[k].rate===0&&e.resource[k].max===-1)&&f0(k,Ae.mt)}),e.race.fasting&&f0(e.race.species,Ae.mt),e.settings.expose&&(window.evolve||enableDebug(),updateDebugData()),rt("easter").active)for(w=1;w<=18;w++)$(`#egg${w}`).length>0&&!$(`#egg${w}`).hasClass("binded")&&(c0(w),$(`#egg${w}`).addClass("binded"));if(rt("halloween").active){for(w=1;w<=8;w++)$(`#treat${w}`).length>0&&!$(`#treat${w}`).hasClass("binded")&&(tl(w,!1),$(`#treat${w}`).addClass("binded"));for(w=1;w<=8;w++)$(`#trick${w}`).length>0&&!$(`#trick${w}`).hasClass("binded")&&(tl(w,!0),$(`#trick${w}`).addClass("binded"))}h0=!1}function Yp(){let r=Ya();if(e.race.species==="protoplasm"){let c=100;e.stats.achieve.mass_extinction&&e.stats.achieve.mass_extinction.l>1&&(c+=50*(e.stats.achieve.mass_extinction.l-1));var a={RNA:c,DNA:c};if(e.evolution.membrane){let l=e.evolution.mitochondria?e.evolution.mitochondria.count*5+5:5;a.RNA+=e.evolution.membrane.count*l}if(e.evolution.eukaryotic_cell){let l=e.evolution.mitochondria?e.evolution.mitochondria.count*10+10:10;a.DNA+=e.evolution.eukaryotic_cell.count*l}e.resource.RNA.max=a.RNA,e.resource.DNA.max=a.DNA,Object.keys(d.evolution).forEach(function(l){if(d.evolution[l]&&d.evolution[l].cost){let h=d.evolution[l],v=$("#"+h.id);v.length>0&&(Zt(h,!0)?(v.hasClass("cnam")&&v.removeClass("cnam"),Zt(h)?v.hasClass("cna")&&v.removeClass("cna"):v.hasClass("cna")||v.addClass("cna")):(v.hasClass("cnam")||v.addClass("cnam"),v.hasClass("cna")||v.addClass("cna")))}})}else{var a={Money:1e3,Slave:0,Authority:e.race.cataclysm||e.race.orbit_decayed?90:e.race.lone_survivor?100:80,Mana:0,Energy:100,Sus:100,Knowledge:e.stats.achieve.extinct_junker&&e.stats.achieve.extinct_junker.l>=1?1e3:100,Omniscience:0,Zen:0,Food:1e3,Crates:0,Containers:0,Lumber:200,Stone:200,Chrysotile:200,Crystal:10,Furs:100,Copper:100,Iron:100,Cement:100,Coal:50,Oil:0,Uranium:10,Aluminium:50,Steel:50,Titanium:50,Alloy:50,Polymer:50,Iridium:0,Helium_3:0,Water:0,Deuterium:0,Neutronium:0,Adamantite:0,Infernite:0,Elerium:1,Nano_Tube:0,Graphene:0,Stanene:0,Bolognium:0,Vitreloy:0,Orichalcum:0,Asphodel_Powder:0,Elysanite:0,Unobtainium:0,Cipher:0,Nanite:0,Materials:0},i={unemployed:-1,hunter:-1,forager:-1,farmer:-1,lumberjack:-1,quarry_worker:-1,crystal_miner:-1,scavenger:-1,teamster:-1,meditator:-1,torturer:0,miner:0,coal_miner:0,craftsman:0,cement_worker:0,banker:0,entertainer:0,priest:0,professor:0,scientist:0,garrison:0,colonist:0,titan_colonist:0,space_miner:0,hell_surveyor:0,archaeologist:0,ghost_trapper:0,elysium_miner:0,pit_miner:0,crew:0};if(e.race.cataclysm?(a.Money+=25e4,a.Knowledge+=1e5,a.Lumber+=1e5,a.Stone+=1e5,a.Chrysotile+=1e5,a.Furs+=1e5,a.Aluminium+=1e5,a.Steel+=1e5,a.Copper+=1e5,a.Iron+=1e5,a.Coal+=1e5,a.Cement+=1e5,a.Titanium+=75e3,a.Alloy+=2e4,a.Polymer+=2e4,a.Uranium+=1e3):e.race.lone_survivor&&(a.Money+=1e9,a.Knowledge+=1e5,a.Food+=9e3,a.Water+=1e4,a.Elerium+=999),e.stats.feat.adept){let b=Js();e.race.smoldering?a.Chrysotile+=b*60:a.Lumber+=b*60,a.Stone+=b*60}if(e.race.hasOwnProperty("psychicPowers")&&e.race.psychicPowers.hasOwnProperty("channel")&&(a.Energy-=e.race.psychicPowers.channel.boost,a.Energy-=e.race.psychicPowers.channel.assault,a.Energy-=e.race.psychicPowers.channel.cash,a.Energy<0&&(a.Energy=100,e.race.psychicPowers.channel.boost=0,e.race.psychicPowers.channel.assault=0,e.race.psychicPowers.channel.cash=0)),a[e.race.species]=0,f.c={},Object.keys(a).forEach(function(b){f.c[b]={[t("base")]:a[b]+"v"}}),e.race.universe==="evil"&&e.tech.primitive&&e.tech.primitive>=3){e.resource.Authority.display=!0;let b=Ge()||0;if(e.civic.govern.type==="autocracy"){let E=10;a.Authority+=E,f.c.Authority[t("govern_autocracy")]=E+"v"}else if(e.civic.govern.type==="oligarchy"){let E=20;a.Authority+=E,f.c.Authority[t("govern_oligarchy")]=E+"v"}if(e.city.garrison){let E=e.city.garrison.on*.5;a.Authority+=E,f.c.Authority[d.city.garrison.title()]=E+"v"}if(e.city.temple&&!e.race.warlord){let E=$r()*.5;a.Authority+=E,f.c.Authority[Ze("temple")]=E+"v"}if(e.space.space_barracks){let E=e.space.space_barracks.on*(e.race.cataclysm?2:1);a.Authority+=E,f.c.Authority[t("space_red_space_barracks_title")]=E+"v"}if(e.interstellar.cruiser&&yt.cruiser){let E=yt.cruiser;a.Authority+=E,f.c.Authority[t("interstellar_cruiser_title")]=E+"v"}if(e.race.warlord){let E=e.race?.absorbed?.length||1;a.Authority+=E,f.c.Authority[t("portal_throne_of_evil_title")]=E+"v"}if(e.portal.brute){let E=e.portal.brute.on;a.Authority+=E,f.c.Authority[t("portal_brute_bd")]=E+"v"}if(e.portal.minions){let E=e.portal.minions.on;a.Authority+=E,f.c.Authority[t("portal_minions_bd")]=E+"v"}if(e.race.warlord&&e.eden.bunker&&W.bunker){let E=W.bunker;a.Authority+=E,f.c.Authority[t("eden_bunker_title")]=E+"v"}if(e.race.lone_survivor||e.tech.isolation){let E=x.orbital_station;a.Authority+=E,f.c.Authority[t("tau_home_orbital_station")]=E+"v"}let F=0;if(e.race.pet&&(F=1,e.race.pet&&(e.race.pet.event>0&&F++,e.race.pet.pet>0?F+=e.race.pet.type==="cat"?2:1:e.race.pet.pet<0&&(F-=e.race.pet.type==="cat"?2:1)),a.Authority+=F,f.c.Authority[t(`event_pet_${e.race.pet.type}_owner`)]=F+"v"),e.resource.Authority.amount=e.race.cataclysm||e.race.orbit_decayed?90:e.race.lone_survivor?100:80,e.city.morale.current>100){let E=e.city.morale.current-100;e.civic.govern.type==="democracy"&&(E*=.9),e.resource.Authority.amount-=E}if(e.civic.garrison){let E=.7;e.tech.evil&&(E+=.1*e.tech.evil),e.portal.fortress&&(b+=e.portal.fortress.garrison-e.portal.fortress.patrols*e.portal.fortress.patrol_size);let B=qe(b)*E;e.race.grenadier&&(B*=1.75),e.civic.govern.type==="autocracy"?B*=1.08:e.civic.govern.type==="dictator"&&(B*=1.12),e.resource.Authority.amount+=B}F!==0&&(e.resource.Authority.amount+=F),(e.race.lone_survivor||e.tech.isolation)&&e.tauceti.colony&&W.colony&&(e.resource.Authority.amount+=W.colony*5),e.resource.Authority.amount=Math.floor(e.resource.Authority.amount),e.resource.Authority.amount<0&&(e.resource.Authority.amount=0)}else e.resource.Authority.display=!1;if(e.race.unfathomable&&e.city.captive_housing){let b=Vi(),F=$e(e.civic.hunter.workers,"hunter");if(F*=at(F,"hunting")*b,e.race.swift&&(F*=1+y.swift.vars()[1]/100),e.race.servants){let me=e.race.servants.jobs.hunter*b;me*=xr(e.race.servants.jobs.hunter,"hunting"),F+=me}let E=0,B=0,oe=[];if(e.city.hasOwnProperty("surfaceDwellers"))for(let me=0;me0&&oe.push(me)}let we=Math.round(40/y.unfathomable.vars()[1]);if(E=2&&e.civic.torturer.workers>0&&oe.length>0&&Math.rand(0,Math.ceil((B+1)**1.45))0&&(e.race.psychicPowers.boostTime--,(e.race.psychicPowers.boostTime<0||e.race.psychicPowers.boostTime>360)&&(e.race.psychicPowers.boostTime=0)),e.race.psychicPowers&&e.race.psychicPowers.assaultTime&&e.race.psychicPowers.assaultTime>0&&(e.race.psychicPowers.assaultTime--,(e.race.psychicPowers.assaultTime<0||e.race.psychicPowers.assaultTime>360)&&(e.race.psychicPowers.assaultTime=0)),e.race.psychicPowers&&e.race.psychicPowers.cash&&e.race.psychicPowers.cash>0&&(e.race.psychicPowers.cash--,(e.race.psychicPowers.cash<0||e.race.psychicPowers.cash>360)&&(e.race.psychicPowers.cash=0))),e.city.nanite_factory){let b=e.city.nanite_factory.count*U(2500);a.Nanite+=b,f.c.Nanite[t("city_nanite_factory")]=b+"v"}if(x.transmitter&&e.race.artifical){let b=x.transmitter*U(100);a.Food+=b,f.c.Food[t("city_transmitter")]=b+"v"}if(e.city.pylon||e.space.pylon||e.tauceti.pylon){let b=0,F="city_pylon";(e.race.cataclysm||e.race.orbit_decayed)&&e.space.pylon?(b=U(2)*e.space.pylon.count,F="space_red_pylon"):e.tech.isolation&&e.tauceti.pylon?(b=U(2)*e.tauceti.pylon.count,F="tau_home_pylon"):e.city.pylon&&(b=U(5)*e.city.pylon.count),a.Mana+=b,f.c.Mana[t(F)]=b+"v"}if(e.city.captive_housing){let b=e.city.captive_housing.count;e.city.captive_housing.raceCap=b*(e.tech.unfathomable&&e.tech.unfathomable>=3?3:2),e.city.captive_housing.cattleCap=b*5}if(e.city.farm&&e.tech.farm){let b=e.city.farm.count*d.city.farm.citizens();a[e.race.species]+=b,f.c[e.race.species][t("city_farm")]=b+"v"}if(e.city.wharf){let b=e.tech.world_control?15:10;e.tech.particles&&e.tech.particles>=2&&(b*=2),a.Crates+=e.city.wharf.count*b,f.c.Crates[t("city_wharf")]=e.city.wharf.count*b+"v",a.Containers+=e.city.wharf.count*b,f.c.Containers[t("city_wharf")]=e.city.wharf.count*b+"v"}if(e.space.munitions_depot){let b=25;a.Crates+=e.space.munitions_depot.count*b,f.c.Crates[t("tech_munitions_depot")]=e.space.munitions_depot.count*b+"v",a.Containers+=e.space.munitions_depot.count*b,f.c.Containers[t("tech_munitions_depot")]=e.space.munitions_depot.count*b+"v"}if(e.interstellar.cargo_yard){a.Crates+=e.interstellar.cargo_yard.count*50,f.c.Crates[t("interstellar_cargo_yard_title")]=e.interstellar.cargo_yard.count*50+"v",a.Containers+=e.interstellar.cargo_yard.count*50,f.c.Containers[t("interstellar_cargo_yard_title")]=e.interstellar.cargo_yard.count*50+"v";let b=e.interstellar.cargo_yard.count*U(200);a.Neutronium+=b,f.c.Neutronium[t("interstellar_cargo_yard_title")]=b+"v",b=e.interstellar.cargo_yard.count*U(150),a.Infernite+=b,f.c.Infernite[t("interstellar_cargo_yard_title")]=b+"v"}if(e.interstellar.neutron_miner&&x.neutron_miner){let b=x.neutron_miner*U(500);a.Neutronium+=b,f.c.Neutronium[t("interstellar_neutron_miner_title")]=b+"v"}if(e.city.storage_yard){let b=e.tech.container>=3?20:10;e.stats.achieve.pathfinder&&e.stats.achieve.pathfinder.l>=1&&(b+=10),e.tech.world_control&&(b+=10),e.tech.particles&&e.tech.particles>=2&&(b*=2),a.Crates+=e.city.storage_yard.count*b,f.c.Crates[t("city_storage_yard")]=e.city.storage_yard.count*b+"v"}if(e.space.garage){let b=e.tech.particles>=4?20+e.tech.supercollider:20;(e.tech.world_control||e.race.cataclysm)&&(b+=10),a.Containers+=e.space.garage.count*b,f.c.Containers[t("space_red_garage_title")]=e.space.garage.count*b+"v",(e.race.cataclysm||e.race.orbit_decayed)&&(a.Crates+=e.space.garage.count*b,f.c.Crates[t("space_red_garage_title")]=e.space.garage.count*b+"v")}if(e.tech.tp_depot&&(a.Containers+=e.tech.tp_depot*50,f.c.Containers[t("galaxy_gateway_depot")]=e.tech.tp_depot*50+"v",a.Crates+=e.tech.tp_depot*50,f.c.Crates[t("galaxy_gateway_depot")]=e.tech.tp_depot*50+"v"),e.city.warehouse){let b=e.tech.steel_container>=2?20:10;e.stats.achieve.pathfinder&&e.stats.achieve.pathfinder.l>=2&&(b+=10),e.tech.world_control&&(b+=10),e.tech.particles&&e.tech.particles>=2&&(b*=2),a.Containers+=e.city.warehouse.count*b,f.c.Containers[t("city_warehouse")]=e.city.warehouse.count*b+"v"}if(e.city.rock_quarry){let b=nr(e.city.rock_quarry.count*U(100));a.Stone+=b,f.c.Stone[t("city_rock_quarry")]=b+"v",a.Chrysotile+=b,f.c.Chrysotile[t("city_rock_quarry")]=b+"v"}if(e.city.lumber_yard){let b=nr(e.city.lumber_yard.count*U(100));a.Lumber+=b,f.c.Lumber[t("city_lumber_yard")]=b+"v"}else if(e.city.graveyard){let b=nr(e.city.graveyard.count*U(100));a.Lumber+=b,f.c.Lumber[t("city_graveyard")]=b+"v"}if(e.city.sawmill){let b=nr(e.city.sawmill.count*U(200));a.Lumber+=b,f.c.Lumber[t("city_sawmill")]=b+"v"}if(e.city.mine&&(i.miner+=N(e.city.mine.count)),e.portal.dig_demon&&e.race.warlord){let b=e.portal.dig_demon.on*d.portal.prtl_wasteland.dig_demon.citizens();a[e.race.species]+=b,f.c[e.race.species][t("portal_dig_demon_title")]=b+"v",i.miner+=b,e.civic.miner.max=b,e.civic.miner.workers=b,e.civic.miner.assigned=b}if(e.city.coal_mine&&(i.coal_miner+=N(e.city.coal_mine.count)),e.city.bank&&(i.banker+=N(e.city.bank.count)),e.city.amphitheatre){let b=_e("athleticism",1);i.entertainer+=N(b?e.city.amphitheatre.count*b:e.city.amphitheatre.count)}if(e.city.casino&&e.tech.theatre&&!e.race.joyless&&(i.entertainer+=N(e.city.casino.count)),e.space.spc_casino&&(e.tech.theatre&&!e.race.joyless&&(i.entertainer+=N(e.space.spc_casino.count)),e.race.orbit_decayed&&(i.banker+=N(e.space.spc_casino.count))),e.portal.hell_casino&&(e.tech.theatre&&!e.race.joyless&&(i.entertainer+=N(e.portal.hell_casino.count*3)),i.banker+=N(e.portal.hell_casino.count)),e.tauceti.tauceti_casino&&(e.tech.theatre&&!e.race.joyless&&(i.entertainer+=N(e.tauceti.tauceti_casino.count)),e.tech.isolation)){i.banker+=N(e.tauceti.tauceti_casino.count);let b=x.tauceti_casino*d.tauceti.tau_home.tauceti_casino.citizens();a[e.race.species]+=b,f.c[e.race.species][Ze("casino")]=b+"v"}if(e.galaxy.resort&&e.tech.theatre&&!e.race.joyless&&(i.entertainer+=N(x.resort*2)),e.city.cement_plant&&(i.cement_worker+=N(e.city.cement_plant.count*2)),e.eden.eden_cement){let b=x.eden_cement||0;i.cement_worker+=N(b*5)}if(e.race.orbit_decayed&&x.red_factory&&(i.cement_worker+=N(x.red_factory)),e.race.parasite&&!e.tech.isolation&&(i.garrison+=N(y.parasite.vars()[0])),e.city.garrison&&(i.garrison+=e.city.garrison.on*d.city.garrison.soldiers()),e.space.space_barracks&&!e.race.fasting){let b=d.space.spc_red.space_barracks.soldiers();i.garrison+=Math.round(e.space.space_barracks.on*b)}if(e.interstellar.cruiser){let b=d.interstellar.int_proxima.cruiser.soldiers();i.garrison+=yt.cruiser*b}if(e.portal.brute){let b=d.portal.prtl_wasteland.brute.soldiers();i.garrison+=e.portal.brute.on*b}if(e.race.wish&&e.race.wishStats&&(i.garrison+=N(e.race.wishStats.troop)),x.s_gate&&e.galaxy.starbase){let b=d.galaxy.gxy_gateway.starbase.soldiers();i.garrison+=x.starbase*b}if(e.eden.bunker){let b=d.eden.eden_asphodel.bunker.soldiers();i.garrison+=W.bunker*b}if(e.eden.fire_support_base&&e.eden.fire_support_base.count===100&&(i.garrison+=d.eden.eden_elysium.fire_support_base.soldiers()),e.race.orbit_decayed&&e.space.hasOwnProperty("red_mine")&&(i.miner+=N(W.red_mine),i.coal_miner+=N(W.red_mine)),!e.tech.world_control){let b=N(e.civic.govern.type==="federation"?15:20);for(let F=2;F>=0;F--)e.civic.foreign[`gov${F}`].occ&&(i.garrison-=b,i.garrison<0&&(e.civic.foreign[`gov${F}`].occ=!1,i.garrison+=b,e.civic.garrison.workers+=b,L(t("civics_garrison_autodeoccupy_desc",[mt(F)]),"danger",!1,["spy"])))}if(e.race.slaver&&e.tech.slaves&&e.city.slave_pen&&(a.Slave=e.city.slave_pen.count*4,f.c.Slave[t("city_slave_housing",[e.resource.Slave.name])]=e.city.slave_pen.count*4+"v",a.Slavee.resource.Zen.max&&(e.resource.Zen.amount=e.resource.Zen.max);let b=e.resource.Zen.amount/(e.resource.Zen.amount+5e3);f.c.Zen[t("trait_calm_desc")]=`+${(b*100).toFixed(2)}%`}if(e.city.basic_housing){let b=e.city.basic_housing.count*d.city.basic_housing.citizens();a[e.race.species]+=b,f.c[e.race.species][Rt("small")]=b+"v"}if(e.tauceti.tau_housing&&e.tech.isolation){let b=e.tauceti.tau_housing.count*d.tauceti.tau_home.tau_housing.citizens();a[e.race.species]+=b,f.c[e.race.species][Rt("small")]=b+"v"}if(e.city.cottage){let b=e.city.cottage.count*d.city.cottage.citizens();if(a[e.race.species]+=b,f.c[e.race.species][Rt("medium")]=b+"v",e.tech.home_safe){let F=e.city.cottage.count*U(e.tech.home_safe>=2?e.tech.home_safe>=3?5e3:2e3:1e3);a.Money+=F,f.c.Money[Rt("medium")]=F+"v"}}if(e.city.apartment){let b=x.apartment*d.city.apartment.citizens();if(a[e.race.species]+=b,f.c[e.race.species][Rt("large")]=b+"v",e.tech.home_safe){let F=x.apartment*U(e.tech.home_safe>=2?e.tech.home_safe>=3?1e4:5e3:2e3);a.Money+=F,f.c.Money[Rt("large")]=F+"v"}}if(e.eden.rectory){let b=x.rectory*d.eden.eden_asphodel.rectory.citizens();a[e.race.species]+=b,f.c[e.race.species][t("eden_rectory_title")]=b+"v"}if(x.s_gate&&e.galaxy.consulate&&e.galaxy.consulate.count>=1){let b=d.galaxy.gxy_alien1.consulate.citizens();a[e.race.species]+=b,f.c[e.race.species][t("galaxy_consulate")]=b+"v"}if(x.s_gate&&x.embassy&&e.tech.xeno>=11){let b=d.galaxy.gxy_gorddon.embassy.citizens();a[e.race.species]+=b,f.c[e.race.species][t("galaxy_embassy")]=b+"v"}if(x.s_gate&&x.embassy&&e.galaxy.dormitory){let b=x.dormitory*d.galaxy.gxy_gorddon.dormitory.citizens();a[e.race.species]+=b,f.c[e.race.species][t("galaxy_dormitory")]=b+"v"}if(x.arcology){let b=x.arcology*d.portal.prtl_ruins.arcology.citizens();a[e.race.species]+=b,f.c[e.race.species][t("portal_arcology_title")]=b+"v",i.garrison+=x.arcology*d.portal.prtl_ruins.arcology.soldiers(),a.Containers+=x.arcology*Math.round(Tr)*10,f.c.Containers[t("portal_arcology_title")]=x.arcology*Math.round(Tr)*10+"v",a.Crates+=x.arcology*Math.round(Tr)*10,f.c.Crates[t("portal_arcology_title")]=x.arcology*Math.round(Tr)*10+"v";let F=ta("ruins"),E=x.arcology*U(_r()*8*F.supress);a.Money+=E,f.c.Money[t("portal_arcology_title")]=E+"v"}if(e.portal.bazaar&&e.portal.spire){let b=e.portal.bazaar.count*e.portal.spire.count*8;a.Containers+=b,f.c.Containers[t("portal_bazaar_title")]=b+"v",a.Crates+=b,f.c.Crates[t("portal_bazaar_title")]=b+"v";let F=U(_r()*e.portal.spire.count*e.portal.bazaar.count/3);a.Money+=F,f.c.Money[t("portal_bazaar_title")]=F+"v"}if(W.colony){let b=e.tech.isolation?900:250;a.Containers+=W.colony*b,f.c.Containers[t("tau_home_colony")]=W.colony*b+"v",a.Crates+=W.colony*b,f.c.Crates[t("tau_home_colony")]=W.colony*b+"v";let F=W.colony*d.tauceti.tau_home.colony.citizens();a[e.race.species]+=F,f.c[e.race.species][t("tau_home_colony")]=F+"v"}if(x.operating_base&&(i.garrison+=Math.min(W.operating_base,x.operating_base)*d.space.spc_enceladus.operating_base.soldiers()),x.fob&&(i.garrison+=d.space.spc_triton.fob.soldiers()),e.space.living_quarters){let b=Math.round(W.living_quarters*d.space.spc_red.living_quarters.citizens());if(a[e.race.species]+=b,i.colonist+=N(W.living_quarters),f.c[e.race.species][`${X().red}`]=b+"v",(e.race.cataclysm||e.race.orbit_decayed)&&e.tech.home_safe){let F=W.living_quarters*U(e.tech.home_safe>=2?e.tech.home_safe>=3?1e5:5e4:25e3);a.Money+=F,f.c.Money[t("space_red_living_quarters_title")]=F+"v"}}if(W.biodome&&(e.race.artifical||e.race.orbit_decayed)){let b=W.biodome*U(e.race.artifical?500:100);a.Food+=b,f.c.Food[t("space_red_signal_tower_title")]=b+"v"}if(e.space.titan_quarters){let b=Math.round(W.titan_quarters*d.space.spc_titan.titan_quarters.citizens());a[e.race.species]+=b,i.titan_colonist+=N(W.titan_quarters),f.c[e.race.species][`${X().titan}`]=b+"v"}if(e.interstellar.habitat&&x.habitat){let b=x.habitat*d.interstellar.int_alpha.habitat.citizens();a[e.race.species]+=b,f.c[e.race.species][t("interstellar_habitat_title")]=b+"v"}if(e.interstellar.luxury_condo&&x.luxury_condo){let b=x.luxury_condo*d.interstellar.int_alpha.luxury_condo.citizens();a[e.race.species]+=b,f.c[e.race.species][t("tech_luxury_condo")]=b+"v";let F=x.luxury_condo*U(75e4);a.Money+=F,f.c.Money[t("tech_luxury_condo")]=F+"v"}if(e.city.lodge){let b=e.city.lodge.count*d.city.lodge.citizens();a[e.race.species]+=b,f.c[e.race.species][t("city_lodge")]=b+"v"}if(e.portal.hovel){let b=e.portal.hovel.count*d.portal.prtl_wasteland.hovel.citizens();a[e.race.species]+=b,f.c[e.race.species][t("portal_hovel_title")]=b+"v"}if(e.space.outpost){let b=e.space.outpost.count*U(500);a.Neutronium+=b,f.c.Neutronium[t("space_gas_moon_outpost_title")]=b+"v"}if(e.city.shed){var s=Nr();let b=e.tech.storage<=2?t("city_shed_title1"):e.tech.storage>=4?t("city_shed_title3"):t("city_shed_title2");for(let F of d.city.shed.res())if(e.resource[F].display){let E=e.city.shed.count*U(d.city.shed.val(F)*s);a[F]+=E,f.c[F][b]=E+"v"}}if(e.race.lone_survivor&&(f.c[e.race.species][t("base")]="1v",a[e.race.species]=1),e.interstellar.warehouse){var s=Nr();let F=t("interstellar_alpha_name");for(let E of d.interstellar.int_alpha.warehouse.res())if(e.resource[E].display){let B=e.interstellar.warehouse.count*U(d.interstellar.int_alpha.warehouse.val(E)*s);a[E]+=B,f.c[E][F]=B+"v"}}if(e.eden.warehouse){var s=Nr(e.race.warlord?1:.2);e.race.warlord&&e.eden.corruptor&&(s*=1+(x.corruptor||0)*(e.tech.asphodel>=12?e.tech.asphodel>=13?.16:.12:.08));let F=t("eden_asphodel_name");for(let E of d.eden.eden_asphodel.warehouse.res())if(e.resource[E].display){let B=e.eden.warehouse.count*U(d.eden.eden_asphodel.warehouse.val(E)*s);a[E]+=B,f.c[E][F]=B+"v"}}if(e.portal.warehouse){var s=Nr();e.race.warlord&&e.eden.corruptor&&e.tech.asphodel>=12&&(s*=1+(x.corruptor||0)*(e.tech.asphodel>=13?.16:.12));let F=e.tech.storage<=2?t("city_shed_title1"):e.tech.storage>=4?t("city_shed_title3"):t("city_shed_title2");for(let B of d.portal.prtl_wasteland.warehouse.res())if(e.resource[B].display){let oe=e.portal.warehouse.count*U(d.portal.prtl_wasteland.warehouse.val(B)*s);a[B]+=oe,f.c[B][F]=oe+"v"}let E=e.portal.warehouse.count*(65+e.portal.warehouse.rank*35);a.Crates+=E,f.c.Crates[F]=E+"v",a.Containers+=E,f.c.Containers[F]=E+"v"}if(e.space.storehouse){var s=ci("storehouse",!1),n=ci("storehouse",!0);let F=t("space_storehouse_title");for(let E of d.space.spc_titan.storehouse.res())if(e.resource[E].display){let B=d.space.spc_titan.storehouse.heavy(E),oe=e.space.storehouse.count*U(d.space.spc_titan.storehouse.val(E)*(B?n:s));a[E]+=oe,f.c[E][F]=oe+"v"}}if(e.tauceti.repository){var s=ci("repository");let F=t("tech_repository");for(let E of d.tauceti.tau_home.repository.res())if(e.resource[E].display){let B=e.tauceti.repository.count*U(d.tauceti.tau_home.repository.val(E)*s);a[E]+=B,f.c[E][F]=B+"v"}if(e.tech.isolation){let E=250;a.Containers+=e.tauceti.repository.count*E,f.c.Containers[t("tech_repository")]=e.tauceti.repository.count*E+"v",a.Crates+=e.tauceti.repository.count*E,f.c.Crates[t("tech_repository")]=e.tauceti.repository.count*E+"v"}}if(e.tech.isolation&&x.tau_farm&&e.race.artifical){let b=x.tau_farm*U(350);a.Food+=b,f.c.Food[t("tau_home_tau_farm")]=b+"v"}if(e.galaxy.gateway_depot){let b=e.tech.world_control?150:100;a.Crates+=e.galaxy.gateway_depot.count*b,f.c.Crates[t("galaxy_gateway_depot")]=e.galaxy.gateway_depot.count*b+"v",a.Containers+=e.galaxy.gateway_depot.count*b,f.c.Containers[t("galaxy_gateway_depot")]=e.galaxy.gateway_depot.count*b+"v";let F=t("galaxy_gateway_depot"),E=po();if(e.resource.Uranium.display){let B=e.galaxy.gateway_depot.count*U(3e3*E);a.Uranium+=B,f.c.Uranium[F]=B+"v"}if(e.resource.Nano_Tube.display){let B=e.galaxy.gateway_depot.count*U(25e4*E);a.Nano_Tube+=B,f.c.Nano_Tube[F]=B+"v"}if(e.resource.Neutronium.display){let B=e.galaxy.gateway_depot.count*U(9001*E);a.Neutronium+=B,f.c.Neutronium[F]=B+"v"}if(e.resource.Infernite.display){let B=e.galaxy.gateway_depot.count*U(6660*E);a.Infernite+=B,f.c.Infernite[F]=B+"v"}if(e.resource.Elerium.display&&x.gateway_depot&&x.s_gate){let B=x.gateway_depot*U(200);a.Elerium+=B,f.c.Elerium[F]=B+"v"}}if(e.resource.Infernite.display&&e.portal.fortress&&!e.race.warlord){let b=U(1e3);a.Infernite+=b,f.c.Infernite[t("portal_fortress_name")]=b+"v"}if(e.space.garage){var s=d.space.spc_red.garage.multiplier(!1),n=d.space.spc_red.garage.multiplier(!0);let E=t("space_red_garage_title");for(let B of d.space.spc_red.garage.res())if(e.resource[B].display){let oe=d.space.spc_red.garage.heavy(B),we=e.space.garage.count*U(d.space.spc_red.garage.val(B)*(oe?n:s));a[B]+=we,f.c[B][E]=we+"v"}}if(e.portal.harbor&&x.harbor){let b=1;e.race.warlord&&e.eden.corruptor&&e.tech?.asphodel>=12&&(b*=1+(x.corruptor||0)*(e.tech.asphodel>=13?.12:.1));let F=t("portal_harbor_title");for(let E of d.portal.prtl_lake.harbor.res())if(e.resource[E].display){let B=x.harbor*U(d.portal.prtl_lake.harbor.val(E)*b);a[E]+=B,f.c[E][F]=B+"v"}}if(e.city.silo){let b=nr(e.city.silo.count*U(500));a.Food+=b,f.c.Food[t("city_silo")]=b+"v"}if(e.city.compost){let b=nr(e.city.compost.count*U(200));a.Food+=b,f.c.Food[t("city_compost_heap")]=b+"v"}if(e.city.soul_well){let b=nr(e.city.soul_well.count*U(500));a.Food+=b,f.c.Food[t("city_soul_well")]=b+"v"}if(e.city.smokehouse){let b=nr(e.city.smokehouse.count*U(100));a.Food+=b,f.c.Food[t("city_smokehouse")]=b+"v"}if(e.city.oil_well){let b=e.city.oil_well.count*U(500);a.Oil+=b,f.c.Oil[t("city_oil_well")]=b+"v"}if(e.city.oil_depot){let b=e.city.oil_depot.count*U(1e3);b*=e.tech.world_control?1.5:1,a.Oil+=b,f.c.Oil[t("city_oil_depot")]=b+"v",e.tech.uranium>=2&&(b=e.city.oil_depot.count*U(250),b*=e.tech.world_control?1.5:1,a.Uranium+=b,f.c.Uranium[t("city_oil_depot")]=b+"v"),e.resource.Helium_3.display&&(b=e.city.oil_depot.count*U(400),b*=e.tech.world_control?1.5:1,a.Helium_3+=b,f.c.Helium_3[t("city_oil_depot")]=b+"v")}if(e.space.propellant_depot){let b=e.space.propellant_depot.count*U(1250);b*=e.tech.world_control?1.5:1,a.Oil+=b,f.c.Oil[t("space_home_propellant_depot_title")]=b+"v",e.resource.Helium_3.display&&(b=e.space.propellant_depot.count*U(1e3),b*=e.tech.world_control?1.5:1,a.Helium_3+=b,f.c.Helium_3[t("space_home_propellant_depot_title")]=b+"v")}if(x.orbital_station){let b=x.orbital_station*U(15e3);a.Helium_3+=b,f.c.Helium_3[t("tau_home_orbital_station")]=b+"v"}if(x.refueling_station){let b=x.refueling_station*U(1e4);if(a.Helium_3+=b,f.c.Helium_3[t("tau_gas_refueling_station_title")]=b+"v",e.tech.tau_whale>=2){let F=x.refueling_station*U(6500);a.Oil+=F,f.c.Oil[t("tau_gas_refueling_station_title")]=F+"v"}}if(x.orbital_platform){let b=x.orbital_platform*U(17500);a.Oil+=b,f.c.Oil[t("tau_red_orbital_platform")]=b+"v"}if(e.space.gas_storage){let b=e.space.gas_storage.count*U(3500);b*=e.tech.world_control?1.5:1,a.Oil+=b,f.c.Oil[`${X().gas} ${t("depot")}`]=b+"v",b=e.space.gas_storage.count*U(2500),b*=e.tech.world_control?1.5:1,a.Helium_3+=b,f.c.Helium_3[`${X().gas} ${t("depot")}`]=b+"v",b=e.space.gas_storage.count*U(1e3),b*=e.tech.world_control?1.5:1,a.Uranium+=b,f.c.Uranium[`${X().gas} ${t("depot")}`]=b+"v"}if(x.xfer_station){let b=x.xfer_station*U(5e3);if(a.Helium_3+=b,f.c.Helium_3[t("interstellar_xfer_station_title")]=b+"v",b=x.xfer_station*U(4e3),a.Oil+=b,f.c.Oil[t("interstellar_xfer_station_title")]=b+"v",b=x.xfer_station*U(2500),a.Uranium+=b,f.c.Uranium[t("interstellar_xfer_station_title")]=b+"v",e.resource.Deuterium.display){let F=x.xfer_station*U(2e3);a.Deuterium+=F,f.c.Deuterium[t("interstellar_xfer_station_title")]=F+"v"}}if(e.space.helium_mine){let b=e.space.helium_mine.count*U(100);a.Helium_3+=b,f.c.Helium_3[t("space_moon_helium_mine_title")]=b+"v"}if(e.portal.pumpjack){let b=e.portal.pumpjack.count*U(500);a.Oil+=b,f.c.Oil[t("portal_pumpjack_title")]=b+"v"}if(e.portal.pumpjack){let b=e.portal.pumpjack.count*U(250);a.Helium_3+=b,f.c.Helium_3[t("portal_pumpjack_title")]=b+"v"}if(Qa()){let b=$a("know");a.Knowledge+=b.add,f.c.Knowledge[t("city_shrine")]=b.add+"v"}e.city.temple&&e.genes.ancients&&e.genes.ancients>=2&&(i.priest+=N($r())),e.space.ziggurat&&e.genes.ancients&&e.genes.ancients>=4&&(i.priest+=N($r(!0))),e.eden.rectory&&e.genes.ancients&&e.genes.ancients>=2&&x.rectory&&(i.priest+=N(x.rectory)),e.race.wish&&e.race.wishStats&&e.race.wishStats.priest&&(i.priest+=N(e.race.wishStats.priest));let l=qt("gxy_alien2");if(e.city.university){let b=d.city.university.knowVal()*e.city.university.count;i.professor+=N(e.city.university.count),a.Knowledge+=b,f.c.Knowledge[t("city_university")]=b+"v"}if(e.race.lone_survivor&&e.tauceti.alien_outpost&&(i.professor+=N(e.tauceti.alien_outpost.count)),e.city.library){let b=125;e.race.nearsighted&&(b*=1-y.nearsighted.vars()[0]/100),e.race.studious&&(b*=1+y.studious.vars()[1]/100);let F=Pe("elven");if(F>0&&(b*=1+y.studious.vars(1)[1]/100*F),e.tech.science&&e.tech.science>=8&&(b*=1.4),e.tech.science&&e.tech.science>=5){let me=$e(e.civic.scientist.workers,"scientist");e.race.high_pop&&(me=qe(me)),b*=1+me*.12}e.tech.anthropology&&e.tech.anthropology>=2&&(b*=1+Ka()*.05);let E=_e("teacher",0);E&&(b*=1+E/100);let B=_e("athleticism",2);B&&(b*=1-B/100);let oe=_e("muckraker",1);oe&&(b*=1+oe/100);let we=Math.round(e.city.library.count*b);a.Knowledge+=we,f.c.Knowledge[t("city_library")]=we+"v",e.tech.science&&e.tech.science>=3&&(e.civic.professor.impact=.5+e.city.library.count*.01)}if(e.city.wardenclyffe){let b=1e3;e.city.ptrait.includes("magnetic")&&(b+=et.magnetic.vars()[1]);let F=e.city.wardenclyffe.count*b;i.scientist+=N(e.city.wardenclyffe.count);let E=e.tech.science>=7?1500:1e3;if(F+=x.wardenclyffe*E,e.tech.supercollider){let oe=e.tech.tp_particles||e.tech.particles&&e.tech.particles>=3?12.5:25;F*=e.tech.supercollider/oe+1}e.space.satellite&&(F*=1+e.space.satellite.count*.04);let B=_e("athleticism",2);if(B&&(F*=1-B/100),a.Knowledge+=F,f.c.Knowledge[yr()]=F+"v",e.race.universe==="magic"){let oe=e.city.wardenclyffe.count*U(8);a.Mana+=oe,f.c.Mana[yr()]=oe+"v"}if(e.race.artifical){let oe=x.wardenclyffe*U(250);a.Food+=oe,f.c.Food[yr()]=oe+"v"}}if(e.race.logical){let b=e.tech.hasOwnProperty("high_tech")?e.tech.high_tech:0;b+=e.tech.hasOwnProperty("science")?e.tech.science:0;let F=e.resource[e.race.species].amount*y.logical.vars()[1]*b;a.Knowledge+=F,f.c.Knowledge[T[e.race.species].name]=F+"v"}if(e.portal.sensor_drone){let b=x.sensor_drone*(e.tech.infernite>=6?2500:1e3);a.Knowledge+=b,f.c.Knowledge[t("portal_sensor_drone_title")]=b+"v"}if(e.space.satellite){let b=e.space.satellite.count*(e.race.cataclysm||e.race.orbit_decayed?2e3:750);if((e.race.cataclysm||e.race.orbit_decayed)&&e.tech.supercollider){let F=e.tech.tp_particles||e.tech.particles&&e.tech.particles>=3?5:10;b*=e.tech.supercollider/F+1}a.Knowledge+=b,f.c.Knowledge[t("space_home_satellite_title")]=b+"v"}if(e.space.observatory&&e.space.observatory.count>0){let b=W.observatory*5e3;e.race.cataclysm&&e.space.satellite&&e.space.satellite.count>0&&(b*=1+e.space.satellite.count*.25),a.Knowledge+=b,f.c.Knowledge[t("space_moon_observatory_title")]=b+"v",e.race.cataclysm&&(i.professor+=N(W.observatory))}if(e.interstellar.laboratory&&yt.laboratory>0){e.tech.science>=16&&(i.scientist+=N(yt.laboratory));let b=yt.laboratory*1e4;if(e.tech.science>=15&&(b*=1+(e.race.cataclysm?W.exotic_lab:e.city.wardenclyffe.count)*.02),e.race.cataclysm&&x.s_gate&&Ke.scavenger&&(b*=1+Ke.scavenger*qt("gxy_alien2")*.75),e.tech.science>=21&&(b*=1.45),a.Knowledge+=b,f.c.Knowledge[t(e.race.universe==="magic"?"tech_sanctum":"interstellar_laboratory_title")]=b+"v",e.race.universe==="magic"){let F=yt.laboratory*U(12);a.Mana+=F,f.c.Mana[t(e.race.universe==="magic"?"tech_sanctum":"interstellar_laboratory_title")]=F+"v"}}if(e.city.biolab){let b=3e3;e.portal.sensor_drone&&e.tech.science>=14&&(b*=1+x.sensor_drone*.02),e.tech.science>=20&&(b*=3),e.tech.science>=21&&(b*=1.45),e.tech.biotech>=1&&(b*=2.5),e.race.elemental&&y.elemental.vars()[0]==="frost"&&(b*=1+qe(y.elemental.vars()[4]*e.resource[e.race.species].amount/100)),a.Knowledge+=x.biolab*b,f.c.Knowledge[t("city_biolab")]=x.biolab*b+"v"}if(e.space.zero_g_lab&&Math.min(W.zero_g_lab,x.zero_g_lab)>0){let b=Math.min(W.zero_g_lab,x.zero_g_lab),F=At("spc_enceladus"),E=Math.round(b*1e4*F);if(a.Knowledge+=E,f.c.Knowledge[t("tech_zero_g_lab")]=E+"v",e.resource.Cipher.display){let B=1e4*b;a.Cipher+=B,f.c.Cipher[t("tech_zero_g_lab")]=B+"v"}}if(e.race.warlord){let b=(e.race?.absorbed?.length||1)*5e5;if(Qa()){let F=$a("know");b*=F.mult}a.Knowledge+=b,f.c.Knowledge[t("portal_throne_of_evil_title")]=b+"v",a.Crates+=500,f.c.Crates[t("portal_throne_of_evil_title")]="500v",a.Containers+=500,f.c.Containers[t("portal_throne_of_evil_title")]="500v"}if(e.portal.twisted_lab&&e.portal.twisted_lab.count>0&&e.race.absorbed){let b=6e3+e.portal.twisted_lab.rank*2e3,F=x.twisted_lab*b*e.race.absorbed.length;if(e.tech.supercollider&&e.race.warlord){let E=e.tech.tp_particles||e.tech.particles&&e.tech.particles>=3?12.5:25;F*=e.tech.supercollider/E+1}a.Knowledge+=F,f.c.Knowledge[t("portal_twisted_lab_title")]=F+"v"}if(e.resource.Omniscience.display){if(e.eden.research_station){let b=1;e.race.warlord&&e.eden.corruptor&&(b=1+(x.corruptor||0)*.04);let F=(W.research_station||0)*Math.round(777*b);a.Omniscience+=F,f.c.Omniscience[t("eden_research_station_title")]=F+"v"}if(e.race.warlord&&e.portal.mortuary&&e.portal.corpse_pile){let b=e.portal.corpse_pile.count*(x.mortuary||0)*(x.encampment||0)*2;a.Omniscience+=b,f.c.Omniscience[t("eden_encampment_title")]=b+"v"}else if(x.ascension_trigger&&e.eden.hasOwnProperty("encampment")&&e.eden.encampment.asc){let b=d.interstellar.int_sirius.ascension_trigger.heatSink();b=b<0?Math.abs(b):0;let F=+(150+b**.95/10).toFixed(0),E=(x.encampment||0)*F;a.Omniscience+=E,f.c.Omniscience[t("eden_encampment_title")]=E+"v"}if(e.eden.archive){let b=(x.archive||0)*1013;a.Omniscience+=b,f.c.Omniscience[t("eden_archive_bd")]=b+"v"}}if(e.tech.isolation&&e.tauceti.alien_outpost&&e.resource.Cipher.display){let b=2e5;a.Cipher+=b,f.c.Cipher[t("tech_alien_outpost")]=b+"v"}if(e.portal.archaeology){let b=ta("ruins"),F=25e4;e.race.high_pop&&(F=qe(F));let E=Math.round(F*b.supress);a.Knowledge+=$e(e.civic.archaeologist.workers,"archaeologist")*E,f.c.Knowledge[t("portal_archaeology_bd")]=$e(e.civic.archaeologist.workers,"archaeologist")*E+"v"}if(x.embassy&&e.galaxy.symposium){let b=1750*x.dormitory,F=650*e.galaxy.trade.cur,E=0;if(e.tech.xeno>=7)for(let we=0;we=13&&(e.galaxy.freighter&&(B*=1+Ke.freighter*.03),e.galaxy.super_freighter&&(B*=1+Ke.super_freighter*.08)),B=Math.round(B),a.Money+=B,f.c.Money[t("interstellar_exchange_bd")]=B+"v"}}if(e.eden.eternal_bank){let b=_r()*(e.race.warlord?20:10);e.race.warlord&&e.eden.corruptor&&e.tech.asphodel>=12&&(b*=1+(x.corruptor||0)*.08);let E=e.eden.eternal_bank.count*U(b);a.Money+=E,f.c.Money[t("eden_eternal_bank_title")]=E+"v"}if(e.space.titan_bank){let b=_r()*2,E=e.space.titan_bank.count*U(b);a.Money+=E,f.c.Money[`${X().titan} ${t("city_bank")}`]=E+"v"}if(e.tauceti.colony&&e.tech.isolation){let b=_r()*25,F=e.tauceti.colony.count*U(b);a.Money+=F,f.c.Money[t("tau_home_colony")]=F+"v"}if(e.city.casino||e.space.spc_casino||e.tauceti.tauceti_casino||e.portal.hell_casino){let b=0;e.city.casino&&e.city.casino.count>0&&(b+=e.city.casino.count),e.space.spc_casino&&e.space.spc_casino.count>0&&(b+=e.space.spc_casino.count),e.tauceti.tauceti_casino&&e.tauceti.tauceti_casino.count>0&&(b+=e.tauceti.tauceti_casino.count),e.portal.hell_casino&&e.portal.hell_casino.count>0&&(b+=e.portal.hell_casino.count);let F=b*Kc();a.Money+=F,f.c.Money[Ze("casino")]=F+"v"}if(e.galaxy.resort){let b=x.resort*U(e.tech.world_control?1875e3:15e5);a.Money+=b,f.c.Money[t("galaxy_resort")]=b+"v"}if(e.tech.banking>=4){let b=250;e.tech.banking>=14?b=1e6:e.tech.banking>=11?b=1e3:e.tech.banking>=6&&(b=600);let F=b*(e.resource[e.race.species].amount+e.civic.garrison.workers);e.race.high_pop&&(F=qe(F)),a.Money+=F,f.c.Money[e.tech.banking>=14?t("tech_crypto_currency"):t("tech_bonds")]=F+"v"}if(x.moon_base){let b=x.moon_base*U(500);a.Iridium+=b,f.c.Iridium[t("space_moon_base_title")]=b+"v"}if(x.space_station&&(i.space_miner+=N(x.space_station*3),e.tech.asteroid>=5)){let b=x.space_station*U(5);a.Elerium+=b,f.c.Elerium[t("space_belt_station_title")]=b+"v"}if(W.exotic_lab){let b=W.exotic_lab*U(10);a.Elerium+=b,f.c.Elerium[t("space_red_exotic_lab_bd")]=b+"v";let F=500;if(e.tech.science>=13&&e.interstellar.laboratory&&(F+=yt.laboratory*25),e.tech.ancient_study&&e.tech.ancient_study>=2&&(F+=$r(!0)*15),e.tech.mass>=2){let B=$e(e.civic.scientist.workers,"scientist");e.race.high_pop&&(B=qe(B)),F+=x.mass_driver*B}e.race.cataclysm&&W.observatory&&(F*=1+W.observatory*.25),(e.race.cataclysm||e.race.orbit_decayed)&&e.portal.sensor_drone&&e.tech.science>=14&&(F*=1+x.sensor_drone*.02),e.tech.science>=21&&(F*=1.45),e.race.high_pop&&(F=qe(F));let E=W.exotic_lab*$e(e.civic.colonist.workers,"colonist")*F;a.Knowledge+=E,f.c.Knowledge[t("tech_exotic_bd")]=E+"v",(e.race.cataclysm||e.race.orbit_decayed)&&(i.scientist+=N(W.exotic_lab))}if(W.research_station){let F=200+(e.blood.attract?e.blood.attract*5:0);e.tech.science&&e.tech.science>=22&&x.embassy&&x.symposium&&(F*=1+x.symposium*qt("gxy_gorddon"));let E=W.research_station*qe(e.civic.ghost_trapper.workers)*F;a.Knowledge+=E,f.c.Knowledge[t("eden_research_station_title")]=E+"v"}if(e.tech.isolation&&W.infectious_disease_lab&&(i.professor+=N(W.infectious_disease_lab*2),i.scientist+=N(W.infectious_disease_lab)),e.race.warlord&&x.twisted_lab&&(i.professor+=N(x.twisted_lab*3),i.scientist+=N(x.twisted_lab*2)),e.race.wish&&e.race.wishStats&&e.race.wishStats.prof&&(i.scientist+=N(e.race.wishStats.prof)),W.decoder){let b=x.ai_colonist?$e(e.civic.titan_colonist.workers,"titan_colonist")+N(x.ai_colonist):$e(e.civic.titan_colonist.workers,"titan_colonist"),F=W.decoder*b*2500;e.race.high_pop&&(F=qe(F)),x.ai_core2&&(F*=1.25),a.Knowledge+=F,f.c.Knowledge[t("space_decoder_title")]=F+"v"}if(x.elerium_contain){let b=x.elerium_contain*U(100);a.Elerium+=b,f.c.Elerium[t("space_dwarf_elerium_contain_title")]=b+"v"}if(x.elerium_containment){let b=x.elerium_containment*U(1e3);a.Elerium+=b,f.c.Elerium[t("eden_elerium_containment",[e.resource.Elerium.name])]=b+"v"}if(x.shadow_mine){let b=x.shadow_mine*U(200);a.Elerium+=b,f.c.Elerium[t("portal_shadow_mine_title")]=b+"v"}if(x.corruptor){let b=x.corruptor*U(200);a.Elerium+=b,f.c.Elerium[t("eden_corruptor_title")]=b+"v"}if(e.city.foundry&&(i.craftsman+=N(e.city.foundry.count)),W.fabrication&&(i.craftsman+=N(W.fabrication),e.race.cataclysm&&(i.cement_worker+=N(W.fabrication))),e.tech.isolation&&W.tau_factory&&(i.craftsman+=N(W.tau_factory*5),i.cement_worker+=N(W.tau_factory*2)),e.race.warlord&&x.hell_factory&&(i.cement_worker+=N(x.hell_factory*5)),x.womling_station&&(i.craftsman+=N(x.womling_station*1),i.cement_worker+=N(x.womling_station*1)),x.stellar_forge&&(i.craftsman+=N(x.stellar_forge*2)),x.demon_forge&&(i.craftsman+=N(x.demon_forge*d.portal.prtl_wasteland.demon_forge.crafters())),e.tech.elysium&&e.tech.elysium>=18&&x.sacred_smelter&&(i.craftsman+=N(x.sacred_smelter*3)),e.portal.carport&&(i.hell_surveyor+=N(e.portal.carport.count)-e.portal.carport.damaged),x.archaeology&&(i.archaeologist+=N(x.archaeology*2)),W.ectoplasm_processor&&(i.ghost_trapper+=N(W.ectoplasm_processor*5)),x.elysanite_mine&&(i.elysium_miner+=N(x.elysanite_mine*2)),x.nexus){let b=x.nexus*U(4e3);a.Helium_3+=b,f.c.Helium_3[t("interstellar_nexus_title")]=b+"v";let F=x.nexus*U(3500);a.Oil+=F,f.c.Oil[t("interstellar_nexus_title")]=F+"v";let E=x.nexus*U(3e3);a.Deuterium+=E,f.c.Deuterium[t("interstellar_nexus_title")]=E+"v";let B=x.nexus*U(25);a.Elerium+=B,f.c.Elerium[t("interstellar_nexus_title")]=B+"v"}if(x.s_gate&&e.galaxy.gateway_station){let b=x.gateway_station*U(2e3);a.Helium_3+=b,f.c.Helium_3[t("galaxy_gateway_station")]=b+"v";let F=x.gateway_station*U(4500);a.Deuterium+=F,f.c.Deuterium[t("galaxy_gateway_station")]=F+"v";let E=x.gateway_station*U(50);a.Elerium+=E,f.c.Elerium[t("galaxy_gateway_station")]=E+"v"}if(x.s_gate&&x.telemetry_beacon){let b=e.tech.telemetry?1200:800;e.tech.science>=17&&(b+=Ke.scout_ship*25);let F=x.telemetry_beacon**2*b;a.Knowledge+=F,f.c.Knowledge[t("galaxy_telemetry_beacon_bd")]=F+"v"}if(x.s_gate&&Ke.scavenger){let b=Ke.scavenger*Math.round(l*25e3);a.Knowledge+=b,f.c.Knowledge[t("galaxy_scavenger")]=b+"v"}if(e.eden.encampment){let b=e.eden.encampment.count*U(250);a.Asphodel_Powder+=b,f.c.Asphodel_Powder[t("eden_encampment_title")]=b+"v"}if(f.t_route={},e.city.market.mtrade=0,e.race.banana&&(e.city.market.mtrade++,f.t_route[t("base")]=1),e.city.trade){let b=e.race.nomadic||e.race.xenophobic?e.tech.trade:e.tech.trade+1;if(e.tech.trade&&e.tech.trade>=3&&b--,e.race.flier&&(b+=y.flier.vars()[1]),e.city.market.mtrade+=b*e.city.trade.count,f.t_route[t("city_trade")]=b*e.city.trade.count,e.tech.fanaticism&&e.tech.fanaticism>=3){let F=Ka();e.city.market.mtrade+=F,f.t_route[e.race.cataclysm?t("space_red_ziggurat_title"):Ze("temple")]=F}}if(e.city.wharf){let b=e.city.wharf.count*2;e.city.market.mtrade+=b,f.t_route[t("city_wharf")]=b}if(e.space.gps&&e.space.gps.count>=4){let b=e.space.gps.count*2;e.city.market.mtrade+=e.space.gps.count*2,f.t_route[t("space_home_gps_title")]=b}if(e.city.storage_yard&&e.tech.trade&&e.tech.trade>=3){let b=e.city.storage_yard.count;e.city.market.mtrade+=b,f.t_route[t("city_storage_yard")]=b}if(e.portal.bazaar&&e.portal.spire){let b=e.portal.bazaar.count*e.portal.spire.count;e.city.market.mtrade+=b,f.t_route[t("portal_bazaar_title")]=b}if(e.tech.railway){let b=0;e.race.cataclysm||e.race.orbit_decayed?b=e.space.gps?Math.floor(e.space.gps.count/3):0:e.race.warlord?b=5:b=e.city.storage_yard?Math.floor(e.city.storage_yard.count/6):0,e.stats.achieve.banana&&e.stats.achieve.banana.l>=2&&b++,e.city.market.mtrade+=e.tech.railway*b,f.t_route[t("arpa_projects_railway_title")]=e.tech.railway*b}if(x.titan_spaceport){let b=x.titan_spaceport*U(250);a.Water+=b,f.c.Water[t("space_red_spaceport_title")]=b+"v"}if(e.tauceti.mining_pit&&(i.pit_miner+=N(W.mining_pit*(e.tech.isolation?6:8)),a.Materials+=W.mining_pit*1e6),e.civic.torturer.display&&e.tech.unfathomable&&e.tech.unfathomable>=2&&(i.torturer=e.city.captive_housing.count),e.race.universe==="magic"&&e.race.witch_hunter){let b=0;if(e.city.wardenclyffe){let E=e.city.wardenclyffe.count;E+=x.wardenclyffe,e.tech.roguemagic&&e.tech.roguemagic>=6&&(E/=2),f.c.Sus[yr()]=E+"v",b+=E}if(e.civic.scientist.workers>0){let E=e.civic.scientist.workers;e.civic.govern.type==="magocracy"&&(E/=2),E=qe(E),f.c.Sus[Se("wizard")]=E+"v",b+=E}if(e.city.coal_power&&!e.race.environmentalist){let E=x.coal_power;e.tech.roguemagic&&e.tech.roguemagic>=6&&(E/=2),f.c.Sus[t("city_mana_engine")]=E+"v",b+=E}if(e.city.pylon||e.space.pylon||e.tauceti.pylon){let E=0,B="city_pylon";(e.race.cataclysm||e.race.orbit_decayed)&&e.space.pylon?(E=e.space.pylon.count,B="space_red_pylon"):e.tech.isolation&&e.tauceti.pylon?(E=e.tauceti.pylon.count,B="tau_home_pylon"):e.city.pylon&&(E=e.city.pylon.count),e.tech.roguemagic&&e.tech.roguemagic>=5&&(E/=3),f.c.Sus[t(B)]=E+"v",b+=E}if(e.race.casting){let E=e.race.casting.total;e.tech.roguemagic&&e.tech.roguemagic>=2&&(e.tech.roguemagic>=4&&(E/=4),E-=qe(e.civic.priest.workers),E<0&&(E=0)),f.c.Sus[t("tech_rituals")]=E+"v",b+=E}if(e.race.totTransmute&&e.race.totTransmute>0){let E=e.race.totTransmute/5;f.c.Sus[t("tech_alchemy")]=E+"v",b+=E}let F=0;if(e.tech.explosives&&(F+=4),e.tech.military&&(e.tech.military>=10?F+=28:e.tech.military>=9?F+=24:e.tech.military>=8?F+=20:e.tech.military>=7?F+=16:e.tech.military>=6?F+=12:e.tech.military>=4?F+=8:e.tech.military>=3&&(F+=4)),f.c.Sus[t("witch_hunter_magic_tech")]=F+"v",b+=F,e.tech.roguemagic||(f.c.Sus[t("overt")]=b*5-b+"v",b*=5),e.tech.nexus){let E=e.tech.nexus*.15;f.c.Sus[t("arpa_projects_nexus_title")]=E+"v",b+=E}if(e.tech.syphon){let E=e.tech.syphon*2.5;f.c.Sus[t("arpa_syphon_title")]=E+"v",b+=E}if(e.portal.hasOwnProperty("soul_capacitor")){let E=x.soul_capacitor||0;e.portal.soul_capacitor.ecap=25e5*E,f.c.Sus[t("portal_soul_capacitor_title")]=E/3+"v",b+=E/3}if(e.tech.roguemagic&&e.tech.roguemagic>=3&&e.city.conceal_ward){let E=e.city.conceal_ward.count;e.tech.roguemagic>=8&&(E*=1.25),f.c.Sus[t("city_conceal_ward")]=-E+"v",b-=E}b<0&&(b=0),b=Math.floor(b),e.resource.Sus.amount=b,b>=50&&!e.race.witch_hunter_warned?(e.race.witch_hunter_warned=1,L(t("witch_hunter_warning"),"danger",!1,["progress"])):b>=80&&e.race.witch_hunter_warned&&e.race.witch_hunter_warned===1&&(e.race.witch_hunter_warned=2,L(t("witch_hunter_warning2"),"danger",!1,["progress"])),b>=100&&(e.civic.foreign.gov0.hstl=100,e.civic.foreign.gov1.hstl=100,e.civic.foreign.gov2.hstl=100,e.race.truepath&&(e.civic.foreign.gov3.hstl=100))}if(f.gt_route={},e.galaxy.freighter&&(f.gt_route[t("galaxy_freighter")]=Ke.freighter*2),e.galaxy.super_freighter&&(f.gt_route[t("galaxy_super_freighter")]=Ke.super_freighter*5),e.galaxy.bolognium_ship&&(i.crew+=e.galaxy.bolognium_ship.on*d.galaxy.gxy_gateway.bolognium_ship.ship.civ()),e.galaxy.scout_ship&&(i.crew+=e.galaxy.scout_ship.on*d.galaxy.gxy_gateway.scout_ship.ship.civ()),e.galaxy.corvette_ship&&(i.crew+=e.galaxy.corvette_ship.on*d.galaxy.gxy_gateway.corvette_ship.ship.civ()),e.galaxy.frigate_ship&&(i.crew+=e.galaxy.frigate_ship.on*d.galaxy.gxy_gateway.frigate_ship.ship.civ()),e.galaxy.cruiser_ship&&(i.crew+=e.galaxy.cruiser_ship.on*d.galaxy.gxy_gateway.cruiser_ship.ship.civ()),e.galaxy.dreadnought&&(i.crew+=e.galaxy.dreadnought.on*d.galaxy.gxy_gateway.dreadnought.ship.civ()),e.galaxy.freighter&&(i.crew+=e.galaxy.freighter.on*d.galaxy.gxy_gorddon.freighter.ship.civ()),e.galaxy.super_freighter&&(i.crew+=e.galaxy.super_freighter.on*d.galaxy.gxy_alien1.super_freighter.ship.civ()),e.galaxy.armed_miner&&(i.crew+=e.galaxy.armed_miner.on*d.galaxy.gxy_alien2.armed_miner.ship.civ()),e.galaxy.scavenger&&(i.crew+=e.galaxy.scavenger.on*d.galaxy.gxy_alien2.scavenger.ship.civ()),e.portal.transport&&(i.crew+=e.portal.transport.on*d.portal.prtl_lake.transport.ship.civ()),e.tauceti.infectious_disease_lab){let b=39616;if(e.tech.supercollider&&e.tech.isolation){let F=e.tech.tp_particles||e.tech.particles&&e.tech.particles>=3?12.5:25;b*=e.tech.supercollider/F+1}if(a.Knowledge+=x.infectious_disease_lab*Math.round(b),f.c.Knowledge[d.tauceti.tau_home.infectious_disease_lab.title()]=x.infectious_disease_lab*b+"v",e.tech.isolation){let F=W.infectious_disease_lab*U(375);a.Elerium+=F,f.c.Elerium[d.tauceti.tau_home.infectious_disease_lab.title()]=F+"v"}}if(e.race.truepath&&e.tauceti.overseer&&e.tech.tau_red&&e.tech.tau_red>=5){let b=0,F=e.tauceti.overseer.injured,E=0,B=0,oe=0;e.race.womling_friend?(B+=25+W.overseer*d.tauceti.tau_red.overseer.val(),E+=75+W.womling_fun*d.tauceti.tau_red.womling_fun.val()):e.race.womling_god?(B+=75+W.overseer*d.tauceti.tau_red.overseer.val(),E+=40+W.womling_fun*d.tauceti.tau_red.womling_fun.val()):e.race.womling_lord&&(B+=W.overseer*d.tauceti.tau_red.overseer.val(),E+=30+W.womling_fun*d.tauceti.tau_red.womling_fun.val());let we=e.tech.womling_pop&&e.tech.womling_pop>=2?6:5;b=W.womling_village*we;let me=W.womling_farm*2;me>b&&(me=b);let De=e.tech.womling_pop?8:6;e.tech.womling_gene&&(De+=2),b>me*De&&(b=me*De);let ue=b-me-F,Be=0;if(W.womling_lab){Be=W.womling_lab,Be>ue&&(Be=ue),ue-=Be;let Ne=Be*Math.round(25e3*e.tauceti.overseer.prod/100);if(a.Knowledge+=Ne,f.c.Knowledge[t("interstellar_laboratory_title")]=Ne+"v",Math.rand(0,10)=5?4.9:5;e.race.lone_survivor&&(qr-=.1),e.tauceti.womling_lab.tech>=Math.round((e.tech.womling_tech+2)**qr)&&(e.tech.womling_tech++,e.tauceti.womling_lab.tech=0,L(t("tau_red_womling_advancement",[e.tech.womling_tech]),"advanced",!1,["progress"]),de())}}let ye=W.womling_mine*6;ye>ue&&(ye=ue),ue-=ye;let gt=e.tech.tech_womling_firstaid?3:4;if(Math.rand(0,10)===0){let Ne=Math.rand(0,ye+Be);Ne>F&&(F=Ne)}else F>0&&Math.rand(0,gt)===0&&F--;e.tauceti.hasOwnProperty("womling_farm")&&(e.tauceti.womling_farm.farmers=me),e.tauceti.hasOwnProperty("womling_mine")&&(e.tauceti.womling_mine.miners=ye),e.tauceti.hasOwnProperty("womling_lab")&&(e.tauceti.womling_lab.scientist=Be),B-=ye,E-=ye,E-=me,E-=F,B>100?B=100:B<0&&(B=0),E>100?E=100:E<0&&(E=0),oe=Math.round((B+E)/2),e.tauceti.overseer.loyal=B,e.tauceti.overseer.morale=E,e.tauceti.overseer.pop=b,e.tauceti.overseer.working=me+ye+Be,e.tauceti.overseer.injured=F,e.tauceti.overseer.prod=oe}["inspired","distracted","stimulated","motivated"].forEach(function(b){e.race[b]&&(e.race[b]--,e.race[b]<=0&&delete e.race[b])});let h=e.resource[e.race.species].amount-a[e.race.species];if(h>0&&(e.race.orbit_decayed&&e.stats.days===e.race.orbit_decay?L(t("tragic_death",[h]),"danger"):(L(t(h===1?"abandon1":"abandon2",[h]),"danger"),e.civic.homeless+=h)),x.world_controller){let b=.25;e.interstellar.far_reach&&x.far_reach>0&&(b+=x.far_reach*.01),e.tech.science>=19&&(b+=.15);let F=Math.round(a.Knowledge*b);a.Knowledge+=F,f.c.Knowledge[t("space_dwarf_collider_title")]=F+"v"}if(x.alien_outpost){let b=0;e.tech.isolation&&(b=e.race.lone_survivor?35e5:65e5,a.Knowledge+=b);let E=Math.round(a.Knowledge*.2);a.Knowledge+=E,f.c.Knowledge[t("tech_alien_outpost")]=E+b+"v"}if(e.eden.fortress&&e.tech.hasOwnProperty("celestial_warfare")){let b=e.tech.celestial_warfare*10;b>30&&(b=30),e.eden.fortress.detector=100-b,W.bunker&&e.tech.celestial_warfare>=4&&(e.eden.fortress.detector-=W.bunker*3,e.eden.fortress.detector<0&&(e.eden.fortress.detector=0))}let v=a.Crates,_=a.Containers;if(Object.keys(a).forEach(function(b){a.Crates-=e.resource[b].crates}),Object.keys(a).forEach(function(b){a.Containers-=e.resource[b].containers}),a.Crates<0){let b=0-a.Crates;Object.keys(a).forEach(function(F){if(b>0){let E=e.resource[F].crates;E>b&&(E=b),a.Crates+=E,e.resource[F].crates-=E,b-=E}})}if(a.Containers<0){let b=0-a.Containers;Object.keys(a).forEach(function(F){if(b>0){let E=e.resource[F].containers;E>b&&(E=b),a.Containers+=E,e.resource[F].containers-=E,b-=E}})}f.c.Crates[t("crates_used")]=a.Crates-v+"v",f.c.Containers[t("crates_used")]=a.Containers-_+"v";let g=Oi(),w=Si();Object.keys(a).forEach(function(b){let F=e.resource[b].crates*g;a[b]+=F;let E=e.resource[b].containers*w;a[b]+=E,f.c[b]&&(f.c[b][t("resource_Crates_plural")]=F+"v",f.c[b][t("resource_Containers_plural")]=E+"v"),e.resource[b].max=a[b],e.resource[b].amount>e.resource[b].max&&b!="Sus"?e.resource[b].amount=e.resource[b].max:e.resource[b].amount<0,e.resource[b].amount>=e.resource[b].max*.99?$(`#res${b} .count`).hasClass("has-text-warning")||$(`#res${b} .count`).addClass("has-text-warning"):$(`#res${b} .count`).hasClass("has-text-warning")&&$(`#res${b} .count`).removeClass("has-text-warning")});let S=!1,C=0,z=0;if(Object.keys(i).forEach(function(b){e.civic[b].max===-1&&e.civic[b].display&&b!=="unemployed"&&b!=="scavenger"&&z++}),["Scarletite","Quantium"].forEach(function(b){li(b)}),Object.keys(i).forEach(function(b){e.civic[b].max=i[b],e.civic[b].workers>e.civic[b].max&&e.civic[b].max!==-1?e.civic[b].workers=e.civic[b].max:(!e.civic[b].display||e.civic[b].workers<0)&&(e.civic[b].workers=0),e.race.servants&&(e.civic[b].max===-1&&!e.race.servants.jobs.hasOwnProperty(b)&&(e.race.servants.jobs[b]=0,S=!0),e.race.servants.jobs.hasOwnProperty(b)&&(!e.civic[b].display&&(b!=="scavenger"||z>0)?e.race.servants.jobs[b]=0:C+=e.race.servants.jobs[b],C>e.race.servants.max&&e.race.servants.jobs[b]>0&&(e.race.servants.jobs[b]--,C--)))}),S?Pc():e.race.servants&&(e.race.servants.force_scavenger=z===0,e.race.servants.used=C),e.race.servants&&e.race.servants.hasOwnProperty("smax")&&e.race.servants.smax>0){let b=0;Object.keys(e.race.servants.sjobs).forEach(function(F){e.resource[F].display||(e.race.servants.sjobs[F]=0),b+=e.race.servants.sjobs[F],b>e.race.servants.smax&&(e.race.servants.sjobs[F]-=b-e.race.servants.smax),e.race.servants.sjobs[F]<0&&(e.race.servants.sjobs[F]=0)}),e.race.servants.sused=b}if(e.race.gravity_well){let b=0;["hunter","forager","farmer","lumberjack","quarry_worker","crystal_miner","scavenger","miner","coal_miner","craftsman","cement_worker","space_miner","hell_surveyor","pit_miner"].forEach(function(F){b+=e.civic[F].workers,e.race.servants&&e.race.servants.jobs[F]&&(b+=e.race.servants.jobs[F])}),e.city.oil_well&&(b+=e.city.oil_well.count*(e.tech.teamster&&e.tech.teamster>=3?0:2)),e.city.factory&&x.factory&&(b+=x.factory*2),e.space.red_factory&&x.red_factory&&(b+=x.red_factory*2),e.space.moon_base&&W.iridium_mine&&(b+=W.iridium_mine*2),e.space.moon_base&&W.helium_mine&&(b+=W.helium_mine),e.tech.mars&&W.red_mine&&(b+=W.red_mine*3),x.outpost&&(b+=x.outpost*3),e.race.servants&&e.race.servants.hasOwnProperty("smax")&&e.race.servants.smax>0&&(b+=e.race.servants.sused),e.race.teamster=b}if(e.civic.space_miner.display&&e.space.space_station&&(e.space.space_station.s_max=$e(e.civic.space_miner.workers,"space_miner")),e.portal.hasOwnProperty("transport")){let b=0;Ke.transport&&(b=Ke.transport*(e.stats.achieve.what_is_best&&e.stats.achieve.what_is_best.e>=4?8:5)),e.portal.transport.cargo.max=b}if(e.portal.hasOwnProperty("purifier")){let b=100,F=1e4;Pa.base_camp&&(F*=1+Pa.base_camp*.4),Pa.port&&(b+=Pa.port*F),e.portal.purifier.sup_max=Math.round(b)}let O=e.race.truepath?5:3,k=e.race.blurry?2:0,A=Pe("yeti");A>=.25&&(k+=A>=.5?2:1);for(let b=0;b0&&(e.civic.foreign[`gov${b}`].trn--,e.civic.foreign[`gov${b}`].trn===0&&e.civic.foreign[`gov${b}`].spy++),e.civic.foreign[`gov${b}`].sab>0&&(e.civic.foreign[`gov${b}`].sab--,e.civic.foreign[`gov${b}`].sab===0))switch(e.civic.foreign[`gov${b}`].act){case"influence":if(Math.floor(R(0,4+k))===0)ol(b);else{let B=Math.floor(R(e.tech.spy>=5?2:1,e.tech.spy>=5?8:6));r==="scorpio"&&(B+=Bt("scorpio")[1]),e.civic.foreign[`gov${b}`].hstl-=B,e.civic.foreign[`gov${b}`].hstl<0&&(e.civic.foreign[`gov${b}`].hstl=0),L(t("civics_spy_influence_success",[mt(b),B]),"success",!1,["spy"])}break;case"sabotage":if(Math.floor(R(0,3+k))===0)ol(b);else{let B=Math.floor(R(e.tech.spy>=5?2:1,e.tech.spy>=5?8:6));r==="scorpio"&&(B+=Bt("scorpio")[1]),e.civic.foreign[`gov${b}`].mil-=B,e.civic.foreign[`gov${b}`].mil<50&&(e.civic.foreign[`gov${b}`].mil=50),L(t("civics_spy_sabotage_success",[mt(b),B]),"success",!1,["spy"])}break;case"incite":if(Math.floor(R(0,2+Math.floor(k/2)))===0)ol(b);else{let B=Math.floor(R(e.tech.spy>=5?2:1,e.tech.spy>=5?8:6));r==="scorpio"&&(B+=Bt("scorpio")[1]),e.civic.foreign[`gov${b}`].unrest+=B,e.civic.foreign[`gov${b}`].unrest>100&&(e.civic.foreign[`gov${b}`].unrest=100),L(t("civics_spy_incite_success",[mt(b),B]),"success",!1,["spy"])}break;case"annex":if(b>=3)break;let F=!e.tech.gov_fed&&!Cr();e.civic.foreign[`gov${b}`].anx=!0,L(t("civics_spy_annex_success",[mt(b)]),"success",!1,["spy"]),F&&de();break;case"purchase":if(b>=3)break;let E=!e.tech.gov_fed&&!Cr();e.civic.foreign[`gov${b}`].buy=!0,L(t("civics_spy_purchase_success",[mt(b)]),"success",!1,["spy"]),E&&de();break}if(e.race.banana){let b=!1,F=0;if(Object.keys(e.resource).forEach(function(E){e.resource[E].hasOwnProperty("trade")&&e.resource[E].trade<0&&(b?e.resource[E].trade=0:b=E),e.resource[E].hasOwnProperty("trade")&&e.resource[E].trade>0&&(F+=e.resource[E].trade)}),e.resource[b]&&e.resource[b].trade<=-500){let E=wt();e.stats.banana.b4[E]=!0,E!=="m"&&E!=="l"&&(e.stats.banana.b4.l=!0),F>=500&&We("banana")}}if(e.galaxy.defense)for(let b=ya.length-1;b>=0;b--){let F=ya[b],E=0;for(let B=uc.length-1;B>=0;B--){let oe=uc[B];if(e.galaxy.defense.hasOwnProperty(oe)){if(E+=e.galaxy.defense[oe][F],isNaN(e.galaxy.defense[oe][F])&&(e.galaxy.defense[oe][F]=0),E>Ke[F]){let we=E-Ke[F];e.galaxy.defense[oe][F]-=we}e.galaxy.defense[oe][F]<0&&(e.galaxy.defense[oe][F]=0)}}if(E=2&&G.push("slave_market"),G.forEach(function(b){if(d.city[b]&&d.city[b].cost){let F=d.city[b],E=$("#"+F.id);if(E.length>0&&(Zt(F,!0)?(E.hasClass("cnam")&&E.removeClass("cnam"),Zt(F)?E.hasClass("cna")&&E.removeClass("cna"):E.hasClass("cna")||E.addClass("cna")):(E.hasClass("cnam")||E.addClass("cnam"),E.hasClass("cna")||E.addClass("cna"))),e.city[b]){let B=Hr(F,!1,!0);e.city[b].time=ft(B.t),e.city[b].bn=B.r}}}),Object.keys(d.tech).forEach(function(b){if(d.tech[b]&&d.tech[b].cost){let F=d.tech[b],E=$("#"+F.id);E.length>0&&(Zt(F,!0)?(E.hasClass("cnam")&&E.removeClass("cnam"),Zt(F)?E.hasClass("cna")&&E.removeClass("cna"):E.hasClass("cna")||E.addClass("cna")):(E.hasClass("cnam")||E.addClass("cnam"),E.hasClass("cna")||E.addClass("cna")))}});let te=["space","interstellar","galaxy","portal","tauceti","eden"];for(let b=0;b0&&(Zt(we,!0)?(me.hasClass("cnam")&&me.removeClass("cnam"),Zt(we)?me.hasClass("cna")&&me.removeClass("cna"):me.hasClass("cna")||me.addClass("cna")):(me.hasClass("cnam")||me.addClass("cnam"),me.hasClass("cna")||me.addClass("cna"))),e[oe][B]&&(e[oe][B].time=ft(Hr(we)))}})})}if(e.space.swarm_control&&(e.space.swarm_control.s_max=e.space.swarm_control.count*d.space.spc_sun.swarm_control.support()),e.arpa.sequence&&e.arpa.sequence.on&&zo){let b=Go();if(e.arpa.sequence.labs=b,e.arpa.sequence.time-=e.arpa.sequence.boost?b*2:b,e.arpa.sequence.progress=e.arpa.sequence.max-e.arpa.sequence.time,e.arpa.sequence.time<=0){if(e.arpa.sequence.max=5e4*(1+e.race.mutation**2),e.race.adaptable){let F=1-y.adaptable.vars()[0]/100;e.arpa.sequence.max=Math.floor(e.arpa.sequence.max*F)}if(e.arpa.sequence.progress=0,e.arpa.sequence.time=e.arpa.sequence.max,e.tech.genetics===2)L(t("genome",[ut("name")]),"success",!1,["progress"]),e.tech.genetics=3;else{e.race.mutation++;let F=Xi(1),E=1+(e.genes.synthesis?e.genes.synthesis:0),B=2**(e.race.mutation-1)*E;e.stats.achieve.creator&&(B=Math.round(B*(1+e.stats.achieve.creator.l*.5))),e.resource.Genes.amount+=B,e.resource.Genes.display=!0;let oe=e.genes.plasma?e.race.mutation:1;e.genes.plasma&&oe>3&&(e.genes.plasma>=2?oe=oe>5?5:oe:oe=3);let we=oe>1?"_plural":"";e.race.universe==="antimatter"?(we=t("resource_AntiPlasmid"+we+"_name"),e.stats.antiplasmid+=oe,e.prestige.AntiPlasmid.count+=oe,le("cross")):(we=t("resource_Plasmid"+we+"_name"),e.stats.plasmid+=oe,e.prestige.Plasmid.count+=oe),tt("Crispr"),L(t("gene_therapy",[t("trait_"+F+"_name"),B,oe,we]),"success",!1,["progress"])}tt("Genetics"),de()}}if(e.city.foundry){let b=e.civic.craftsman.workers;(e.race.kindling_kindred||e.race.smoldering)&&e.city.foundry.Plywood>0&&(e.civic.craftsman.workers-=e.city.foundry.Plywood,e.city.foundry.crafting-=e.city.foundry.Plywood,e.city.foundry.Plywood=0);let F=Ji();Object.keys(F).forEach(function(E){for(;e.city.foundry[E]>b&&e.city.foundry[E]>0;)e.city.foundry[E]--,e.city.foundry.crafting--;b-=e.city.foundry[E]})}e.tech.foundry===3&&(e.race.kindling_kindred||e.race.smoldering)&&(e.tech.foundry=4,de()),(e.race.kindling_kindred||e.race.smoldering)&&(e.civic.lumberjack.workers=0,e.civic.lumberjack.assigned=0,e.resource.Lumber.crates=0,e.resource.Lumber.containers=0,e.resource.Lumber.trade=0),(e.race.kindling_kindred||e.race.smoldering)&&e.city.foundry&&e.city.foundry.Plywood&&(e.city.foundry.Plywood=0),rt("fool",2023)&&!e.race.hooved?e.resource.Horseshoe.display=!0:e.race.hooved||(e.resource.Horseshoe.display=!1),Eo(Ao(!1));let Y=W.iron_ship+W.iridium_ship;if(Y>0&&e.tech.asteroid&&e.tech.asteroid===3&&Math.rand(0,250)<=Y&&(e.tech.asteroid=4,e.resource.Elerium.display=!0,H("Elerium",1,!0),de(),L(t("discover_elerium"),"info",!1,["progress"])),e.tech.asteroid&&e.tech.asteroid===4&&e.resource.Elerium.amount===0&&H("Elerium",1,!0),x.outpost>0&&e.tech.gas_moon&&e.tech.gas_moon===1&&Math.rand(0,100)<=x.outpost&&(M(d.space.spc_gas_moon.oil_extractor),e.tech.gas_moon=2,L(t("discover_oil",[X().gas_moon]),"info",!1,["progress"]),Nt()),e.portal.hasOwnProperty("mechbay")&&e.tech.hell_spire&&e.tech.hell_spire>=9){e.portal.spire.boss||Mn(),ho(),e.portal.hasOwnProperty("spire")&&e.portal.spire.count>=50&&!e.tech.edenic&&Object.keys(e.pillars).length>=10&&(L(t("eden_purify_well_msg",[50]),"info",!1,["progress"]),e.tech.edenic=1,de());let b=0,F=e.eden.mech_station?e.eden.mech_station.mechs:0;for(let E=0;E0&&B.size!=="collector"?F--:e.portal.hasOwnProperty("waygate")&&e.tech.hasOwnProperty("waygate")&&e.portal.waygate.on===1&&e.tech.waygate>=2&&e.portal.waygate.progress<100?b+=dn(B,!0):b+=dn(B,!1)}if(e.portal.hasOwnProperty("waygate")&&e.tech.hasOwnProperty("waygate")&&e.portal.waygate.on===1&&e.tech.waygate>=2&&e.portal.waygate.progress<100?(e.portal.waygate.progress+=b,e.portal.waygate.time=b===0?ft(-1):ft((100-e.portal.waygate.progress)/b),e.portal.spire.time=ft(-1)):(e.portal.spire.progress+=b,e.portal.spire.time=b===0?ft(-1):ft((100-e.portal.spire.progress)/b),e.tech.waygate&&e.tech.waygate>=2&&(e.portal.waygate.time=ft(-1))),e.portal.hasOwnProperty("waygate")&&e.portal.waygate.on===1&&e.portal.waygate.progress>=100&&(e.portal.waygate.progress=100,e.portal.waygate.on=0,e.tech.waygate=3,e.resource.Demonic_Essence.display=!0,e.resource.Demonic_Essence.amount=1,de()),e.portal.spire.progress>=100){e.portal.spire.progress=0;let E=Number(Xt()),B=E;e.genes.blood&&e.genes.blood>=2&&(B*=2),e.prestige.Blood_Stone.count+=B,e.stats.blood+=B,tt("Blood"),e.tech.hasOwnProperty("b_stone")||(e.tech.b_stone=1,de()),L(`${t("portal_spire_conquest",[t(`portal_mech_boss_${e.portal.spire.boss}`),e.portal.spire.count])} ${t(B===1?"portal_spire_conquest_stone":"portal_spire_conquest_stones",[B])}`,"info",!1,["progress","hell"]),e.portal.spire.count++,e.portal.spire.count>10&&e.tech.hell_spire&&e.tech.hell_spire<10&&(e.tech.hell_spire=10,de());let oe=wt();e.stats.spire.hasOwnProperty(oe)||(e.stats.spire[oe]={s0:0,s1:0,s2:0,s3:0,s4:0}),e.portal.spire.count>e.stats.spire[oe][`s${E-1}`]&&(e.stats.spire[oe][`s${E-1}`]=e.portal.spire.count),(!e.stats.spire[oe].hasOwnProperty(e.portal.spire.boss)||E>e.stats.spire[oe][e.portal.spire.boss])&&(e.stats.spire[oe][e.portal.spire.boss]=E),(e.portal.spire.boss==="djinni"&&e.race.species==="djinn"||e.portal.spire.boss===e.race.species)&&le("doppelganger"),Mn(),Kt()}}if(e.race.fasting&&e.portal.oven_complete){let b=0;if(x.oven_complete){if(b=25e-5,e.portal.dish_life_infuser&&e.portal.dish_life_infuser.on&&(b*=1+.15*e.portal.dish_life_infuser.on),e.portal.dish_soul_steeper&&e.portal.dish_soul_steeper.on&&e.portal.spire){let F=.5;e.race.angry&&(F-=y.angry.vars()[0]/100),e.race.malnutrition&&(F+=y.malnutrition.vars()[0]/100);let E=.03+(e.race.malnutrition?.01:0)+(e.race.angry?-.01:0),B=Math.min(e.portal.dish_soul_steeper.on,Math.floor(F/E));b*=1+.05*(e.portal.spire.count-1)*B}e.portal.devilish_dish.done+=b,e.portal.devilish_dish.done=Math.min(e.portal.devilish_dish.done,100),e.portal.devilish_dish.count=Math.floor(e.portal.devilish_dish.done),e.portal.devilish_dish.done>=.05&&e.tech.dish===3&&(L(t("dish_progress"),"info",!1,["progress"]),e.tech.dish=4,de())}e.portal.devilish_dish.time=b===0?ft(-1):ft((100-e.portal.devilish_dish.done)/b)}if(e.tech.asphodel&&e.tech.asphodel===4&&Math.rand(0,25)===0&&(e.tech.asphodel=5,de(),L(t("eden_asphodel_hostile"),"info",!1,["progress"])),e.race.cannibalize&&e.city.s_alter&&(e.city.s_alter.rage>0&&e.city.s_alter.rage--,e.city.s_alter.regen>0&&e.city.s_alter.regen--,e.city.s_alter.mind>0&&e.city.s_alter.mind--,e.city.s_alter.mine>0&&e.city.s_alter.mine--,e.city.s_alter.harvest>0&&e.city.s_alter.harvest--,$('#popper[data-id="city-s_alter"]').length>0&&bs(d.city.s_alter,"city","s_alter")),e.race.casting){let b=0;qo.forEach(function(F){e.race.casting[F]&&(b+=e.race.casting[F])}),e.race.casting.total=b}let se=!1;if(e.tech.r_queue&&e.r_queue.display){let b=-1,F=!1,E=!1,B=0,oe=0,we={t:{t:0,rt:0},r:{},rr:{},id:{}};for(let ue=0;ue=ye.grant[1]){e.r_queue.queue.splice(ue,1),Ie(`rq${F.id}`);break}else if(Zt(ye,!0)){e.r_queue.queue[ue].cna=!1;let gt=gr(Be.type,!1),Ne=e.settings.qAny_res?Hr(ye):Hr(ye,we,!1,gt);Ne>=0?(!E&&Zt(ye)&>?(F=ye,b=ue,e.settings.qAny_res&&(E=!0)):(gt&&(!E&&Ne<=1&&(se=!0),B+=Ne),oe+=Ne),!e.settings.qAny_res&>&&(E=!0),e.r_queue.queue[ue].time=gt?B:oe):e.r_queue.queue[ue].time=Ne,e.r_queue.queue[ue].req=!!gt}else e.r_queue.queue[ue].cna=!0,e.r_queue.queue[ue].time=-1;e.r_queue.queue[ue].qa=!!e.settings.qAny_res}b>=0&&F&&!e.r_queue.pause&&F.action({isQueue:!0})&&(L(t("research_success",[e.r_queue.queue[b].label]),"success",!1,["queue","research_queue"]),Dc(e.r_queue.queue[b].type),F.post&&F.post(),e.r_queue.queue.splice(b,1),Ie(`rq${F.id}`),gs()),e.r_queue.queue.length>e.r_queue.max&&e.r_queue.queue.splice(e.r_queue.max);let me={},De=[];gr("club",me);for(let ue=0;ue0)for(let ue=De.length-1;ue>=0;ue--)e.r_queue.queue.splice(De[ue],1)}e.arpa.sequence&&e.arpa.sequence.auto&&e.tech.genetics&&e.tech.genetics>=8&&g0(se),x.soul_forge&&V({el:"#fort"},"update"),Zr()}if(e.tech.queue&&e.queue.display){let c=-1,l=!1,h=!1,v=["space","interstellar","galaxy","portal","tauceti","eden"],_=0,g={t:{t:0,rt:0},r:{},rr:{},id:{}},w=!1;for(let k=0;k=0){_+=Y,A.time=_;for(let se=1;se=0&&(e.settings.qAny&&!e.queue.pause&&A.time>1?Gn(A.type,100,!0):h||(l=G,c=k,w=!0,h=!0))}else if(Zt(G,!0,!!G.doNotAdjustCost,!0)){A.cna=!1;let te=Hr(G,g);if(A.bres=!1,te>=0){!h&&Zt(G,!1,!!G.doNotAdjustCost)?(l=G,c=k,w=!1,e.settings.qAny&&(h=!0)):_+=te,e.settings.qAny||(h=!0),A.time=_;let Y=!1;for(let se=1;se=0&&l&&!e.queue.pause){let k=!1;if(w){let A=e.queue.queue[c].label;Gn(e.queue.queue[c].type,100,!0,!0)&&(L(t("build_success",[A]),"success",!1,["queue","building_queue"]),e.queue.queue[c].q>1?e.queue.queue[c].q--:(Ie(`q${l.id}${c}`),e.queue.queue.splice(c,1),Er()))}else if(l.hasOwnProperty("type")&&l.type==="tp-ship")Fl(l)&&(Ie(`q${l.id}${c}`),e.queue.queue.splice(c,1),Er());else if(l.hasOwnProperty("type")&&l.type==="hell-mech")uu(l)&&(Ie(`q${l.id}${c}`),e.queue.queue.splice(c,1),Er());else{let A=e.queue.queue[c].q,G=e.queue.queue[c],te=l.queue_complete?l.queue_complete():1;for(let Y=0;Y1?e.queue.queue[c].q--:(Ie(`q${l.id}${c}`),e.queue.queue.splice(c,1),Er()),e.race.inflation&&e.tech.primitive&&(!l.hasOwnProperty("inflation")||l.inflation)&&e.race.inflation++;k&&Gc(l,G.action,G.type)}}let S=!1,C=0,z=[],O=!1;for(let k=0;ke.queue.max){let A=Math.ceil(e.queue.queue[k].q/e.queue.queue[k].qs)-(C-e.queue.max);A===0?e.queue.queue.splice(k):(e.queue.queue[k].q=A*e.queue.queue[k].qs,e.queue.queue.splice(k+1))}if(e.settings.q_merge==="merge_nearby"){if(S===e.queue.queue[k].id){Ie(`q${e.queue.queue[k].id}${k}`),e.queue.queue[k-1].q+=e.queue.queue[k].q,e.queue.queue.splice(k,1),Er();break}S=e.queue.queue[k].id}else if(e.settings.q_merge==="merge_all"){let A=!1;for(let G=0;G=0&&v>e.resource[h].max,g=c.attr("data-ok")?c.attr("data-ok"):"has-text-dark";e.resource[h].amount+e.resource[h].diffw.clientHeight)l+=w.scrollHeight-w.clientHeight;else if(["auto","shrink"].includes(e.settings.q_resize)){let S=v;w.childNodes.forEach(function(C){S+=C.clientHeight||0}),w.clientHeight>S&&(l=Math.min(l,S))}}c<_&&(l>_&&(l-=_-c),c=_),l<_&&(l=_),c+l>g&&(c-=c+l-g,cg&&(l-=c+l-g,l0&&$("#mechList").css("height",`calc(100vh - 11.5rem - ${$("#mechAssembly").height()}px)`),$("#shipList").length>0&&$("#shipList").css("height",`calc(100vh - 11.5rem - ${$("#shipPlans").height()}px)`)}var Xp={1:1.1,2:1.25,3:1.5},nl=60;function e_(){let r=new Date,a=Ya();if(e.race.species!=="protoplasm"){if(e.settings.tabLoad||e.settings.civTabs===2&&e.settings.govTabs===2){let o=ga(),c=!1;Object.keys(o).forEach(function(l){o[l].l.forEach(function(h){let v=h.split(":"),_=$i(v[0]),g=v[0]==="city"?v[0]:_,w=v[0]==="city"?d.city[v[1]]:d[_][v[0]][v[1]],S=$(`#pg${w.id}${l}`);o[l].s&&(S.length===0||Zc(w,g,v[0],v[1])&&S.hasClass("inactive"))&&(c=!0)})}),c&&Ha()}if(e.tech.syphon&&e.tech.syphon>=80){Ae.w&&Ae.w.terminate();let o=$('
    ');$("body").append(o),setTimeout(function(){o.addClass("burn")},125),setTimeout(function(){o.addClass("b")},150),setTimeout(function(){o.addClass("c")},2e3),setTimeout(function(){$l()},4e3)}if(e.portal.fortress&&!e.race.warlord?cu():e.race.warlord&&e.portal.minions&&e.portal.minions.count>0&&lu(),e.civic.govern.rev>0&&e.civic.govern.rev--,e.civic.govern.fr>0&&e.civic.govern.fr--,e.civic.govern.rev<0&&(e.civic.govern.rev=0),e.city.ptrait.includes("trashed")||e.race.scavenger?e.civic.scavenger.display=!0:(e.civic.scavenger.display=!1,e.civic.scavenger.workers=0),e.civic.homeless>0){let o=e.arpa.railway?e.arpa.railway.rank:0,c=Math.floor(o/(o+25)*10);Math.rand(0,10)<=c&&e.civic.homeless--}if(e.race.unstable&&e.resource[e.race.species].amount>0&&Math.rand(0,100)=50){let o=Math.rand(0,1+Math.floor(e.resource[e.race.species].amount/50));Qr(o)}if(e.tech.currency&&e.tech.currency>=2){let o=_e("risktaker",0)?2:4;Object.keys(La).forEach(function(c){let l=e.race.truepath?La[c]*2:La[c];if(c==="Copper"&&e.tech.high_tech&&e.tech.high_tech>=2&&(l*=2),c==="Titanium"&&(e.tech.titanium&&e.tech.titanium>0?l*=e.resource.Alloy.display?1:2.5:l*=5),e.resource[c].display&&Math.rand(0,o)===0){let h=l*3,v=l/2,_=(Math.rand(0,200)-100)/100,g=e.resource[c].value+_;gh&&(g=h-l),e.resource[c].value=g}})}if(e.race.blood_thirst&&(e.race.hasOwnProperty("blood_thirst_count")||(e.race.blood_thirst_count=1),e.race.blood_thirst_count>1&&e.race.blood_thirst_count--),e.race.truepath&&e.civic.foreign.gov3.mil<500&&Math.rand(0,50)===0&&e.civic.foreign.gov3.mil++,e.race.pet&&(e.race.pet.event>0&&e.race.pet.event--,e.race.pet.pet>0?e.race.pet.pet--:e.race.pet.pet<0&&e.race.pet.pet++),e.civic.garrison.wounded>0){let o=e.race.regenerative?y.regenerative.vars()[0]:1,c=e.city.hospital?e.city.hospital.count:0;if(e.race.orbit_decayed&&e.race.truepath?c=Math.min(W.operating_base,x.operating_base):e.race.artifical&&e.city.boot_camp&&(c=e.city.boot_camp.count),e.race.rejuvenated&&e.stats.achieve.lamentis){let g=e.stats.achieve.lamentis.l;g>5&&(g=5),c+=g}a==="cancer"&&(c+=Bt("cancer")[0],c<0&&(c=0)),e.tech.medic&&e.tech.medic>=2&&(c*=e.tech.medic),e.race.fibroblast&&(c+=y.fibroblast.vars()[0]*e.race.fibroblast),e.race.cannibalize&&e.city.s_alter&&e.city.s_alter.regen>0&&(c>=20?c*=1+y.cannibalize.vars()[0]/100:c+=Math.floor(y.cannibalize.vars()[0]/5));let l=Pe("mantis");l>0&&(c>=20?c*=1+y.cannibalize.vars(1)[0]/100*l:c+=Math.floor(y.cannibalize.vars(1)[0]/5*l)),e.race.high_pop&&(c*=y.high_pop.vars()[2]);let h=_e("nopain",0);h&&(c*=1+h/100),e.city.banquet&&e.city.banquet.on&&e.city.banquet.level>=2&&(c*=1+e.city.banquet.strength**.65/100);let v=Pe("troll");v>0&&(c+=Math.round(20*y.regenerative.vars(1)[0]*v));let _=20;if(e.race.slow_regen&&(_*=1+y.slow_regen.vars()[0]/100),c=Math.round(c),c>0){for(;c>=_;)o++,c-=_;Math.rand(0,_)0&&e.civic.garrison.fatigue--,e.civic.garrison.protest&&e.civic.garrison.protest>0&&e.civic.garrison.protest--,e.civic.garrison.m_use&&e.civic.garrison.m_use>0){let o=e.tech.mercs&&e.tech.mercs>=2?3:4,c=e.race.high_pop?y.high_pop.vars()[0]:1,l=0;for(let h=0;h1&&e.race.rainbow_active--,e.city.calendar.day>0){if(e.city.calendar.day++,e.stats.days++,e.city.calendar.day>Kr()&&(e.city.calendar.day=1,e.city.calendar.year++),e.race.cataclysm||e.race.orbit_decayed)e.city.calendar.season=-1;else{let o=e.city.ptrait.includes("elliptical")?6:4,c=Math.round(Kr()/o),l=e.city.calendar.day,h=0;for(;l>c;)l-=c,h++;if(e.city.ptrait.includes("elliptical"))switch(h){case 0:e.city.calendar.season=0;break;case 1:case 2:e.city.calendar.season=1;break;case 3:e.city.calendar.season=2;break;default:e.city.calendar.season=3;break}else e.city.calendar.season=h}if(e.race.cataclysm||e.race.orbit_decayed)e.city.calendar.wind=0,e.city.calendar.temp=1,e.city.calendar.weather=-1;else if(Math.rand(0,5)===0){let o=Math.rand(0,3),c=Math.rand(0,5),l=Math.rand(0,3);switch(e.city.biome){case"oceanic":case"swamp":Math.rand(0,2)===0&&c>0&&c--;break;case"tundra":case"taiga":e.city.calendar.season===3?o=0:Math.rand(0,2)===0&&o>0&&o--;break;case"desert":Math.rand(0,2)===0&&c<4&&c++;break;case"ashland":Math.rand(0,2)===0&&(c<1?c++:c>2&&c--);case"volcanic":e.city.calendar.season===1?o=2:Math.rand(0,2)===0&&o<2&&!e.city.ptrait.includes("permafrost")&&o++;break;default:break}switch(e.city.calendar.season){case 0:Math.rand(0,3)===0&&c>0&&c--;break;case 1:Math.rand(0,3)===0&&o<2&&o++;break;case 2:Math.rand(0,3)===0&&l>0&&l--;break;case 3:Math.rand(0,3)===0&&o>0&&o--;break;default:break}if(e.city.ptrait.includes("stormy")&&l>0&&(e.race.rejuvenated||Math.rand(0,2)===0)&&l--,c===0?(e.race.rainbow&&(e.race.rainbow_active=1),e.city.calendar.weather=0):c>=1&&c<=2?(e.race.rainbow&&(e.race.rainbow_active=1),e.city.calendar.weather=1):(e.race.rainbow&&e.city.calendar.weather===0&&(e.race.rainbow_active=Math.rand(10,20)),e.city.calendar.weather=2,e.race.darkness&&Math.rand(0,7-y.darkness.vars()[0])===0&&(e.city.calendar.weather=1)),o===0){let h=e.city.calendar.temp-1;h<0&&(h=0),e.city.calendar.season===1&&h===0&&(h=1),h===0&&e.city.biome==="hellscape"&&!e.city.ptrait.includes("permafrost")&&(h=1),h===0&&e.city.biome==="eden"&&e.city.calendar.season!==3&&(h=1),e.city.calendar.temp=h}else if(o===2){let h=e.city.calendar.temp+1;h>2&&(h=2),e.city.calendar.season===3&&h===2&&(h=1),h===2&&e.city.biome==="eden"&&e.city.calendar.season!==1&&(h=1),e.city.calendar.temp=h}e.city.calendar.wind=l===0?1:0}e.city.calendar.weather===2?e.city.sun++:e.city.sun=0,e.city.calendar.temp===0?e.city.cold++:e.city.cold=0,e.city.calendar.temp===2?e.city.hot++:e.city.hot=0,e.race.orbit_decayed||(e.city.ptrait.includes("retrograde")?(e.city.calendar.moon--,e.city.calendar.moon<0&&(e.city.calendar.moon=27)):(e.city.calendar.moon++,e.city.calendar.moon>27&&(e.city.calendar.moon=0))),xc()}if(!e.race.cataclysm&&!e.race.orbit_decayed&&!e.race.lone_survivor&&!e.race.vax){let o=Math.floor(5e7/(1+e.race.mutation))-e.stats.days;if(e.race.deterioration===0&&o<4e7){e.race.deterioration=1;let c=Math.round(o/Kr());L(t("deterioration1",[ut("name"),c]),"danger",!1,["progress"])}else if(e.race.deterioration===1&&o<2e7){e.race.deterioration=2;let c=Math.round(o/Kr());L(t("deterioration2",[ut("name"),c]),"danger",!1,["progress"])}else if(e.race.deterioration===2&&o<5e6){e.race.deterioration=3;let c=Math.round(o/Kr());L(t("deterioration3",[ut("name"),c]),"danger",!1,["progress"])}else if(e.race.deterioration===3&&o<1e6){e.race.deterioration=4;let c=Math.round(o/Kr());L(t("deterioration4",[ut("name"),c]),"danger",!1,["progress"])}else e.race.deterioration===4&&o<=0&&(e.race.deterioration=5,e.race.decayed=e.stats.days,e.tech.decay=1,L(t("deterioration5",[ut("name")]),"danger",!1,["progress"]),de())}if(e.tech.decay&&e.tech.decay>=2){let o=0;e.genes.minor.fortify&&(o+=e.genes.minor.fortify),e.race.minor.fortify&&(o+=e.race.minor.fortify),e.tech.decay>=3&&(o*=100),e.race.gene_fortify=o}else e.race.gene_fortify=0;if(!e.tech.genesis&&e.race.deterioration>=1&&e.tech.high_tech&&e.tech.high_tech>=10&&(e.tech.genesis=1,L(t("genesis"),"special",!1,["progress"]),de()),e.settings.cLabels!==Bc&&Ct(),e.tech.xeno&&e.tech.xeno>=5&&!e.tech.piracy&&Math.rand(0,5)===0&&(e.tech.piracy=1,L(t("galaxy_piracy_msg",[T[e.galaxy.alien2.id].name]),"info",!1,["progress"]),Nt()),e.race.cheese&&(e.race.cheese--,e.race.cheese<=0&&delete e.race.cheese),e.tech.piracy&&(e.tech.piracy<1e3?e.tech.piracy++:e.tech.xeno>=8&&e.tech.piracy<2500?e.tech.piracy++:e.tech.conflict&&e.tech.piracy<5e3&&e.tech.piracy++),e.race.wish&&e.race.wishStats&&(e.race.wishStats.minor>0&&e.race.wishStats.minor--,e.race.wishStats.major>0&&e.race.wishStats.major--,e.race.wishStats.bad>0&&e.race.wishStats.bad--),e.portal.archaeology&&e.tech.hasOwnProperty("hell_ruins")&&e.tech.hell_ruins>=2&&!e.tech.hell_vault){let o=ta("ruins"),c=25e4;e.race.high_pop&&(c=qe(c)),c=Math.round(c*o.supress)*$e(e.civic.archaeologist.workers,"archaeologist")/1e3,Math.rand(0,1e4)+1<=c&&(e.tech.hell_vault=1,L(t("portal_ruins_vault"),"info",!1,["progress"]),Kt())}if(e.tech.syndicate&&e.race.truepath){let o=Ts();if(Object.keys(o).forEach(function(c){if(o[c].info.hasOwnProperty("syndicate")&&o[c].info.syndicate()){let l=o[c].info.hasOwnProperty("syndicate_cap")?o[c].info.syndicate_cap():500;e.space.syndicate.hasOwnProperty(c)||(e.space.syndicate[c]=0);let h=c==="spc_triton"?5:10;e.space.syndicate[c]l&&(e.space.syndicate[c]=l)}}),e.space.hasOwnProperty("shipyard")&&e.space.shipyard.hasOwnProperty("ships")){let c=0,l=0,h=!1;e.space.shipyard.ships.forEach(function(v){if(v.transit>0&&v.fueled){v.transit--;let _=1-v.transit/v.dist,g=Math.abs(v.origin.x-v.destination.x)*_,w=Math.abs(v.origin.y-v.destination.y)*_;v.origin.x<=v.destination.x?v.xy.x=v.origin.x+g:v.xy.x=v.origin.x-g,v.origin.y<=v.destination.y?v.xy.y=v.origin.y+w:v.xy.y=v.origin.y-w}if(v.transit===0&&(v.xy=Bi(v.location),v.origin=pt(v.xy),v.dist=0),v.damage>0&&x.shipyard&&v.damage--,v.location!=="spc_dwarf"&&Math.rand(0,10)===0){let _=v.location==="spc_triton"?2:1;switch(v.armor){case"steel":v.damage+=Math.rand(1,8*_);break;case"alloy":v.damage+=Math.rand(1,6*_);break;case"neutronium":v.damage+=Math.rand(1,4*_);break}v.damage>90&&(v.damage=90)}e.tech.hasOwnProperty("eris_scan")&&v.location==="spc_eris"&&v.transit===0&&(c+=zs(v)),e.tech.hasOwnProperty("tauceti")&&v.location==="tauceti"&&v.transit===0&&(l+=zs(v),h=v.name)}),e.tech.hasOwnProperty("eris_scan")&&e.tech.hasOwnProperty("eris")&&e.tech.eris===1&&c>50&&(e.tech.eris_scan+=c-50,e.tech.eris_scan>=100&&(e.tech.eris_scan=100,e.tech.eris=2,L(t("space_eris_scan",[X().eris]),"info",!1,["progress"]),Nt())),e.tech.hasOwnProperty("tauceti")&&e.tech.tauceti>=1&&l>=1&&e.tech.tauceti===1&&(M(d.tauceti.tau_home.orbital_station),M(d.tauceti.tau_red.orbital_platform),e.tech.tauceti=2,e.settings.showTau=!0,e.settings.tau.home=!0,e.settings.tau.red=!0,e.settings.tau.gas=!1,e.settings.tau.roid=!1,L(t("tau_scan",[h]),"info",!1,["progress"]),Gr()),e.space.hasOwnProperty("position")&&Object.keys(Qt).forEach(function(v){if(e.space.position.hasOwnProperty(v)){let _=Qt[v].orbit===-1?Kr():Qt[v].orbit;if(_===-2)return;_===0?e.space.position[v]=0:(e.space.position[v]+=+(360/_).toFixed(4),e.space.position[v]>=360&&(e.space.position[v]-=360))}}),$("#mapCanvas").length>0&&Di()}e.tech.triton&&e.tech.triton>=3&&El(),e.tech.eris&&e.tech.eris>=3&&Ll()}if(!e.race.warlord&&(e.stats.matrix>0||e.stats.retire>0)&&!e.race.servants&&Math.rand(0,25)===0){let o=Math.min(e.stats.matrix,100)+Math.min(e.stats.retire,100)+Math.min(e.stats.eden,100),c=Math.min(Math.min(e.stats.matrix,e.stats.retire),100);c+=e.stats.achieve.pathfinder&&e.stats.achieve.pathfinder.l>=5?2:0,e.stats.achieve.overlord&&e.stats.achieve.overlord.l>=5&&er.forEach(function(l){e.stats.achieve.overlord[l]>=5&&(c++,o+=2)}),e.race.servants={max:o,used:0,smax:c,sused:0,jobs:{},sjobs:{},force_scavenger:!1},L(o+c===1?t("civics_servants_msg1"):t("civics_servants_msg2",[o+c]),"caution",!1,["events","major_events"]),c>0&&Tt(!0)}if(e.race.truepath&&e.tech.focus_cure&&e.tech.focus_cure>=2&&e.tauceti.infectious_disease_lab){if(e.tauceti.infectious_disease_lab.cure<100){let o=(W.infectious_disease_lab||0)/100;o>1&&(o=1);let c=+ut("curve",o).toFixed(5)/5;e.tauceti.infectious_disease_lab.cure+=c,e.tauceti.infectious_disease_lab.cure>100&&(e.tauceti.infectious_disease_lab.cure=100)}else if(e.tauceti.infectious_disease_lab.cure>=100&&e.tech.focus_cure===2)e.tech.focus_cure=3,T[e.race.species].type==="synthetic"?L(t("tech_decode_virus_msg2s"),"info",!1,["progress"]):L(t("tech_decode_virus_msg2"),"info",!1,["progress"]);else if(e.tech.focus_cure>=4&&e.race.hasOwnProperty("vax")){let o=e.race.artifical?e.city.boot_camp.count:e.city.hospital.count;if(e.race.orbit_decayed&&(o=Math.min(W.operating_base,x.operating_base)),e.tech.focus_cure===4&&e.race.vax<25)e.race.vax+=Math.rand(0,o*2)/150;else if(e.tech.focus_cure===4&&e.race.vax>=25)e.tech.focus_cure=5,L(t("tech_vaccine_campaign_msg1"),"info",!1,["progress"]);else if(e.tech.focus_cure===5&&e.race.vax<50)e.race.vax+=Math.rand(0,o*2)/450;else if(e.tech.focus_cure===5&&e.race.vax<75)e.race.vax+=Math.rand(0,o*2)/1200;else if(e.tech.focus_cure===6&&e.race.vax<100){let c=1e3;e.tech.vax_p?c=250:e.tech.vax_s?c=390:e.tech.vax_f?c=25:e.tech.vax_c&&(c=125),e.race.vax+=Math.rand(0,o*2)/c}else e.race.vax>=100&&e.tech.focus_cure<=6&&(e.race.vax=100,e.tech.focus_cure=7,L(t("tech_vaccine_campaign_msg2"),"info",!1,["progress"]),Pr("assemble"),lt())}}if(e.race.infiltrator){let o=e.tech.world_control?"trait_infiltrator_steal_alt":"trait_infiltrator_steal",c=y.infiltrator.vars()[0]/100;e.resource.Knowledge.max>=d.tech.steel.cost.Knowledge()*c&&!e.race.steelen&&e.tech.smelting&&e.tech.smelting===1&&(L(t(o,[t("tech_steel")]),"info",!1,["progress"]),e.resource.Steel.display=!0,e.tech.smelting=2,Ve(),de()),e.resource.Knowledge.max>=d.tech.electricity.cost.Knowledge()*c&&e.tech.high_tech&&e.tech.high_tech===1&&(L(t(o,[t("tech_electricity")]),"info",!1,["progress"]),e.tech.high_tech=2,e.city.power=0,e.city.powered=!0,M(d.city.coal_power),e.settings.showPowerGrid=!0,Ha(),de(),Ct()),e.resource.Knowledge.max>=d.tech.electronics.cost.Knowledge()*c&&e.tech.high_tech&&e.tech.high_tech===3&&e.tech.titanium&&(L(t(o,[t("tech_electronics")]),"info",!1,["progress"]),e.tech.high_tech=4,e.race.terrifying&&(e.tech.gambling=1,M(d.city.casino),M(d.space.spc_hell.spc_casino)),de(),Ct()),e.resource.Knowledge.max>=d.tech.fission.cost.Knowledge()*c&&e.tech.high_tech&&e.tech.high_tech===4&&e.tech.uranium&&(L(t(o,[t("tech_fission")]),"info",!1,["progress"]),e.tech.high_tech=5,M(d.city.fission_power),de(),Ct()),e.resource.Knowledge.max>=d.tech.rocketry.cost.Knowledge()*c&&e.tech.high_tech&&e.tech.high_tech===6&&(L(t(o,[t("tech_rocketry")]),"info",!1,["progress"]),e.tech.high_tech=7,e.race.truepath&&!e.tech.rival&&(e.tech.rival=1,L(t("civics_rival_unlocked",[mt(3)]),"info",!1,["progress","combat"])),tt("Physics"),de(),Ct()),e.resource.Knowledge.max>=d.tech.artifical_intelligence.cost.Knowledge()*c&&e.tech.high_tech&&e.tech.high_tech===9&&(L(t(o,[t("tech_artificial_intelligence")]),"info",!1,["progress"]),e.tech.high_tech=10,de(),Ct()),e.resource.Knowledge.max>=d.tech.quantum_computing.cost.Knowledge()*c&&e.tech.high_tech&&e.tech.high_tech===10&&e.tech.nano&&(L(t(o,[t("tech_quantum_computing")]),"info",!1,["progress"]),e.tech.high_tech=11,de(),Ct()),e.resource.Knowledge.max>=d.tech[e.race.truepath?"virtual_reality_tp":"virtual_reality"].cost.Knowledge()*c&&e.tech.high_tech&&e.tech.high_tech===11&&e.tech.stanene&&(e.tech.infernite&&e.tech.alpha&&e.tech.alpha>=2||e.race.truepath)&&(L(t(o,[t("tech_virtual_reality")]),"info",!1,["progress"]),e.tech.high_tech=12,de(),Ct()),e.race.truepath?(e.resource.Knowledge.max>=d.tech.quantium.cost.Knowledge()*c&&e.tech.supercollider&&e.tech.supercollider>=10&&e.tech.enceladus&&e.tech.enceladus>=3&&!e.tech.quantium&&(L(t(o,[t("tech_quantium")]),"info",!1,["progress"]),e.tech.quantium=1,e.resource.Quantium.display=!0,de(),Tt()),e.resource.Knowledge.max>=d.tech.alien_biotech.cost.Knowledge()*c&&e.tech.genetics&&e.tech.genetics>=8&&e.tech.kuiper&&!e.tech.biotech&&(L(t(o,[t("tech_alien_biotech")]),"info",!1,["progress"]),e.tech.biotech=1,de())):(e.resource.Knowledge.max>=d.tech.shields.cost.Knowledge()*c&&e.tech.high_tech&&e.tech.high_tech===13&&(L(t(o,[t("tech_shields")]),"info",!1,["progress"]),e.tech.high_tech=14,e.settings.space.neutron=!0,e.settings.space.blackhole=!0,de(),Ct()),e.resource.Knowledge.max>=d.tech.ai_core.cost.Knowledge()*c&&e.tech.high_tech&&e.tech.high_tech===14&&e.tech.blackhole&&e.tech.blackhole>=3&&(L(t(o,[t("tech_ai_core")]),"info",!1,["progress"]),e.tech.high_tech=15,M(d.interstellar.int_neutron.citadel),de(),Ct()),e.resource.Knowledge.max>=d.tech.graphene_processing.cost.Knowledge()*c&&e.tech.ai_core&&e.tech.ai_core===2&&(L(t(o,[t("tech_graphene_processing")]),"info",!1,["progress"]),e.tech.ai_core=3,de()),e.resource.Knowledge.max>=d.tech.nanoweave.cost.Knowledge()*c&&e.tech.science&&e.tech.science>=18&&!e.tech.nanoweave&&(L(t(o,[t("tech_nanoweave")]),"info",!1,["progress"]),e.tech.nanoweave=1,e.resource.Nanoweave.display=!0,de(),Tt()),e.resource.Knowledge.max>=d.tech.orichalcum_analysis.cost.Knowledge()*c&&e.tech.high_tech&&e.tech.high_tech===16&&e.tech.chthonian&&e.tech.chthonian>=3&&(L(t(o,[t("tech_orichalcum_analysis")]),"info",!1,["progress"]),L(t("tech_orichalcum_analysis_result"),"info",!1,["progress"]),e.tech.high_tech=17,de(),Ct()),e.resource.Knowledge.max>=d.tech.infernium_fuel.cost.Knowledge()*c&&e.tech.smelting&&e.tech.smelting===7&&e.tech.hell_ruins&&e.tech.hell_ruins>=4&&(L(t(o,[t("tech_infernium_fuel")]),"info",!1,["progress"]),e.tech.smelting=8,Ve(),de()))}let n=Pe("moldling");if(n>0){let o="trait_infiltrator_thrall",c=1-(100-y.infiltrator.vars(1)[0])*n/100;n>=.02&&e.resource.Knowledge.max>=d.tech.smelting.cost.Knowledge()*c&&gr("smelting",!1)&&!e.tech.smelting&&(L(t(o,[t("tech_smelting")]),"info",!1,["progress"]),e.tech.smelting=1,M(d.city.smelter),e.race.steelen&&(e.tech.smelting=2),de(),Ct()),n>=.04&&e.resource.Knowledge.max>=d.tech.dynamite.cost.Knowledge()*c&&gr("dynamite",!1)&&e.tech.explosives&&e.tech.explosives===1&&(L(t(o,[t("tech_dynamite")]),"info",!1,["progress"]),e.tech.explosives=2,de()),n>=.08&&e.resource.Knowledge.max>=d.tech.portland_cement.cost.Knowledge()*c&&gr("portland_cement",!1)&&e.tech.cement&&e.tech.cement===3&&(L(t(o,[t("tech_portland_cement")]),"info",!1,["progress"]),e.tech.cement=4,de()),n>=.12&&e.resource.Knowledge.max>=d.tech.oxygen_converter.cost.Knowledge()*c&&gr("oxygen_converter",!1)&&e.tech.smelting&&e.tech.smelting===4&&(L(t(o,[t("tech_oxygen_converter")]),"info",!1,["progress"]),e.tech.smelting=5,de()),n>=.15&&e.resource.Knowledge.max>=d.tech.machinery.cost.Knowledge()*c&&gr("machinery",!1)&&e.tech.foundry&&e.tech.foundry===6&&(L(t(o,[t("tech_machinery")]),"info",!1,["progress"]),e.tech.foundry=7,de()),n>=.2&&e.resource.Knowledge.max>=d.tech.uranium_storage.cost.Knowledge()*c&&gr("uranium_storage",!1)&&e.tech.uranium&&e.tech.uranium===1&&(L(t(o,[t("tech_uranium_storage")]),"info",!1,["progress"]),e.tech.uranium=1,de()),n>=.25&&e.resource.Knowledge.max>=d.tech.synthetic_fur.cost.Knowledge()*c&&gr("synthetic_fur",!1)&&!e.tech.synthetic_fur&&(L(t(o,[d.tech.synthetic_fur.title()]),"info",!1,["progress"]),e.tech.synthetic_fur=1,de()),n>=.35&&e.resource.Knowledge.max>=d.tech.rover.cost.Knowledge()*c&&gr("rover",!1)&&e.tech.space_explore&&e.tech.space_explore===1&&(L(t(o,[t("tech_rover")]),"info",!1,["progress"]),e.tech.space_explore=2,e.settings.space.moon=!0,e.space.moon_base={count:0,on:0,support:0,s_max:0},de());let l="trait_infiltrator_thrall_alt";n>=.4&&e.resource.Knowledge.max>=d.tech.starcharts.cost.Knowledge()*c&&gr("starcharts",!1)&&e.tech.space_explore&&e.tech.space_explore===3&&(L(t(l,[t("tech_starcharts")]),"info",!1,["progress"]),e.tech.space_explore=4,de()),n>=.5&&e.resource.Knowledge.max>=d.tech.nano_tubes.cost.Knowledge()*c&&gr("nano_tubes",!1)&&!e.tech.nano&&(L(t(l,[t("tech_nano_tubes")]),"info",!1,["progress"]),e.tech.nano=1,e.resource.Nano_Tube.display=!0,de()),e.race.truepath?(n>=.65&&e.resource.Knowledge.max>=d.tech.stanene_tp.cost.Knowledge()*c&&gr("stanene_tp",!1)&&!e.tech.stanene&&(L(t(l,[t("tech_stanene")]),"info",!1,["progress"]),e.tech.stanene=1,e.resource.Stanene.display=!0,de()),n>=.8&&e.resource.Knowledge.max>=d.tech.anitgrav_bunk.cost.Knowledge()*c&&gr("anitgrav_bunk",!1)&&e.tech.marines&&e.tech.marines===1&&(L(t(l,[t("tech_anitgrav_bunk")]),"info",!1,["progress"]),e.tech.marines=2,de())):(n>=.65&&e.resource.Knowledge.max>=d.tech.stanene.cost.Knowledge()*c&&gr("stanene",!1)&&!e.tech.stanene&&(L(t(l,[t("tech_stanene")]),"info",!1,["progress"]),e.tech.stanene=1,e.resource.Stanene.display=!0,de()),n>=.78&&e.resource.Knowledge.max>=d.tech.hydroponics.cost.Knowledge()*c&&gr("hydroponics",!1)&&e.tech.mars&&e.tech.mars===5&&(L(t(l,[t("tech_hydroponics")]),"info",!1,["progress"]),e.tech.mars=6,de()),n>=.92&&e.resource.Knowledge.max>=d.tech.orichalcum_panels.cost.Knowledge()*c&&gr("orichalcum_panels",!1)&&e.tech.swarm&&e.tech.swarm===5&&(L(t(l,[t("tech_orichalcum_panels")]),"info",!1,["progress"]),e.tech.swarm=6,de()),n>=1&&e.resource.Knowledge.max>=d.tech.cybernetics.cost.Knowledge()*c&&gr("cybernetics",!1)&&e.tech.high_tech&&e.tech.high_tech===17&&(L(t(l,[t("tech_cybernetics")]),"info",!1,["progress"]),e.tech.high_tech=18,de()))}e.race.truepath&&e.tech.tauceti&&e.tech.tauceti===3&&e.space.hasOwnProperty("jump_gate")&&e.tauceti.hasOwnProperty("jump_gate")&&e.space.jump_gate.count>=100&&e.tauceti.jump_gate.count>=100&&(e.tech.tauceti=4,e.resource.Materials.display=!1,e.resource.Bolognium.display=!0,Nt(),Gr(),de()),e.race.truepath&&e.tech.tauceti&&!e.race.lone_survivor?e.tech.tauceti===5&&!e.tech.plague&&Math.rand(0,50)===0?(e.tech.plague=1,L(t("tau_plague",[mt(3)]),"info",!1,["progress"])):e.tech.plague&&e.tech.tau_roid&&e.tech.tau_whale&&(e.tech.plague===1&&(e.tech.tau_roid>=4||e.tech.tau_whale>=2)&&Math.rand(0,50)===0?(e.tech.plague=2,e.race.quarantine=1,e.race.qDays=0,L(t("tau_plague2",[mt(3)]),"info",!1,["progress"])):e.tech.plague===2&&e.tech.tau_roid>=5&&e.tech.tau_whale>=2&&Math.rand(0,50)===0?(e.tech.plague=3,e.race.quarantine=2,e.race.qDays=0,L(t("tau_plague3",[mt(3),T[e.race.species].home]),"info",!1,["progress"])):e.tech.isolation?e.tech.plague<5&&Math.rand(0,50)===0&&(e.tech.plague=5,delete e.race.quarantine,delete e.race.qDays,L(t("tau_plague5b",[T[e.race.species].home]),"info",!1,["progress"]),de()):e.tech.plague===3&&e.tech.disease&&e.tech.disease>=2&&Math.rand(0,50)===0?(e.tech.plague=4,e.race.quarantine=3,e.race.qDays=0,L(t("tau_plague5a",[T[e.race.species].home]),"info",!1,["progress"])):e.tech.plague===4&&e.tech.disease&&e.tech.disease>=3&&Math.rand(0,50)===0&&(e.tech.plague=5,e.race.quarantine=4,e.race.qDays=0,L(t("tau_plague5a",[T[e.race.species].home]),"info",!1,["progress"])),e.race.quarantine&&(e.race.hasOwnProperty("qDays")||(e.race.qDays=0),e.race.qDays++)):e.tech.tau_gas&&e.tech.tau_gas>=4&&!e.tech.plague&&e.race.lone_survivor&&(e.tech.plague=5),e.civic.govern.protest&&e.civic.govern.protest>0&&e.civic.govern.protest--,e.civic.govern.scandal&&e.civic.govern.scandal>0&&e.civic.govern.scandal--;{let o=Wi();e.civic.taxes.tax_rate=Math.max(e.civic.taxes.tax_rate,o.min),e.civic.taxes.tax_rate=Math.min(e.civic.taxes.tax_rate,o.max)}if(e.queue.display&&ca(),e.r_queue.display&&Ga(),e.race.mutation>0){let o=0;for(let c=0;c3&&(e.genes.plasma>=2?h=h>5?5:h:h=3),o+=h}e.race.p_mutation=o}if(!e.tech.whitehole&&e.interstellar.stellar_engine&&e.interstellar.stellar_engine.exotic>=.025?(e.tech.whitehole=1,e.tech.stablized&&delete e.tech.stablized,(!e.race.governor.config.hasOwnProperty("trash")||e.race.governor.config.hasOwnProperty("trash")&&!e.race.governor.config.trash.stab)&&L(t("interstellar_blackhole_unstable"),"danger",!1,["progress"]),de()):e.interstellar.stellar_engine&&e.interstellar.stellar_engine.exotic>=.025&&e.tech.whitehole&&e.tech.stablized&&(delete e.tech.stablized,de()),!e.tech.xeno&&e.galaxy.scout_ship&&Ke.scout_ship>0&&Math.rand(0,10)===0){e.tech.xeno=1,e.galaxy.scout_ship.count--,e.galaxy.scout_ship.on--;let o=d.galaxy.gxy_gateway.scout_ship.ship.civ(),c=d.galaxy.gxy_gateway.scout_ship.ship.mil();e.galaxy.scout_ship.crew-=o,e.galaxy.scout_ship.mil-=c,e.resource[e.race.species].amount-=o,e.civic.garrison.workers-=c,e.civic.garrison.crew-=c,L(t("galaxy_encounter"),"info",!1,["progress"]),de()}e.galaxy.scavenger&&e.tech.conflict&&e.tech.conflict===4&&Ke.scavenger>0&&Math.rand(0,50)<=Ke.scavenger&&(e.tech.conflict=5,L(t("galaxy_scavenger_find"),"info",!1,["progress"]),de()),!e.tech.syndicate&&!e.race.lone_survivor&&e.tech.outer&&Math.rand(0,20)===0&&(L(t("outer_syndicate",[mt(4)]),"info",!1,["progress"]),e.tech.syndicate=1,e.space.syndicate={}),!e.tech.corrupted_ai&&x.ai_core2&&Yo()===100&&(e.tech.corrupted_ai=1,de()),e.arpa.sequence&&e.arpa.sequence.auto&&e.tech.genetics&&e.tech.genetics===7&&g0(),e.race.orbit_decay&&(e.race.orbit_decayed||$("#infoTimer").html(`T-${e.race.orbit_decay-e.stats.days}`),Hc()),e.race.truepath&&e.city.ptrait.includes("kamikaze")&&Kr()<=10&&(e.race.orbit_decay=1,e.race.tidal_decay=1,Hc()),e.race.living_materials&&["city","space","interstellar","galaxy","portal","eden","tauceti"].forEach(function(o){Object.keys(e[o]).forEach(function(c){e[o][c].hasOwnProperty("l_m")&&e[o][c].l_m++})}),ku()}if(!e.race.seeded||e.race.seeded&&e.race.chose){if(Math.rand(0,e.event.t)===0){let n=en("major");if(n.length>0){let o=n[Math.floor(R(0,n.length))],c=Jt[o].effect();L(c,"caution",!1,["events","major_events"]),e.event.l=o}e.event.t=999,a==="pisces"&&(e.event.t-=Bt("pisces")[0])}else e.event.t--;if(e.race.species!=="protoplasm")if(Math.rand(0,e.m_event.t)===0){let n=en("minor");if(!e.race.pet&&(e.race.catnip&&e.race.catnip>=2||e.race.anise&&e.race.anise>=2)&&(n=["pet"]),n.length>0){let o=n[Math.floor(R(0,n.length))],c=Jt[o].effect();L(c,!1,!1,["events","minor_events"]),e.m_event.l=o}e.m_event.t=850,a==="pisces"&&(e.m_event.t-=Bt("pisces")[1])}else e.m_event.t--;if(e.race.witch_hunter&&e.resource.Sus.amount>=100){let n=300-e.resource.Sus.amount;if(n<1&&(n=1),Math.rand(0,n)===0){let o=Jt.witch_hunt_crusade.effect();L(o,"caution",!1,["events","major_events"])}}if(e.race.witch_hunter&&e.resource.Sus.amount>=50&&e.civic.scientist.workers>0){let n=250-e.resource.Sus.amount*2;if(n<50&&(n=50),Math.rand(0,n)===0){let o=Jt.witch_hunt.effect();L(o,!1,!1,["events","minor_events"])}}e.stats.achieve.endless_hunger&&e.city.banquet&&e.city.banquet.on&&e.city.banquet.strength++,e.eden.mech_station&&Nl()}e.race.warlord&&e.race.shapeshifter&&ni("shapeshifter"),r.getMonth()===11&&r.getDate()>=17&&r.getDate()<=24?(e.special.gift[`g${r.getFullYear()}`]=!0,e.tech.santa=1):delete e.tech.santa,rt("fool")?$("body").hasClass("fool")||($("body").addClass("fool"),as({fool:!0})):$("body").hasClass("fool")&&($("body").removeClass("fool"),as());let i=r.valueOf(),s=!1;!e.settings.pause&&Xc(i)&&(jo(i),s=!0),e.stats.current=i,e.race.hasOwnProperty("geck")||Le.setItem("evolved",LZString.compressToUTF16(JSON.stringify(e))),e.race.species!=="protoplasm"&&(e.stats.days+e.stats.tdays)%1e5===99999&&L(t("backup_warning"),"advanced",!0),nl--,nl<=0&&(nl=60,zt("page_view",{page_title:"Game Loop"})),e.settings.pause&&Ae.s&&Ur("stop"),Ei.t>0&&(Ei.t--,e.settings.at--,(e.settings.at<=0||Ei.t<=0)&&(e.settings.at=0,s=!0)),s&&(Ur("stop"),Ur("start"))}function g0(r=!1){let a=r?0:1e4;if(e.resource.Knowledge.amount>=2e5&&e.resource.Knowledge.amount>=e.resource.Knowledge.max-a){e.resource.Knowledge.amount-=2e5;let i=e.genes.synthesis?Xp[e.genes.synthesis]:1;e.resource.Genes.amount+=i}}function f0(r,a){let i=1e3;if(e.race.slow){let n=1+y.slow.vars()[0]/100;i=Math.floor(i*n)}if(e.race.hyper){let n=1-y.hyper.vars()[0]/100;i=Math.floor(i*n)}e.resource[r].diff=+(e.resource[r].delta/(a/i)).toFixed(2),e.resource[r].delta=0,e.resource[r].hasOwnProperty("gen")&&e.resource[r].hasOwnProperty("gen_d")&&(e.resource[r].gen=+(e.resource[r].gen_d/(a/i)).toFixed(2),e.resource[r].gen_d=0);let s=$(`#res${r} .diff`);e.race.decay?e.resource[r].diff<0?e.resource[r].diff>=f.p.consume[r][t("evo_challenge_decay")]?s.hasClass("has-text-warning")||(s.removeClass("has-text-danger"),s.addClass("has-text-warning")):s.hasClass("has-text-danger")||(s.removeClass("has-text-warning"),s.addClass("has-text-danger")):e.resource[r].diff>=0&&(s.hasClass("has-text-danger")||s.hasClass("has-text-warning"))&&(s.removeClass("has-text-danger"),s.removeClass("has-text-warning")):r===e.race.species&&e.race.fasting?e.resource[r].diff>=0&&e.resource[r].diff<.75?(s.addClass("has-text-warning"),s.removeClass("has-text-danger")):e.resource[r].diff<0?(s.removeClass("has-text-warning"),s.addClass("has-text-danger")):e.resource[r].diff>=.75&&(s.removeClass("has-text-danger"),s.removeClass("has-text-warning")):e.resource[r].diff<0&&!s.hasClass("has-text-danger")?s.addClass("has-text-danger"):e.resource[r].diff>=0&&s.hasClass("has-text-danger")&&s.removeClass("has-text-danger")}function m0(){e.resource.Steel.display===!1&&Math.rand(0,1250)===0&&(e.resource.Steel.display=!0,H("Steel",1,!0),L(t("steel_sample"),"info",!1,["progress"]))}function v0(){["#resources .resource",".tab-item > .market-item","#galaxyTrade > .market-item"].forEach(function(r){let a=!1;$(`${r}:visible`).each(function(){a?($(this).addClass("alt"),$(this).removeClass("prime"),a=!1):($(this).removeClass("alt"),$(this).addClass("prime"),a=!0)})})}function ol(r){let a=!!(e.race.elusive||Math.floor(R(0,3))===0),i=Pe("satyr");if(i>0&&Math.floor(R(0,100))<=i*100&&(a=!0),!a&&e.civic.foreign[`gov${r}`].spy>0&&(e.civic.foreign[`gov${r}`].spy-=1),!a&&Math.floor(R(0,4))===0){L(t("event_spy_sellout",[mt(r)]),"danger",!1,["spy"]);let s=e.race.mistrustful?5+y.mistrustful.vars()[0]:5;e.civic.foreign[`gov${r}`].hstl+=Math.floor(R(1,s)),e.civic.foreign[`gov${r}`].hstl>100&&(e.civic.foreign[`gov${r}`].hstl=100)}else L(t(a?"event_spy_fail":"event_spy",[mt(r)]),"danger",!1,["spy"])}ul.version_check=setInterval(function(){$.ajax({url:"https://pmotschmann.github.io/Evolve/package.json",type:"GET",dataType:"json",success:function(r){r.version&&r.version!=e.version&&!e.beta&&$("#topBar .version > a").html(`${t("update_avail")} v`+e.version+cl)}})},9e5);var t_=$('
    ');ve("versionLog",p0(t_),{wide:!0});e.race.start_cataclysm&&Zu();})(); diff --git a/index.html b/index.html index 417a94406..29ef9f27d 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,5 @@ - + @@ -27,16 +27,20 @@ - + - - + + + - +