Merge branch 'main' into main

This commit is contained in:
unsoftcapped3 2022-12-12 18:34:09 -08:00 committed by GitHub
commit cdb987059e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 105 additions and 38 deletions

View file

@ -318,11 +318,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
description: "6 Elves Trained",
enabled: elvesMilestone.earned
})),
// createMultiplicativeModifier(() => ({
// multiplier: () => Decimal.times(paper.books.clothBook.amount.value, 0.1).add(1),
// description: "Fuzzy Bee and Friends",
// enabled: () => Decimal.gt(paper.books.clothBook.amount.value, 0)
// })),
createMultiplicativeModifier(() => ({
multiplier: () => Decimal.times(paper.books.miningDrillBook.amount.value, 0.1).add(1),
description: "Drills and Mills",
enabled: () => Decimal.gt(paper.books.miningDrillBook.amount.value, 0)
})),
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "10 Elves Trained",
@ -335,11 +335,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
description: "6 Elves Trained",
enabled: elvesMilestone.earned
})),
// createMultiplicativeModifier(() => ({
// multiplier: () => Decimal.times(paper.books.clothBook.amount.value, 0.1).add(1),
// description: "Fuzzy Bee and Friends",
// enabled: () => Decimal.gt(paper.books.clothBook.amount.value, 0)
// })),
createMultiplicativeModifier(() => ({
multiplier: () => Decimal.times(paper.books.metalBook.amount.value, 0.1).add(1),
description: "Physical Metallurgy",
enabled: () => Decimal.gt(paper.books.metalBook.amount.value, 0)
})),
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "10 Elves Trained",
@ -352,11 +352,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
description: "6 Elves Trained",
enabled: elvesMilestone.earned
})),
// createMultiplicativeModifier(() => ({
// multiplier: () => Decimal.times(paper.books.clothBook.amount.value, 0.1).add(1),
// description: "Fuzzy Bee and Friends",
// enabled: () => Decimal.gt(paper.books.clothBook.amount.value, 0)
// })),
createMultiplicativeModifier(() => ({
multiplier: () => Decimal.times(paper.books.heavyDrillBook.amount.value, 0.1).add(1),
description: "Deep in the Earth",
enabled: () => Decimal.gt(paper.books.heavyDrillBook.amount.value, 0)
})),
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "10 Elves Trained",

View file

@ -12,7 +12,12 @@ import { createMilestone, GenericMilestone } from "features/milestones/milestone
import { createUpgrade } from "features/upgrades/upgrade";
import { globalBus } from "game/events";
import { createLayer } from "game/layers";
import { createMultiplicativeModifier, createSequentialModifier, Modifier } from "game/modifiers";
import {
createAdditiveModifier,
createMultiplicativeModifier,
createSequentialModifier,
Modifier
} from "game/modifiers";
import { persistent } from "game/persistence";
import Decimal, { DecimalSource, format, formatTime, formatWhole } from "util/bignum";
import { Direction } from "util/common";
@ -160,7 +165,7 @@ const layer = createLayer(id, () => {
createMultiplicativeModifier(() => ({
multiplier: focusMulti,
description: "Focus Multiplier",
enabled: () => focusTime.value > 0 && focusTargets.value[elf.name] == true
enabled: () => Decimal.gt(focusTime.value, 0) && focusTargets.value[elf.name] == true
})),
...modifiers
]);
@ -894,14 +899,13 @@ const layer = createLayer(id, () => {
);
}
}
focusTime.value = Math.max(focusTime.value - diff, 0);
focusCooldown.value = Math.max(focusCooldown.value - diff, 0);
if (focusTime.value > 0) {
focusTime.value = Decimal.sub(focusTime.value, diff).max(0)
focusCooldown.value = Decimal.sub(focusCooldown.value, diff).max(0)
if (Decimal.eq(focusTime.value, 0)) {
focusMulti.value = Decimal.pow(
focusMaxMulti.value,
1 - Math.abs(Math.sin((Date.now() / 1000) * 2))
);
}
});
@ -909,10 +913,35 @@ const layer = createLayer(id, () => {
const focusMulti = persistent<DecimalSource>(1);
const focusTargets = persistent<Record<string, boolean>>({});
const focusCooldown = persistent<number>(0);
const focusTime = persistent<number>(0);
const focusCooldown = persistent<DecimalSource>(0);
const focusTime = persistent<DecimalSource>(0);
const focusMaxMulti = computed<DecimalSource>(() => focusUpgrade1.bought.value ? 20 : 10);
const focusMaxMultiModifiers = createSequentialModifier(() => [
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "Focus Upgrade 1",
enabled: focusUpgrade1.bought
}))
]);
const maximumElvesModifier = createSequentialModifier(() => [
createAdditiveModifier(() => ({
addend: 1,
description: "Focus Upgrade 2",
enabled: focusUpgrade2.bought
}))
]);
const cooldownModifiers = createSequentialModifier(() => [
createAdditiveModifier(() => ({
addend: -5,
description: "Focus Upgrade 3",
enabled: focusUpgrade3.bought
}))
]);
const focusMaxMulti = computed(() => focusMaxMultiModifiers.apply(10));
const maximumElves = computed(() => maximumElvesModifier.apply(3));
const cooldown = computed(() => Number(cooldownModifiers.apply(15)));
const focusMeter = createBar(() => ({
direction: Direction.Right,
@ -933,7 +962,7 @@ const layer = createLayer(id, () => {
<>
Motivate elves to focus, multiplying 3 random elves' XP gain by up to{" "}
{format(focusMaxMulti.value)}x, equal to the focus bars' effect.
{focusCooldown.value > 0 ? (
{Decimal.gte(focusCooldown.value, 0) ? (
<>
<br />
Reroll cooldown: {formatTime(focusCooldown.value)}
@ -947,19 +976,21 @@ const layer = createLayer(id, () => {
style: {
width: "300px"
},
canClick: () => focusCooldown.value === 0,
canClick: () => Decimal.eq(focusCooldown.value, 0),
onClick() {
focusCooldown.value = focusUpgrade3.bought.value ? 10 : 15;
focusCooldown.value = cooldown.value;
focusTime.value = 10;
rerollFocusTargets(12, focusUpgrade2.bought.value ? 4 : 3);
// better choice? this has to be a number
rerollFocusTargets(12, maximumElves.value);
}
}));
function rerollFocusTargets(range: number, count: number) {
function rerollFocusTargets(range: number, count: DecimalSource) {
let x = 0;
focusTargets.value = {};
count = Math.min(count, range);
while (x < count) {
const newCount = Decimal.min(count, range)
while (newCount.gte(x)) {
const roll = Object.values(elfTraining)[Math.floor(Math.random() * range)]?.name ?? "";
if (!focusTargets.value[roll]) {
focusTargets.value[roll] = true;
@ -970,9 +1001,9 @@ const layer = createLayer(id, () => {
const focusUpgrade1 = createUpgrade(() => ({
display: {
title: "Focus Booster",
description: "Double experience multiplier from focus"
description: "Multiplies the maximum experience multiplier from focus by 2"
},
resource: trees.trees,
resource: trees.logs,
cost: 1e30
}));
const focusUpgrade2 = createUpgrade(() => ({
@ -980,7 +1011,7 @@ const layer = createLayer(id, () => {
title: "Focus Buffer",
description: "Increase elves affected by focus by 1"
},
resource: trees.trees,
resource: trees.logs,
cost: 1e40
}));
const focusUpgrade3 = createUpgrade(() => ({
@ -988,7 +1019,7 @@ const layer = createLayer(id, () => {
title: "Focus Upgrader",
description: "Focus can now be rerolled every 10 seconds"
},
resource: trees.trees,
resource: trees.logs,
cost: 1e50
}));
const upgrades = { focusUpgrade1, focusUpgrade2, focusUpgrade3 };
@ -1114,6 +1145,22 @@ const layer = createLayer(id, () => {
// ------------------------------------------------------------------------------- Modifiers
const [generalTab, generalTabCollapsed] = createCollapsibleModifierSections(() => [
{
title: "Elves affected by Focus",
modifier: maximumElvesModifier,
base: 3
},
{
title: "Maximum Focus Effect",
modifier: focusMaxMultiModifiers,
base: 10
},
{
title: "Focus Cooldown",
modifier: cooldownModifiers,
unit: " secs",
base: 15
},
{
title: "Global XP Gain",
modifier: globalXPModifier,
@ -1227,7 +1274,6 @@ const layer = createLayer(id, () => {
focusTargets,
focusCooldown,
focusTime,
display: jsx(() => (
<>

View file

@ -187,6 +187,24 @@ const layer = createLayer(id, function (this: BaseLayer) {
buyableName: "Cloth Buyables",
visibility: () => showIf(elves.elves.clothElf.bought.value)
});
const miningDrillBook = createBook({
name: "Drills and Mills",
elfName: "Peppermint",
buyableName: "Mining Drill",
visibility: () => showIf(management.elfTraining.expandersElfTraining.milestones[3].earned.value)
});
const metalBook = createBook({
name: "Physical Metallurgy",
elfName: "Twinkle",
buyableName: "Metal Buyables",
visibility: () => showIf(management.elfTraining.expandersElfTraining.milestones[4].earned.value)
});
const heavyDrillBook = createBook({
name: "Deep in the Earth",
elfName: "Frosty",
buyableName: "Oil Drills",
visibility: () => showIf(management.elfTraining.heatedCutterElfTraining.milestones[4].earned.value)
});
const books = {
cuttersBook,
plantersBook,
@ -199,7 +217,10 @@ const layer = createLayer(id, function (this: BaseLayer) {
kilnBook,
paperBook,
boxBook,
clothBook
clothBook,
miningDrillBook,
metalBook,
heavyDrillBook
};
const sumBooks = computed(() => Object.values(books).reduce((acc, curr) => acc.add(curr.amount.value), new Decimal(0)));

View file

@ -422,7 +422,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
const lastAutoPlantedAmount = ref<DecimalSource>(0);
setInterval(() => watch(computedAutoPlantingAmount, planted => {
lastAutoPlantedAmount.value = planted;
}),0);
}), 0);
const logGain = createSequentialModifier(() => [
createMultiplicativeModifier(() => ({