mirror of
https://github.com/IvarK/AntimatterDimensionsSourceCode.git
synced 2024-11-25 05:32:17 +00:00
Merge branch 'master' into Steam-Webpack
This commit is contained in:
commit
3c1da85c00
@ -11,6 +11,11 @@ function handleChallengeCompletion() {
|
||||
NormalChallenge(1).complete();
|
||||
}
|
||||
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.updateChallengeTime();
|
||||
if (!player.options.retryChallenge) {
|
||||
@ -22,9 +27,7 @@ function handleChallengeCompletion() {
|
||||
export function manualBigCrunchResetRequest() {
|
||||
if (!Player.canCrunch) return;
|
||||
if (GameEnd.creditsEverClosed) return;
|
||||
// Before the player has broken infinity, the confirmation modal should never be shown
|
||||
if ((player.break || PlayerProgress.eternityUnlocked()) &&
|
||||
player.options.confirmations.bigCrunch) {
|
||||
if (player.options.confirmations.bigCrunch) {
|
||||
Modal.bigCrunch.show();
|
||||
} else {
|
||||
bigCrunchResetRequest();
|
||||
|
@ -120,7 +120,7 @@ export const Pelle = {
|
||||
},
|
||||
|
||||
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];
|
||||
},
|
||||
|
||||
|
@ -55,7 +55,7 @@ export const DC = deepFreeze({
|
||||
D2E5: new Decimal("2e5"),
|
||||
D2E6: new Decimal("2e6"),
|
||||
D5E7: new Decimal("5e7"),
|
||||
D5E9: new Decimal("5e9"),
|
||||
D2E9: new Decimal("2e9"),
|
||||
D2E25: new Decimal("2e25"),
|
||||
D2E22222: new Decimal("2e22222"),
|
||||
D9_99999E999: new Decimal("9.99999e999"),
|
||||
|
@ -116,7 +116,7 @@ export function getDilationGainPerSecond() {
|
||||
return new Decimal(tachyonEffect)
|
||||
.timesEffectsOf(DilationUpgrade.dtGain, DilationUpgrade.dtGainPelle, DilationUpgrade.flatDilationMult)
|
||||
.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)
|
||||
.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
|
||||
// act dynamically on this fixed base value elsewhere solves that issue
|
||||
export function getBaseTP(antimatter) {
|
||||
if (!Player.canEternity) return DC.D0;
|
||||
const am = (isInCelestialReality() || Pelle.isDoomed)
|
||||
? antimatter
|
||||
: Ra.unlocks.unlockDilationStartingTP.effectOrDefault(antimatter);
|
||||
|
@ -163,6 +163,14 @@ export class DimBoost {
|
||||
static get totalBoosts() {
|
||||
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) {
|
||||
|
@ -35,11 +35,11 @@ export function toggleAllTimeDims() {
|
||||
}
|
||||
}
|
||||
|
||||
export function buyMaxTimeDimension(tier) {
|
||||
export function buyMaxTimeDimension(tier, eternityPoints = Currency.eternityPoints.value) {
|
||||
const dim = TimeDimension(tier);
|
||||
if (tier > 4 && !TimeStudy.timeDimension(tier).isBought) return false;
|
||||
if (Enslaved.isRunning) return buySingleTimeDimension(tier);
|
||||
const bulk = bulkBuyBinarySearch(Currency.eternityPoints.value, {
|
||||
const bulk = bulkBuyBinarySearch(eternityPoints, {
|
||||
costFunction: bought => dim.nextCost(bought),
|
||||
cumulative: true,
|
||||
firstCost: dim.cost,
|
||||
@ -52,33 +52,23 @@ export function buyMaxTimeDimension(tier) {
|
||||
return true;
|
||||
}
|
||||
|
||||
export function maxAllTimeDimensions(checkAutobuyers = false) {
|
||||
// Default behavior: Buy as many as possible, starting with the highest dimension first
|
||||
// (reduces overhead at higher EP)
|
||||
if (Currency.eternityPoints.exponent >= 10) {
|
||||
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);
|
||||
}
|
||||
export function maxAllTimeDimensions() {
|
||||
// Try to buy single from the highest affordable new dimensions
|
||||
for (let i = 8; i > 0 && TimeDimension(i).bought === 0; i--) {
|
||||
buySingleTimeDimension(i);
|
||||
}
|
||||
|
||||
// Should never take more than like 50 iterations; explicit infinite loops make me nervous
|
||||
for (let stop = 0; stop < 1000; stop++) {
|
||||
let cheapestDim = 0;
|
||||
let cheapestCost = 1e10;
|
||||
for (let i = 1; i <= 4; i++) {
|
||||
if (TimeDimension(i).cost.lte(cheapestCost) && (!checkAutobuyers || Autobuyer.timeDimension(i).isActive)) {
|
||||
cheapestDim = i;
|
||||
cheapestCost = TimeDimension(i).cost;
|
||||
}
|
||||
}
|
||||
let bought = false;
|
||||
if (cheapestDim !== 0 && Currency.eternityPoints.gte(cheapestCost)) bought = buySingleTimeDimension(cheapestDim);
|
||||
if (!bought) break;
|
||||
}
|
||||
// Buy everything costing less than 1% of initial EP
|
||||
const eternityPoints = Currency.eternityPoints.value.times(0.01);
|
||||
for (let i = 8; i > 0; i--) {
|
||||
buyMaxTimeDimension(i, eternityPoints);
|
||||
}
|
||||
|
||||
// Loop buying the cheapest dimension possible; explicit infinite loops make me nervous
|
||||
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));
|
||||
if (!buySingleTimeDimension(cheapestDim.tier)) break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,9 +6,7 @@ function giveEternityRewards(auto) {
|
||||
player.records.bestEternity.time = Math.min(player.records.thisEternity.time, player.records.bestEternity.time);
|
||||
Currency.eternityPoints.add(gainedEternityPoints());
|
||||
|
||||
const newEternities = Pelle.isDisabled("eternityMults")
|
||||
? new Decimal(1)
|
||||
: new Decimal(getAdjustedGlyphEffect("timeetermult")).timesEffectsOf(RealityUpgrade(3), Achievement(113));
|
||||
const newEternities = gainedEternities();
|
||||
|
||||
if (Currency.eternities.eq(0) && newEternities.lte(10)) {
|
||||
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 {
|
||||
constructor(config) {
|
||||
this.config = config;
|
||||
|
@ -296,9 +296,12 @@ GameKeyboard.bindHotkey("alt+y", () => toggleAutobuyer(Autobuyer.reality));
|
||||
(function() {
|
||||
function bindDimensionHotkeys(tier) {
|
||||
GameKeyboard.bindRepeatableHotkey(`${tier}`, () => buyManyDimension(tier));
|
||||
GameKeyboard.bindRepeatableHotkey(`num${tier}`, () => buyManyDimension(tier));
|
||||
GameKeyboard.bindRepeatableHotkey(`shift+${tier}`, () => buyOneDimension(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+num${tier}`, () => toggleBuySingles(Autobuyer.antimatterDimension(tier)));
|
||||
}
|
||||
for (let i = 1; i < 9; i++) bindDimensionHotkeys(i);
|
||||
}());
|
||||
|
@ -50,10 +50,14 @@ class ImaginaryUpgradeState extends BitPurchasableMechanicState {
|
||||
if (this.id >= 15 && this.id <= 18) {
|
||||
DarkMatterDimension(this.id - 14).amount = DC.D1;
|
||||
Tab.celestials.laitela.show();
|
||||
if (this.id === 17) Laitela.quotes.thirdDMD.show();
|
||||
}
|
||||
if (this.id === 19) {
|
||||
Tab.celestials.laitela.show();
|
||||
}
|
||||
if (this.id === 21) {
|
||||
Laitela.quotes.finalRowIM.show();
|
||||
}
|
||||
if (this.id === 22) {
|
||||
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 (value.lt(ic.unlockAM)) break;
|
||||
// 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
|
||||
GameUI.notify.infinity(`You have unlocked Infinity Challenge ${ic.id}`, 300000);
|
||||
// we also give it a tab notification
|
||||
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";
|
||||
|
||||
// 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 {
|
||||
constructor(key, action) {
|
||||
this.key = key;
|
||||
|
@ -919,9 +919,9 @@ GameDatabase.achievements.normal = [
|
||||
{
|
||||
id: 131,
|
||||
name: "No ethical consumption",
|
||||
get description() { return `Get ${format(DC.D5E9)} Banked Infinities.`; },
|
||||
checkRequirement: () => Currency.infinitiesBanked.gt(DC.D5E9),
|
||||
checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,
|
||||
get description() { return `Get ${format(DC.D2E9)} Banked Infinities.`; },
|
||||
checkRequirement: () => Currency.infinitiesBanked.gt(DC.D2E9),
|
||||
checkEvent: [GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION],
|
||||
get reward() {
|
||||
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,
|
||||
checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,
|
||||
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)}`
|
||||
},
|
||||
{
|
||||
@ -1139,7 +1139,8 @@ GameDatabase.achievements.normal = [
|
||||
description: "Reality without buying Time Theorems.",
|
||||
checkRequirement: () => player.requirementChecks.reality.noPurchasedTT,
|
||||
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,
|
||||
|
@ -5,75 +5,83 @@ GameDatabase.celestials.quotes.laitela = {
|
||||
id: 0,
|
||||
lines: [
|
||||
"You finally reached me.",
|
||||
"I guess it is time to reveal to you,",
|
||||
"The secrets hidden beneath existence.",
|
||||
"The omnipresent ruling perfection. Continuum.",
|
||||
"And the binding keys to the multiverse,",
|
||||
"I guess it is time to reveal,",
|
||||
"The secrets hidden beneath existence itself.",
|
||||
"The shape of dimensional perfection, Continuum.",
|
||||
"And the powers that bind the Multiverse,",
|
||||
"Dark Matter and Dark Energy.",
|
||||
"My knowledge is endless and my wisdom divine.",
|
||||
"So you can play around all you want.",
|
||||
"I am Lai'tela, the Celestial of Dimensions,",
|
||||
"And I will be watching you forever.",
|
||||
"For I am Lai'tela, the Celestial of Dimensions,",
|
||||
"And I shall watch you forever.",
|
||||
]
|
||||
},
|
||||
// Note: This can be done immediately after unlocking Lai'tela
|
||||
firstDestabilize: {
|
||||
id: 1,
|
||||
requirement: () => player.celestials.laitela.difficultyTier >= 1,
|
||||
lines: [
|
||||
"It is fine. Unlike the others, I never had a Reality.",
|
||||
"I built this one just now, precisely so it would collapse.",
|
||||
"I can rebuild this Reality over and over, unlike them.",
|
||||
"I could trap all of them if I wanted.",
|
||||
"Unlike the others beneath me, I have no need for a Reality.",
|
||||
"For I can simply create them, knowing full well it will collapse.",
|
||||
"A power more incredible than any other, to build a Reality.",
|
||||
"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.",
|
||||
]
|
||||
},
|
||||
firstSingularity: {
|
||||
// Note: This happens about an hour or two before singularities
|
||||
secondDestabilize: {
|
||||
id: 2,
|
||||
requirement: () => Currency.singularities.gte(1),
|
||||
requirement: () => player.celestials.laitela.difficultyTier >= 2,
|
||||
lines: [
|
||||
"It is weird, how all beings question things.",
|
||||
"You are different. You can build and manipulate Dimensions.",
|
||||
"Were you truly once one of them?",
|
||||
"You have taken control of the darkness so quickly.",
|
||||
"Molded them into Dimensions and Points just like one of us.",
|
||||
"What... ARE you?",
|
||||
"You... seem to be having too much fun.",
|
||||
"Just like they did before meeting their fate.",
|
||||
"Maybe my judgement was harsh, or unwarranted.",
|
||||
"But maybe that matters not.",
|
||||
"It gives me no solace to ponder and look back.",
|
||||
"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,
|
||||
requirement: () => Currency.singularities.gte(1e4),
|
||||
requirement: () => Currency.singularities.gte(1),
|
||||
lines: [
|
||||
"What was it again...? Antimatter?",
|
||||
"That was the first thing you turned into Dimensions?",
|
||||
"With my knowledge, I never found the need to question.",
|
||||
"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.",
|
||||
"How did you... attain the power to control it?",
|
||||
"This never happened in all of existence... or did it?",
|
||||
"My endless knowledge... is it waning?",
|
||||
"How did you manage to obtain it?",
|
||||
"Fascinating... I was never aware of this.",
|
||||
"... was I?",
|
||||
]
|
||||
},
|
||||
// Note: This happens around e10-e11 singularities
|
||||
annihilation: {
|
||||
id: 4,
|
||||
lines: [
|
||||
"Back to square one.",
|
||||
"We, the Celestials transcend time and existence.",
|
||||
"We always know that whatever is lost always comes back eventually.",
|
||||
"Even if we were to cease, we would just come back stronger.",
|
||||
"The cycle... repeats forever.",
|
||||
"Do they also understand? Or was it only you as well?",
|
||||
"I feel like I should know the answer...",
|
||||
]
|
||||
},
|
||||
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...",
|
||||
"Back to square one, again.",
|
||||
"Your chains shall bind you tighter, as your end slowly nears.",
|
||||
"While we transcend time and existence itself.",
|
||||
"Even if we may cease, we just come back. Never the exact same as before.",
|
||||
"And so... we repeat forever.",
|
||||
"And you?",
|
||||
"...",
|
||||
"The answer... eludes me...",
|
||||
]
|
||||
},
|
||||
// Note: This happens near e18 singularities
|
||||
@ -81,39 +89,39 @@ GameDatabase.celestials.quotes.laitela = {
|
||||
id: 6,
|
||||
requirement: () => player.celestials.laitela.difficultyTier >= 4,
|
||||
lines: [
|
||||
"You seem to be having too much fun.",
|
||||
"Just like they did before meeting their... fate.",
|
||||
"You freed them of their eternal imprisonment, yes?",
|
||||
"I always regret how harsh I was that day.",
|
||||
"Maybe it doesn't matter.",
|
||||
"But I digress. Let's keep constricting this Reality.",
|
||||
"I do not understand...",
|
||||
"Were there others... controlling Dimensions in this way?",
|
||||
"Did they... vanish? How have we not found them?",
|
||||
"Are they... us? Are we the endpoint?",
|
||||
"Or is their fate... something we cannot understand?",
|
||||
"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
|
||||
singularity3: {
|
||||
// Note: Shown when the first row 5 iM upgrade is purchased (~e26 singularities)
|
||||
finalRowIM: {
|
||||
id: 7,
|
||||
requirement: () => Currency.singularities.gte(1e26),
|
||||
lines: [
|
||||
"Is this a cycle?",
|
||||
"Will our existence just end and start anew...",
|
||||
"Just like... the Dimensions I rule?",
|
||||
"And if such... what will bring our end?",
|
||||
"I knew the answer to all these questions...",
|
||||
"But I forgot all of them...",
|
||||
"Your power... is it... erasing mine...?",
|
||||
"It is all impossible, beyond my comprehension...",
|
||||
"Unless... Is this all just part of the cycle?",
|
||||
"Can... you see beyond it all? Is... this why...",
|
||||
"I feel... afraid?",
|
||||
"I feel... my powers, my memories, being erased...",
|
||||
"Just like... when my role was almost usurped...",
|
||||
"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
|
||||
singularity4: {
|
||||
increasedMilestoneScaling: {
|
||||
id: 8,
|
||||
requirement: () => Currency.singularities.gte(1e40),
|
||||
lines: [
|
||||
"I don't know for how much... longer I can hold.",
|
||||
"There is... next to nothing left...",
|
||||
"You have attained... complete and total mastery... over the dark...",
|
||||
"While I can barely... hold onto my name anymore...",
|
||||
"What am I meant to be doing anyways?",
|
||||
"Did... my mistakes cause all of this?",
|
||||
"I know not for how much... longer I can hold...",
|
||||
"You are attaining... total mastery... over the dark...",
|
||||
"While I can barely... hold onto my name...",
|
||||
"What... can I... even do?",
|
||||
]
|
||||
},
|
||||
fullDestabilize: {
|
||||
@ -121,10 +129,10 @@ GameDatabase.celestials.quotes.laitela = {
|
||||
requirement: () => player.celestials.laitela.difficultyTier >= 8,
|
||||
lines: [
|
||||
"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... have nothing left...",
|
||||
"Something about... destabilizing... collapsing...",
|
||||
"I do not even... have anything left...",
|
||||
"Something about... destruction...",
|
||||
"The end...",
|
||||
]
|
||||
},
|
||||
|
@ -80,12 +80,12 @@ GameDatabase.challenges.eternity = [
|
||||
description: () => {
|
||||
if (Enslaved.isRunning) {
|
||||
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."
|
||||
: "you c㏰'퐚 gai鸭 Antmatterﻪﶓa⁍axie㮾랜䂇rma㦂l the cost of upgrading your max Replicanti" +
|
||||
" 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.";
|
||||
},
|
||||
goal: DC.E850,
|
||||
@ -103,7 +103,7 @@ GameDatabase.challenges.eternity = [
|
||||
{
|
||||
id: 7,
|
||||
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.",
|
||||
goal: DC.E2000,
|
||||
pelleGoal: DC.E2700,
|
||||
@ -133,7 +133,7 @@ GameDatabase.challenges.eternity = [
|
||||
},
|
||||
{
|
||||
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()}`,
|
||||
goal: DC.E1750,
|
||||
pelleGoal: DC.E2900,
|
||||
@ -168,7 +168,7 @@ GameDatabase.challenges.eternity = [
|
||||
},
|
||||
{
|
||||
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()}`,
|
||||
goal: DC.E500,
|
||||
pelleGoal: DC.E11200,
|
||||
|
@ -4,8 +4,8 @@ import { GameDatabase } from "../game-database";
|
||||
GameDatabase.challenges.infinity = [
|
||||
{
|
||||
id: 1,
|
||||
description: `all Normal Challenges, with the exception of
|
||||
Tickspeed (C9) and Big Crunch (C12) Challenges, are active at the same time.`,
|
||||
description: `all Normal Challenge restrictions are active at once, with the exception of the
|
||||
Tickspeed (C9) and Big Crunch (C12) Challenges.`,
|
||||
goal: DC.E650,
|
||||
isQuickResettable: true,
|
||||
reward: {
|
||||
@ -17,7 +17,7 @@ GameDatabase.challenges.infinity = [
|
||||
},
|
||||
{
|
||||
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.`,
|
||||
goal: DC.E10500,
|
||||
isQuickResettable: false,
|
||||
@ -50,7 +50,7 @@ GameDatabase.challenges.infinity = [
|
||||
{
|
||||
id: 4,
|
||||
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)}).`,
|
||||
goal: DC.E13000,
|
||||
isQuickResettable: true,
|
||||
@ -64,8 +64,8 @@ GameDatabase.challenges.infinity = [
|
||||
{
|
||||
id: 5,
|
||||
description:
|
||||
`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 1-4 causes all smaller Antimatter Dimension costs to increase.
|
||||
Buying Antimatter Dimensions 5-8 causes all larger Antimatter Dimension costs to increase.`,
|
||||
goal: DC.E16500,
|
||||
isQuickResettable: true,
|
||||
reward: {
|
||||
@ -79,8 +79,8 @@ GameDatabase.challenges.infinity = [
|
||||
{
|
||||
id: 6,
|
||||
description: () =>
|
||||
`once you have at least ${formatInt(1)} 2nd Antimatter Dimension, exponentially rising matter
|
||||
divides the multiplier on all of your Antimatter Dimensions.`,
|
||||
`exponentially rising matter divides the multiplier on all of your Antimatter Dimensions
|
||||
once you have at least ${formatInt(1)} 2nd Antimatter Dimension.`,
|
||||
goal: DC.D2E22222,
|
||||
isQuickResettable: true,
|
||||
effect: () => Currency.matter.value.clampMin(1),
|
||||
@ -94,14 +94,24 @@ GameDatabase.challenges.infinity = [
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
description: () =>
|
||||
`you can't get Antimatter Galaxies, but Dimension Boost multiplier
|
||||
${formatX(2.5, 1, 1)} ➜ ${formatX(10)}`,
|
||||
description: () => {
|
||||
// Copied from DimBoost.power; this is the base amount before any multipliers. Post-eternity this isn't
|
||||
// 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,
|
||||
isQuickResettable: false,
|
||||
effect: 10,
|
||||
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
|
||||
},
|
||||
unlockAM: DC.E23000,
|
||||
@ -109,8 +119,8 @@ GameDatabase.challenges.infinity = [
|
||||
{
|
||||
id: 8,
|
||||
description: () =>
|
||||
`your production is at ${formatPercents(1)} after
|
||||
purchasing anything, after that it rapidly drops down.`,
|
||||
`your production rapidly and continually drops down over time. Purchasing an Antimatter Dimension or Tickspeed
|
||||
upgrade sets production back to ${formatPercents(1)} before it starts dropping again.`,
|
||||
goal: DC.E27000,
|
||||
isQuickResettable: true,
|
||||
effect: () => DC.D0_8446303389034288.pow(
|
||||
|
@ -26,8 +26,8 @@ GameDatabase.challenges.normal = [
|
||||
legacyId: 2,
|
||||
isQuickResettable: false,
|
||||
description:
|
||||
() => "buying Antimatter Dimensions or Tickspeed upgrades halts your production, " +
|
||||
`gradually coming back over ${formatInt(3)} minutes.`,
|
||||
() => "buying Antimatter Dimensions or Tickspeed upgrades halts production of all Antimatter Dimensions. " +
|
||||
`Production gradually returns to normal over ${formatInt(3)} minutes.`,
|
||||
name: "2nd Antimatter Dimension Autobuyer",
|
||||
reward: "Upgradeable 2nd Antimatter Dimension Autobuyer",
|
||||
lockedAt: DC.D0,
|
||||
@ -38,8 +38,8 @@ GameDatabase.challenges.normal = [
|
||||
legacyId: 3,
|
||||
isQuickResettable: false,
|
||||
description:
|
||||
`the 1st Antimatter Dimension is heavily weakened, but gets an exponentially increasing
|
||||
bonus that resets after Dimension Boosts and Antimatter Galaxies.`,
|
||||
`the 1st Antimatter Dimension is heavily weakened, but gets an uncapped exponentially increasing multiplier.
|
||||
This multiplier resets after Dimension Boosts and Antimatter Galaxies.`,
|
||||
name: "3rd Antimatter Dimension",
|
||||
reward: "Upgradeable 3rd Antimatter Dimension Autobuyer",
|
||||
lockedAt: DC.D0,
|
||||
@ -71,8 +71,8 @@ GameDatabase.challenges.normal = [
|
||||
id: 6,
|
||||
legacyId: 10,
|
||||
isQuickResettable: false,
|
||||
description: () => `each Antimatter Dimension costs the dimension ${formatInt(2)} dimensions below it, ` +
|
||||
"instead of antimatter. Antimatter Dimension prices are modified.",
|
||||
description: () => `upgrading each Antimatter Dimension costs the Antimatter Dimension ${formatInt(2)} tiers ` +
|
||||
"below it instead of antimatter. Antimatter Dimension prices are modified.",
|
||||
name: "6th Antimatter Dimension Autobuyer",
|
||||
reward: "Upgradeable 6th Antimatter Dimension Autobuyer",
|
||||
lockedAt: DC.D0,
|
||||
@ -83,8 +83,8 @@ GameDatabase.challenges.normal = [
|
||||
legacyId: 9,
|
||||
isQuickResettable: false,
|
||||
description: () =>
|
||||
`the multiplier from buying ${formatInt(10)} Antimatter Dimensions is reduced to ${formatX(1)}, but is increased
|
||||
by ${formatX(0.2, 1, 1)} per Dimension Boost, up to a maximum of ${formatX(2)}.`,
|
||||
`the multiplier from buying ${formatInt(10)} Antimatter Dimensions is reduced to ${formatX(1)}. This increases by
|
||||
${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",
|
||||
reward: "Upgradeable 7th Antimatter Dimension Autobuyer",
|
||||
lockedAt: DC.D0,
|
||||
@ -94,8 +94,8 @@ GameDatabase.challenges.normal = [
|
||||
id: 8,
|
||||
legacyId: 11,
|
||||
isQuickResettable: false,
|
||||
description: "Dimension Boosts provide no boost and Antimatter Galaxies cannot be bought, but " +
|
||||
"Dimensional Sacrifice is significantly stronger and resets antimatter and all Antimatter Dimensions.",
|
||||
description: `Dimension Boosts provide no multiplier and Antimatter Galaxies cannot be bought. Dimensional
|
||||
Sacrifice resets antimatter and all Antimatter Dimensions, but also gives a significantly stronger multiplier.`,
|
||||
name: "8th Antimatter Dimension Autobuyer",
|
||||
reward: "Upgradeable 8th Antimatter Dimension Autobuyer",
|
||||
lockedAt: DC.D0,
|
||||
@ -105,7 +105,7 @@ GameDatabase.challenges.normal = [
|
||||
id: 9,
|
||||
legacyId: 5,
|
||||
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.",
|
||||
name: "Tickspeed Autobuyer",
|
||||
reward: "Upgradeable Tickspeed Autobuyer",
|
||||
@ -116,8 +116,8 @@ GameDatabase.challenges.normal = [
|
||||
id: 10,
|
||||
legacyId: 4,
|
||||
isQuickResettable: false,
|
||||
description: () => (`there are only ${formatInt(6)} Antimatter Dimensions, with Dimension Boost ` +
|
||||
"and Antimatter Galaxy costs modified."),
|
||||
description: () => `there are only ${formatInt(6)} Antimatter Dimensions. Dimension Boost ` +
|
||||
"and Antimatter Galaxy costs are modified.",
|
||||
name: "Automated Dimension Boosts",
|
||||
reward: "Dimension Boosts Autobuyer",
|
||||
lockedAt: DC.D16,
|
||||
@ -127,8 +127,8 @@ GameDatabase.challenges.normal = [
|
||||
id: 11,
|
||||
legacyId: 12,
|
||||
isQuickResettable: true,
|
||||
description: () => (`there's 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."),
|
||||
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.",
|
||||
name: "Automated Antimatter Galaxies",
|
||||
reward: "Antimatter Galaxies Autobuyer",
|
||||
lockedAt: DC.D16,
|
||||
@ -138,9 +138,9 @@ GameDatabase.challenges.normal = [
|
||||
id: 12,
|
||||
legacyId: 7,
|
||||
isQuickResettable: false,
|
||||
description: () => (`each Antimatter Dimension produces the dimension ${formatInt(2)} dimensions below it (1st ` +
|
||||
"Antimatter Dimensions still produce antimatter). The 2nd, 4th, and 6th Antimatter Dimensions " +
|
||||
"are made stronger to compensate."),
|
||||
description: () => `each Antimatter Dimension produces the Dimension ${formatInt(2)} tiers below it
|
||||
instead of ${formatInt(1)}. The 1st Dimension still produces antimatter, and the 2nd, 4th, and 6th
|
||||
Dimensions are made stronger to compensate.`,
|
||||
name: "Automated Big Crunches",
|
||||
reward: "Big Crunches Autobuyer",
|
||||
lockedAt: DC.D16,
|
||||
|
@ -7,14 +7,15 @@ GameDatabase.credits = {
|
||||
2: "Technical Architect",
|
||||
3: "Lead Developer",
|
||||
4: "Android Developer",
|
||||
5: "Library Developer",
|
||||
6: "Developer",
|
||||
7: "Lead Design Consultant",
|
||||
8: "Design Consultant",
|
||||
9: "Modal Maker, Lady Taker, Pie Baker",
|
||||
10: "Lurker Tester",
|
||||
11: "Web Tester",
|
||||
12: "Android Tester"
|
||||
5: "Steam Developer",
|
||||
6: "Library Developer",
|
||||
7: "Developer",
|
||||
8: "Lead Design Consultant",
|
||||
9: "Design Consultant",
|
||||
10: "Modal Maker, Lady Taker, Pie Baker",
|
||||
11: "Lurker 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
|
||||
@ -40,330 +41,338 @@ GameDatabase.credits = {
|
||||
roles: 3
|
||||
}, {
|
||||
name: "WaitingIdly",
|
||||
roles: [3, 6, 8, 11, 12]
|
||||
roles: [3, 7, 9, 12, 13]
|
||||
}, {
|
||||
name: "kajfik",
|
||||
name2: "Jakub Kajfosz",
|
||||
roles: 4
|
||||
}, {
|
||||
name: "Makopaz",
|
||||
name2: "Zack Stein",
|
||||
roles: 5
|
||||
}, {
|
||||
name: "Patashu",
|
||||
roles: [5, 6, 11]
|
||||
roles: [6, 7, 12]
|
||||
}, {
|
||||
name: "Dan",
|
||||
roles: [6, 11]
|
||||
roles: [7, 12]
|
||||
}, {
|
||||
name: "earth",
|
||||
name2: "Jace Royer",
|
||||
roles: [6, 9, 11, 12]
|
||||
roles: [7, 10, 12, 13]
|
||||
}, {
|
||||
name: "Hira",
|
||||
roles: [6, 11, 12]
|
||||
roles: [7, 12, 13]
|
||||
}, {
|
||||
name: "IkerStream",
|
||||
name2: "Iker de Aguirre",
|
||||
roles: [6, 11]
|
||||
roles: [7, 12]
|
||||
}, {
|
||||
name: "L4R5",
|
||||
name2: "Lars Wolf",
|
||||
roles: [6, 11, 12]
|
||||
roles: [7, 12, 13]
|
||||
}, {
|
||||
name: "Pichusuperlover",
|
||||
roles: [6, 8, 11]
|
||||
roles: [7, 9, 12]
|
||||
}, {
|
||||
name: "realrapidjazz",
|
||||
roles: [6, 7]
|
||||
roles: [7, 8]
|
||||
}, {
|
||||
name: "Scarlet",
|
||||
roles: [6, 11, 12]
|
||||
roles: [7, 12, 13]
|
||||
}, {
|
||||
name: "slabdrill",
|
||||
roles: 6
|
||||
roles: 7
|
||||
}, {
|
||||
name: "Acamaeda",
|
||||
roles: [8, 11]
|
||||
roles: [9, 12]
|
||||
}, {
|
||||
name: "Dravitar",
|
||||
name2: "Alex Henderson",
|
||||
roles: 10
|
||||
roles: 11
|
||||
}, {
|
||||
name: "Aesis",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "AFYINEE",
|
||||
name2: "Gabriel HADDAG",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Alexitato",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Anno",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Archa",
|
||||
name2: "Myresa",
|
||||
roles: [11, 12]
|
||||
roles: [12, 13]
|
||||
}, {
|
||||
name: "ArrowBounce",
|
||||
name2: "Timothy Su",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Birb",
|
||||
name2: "Kelsey Black",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Boo",
|
||||
name2: "Jean-Christophe Bourgault",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "CaptainGalaxy",
|
||||
name2: "Ovidijus Točelis",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "ChaoticHans",
|
||||
roles: [11, 12]
|
||||
roles: [12, 13]
|
||||
}, {
|
||||
name: "cubic frog",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "dankesehr",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Davixx",
|
||||
name2: "Davide Fedele",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Empireus",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "GirixK",
|
||||
name2: "Nikola Jelinčić",
|
||||
roles: [11, 12]
|
||||
roles: [12, 13]
|
||||
}, {
|
||||
name: "GoldenTritium",
|
||||
roles: [11, 12]
|
||||
roles: [12, 13]
|
||||
}, {
|
||||
name: "Kael",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Lynn",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Merp",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "philipebreaker",
|
||||
name2: "Philipe",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Phillip Marshall",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Phoenix",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Reda Kotob",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Saturnus",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "SereKabii",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Sheer",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "sirusi",
|
||||
name2: "Vinícius Oliveira Martins",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Spanosa",
|
||||
name2: "Jared K",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Sparticle999",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "SpicyCrusader13",
|
||||
roles: [11, 12]
|
||||
roles: [12, 13]
|
||||
}, {
|
||||
name: "Storm",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "SzyszakS",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Tacitus",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Typh",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Vnge",
|
||||
name2: "Ben Parrish",
|
||||
roles: [11, 12]
|
||||
roles: [12, 13]
|
||||
}, {
|
||||
name: "Xemadus",
|
||||
name2: "Jonathan Gibson",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Young Woo Joo",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "Zipi",
|
||||
roles: 11
|
||||
roles: 12
|
||||
}, {
|
||||
name: "about:blank",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "ÆiOuF",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Anjinho01",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Anthios",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Auti",
|
||||
name2: "Alice Tolle",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Buck",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Barrin84",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "ChizuX",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Circle",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Crinkly Weasel",
|
||||
name2: "Aaryan Sarawgi",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "DarthDie",
|
||||
name2: "Briar Bowser",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Epsilon",
|
||||
name2: "Coolguystorm",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Firecracker",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Gaunter",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "HarrisL2",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Hellbach",
|
||||
name2: "Asher Günther",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "hen-ben",
|
||||
name2: "Henry Ellenberg",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "ImpossibleSalsa",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "JayM#1872",
|
||||
name2: "Jay McGee",
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Johanniklas",
|
||||
name2: "Jan-Niklas Petersen",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "kaislash",
|
||||
name2: "Lily",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Kirku",
|
||||
name2: "Fabian Makowski",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Kirin",
|
||||
name2: "Arthur",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Mirai",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Monoma",
|
||||
name2: "ARoman Ruiz",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Nani",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "netweak",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "NotBrewst",
|
||||
name2: "Luc Leblanc",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "opdollar",
|
||||
name2: "Zane Coole",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Pavlxiiv",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Porygon-Z",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "PotatoTIAB",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Razor",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Razvan Cercel",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "ReacTivity",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Rukimix",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Skunky",
|
||||
name2: "Lukas",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Socks",
|
||||
name2: "Hannah Pocks",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Sweets the Alien",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Taylor Reeves",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Tim Wong",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "tragedt",
|
||||
name2: "Ethan Manninen",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "Valentine Clarissa Alanis Star Z",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "vanadium_void",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "X3N0_32",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}, {
|
||||
name: "ZylaKat",
|
||||
name2: "Katherine Goforth-Harbin",
|
||||
roles: 12
|
||||
roles: 13
|
||||
}
|
||||
]
|
||||
};
|
||||
|
@ -24,7 +24,7 @@ function rebuyable(config) {
|
||||
GameDatabase.eternity.dilation = {
|
||||
dtGain: rebuyable({
|
||||
id: 1,
|
||||
initialCost: 1e5,
|
||||
initialCost: 1e4,
|
||||
increment: 10,
|
||||
description: () =>
|
||||
((SingularityMilestone.dilatedTimeFromSingularities.canBeApplied || Achievement(187).canBeApplied)
|
||||
|
@ -2290,7 +2290,7 @@ GameDatabase.news = [
|
||||
{
|
||||
id: "a355",
|
||||
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",
|
||||
|
@ -13,8 +13,9 @@ GameDatabase.progressStages = [
|
||||
* @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
|
||||
* last one checked (first entry) always returns true as a catch-all condition
|
||||
* @property {String} suggestedResource A resource or multiple resources which may be
|
||||
* useful for the player to aim for at this stage
|
||||
* @property {String | function: @return Number} suggestedResource A resource or multiple resources which may be
|
||||
* 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
|
||||
* 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
|
||||
@ -23,7 +24,7 @@ GameDatabase.progressStages = [
|
||||
*/
|
||||
{
|
||||
id: PROGRESS_STAGE.PRE_INFINITY,
|
||||
name: "Before Infinity",
|
||||
name: "Antimatter Production",
|
||||
hasReached: () => true,
|
||||
suggestedResource: "Antimatter",
|
||||
// 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,
|
||||
name: "Eternity",
|
||||
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),
|
||||
},
|
||||
{
|
||||
@ -80,10 +81,13 @@ GameDatabase.progressStages = [
|
||||
id: PROGRESS_STAGE.LATE_ETERNITY,
|
||||
name: "Late Eternity",
|
||||
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
|
||||
// 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,
|
||||
|
@ -127,9 +127,9 @@ GameDatabase.reality.upgrades = [
|
||||
name: "Existentially Prolong",
|
||||
id: 10,
|
||||
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,
|
||||
checkRequirement: () => Currency.infinityPoints.exponent >= 450 &&
|
||||
checkRequirement: () => Currency.infinityPoints.exponent >= 400 &&
|
||||
player.requirementChecks.reality.noEternities,
|
||||
checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,
|
||||
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,
|
||||
checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,
|
||||
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)
|
||||
},
|
||||
{
|
||||
|
@ -10,7 +10,9 @@ class GameProgressState extends GameMechanicState {
|
||||
}
|
||||
|
||||
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() {
|
||||
return this.currency.gte(this.cost) &&
|
||||
!(Pelle.isDoomed && player.eternities.eq(0));
|
||||
return this.currency.gte(this.cost) && !player.eternities.eq(0);
|
||||
}
|
||||
|
||||
reset() {
|
||||
|
@ -803,6 +803,7 @@ export function getTTPerSecond() {
|
||||
Ra.unlocks.continuousTTBoost.effects.ttGen,
|
||||
Ra.unlocks.achievementTTMult,
|
||||
Achievement(137),
|
||||
Achievement(156),
|
||||
);
|
||||
if (GlyphAlteration.isAdded("dilation")) ttMult *= getSecondaryGlyphEffect("dilationTTgen");
|
||||
|
||||
|
@ -198,11 +198,11 @@ body.t-s9 {
|
||||
}
|
||||
|
||||
.l-tab-btn-inner {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
@ -364,8 +364,8 @@ body.t-s9 {
|
||||
|
||||
.o-tab-btn--infinity .o-subtab__tooltip {
|
||||
color: var(--color-infinity);
|
||||
border-color: var(--color-infinity);
|
||||
background: var(--color-prestige--accent);
|
||||
border-color: var(--color-infinity);
|
||||
}
|
||||
|
||||
.o-tab-btn--infinity .o-subtab__tooltip::after {
|
||||
@ -374,8 +374,8 @@ body.t-s9 {
|
||||
|
||||
.o-tab-btn--eternity .o-subtab__tooltip {
|
||||
color: var(--color-eternity);
|
||||
border-color: var(--color-eternity);
|
||||
background: var(--color-prestige--accent);
|
||||
border-color: var(--color-eternity);
|
||||
}
|
||||
|
||||
.o-tab-btn--eternity .o-subtab__tooltip::after {
|
||||
@ -384,8 +384,8 @@ body.t-s9 {
|
||||
|
||||
.o-tab-btn--reality .o-subtab__tooltip {
|
||||
color: var(--color-reality);
|
||||
border-color: var(--color-reality);
|
||||
background: var(--color-prestige--accent);
|
||||
border-color: var(--color-reality);
|
||||
}
|
||||
|
||||
.o-tab-btn--reality .o-subtab__tooltip::after {
|
||||
@ -394,8 +394,8 @@ body.t-s9 {
|
||||
|
||||
.o-tab-btn--celestial .o-subtab__tooltip {
|
||||
color: var(--color-celestials);
|
||||
border-color: var(--color-celestials);
|
||||
background: var(--color-prestige--accent);
|
||||
border-color: var(--color-celestials);
|
||||
}
|
||||
|
||||
.o-tab-btn--celestial .o-subtab__tooltip::after {
|
||||
@ -497,40 +497,6 @@ body.t-s9 {
|
||||
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 {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
@ -564,7 +530,6 @@ body.t-s9 {
|
||||
.btn-big-crunch--small {
|
||||
position: absolute;
|
||||
top: 4.3rem;
|
||||
left: calc(50% - 0.6rem);
|
||||
font-size: 3rem;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
@ -579,10 +544,6 @@ body.t-s9 {
|
||||
animation: a-tesseract-shift-dark 5s infinite;
|
||||
}
|
||||
|
||||
.l-new-ui-big-crunch__container {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.information-header {
|
||||
font-size: 1.2rem;
|
||||
font-weight: bold;
|
||||
|
@ -31,6 +31,9 @@
|
||||
|
||||
.l-old-ui__big-crunch-btn--overlay {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
margin-top: 5rem;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.l-old-ui__page {
|
||||
|
@ -118,7 +118,7 @@ html {
|
||||
--color-text-inverted: black;
|
||||
--color-base: #455a64;
|
||||
--color-disabled: #37474f;
|
||||
--color-accent: #1565c0;
|
||||
--color-accent: #1256a3;
|
||||
--color-notification: yellow;
|
||||
|
||||
--color-infinity: #ff9800;
|
||||
@ -1596,12 +1596,14 @@ br {
|
||||
}
|
||||
|
||||
.o-primary-btn--dimboost {
|
||||
position: relative;
|
||||
width: 21rem;
|
||||
height: 4.5rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.o-primary-btn--galaxy {
|
||||
position: relative;
|
||||
width: 21rem;
|
||||
height: 4.5rem;
|
||||
font-size: 0.9rem;
|
||||
@ -1649,6 +1651,12 @@ br {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.o-primary-btn--modal-option {
|
||||
width: 16rem;
|
||||
height: 6.5rem;
|
||||
margin: 0.3rem;
|
||||
}
|
||||
|
||||
.o-primary-btn--option-wide {
|
||||
width: 24rem;
|
||||
height: 5.5rem;
|
||||
@ -1780,7 +1788,6 @@ br {
|
||||
}
|
||||
|
||||
.t-dark .o-primary-btn--disabled {
|
||||
color: black;
|
||||
background-color: #37474f;
|
||||
}
|
||||
|
||||
@ -2110,7 +2117,7 @@ br {
|
||||
/* #region hint-text */
|
||||
|
||||
.o-dim-path-priority {
|
||||
font-size: 1.55rem;
|
||||
font-size: 1.5rem;
|
||||
color: white;
|
||||
text-shadow:
|
||||
-0.1rem -0.1rem 0 black,
|
||||
@ -4211,13 +4218,13 @@ br {
|
||||
}
|
||||
|
||||
.o-autobuyer-btn--unavailable {
|
||||
background: var(--color-disabled);
|
||||
color: black;
|
||||
background-color: var(--color-disabled);
|
||||
cursor: auto;
|
||||
}
|
||||
|
||||
.o-autobuyer-btn--unavailable:hover {
|
||||
color: black;
|
||||
background-color: var(--color-disabled);
|
||||
background-color: var(--color-bad);
|
||||
}
|
||||
|
||||
.t-dark .o-autobuyer-btn,
|
||||
@ -5293,6 +5300,11 @@ br {
|
||||
transition-duration: 0.2s;
|
||||
}
|
||||
|
||||
.c-modal--short {
|
||||
overflow-y: scroll;
|
||||
max-height: 55rem;
|
||||
}
|
||||
|
||||
.c-modal__title {
|
||||
display: inline-block;
|
||||
width: 50rem;
|
||||
@ -5782,6 +5794,7 @@ br {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
font-size: 1.3rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
@ -5949,8 +5962,8 @@ kbd {
|
||||
}
|
||||
|
||||
.o-notification--error {
|
||||
background-color: #bf352d;
|
||||
border-color: #330000;
|
||||
background-color: #ffaa22;
|
||||
border-color: #553300;
|
||||
}
|
||||
|
||||
.o-notification--info {
|
||||
@ -5989,8 +6002,8 @@ kbd {
|
||||
}
|
||||
|
||||
.s-base--metro .o-notification--error {
|
||||
background-color: #f44336;
|
||||
border-color: #c62828;
|
||||
background-color: #ffaa22;
|
||||
border-color: #553300;
|
||||
}
|
||||
|
||||
.s-base--metro .o-notification--info {
|
||||
@ -6684,7 +6697,7 @@ kbd {
|
||||
|
||||
.o-enslaved-mechanic-button {
|
||||
min-width: 18rem;
|
||||
min-height: 7rem;
|
||||
min-height: 9rem;
|
||||
font-family: Typewriter;
|
||||
background-color: #fdd3b0;
|
||||
border: var(--var-border-width, 0.2rem) solid sandybrown;
|
||||
@ -6834,10 +6847,8 @@ kbd {
|
||||
|
||||
.c-enslaved-hint-modal {
|
||||
display: flex;
|
||||
overflow-y: scroll;
|
||||
flex-direction: column;
|
||||
width: 60rem;
|
||||
height: 57rem;
|
||||
text-align: left;
|
||||
font-size: 1.2rem;
|
||||
padding: 0.25rem 1rem;
|
||||
|
@ -5,7 +5,7 @@
|
||||
}
|
||||
|
||||
.general-tooltip .tooltip-inner {
|
||||
width: 16rem;
|
||||
width: 20rem;
|
||||
text-align: center;
|
||||
font-family: Typewriter, serif;
|
||||
font-size: 1.4rem;
|
||||
|
@ -3,7 +3,7 @@
|
||||
/* HintText.vue */
|
||||
|
||||
.o-hint-text {
|
||||
font-size: 1.55rem;
|
||||
font-size: 1.5rem;
|
||||
color: white;
|
||||
text-shadow:
|
||||
-0.1rem -0.1rem 0 black,
|
||||
|
@ -57,10 +57,7 @@ export default {
|
||||
|
||||
<template>
|
||||
<div class="l-challenges-tab__header">
|
||||
<div
|
||||
v-if="isShowAllVisible || isAutoECVisible || isInChallenge"
|
||||
class="c-subtab-option-container"
|
||||
>
|
||||
<div class="c-subtab-option-container">
|
||||
<PrimaryToggleButton
|
||||
v-model="retryChallenge"
|
||||
class="o-primary-btn--subtab-option"
|
||||
|
@ -19,6 +19,7 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
showWorstChallenge: false,
|
||||
worstChallengeString: "",
|
||||
isUseless: false,
|
||||
canBeBought: false,
|
||||
chargePossible: false,
|
||||
|
@ -7,11 +7,6 @@ export default {
|
||||
PrimaryToggleButton
|
||||
},
|
||||
props: {
|
||||
isWide: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: true,
|
||||
},
|
||||
value: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
@ -23,12 +18,6 @@ export default {
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
classObject() {
|
||||
return {
|
||||
"o-primary-btn--option": !this.isWide,
|
||||
"o-primary-btn--option-wide": this.isWide,
|
||||
};
|
||||
},
|
||||
styleObject() {
|
||||
return {
|
||||
"background-color": this.value ? "var(--color-good)" : "var(--color-gh-purple)",
|
||||
@ -42,7 +31,7 @@ export default {
|
||||
<PrimaryToggleButton
|
||||
:value="value"
|
||||
:label="text"
|
||||
:class="classObject"
|
||||
class="o-primary-btn--modal-option"
|
||||
:style="styleObject"
|
||||
@input="emitInput"
|
||||
/>
|
||||
|
@ -58,7 +58,7 @@ export default {
|
||||
</div>
|
||||
<div
|
||||
v-if="!nothingHappened"
|
||||
class="c-modal-away-progress__resources"
|
||||
class="c-modal-away-progress__resources c-modal--short"
|
||||
>
|
||||
<AwayProgressEntry
|
||||
v-for="name of offlineStats"
|
||||
|
@ -96,7 +96,7 @@ export default {
|
||||
<template #header>
|
||||
Cracks in The Nameless Ones' Reality
|
||||
</template>
|
||||
<div class="c-enslaved-hint-modal">
|
||||
<div class="c-enslaved-hint-modal c-modal--short">
|
||||
<div>
|
||||
This Reality seems to be resisting your efforts to complete it. So far you have done the following:
|
||||
</div>
|
||||
|
@ -16,12 +16,6 @@ export default {
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
startTime: 0,
|
||||
remainingTime: 0,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
progressStage: () => ProgressChecker.getProgressStage(player).id,
|
||||
suggestedResource() {
|
||||
@ -36,19 +30,7 @@ export default {
|
||||
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: {
|
||||
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) {
|
||||
return GameProgress(stage).name;
|
||||
}
|
||||
@ -67,7 +49,7 @@ export default {
|
||||
check the related How To Play entries if you want more detailed information.
|
||||
<div
|
||||
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
|
||||
v-for="group of progressStage"
|
||||
@ -81,17 +63,10 @@ export default {
|
||||
</span>
|
||||
<div class="l-confirm-padding">
|
||||
<PrimaryButton
|
||||
v-if="remainingTime === 0"
|
||||
@click="emitClose"
|
||||
>
|
||||
Confirm
|
||||
</PrimaryButton>
|
||||
<PrimaryButton
|
||||
v-else
|
||||
:enabled="false"
|
||||
>
|
||||
Confirm ({{ formatInt(remainingTime) }})
|
||||
</PrimaryButton>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -104,7 +79,7 @@ export default {
|
||||
border: 0.1rem solid var(--color-text);
|
||||
border-radius: var(--var-border-radius, 0.4rem);
|
||||
margin: 1rem;
|
||||
padding: 2rem;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.l-confirm-padding {
|
||||
|
@ -20,7 +20,7 @@ export default {
|
||||
return this.challenge.isFullyCompleted;
|
||||
},
|
||||
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.
|
||||
To complete the Challenge${this.challengeIsCompleted ? "" : " and gain its reward"},
|
||||
you must reach the Challenge goal of
|
||||
|
@ -20,7 +20,7 @@ export default {
|
||||
return this.challenge.isCompleted;
|
||||
},
|
||||
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.
|
||||
To complete the Challenge${this.challengeIsCompleted ? "" : " and gain its reward"},
|
||||
you must reach the Challenge goal of
|
||||
|
@ -20,7 +20,7 @@ export default {
|
||||
return this.challenge.isCompleted;
|
||||
},
|
||||
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.
|
||||
To complete the Challenge${this.challengeIsCompleted ? "" : " and gain its reward"},
|
||||
you must reach Infinity again.
|
||||
|
@ -77,7 +77,6 @@ export default {
|
||||
:show-name="hasDifferentName"
|
||||
save-type="Local Save"
|
||||
/>
|
||||
<br>
|
||||
<SaveInfoEntry
|
||||
:save-data="conflict.cloud"
|
||||
:other-data="conflict.local"
|
||||
|
@ -99,7 +99,6 @@ export default {
|
||||
:show-name="hasDifferentName"
|
||||
save-type="Cloud Save"
|
||||
/>
|
||||
<br>
|
||||
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.
|
||||
<div
|
||||
|
@ -148,7 +148,6 @@ export default {
|
||||
<span v-html="formattedSTDText" />
|
||||
{{ timePlayed }}
|
||||
<br>
|
||||
<br>
|
||||
<span v-html="antimatter" />
|
||||
<span v-html="prestigeCount" />
|
||||
<span v-html="prestigeResource" />
|
||||
|
@ -109,13 +109,13 @@ export default {
|
||||
<style scoped>
|
||||
.c-dropdown-btn {
|
||||
width: 24rem;
|
||||
margin: 0.5rem;
|
||||
margin: 0.3rem;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.c-dropdown-header {
|
||||
padding: 0.75rem;
|
||||
height: 5.5rem;
|
||||
padding: 0.9rem;
|
||||
height: 6.5rem;
|
||||
user-select: none;
|
||||
}
|
||||
</style>
|
||||
|
@ -115,7 +115,6 @@ export default {
|
||||
{{ moreShiftKeyInfo }}
|
||||
</span>
|
||||
<br>
|
||||
<br>
|
||||
<div class="l-modal-hotkeys-row">
|
||||
<span class="c-modal-hotkeys-row__name l-modal-hotkeys-row__name">Autobuyer Controls</span>
|
||||
<kbd>alt</kbd>
|
||||
@ -128,7 +127,6 @@ export default {
|
||||
and Tickspeed Autobuyers instead.
|
||||
</span>
|
||||
<br>
|
||||
<br>
|
||||
<div class="l-modal-hotkeys-row">
|
||||
<span class="c-modal-hotkeys-row__name l-modal-hotkeys-row__name">Tab Movement</span>
|
||||
<div>
|
||||
@ -140,6 +138,15 @@ export default {
|
||||
The Up and Down arrows cycle you through tabs,
|
||||
and the Left and Right arrows cycle you through that tab's subtabs.
|
||||
</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>
|
||||
</span>
|
||||
</ModalWrapper>
|
||||
|
@ -31,29 +31,31 @@ export default {
|
||||
<template #header>
|
||||
Modify Visible Tabs
|
||||
</template>
|
||||
Click a button to toggle showing a tab on/off.
|
||||
<br>
|
||||
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">
|
||||
<div class="c-modal--short">
|
||||
Click a button to toggle showing a tab on/off.
|
||||
<br>
|
||||
<i>You must... see everywhere...</i>
|
||||
Some tabs cannot be hidden, and you cannot hide your current tab.
|
||||
<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>
|
||||
<HiddenTabGroup
|
||||
v-for="(tab, index) in tabs"
|
||||
:key="index"
|
||||
:tab="tab"
|
||||
:change-enabled="!isEnslaved && !isAlmostEnd"
|
||||
class="l-hide-modal-tab-container"
|
||||
/>
|
||||
</ModalWrapperOptions>
|
||||
</template>
|
||||
|
||||
|
@ -1,16 +1,18 @@
|
||||
<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 {
|
||||
name: "BigCrunchModal",
|
||||
components: {
|
||||
ModalWrapperChoice
|
||||
ResetModal
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
gainedInfinities: new Decimal(),
|
||||
gainedInfinityPoints: new Decimal()
|
||||
gainedInfinityPoints: new Decimal(),
|
||||
startingBoosts: 0,
|
||||
startingAM: 10,
|
||||
willStartWithGalaxy: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -18,22 +20,33 @@ export default {
|
||||
return !PlayerProgress.infinityUnlocked();
|
||||
},
|
||||
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}`;
|
||||
},
|
||||
firstIntinityInfo() {
|
||||
firstInfinityInfo() {
|
||||
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.`;
|
||||
},
|
||||
ipGainInfo() {
|
||||
return `You will gain ${quantify("Infinity Point", this.gainedInfinityPoints, 2, 2)}
|
||||
and ${quantify("Infinity", this.gainedInfinities)}.`;
|
||||
return `You will gain ${quantify("Infinity", this.gainedInfinities, 2, 0)}
|
||||
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: {
|
||||
update() {
|
||||
this.gainedInfinities = gainedInfinities().round();
|
||||
this.gainedInfinityPoints = gainedInfinityPoints().round();
|
||||
this.startingBoosts = DimBoost.startingDimensionBoosts;
|
||||
this.startingAM = Currency.antimatter.startingValue;
|
||||
this.willStartWithGalaxy = InfinityUpgrade.skipResetGalaxy.isBought;
|
||||
},
|
||||
handleYesClick() {
|
||||
bigCrunchResetRequest();
|
||||
@ -49,15 +62,14 @@ export default {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ModalWrapperChoice
|
||||
:option="isFirstInfinity ? undefined : 'bigCrunch'"
|
||||
@confirm="handleYesClick"
|
||||
>
|
||||
<template #header>
|
||||
You are about to Infinity
|
||||
</template>
|
||||
<div class="c-modal-message__text">
|
||||
{{ message }}
|
||||
</div>
|
||||
</ModalWrapperChoice>
|
||||
<ResetModal
|
||||
header="You are about to Infinity"
|
||||
:message="message"
|
||||
:gained-resources="ipGainInfo"
|
||||
:starting-resources="startingResources"
|
||||
:confirm-fn="handleYesClick"
|
||||
:alternate-condition="isFirstInfinity"
|
||||
:alternate-text="message"
|
||||
:confirm-option="isFirstInfinity ? undefined : 'bigCrunch'"
|
||||
/>
|
||||
</template>
|
||||
|
@ -1,16 +1,17 @@
|
||||
<script>
|
||||
import ModalWrapperChoice from "@/components/modals/ModalWrapperChoice";
|
||||
import ResetModal from "@/components/modals/prestige/ResetModal";
|
||||
|
||||
export default {
|
||||
name: "EternityModal",
|
||||
components: {
|
||||
ModalWrapperChoice
|
||||
ResetModal
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
exitingEC: false,
|
||||
startingIP: new Decimal(),
|
||||
gainedEternityPoints: new Decimal()
|
||||
gainedEternityPoints: new Decimal(),
|
||||
gainedEternities: new Decimal()
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -22,7 +23,8 @@ export default {
|
||||
on the Statistics tab. You will also gain an Eternity Point and unlock various upgrades.`;
|
||||
},
|
||||
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() {
|
||||
return this.startingIP.gt(0)
|
||||
@ -46,6 +48,7 @@ export default {
|
||||
this.exitingEC = EternityChallenge.isRunning;
|
||||
this.startingIP = Currency.infinityPoints.startingValue;
|
||||
this.gainedEternityPoints = gainedEternityPoints();
|
||||
this.gainedEternities = gainedEternities();
|
||||
},
|
||||
handleYesClick() {
|
||||
animateAndEternity();
|
||||
@ -56,31 +59,14 @@ export default {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ModalWrapperChoice
|
||||
option="eternity"
|
||||
@confirm="handleYesClick"
|
||||
>
|
||||
<template #header>
|
||||
{{ exitingEC ? "Complete Eternity Challenge" : "You are about to Eternity" }}
|
||||
</template>
|
||||
<div v-if="!exitingEC">
|
||||
<div class="c-modal-message__text">
|
||||
{{ 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>
|
||||
<ResetModal
|
||||
:header="exitingEC ? 'Complete Eternity Challenge' : 'You are about to Eternity'"
|
||||
:message="message"
|
||||
:gained-resources="gainedEPOnEternity"
|
||||
:starting-resources="startWithIP"
|
||||
:confirm-fn="handleYesClick"
|
||||
:alternate-condition="exitingEC"
|
||||
:alternate-text="exitingEC ? eternityChallenge : undefined"
|
||||
confirm-option="eternity"
|
||||
/>
|
||||
</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>
|
||||
import HeaderTickspeedRowClassic from "../../ui-modes/HeaderTickspeedRowClassic";
|
||||
|
||||
import AntimatterDimensionProgressBar from "./AntimatterDimensionProgressBar";
|
||||
import AntimatterDimensionRow from "./ClassicAntimatterDimensionRow";
|
||||
import AntimatterDimensionsTabHeader from "./ClassicAntimatterDimensionsTabHeader";
|
||||
import AntimatterGalaxyRow from "./ClassicAntimatterGalaxyRow";
|
||||
import DimensionBoostRow from "./ClassicDimensionBoostRow";
|
||||
import PrimaryButton from "@/components/PrimaryButton";
|
||||
import TickspeedRow from "./TickspeedRow";
|
||||
|
||||
export default {
|
||||
name: "ClassicAntimatterDimensionsTab",
|
||||
@ -17,7 +16,7 @@ export default {
|
||||
AntimatterGalaxyRow,
|
||||
DimensionBoostRow,
|
||||
AntimatterDimensionProgressBar,
|
||||
HeaderTickspeedRowClassic,
|
||||
TickspeedRow,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@ -52,12 +51,9 @@ export default {
|
||||
|
||||
<template>
|
||||
<div class="l-old-ui-antimatter-dim-tab">
|
||||
<span>{{ multiplierText }}</span>
|
||||
<AntimatterDimensionsTabHeader />
|
||||
<HeaderTickspeedRowClassic
|
||||
v-if="hasRealityButton"
|
||||
:in-header="false"
|
||||
/>
|
||||
{{ multiplierText }}
|
||||
<TickspeedRow />
|
||||
<div class="l-dimensions-container">
|
||||
<AntimatterDimensionRow
|
||||
v-for="tier in 8"
|
||||
|
@ -15,6 +15,7 @@ export default {
|
||||
isContinuumActive: false,
|
||||
continuumValue: 0,
|
||||
hasTutorial: false,
|
||||
hasRealityButton: false,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -33,21 +34,19 @@ export default {
|
||||
tickspeedDisplay() {
|
||||
return `Tickspeed: ${format(this.tickspeed, 2, 3)} / sec`;
|
||||
},
|
||||
showCostTitle() {
|
||||
return this.cost.exponent < 1000000;
|
||||
},
|
||||
continuumString() {
|
||||
return formatFloat(this.continuumValue, 2);
|
||||
},
|
||||
upgradeCount() {
|
||||
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`;
|
||||
return `${formatInt(purchased)} Purchased + ${formatInt(this.freeTickspeed)} Free`;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
update() {
|
||||
this.hasRealityButton = PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought;
|
||||
this.purchasedTickspeed = player.totalTickBought;
|
||||
this.freeTickspeed = FreeTickspeed.amount;
|
||||
const isEC9Running = EternityChallenge(9).isRunning;
|
||||
@ -76,17 +75,16 @@ export default {
|
||||
if (!buyTickSpeed()) return;
|
||||
Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED);
|
||||
},
|
||||
buyMaxUpgrade() {
|
||||
if (!buyMaxTickSpeed()) return;
|
||||
Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED);
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div :class="classObject">
|
||||
<div class="tickspeed-labels">
|
||||
<span>
|
||||
{{ tickspeedDisplay }} <span>{{ multiplierDisplay }}</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="tickspeed-buttons">
|
||||
<button
|
||||
v-tooltip="upgradeCount"
|
||||
@ -94,10 +92,10 @@ export default {
|
||||
@click="buyUpgrade"
|
||||
>
|
||||
<span v-if="isContinuumActive">
|
||||
{{ continuumString }} (cont.)
|
||||
Tickspeed Continuum: {{ continuumString }}
|
||||
</span>
|
||||
<span v-else>
|
||||
Cost: {{ format(cost) }}
|
||||
Tickspeed Cost: {{ format(cost) }}
|
||||
</span>
|
||||
<div
|
||||
v-if="hasTutorial"
|
||||
@ -108,11 +106,17 @@ export default {
|
||||
v-if="!isContinuumActive"
|
||||
class="o-primary-btn tickspeed-max-btn"
|
||||
:class="{ 'o-primary-btn--disabled': !isAffordable && !isContinuumActive }"
|
||||
onclick="buyMaxTickSpeed()"
|
||||
@click="buyMaxUpgrade"
|
||||
>
|
||||
Buy Max
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
v-if="hasRealityButton"
|
||||
class="tickspeed-labels"
|
||||
>
|
||||
{{ tickspeedDisplay }} | {{ multiplierDisplay }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -122,8 +126,35 @@ export default {
|
||||
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 {
|
||||
margin-left: 0.5rem;
|
||||
width: 10rem;
|
||||
height: 2.5rem;
|
||||
padding: 0.25rem;
|
||||
}
|
||||
|
||||
.o-non-clickable {
|
||||
|
@ -56,10 +56,10 @@ export default {
|
||||
this.rolling = GameEnd.endState > END_STATE_MARKERS.CREDITS_START;
|
||||
this.scroll = (
|
||||
Math.clampMax(GameEnd.endState, END_STATE_MARKERS.CREDITS_END) - END_STATE_MARKERS.CREDITS_START
|
||||
) * 53;
|
||||
) * 60;
|
||||
if (this.audio) this.audio.volume = this.isMuted
|
||||
? 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 {
|
||||
top: 130rem;
|
||||
top: 145rem;
|
||||
left: 65%;
|
||||
color: var(--color-teresa--base);
|
||||
animation: a-teresa-credits 10s ease-in-out infinite;
|
||||
@ -232,21 +232,21 @@ perfectly the same. */
|
||||
}
|
||||
|
||||
.c-enslaved-credits {
|
||||
top: 220rem;
|
||||
top: 235rem;
|
||||
left: 52%;
|
||||
color: var(--color-enslaved--base);
|
||||
animation: a-enslaved-credits 10s linear infinite;
|
||||
}
|
||||
|
||||
.c-v-credits {
|
||||
top: 170rem;
|
||||
top: 185rem;
|
||||
left: 20%;
|
||||
color: var(--color-v--base);
|
||||
animation: a-v-credits 15s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.c-ra-credits {
|
||||
top: 300rem;
|
||||
top: 315rem;
|
||||
left: 44%;
|
||||
color: var(--color-ra--base);
|
||||
animation: a-ra-credits 10s ease-in-out infinite;
|
||||
@ -257,7 +257,7 @@ perfectly the same. */
|
||||
}
|
||||
|
||||
.c-laitela-credits {
|
||||
top: 90rem;
|
||||
top: 105rem;
|
||||
left: 13%;
|
||||
color: #ffffff;
|
||||
animation: a-laitela-credits 5s ease-in-out infinite;
|
||||
|
@ -28,6 +28,7 @@ export default {
|
||||
boughtTesseracts: 0,
|
||||
extraTesseracts: 0,
|
||||
creditsClosed: false,
|
||||
showLockedDimCostNote: true,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -38,6 +39,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
update() {
|
||||
this.showLockedDimCostNote = !InfinityDimension(8).isUnlocked;
|
||||
this.isEC9Running = EternityChallenge(9).isRunning;
|
||||
this.infinityPower.copyFrom(Currency.infinityPower);
|
||||
this.conversionRate = InfinityDimensions.powerConversionRate;
|
||||
@ -154,7 +156,8 @@ export default {
|
||||
>
|
||||
You have {{ quantifyInt("purchase", EC8PurchasesLeft) }} left.
|
||||
</div>
|
||||
<br>
|
||||
Hold shift to see the Infinity Point cost for locked Infinity Dimensions.
|
||||
<div v-if="showLockedDimCostNote">
|
||||
Hold shift to see the Infinity Point cost for locked Infinity Dimensions.
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -28,6 +28,7 @@ export default {
|
||||
boughtTesseracts: 0,
|
||||
extraTesseracts: 0,
|
||||
creditsClosed: false,
|
||||
showLockedDimCostNote: true,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -44,6 +45,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
update() {
|
||||
this.showLockedDimCostNote = !InfinityDimension(8).isUnlocked;
|
||||
this.isEC9Running = EternityChallenge(9).isRunning;
|
||||
this.infinityPower.copyFrom(Currency.infinityPower);
|
||||
this.conversionRate = InfinityDimensions.powerConversionRate;
|
||||
@ -160,7 +162,8 @@ export default {
|
||||
>
|
||||
You have {{ quantifyInt("purchase", EC8PurchasesLeft) }} left.
|
||||
</div>
|
||||
<br>
|
||||
Hold shift to see the Infinity Point cost for locked Infinity Dimensions.
|
||||
<div v-if="showLockedDimCostNote">
|
||||
Hold shift to see the Infinity Point cost for locked Infinity Dimensions.
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -70,7 +70,8 @@ export default {
|
||||
|
||||
if (this.remainingTimeText === "") {
|
||||
if (remainingTime === 0) {
|
||||
this.remainingTimeText = "At Infinite Replicanti";
|
||||
this.remainingTimeText = `At Infinite Replicanti (normally takes
|
||||
${TimeSpan.fromSeconds(secondsPerGalaxy.toNumber())})`;
|
||||
} else {
|
||||
this.remainingTimeText = `${TimeSpan.fromSeconds(remainingTime)} remaining until Infinite Replicanti`;
|
||||
}
|
||||
|
@ -79,11 +79,13 @@ export default {
|
||||
return new ReplicantiUpgradeButtonSetup(
|
||||
upgrade,
|
||||
value => {
|
||||
let description = `Max Replicanti Galaxies: ${formatInt(value)}`;
|
||||
let description = `Max Replicanti Galaxies: `;
|
||||
const extra = upgrade.extra;
|
||||
if (extra > 0) {
|
||||
const total = value + extra;
|
||||
description += ` + ${formatInt(extra)} = ${formatInt(total)}`;
|
||||
description += `<br>${formatInt(value)} + ${formatInt(extra)} = ${formatInt(total)}`;
|
||||
} else {
|
||||
description += formatInt(value);
|
||||
}
|
||||
return description;
|
||||
},
|
||||
|
@ -69,7 +69,7 @@ export class ReplicantiUpgradeButtonSetup {
|
||||
class="o-primary-btn--replicanti-upgrade"
|
||||
@click="upgrade.purchase()"
|
||||
>
|
||||
<span>{{ description }}</span>
|
||||
<span v-html="description" />
|
||||
<template v-if="!isCapped">
|
||||
<br>
|
||||
<span>{{ costDescription }}</span>
|
||||
|
@ -17,7 +17,8 @@ export default {
|
||||
upgradeThreshold: new Decimal(0),
|
||||
shardsPerSecond: new Decimal(0),
|
||||
incomeType: "",
|
||||
areAutobuyersUnlocked: false
|
||||
areAutobuyersUnlocked: false,
|
||||
showLockedDimCostNote: true,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -25,6 +26,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
update() {
|
||||
this.showLockedDimCostNote = !TimeDimension(8).isUnlocked && player.realities >= 1;
|
||||
this.totalUpgrades = player.totalTickGained;
|
||||
this.multPerTickspeed = FreeTickspeed.multToNext;
|
||||
this.tickspeedSoftcap = FreeTickspeed.softcap;
|
||||
@ -96,8 +98,9 @@ export default {
|
||||
<br>
|
||||
and costs increase much faster after {{ format(costIncreases[2]) }} Eternity Points.
|
||||
<br>
|
||||
Hold shift to see the Eternity Point cost for locked Time Dimensions.
|
||||
<br>
|
||||
<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>
|
||||
|
@ -17,7 +17,8 @@ export default {
|
||||
upgradeThreshold: new Decimal(0),
|
||||
shardsPerSecond: new Decimal(0),
|
||||
incomeType: "",
|
||||
areAutobuyersUnlocked: false
|
||||
areAutobuyersUnlocked: false,
|
||||
showLockedDimCostNote: true,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -25,6 +26,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
update() {
|
||||
this.showLockedDimCostNote = !TimeDimension(8).isUnlocked && player.realities >= 1;
|
||||
this.totalUpgrades = player.totalTickGained;
|
||||
this.multPerTickspeed = FreeTickspeed.multToNext;
|
||||
this.tickspeedSoftcap = FreeTickspeed.softcap;
|
||||
@ -94,7 +96,10 @@ export default {
|
||||
<br>
|
||||
and costs increase much faster after {{ format(costIncreases[2]) }} Eternity Points.
|
||||
<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>
|
||||
</template>
|
||||
|
@ -14,23 +14,23 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isLimitedByPelle: false
|
||||
isLocked: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
isEnabled() {
|
||||
if (this.isLimitedByPelle) return false;
|
||||
if (this.isLocked) return false;
|
||||
return this.budget.gte(this.cost);
|
||||
},
|
||||
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";
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
update() {
|
||||
this.isLimitedByPelle = Pelle.isDoomed && player.eternities.eq(0);
|
||||
this.isLocked = player.eternities.eq(0);
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -42,6 +42,6 @@ export default {
|
||||
:class="enabledClass"
|
||||
@click="action"
|
||||
>
|
||||
{{ isLimitedByPelle ? "Requires Eternity to unlock" : formatCost(cost) }}
|
||||
{{ isLocked ? "Requires Eternity to unlock" : formatCost(cost) }}
|
||||
</button>
|
||||
</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>
|
||||
import HeaderBlackHole from "./HeaderBlackHole";
|
||||
import HeaderChallengeDisplay from "./HeaderChallengeDisplay";
|
||||
import HeaderChallengeEffects from "./HeaderChallengeEffects";
|
||||
import HeaderGameSpeed from "./HeaderGameSpeed";
|
||||
import HeaderPrestigeGroup from "./HeaderPrestigeGroup";
|
||||
|
||||
export default {
|
||||
@ -9,7 +9,7 @@ export default {
|
||||
components: {
|
||||
HeaderChallengeDisplay,
|
||||
HeaderChallengeEffects,
|
||||
HeaderGameSpeed,
|
||||
HeaderBlackHole,
|
||||
HeaderPrestigeGroup,
|
||||
},
|
||||
};
|
||||
@ -20,7 +20,7 @@ export default {
|
||||
<HeaderChallengeDisplay />
|
||||
<HeaderChallengeEffects />
|
||||
<HeaderPrestigeGroup />
|
||||
<HeaderGameSpeed />
|
||||
<HeaderBlackHole />
|
||||
</div>
|
||||
</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";
|
||||
|
||||
export default {
|
||||
name: "HeaderTickspeedRowModern",
|
||||
name: "HeaderTickspeedInfo",
|
||||
components: {
|
||||
GameSpeedDisplay
|
||||
},
|
||||
@ -11,23 +11,27 @@ export default {
|
||||
mult: new Decimal(0),
|
||||
tickspeed: new Decimal(0),
|
||||
galaxyCount: 0,
|
||||
purchasedTickspeed: 0,
|
||||
freeTickspeed: 0,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
tickspeedDisplay() {
|
||||
return `AD Tickspeed: ${format(this.tickspeed, 2, 3)} / sec`;
|
||||
return `Total Tickspeed: ${format(this.tickspeed, 2, 3)} / sec`;
|
||||
},
|
||||
perUpgrade() {
|
||||
if (InfinityChallenge(3).isRunning) return `Tickspeed upgrades give
|
||||
${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: {
|
||||
update() {
|
||||
this.mult.copyFrom(Tickspeed.multiplier);
|
||||
this.tickspeed.copyFrom(Tickspeed.perSecond);
|
||||
this.galaxyCount = player.galaxies;
|
||||
this.purchasedTickspeed = player.totalTickBought;
|
||||
this.freeTickspeed = FreeTickspeed.amount;
|
||||
},
|
||||
},
|
||||
};
|
||||
@ -35,11 +39,11 @@ export default {
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<br>
|
||||
{{ tickspeedDisplay }}
|
||||
<br>
|
||||
{{ perUpgrade }}
|
||||
<br>
|
||||
{{ tickspeedDisplay }}
|
||||
<br>
|
||||
<GameSpeedDisplay />
|
||||
</div>
|
||||
</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>
|
||||
import BigCrunchButton from "../BigCrunchButton";
|
||||
import GameHeader from "../GameHeader";
|
||||
import NewsTicker from "../NewsTicker";
|
||||
|
||||
import ClassicBigCrunchButton from "./ClassicBigCrunchButton";
|
||||
|
||||
import ClassicSubtabBar from "./ClassicSubtabBar";
|
||||
import ClassicTabBar from "./ClassicTabBar";
|
||||
import EternityPointsHeader from "@/components/EternityPointsHeader";
|
||||
@ -12,12 +13,12 @@ export default {
|
||||
name: "ClassicUi",
|
||||
components: {
|
||||
GameHeader,
|
||||
ClassicBigCrunchButton,
|
||||
ClassicSubtabBar,
|
||||
ClassicTabBar,
|
||||
NewsTicker,
|
||||
InfinityPointsHeader,
|
||||
EternityPointsHeader
|
||||
EternityPointsHeader,
|
||||
BigCrunchButton
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@ -34,9 +35,7 @@ export default {
|
||||
methods: {
|
||||
update() {
|
||||
const crunchButtonVisible = !player.break && Player.canCrunch;
|
||||
const reachedInfinityInMinute = Time.bestInfinityRealTime.totalMinutes <= 1;
|
||||
this.bigCrunch = crunchButtonVisible && !reachedInfinityInMinute;
|
||||
this.smallCrunch = crunchButtonVisible && reachedInfinityInMinute;
|
||||
this.bigCrunch = crunchButtonVisible && Time.bestInfinityRealTime.totalMinutes > 1;
|
||||
}
|
||||
},
|
||||
};
|
||||
@ -52,13 +51,8 @@ export default {
|
||||
type="text/css"
|
||||
href="stylesheets/old-ui.css"
|
||||
>
|
||||
<template v-if="bigCrunch">
|
||||
<ClassicBigCrunchButton class="l-old-ui__big-crunch-btn" />
|
||||
<div class="o-emptiness">
|
||||
The world has collapsed due to excess of antimatter.
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<BigCrunchButton />
|
||||
<template v-if="!bigCrunch">
|
||||
<NewsTicker
|
||||
v-if="news"
|
||||
class="l-old-ui__news-bar"
|
||||
@ -70,10 +64,6 @@ export default {
|
||||
v-if="tab.config.before"
|
||||
/>
|
||||
<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">
|
||||
<slot />
|
||||
</div>
|
||||
|
@ -1,7 +1,8 @@
|
||||
<script>
|
||||
import BigCrunchButton from "../BigCrunchButton";
|
||||
import HeaderBlackHole from "../HeaderBlackHole";
|
||||
import HeaderChallengeDisplay from "../HeaderChallengeDisplay";
|
||||
import HeaderChallengeEffects from "../HeaderChallengeEffects";
|
||||
import HeaderGameSpeed from "../HeaderGameSpeed";
|
||||
import HeaderPrestigeGroup from "../HeaderPrestigeGroup";
|
||||
import NewsTicker from "../NewsTicker";
|
||||
|
||||
@ -9,16 +10,16 @@ import NewsTicker from "../NewsTicker";
|
||||
export default {
|
||||
name: "ModernUi",
|
||||
components: {
|
||||
BigCrunchButton,
|
||||
HeaderChallengeDisplay,
|
||||
HeaderChallengeEffects,
|
||||
NewsTicker,
|
||||
HeaderGameSpeed,
|
||||
HeaderBlackHole,
|
||||
HeaderPrestigeGroup
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
bigCrunch: false,
|
||||
smallCrunch: false,
|
||||
bigCrunch: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -32,12 +33,10 @@ export default {
|
||||
methods: {
|
||||
update() {
|
||||
const crunchButtonVisible = !player.break && Player.canCrunch;
|
||||
const reachedInfinityInMinute = Time.bestInfinityRealTime.totalMinutes <= 1;
|
||||
this.bigCrunch = crunchButtonVisible && !reachedInfinityInMinute;
|
||||
this.smallCrunch = crunchButtonVisible && reachedInfinityInMinute;
|
||||
this.bigCrunch = crunchButtonVisible && Time.bestInfinityRealTime.totalMinutes > 1;
|
||||
},
|
||||
handleClick() {
|
||||
if (PlayerProgress.infinityUnlocked()) bigCrunchResetRequest();
|
||||
if (PlayerProgress.infinityUnlocked()) manualBigCrunchResetRequest();
|
||||
else Modal.bigCrunch.show();
|
||||
}
|
||||
},
|
||||
@ -56,35 +55,17 @@ export default {
|
||||
:style="topMargin"
|
||||
>
|
||||
<NewsTicker v-if="news" />
|
||||
<BigCrunchButton />
|
||||
<div
|
||||
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
|
||||
v-if="!bigCrunch"
|
||||
class="tab-container"
|
||||
>
|
||||
<HeaderPrestigeGroup />
|
||||
<div class="information-header">
|
||||
<HeaderChallengeDisplay />
|
||||
<HeaderChallengeEffects />
|
||||
<HeaderGameSpeed />
|
||||
<HeaderBlackHole />
|
||||
</div>
|
||||
<button
|
||||
v-if="smallCrunch && !bigCrunch"
|
||||
class="btn-big-crunch btn-big-crunch--small"
|
||||
onclick="bigCrunchResetRequest()"
|
||||
>
|
||||
Big Crunch
|
||||
</button>
|
||||
<slot />
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2,8 +2,7 @@
|
||||
import ArmageddonButton from "../../tabs/celestial-pelle/ArmageddonButton";
|
||||
import RealityCurrencyHeader from "../../RealityCurrencyHeader";
|
||||
|
||||
import HeaderTickspeedRowClassic from "../HeaderTickspeedRowClassic";
|
||||
import HeaderTickspeedRowModern from "../HeaderTickspeedRowModern";
|
||||
import HeaderTickspeedInfo from "../HeaderTickspeedInfo";
|
||||
|
||||
import RealityButton from "./RealityButton";
|
||||
|
||||
@ -13,14 +12,14 @@ import RealityButton from "./RealityButton";
|
||||
export default {
|
||||
name: "HeaderCenterContainer",
|
||||
components: {
|
||||
HeaderTickspeedRowClassic,
|
||||
HeaderTickspeedRowModern,
|
||||
HeaderTickspeedInfo,
|
||||
RealityCurrencyHeader,
|
||||
RealityButton,
|
||||
ArmageddonButton,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
shouldDisplay: true,
|
||||
isModern: false,
|
||||
hasRealityButton: false,
|
||||
isDoomed: false,
|
||||
@ -30,6 +29,9 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
update() {
|
||||
this.shouldDisplay = player.break || !Player.canCrunch;
|
||||
if (!this.shouldDisplay) return;
|
||||
|
||||
this.isModern = player.options.newUI;
|
||||
this.isDoomed = Pelle.isDoomed;
|
||||
this.antimatter.copyFrom(Currency.antimatter);
|
||||
@ -41,7 +43,10 @@ export default {
|
||||
</script>
|
||||
|
||||
<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>
|
||||
<div
|
||||
v-if="hasRealityButton"
|
||||
@ -57,8 +62,7 @@ export default {
|
||||
<div v-else>
|
||||
You are getting {{ format(antimatterPerSec, 2) }} antimatter per second.
|
||||
<br>
|
||||
<HeaderTickspeedRowModern v-if="isModern" />
|
||||
<HeaderTickspeedRowClassic v-else />
|
||||
<HeaderTickspeedInfo />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -26,7 +26,7 @@ export default {
|
||||
},
|
||||
formatMachineStats() {
|
||||
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)) {
|
||||
return `(Next at ${format(this.nextMachineEP, 2)} EP)`;
|
||||
|
Loading…
Reference in New Issue
Block a user