From 8615d3dbd12123276b9909826d9563ca7e4c7908 Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Fri, 23 Dec 2022 06:16:33 +0000 Subject: [PATCH 1/8] add sleigh file --- src/data/layers/sleigh.tsx | 276 +++++++++++++++++++++++++++++++++++++ 1 file changed, 276 insertions(+) create mode 100644 src/data/layers/sleigh.tsx diff --git a/src/data/layers/sleigh.tsx b/src/data/layers/sleigh.tsx new file mode 100644 index 0000000..21d84a4 --- /dev/null +++ b/src/data/layers/sleigh.tsx @@ -0,0 +1,276 @@ +/** + * @module + * @hidden + */ +import HotkeyVue from "components/Hotkey.vue"; +import Spacer from "components/layout/Spacer.vue"; +import Modal from "components/Modal.vue"; +import { createCollapsibleMilestones, createCollapsibleModifierSections } from "data/common"; +import { main } from "data/projEntry"; +import { createBar } from "features/bars/bar"; +import { createClickable } from "features/clickables/clickable"; +import { + addHardcap, + addSoftcap, + createIndependentConversion, + createPolynomialScaling +} from "features/conversion"; +import { jsx, showIf } from "features/feature"; +import { createHotkey } from "features/hotkey"; +import { createMilestone } from "features/milestones/milestone"; +import { createResource, displayResource } from "features/resources/resource"; +import { BaseLayer, createLayer } from "game/layers"; +import { + createAdditiveModifier, + createExponentialModifier, + createMultiplicativeModifier, + createSequentialModifier, + Modifier +} from "game/modifiers"; +import { noPersist, persistent } from "game/persistence"; +import Decimal, { DecimalSource, formatWhole } from "util/bignum"; +import { Direction, WithRequired } from "util/common"; +import { render } from "util/vue"; +import { computed, ref, unref, watchEffect } from "vue"; +import elves from "./elves"; +import factory from "./factory"; +import management from "./management"; +import toys from "./toys"; +import trees from "./trees"; +import wrappingPaper from "./wrapping-paper"; + +const id = "sleigh"; +const day = 22; +const layer = createLayer(id, function (this: BaseLayer) { + const name = "Sleigh"; + const color = "#D66B02"; + const colorDark = "#D66B02"; + + const foundationProgress = createResource(0, "foundation progress"); + + const maxFoundation = createSequentialModifier(() => [ + createAdditiveModifier(() => ({ + addend: 900, + description: "Hope Level 3", + enabled: management.elfTraining.expandersElfTraining.milestones[2].earned + })), + createAdditiveModifier(() => ({ + addend: 200, + description: "Build wooden towers", + enabled: toys.row1Upgrades[2].bought + })), + createAdditiveModifier(() => ({ + addend: () => Decimal.times(factory.factoryBuyables.expandFactory.amount.value, 100), + description: "Expand Factory", + enabled: () => Decimal.gt(factory.factoryBuyables.expandFactory.amount.value, 0) + })) + ]) as WithRequired; + const computedMaxFoundation = computed(() => maxFoundation.apply(100)); + + const foundationConversion = createIndependentConversion(() => ({ + // note: 5423 is a magic number. Don't touch this or it'll self-destruct. + scaling: addHardcap( + addSoftcap(addSoftcap(createPolynomialScaling(250, 1.5), 5423, 1 / 1e10), 1e20, 3e8), + computedMaxFoundation + ), + baseResource: trees.logs, + gainResource: noPersist(foundationProgress), + roundUpCost: true, + // buyMax: management.elfTraining.expandersElfTraining.milestones[2].earned, + spend(gain, spent) { + trees.logs.value = Decimal.sub(trees.logs.value, spent); + }, + costModifier: createSequentialModifier(() => [ + createMultiplicativeModifier(() => ({ + multiplier: wrappingPaper.boosts.beach1, + description: "Beach Wrapping Paper", + enabled: computed(() => Decimal.gt(wrappingPaper.boosts.beach1.value, 1)) + })), + createExponentialModifier(() => ({ + exponent: 1 / 0.99, + description: "Holly Level 5", + enabled: management.elfTraining.cutterElfTraining.milestones[4].earned + })), + createExponentialModifier(() => ({ + exponent: 0.1, + description: "Scaling Jump at 1000%", + enabled: computed(() => Decimal.gte(foundationProgress.value, 1000)) + })), + createMultiplicativeModifier(() => ({ + multiplier: 6969, // note: 6969 is a magic number. Don't touch this or it'll self-destruct. + description: "Scaling Jump at 1000%", + enabled: computed(() => Decimal.gte(foundationProgress.value, 1000)) + })) + ]) + })); + + const buildFoundation = createClickable(() => ({ + display: jsx(() => ( + <> + + Build {formatWhole(foundationConversion.actualGain.value)}% of the foundation{" "} + + +
+
+ + {"Cost"}:{" "} + {displayResource(trees.logs, foundationConversion.nextAt.value)}{" "} + {trees.logs.displayName} + + + )), + visibility: () => showIf(Decimal.lt(foundationProgress.value, computedMaxFoundation.value)), + canClick: () => { + if (Decimal.lt(trees.logs.value, foundationConversion.nextAt.value)) { + return false; + } + if (Decimal.gte(foundationProgress.value, computedMaxFoundation.value)) { + return false; + } + return true; + }, + onClick() { + if (!unref(this.canClick)) { + return; + } + foundationConversion.convert(); + }, + style: "width: 600px; min-height: unset" + })); + + const buildFoundationHK = createHotkey(() => ({ + key: "x", + description: "Fix sleigh", + onPress: () => { + if (buildFoundation.canClick.value) buildFoundation.onClick(); + }, + enabled: noPersist(main.days[day - 1].opened) + })); + + const shouldShowPopups = computed(() => !elves.milestones[6].earned.value); + const milestone1 = createMilestone(() => ({ + display: { + requirement: "1% Foundation Completed", + effectDisplay: "Trees give 5% more logs for each % of foundation completed" + }, + shouldEarn: () => Decimal.gte(foundationProgress.value, 1), + showPopups: shouldShowPopups + })); + const milestones = { + milestone1 + }; + const { collapseMilestones, display: milestonesDisplay } = + createCollapsibleMilestones(milestones); + + const dayProgress = createBar(() => ({ + direction: Direction.Right, + width: 600, + height: 25, + fillStyle: `backgroundColor: ${colorDark}`, + progress: () => + main.day.value === day || main.currentlyMastering.value?.name === name + ? Decimal.div(foundationProgress.value, 100) + : 1, + display: jsx(() => + main.day.value === day || main.currentlyMastering.value?.name === name ? ( + <>{formatWhole(foundationProgress.value)}% + ) : ( + "" + ) + ) + })); + + const [generalTab, generalTabCollapsed] = createCollapsibleModifierSections(() => [ + { + title: "Max Foundation", + modifier: maxFoundation, + base: 100 + } + ]); + const showModifiersModal = ref(false); + const modifiersModal = jsx(() => ( + (showModifiersModal.value = value)} + v-slots={{ + header: () =>

{name} Modifiers

, + body: generalTab + }} + /> + )); + + watchEffect(() => { + if (main.day.value === day && Decimal.gte(foundationProgress.value, 100)) { + main.completeDay(); + } else if ( + main.currentlyMastering.value?.name === name && + Decimal.gte(foundationProgress.value, 100) + ) { + main.completeMastery(); + } + }); + + return { + name, + day, + color, + foundationProgress, + foundationConversion, + milestones, + collapseMilestones, + minWidth: 700, + buildFoundationHK, + generalTabCollapsed, + display: jsx(() => ( + <> +
+ {main.day.value === day + ? `Complete the sleigh to complete the day` + : main.currentlyMastering.value?.name === name + ? `Complete the foundation to decorate the day` + : `${name} Complete!`} + {Decimal.gt(computedMaxFoundation.value, 100) ? ( + <> + {" - "} + + + ) : null} +
+ {render(dayProgress)} + {render(modifiersModal)} + +
+ The foundation is +

+ {formatWhole(foundationProgress.value)} +

+ % completed +
+ {Decimal.lt(foundationProgress.value, 100) || + management.elfTraining.expandersElfTraining.milestones[2].earned.value ? ( + + ) : null} + {render(buildFoundation)} + + {milestonesDisplay()} + + )), + minimizedDisplay: jsx(() => ( +
+ {name}{" "} + + {formatWhole(foundationProgress.value)}% {foundationProgress.displayName} + +
+ )), + }; +}); + +export default layer; From 4c8a213eb430b2a65c005dfeef47250fc56043e3 Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Fri, 23 Dec 2022 06:33:30 +0000 Subject: [PATCH 2/8] a bunch of sleigh things --- src/data/layers/sleigh.tsx | 187 ++++++++++++------------------------- src/data/projEntry.tsx | 4 +- 2 files changed, 64 insertions(+), 127 deletions(-) diff --git a/src/data/layers/sleigh.tsx b/src/data/layers/sleigh.tsx index 21d84a4..fb673e4 100644 --- a/src/data/layers/sleigh.tsx +++ b/src/data/layers/sleigh.tsx @@ -28,7 +28,7 @@ import { Modifier } from "game/modifiers"; import { noPersist, persistent } from "game/persistence"; -import Decimal, { DecimalSource, formatWhole } from "util/bignum"; +import Decimal, { DecimalSource, format, formatTime, formatWhole } from "util/bignum"; import { Direction, WithRequired } from "util/common"; import { render } from "util/vue"; import { computed, ref, unref, watchEffect } from "vue"; @@ -38,6 +38,12 @@ import management from "./management"; import toys from "./toys"; import trees from "./trees"; import wrappingPaper from "./wrapping-paper"; +import metal from "./metal"; +import plastic from "./plastic" +import { createBuyable, GenericBuyable } from "features/buyable"; +import { Resource } from "features/resources/resource"; +import { isArray } from "@vue/shared"; + const id = "sleigh"; const day = 22; @@ -45,108 +51,61 @@ const layer = createLayer(id, function (this: BaseLayer) { const name = "Sleigh"; const color = "#D66B02"; const colorDark = "#D66B02"; - - const foundationProgress = createResource(0, "foundation progress"); - - const maxFoundation = createSequentialModifier(() => [ - createAdditiveModifier(() => ({ - addend: 900, - description: "Hope Level 3", - enabled: management.elfTraining.expandersElfTraining.milestones[2].earned - })), - createAdditiveModifier(() => ({ - addend: 200, - description: "Build wooden towers", - enabled: toys.row1Upgrades[2].bought - })), - createAdditiveModifier(() => ({ - addend: () => Decimal.times(factory.factoryBuyables.expandFactory.amount.value, 100), - description: "Expand Factory", - enabled: () => Decimal.gt(factory.factoryBuyables.expandFactory.amount.value, 0) - })) - ]) as WithRequired; - const computedMaxFoundation = computed(() => maxFoundation.apply(100)); - - const foundationConversion = createIndependentConversion(() => ({ - // note: 5423 is a magic number. Don't touch this or it'll self-destruct. - scaling: addHardcap( - addSoftcap(addSoftcap(createPolynomialScaling(250, 1.5), 5423, 1 / 1e10), 1e20, 3e8), - computedMaxFoundation - ), - baseResource: trees.logs, - gainResource: noPersist(foundationProgress), - roundUpCost: true, - // buyMax: management.elfTraining.expandersElfTraining.milestones[2].earned, - spend(gain, spent) { - trees.logs.value = Decimal.sub(trees.logs.value, spent); - }, - costModifier: createSequentialModifier(() => [ - createMultiplicativeModifier(() => ({ - multiplier: wrappingPaper.boosts.beach1, - description: "Beach Wrapping Paper", - enabled: computed(() => Decimal.gt(wrappingPaper.boosts.beach1.value, 1)) - })), - createExponentialModifier(() => ({ - exponent: 1 / 0.99, - description: "Holly Level 5", - enabled: management.elfTraining.cutterElfTraining.milestones[4].earned - })), - createExponentialModifier(() => ({ - exponent: 0.1, - description: "Scaling Jump at 1000%", - enabled: computed(() => Decimal.gte(foundationProgress.value, 1000)) - })), - createMultiplicativeModifier(() => ({ - multiplier: 6969, // note: 6969 is a magic number. Don't touch this or it'll self-destruct. - description: "Scaling Jump at 1000%", - enabled: computed(() => Decimal.gte(foundationProgress.value, 1000)) - })) - ]) - })); - - const buildFoundation = createClickable(() => ({ + const maxProgress = 100 + function displayCost( + res: Resource | Resource[], + cost: DecimalSource, + label: string + ) { + const affordable = (isArray(res) ? res : [res]).every(res => Decimal.gte(res.value, cost)); + return ( + + {format(cost)} {label} + + ); + } + const sleighProgress = computed(() => sleigh.amount) + const sleigh = createBuyable(() => ({ display: jsx(() => ( <> - - Build {formatWhole(foundationConversion.actualGain.value)}% of the foundation{" "} - - -
-
- - {"Cost"}:{" "} - {displayResource(trees.logs, foundationConversion.nextAt.value)}{" "} - {trees.logs.displayName} - +

Fix the sleigh

+
+ Increase sleigh fixed by 1% +
+
+ Costs {displayCost(trees.logs, Decimal.pow(10, 100), "logs")}, +
)), - visibility: () => showIf(Decimal.lt(foundationProgress.value, computedMaxFoundation.value)), - canClick: () => { - if (Decimal.lt(trees.logs.value, foundationConversion.nextAt.value)) { - return false; - } - if (Decimal.gte(foundationProgress.value, computedMaxFoundation.value)) { - return false; - } - return true; + canPurchase(): boolean { + return ( + /*classroomCost.value.wood.lte(trees.logs.value) && + classroomCost.value.paper.lte(paper.paper.value) && + classroomCost.value.boxes.lte(boxes.boxes.value) && + classroomCost.value.metalIngots.lte(metal.metal.value)*/ + true + ); }, - onClick() { - if (!unref(this.canClick)) { - return; - } - foundationConversion.convert(); + onPurchase() { + /*trees.logs.value = Decimal.sub(trees.logs.value, classroomCost.value.wood); + paper.paper.value = Decimal.sub(paper.paper.value, classroomCost.value.paper); + boxes.boxes.value = Decimal.sub(boxes.boxes.value, classroomCost.value.boxes); + metal.metal.value = Decimal.sub(metal.metal.value, classroomCost.value.metalIngots); + this.amount.value = Decimal.add(this.amount.value, 1);*/ }, - style: "width: 600px; min-height: unset" - })); + visibility: () => showIf(Decimal.lt(sleighProgress.value.value, 100)), + style: "width: 600px" + })) as GenericBuyable; - const buildFoundationHK = createHotkey(() => ({ + + /*const buildFoundationHK = createHotkey(() => ({ key: "x", description: "Fix sleigh", onPress: () => { if (buildFoundation.canClick.value) buildFoundation.onClick(); }, enabled: noPersist(main.days[day - 1].opened) - })); + }));*/ const shouldShowPopups = computed(() => !elves.milestones[6].earned.value); const milestone1 = createMilestone(() => ({ @@ -154,7 +113,7 @@ const layer = createLayer(id, function (this: BaseLayer) { requirement: "1% Foundation Completed", effectDisplay: "Trees give 5% more logs for each % of foundation completed" }, - shouldEarn: () => Decimal.gte(foundationProgress.value, 1), + shouldEarn: () => Decimal.gte(sleighProgress.value.value, 1), showPopups: shouldShowPopups })); const milestones = { @@ -170,18 +129,18 @@ const layer = createLayer(id, function (this: BaseLayer) { fillStyle: `backgroundColor: ${colorDark}`, progress: () => main.day.value === day || main.currentlyMastering.value?.name === name - ? Decimal.div(foundationProgress.value, 100) + ? Decimal.div(sleighProgress.value.value, 100) : 1, display: jsx(() => main.day.value === day || main.currentlyMastering.value?.name === name ? ( - <>{formatWhole(foundationProgress.value)}% + <>{formatWhole(sleighProgress.value.value)}% ) : ( "" ) ) })); - const [generalTab, generalTabCollapsed] = createCollapsibleModifierSections(() => [ + /*const [generalTab, generalTabCollapsed] = createCollapsibleModifierSections(() => [ { title: "Max Foundation", modifier: maxFoundation, @@ -198,66 +157,44 @@ const layer = createLayer(id, function (this: BaseLayer) { body: generalTab }} /> - )); + ));*/ watchEffect(() => { - if (main.day.value === day && Decimal.gte(foundationProgress.value, 100)) { + if (main.day.value === day && Decimal.gte(sleighProgress.value.value, 100)) { main.completeDay(); - } else if ( - main.currentlyMastering.value?.name === name && - Decimal.gte(foundationProgress.value, 100) - ) { - main.completeMastery(); - } + } }); return { name, day, color, - foundationProgress, - foundationConversion, + sleighProgress, milestones, collapseMilestones, minWidth: 700, - buildFoundationHK, - generalTabCollapsed, + sleigh, display: jsx(() => ( <>
{main.day.value === day ? `Complete the sleigh to complete the day` - : main.currentlyMastering.value?.name === name - ? `Complete the foundation to decorate the day` : `${name} Complete!`} - {Decimal.gt(computedMaxFoundation.value, 100) ? ( - <> - {" - "} - - - ) : null}
{render(dayProgress)} - {render(modifiersModal)}
The foundation is

- {formatWhole(foundationProgress.value)} + {formatWhole(sleighProgress.value.value)}

% completed
- {Decimal.lt(foundationProgress.value, 100) || + {Decimal.lt(sleighProgress.value.value, 100) || management.elfTraining.expandersElfTraining.milestones[2].earned.value ? ( ) : null} - {render(buildFoundation)} + {render(sleigh)} {milestonesDisplay()} @@ -266,7 +203,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
{name}{" "} - {formatWhole(foundationProgress.value)}% {foundationProgress.displayName} + {formatWhole(sleighProgress.value.value)}% sleigh
)), diff --git a/src/data/projEntry.tsx b/src/data/projEntry.tsx index 349bac1..f66a830 100644 --- a/src/data/projEntry.tsx +++ b/src/data/projEntry.tsx @@ -482,9 +482,9 @@ export const main = createLayer("main", function (this: BaseLayer) { createDay(() => ({ day: 22, shouldNotify: false, - layer: null, // "sleigh" + layer: "sleigh", // "sleigh" symbol: "", - story: "", + story: "default body", completedStory: "", masteredStory: "" })), From 93979988ad446a06a8d36a60884081fbd903c1f3 Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Fri, 23 Dec 2022 06:42:51 +0000 Subject: [PATCH 3/8] import sleigh into projentry --- src/data/projEntry.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/data/projEntry.tsx b/src/data/projEntry.tsx index f66a830..c1fff89 100644 --- a/src/data/projEntry.tsx +++ b/src/data/projEntry.tsx @@ -35,6 +35,7 @@ import ribbon from "./layers/ribbon"; import toys from "./layers/toys"; import trees from "./layers/trees"; import workshop from "./layers/workshop"; +import sleigh from "./layers/sleigh"; import wrappingPaper from "./layers/wrapping-paper"; import boxesSymbol from "./symbols/cardboardBox.png"; import clothSymbol from "./symbols/cloth.png"; @@ -615,7 +616,8 @@ export const getInitialLayers = ( wrappingPaper, ribbon, toys, - factory + factory, + sleigh ]; /** From 9ba136b8b1889ce23da1d14984847c71551cf885 Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Fri, 23 Dec 2022 06:56:52 +0000 Subject: [PATCH 4/8] add sleigh cost thing --- src/data/layers/sleigh.tsx | 46 +++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/src/data/layers/sleigh.tsx b/src/data/layers/sleigh.tsx index fb673e4..780dfe9 100644 --- a/src/data/layers/sleigh.tsx +++ b/src/data/layers/sleigh.tsx @@ -65,6 +65,14 @@ const layer = createLayer(id, function (this: BaseLayer) { ); } const sleighProgress = computed(() => sleigh.amount) + const sleighCost = computed(() => { + let v = sleighProgress.value.value; + return { + wood: Decimal.mul(1e100, Decimal.pow(1.2, v)), + metal: Decimal.mul(1e60, Decimal.pow(1.1, v)), + plastic: Decimal.mul(1e20, Decimal.pow(1.05, v)) + }; + }); const sleigh = createBuyable(() => ({ display: jsx(() => ( <> @@ -73,45 +81,31 @@ const layer = createLayer(id, function (this: BaseLayer) { Increase sleigh fixed by 1%
- Costs {displayCost(trees.logs, Decimal.pow(10, 100), "logs")}, + Costs {displayCost(trees.logs, sleighCost.value.wood, "logs")}, + {displayCost(metal.metal, sleighCost.value.metal, "metal")}, + {displayCost(plastic.plastic, sleighCost.value.plastic, "plastic")}
)), canPurchase(): boolean { return ( - /*classroomCost.value.wood.lte(trees.logs.value) && - classroomCost.value.paper.lte(paper.paper.value) && - classroomCost.value.boxes.lte(boxes.boxes.value) && - classroomCost.value.metalIngots.lte(metal.metal.value)*/ - true + sleighCost.value.wood.lte(trees.logs.value) && + sleighCost.value.metal.lte(metal.metal.value) && + sleighCost.value.plastic.lte(plastic.plastic.value) ); }, onPurchase() { - /*trees.logs.value = Decimal.sub(trees.logs.value, classroomCost.value.wood); - paper.paper.value = Decimal.sub(paper.paper.value, classroomCost.value.paper); - boxes.boxes.value = Decimal.sub(boxes.boxes.value, classroomCost.value.boxes); - metal.metal.value = Decimal.sub(metal.metal.value, classroomCost.value.metalIngots); - this.amount.value = Decimal.add(this.amount.value, 1);*/ + this.amount.value = Decimal.add(this.amount.value, 1); }, visibility: () => showIf(Decimal.lt(sleighProgress.value.value, 100)), style: "width: 600px" })) as GenericBuyable; - - /*const buildFoundationHK = createHotkey(() => ({ - key: "x", - description: "Fix sleigh", - onPress: () => { - if (buildFoundation.canClick.value) buildFoundation.onClick(); - }, - enabled: noPersist(main.days[day - 1].opened) - }));*/ - - const shouldShowPopups = computed(() => !elves.milestones[6].earned.value); + const shouldShowPopups = computed(() => true); const milestone1 = createMilestone(() => ({ display: { - requirement: "1% Foundation Completed", - effectDisplay: "Trees give 5% more logs for each % of foundation completed" + requirement: "1% Sleigh Fixed", + effectDisplay: "Ore gives 5% more metal for each % of sleigh fixed" }, shouldEarn: () => Decimal.gte(sleighProgress.value.value, 1), showPopups: shouldShowPopups @@ -184,11 +178,11 @@ const layer = createLayer(id, function (this: BaseLayer) { {render(dayProgress)}
- The foundation is + The sleigh is

{formatWhole(sleighProgress.value.value)}

- % completed + % fixed
{Decimal.lt(sleighProgress.value.value, 100) || management.elfTraining.expandersElfTraining.milestones[2].earned.value ? ( From f9799c95ed982703076f51de65de94f776d3ad54 Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Fri, 23 Dec 2022 06:58:15 +0000 Subject: [PATCH 5/8] remove unnecessary lines --- src/data/layers/sleigh.tsx | 51 +++----------------------------------- 1 file changed, 4 insertions(+), 47 deletions(-) diff --git a/src/data/layers/sleigh.tsx b/src/data/layers/sleigh.tsx index 780dfe9..4593cfd 100644 --- a/src/data/layers/sleigh.tsx +++ b/src/data/layers/sleigh.tsx @@ -2,49 +2,25 @@ * @module * @hidden */ -import HotkeyVue from "components/Hotkey.vue"; import Spacer from "components/layout/Spacer.vue"; -import Modal from "components/Modal.vue"; -import { createCollapsibleMilestones, createCollapsibleModifierSections } from "data/common"; +import { createCollapsibleMilestones} from "data/common"; import { main } from "data/projEntry"; import { createBar } from "features/bars/bar"; -import { createClickable } from "features/clickables/clickable"; -import { - addHardcap, - addSoftcap, - createIndependentConversion, - createPolynomialScaling -} from "features/conversion"; import { jsx, showIf } from "features/feature"; -import { createHotkey } from "features/hotkey"; import { createMilestone } from "features/milestones/milestone"; -import { createResource, displayResource } from "features/resources/resource"; import { BaseLayer, createLayer } from "game/layers"; -import { - createAdditiveModifier, - createExponentialModifier, - createMultiplicativeModifier, - createSequentialModifier, - Modifier -} from "game/modifiers"; -import { noPersist, persistent } from "game/persistence"; -import Decimal, { DecimalSource, format, formatTime, formatWhole } from "util/bignum"; -import { Direction, WithRequired } from "util/common"; +import Decimal, { DecimalSource, format, formatWhole } from "util/bignum"; +import { Direction} from "util/common"; import { render } from "util/vue"; -import { computed, ref, unref, watchEffect } from "vue"; -import elves from "./elves"; -import factory from "./factory"; +import { computed, watchEffect } from "vue"; import management from "./management"; -import toys from "./toys"; import trees from "./trees"; -import wrappingPaper from "./wrapping-paper"; import metal from "./metal"; import plastic from "./plastic" import { createBuyable, GenericBuyable } from "features/buyable"; import { Resource } from "features/resources/resource"; import { isArray } from "@vue/shared"; - const id = "sleigh"; const day = 22; const layer = createLayer(id, function (this: BaseLayer) { @@ -134,25 +110,6 @@ const layer = createLayer(id, function (this: BaseLayer) { ) })); - /*const [generalTab, generalTabCollapsed] = createCollapsibleModifierSections(() => [ - { - title: "Max Foundation", - modifier: maxFoundation, - base: 100 - } - ]); - const showModifiersModal = ref(false); - const modifiersModal = jsx(() => ( - (showModifiersModal.value = value)} - v-slots={{ - header: () =>

{name} Modifiers

, - body: generalTab - }} - /> - ));*/ - watchEffect(() => { if (main.day.value === day && Decimal.gte(sleighProgress.value.value, 100)) { main.completeDay(); From e703ba61c4ab5cf5df58ec1e5ba2ccfc84a0b9ee Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Fri, 23 Dec 2022 06:59:57 +0000 Subject: [PATCH 6/8] color --- src/data/layers/sleigh.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/data/layers/sleigh.tsx b/src/data/layers/sleigh.tsx index 4593cfd..0f91ce7 100644 --- a/src/data/layers/sleigh.tsx +++ b/src/data/layers/sleigh.tsx @@ -25,9 +25,8 @@ const id = "sleigh"; const day = 22; const layer = createLayer(id, function (this: BaseLayer) { const name = "Sleigh"; - const color = "#D66B02"; - const colorDark = "#D66B02"; - const maxProgress = 100 + const color = "#D71830"; + const colorDark = "#A01020"; function displayCost( res: Resource | Resource[], cost: DecimalSource, From ddffb9cbda11334d173f2cd7e15bcc2e76029e54 Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Fri, 23 Dec 2022 07:00:31 +0000 Subject: [PATCH 7/8] wording --- src/data/layers/sleigh.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/layers/sleigh.tsx b/src/data/layers/sleigh.tsx index 0f91ce7..925774b 100644 --- a/src/data/layers/sleigh.tsx +++ b/src/data/layers/sleigh.tsx @@ -128,7 +128,7 @@ const layer = createLayer(id, function (this: BaseLayer) { <>
{main.day.value === day - ? `Complete the sleigh to complete the day` + ? `Fix the sleigh to complete the day` : `${name} Complete!`}
{render(dayProgress)} From cf5486fd71225bd570f36ac240d38e891e9c2a6b Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Fri, 23 Dec 2022 18:43:14 +0000 Subject: [PATCH 8/8] add more milestones --- src/data/layers/sleigh.tsx | 84 +++++++++++++++++++++++++++++++++----- 1 file changed, 73 insertions(+), 11 deletions(-) diff --git a/src/data/layers/sleigh.tsx b/src/data/layers/sleigh.tsx index 925774b..93247e9 100644 --- a/src/data/layers/sleigh.tsx +++ b/src/data/layers/sleigh.tsx @@ -43,23 +43,22 @@ const layer = createLayer(id, function (this: BaseLayer) { const sleighCost = computed(() => { let v = sleighProgress.value.value; return { - wood: Decimal.mul(1e100, Decimal.pow(1.2, v)), - metal: Decimal.mul(1e60, Decimal.pow(1.1, v)), - plastic: Decimal.mul(1e20, Decimal.pow(1.05, v)) + wood: Decimal.mul(1e60, Decimal.pow(1.2, v)), + metal: Decimal.mul(1e40, Decimal.pow(1.1, v)), + plastic: Decimal.mul(1e10, Decimal.pow(1.05, v)) }; }); const sleigh = createBuyable(() => ({ display: jsx(() => ( <> -

Fix the sleigh

-
- Increase sleigh fixed by 1% -
-
- Costs {displayCost(trees.logs, sleighCost.value.wood, "logs")}, + Fix 1% of the sleigh +
+
+ + Cost: {displayCost(trees.logs, sleighCost.value.wood, "logs")}, {displayCost(metal.metal, sleighCost.value.metal, "metal")}, {displayCost(plastic.plastic, sleighCost.value.plastic, "plastic")} -
+ )), canPurchase(): boolean { @@ -85,8 +84,71 @@ const layer = createLayer(id, function (this: BaseLayer) { shouldEarn: () => Decimal.gte(sleighProgress.value.value, 1), showPopups: shouldShowPopups })); + const milestone2 = createMilestone(() => ({ + display: { + requirement: "10% Sleigh Fixed", + effectDisplay: "Gain an additional 5% more wood for each 5% of sleigh fixed" + }, + shouldEarn: () => Decimal.gte(sleighProgress.value.value, 10), + showPopups: shouldShowPopups + })); + const milestone3 = createMilestone(() => ({ + display: { + requirement: "20% Sleigh Fixed", + effectDisplay: "Gain an additional 5% more plastic for each 5% of sleigh fixed" + }, + shouldEarn: () => Decimal.gte(sleighProgress.value.value, 20), + showPopups: shouldShowPopups + })); + const milestone4 = createMilestone(() => ({ + display: { + requirement: "30% Sleigh Fixed", + effectDisplay: "All automatic metal actions are doubled" + }, + shouldEarn: () => Decimal.gte(sleighProgress.value.value, 30), + showPopups: shouldShowPopups + })); + const milestone5 = createMilestone(() => ({ + display: { + requirement: "40% Sleigh Fixed", + effectDisplay: "Plastic gain is doubled" + }, + shouldEarn: () => Decimal.gte(sleighProgress.value.value, 40), + showPopups: shouldShowPopups + })); + const milestone6 = createMilestone(() => ({ + display: { + requirement: "50% Sleigh Fixed", + effectDisplay: "Trees give 10x as many logs" + }, + shouldEarn: () => Decimal.gte(sleighProgress.value.value, 50), + showPopups: shouldShowPopups + })); + const milestone7 = createMilestone(() => ({ + display: { + requirement: "75% Sleigh Fixed", + effectDisplay: "Gain 10 extra refineries for every 2% of sleigh fixed" + }, + shouldEarn: () => Decimal.gte(sleighProgress.value.value, 75), + showPopups: shouldShowPopups + })); + const milestone8 = createMilestone(() => ({ + display: { + requirement: "100% Sleigh Fixed", + effectDisplay: "Metal per ore is raised to the 1.2th power" + }, + shouldEarn: () => Decimal.gte(sleighProgress.value.value, 100), + showPopups: shouldShowPopups + })); const milestones = { - milestone1 + milestone1, + milestone2, + milestone3, + milestone4, + milestone5, + milestone6, + milestone7, + milestone8 }; const { collapseMilestones, display: milestonesDisplay } = createCollapsibleMilestones(milestones);