This commit is contained in:
ducdat0507 2022-12-13 14:58:12 +07:00
commit 2edc63888d
9 changed files with 113 additions and 33 deletions

View file

@ -15,7 +15,12 @@ import { createResource, displayResource, Resource } from "features/resources/re
import { createUpgrade, GenericUpgrade } from "features/upgrades/upgrade"; import { createUpgrade, GenericUpgrade } from "features/upgrades/upgrade";
import { globalBus } from "game/events"; import { globalBus } from "game/events";
import { BaseLayer, createLayer } from "game/layers"; import { BaseLayer, createLayer } from "game/layers";
import { createExponentialModifier, createSequentialModifier, Modifier } from "game/modifiers"; import {
createExponentialModifier,
createMultiplicativeModifier,
createSequentialModifier,
Modifier
} from "game/modifiers";
import { noPersist } from "game/persistence"; import { noPersist } from "game/persistence";
import Decimal, { DecimalSource, format, formatWhole } from "util/bignum"; import Decimal, { DecimalSource, format, formatWhole } from "util/bignum";
import { WithRequired } from "util/common"; import { WithRequired } from "util/common";
@ -26,6 +31,7 @@ import management from "./management";
import paper from "./paper"; import paper from "./paper";
import plastic from "./plastic"; import plastic from "./plastic";
import trees from "./trees"; import trees from "./trees";
import workshop from "./workshop";
export type BoxesBuyable = GenericBuyable & { export type BoxesBuyable = GenericBuyable & {
resource: Resource; resource: Resource;
@ -42,6 +48,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
const boxes = createResource<DecimalSource>(0, "boxes"); const boxes = createResource<DecimalSource>(0, "boxes");
const boxGain = createSequentialModifier(() => [ const boxGain = createSequentialModifier(() => [
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "1000% Foundation Completed",
enabled: workshop.milestones.extraExpansionMilestone5.earned
})),
createExponentialModifier(() => ({ createExponentialModifier(() => ({
exponent: 1.1, exponent: 1.1,
description: "Bell Level 2", description: "Bell Level 2",

View file

@ -34,6 +34,7 @@ import metal from "./metal";
import paper from "./paper"; import paper from "./paper";
import plastic from "./plastic"; import plastic from "./plastic";
import trees from "./trees"; import trees from "./trees";
import workshop from "./workshop";
const id = "cloth"; const id = "cloth";
const day = 8; const day = 8;
@ -332,7 +333,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
const paperUpgrades = { paperUpgrade4, paperUpgrade3, paperUpgrade2, paperUpgrade1 }; const paperUpgrades = { paperUpgrade4, paperUpgrade3, paperUpgrade2, paperUpgrade1 };
const hollyEffect = computed(() => const hollyEffect = computed(() =>
Decimal.add(trees.computedAutoCuttingAmount.value, 1).root(3) Decimal.add(trees.computedAutoCuttingAmount.value, 1).root(9)
); );
const gingersnapEffect = computed(() => Decimal.add(dyes.dyeSum.value, 10).log10()); const gingersnapEffect = computed(() => Decimal.add(dyes.dyeSum.value, 10).log10());
@ -360,6 +361,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
multiplier: hollyEffect, multiplier: hollyEffect,
description: "Holly Level 3", description: "Holly Level 3",
enabled: management.elfTraining.cutterElfTraining.milestones[2].earned enabled: management.elfTraining.cutterElfTraining.milestones[2].earned
})),
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "1000% Foundation Completed",
enabled: workshop.milestones.extraExpansionMilestone5.earned
})) }))
]); ]);
const computedSheepGain = computed(() => sheepGain.apply(1)); const computedSheepGain = computed(() => sheepGain.apply(1));
@ -390,6 +396,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
multiplier: hollyEffect, multiplier: hollyEffect,
description: "Holly Level 3", description: "Holly Level 3",
enabled: management.elfTraining.cutterElfTraining.milestones[2].earned enabled: management.elfTraining.cutterElfTraining.milestones[2].earned
})),
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "1000% Foundation Completed",
enabled: workshop.milestones.extraExpansionMilestone5.earned
})) }))
]); ]);
const computedShearingAmount = computed(() => shearingAmount.apply(1)); const computedShearingAmount = computed(() => shearingAmount.apply(1));
@ -420,6 +431,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
multiplier: hollyEffect, multiplier: hollyEffect,
description: "Holly Level 3", description: "Holly Level 3",
enabled: management.elfTraining.cutterElfTraining.milestones[2].earned enabled: management.elfTraining.cutterElfTraining.milestones[2].earned
})),
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "1000% Foundation Completed",
enabled: workshop.milestones.extraExpansionMilestone5.earned
})) }))
]); ]);
const computedSpinningAmount = computed(() => spinningAmount.apply(1)); const computedSpinningAmount = computed(() => spinningAmount.apply(1));

View file

@ -22,7 +22,7 @@ import { persistent } from "game/persistence";
import Decimal, { DecimalSource, format, formatTime, formatWhole } from "util/bignum"; import Decimal, { DecimalSource, format, formatTime, formatWhole } from "util/bignum";
import { Direction } from "util/common"; import { Direction } from "util/common";
import { render, renderCol, renderGrid } from "util/vue"; import { render, renderCol, renderGrid } from "util/vue";
import { computed, ComputedRef, ref, Ref, unref } from "vue"; import { computed, ComputedRef, ref, Ref, unref, watch } from "vue";
import elves from "./elves"; import elves from "./elves";
import trees from "./trees"; import trees from "./trees";
import paper from "./paper"; import paper from "./paper";
@ -156,7 +156,10 @@ const layer = createLayer(id, () => {
).toNumber() ).toNumber()
); );
const expToNextLevel = computed(() => const expToNextLevel = computed(() =>
Decimal.sub(exp.value, Decimal.sumGeometricSeries(level.value, Decimal.mul(4000, costMulti), 5, 0)) Decimal.sub(
exp.value,
Decimal.sumGeometricSeries(level.value, Decimal.mul(4000, costMulti), 5, 0)
)
); );
const bar = createBar(() => ({ const bar = createBar(() => ({
direction: Direction.Right, direction: Direction.Right,
@ -275,8 +278,7 @@ const layer = createLayer(id, () => {
requirement: "Holly Level 3", requirement: "Holly Level 3",
effectDisplay: jsx(() => ( effectDisplay: jsx(() => (
<> <>
Multiply all cloth actions' effectiveness by <sup>9</sup> Multiply all cloth actions' effectiveness by log<sub>10</sub>Cutter amount.
<Sqrt>Cutter amount</Sqrt>.
</> </>
)) ))
}, },
@ -449,7 +451,7 @@ const layer = createLayer(id, () => {
createMilestone(() => ({ createMilestone(() => ({
display: { display: {
requirement: "Mary Level 2", requirement: "Mary Level 2",
effectDisplay: "Double automatic tree planting speed" effectDisplay: "Metal gain is raised to the 1.1."
}, },
visibility: () => showIf(heatedPlanterElfMilestones[0].earned.value), visibility: () => showIf(heatedPlanterElfMilestones[0].earned.value),
shouldEarn: () => heatedPlanterElfTraining.level.value >= 2 shouldEarn: () => heatedPlanterElfTraining.level.value >= 2
@ -465,7 +467,7 @@ const layer = createLayer(id, () => {
createMilestone(() => ({ createMilestone(() => ({
display: { display: {
requirement: "Mary Level 4", requirement: "Mary Level 4",
effectDisplay: "Metal gain is raised to the 1.1." effectDisplay: "Double automatic tree planting speed"
}, },
visibility: () => visibility: () =>
showIf(heatedPlanterElfMilestones[2].earned.value && main.day.value >= 13), showIf(heatedPlanterElfMilestones[2].earned.value && main.day.value >= 13),
@ -940,6 +942,7 @@ const layer = createLayer(id, () => {
focusCooldown.value = Math.max(focusCooldown.value - diff, 0); focusCooldown.value = Math.max(focusCooldown.value - diff, 0);
if (Decimal.eq(focusTime.value, 0)) { if (Decimal.eq(focusTime.value, 0)) {
focusTargets.value = {};
focusMulti.value = Decimal.pow( focusMulti.value = Decimal.pow(
focusMaxMulti.value, focusMaxMulti.value,
1 - Math.abs(Math.sin((Date.now() / 1000) * 2)) 1 - Math.abs(Math.sin((Date.now() / 1000) * 2))
@ -1052,7 +1055,7 @@ const layer = createLayer(id, () => {
description: "Multiplies the maximum experience multiplier from focus by 2" description: "Multiplies the maximum experience multiplier from focus by 2"
}, },
resource: trees.logs, resource: trees.logs,
cost: 1e30 cost: 1e25
})); }));
const focusUpgrade2 = createUpgrade(() => ({ const focusUpgrade2 = createUpgrade(() => ({
display: { display: {
@ -1060,7 +1063,7 @@ const layer = createLayer(id, () => {
description: "Increase elves affected by focus by 1" description: "Increase elves affected by focus by 1"
}, },
resource: trees.logs, resource: trees.logs,
cost: 1e40 cost: 1e30
})); }));
const focusUpgrade3 = createUpgrade(() => ({ const focusUpgrade3 = createUpgrade(() => ({
display: { display: {
@ -1068,23 +1071,24 @@ const layer = createLayer(id, () => {
description: "Focus can now be rerolled every 10 seconds" description: "Focus can now be rerolled every 10 seconds"
}, },
resource: trees.logs, resource: trees.logs,
cost: 1e50 cost: 1e35
})); }));
const upgrades = [focusUpgrade1, focusUpgrade2, focusUpgrade3]; const upgrades = [focusUpgrade1, focusUpgrade2, focusUpgrade3];
// ------------------------------------------------------------------------------- Schools // ------------------------------------------------------------------------------- Schools
const schoolCost = computed(() => { const schoolCost = computed(() => {
const schoolFactor = Decimal.pow(10, schools.amount.value); const schoolFactor = Decimal.pow(10, schools.amount.value);
const woodFactor = Decimal.pow(2e4, schools.amount.value); const nerfedSchoolFactor = Decimal.pow(5, schools.amount.value);
const woodFactor = Decimal.pow(1e4, schools.amount.value);
const coalFactor = Decimal.pow(2000, schools.amount.value); const coalFactor = Decimal.pow(2000, schools.amount.value);
return { return {
wood: woodFactor.mul(1e21), wood: woodFactor.mul(1e21),
coal: coalFactor.mul(1e32), coal: coalFactor.mul(1e32),
paper: coalFactor.mul(1e18), paper: coalFactor.mul(1e18),
boxes: woodFactor.mul(1e13), boxes: woodFactor.mul(1e13),
metalIngots: schoolFactor.mul(1e12), metalIngots: nerfedSchoolFactor.mul(1e12),
cloth: schoolFactor.mul(1e4), cloth: schoolFactor.mul(1e4),
plastic: schoolFactor.mul(1e6), plastic: nerfedSchoolFactor.mul(1e6),
dye: Decimal.add(schools.amount.value, 1).mul(10000) dye: Decimal.add(schools.amount.value, 1).mul(10000)
}; };
}); });
@ -1151,7 +1155,7 @@ const layer = createLayer(id, () => {
}); });
const classroomEffect = computed(() => { const classroomEffect = computed(() => {
return Decimal.add(classrooms.amount.value, 1).sqrt(); return Decimal.add(classrooms.amount.value, 1).pow(0.9);
}); });
const classrooms = createBuyable(() => ({ const classrooms = createBuyable(() => ({
@ -1344,7 +1348,9 @@ const layer = createLayer(id, () => {
{render(modifiersModal)} {render(modifiersModal)}
{render(dayProgress)} {render(dayProgress)}
<br /> <br />
{renderCol(schools, classrooms)} {renderGrid([teaching, classroomUpgrade])}{" "} {renderCol(schools, classrooms)}
{renderGrid([teaching, classroomUpgrade])}
<Spacer />
{Decimal.gt(schools.amount.value, 0) ? ( {Decimal.gt(schools.amount.value, 0) ? (
<> <>
<br /> <br />

View file

@ -32,6 +32,7 @@ import cloth from "./cloth";
import plastic from "./plastic"; import plastic from "./plastic";
import dyes from "./dyes"; import dyes from "./dyes";
import management from "./management"; import management from "./management";
import workshop from "./workshop";
const id = "metal"; const id = "metal";
const day = 7; const day = 7;
@ -81,10 +82,16 @@ const layer = createLayer(id, function (this: BaseLayer) {
description: "Glistening Paint", description: "Glistening Paint",
enabled: dyes.upgrades.redDyeUpg.bought enabled: dyes.upgrades.redDyeUpg.bought
})), })),
createMultiplicativeModifier(() => ({
multiplier: () =>
Decimal.div(workshop.foundationProgress.value, 10).floor().div(10).add(1),
description: "400% Foundation Completed",
enabled: workshop.milestones.extraExpansionMilestone2.earned
})),
createExponentialModifier(() => ({ createExponentialModifier(() => ({
exponent: 1.1, exponent: 1.1,
description: "Mary Level 4", description: "Mary Level 2",
enabled: management.elfTraining.heatedPlanterElfTraining.milestones[3].earned enabled: management.elfTraining.heatedPlanterElfTraining.milestones[1].earned
})) }))
]); ]);
const computedOrePurity = computed(() => orePurity.apply(0.1)); const computedOrePurity = computed(() => orePurity.apply(0.1));

View file

@ -36,6 +36,7 @@ import plastic from "./plastic";
import paper from "./paper"; import paper from "./paper";
import dyes from "./dyes"; import dyes from "./dyes";
import management from "./management"; import management from "./management";
import workshop from "./workshop";
const id = "oil"; const id = "oil";
const day = 9; const day = 9;
@ -720,6 +721,12 @@ const layer = createLayer(id, function (this: BaseLayer) {
description: "Effectiveness", description: "Effectiveness",
enabled: () => Decimal.lt(coalEffectiveness.value, 1) enabled: () => Decimal.lt(coalEffectiveness.value, 1)
})), })),
createMultiplicativeModifier(() => ({
multiplier: () =>
Decimal.div(workshop.foundationProgress.value, 10).floor().div(10).add(1),
description: "600% Foundation Completed",
enabled: workshop.milestones.extraExpansionMilestone3.earned
})),
createMultiplicativeModifier(() => ({ createMultiplicativeModifier(() => ({
multiplier: () => Decimal.sqrt(management.totalElfLevels.value), multiplier: () => Decimal.sqrt(management.totalElfLevels.value),
description: "Jack Level 4", description: "Jack Level 4",

View file

@ -28,6 +28,7 @@ import plastic from "./plastic";
import trees from "./trees"; import trees from "./trees";
import dyes from "./dyes"; import dyes from "./dyes";
import management from "./management"; import management from "./management";
import workshop from "./workshop";
const id = "paper"; const id = "paper";
const day = 5; const day = 5;
@ -300,6 +301,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
multiplier: dyes.boosts.yellow1, multiplier: dyes.boosts.yellow1,
description: "Yellow Dye Boost 1", description: "Yellow Dye Boost 1",
enabled: () => Decimal.gte(dyes.dyes.yellow.amount.value, 1) enabled: () => Decimal.gte(dyes.dyes.yellow.amount.value, 1)
})),
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "1000% Foundation Completed",
enabled: workshop.milestones.extraExpansionMilestone5.earned
})) }))
]) as WithRequired<Modifier, "description" | "revert">; ]) as WithRequired<Modifier, "description" | "revert">;
const ashCost = createSequentialModifier(() => [ const ashCost = createSequentialModifier(() => [

View file

@ -33,6 +33,7 @@ import metal from "./metal";
import oil from "./oil"; import oil from "./oil";
import dyes from "./dyes"; import dyes from "./dyes";
import management from "./management"; import management from "./management";
import workshop from "./workshop";
const id = "plastic"; const id = "plastic";
const day = 10; const day = 10;
@ -262,6 +263,12 @@ const layer = createLayer(id, function (this: BaseLayer) {
multiplier: dyes.boosts.yellow1, multiplier: dyes.boosts.yellow1,
description: "Yellow Dye Boost 1", description: "Yellow Dye Boost 1",
enabled: () => Decimal.gte(dyes.dyes.yellow.amount.value, 1) enabled: () => Decimal.gte(dyes.dyes.yellow.amount.value, 1)
})),
createMultiplicativeModifier(() => ({
multiplier: () =>
Decimal.div(workshop.foundationProgress.value, 10).floor().div(10).add(1),
description: "800% Foundation Completed",
enabled: workshop.milestones.extraExpansionMilestone4.earned
})) }))
]); ]);
const computedPlasticGain = computed(() => plasticGain.apply(0)); const computedPlasticGain = computed(() => plasticGain.apply(0));

View file

@ -292,7 +292,10 @@ const layer = createLayer(id, function (this: BaseLayer) {
enabled: researchUpgrade2.bought enabled: researchUpgrade2.bought
})), })),
createAdditiveModifier(() => ({ createAdditiveModifier(() => ({
addend: () => Decimal.div(workshop.foundationProgress.value, 5).floor(), addend: () =>
workshop.milestones.extraExpansionMilestone1.earned
? Decimal.pow(1.02, workshop.foundationProgress.value)
: Decimal.div(workshop.foundationProgress.value, 5).floor(),
description: "10% Foundation Completed", description: "10% Foundation Completed",
enabled: workshop.milestones.autoCutMilestone1.earned enabled: workshop.milestones.autoCutMilestone1.earned
})), })),
@ -406,16 +409,16 @@ const layer = createLayer(id, function (this: BaseLayer) {
description: "Ivy Level 1", description: "Ivy Level 1",
enabled: management.elfTraining.planterElfTraining.milestones[0].earned enabled: management.elfTraining.planterElfTraining.milestones[0].earned
})), })),
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "Mary Level 2",
enabled: management.elfTraining.heatedPlanterElfTraining.milestones[1].earned
})),
createMultiplicativeModifier(() => ({ createMultiplicativeModifier(() => ({
multiplier: () => Decimal.pow(trees.value, 0.2).log10().pow_base(2), multiplier: () => Decimal.pow(trees.value, 0.2).log10().pow_base(2),
description: "Ivy Level 3", description: "Ivy Level 3",
enabled: management.elfTraining.planterElfTraining.milestones[2].earned enabled: management.elfTraining.planterElfTraining.milestones[2].earned
})), })),
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "Mary Level 4",
enabled: management.elfTraining.heatedPlanterElfTraining.milestones[3].earned
})),
createAdditiveModifier(() => ({ createAdditiveModifier(() => ({
addend: () => addend: () =>
Decimal.sub(lastAutoPlantedAmount.value, lastAutoCuttingAmount.value).max(0), Decimal.sub(lastAutoPlantedAmount.value, lastAutoCuttingAmount.value).max(0),

View file

@ -40,12 +40,12 @@ const layer = createLayer(id, function (this: BaseLayer) {
scaling: addSoftcap( scaling: addSoftcap(
addSoftcap(createPolynomialScaling(250, 1.5), 5387, 1 / 1e10), addSoftcap(createPolynomialScaling(250, 1.5), 5387, 1 / 1e10),
1e20, 1e20,
1e9 3e8
), ),
baseResource: trees.logs, baseResource: trees.logs,
gainResource: noPersist(foundationProgress), gainResource: noPersist(foundationProgress),
roundUpCost: true, roundUpCost: true,
buyMax: management.elfTraining.heatedCutterElfTraining.milestones[2].earned, // buyMax: management.elfTraining.expandersElfTraining.milestones[2].earned,
spend(gain, spent) { spend(gain, spent) {
trees.logs.value = Decimal.sub(trees.logs.value, spent); trees.logs.value = Decimal.sub(trees.logs.value, spent);
}, },
@ -61,7 +61,9 @@ const layer = createLayer(id, function (this: BaseLayer) {
const buildFoundation = createClickable(() => ({ const buildFoundation = createClickable(() => ({
display: jsx(() => ( display: jsx(() => (
<> <>
<b style="font-size: x-large">Build part of the foundation</b> <b style="font-size: x-large">
Build {formatWhole(foundationConversion.actualGain.value)}% of the foundation
</b>
<br /> <br />
<br /> <br />
<span style="font-size: large"> <span style="font-size: large">
@ -82,7 +84,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
management.elfTraining.expandersElfTraining.milestones[2].earned.value management.elfTraining.expandersElfTraining.milestones[2].earned.value
), ),
canClick: () => canClick: () =>
Decimal.gte(foundationConversion.actualGain.value, 1) && Decimal.gte(trees.logs.value, foundationConversion.currentAt.value) &&
(Decimal.lt(foundationProgress.value, 100) || (Decimal.lt(foundationProgress.value, 100) ||
management.elfTraining.expandersElfTraining.milestones[2].earned.value), management.elfTraining.expandersElfTraining.milestones[2].earned.value),
onClick() { onClick() {
@ -182,7 +184,10 @@ const layer = createLayer(id, function (this: BaseLayer) {
}, },
shouldEarn: () => Decimal.gte(foundationProgress.value, 200), shouldEarn: () => Decimal.gte(foundationProgress.value, 200),
visibility: () => visibility: () =>
showIf(management.elfTraining.expandersElfTraining.milestones[2].earned.value), showIf(
logGainMilestone3.earned.value &&
management.elfTraining.expandersElfTraining.milestones[2].earned.value
),
showPopups: shouldShowPopups showPopups: shouldShowPopups
})); }));
const extraExpansionMilestone2 = createMilestone(() => ({ const extraExpansionMilestone2 = createMilestone(() => ({
@ -192,7 +197,10 @@ const layer = createLayer(id, function (this: BaseLayer) {
}, },
shouldEarn: () => Decimal.gte(foundationProgress.value, 400), shouldEarn: () => Decimal.gte(foundationProgress.value, 400),
visibility: () => visibility: () =>
showIf(management.elfTraining.expandersElfTraining.milestones[2].earned.value), showIf(
extraExpansionMilestone1.earned.value &&
management.elfTraining.expandersElfTraining.milestones[2].earned.value
),
showPopups: shouldShowPopups showPopups: shouldShowPopups
})); }));
const extraExpansionMilestone3 = createMilestone(() => ({ const extraExpansionMilestone3 = createMilestone(() => ({
@ -202,7 +210,10 @@ const layer = createLayer(id, function (this: BaseLayer) {
}, },
shouldEarn: () => Decimal.gte(foundationProgress.value, 600), shouldEarn: () => Decimal.gte(foundationProgress.value, 600),
visibility: () => visibility: () =>
showIf(management.elfTraining.expandersElfTraining.milestones[2].earned.value), showIf(
extraExpansionMilestone2.earned.value &&
management.elfTraining.expandersElfTraining.milestones[2].earned.value
),
showPopups: shouldShowPopups showPopups: shouldShowPopups
})); }));
const extraExpansionMilestone4 = createMilestone(() => ({ const extraExpansionMilestone4 = createMilestone(() => ({
@ -212,7 +223,10 @@ const layer = createLayer(id, function (this: BaseLayer) {
}, },
shouldEarn: () => Decimal.gte(foundationProgress.value, 800), shouldEarn: () => Decimal.gte(foundationProgress.value, 800),
visibility: () => visibility: () =>
showIf(management.elfTraining.expandersElfTraining.milestones[2].earned.value), showIf(
extraExpansionMilestone3.earned.value &&
management.elfTraining.expandersElfTraining.milestones[2].earned.value
),
showPopups: shouldShowPopups showPopups: shouldShowPopups
})); }));
const extraExpansionMilestone5 = createMilestone(() => ({ const extraExpansionMilestone5 = createMilestone(() => ({
@ -222,7 +236,10 @@ const layer = createLayer(id, function (this: BaseLayer) {
}, },
shouldEarn: () => Decimal.gte(foundationProgress.value, 1000), shouldEarn: () => Decimal.gte(foundationProgress.value, 1000),
visibility: () => visibility: () =>
showIf(management.elfTraining.expandersElfTraining.milestones[2].earned.value), showIf(
extraExpansionMilestone4.earned.value &&
management.elfTraining.expandersElfTraining.milestones[2].earned.value
),
showPopups: shouldShowPopups showPopups: shouldShowPopups
})); }));
const milestones = { const milestones = {