Created Dye Layer

This commit is contained in:
Jacorb90 2022-12-10 02:10:38 -05:00
parent 0c44171589
commit c01808e46c
10 changed files with 636 additions and 13 deletions

View file

@ -417,8 +417,9 @@ export function setUpDailyProgressTracker(options: {
display: VueFeature | CoercableComponent;
};
usingLog?: Ref<boolean>;
ignoreTotal?: boolean
}) {
const total = trackTotal(options.resource);
const total = options.ignoreTotal ? options.resource : trackTotal(options.resource);
const progressFunc = () => {
if (main.day.value !== options.day) return 1;
let progress = Decimal.add(total.value, 1);
@ -452,7 +453,7 @@ export function setUpDailyProgressTracker(options: {
<div>
{main.day.value === options.day ? (
<>
Reach {formatWhole(options.goal)} total {options.resource.displayName} to
Reach {formatWhole(options.goal)} {options.ignoreTotal ? "" : ("total ")}{options.resource.displayName} to
complete the day
</>
) : (

View file

@ -21,6 +21,7 @@ import { unref } from "vue";
import paper from "./paper";
import plastic from "./plastic";
import trees from "./trees";
import dyes from "./dyes";
const id = "boxes";
const day = 6;
@ -144,7 +145,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
cost() {
let v = this.amount.value;
v = Decimal.pow(0.95, paper.books.boxBook.amount.value).times(v);
return Decimal.pow(3, v).times(100);
return Decimal.pow(3, v).times(100).div(dyes.boosts.orange2.value);
},
visibility: () => showIf(logsUpgrade.bought.value)
})) as GenericBuyable & { resource: Resource };
@ -160,7 +161,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
cost() {
let v = this.amount.value;
v = Decimal.pow(0.95, paper.books.boxBook.amount.value).times(v);
return Decimal.pow(5, v).times(1000);
return Decimal.pow(5, v).times(1000).div(dyes.boosts.orange2.value);;
},
visibility: () => showIf(ashUpgrade.bought.value)
})) as GenericBuyable & { resource: Resource };
@ -176,7 +177,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
cost() {
let v = this.amount.value;
v = Decimal.pow(0.95, paper.books.boxBook.amount.value).times(v);
return Decimal.pow(7, v).times(1000);
return Decimal.pow(7, v).times(1000).div(dyes.boosts.orange2.value);
},
visibility: () => showIf(coalUpgrade.bought.value)
})) as GenericBuyable & { resource: Resource };

View file

@ -37,6 +37,7 @@ import metal from "./metal";
import oil from "./oil";
import paper from "./paper";
import trees from "./trees";
import dyes from "./dyes";
interface BetterFertilizerUpgOptions {
canAfford: () => boolean;
@ -551,7 +552,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
enabled: elves.elves.bonfireElf.bought
})),
createMultiplicativeModifier(() => ({
multiplier: () => Decimal.div(buildKiln.amount.value, 100).add(1),
multiplier: () => Decimal.div(buildKiln.amount.value, 100).times(dyes.boosts.green2.value).add(1),
description: "Kiln Synergy",
enabled: elves.elves.kilnElf.bought
})),
@ -643,7 +644,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
enabled: elves.elves.bonfireElf.bought
})),
createMultiplicativeModifier(() => ({
multiplier: () => Decimal.div(buildKiln.amount.value, 100).add(1),
multiplier: () => Decimal.div(buildKiln.amount.value, 100).times(dyes.boosts.green2.value).add(1),
description: "Kiln Synergy",
enabled: elves.elves.kilnElf.bought
})),

553
src/data/layers/dyes.tsx Normal file
View file

@ -0,0 +1,553 @@
/**
* @module
* @hidden
*/
import Modal from "components/Modal.vue";
import MainDisplay from "features/resources/MainDisplay.vue";
import Spacer from "components/layout/Spacer.vue";
import { BuyableOptions, GenericBuyable, createBuyable } from "features/buyable";
import { jsx, JSXFunction, Visibility } from "features/feature";
import { createResource, Resource } from "features/resources/resource";
import { globalBus } from "game/events";
import { BaseLayer, createLayer } from "game/layers";
import { noPersist, persistent } from "game/persistence";
import Decimal, { DecimalSource, format, formatWhole } from "util/bignum";
import { computed, ComputedRef, ref, Ref, unref } from "vue";
import trees from "./trees";
import oil from "./oil";
import { coerceComponent, render, renderCol, renderRow } from "util/vue";
import { setUpDailyProgressTracker, createCollapsibleModifierSections } from "data/common";
import { createAdditiveModifier, createMultiplicativeModifier, createSequentialModifier, Modifier } from "game/modifiers";
import { WithRequired } from "util/common";
import { createUpgrade, GenericUpgrade } from "features/upgrades/upgrade";
import { createLazyProxy } from "util/proxies";
import coal from "./coal";
interface Dye {
name: string,
amount: Resource<DecimalSource>,
buyable: GenericBuyable,
toGenerate: WithRequired<Modifier, "description" | "revert">,
computedToGenerate: ComputedRef<DecimalSource>,
display: JSXFunction
}
type DyeUpg = "blueDyeUpg" | "redDyeUpg" | "yellowDyeUpg" | "yellowDyeUpg2" | "redDyeUpg2" | "blueDyeUpg2" | "coalUpg"
const id = "dyes";
const day = 11;
const layer = createLayer(id, function (this: BaseLayer) {
const name = "Dyes";
const color = "#D4D4F4";
function createDye(
optionsFunc: () => {
name: string;
color: string;
costs: {
base: Ref<DecimalSource> | DecimalSource;
root?: Ref<DecimalSource> | DecimalSource,
res: Resource<DecimalSource>
}[];
listedBoosts: {
visible: Ref<boolean> | boolean,
desc: Ref<string>
}[];
dyesToReset: {
name: string,
reset: VoidFunction
}[]
} & Partial<BuyableOptions>
): Dye {
return createLazyProxy(() => {
const options = optionsFunc();
const amount = createResource<DecimalSource>(0, optionsFunc().name);
const toGenerate = createSequentialModifier(() => [
createAdditiveModifier(() => ({
addend: () => Decimal.add(buyable.amount.value, 1),
description: `${options.name} Chambers`
})),
createMultiplicativeModifier(() => ({
multiplier: boosts.orange1,
description: "Orange Dye Boost 1",
enabled: options.color == "red" || options.color == "yellow"
})),
createMultiplicativeModifier(() => ({
multiplier: boosts.green1,
description: "Green Dye Boost 1",
enabled: options.color == "yellow" || options.color == "blue"
})),
createMultiplicativeModifier(() => ({
multiplier: boosts.purple1,
description: "Purple Dye Boost 1",
enabled: options.color == "red" || options.color == "blue"
})),
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "Wetter Dyes",
enabled: () => upgrades.yellowDyeUpg.bought.value && options.color == "red" || options.color == "yellow" || options.color == "blue"
}))
]) as WithRequired<Modifier, "description" | "revert">;
const computedToGenerate = computed(() => toGenerate.apply(0));
const buyable: GenericBuyable = createBuyable(() => ({
...options,
style: () => ({ backgroundColor: unref(buyable.canPurchase) ? color : "#545454", minWidth: "200px" }),
display: jsx(() => {
return (
<span>
<h3>{options.name} Chambers</h3>
<br/>
Create {format(computedToGenerate.value)} {options.name}{options.dyesToReset.length > 0 ? ", but reset " + options.dyesToReset.map(dye => dye.name).join(", ") : ""}.
<br/>
<span class="white-space: pre-wrap">
Currently: {options.listedBoosts.filter(b => unref(b.visible)).map(b => render(jsx(() => <div>{unref(b.desc)}</div>)))}
</span>
<div>
Cost: {options.costs.map(c => render(jsx(() =>
<div>
{format(unref(Decimal.pow(unref(buyable.cost) ?? Decimal.dInf, unref(c.root ?? 1)).times(unref(c.base))))}
{" "}{c.res.displayName}<br/>
</div>)))}
</div>
</span>
);
}),
cost() {
let v = buyable.amount.value;
if (Decimal.gte(v, 25)) v = Decimal.pow(v, 2).div(20) // intentional price jump #2
if (Decimal.gte(v, 10)) v = Decimal.pow(v, 2).div(5); // intentional price jump
return Decimal.div(v, 10).plus(1);
},
canPurchase: computed((cost?: DecimalSource) => {
if (unref(buyable.visibility) != Visibility.Visible) return false;
const trueCost = cost ?? unref(buyable.cost) ?? Decimal.dInf;
return options.costs.every(c => Decimal.div(c.res.value, unref(c.base)).root(unref(c.root ?? 1)).gte(trueCost));
}),
onPurchase(cost?: DecimalSource) {
const trueCost = cost ?? unref(buyable.cost) ?? Decimal.dInf;
options.costs.forEach(c => {
c.res.value = Decimal.sub(c.res.value, Decimal.pow(trueCost, unref(c.root ?? 1)).times(unref(c.base)));
});
amount.value = Decimal.add(amount.value, computedToGenerate.value);
buyable.amount.value = Decimal.add(buyable.amount.value, 1);
options.dyesToReset.forEach(dye => dye.reset());
}
}));
return {
name: options.name,
amount,
buyable,
toGenerate,
computedToGenerate,
display: jsx(() => (
<div class="col" style="max-width: 200px">
<MainDisplay resource={amount} color={options.color} style="margin-bottom: 0" />
<Spacer />
{render(buyable)}
</div>
))
}
})
}
const dyes: Record<"red" | "yellow" | "blue" | "orange" | "green" | "purple", Dye> = {
red: createDye(() => ({
name: "Red Dye",
color: "red",
costs: [
{
base: '2e18',
root: 5,
res: trees.logs
},
{
base: computed(() => upgrades.yellowDyeUpg2.bought.value ? '2.5e5' : '5e5'),
root: 2,
res: oil.oil
}
],
listedBoosts: [
{
visible: true,
desc: computed(() => `Increase effective Oil Pumps by ${format(boosts.red1.value)} (does not impact coal consumption)`)
}
],
dyesToReset: [],
})),
yellow: createDye(() => ({
name: "Yellow Dye",
color: "yellow",
costs: [
{
base: '1e18',
root: 5,
res: trees.logs
},
{
base: computed(() => upgrades.yellowDyeUpg2.bought.value ? '5e5' : '1e6'),
root: 2,
res: oil.oil
}
],
listedBoosts: [
{
visible: true,
desc: computed(() => `Multiply Paper \& Plastic gain by ${format(boosts.yellow1.value)}`)
}
],
dyesToReset: [],
})),
blue: createDye(() => ({
name: "Blue Dye",
color: "blue",
costs: [
{
base: '5e17',
root: 5,
res: trees.logs
},
{
base: computed(() => upgrades.yellowDyeUpg2.bought.value ? '1e6' : '2e6'),
root: 2,
res: oil.oil
}
],
listedBoosts: [
{
visible: true,
desc: computed(() => `Add ${formatWhole(boosts.blue1.value)} trees to the forest (after all other modifiers).`)
}
],
dyesToReset: [],
})),
orange: createDye(() => ({
name: "Orange Dye",
color: "orange",
costs: [
{
base: 15,
root: 2,
res: dyes.red.amount
},
{
base: 10,
root: 2,
res: dyes.yellow.amount
}
],
listedBoosts: [
{
visible: true,
desc: computed(() => `Multiply Red and Yellow Dye gain by ${format(boosts.orange1.value)}`)
},
{
visible: true,
desc: computed(() => `Divide Box buyable costs by ${format(boosts.orange2.value)}.`)
}
],
dyesToReset: [{
name: "Red Dye",
reset() {
dyes.red.amount.value = 0;
dyes.red.buyable.amount.value = 0;
}
}, {
name: "Yellow Dye",
reset() {
dyes.yellow.amount.value = 0;
dyes.yellow.buyable.amount.value = 0;
}
}],
})),
green: createDye(() => ({
name: "Green Dye",
color: "green",
costs: [
{
base: 15,
root: 2,
res: dyes.yellow.amount
},
{
base: 10,
root: 2,
res: dyes.blue.amount
}
],
listedBoosts: [
{
visible: true,
desc: computed(() => `Multiply Yellow and Blue Dye gain by ${format(boosts.green1.value)}`)
},
{
visible: true,
desc: computed(() => `Kiln synergy to Coal and Ash gain is ${formatWhole(Decimal.sub(boosts.green2.value, 1).times(100))}% stronger.`)
}
],
dyesToReset: [{
name: "Yellow Dye",
reset() {
dyes.yellow.amount.value = 0;
dyes.yellow.buyable.amount.value = 0;
}
},{
name: "Blue Dye",
reset() {
dyes.blue.amount.value = 0;
dyes.blue.buyable.amount.value = 0;
}
}],
})),
purple: createDye(() => ({
name: "Purple Dye",
color: "purple",
costs: [
{
base: 15,
root: 2,
res: dyes.blue.amount
},
{
base: 10,
root: 2,
res: dyes.red.amount
}
],
listedBoosts: [
{
visible: true,
desc: computed(() => `Multiply Red and Blue Dye gain by ${format(boosts.purple1.value)}`)
},
{
visible: true,
desc: computed(() => `Multiply Smelting Speed and Ore Purity by ${format(boosts.purple2.value)}`)
}
],
dyesToReset: [{
name: "Blue Dye",
reset() {
dyes.blue.amount.value = 0;
dyes.blue.buyable.amount.value = 0;
}
}, {
name: "Red Dye",
reset() {
dyes.red.amount.value = 0;
dyes.red.buyable.amount.value = 0;
}
}],
}))
};
const boosts = {
red1: computed(() => Decimal.pow(Decimal.add(dyes.red.amount.value, 1).log2().plus(1).log2().div(2), upgrades.blueDyeUpg2.bought.value ? 1.5 : 1)),
yellow1: computed(() => Decimal.add(dyes.yellow.amount.value, 1).log2().plus(1)),
blue1: computed(() => Decimal.add(dyes.blue.amount.value, 1).log2().sqrt().times(5e6)),
orange1: computed(() => Decimal.pow(2, Decimal.add(dyes.orange.amount.value, 1).log2().sqrt()).pow(upgrades.coalUpg.bought.value ? 1.2 : 1)),
orange2: computed(() => Decimal.add(dyes.orange.amount.value, 1).log2().plus(1)),
green1: computed(() => Decimal.pow(2, Decimal.add(dyes.green.amount.value, 1).log2().sqrt()).pow(upgrades.coalUpg.bought.value ? 1.2 : 1)),
green2: computed(() => Decimal.add(dyes.green.amount.value, 1).log2().plus(1).pow(upgrades.coalUpg.bought.value ? 2 : 1)),
purple1: computed(() => Decimal.pow(2, Decimal.add(dyes.purple.amount.value, 1).log2().sqrt()).pow(upgrades.coalUpg.bought.value ? 1.2 : 1)),
purple2: computed(() => Decimal.add(dyes.purple.amount.value, 1).log2().plus(1)),
}
const [generalTab, generalTabCollapsed] = createCollapsibleModifierSections(() => [
{
title: "Red Dye Creation",
modifier: dyes.red.toGenerate,
base: 0
},
{
title: "Yellow Dye Creation",
modifier: dyes.yellow.toGenerate,
base: 0
},
{
title: "Blue Dye Creation",
modifier: dyes.blue.toGenerate,
base: 0
},
{
title: "Orange Dye Creation",
modifier: dyes.orange.toGenerate,
base: 0
},
{
title: "Green Dye Creation",
modifier: dyes.green.toGenerate,
base: 0
},
{
title: "Purple Dye Creation",
modifier: dyes.purple.toGenerate,
base: 0
}
]);
const upgrades: Record<DyeUpg, GenericUpgrade> = {
blueDyeUpg: createUpgrade(() => ({
visibility: () => (Decimal.add(dyes.orange.amount.value, dyes.green.amount.value).add(dyes.purple.amount.value).gte(1) || upgrades.blueDyeUpg.bought.value) ? Visibility.Visible : Visibility.Hidden,
display: {
title: "Is Blue Dye just Water?",
description: "Multiply Log gain by log(Auto Cutting Amount)+1."
},
cost: 1000,
resource: dyes.blue.amount,
onPurchase() {
dyes.blue.amount.value = 0;
dyes.blue.buyable.amount.value = 0;
}
})),
redDyeUpg: createUpgrade(() => ({
visibility: () => (Decimal.add(dyes.orange.amount.value, dyes.green.amount.value).add(dyes.purple.amount.value).gte(10) || upgrades.redDyeUpg.bought.value) ? Visibility.Visible : Visibility.Hidden,
display: {
title: "Glistening Paint",
description: "Multiply Ore Purity by log(Cloth)+1."
},
cost: 1500,
resource: dyes.red.amount,
onPurchase() {
dyes.red.amount.value = 0;
dyes.red.buyable.amount.value = 0;
}
})),
yellowDyeUpg: createUpgrade(() => ({
visibility: () => (Decimal.add(dyes.orange.amount.value, dyes.green.amount.value).add(dyes.purple.amount.value).gte(100) || upgrades.yellowDyeUpg.bought.value) ? Visibility.Visible : Visibility.Hidden,
display: {
title: "Wetter Dyes",
description: "Double Red, Yellow, and Blue Dye gain, but reset their amounts."
},
cost: 2000,
resource: dyes.yellow.amount,
onPurchase() {
dyes.red.amount.value = 0;
dyes.red.buyable.amount.value = 0;
dyes.yellow.amount.value = 0;
dyes.yellow.buyable.amount.value = 0;
dyes.blue.amount.value = 0;
dyes.blue.buyable.amount.value = 0;
}
})),
yellowDyeUpg2: createUpgrade(() => ({
visibility: () => upgrades.yellowDyeUpg.bought.value ? Visibility.Visible : Visibility.Hidden,
display: {
title: "Golden Wash",
description: "Halve the Oil cost of Red, Yellow, and Blue Dyes."
},
cost: 5000,
resource: dyes.yellow.amount,
onPurchase() {
dyes.yellow.amount.value = 0;
dyes.yellow.buyable.amount.value = 0;
}
})),
redDyeUpg2: createUpgrade(() => ({
visibility: () => upgrades.redDyeUpg.bought.value ? Visibility.Visible : Visibility.Hidden,
display: {
title: "De Louvre",
description: "Multiply Smelting Speed by sqrt(Refineries+1)"
},
cost: 6000,
resource: dyes.red.amount,
onPurchase() {
dyes.red.amount.value = 0;
dyes.red.buyable.amount.value = 0;
}
})),
blueDyeUpg2: createUpgrade(() => ({
visibility: () => upgrades.blueDyeUpg.bought.value ? Visibility.Visible : Visibility.Hidden,
display: {
title: "Hydrophobia",
description: "Raise Red Dye's effect ^1.5."
},
cost: 7500,
resource: dyes.blue.amount,
onPurchase() {
dyes.blue.amount.value = 0;
dyes.blue.buyable.amount.value = 0;
}
})),
coalUpg: createUpgrade(() => ({
visibility: () => (upgrades.blueDyeUpg2.bought.value && upgrades.redDyeUpg2.bought.value && upgrades.yellowDyeUpg2.bought.value) ? Visibility.Visible : Visibility.Hidden,
display: {
title: "Denser Spectrum",
description: "Orange, Green, and Purple Dyes' first effect is raised ^1.2, and Green Dye's second effect is squared."
},
cost: "5e30",
resource: coal.coal,
onPurchase() {
dyes.red.amount.value = 0;
dyes.red.buyable.amount.value = 0;
dyes.yellow.amount.value = 0;
dyes.yellow.buyable.amount.value = 0;
dyes.blue.amount.value = 0;
dyes.blue.buyable.amount.value = 0;
}
}))
}
const showModifiersModal = ref(false);
const modifiersModal = jsx(() => (
<Modal
modelValue={showModifiersModal.value}
onUpdate:modelValue={(value: boolean) => (showModifiersModal.value = value)}
v-slots={{
header: () => <h2>{name} Modifiers</h2>,
body: generalTab
}}
/>
));
const dyeSum = createResource<DecimalSource>(computed(() => Object.values(dyes).reduce<DecimalSource>((a,c) => Decimal.add(a, c.amount.value), 0)), "Sum of Dyes");
const { total: totalDyeSum, trackerDisplay } = setUpDailyProgressTracker({
resource: dyeSum,
goal: 6e4,
name,
day,
color,
textColor: "var(--feature-foreground)",
modal: {
show: showModifiersModal,
display: modifiersModal
},
ignoreTotal: true
});
return {
name,
color,
dyes,
dyeSum,
boosts,
totalDyeSum,
minWidth: 700,
generalTabCollapsed,
upgrades,
display: jsx(() => (
<>
{render(trackerDisplay)}
<Spacer />
{renderRow(dyes.red.display, dyes.yellow.display, dyes.blue.display)}
<Spacer />
{renderRow(dyes.orange.display, dyes.green.display, dyes.purple.display)}
<Spacer />
{renderRow(upgrades.redDyeUpg, upgrades.yellowDyeUpg, upgrades.blueDyeUpg)}
{renderRow(upgrades.redDyeUpg2, upgrades.yellowDyeUpg2, upgrades.blueDyeUpg2)}
{render(upgrades.coalUpg)}
</>
))
}
});
export default layer;

View file

@ -27,6 +27,9 @@ import { createBuyable, GenericBuyable } from "features/buyable";
import { main } from "../projEntry";
import oil from "./oil";
import boxes from "./boxes";
import cloth from "./cloth";
import plastic from "./plastic";
import dyes from "./dyes";
const id = "metal";
const day = 7;
@ -65,6 +68,16 @@ const layer = createLayer(id, function (this: BaseLayer) {
multiplier: 2,
description: "Carry metal in boxes",
enabled: boxes.row2Upgrades.metalUpgrade.bought
})),
createMultiplicativeModifier(() => ({
multiplier: dyes.boosts.purple2,
description: "Purple Dye Boost 2",
enabled: () => Decimal.gte(dyes.dyes.purple.amount.value, 1)
})),
createMultiplicativeModifier(() => ({
multiplier: () => Decimal.add(cloth.cloth.value, 1).log10().plus(1),
description: "Glistening Paint",
enabled: dyes.upgrades.redDyeUpg.bought
}))
]);
const computedOrePurity = computed(() => orePurity.apply(0.1));
@ -85,6 +98,16 @@ const layer = createLayer(id, function (this: BaseLayer) {
Decimal.mul(oil.activeSmelter.value, oil.oilEffectiveness.value).add(1),
description: "Oil Smelter",
enabled: () => Decimal.gt(oil.activeSmelter.value, 0)
})),
createMultiplicativeModifier(() => ({
multiplier: dyes.boosts.purple2,
description: "Purple Dye Boost 2",
enabled: () => Decimal.gte(dyes.dyes.purple.amount.value, 1)
})),
createMultiplicativeModifier(() => ({
multiplier: () => Decimal.add(plastic.activeRefinery.value, 1).sqrt(),
description: "De Louvre",
enabled: dyes.upgrades.redDyeUpg2.bought
}))
]);
const computedAutoSmeltSpeed = computed(() => autoSmeltSpeed.apply(0));

View file

@ -34,6 +34,7 @@ import { createMilestone, GenericMilestone } from "features/milestones/milestone
import { formatGain } from "util/bignum";
import plastic from "./plastic";
import paper from "./paper";
import dyes from "./dyes";
const id = "oil";
const day = 9;
@ -223,7 +224,8 @@ const layer = createLayer(id, function (this: BaseLayer) {
Decimal.pow(row2Upgrades[3].bought.value ? 4 : 5, activePump.value)
);
const pumpOil = computed(() =>
Decimal.pow(activePump.value, 2)
Decimal.add(activePump.value, computedExtraOilPumps.value)
.pow(2)
.mul(activeHeavy.value)
.mul(Decimal.add(activeHeavy2.value, 1))
.mul(activeExtractor.value)
@ -753,6 +755,15 @@ const layer = createLayer(id, function (this: BaseLayer) {
]);
const computedOilSubstitution = computed(() => oilSubstitution.apply(0));
const extraOilPumps = createSequentialModifier(() => [
createAdditiveModifier(() => ({
addend: dyes.boosts.red1,
description: "Red Dye Boost 1",
enabled: () => Decimal.gte(dyes.dyes.red.amount.value, 1)
}))
])
const computedExtraOilPumps = computed(() => extraOilPumps.apply(0));
const [generalTab, generalTabCollapsed] = createCollapsibleModifierSections(() => [
{
title: "Coal Consumption",
@ -799,6 +810,14 @@ const layer = createLayer(id, function (this: BaseLayer) {
visible() {
return Decimal.gt(computedOilSubstitution.value, 0);
}
},
{
title: "Extra Oil Pumps",
modifier: extraOilPumps,
base: 0,
visible() {
return Decimal.gt(computedExtraOilPumps.value, 0)
}
}
]);
const showModifiersModal = ref(false);

View file

@ -26,6 +26,7 @@ import coal from "./coal";
import elves from "./elves";
import plastic from "./plastic";
import trees from "./trees";
import dyes from "./dyes";
const id = "paper";
const day = 5;
@ -243,6 +244,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
multiplier: 10,
description: "Felt Elbow Pads",
enabled: cloth.paperUpgrades.paperUpgrade4.bought
})),
createMultiplicativeModifier(() => ({
multiplier: dyes.boosts.yellow1,
description: "Yellow Dye Boost 1",
enabled: () => Decimal.gte(dyes.dyes.yellow.amount.value, 1)
}))
]) as WithRequired<Modifier, "description" | "revert">;

View file

@ -31,6 +31,7 @@ import { computed, ref, unref } from "vue";
import boxes from "./boxes";
import metal from "./metal";
import oil from "./oil";
import dyes from "./dyes";
const id = "plastic";
const day = 10;
@ -251,6 +252,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
multiplier: () => oil.oilEffectiveness.value,
description: "Effectiveness",
enabled: () => Decimal.lt(oil.oilEffectiveness.value, 1)
})),
createMultiplicativeModifier(() => ({
multiplier: dyes.boosts.yellow1,
description: "Yellow Dye Boost 1",
enabled: () => Decimal.gte(dyes.dyes.yellow.amount.value, 1)
}))
]);
const computedPlasticGain = computed(() => plasticGain.apply(0));

View file

@ -34,6 +34,7 @@ import coal from "./coal";
import elves from "./elves";
import paper from "./paper";
import workshop from "./workshop";
import dyes from "./dyes";
const id = "trees";
const day = 1;
@ -76,6 +77,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
multiplier: 4,
description: "Lumberjack Boots",
enabled: cloth.treesUpgrades.treesUpgrade1.bought
})),
createAdditiveModifier(() => ({
addend: dyes.boosts.blue1,
description: "Blue Dye Boost 1",
enabled: () => Decimal.gte(dyes.dyes.blue.amount.value, 1)
}))
]) as WithRequired<Modifier, "description" | "revert">;
const trees = createResource(
@ -419,6 +425,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
description: "Felt-Gripped Axe",
enabled: cloth.treesUpgrades.treesUpgrade4.bought
})),
createMultiplicativeModifier(() => ({
multiplier: computed(() => Decimal.add(computedAutoCuttingAmount.value, 1).log10().plus(1)),
description: "Is Blue Dye just Water?",
enabled: dyes.upgrades.blueDyeUpg.bought
})),
createExponentialModifier(() => ({
exponent: 1.2,
description: "100% Foundation Completed",

View file

@ -38,6 +38,7 @@ import metal from "./layers/metal";
import cloth from "./layers/cloth";
import oil from "./layers/oil";
import plastic from "./layers/plastic";
import dyes from "./layers/dyes";
export interface Day extends VueFeature {
day: number;
@ -247,10 +248,10 @@ export const main = createLayer("main", function (this: BaseLayer) {
createDay(() => ({
day: 11,
shouldNotify: false,
layer: null, // "dyes"
symbol: "",
story: "",
completedStory: ""
layer: "dyes",
symbol: "", // TODO: Add symbol for dyes
story: "To make toys, we're going to need some color to make them look nice and enticing! We can't just give kids clear toys after all! To add some color to our toys, we'll need some dyes!",
completedStory: "After all that effort, you finally have a rainbow of dyes to choose from! Now the children won't be able to resist the toys you have to offer, once you get them made of course..."
})),
createDay(() => ({
day: 12,
@ -426,7 +427,8 @@ export const getInitialLayers = (
metal,
cloth,
oil,
plastic
plastic,
dyes
];
/**