mirror of
https://github.com/IvarK/AntimatterDimensionsSourceCode.git
synced 2025-02-18 00:20:13 +00:00
Merge branch 'master' into Steam-Webpack
This commit is contained in:
commit
3c1da85c00
@ -11,6 +11,11 @@ function handleChallengeCompletion() {
|
|||||||
NormalChallenge(1).complete();
|
NormalChallenge(1).complete();
|
||||||
}
|
}
|
||||||
if (!challenge) return;
|
if (!challenge) return;
|
||||||
|
|
||||||
|
// Clear the IC notification after the first completion (only) so that it can show it again for the next one
|
||||||
|
const inIC = InfinityChallenge.isRunning;
|
||||||
|
if (inIC && !InfinityChallenge.current.isCompleted) TabNotification.ICUnlock.clearTrigger();
|
||||||
|
|
||||||
challenge.complete();
|
challenge.complete();
|
||||||
challenge.updateChallengeTime();
|
challenge.updateChallengeTime();
|
||||||
if (!player.options.retryChallenge) {
|
if (!player.options.retryChallenge) {
|
||||||
@ -22,9 +27,7 @@ function handleChallengeCompletion() {
|
|||||||
export function manualBigCrunchResetRequest() {
|
export function manualBigCrunchResetRequest() {
|
||||||
if (!Player.canCrunch) return;
|
if (!Player.canCrunch) return;
|
||||||
if (GameEnd.creditsEverClosed) return;
|
if (GameEnd.creditsEverClosed) return;
|
||||||
// Before the player has broken infinity, the confirmation modal should never be shown
|
if (player.options.confirmations.bigCrunch) {
|
||||||
if ((player.break || PlayerProgress.eternityUnlocked()) &&
|
|
||||||
player.options.confirmations.bigCrunch) {
|
|
||||||
Modal.bigCrunch.show();
|
Modal.bigCrunch.show();
|
||||||
} else {
|
} else {
|
||||||
bigCrunchResetRequest();
|
bigCrunchResetRequest();
|
||||||
|
@ -120,7 +120,7 @@ export const Pelle = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
get disabledAchievements() {
|
get disabledAchievements() {
|
||||||
return [164, 143, 142, 141, 137, 134, 133, 132, 125, 118, 117, 111, 104, 103, 93, 92, 91, 87, 85, 78, 76,
|
return [164, 156, 143, 142, 141, 137, 134, 133, 132, 125, 118, 117, 111, 104, 103, 93, 92, 91, 87, 85, 78, 76,
|
||||||
74, 65, 55, 54, 37];
|
74, 65, 55, 54, 37];
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ export const DC = deepFreeze({
|
|||||||
D2E5: new Decimal("2e5"),
|
D2E5: new Decimal("2e5"),
|
||||||
D2E6: new Decimal("2e6"),
|
D2E6: new Decimal("2e6"),
|
||||||
D5E7: new Decimal("5e7"),
|
D5E7: new Decimal("5e7"),
|
||||||
D5E9: new Decimal("5e9"),
|
D2E9: new Decimal("2e9"),
|
||||||
D2E25: new Decimal("2e25"),
|
D2E25: new Decimal("2e25"),
|
||||||
D2E22222: new Decimal("2e22222"),
|
D2E22222: new Decimal("2e22222"),
|
||||||
D9_99999E999: new Decimal("9.99999e999"),
|
D9_99999E999: new Decimal("9.99999e999"),
|
||||||
|
@ -116,7 +116,7 @@ export function getDilationGainPerSecond() {
|
|||||||
return new Decimal(tachyonEffect)
|
return new Decimal(tachyonEffect)
|
||||||
.timesEffectsOf(DilationUpgrade.dtGain, DilationUpgrade.dtGainPelle, DilationUpgrade.flatDilationMult)
|
.timesEffectsOf(DilationUpgrade.dtGain, DilationUpgrade.dtGainPelle, DilationUpgrade.flatDilationMult)
|
||||||
.times(ShopPurchase.dilatedTimePurchases.currentMult ** 0.5)
|
.times(ShopPurchase.dilatedTimePurchases.currentMult ** 0.5)
|
||||||
.times(Pelle.specialGlyphEffect.dilation).div(3e4);
|
.times(Pelle.specialGlyphEffect.dilation).div(1e5);
|
||||||
}
|
}
|
||||||
let dtRate = new Decimal(Currency.tachyonParticles.value)
|
let dtRate = new Decimal(Currency.tachyonParticles.value)
|
||||||
.timesEffectsOf(
|
.timesEffectsOf(
|
||||||
@ -160,6 +160,7 @@ export function rewardTP() {
|
|||||||
// TP multipliers as large as possible. Applying the reward to a base TP value and letting the multipliers
|
// TP multipliers as large as possible. Applying the reward to a base TP value and letting the multipliers
|
||||||
// act dynamically on this fixed base value elsewhere solves that issue
|
// act dynamically on this fixed base value elsewhere solves that issue
|
||||||
export function getBaseTP(antimatter) {
|
export function getBaseTP(antimatter) {
|
||||||
|
if (!Player.canEternity) return DC.D0;
|
||||||
const am = (isInCelestialReality() || Pelle.isDoomed)
|
const am = (isInCelestialReality() || Pelle.isDoomed)
|
||||||
? antimatter
|
? antimatter
|
||||||
: Ra.unlocks.unlockDilationStartingTP.effectOrDefault(antimatter);
|
: Ra.unlocks.unlockDilationStartingTP.effectOrDefault(antimatter);
|
||||||
|
@ -163,6 +163,14 @@ export class DimBoost {
|
|||||||
static get totalBoosts() {
|
static get totalBoosts() {
|
||||||
return Math.floor(this.purchasedBoosts + this.imaginaryBoosts);
|
return Math.floor(this.purchasedBoosts + this.imaginaryBoosts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static get startingDimensionBoosts() {
|
||||||
|
if (InfinityUpgrade.skipResetGalaxy.isBought) return 4;
|
||||||
|
if (InfinityUpgrade.skipReset3.isBought) return 3;
|
||||||
|
if (InfinityUpgrade.skipReset2.isBought) return 2;
|
||||||
|
if (InfinityUpgrade.skipReset1.isBought) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function softReset(tempBulk, forcedNDReset = false, forcedAMReset = false) {
|
export function softReset(tempBulk, forcedNDReset = false, forcedAMReset = false) {
|
||||||
|
@ -35,11 +35,11 @@ export function toggleAllTimeDims() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function buyMaxTimeDimension(tier) {
|
export function buyMaxTimeDimension(tier, eternityPoints = Currency.eternityPoints.value) {
|
||||||
const dim = TimeDimension(tier);
|
const dim = TimeDimension(tier);
|
||||||
if (tier > 4 && !TimeStudy.timeDimension(tier).isBought) return false;
|
if (tier > 4 && !TimeStudy.timeDimension(tier).isBought) return false;
|
||||||
if (Enslaved.isRunning) return buySingleTimeDimension(tier);
|
if (Enslaved.isRunning) return buySingleTimeDimension(tier);
|
||||||
const bulk = bulkBuyBinarySearch(Currency.eternityPoints.value, {
|
const bulk = bulkBuyBinarySearch(eternityPoints, {
|
||||||
costFunction: bought => dim.nextCost(bought),
|
costFunction: bought => dim.nextCost(bought),
|
||||||
cumulative: true,
|
cumulative: true,
|
||||||
firstCost: dim.cost,
|
firstCost: dim.cost,
|
||||||
@ -52,33 +52,23 @@ export function buyMaxTimeDimension(tier) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function maxAllTimeDimensions(checkAutobuyers = false) {
|
export function maxAllTimeDimensions() {
|
||||||
// Default behavior: Buy as many as possible, starting with the highest dimension first
|
// Try to buy single from the highest affordable new dimensions
|
||||||
// (reduces overhead at higher EP)
|
for (let i = 8; i > 0 && TimeDimension(i).bought === 0; i--) {
|
||||||
if (Currency.eternityPoints.exponent >= 10) {
|
buySingleTimeDimension(i);
|
||||||
for (let i = 8; i > 0; i--) {
|
}
|
||||||
if (!checkAutobuyers || Autobuyer.timeDimension(i).isActive) buyMaxTimeDimension(i);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Low EP behavior: Try to buy the highest affordable new dimension, then loop buying the cheapest possible
|
|
||||||
for (let i = 4; i > 0 && TimeDimension(i).bought === 0; i--) {
|
|
||||||
if (!checkAutobuyers || Autobuyer.timeDimension(i).isActive) buySingleTimeDimension(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Should never take more than like 50 iterations; explicit infinite loops make me nervous
|
// Buy everything costing less than 1% of initial EP
|
||||||
for (let stop = 0; stop < 1000; stop++) {
|
const eternityPoints = Currency.eternityPoints.value.times(0.01);
|
||||||
let cheapestDim = 0;
|
for (let i = 8; i > 0; i--) {
|
||||||
let cheapestCost = 1e10;
|
buyMaxTimeDimension(i, eternityPoints);
|
||||||
for (let i = 1; i <= 4; i++) {
|
}
|
||||||
if (TimeDimension(i).cost.lte(cheapestCost) && (!checkAutobuyers || Autobuyer.timeDimension(i).isActive)) {
|
|
||||||
cheapestDim = i;
|
// Loop buying the cheapest dimension possible; explicit infinite loops make me nervous
|
||||||
cheapestCost = TimeDimension(i).cost;
|
const unlockedDimensions = TimeDimensions.all.filter(d => d.isUnlocked);
|
||||||
}
|
for (let stop = 0; stop < 1000; stop++) {
|
||||||
}
|
const cheapestDim = unlockedDimensions.reduce((a, b) => (b.cost.gte(a.cost) ? a : b));
|
||||||
let bought = false;
|
if (!buySingleTimeDimension(cheapestDim.tier)) break;
|
||||||
if (cheapestDim !== 0 && Currency.eternityPoints.gte(cheapestCost)) bought = buySingleTimeDimension(cheapestDim);
|
|
||||||
if (!bought) break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,9 +6,7 @@ function giveEternityRewards(auto) {
|
|||||||
player.records.bestEternity.time = Math.min(player.records.thisEternity.time, player.records.bestEternity.time);
|
player.records.bestEternity.time = Math.min(player.records.thisEternity.time, player.records.bestEternity.time);
|
||||||
Currency.eternityPoints.add(gainedEternityPoints());
|
Currency.eternityPoints.add(gainedEternityPoints());
|
||||||
|
|
||||||
const newEternities = Pelle.isDisabled("eternityMults")
|
const newEternities = gainedEternities();
|
||||||
? new Decimal(1)
|
|
||||||
: new Decimal(getAdjustedGlyphEffect("timeetermult")).timesEffectsOf(RealityUpgrade(3), Achievement(113));
|
|
||||||
|
|
||||||
if (Currency.eternities.eq(0) && newEternities.lte(10)) {
|
if (Currency.eternities.eq(0) && newEternities.lte(10)) {
|
||||||
Tab.dimensions.time.show();
|
Tab.dimensions.time.show();
|
||||||
@ -204,6 +202,12 @@ function askEternityConfirmation() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function gainedEternities() {
|
||||||
|
return Pelle.isDisabled("eternityMults")
|
||||||
|
? new Decimal(1)
|
||||||
|
: new Decimal(getAdjustedGlyphEffect("timeetermult")).timesEffectsOf(RealityUpgrade(3), Achievement(113));
|
||||||
|
}
|
||||||
|
|
||||||
export class EternityMilestoneState {
|
export class EternityMilestoneState {
|
||||||
constructor(config) {
|
constructor(config) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
@ -296,9 +296,12 @@ GameKeyboard.bindHotkey("alt+y", () => toggleAutobuyer(Autobuyer.reality));
|
|||||||
(function() {
|
(function() {
|
||||||
function bindDimensionHotkeys(tier) {
|
function bindDimensionHotkeys(tier) {
|
||||||
GameKeyboard.bindRepeatableHotkey(`${tier}`, () => buyManyDimension(tier));
|
GameKeyboard.bindRepeatableHotkey(`${tier}`, () => buyManyDimension(tier));
|
||||||
|
GameKeyboard.bindRepeatableHotkey(`num${tier}`, () => buyManyDimension(tier));
|
||||||
GameKeyboard.bindRepeatableHotkey(`shift+${tier}`, () => buyOneDimension(tier));
|
GameKeyboard.bindRepeatableHotkey(`shift+${tier}`, () => buyOneDimension(tier));
|
||||||
GameKeyboard.bindHotkey(`alt+${tier}`, () => toggleAutobuyer(Autobuyer.antimatterDimension(tier)));
|
GameKeyboard.bindHotkey(`alt+${tier}`, () => toggleAutobuyer(Autobuyer.antimatterDimension(tier)));
|
||||||
|
GameKeyboard.bindHotkey(`alt+num${tier}`, () => toggleAutobuyer(Autobuyer.antimatterDimension(tier)));
|
||||||
GameKeyboard.bindHotkey(`shift+alt+${tier}`, () => toggleBuySingles(Autobuyer.antimatterDimension(tier)));
|
GameKeyboard.bindHotkey(`shift+alt+${tier}`, () => toggleBuySingles(Autobuyer.antimatterDimension(tier)));
|
||||||
|
GameKeyboard.bindHotkey(`shift+alt+num${tier}`, () => toggleBuySingles(Autobuyer.antimatterDimension(tier)));
|
||||||
}
|
}
|
||||||
for (let i = 1; i < 9; i++) bindDimensionHotkeys(i);
|
for (let i = 1; i < 9; i++) bindDimensionHotkeys(i);
|
||||||
}());
|
}());
|
||||||
|
@ -50,10 +50,14 @@ class ImaginaryUpgradeState extends BitPurchasableMechanicState {
|
|||||||
if (this.id >= 15 && this.id <= 18) {
|
if (this.id >= 15 && this.id <= 18) {
|
||||||
DarkMatterDimension(this.id - 14).amount = DC.D1;
|
DarkMatterDimension(this.id - 14).amount = DC.D1;
|
||||||
Tab.celestials.laitela.show();
|
Tab.celestials.laitela.show();
|
||||||
|
if (this.id === 17) Laitela.quotes.thirdDMD.show();
|
||||||
}
|
}
|
||||||
if (this.id === 19) {
|
if (this.id === 19) {
|
||||||
Tab.celestials.laitela.show();
|
Tab.celestials.laitela.show();
|
||||||
}
|
}
|
||||||
|
if (this.id === 21) {
|
||||||
|
Laitela.quotes.finalRowIM.show();
|
||||||
|
}
|
||||||
if (this.id === 22) {
|
if (this.id === 22) {
|
||||||
BASIC_GLYPH_TYPES.forEach(x => player.reality.glyphs.sac[x] = ImaginaryUpgrade(22).effectValue);
|
BASIC_GLYPH_TYPES.forEach(x => player.reality.glyphs.sac[x] = ImaginaryUpgrade(22).effectValue);
|
||||||
}
|
}
|
||||||
|
@ -150,8 +150,10 @@ export const InfinityChallenges = {
|
|||||||
if (ic.isUnlocked || ic.isCompleted) continue;
|
if (ic.isUnlocked || ic.isCompleted) continue;
|
||||||
if (value.lt(ic.unlockAM)) break;
|
if (value.lt(ic.unlockAM)) break;
|
||||||
// This has a reasonably high likelihood of happening when the player isn't looking at the game, so
|
// This has a reasonably high likelihood of happening when the player isn't looking at the game, so
|
||||||
// we leave it there for 5 minutes unless they click it away early
|
// we also give it a tab notification
|
||||||
GameUI.notify.infinity(`You have unlocked Infinity Challenge ${ic.id}`, 300000);
|
TabNotification.ICUnlock.clearTrigger();
|
||||||
|
GameUI.notify.infinity(`You have unlocked Infinity Challenge ${ic.id}`, 7000);
|
||||||
|
TabNotification.ICUnlock.tryTrigger();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
import Mousetrap from "mousetrap";
|
import Mousetrap from "mousetrap";
|
||||||
|
|
||||||
|
// Add all numpad keys to Mousetrap (keycodes 97-105 correspond to numpad 1-9)
|
||||||
|
const numpadKeys = {};
|
||||||
|
for (let num = 1; num <= 9; num++) numpadKeys[num + 96] = `num${num}`;
|
||||||
|
Mousetrap.addKeycodes(numpadKeys);
|
||||||
|
|
||||||
class KeySpin {
|
class KeySpin {
|
||||||
constructor(key, action) {
|
constructor(key, action) {
|
||||||
this.key = key;
|
this.key = key;
|
||||||
|
@ -919,9 +919,9 @@ GameDatabase.achievements.normal = [
|
|||||||
{
|
{
|
||||||
id: 131,
|
id: 131,
|
||||||
name: "No ethical consumption",
|
name: "No ethical consumption",
|
||||||
get description() { return `Get ${format(DC.D5E9)} Banked Infinities.`; },
|
get description() { return `Get ${format(DC.D2E9)} Banked Infinities.`; },
|
||||||
checkRequirement: () => Currency.infinitiesBanked.gt(DC.D5E9),
|
checkRequirement: () => Currency.infinitiesBanked.gt(DC.D2E9),
|
||||||
checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,
|
checkEvent: [GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION],
|
||||||
get reward() {
|
get reward() {
|
||||||
return `After Eternity you permanently keep ${formatPercents(0.05)} of your Infinities as Banked Infinities.`;
|
return `After Eternity you permanently keep ${formatPercents(0.05)} of your Infinities as Banked Infinities.`;
|
||||||
},
|
},
|
||||||
@ -937,7 +937,7 @@ GameDatabase.achievements.normal = [
|
|||||||
checkRequirement: () => player.galaxies >= 569 && player.requirementChecks.eternity.noRG,
|
checkRequirement: () => player.galaxies >= 569 && player.requirementChecks.eternity.noRG,
|
||||||
checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,
|
checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,
|
||||||
reward: "Gain a multiplier to Tachyon Particle and Dilated Time gain based on Antimatter Galaxies.",
|
reward: "Gain a multiplier to Tachyon Particle and Dilated Time gain based on Antimatter Galaxies.",
|
||||||
effect: () => Math.max(Math.pow(player.galaxies, 0.04), 1),
|
effect: () => 1.22 * Math.max(Math.pow(player.galaxies, 0.04), 1),
|
||||||
formatEffect: value => `${formatX(value, 2, 2)}`
|
formatEffect: value => `${formatX(value, 2, 2)}`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1139,7 +1139,8 @@ GameDatabase.achievements.normal = [
|
|||||||
description: "Reality without buying Time Theorems.",
|
description: "Reality without buying Time Theorems.",
|
||||||
checkRequirement: () => player.requirementChecks.reality.noPurchasedTT,
|
checkRequirement: () => player.requirementChecks.reality.noPurchasedTT,
|
||||||
checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,
|
checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,
|
||||||
reward: "Free coupon to McDonalds™️."
|
get reward() { return `Gain ${formatX(2.5, 0, 1)} Time Theorems, and a free coupon to McDonalds™️.`; },
|
||||||
|
effect: 2.5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 157,
|
id: 157,
|
||||||
|
@ -5,75 +5,83 @@ GameDatabase.celestials.quotes.laitela = {
|
|||||||
id: 0,
|
id: 0,
|
||||||
lines: [
|
lines: [
|
||||||
"You finally reached me.",
|
"You finally reached me.",
|
||||||
"I guess it is time to reveal to you,",
|
"I guess it is time to reveal,",
|
||||||
"The secrets hidden beneath existence.",
|
"The secrets hidden beneath existence itself.",
|
||||||
"The omnipresent ruling perfection. Continuum.",
|
"The shape of dimensional perfection, Continuum.",
|
||||||
"And the binding keys to the multiverse,",
|
"And the powers that bind the Multiverse,",
|
||||||
"Dark Matter and Dark Energy.",
|
"Dark Matter and Dark Energy.",
|
||||||
"My knowledge is endless and my wisdom divine.",
|
"My knowledge is endless and my wisdom divine.",
|
||||||
"So you can play around all you want.",
|
"So you can play around all you want.",
|
||||||
"I am Lai'tela, the Celestial of Dimensions,",
|
"For I am Lai'tela, the Celestial of Dimensions,",
|
||||||
"And I will be watching you forever.",
|
"And I shall watch you forever.",
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
// Note: This can be done immediately after unlocking Lai'tela
|
||||||
firstDestabilize: {
|
firstDestabilize: {
|
||||||
id: 1,
|
id: 1,
|
||||||
requirement: () => player.celestials.laitela.difficultyTier >= 1,
|
requirement: () => player.celestials.laitela.difficultyTier >= 1,
|
||||||
lines: [
|
lines: [
|
||||||
"It is fine. Unlike the others, I never had a Reality.",
|
"Unlike the others beneath me, I have no need for a Reality.",
|
||||||
"I built this one just now, precisely so it would collapse.",
|
"For I can simply create them, knowing full well it will collapse.",
|
||||||
"I can rebuild this Reality over and over, unlike them.",
|
"A power more incredible than any other, to build a Reality.",
|
||||||
"I could trap all of them if I wanted.",
|
"A prison, that can restrain even celestial power.",
|
||||||
|
"And this is why nothing you do will change a thing.",
|
||||||
|
"When you tire of struggling, you too, shall be bound and forgotten.",
|
||||||
"You will never find a way to overpower me.",
|
"You will never find a way to overpower me.",
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
firstSingularity: {
|
// Note: This happens about an hour or two before singularities
|
||||||
|
secondDestabilize: {
|
||||||
id: 2,
|
id: 2,
|
||||||
requirement: () => Currency.singularities.gte(1),
|
requirement: () => player.celestials.laitela.difficultyTier >= 2,
|
||||||
lines: [
|
lines: [
|
||||||
"It is weird, how all beings question things.",
|
"You... seem to be having too much fun.",
|
||||||
"You are different. You can build and manipulate Dimensions.",
|
"Just like they did before meeting their fate.",
|
||||||
"Were you truly once one of them?",
|
"Maybe my judgement was harsh, or unwarranted.",
|
||||||
"You have taken control of the darkness so quickly.",
|
"But maybe that matters not.",
|
||||||
"Molded them into Dimensions and Points just like one of us.",
|
"It gives me no solace to ponder and look back.",
|
||||||
"What... ARE you?",
|
"As all I can do is reminisce upon every possible action I could have taken.",
|
||||||
|
"But I digress. We should tighten those chains.",
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
singularity1: {
|
firstSingularity: {
|
||||||
id: 3,
|
id: 3,
|
||||||
requirement: () => Currency.singularities.gte(1e4),
|
requirement: () => Currency.singularities.gte(1),
|
||||||
lines: [
|
lines: [
|
||||||
"What was it again...? Antimatter?",
|
"With my knowledge, I never found the need to question.",
|
||||||
"That was the first thing you turned into Dimensions?",
|
"Everything always functioned right as designed.",
|
||||||
|
"And yet, your arrival baffles me.",
|
||||||
|
"Were you always just out of sight?",
|
||||||
|
"Growing, controlling, understanding, ascending?",
|
||||||
|
"You have taken control of the darkness so quickly.",
|
||||||
|
"Molded them into your own design, and now into a singular point...",
|
||||||
|
"It... it does not matter. The end will remain the same.",
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// Note: Shown when unlocking DMD3; requirement is auto-condensing 20 singularities and it happens around ~200 total
|
||||||
|
thirdDMD: {
|
||||||
|
id: 5,
|
||||||
|
lines: [
|
||||||
|
"Your absolute control of Antimatter...",
|
||||||
|
"Your mastery of it, molding it into your own Power...",
|
||||||
"It could not have been an accident.",
|
"It could not have been an accident.",
|
||||||
"How did you... attain the power to control it?",
|
"How did you manage to obtain it?",
|
||||||
"This never happened in all of existence... or did it?",
|
"Fascinating... I was never aware of this.",
|
||||||
"My endless knowledge... is it waning?",
|
"... was I?",
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
// Note: This happens around e10-e11 singularities
|
// Note: This happens around e10-e11 singularities
|
||||||
annihilation: {
|
annihilation: {
|
||||||
id: 4,
|
id: 4,
|
||||||
lines: [
|
lines: [
|
||||||
"Back to square one.",
|
"Back to square one, again.",
|
||||||
"We, the Celestials transcend time and existence.",
|
"Your chains shall bind you tighter, as your end slowly nears.",
|
||||||
"We always know that whatever is lost always comes back eventually.",
|
"While we transcend time and existence itself.",
|
||||||
"Even if we were to cease, we would just come back stronger.",
|
"Even if we may cease, we just come back. Never the exact same as before.",
|
||||||
"The cycle... repeats forever.",
|
"And so... we repeat forever.",
|
||||||
"Do they also understand? Or was it only you as well?",
|
"And you?",
|
||||||
"I feel like I should know the answer...",
|
"...",
|
||||||
]
|
"The answer... eludes me...",
|
||||||
},
|
|
||||||
singularity2: {
|
|
||||||
id: 5,
|
|
||||||
requirement: () => Currency.singularities.gte(1e14),
|
|
||||||
lines: [
|
|
||||||
"Of those who tried to control dimensions...",
|
|
||||||
"Who were they? I cannot seem to remember...",
|
|
||||||
"And how... did they vanish?",
|
|
||||||
"Are they... us? Simply transcending existence?",
|
|
||||||
"Did they surpass us and become something we can't comprehend?",
|
|
||||||
"Are we all imprisoned in this falsity...",
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
// Note: This happens near e18 singularities
|
// Note: This happens near e18 singularities
|
||||||
@ -81,39 +89,39 @@ GameDatabase.celestials.quotes.laitela = {
|
|||||||
id: 6,
|
id: 6,
|
||||||
requirement: () => player.celestials.laitela.difficultyTier >= 4,
|
requirement: () => player.celestials.laitela.difficultyTier >= 4,
|
||||||
lines: [
|
lines: [
|
||||||
"You seem to be having too much fun.",
|
"I do not understand...",
|
||||||
"Just like they did before meeting their... fate.",
|
"Were there others... controlling Dimensions in this way?",
|
||||||
"You freed them of their eternal imprisonment, yes?",
|
"Did they... vanish? How have we not found them?",
|
||||||
"I always regret how harsh I was that day.",
|
"Are they... us? Are we the endpoint?",
|
||||||
"Maybe it doesn't matter.",
|
"Or is their fate... something we cannot understand?",
|
||||||
"But I digress. Let's keep constricting this Reality.",
|
"No, I must be missing something...",
|
||||||
|
"Are you causing gaps within my own memory?",
|
||||||
|
"What... ARE you?",
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
// Note: This about when the player starts on the last row of iM upgrades
|
// Note: Shown when the first row 5 iM upgrade is purchased (~e26 singularities)
|
||||||
singularity3: {
|
finalRowIM: {
|
||||||
id: 7,
|
id: 7,
|
||||||
requirement: () => Currency.singularities.gte(1e26),
|
|
||||||
lines: [
|
lines: [
|
||||||
"Is this a cycle?",
|
"It is all impossible, beyond my comprehension...",
|
||||||
"Will our existence just end and start anew...",
|
"Unless... Is this all just part of the cycle?",
|
||||||
"Just like... the Dimensions I rule?",
|
"Can... you see beyond it all? Is... this why...",
|
||||||
"And if such... what will bring our end?",
|
"I feel... afraid?",
|
||||||
"I knew the answer to all these questions...",
|
"I feel... my powers, my memories, being erased...",
|
||||||
"But I forgot all of them...",
|
"Just like... when my role was almost usurped...",
|
||||||
"Your power... is it... erasing mine...?",
|
"And yet... I am unable to bring myself to do anything.",
|
||||||
|
"Because this... was... my mistake...",
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
// Note: This is around when all infinite milestones hit increased scaling
|
// Note: This is around when all infinite milestones hit increased scaling
|
||||||
singularity4: {
|
increasedMilestoneScaling: {
|
||||||
id: 8,
|
id: 8,
|
||||||
requirement: () => Currency.singularities.gte(1e40),
|
requirement: () => Currency.singularities.gte(1e40),
|
||||||
lines: [
|
lines: [
|
||||||
"I don't know for how much... longer I can hold.",
|
"I know not for how much... longer I can hold...",
|
||||||
"There is... next to nothing left...",
|
"You are attaining... total mastery... over the dark...",
|
||||||
"You have attained... complete and total mastery... over the dark...",
|
"While I can barely... hold onto my name...",
|
||||||
"While I can barely... hold onto my name anymore...",
|
"What... can I... even do?",
|
||||||
"What am I meant to be doing anyways?",
|
|
||||||
"Did... my mistakes cause all of this?",
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
fullDestabilize: {
|
fullDestabilize: {
|
||||||
@ -121,10 +129,10 @@ GameDatabase.celestials.quotes.laitela = {
|
|||||||
requirement: () => player.celestials.laitela.difficultyTier >= 8,
|
requirement: () => player.celestials.laitela.difficultyTier >= 8,
|
||||||
lines: [
|
lines: [
|
||||||
"I feel... like I had something to say...",
|
"I feel... like I had something to say...",
|
||||||
"Who am I? I am not sure...",
|
"I am not sure...",
|
||||||
"I cannot... hold onto the darkness any longer...",
|
"I cannot... hold onto the darkness any longer...",
|
||||||
"I... have nothing left...",
|
"I do not even... have anything left...",
|
||||||
"Something about... destabilizing... collapsing...",
|
"Something about... destruction...",
|
||||||
"The end...",
|
"The end...",
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -80,12 +80,12 @@ GameDatabase.challenges.eternity = [
|
|||||||
description: () => {
|
description: () => {
|
||||||
if (Enslaved.isRunning) {
|
if (Enslaved.isRunning) {
|
||||||
return Notations.current === Notation.shi
|
return Notations.current === Notation.shi
|
||||||
? "yo̶u̶ ̶c̶a̶n̶'̶t̶ ̶g̶a̶i̶n̶ ̶A̶n̶t̶i̶m̶a̶t̶t̶e̶r̶ ̶G̶a̶l̶a̶x̶i̶e̶s̶ ̶n̶o̶r̶m̶a̶l̶l̶y̶,̶ ̶b̶u̶t̶ ̶the " +
|
? "yo̶u̶ ̶c̶a̶n̶not̶ ̶g̶a̶i̶n̶ ̶A̶n̶t̶i̶m̶a̶t̶t̶e̶r̶ ̶G̶a̶l̶a̶x̶i̶e̶s̶ ̶n̶o̶r̶m̶a̶l̶l̶y̶. ̶ ̶ ̶The " +
|
||||||
" cost of upgrading your max Replicanti Galaxies is massively reduced."
|
" cost of upgrading your max Replicanti Galaxies is massively reduced."
|
||||||
: "you c㏰'퐚 gai鸭 Antmatterﻪﶓa⁍axie㮾랜䂇rma㦂l the cost of upgrading your max Replicanti" +
|
: "you c㏰'퐚 gai鸭 Antmatterﻪﶓa⁍axie㮾랜䂇rma㦂l the cost of upgrading your max Replicanti" +
|
||||||
" Galaxies is massively reduced";
|
" Galaxies is massively reduced";
|
||||||
}
|
}
|
||||||
return "you can't gain Antimatter Galaxies normally, but the cost of upgrading your max Replicanti" +
|
return "you cannot gain Antimatter Galaxies normally. The cost of upgrading your max Replicanti" +
|
||||||
" Galaxies is massively reduced.";
|
" Galaxies is massively reduced.";
|
||||||
},
|
},
|
||||||
goal: DC.E850,
|
goal: DC.E850,
|
||||||
@ -103,7 +103,7 @@ GameDatabase.challenges.eternity = [
|
|||||||
{
|
{
|
||||||
id: 7,
|
id: 7,
|
||||||
description:
|
description:
|
||||||
"1st Time Dimension produces 8th Infinity Dimensions, and 1st Infinity Dimension produces " +
|
"1st Time Dimensions produce 8th Infinity Dimensions and 1st Infinity Dimensions produce " +
|
||||||
"7th Antimatter Dimensions. Tickspeed also directly applies to Infinity and Time Dimensions.",
|
"7th Antimatter Dimensions. Tickspeed also directly applies to Infinity and Time Dimensions.",
|
||||||
goal: DC.E2000,
|
goal: DC.E2000,
|
||||||
pelleGoal: DC.E2700,
|
pelleGoal: DC.E2700,
|
||||||
@ -133,7 +133,7 @@ GameDatabase.challenges.eternity = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 9,
|
id: 9,
|
||||||
description: () => `you can't buy Tickspeed upgrades. Infinity Power instead multiplies
|
description: () => `you cannot buy Tickspeed upgrades. Infinity Power instead multiplies
|
||||||
Time Dimensions with greatly reduced effect. ${specialInfinityGlyphDisabledEffectText()}`,
|
Time Dimensions with greatly reduced effect. ${specialInfinityGlyphDisabledEffectText()}`,
|
||||||
goal: DC.E1750,
|
goal: DC.E1750,
|
||||||
pelleGoal: DC.E2900,
|
pelleGoal: DC.E2900,
|
||||||
@ -168,7 +168,7 @@ GameDatabase.challenges.eternity = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 11,
|
id: 11,
|
||||||
description: () => `all dimension multipliers and powers are disabled except for the multipliers from
|
description: () => `all Dimension multipliers and powers are disabled except for the multipliers from
|
||||||
Infinity Power and Dimension Boosts (to Antimatter Dimensions). ${specialInfinityGlyphDisabledEffectText()}`,
|
Infinity Power and Dimension Boosts (to Antimatter Dimensions). ${specialInfinityGlyphDisabledEffectText()}`,
|
||||||
goal: DC.E500,
|
goal: DC.E500,
|
||||||
pelleGoal: DC.E11200,
|
pelleGoal: DC.E11200,
|
||||||
|
@ -4,8 +4,8 @@ import { GameDatabase } from "../game-database";
|
|||||||
GameDatabase.challenges.infinity = [
|
GameDatabase.challenges.infinity = [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
description: `all Normal Challenges, with the exception of
|
description: `all Normal Challenge restrictions are active at once, with the exception of the
|
||||||
Tickspeed (C9) and Big Crunch (C12) Challenges, are active at the same time.`,
|
Tickspeed (C9) and Big Crunch (C12) Challenges.`,
|
||||||
goal: DC.E650,
|
goal: DC.E650,
|
||||||
isQuickResettable: true,
|
isQuickResettable: true,
|
||||||
reward: {
|
reward: {
|
||||||
@ -17,7 +17,7 @@ GameDatabase.challenges.infinity = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
description: () => `automatically Dimensional Sacrifice every ${formatInt(400)} milliseconds once you have
|
description: () => `Dimensional Sacrifice happens automatically every ${formatInt(400)} milliseconds once you have
|
||||||
an 8th Antimatter Dimension.`,
|
an 8th Antimatter Dimension.`,
|
||||||
goal: DC.E10500,
|
goal: DC.E10500,
|
||||||
isQuickResettable: false,
|
isQuickResettable: false,
|
||||||
@ -50,7 +50,7 @@ GameDatabase.challenges.infinity = [
|
|||||||
{
|
{
|
||||||
id: 4,
|
id: 4,
|
||||||
description: () =>
|
description: () =>
|
||||||
`only the latest bought Antimatter Dimension's production is normal, all other Antimatter Dimensions
|
`only the latest bought Antimatter Dimension's production is normal. All other Antimatter Dimensions
|
||||||
produce less (${formatPow(0.25, 2, 2)}).`,
|
produce less (${formatPow(0.25, 2, 2)}).`,
|
||||||
goal: DC.E13000,
|
goal: DC.E13000,
|
||||||
isQuickResettable: true,
|
isQuickResettable: true,
|
||||||
@ -64,8 +64,8 @@ GameDatabase.challenges.infinity = [
|
|||||||
{
|
{
|
||||||
id: 5,
|
id: 5,
|
||||||
description:
|
description:
|
||||||
`buying Antimatter Dimensions 1-4 causes all smaller Antimatter Dimension costs to increase,
|
`buying Antimatter Dimensions 1-4 causes all smaller Antimatter Dimension costs to increase.
|
||||||
and buying Antimatter Dimensions 5-8 causes all larger Antimatter Dimension costs to increase.`,
|
Buying Antimatter Dimensions 5-8 causes all larger Antimatter Dimension costs to increase.`,
|
||||||
goal: DC.E16500,
|
goal: DC.E16500,
|
||||||
isQuickResettable: true,
|
isQuickResettable: true,
|
||||||
reward: {
|
reward: {
|
||||||
@ -79,8 +79,8 @@ GameDatabase.challenges.infinity = [
|
|||||||
{
|
{
|
||||||
id: 6,
|
id: 6,
|
||||||
description: () =>
|
description: () =>
|
||||||
`once you have at least ${formatInt(1)} 2nd Antimatter Dimension, exponentially rising matter
|
`exponentially rising matter divides the multiplier on all of your Antimatter Dimensions
|
||||||
divides the multiplier on all of your Antimatter Dimensions.`,
|
once you have at least ${formatInt(1)} 2nd Antimatter Dimension.`,
|
||||||
goal: DC.D2E22222,
|
goal: DC.D2E22222,
|
||||||
isQuickResettable: true,
|
isQuickResettable: true,
|
||||||
effect: () => Currency.matter.value.clampMin(1),
|
effect: () => Currency.matter.value.clampMin(1),
|
||||||
@ -94,14 +94,24 @@ GameDatabase.challenges.infinity = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 7,
|
id: 7,
|
||||||
description: () =>
|
description: () => {
|
||||||
`you can't get Antimatter Galaxies, but Dimension Boost multiplier
|
// Copied from DimBoost.power; this is the base amount before any multipliers. Post-eternity this isn't
|
||||||
${formatX(2.5, 1, 1)} ➜ ${formatX(10)}`,
|
// necessarily 2.5x by the time the player sees this challenge; it's probably most accurate to say what it
|
||||||
|
// currently is, and this phrasing avoids 10x ➜ 10x with the old description.
|
||||||
|
const mult = Effects.max(
|
||||||
|
2,
|
||||||
|
InfinityUpgrade.dimboostMult,
|
||||||
|
InfinityChallenge(7).reward,
|
||||||
|
TimeStudy(81)
|
||||||
|
);
|
||||||
|
return `you cannot buy Antimatter Galaxies. Base Dimension Boost multiplier is increased to a maximum
|
||||||
|
of ${formatX(10)}. (Current base multiplier: ${formatX(mult)})`;
|
||||||
|
},
|
||||||
goal: DC.E10000,
|
goal: DC.E10000,
|
||||||
isQuickResettable: false,
|
isQuickResettable: false,
|
||||||
effect: 10,
|
effect: 10,
|
||||||
reward: {
|
reward: {
|
||||||
description: () => `Dimension Boost multiplier ${formatX(2.5, 1, 1)} ➜ ${formatX(4)}`,
|
description: () => `Dimension Boost multiplier is increased to a minimum of ${formatX(4)}`,
|
||||||
effect: 4
|
effect: 4
|
||||||
},
|
},
|
||||||
unlockAM: DC.E23000,
|
unlockAM: DC.E23000,
|
||||||
@ -109,8 +119,8 @@ GameDatabase.challenges.infinity = [
|
|||||||
{
|
{
|
||||||
id: 8,
|
id: 8,
|
||||||
description: () =>
|
description: () =>
|
||||||
`your production is at ${formatPercents(1)} after
|
`your production rapidly and continually drops down over time. Purchasing an Antimatter Dimension or Tickspeed
|
||||||
purchasing anything, after that it rapidly drops down.`,
|
upgrade sets production back to ${formatPercents(1)} before it starts dropping again.`,
|
||||||
goal: DC.E27000,
|
goal: DC.E27000,
|
||||||
isQuickResettable: true,
|
isQuickResettable: true,
|
||||||
effect: () => DC.D0_8446303389034288.pow(
|
effect: () => DC.D0_8446303389034288.pow(
|
||||||
|
@ -26,8 +26,8 @@ GameDatabase.challenges.normal = [
|
|||||||
legacyId: 2,
|
legacyId: 2,
|
||||||
isQuickResettable: false,
|
isQuickResettable: false,
|
||||||
description:
|
description:
|
||||||
() => "buying Antimatter Dimensions or Tickspeed upgrades halts your production, " +
|
() => "buying Antimatter Dimensions or Tickspeed upgrades halts production of all Antimatter Dimensions. " +
|
||||||
`gradually coming back over ${formatInt(3)} minutes.`,
|
`Production gradually returns to normal over ${formatInt(3)} minutes.`,
|
||||||
name: "2nd Antimatter Dimension Autobuyer",
|
name: "2nd Antimatter Dimension Autobuyer",
|
||||||
reward: "Upgradeable 2nd Antimatter Dimension Autobuyer",
|
reward: "Upgradeable 2nd Antimatter Dimension Autobuyer",
|
||||||
lockedAt: DC.D0,
|
lockedAt: DC.D0,
|
||||||
@ -38,8 +38,8 @@ GameDatabase.challenges.normal = [
|
|||||||
legacyId: 3,
|
legacyId: 3,
|
||||||
isQuickResettable: false,
|
isQuickResettable: false,
|
||||||
description:
|
description:
|
||||||
`the 1st Antimatter Dimension is heavily weakened, but gets an exponentially increasing
|
`the 1st Antimatter Dimension is heavily weakened, but gets an uncapped exponentially increasing multiplier.
|
||||||
bonus that resets after Dimension Boosts and Antimatter Galaxies.`,
|
This multiplier resets after Dimension Boosts and Antimatter Galaxies.`,
|
||||||
name: "3rd Antimatter Dimension",
|
name: "3rd Antimatter Dimension",
|
||||||
reward: "Upgradeable 3rd Antimatter Dimension Autobuyer",
|
reward: "Upgradeable 3rd Antimatter Dimension Autobuyer",
|
||||||
lockedAt: DC.D0,
|
lockedAt: DC.D0,
|
||||||
@ -71,8 +71,8 @@ GameDatabase.challenges.normal = [
|
|||||||
id: 6,
|
id: 6,
|
||||||
legacyId: 10,
|
legacyId: 10,
|
||||||
isQuickResettable: false,
|
isQuickResettable: false,
|
||||||
description: () => `each Antimatter Dimension costs the dimension ${formatInt(2)} dimensions below it, ` +
|
description: () => `upgrading each Antimatter Dimension costs the Antimatter Dimension ${formatInt(2)} tiers ` +
|
||||||
"instead of antimatter. Antimatter Dimension prices are modified.",
|
"below it instead of antimatter. Antimatter Dimension prices are modified.",
|
||||||
name: "6th Antimatter Dimension Autobuyer",
|
name: "6th Antimatter Dimension Autobuyer",
|
||||||
reward: "Upgradeable 6th Antimatter Dimension Autobuyer",
|
reward: "Upgradeable 6th Antimatter Dimension Autobuyer",
|
||||||
lockedAt: DC.D0,
|
lockedAt: DC.D0,
|
||||||
@ -83,8 +83,8 @@ GameDatabase.challenges.normal = [
|
|||||||
legacyId: 9,
|
legacyId: 9,
|
||||||
isQuickResettable: false,
|
isQuickResettable: false,
|
||||||
description: () =>
|
description: () =>
|
||||||
`the multiplier from buying ${formatInt(10)} Antimatter Dimensions is reduced to ${formatX(1)}, but is increased
|
`the multiplier from buying ${formatInt(10)} Antimatter Dimensions is reduced to ${formatX(1)}. This increases by
|
||||||
by ${formatX(0.2, 1, 1)} per Dimension Boost, up to a maximum of ${formatX(2)}.`,
|
${formatX(0.2, 1, 1)} per Dimension Boost, to a maximum of ${formatX(2)}, and is unaffected by any upgrades.`,
|
||||||
name: "7th Antimatter Dimension Autobuyer",
|
name: "7th Antimatter Dimension Autobuyer",
|
||||||
reward: "Upgradeable 7th Antimatter Dimension Autobuyer",
|
reward: "Upgradeable 7th Antimatter Dimension Autobuyer",
|
||||||
lockedAt: DC.D0,
|
lockedAt: DC.D0,
|
||||||
@ -94,8 +94,8 @@ GameDatabase.challenges.normal = [
|
|||||||
id: 8,
|
id: 8,
|
||||||
legacyId: 11,
|
legacyId: 11,
|
||||||
isQuickResettable: false,
|
isQuickResettable: false,
|
||||||
description: "Dimension Boosts provide no boost and Antimatter Galaxies cannot be bought, but " +
|
description: `Dimension Boosts provide no multiplier and Antimatter Galaxies cannot be bought. Dimensional
|
||||||
"Dimensional Sacrifice is significantly stronger and resets antimatter and all Antimatter Dimensions.",
|
Sacrifice resets antimatter and all Antimatter Dimensions, but also gives a significantly stronger multiplier.`,
|
||||||
name: "8th Antimatter Dimension Autobuyer",
|
name: "8th Antimatter Dimension Autobuyer",
|
||||||
reward: "Upgradeable 8th Antimatter Dimension Autobuyer",
|
reward: "Upgradeable 8th Antimatter Dimension Autobuyer",
|
||||||
lockedAt: DC.D0,
|
lockedAt: DC.D0,
|
||||||
@ -105,7 +105,7 @@ GameDatabase.challenges.normal = [
|
|||||||
id: 9,
|
id: 9,
|
||||||
legacyId: 5,
|
legacyId: 5,
|
||||||
isQuickResettable: true,
|
isQuickResettable: true,
|
||||||
description: () => `whenever you buy Tickspeed upgrades, or ${formatInt(10)} of an Antimatter Dimension, ` +
|
description: () => `whenever you buy Tickspeed upgrades or ${formatInt(10)} of an Antimatter Dimension, ` +
|
||||||
"everything else of equal cost will increase to its next cost step.",
|
"everything else of equal cost will increase to its next cost step.",
|
||||||
name: "Tickspeed Autobuyer",
|
name: "Tickspeed Autobuyer",
|
||||||
reward: "Upgradeable Tickspeed Autobuyer",
|
reward: "Upgradeable Tickspeed Autobuyer",
|
||||||
@ -116,8 +116,8 @@ GameDatabase.challenges.normal = [
|
|||||||
id: 10,
|
id: 10,
|
||||||
legacyId: 4,
|
legacyId: 4,
|
||||||
isQuickResettable: false,
|
isQuickResettable: false,
|
||||||
description: () => (`there are only ${formatInt(6)} Antimatter Dimensions, with Dimension Boost ` +
|
description: () => `there are only ${formatInt(6)} Antimatter Dimensions. Dimension Boost ` +
|
||||||
"and Antimatter Galaxy costs modified."),
|
"and Antimatter Galaxy costs are modified.",
|
||||||
name: "Automated Dimension Boosts",
|
name: "Automated Dimension Boosts",
|
||||||
reward: "Dimension Boosts Autobuyer",
|
reward: "Dimension Boosts Autobuyer",
|
||||||
lockedAt: DC.D16,
|
lockedAt: DC.D16,
|
||||||
@ -127,8 +127,8 @@ GameDatabase.challenges.normal = [
|
|||||||
id: 11,
|
id: 11,
|
||||||
legacyId: 12,
|
legacyId: 12,
|
||||||
isQuickResettable: true,
|
isQuickResettable: true,
|
||||||
description: () => (`there's normal matter which rises once you have at least ${formatInt(1)} 2nd Antimatter ` +
|
description: () => `there is normal matter which rises once you have at least ${formatInt(1)} 2nd Antimatter ` +
|
||||||
"Dimension. If it exceeds your antimatter, it will Dimension Boost without giving the bonus."),
|
"Dimension. If it exceeds your antimatter, it will Dimension Boost without giving the bonus.",
|
||||||
name: "Automated Antimatter Galaxies",
|
name: "Automated Antimatter Galaxies",
|
||||||
reward: "Antimatter Galaxies Autobuyer",
|
reward: "Antimatter Galaxies Autobuyer",
|
||||||
lockedAt: DC.D16,
|
lockedAt: DC.D16,
|
||||||
@ -138,9 +138,9 @@ GameDatabase.challenges.normal = [
|
|||||||
id: 12,
|
id: 12,
|
||||||
legacyId: 7,
|
legacyId: 7,
|
||||||
isQuickResettable: false,
|
isQuickResettable: false,
|
||||||
description: () => (`each Antimatter Dimension produces the dimension ${formatInt(2)} dimensions below it (1st ` +
|
description: () => `each Antimatter Dimension produces the Dimension ${formatInt(2)} tiers below it
|
||||||
"Antimatter Dimensions still produce antimatter). The 2nd, 4th, and 6th Antimatter Dimensions " +
|
instead of ${formatInt(1)}. The 1st Dimension still produces antimatter, and the 2nd, 4th, and 6th
|
||||||
"are made stronger to compensate."),
|
Dimensions are made stronger to compensate.`,
|
||||||
name: "Automated Big Crunches",
|
name: "Automated Big Crunches",
|
||||||
reward: "Big Crunches Autobuyer",
|
reward: "Big Crunches Autobuyer",
|
||||||
lockedAt: DC.D16,
|
lockedAt: DC.D16,
|
||||||
|
@ -7,14 +7,15 @@ GameDatabase.credits = {
|
|||||||
2: "Technical Architect",
|
2: "Technical Architect",
|
||||||
3: "Lead Developer",
|
3: "Lead Developer",
|
||||||
4: "Android Developer",
|
4: "Android Developer",
|
||||||
5: "Library Developer",
|
5: "Steam Developer",
|
||||||
6: "Developer",
|
6: "Library Developer",
|
||||||
7: "Lead Design Consultant",
|
7: "Developer",
|
||||||
8: "Design Consultant",
|
8: "Lead Design Consultant",
|
||||||
9: "Modal Maker, Lady Taker, Pie Baker",
|
9: "Design Consultant",
|
||||||
10: "Lurker Tester",
|
10: "Modal Maker, Lady Taker, Pie Baker",
|
||||||
11: "Web Tester",
|
11: "Lurker Tester",
|
||||||
12: "Android Tester"
|
12: "Web Tester",
|
||||||
|
13: "Android Tester"
|
||||||
},
|
},
|
||||||
|
|
||||||
// Each person must have a name and at least one role (the index of the desired role in roles). They can also have a
|
// Each person must have a name and at least one role (the index of the desired role in roles). They can also have a
|
||||||
@ -40,330 +41,338 @@ GameDatabase.credits = {
|
|||||||
roles: 3
|
roles: 3
|
||||||
}, {
|
}, {
|
||||||
name: "WaitingIdly",
|
name: "WaitingIdly",
|
||||||
roles: [3, 6, 8, 11, 12]
|
roles: [3, 7, 9, 12, 13]
|
||||||
}, {
|
}, {
|
||||||
name: "kajfik",
|
name: "kajfik",
|
||||||
name2: "Jakub Kajfosz",
|
name2: "Jakub Kajfosz",
|
||||||
roles: 4
|
roles: 4
|
||||||
|
}, {
|
||||||
|
name: "Makopaz",
|
||||||
|
name2: "Zack Stein",
|
||||||
|
roles: 5
|
||||||
}, {
|
}, {
|
||||||
name: "Patashu",
|
name: "Patashu",
|
||||||
roles: [5, 6, 11]
|
roles: [6, 7, 12]
|
||||||
}, {
|
}, {
|
||||||
name: "Dan",
|
name: "Dan",
|
||||||
roles: [6, 11]
|
roles: [7, 12]
|
||||||
}, {
|
}, {
|
||||||
name: "earth",
|
name: "earth",
|
||||||
name2: "Jace Royer",
|
name2: "Jace Royer",
|
||||||
roles: [6, 9, 11, 12]
|
roles: [7, 10, 12, 13]
|
||||||
}, {
|
}, {
|
||||||
name: "Hira",
|
name: "Hira",
|
||||||
roles: [6, 11, 12]
|
roles: [7, 12, 13]
|
||||||
}, {
|
}, {
|
||||||
name: "IkerStream",
|
name: "IkerStream",
|
||||||
name2: "Iker de Aguirre",
|
name2: "Iker de Aguirre",
|
||||||
roles: [6, 11]
|
roles: [7, 12]
|
||||||
}, {
|
}, {
|
||||||
name: "L4R5",
|
name: "L4R5",
|
||||||
name2: "Lars Wolf",
|
name2: "Lars Wolf",
|
||||||
roles: [6, 11, 12]
|
roles: [7, 12, 13]
|
||||||
}, {
|
}, {
|
||||||
name: "Pichusuperlover",
|
name: "Pichusuperlover",
|
||||||
roles: [6, 8, 11]
|
roles: [7, 9, 12]
|
||||||
}, {
|
}, {
|
||||||
name: "realrapidjazz",
|
name: "realrapidjazz",
|
||||||
roles: [6, 7]
|
roles: [7, 8]
|
||||||
}, {
|
}, {
|
||||||
name: "Scarlet",
|
name: "Scarlet",
|
||||||
roles: [6, 11, 12]
|
roles: [7, 12, 13]
|
||||||
}, {
|
}, {
|
||||||
name: "slabdrill",
|
name: "slabdrill",
|
||||||
roles: 6
|
roles: 7
|
||||||
}, {
|
}, {
|
||||||
name: "Acamaeda",
|
name: "Acamaeda",
|
||||||
roles: [8, 11]
|
roles: [9, 12]
|
||||||
}, {
|
}, {
|
||||||
name: "Dravitar",
|
name: "Dravitar",
|
||||||
name2: "Alex Henderson",
|
name2: "Alex Henderson",
|
||||||
roles: 10
|
roles: 11
|
||||||
}, {
|
}, {
|
||||||
name: "Aesis",
|
name: "Aesis",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "AFYINEE",
|
name: "AFYINEE",
|
||||||
name2: "Gabriel HADDAG",
|
name2: "Gabriel HADDAG",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Alexitato",
|
name: "Alexitato",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Anno",
|
name: "Anno",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Archa",
|
name: "Archa",
|
||||||
name2: "Myresa",
|
name2: "Myresa",
|
||||||
roles: [11, 12]
|
roles: [12, 13]
|
||||||
}, {
|
}, {
|
||||||
name: "ArrowBounce",
|
name: "ArrowBounce",
|
||||||
name2: "Timothy Su",
|
name2: "Timothy Su",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Birb",
|
name: "Birb",
|
||||||
name2: "Kelsey Black",
|
name2: "Kelsey Black",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Boo",
|
name: "Boo",
|
||||||
name2: "Jean-Christophe Bourgault",
|
name2: "Jean-Christophe Bourgault",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "CaptainGalaxy",
|
name: "CaptainGalaxy",
|
||||||
name2: "Ovidijus Točelis",
|
name2: "Ovidijus Točelis",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "ChaoticHans",
|
name: "ChaoticHans",
|
||||||
roles: [11, 12]
|
roles: [12, 13]
|
||||||
}, {
|
}, {
|
||||||
name: "cubic frog",
|
name: "cubic frog",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "dankesehr",
|
name: "dankesehr",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Davixx",
|
name: "Davixx",
|
||||||
name2: "Davide Fedele",
|
name2: "Davide Fedele",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Empireus",
|
name: "Empireus",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "GirixK",
|
name: "GirixK",
|
||||||
name2: "Nikola Jelinčić",
|
name2: "Nikola Jelinčić",
|
||||||
roles: [11, 12]
|
roles: [12, 13]
|
||||||
}, {
|
}, {
|
||||||
name: "GoldenTritium",
|
name: "GoldenTritium",
|
||||||
roles: [11, 12]
|
roles: [12, 13]
|
||||||
}, {
|
}, {
|
||||||
name: "Kael",
|
name: "Kael",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Lynn",
|
name: "Lynn",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Merp",
|
name: "Merp",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "philipebreaker",
|
name: "philipebreaker",
|
||||||
name2: "Philipe",
|
name2: "Philipe",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Phillip Marshall",
|
name: "Phillip Marshall",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Phoenix",
|
name: "Phoenix",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Reda Kotob",
|
name: "Reda Kotob",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Saturnus",
|
name: "Saturnus",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "SereKabii",
|
name: "SereKabii",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Sheer",
|
name: "Sheer",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "sirusi",
|
name: "sirusi",
|
||||||
name2: "Vinícius Oliveira Martins",
|
name2: "Vinícius Oliveira Martins",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Spanosa",
|
name: "Spanosa",
|
||||||
name2: "Jared K",
|
name2: "Jared K",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Sparticle999",
|
name: "Sparticle999",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "SpicyCrusader13",
|
name: "SpicyCrusader13",
|
||||||
roles: [11, 12]
|
roles: [12, 13]
|
||||||
}, {
|
}, {
|
||||||
name: "Storm",
|
name: "Storm",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "SzyszakS",
|
name: "SzyszakS",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Tacitus",
|
name: "Tacitus",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Typh",
|
name: "Typh",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Vnge",
|
name: "Vnge",
|
||||||
name2: "Ben Parrish",
|
name2: "Ben Parrish",
|
||||||
roles: [11, 12]
|
roles: [12, 13]
|
||||||
}, {
|
}, {
|
||||||
name: "Xemadus",
|
name: "Xemadus",
|
||||||
name2: "Jonathan Gibson",
|
name2: "Jonathan Gibson",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Young Woo Joo",
|
name: "Young Woo Joo",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "Zipi",
|
name: "Zipi",
|
||||||
roles: 11
|
roles: 12
|
||||||
}, {
|
}, {
|
||||||
name: "about:blank",
|
name: "about:blank",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "ÆiOuF",
|
name: "ÆiOuF",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Anjinho01",
|
name: "Anjinho01",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Anthios",
|
name: "Anthios",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Auti",
|
name: "Auti",
|
||||||
name2: "Alice Tolle",
|
name2: "Alice Tolle",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Buck",
|
name: "Buck",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Barrin84",
|
name: "Barrin84",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "ChizuX",
|
name: "ChizuX",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Circle",
|
name: "Circle",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Crinkly Weasel",
|
name: "Crinkly Weasel",
|
||||||
name2: "Aaryan Sarawgi",
|
name2: "Aaryan Sarawgi",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "DarthDie",
|
name: "DarthDie",
|
||||||
name2: "Briar Bowser",
|
name2: "Briar Bowser",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Epsilon",
|
name: "Epsilon",
|
||||||
name2: "Coolguystorm",
|
name2: "Coolguystorm",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Firecracker",
|
name: "Firecracker",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Gaunter",
|
name: "Gaunter",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "HarrisL2",
|
name: "HarrisL2",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Hellbach",
|
name: "Hellbach",
|
||||||
name2: "Asher Günther",
|
name2: "Asher Günther",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "hen-ben",
|
name: "hen-ben",
|
||||||
name2: "Henry Ellenberg",
|
name2: "Henry Ellenberg",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "ImpossibleSalsa",
|
name: "ImpossibleSalsa",
|
||||||
roles: 12
|
roles: 13
|
||||||
|
}, {
|
||||||
|
name: "JayM#1872",
|
||||||
|
name2: "Jay McGee",
|
||||||
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Johanniklas",
|
name: "Johanniklas",
|
||||||
name2: "Jan-Niklas Petersen",
|
name2: "Jan-Niklas Petersen",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "kaislash",
|
name: "kaislash",
|
||||||
name2: "Lily",
|
name2: "Lily",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Kirku",
|
name: "Kirku",
|
||||||
name2: "Fabian Makowski",
|
name2: "Fabian Makowski",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Kirin",
|
name: "Kirin",
|
||||||
name2: "Arthur",
|
name2: "Arthur",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Mirai",
|
name: "Mirai",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Monoma",
|
name: "Monoma",
|
||||||
name2: "ARoman Ruiz",
|
name2: "ARoman Ruiz",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Nani",
|
name: "Nani",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "netweak",
|
name: "netweak",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "NotBrewst",
|
name: "NotBrewst",
|
||||||
name2: "Luc Leblanc",
|
name2: "Luc Leblanc",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "opdollar",
|
name: "opdollar",
|
||||||
name2: "Zane Coole",
|
name2: "Zane Coole",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Pavlxiiv",
|
name: "Pavlxiiv",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Porygon-Z",
|
name: "Porygon-Z",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "PotatoTIAB",
|
name: "PotatoTIAB",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Razor",
|
name: "Razor",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Razvan Cercel",
|
name: "Razvan Cercel",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "ReacTivity",
|
name: "ReacTivity",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Rukimix",
|
name: "Rukimix",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Skunky",
|
name: "Skunky",
|
||||||
name2: "Lukas",
|
name2: "Lukas",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Socks",
|
name: "Socks",
|
||||||
name2: "Hannah Pocks",
|
name2: "Hannah Pocks",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Sweets the Alien",
|
name: "Sweets the Alien",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Taylor Reeves",
|
name: "Taylor Reeves",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Tim Wong",
|
name: "Tim Wong",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "tragedt",
|
name: "tragedt",
|
||||||
name2: "Ethan Manninen",
|
name2: "Ethan Manninen",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "Valentine Clarissa Alanis Star Z",
|
name: "Valentine Clarissa Alanis Star Z",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "vanadium_void",
|
name: "vanadium_void",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "X3N0_32",
|
name: "X3N0_32",
|
||||||
roles: 12
|
roles: 13
|
||||||
}, {
|
}, {
|
||||||
name: "ZylaKat",
|
name: "ZylaKat",
|
||||||
name2: "Katherine Goforth-Harbin",
|
name2: "Katherine Goforth-Harbin",
|
||||||
roles: 12
|
roles: 13
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
@ -24,7 +24,7 @@ function rebuyable(config) {
|
|||||||
GameDatabase.eternity.dilation = {
|
GameDatabase.eternity.dilation = {
|
||||||
dtGain: rebuyable({
|
dtGain: rebuyable({
|
||||||
id: 1,
|
id: 1,
|
||||||
initialCost: 1e5,
|
initialCost: 1e4,
|
||||||
increment: 10,
|
increment: 10,
|
||||||
description: () =>
|
description: () =>
|
||||||
((SingularityMilestone.dilatedTimeFromSingularities.canBeApplied || Achievement(187).canBeApplied)
|
((SingularityMilestone.dilatedTimeFromSingularities.canBeApplied || Achievement(187).canBeApplied)
|
||||||
|
@ -2290,7 +2290,7 @@ GameDatabase.news = [
|
|||||||
{
|
{
|
||||||
id: "a355",
|
id: "a355",
|
||||||
text:
|
text:
|
||||||
`<div style='background: url("../images/unsmith.png"); width: 2.3rem; height: 2.5rem; margin-top: -0.1rem'></div>`
|
`<div style='background: url("./images/unsmith.png"); width: 2.3rem; height: 2.5rem; margin-top: -0.1rem'></div>`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "a356",
|
id: "a356",
|
||||||
|
@ -13,8 +13,9 @@ GameDatabase.progressStages = [
|
|||||||
* @property {function: @return Boolean} hasReached Checking function for whether this stage has been
|
* @property {function: @return Boolean} hasReached Checking function for whether this stage has been
|
||||||
* reached; all checks are run in descending order, starting at the end of the list and moving upward. The
|
* reached; all checks are run in descending order, starting at the end of the list and moving upward. The
|
||||||
* last one checked (first entry) always returns true as a catch-all condition
|
* last one checked (first entry) always returns true as a catch-all condition
|
||||||
* @property {String} suggestedResource A resource or multiple resources which may be
|
* @property {String | function: @return Number} suggestedResource A resource or multiple resources which may be
|
||||||
* useful for the player to aim for at this stage
|
* useful for the player to aim for at this stage. It's okay to reference the player object in this prop because
|
||||||
|
* it's only ever used in the catchup modal and not in the cloud save conflict checker.
|
||||||
* @property {function: @return Number} subProgressValue A value between 0 and 1 corresponding approximately
|
* @property {function: @return Number} subProgressValue A value between 0 and 1 corresponding approximately
|
||||||
* to the progress within a stage. Values near 0 correspond to near the end of the previous stage and values
|
* to the progress within a stage. Values near 0 correspond to near the end of the previous stage and values
|
||||||
* near 1 correspond to near the start of the next stage; however in-between values are not an indicator of
|
* near 1 correspond to near the start of the next stage; however in-between values are not an indicator of
|
||||||
@ -23,7 +24,7 @@ GameDatabase.progressStages = [
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
id: PROGRESS_STAGE.PRE_INFINITY,
|
id: PROGRESS_STAGE.PRE_INFINITY,
|
||||||
name: "Before Infinity",
|
name: "Antimatter Production",
|
||||||
hasReached: () => true,
|
hasReached: () => true,
|
||||||
suggestedResource: "Antimatter",
|
suggestedResource: "Antimatter",
|
||||||
// Galaxies are worth 1/3 each, boosts break ties within galaxies, and antimatter breaks ties within boosts
|
// Galaxies are worth 1/3 each, boosts break ties within galaxies, and antimatter breaks ties within boosts
|
||||||
@ -57,7 +58,7 @@ GameDatabase.progressStages = [
|
|||||||
id: PROGRESS_STAGE.EARLY_ETERNITY,
|
id: PROGRESS_STAGE.EARLY_ETERNITY,
|
||||||
name: "Eternity",
|
name: "Eternity",
|
||||||
hasReached: save => new Decimal(save.eternities).gt(0),
|
hasReached: save => new Decimal(save.eternities).gt(0),
|
||||||
suggestedResource: "Eternity Points",
|
suggestedResource: "Eternity Points and Eternity count",
|
||||||
subProgressValue: save => Math.sqrt(new Decimal(save.eternityPoints).pLog10() / 18),
|
subProgressValue: save => Math.sqrt(new Decimal(save.eternityPoints).pLog10() / 18),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -80,10 +81,13 @@ GameDatabase.progressStages = [
|
|||||||
id: PROGRESS_STAGE.LATE_ETERNITY,
|
id: PROGRESS_STAGE.LATE_ETERNITY,
|
||||||
name: "Late Eternity",
|
name: "Late Eternity",
|
||||||
hasReached: save => new Decimal(save.dilation.dilatedTime).gt(1e15),
|
hasReached: save => new Decimal(save.dilation.dilatedTime).gt(1e15),
|
||||||
suggestedResource: "Eternity Points and Dilated Time",
|
suggestedResource: () => (new Decimal(player.eternityPoints).log10() > 4000
|
||||||
|
? "Eternity Points and/or Dilated Time. Alternatively, you can unlock and perform your first Reality"
|
||||||
|
: "Eternity Points and/or Dilated Time"
|
||||||
|
),
|
||||||
// Tracks up to e8000 even though many players will reality well before that; we still want to distinguish
|
// Tracks up to e8000 even though many players will reality well before that; we still want to distinguish
|
||||||
// which saves are farther all the way up to the zeroth-reality RM cap
|
// which saves are farther all the way up to the zeroth-reality RM cap
|
||||||
subProgressValue: save => Math.sqrt((new Decimal(save.eternityPoints).log10() - 1300) / 6700),
|
subProgressValue: save => Math.clampMax(Math.sqrt((new Decimal(save.eternityPoints).log10() - 1300) / 6700), 1),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: PROGRESS_STAGE.EARLY_REALITY,
|
id: PROGRESS_STAGE.EARLY_REALITY,
|
||||||
|
@ -127,9 +127,9 @@ GameDatabase.reality.upgrades = [
|
|||||||
name: "Existentially Prolong",
|
name: "Existentially Prolong",
|
||||||
id: 10,
|
id: 10,
|
||||||
cost: 15,
|
cost: 15,
|
||||||
requirement: () => `Complete your first Eternity with at least ${formatPostBreak(DC.E450)} Infinity Points`,
|
requirement: () => `Complete your first Eternity with at least ${formatPostBreak(DC.E400)} Infinity Points`,
|
||||||
hasFailed: () => !player.requirementChecks.reality.noEternities,
|
hasFailed: () => !player.requirementChecks.reality.noEternities,
|
||||||
checkRequirement: () => Currency.infinityPoints.exponent >= 450 &&
|
checkRequirement: () => Currency.infinityPoints.exponent >= 400 &&
|
||||||
player.requirementChecks.reality.noEternities,
|
player.requirementChecks.reality.noEternities,
|
||||||
checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,
|
checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,
|
||||||
description: () => `Start every Reality with ${formatInt(100)} Eternities (also applies to current Reality)`,
|
description: () => `Start every Reality with ${formatInt(100)} Eternities (also applies to current Reality)`,
|
||||||
@ -201,7 +201,7 @@ GameDatabase.reality.upgrades = [
|
|||||||
checkRequirement: () => Currency.eternityPoints.exponent >= 10 && player.epmultUpgrades === 0,
|
checkRequirement: () => Currency.eternityPoints.exponent >= 10 && player.epmultUpgrades === 0,
|
||||||
checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,
|
checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,
|
||||||
description: () => `Boost Tachyon Particle gain based on ${formatX(5)} Eternity Point multiplier`,
|
description: () => `Boost Tachyon Particle gain based on ${formatX(5)} Eternity Point multiplier`,
|
||||||
effect: () => Math.max(Math.sqrt(Decimal.log10(EternityUpgrade.epMult.effectValue)) / 3, 1),
|
effect: () => Math.max(Math.sqrt(Decimal.log10(EternityUpgrade.epMult.effectValue)) / 9, 1),
|
||||||
formatEffect: value => formatX(value, 2, 2)
|
formatEffect: value => formatX(value, 2, 2)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,9 @@ class GameProgressState extends GameMechanicState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get suggestedResource() {
|
get suggestedResource() {
|
||||||
return this.config.suggestedResource;
|
return typeof this.config.suggestedResource === "function"
|
||||||
|
? this.config.suggestedResource()
|
||||||
|
: this.config.suggestedResource;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,8 +68,7 @@ export class TimeTheoremPurchaseType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get canAfford() {
|
get canAfford() {
|
||||||
return this.currency.gte(this.cost) &&
|
return this.currency.gte(this.cost) && !player.eternities.eq(0);
|
||||||
!(Pelle.isDoomed && player.eternities.eq(0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reset() {
|
reset() {
|
||||||
|
@ -803,6 +803,7 @@ export function getTTPerSecond() {
|
|||||||
Ra.unlocks.continuousTTBoost.effects.ttGen,
|
Ra.unlocks.continuousTTBoost.effects.ttGen,
|
||||||
Ra.unlocks.achievementTTMult,
|
Ra.unlocks.achievementTTMult,
|
||||||
Achievement(137),
|
Achievement(137),
|
||||||
|
Achievement(156),
|
||||||
);
|
);
|
||||||
if (GlyphAlteration.isAdded("dilation")) ttMult *= getSecondaryGlyphEffect("dilationTTgen");
|
if (GlyphAlteration.isAdded("dilation")) ttMult *= getSecondaryGlyphEffect("dilationTTgen");
|
||||||
|
|
||||||
|
@ -198,11 +198,11 @@ body.t-s9 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.l-tab-btn-inner {
|
.l-tab-btn-inner {
|
||||||
position: relative;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
position: relative;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@ -364,8 +364,8 @@ body.t-s9 {
|
|||||||
|
|
||||||
.o-tab-btn--infinity .o-subtab__tooltip {
|
.o-tab-btn--infinity .o-subtab__tooltip {
|
||||||
color: var(--color-infinity);
|
color: var(--color-infinity);
|
||||||
border-color: var(--color-infinity);
|
|
||||||
background: var(--color-prestige--accent);
|
background: var(--color-prestige--accent);
|
||||||
|
border-color: var(--color-infinity);
|
||||||
}
|
}
|
||||||
|
|
||||||
.o-tab-btn--infinity .o-subtab__tooltip::after {
|
.o-tab-btn--infinity .o-subtab__tooltip::after {
|
||||||
@ -374,8 +374,8 @@ body.t-s9 {
|
|||||||
|
|
||||||
.o-tab-btn--eternity .o-subtab__tooltip {
|
.o-tab-btn--eternity .o-subtab__tooltip {
|
||||||
color: var(--color-eternity);
|
color: var(--color-eternity);
|
||||||
border-color: var(--color-eternity);
|
|
||||||
background: var(--color-prestige--accent);
|
background: var(--color-prestige--accent);
|
||||||
|
border-color: var(--color-eternity);
|
||||||
}
|
}
|
||||||
|
|
||||||
.o-tab-btn--eternity .o-subtab__tooltip::after {
|
.o-tab-btn--eternity .o-subtab__tooltip::after {
|
||||||
@ -384,8 +384,8 @@ body.t-s9 {
|
|||||||
|
|
||||||
.o-tab-btn--reality .o-subtab__tooltip {
|
.o-tab-btn--reality .o-subtab__tooltip {
|
||||||
color: var(--color-reality);
|
color: var(--color-reality);
|
||||||
border-color: var(--color-reality);
|
|
||||||
background: var(--color-prestige--accent);
|
background: var(--color-prestige--accent);
|
||||||
|
border-color: var(--color-reality);
|
||||||
}
|
}
|
||||||
|
|
||||||
.o-tab-btn--reality .o-subtab__tooltip::after {
|
.o-tab-btn--reality .o-subtab__tooltip::after {
|
||||||
@ -394,8 +394,8 @@ body.t-s9 {
|
|||||||
|
|
||||||
.o-tab-btn--celestial .o-subtab__tooltip {
|
.o-tab-btn--celestial .o-subtab__tooltip {
|
||||||
color: var(--color-celestials);
|
color: var(--color-celestials);
|
||||||
border-color: var(--color-celestials);
|
|
||||||
background: var(--color-prestige--accent);
|
background: var(--color-prestige--accent);
|
||||||
|
border-color: var(--color-celestials);
|
||||||
}
|
}
|
||||||
|
|
||||||
.o-tab-btn--celestial .o-subtab__tooltip::after {
|
.o-tab-btn--celestial .o-subtab__tooltip::after {
|
||||||
@ -497,40 +497,6 @@ body.t-s9 {
|
|||||||
margin-top: 0.3rem;
|
margin-top: 0.3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.l-tickspeed-container {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
padding: 1rem 5rem 0 9rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.l-tickspeed-container--hidden {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tickspeed-labels {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tickspeed-btn {
|
|
||||||
height: 3rem;
|
|
||||||
min-width: 15rem;
|
|
||||||
max-width: 20rem;
|
|
||||||
font-size: 1.1rem;
|
|
||||||
padding: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tickspeed-max-btn {
|
|
||||||
width: 10rem;
|
|
||||||
height: 3rem;
|
|
||||||
padding: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tickspeed-labels span {
|
|
||||||
height: 3rem;
|
|
||||||
color: var(--color-text);
|
|
||||||
padding: 0.5rem 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.particle {
|
.particle {
|
||||||
width: 1rem;
|
width: 1rem;
|
||||||
height: 1rem;
|
height: 1rem;
|
||||||
@ -564,7 +530,6 @@ body.t-s9 {
|
|||||||
.btn-big-crunch--small {
|
.btn-big-crunch--small {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 4.3rem;
|
top: 4.3rem;
|
||||||
left: calc(50% - 0.6rem);
|
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
}
|
}
|
||||||
@ -579,10 +544,6 @@ body.t-s9 {
|
|||||||
animation: a-tesseract-shift-dark 5s infinite;
|
animation: a-tesseract-shift-dark 5s infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
.l-new-ui-big-crunch__container {
|
|
||||||
margin-top: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.information-header {
|
.information-header {
|
||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -31,6 +31,9 @@
|
|||||||
|
|
||||||
.l-old-ui__big-crunch-btn--overlay {
|
.l-old-ui__big-crunch-btn--overlay {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
margin-top: 5rem;
|
||||||
|
transform: translateX(-50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.l-old-ui__page {
|
.l-old-ui__page {
|
||||||
|
@ -118,7 +118,7 @@ html {
|
|||||||
--color-text-inverted: black;
|
--color-text-inverted: black;
|
||||||
--color-base: #455a64;
|
--color-base: #455a64;
|
||||||
--color-disabled: #37474f;
|
--color-disabled: #37474f;
|
||||||
--color-accent: #1565c0;
|
--color-accent: #1256a3;
|
||||||
--color-notification: yellow;
|
--color-notification: yellow;
|
||||||
|
|
||||||
--color-infinity: #ff9800;
|
--color-infinity: #ff9800;
|
||||||
@ -1596,12 +1596,14 @@ br {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.o-primary-btn--dimboost {
|
.o-primary-btn--dimboost {
|
||||||
|
position: relative;
|
||||||
width: 21rem;
|
width: 21rem;
|
||||||
height: 4.5rem;
|
height: 4.5rem;
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.o-primary-btn--galaxy {
|
.o-primary-btn--galaxy {
|
||||||
|
position: relative;
|
||||||
width: 21rem;
|
width: 21rem;
|
||||||
height: 4.5rem;
|
height: 4.5rem;
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
@ -1649,6 +1651,12 @@ br {
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.o-primary-btn--modal-option {
|
||||||
|
width: 16rem;
|
||||||
|
height: 6.5rem;
|
||||||
|
margin: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
.o-primary-btn--option-wide {
|
.o-primary-btn--option-wide {
|
||||||
width: 24rem;
|
width: 24rem;
|
||||||
height: 5.5rem;
|
height: 5.5rem;
|
||||||
@ -1780,7 +1788,6 @@ br {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.t-dark .o-primary-btn--disabled {
|
.t-dark .o-primary-btn--disabled {
|
||||||
color: black;
|
|
||||||
background-color: #37474f;
|
background-color: #37474f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2110,7 +2117,7 @@ br {
|
|||||||
/* #region hint-text */
|
/* #region hint-text */
|
||||||
|
|
||||||
.o-dim-path-priority {
|
.o-dim-path-priority {
|
||||||
font-size: 1.55rem;
|
font-size: 1.5rem;
|
||||||
color: white;
|
color: white;
|
||||||
text-shadow:
|
text-shadow:
|
||||||
-0.1rem -0.1rem 0 black,
|
-0.1rem -0.1rem 0 black,
|
||||||
@ -4211,13 +4218,13 @@ br {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.o-autobuyer-btn--unavailable {
|
.o-autobuyer-btn--unavailable {
|
||||||
background: var(--color-disabled);
|
color: black;
|
||||||
|
background-color: var(--color-disabled);
|
||||||
cursor: auto;
|
cursor: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.o-autobuyer-btn--unavailable:hover {
|
.o-autobuyer-btn--unavailable:hover {
|
||||||
color: black;
|
background-color: var(--color-bad);
|
||||||
background-color: var(--color-disabled);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.t-dark .o-autobuyer-btn,
|
.t-dark .o-autobuyer-btn,
|
||||||
@ -5293,6 +5300,11 @@ br {
|
|||||||
transition-duration: 0.2s;
|
transition-duration: 0.2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.c-modal--short {
|
||||||
|
overflow-y: scroll;
|
||||||
|
max-height: 55rem;
|
||||||
|
}
|
||||||
|
|
||||||
.c-modal__title {
|
.c-modal__title {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 50rem;
|
width: 50rem;
|
||||||
@ -5782,6 +5794,7 @@ br {
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
font-size: 1.3rem;
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5949,8 +5962,8 @@ kbd {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.o-notification--error {
|
.o-notification--error {
|
||||||
background-color: #bf352d;
|
background-color: #ffaa22;
|
||||||
border-color: #330000;
|
border-color: #553300;
|
||||||
}
|
}
|
||||||
|
|
||||||
.o-notification--info {
|
.o-notification--info {
|
||||||
@ -5989,8 +6002,8 @@ kbd {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.s-base--metro .o-notification--error {
|
.s-base--metro .o-notification--error {
|
||||||
background-color: #f44336;
|
background-color: #ffaa22;
|
||||||
border-color: #c62828;
|
border-color: #553300;
|
||||||
}
|
}
|
||||||
|
|
||||||
.s-base--metro .o-notification--info {
|
.s-base--metro .o-notification--info {
|
||||||
@ -6684,7 +6697,7 @@ kbd {
|
|||||||
|
|
||||||
.o-enslaved-mechanic-button {
|
.o-enslaved-mechanic-button {
|
||||||
min-width: 18rem;
|
min-width: 18rem;
|
||||||
min-height: 7rem;
|
min-height: 9rem;
|
||||||
font-family: Typewriter;
|
font-family: Typewriter;
|
||||||
background-color: #fdd3b0;
|
background-color: #fdd3b0;
|
||||||
border: var(--var-border-width, 0.2rem) solid sandybrown;
|
border: var(--var-border-width, 0.2rem) solid sandybrown;
|
||||||
@ -6834,10 +6847,8 @@ kbd {
|
|||||||
|
|
||||||
.c-enslaved-hint-modal {
|
.c-enslaved-hint-modal {
|
||||||
display: flex;
|
display: flex;
|
||||||
overflow-y: scroll;
|
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
width: 60rem;
|
width: 60rem;
|
||||||
height: 57rem;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
padding: 0.25rem 1rem;
|
padding: 0.25rem 1rem;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.general-tooltip .tooltip-inner {
|
.general-tooltip .tooltip-inner {
|
||||||
width: 16rem;
|
width: 20rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-family: Typewriter, serif;
|
font-family: Typewriter, serif;
|
||||||
font-size: 1.4rem;
|
font-size: 1.4rem;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/* HintText.vue */
|
/* HintText.vue */
|
||||||
|
|
||||||
.o-hint-text {
|
.o-hint-text {
|
||||||
font-size: 1.55rem;
|
font-size: 1.5rem;
|
||||||
color: white;
|
color: white;
|
||||||
text-shadow:
|
text-shadow:
|
||||||
-0.1rem -0.1rem 0 black,
|
-0.1rem -0.1rem 0 black,
|
||||||
|
@ -57,10 +57,7 @@ export default {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="l-challenges-tab__header">
|
<div class="l-challenges-tab__header">
|
||||||
<div
|
<div class="c-subtab-option-container">
|
||||||
v-if="isShowAllVisible || isAutoECVisible || isInChallenge"
|
|
||||||
class="c-subtab-option-container"
|
|
||||||
>
|
|
||||||
<PrimaryToggleButton
|
<PrimaryToggleButton
|
||||||
v-model="retryChallenge"
|
v-model="retryChallenge"
|
||||||
class="o-primary-btn--subtab-option"
|
class="o-primary-btn--subtab-option"
|
||||||
|
@ -19,6 +19,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
showWorstChallenge: false,
|
showWorstChallenge: false,
|
||||||
|
worstChallengeString: "",
|
||||||
isUseless: false,
|
isUseless: false,
|
||||||
canBeBought: false,
|
canBeBought: false,
|
||||||
chargePossible: false,
|
chargePossible: false,
|
||||||
|
@ -7,11 +7,6 @@ export default {
|
|||||||
PrimaryToggleButton
|
PrimaryToggleButton
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
isWide: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: true,
|
|
||||||
},
|
|
||||||
value: {
|
value: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: false,
|
required: false,
|
||||||
@ -23,12 +18,6 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
classObject() {
|
|
||||||
return {
|
|
||||||
"o-primary-btn--option": !this.isWide,
|
|
||||||
"o-primary-btn--option-wide": this.isWide,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
styleObject() {
|
styleObject() {
|
||||||
return {
|
return {
|
||||||
"background-color": this.value ? "var(--color-good)" : "var(--color-gh-purple)",
|
"background-color": this.value ? "var(--color-good)" : "var(--color-gh-purple)",
|
||||||
@ -42,7 +31,7 @@ export default {
|
|||||||
<PrimaryToggleButton
|
<PrimaryToggleButton
|
||||||
:value="value"
|
:value="value"
|
||||||
:label="text"
|
:label="text"
|
||||||
:class="classObject"
|
class="o-primary-btn--modal-option"
|
||||||
:style="styleObject"
|
:style="styleObject"
|
||||||
@input="emitInput"
|
@input="emitInput"
|
||||||
/>
|
/>
|
||||||
|
@ -58,7 +58,7 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="!nothingHappened"
|
v-if="!nothingHappened"
|
||||||
class="c-modal-away-progress__resources"
|
class="c-modal-away-progress__resources c-modal--short"
|
||||||
>
|
>
|
||||||
<AwayProgressEntry
|
<AwayProgressEntry
|
||||||
v-for="name of offlineStats"
|
v-for="name of offlineStats"
|
||||||
|
@ -96,7 +96,7 @@ export default {
|
|||||||
<template #header>
|
<template #header>
|
||||||
Cracks in The Nameless Ones' Reality
|
Cracks in The Nameless Ones' Reality
|
||||||
</template>
|
</template>
|
||||||
<div class="c-enslaved-hint-modal">
|
<div class="c-enslaved-hint-modal c-modal--short">
|
||||||
<div>
|
<div>
|
||||||
This Reality seems to be resisting your efforts to complete it. So far you have done the following:
|
This Reality seems to be resisting your efforts to complete it. So far you have done the following:
|
||||||
</div>
|
</div>
|
||||||
|
@ -16,12 +16,6 @@ export default {
|
|||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
startTime: 0,
|
|
||||||
remainingTime: 0,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
computed: {
|
||||||
progressStage: () => ProgressChecker.getProgressStage(player).id,
|
progressStage: () => ProgressChecker.getProgressStage(player).id,
|
||||||
suggestedResource() {
|
suggestedResource() {
|
||||||
@ -36,19 +30,7 @@ export default {
|
|||||||
return this.diff ? "Content Catch-up" : "Content Summary";
|
return this.diff ? "Content Catch-up" : "Content Summary";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
|
||||||
// This is a particularly important modal which cannot be opened again, so we make the close button unclickable
|
|
||||||
// for the first few seconds to reduce the chance of a player instinctively clicking through and not reading it.
|
|
||||||
// It can still be closed preemptively with escape, but that should be likely significantly less likely to happen.
|
|
||||||
// Additionally, if diff is 0 then we assume that this was manually opened and remove the delay
|
|
||||||
this.startTime = this.diff ? Date.now() : 0;
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
|
||||||
const timeSinceOpen = Date.now() - this.startTime;
|
|
||||||
// Track remainingTime in seconds, starting at 5 and counting down to 0
|
|
||||||
this.remainingTime = Math.max(Math.floor(5 - timeSinceOpen / 1000), 0);
|
|
||||||
},
|
|
||||||
stageName(stage) {
|
stageName(stage) {
|
||||||
return GameProgress(stage).name;
|
return GameProgress(stage).name;
|
||||||
}
|
}
|
||||||
@ -67,7 +49,7 @@ export default {
|
|||||||
check the related How To Play entries if you want more detailed information.
|
check the related How To Play entries if you want more detailed information.
|
||||||
<div
|
<div
|
||||||
class="l-catchup-group-container"
|
class="l-catchup-group-container"
|
||||||
:style="{ 'height' : `${Math.clamp(5 * progressStage, 15, 40)}rem` }"
|
:style="{ 'height' : `${Math.clamp(3 * progressStage + 5, 15, 35)}rem` }"
|
||||||
>
|
>
|
||||||
<CatchupGroup
|
<CatchupGroup
|
||||||
v-for="group of progressStage"
|
v-for="group of progressStage"
|
||||||
@ -81,17 +63,10 @@ export default {
|
|||||||
</span>
|
</span>
|
||||||
<div class="l-confirm-padding">
|
<div class="l-confirm-padding">
|
||||||
<PrimaryButton
|
<PrimaryButton
|
||||||
v-if="remainingTime === 0"
|
|
||||||
@click="emitClose"
|
@click="emitClose"
|
||||||
>
|
>
|
||||||
Confirm
|
Confirm
|
||||||
</PrimaryButton>
|
</PrimaryButton>
|
||||||
<PrimaryButton
|
|
||||||
v-else
|
|
||||||
:enabled="false"
|
|
||||||
>
|
|
||||||
Confirm ({{ formatInt(remainingTime) }})
|
|
||||||
</PrimaryButton>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -104,7 +79,7 @@ export default {
|
|||||||
border: 0.1rem solid var(--color-text);
|
border: 0.1rem solid var(--color-text);
|
||||||
border-radius: var(--var-border-radius, 0.4rem);
|
border-radius: var(--var-border-radius, 0.4rem);
|
||||||
margin: 1rem;
|
margin: 1rem;
|
||||||
padding: 2rem;
|
padding: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.l-confirm-padding {
|
.l-confirm-padding {
|
||||||
|
@ -20,7 +20,7 @@ export default {
|
|||||||
return this.challenge.isFullyCompleted;
|
return this.challenge.isFullyCompleted;
|
||||||
},
|
},
|
||||||
message() {
|
message() {
|
||||||
return `You will Eternity, if possible, and start a new Eternity within the Challenge, with all the
|
return `You will Eternity (if possible) and start a new Eternity within the Challenge, with all the
|
||||||
Challenge-specific restrictions and modifiers active.
|
Challenge-specific restrictions and modifiers active.
|
||||||
To complete the Challenge${this.challengeIsCompleted ? "" : " and gain its reward"},
|
To complete the Challenge${this.challengeIsCompleted ? "" : " and gain its reward"},
|
||||||
you must reach the Challenge goal of
|
you must reach the Challenge goal of
|
||||||
|
@ -20,7 +20,7 @@ export default {
|
|||||||
return this.challenge.isCompleted;
|
return this.challenge.isCompleted;
|
||||||
},
|
},
|
||||||
message() {
|
message() {
|
||||||
return `You will Big Crunch, if possible, and start a new Infinity within the Challenge, with all the
|
return `You will Big Crunch (if possible) and start a new Infinity within the Challenge with all the
|
||||||
Challenge-specific restrictions and modifiers active.
|
Challenge-specific restrictions and modifiers active.
|
||||||
To complete the Challenge${this.challengeIsCompleted ? "" : " and gain its reward"},
|
To complete the Challenge${this.challengeIsCompleted ? "" : " and gain its reward"},
|
||||||
you must reach the Challenge goal of
|
you must reach the Challenge goal of
|
||||||
|
@ -20,7 +20,7 @@ export default {
|
|||||||
return this.challenge.isCompleted;
|
return this.challenge.isCompleted;
|
||||||
},
|
},
|
||||||
message() {
|
message() {
|
||||||
return `You will Big Crunch, if possible, and start a new Infinity within the Challenge, with all the
|
return `You will Big Crunch (if possible) and start a new Infinity within the Challenge with all the
|
||||||
Challenge-specific restrictions and modifiers active.
|
Challenge-specific restrictions and modifiers active.
|
||||||
To complete the Challenge${this.challengeIsCompleted ? "" : " and gain its reward"},
|
To complete the Challenge${this.challengeIsCompleted ? "" : " and gain its reward"},
|
||||||
you must reach Infinity again.
|
you must reach Infinity again.
|
||||||
|
@ -77,7 +77,6 @@ export default {
|
|||||||
:show-name="hasDifferentName"
|
:show-name="hasDifferentName"
|
||||||
save-type="Local Save"
|
save-type="Local Save"
|
||||||
/>
|
/>
|
||||||
<br>
|
|
||||||
<SaveInfoEntry
|
<SaveInfoEntry
|
||||||
:save-data="conflict.cloud"
|
:save-data="conflict.cloud"
|
||||||
:other-data="conflict.local"
|
:other-data="conflict.local"
|
||||||
|
@ -99,7 +99,6 @@ export default {
|
|||||||
:show-name="hasDifferentName"
|
:show-name="hasDifferentName"
|
||||||
save-type="Cloud Save"
|
save-type="Cloud Save"
|
||||||
/>
|
/>
|
||||||
<br>
|
|
||||||
Would you like to overwrite the Cloud Save? Your choice here will apply for every
|
Would you like to overwrite the Cloud Save? Your choice here will apply for every
|
||||||
time the game automatically attempts to Cloud Save, until the page is reloaded.
|
time the game automatically attempts to Cloud Save, until the page is reloaded.
|
||||||
<div
|
<div
|
||||||
|
@ -148,7 +148,6 @@ export default {
|
|||||||
<span v-html="formattedSTDText" />
|
<span v-html="formattedSTDText" />
|
||||||
{{ timePlayed }}
|
{{ timePlayed }}
|
||||||
<br>
|
<br>
|
||||||
<br>
|
|
||||||
<span v-html="antimatter" />
|
<span v-html="antimatter" />
|
||||||
<span v-html="prestigeCount" />
|
<span v-html="prestigeCount" />
|
||||||
<span v-html="prestigeResource" />
|
<span v-html="prestigeResource" />
|
||||||
|
@ -109,13 +109,13 @@ export default {
|
|||||||
<style scoped>
|
<style scoped>
|
||||||
.c-dropdown-btn {
|
.c-dropdown-btn {
|
||||||
width: 24rem;
|
width: 24rem;
|
||||||
margin: 0.5rem;
|
margin: 0.3rem;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c-dropdown-header {
|
.c-dropdown-header {
|
||||||
padding: 0.75rem;
|
padding: 0.9rem;
|
||||||
height: 5.5rem;
|
height: 6.5rem;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -115,7 +115,6 @@ export default {
|
|||||||
{{ moreShiftKeyInfo }}
|
{{ moreShiftKeyInfo }}
|
||||||
</span>
|
</span>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
|
||||||
<div class="l-modal-hotkeys-row">
|
<div class="l-modal-hotkeys-row">
|
||||||
<span class="c-modal-hotkeys-row__name l-modal-hotkeys-row__name">Autobuyer Controls</span>
|
<span class="c-modal-hotkeys-row__name l-modal-hotkeys-row__name">Autobuyer Controls</span>
|
||||||
<kbd>alt</kbd>
|
<kbd>alt</kbd>
|
||||||
@ -128,7 +127,6 @@ export default {
|
|||||||
and Tickspeed Autobuyers instead.
|
and Tickspeed Autobuyers instead.
|
||||||
</span>
|
</span>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
|
||||||
<div class="l-modal-hotkeys-row">
|
<div class="l-modal-hotkeys-row">
|
||||||
<span class="c-modal-hotkeys-row__name l-modal-hotkeys-row__name">Tab Movement</span>
|
<span class="c-modal-hotkeys-row__name l-modal-hotkeys-row__name">Tab Movement</span>
|
||||||
<div>
|
<div>
|
||||||
@ -140,6 +138,15 @@ export default {
|
|||||||
The Up and Down arrows cycle you through tabs,
|
The Up and Down arrows cycle you through tabs,
|
||||||
and the Left and Right arrows cycle you through that tab's subtabs.
|
and the Left and Right arrows cycle you through that tab's subtabs.
|
||||||
</span>
|
</span>
|
||||||
|
<br>
|
||||||
|
<div class="l-modal-hotkeys-row">
|
||||||
|
<span class="c-modal-hotkeys-row__name l-modal-hotkeys-row__name">Numpad Support</span>
|
||||||
|
</div>
|
||||||
|
<span class="c-modal-hotkeys__shift-description">
|
||||||
|
Due to technical reasons, pressing a numpad key will purchase 10 of a Dimension if possible, but pressing
|
||||||
|
a numpad key with <kbd>shift</kbd> will not buy a single Dimension. It may instead, depending on your device,
|
||||||
|
cause the page to scroll or change game tabs. <kbd>alt</kbd> will still work as expected.
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</span>
|
||||||
</ModalWrapper>
|
</ModalWrapper>
|
||||||
|
@ -31,29 +31,31 @@ export default {
|
|||||||
<template #header>
|
<template #header>
|
||||||
Modify Visible Tabs
|
Modify Visible Tabs
|
||||||
</template>
|
</template>
|
||||||
Click a button to toggle showing a tab on/off.
|
<div class="c-modal--short">
|
||||||
<br>
|
Click a button to toggle showing a tab on/off.
|
||||||
Some tabs cannot be hidden, and you cannot hide your current tab.
|
|
||||||
<br>
|
|
||||||
Unhiding a tab in which all subtabs are hidden will also unhide all subtabs,
|
|
||||||
and hiding all subtabs will also hide the tab.
|
|
||||||
<br>
|
|
||||||
<div v-if="isAlmostEnd">
|
|
||||||
You cannot hide your tabs after unlocking the Galaxy Generator.
|
|
||||||
</div>
|
|
||||||
<div v-if="isEnslaved">
|
|
||||||
<br>
|
<br>
|
||||||
<i>You must... see everywhere...</i>
|
Some tabs cannot be hidden, and you cannot hide your current tab.
|
||||||
<br>
|
<br>
|
||||||
(You cannot hide your tabs within this Reality)
|
Unhiding a tab in which all subtabs are hidden will also unhide all subtabs,
|
||||||
|
and hiding all subtabs will also hide the tab.
|
||||||
|
<br>
|
||||||
|
<div v-if="isAlmostEnd">
|
||||||
|
You cannot hide your tabs after unlocking the Galaxy Generator.
|
||||||
|
</div>
|
||||||
|
<div v-if="isEnslaved">
|
||||||
|
<br>
|
||||||
|
<i>You must... see everywhere...</i>
|
||||||
|
<br>
|
||||||
|
(You cannot hide your tabs within this Reality)
|
||||||
|
</div>
|
||||||
|
<HiddenTabGroup
|
||||||
|
v-for="(tab, index) in tabs"
|
||||||
|
:key="index"
|
||||||
|
:tab="tab"
|
||||||
|
:change-enabled="!isEnslaved && !isAlmostEnd"
|
||||||
|
class="l-hide-modal-tab-container"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<HiddenTabGroup
|
|
||||||
v-for="(tab, index) in tabs"
|
|
||||||
:key="index"
|
|
||||||
:tab="tab"
|
|
||||||
:change-enabled="!isEnslaved && !isAlmostEnd"
|
|
||||||
class="l-hide-modal-tab-container"
|
|
||||||
/>
|
|
||||||
</ModalWrapperOptions>
|
</ModalWrapperOptions>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -1,16 +1,18 @@
|
|||||||
<script>
|
<script>
|
||||||
import ModalWrapperChoice from "@/components/modals/ModalWrapperChoice";
|
import ResetModal from "@/components/modals/prestige/ResetModal";
|
||||||
|
|
||||||
// Note: This modal only shows up on the first infinity and post-break infinities; it won't appear pre-break otherwise
|
|
||||||
export default {
|
export default {
|
||||||
name: "BigCrunchModal",
|
name: "BigCrunchModal",
|
||||||
components: {
|
components: {
|
||||||
ModalWrapperChoice
|
ResetModal
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
gainedInfinities: new Decimal(),
|
gainedInfinities: new Decimal(),
|
||||||
gainedInfinityPoints: new Decimal()
|
gainedInfinityPoints: new Decimal(),
|
||||||
|
startingBoosts: 0,
|
||||||
|
startingAM: 10,
|
||||||
|
willStartWithGalaxy: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -18,22 +20,33 @@ export default {
|
|||||||
return !PlayerProgress.infinityUnlocked();
|
return !PlayerProgress.infinityUnlocked();
|
||||||
},
|
},
|
||||||
message() {
|
message() {
|
||||||
const info = this.isFirstInfinity ? this.firstIntinityInfo : this.ipGainInfo;
|
const info = this.isFirstInfinity ? this.firstInfinityInfo : ``;
|
||||||
return `Upon Infinity, all Dimensions, Dimension Boosts, and Antimatter Galaxies are reset. ${info}`;
|
return `Upon Infinity, all Dimensions, Dimension Boosts, and Antimatter Galaxies are reset. ${info}`;
|
||||||
},
|
},
|
||||||
firstIntinityInfo() {
|
firstInfinityInfo() {
|
||||||
return `In return, you gain an Infinity Point (IP). This allows you to buy multiple upgrades that you can
|
return `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.`;
|
find in the Infinity tab. You will also gain one Infinity, which is the stat shown in the Statistics tab.`;
|
||||||
},
|
},
|
||||||
ipGainInfo() {
|
ipGainInfo() {
|
||||||
return `You will gain ${quantify("Infinity Point", this.gainedInfinityPoints, 2, 2)}
|
return `You will gain ${quantify("Infinity", this.gainedInfinities, 2, 0)}
|
||||||
and ${quantify("Infinity", this.gainedInfinities)}.`;
|
and ${quantify("Infinity Point", this.gainedInfinityPoints, 2, 0)}.`;
|
||||||
|
},
|
||||||
|
startingResources() {
|
||||||
|
const gainedResources = [];
|
||||||
|
if (this.startingAM.gte(10)) gainedResources.push(`${quantify("Antimatter", this.startingAM, 2, 1)}`);
|
||||||
|
if (this.startingBoosts > 0) gainedResources.push(`${quantify("Dimension Boost", this.startingBoosts)}`);
|
||||||
|
if (this.willStartWithGalaxy) gainedResources.push(`${quantify("Galaxy", 1)}`);
|
||||||
|
|
||||||
|
return `You will start your next Infinity with ${makeEnumeration(gainedResources)}.`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
this.gainedInfinities = gainedInfinities().round();
|
this.gainedInfinities = gainedInfinities().round();
|
||||||
this.gainedInfinityPoints = gainedInfinityPoints().round();
|
this.gainedInfinityPoints = gainedInfinityPoints().round();
|
||||||
|
this.startingBoosts = DimBoost.startingDimensionBoosts;
|
||||||
|
this.startingAM = Currency.antimatter.startingValue;
|
||||||
|
this.willStartWithGalaxy = InfinityUpgrade.skipResetGalaxy.isBought;
|
||||||
},
|
},
|
||||||
handleYesClick() {
|
handleYesClick() {
|
||||||
bigCrunchResetRequest();
|
bigCrunchResetRequest();
|
||||||
@ -49,15 +62,14 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ModalWrapperChoice
|
<ResetModal
|
||||||
:option="isFirstInfinity ? undefined : 'bigCrunch'"
|
header="You are about to Infinity"
|
||||||
@confirm="handleYesClick"
|
:message="message"
|
||||||
>
|
:gained-resources="ipGainInfo"
|
||||||
<template #header>
|
:starting-resources="startingResources"
|
||||||
You are about to Infinity
|
:confirm-fn="handleYesClick"
|
||||||
</template>
|
:alternate-condition="isFirstInfinity"
|
||||||
<div class="c-modal-message__text">
|
:alternate-text="message"
|
||||||
{{ message }}
|
:confirm-option="isFirstInfinity ? undefined : 'bigCrunch'"
|
||||||
</div>
|
/>
|
||||||
</ModalWrapperChoice>
|
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
<script>
|
<script>
|
||||||
import ModalWrapperChoice from "@/components/modals/ModalWrapperChoice";
|
import ResetModal from "@/components/modals/prestige/ResetModal";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "EternityModal",
|
name: "EternityModal",
|
||||||
components: {
|
components: {
|
||||||
ModalWrapperChoice
|
ResetModal
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
exitingEC: false,
|
exitingEC: false,
|
||||||
startingIP: new Decimal(),
|
startingIP: new Decimal(),
|
||||||
gainedEternityPoints: new Decimal()
|
gainedEternityPoints: new Decimal(),
|
||||||
|
gainedEternities: new Decimal()
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -22,7 +23,8 @@ export default {
|
|||||||
on the Statistics tab. You will also gain an Eternity Point and unlock various upgrades.`;
|
on the Statistics tab. You will also gain an Eternity Point and unlock various upgrades.`;
|
||||||
},
|
},
|
||||||
gainedEPOnEternity() {
|
gainedEPOnEternity() {
|
||||||
return `You will gain ${quantify("Eternity Point", this.gainedEternityPoints, 2)} on Eternity.`;
|
return `You will gain ${quantify("Eternity", this.gainedEternities, 2)}
|
||||||
|
and ${quantify("Eternity Point", this.gainedEternityPoints, 2)} on Eternity.`;
|
||||||
},
|
},
|
||||||
startWithIP() {
|
startWithIP() {
|
||||||
return this.startingIP.gt(0)
|
return this.startingIP.gt(0)
|
||||||
@ -46,6 +48,7 @@ export default {
|
|||||||
this.exitingEC = EternityChallenge.isRunning;
|
this.exitingEC = EternityChallenge.isRunning;
|
||||||
this.startingIP = Currency.infinityPoints.startingValue;
|
this.startingIP = Currency.infinityPoints.startingValue;
|
||||||
this.gainedEternityPoints = gainedEternityPoints();
|
this.gainedEternityPoints = gainedEternityPoints();
|
||||||
|
this.gainedEternities = gainedEternities();
|
||||||
},
|
},
|
||||||
handleYesClick() {
|
handleYesClick() {
|
||||||
animateAndEternity();
|
animateAndEternity();
|
||||||
@ -56,31 +59,14 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ModalWrapperChoice
|
<ResetModal
|
||||||
option="eternity"
|
:header="exitingEC ? 'Complete Eternity Challenge' : 'You are about to Eternity'"
|
||||||
@confirm="handleYesClick"
|
:message="message"
|
||||||
>
|
:gained-resources="gainedEPOnEternity"
|
||||||
<template #header>
|
:starting-resources="startWithIP"
|
||||||
{{ exitingEC ? "Complete Eternity Challenge" : "You are about to Eternity" }}
|
:confirm-fn="handleYesClick"
|
||||||
</template>
|
:alternate-condition="exitingEC"
|
||||||
<div v-if="!exitingEC">
|
:alternate-text="exitingEC ? eternityChallenge : undefined"
|
||||||
<div class="c-modal-message__text">
|
confirm-option="eternity"
|
||||||
{{ message }}
|
/>
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
<div class="c-modal-message__text">
|
|
||||||
{{ gainedEPOnEternity }}
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
<div class="c-modal-message__text">
|
|
||||||
{{ startWithIP }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-else>
|
|
||||||
<div class="c-modal-message__text">
|
|
||||||
{{ eternityChallenge }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</ModalWrapperChoice>
|
|
||||||
</template>
|
</template>
|
||||||
|
81
src/components/modals/prestige/ResetModal.vue
Normal file
81
src/components/modals/prestige/ResetModal.vue
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<script>
|
||||||
|
import ModalWrapperChoice from "@/components/modals/ModalWrapperChoice";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "ResetModal",
|
||||||
|
components: {
|
||||||
|
ModalWrapperChoice,
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
header: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
gainedResources: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
startingResources: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
default: undefined
|
||||||
|
},
|
||||||
|
confirmOption: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
default: undefined
|
||||||
|
},
|
||||||
|
confirmFn: {
|
||||||
|
type: Function,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
alternateText: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
default: undefined
|
||||||
|
},
|
||||||
|
alternateCondition: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<ModalWrapperChoice
|
||||||
|
:option="confirmOption"
|
||||||
|
@confirm="confirmFn"
|
||||||
|
>
|
||||||
|
<template #header>
|
||||||
|
{{ header }}
|
||||||
|
</template>
|
||||||
|
<div v-if="!alternateCondition">
|
||||||
|
<div class="c-modal-message__text">
|
||||||
|
{{ message }}
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="c-modal-message__text">
|
||||||
|
{{ gainedResources }}
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div
|
||||||
|
v-if="startingResources"
|
||||||
|
class="c-modal-message__text"
|
||||||
|
>
|
||||||
|
{{ startingResources }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<div class="c-modal-message__text">
|
||||||
|
{{ alternateText }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ModalWrapperChoice>
|
||||||
|
</template>
|
@ -1,12 +1,11 @@
|
|||||||
<script>
|
<script>
|
||||||
import HeaderTickspeedRowClassic from "../../ui-modes/HeaderTickspeedRowClassic";
|
|
||||||
|
|
||||||
import AntimatterDimensionProgressBar from "./AntimatterDimensionProgressBar";
|
import AntimatterDimensionProgressBar from "./AntimatterDimensionProgressBar";
|
||||||
import AntimatterDimensionRow from "./ClassicAntimatterDimensionRow";
|
import AntimatterDimensionRow from "./ClassicAntimatterDimensionRow";
|
||||||
import AntimatterDimensionsTabHeader from "./ClassicAntimatterDimensionsTabHeader";
|
import AntimatterDimensionsTabHeader from "./ClassicAntimatterDimensionsTabHeader";
|
||||||
import AntimatterGalaxyRow from "./ClassicAntimatterGalaxyRow";
|
import AntimatterGalaxyRow from "./ClassicAntimatterGalaxyRow";
|
||||||
import DimensionBoostRow from "./ClassicDimensionBoostRow";
|
import DimensionBoostRow from "./ClassicDimensionBoostRow";
|
||||||
import PrimaryButton from "@/components/PrimaryButton";
|
import PrimaryButton from "@/components/PrimaryButton";
|
||||||
|
import TickspeedRow from "./TickspeedRow";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ClassicAntimatterDimensionsTab",
|
name: "ClassicAntimatterDimensionsTab",
|
||||||
@ -17,7 +16,7 @@ export default {
|
|||||||
AntimatterGalaxyRow,
|
AntimatterGalaxyRow,
|
||||||
DimensionBoostRow,
|
DimensionBoostRow,
|
||||||
AntimatterDimensionProgressBar,
|
AntimatterDimensionProgressBar,
|
||||||
HeaderTickspeedRowClassic,
|
TickspeedRow,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -52,12 +51,9 @@ export default {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="l-old-ui-antimatter-dim-tab">
|
<div class="l-old-ui-antimatter-dim-tab">
|
||||||
<span>{{ multiplierText }}</span>
|
|
||||||
<AntimatterDimensionsTabHeader />
|
<AntimatterDimensionsTabHeader />
|
||||||
<HeaderTickspeedRowClassic
|
{{ multiplierText }}
|
||||||
v-if="hasRealityButton"
|
<TickspeedRow />
|
||||||
:in-header="false"
|
|
||||||
/>
|
|
||||||
<div class="l-dimensions-container">
|
<div class="l-dimensions-container">
|
||||||
<AntimatterDimensionRow
|
<AntimatterDimensionRow
|
||||||
v-for="tier in 8"
|
v-for="tier in 8"
|
||||||
|
@ -15,6 +15,7 @@ export default {
|
|||||||
isContinuumActive: false,
|
isContinuumActive: false,
|
||||||
continuumValue: 0,
|
continuumValue: 0,
|
||||||
hasTutorial: false,
|
hasTutorial: false,
|
||||||
|
hasRealityButton: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -33,21 +34,19 @@ export default {
|
|||||||
tickspeedDisplay() {
|
tickspeedDisplay() {
|
||||||
return `Tickspeed: ${format(this.tickspeed, 2, 3)} / sec`;
|
return `Tickspeed: ${format(this.tickspeed, 2, 3)} / sec`;
|
||||||
},
|
},
|
||||||
showCostTitle() {
|
|
||||||
return this.cost.exponent < 1000000;
|
|
||||||
},
|
|
||||||
continuumString() {
|
continuumString() {
|
||||||
return formatFloat(this.continuumValue, 2);
|
return formatFloat(this.continuumValue, 2);
|
||||||
},
|
},
|
||||||
upgradeCount() {
|
upgradeCount() {
|
||||||
const purchased = this.purchasedTickspeed;
|
const purchased = this.purchasedTickspeed;
|
||||||
if (!this.freeTickspeed) return `${formatInt(purchased)} Purchased`;
|
if (!this.freeTickspeed) return `${formatInt(purchased)} Purchased Upgrades`;
|
||||||
if (purchased === 0 || this.isContinuumActive) return `${formatInt(this.freeTickspeed)} Free Upgrades`;
|
if (purchased === 0 || this.isContinuumActive) return `${formatInt(this.freeTickspeed)} Free Upgrades`;
|
||||||
return `${formatInt(purchased)} Purchased + ${formatInt(this.freeTickspeed)} Free`;
|
return `${formatInt(purchased)} Purchased + ${formatInt(this.freeTickspeed)} Free`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
|
this.hasRealityButton = PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought;
|
||||||
this.purchasedTickspeed = player.totalTickBought;
|
this.purchasedTickspeed = player.totalTickBought;
|
||||||
this.freeTickspeed = FreeTickspeed.amount;
|
this.freeTickspeed = FreeTickspeed.amount;
|
||||||
const isEC9Running = EternityChallenge(9).isRunning;
|
const isEC9Running = EternityChallenge(9).isRunning;
|
||||||
@ -76,17 +75,16 @@ export default {
|
|||||||
if (!buyTickSpeed()) return;
|
if (!buyTickSpeed()) return;
|
||||||
Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED);
|
Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED);
|
||||||
},
|
},
|
||||||
|
buyMaxUpgrade() {
|
||||||
|
if (!buyMaxTickSpeed()) return;
|
||||||
|
Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED);
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div :class="classObject">
|
<div :class="classObject">
|
||||||
<div class="tickspeed-labels">
|
|
||||||
<span>
|
|
||||||
{{ tickspeedDisplay }} <span>{{ multiplierDisplay }}</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="tickspeed-buttons">
|
<div class="tickspeed-buttons">
|
||||||
<button
|
<button
|
||||||
v-tooltip="upgradeCount"
|
v-tooltip="upgradeCount"
|
||||||
@ -94,10 +92,10 @@ export default {
|
|||||||
@click="buyUpgrade"
|
@click="buyUpgrade"
|
||||||
>
|
>
|
||||||
<span v-if="isContinuumActive">
|
<span v-if="isContinuumActive">
|
||||||
{{ continuumString }} (cont.)
|
Tickspeed Continuum: {{ continuumString }}
|
||||||
</span>
|
</span>
|
||||||
<span v-else>
|
<span v-else>
|
||||||
Cost: {{ format(cost) }}
|
Tickspeed Cost: {{ format(cost) }}
|
||||||
</span>
|
</span>
|
||||||
<div
|
<div
|
||||||
v-if="hasTutorial"
|
v-if="hasTutorial"
|
||||||
@ -108,11 +106,17 @@ export default {
|
|||||||
v-if="!isContinuumActive"
|
v-if="!isContinuumActive"
|
||||||
class="o-primary-btn tickspeed-max-btn"
|
class="o-primary-btn tickspeed-max-btn"
|
||||||
:class="{ 'o-primary-btn--disabled': !isAffordable && !isContinuumActive }"
|
:class="{ 'o-primary-btn--disabled': !isAffordable && !isContinuumActive }"
|
||||||
onclick="buyMaxTickSpeed()"
|
@click="buyMaxUpgrade"
|
||||||
>
|
>
|
||||||
Buy Max
|
Buy Max
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="hasRealityButton"
|
||||||
|
class="tickspeed-labels"
|
||||||
|
>
|
||||||
|
{{ tickspeedDisplay }} | {{ multiplierDisplay }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -122,8 +126,35 @@ export default {
|
|||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tickspeed-btn {
|
||||||
|
position: relative;
|
||||||
|
width: 30rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
padding: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickspeed-labels {
|
||||||
|
color: var(--color-text);
|
||||||
|
padding: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.l-tickspeed-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
padding-top: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.l-tickspeed-container--hidden {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
.tickspeed-max-btn {
|
.tickspeed-max-btn {
|
||||||
margin-left: 0.5rem;
|
margin-left: 0.5rem;
|
||||||
|
width: 10rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
padding: 0.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.o-non-clickable {
|
.o-non-clickable {
|
||||||
|
@ -56,10 +56,10 @@ export default {
|
|||||||
this.rolling = GameEnd.endState > END_STATE_MARKERS.CREDITS_START;
|
this.rolling = GameEnd.endState > END_STATE_MARKERS.CREDITS_START;
|
||||||
this.scroll = (
|
this.scroll = (
|
||||||
Math.clampMax(GameEnd.endState, END_STATE_MARKERS.CREDITS_END) - END_STATE_MARKERS.CREDITS_START
|
Math.clampMax(GameEnd.endState, END_STATE_MARKERS.CREDITS_END) - END_STATE_MARKERS.CREDITS_START
|
||||||
) * 53;
|
) * 60;
|
||||||
if (this.audio) this.audio.volume = this.isMuted
|
if (this.audio) this.audio.volume = this.isMuted
|
||||||
? 0
|
? 0
|
||||||
: Math.clamp((GameEnd.endState - END_STATE_MARKERS.CREDITS_END), 0, 0.3);
|
: Math.clamp((GameEnd.endState - END_STATE_MARKERS.CREDITS_START), 0, 0.3);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -218,7 +218,7 @@ perfectly the same. */
|
|||||||
}
|
}
|
||||||
|
|
||||||
.c-teresa-credits {
|
.c-teresa-credits {
|
||||||
top: 130rem;
|
top: 145rem;
|
||||||
left: 65%;
|
left: 65%;
|
||||||
color: var(--color-teresa--base);
|
color: var(--color-teresa--base);
|
||||||
animation: a-teresa-credits 10s ease-in-out infinite;
|
animation: a-teresa-credits 10s ease-in-out infinite;
|
||||||
@ -232,21 +232,21 @@ perfectly the same. */
|
|||||||
}
|
}
|
||||||
|
|
||||||
.c-enslaved-credits {
|
.c-enslaved-credits {
|
||||||
top: 220rem;
|
top: 235rem;
|
||||||
left: 52%;
|
left: 52%;
|
||||||
color: var(--color-enslaved--base);
|
color: var(--color-enslaved--base);
|
||||||
animation: a-enslaved-credits 10s linear infinite;
|
animation: a-enslaved-credits 10s linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c-v-credits {
|
.c-v-credits {
|
||||||
top: 170rem;
|
top: 185rem;
|
||||||
left: 20%;
|
left: 20%;
|
||||||
color: var(--color-v--base);
|
color: var(--color-v--base);
|
||||||
animation: a-v-credits 15s ease-in-out infinite;
|
animation: a-v-credits 15s ease-in-out infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c-ra-credits {
|
.c-ra-credits {
|
||||||
top: 300rem;
|
top: 315rem;
|
||||||
left: 44%;
|
left: 44%;
|
||||||
color: var(--color-ra--base);
|
color: var(--color-ra--base);
|
||||||
animation: a-ra-credits 10s ease-in-out infinite;
|
animation: a-ra-credits 10s ease-in-out infinite;
|
||||||
@ -257,7 +257,7 @@ perfectly the same. */
|
|||||||
}
|
}
|
||||||
|
|
||||||
.c-laitela-credits {
|
.c-laitela-credits {
|
||||||
top: 90rem;
|
top: 105rem;
|
||||||
left: 13%;
|
left: 13%;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
animation: a-laitela-credits 5s ease-in-out infinite;
|
animation: a-laitela-credits 5s ease-in-out infinite;
|
||||||
|
@ -28,6 +28,7 @@ export default {
|
|||||||
boughtTesseracts: 0,
|
boughtTesseracts: 0,
|
||||||
extraTesseracts: 0,
|
extraTesseracts: 0,
|
||||||
creditsClosed: false,
|
creditsClosed: false,
|
||||||
|
showLockedDimCostNote: true,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -38,6 +39,7 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
|
this.showLockedDimCostNote = !InfinityDimension(8).isUnlocked;
|
||||||
this.isEC9Running = EternityChallenge(9).isRunning;
|
this.isEC9Running = EternityChallenge(9).isRunning;
|
||||||
this.infinityPower.copyFrom(Currency.infinityPower);
|
this.infinityPower.copyFrom(Currency.infinityPower);
|
||||||
this.conversionRate = InfinityDimensions.powerConversionRate;
|
this.conversionRate = InfinityDimensions.powerConversionRate;
|
||||||
@ -154,7 +156,8 @@ export default {
|
|||||||
>
|
>
|
||||||
You have {{ quantifyInt("purchase", EC8PurchasesLeft) }} left.
|
You have {{ quantifyInt("purchase", EC8PurchasesLeft) }} left.
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<div v-if="showLockedDimCostNote">
|
||||||
Hold shift to see the Infinity Point cost for locked Infinity Dimensions.
|
Hold shift to see the Infinity Point cost for locked Infinity Dimensions.
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -28,6 +28,7 @@ export default {
|
|||||||
boughtTesseracts: 0,
|
boughtTesseracts: 0,
|
||||||
extraTesseracts: 0,
|
extraTesseracts: 0,
|
||||||
creditsClosed: false,
|
creditsClosed: false,
|
||||||
|
showLockedDimCostNote: true,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -44,6 +45,7 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
|
this.showLockedDimCostNote = !InfinityDimension(8).isUnlocked;
|
||||||
this.isEC9Running = EternityChallenge(9).isRunning;
|
this.isEC9Running = EternityChallenge(9).isRunning;
|
||||||
this.infinityPower.copyFrom(Currency.infinityPower);
|
this.infinityPower.copyFrom(Currency.infinityPower);
|
||||||
this.conversionRate = InfinityDimensions.powerConversionRate;
|
this.conversionRate = InfinityDimensions.powerConversionRate;
|
||||||
@ -160,7 +162,8 @@ export default {
|
|||||||
>
|
>
|
||||||
You have {{ quantifyInt("purchase", EC8PurchasesLeft) }} left.
|
You have {{ quantifyInt("purchase", EC8PurchasesLeft) }} left.
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<div v-if="showLockedDimCostNote">
|
||||||
Hold shift to see the Infinity Point cost for locked Infinity Dimensions.
|
Hold shift to see the Infinity Point cost for locked Infinity Dimensions.
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -70,7 +70,8 @@ export default {
|
|||||||
|
|
||||||
if (this.remainingTimeText === "") {
|
if (this.remainingTimeText === "") {
|
||||||
if (remainingTime === 0) {
|
if (remainingTime === 0) {
|
||||||
this.remainingTimeText = "At Infinite Replicanti";
|
this.remainingTimeText = `At Infinite Replicanti (normally takes
|
||||||
|
${TimeSpan.fromSeconds(secondsPerGalaxy.toNumber())})`;
|
||||||
} else {
|
} else {
|
||||||
this.remainingTimeText = `${TimeSpan.fromSeconds(remainingTime)} remaining until Infinite Replicanti`;
|
this.remainingTimeText = `${TimeSpan.fromSeconds(remainingTime)} remaining until Infinite Replicanti`;
|
||||||
}
|
}
|
||||||
|
@ -79,11 +79,13 @@ export default {
|
|||||||
return new ReplicantiUpgradeButtonSetup(
|
return new ReplicantiUpgradeButtonSetup(
|
||||||
upgrade,
|
upgrade,
|
||||||
value => {
|
value => {
|
||||||
let description = `Max Replicanti Galaxies: ${formatInt(value)}`;
|
let description = `Max Replicanti Galaxies: `;
|
||||||
const extra = upgrade.extra;
|
const extra = upgrade.extra;
|
||||||
if (extra > 0) {
|
if (extra > 0) {
|
||||||
const total = value + extra;
|
const total = value + extra;
|
||||||
description += ` + ${formatInt(extra)} = ${formatInt(total)}`;
|
description += `<br>${formatInt(value)} + ${formatInt(extra)} = ${formatInt(total)}`;
|
||||||
|
} else {
|
||||||
|
description += formatInt(value);
|
||||||
}
|
}
|
||||||
return description;
|
return description;
|
||||||
},
|
},
|
||||||
|
@ -69,7 +69,7 @@ export class ReplicantiUpgradeButtonSetup {
|
|||||||
class="o-primary-btn--replicanti-upgrade"
|
class="o-primary-btn--replicanti-upgrade"
|
||||||
@click="upgrade.purchase()"
|
@click="upgrade.purchase()"
|
||||||
>
|
>
|
||||||
<span>{{ description }}</span>
|
<span v-html="description" />
|
||||||
<template v-if="!isCapped">
|
<template v-if="!isCapped">
|
||||||
<br>
|
<br>
|
||||||
<span>{{ costDescription }}</span>
|
<span>{{ costDescription }}</span>
|
||||||
|
@ -17,7 +17,8 @@ export default {
|
|||||||
upgradeThreshold: new Decimal(0),
|
upgradeThreshold: new Decimal(0),
|
||||||
shardsPerSecond: new Decimal(0),
|
shardsPerSecond: new Decimal(0),
|
||||||
incomeType: "",
|
incomeType: "",
|
||||||
areAutobuyersUnlocked: false
|
areAutobuyersUnlocked: false,
|
||||||
|
showLockedDimCostNote: true,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -25,6 +26,7 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
|
this.showLockedDimCostNote = !TimeDimension(8).isUnlocked && player.realities >= 1;
|
||||||
this.totalUpgrades = player.totalTickGained;
|
this.totalUpgrades = player.totalTickGained;
|
||||||
this.multPerTickspeed = FreeTickspeed.multToNext;
|
this.multPerTickspeed = FreeTickspeed.multToNext;
|
||||||
this.tickspeedSoftcap = FreeTickspeed.softcap;
|
this.tickspeedSoftcap = FreeTickspeed.softcap;
|
||||||
@ -96,8 +98,9 @@ export default {
|
|||||||
<br>
|
<br>
|
||||||
and costs increase much faster after {{ format(costIncreases[2]) }} Eternity Points.
|
and costs increase much faster after {{ format(costIncreases[2]) }} Eternity Points.
|
||||||
<br>
|
<br>
|
||||||
Hold shift to see the Eternity Point cost for locked Time Dimensions.
|
<div v-if="showLockedDimCostNote">
|
||||||
<br>
|
Hold shift to see the Eternity Point cost for locked Time Dimensions.
|
||||||
|
</div>
|
||||||
Any 8th Time Dimensions purchased above {{ format(1e8) }} will not further increase the multiplier.
|
Any 8th Time Dimensions purchased above {{ format(1e8) }} will not further increase the multiplier.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -17,7 +17,8 @@ export default {
|
|||||||
upgradeThreshold: new Decimal(0),
|
upgradeThreshold: new Decimal(0),
|
||||||
shardsPerSecond: new Decimal(0),
|
shardsPerSecond: new Decimal(0),
|
||||||
incomeType: "",
|
incomeType: "",
|
||||||
areAutobuyersUnlocked: false
|
areAutobuyersUnlocked: false,
|
||||||
|
showLockedDimCostNote: true,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -25,6 +26,7 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
|
this.showLockedDimCostNote = !TimeDimension(8).isUnlocked && player.realities >= 1;
|
||||||
this.totalUpgrades = player.totalTickGained;
|
this.totalUpgrades = player.totalTickGained;
|
||||||
this.multPerTickspeed = FreeTickspeed.multToNext;
|
this.multPerTickspeed = FreeTickspeed.multToNext;
|
||||||
this.tickspeedSoftcap = FreeTickspeed.softcap;
|
this.tickspeedSoftcap = FreeTickspeed.softcap;
|
||||||
@ -94,7 +96,10 @@ export default {
|
|||||||
<br>
|
<br>
|
||||||
and costs increase much faster after {{ format(costIncreases[2]) }} Eternity Points.
|
and costs increase much faster after {{ format(costIncreases[2]) }} Eternity Points.
|
||||||
<br>
|
<br>
|
||||||
Hold shift to see the Eternity Point cost for locked Time Dimensions.
|
<div v-if="showLockedDimCostNote">
|
||||||
|
Hold shift to see the Eternity Point cost for locked Time Dimensions.
|
||||||
|
</div>
|
||||||
|
Any 8th Time Dimensions purchased above {{ format(1e8) }} will not further increase the multiplier.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -14,23 +14,23 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isLimitedByPelle: false
|
isLocked: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
isEnabled() {
|
isEnabled() {
|
||||||
if (this.isLimitedByPelle) return false;
|
if (this.isLocked) return false;
|
||||||
return this.budget.gte(this.cost);
|
return this.budget.gte(this.cost);
|
||||||
},
|
},
|
||||||
enabledClass() {
|
enabledClass() {
|
||||||
if (!this.isEnabled || this.isLimitedByPelle) return "c-tt-buy-button--locked";
|
if (!this.isEnabled || this.isLocked) return "c-tt-buy-button--locked";
|
||||||
|
|
||||||
return "c-tt-buy-button--unlocked";
|
return "c-tt-buy-button--unlocked";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
this.isLimitedByPelle = Pelle.isDoomed && player.eternities.eq(0);
|
this.isLocked = player.eternities.eq(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -42,6 +42,6 @@ export default {
|
|||||||
:class="enabledClass"
|
:class="enabledClass"
|
||||||
@click="action"
|
@click="action"
|
||||||
>
|
>
|
||||||
{{ isLimitedByPelle ? "Requires Eternity to unlock" : formatCost(cost) }}
|
{{ isLocked ? "Requires Eternity to unlock" : formatCost(cost) }}
|
||||||
</button>
|
</button>
|
||||||
</template>
|
</template>
|
71
src/components/ui-modes/BigCrunchButton.vue
Normal file
71
src/components/ui-modes/BigCrunchButton.vue
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "BigCrunchButton",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isModern: false,
|
||||||
|
smallCrunch: false,
|
||||||
|
shouldDisplay: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
update() {
|
||||||
|
this.shouldDisplay = !player.break && Player.canCrunch;
|
||||||
|
if (!this.shouldDisplay) return;
|
||||||
|
this.isModern = player.options.newUI;
|
||||||
|
this.smallCrunch = Time.bestInfinityRealTime.totalMinutes <= 1;
|
||||||
|
},
|
||||||
|
handleClick() {
|
||||||
|
if (PlayerProgress.infinityUnlocked()) bigCrunchResetRequest();
|
||||||
|
else Modal.bigCrunch.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<span v-if="shouldDisplay">
|
||||||
|
<div v-if="isModern">
|
||||||
|
<h3
|
||||||
|
v-if="!smallCrunch"
|
||||||
|
class="l-spacing"
|
||||||
|
>
|
||||||
|
The world has collapsed due to excess antimatter.
|
||||||
|
</h3>
|
||||||
|
<button
|
||||||
|
:class="{
|
||||||
|
'btn-big-crunch': true,
|
||||||
|
'btn-big-crunch--small': smallCrunch
|
||||||
|
}"
|
||||||
|
@click="handleClick"
|
||||||
|
>
|
||||||
|
Big Crunch
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<button
|
||||||
|
:class="{
|
||||||
|
'o-tab-btn': true,
|
||||||
|
'o-big-crunch-btn': true,
|
||||||
|
'l-old-ui__big-crunch-btn': true,
|
||||||
|
'l-old-ui__big-crunch-btn--overlay': smallCrunch
|
||||||
|
}"
|
||||||
|
@click="handleClick"
|
||||||
|
>
|
||||||
|
Big Crunch
|
||||||
|
</button>
|
||||||
|
<div
|
||||||
|
v-if="!smallCrunch"
|
||||||
|
class="o-emptiness"
|
||||||
|
>
|
||||||
|
The world has collapsed due to excess of antimatter.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.l-spacing {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
</style>
|
@ -1,7 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
import HeaderBlackHole from "./HeaderBlackHole";
|
||||||
import HeaderChallengeDisplay from "./HeaderChallengeDisplay";
|
import HeaderChallengeDisplay from "./HeaderChallengeDisplay";
|
||||||
import HeaderChallengeEffects from "./HeaderChallengeEffects";
|
import HeaderChallengeEffects from "./HeaderChallengeEffects";
|
||||||
import HeaderGameSpeed from "./HeaderGameSpeed";
|
|
||||||
import HeaderPrestigeGroup from "./HeaderPrestigeGroup";
|
import HeaderPrestigeGroup from "./HeaderPrestigeGroup";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@ -9,7 +9,7 @@ export default {
|
|||||||
components: {
|
components: {
|
||||||
HeaderChallengeDisplay,
|
HeaderChallengeDisplay,
|
||||||
HeaderChallengeEffects,
|
HeaderChallengeEffects,
|
||||||
HeaderGameSpeed,
|
HeaderBlackHole,
|
||||||
HeaderPrestigeGroup,
|
HeaderPrestigeGroup,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -20,7 +20,7 @@ export default {
|
|||||||
<HeaderChallengeDisplay />
|
<HeaderChallengeDisplay />
|
||||||
<HeaderChallengeEffects />
|
<HeaderChallengeEffects />
|
||||||
<HeaderPrestigeGroup />
|
<HeaderPrestigeGroup />
|
||||||
<HeaderGameSpeed />
|
<HeaderBlackHole />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
<script>
|
|
||||||
import GameSpeedDisplay from "../GameSpeedDisplay";
|
|
||||||
|
|
||||||
import HeaderBlackHole from "./HeaderBlackHole";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "HeaderGameSpeed",
|
|
||||||
components: {
|
|
||||||
GameSpeedDisplay,
|
|
||||||
HeaderBlackHole
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
showSpeed: false,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
update() {
|
|
||||||
const ec12 = EternityChallenge(12);
|
|
||||||
const hasSeenAlteredSpeed = PlayerProgress.realityUnlocked() || ec12.completions > 0 || ec12.isRunning;
|
|
||||||
const hasRealityButton = PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought;
|
|
||||||
// This is additionally shown in a different place on Modern, so we hide it to prevent showing it twice
|
|
||||||
this.showSpeed = hasRealityButton || (hasSeenAlteredSpeed && !player.options.newUI);
|
|
||||||
},
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<span>
|
|
||||||
<GameSpeedDisplay v-if="showSpeed" />
|
|
||||||
<br>
|
|
||||||
<HeaderBlackHole />
|
|
||||||
</span>
|
|
||||||
</template>
|
|
@ -2,7 +2,7 @@
|
|||||||
import GameSpeedDisplay from "@/components/GameSpeedDisplay";
|
import GameSpeedDisplay from "@/components/GameSpeedDisplay";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "HeaderTickspeedRowModern",
|
name: "HeaderTickspeedInfo",
|
||||||
components: {
|
components: {
|
||||||
GameSpeedDisplay
|
GameSpeedDisplay
|
||||||
},
|
},
|
||||||
@ -11,23 +11,27 @@ export default {
|
|||||||
mult: new Decimal(0),
|
mult: new Decimal(0),
|
||||||
tickspeed: new Decimal(0),
|
tickspeed: new Decimal(0),
|
||||||
galaxyCount: 0,
|
galaxyCount: 0,
|
||||||
|
purchasedTickspeed: 0,
|
||||||
|
freeTickspeed: 0,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
tickspeedDisplay() {
|
tickspeedDisplay() {
|
||||||
return `AD Tickspeed: ${format(this.tickspeed, 2, 3)} / sec`;
|
return `Total Tickspeed: ${format(this.tickspeed, 2, 3)} / sec`;
|
||||||
},
|
},
|
||||||
perUpgrade() {
|
perUpgrade() {
|
||||||
if (InfinityChallenge(3).isRunning) return `Tickspeed upgrades give
|
if (InfinityChallenge(3).isRunning) return `Tickspeed upgrades give
|
||||||
${formatX(1.05 + this.galaxyCount * 0.005, 3, 3)} to all ADs`;
|
${formatX(1.05 + this.galaxyCount * 0.005, 3, 3)} to all ADs`;
|
||||||
return `${formatX(this.mult.reciprocal(), 2, 3)} faster per upgrade`;
|
return `ADs produce ${formatX(this.mult.reciprocal(), 2, 3)} faster per Tickspeed upgrade`;
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
this.mult.copyFrom(Tickspeed.multiplier);
|
this.mult.copyFrom(Tickspeed.multiplier);
|
||||||
this.tickspeed.copyFrom(Tickspeed.perSecond);
|
this.tickspeed.copyFrom(Tickspeed.perSecond);
|
||||||
this.galaxyCount = player.galaxies;
|
this.galaxyCount = player.galaxies;
|
||||||
|
this.purchasedTickspeed = player.totalTickBought;
|
||||||
|
this.freeTickspeed = FreeTickspeed.amount;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -35,11 +39,11 @@ export default {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<br>
|
|
||||||
{{ tickspeedDisplay }}
|
|
||||||
<br>
|
<br>
|
||||||
{{ perUpgrade }}
|
{{ perUpgrade }}
|
||||||
<br>
|
<br>
|
||||||
|
{{ tickspeedDisplay }}
|
||||||
|
<br>
|
||||||
<GameSpeedDisplay />
|
<GameSpeedDisplay />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
@ -1,146 +0,0 @@
|
|||||||
<script>
|
|
||||||
import PrimaryButton from "@/components/PrimaryButton";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "HeaderTickspeedRowClassic",
|
|
||||||
components: {
|
|
||||||
PrimaryButton,
|
|
||||||
},
|
|
||||||
props: {
|
|
||||||
inHeader: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: true,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
purchasedTickspeed: 0,
|
|
||||||
freeTickspeed: 0,
|
|
||||||
isVisible: false,
|
|
||||||
mult: new Decimal(0),
|
|
||||||
cost: new Decimal(0),
|
|
||||||
isAffordable: false,
|
|
||||||
tickspeed: new Decimal(0),
|
|
||||||
galaxyCount: 0,
|
|
||||||
isContinuumActive: false,
|
|
||||||
continuumValue: 0,
|
|
||||||
hasTutorial: false,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
classObject() {
|
|
||||||
return {
|
|
||||||
"c-game-header__tickspeed-row": true,
|
|
||||||
"c-game-header__tickspeed-row--hidden": !this.isVisible,
|
|
||||||
"l-inline-padding": !this.inHeader
|
|
||||||
};
|
|
||||||
},
|
|
||||||
multiplierDisplay() {
|
|
||||||
if (InfinityChallenge(3).isRunning) return `Multiply all Antimatter Dimensions by
|
|
||||||
${formatX(1.05 + this.galaxyCount * 0.005, 3, 3)}`;
|
|
||||||
const tickmult = this.mult;
|
|
||||||
return `${formatX(tickmult.reciprocal(), 2, 3)} faster / upgrade`;
|
|
||||||
},
|
|
||||||
tickspeedDisplay() {
|
|
||||||
return `Tickspeed: ${format(this.tickspeed, 2, 3)} / sec`;
|
|
||||||
},
|
|
||||||
continuumString() {
|
|
||||||
return formatFloat(this.continuumValue, 2);
|
|
||||||
},
|
|
||||||
upgradeCount() {
|
|
||||||
const purchased = this.purchasedTickspeed;
|
|
||||||
if (!this.freeTickspeed) return `${formatInt(purchased)} Purchased`;
|
|
||||||
if (purchased === 0 || this.isContinuumActive) return `${formatInt(this.freeTickspeed)} Free Upgrades`;
|
|
||||||
return `${formatInt(purchased)} Purchased + ${formatInt(this.freeTickspeed)} Free`;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
update() {
|
|
||||||
this.purchasedTickspeed = player.totalTickBought;
|
|
||||||
this.freeTickspeed = FreeTickspeed.amount;
|
|
||||||
const isEC9Running = EternityChallenge(9).isRunning;
|
|
||||||
this.isVisible = Tickspeed.isUnlocked || isEC9Running;
|
|
||||||
if (!this.isVisible) return;
|
|
||||||
this.mult.copyFrom(Tickspeed.multiplier);
|
|
||||||
this.cost.copyFrom(Tickspeed.cost);
|
|
||||||
this.isAffordable = !isEC9Running && canAfford(Tickspeed.cost);
|
|
||||||
this.tickspeed.copyFrom(Tickspeed.perSecond);
|
|
||||||
this.galaxyCount = player.galaxies;
|
|
||||||
this.isContinuumActive = Laitela.continuumActive;
|
|
||||||
if (this.isContinuumActive) this.continuumValue = Tickspeed.continuumValue;
|
|
||||||
this.hasTutorial = Tutorial.isActive(TUTORIAL_STATE.TICKSPEED);
|
|
||||||
},
|
|
||||||
buttonClass() {
|
|
||||||
return {
|
|
||||||
"l-long-button": !this.inHeader,
|
|
||||||
"o-primary-btn--tickspeed": true,
|
|
||||||
"o-continuum": this.isContinuumActive,
|
|
||||||
"tutorial--glow": this.isAffordable && this.hasTutorial
|
|
||||||
};
|
|
||||||
},
|
|
||||||
buyUpgrade() {
|
|
||||||
if (!buyTickSpeed()) return;
|
|
||||||
Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div :class="classObject">
|
|
||||||
<div v-if="inHeader">
|
|
||||||
{{ multiplierDisplay }}
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<PrimaryButton
|
|
||||||
v-tooltip="upgradeCount"
|
|
||||||
:enabled="isAffordable || isContinuumActive"
|
|
||||||
:class="buttonClass()"
|
|
||||||
@click="buyUpgrade"
|
|
||||||
>
|
|
||||||
<span v-if="!inHeader">Tickspeed </span>
|
|
||||||
<span v-if="isContinuumActive">Continuum: {{ continuumString }}</span>
|
|
||||||
<span v-else>Cost: {{ format(cost) }}</span>
|
|
||||||
<div
|
|
||||||
v-if="hasTutorial"
|
|
||||||
class="fas fa-circle-exclamation l-notification-icon"
|
|
||||||
/>
|
|
||||||
</PrimaryButton>
|
|
||||||
<PrimaryButton
|
|
||||||
v-if="!isContinuumActive"
|
|
||||||
:enabled="isAffordable"
|
|
||||||
class="o-primary-btn--buy-max"
|
|
||||||
onclick="buyMaxTickSpeed()"
|
|
||||||
>
|
|
||||||
Buy Max
|
|
||||||
</PrimaryButton>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{ tickspeedDisplay }} <span v-if="!inHeader">({{ multiplierDisplay }})</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.o-primary-btn--tickspeed {
|
|
||||||
width: 17rem;
|
|
||||||
position: relative;
|
|
||||||
font-size: 1.2rem;
|
|
||||||
margin-right: 0.4rem;
|
|
||||||
transition: width 0s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.o-continuum {
|
|
||||||
transition: width 0s;
|
|
||||||
cursor: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.l-inline-padding {
|
|
||||||
padding-top: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.l-long-button {
|
|
||||||
width: 30rem;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,24 +0,0 @@
|
|||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: "ClassicBigCrunchButton",
|
|
||||||
methods: {
|
|
||||||
handleClick() {
|
|
||||||
if (PlayerProgress.infinityUnlocked()) bigCrunchResetRequest();
|
|
||||||
else Modal.bigCrunch.show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<button
|
|
||||||
class="o-tab-btn o-big-crunch-btn"
|
|
||||||
@click="handleClick"
|
|
||||||
>
|
|
||||||
Big Crunch
|
|
||||||
</button>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
@ -1,8 +1,9 @@
|
|||||||
<script>
|
<script>
|
||||||
|
import BigCrunchButton from "../BigCrunchButton";
|
||||||
import GameHeader from "../GameHeader";
|
import GameHeader from "../GameHeader";
|
||||||
import NewsTicker from "../NewsTicker";
|
import NewsTicker from "../NewsTicker";
|
||||||
|
|
||||||
import ClassicBigCrunchButton from "./ClassicBigCrunchButton";
|
|
||||||
import ClassicSubtabBar from "./ClassicSubtabBar";
|
import ClassicSubtabBar from "./ClassicSubtabBar";
|
||||||
import ClassicTabBar from "./ClassicTabBar";
|
import ClassicTabBar from "./ClassicTabBar";
|
||||||
import EternityPointsHeader from "@/components/EternityPointsHeader";
|
import EternityPointsHeader from "@/components/EternityPointsHeader";
|
||||||
@ -12,12 +13,12 @@ export default {
|
|||||||
name: "ClassicUi",
|
name: "ClassicUi",
|
||||||
components: {
|
components: {
|
||||||
GameHeader,
|
GameHeader,
|
||||||
ClassicBigCrunchButton,
|
|
||||||
ClassicSubtabBar,
|
ClassicSubtabBar,
|
||||||
ClassicTabBar,
|
ClassicTabBar,
|
||||||
NewsTicker,
|
NewsTicker,
|
||||||
InfinityPointsHeader,
|
InfinityPointsHeader,
|
||||||
EternityPointsHeader
|
EternityPointsHeader,
|
||||||
|
BigCrunchButton
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -34,9 +35,7 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
const crunchButtonVisible = !player.break && Player.canCrunch;
|
const crunchButtonVisible = !player.break && Player.canCrunch;
|
||||||
const reachedInfinityInMinute = Time.bestInfinityRealTime.totalMinutes <= 1;
|
this.bigCrunch = crunchButtonVisible && Time.bestInfinityRealTime.totalMinutes > 1;
|
||||||
this.bigCrunch = crunchButtonVisible && !reachedInfinityInMinute;
|
|
||||||
this.smallCrunch = crunchButtonVisible && reachedInfinityInMinute;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -52,13 +51,8 @@ export default {
|
|||||||
type="text/css"
|
type="text/css"
|
||||||
href="stylesheets/old-ui.css"
|
href="stylesheets/old-ui.css"
|
||||||
>
|
>
|
||||||
<template v-if="bigCrunch">
|
<BigCrunchButton />
|
||||||
<ClassicBigCrunchButton class="l-old-ui__big-crunch-btn" />
|
<template v-if="!bigCrunch">
|
||||||
<div class="o-emptiness">
|
|
||||||
The world has collapsed due to excess of antimatter.
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
<NewsTicker
|
<NewsTicker
|
||||||
v-if="news"
|
v-if="news"
|
||||||
class="l-old-ui__news-bar"
|
class="l-old-ui__news-bar"
|
||||||
@ -70,10 +64,6 @@ export default {
|
|||||||
v-if="tab.config.before"
|
v-if="tab.config.before"
|
||||||
/>
|
/>
|
||||||
<ClassicSubtabBar />
|
<ClassicSubtabBar />
|
||||||
<ClassicBigCrunchButton
|
|
||||||
v-show="smallCrunch"
|
|
||||||
class="l-old-ui__big-crunch-btn l-old-ui__big-crunch-btn--overlay"
|
|
||||||
/>
|
|
||||||
<div class="l-old-ui__page">
|
<div class="l-old-ui__page">
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
<script>
|
<script>
|
||||||
|
import BigCrunchButton from "../BigCrunchButton";
|
||||||
|
import HeaderBlackHole from "../HeaderBlackHole";
|
||||||
import HeaderChallengeDisplay from "../HeaderChallengeDisplay";
|
import HeaderChallengeDisplay from "../HeaderChallengeDisplay";
|
||||||
import HeaderChallengeEffects from "../HeaderChallengeEffects";
|
import HeaderChallengeEffects from "../HeaderChallengeEffects";
|
||||||
import HeaderGameSpeed from "../HeaderGameSpeed";
|
|
||||||
import HeaderPrestigeGroup from "../HeaderPrestigeGroup";
|
import HeaderPrestigeGroup from "../HeaderPrestigeGroup";
|
||||||
import NewsTicker from "../NewsTicker";
|
import NewsTicker from "../NewsTicker";
|
||||||
|
|
||||||
@ -9,16 +10,16 @@ import NewsTicker from "../NewsTicker";
|
|||||||
export default {
|
export default {
|
||||||
name: "ModernUi",
|
name: "ModernUi",
|
||||||
components: {
|
components: {
|
||||||
|
BigCrunchButton,
|
||||||
HeaderChallengeDisplay,
|
HeaderChallengeDisplay,
|
||||||
HeaderChallengeEffects,
|
HeaderChallengeEffects,
|
||||||
NewsTicker,
|
NewsTicker,
|
||||||
HeaderGameSpeed,
|
HeaderBlackHole,
|
||||||
HeaderPrestigeGroup
|
HeaderPrestigeGroup
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
bigCrunch: false,
|
bigCrunch: false
|
||||||
smallCrunch: false,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -32,12 +33,10 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
const crunchButtonVisible = !player.break && Player.canCrunch;
|
const crunchButtonVisible = !player.break && Player.canCrunch;
|
||||||
const reachedInfinityInMinute = Time.bestInfinityRealTime.totalMinutes <= 1;
|
this.bigCrunch = crunchButtonVisible && Time.bestInfinityRealTime.totalMinutes > 1;
|
||||||
this.bigCrunch = crunchButtonVisible && !reachedInfinityInMinute;
|
|
||||||
this.smallCrunch = crunchButtonVisible && reachedInfinityInMinute;
|
|
||||||
},
|
},
|
||||||
handleClick() {
|
handleClick() {
|
||||||
if (PlayerProgress.infinityUnlocked()) bigCrunchResetRequest();
|
if (PlayerProgress.infinityUnlocked()) manualBigCrunchResetRequest();
|
||||||
else Modal.bigCrunch.show();
|
else Modal.bigCrunch.show();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -56,35 +55,17 @@ export default {
|
|||||||
:style="topMargin"
|
:style="topMargin"
|
||||||
>
|
>
|
||||||
<NewsTicker v-if="news" />
|
<NewsTicker v-if="news" />
|
||||||
|
<BigCrunchButton />
|
||||||
<div
|
<div
|
||||||
v-if="bigCrunch"
|
v-if="!bigCrunch"
|
||||||
class="l-new-ui-big-crunch__container"
|
|
||||||
>
|
|
||||||
<h3>The world has collapsed due to excess antimatter.</h3>
|
|
||||||
<button
|
|
||||||
class="btn-big-crunch"
|
|
||||||
@click="handleClick"
|
|
||||||
>
|
|
||||||
Big Crunch
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
v-else
|
|
||||||
class="tab-container"
|
class="tab-container"
|
||||||
>
|
>
|
||||||
<HeaderPrestigeGroup />
|
<HeaderPrestigeGroup />
|
||||||
<div class="information-header">
|
<div class="information-header">
|
||||||
<HeaderChallengeDisplay />
|
<HeaderChallengeDisplay />
|
||||||
<HeaderChallengeEffects />
|
<HeaderChallengeEffects />
|
||||||
<HeaderGameSpeed />
|
<HeaderBlackHole />
|
||||||
</div>
|
</div>
|
||||||
<button
|
|
||||||
v-if="smallCrunch && !bigCrunch"
|
|
||||||
class="btn-big-crunch btn-big-crunch--small"
|
|
||||||
onclick="bigCrunchResetRequest()"
|
|
||||||
>
|
|
||||||
Big Crunch
|
|
||||||
</button>
|
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
import ArmageddonButton from "../../tabs/celestial-pelle/ArmageddonButton";
|
import ArmageddonButton from "../../tabs/celestial-pelle/ArmageddonButton";
|
||||||
import RealityCurrencyHeader from "../../RealityCurrencyHeader";
|
import RealityCurrencyHeader from "../../RealityCurrencyHeader";
|
||||||
|
|
||||||
import HeaderTickspeedRowClassic from "../HeaderTickspeedRowClassic";
|
import HeaderTickspeedInfo from "../HeaderTickspeedInfo";
|
||||||
import HeaderTickspeedRowModern from "../HeaderTickspeedRowModern";
|
|
||||||
|
|
||||||
import RealityButton from "./RealityButton";
|
import RealityButton from "./RealityButton";
|
||||||
|
|
||||||
@ -13,14 +12,14 @@ import RealityButton from "./RealityButton";
|
|||||||
export default {
|
export default {
|
||||||
name: "HeaderCenterContainer",
|
name: "HeaderCenterContainer",
|
||||||
components: {
|
components: {
|
||||||
HeaderTickspeedRowClassic,
|
HeaderTickspeedInfo,
|
||||||
HeaderTickspeedRowModern,
|
|
||||||
RealityCurrencyHeader,
|
RealityCurrencyHeader,
|
||||||
RealityButton,
|
RealityButton,
|
||||||
ArmageddonButton,
|
ArmageddonButton,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
shouldDisplay: true,
|
||||||
isModern: false,
|
isModern: false,
|
||||||
hasRealityButton: false,
|
hasRealityButton: false,
|
||||||
isDoomed: false,
|
isDoomed: false,
|
||||||
@ -30,6 +29,9 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
|
this.shouldDisplay = player.break || !Player.canCrunch;
|
||||||
|
if (!this.shouldDisplay) return;
|
||||||
|
|
||||||
this.isModern = player.options.newUI;
|
this.isModern = player.options.newUI;
|
||||||
this.isDoomed = Pelle.isDoomed;
|
this.isDoomed = Pelle.isDoomed;
|
||||||
this.antimatter.copyFrom(Currency.antimatter);
|
this.antimatter.copyFrom(Currency.antimatter);
|
||||||
@ -41,7 +43,10 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="c-prestige-button-container">
|
<div
|
||||||
|
v-if="shouldDisplay"
|
||||||
|
class="c-prestige-button-container"
|
||||||
|
>
|
||||||
<span>You have <span class="c-game-header__antimatter">{{ format(antimatter, 2, 1) }}</span> antimatter.</span>
|
<span>You have <span class="c-game-header__antimatter">{{ format(antimatter, 2, 1) }}</span> antimatter.</span>
|
||||||
<div
|
<div
|
||||||
v-if="hasRealityButton"
|
v-if="hasRealityButton"
|
||||||
@ -57,8 +62,7 @@ export default {
|
|||||||
<div v-else>
|
<div v-else>
|
||||||
You are getting {{ format(antimatterPerSec, 2) }} antimatter per second.
|
You are getting {{ format(antimatterPerSec, 2) }} antimatter per second.
|
||||||
<br>
|
<br>
|
||||||
<HeaderTickspeedRowModern v-if="isModern" />
|
<HeaderTickspeedInfo />
|
||||||
<HeaderTickspeedRowClassic v-else />
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -26,7 +26,7 @@ export default {
|
|||||||
},
|
},
|
||||||
formatMachineStats() {
|
formatMachineStats() {
|
||||||
if (!PlayerProgress.realityUnlocked() && this.nextMachineEP.gt("1e8000")) {
|
if (!PlayerProgress.realityUnlocked() && this.nextMachineEP.gt("1e8000")) {
|
||||||
return `(RM this Reality is capped!)`;
|
return `(Capped this Reality!)`;
|
||||||
}
|
}
|
||||||
if (this.machinesGained.gt(0) && this.machinesGained.lt(100)) {
|
if (this.machinesGained.gt(0) && this.machinesGained.lt(100)) {
|
||||||
return `(Next at ${format(this.nextMachineEP, 2)} EP)`;
|
return `(Next at ${format(this.nextMachineEP, 2)} EP)`;
|
||||||
|
Loading…
Reference in New Issue
Block a user