diff --git a/src/data/layers/factory.tsx b/src/data/layers/factory.tsx index d576e8e..a87ff2b 100644 --- a/src/data/layers/factory.tsx +++ b/src/data/layers/factory.tsx @@ -8,7 +8,7 @@ import { globalBus } from "game/events"; import { createLayer } from "game/layers"; import { Persistent, persistent, State } from "game/persistence"; import player from "game/player"; -import { formatWhole } from "util/bignum"; +import Decimal, { formatWhole } from "util/bignum"; import { Direction } from "util/common"; import { computed, ComputedRef, reactive, ref, watchEffect } from "vue"; import conveyor from "./factory-components/conveyor.png"; @@ -74,6 +74,16 @@ const factory = createLayer(id, () => { const name = "The Factory"; const color = "grey"; + const energy = computed(() => 100); + const energyConsumption = computed(() => + Object.values(components.value) + .map(c => FACTORY_COMPONENTS[c.type].energyCost ?? 0) + .reduce((a, b) => a + b, 0) + ); + const tickRate = computed(() => + Decimal.div(energyConsumption.value, energy.value).pow(2).min(1) + ); + // ---------------------------------------------- Components const FACTORY_COMPONENTS = { @@ -93,6 +103,7 @@ const factory = createLayer(id, () => { imageSrc: conveyor, name: "Conveyor", description: "Moves items at 1 block per second.", + energyCost: 1, tick: 1, ports: { [Direction.Left]: { @@ -107,6 +118,7 @@ const factory = createLayer(id, () => { imageSrc: wood, name: "Wood Machine", description: "Produces 1 wood every 1 second.", + energyCost: 10, tick: 1, outputs: { wood: { @@ -114,11 +126,22 @@ const factory = createLayer(id, () => { } } }, - - blocks: { - imageSrc: blocks, - name: "Wooden Block Maker", - description: "Turns 1 wood into 1 wooden block every second.", + receiver: { + imageSrc: square, + name: "Receiver", + description: "Obtains squares. Pretty much does nothing else.", + tick: 0, + inputs: { + square: { + amount: Infinity + } + } + }, + shrinker: { + imageSrc: square, + name: "Shrinker", + description: + "Converts 100 squares to 1 square. I don't know why you would want to do this but here you go anyways.", tick: 1, inputs: { wood: { @@ -165,6 +188,7 @@ const factory = createLayer(id, () => { imageSrc: string; name: string; description: string; + energyCost?: number; /** amount it consumes */ inputs?: Record< @@ -295,6 +319,9 @@ const factory = createLayer(id, () => { globalBus.on("update", diff => { if (!loaded) return; + + const factoryTicks = tickRate.value.times(diff).toNumber(); + //debugger // make them produce for (const id in components.value) { @@ -348,7 +375,8 @@ const factory = createLayer(id, () => { key--; } else { const change = - dirAmt * Math.min(Math.abs(x + 1.3 * dirAmt - block.x), diff); + dirAmt * + Math.min(Math.abs(x + 1.3 * dirAmt - block.x), factoryTicks); block.x += change; block.sprite.x += change * blockSize; } @@ -382,7 +410,8 @@ const factory = createLayer(id, () => { key--; } else { const change = - dirAmt * Math.min(Math.abs(y + 1.3 * dirAmt - block.y), diff); + dirAmt * + Math.min(Math.abs(y + 1.3 * dirAmt - block.y), factoryTicks); block.y += change; block.sprite.y += change * blockSize; } @@ -412,7 +441,7 @@ const factory = createLayer(id, () => { data.ticksDone -= cyclesDone * factoryData.tick; } } else { - data.ticksDone += diff; + data.ticksDone += factoryTicks; } // now look at each component direction and see if it accepts items coming in // components are 1x1 so simple math for now diff --git a/src/data/layers/letters.tsx b/src/data/layers/letters.tsx index 1191824..49485fd 100644 --- a/src/data/layers/letters.tsx +++ b/src/data/layers/letters.tsx @@ -68,6 +68,7 @@ const layer = createLayer(id, function (this: BaseLayer) { style: { minHeight: "80px" }, + visibility: () => showIf(Decimal.lt(totalLetters.value, 8e9)), canClick: () => Decimal.gte(processingProgress.value, computedProcessingCooldown.value) && (!main.isMastery.value || masteryEffectActive.value), @@ -338,10 +339,14 @@ const layer = createLayer(id, function (this: BaseLayer) { ) : null} {render(process)} -
- The more letters you process, the more you'll improve at processing letters. -
-
Currently: {format(synergy.value)}x
+ {Decimal.lt(totalLetters.value, 8e9) ? ( +
+ The more letters you process, the more you'll improve at processing letters. +
Currently: {format(synergy.value)}x
+
+ ) : ( +
You've processed all of humanity's letters to Santa!
+ )} {renderRow(...Object.values(buyables))} diff --git a/src/data/layers/management.tsx b/src/data/layers/management.tsx index 90812f6..2a5742b 100644 --- a/src/data/layers/management.tsx +++ b/src/data/layers/management.tsx @@ -311,7 +311,7 @@ const layer = createLayer(id, () => { effectDisplay: jsx(() => ( <> Multiply log gain by 9 - Cutter amount. + Cutter amount )) }, @@ -320,7 +320,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Holly Level 2", - effectDisplay: "Holly now buys max." + effectDisplay: "Holly now buys max" }, visibility: () => showIf(cutterElfMilestones[0].earned.value), shouldEarn: () => cutterElfTraining.level.value >= 2 @@ -330,8 +330,7 @@ const layer = createLayer(id, () => { requirement: "Holly Level 3", effectDisplay: jsx(() => ( <> - Multiply all cloth actions' effectiveness by log10(Cutter - amount). + Multiply all cloth actions' effectiveness by log10(Cutter amount) )) }, @@ -349,7 +348,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Holly Level 5", - effectDisplay: "Unlock an elf that autobuys oil drills and extractors." + effectDisplay: "Unlock an elf that autobuys oil drills and extractors" }, visibility: () => showIf(cutterElfMilestones[3].earned.value && main.day.value >= 13), shouldEarn: () => cutterElfTraining.level.value >= 5, @@ -362,14 +361,14 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Ivy Level 1", - effectDisplay: "Planters are now twice as efficent." + effectDisplay: "Planters are now twice as efficent" }, shouldEarn: () => planterElfTraining.level.value >= 1 })), createMilestone(() => ({ display: { requirement: "Ivy Level 2", - effectDisplay: "Ivy now buys max." + effectDisplay: "Ivy now buys max" }, visibility: () => showIf(planterElfMilestones[0].earned.value), shouldEarn: () => planterElfTraining.level.value >= 2 @@ -418,7 +417,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Hope Level 2", - effectDisplay: "Hope now buys max." + effectDisplay: "Hope now buys max" }, visibility: () => showIf(expanderElfMilestones[0].earned.value), shouldEarn: () => expandersElfTraining.level.value >= 2 @@ -426,7 +425,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Hope Level 3", - effectDisplay: "The workshop can be expanded past 100%, but costs scale faster." + effectDisplay: "The workshop can be expanded past 100%, but costs scale faster" }, visibility: () => showIf(expanderElfMilestones[1].earned.value), shouldEarn: () => expandersElfTraining.level.value >= 3 @@ -434,7 +433,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Hope Level 4", - effectDisplay: "Unlock an elf that autobuys coal drills." + effectDisplay: "Unlock an elf that autobuys coal drills" }, visibility: () => showIf(expanderElfMilestones[2].earned.value && main.day.value >= 13), shouldEarn: () => expandersElfTraining.level.value >= 4, @@ -455,7 +454,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Jack Level 1", - effectDisplay: '"Fahrenheit 451" affects "Heated Cutters" twice.' + effectDisplay: '"Fahrenheit 451" affects "Heated Cutters" twice' }, shouldEarn: () => heatedCutterElfTraining.level.value >= 1 })), @@ -470,7 +469,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Jack Level 3", - effectDisplay: "Jack and Joy now buy max." + effectDisplay: "Jack and Joy now buy max" }, visibility: () => showIf(heatedCutterElfMilestones[1].earned.value), shouldEarn: () => heatedCutterElfTraining.level.value >= 3 @@ -480,7 +479,7 @@ const layer = createLayer(id, () => { requirement: "Jack Level 4", effectDisplay: jsx(() => ( <> - Oil gain is multiplied by total elf levels. + Oil gain is multiplied by total elf levels )) }, @@ -491,7 +490,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Jack Level 5", - effectDisplay: "Unlock an elf that autobuys oil-using machines." + effectDisplay: "Unlock an elf that autobuys oil-using machines" }, visibility: () => showIf(heatedCutterElfMilestones[3].earned.value && main.day.value >= 13), @@ -505,14 +504,14 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Mary Level 1", - effectDisplay: `"Tillamook Burn Country" affects "Heated Planters" twice.` + effectDisplay: `"Tillamook Burn Country" affects "Heated Planters" twice` }, shouldEarn: () => heatedPlanterElfTraining.level.value >= 1 })), createMilestone(() => ({ display: { requirement: "Mary Level 2", - effectDisplay: "Metal gain is raised to the 1.1." + effectDisplay: "Metal gain is raised to the 1.1" }, visibility: () => showIf(heatedPlanterElfMilestones[0].earned.value), shouldEarn: () => heatedPlanterElfTraining.level.value >= 2 @@ -520,7 +519,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Mary Level 3", - effectDisplay: "Mary, Noel, and Faith now buy max." + effectDisplay: "Mary, Noel, and Faith now buy max" }, visibility: () => showIf(heatedPlanterElfMilestones[1].earned.value), shouldEarn: () => heatedPlanterElfTraining.level.value >= 3 @@ -539,7 +538,7 @@ const layer = createLayer(id, () => { requirement: "Mary Level 5", effectDisplay: jsx(() => ( <> - Auto smelting speed is multiplied by total XP/1e6. + Auto smelting speed is multiplied by total XP/1e6 )) }, @@ -554,7 +553,7 @@ const layer = createLayer(id, () => { requirement: "Noel Level 1", effectDisplay: jsx(() => ( <> - Log gain is multiplied by total elf levels. + Log gain is multiplied by total elf levels )) }, @@ -606,7 +605,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Joy Level 1", - effectDisplay: "Small Fire synergy counts bonfires at reduced rate." + effectDisplay: "Small Fire synergy counts bonfires at reduced rate" }, shouldEarn: () => smallfireElfTraining.level.value >= 1 })), @@ -649,7 +648,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Faith Level 1", - effectDisplay: "Multiply bonfire efficiency by 5." + effectDisplay: "Multiply bonfire efficiency by 5" }, shouldEarn: () => bonfireElfTraining.level.value >= 1 })), @@ -690,7 +689,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Snowball Level 1", - effectDisplay: "Multiply kiln efficiency by 5." + effectDisplay: "Multiply kiln efficiency by 5" }, shouldEarn: () => kilnElfTraining.level.value >= 1 })), @@ -731,7 +730,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Star Level 1", - effectDisplay: "Book cost is divided by total books bought." + effectDisplay: "Book cost is divided by total books bought" }, shouldEarn: () => paperElfTraining.level.value >= 1 })), @@ -762,7 +761,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Star Level 5", - effectDisplay: "Gain 5 free books for all prior elves that are at level 5 or above." + effectDisplay: "Gain 5 free books for all prior elves that are at level 5 or above" }, visibility: () => showIf(paperElfMilestones[3].earned.value && main.day.value >= 13), shouldEarn: () => paperElfTraining.level.value >= 5 @@ -774,7 +773,7 @@ const layer = createLayer(id, () => { requirement: "Bell Level 1", effectDisplay: jsx(() => ( <> - Every box buyable adds level levels to same-row box buyables. + Every box buyable adds level levels to same-row box buyables )) }, @@ -823,7 +822,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Gingersnap Level 1", - effectDisplay: "Multiply all primary dye colors by ln(cloth + e)." + effectDisplay: "Multiply all primary dye colors by ln(cloth + e)" }, shouldEarn: () => clothElfTraining.level.value >= 1 })), @@ -932,7 +931,7 @@ const layer = createLayer(id, () => { createMilestone(() => ({ display: { requirement: "Twinkle Level 3", - effectDisplay: "Auto smelting multi is tripled." + effectDisplay: "Auto smelting multi is tripled" }, visibility: () => showIf(metalElfMilestones[1].earned.value), shouldEarn: () => metalElfTraining.level.value >= 3 @@ -1107,7 +1106,7 @@ const layer = createLayer(id, () => { effectDisplay: jsx(() => ( <> Every plastic buyable adds level levels to the other plastic - buyables. + buyables )) }, diff --git a/src/data/layers/metal.tsx b/src/data/layers/metal.tsx index ffb1f28..0ee308d 100644 --- a/src/data/layers/metal.tsx +++ b/src/data/layers/metal.tsx @@ -746,21 +746,31 @@ const layer = createLayer(id, function (this: BaseLayer) { {autoSmeltEnabled.value && (Decimal.gte(industrialCrucible.amount.value, 1) || masteryEffectActive.value) - ? `+${formatLimit( - [ - [computedAutoSmeltSpeed.value, "smelting speed"], - [computedOreGain.value, "ore gain"], - [ - Decimal.div(coal.computedCoalGain.value, coalCost), - "coal gain" - ] - ], - "/s", - Decimal.mul( - computedOrePurity.value, - computedAutoSmeltMulti.value + ? masteryEffectActive.value + ? formatGain( + Decimal.mul( + computedOrePurity.value, + computedOrePurity.value + ).mul(computedAutoSmeltSpeed.value) ) - )}` + : `+${formatLimit( + [ + [computedAutoSmeltSpeed.value, "smelting speed"], + [computedOreGain.value, "ore gain"], + [ + Decimal.div( + coal.computedCoalGain.value, + coalCost + ), + "coal gain" + ] + ], + "/s", + Decimal.mul( + computedOrePurity.value, + computedAutoSmeltMulti.value + ) + )}` : undefined} ))} diff --git a/src/data/layers/oil.tsx b/src/data/layers/oil.tsx index e9bf0a5..a047ba9 100644 --- a/src/data/layers/oil.tsx +++ b/src/data/layers/oil.tsx @@ -513,7 +513,7 @@ const layer = createLayer(id, function (this: BaseLayer) { display: { requirement: "5m Well Depth", effectDisplay: - "Gain 25% more coal for each metre of well depth (after the 3 elf milestone)." + "Gain 25% more coal for each metre of well depth (after the 3 elf milestone)" }, shouldEarn: () => Decimal.gte(depth.value, 5) })), @@ -528,7 +528,7 @@ const layer = createLayer(id, function (this: BaseLayer) { createMilestone(() => ({ display: { requirement: "25m Well Depth", - effectDisplay: "Gain 5% more ore for each metre of well depth." + effectDisplay: "Gain 5% more ore for each metre of well depth" }, shouldEarn: () => Decimal.gte(depth.value, 25), visibility: () => showIf(depthMilestones[1].earned.value) diff --git a/src/data/layers/styles/factory.css b/src/data/layers/styles/factory.css index 1cc656b..371e0ed 100644 --- a/src/data/layers/styles/factory.css +++ b/src/data/layers/styles/factory.css @@ -32,6 +32,9 @@ pointer-events: none; transition: height .3s; + + pointer-events: none; + user-select: none; } .factory-container { position: absolute; diff --git a/src/data/layers/toys.tsx b/src/data/layers/toys.tsx index 503bbd2..2654250 100644 --- a/src/data/layers/toys.tsx +++ b/src/data/layers/toys.tsx @@ -231,14 +231,14 @@ const layer = createLayer(id, function (this: BaseLayer) { display: { requirement: "10 toys", effectDisplay: - "The cost of making toys is divided by the number of complete workshops you have." + "The cost of making toys is divided by the number of complete workshops you have" }, shouldEarn: () => Decimal.gte(toySum.value, 10) })); const milestone2 = createMilestone(() => ({ display: { requirement: "100 toys", - effectDisplay: "Unlock black dyes." + effectDisplay: "Unlock black dyes" }, shouldEarn: () => Decimal.gte(toySum.value, 100), visibility: () => showIf(milestone1.earned.value) @@ -247,7 +247,7 @@ const layer = createLayer(id, function (this: BaseLayer) { const milestone3 = createMilestone(() => ({ display: { requirement: "200 toys", - effectDisplay: "Beach wrapping paper is much more powerful." + effectDisplay: "Beach wrapping paper is much more powerful" }, shouldEarn: () => Decimal.gte(toySum.value, 200), visibility: () => showIf(milestone2.earned.value) @@ -255,7 +255,7 @@ const layer = createLayer(id, function (this: BaseLayer) { const milestone4 = createMilestone(() => ({ display: { requirement: "350 toys", - effectDisplay: "Gain 50x oil and plastic." + effectDisplay: "Gain 50x oil and plastic" }, shouldEarn: () => Decimal.gte(toySum.value, 350), visibility: () => showIf(milestone3.earned.value) diff --git a/src/data/layers/trees.tsx b/src/data/layers/trees.tsx index 8bc93e2..84f32f6 100644 --- a/src/data/layers/trees.tsx +++ b/src/data/layers/trees.tsx @@ -908,17 +908,27 @@ const layer = createLayer(id, function (this: BaseLayer) { style="margin-bottom: 0" productionDisplay={ Decimal.gt(computedAutoCuttingAmount.value, 0) - ? `+${format( - averageLogGain.value - )}/s average
equilibrium: +${formatLimit( - [ - [computedAutoCuttingAmount.value, "cutting speed"], - [computedAutoPlantingAmount.value, "planting speed"], - [Decimal.mul(computedTotalTrees.value, 20), "forest cap"] - ], - "/s", - logGain.apply(1) - )}` + ? `+${format(averageLogGain.value)}/s average
equilibrium: +${ + management.elfTraining.planterElfTraining.milestones[4].earned + .value + ? format(logGain.apply(computedAutoCuttingAmount.value)) + + "/s" + : formatLimit( + [ + [computedAutoCuttingAmount.value, "cutting speed"], + [ + computedAutoPlantingAmount.value, + "planting speed" + ], + [ + Decimal.mul(computedTotalTrees.value, 20), + "forest cap" + ] + ], + "/s", + logGain.apply(1) + ) + }` : undefined } /> diff --git a/src/data/layers/workshop.tsx b/src/data/layers/workshop.tsx index 042c20e..5c49a8a 100644 --- a/src/data/layers/workshop.tsx +++ b/src/data/layers/workshop.tsx @@ -293,7 +293,7 @@ const layer = createLayer(id, function (this: BaseLayer) { const extraExpansionMilestone6 = createMilestone(() => ({ display: { requirement: "1200% Foundation Completed", - effectDisplay: "Quadruple oil gain" + effectDisplay: "Quadruple drill power" }, shouldEarn: () => Decimal.gte(foundationProgress.value, 1200), visibility: () => diff --git a/src/data/projEntry.tsx b/src/data/projEntry.tsx index ffa012b..750f2ba 100644 --- a/src/data/projEntry.tsx +++ b/src/data/projEntry.tsx @@ -442,7 +442,7 @@ export const main = createLayer("main", function (this: BaseLayer) { symbol: toysSymbol, story: "You've had enough of this running around and stalling - it is time to create some toys NOW! You have everything you need and then some, so let's finally just sit down and get this process started!", completedStory: - "In your haste you may have been a bit wasteful with resources, but it feels really good to finally make some meaningful process on making toys for Santa. You already envision plans on how to get elves to help you out and start pumping out these toys, but for now... Good Job!", + "In your haste you may have been a bit wasteful with resources, but it feels really good to finally make some meaningful progress on making toys for Santa. You already envision plans on how to get elves to help you out and start pumping out these toys, but for now... Good Job!", masteredStory: "" })), createDay(() => ({