This commit is contained in:
Dys 2022-05-19 17:20:48 +08:00
commit 4862020479
314 changed files with 8362 additions and 6155 deletions

View File

@ -1,6 +1,7 @@
{
"extends": [
"eslint:recommended",
"plugin:import/recommended",
"plugin:vue/recommended"
],
"env": {
@ -14,7 +15,46 @@
"sourceType": "module",
"parser": "@babel/eslint-parser"
},
"settings": {
"import/resolver": {
"alias": {
"map": [
["@", "./src"]
],
"extensions": [".js", ".vue"]
}
}
},
"rules": {
"import/prefer-default-export": "off",
"import/no-unresolved": "error",
"import/named": "error",
"import/namespace": "error",
"import/default": "error",
"import/export": "error",
"import/no-named-as-default": "warn",
"import/no-named-as-default-member": "warn",
"import/no-duplicates": "warn",
"import/extensions": ["warn", "never"],
"import/first": "warn",
"import/newline-after-import": "warn",
"import/no-named-default": "warn",
"import/no-self-import": "warn",
"import/order": [
"warn",
{
"newlines-between": "always-and-inside-groups",
"pathGroups": [{ "pattern": "@/**", "group": "sibling" }]
}
],
"sort-imports": [
"warn",
{
"ignoreCase": true,
"allowSeparatedGroups": true
}
],
"no-console": "warn",
"no-template-curly-in-string": "warn",
"array-callback-return": "error",
@ -32,7 +72,6 @@
"allowElseIf": false
}
],
"vue/one-component-per-file": "error",
"vue/component-definition-name-casing": "warn",
"vue/order-in-components": "warn",

3
.stylelintignore Normal file
View File

@ -0,0 +1,3 @@
public/stylesheets/fontawesome/**/*.css
public/stylesheets/codemirror/*.css
public/stylesheets/vis-network.css

425
.stylelintrc.json Normal file
View File

@ -0,0 +1,425 @@
{
"plugins": [
"stylelint-order"
],
"extends": [
"stylelint-config-standard"
],
"rules": {
"no-descending-specificity": null,
"font-family-no-missing-generic-family-keyword": null,
"no-empty-source": null,
"color-hex-length": "long",
"custom-property-empty-line-before": null,
"color-function-notation": null,
"declaration-empty-line-before": null,
"comment-empty-line-before": null,
"property-no-vendor-prefix": [
true,
{
"ignoreProperties": ["appearance", "background-clip", "backdrop-filter", "clip-path", "user-select"]
}
],
"unit-allowed-list": [
"rem",
"%",
"px",
"deg",
"s",
"ms",
"fr"
],
"custom-property-pattern": [
"^([_a-z][a-z0-9]*)([-_]{1,2}[a-z0-9]+)*$",
{
"message": "Expected custom property name to be kebab-case"
}
],
"selector-class-pattern": [
"^(CodeMirror.*|([_a-z][a-z0-9]*)([-_]{1,2}[a-z0-9]+)*)$",
{
"message": "Expected class selector name to be kebab-case"
}
],
"keyframes-name-pattern": [
"^([_a-z][a-z0-9]*)([-_]{1,2}[a-z0-9]+)*$",
{
"message": "Expected keyframe name to be kebab-case"
}
],
"selector-id-pattern": [
"^([_a-z][a-z0-9]*)([-_]{1,2}[a-z0-9]+)*$",
{
"message": "Expected id selector name to be kebab-case"
}
],
"order/order": [
"custom-properties",
"at-rules",
"rules",
"declarations"
],
"order/properties-order": [
[
{
"groupName": "content",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"content"
]
},
{
"groupName": "display",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"display",
"visibility",
"float",
"clear",
"resize",
"overflow",
"overflow-x",
"overflow-y",
"white-space",
"word-break",
"overflow-wrap",
"tab-size",
"clip",
"zoom"
]
},
{
"groupName": "flex",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"flex",
"flex-grow",
"flex-shrink",
"flex-basis",
"flex-flow",
"flex-direction",
"flex-wrap"
]
},
{
"groupName": "grid",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"grid",
"grid-auto-columns",
"grid-auto-flow",
"grid-auto-rows",
"grid-template-areas",
"grid-template-columns",
"grid-template-rows",
"grid-row-gap",
"grid-column-gap",
"row-gap",
"column-gap",
"grid-row",
"grid-row-start",
"grid-row-end",
"grid-column",
"grid-column-start",
"grid-column-end"
]
},
{
"groupName": "table",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"table-layout",
"empty-cells",
"caption-side",
"border-spacing",
"border-collapse",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image"
]
},
{
"groupName": "size",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"width",
"height",
"min-width",
"max-width",
"min-height",
"max-height"
]
},
{
"groupName": "position",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"position",
"will-change",
"inset",
"top",
"right",
"bottom",
"left",
"z-index"
]
},
{
"groupName": "alignment",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"place-content",
"justify-content",
"align-content",
"align-items",
"align-self",
"vertical-align",
"text-align",
"text-align-last"
]
},
{
"groupName": "scrollbar",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"scrollbar-color",
"scrollbar-width"
]
},
{
"groupName": "svg",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"stroke",
"stroke-width",
"stroke-linecap",
"stroke-dasharray",
"fill",
"text-anchor"
]
},
{
"groupName": "font",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"font",
"font-family",
"font-size",
"font-stretch",
"font-style",
"font-variant",
"font-weight",
"font-smoothing",
"font-smooth",
"line-height",
"src",
"unicode-range"
]
},
{
"groupName": "color",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"opacity",
"color"
]
},
{
"groupName": "text",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"text-shadow",
"text-decoration"
]
},
"appearance",
{
"groupName": "background",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"background",
"background-attachment",
"background-clip",
"background-color",
"background-image",
"background-origin",
"background-position",
"background-position-x",
"background-position-y",
"background-repeat",
"background-size"
]
},
{
"groupName": "border",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"border",
"border-color",
"border-style",
"border-width",
"border-top",
"border-top-color",
"border-top-style",
"border-top-width",
"border-right",
"border-right-color",
"border-right-style",
"border-right-width",
"border-bottom",
"border-bottom-color",
"border-bottom-style",
"border-bottom-width",
"border-left",
"border-left-color",
"border-left-style",
"border-left-width",
"border-radius",
"border-top-left-radius",
"border-top-right-radius",
"border-bottom-right-radius",
"border-bottom-left-radius",
"border-spacing"
]
},
{
"groupName": "box",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"box-shadow",
"box-sizing"
]
},
{
"groupName": "outline",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset"
]
},
{
"groupName": "margin",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left"
]
},
{
"groupName": "padding",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left"
]
},
{
"groupName": "animation",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"transform",
"transform-origin",
"filter",
"mix-blend-mode",
"transition",
"transition-delay",
"transition-timing-function",
"transition-duration",
"transition-property",
"animation",
"animation-name",
"animation-duration",
"animation-play-state",
"animation-timing-function",
"animation-delay",
"animation-iteration-count",
"animation-direction",
"animation-fill-mode"
]
},
{
"groupName": "pointer",
"emptyLineBefore": "never",
"noEmptyLineBetween": true,
"properties": [
"pointer-events",
"user-select",
"cursor"
]
}
],
{
"unspecified": "bottomAlphabetical",
"emptyLineBeforeUnspecified": "always"
}
]
},
"overrides": [
{
"files": [
"*.vue",
"**/*.vue"
],
"extends": [
"stylelint-config-recommended",
"stylelint-config-html"
],
"rules": {
"selector-pseudo-class-no-unknown": [
true,
{
"ignorePseudoClasses": [
"deep",
"global"
]
}
],
"selector-pseudo-element-no-unknown": [
true,
{
"ignorePseudoElements": [
"v-deep",
"v-global",
"v-slotted"
]
}
]
}
}
]
}

View File

@ -1,4 +1,4 @@
import { GameMechanicState } from "../game-mechanics/index.js";
import { GameMechanicState } from "../game-mechanics/index";
class AchievementState extends GameMechanicState {
constructor(config) {

View File

@ -1,4 +1,4 @@
import { GameMechanicState } from "../game-mechanics/index.js";
import { GameMechanicState } from "../game-mechanics/index";
class SecretAchievementState extends GameMechanicState {
constructor(config) {

View File

@ -1,64 +1,64 @@
import MessageModal from "@/components/modals/MessageModal";
import CelestialQuoteModal from "@/components/modals/CelestialQuoteModal";
import CloudSaveConflictModal from "@/components/modals/cloud/CloudSaveConflictModal";
import CloudLoadConflictModal from "@/components/modals/cloud/CloudLoadConflictModal";
import CloudSaveConflictModal from "@/components/modals/cloud/CloudSaveConflictModal";
import EternityChallengeStartModal from "@/components/modals/challenges/EternityChallengeStartModal";
import InfinityChallengeStartModal from "@/components/modals/challenges/InfinityChallengeStartModal";
import MessageModal from "@/components/modals/MessageModal";
import NormalChallengeStartModal from "@/components/modals/challenges/NormalChallengeStartModal";
import DimensionBoostModal from "@/components/modals/prestige/DimensionBoostModal";
import AntimatterGalaxyModal from "@/components/modals/prestige/AntimatterGalaxyModal";
import BigCrunchModal from "@/components/modals/prestige/BigCrunchModal";
import ReplicantiGalaxyModal from "@/components/modals/prestige/ReplicantiGalaxyModal";
import EternityModal from "@/components/modals/prestige/EternityModal";
import EnterDilationModal from "@/components/modals/prestige/EnterDilationModal";
import RealityModal from "@/components/modals/prestige/RealityModal";
import ResetRealityModal from "@/components/modals/prestige/ResetRealityModal";
import ExitCelestialModal from "@/components/modals/prestige/ExitCelestialModal";
import EnterCelestialsModal from "@/components/modals/prestige/EnterCelestialsModal";
import HardResetModal from "@/components/modals/prestige/HardResetModal";
import SpeedrunModeModal from "@/components/modals/SpeedrunModeModal";
import ChangeNameModal from "@/components/modals/ChangeNameModal";
import ArmageddonModal from "@/components/modals/prestige/ArmageddonModal";
import BigCrunchModal from "@/components/modals/prestige/BigCrunchModal";
import ChangeNameModal from "@/components/modals/ChangeNameModal";
import DimensionBoostModal from "@/components/modals/prestige/DimensionBoostModal";
import EnterCelestialsModal from "@/components/modals/prestige/EnterCelestialsModal";
import EnterDilationModal from "@/components/modals/prestige/EnterDilationModal";
import EternityModal from "@/components/modals/prestige/EternityModal";
import ExitCelestialModal from "@/components/modals/prestige/ExitCelestialModal";
import HardResetModal from "@/components/modals/prestige/HardResetModal";
import RealityModal from "@/components/modals/prestige/RealityModal";
import ReplicantiGalaxyModal from "@/components/modals/prestige/ReplicantiGalaxyModal";
import ResetRealityModal from "@/components/modals/prestige/ResetRealityModal";
import SpeedrunModeModal from "@/components/modals/SpeedrunModeModal";
import ConfirmationOptionsModal from "@/components/modals/options/ConfirmationOptionsModal";
import InfoDisplayOptionsModal from "@/components/modals/options/InfoDisplayOptionsModal";
import AwayProgressOptionsModal from "@/components/modals/options/AwayProgressOptionsModal";
import HotkeysModal from "@/components/modals/options/HotkeysModal";
import NewsOptionsModal from "@/components/modals/options/NewsOptionsModal";
import AnimationOptionsModal from "@/components/modals/options/AnimationOptionsModal";
import PreferredTreeModal from "@/components/modals/options/PreferredTreeModal";
import AwayProgressOptionsModal from "@/components/modals/options/AwayProgressOptionsModal";
import ConfirmationOptionsModal from "@/components/modals/options/ConfirmationOptionsModal";
import HiddenTabsModal from "@/components/modals/options/hidden-tabs/HiddenTabsModal";
import HotkeysModal from "@/components/modals/options/HotkeysModal";
import InfoDisplayOptionsModal from "@/components/modals/options/InfoDisplayOptionsModal";
import NewsOptionsModal from "@/components/modals/options/NewsOptionsModal";
import PreferredTreeModal from "@/components/modals/options/PreferredTreeModal";
import DeleteCompanionGlyphModal from "@/components/modals/glyph-management/DeleteCompanionGlyphModal";
import DeleteGlyphModal from "@/components/modals/glyph-management/DeleteGlyphModal";
import PurgeGlyphModal from "@/components/modals/glyph-management/PurgeGlyphModal";
import SacrificeGlyphModal from "@/components/modals/glyph-management/SacrificeGlyphModal";
import RefineGlyphModal from "@/components/modals/glyph-management/RefineGlyphModal";
import PurgeAllUnprotectedGlyphsModal from "@/components/modals/glyph-management/PurgeAllUnprotectedGlyphsModal";
import PurgeAllRejectedGlyphsModal from "@/components/modals/glyph-management/PurgeAllRejectedGlyphsModal";
import PurgeAllUnprotectedGlyphsModal from "@/components/modals/glyph-management/PurgeAllUnprotectedGlyphsModal";
import PurgeGlyphModal from "@/components/modals/glyph-management/PurgeGlyphModal";
import RefineGlyphModal from "@/components/modals/glyph-management/RefineGlyphModal";
import SacrificeGlyphModal from "@/components/modals/glyph-management/SacrificeGlyphModal";
import H2PModal from "@/components/modals/H2PModal";
import InformationModal from "@/components/modals/InformationModal";
import GlyphShowcasePanelModal from "@/components/modals/GlyphShowcasePanelModal";
import UndoGlyphModal from "@/components/modals/UndoGlyphModal";
import ReplaceGlyphModal from "@/components/modals/ReplaceGlyphModal";
import UiChoiceModal from "@/components/modals/UiChoiceModal";
import AwayProgressModal from "@/components/modals/AwayProgressModal";
import LoadGameModal from "@/components/modals/LoadGameModal";
import ImportSaveModal from "@/components/modals/ImportSaveModal";
import ImportAutomatorScriptModal from "@/components/modals/ImportAutomatorScriptModal";
import DeleteAutomatorScriptModal from "@/components/modals/DeleteAutomatorScriptModal";
import AutomatorScriptTemplate from "@/components/modals/AutomatorScriptTemplate";
import AwayProgressModal from "@/components/modals/AwayProgressModal";
import BreakInfinityModal from "@/components/modals/BreakInfinityModal";
import DeleteAutomatorScriptModal from "@/components/modals/DeleteAutomatorScriptModal";
import EnslavedHintsModal from "@/components/modals/EnslavedHintsModal";
import GlyphSetSaveDeleteModal from "@/components/modals/GlyphSetSaveDeleteModal";
import GlyphShowcasePanelModal from "@/components/modals/GlyphShowcasePanelModal";
import H2PModal from "@/components/modals/H2PModal";
import ImportAutomatorScriptModal from "@/components/modals/ImportAutomatorScriptModal";
import ImportSaveModal from "@/components/modals/ImportSaveModal";
import InformationModal from "@/components/modals/InformationModal";
import LoadGameModal from "@/components/modals/LoadGameModal";
import PelleEffectsModal from "@/components/modals/PelleEffectsModal";
import RealityGlyphCreationModal from "@/components/modals/RealityGlyphCreationModal";
import ReplaceGlyphModal from "@/components/modals/ReplaceGlyphModal";
import SacrificeModal from "@/components/modals/SacrificeModal";
import SingularityMilestonesModal from "@/components/modals/SingularityMilestonesModal";
import StdStoreModal from "@/components/modals/StdStoreModal";
import StudyStringModal from "@/components/modals/StudyStringModal";
import SacrificeModal from "@/components/modals/SacrificeModal";
import BreakInfinityModal from "@/components/modals/BreakInfinityModal";
import GlyphSetSaveDeleteModal from "@/components/modals/GlyphSetSaveDeleteModal";
import RealityGlyphCreationModal from "@/components/modals/RealityGlyphCreationModal";
import EnslavedHintsModal from "@/components/modals/EnslavedHintsModal";
import SingularityMilestonesModal from "@/components/modals/SingularityMilestonesModal";
import PelleEffectsModal from "@/components/modals/PelleEffectsModal";
import UiChoiceModal from "@/components/modals/UiChoiceModal";
import UndoGlyphModal from "@/components/modals/UndoGlyphModal";
export class Modal {
@ -66,6 +66,7 @@ export class Modal {
this._component = component;
this._bare = bare;
this._modalConfig = {};
this._prioritize = false;
}
show(modalConfig) {
@ -73,7 +74,19 @@ export class Modal {
this._props = Object.assign({}, modalConfig || {});
if (ui.view.modal.queue.length === 0) ui.view.modal.current = this;
// New modals go to the back of the queue (shown last).
if (!ui.view.modal.queue.includes(this)) ui.view.modal.queue.push(this);
if (!ui.view.modal.queue.includes(this)) {
if (this._prioritize) {
ui.view.modal.queue.unshift(this);
ui.view.modal.current = this;
} else {
ui.view.modal.queue.push(this);
}
}
}
prioritize() {
this._prioritize = true;
return this;
}
get isOpen() {
@ -131,20 +144,20 @@ Modal.startEternityChallenge = new ChallengeConfirmationModal(EternityChallengeS
Modal.startInfinityChallenge = new ChallengeConfirmationModal(InfinityChallengeStartModal);
Modal.startNormalChallenge = new ChallengeConfirmationModal(NormalChallengeStartModal);
Modal.dimensionBoost = new Modal(DimensionBoostModal);
Modal.antimatterGalaxy = new Modal(AntimatterGalaxyModal);
Modal.bigCrunch = new Modal(BigCrunchModal);
Modal.replicantiGalaxy = new Modal(ReplicantiGalaxyModal);
Modal.eternity = new Modal(EternityModal);
Modal.enterDilation = new Modal(EnterDilationModal);
Modal.reality = new Modal(RealityModal);
Modal.resetReality = new Modal(ResetRealityModal);
Modal.exitCelestialReality = new Modal(ExitCelestialModal);
Modal.celestials = new Modal(EnterCelestialsModal);
Modal.hardReset = new Modal(HardResetModal);
Modal.dimensionBoost = new Modal(DimensionBoostModal).prioritize();
Modal.antimatterGalaxy = new Modal(AntimatterGalaxyModal).prioritize();
Modal.bigCrunch = new Modal(BigCrunchModal).prioritize();
Modal.replicantiGalaxy = new Modal(ReplicantiGalaxyModal).prioritize();
Modal.eternity = new Modal(EternityModal).prioritize();
Modal.enterDilation = new Modal(EnterDilationModal).prioritize();
Modal.reality = new Modal(RealityModal).prioritize();
Modal.resetReality = new Modal(ResetRealityModal).prioritize();
Modal.exitCelestialReality = new Modal(ExitCelestialModal).prioritize();
Modal.celestials = new Modal(EnterCelestialsModal).prioritize();
Modal.hardReset = new Modal(HardResetModal).prioritize();
Modal.enterSpeedrun = new Modal(SpeedrunModeModal);
Modal.changeName = new Modal(ChangeNameModal);
Modal.armageddon = new Modal(ArmageddonModal);
Modal.armageddon = new Modal(ArmageddonModal).prioritize();
Modal.confirmationOptions = new Modal(ConfirmationOptionsModal);
Modal.infoDisplayOptions = new Modal(InfoDisplayOptionsModal);
@ -155,16 +168,16 @@ Modal.animationOptions = new Modal(AnimationOptionsModal);
Modal.hiddenTabs = new Modal(HiddenTabsModal);
Modal.preferredTree = new Modal(PreferredTreeModal);
Modal.deleteCompanion = new Modal(DeleteCompanionGlyphModal);
Modal.glyphDelete = new Modal(DeleteGlyphModal);
Modal.glyphPurge = new Modal(PurgeGlyphModal);
Modal.glyphSacrifice = new Modal(SacrificeGlyphModal);
Modal.glyphRefine = new Modal(RefineGlyphModal);
Modal.deleteAllUnprotectedGlyphs = new Modal(PurgeAllUnprotectedGlyphsModal);
Modal.deleteAllRejectedGlyphs = new Modal(PurgeAllRejectedGlyphsModal);
Modal.deleteCompanion = new Modal(DeleteCompanionGlyphModal).prioritize();
Modal.glyphDelete = new Modal(DeleteGlyphModal).prioritize();
Modal.glyphPurge = new Modal(PurgeGlyphModal).prioritize();
Modal.glyphSacrifice = new Modal(SacrificeGlyphModal).prioritize();
Modal.glyphRefine = new Modal(RefineGlyphModal).prioritize();
Modal.deleteAllUnprotectedGlyphs = new Modal(PurgeAllUnprotectedGlyphsModal).prioritize();
Modal.deleteAllRejectedGlyphs = new Modal(PurgeAllRejectedGlyphsModal).prioritize();
Modal.glyphShowcasePanel = new Modal(GlyphShowcasePanelModal);
Modal.glyphUndo = new Modal(UndoGlyphModal);
Modal.glyphUndo = new Modal(UndoGlyphModal).prioritize();
Modal.glyphReplace = new Modal(ReplaceGlyphModal);
Modal.enslavedHints = new Modal(EnslavedHintsModal);
Modal.realityGlyph = new Modal(RealityGlyphCreationModal);
@ -182,11 +195,11 @@ Modal.shop = new Modal(StdStoreModal);
Modal.studyString = new Modal(StudyStringModal);
Modal.singularityMilestones = new Modal(SingularityMilestonesModal);
Modal.pelleEffects = new Modal(PelleEffectsModal);
Modal.sacrifice = new Modal(SacrificeModal);
Modal.sacrifice = new Modal(SacrificeModal).prioritize();
Modal.breakInfinity = new Modal(BreakInfinityModal);
Modal.celestialQuote = new class extends Modal {
show(celestial, lines) {
if (!GameUI.initialized) return;
if (!GameUI.initialized || player.speedrun.isActive) return;
const newLines = lines.map(l => Modal.celestialQuote.getLineMapping(celestial, l));
if (ui.view.modal.queue.includes(this)) {
// This shouldn't come up often, but in case we do have a pile of quotes

View File

@ -1,8 +1,10 @@
import { notify } from "./notify.js";
import { state } from "./ui.init.js";
import VTooltip from "v-tooltip";
import { useLongPress, useRepeatingClick } from "./longpress";
import VueGtag from "vue-gtag";
import { useLongPress, useRepeatingClick } from "./longpress";
import { notify } from "./notify";
import { state } from "./ui.init";
import GameUIComponent from "@/components/GameUIComponent";
Vue.mixin({

View File

@ -1,4 +1,4 @@
import { Autobuyer, AutobuyerState } from "./autobuyer.js";
import { Autobuyer, AutobuyerState } from "./autobuyer";
Autobuyer.annihilation = new class AnnihilationAutobuyerState extends AutobuyerState {
get data() {

View File

@ -1,5 +1,6 @@
import { Autobuyer, UpgradeableAutobuyerState } from "./autobuyer.js";
import { DC } from "../constants.js";
import { DC } from "../constants";
import { Autobuyer, UpgradeableAutobuyerState } from "./autobuyer";
class AntimatterDimensionAutobuyerState extends UpgradeableAutobuyerState {
get tier() {

View File

@ -1,4 +1,4 @@
import { Autobuyer } from "./autobuyer.js";
import { Autobuyer } from "./autobuyer";
export const Autobuyers = (function() {
const antimatterDimensions = Autobuyer.antimatterDimension.zeroIndexed;

View File

@ -1,4 +1,4 @@
import { Autobuyer, UpgradeableAutobuyerState } from "./autobuyer.js";
import { Autobuyer, UpgradeableAutobuyerState } from "./autobuyer";
Autobuyer.bigCrunch = new class BigCrunchAutobuyerState extends UpgradeableAutobuyerState {
get data() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, AutobuyerState } from "./autobuyer.js";
import { Autobuyer, AutobuyerState } from "./autobuyer";
class BlackHolePowerAutobuyerState extends AutobuyerState {
get data() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer.js";
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer";
Autobuyer.darkMatterDimsAscension =
new class DarkMatterDimensionAscensionAutobuyerState extends IntervaledAutobuyerState {

View File

@ -1,4 +1,4 @@
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer.js";
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer";
Autobuyer.darkMatterDims = new class DarkMatterDimensionAutobuyerState extends IntervaledAutobuyerState {
get data() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer.js";
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer";
class DilationUpgradeAutobuyerState extends IntervaledAutobuyerState {
get _upgradeName() { return ["dtGain", "galaxyThreshold", "tachyonGain"][this.id - 1]; }

View File

@ -1,4 +1,4 @@
import { Autobuyer, UpgradeableAutobuyerState } from "./autobuyer.js";
import { Autobuyer, UpgradeableAutobuyerState } from "./autobuyer";
Autobuyer.dimboost = new class DimBoostAutobuyerState extends UpgradeableAutobuyerState {
get data() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, AutobuyerState } from "./autobuyer.js";
import { Autobuyer, AutobuyerState } from "./autobuyer";
Autobuyer.eternity = new class EternityAutobuyerState extends AutobuyerState {
get data() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, UpgradeableAutobuyerState } from "./autobuyer.js";
import { Autobuyer, UpgradeableAutobuyerState } from "./autobuyer";
Autobuyer.galaxy = new class GalaxyAutobuyerState extends UpgradeableAutobuyerState {
get data() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, AutobuyerState } from "./autobuyer.js";
import { Autobuyer, AutobuyerState } from "./autobuyer";
class ImaginaryUpgradeAutobuyerState extends AutobuyerState {
get name() {

View File

@ -1,27 +1,27 @@
import "./autobuyer.js";
import "./autobuyer";
import "./antimatter-dimension-autobuyer.js";
import "./tickspeed-autobuyer.js";
import "./dimboost-autobuyer.js";
import "./galaxy-autobuyer.js";
import "./big-crunch-autobuyer.js";
import "./sacrifice-autobuyer.js";
import "./eternity-autobuyer.js";
import "./reality-autobuyer.js";
import "./antimatter-dimension-autobuyer";
import "./tickspeed-autobuyer";
import "./dimboost-autobuyer";
import "./galaxy-autobuyer";
import "./big-crunch-autobuyer";
import "./sacrifice-autobuyer";
import "./eternity-autobuyer";
import "./reality-autobuyer";
import "./infinity-dimension-autobuyer.js";
import "./time-dimension-autobuyer.js";
import "./time-theorem-autobuyer.js";
import "./black-hole-power-autobuyer.js";
import "./reality-upgrade-autobuyer.js";
import "./imaginary-upgrade-autobuyer.js";
import "./replicanti-upgrade-autobuyer.js";
import "./dilation-upgrade-autobuyer.js";
import "./prestige-currency-multiplier-autobuyer.js";
import "./replicanti-galaxy-autobuyer.js";
import "./dark-matter-dimension-autobuyer.js";
import "./dark-matter-dimension-ascension-autobuyer.js";
import "./singularity-autobuyer.js";
import "./annihilation-autobuyer.js";
import "./infinity-dimension-autobuyer";
import "./time-dimension-autobuyer";
import "./time-theorem-autobuyer";
import "./black-hole-power-autobuyer";
import "./reality-upgrade-autobuyer";
import "./imaginary-upgrade-autobuyer";
import "./replicanti-upgrade-autobuyer";
import "./dilation-upgrade-autobuyer";
import "./prestige-currency-multiplier-autobuyer";
import "./replicanti-galaxy-autobuyer";
import "./dark-matter-dimension-autobuyer";
import "./dark-matter-dimension-ascension-autobuyer";
import "./singularity-autobuyer";
import "./annihilation-autobuyer";
export * from "./autobuyers.js";
export * from "./autobuyers";

View File

@ -1,5 +1,6 @@
import { InfinityDimensions } from "../globals.js";
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer.js";
import { InfinityDimensions } from "../globals";
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer";
class InfinityDimensionAutobuyerState extends IntervaledAutobuyerState {
get tier() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, AutobuyerState } from "./autobuyer.js";
import { Autobuyer, AutobuyerState } from "./autobuyer";
Autobuyer.ipMult = new class IPMultAutobuyerState extends AutobuyerState {
get data() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, AutobuyerState } from "./autobuyer.js";
import { Autobuyer, AutobuyerState } from "./autobuyer";
Autobuyer.reality = new class RealityAutobuyerState extends AutobuyerState {
get data() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, AutobuyerState } from "./autobuyer.js";
import { Autobuyer, AutobuyerState } from "./autobuyer";
class RealityUpgradeAutobuyerState extends AutobuyerState {
get name() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, AutobuyerState } from "./autobuyer.js";
import { Autobuyer, AutobuyerState } from "./autobuyer";
Autobuyer.replicantiGalaxy = new class ReplicantiGalaxyAutobuyerState extends AutobuyerState {
get data() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer.js";
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer";
class ReplicantiUpgradeAutobuyerState extends IntervaledAutobuyerState {
get _upgradeName() { return ["chance", "interval", "galaxies"][this.id - 1]; }

View File

@ -1,4 +1,4 @@
import { Autobuyer, AutobuyerState } from "./autobuyer.js";
import { Autobuyer, AutobuyerState } from "./autobuyer";
Autobuyer.sacrifice = new class SacrificeAutobuyerState extends AutobuyerState {
get data() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, AutobuyerState } from "./autobuyer.js";
import { Autobuyer, AutobuyerState } from "./autobuyer";
Autobuyer.singularity = new class SingularityAutobuyerState extends AutobuyerState {
get data() {

View File

@ -1,5 +1,6 @@
import { Autobuyer, UpgradeableAutobuyerState } from "./autobuyer.js";
import { DC } from "../constants.js";
import { DC } from "../constants";
import { Autobuyer, UpgradeableAutobuyerState } from "./autobuyer";
Autobuyer.tickspeed = new class TickspeedAutobuyerState extends UpgradeableAutobuyerState {
get data() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer.js";
import { Autobuyer, IntervaledAutobuyerState } from "./autobuyer";
class TimeDimensionAutobuyerState extends IntervaledAutobuyerState {
get tier() {

View File

@ -1,4 +1,4 @@
import { Autobuyer, AutobuyerState } from "./autobuyer.js";
import { Autobuyer, AutobuyerState } from "./autobuyer";
Autobuyer.timeTheorem = new class TimeTheoremAutobuyerState extends AutobuyerState {
get data() {

View File

@ -1,5 +1,5 @@
import { AutomatorGrammar } from "./parser.js";
import { AutomatorLexer } from "./lexer.js";
import { AutomatorGrammar } from "./parser";
import { AutomatorLexer } from "./lexer";
(function() {
function walkSuggestion(suggestion, prefix, output) {
@ -60,7 +60,7 @@ import { AutomatorLexer } from "./lexer.js";
{ regex: /blob\s\s/ui, token: "blob" },
{
// eslint-disable-next-line max-len
regex: /auto\s|if\s|pause\s|studies\s|tt\s|time theorems\s|until\s|wait\s|while\s|black[ \t]+hole\s|stored?[ \t]time\s|notify/ui,
regex: /(auto|if|pause|studies|tt|time[ \t]+theorems?|until|wait|while|black[ \t]+hole|stored?[ \t]+game[ \t]+time|notify)\s/ui,
token: "keyword",
next: "commandArgs"
},

View File

@ -1,4 +1,4 @@
import { AutomatorLexer } from "./lexer.js";
import { AutomatorLexer } from "./lexer";
/**
* Note: the $ shorthand for the parser object is required by Chevrotain. Don't mess with it.
@ -559,9 +559,9 @@ export const AutomatorCommands = ((() => {
})
},
{
id: "storeTime",
id: "storeGameTime",
rule: $ => () => {
$.CONSUME(T.StoreTime);
$.CONSUME(T.StoreGameTime);
$.OR([
{ ALT: () => $.CONSUME(T.On) },
{ ALT: () => $.CONSUME(T.Off) },
@ -569,10 +569,10 @@ export const AutomatorCommands = ((() => {
]);
},
validate: (ctx, V) => {
ctx.startLine = ctx.StoreTime[0].startLine;
ctx.startLine = ctx.StoreGameTime[0].startLine;
if (!Enslaved.isUnlocked) {
V.addError(ctx.StoreTime[0], "You do not yet know how to store time",
"Unlock the ability to store time");
V.addError(ctx.StoreGameTime[0], "You do not yet know how to store game time",
"Unlock the ability to store game time");
return false;
}
return true;
@ -581,9 +581,9 @@ export const AutomatorCommands = ((() => {
if (ctx.Use) return () => {
if (Enslaved.isUnlocked) {
Enslaved.useStoredTime(false);
AutomatorData.logCommandEvent(`Stored time used`, ctx.startLine);
AutomatorData.logCommandEvent(`Stored game time used`, ctx.startLine);
} else {
AutomatorData.logCommandEvent(`Attempted to use stored time, but failed (not unlocked yet)`,
AutomatorData.logCommandEvent(`Attempted to use stored game time, but failed (not unlocked yet)`,
ctx.startLine);
}
return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;
@ -591,14 +591,14 @@ export const AutomatorCommands = ((() => {
const on = Boolean(ctx.On);
return () => {
if (on !== player.celestials.enslaved.isStoring) Enslaved.toggleStoreBlackHole();
AutomatorData.logCommandEvent(`Storing time toggled ${ctx.On ? "ON" : "OFF"}`, ctx.startLine);
AutomatorData.logCommandEvent(`Storing game time toggled ${ctx.On ? "ON" : "OFF"}`, ctx.startLine);
return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;
};
},
blockify: ctx => ({
// eslint-disable-next-line no-nested-ternary
target: ctx.Use ? "USE" : (ctx.On ? "ON" : "OFF"),
...automatorBlocksMap["STORE TIME"]
...automatorBlocksMap["STORE GAME TIME"]
})
},
{
@ -723,7 +723,7 @@ export const AutomatorCommands = ((() => {
if (missingStudyCount === 0) {
AutomatorData.logCommandEvent(`Fully loaded study preset ${ctx.Preset[0].image}`, ctx.startLine);
} else if (afterCount > beforeCount) {
AutomatorData.logCommandEvent(`Partially loaded study preset ${ctx.Preset[0].image}
AutomatorData.logCommandEvent(`Partially loaded study preset ${ctx.Preset[0].image}
(missing ${quantifyInt("study", missingStudyCount)})`, ctx.startLine);
}
return ctx.Nowait !== undefined || missingStudyCount === 0

View File

@ -1,6 +1,6 @@
import { AutomatorCommands } from "./automator-commands.js";
import { AutomatorGrammar } from "./parser.js";
import { AutomatorLexer } from "./lexer.js";
import { AutomatorCommands } from "./automator-commands";
import { AutomatorGrammar } from "./parser";
import { AutomatorLexer } from "./lexer";
(function() {
if (AutomatorGrammar === undefined) {

View File

@ -1,5 +1,5 @@
import "./compiler.js";
import "./automator-codemirror.js";
import "./compiler";
import "./automator-codemirror";
export { AutomatorGrammar } from "./parser.js";
export { standardizeAutomatorCurrencyName } from "./lexer.js";
export { AutomatorGrammar } from "./parser";
export { standardizeAutomatorCurrencyName } from "./lexer";

View File

@ -2,7 +2,8 @@
/* eslint-disable require-unicode-regexp */
/* eslint-disable camelcase */
import { createToken, Lexer } from "chevrotain";
import { DC } from "../constants.js";
import { DC } from "../constants";
export const AutomatorLexer = (() => {
const createCategory = name => createToken({ name, pattern: Lexer.NA, longer_alt: Identifier });
@ -304,8 +305,8 @@ export const AutomatorLexer = (() => {
createKeyword("BlackHole", /black[ \t]+hole/i, {
$autocomplete: "black hole",
});
createKeyword("StoreTime", /stored?[ \t]+time/i, {
$autocomplete: "store time",
createKeyword("StoreGameTime", /stored?[ \t]+game[ \t]+time/i, {
$autocomplete: "store game time",
});
createKeyword("Dilation", /dilation/i);

View File

@ -1,6 +1,7 @@
import { Parser, EOF } from "chevrotain";
import { AutomatorCommands } from "./automator-commands.js";
import { AutomatorLexer } from "./lexer.js";
import { EOF, Parser } from "chevrotain";
import { AutomatorCommands } from "./automator-commands";
import { AutomatorLexer } from "./lexer";
export const AutomatorGrammar = (function() {
const T = AutomatorLexer.tokenMap;

View File

@ -63,8 +63,9 @@ export class ScriptTemplate {
storeTreeData(params) {
const nowaitStr = params.treeNowait ? " nowait" : "";
if (params.treePreset) {
const presetObj = player.timestudy.presets.find(p => p.name === params.treePreset);
this.storedTreeStr = `studies${nowaitStr} load preset ${presetObj.name}`;
const presetObj = player.timestudy.presets.map((p, i) => ({ ...p, id: i + 1 }))
.find(p => (p.name === params.treePreset || p.id === Number(params.treePreset)));
this.storedTreeStr = `studies${nowaitStr} load preset ${presetObj.name || presetObj.id}`;
this.storedTreeObj = new TimeStudyTree(presetObj.studies);
} else {
this.storedTreeStr = `studies${nowaitStr} ${params.treeStudies}`;

View File

@ -1,7 +1,7 @@
import { GameMechanicState, SetPurchasableMechanicState, RebuyableMechanicState } from "./game-mechanics/index.js";
import { DC } from "./constants.js";
import { SpeedrunMilestones } from "./speedrun.js";
import { GameMechanicState, RebuyableMechanicState, SetPurchasableMechanicState } from "./game-mechanics/index";
import { DC } from "./constants";
import FullScreenAnimationHandler from "./full-screen-animation-handler";
import { SpeedrunMilestones } from "./speedrun";
export function bigCrunchAnimation() {
FullScreenAnimationHandler.display("implode", 2);
@ -50,10 +50,10 @@ export function bigCrunchReset() {
if (Pelle.isDoomed) PelleStrikes.infinity.trigger();
EventHub.dispatch(GAME_EVENT.BIG_CRUNCH_AFTER);
if (firstInfinity && !Pelle.isDoomed) Modal.message.show(`Upon Infinity, all Dimensions, Dimension Boosts, and Antimatter
Galaxies are reset, but in return, you gain an Infinity Point (IP). This allows you to buy multiple upgrades that
you can find in the Infinity tab. You will also gain one Infinity, which is the stat shown in the Statistics
tab.`);
if (firstInfinity && !Pelle.isDoomed) Modal.message.show(`Upon Infinity, all Dimensions, Dimension Boosts, and
Antimatter Galaxies are reset, but in return, you gain an Infinity Point (IP). This allows you to buy multiple
upgrades that you can find in the Infinity tab. You will also gain one Infinity, which is the stat shown in the
Statistics tab.`);
}
function bigCrunchUpdateStatistics() {

View File

@ -1,5 +1,5 @@
import { DC } from "./constants.js";
import { SpeedrunMilestones } from "./speedrun.js";
import { DC } from "./constants";
import { SpeedrunMilestones } from "./speedrun";
class BlackHoleUpgradeState {
constructor(config) {
@ -355,6 +355,7 @@ export const BlackHoles = {
Currency.realityMachines.purchase(100);
SpeedrunMilestones(17).tryComplete();
Achievement(144).unlock();
EventHub.dispatch(GAME_EVENT.BLACK_HOLE_UNLOCKED);
},
togglePause: () => {

View File

@ -1,7 +1,9 @@
import { GameDatabase } from "../secret-formula/game-database.js";
import { GameMechanicState, BitUpgradeState } from "../game-mechanics/index.js";
import { CelestialQuotes } from "./quotes.js";
import { SpeedrunMilestones } from "../speedrun.js";
import { BitUpgradeState, GameMechanicState } from "../game-mechanics/index";
import { GameDatabase } from "../secret-formula/game-database";
import { SpeedrunMilestones } from "../speedrun";
import { CelestialQuotes } from "./quotes";
/**
* Information about how to format runUnlocks:
@ -25,7 +27,7 @@ class VRunUnlockState extends GameMechanicState {
}
get canBeReduced() {
return this.completions < this.config.values.length &&
return this.completions < this.config.values.length && this.completions !== 0 &&
new Decimal(this.reduction).neq(this.config.maxShardReduction(this.conditionBaseValue));
}
@ -172,7 +174,7 @@ export const V = {
}
},
get canUnlockCelestial() {
return VUnlocks.vAchievementUnlock.canUnlock;
return VUnlocks.vAchievementUnlock.canBeUnlocked;
},
unlockCelestial() {
// eslint-disable-next-line no-bitwise

View File

@ -1,10 +1,10 @@
import { Teresa } from "./teresa.js";
import { Effarig } from "./effarig.js";
import { Enslaved } from "./enslaved.js";
import { V } from "./V.js";
import { Ra } from "./ra/ra.js";
import { Laitela } from "./laitela/laitela.js";
import { Effarig } from "./effarig";
import { Enslaved } from "./enslaved";
import { Laitela } from "./laitela/laitela";
import { Pelle } from "./pelle/pelle";
import { Ra } from "./ra/ra";
import { Teresa } from "./teresa";
import { V } from "./V";
export const Celestials = {
teresa: Teresa,
@ -44,7 +44,7 @@ GameDatabase.celestials.descriptions = [
Tachyon Particle production and Dilated Time production are severely reduced
Time Theorem generation from Dilation Glyphs is disabled
Certain challenge goals have been increased
Stored Time is discharged at a reduced effectiveness (exponent^${format(0.55, 2, 2)}) `;
Stored game time is discharged at a reduced effectiveness (exponent^${format(0.55, 2, 2)}) `;
}
},
{

View File

@ -1,7 +1,9 @@
import { GameDatabase } from "../secret-formula/game-database.js";
import { BitUpgradeState } from "../game-mechanics/index.js";
import { CelestialQuotes } from "./quotes.js";
import { DC } from "../constants.js";
import { BitUpgradeState } from "../game-mechanics/index";
import { GameDatabase } from "../secret-formula/game-database";
import { DC } from "../constants";
import { CelestialQuotes } from "./quotes";
export const EFFARIG_STAGES = {
INFINITY: 1,

View File

@ -1,6 +1,7 @@
import { GameDatabase } from "../secret-formula/game-database.js";
import { BitUpgradeState } from "../game-mechanics/index.js";
import { CelestialQuotes } from "./quotes.js";
import { BitUpgradeState } from "../game-mechanics/index";
import { GameDatabase } from "../secret-formula/game-database";
import { CelestialQuotes } from "./quotes";
export const ENSLAVED_UNLOCKS = {
FREE_TICKSPEED_SOFTCAP: {
@ -152,6 +153,9 @@ export const Enslaved = {
return Math.max(baseRealityBoostRatio, Math.floor(player.celestials.enslaved.storedReal /
Math.max(1000, Time.thisRealityRealTime.totalMilliseconds)));
},
get canAmplify() {
return this.realityBoostRatio > 1 && !Pelle.isDoomed && !isInCelestialReality();
},
storedTimeInsideEnslaved(stored) {
if (stored <= 1e3) return stored;
return Math.pow(10, Math.pow(Math.log10(stored / 1e3), 0.55)) * 1e3;

View File

@ -1,5 +1,5 @@
import { DimensionState } from "../../dimensions/dimension.js";
import { DC } from "../../constants.js";
import { DC } from "../../constants";
import { DimensionState } from "../../dimensions/dimension";
/**
* Constants for easily adjusting values

View File

@ -1,6 +1,7 @@
import { CelestialQuotes } from "../quotes.js";
import { DC } from "../../constants.js";
import { DarkMatterDimensions } from "./dark-matter-dimension.js";
import { CelestialQuotes } from "../quotes";
import { DC } from "../../constants";
import { DarkMatterDimensions } from "./dark-matter-dimension";
export const Laitela = {
displayName: "Lai'tela",
@ -52,7 +53,7 @@ export const Laitela = {
},
// Note that entropy goes from 0 to 1, with 1 being completion
get entropyGainPerSecond() {
return Math.clamp(Math.pow(Currency.antimatter.value.log10() / 1e11, 2), 0, 100) / 200;
return Math.clamp(Math.pow(Currency.antimatter.value.add(1).log10() / 1e11, 2), 0, 100) / 200;
},
get darkMatterMultGain() {
return Decimal.pow(Currency.darkMatter.value.dividedBy(this.annihilationDMRequirement)

View File

@ -1,4 +1,5 @@
import { GameMechanicState } from "../../game-mechanics/index.js";
import { GameMechanicState } from "../../game-mechanics/index";
import { deepmergeAll } from "@/utility/deepmerge";
class SingularityMilestoneState extends GameMechanicState {

View File

@ -1,5 +1,6 @@
import { DC } from "../../constants";
import { RebuyableMechanicState } from "../../game-mechanics/rebuyable";
import { PelleRifts } from "./rifts";
export const GalaxyGenerator = {

View File

@ -1,9 +1,11 @@
import { DC } from "../../constants";
import { Currency } from "../../currency";
import { DC } from "../../constants";
import { RebuyableMechanicState } from "../../game-mechanics/rebuyable";
import { SetPurchasableMechanicState } from "../../utils";
import { CelestialQuotes } from "../quotes";
import zalgo from "./zalgo";
import { CelestialQuotes } from "../quotes.js";
const disabledMechanicUnlocks = {
achievements: () => ({}),
@ -116,7 +118,7 @@ export const Pelle = {
},
get disabledAchievements() {
return [143, 142, 141, 125, 118, 117, 111, 104, 103, 92, 91, 78, 76, 74, 65, 55, 54, 37];
return [143, 142, 141, 133, 125, 118, 117, 111, 104, 103, 92, 91, 78, 76, 74, 65, 55, 54, 37];
},
get uselessInfinityUpgrades() {
@ -152,36 +154,13 @@ export const Pelle = {
get specialGlyphEffect() {
const isUnlocked = this.isDoomed && PelleRifts.chaos.milestones[1].canBeApplied;
let description;
switch (Pelle.activeGlyphType) {
case "infinity":
description = "Infinity Point gain {value} (based on current IP)";
break;
case "time":
description = "Eternity Point gain {value} (based on current EP)";
break;
case "replication":
description = "Replication speed {value} (based on Famine)";
break;
case "dilation":
description = "Dilated Time gain {value} (based on Tachyon Galaxies)";
break;
case "power":
description = `Galaxies are ${formatPercents(0.02)} stronger`;
break;
case "companion":
description = `You feel ${formatPercents(0.34)} better`;
break;
default:
description = "No glyph equipped!";
break;
}
const description = this.getSpecialGlyphEffectDescription(this.activeGlyphType);
const isActive = type => isUnlocked && this.activeGlyphType === type;
return {
isUnlocked,
description,
infinity: (isActive("infinity") && player.challenge.eternity.current <= 8)
? Currency.infinityPoints.value.pow(0.2)
? Currency.infinityPoints.value.plus(1).pow(0.2)
: DC.D1,
time: isActive("time")
? Currency.eternityPoints.value.plus(1).pow(0.3)
@ -201,6 +180,32 @@ export const Pelle = {
isScaling: () => ["infinity", "time", "replication", "dilation"].includes(this.activeGlyphType),
};
},
getSpecialGlyphEffectDescription(type) {
switch (type) {
case "infinity":
return `Infinity Point gain ${player.challenge.eternity.current <= 8
? formatX(Currency.infinityPoints.value.plus(1).pow(0.2), 2)
: formatX(DC.D1, 2)} (based on current IP)`;
case "time":
return `Eternity Point gain ${formatX(Currency.eternityPoints.value.plus(1).pow(0.3), 2)}
(based on current EP)`;
case "replication":
return `Replication speed ${formatX(10 ** 53 ** (PelleRifts.famine.percentage), 2)} (based on Famine)`;
case "dilation":
return `Dilated Time gain ${formatX(Decimal.pow(player.dilation.totalTachyonGalaxies, 1.5).max(1), 2)}
(based on Tachyon Galaxies)`;
case "power":
return `Galaxies are ${formatPercents(0.02)} stronger`;
case "companion":
return `You feel ${formatPercents(0.34)} better`;
// Undefined means that there is no glyph equipped, needs to be here since this function is used in
// both Current Glyph Effects and Glyph Tooltip
case undefined:
return "No glyph equipped!";
default:
return "";
}
},
get remnantRequirementForDilation() {
return 3.8e7;
@ -268,7 +273,7 @@ export const Pelle = {
// Transition text from "from" to "to", stage is 0-1, 0 is fully "from" and 1 is fully "to"
// Also adds more zalgo the bigger the stage
transitionText(from, to, stage = 0) {
const len = (from.length * (1 - stage) + to.length * stage);
const len = Math.round((from.length * (1 - stage) + to.length * stage) * 1e8) / 1e8;
const toInterval = len * (1 - stage);
let req = toInterval;
let str = "";

View File

@ -1,4 +1,4 @@
import { GameMechanicState } from "../../game-mechanics/index.js";
import { GameMechanicState } from "../../game-mechanics/index";
/**
* @abstract

View File

@ -1,5 +1,5 @@
import { GameMechanicState, BitUpgradeState } from "../../game-mechanics/index.js";
import { CelestialQuotes } from "../quotes.js";
import { BitUpgradeState, GameMechanicState } from "../../game-mechanics/index";
import { CelestialQuotes } from "../quotes";
class RaUnlockState extends BitUpgradeState {
get bits() { return player.celestials.ra.unlockBits; }
@ -94,7 +94,7 @@ class RaPetState extends GameMechanicState {
}
get level() {
return this.data.level;
return this.isUnlocked ? this.data.level : 0;
}
set level(value) {

View File

@ -1,6 +1,7 @@
import { GameDatabase } from "../secret-formula/game-database.js";
import { BitUpgradeState, RebuyableMechanicState } from "../game-mechanics/index.js";
import { CelestialQuotes } from "./quotes.js";
import { BitUpgradeState, RebuyableMechanicState } from "../game-mechanics/index";
import { GameDatabase } from "../secret-formula/game-database";
import { CelestialQuotes } from "./quotes";
export const Teresa = {
timePoured: 0,

View File

@ -1,5 +1,5 @@
import { GameMechanicState } from "./game-mechanics/index.js";
import { DC } from "./constants.js";
import { DC } from "./constants";
import { GameMechanicState } from "./game-mechanics/index";
// This function does *not* reset anything. Only call it when you've already
// done all the non-UI stuff. Right now the only UI thing to do is switch to
@ -190,7 +190,8 @@ class InfinityChallengeState extends GameMechanicState {
}
get isUnlocked() {
return player.records.thisEternity.maxAM.gte(this.unlockAM) || Achievement(133).isUnlocked;
return player.records.thisEternity.maxAM.gte(this.unlockAM) || (Achievement(133).isUnlocked && !Pelle.isDoomed) ||
(PelleUpgrade.keepInfinityChallenges.canBeApplied && Pelle.cel.records.totalAntimatter.gte(this.unlockAM));
}
get isRunning() {

View File

@ -1,4 +1,4 @@
import { DC } from "./constants.js";
import { DC } from "./constants";
/**

View File

@ -1,7 +1,8 @@
import { DC } from "./constants.js";
import { sha512_256 } from "js-sha512";
import FullScreenAnimationHandler from "./full-screen-animation-handler";
import { DC } from "./constants";
/* eslint-disable no-console */
// Disabling no-console here seems
// reasonable, since these are the devtools after all

View File

@ -1,7 +1,7 @@
import { SetPurchasableMechanicState, RebuyableMechanicState } from "./game-mechanics/index.js";
import { DC } from "./constants.js";
import { SpeedrunMilestones } from "./speedrun.js";
import { RebuyableMechanicState, SetPurchasableMechanicState } from "./game-mechanics/index";
import { DC } from "./constants";
import FullScreenAnimationHandler from "./full-screen-animation-handler";
import { SpeedrunMilestones } from "./speedrun";
export function animateAndDilate() {
FullScreenAnimationHandler.display("dilate", 2);

View File

@ -1,4 +1,4 @@
import { DC } from "./constants.js";
import { DC } from "./constants";
class DimBoostRequirement {
constructor(tier, amount) {

View File

@ -1,5 +1,6 @@
import { DimensionState } from "./dimension.js";
import { DC } from "../constants.js";
import { DC } from "../constants";
import { DimensionState } from "./dimension";
// Multiplier applied to all Antimatter Dimensions, regardless of tier. This is cached using a Lazy
// and invalidated every update.

View File

@ -1,5 +1,6 @@
import { DimensionState } from "./dimension.js";
import { DC } from "../constants.js";
import { DC } from "../constants";
import { DimensionState } from "./dimension";
export function infinityDimensionCommonMultiplier() {
let mult = new Decimal(ShopPurchase.allDimPurchases.currentMult)

View File

@ -1,5 +1,6 @@
import { DimensionState } from "./dimension.js";
import { DC } from "../constants.js";
import { DC } from "../constants";
import { DimensionState } from "./dimension";
export function buySingleTimeDimension(tier) {
const dim = TimeDimension(tier);

View File

@ -1,5 +1,5 @@
import { GameMechanicState, SetPurchasableMechanicState } from "./game-mechanics/index.js";
import { DC } from "./constants.js";
import { GameMechanicState, SetPurchasableMechanicState } from "./game-mechanics/index";
import { DC } from "./constants";
import FullScreenAnimationHandler from "./full-screen-animation-handler";
function giveEternityRewards(auto) {

View File

@ -1,6 +1,6 @@
import { GameMechanicState } from "./game-mechanics/index.js";
import { DC } from "./constants.js";
import { DC } from "./constants";
import { deepmergeAll } from "@/utility/deepmerge";
import { GameMechanicState } from "./game-mechanics/index";
export function startEternityChallenge() {
initializeChallengeCompletions();

View File

@ -94,6 +94,7 @@ window.GAME_EVENT = {
REALITY_UPGRADE_BOUGHT: "REALITY_UPGRADE_BOUGHT",
REALITY_UPGRADE_TEN_BOUGHT: "REALITY_UPGRADE_TEN_BOUGHT",
PERK_BOUGHT: "PERK_BOUGHT",
BLACK_HOLE_UNLOCKED: "BLACK_HOLE_UNLOCKED",
BLACK_HOLE_UPGRADE_BOUGHT: "BLACK_HOLE_UPGRADE_BOUGHT",
GAME_LOAD: "GAME_LOAD",
SAVE_CONVERTED_FROM_PREVIOUS_VERSION: "SAVE_CONVERTED_FROM_PREVIOUS_VERSION",

View File

@ -1,4 +1,4 @@
import { PurchasableMechanicState } from "./puchasable.js";
import { PurchasableMechanicState } from "./puchasable";
/**
* @abstract

View File

@ -1,4 +1,4 @@
import { GameMechanicState } from "./game-mechanic.js";
import { GameMechanicState } from "./game-mechanic";
/**
* @abstract

View File

@ -1,4 +1,4 @@
import { Effect } from "./effect.js";
import { Effect } from "./effect";
/**
* @abstract

View File

@ -1,8 +1,8 @@
export * from "./effect.js";
export * from "./effects.js";
export * from "./game-mechanic.js";
export * from "./bit-upgrade-state.js";
export * from "./puchasable.js";
export * from "./set-purchasable.js";
export * from "./bit-purchasable.js";
export * from "./rebuyable.js";
export * from "./effect";
export * from "./effects";
export * from "./game-mechanic";
export * from "./bit-upgrade-state";
export * from "./puchasable";
export * from "./set-purchasable";
export * from "./bit-purchasable";
export * from "./rebuyable";

View File

@ -1,4 +1,4 @@
import { GameMechanicState } from "./game-mechanic.js";
import { GameMechanicState } from "./game-mechanic";
/**
* @abstract

View File

@ -1,4 +1,4 @@
import { GameMechanicState } from "./game-mechanic.js";
import { GameMechanicState } from "./game-mechanic";
/**
* @abstract

View File

@ -1,4 +1,4 @@
import { PurchasableMechanicState } from "./puchasable.js";
import { PurchasableMechanicState } from "./puchasable";
/**
* @abstract

View File

@ -1,90 +1,90 @@
export * from "./glyph-effects.js";
export * from "./player.js";
export * from "./glyph-effects";
export * from "./player";
export * from "./automator/automator-backend.js";
export * from "./performance-stats.js";
export * from "./currency.js";
export * from "./cache.js";
export * from "./intervals.js";
export * from "./keyboard.js";
export * from "./hotkeys.js";
export * from "./galaxy.js";
export * from "./away-progress.js";
export * from "./confirmations.js";
export * from "./automator/automator-backend";
export * from "./performance-stats";
export * from "./currency";
export * from "./cache";
export * from "./intervals";
export * from "./keyboard";
export * from "./hotkeys";
export * from "./galaxy";
export * from "./away-progress";
export * from "./confirmations";
export * from "./autobuyers/index.js";
export * from "./storage/index.js";
export * from "./autobuyers/index";
export * from "./storage/index";
export * from "./notations.js";
export * from "./tutorial.js";
export * from "./notations";
export * from "./tutorial";
export * from "./new-game.js";
export * from "./new-game";
export * from "./celestials/quotes.js";
export * from "./celestials/teresa.js";
export * from "./celestials/effarig.js";
export * from "./celestials/enslaved.js";
export * from "./celestials/V.js";
export * from "./celestials/ra/ra.js";
export * from "./celestials/ra/alchemy.js";
export * from "./celestials/laitela/laitela.js";
export * from "./celestials/laitela/dark-matter-dimension.js";
export * from "./celestials/laitela/singularity.js";
export * from "./celestials/pelle/pelle.js";
export * from "./celestials/pelle/strikes.js";
export * from "./celestials/pelle/rifts.js";
export * from "./celestials/pelle/galaxy-generator.js";
export * from "./celestials/pelle/game-end.js";
export * from "./celestials/celestials.js";
export * from "./celestials/quotes";
export * from "./celestials/teresa";
export * from "./celestials/effarig";
export * from "./celestials/enslaved";
export * from "./celestials/V";
export * from "./celestials/ra/ra";
export * from "./celestials/ra/alchemy";
export * from "./celestials/laitela/laitela";
export * from "./celestials/laitela/dark-matter-dimension";
export * from "./celestials/laitela/singularity";
export * from "./celestials/pelle/pelle";
export * from "./celestials/pelle/strikes";
export * from "./celestials/pelle/rifts";
export * from "./celestials/pelle/galaxy-generator";
export * from "./celestials/pelle/game-end";
export * from "./celestials/celestials";
export * from "./automator/index.js";
export * from "./automator/automator-points.js";
export * from "./automator/index";
export * from "./automator/automator-points";
export * from "./app/player-progress.js";
export * from "./app/modal.js";
export * from "./app/themes.js";
export * from "./app/options.js";
export * from "./app/ui.js";
export * from "./app/player-progress";
export * from "./app/modal";
export * from "./app/themes";
export * from "./app/options";
export * from "./app/ui";
export * from "./achievements/normal-achievement.js";
export * from "./achievements/secret-achievement.js";
export * from "./achievements/achievement-timer.js";
export * from "./achievements/normal-achievement";
export * from "./achievements/secret-achievement";
export * from "./achievements/achievement-timer";
export * from "./glyphs/glyph-core.js";
export * from "./glyphs/glyph-effects.js";
export * from "./glyphs/glyph-generator.js";
export * from "./glyphs/glyph-purge-handler.js";
export * from "./glyphs/auto-glyph-processor.js";
export * from "./glyphs/glyph-core";
export * from "./glyphs/glyph-effects";
export * from "./glyphs/glyph-generator";
export * from "./glyphs/glyph-purge-handler";
export * from "./glyphs/auto-glyph-processor";
export * from "./time.js";
export * from "./tickspeed.js";
export * from "./time";
export * from "./tickspeed";
export * from "./dimensions/antimatter-dimension.js";
export * from "./dimensions/infinity-dimension.js";
export * from "./dimensions/time-dimension.js";
export * from "./dimensions/antimatter-dimension";
export * from "./dimensions/infinity-dimension";
export * from "./dimensions/time-dimension";
export * from "./time-studies/index.js";
export * from "./time-studies/index";
export * from "./dimboost.js";
export * from "./sacrifice.js";
export * from "./big_crunch.js";
export * from "./challenge.js";
export * from "./eternity.js";
export * from "./eternity_challenge.js";
export * from "./reality.js";
export * from "./replicanti.js";
export * from "./time-theorems.js";
export * from "./reality-upgrades.js";
export * from "./imaginary-upgrades.js";
export * from "./perks.js";
export * from "./dilation.js";
export * from "./black_hole.js";
export * from "./machines.js";
export * from "./devtools.js";
export * from "./news-ticker.js";
export * from "./kong.js";
export * from "./ui/tabs.js";
export * from "./ui/tab-notifications.js";
export * from "./speedrun.js";
export * from "./dimboost";
export * from "./sacrifice";
export * from "./big_crunch";
export * from "./challenge";
export * from "./eternity";
export * from "./eternity_challenge";
export * from "./reality";
export * from "./replicanti";
export * from "./time-theorems";
export * from "./reality-upgrades";
export * from "./imaginary-upgrades";
export * from "./perks";
export * from "./dilation";
export * from "./black_hole";
export * from "./machines";
export * from "./devtools";
export * from "./news-ticker";
export * from "./kong";
export * from "./ui/tabs";
export * from "./ui/tab-notifications";
export * from "./speedrun";
export * from "./automator/script-templates.js";
export * from "./automator/script-templates";

View File

@ -1,5 +1,5 @@
import { GameDatabase } from "./secret-formula/game-database.js";
import { DC } from "./constants.js";
import { DC } from "./constants";
import { GameDatabase } from "./secret-formula/game-database";
// There is a little too much stuff about glyph effects to put in constants.

View File

@ -1,4 +1,4 @@
import { GameMechanicState } from "../game-mechanics/index.js";
import { GameMechanicState } from "../game-mechanics/index";
export const orderedEffectList = ["powerpow", "infinitypow", "replicationpow", "timepow",
"dilationpow", "timeshardpow", "powermult", "powerdimboost", "powerbuy10",

View File

@ -1,6 +1,7 @@
import { GameKeyboard } from "./keyboard.js";
import Mousetrap from "mousetrap";
import { GameKeyboard } from "./keyboard";
// Add your hotkeys and combinations here
// GameKeyboard.bind for single press combinations
// GameKeyboard.bindRepeatable for repeatable combinations

View File

@ -1,5 +1,5 @@
import { BitPurchasableMechanicState, RebuyableMechanicState } from "./game-mechanics/index.js";
import { DC } from "./constants.js";
import { BitPurchasableMechanicState, RebuyableMechanicState } from "./game-mechanics/index";
import { DC } from "./constants";
class ImaginaryUpgradeState extends BitPurchasableMechanicState {
constructor(config) {

View File

@ -57,19 +57,6 @@ export const GameIntervals = (function() {
checkCloudSave: interval(() => {
if (player.options.cloudEnabled && Cloud.loggedIn) Cloud.saveCheck();
}, 300000),
submitKongStats: interval(() => {
kong.submitStats("Log10 of total antimatter", player.records.totalAntimatter.e);
kong.submitStats("Log10 of Infinity Points", player.infinityPoints.e);
kong.submitStats("Log10 of Eternity Points", player.eternityPoints.e);
kong.submitStats("NormalChallenge 9 time record (ms)", Math.floor(player.challenge.normal.bestTimes[8]));
kong.submitStats("Fastest Infinity time (ms)", Math.floor(player.records.bestInfinity.time));
// FIXME: Infinitified is now Decimal so decide what happens here!
// kong.submitStats('Infinitied', Currency.infinitiesTotal);
// FIXME: Eternity count is now a Decimal.
// kong.submitStats("Eternities", Currency.eternities);
kong.submitStats("Achievements", Achievements.effectiveCount +
SecretAchievements.all.countWhere(a => a.isUnlocked));
}, 60000),
randomSecretAchievement: interval(() => {
if (Math.random() < 0.00001) SecretAchievement(18).unlock();
}, 1000),

View File

@ -1,4 +1,4 @@
import { RebuyableMechanicState } from "./game-mechanics/index.js";
import { RebuyableMechanicState } from "./game-mechanics/index";
export const kong = {};
@ -17,14 +17,6 @@ kong.init = function() {
} catch (err) { console.log("Couldn't load Kongregate API"); }
};
kong.submitStats = function(name, value) {
if (!kong.enabled) return;
try {
kongregate.stats.submit(name, value);
// eslint-disable-next-line no-console
} catch (e) { console.log(e); }
};
class ShopPurchaseState extends RebuyableMechanicState {
get currency() {
@ -95,17 +87,17 @@ kong.purchaseLongerTimeSkip = function(cost) {
kong.buyMoreSTD = function(STD, kreds) {
if (!kong.enabled) return;
kongregate.mtx.purchaseItems([`${kreds}worthofstd`], result => {
if (result.success) {
player.IAP.totalSTD += STD;
}
if (result.success) {
player.IAP.totalSTD += STD;
}
});
};
kong.updatePurchases = function() {
if (!kong.enabled) return;
try {
kongregate.mtx.requestUserItemList("", items);
// eslint-disable-next-line no-console
kongregate.mtx.requestUserItemList("", items);
// eslint-disable-next-line no-console
} catch (e) { console.error(e); }
function items(result) {
@ -114,40 +106,40 @@ kong.updatePurchases = function() {
const item = result.data[i];
switch (item.identifier) {
case "doublemult":
totalSTD += 30;
break;
totalSTD += 30;
break;
case "doubleip":
totalSTD += 40;
break;
totalSTD += 40;
break;
case "tripleep":
totalSTD += 50;
break;
totalSTD += 50;
break;
case "alldimboost":
totalSTD += 60;
break;
totalSTD += 60;
break;
case "20worthofstd":
totalSTD += 20;
break;
totalSTD += 20;
break;
case "50worthofstd":
totalSTD += 60;
break;
totalSTD += 60;
break;
case "100worthofstd":
totalSTD += 140;
break;
totalSTD += 140;
break;
case "200worthofstd":
totalSTD += 300;
break;
totalSTD += 300;
break;
case "500worthofstd":
totalSTD += 1000;
break;
totalSTD += 1000;
break;
}
}
@ -162,41 +154,41 @@ kong.updatePurchases = function() {
kong.migratePurchases = function() {
if (!kong.enabled) return;
try {
kongregate.mtx.requestUserItemList("", items);
// eslint-disable-next-line no-console
kongregate.mtx.requestUserItemList("", items);
// eslint-disable-next-line no-console
} catch (e) { console.log(e); }
function items(result) {
let ipPurchases = 0;
let dimPurchases = 0;
let epPurchases = 0;
let alldimPurchases = 0;
for (const item of result.data) {
if (item.identifier === "doublemult") {
player.IAP.totalSTD += 30;
player.IAP.spentSTD += 30;
dimPurchases++;
}
if (item.identifier === "doubleip") {
player.IAP.totalSTD += 40;
player.IAP.spentSTD += 40;
ipPurchases++;
}
if (item.identifier === "tripleep") {
player.IAP.totalSTD += 50;
player.IAP.spentSTD += 50;
epPurchases++;
}
if (item.identifier === "alldimboost") {
player.IAP.totalSTD += 60;
player.IAP.spentSTD += 60;
alldimPurchases++;
}
let ipPurchases = 0;
let dimPurchases = 0;
let epPurchases = 0;
let alldimPurchases = 0;
for (const item of result.data) {
if (item.identifier === "doublemult") {
player.IAP.totalSTD += 30;
player.IAP.spentSTD += 30;
dimPurchases++;
}
player.IAP.dimPurchases = dimPurchases;
player.IAP.allDimPurchases = alldimPurchases;
player.IAP.IPPurchases = ipPurchases;
player.IAP.EPPurchases = epPurchases;
if (item.identifier === "doubleip") {
player.IAP.totalSTD += 40;
player.IAP.spentSTD += 40;
ipPurchases++;
}
if (item.identifier === "tripleep") {
player.IAP.totalSTD += 50;
player.IAP.spentSTD += 50;
epPurchases++;
}
if (item.identifier === "alldimboost") {
player.IAP.totalSTD += 60;
player.IAP.spentSTD += 60;
alldimPurchases++;
}
}
player.IAP.dimPurchases = dimPurchases;
player.IAP.allDimPurchases = alldimPurchases;
player.IAP.IPPurchases = ipPurchases;
player.IAP.EPPurchases = epPurchases;
}
};

View File

@ -1,4 +1,4 @@
import { DC } from "./constants.js";
import { DC } from "./constants";
export const MachineHandler = {
get baseRMCap() { return DC.E1000; },

View File

@ -1,6 +1,7 @@
import { DC } from "./constants.js";
import { log as lngamma } from "gamma";
import { DC } from "./constants";
/* eslint-disable no-use-before-define */
/* eslint-disable max-params */

View File

@ -1,4 +1,4 @@
import { SetPurchasableMechanicState } from "./game-mechanics/index.js";
import { SetPurchasableMechanicState } from "./game-mechanics/index";
class PerkState extends SetPurchasableMechanicState {
constructor(config) {

View File

@ -1,7 +1,7 @@
import { GlyphTypes } from "./glyph-effects.js";
import { AUTOMATOR_MODE, AUTOMATOR_TYPE } from "./automator/automator-backend.js";
import { DC } from "./constants.js";
import { AUTOMATOR_MODE, AUTOMATOR_TYPE } from "./automator/automator-backend";
import { DC } from "./constants";
import { deepmergeAll } from "@/utility/deepmerge";
import { GlyphTypes } from "./glyph-effects";
// This is actually reassigned when importing saves
// eslint-disable-next-line prefer-const

View File

@ -1,4 +1,4 @@
import { BitPurchasableMechanicState, RebuyableMechanicState } from "./game-mechanics/index.js";
import { BitPurchasableMechanicState, RebuyableMechanicState } from "./game-mechanics/index";
class RealityUpgradeState extends BitPurchasableMechanicState {
constructor(config) {

View File

@ -1,4 +1,4 @@
import { DC } from "./constants.js";
import { DC } from "./constants";
/**
* Object that manages the selection of glyphs offered to the player

View File

@ -1,4 +1,4 @@
import { DC } from "./constants.js";
import { DC } from "./constants";
// Slowdown parameters for replicanti growth, interval will increase by scaleFactor for every scaleLog10
// OoM past the cap (default is 308.25 (log10 of 1.8e308), 1.2, Number.MAX_VALUE)

View File

@ -1,4 +1,4 @@
import { DC } from "./constants.js";
import { DC } from "./constants";
export class Sacrifice {
// This is tied to the "buying an 8th dimension" achievement in order to hide it from new players before they reach

View File

@ -1,5 +1,5 @@
import { GameDatabase } from "../game-database.js";
import { DC } from "../../constants.js";
import { DC } from "../../constants";
import { GameDatabase } from "../game-database";
GameDatabase.achievements.normal = [
{
@ -950,10 +950,7 @@ GameDatabase.achievements.normal = [
player.IPMultPurchases === 0 &&
Currency.infinityPoints.exponent >= 200000,
checkEvent: GAME_EVENT.GAME_TICK_AFTER,
get reward() {
if (Pelle.isDoomed) return "You start Eternities with all Infinity Challenges unlocked.";
return "You start Eternities with all Infinity Challenges unlocked and completed.";
}
reward: "You start Eternities with all Infinity Challenges unlocked and completed."
},
{
id: 134,
@ -1027,7 +1024,8 @@ GameDatabase.achievements.normal = [
name: "How does this work?",
description: "Unlock the automator.",
checkRequirement: () => Player.automatorUnlocked,
checkEvent: GAME_EVENT.REALITY_RESET_AFTER,
checkEvent: [GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_BOUGHT, GAME_EVENT.PERK_BOUGHT,
GAME_EVENT.BLACK_HOLE_BOUGHT],
get reward() { return `Dimension Boosts are ${formatPercents(0.5)} stronger.`; },
effect: 1.5,
},
@ -1307,7 +1305,8 @@ GameDatabase.achievements.normal = [
id: 182,
name: "One more time",
description: "Gain back all Antimatter Dimension autobuyers.",
checkRequirement: () => player.celestials.pelle.upgrades.has(4),
checkRequirement: () => PelleUpgrade.antimatterDimAutobuyers1.canBeApplied &&
PelleUpgrade.antimatterDimAutobuyers2.canBeApplied,
checkEvent: GAME_EVENT.GAME_TICK_AFTER
},
{

View File

@ -1,4 +1,4 @@
import { GameDatabase } from "../game-database.js";
import { GameDatabase } from "../game-database";
GameDatabase.achievements.secret = [
{

View File

@ -1,4 +1,4 @@
import { GameDatabase } from "./game-database.js";
import { GameDatabase } from "./game-database";
GameDatabase.awayProgressTypes = [
{

View File

@ -1,5 +1,5 @@
import { GameDatabase } from "../game-database.js";
import { DC } from "../../constants.js";
import { DC } from "../../constants";
import { GameDatabase } from "../game-database";
GameDatabase.celestials.alchemy = {
resources: {

View File

@ -1,5 +1,5 @@
import { GameDatabase } from "../game-database.js";
import { DC } from "../../constants.js";
import { DC } from "../../constants";
import { GameDatabase } from "../game-database";
GameDatabase.celestials.effarig = {
unlocks: {

View File

@ -1,4 +1,4 @@
import { GameDatabase } from "../game-database.js";
import { GameDatabase } from "../game-database";
GameDatabase.celestials.enslaved = {
// Note that "condition" isn't displayed in-game. These are meant to be indicators here of

View File

@ -1,4 +1,4 @@
import { GameDatabase } from "../game-database.js";
import { GameDatabase } from "../game-database";
GameDatabase.celestials.pelle.galaxyGeneratorUpgrades = (function() {
const formatCost = c => format(c, 2);

View File

@ -1,5 +1,5 @@
import { GameDatabase } from "../game-database.js";
import { DC } from "../../constants.js";
import { DC } from "../../constants";
import { GameDatabase } from "../game-database";
export function emphasizeEnd(fraction) {
return Math.pow(fraction, 10);

View File

@ -1,4 +1,4 @@
import { GameDatabase } from "../game-database.js";
import { GameDatabase } from "../game-database";
GameDatabase.celestials.pelle.quotes = {};

View File

@ -1,4 +1,4 @@
import { GameDatabase } from "../game-database.js";
import { GameDatabase } from "../game-database";
GameDatabase.celestials.pelle.upgrades = (function() {
const formatCost = c => format(c, 2);
@ -62,37 +62,37 @@ GameDatabase.celestials.pelle.upgrades = (function() {
}),
antimatterDimAutobuyers1: {
id: 0,
description: "Gain back autobuyers for Antimatter Dimensions 1-4",
description: "Gain back Autobuyers for Antimatter Dimensions 1-4",
cost: 1e5,
formatCost,
},
dimBoostAutobuyer: {
id: 1,
description: "Gain back autobuyer for Dimension Boosts",
description: "Gain back the Autobuyer for Dimension Boosts",
cost: 5e5,
formatCost,
},
keepAutobuyers: {
id: 2,
description: "Keep your autobuyer upgrades on Armageddon",
description: "Keep your Autobuyer upgrades on Armageddon",
cost: 5e6,
formatCost,
},
antimatterDimAutobuyers2: {
id: 3,
description: "Gain back autobuyers for Antimatter Dimensions 5-8",
description: "Gain back Autobuyers for Antimatter Dimensions 5-8",
cost: 2.5e7,
formatCost,
},
galaxyAutobuyer: {
id: 4,
description: "Gain back autobuyer for Antimatter Galaxies",
description: "Gain back the Autobuyer for Antimatter Galaxies",
cost: 1e8,
formatCost,
},
tickspeedAutobuyer: {
id: 5,
description: "Gain back autobuyer for Tickspeed",
description: "Gain back the Autobuyer for Tickspeed",
cost: 1e9,
formatCost,
},
@ -110,19 +110,19 @@ GameDatabase.celestials.pelle.upgrades = (function() {
},
IDAutobuyers: {
id: 8,
description: "Gain Back Infinity Dimension Autobuyers",
description: "Gain back Infinity Dimension Autobuyers",
cost: 1e14,
formatCost,
},
keepInfinityChallenges: {
id: 9,
description: "You keep your Infinity Challenge completions through Armageddons",
description: "You keep your Infinity Challenge unlocks and completions through Armageddons",
cost: 1e15,
formatCost,
},
replicantiAutobuyers: {
id: 10,
description: "Gain back Replicanti autobuyers",
description: "Gain back Replicanti Upgrade Autobuyers",
cost: 1e17,
formatCost,
},
@ -158,7 +158,7 @@ GameDatabase.celestials.pelle.upgrades = (function() {
},
TDAutobuyers: {
id: 16,
description: "Gain Back Time Dimension Autobuyers",
description: "Gain back Time Dimension Autobuyers",
cost: 1e25,
formatCost,
},

View File

@ -1,4 +1,4 @@
import { GameDatabase } from "../game-database.js";
import { GameDatabase } from "../game-database";
GameDatabase.celestials.perkShop = (function() {
function rebuyableCost(initialCost, increment, id) {

View File

@ -1,4 +1,4 @@
import { GameDatabase } from "../game-database.js";
import { GameDatabase } from "../game-database";
GameDatabase.celestials.ra = {
pets: {
@ -254,7 +254,8 @@ GameDatabase.celestials.ra = {
effect: () => Math.floor(Ra.pets.v.level / 6),
pet: "v",
level: 6,
displayIcon: `<span class="fas fa-trophy"></span>`
displayIcon: `<span class="fas fa-trophy"></span>`,
disabledByPelle: true
},
continuousTTBoost: {
id: 25,

View File

@ -1,5 +1,5 @@
import { GameDatabase } from "../game-database.js";
import { DC } from "../../constants.js";
import { DC } from "../../constants";
import { GameDatabase } from "../game-database";
GameDatabase.celestials.pelle.rifts = {
famine: {

View File

@ -1,4 +1,4 @@
import { GameDatabase } from "../game-database.js";
import { GameDatabase } from "../game-database";
// Used for UI purposes to give different theming for different kinds of upgrades
export const LAITELA_UPGRADE_DIRECTION = {

View File

@ -1,5 +1,5 @@
import { GameDatabase } from "../game-database.js";
import { DC } from "../../constants.js";
import { DC } from "../../constants";
import { GameDatabase } from "../game-database";
GameDatabase.celestials.pelle.strikes = {
infinity: {

Some files were not shown because too many files have changed in this diff Show More