Balance/bug fix pass

This commit is contained in:
thepaperpilot 2022-12-14 20:14:16 -06:00
parent c2b352111a
commit 6d25877e48
6 changed files with 76 additions and 49 deletions

View file

@ -240,7 +240,8 @@ const layer = createLayer(id, function (this: BaseLayer) {
let v = Decimal.mul(x, wrappingPaper.boosts.ocean1.value) let v = Decimal.mul(x, wrappingPaper.boosts.ocean1.value)
.mul(dyes.boosts.orange2.value) .mul(dyes.boosts.orange2.value)
.div(100).log(scaling); .div(100)
.log(scaling);
v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value)); v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value));
return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0); return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0);
@ -295,8 +296,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
scaling--; scaling--;
} }
let v = Decimal.mul(x, dyes.boosts.orange2.value) let v = Decimal.mul(x, dyes.boosts.orange2.value).div(1000).log(scaling);
.div(1000).log(scaling);
v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value)); v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value));
return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0); return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0);
@ -351,8 +351,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
scaling--; scaling--;
} }
let v = Decimal.mul(x, dyes.boosts.orange2.value) let v = Decimal.mul(x, dyes.boosts.orange2.value).div(1000).log(scaling);
.div(1000).log(scaling);
v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value)); v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value));
return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0); return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0);
@ -413,7 +412,8 @@ const layer = createLayer(id, function (this: BaseLayer) {
let v = Decimal.mul(x, wrappingPaper.boosts.ocean1.value) let v = Decimal.mul(x, wrappingPaper.boosts.ocean1.value)
.mul(dyes.boosts.orange2.value) .mul(dyes.boosts.orange2.value)
.div(1e25).log(scaling); .div(1e25)
.log(scaling);
v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value)); v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value));
return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0); return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0);
@ -468,8 +468,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
scaling--; scaling--;
} }
let v = Decimal.mul(x, dyes.boosts.orange2.value) let v = Decimal.mul(x, dyes.boosts.orange2.value).div(1e28).log(scaling);
.div(1e28).log(scaling);
v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value)); v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value));
return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0); return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0);
@ -524,8 +523,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
scaling--; scaling--;
} }
let v = Decimal.mul(x, dyes.boosts.orange2.value) let v = Decimal.mul(x, dyes.boosts.orange2.value).div(1e31).log(scaling);
.div(1e31).log(scaling);
v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value)); v = v.div(Decimal.pow(0.95, paper.books.boxBook.totalAmount.value));
return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0); return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0);
@ -614,7 +612,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
Object.values(row3Upgrades) Object.values(row3Upgrades)
)} )}
<Spacer /> <Spacer />
{renderRow(...Object.values(buyables))} {renderGrid(Object.values(buyables), Object.values(buyables2))}
</> </>
)), )),
minimizedDisplay: jsx(() => ( minimizedDisplay: jsx(() => (

View file

@ -89,6 +89,23 @@ const layer = createLayer(id, function (this: BaseLayer) {
const elfReset = createReset(() => ({ const elfReset = createReset(() => ({
thingsToReset: [trees, workshop, coal], thingsToReset: [trees, workshop, coal],
onReset() { onReset() {
const coalUpgrades = [
"warmerCutters",
"warmerPlanters",
"basicFertilizer",
"unlockBonfire",
"dedicatedCutters",
"dedicatedPlanters",
"betterFertilizer",
"unlockKiln",
"efficientSmelther",
"arsonistAssistance",
"refinedCoal",
"coloredFire"
];
const upgradeValues = coalUpgrades.map(
upg => ((coal as any)[upg] as GenericUpgrade).bought.value
);
setTimeout(() => { setTimeout(() => {
if (treeUpgradesMilestone.earned.value) { if (treeUpgradesMilestone.earned.value) {
trees.row1Upgrades.forEach(upg => (upg.bought.value = true)); trees.row1Upgrades.forEach(upg => (upg.bought.value = true));
@ -101,6 +118,10 @@ const layer = createLayer(id, function (this: BaseLayer) {
workshop.foundationProgress.value = 100; workshop.foundationProgress.value = 100;
} }
if (coalUpgradesMilestone.earned.value) { if (coalUpgradesMilestone.earned.value) {
coalUpgrades.forEach(
(upg, i) =>
(((coal as any)[upg] as GenericUpgrade).bought.value = upgradeValues[i])
);
coal.warmerCutters.bought.value = true; coal.warmerCutters.bought.value = true;
coal.warmerPlanters.bought.value = true; coal.warmerPlanters.bought.value = true;
coal.basicFertilizer.bought.value = true; coal.basicFertilizer.bought.value = true;
@ -503,7 +524,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
modifier: heavyDrillCooldown, modifier: heavyDrillCooldown,
base: 10, base: 10,
unit: "/s", unit: "/s",
visible: management.elfTraining.fertilizerElfTraining.milestones[4].earned.value visible: management.elfTraining.cutterElfTraining.milestones[4].earned.value
}, },
{ {
title: "Cocoa Auto-Buy Frequency", title: "Cocoa Auto-Buy Frequency",
@ -517,7 +538,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
modifier: metalCooldown, modifier: metalCooldown,
base: 10, base: 10,
unit: "/s", unit: "/s",
visible: management.elfTraining.expandersElfTraining.milestones[4].earned visible: management.elfTraining.fertilizerElfTraining.milestones[4].earned
} }
]); ]);
const showModifiersModal = ref(false); const showModifiersModal = ref(false);
@ -629,7 +650,10 @@ const layer = createLayer(id, function (this: BaseLayer) {
description: jsx(() => ( description: jsx(() => (
<> <>
{options.description} {options.description}
{(upgrade.bought.value && (!["Peppermint", "Twinkle", "Cocoa", "Frosty"].includes(options.name))) ? null : ( {upgrade.bought.value &&
!["Peppermint", "Twinkle", "Cocoa", "Frosty"].includes(
options.name
) ? null : (
<> <>
{" "} {" "}
Training this elf will require resetting all your progress from Training this elf will require resetting all your progress from
@ -652,8 +676,9 @@ const layer = createLayer(id, function (this: BaseLayer) {
style: "width: 190px", style: "width: 190px",
onPurchase() { onPurchase() {
options.onPurchase?.(); options.onPurchase?.();
if(!["Peppermint", "Twinkle", "Cocoa", "Frosty"].includes(options.name)){ if (!["Peppermint", "Twinkle", "Cocoa", "Frosty"].includes(options.name)) {
elfReset.reset();} elfReset.reset();
}
} }
}; };
}) as GenericUpgrade & { }) as GenericUpgrade & {
@ -824,7 +849,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
buyable: [oil.buildHeavy, oil.buildHeavy2, oil.buildExtractor], buyable: [oil.buildHeavy, oil.buildHeavy2, oil.buildExtractor],
cooldownModifier: heavyDrillCooldown, cooldownModifier: heavyDrillCooldown,
visibility: () => visibility: () =>
showIf(management.elfTraining.fertilizerElfTraining.milestones[4].earned.value), showIf(management.elfTraining.cutterElfTraining.milestones[4].earned.value),
hasToggle: true, hasToggle: true,
toggleDesc: "Activate auto-purchased oil drills", toggleDesc: "Activate auto-purchased oil drills",
onAutoPurchase(buyable, amount) { onAutoPurchase(buyable, amount) {
@ -869,7 +894,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
buyable: [metal.oreDrill, metal.industrialCrucible, metal.hotterForge], buyable: [metal.oreDrill, metal.industrialCrucible, metal.hotterForge],
cooldownModifier: metalCooldown, cooldownModifier: metalCooldown,
visibility: () => visibility: () =>
showIf(management.elfTraining.expandersElfTraining.milestones[4].earned.value) showIf(management.elfTraining.fertilizerElfTraining.milestones[4].earned.value)
}); });
const managementElves2 = [metalElf]; const managementElves2 = [metalElf];
const dyeElf = createElf({ const dyeElf = createElf({

View file

@ -136,6 +136,11 @@ const layer = createLayer(id, () => {
description: "Advanced Training", description: "Advanced Training",
enabled: advancedUpgrade.bought enabled: advancedUpgrade.bought
})), })),
createMultiplicativeModifier(() => ({
multiplier: 2,
description: "Star Level 4",
enabled: paperElfMilestones[3].earned.value
})),
createMultiplicativeModifier(() => ({ createMultiplicativeModifier(() => ({
multiplier: 2, multiplier: 2,
description: "Carry experience in boxes???", description: "Carry experience in boxes???",
@ -180,19 +185,15 @@ const layer = createLayer(id, () => {
if (elf.name == "Star" || elf.name == "Bell") { if (elf.name == "Star" || elf.name == "Bell") {
costMulti /= 3; costMulti /= 3;
} }
const costBase = computed(() => { const costBase = 4000 * costMulti;
return Decimal.mul(paperElfMilestones[3].earned.value ? 2000 : 4000, costMulti); const expRequiredForNextLevel = computed(() => Decimal.pow(5, level.value).mul(costBase));
});
const expRequiredForNextLevel = computed(() =>
Decimal.pow(5, level.value).mul(costBase.value)
);
const level = computed(() => const level = computed(() =>
Decimal.affordGeometricSeries(exp.value, costBase.value, 5, 0) Decimal.affordGeometricSeries(exp.value, costBase, 5, 0)
.min(schools.amount.value) .min(schools.amount.value)
.toNumber() .toNumber()
); );
const expToNextLevel = computed(() => const expToNextLevel = computed(() =>
Decimal.sub(exp.value, Decimal.sumGeometricSeries(level.value, costBase.value, 5, 0)) Decimal.sub(exp.value, Decimal.sumGeometricSeries(level.value, costBase, 5, 0))
); );
const bar = createBar(() => ({ const bar = createBar(() => ({
direction: Direction.Right, direction: Direction.Right,
@ -340,7 +341,7 @@ const layer = createLayer(id, () => {
createMilestone(() => ({ createMilestone(() => ({
display: { display: {
requirement: "Holly Level 5", requirement: "Holly Level 5",
effectDisplay: "Raise workshop expansion cost by 0.99" effectDisplay: "Unlock an elf that autobuys oil drills and extractors."
}, },
visibility: () => showIf(cutterElfMilestones[3].earned.value && main.day.value >= 13), visibility: () => showIf(cutterElfMilestones[3].earned.value && main.day.value >= 13),
shouldEarn: () => cutterElfTraining.level.value >= 5 shouldEarn: () => cutterElfTraining.level.value >= 5
@ -431,7 +432,7 @@ const layer = createLayer(id, () => {
createMilestone(() => ({ createMilestone(() => ({
display: { display: {
requirement: "Hope Level 5", requirement: "Hope Level 5",
effectDisplay: "Unlock an elf that autobuys metal buyables." effectDisplay: "Raise workshop expansion cost by 0.99"
}, },
visibility: () => showIf(expanderElfMilestones[3].earned.value && main.day.value >= 13), visibility: () => showIf(expanderElfMilestones[3].earned.value && main.day.value >= 13),
shouldEarn: () => expandersElfTraining.level.value >= 5 shouldEarn: () => expandersElfTraining.level.value >= 5
@ -575,7 +576,7 @@ const layer = createLayer(id, () => {
createMilestone(() => ({ createMilestone(() => ({
display: { display: {
requirement: "Noel Level 5", requirement: "Noel Level 5",
effectDisplay: "Unlock an elf that autobuys drills and extractors" effectDisplay: "Unlock an elf that autobuys metal buyables"
}, },
visibility: () => visibility: () =>
showIf(fertilizerElfMilestones[3].earned.value && main.day.value >= 13), showIf(fertilizerElfMilestones[3].earned.value && main.day.value >= 13),
@ -734,7 +735,7 @@ const layer = createLayer(id, () => {
createMilestone(() => ({ createMilestone(() => ({
display: { display: {
requirement: "Star Level 4", requirement: "Star Level 4",
effectDisplay: "Halve xp requirements" effectDisplay: "Double all elf xp gain"
}, },
visibility: () => showIf(paperElfMilestones[2].earned.value && main.day.value >= 13), visibility: () => showIf(paperElfMilestones[2].earned.value && main.day.value >= 13),
shouldEarn: () => paperElfTraining.level.value >= 4 shouldEarn: () => paperElfTraining.level.value >= 4
@ -742,7 +743,7 @@ const layer = createLayer(id, () => {
createMilestone(() => ({ createMilestone(() => ({
display: { display: {
requirement: "Star Level 5", requirement: "Star Level 5",
effectDisplay: "Gain 5 free books for all 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), visibility: () => showIf(paperElfMilestones[3].earned.value && main.day.value >= 13),
shouldEarn: () => paperElfTraining.level.value >= 5 shouldEarn: () => paperElfTraining.level.value >= 5

View file

@ -228,14 +228,12 @@ const layer = createLayer(id, function (this: BaseLayer) {
cost() { cost() {
let v = new Decimal(this.amount.value); let v = new Decimal(this.amount.value);
if (Decimal.gte(v, 10)) v = Decimal.pow(v, 4).div(10 ** 3); if (Decimal.gte(v, 10)) v = Decimal.pow(v, 4).div(10 ** 3);
if (Decimal.gte(v, 1e3)) v = Decimal.pow(v, 4).div(1e3 ** 3);
v = Decimal.pow(0.95, paper.books.heavyDrillBook.totalAmount.value).times(v); v = Decimal.pow(0.95, paper.books.heavyDrillBook.totalAmount.value).times(v);
return Decimal.pow(8, v).times(2e5); return Decimal.pow(8, v).times(2e5);
}, },
inverseCost(x: DecimalSource) { inverseCost(x: DecimalSource) {
let v = Decimal.div(x, 2e5).log(8); let v = Decimal.div(x, 2e5).log(8);
v = v.div(Decimal.pow(0.95, paper.books.heavyDrillBook.totalAmount.value)); v = v.div(Decimal.pow(0.95, paper.books.heavyDrillBook.totalAmount.value));
if (Decimal.gte(v, 1e3)) v = Decimal.mul(v, 1e3 ** 3).root(4);
if (Decimal.gte(v, 10)) v = Decimal.mul(v, 10 ** 3).root(4); if (Decimal.gte(v, 10)) v = Decimal.mul(v, 10 ** 3).root(4);
return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0); return Decimal.isNaN(v) ? Decimal.dZero : v.floor().max(0);
}, },

View file

@ -125,8 +125,8 @@ const layer = createLayer(id, function (this: BaseLayer) {
scaling--; scaling--;
} }
let cost = Decimal.pow(scaling, v).times(10); let cost = Decimal.pow(scaling, v).times(10);
if(["Peppermint", "Twinkle", "Cocoa", "Frosty"].includes(options.elfName)){ if (["Peppermint", "Twinkle", "Cocoa", "Frosty"].includes(options.elfName)) {
cost = cost.mul(1e31) cost = cost.mul(1e31);
} }
if (management.elfTraining.paperElfTraining.milestones[0].earned.value) { if (management.elfTraining.paperElfTraining.milestones[0].earned.value) {
cost = Decimal.div(cost, sumBooks.value.max(1)); cost = Decimal.div(cost, sumBooks.value.max(1));
@ -149,9 +149,9 @@ const layer = createLayer(id, function (this: BaseLayer) {
scaling--; scaling--;
} }
let v = Decimal.div(x, 10) let v = Decimal.div(x, 10);
if(["Peppermint", "Twinkle", "Cocoa", "Frosty"].includes(options.elfName)){ if (["Peppermint", "Twinkle", "Cocoa", "Frosty"].includes(options.elfName)) {
v = v.div(1e31) v = v.div(1e31);
} }
v = v.log(scaling); v = v.log(scaling);
@ -165,7 +165,16 @@ const layer = createLayer(id, function (this: BaseLayer) {
}, },
style: "width: 600px", style: "width: 600px",
freeLevels: computed(() => freeLevels: computed(() =>
management.elfTraining.paperElfTraining.milestones[4].earned.value management.elfTraining.paperElfTraining.milestones[4].earned.value &&
![
"Star",
"Bell",
"Gingersnap",
"Peppermint",
"Twinkle",
"Cocoa",
"Frosty"
].includes(options.elfName)
? Decimal.times(5, management.level5Elves.value) ? Decimal.times(5, management.level5Elves.value)
: 0 : 0
), ),
@ -248,29 +257,25 @@ const layer = createLayer(id, function (this: BaseLayer) {
name: "Drills and Mills", name: "Drills and Mills",
elfName: "Peppermint", elfName: "Peppermint",
buyableName: "Coal Drill", buyableName: "Coal Drill",
visibility: () => visibility: () => showIf(elves.elves.coalDrillElf.bought.value)
showIf(management.elfTraining.expandersElfTraining.milestones[3].earned.value)
}); });
const heavyDrillBook = createBook({ const heavyDrillBook = createBook({
name: "Deep in the Earth", name: "Deep in the Earth",
elfName: "Frosty", elfName: "Frosty",
buyableName: "Oil Drills", buyableName: "Oil Drills",
visibility: () => visibility: () => showIf(elves.elves.heavyDrillElf.bought.value)
showIf(management.elfTraining.fertilizerElfTraining.milestones[4].earned.value)
}); });
const oilBook = createBook({ const oilBook = createBook({
name: "Burning the Midnight Oil", name: "Burning the Midnight Oil",
elfName: "Cocoa", elfName: "Cocoa",
buyableName: "Oil-Consuming Machines", buyableName: "Oil-Consuming Machines",
visibility: () => visibility: () => showIf(elves.elves.oilElf.bought.value)
showIf(management.elfTraining.heatedCutterElfTraining.milestones[4].earned.value)
}); });
const metalBook = createBook({ const metalBook = createBook({
name: "Physical Metallurgy", name: "Physical Metallurgy",
elfName: "Twinkle", elfName: "Twinkle",
buyableName: "Metal Buyables", buyableName: "Metal Buyables",
visibility: () => visibility: () => showIf(elves.elves.metalElf.bought.value)
showIf(management.elfTraining.expandersElfTraining.milestones[4].earned.value)
}); });
const dyeBook = createBook({ const dyeBook = createBook({
name: "Arts and Crafts", name: "Arts and Crafts",

View file

@ -62,8 +62,8 @@ const layer = createLayer(id, function (this: BaseLayer) {
})), })),
createExponentialModifier(() => ({ createExponentialModifier(() => ({
exponent: 1 / 0.99, exponent: 1 / 0.99,
description: "Holly Level 5", description: "Hope Level 5",
enabled: management.elfTraining.cutterElfTraining.milestones[4].earned enabled: management.elfTraining.expandersElfTraining.milestones[4].earned
})) }))
]) ])
})); }));