From 25f6a2ab7b3e62a633249b98b249deb32f6b8a5e Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Mon, 12 Dec 2022 15:08:52 -0800 Subject: [PATCH 1/3] add focus upgrades(this will probably cause errors --- src/data/layers/management.tsx | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/data/layers/management.tsx b/src/data/layers/management.tsx index 0669a79..3b9f37a 100644 --- a/src/data/layers/management.tsx +++ b/src/data/layers/management.tsx @@ -988,7 +988,31 @@ const layer = createLayer(id, () => { } } } - + const focusUpgrade1 = createUpgrade(() => ({ + display: { + title: "Focus Booster", + description: "Double experience multiplier from focus" + }, + resource: trees.trees, + cost: 1e30 + })); + const focusUpgrade2 = createUpgrade(() => ({ + display: { + title: "Focus Buffer", + description: "Increase elves affected by focus by 1" + }, + resource: trees, + cost: 1e40 + })); + const focusUpgrade3 = createUpgrade(() => ({ + display: { + title: "Focus Upgrader", + description: "Focus can now be rerolled every 10 seconds" + }, + resource: trees.trees, + cost: 1e50 + })); + const upgrades = { focusUpgrade1, focusUpgrade2, focusUpgrade3 }; // ------------------------------------------------------------------------------- Schools const schoolCost = computed(() => { @@ -1237,8 +1261,10 @@ const layer = createLayer(id, () => { classroomUpgrade, focusMultiplier: focusMulti, + upgrades, focusTargets, focusRolling, + display: jsx(() => ( <> From b609ea1000a0aaab6ae93646caff38893fc00301 Mon Sep 17 00:00:00 2001 From: unsoftcapped3 <75136164+unsoftcapped3@users.noreply.github.com> Date: Mon, 12 Dec 2022 15:14:19 -0800 Subject: [PATCH 2/3] There is no error. --- src/data/layers/management.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/layers/management.tsx b/src/data/layers/management.tsx index 3b9f37a..4d3232d 100644 --- a/src/data/layers/management.tsx +++ b/src/data/layers/management.tsx @@ -1001,7 +1001,7 @@ const layer = createLayer(id, () => { title: "Focus Buffer", description: "Increase elves affected by focus by 1" }, - resource: trees, + resource: trees.trees, cost: 1e40 })); const focusUpgrade3 = createUpgrade(() => ({ From bee8ce7d5169e7205fa7dc409d6488a902a890f5 Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Mon, 12 Dec 2022 17:17:31 -0600 Subject: [PATCH 3/3] Implement Holly and Ivy lv4-5 --- src/data/layers/management.tsx | 22 +++--------- src/data/layers/trees.tsx | 39 +++++++++++++++++---- src/data/layers/workshop.tsx | 63 +++++++++++++++++++--------------- 3 files changed, 73 insertions(+), 51 deletions(-) diff --git a/src/data/layers/management.tsx b/src/data/layers/management.tsx index 4d3232d..f384f72 100644 --- a/src/data/layers/management.tsx +++ b/src/data/layers/management.tsx @@ -32,19 +32,6 @@ const id = "management"; const day = 12; const advancedDay = 13; -interface ElfTrainingClickable extends GenericClickable { - name: string; - state: Persistent; - displayMilestone: JSXFunction; - level: ComputedRef; - exp: Persistent; - milestones: GenericMilestone[]; - timeForExp: ComputedRef; - amountOfTimesDone: Ref; - elfXPGainComputed: ComputedRef; - elfXPGain: Modifier; -} - const layer = createLayer(id, () => { const name = "Management"; const color = "green"; // idk what to do @@ -262,7 +249,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Holly Level 4", - effectDisplay: "Multiply cutting speed by 1.1 per day completed" + effectDisplay: "Multiply auto cutting amount by 1.1 per day completed" }, visibility: () => showIf(cutterElfMilestones[2].earned.value && main.day.value >= 13), shouldEarn: () => cutterElfTraining.level.value >= 4 @@ -297,7 +284,7 @@ const layer = createLayer(id, () => { requirement: "Ivy Level 3", effectDisplay: jsx(() => ( <> - Planting speed is multiplied by 2 + Auto planting speed is multiplied by 2 (log10(logs)0.2) @@ -318,7 +305,8 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Ivy Level 5", - effectDisplay: "Boost planting/cutting speed based on which is falling behind" + effectDisplay: + "The lesser of auto planting and cutting amounts is increased to match the greater" }, visibility: () => showIf(planterElfMilestones[3].earned.value && main.day.value >= 13), shouldEarn: () => planterElfTraining.level.value >= 5 @@ -861,7 +849,7 @@ const layer = createLayer(id, () => { paperElfTraining, boxElfTraining, clothElfTraining - } as Record; + }; const day12Elves = [ cutterElfTraining, planterElfTraining, diff --git a/src/data/layers/trees.tsx b/src/data/layers/trees.tsx index ae53265..0d17f64 100644 --- a/src/data/layers/trees.tsx +++ b/src/data/layers/trees.tsx @@ -27,7 +27,7 @@ import { noPersist, persistent } from "game/persistence"; import Decimal, { DecimalSource, format, formatGain, formatLimit, formatWhole } from "util/bignum"; import { Direction, WithRequired } from "util/common"; import { render, renderGrid, renderRow } from "util/vue"; -import { computed, ref } from "vue"; +import { computed, ref, watch } from "vue"; import boxes from "./boxes"; import cloth from "./cloth"; import coal from "./coal"; @@ -223,7 +223,11 @@ const layer = createLayer(id, function (this: BaseLayer) { if (Decimal.gte(v, 200)) v = Decimal.pow(v, 2).div(200); if (Decimal.gte(v, 2e6)) v = Decimal.pow(v, 2).div(2e6); v = Decimal.pow(0.95, paper.books.plantersBook.amount.value).times(v); - return Decimal.times(100, v).add(200); + let cost = Decimal.times(100, v).add(200); + if (management.elfTraining.planterElfTraining.milestones[3].earned.value) { + cost = Decimal.div(cost, 10); + } + return cost; }, display: { title: "Generic Planters", @@ -310,9 +314,24 @@ const layer = createLayer(id, function (this: BaseLayer) { multiplier: 4, description: "Lumberjack Jeans", enabled: cloth.treesUpgrades.treesUpgrade2.bought + })), + createMultiplicativeModifier(() => ({ + multiplier: () => Decimal.pow(1.1, main.day.value), + description: "Holly Level 4", + enabled: management.elfTraining.cutterElfTraining.milestones[3].earned + })), + createAdditiveModifier(() => ({ + addend: () => + Decimal.sub(lastAutoCuttingAmount.value, lastAutoPlantedAmount.value).max(0), + description: "Ivy Level 5", + enabled: management.elfTraining.planterElfTraining.milestones[4].earned })) ]) as WithRequired; const computedAutoCuttingAmount = computed(() => autoCuttingAmount.apply(0)); + const lastAutoCuttingAmount = ref(0); + watch(computedAutoCuttingAmount, cut => { + lastAutoCuttingAmount.value = cut; + }); const manualPlantingAmount = createSequentialModifier(() => [ createAdditiveModifier(() => ({ @@ -388,12 +407,22 @@ const layer = createLayer(id, function (this: BaseLayer) { enabled: management.elfTraining.heatedPlanterElfTraining.milestones[1].earned })), createMultiplicativeModifier(() => ({ - multiplier: () => Decimal.pow(trees.value, .2).log10().pow_base(2), + multiplier: () => Decimal.pow(trees.value, 0.2).log10().pow_base(2), description: "Ivy Level 3", enabled: management.elfTraining.planterElfTraining.milestones[2].earned + })), + createAdditiveModifier(() => ({ + addend: () => + Decimal.sub(lastAutoPlantedAmount.value, lastAutoCuttingAmount.value).max(0), + description: "Ivy Level 5", + enabled: management.elfTraining.planterElfTraining.milestones[4].earned })) ]) as WithRequired; const computedAutoPlantingAmount = computed(() => autoPlantingAmount.apply(0)); + const lastAutoPlantedAmount = ref(0); + watch(computedAutoPlantingAmount, planted => { + lastAutoPlantedAmount.value = planted; + }); const logGain = createSequentialModifier(() => [ createMultiplicativeModifier(() => ({ @@ -454,9 +483,7 @@ const layer = createLayer(id, function (this: BaseLayer) { enabled: dyes.upgrades.blueDyeUpg.bought })), createMultiplicativeModifier(() => ({ - multiplier: computed(() => - Decimal.add(computedAutoCuttingAmount.value, 1).root(3) - ), + multiplier: computed(() => Decimal.add(computedAutoCuttingAmount.value, 1).root(3)), description: "Holly Level 1", enabled: management.elfTraining.cutterElfTraining.milestones[0].earned })), diff --git a/src/data/layers/workshop.tsx b/src/data/layers/workshop.tsx index aebfc6f..1058726 100644 --- a/src/data/layers/workshop.tsx +++ b/src/data/layers/workshop.tsx @@ -9,35 +9,24 @@ import { createBar } from "features/bars/bar"; import { createClickable } from "features/clickables/clickable"; import { addSoftcap, - Conversion, createIndependentConversion, - createPolynomialScaling, - ScalingFunction + createPolynomialScaling } from "features/conversion"; import { jsx, showIf } from "features/feature"; import { createHotkey } from "features/hotkey"; import { createMilestone } from "features/milestones/milestone"; -import { createResource, displayResource, Resource } from "features/resources/resource"; +import { createResource, displayResource } from "features/resources/resource"; import { BaseLayer, createLayer } from "game/layers"; +import { createExponentialModifier, createSequentialModifier } from "game/modifiers"; import { noPersist } from "game/persistence"; import Decimal, { DecimalSource, formatWhole } from "util/bignum"; import { Direction } from "util/common"; -import { Computable } from "util/computed"; import { render } from "util/vue"; import { computed, unref, watchEffect } from "vue"; import elves from "./elves"; import management from "./management"; import trees from "./trees"; -interface FoundationConversionOptions { - scaling: ScalingFunction; - baseResource: Resource; - gainResource: Resource; - roundUpCost: boolean; - buyMax: Computable; - spend: (gain: DecimalSource, spent: DecimalSource) => void; -} - const id = "workshop"; const day = 2; const layer = createLayer(id, function (this: BaseLayer) { @@ -47,17 +36,27 @@ const layer = createLayer(id, function (this: BaseLayer) { const foundationProgress = createResource(0, "foundation progress"); - const foundationConversion: Conversion = - createIndependentConversion(() => ({ - scaling: addSoftcap(addSoftcap(createPolynomialScaling(250, 1.5), 5387, 1/1e10), 1e20, 1e9), - baseResource: trees.logs, - gainResource: noPersist(foundationProgress), - roundUpCost: true, - buyMax: management.elfTraining.heatedCutterElfTraining.milestones[2].earned, - spend(gain, spent) { - trees.logs.value = Decimal.sub(trees.logs.value, spent); - } - })); + const foundationConversion = createIndependentConversion(() => ({ + scaling: addSoftcap( + addSoftcap(createPolynomialScaling(250, 1.5), 5387, 1 / 1e10), + 1e20, + 1e9 + ), + baseResource: trees.logs, + gainResource: noPersist(foundationProgress), + roundUpCost: true, + buyMax: management.elfTraining.heatedCutterElfTraining.milestones[2].earned, + spend(gain, spent) { + trees.logs.value = Decimal.sub(trees.logs.value, spent); + }, + costModifier: createSequentialModifier(() => [ + createExponentialModifier(() => ({ + exponent: 0.95, + description: "Holly Level 5", + enabled: management.elfTraining.cutterElfTraining.milestones[4].earned + })) + ]) + })); const buildFoundation = createClickable(() => ({ display: jsx(() => ( @@ -77,10 +76,15 @@ const layer = createLayer(id, function (this: BaseLayer) { )), - visibility: () => showIf(Decimal.lt(foundationProgress.value, 100) || management.elfTraining.expandersElfTraining.milestones[2].earned.value), + visibility: () => + showIf( + Decimal.lt(foundationProgress.value, 100) || + management.elfTraining.expandersElfTraining.milestones[2].earned.value + ), canClick: () => Decimal.gte(foundationConversion.actualGain.value, 1) && - (Decimal.lt(foundationProgress.value, 100) || management.elfTraining.expandersElfTraining.milestones[2].earned.value), + (Decimal.lt(foundationProgress.value, 100) || + management.elfTraining.expandersElfTraining.milestones[2].earned.value), onClick() { if (!unref(this.canClick)) { return; @@ -282,7 +286,10 @@ const layer = createLayer(id, function (this: BaseLayer) { % completed - {Decimal.lt(foundationProgress.value, 100) || management.elfTraining.expandersElfTraining.milestones[2].earned.value ? : null} + {Decimal.lt(foundationProgress.value, 100) || + management.elfTraining.expandersElfTraining.milestones[2].earned.value ? ( + + ) : null} {render(buildFoundation)} {milestonesDisplay()}