diff --git a/src/data/layers/dyes.tsx b/src/data/layers/dyes.tsx index 6d94dff..d81551c 100644 --- a/src/data/layers/dyes.tsx +++ b/src/data/layers/dyes.tsx @@ -36,6 +36,7 @@ import oil from "./oil"; import paper from "./paper"; import trees from "./trees"; import toys from "./toys"; +import factory from "./factory"; interface Dye { name: string; @@ -56,7 +57,7 @@ type DyeUpg = | "blueDyeUpg2" | "coalUpg"; -export type enumColor = "red" | "green" | "blue" | "yellow" | "purple" | "orange" | "black"; +export type enumColor = "red" | "green" | "blue" | "yellow" | "purple" | "orange" | "black" | "white"; const id = "dyes"; const day = 11; @@ -214,6 +215,7 @@ const layer = createLayer(id, function (this: BaseLayer) { case "yellow": case "blue": case "black": + case "white": dyeBook = paper.books.primaryDyeBook; break; case "orange": @@ -520,6 +522,31 @@ const layer = createLayer(id, function (this: BaseLayer) { dyesToReset: [], visibility: () => showIf(toys.milestones.milestone2.earned.value) }), + white: createDye({ + name: "White Dye", + color: "white", + key: "q", + costs: () => [ + { + base: "1e60", + root: 5, + res: trees.logs + }, + { + base: computed(() => (upgrades.yellowDyeUpg2.bought.value ? "1e17" : "2e17")), + root: 2, + res: oil.oil + } + ], + listedBoosts: [ + { + visible: true, + desc: computed(() => `*${format(boosts.white1.value)} plastic gain.`) + } + ], + dyesToReset: [], + visibility: () => showIf(factory.upgrades[2][2].bought.value) + }), orange: createDye({ name: "Orange Dye", color: "orange", @@ -702,6 +729,11 @@ const layer = createLayer(id, function (this: BaseLayer) { Decimal.pow(2, Decimal.add(dyes.black.amount.value, 1).log2().sqrt()) .pow(upgrades.coalUpg.bought.value ? 1.2 : 1) .pow(management.elfTraining.clothElfTraining.milestones[3].earned.value ? 1.1 : 1) + ), + white1: computed(() => + Decimal.pow(2, Decimal.add(dyes.white.amount.value, 1).log2().sqrt()) + .pow(upgrades.coalUpg.bought.value ? 1.2 : 1) + .pow(management.elfTraining.clothElfTraining.milestones[3].earned.value ? 1.1 : 1) ) }; @@ -726,6 +758,11 @@ const layer = createLayer(id, function (this: BaseLayer) { modifier: dyes.black.toGenerate, base: 0 }, + { + title: "White Dye Creation", + modifier: dyes.white.toGenerate, + base: 0 + }, { title: "Orange Dye Creation", modifier: dyes.orange.toGenerate, @@ -956,8 +993,8 @@ const layer = createLayer(id, function (this: BaseLayer) { ) : null}
- {renderRow(dyes.black.display)} - {renderRow(dyes.black.buyable)} + {renderRow(dyes.black.display, dyes.white.display)} + {renderRow(dyes.black.buyable, dyes.white.buyable)} {renderRow(dyes.red.display, dyes.yellow.display, dyes.blue.display)} {renderRow(dyes.red.buyable, dyes.yellow.buyable, dyes.blue.buyable)} diff --git a/src/data/layers/factory-components/button.svg b/src/data/layers/factory-components/button.svg new file mode 100644 index 0000000..1e11f88 --- /dev/null +++ b/src/data/layers/factory-components/button.svg @@ -0,0 +1,50 @@ + + + + + + + + + + diff --git a/src/data/layers/factory-components/buttonmaker.svg b/src/data/layers/factory-components/buttonmaker.svg new file mode 100644 index 0000000..3bbc888 --- /dev/null +++ b/src/data/layers/factory-components/buttonmaker.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + diff --git a/src/data/layers/factory-components/circuit.svg b/src/data/layers/factory-components/circuit.svg new file mode 100644 index 0000000..1fd0a6b --- /dev/null +++ b/src/data/layers/factory-components/circuit.svg @@ -0,0 +1,300 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/layers/factory-components/circuitmaker.svg b/src/data/layers/factory-components/circuitmaker.svg new file mode 100644 index 0000000..fe41d8d --- /dev/null +++ b/src/data/layers/factory-components/circuitmaker.svg @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/layers/factory-components/console.svg b/src/data/layers/factory-components/console.svg new file mode 100644 index 0000000..03141da --- /dev/null +++ b/src/data/layers/factory-components/console.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/layers/factory-components/consolemaker.svg b/src/data/layers/factory-components/consolemaker.svg new file mode 100644 index 0000000..daef2f4 --- /dev/null +++ b/src/data/layers/factory-components/consolemaker.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/layers/factory-components/stuffing.svg b/src/data/layers/factory-components/stuffing.svg new file mode 100644 index 0000000..a8204fc --- /dev/null +++ b/src/data/layers/factory-components/stuffing.svg @@ -0,0 +1,50 @@ + + + + + + + + + + diff --git a/src/data/layers/factory-components/stuffingmaker.svg b/src/data/layers/factory-components/stuffingmaker.svg new file mode 100644 index 0000000..f15ac12 --- /dev/null +++ b/src/data/layers/factory-components/stuffingmaker.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + diff --git a/src/data/layers/factory.tsx b/src/data/layers/factory.tsx index 1153e32..46384b4 100644 --- a/src/data/layers/factory.tsx +++ b/src/data/layers/factory.tsx @@ -30,7 +30,7 @@ import { noPersist, Persistent, persistent, State } from "game/persistence"; import Decimal, { DecimalSource, format, formatWhole } from "util/bignum"; import { Direction } from "util/common"; import { ProcessedComputable } from "util/computed"; -import { render, renderGrid, renderRow } from "util/vue"; +import { render, renderGrid, renderRow, VueFeature } from "util/vue"; import { computed, ComputedRef, reactive, ref, unref, watchEffect } from "vue"; import _cloth from "../symbols/cloth.png"; import _dye from "../symbols/dyes.png"; @@ -38,18 +38,14 @@ import _metal from "../symbols/metal.png"; import _plastic from "../symbols/plastic.png"; import boxes from "./boxes"; import coal from "./coal"; -import { - default as _bear, - default as _circuitBoard, - default as _console, - default as _stuffing -} from "./factory-components/bear.svg"; -import { - default as _bearMaker, - default as _circuitBoardMaker, - default as _consoleMaker, - default as _stuffingMaker -} from "./factory-components/bearmaker.svg"; +import _bear from "./factory-components/bear.svg"; +import _bearMaker from "./factory-components/bearmaker.svg"; +import _stuffing from "./factory-components/stuffing.svg"; +import _console from "./factory-components/console.svg"; +import _circuitBoard from "./factory-components/circuit.svg"; +import _stuffingMaker from "./factory-components/stuffingmaker.svg"; +import _consoleMaker from "./factory-components/consolemaker.svg"; +import _circuitBoardMaker from "./factory-components/circuitmaker.svg"; import _block from "./factory-components/block.svg"; import _blockMaker from "./factory-components/blockmaker.svg"; import _bucket from "./factory-components/bucket.svg"; @@ -67,11 +63,10 @@ import _rotateLeft from "./factory-components/rotateLeft.svg"; import _rotateRight from "./factory-components/rotateRight.svg"; import _plankMaker from "./factory-components/sawmill.svg"; import _shed from "./factory-components/shed.svg"; -import { default as _button, default as _shovel } from "./factory-components/shovel.svg"; -import { - default as _buttonMaker, - default as _shovelMaker -} from "./factory-components/shovelmaker.svg"; +import _button from "./factory-components/button.svg"; +import _shovel from "./factory-components/shovel.svg"; +import _shovelMaker from "./factory-components/shovelmaker.svg"; +import _buttonMaker from "./factory-components/buttonmaker.svg"; import _thread from "./factory-components/thread.svg"; import _threadMaker from "./factory-components/threadmaker.svg"; import _truck from "./factory-components/truck.svg"; @@ -87,8 +82,8 @@ import trees from "./trees"; import workshop from "./workshop"; import paper from "./paper"; import metal from "./metal"; -import dyes from "./dyes" -import plastic from "./plastic" +import dyes from "./dyes"; +import plastic from "./plastic"; const id = "factory"; @@ -97,7 +92,7 @@ const advancedDay = 19; const presentsDay = 20; const toyGoal = 750; -const advancedToyGoal = 2000; +const advancedToyGoal = 1500; // 20x20 block size // TODO: unhardcode stuff @@ -105,13 +100,6 @@ const advancedToyGoal = 2000; function roundDownTo(num: number, multiple: number) { return Math.floor((num + multiple / 2) / multiple) * multiple; } -function getRelativeCoords(e: MouseEvent) { - const rect = (e.target as HTMLElement).getBoundingClientRect(); - return { - x: e.clientX - rect.left, - y: e.clientY - rect.top - }; -} function rotateDir(dir: Direction, relative = Direction.Right) { const directions = [Direction.Up, Direction.Right, Direction.Down, Direction.Left]; let index = directions.indexOf(dir); @@ -150,6 +138,15 @@ const factory = createLayer(id, () => { const bucketAndShovels = createResource(0, "shovel and pails"); const consoles = createResource(0, "consoles"); + function getRelativeCoords(e: MouseEvent) { + const rect = (e.target as HTMLElement).getBoundingClientRect(); + const offset = computedFactorySize.value % 2 === 0 ? -blockSize / 2 : 0; + return { + x: e.clientX - rect.left + offset, + y: e.clientY - rect.top + offset + }; + } + const energy = createSequentialModifier(() => [ createAdditiveModifier(() => ({ addend: () => Decimal.add(1, coal.coal.value).log10(), @@ -167,7 +164,12 @@ const factory = createLayer(id, () => { })), createMultiplicativeModifier(() => ({ multiplier: 1.4, - description: "2000 toys", + description: "1500 toys", + enabled: toys.milestones.milestone6.earned + })), + createMultiplicativeModifier(() => ({ + multiplier: 1.4, + description: "6000 toys", enabled: toys.milestones.milestone6.earned })) ]); @@ -194,6 +196,23 @@ const factory = createLayer(id, () => { multiplier: energyEfficiency, description: "Energy Consumption", enabled: () => Decimal.gt(energyConsumption.value, computedEnergy.value) + })), + createMultiplicativeModifier(() => ({ + multiplier: Decimal.add(paper.paper.value, 1).log10().div(100).add(1), + description: "News Ticker", + enabled: () => upgrades[0][1].bought.value + })), + createMultiplicativeModifier(() => ({ + multiplier: Decimal.lt(energyEfficiency.value, 1) + ? 1 + : Decimal.sub(2, Decimal.div(energyConsumption.value, computedEnergy.value)), + description: "Brighter work rooms", + enabled: () => upgrades[2][1].bought.value + })), + createMultiplicativeModifier(() => ({ + multiplier: 1.5, + description: "Carry ticks in boxes", + enabled: () => upgrades[2][3].bought.value })) ]); const computedTickRate = computed(() => tickRate.apply(1)); @@ -356,7 +375,7 @@ const factory = createLayer(id, () => { tick: 1, outputs: { dye: { - amount: 1 + amount: computed(() => (upgrades[1][1].bought.value ? 4 : 1)) } } } as FactoryComponentDeclaration, @@ -386,7 +405,7 @@ const factory = createLayer(id, () => { tick: 1, outputs: { plastic: { - amount: 1 + amount: computed(() => (upgrades[1][2].bought.value ? 4 : 1)) } } } as FactoryComponentDeclaration, @@ -400,12 +419,12 @@ const factory = createLayer(id, () => { tick: 1, inputs: { wood: { - amount: 1 + amount: computed(() => (upgrades[0][0].bought.value ? 2 : 1)) } }, outputs: { plank: { - amount: 1 + amount: computed(() => (upgrades[0][0].bought.value ? 2 : 1)) } } } as FactoryComponentDeclaration, @@ -527,7 +546,7 @@ const factory = createLayer(id, () => { } }, outputs: { - shovel: { + bucket: { amount: 1 } }, @@ -571,7 +590,7 @@ const factory = createLayer(id, () => { }, outputs: { block: { - amount: 1, + amount: computed(() => (upgrades[1][0].bought.value ? 3 : 1)), resource: toys.woodenBlocks } } @@ -650,7 +669,7 @@ const factory = createLayer(id, () => { }, outputs: { bear: { - amount: 1, + amount: computed(() => (upgrades[1][3].bought.value ? 2 : 1)), resource: bears } }, @@ -702,7 +721,7 @@ const factory = createLayer(id, () => { }, outputs: { console: { - amount: 1, + amount: computed(() => (upgrades[1][3].bought.value ? 3 : 1)), resource: consoles } }, @@ -1010,7 +1029,7 @@ const factory = createLayer(id, () => { const oilFuel = createBuyable(() => ({ resource: oil.oil, cost() { - return Decimal.pow(10, this.amount.value).times(1e24); + return Decimal.pow(10, this.amount.value).times(1e23); }, display: { title: "Oil Fuel", @@ -1040,64 +1059,118 @@ const factory = createLayer(id, () => { const factoryBuyables = { expandFactory, oilFuel, carryToys }; const upgrades = [[createUpgrade(() => ({ resource: trees.logs, - cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1e80), + cost: () =>Decimal.pow(5, upgradeAmount.value).mul(1e75), display: { title: "Sawmill Efficiency", - description: "Metal increases sawmill consumption and production by *log(metal)/10" - } + description: "Double sawmill consumption and production and metal supplier efficiency" + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) })), createUpgrade(() => ({ resource: paper.paper, - cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1e94), + cost: () =>Decimal.pow(5, upgradeAmount.value).mul(1e90), display: { title: "News Ticker", - description: "Paper boosts tick speed" // formula: *1+log(x)/100 - } + description: "Paper boosts tick speed" + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) })), createUpgrade(() => ({ resource: toys.trucks, - cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1000), + cost: () =>Decimal.pow(1.2, upgradeAmount.value).mul(1000), display: { title: "Haul wood in trucks", description: "Trucks multiply wood gain" - } + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) })), createUpgrade(() => ({ resource: metal.metal, - cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1e55), + cost: () =>Decimal.pow(3, upgradeAmount.value).mul(1e53), display: { title: "Diamond-tipped drills", description: "Drill power ^1.2" - } + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) }))], [createUpgrade(() => ({ resource: toys.woodenBlocks, - cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1000), + cost: () =>Decimal.pow(1.2, upgradeAmount.value).mul(2000), display: { title: "Larger wood pieces", description: "Wooden block producers produce 3x as much" - } + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) })), createUpgrade(() => ({ resource: dyes.dyes.red.amount, - cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1e17), + cost: () =>Decimal.pow(1.5, upgradeAmount.value).mul(4e16), display: { title: "Colorful clothes", description: "Dye producers produce 4x as much" - } + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) })), createUpgrade(() => ({ resource: plastic.plastic, - cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1e17), + cost: () =>Decimal.pow(2, upgradeAmount.value).mul(1e17), display: { title: "Improved plastic producers", description: "Plastic producers produce 4x as much" - } + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) + })), + createUpgrade(() => ({ + resource: oil.oil, + cost: () =>Decimal.pow(1.5, upgradeAmount.value).mul(1e22), + display: { + title: "Capitalism", + description: "Console production is tripled" + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) + }))], + [createUpgrade(() => ({ + resource: coal.coal, + cost: () =>Decimal.pow(5, upgradeAmount.value).mul(1e130), + display: { + title: "Brighter work rooms", + description: "Unused electricity makes ticks faster" + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) + })), + createUpgrade(() => ({ + resource: dyes.dyes.blue.amount, + cost: () =>Decimal.pow(1.4, upgradeAmount.value).mul(1e15), + display: { + title: "Colorful teddy bears", + description: "Teddy bears produce 2x as much" + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) + })), + createUpgrade(() => ({ + resource: dyes.dyes.black.amount, + cost: () =>Decimal.pow(1.5, upgradeAmount.value).mul(1e6), + display: { + title: "New Colors", + description: "Unlock white dye" + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) + })), + createUpgrade(() => ({ + resource: boxes.boxes, + cost: () =>Decimal.pow(3, upgradeAmount.value).mul(1e80), + display: { + title: "Carry ticks in boxes", + description: "Tick speed x1.5" + }, + visible: () => showIf(main.days[advancedDay - 1].opened.value) }))], ] // pixi - const upgradeAmount = computed(() => Object.values(upgrades).filter(u => u.bought.value).length) as ComputedRef + const upgradeAmount = computed( + () => upgrades.flat().filter(u => u.bought.value).length + ) as ComputedRef; // load every sprite here so pixi doesn't complain about loading multiple times const assetsLoading = Promise.all([ Assets.load(Object.values(FACTORY_COMPONENTS).map(x => x.imageSrc)), @@ -1164,8 +1237,6 @@ const factory = createLayer(id, () => { } } - updateGraphics(); - loaded = true; watchEffect(updateGraphics); }); @@ -1497,19 +1568,20 @@ const factory = createLayer(id, () => { graphicContainer.removeChild(hoverSprite); if (isMouseHoverShown.value && compSelected.value !== "cursor") { + // Offset half a block if factory size is even + const factorySizeOffset = computedFactorySize.value % 2 === 0 ? blockSize / 2 : 0; const { tx, ty } = spriteContainer.localTransform; + const x = + roundDownTo(mouseCoords.x - tx, blockSize) + factorySizeOffset + tx - blockSize / 2; + const y = + roundDownTo(mouseCoords.y - ty, blockSize) + factorySizeOffset + ty - blockSize / 2; graphicContainer.lineStyle(4, 0x808080, 1); - graphicContainer.drawRect( - roundDownTo(mouseCoords.x - tx, blockSize) + tx - blockSize / 2, - roundDownTo(mouseCoords.y - ty, blockSize) + ty - blockSize / 2, - blockSize, - blockSize - ); + graphicContainer.drawRect(x, y, blockSize, blockSize); const factoryBaseData = FACTORY_COMPONENTS[compSelected.value]; const sheet = Assets.get(factoryBaseData.imageSrc); hoverSprite = new Sprite(sheet); - hoverSprite.x = roundDownTo(mouseCoords.x - tx, blockSize) + tx - blockSize / 2; - hoverSprite.y = roundDownTo(mouseCoords.y - ty, blockSize) + ty - blockSize / 2; + hoverSprite.x = x; + hoverSprite.y = y; hoverSprite.width = blockSize; hoverSprite.height = blockSize; hoverSprite.alpha = 0.5; @@ -1677,7 +1749,6 @@ const factory = createLayer(id, () => { const hovered = ref(false); const componentsList = jsx(() => { return ( -
{ ); } - const hoveredComponent = jsx(() => - compHovered.value !== undefined ? ( + const hoveredComponent = jsx(() => { + if (compHovered.value == null) { + return ""; + } + const factorySizeOffset = computedFactorySize.value % 2 === 0 ? blockSize / 2 : 0; + const x = mouseCoords.x + factorySizeOffset; + const y = mouseCoords.y + factorySizeOffset; + const onRight = + x + (document.getElementById("factory-info")?.clientWidth ?? 0) > app.view.width - 30; + const onTop = + y + (document.getElementById("factory-info")?.clientHeight ?? 0) > app.view.height - 30; + return (
- app.view.width - 30 - ? { right: app.view.width - mouseCoords.x + "px" } - : { left: mouseCoords.x + 148 + "px" }), - ...(mouseCoords.y + - (document.getElementById("factory-info")?.clientHeight ?? 0) > - app.view.height - 30 - ? { bottom: app.view.height - mouseCoords.y + "px" } - : { top: mouseCoords.y + "px" }) + ...(onRight ? { right: app.view.width - x + "px" } : { left: x + 148 + "px" }), + ...(onTop ? { bottom: app.view.height - y + "px" } : { top: y + "px" }) }} >

{FACTORY_COMPONENTS[compHovered.value.type].name}

@@ -1797,10 +1870,8 @@ const factory = createLayer(id, () => { ) : undefined}
- ) : ( - "" - ) - ); + ); + }); const tabs = createTabFamily( { @@ -1863,7 +1934,7 @@ const factory = createLayer(id, () => { {renderRow(...Object.values(factoryBuyables))} - {renderGrid(upgrades as VueFeature[])} + {renderGrid(...(upgrades as VueFeature[][]))} )) })), diff --git a/src/data/layers/oil.tsx b/src/data/layers/oil.tsx index a047ba9..5d8e692 100644 --- a/src/data/layers/oil.tsx +++ b/src/data/layers/oil.tsx @@ -25,6 +25,7 @@ import { createSequentialModifier, createAdditiveModifier, createMultiplicativeModifier, + createExponentialModifier, Modifier } from "game/modifiers"; import { main } from "data/projEntry"; @@ -41,6 +42,7 @@ import workshop from "./workshop"; import { WithRequired } from "util/common"; import { ElfBuyable } from "./elves"; import toys from "./toys"; +import factory from "./factory"; const id = "oil"; const day = 9; @@ -889,6 +891,11 @@ const layer = createLayer(id, function (this: BaseLayer) { multiplier: dyes.boosts.red2, description: "Red Dye", enabled: dyes.masteryEffectActive + })), + createExponentialModifier(() => ({ + exponent: 1.2, + description: "Diamond-tipped drills", + enabled: factory.upgrades[0][3].bought })) ]); const computedDrillPower = computed(() => drillPower.apply(0)); diff --git a/src/data/layers/plastic.tsx b/src/data/layers/plastic.tsx index b79c0b7..cf7cc2a 100644 --- a/src/data/layers/plastic.tsx +++ b/src/data/layers/plastic.tsx @@ -379,6 +379,10 @@ const layer = createLayer(id, function (this: BaseLayer) { multiplier: 50, description: "350 toys", enabled: toys.milestones.milestone4.earned + })), + createMultiplicativeModifier(() => ({ + multiplier: () => dyes.boosts.white1.value, + description: "White Dye Boost" })) ]); const computedPlasticGain = computed(() => plasticGain.apply(0)); diff --git a/src/data/layers/toys.tsx b/src/data/layers/toys.tsx index 83c6417..370f43f 100644 --- a/src/data/layers/toys.tsx +++ b/src/data/layers/toys.tsx @@ -288,6 +288,15 @@ const layer = createLayer(id, function (this: BaseLayer) { visibility: () => showIf(milestone6.earned.value && main.days[factory.advancedDay - 1].opened.value) })) as GenericMilestone; + const milestone8 = createMilestone(() => ({ + display: { + requirement: "6000 toys", + effectDisplay: "Running out of energy? Let's increase the limit! Multiply energy capacity by 1.4" + }, + shouldEarn: () => Decimal.gte(toySum.value, 6000), + visibility: () => + showIf(milestone6.earned.value && main.days[factory.advancedDay - 1].opened.value) + })) as GenericMilestone; const milestones = { milestone1, milestone2, @@ -295,7 +304,8 @@ const layer = createLayer(id, function (this: BaseLayer) { milestone4, milestone5, milestone6, - milestone7 + milestone7, + milestone8 }; const { collapseMilestones, display: milestonesDisplay } = createCollapsibleMilestones(milestones); diff --git a/src/data/layers/trees.tsx b/src/data/layers/trees.tsx index 51a799a..034fdf3 100644 --- a/src/data/layers/trees.tsx +++ b/src/data/layers/trees.tsx @@ -39,6 +39,7 @@ import paper from "./paper"; import workshop from "./workshop"; import wrappingPaper from "./wrapping-paper"; import toys from "./toys"; +import factory from "./factory"; const id = "trees"; const day = 1; @@ -551,6 +552,11 @@ const layer = createLayer(id, function (this: BaseLayer) { description: "3000 Toys", enabled: toys.milestones.milestone7.earned })), + createMultiplicativeModifier(() => ({ + multiplier: () => Decimal.add(toys.trucks.value, 1), + description: "Haul wood in trucks", + enabled: factory.upgrades[0][2].bought + })), createExponentialModifier(() => ({ exponent: 1.2, description: "100% Foundation Completed",