Skip to content

Commit 588f1e7

Browse files
committed
V4 Bug Fixes (1), some Balancing (2)
1 parent d40af9b commit 588f1e7

12 files changed

Lines changed: 56 additions & 27 deletions

File tree

744 Bytes
Loading

src/Config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
declare const PROD: boolean | undefined
22
declare const DEV: boolean | undefined
33

4-
export const version = '4.0.3 October 20, 2025: The Greater Reimagining'
4+
export const version = '4.0.4 October 21, 2025: The Greater Reimagining'
55

66
/**
77
* If true, the version is marked as a testing version.

src/Hepteracts.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ export const craftHepteracts = async (hept: HepteractKeys, max = false) => {
436436
} else if (item === 'worlds') {
437437
player.worlds.sub(amountToCraft * hepteracts[hept].OTHER_CONVERSIONS[item]!)
438438
} else if (player[item] instanceof Decimal) {
439-
;(player[item] as Decimal).sub(
439+
;(player[item] as Decimal) = (player[item] as Decimal).sub(
440440
new Decimal(amountToCraft).times(craftCostMulti).times(hepteracts[hept].OTHER_CONVERSIONS[item]!)
441441
)
442442
}

src/Levels.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ export type SynergismLevelMilestones =
286286
| 'tier4CrystalAutobuy'
287287
| 'tier5CrystalAutobuy'
288288
| 'achievementTalismanUnlock'
289+
| 'runeAutobuyImprover'
289290
| 'achievementTalismanEnhancement'
290291
| 'salvageChallengeBuff'
291292

@@ -498,6 +499,20 @@ export const synergismLevelMilestones: Record<SynergismLevelMilestones, Synergis
498499
levelReq: 100,
499500
displayOrder: 13
500501
},
502+
runeAutobuyImprover: {
503+
name: () => i18next.t('achievements.levelMilestones.runeAutobuyImprover.name'),
504+
description: () => i18next.t('achievements.levelMilestones.runeAutobuyImprover.description'),
505+
effect: () => 2 + (achievementLevel - 130) / 10,
506+
defaultValue: 1,
507+
effectDescription: () => {
508+
const mult = getLevelMilestone('runeAutobuyImprover')
509+
return i18next.t('achievements.levelMilestones.runeAutobuyImprover.effect', {
510+
mult: format(mult, 1, true)
511+
})
512+
},
513+
levelReq: 130,
514+
displayOrder: 13.5
515+
},
501516
achievementTalismanEnhancement: {
502517
name: () => i18next.t('achievements.levelMilestones.achievementTalismanEnhancement.name'),
503518
description: () => i18next.t('achievements.levelMilestones.achievementTalismanEnhancement.description'),

src/Reset.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -781,7 +781,7 @@ export const reset = (input: resetNames, fast = false, from = 'unknown') => {
781781

782782
if (input === 'ascension' || input === 'ascensionChallenge') {
783783
// Hepteract Autocraft
784-
const numberOfAutoCraftsAndOrbs = Object.values(hepteracts).filter((v) => v.AUTO).length
784+
const numberOfAutoCraftsAndOrbs = Object.values(hepteracts).filter((v) => v.AUTO && v.UNLOCKED()).length
785785
+ (player.overfluxOrbsAutoBuy ? 1 : 0)
786786
if (player.highestSingularityCount >= 1 && numberOfAutoCraftsAndOrbs > 0) {
787787
// Computes the max number of Hepteracts to spend on each auto Hepteract craft
@@ -790,7 +790,7 @@ export const reset = (input: resetNames, fast = false, from = 'unknown') => {
790790
)
791791

792792
for (const hept of hepteractKeys) {
793-
if (player.hepteracts[hept].AUTO) {
793+
if (hepteracts[hept].AUTO && hepteracts[hept].UNLOCKED()) {
794794
autoCraftHepteracts(hept, heptAutoSpend)
795795
}
796796
}

src/RuneBlessings.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Decimal from 'break_infinity.js'
22
import i18next from 'i18next'
3-
import { awardAchievementGroup } from './Achievements'
3+
import { awardAchievementGroup, awardUngroupedAchievement } from './Achievements'
44
import { DOMCacheGetOrSet } from './Cache/DOM'
55
import { calculateSalvageRuneEXPMultiplier } from './Calculate'
66
import { resetTiers } from './Reset'
@@ -282,13 +282,17 @@ const updateLevelsFromEXP = (bless: RuneBlessingKeys) => {
282282
} else {
283283
runeBlessings[bless].level = levels
284284
}
285+
286+
if (bless === 'speed') {
287+
awardAchievementGroup('speedBlessing')
288+
awardUngroupedAchievement('highlyBlessed')
289+
}
285290
}
286291

287292
export const updateAllBlessingLevelsFromEXP = () => {
288293
for (const bless of runeBlessingKeys) {
289294
updateLevelsFromEXP(bless)
290295
}
291-
awardAchievementGroup('speedBlessing')
292296
}
293297

294298
// Gives levels to buy, total EXP to that level, and offerings required to reach that level

src/RuneSpirits.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,13 +265,16 @@ const updateLevelsFromEXP = (spirit: RuneSpiritKeys) => {
265265
} else {
266266
runeSpirits[spirit].level = levels
267267
}
268+
269+
if (spirit === 'speed') {
270+
awardAchievementGroup('speedSpirit')
271+
}
268272
}
269273

270274
export const updateAllSpiritLevelsFromEXP = () => {
271275
for (const spirit of runeSpiritKeys) {
272276
updateLevelsFromEXP(spirit)
273277
}
274-
awardAchievementGroup('speedSpirit')
275278
}
276279

277280
// Gives levels to buy, total EXP to that level, and offerings required to reach that level

src/Runes.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,9 +1014,10 @@ export const sacrificeOfferings = (rune: RuneKeys, budget: Decimal, auto = false
10141014
let levelsToAdd = player.offeringbuyamount as number
10151015
if (auto) {
10161016
levelsToAdd = 20 * player.shopUpgrades.offeringAuto
1017-
}
1018-
if (auto && player.cubeUpgrades[20] > 0) {
1017+
levelsToAdd *= getLevelMilestone('runeAutobuyImprover')
1018+
if (player.cubeUpgrades[20] > 0) {
10191019
levelsToAdd *= 20
1020+
}
10201021
}
10211022

10221023
if (player.offeringbuyamount !== 100000 || auto) {

src/Statistics.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1282,7 +1282,7 @@ export const allQuarkStats: NumberStatLine[] = [
12821282
},
12831283
{
12841284
i18n: 'OcteractStarter',
1285-
stat: () => 1 + (octeractUpgrades.octeractStarter.level > 0 ? 0.15 : 0)
1285+
stat: () => 1 + (octeractUpgrades.octeractStarter.level > 0 ? 0.25 : 0)
12861286
},
12871287
{
12881288
i18n: 'OcteractQuarkGain',

src/Synergism.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4141,18 +4141,6 @@ export const resetCheck = async (
41414141
challengeDisplay(a, false)
41424142
}
41434143
challengeAchievementCheck(a)
4144-
if (player.highestchallengecompletions[11] > 0) {
4145-
player.unlocks.tesseracts = true
4146-
}
4147-
if (player.highestchallengecompletions[12] > 0) {
4148-
player.unlocks.spirits = true
4149-
}
4150-
if (player.highestchallengecompletions[13] > 0) {
4151-
player.unlocks.hypercubes = true
4152-
}
4153-
if (player.highestchallengecompletions[14] > 0) {
4154-
player.unlocks.platonics = true
4155-
}
41564144
}
41574145
if (a === 15) {
41584146
const c15SM = challenge15ScoreMultiplier()
@@ -4191,6 +4179,19 @@ export const resetCheck = async (
41914179
}
41924180
}
41934181

4182+
if (player.highestchallengecompletions[11] > 0) {
4183+
player.unlocks.tesseracts = true
4184+
}
4185+
if (player.highestchallengecompletions[12] > 0) {
4186+
player.unlocks.spirits = true
4187+
}
4188+
if (player.highestchallengecompletions[13] > 0) {
4189+
player.unlocks.hypercubes = true
4190+
}
4191+
if (player.highestchallengecompletions[14] > 0) {
4192+
player.unlocks.platonics = true
4193+
}
4194+
41944195
if (!player.retrychallenges || manual || leaving) {
41954196
if (
41964197
!(

0 commit comments

Comments
 (0)