mirror of
https://github.com/IvarK/AntimatterDimensionsSourceCode.git
synced 2024-09-20 11:01:45 +00:00
Untangle the game database
This commit is contained in:
parent
740d807373
commit
1924c37539
|
@ -1,4 +1,6 @@
|
|||
<script>
|
||||
import { LAITELA_UPGRADE_DIRECTION } from "@/core/secret-formula";
|
||||
|
||||
export default {
|
||||
name: "SingularityMilestoneComponent",
|
||||
props: {
|
||||
|
@ -151,4 +153,4 @@ export default {
|
|||
box-shadow: 0 0 0.5rem 0.1rem inset, 0 0 0.3rem 0;
|
||||
animation: 3s a-laitela-flash infinite;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
import CelestialQuoteHistory from "@/components/CelestialQuoteHistory";
|
||||
import GlyphSetPreview from "@/components/GlyphSetPreview";
|
||||
import PrimaryButton from "@/components/PrimaryButton";
|
||||
import { V_REDUCTION_MODE } from "@/core/secret-formula";
|
||||
import VUnlockRequirement from "./VUnlockRequirement";
|
||||
|
||||
export default {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<script>
|
||||
import { DataSet, Network } from "vis-network";
|
||||
|
||||
import { PERK_FAMILY } from "@/core/secret-formula";
|
||||
import PerkPointLabel from "./PerkPointLabel";
|
||||
|
||||
export default {
|
||||
|
|
|
@ -23,7 +23,7 @@ export const AutomatorPoints = {
|
|||
},
|
||||
|
||||
get pointsFromOther() {
|
||||
return GameDatabase.reality.otherAutomatorPoints.map(s => s.automatorPoints()).sum();
|
||||
return GameDatabase.reality.automator.otherAutomatorPoints.map(s => s.automatorPoints()).sum();
|
||||
},
|
||||
|
||||
get totalPoints() {
|
||||
|
@ -34,18 +34,3 @@ export const AutomatorPoints = {
|
|||
return 100;
|
||||
}
|
||||
};
|
||||
|
||||
GameDatabase.reality.otherAutomatorPoints = [
|
||||
{
|
||||
name: "Reality Count",
|
||||
automatorPoints: () => 2 * Math.clampMax(Currency.realities.value, 50),
|
||||
shortDescription: () => `+${formatInt(2)} per Reality, up to ${formatInt(50)} Realities`,
|
||||
symbol: "Ϟ",
|
||||
},
|
||||
{
|
||||
name: "Black Hole",
|
||||
automatorPoints: () => (BlackHole(1).isUnlocked ? 10 : 0),
|
||||
shortDescription: () => `Unlocking gives ${formatInt(10)} AP`,
|
||||
symbol: "<i class='fas fa-circle'></i>",
|
||||
},
|
||||
];
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import { Pelle } from "../globals";
|
||||
|
||||
import { GlyphCombiner } from "@/core/secret-formula";
|
||||
|
||||
class GlyphEffectState {
|
||||
constructor(id, props) {
|
||||
this._id = id;
|
||||
|
|
7
src/core/secret-formula/achievements/index.js
Normal file
7
src/core/secret-formula/achievements/index.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
import { normalAchievements } from "./normal-achievements";
|
||||
import { secretAchievements } from "./secret-achievements";
|
||||
|
||||
export const achievements = {
|
||||
normal: normalAchievements,
|
||||
secret: secretAchievements
|
||||
};
|
|
@ -1,7 +1,6 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
GameDatabase.achievements.normal = [
|
||||
export const normalAchievements = [
|
||||
{
|
||||
id: 11,
|
||||
name: "You gotta start somewhere",
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
GameDatabase.achievements.secret = [
|
||||
export const secretAchievements = [
|
||||
{
|
||||
id: 11,
|
||||
name: "The first one's always free",
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "./game-database";
|
||||
|
||||
GameDatabase.awayProgressTypes = [
|
||||
export const awayProgressTypes = [
|
||||
{
|
||||
name: "antimatter",
|
||||
isUnlocked: () => true,
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
import { DC } from "../constants";
|
||||
|
||||
import { GameDatabase } from "./game-database";
|
||||
|
||||
GameDatabase.catchupResources = [
|
||||
export const catchupResources = [
|
||||
{
|
||||
name: "Antimatter Dimensions",
|
||||
id: 0,
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
GameDatabase.celestials.alchemy.resources = {
|
||||
export const alchemyResources = {
|
||||
// T1 resources (Non-Effarig "base" resources)
|
||||
"power": {
|
||||
id: ALCHEMY_RESOURCE.POWER,
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
GameDatabase.celestials.effarig.unlocks = {
|
||||
export const effarigUnlocks = {
|
||||
adjuster: {
|
||||
id: 0,
|
||||
description: "Adjustable Glyph level factor weights",
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
GameDatabase.celestials.enslaved = {
|
||||
export const enslaved = {
|
||||
// These entries will be unlocked in no particular order
|
||||
progress: {
|
||||
hintsUnlocked: {
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
const formatCost = c => format(c, 2);
|
||||
|
||||
const rebuyable = config => {
|
||||
|
@ -16,7 +14,7 @@ const rebuyable = config => {
|
|||
};
|
||||
};
|
||||
|
||||
GameDatabase.celestials.pelle.galaxyGeneratorUpgrades = {
|
||||
export const pelleGalaxyGeneratorUpgrades = {
|
||||
additive: rebuyable({
|
||||
id: "galaxyGeneratorAdditive",
|
||||
description: "Increase base Galaxy generation by 2",
|
||||
|
|
44
src/core/secret-formula/celestials/index.js
Normal file
44
src/core/secret-formula/celestials/index.js
Normal file
|
@ -0,0 +1,44 @@
|
|||
import { finalSigil } from "./navigation-sigils/final-sigil";
|
||||
import { galaxyIcon } from "./navigation-sigils/galaxy-icon";
|
||||
import { alchemyResources } from "./alchemy";
|
||||
import { effarigUnlocks } from "./effarig";
|
||||
import { enslaved } from "./enslaved";
|
||||
import { pelleGalaxyGeneratorUpgrades } from "./galaxy-generator";
|
||||
import { celestialNavigation } from "./navigation";
|
||||
import { pelleUpgrades } from "./pelle-upgrades";
|
||||
import { perkShop } from "./perk-shop";
|
||||
import { ra } from "./ra";
|
||||
import { pelleRifts } from "./rifts";
|
||||
import { singularityMilestones } from "./singularity-milestones";
|
||||
import { pelleStrikes } from "./strikes";
|
||||
import { teresa } from "./teresa";
|
||||
import { quotes } from "./quotes";
|
||||
import { v } from "./v";
|
||||
|
||||
export const celestials = {
|
||||
effarig: {
|
||||
unlocks: effarigUnlocks
|
||||
},
|
||||
alchemy: {
|
||||
resources: alchemyResources
|
||||
},
|
||||
pelle: {
|
||||
galaxyGeneratorUpgrades: pelleGalaxyGeneratorUpgrades,
|
||||
strikes: pelleStrikes,
|
||||
upgrades: pelleUpgrades,
|
||||
rifts: pelleRifts
|
||||
},
|
||||
descriptions: {},
|
||||
enslaved,
|
||||
navigation: celestialNavigation,
|
||||
navSigils: {
|
||||
...galaxyIcon,
|
||||
...finalSigil
|
||||
},
|
||||
perkShop,
|
||||
ra,
|
||||
singularityMilestones,
|
||||
teresa,
|
||||
quotes,
|
||||
v
|
||||
};
|
|
@ -1,5 +1,3 @@
|
|||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
import { CELESTIAL_NAV_DRAW_ORDER } from "../navigation";
|
||||
|
||||
function sigilProgress() {
|
||||
|
@ -200,7 +198,5 @@ for (let arcIndex = 0; arcIndex < arcSegments; arcIndex++) {
|
|||
"crimson");
|
||||
}
|
||||
|
||||
GameDatabase.celestials.navSigils = {
|
||||
...GameDatabase.celestials.navSigils,
|
||||
...Object.values(Shapes).mapToObject((key, idx) => `final-sigil-${idx}`, val => val)
|
||||
};
|
||||
export const finalSigil = Object.values(Shapes)
|
||||
.mapToObject((key, idx) => `final-sigil-${idx}`, val => val);
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
import { CELESTIAL_NAV_DRAW_ORDER, pelleStarPosition } from "../navigation";
|
||||
|
||||
// Determines styling, overall visibility, and placement/scaling of the sigil. Center and size are defined such that
|
||||
|
@ -92,7 +90,5 @@ for (let arcIndex = 0; arcIndex < arcSegments; arcIndex++) {
|
|||
"cyan");
|
||||
}
|
||||
|
||||
GameDatabase.celestials.navSigils = {
|
||||
...GameDatabase.celestials.navSigils,
|
||||
...Object.values(Shapes).mapToObject((key, idx) => `galaxy-icon-${idx}`, val => val)
|
||||
};
|
||||
export const galaxyIcon = Object.values(Shapes)
|
||||
.mapToObject((key, idx) => `galaxy-icon-${idx}`, val => val);
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
import wordShift from "../../word-shift";
|
||||
|
||||
export function emphasizeEnd(fraction) {
|
||||
|
@ -204,7 +203,7 @@ for (const fill of fillStates) {
|
|||
}
|
||||
}
|
||||
|
||||
GameDatabase.celestials.navigation = {
|
||||
export const celestialNavigation = {
|
||||
"teresa-base": {
|
||||
visible: () => true,
|
||||
complete: () => 1,
|
||||
|
@ -1991,6 +1990,3 @@ GameDatabase.celestials.navigation = {
|
|||
}()),
|
||||
},
|
||||
};
|
||||
|
||||
// This will get populated as needed in files within the navigation-sigils folder
|
||||
GameDatabase.celestials.navSigils = {};
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
const formatCost = c => format(c, 2);
|
||||
// eslint-disable-next-line max-params
|
||||
const expWithIncreasedScale = (base1, base2, incScale, coeff, x) =>
|
||||
|
@ -19,7 +17,7 @@ const rebuyable = config => {
|
|||
};
|
||||
};
|
||||
|
||||
GameDatabase.celestials.pelle.upgrades = {
|
||||
export const pelleUpgrades = {
|
||||
antimatterDimensionMult: rebuyable({
|
||||
id: "antimatterDimensionMult",
|
||||
description: "Gain a multiplier to Antimatter Dimensions",
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
function rebuyableCost(initialCost, increment, id) {
|
||||
return initialCost * Math.pow(increment, player.celestials.teresa.perkShop[id]);
|
||||
}
|
||||
|
@ -19,7 +17,7 @@ function rebuyable(config) {
|
|||
};
|
||||
}
|
||||
|
||||
GameDatabase.celestials.perkShop = {
|
||||
export const perkShop = {
|
||||
glyphLevel: rebuyable({
|
||||
id: 0,
|
||||
initialCost: 1,
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
GameDatabase.celestials.quotes.effarig = {
|
||||
export const effarigQuotes = {
|
||||
initial: {
|
||||
id: 0,
|
||||
lines: [
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
GameDatabase.celestials.quotes.enslaved = {
|
||||
export const enslavedQuotes = {
|
||||
initial: {
|
||||
id: 0,
|
||||
lines: [
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
import { effarigQuotes } from "./effarig";
|
||||
import { enslavedQuotes } from "./enslaved";
|
||||
import { laitelaQuotes } from "./laitela";
|
||||
import { pelleQuotes } from "./pelle";
|
||||
import { raQuotes } from "./ra";
|
||||
import { teresaQuotes } from "./teresa";
|
||||
import { vQuotes } from "./v";
|
||||
|
||||
import "./teresa";
|
||||
import "./effarig";
|
||||
import "./enslaved";
|
||||
import "./v";
|
||||
import "./ra";
|
||||
import "./laitela";
|
||||
import "./pelle";
|
||||
export const quotes = {
|
||||
teresa: teresaQuotes,
|
||||
effarig: effarigQuotes,
|
||||
enslaved: enslavedQuotes,
|
||||
v: vQuotes,
|
||||
ra: raQuotes,
|
||||
laitela: laitelaQuotes,
|
||||
pelle: pelleQuotes
|
||||
};
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
GameDatabase.celestials.quotes.laitela = {
|
||||
export const laitelaQuotes = {
|
||||
unlock: {
|
||||
id: 0,
|
||||
lines: [
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
// These entries describe the special flash-between-celestial effect on some quotes, with the numbers being
|
||||
// durations of each celestial in seconds
|
||||
const flashCelestial = [
|
||||
|
@ -45,7 +43,7 @@ const forgotten = ["Forgotten", "Deity", "Monarch"];
|
|||
const paramount = ["Paramount", "Deity", "Monarch"];
|
||||
/* eslint-enable no-multi-spaces */
|
||||
|
||||
GameDatabase.celestials.quotes.pelle = {
|
||||
export const pelleQuotes = {
|
||||
initial: {
|
||||
id: 0,
|
||||
lines: [
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
GameDatabase.celestials.quotes.ra = {
|
||||
export const raQuotes = {
|
||||
unlock: {
|
||||
id: 0,
|
||||
lines: [
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
GameDatabase.celestials.quotes.teresa = {
|
||||
export const teresaQuotes = {
|
||||
initial: {
|
||||
id: 0,
|
||||
lines: [
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
GameDatabase.celestials.quotes.v = {
|
||||
export const vQuotes = {
|
||||
initial: {
|
||||
id: 0,
|
||||
lines: [
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
GameDatabase.celestials.ra = {
|
||||
export const ra = {
|
||||
pets: {
|
||||
teresa: {
|
||||
id: "teresa",
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
import wordShift from "../../word-shift";
|
||||
|
||||
GameDatabase.celestials.pelle.rifts = {
|
||||
export const pelleRifts = {
|
||||
vacuum: {
|
||||
id: 1,
|
||||
key: "vacuum",
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
// Used for UI purposes to give different theming for different kinds of upgrades
|
||||
export const LAITELA_UPGRADE_DIRECTION = {
|
||||
SELF_BOOST: 0,
|
||||
|
@ -7,7 +5,7 @@ export const LAITELA_UPGRADE_DIRECTION = {
|
|||
BOOSTS_LAITELA: 2
|
||||
};
|
||||
|
||||
GameDatabase.celestials.singularityMilestones = {
|
||||
export const singularityMilestones = {
|
||||
// Infinite
|
||||
continuumMult: {
|
||||
start: 1,
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
import wordShift from "../../word-shift";
|
||||
|
||||
GameDatabase.celestials.pelle.strikes = {
|
||||
export const pelleStrikes = {
|
||||
infinity: {
|
||||
id: 1,
|
||||
requirementDescription: "Reach Infinity",
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
GameDatabase.celestials.teresa = {
|
||||
export const teresa = {
|
||||
unlocks: {
|
||||
run: {
|
||||
id: 0,
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
// This is supposed to be in ./navigation.js but importing doesn't work for some stupid reason
|
||||
function emphasizeEnd(fraction) {
|
||||
|
@ -11,7 +10,7 @@ export const V_REDUCTION_MODE = {
|
|||
DIVISION: 2
|
||||
};
|
||||
|
||||
GameDatabase.celestials.v = {
|
||||
export const v = {
|
||||
// Note: mainUnlock IDs here are one-indexed to match with navigation indices
|
||||
mainUnlock: {
|
||||
realities: {
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
const specialInfinityGlyphDisabledEffectText = () => (PelleRifts.chaos.milestones[1].canBeApplied
|
||||
? "The Pelle-Specific effect from Infinity Glyphs is also disabled."
|
||||
: "");
|
||||
|
||||
GameDatabase.challenges.eternity = [
|
||||
export const eternityChallenges = [
|
||||
{
|
||||
id: 1,
|
||||
description: "Time Dimensions are disabled.",
|
||||
|
|
9
src/core/secret-formula/challenges/index.js
Normal file
9
src/core/secret-formula/challenges/index.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
import { eternityChallenges } from "./eternity-challenges";
|
||||
import { infinityChallenges } from "./infinity-challenges";
|
||||
import { normalChallenges } from "./normal-challenges";
|
||||
|
||||
export const challenges = {
|
||||
normal: normalChallenges,
|
||||
infinity: infinityChallenges,
|
||||
eternity: eternityChallenges
|
||||
};
|
|
@ -1,7 +1,6 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
GameDatabase.challenges.infinity = [
|
||||
export const infinityChallenges = [
|
||||
{
|
||||
id: 1,
|
||||
description: `all Normal Challenge restrictions are active at once, with the exception of the
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
// I tried to make it relatively simple to add more locks; the idea is that you give it a value here
|
||||
// and then it's all handled in the backend
|
||||
// If you need to lock a challenge, set lockedAt to a new Decimal variable reflective of a desired number of Infinities
|
||||
// They will always be unlocked post-eternity
|
||||
|
||||
GameDatabase.challenges.normal = [
|
||||
export const normalChallenges = [
|
||||
{
|
||||
id: 1,
|
||||
legacyId: 1,
|
||||
|
@ -127,7 +126,7 @@ GameDatabase.challenges.normal = [
|
|||
id: 12,
|
||||
legacyId: 7,
|
||||
isQuickResettable: false,
|
||||
description: () => `each Antimatter Dimension produces the Dimension ${formatInt(2)} tiers below it
|
||||
description: () => `each Antimatter Dimension produces the Dimension ${formatInt(2)} tiers below it
|
||||
instead of ${formatInt(1)}. Both 1st and 2nd Dimensions produce antimatter.
|
||||
The 2nd, 4th, and 6th Dimensions are made stronger to compensate.`,
|
||||
name: "Automated Big Crunches",
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "./game-database";
|
||||
|
||||
GameDatabase.changelog = [
|
||||
export const changelog = [
|
||||
/**
|
||||
* @template
|
||||
* {
|
||||
|
@ -769,7 +767,7 @@ while they were locked.</li>
|
|||
<li>Added loot boxes.</li>
|
||||
<li>Removed loot boxes.</li>
|
||||
<li>Added various missing periods to achievement descriptions.</li>
|
||||
<li>Added a missing period to time spent in this eternity.</li>
|
||||
<li>Added a missing period to time spent in this eternity.</li>
|
||||
Increased the price of creation count increases from 50 god power to 60.</li>
|
||||
<li>Added a missing space to the "Autobuyers work twice as fast." upgrade.</li>
|
||||
<li>Manually buying max dimension boosts no longer requires 10 eternities or more, and now only requires the bulk buy
|
||||
|
@ -1028,7 +1026,6 @@ gaining infinity points.</li>
|
|||
];
|
||||
|
||||
|
||||
for (let i = 0; i < GameDatabase.changelog.length; i++) {
|
||||
const entry = GameDatabase.changelog[i];
|
||||
entry.id = i;
|
||||
}
|
||||
for (let i = 0; i < changelog.length; i++) {
|
||||
changelog[i].id = i;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "./game-database";
|
||||
|
||||
GameDatabase.confirmationTypes = [
|
||||
export const confirmationTypes = [
|
||||
{
|
||||
name: "Dimension Boost",
|
||||
option: "dimensionBoost",
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "./game-database";
|
||||
|
||||
GameDatabase.credits = {
|
||||
export const credits = {
|
||||
// Must be placed in the order it is desired they appear in the credits
|
||||
roles: {
|
||||
1: "Creator",
|
||||
|
@ -441,4 +439,4 @@ GameDatabase.credits = {
|
|||
]
|
||||
};
|
||||
|
||||
GameDatabase.credits.roles.count = Object.keys(GameDatabase.credits.roles).length;
|
||||
credits.roles.count = Object.keys(credits.roles).length;
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import { GameDatabase } from "./game-database";
|
||||
|
||||
// We define these in the local scope to override the player's notation setting; this is something we'll probably
|
||||
// expand upon later once we look more closely at support for extended Unicode in DRP
|
||||
function format(number, places, placesUnder1000) {
|
||||
|
@ -261,5 +259,3 @@ export const discordRichPresence = {
|
|||
},
|
||||
]
|
||||
};
|
||||
|
||||
GameDatabase.discordRichPresence = discordRichPresence;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
function rebuyableCost(initialCost, increment, id) {
|
||||
return Decimal.multiply(initialCost, Decimal.pow(increment, player.dilation.rebuyables[id]));
|
||||
|
@ -21,7 +20,7 @@ function rebuyable(config) {
|
|||
};
|
||||
}
|
||||
|
||||
GameDatabase.eternity.dilation = {
|
||||
export const dilationUpgrades = {
|
||||
dtGain: rebuyable({
|
||||
id: 1,
|
||||
initialCost: 1e4,
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
GameDatabase.eternity.milestones = {
|
||||
export const eternityMilestones = {
|
||||
autobuyerIPMult: {
|
||||
eternities: 1,
|
||||
reward: "Unlock the Infinity Point multiplier autobuyer",
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
GameDatabase.eternity.upgrades = {
|
||||
export const eternityUpgrades = {
|
||||
idMultEP: {
|
||||
id: 1,
|
||||
cost: 5,
|
||||
|
|
18
src/core/secret-formula/eternity/index.js
Normal file
18
src/core/secret-formula/eternity/index.js
Normal file
|
@ -0,0 +1,18 @@
|
|||
import { dilationUpgrades } from "./dilation-upgrades";
|
||||
import { eternityMilestones } from "./eternity-milestones";
|
||||
import { eternityUpgrades } from "./eternity-upgrades";
|
||||
|
||||
import { dilationTimeStudies } from "./time-studies/dilation-time-studies";
|
||||
import { ecTimeStudies } from "./time-studies/ec-time-studies";
|
||||
import { normalTimeStudies } from "./time-studies/normal-time-studies";
|
||||
|
||||
export const eternity = {
|
||||
dilation: dilationUpgrades,
|
||||
milestones: eternityMilestones,
|
||||
timeStudies: {
|
||||
dilation: dilationTimeStudies,
|
||||
ec: ecTimeStudies,
|
||||
normal: normalTimeStudies
|
||||
},
|
||||
upgrades: eternityUpgrades
|
||||
};
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
GameDatabase.eternity.timeStudies.dilation = [
|
||||
export const dilationTimeStudies = [
|
||||
{
|
||||
id: 1,
|
||||
description: "Unlock Time Dilation",
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { DC } from "../../../constants";
|
||||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
GameDatabase.eternity.timeStudies.ec = [
|
||||
export const ecTimeStudies = [
|
||||
{
|
||||
id: 1,
|
||||
cost: 30,
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { DC } from "../../../constants";
|
||||
import { GameDatabase } from "../../game-database";
|
||||
|
||||
const thisInfinityMult = thisInfinity => {
|
||||
// All "this inf time" or "best inf time" mults are * 10
|
||||
|
@ -32,7 +31,7 @@ const passiveIPMult = () => {
|
|||
* @property {String} formatEffect Formatting function for effects, if the default formatting isn't appropriate
|
||||
* }
|
||||
*/
|
||||
GameDatabase.eternity.timeStudies.normal = [
|
||||
export const normalTimeStudies = [
|
||||
{
|
||||
id: 11,
|
||||
cost: 1,
|
||||
|
|
|
@ -1,21 +1,47 @@
|
|||
import { multiplierTabTree, multiplierTabValues } from "./multiplier-tab";
|
||||
|
||||
import { achievements } from "./achievements";
|
||||
import { awayProgressTypes } from "./away-progress-types";
|
||||
import { catchupResources } from "./catchup-resources";
|
||||
import { celestials } from "./celestials";
|
||||
import { challenges } from "./challenges";
|
||||
import { changelog } from "./changelog";
|
||||
import { confirmationTypes } from "./confirmation-types";
|
||||
import { credits } from "./credits";
|
||||
import { discordRichPresence } from "./discord-rich-presence";
|
||||
import { eternity } from "./eternity";
|
||||
import { h2p } from "./h2p";
|
||||
import { infinity } from "./infinity";
|
||||
import { news } from "./news";
|
||||
import { progressStages } from "./progress-checker";
|
||||
import { reality } from "./reality";
|
||||
import { shopPurchases } from "./shop-purchases";
|
||||
import { speedrunMilestones } from "./speedrun-milestones";
|
||||
import { tabNotifications } from "./tab-notifications";
|
||||
import { tabs } from "./tabs";
|
||||
|
||||
export const GameDatabase = {
|
||||
achievements: {},
|
||||
challenges: {},
|
||||
infinity: {},
|
||||
eternity: {
|
||||
timeStudies: {}
|
||||
},
|
||||
reality: {
|
||||
glyphEffects: {},
|
||||
glyphSacrifice: {},
|
||||
},
|
||||
celestials: {
|
||||
effarig: {},
|
||||
alchemy: {},
|
||||
pelle: {},
|
||||
descriptions: {},
|
||||
quotes: {},
|
||||
}
|
||||
achievements,
|
||||
awayProgressTypes,
|
||||
catchupResources,
|
||||
celestials,
|
||||
challenges,
|
||||
changelog,
|
||||
confirmationTypes,
|
||||
credits,
|
||||
discordRichPresence,
|
||||
eternity,
|
||||
h2p,
|
||||
infinity,
|
||||
multiplierTabTree,
|
||||
multiplierTabValues,
|
||||
news,
|
||||
progressStages,
|
||||
reality,
|
||||
shopPurchases,
|
||||
speedrunMilestones,
|
||||
tabNotifications,
|
||||
tabs
|
||||
};
|
||||
|
||||
window.GameDatabase = GameDatabase;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import { DC } from "../constants";
|
||||
|
||||
import { GameDatabase } from "./game-database";
|
||||
import { credits } from "@/core/secret-formula/credits";
|
||||
|
||||
GameDatabase.h2p = {
|
||||
export const h2p = {
|
||||
/**
|
||||
* @template
|
||||
* {
|
||||
|
@ -1362,7 +1362,7 @@ The Nameless Ones won't directly unlock the next Celestial.
|
|||
`,
|
||||
isUnlocked: () => EffarigUnlock.eternity.isUnlocked,
|
||||
tags: ["reality", "time", "blackhole", "lategame", "endgame", "testers", "celestial",
|
||||
...GameDatabase.credits.people.map(p => p.name)
|
||||
...credits.people.map(p => p.name)
|
||||
],
|
||||
tab: "celestials/enslaved"
|
||||
}, {
|
||||
|
@ -1500,7 +1500,7 @@ Ra won't directly unlock the next Celestial.`,
|
|||
name: "Glyph Alchemy",
|
||||
info: () => `
|
||||
Glyph Alchemy is a mechanic unlocked by reaching Effarig level ${formatInt(2)} in Ra. It unlocks the ability to
|
||||
use up your Glyphs by refining them into Alchemy Resources associated with their type. You can refine Glyphs by
|
||||
use up your Glyphs by refining them into Alchemy Resources associated with their type. You can refine Glyphs by
|
||||
setting your Sacrifice Type to something other than "Always Sacrifice" in the Glyphs tab, and doing the normal
|
||||
procedure for a sacrifice.
|
||||
Each Alchemy Resource has a unique effect, which you can view on the Alchemy tab.
|
||||
|
@ -1748,8 +1748,8 @@ In addition, each Rift offers three milestone rewards for filling them up to a c
|
|||
}, {
|
||||
name: "The Galaxy Generator",
|
||||
info: () => `
|
||||
When you reach ${formatInt(100)}% Recursion/Dispersion/Destruction, you unlock the <b>Galaxy Generator</b>, which can
|
||||
passively generate Galaxies. Generated Galaxies are like Replicanti Galaxies and Tachyon Galaxies in that they affect
|
||||
When you reach ${formatInt(100)}% Recursion/Dispersion/Destruction, you unlock the <b>Galaxy Generator</b>, which can
|
||||
passively generate Galaxies. Generated Galaxies are like Replicanti Galaxies and Tachyon Galaxies in that they affect
|
||||
tickspeed as if they were Antimatter Galaxies, but they don't increase the cost of your next Antimatter Galaxy. You
|
||||
also unlock five new upgrades. The first upgrade increases the base amount of Galaxies generated. The other four
|
||||
upgrades then give a multiplier to this base amount. The first two upgrades can be bought by spending antimatter and
|
||||
|
@ -1767,8 +1767,8 @@ Rifts once the current cap has been reached.`,
|
|||
};
|
||||
|
||||
(function() {
|
||||
for (let i = 0; i < GameDatabase.h2p.tabs.length; i++) {
|
||||
const tab = GameDatabase.h2p.tabs[i];
|
||||
for (let i = 0; i < h2p.tabs.length; i++) {
|
||||
const tab = h2p.tabs[i];
|
||||
tab.id = i;
|
||||
if (tab.alias === undefined) tab.alias = tab.name;
|
||||
|
||||
|
@ -1807,15 +1807,15 @@ Rifts once the current cap has been reached.`,
|
|||
}
|
||||
};
|
||||
|
||||
for (const tab of GameDatabase.h2p.tabs) {
|
||||
for (const tab of h2p.tabs) {
|
||||
addPhrase(tab.name, tab);
|
||||
}
|
||||
for (const tab of GameDatabase.h2p.tabs) {
|
||||
for (const tab of h2p.tabs) {
|
||||
for (const tag of tab.tags) {
|
||||
addPhrase(tag, tab);
|
||||
}
|
||||
}
|
||||
for (const tab of GameDatabase.h2p.tabs) {
|
||||
for (const tab of h2p.tabs) {
|
||||
addPhrase(tab.alias, tab);
|
||||
}
|
||||
|
||||
|
@ -1907,13 +1907,13 @@ Rifts once the current cap has been reached.`,
|
|||
// There are a LOT of magic numbers in this code, mostly from arbitrary choices for "What number is large enough to
|
||||
// act as a placeholder for 'basically not found'?"
|
||||
// This will need some cleanup if possible.
|
||||
GameDatabase.h2p.search = query => {
|
||||
h2p.search = query => {
|
||||
const truncatedQuery = replaceSpecialChars(query);
|
||||
if (truncatedQuery === "") return GameDatabase.h2p.tabs.map(x => ({ tab: x, relevance: 1.5 }));
|
||||
if (truncatedQuery === "") return h2p.tabs.map(x => ({ tab: x, relevance: 1.5 }));
|
||||
const searchTerms = truncatedQuery.toLowerCase().split(" ").filter(str => str !== "");
|
||||
|
||||
// A higher "Relevance" value actually means it's further away from the search, important to keep in mind
|
||||
const relevances = Array.repeat(1e4, GameDatabase.h2p.tabs.length);
|
||||
const relevances = Array.repeat(1e4, h2p.tabs.length);
|
||||
for (const searchWord of searchTerms) {
|
||||
const minimumRequirement = Math.min(searchWord.length - 0.9, 3) * 0.5;
|
||||
for (const searchIndexStr in searchIndex) {
|
||||
|
@ -1927,7 +1927,7 @@ Rifts once the current cap has been reached.`,
|
|||
}
|
||||
}
|
||||
}
|
||||
const results = GameDatabase.h2p.tabs.filter(x => relevances[x.id] < 0.9)
|
||||
const results = h2p.tabs.filter(x => relevances[x.id] < 0.9)
|
||||
.map(x => ({ tab: x, relevance: relevances[x.id] }));
|
||||
// Provide both the relevance and the tab itself
|
||||
|
||||
|
|
|
@ -1,61 +1,6 @@
|
|||
/* eslint-disable import/newline-after-import */
|
||||
/* eslint-disable import/first */
|
||||
import "./game-database";
|
||||
|
||||
import "./tabs";
|
||||
import "./away-progress-types";
|
||||
import "./catchup-resources";
|
||||
import "./progress-checker";
|
||||
import "./confirmation-types";
|
||||
import "./tab-notifications";
|
||||
import "./news";
|
||||
import "./achievements/normal-achievements";
|
||||
import "./achievements/secret-achievements";
|
||||
import "./challenges/normal-challenges";
|
||||
import "./challenges/infinity-challenges";
|
||||
import "./challenges/eternity-challenges";
|
||||
import "./infinity/infinity-upgrades";
|
||||
import "./infinity/break-infinity-upgrades";
|
||||
import "./eternity/time-studies/normal-time-studies";
|
||||
import "./eternity/time-studies/ec-time-studies";
|
||||
import "./eternity/time-studies/dilation-time-studies";
|
||||
import "./eternity/eternity-upgrades";
|
||||
import "./eternity/eternity-milestones";
|
||||
import "./eternity/dilation-upgrades";
|
||||
import "./reality/reality-upgrades";
|
||||
import "./reality/imaginary-upgrades";
|
||||
export * from "./reality/perks";
|
||||
import "./reality/automator";
|
||||
import "./reality/glyph-types";
|
||||
export * from "./reality/glyph-effects";
|
||||
import "./reality/glyph-sacrifices";
|
||||
import "./reality/glyph-cosmetics";
|
||||
import "./celestials/perk-shop";
|
||||
import "./celestials/teresa";
|
||||
import "./celestials/effarig";
|
||||
import "./celestials/pelle-upgrades";
|
||||
import "./celestials/strikes";
|
||||
import "./celestials/rifts";
|
||||
import "./celestials/galaxy-generator";
|
||||
import "./celestials/ra";
|
||||
import "./celestials/enslaved";
|
||||
import "./celestials/navigation";
|
||||
import "./celestials/navigation-sigils/galaxy-icon";
|
||||
import "./celestials/navigation-sigils/final-sigil";
|
||||
export * from "./celestials/v";
|
||||
import "./celestials/alchemy";
|
||||
import "./shop-purchases";
|
||||
export * from "./celestials/singularity-milestones";
|
||||
import "./script-templates";
|
||||
import "./speedrun-milestones";
|
||||
import "./discord-rich-presence";
|
||||
|
||||
import "./multiplier-tab";
|
||||
|
||||
import "./celestials/quotes";
|
||||
|
||||
import "./credits";
|
||||
|
||||
import "./h2p";
|
||||
|
||||
import "./changelog";
|
||||
export { PERK_FAMILY } from "./reality/perks";
|
||||
export { GlyphCombiner } from "./reality/glyph-effects";
|
||||
export { V_REDUCTION_MODE } from "./celestials/v";
|
||||
export { LAITELA_UPGRADE_DIRECTION } from "./celestials/singularity-milestones";
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
function rebuyable(config) {
|
||||
const effectFunction = config.effect || (x => x);
|
||||
|
@ -27,7 +26,7 @@ function rebuyable(config) {
|
|||
};
|
||||
}
|
||||
|
||||
GameDatabase.infinity.breakUpgrades = {
|
||||
export const breakInfinityUpgrades = {
|
||||
totalAMMult: {
|
||||
id: "totalMult",
|
||||
cost: 1e4,
|
||||
|
|
7
src/core/secret-formula/infinity/index.js
Normal file
7
src/core/secret-formula/infinity/index.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
import { breakInfinityUpgrades } from "./break-infinity-upgrades";
|
||||
import { infinityUpgrades } from "./infinity-upgrades";
|
||||
|
||||
export const infinity = {
|
||||
upgrades: infinityUpgrades,
|
||||
breakUpgrades: breakInfinityUpgrades
|
||||
};
|
|
@ -1,6 +1,4 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
|
||||
function dimInfinityMult() {
|
||||
return Currency.infinitiesTotal.value.times(0.2).plus(1);
|
||||
|
@ -9,7 +7,7 @@ function chargedDimInfinityMult() {
|
|||
return 1 + Math.log10(Math.max(1, Currency.infinitiesTotal.value.pLog10())) * Math.sqrt(Ra.pets.teresa.level) / 150;
|
||||
}
|
||||
|
||||
GameDatabase.infinity.upgrades = {
|
||||
export const infinityUpgrades = {
|
||||
totalTimeMult: {
|
||||
id: "timeMult",
|
||||
cost: 1,
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
import { PlayerProgress } from "../../player-progress";
|
||||
|
||||
import { MultiplierTabHelper } from "./helper-functions";
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.AD = {
|
||||
export const AD = {
|
||||
total: {
|
||||
name: dim => {
|
||||
if (dim) return `AD ${dim} Multiplier`;
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.AM = {
|
||||
export const AM = {
|
||||
total: {
|
||||
name: "Antimatter Production",
|
||||
displayOverride: () => `${format(Currency.antimatter.productionPerSecond, 2, 2)}/sec`,
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
import { PlayerProgress } from "../../player-progress";
|
||||
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
@ -9,7 +8,7 @@ import { MultiplierTabIcons } from "./icons";
|
|||
// special case due to not being a prestige currency but still needing to be treated like one in the UI. This
|
||||
// is because it requires dilation to be unlocked, which isn't a given, and we want the tab continuously visible
|
||||
// after the first ever dilation unlock on the 0th reality
|
||||
GameDatabase.multiplierTabValues.DT = {
|
||||
export const DT = {
|
||||
total: {
|
||||
name: "Dilated Time gain",
|
||||
displayOverride: () => `${format(getDilationGainPerSecond().times(getGameSpeedupForDisplay()), 2, 2)}/sec`,
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.eternities = {
|
||||
export const eternities = {
|
||||
total: {
|
||||
name: "Eternities gained per Eternity",
|
||||
isBase: true,
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
import { PlayerProgress } from "../../player-progress";
|
||||
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.EP = {
|
||||
export const EP = {
|
||||
total: {
|
||||
name: "Total EP Gained on Eternity",
|
||||
displayOverride: () => (Player.canEternity
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
import { MultiplierTabHelper } from "./helper-functions";
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.galaxies = {
|
||||
export const galaxies = {
|
||||
// Note: none of the galaxy types use the global multiplier that applies to all of them within multValue, which
|
||||
// very slightly reduces performance impact and is okay because it's applied consistently
|
||||
antimatter: {
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
import { MultiplierTabHelper } from "./helper-functions";
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.gamespeed = {
|
||||
export const gamespeed = {
|
||||
total: {
|
||||
name: "Game speed",
|
||||
displayOverride: () => {
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
import { MultiplierTabHelper } from "./helper-functions";
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.general = {
|
||||
export const general = {
|
||||
achievement: {
|
||||
name: (ach, dim) => (dim?.length === 2
|
||||
? `Achievement ${ach} (${dim})`
|
||||
|
|
|
@ -239,8 +239,3 @@ export const MultiplierTabHelper = {
|
|||
return this.evenDimNC12Production().gt(this.oddDimNC12Production());
|
||||
}
|
||||
};
|
||||
|
||||
// All the resource files in this GameDB folder set props of multiplierTabValues, but it needs to be initialized.
|
||||
// This file comes first in the import order and thus will make sure that nothing else attempts to define a prop
|
||||
// on an undefined object
|
||||
GameDatabase.multiplierTabValues = {};
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import { reality } from "@/core/secret-formula/reality";
|
||||
|
||||
/**
|
||||
* Every entry in this object is a styling specification for bars within the multiplier tab.
|
||||
* {
|
||||
|
@ -116,7 +118,7 @@ export const MultiplierTabIcons = {
|
|||
},
|
||||
DIMBOOST: {
|
||||
symbol: `<i class="fas fa-angles-up" />`,
|
||||
color: GameDatabase.reality.glyphTypes.power.color,
|
||||
color: reality.glyphTypes.power.color,
|
||||
},
|
||||
TICKSPEED: {
|
||||
symbol: `<i class="fas fa-clock" />`,
|
||||
|
@ -160,8 +162,8 @@ export const MultiplierTabIcons = {
|
|||
},
|
||||
SPECIFIC_GLYPH(type) {
|
||||
return {
|
||||
symbol: `<b>${GameDatabase.reality.glyphTypes[type].symbol}</b>`,
|
||||
color: GameDatabase.reality.glyphTypes[type].color,
|
||||
symbol: `<b>${reality.glyphTypes[type].symbol}</b>`,
|
||||
color: reality.glyphTypes[type].color,
|
||||
};
|
||||
},
|
||||
BLACK_HOLE: {
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
|
||||
import "./helper-functions";
|
||||
|
||||
/**
|
||||
* Most of the GameDB entries in this folder follow largely the same structure, but have been split into multiple
|
||||
* for purposes of organization and ease-of-use. All fields may also be functions which may or may not accept an input
|
||||
|
@ -29,21 +26,6 @@ import "./helper-functions";
|
|||
* entry has in the Vue component
|
||||
* }
|
||||
*/
|
||||
import "./general";
|
||||
import "./antimatter";
|
||||
import "./antimatter-dimensions";
|
||||
import "./infinity-dimensions";
|
||||
import "./time-dimensions";
|
||||
import "./infinity-points";
|
||||
import "./eternity-points";
|
||||
import "./tachyon-particles";
|
||||
import "./dilated-time";
|
||||
import "./tickspeed";
|
||||
import "./galaxies";
|
||||
import "./infinities";
|
||||
import "./eternities";
|
||||
import "./gamespeed";
|
||||
import "./replicanti";
|
||||
|
||||
// Some props in the tree are dynamically generated from value structure in the GameDB
|
||||
import "./tree";
|
||||
export { multiplierTabValues } from "./values";
|
||||
export { multiplierTabTree } from "./tree";
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.infinities = {
|
||||
export const infinities = {
|
||||
total: {
|
||||
name: "Infinities gained per Crunch",
|
||||
isBase: true,
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
import { PlayerProgress } from "../../player-progress";
|
||||
|
||||
import { MultiplierTabHelper } from "./helper-functions";
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.ID = {
|
||||
export const ID = {
|
||||
total: {
|
||||
name: dim => {
|
||||
if (dim) return `ID ${dim} Multiplier`;
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
import { PlayerProgress } from "../../player-progress";
|
||||
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.IP = {
|
||||
export const IP = {
|
||||
total: {
|
||||
name: "Total IP Gained on Infinity",
|
||||
displayOverride: () => (Player.canCrunch
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.replicanti = {
|
||||
export const replicanti = {
|
||||
total: {
|
||||
name: "Replicanti Speed",
|
||||
multValue: () => totalReplicantiSpeedMult(Replicanti.amount.gt(replicantiCap())),
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
import { PlayerProgress } from "../../player-progress";
|
||||
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.TP = {
|
||||
export const TP = {
|
||||
total: {
|
||||
name: "Total Tachyon Particles",
|
||||
displayOverride: () => {
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
import { MultiplierTabHelper } from "./helper-functions";
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.tickspeed = {
|
||||
export const tickspeed = {
|
||||
total: {
|
||||
name: "Total Tickspeed",
|
||||
displayOverride: () => {
|
||||
|
@ -68,7 +67,7 @@ GameDatabase.multiplierTabValues.tickspeed = {
|
|||
},
|
||||
};
|
||||
|
||||
GameDatabase.multiplierTabValues.tickspeedUpgrades = {
|
||||
export const tickspeedUpgrades = {
|
||||
purchased: {
|
||||
name: "Purchased Tickspeed Upgrades",
|
||||
displayOverride: () => (Laitela.continuumActive
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
import { PlayerProgress } from "../../player-progress";
|
||||
|
||||
import { MultiplierTabHelper } from "./helper-functions";
|
||||
import { MultiplierTabIcons } from "./icons";
|
||||
|
||||
// See index.js for documentation
|
||||
GameDatabase.multiplierTabValues.TD = {
|
||||
export const TD = {
|
||||
total: {
|
||||
name: dim => {
|
||||
if (dim) return `TD ${dim} Multiplier`;
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
/* eslint-disable max-depth */
|
||||
/* eslint-disable camelcase */
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
import { MultiplierTabHelper } from "./helper-functions";
|
||||
import { multiplierTabValues } from "./values";
|
||||
|
||||
const dynamicGenProps = ["TP", "DT", "infinities", "eternities", "gamespeed", "replicanti"];
|
||||
const propList = {
|
||||
|
@ -22,7 +21,7 @@ const propList = {
|
|||
// generate them dynamically instead
|
||||
for (const prop of dynamicGenProps) {
|
||||
propList[prop] = [];
|
||||
for (const toCopy of Object.keys(GameDatabase.multiplierTabValues[prop])) {
|
||||
for (const toCopy of Object.keys(multiplierTabValues[prop])) {
|
||||
if (toCopy !== "total") propList[prop].push(toCopy);
|
||||
}
|
||||
}
|
||||
|
@ -44,10 +43,10 @@ function getProps(resource, tier) {
|
|||
return newProps;
|
||||
}
|
||||
|
||||
// Everything is multiplierTabTree is associated with values in GameDatabase.multiplierTabValues. The only explicitly
|
||||
// Everything is multiplierTabTree is associated with values in multiplierTabValues. The only explicitly
|
||||
// initialized props here are the "root" props which are viewable on the tab with full breakdowns. After the initial
|
||||
// specification, all children props are dynamically added based on the arrays in the helper functions above
|
||||
GameDatabase.multiplierTabTree = {
|
||||
export const multiplierTabTree = {
|
||||
AM_total: [
|
||||
["AD_total", "tickspeed_total", "AM_effarigAM"]
|
||||
],
|
||||
|
@ -106,12 +105,12 @@ GameDatabase.multiplierTabTree = {
|
|||
|
||||
// Gamespeed's two alternate displays are current and average gamespeed, distinguished by which of two
|
||||
// mutually-exclusive entries appear in the list. We explicity modify props here as needed
|
||||
const allGamespeed = GameDatabase.multiplierTabTree.gamespeed_total[0];
|
||||
GameDatabase.multiplierTabTree.gamespeed_total[0] = [...allGamespeed].filter(key => key !== "gamespeed_blackHoleAvg");
|
||||
GameDatabase.multiplierTabTree.gamespeed_total[1] = [...allGamespeed].filter(key => key !== "gamespeed_blackHoleCurr");
|
||||
const allGamespeed = multiplierTabTree.gamespeed_total[0];
|
||||
multiplierTabTree.gamespeed_total[0] = [...allGamespeed].filter(key => key !== "gamespeed_blackHoleAvg");
|
||||
multiplierTabTree.gamespeed_total[1] = [...allGamespeed].filter(key => key !== "gamespeed_blackHoleCurr");
|
||||
|
||||
// DT doesn't explicitly have an entry to TP, due to it being its own total entry, so we link them together
|
||||
GameDatabase.multiplierTabTree.DT_total[0].unshift("TP_total");
|
||||
multiplierTabTree.DT_total[0].unshift("TP_total");
|
||||
|
||||
// Additional data specification for dynamically-generated props
|
||||
const dimTypes = ["AD", "ID", "TD"];
|
||||
|
@ -148,20 +147,20 @@ const targetedEffects = {
|
|||
|
||||
// Highest actively-producing dimensions need a special case
|
||||
for (const dim of dimTypes) {
|
||||
GameDatabase.multiplierTabTree[`${dim}_total`][0].push(`${dim}_highestDim`);
|
||||
GameDatabase.multiplierTabTree[`${dim}_total`][1].push(`${dim}_highestDim`);
|
||||
multiplierTabTree[`${dim}_total`][0].push(`${dim}_highestDim`);
|
||||
multiplierTabTree[`${dim}_total`][1].push(`${dim}_highestDim`);
|
||||
}
|
||||
|
||||
// EC7 also needs a special case for tickspeed, since it doesn't appear on the multipliers themselves
|
||||
for (const dim of ["ID", "TD"]) {
|
||||
GameDatabase.multiplierTabTree[`${dim}_total`][0].push(`${dim}_tickspeed`);
|
||||
GameDatabase.multiplierTabTree[`${dim}_total`][1].push(`${dim}_tickspeed`);
|
||||
multiplierTabTree[`${dim}_total`][0].push(`${dim}_tickspeed`);
|
||||
multiplierTabTree[`${dim}_total`][1].push(`${dim}_tickspeed`);
|
||||
}
|
||||
|
||||
// Dynamically generate all values from existing values, but broken down by dimension
|
||||
for (const res of dimTypes) {
|
||||
for (const prop of getProps(res)) GameDatabase.multiplierTabTree[prop] = [append8(prop)];
|
||||
for (let dim = 1; dim <= 8; dim++) GameDatabase.multiplierTabTree[`${res}_total_${dim}`] = [getProps(res, dim)];
|
||||
for (const prop of getProps(res)) multiplierTabTree[prop] = [append8(prop)];
|
||||
for (let dim = 1; dim <= 8; dim++) multiplierTabTree[`${res}_total_${dim}`] = [getProps(res, dim)];
|
||||
}
|
||||
|
||||
// A few dynamically-generated props are largely useless in terms of what they connect to, in that they have very few
|
||||
|
@ -172,50 +171,50 @@ const removedRegexes = ["AD_sacrifice", "AD_breakInfinityUpgrade", "AD_nerfIC",
|
|||
".._achievementMult", ".._glyph", ".._alchemy", ".._imaginaryUpgrade", ".._iap",
|
||||
".._nerfV", ".._nerfCursed", ".._nerfPelle", ".._pelle"
|
||||
];
|
||||
const removedProps = Object.keys(GameDatabase.multiplierTabTree)
|
||||
const removedProps = Object.keys(multiplierTabTree)
|
||||
.filter(key => removedRegexes.some(regex => key.match(regex)));
|
||||
for (const prop of removedProps) {
|
||||
GameDatabase.multiplierTabTree[prop] = undefined;
|
||||
multiplierTabTree[prop] = undefined;
|
||||
}
|
||||
|
||||
// We need to handle infinity power multiplier a bit differently; previous steps of dynamic generation fill it with
|
||||
// 8 identical AD multipliers, but we want to replace it with ID mults and the conversion rate
|
||||
GameDatabase.multiplierTabTree.AD_infinityPower = [["ID_total", "ID_powerConversion"]];
|
||||
multiplierTabTree.AD_infinityPower = [["ID_total", "ID_powerConversion"]];
|
||||
for (let dim = 1; dim <= 8; dim++) {
|
||||
GameDatabase.multiplierTabTree[`AD_infinityPower_${dim}`] = [["ID_total", "ID_powerConversion"]];
|
||||
multiplierTabTree[`AD_infinityPower_${dim}`] = [["ID_total", "ID_powerConversion"]];
|
||||
}
|
||||
|
||||
// Tesseracts are added one layer deep, but we don't want to override the existing ID_purchase entry
|
||||
GameDatabase.multiplierTabTree.ID_purchase.unshift(["ID_basePurchase", "ID_tesseractPurchase",
|
||||
multiplierTabTree.ID_purchase.unshift(["ID_basePurchase", "ID_tesseractPurchase",
|
||||
"ID_infinityGlyphSacrifice", "ID_powPurchase"]);
|
||||
for (let dim = 1; dim <= 7; dim++) {
|
||||
GameDatabase.multiplierTabTree[`ID_purchase_${dim}`] = [[`ID_basePurchase_${dim}`, `ID_tesseractPurchase_${dim}`,
|
||||
multiplierTabTree[`ID_purchase_${dim}`] = [[`ID_basePurchase_${dim}`, `ID_tesseractPurchase_${dim}`,
|
||||
"ID_powPurchase"]];
|
||||
}
|
||||
GameDatabase.multiplierTabTree.ID_purchase_8 = [[`ID_basePurchase_8`, `ID_infinityGlyphSacrifice`, "ID_powPurchase"]];
|
||||
multiplierTabTree.ID_purchase_8 = [[`ID_basePurchase_8`, `ID_infinityGlyphSacrifice`, "ID_powPurchase"]];
|
||||
|
||||
// These are also added one layer deep
|
||||
for (let dim = 1; dim <= 7; dim++) {
|
||||
GameDatabase.multiplierTabTree[`TD_purchase_${dim}`] = [[`TD_basePurchase_${dim}`, `TD_powPurchase_${dim}`]];
|
||||
multiplierTabTree[`TD_purchase_${dim}`] = [[`TD_basePurchase_${dim}`, `TD_powPurchase_${dim}`]];
|
||||
}
|
||||
GameDatabase.multiplierTabTree.TD_purchase.push(["TD_basePurchase", "TD_timeGlyphSacrifice", "TD_powPurchase"]);
|
||||
GameDatabase.multiplierTabTree.TD_purchase_8 = [["TD_basePurchase_8", "TD_timeGlyphSacrifice", "TD_powPurchase"]];
|
||||
multiplierTabTree.TD_purchase.push(["TD_basePurchase", "TD_timeGlyphSacrifice", "TD_powPurchase"]);
|
||||
multiplierTabTree.TD_purchase_8 = [["TD_basePurchase_8", "TD_timeGlyphSacrifice", "TD_powPurchase"]];
|
||||
|
||||
// Dynamically fill effects which only affect certain dimensions, as noted in targetedEffects
|
||||
for (const res of dimTypes) {
|
||||
for (const eff of Object.keys(targetedEffects)) {
|
||||
if (!targetedEffects[eff][res]) continue;
|
||||
GameDatabase.multiplierTabTree[`${res}_${eff}`] = [[]];
|
||||
multiplierTabTree[`${res}_${eff}`] = [[]];
|
||||
for (const id of targetedEffects[eff][res]) {
|
||||
for (let dim = 1; dim <= 8; dim++) {
|
||||
const propStr = `${res}_${eff}_${dim}`;
|
||||
const dimStr = `${res}${dim}`;
|
||||
if (targetedEffects[eff].checkFn(id, dimStr)) {
|
||||
if (!GameDatabase.multiplierTabTree[propStr]) GameDatabase.multiplierTabTree[propStr] = [[]];
|
||||
GameDatabase.multiplierTabTree[propStr][0].push(`general_${eff}_${id}_${dimStr}`);
|
||||
if (!multiplierTabTree[propStr]) multiplierTabTree[propStr] = [[]];
|
||||
multiplierTabTree[propStr][0].push(`general_${eff}_${id}_${dimStr}`);
|
||||
}
|
||||
}
|
||||
GameDatabase.multiplierTabTree[`${res}_${eff}`][0].push(`general_${eff}_${id}_${res}`);
|
||||
multiplierTabTree[`${res}_${eff}`][0].push(`general_${eff}_${id}_${res}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -224,17 +223,17 @@ for (const res of dimTypes) {
|
|||
for (const res of singleRes) {
|
||||
for (const eff of Object.keys(targetedEffects)) {
|
||||
if (!targetedEffects[eff][res]) continue;
|
||||
GameDatabase.multiplierTabTree[`${res}_${eff}`] = [[]];
|
||||
multiplierTabTree[`${res}_${eff}`] = [[]];
|
||||
for (const ach of targetedEffects[eff][res]) {
|
||||
GameDatabase.multiplierTabTree[`${res}_${eff}`][0].push(`general_${eff}_${ach}`);
|
||||
multiplierTabTree[`${res}_${eff}`][0].push(`general_${eff}_${ach}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fill in eternity upgrade entries
|
||||
GameDatabase.multiplierTabTree.ID_eternityUpgrade = [[`ID_eu1`, `ID_eu2`, `ID_eu3`]];
|
||||
GameDatabase.multiplierTabTree.TD_eternityUpgrade = [[`TD_eu1`, `TD_eu2`]];
|
||||
multiplierTabTree.ID_eternityUpgrade = [[`ID_eu1`, `ID_eu2`, `ID_eu3`]];
|
||||
multiplierTabTree.TD_eternityUpgrade = [[`TD_eu1`, `TD_eu2`]];
|
||||
for (let dim = 1; dim <= 8; dim++) {
|
||||
GameDatabase.multiplierTabTree[`ID_eternityUpgrade_${dim}`] = [[`ID_eu1_${dim}`, `ID_eu2_${dim}`, `ID_eu3_${dim}`]];
|
||||
GameDatabase.multiplierTabTree[`TD_eternityUpgrade_${dim}`] = [[`TD_eu1_${dim}`, `TD_eu2_${dim}`]];
|
||||
multiplierTabTree[`ID_eternityUpgrade_${dim}`] = [[`ID_eu1_${dim}`, `ID_eu2_${dim}`, `ID_eu3_${dim}`]];
|
||||
multiplierTabTree[`TD_eternityUpgrade_${dim}`] = [[`TD_eu1_${dim}`, `TD_eu2_${dim}`]];
|
||||
}
|
||||
|
|
34
src/core/secret-formula/multiplier-tab/values.js
Normal file
34
src/core/secret-formula/multiplier-tab/values.js
Normal file
|
@ -0,0 +1,34 @@
|
|||
import { AM } from "./antimatter";
|
||||
import { AD } from "./antimatter-dimensions";
|
||||
import { DT } from "./dilated-time";
|
||||
import { eternities } from "./eternities";
|
||||
import { EP } from "./eternity-points";
|
||||
import { galaxies } from "./galaxies";
|
||||
import { gamespeed } from "./gamespeed";
|
||||
import { general } from "./general";
|
||||
import { infinities } from "./infinities";
|
||||
import { ID } from "./infinity-dimensions";
|
||||
import { IP } from "./infinity-points";
|
||||
import { replicanti } from "./replicanti";
|
||||
import { TP } from "./tachyon-particles";
|
||||
import { tickspeed, tickspeedUpgrades } from "./tickspeed";
|
||||
import { TD } from "./time-dimensions";
|
||||
|
||||
export const multiplierTabValues = {
|
||||
general,
|
||||
AM,
|
||||
AD,
|
||||
ID,
|
||||
TD,
|
||||
IP,
|
||||
EP,
|
||||
TP,
|
||||
DT,
|
||||
tickspeed,
|
||||
tickspeedUpgrades,
|
||||
galaxies,
|
||||
infinities,
|
||||
eternities,
|
||||
gamespeed,
|
||||
replicanti
|
||||
};
|
|
@ -1,7 +1,5 @@
|
|||
import { DC } from "../constants";
|
||||
|
||||
import { GameDatabase } from "./game-database";
|
||||
|
||||
// A = always there
|
||||
// L = locked
|
||||
// R = random chance condition
|
||||
|
@ -13,7 +11,7 @@ function newsAnimSpd(seconds) {
|
|||
}
|
||||
|
||||
|
||||
GameDatabase.news = [
|
||||
export const news = [
|
||||
{
|
||||
id: "a1",
|
||||
text: "The cookie is a lie.",
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "./game-database";
|
||||
|
||||
GameDatabase.progressStages = [
|
||||
export const progressStages = [
|
||||
/**
|
||||
* This is used in both the catchup modal and for cloud save comparisons. Due to the fact that it's used for
|
||||
* cloud comparisons, there's a lot of processing that needs to be done on raw player-like objects that aren't
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
import { automatorTemplates } from "../script-templates";
|
||||
|
||||
GameDatabase.reality.automator = {
|
||||
export const automator = {
|
||||
categoryNames: [
|
||||
"Time Studies",
|
||||
"Event Triggers",
|
||||
|
@ -615,5 +615,20 @@ GameDatabase.reality.automator = {
|
|||
}`
|
||||
]
|
||||
},
|
||||
]
|
||||
],
|
||||
otherAutomatorPoints: [
|
||||
{
|
||||
name: "Reality Count",
|
||||
automatorPoints: () => 2 * Math.clampMax(Currency.realities.value, 50),
|
||||
shortDescription: () => `+${formatInt(2)} per Reality, up to ${formatInt(50)} Realities`,
|
||||
symbol: "Ϟ",
|
||||
},
|
||||
{
|
||||
name: "Black Hole",
|
||||
automatorPoints: () => (BlackHole(1).isUnlocked ? 10 : 0),
|
||||
shortDescription: () => `Unlocking gives ${formatInt(10)} AP`,
|
||||
symbol: "<i class='fas fa-circle'></i>",
|
||||
},
|
||||
],
|
||||
templates: automatorTemplates
|
||||
};
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
// Color prop is a combination of a B/W background and a border hex code
|
||||
GameDatabase.reality.glyphCosmeticSets = {
|
||||
export const glyphCosmeticSets = {
|
||||
cards: {
|
||||
id: "cards",
|
||||
name: "Playing Card Suits",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
export const GlyphCombiner = Object.freeze({
|
||||
/**
|
||||
|
@ -28,8 +27,7 @@ export const GlyphCombiner = Object.freeze({
|
|||
multiplyDecimal: x => x.reduce(Decimal.prodReducer, DC.D1)
|
||||
});
|
||||
|
||||
|
||||
GameDatabase.reality.glyphEffects = {
|
||||
export const glyphEffects = {
|
||||
timepow: {
|
||||
id: "timepow",
|
||||
bitmaskIndex: 0,
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
GameDatabase.reality.glyphSacrifice = {
|
||||
export const glyphSacrifice = {
|
||||
"power": {
|
||||
id: "power",
|
||||
effect: added => {
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
import { GameDatabase } from "../game-database";
|
||||
|
||||
// The glyphTypes entry is used for both gameplay and cosmetics purposes, so we cannot modify isUnlocked for cosmetics.
|
||||
// For the purposes of cosmetics, the difference between isUnlocked and canCustomize is as follows:
|
||||
// - isUnlocked: Whether or not this type appears as a choice in glyph-specific customization for overriding their
|
||||
// normal display type; this is ignored for functional type entries
|
||||
// - canCustomize: Whether or not this type can have its color/symbol changed in the type-specific customization
|
||||
GameDatabase.reality.glyphTypes = {
|
||||
export const glyphTypes = {
|
||||
time: {
|
||||
id: "time",
|
||||
symbol: GLYPH_SYMBOLS.time,
|
||||
|
@ -81,7 +79,7 @@ GameDatabase.reality.glyphTypes = {
|
|||
},
|
||||
};
|
||||
|
||||
GameDatabase.reality.cosmeticGlyphs = {
|
||||
export const cosmeticGlyphs = {
|
||||
music: {
|
||||
id: "music",
|
||||
symbol: "♫",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
const rebuyable = props => {
|
||||
props.cost = () => props.initialCost * Math.pow(props.costMult, player.reality.imaginaryRebuyables[props.id]);
|
||||
|
@ -11,7 +10,7 @@ const rebuyable = props => {
|
|||
return props;
|
||||
};
|
||||
|
||||
GameDatabase.reality.imaginaryUpgrades = [
|
||||
export const imaginaryUpgrades = [
|
||||
rebuyable({
|
||||
name: "Temporal Intensifier",
|
||||
id: 1,
|
||||
|
|
22
src/core/secret-formula/reality/index.js
Normal file
22
src/core/secret-formula/reality/index.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
import { cosmeticGlyphs, glyphTypes } from "./glyph-types";
|
||||
import { perkConnections, perks } from "./perks";
|
||||
|
||||
import { automator } from "./automator";
|
||||
import { glyphCosmeticSets } from "./glyph-cosmetics";
|
||||
import { glyphEffects } from "./glyph-effects";
|
||||
import { glyphSacrifice } from "./glyph-sacrifices";
|
||||
import { imaginaryUpgrades } from "./imaginary-upgrades";
|
||||
import { realityUpgrades } from "./reality-upgrades";
|
||||
|
||||
export const reality = {
|
||||
automator,
|
||||
cosmeticGlyphs,
|
||||
glyphCosmeticSets,
|
||||
glyphEffects,
|
||||
glyphSacrifice,
|
||||
glyphTypes,
|
||||
imaginaryUpgrades,
|
||||
perks,
|
||||
perkConnections,
|
||||
upgrades: realityUpgrades
|
||||
};
|
|
@ -1,5 +1,4 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
export const PERK_FAMILY = {
|
||||
ANTIMATTER: "ANTIMATTER",
|
||||
|
@ -30,7 +29,7 @@ function vectorToNum(v) {
|
|||
* Note: This encoding/decoding only works properly for coordinates with values between -1000 and 1000, and will
|
||||
* be slightly off for vectors whose coordinates aren't divisible by 5
|
||||
*/
|
||||
GameDatabase.reality.perks = {
|
||||
export const perks = {
|
||||
firstPerk: {
|
||||
id: 0,
|
||||
label: "START",
|
||||
|
@ -511,8 +510,8 @@ GameDatabase.reality.perks = {
|
|||
}
|
||||
};
|
||||
|
||||
GameDatabase.reality.perkConnections = (function() {
|
||||
const p = GameDatabase.reality.perks;
|
||||
export const perkConnections = (function() {
|
||||
const p = perks;
|
||||
// First item is the start, other items are the ends
|
||||
const groups = [
|
||||
[p.firstPerk, p.achievementGroup1, p.startAM, p.autounlockEU1, p.bypassEC5Lock],
|
||||
|
@ -553,7 +552,7 @@ GameDatabase.reality.perkConnections = (function() {
|
|||
[p.achievementGroup4, p.achievementGroup5],
|
||||
];
|
||||
const connections = {};
|
||||
for (const perk of Object.values(GameDatabase.reality.perks)) {
|
||||
for (const perk of Object.values(perks)) {
|
||||
const connectedPerks = [];
|
||||
const directConnections = groups.find(g => g[0] === perk);
|
||||
if (directConnections !== undefined) {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { DC } from "../../constants";
|
||||
import { GameDatabase } from "../game-database";
|
||||
|
||||
const rebuyable = props => {
|
||||
props.cost = () => getHybridCostScaling(
|
||||
|
@ -26,7 +25,7 @@ const rebuyable = props => {
|
|||
};
|
||||
|
||||
|
||||
GameDatabase.reality.upgrades = [
|
||||
export const realityUpgrades = [
|
||||
rebuyable({
|
||||
name: "Temporal Amplifier",
|
||||
id: 1,
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { AutobuyerInputFunctions } from "@/components/tabs/autobuyers/AutobuyerInput";
|
||||
import { GameDatabase } from "./game-database";
|
||||
|
||||
GameDatabase.reality.automator.templates = {
|
||||
export const automatorTemplates = {
|
||||
/**
|
||||
* List of possible data types to dynamically generate in script templates, assumed to be only string or boolean
|
||||
* {
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import { STEAM } from "@/env";
|
||||
import { GameDatabase } from "./game-database";
|
||||
|
||||
// NOTE: IF ANY COSTS ARE CHANGED HERE, THEY ALSO NEED TO BE CHANGED ON THE BACKEND TOO
|
||||
GameDatabase.shopPurchases = {
|
||||
export const shopPurchases = {
|
||||
dimPurchases: {
|
||||
key: "dimPurchases",
|
||||
cost: 30,
|
||||
|
@ -126,5 +125,5 @@ GameDatabase.shopPurchases = {
|
|||
};
|
||||
|
||||
if (STEAM) {
|
||||
delete GameDatabase.shopPurchases.allCosmeticSets;
|
||||
delete shopPurchases.allCosmeticSets;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "./game-database";
|
||||
|
||||
GameDatabase.speedrunMilestones = [
|
||||
export const speedrunMilestones = [
|
||||
{
|
||||
id: 1,
|
||||
key: "firstBoost",
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
import { DC } from "../constants";
|
||||
|
||||
import { GameDatabase } from "./game-database";
|
||||
|
||||
GameDatabase.tabNotifications = {
|
||||
export const tabNotifications = {
|
||||
firstInfinity: {
|
||||
id: 0,
|
||||
tabsToHighLight: [
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
import { GameDatabase } from "./game-database";
|
||||
|
||||
GameDatabase.tabs = [
|
||||
export const tabs = [
|
||||
{
|
||||
key: "dimensions",
|
||||
name: "Dimensions",
|
||||
|
|
Loading…
Reference in New Issue
Block a user