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",