Skip to content

Commit ca39460

Browse files
committed
2 parents ea5eadb + e4c4a64 commit ca39460

16 files changed

+91
-1794
lines changed

Sample_Saves/Synergism2.5 - (1) c10 completed.txt

+1
Large diffs are not rendered by default.

Sample_Saves/Synergism2.5 - (10) Omega completed.txt

+1
Large diffs are not rendered by default.

Sample_Saves/Synergism2.5 - (11) Ready for first singularity.txt

+1
Large diffs are not rendered by default.

Sample_Saves/Synergism2.5 - (2) c11 completed.txt

+1
Large diffs are not rendered by default.

Sample_Saves/Synergism2.5 - (3)c14 completed.txt

+1
Large diffs are not rendered by default.

Sample_Saves/Synergism2.5 - (4) w5x10 completed.txt

+1
Large diffs are not rendered by default.

Sample_Saves/Synergism2.5 - (5) Alpha completed.txt

+1
Large diffs are not rendered by default.

Sample_Saves/Synergism2.5 - (6) p2x1 completed.txt

+1
Large diffs are not rendered by default.

Sample_Saves/Synergism2.5 - (7) p3x1 completed.txt

+1
Large diffs are not rendered by default.

Sample_Saves/Synergism2.5 - (8) Beta completed.txt

+1
Large diffs are not rendered by default.

Sample_Saves/Synergism2.5 - (9) 1e15 c15 expo.txt

+1
Large diffs are not rendered by default.

src/CheckVariables.ts

-1,683
This file was deleted.

src/Helper.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,10 @@ export const addTimers = (input: TimerInput, time = 0) => {
201201

202202
let timeToAmbrosia = calculateRequiredBlueberryTime()
203203

204-
const maxAccelMultiplier = (1/2) + (3/5 - 1/2) * +(player.singularityChallenges.noAmbrosiaUpgrades.completions >= 15)
205-
+ (2/3 - 3/5) * +(player.singularityChallenges.noAmbrosiaUpgrades.completions >= 19)
206-
+ (3/4 - 2/3) * +(player.singularityChallenges.noAmbrosiaUpgrades.completions >= 20)
204+
const maxAccelMultiplier = (1 / 2)
205+
+ (3 / 5 - 1 / 2) * +(player.singularityChallenges.noAmbrosiaUpgrades.completions >= 15)
206+
+ (2 / 3 - 3 / 5) * +(player.singularityChallenges.noAmbrosiaUpgrades.completions >= 19)
207+
+ (3 / 4 - 2 / 3) * +(player.singularityChallenges.noAmbrosiaUpgrades.completions >= 20)
207208

208209
while (player.blueberryTime >= timeToAmbrosia) {
209210
const RNG = Math.random()
@@ -219,7 +220,10 @@ export const addTimers = (input: TimerInput, time = 0) => {
219220
timeToAmbrosia = calculateRequiredBlueberryTime()
220221
const secondsToNextAmbrosia = timeToAmbrosia / G.ambrosiaCurrStats.ambrosiaGenerationSpeed
221222

222-
G.ambrosiaTimer += Math.min(secondsToNextAmbrosia * maxAccelMultiplier, ambrosiaToGain * 0.2 * player.shopUpgrades.shopAmbrosiaAccelerator)
223+
G.ambrosiaTimer += Math.min(
224+
secondsToNextAmbrosia * maxAccelMultiplier,
225+
ambrosiaToGain * 0.2 * player.shopUpgrades.shopAmbrosiaAccelerator
226+
)
223227
timeToAmbrosia = calculateRequiredBlueberryTime()
224228
}
225229

src/Synergism.ts

+5-35
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ import {
136136

137137
import i18next from 'i18next'
138138
import localforage from 'localforage'
139-
import { BlueberryUpgrade, blueberryUpgradeData } from './BlueberryUpgrades'
139+
import { BlueberryUpgrade, blueberryUpgradeData, updateLoadoutHoverClasses } from './BlueberryUpgrades'
140140
import { DOMCacheGetOrSet } from './Cache/DOM'
141141
import { lastUpdated, prod, testing, version } from './Config'
142142
import { WowCubes, WowHypercubes, WowPlatonicCubes, WowTesseracts } from './CubeExperimental'
@@ -1590,6 +1590,8 @@ const loadSynergy = async () => {
15901590
return
15911591
}
15921592

1593+
updateLoadoutHoverClasses()
1594+
15931595
player.lastExportedSave = data.lastExportedSave ?? 0
15941596

15951597
if (data.offerpromo24used !== undefined) {
@@ -1634,12 +1636,6 @@ const loadSynergy = async () => {
16341636
player.loaded10101 = false
16351637
}
16361638

1637-
// Fix dumb shop stuff
1638-
// First, if shop isn't even defined we just define it as so
1639-
if (data.shopUpgrades === undefined) {
1640-
player.shopUpgrades = Object.assign({}, blankSave.shopUpgrades)
1641-
}
1642-
16431639
if (typeof player.researches[76] === 'undefined') {
16441640
player.codes.set(13, false)
16451641
player.researches.push(
@@ -1936,9 +1932,8 @@ const loadSynergy = async () => {
19361932

19371933
// checkVariablesOnLoad(data)
19381934

1939-
if (data.ascensionCount === undefined || player.ascensionCount === 0) {
1940-
player.ascensionCount = 0
1941-
if (player.ascensionCounter === 0 && player.prestigeCount > 0) {
1935+
if (player.ascensionCount === 0) {
1936+
if (player.prestigeCount > 0) {
19421937
player.ascensionCounter = 86400 * 90
19431938
}
19441939
/*player.cubeUpgrades = [null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1969,12 +1964,6 @@ const loadSynergy = async () => {
19691964
globalSpeed: 0
19701965
}
19711966
}
1972-
if (data.autoAntSacTimer == null) {
1973-
player.autoAntSacTimer = 900
1974-
}
1975-
if (data.autoAntSacrificeMode === undefined) {
1976-
player.autoAntSacrificeMode = 0
1977-
}
19781967

19791968
if (player.transcendCount < 0) {
19801969
player.transcendCount = 0
@@ -2015,25 +2004,6 @@ const loadSynergy = async () => {
20152004
}
20162005
}
20172006

2018-
if (data.history === undefined) {
2019-
player.history = { ants: [], ascend: [], reset: [], singularity: [] }
2020-
} else {
2021-
// See: https://discord.com/channels/677271830838640680/964168000360038481/964168002071330879
2022-
const keys = Object.keys(
2023-
blankSave.history
2024-
) as (keyof (typeof blankSave)['history'])[]
2025-
2026-
for (const historyKey of keys) {
2027-
if (!(historyKey in player.history)) {
2028-
player.history[historyKey] = []
2029-
}
2030-
}
2031-
}
2032-
2033-
if (data.historyShowPerSecond === undefined) {
2034-
player.historyShowPerSecond = false
2035-
}
2036-
20372007
if (!Number.isInteger(player.ascendBuilding1.cost)) {
20382008
player.ascendBuilding1.cost = 1
20392009
player.ascendBuilding1.owned = 0

src/saves/PlayerSchema.ts

+31-38
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,11 @@ const decimalSchema = z.custom<Decimal>((value) => {
2020
}
2121
}).transform((decimalSource) => new Decimal(decimalSource))
2222

23-
const arrayStartingWithNull = (s: ZodType) =>
24-
z.array(z.union([z.null(), s]))
25-
.refine((arr) => arr.length > 0 && arr[0] === null, {
26-
message: 'First element must be null'
27-
})
28-
.refine((arr) => arr.slice(1).every((element) => typeof element === 'number'), {
29-
message: 'All elements after the first must be numbers'
30-
})
23+
const arrayStartingWithNull = (s: ZodType) => z.tuple([z.null()]).rest(s)
3124

32-
const arrayExtend = (array: number[], k: keyof Player) => {
25+
const arrayExtend = <K extends keyof Player, Value extends Player[K]>(array: Value, k: K) => {
3326
if (array.length < blankSave[k].length) {
34-
array.push(...Array(blankSave[k].length - array.length).fill(0))
27+
array.push(...blankSave[k].slice(array.length))
3528
}
3629
return array
3730
}
@@ -64,17 +57,18 @@ const toggleSchema = z.record(z.string(), z.boolean()).transform((record) => {
6457
const decimalStringSchema = z.string().regex(/^|-?\d+(\.\d{1,2})?$/)
6558
const integerStringSchema = z.string().regex(/^\d+$/)
6659

67-
const hepteractCraftSchema = z.object({
68-
AUTO: z.boolean(),
69-
BAL: z.number(),
70-
BASE_CAP: z.number(),
71-
CAP: z.number(),
72-
DISCOUNT: z.number(),
73-
HEPTERACT_CONVERSION: z.number(),
74-
HTML_STRING: z.string(),
75-
OTHER_CONVERSIONS: z.record(z.string(), z.number()),
76-
UNLOCKED: z.boolean()
77-
})
60+
const hepteractCraftSchema = (k: keyof Player['hepteractCrafts']) =>
61+
z.object({
62+
AUTO: z.boolean().default(() => blankSave.hepteractCrafts[k].AUTO),
63+
BAL: z.number().default(() => blankSave.hepteractCrafts[k].BAL),
64+
BASE_CAP: z.number(),
65+
CAP: z.number().default(() => blankSave.hepteractCrafts[k].CAP),
66+
DISCOUNT: z.number().default(() => blankSave.hepteractCrafts[k].DISCOUNT),
67+
HEPTERACT_CONVERSION: z.number(),
68+
HTML_STRING: z.string().default(() => blankSave.hepteractCrafts[k].HTML_STRING),
69+
OTHER_CONVERSIONS: z.record(z.string(), z.number()),
70+
UNLOCKED: z.boolean().default(() => blankSave.hepteractCrafts[k].UNLOCKED)
71+
})
7872

7973
export const playerSchema = z.object({
8074
firstPlayed: z.string().datetime().optional().default(() => new Date().toISOString()),
@@ -304,7 +298,7 @@ export const playerSchema = z.object({
304298
maxobtainiumpersecond: z.number().default(() => blankSave.maxobtainiumpersecond),
305299
maxobtainium: z.number().default(() => blankSave.maxobtainium),
306300

307-
researches: z.number().array(),
301+
researches: z.number().array().transform((array) => arrayExtend(array, 'researches')),
308302

309303
unlocks: z.record(z.string(), z.boolean()),
310304
achievements: z.number().array().transform((array) => arrayExtend(array, 'achievements')),
@@ -448,8 +442,8 @@ export const playerSchema = z.object({
448442
ascensionCounterReal: z.number().default(() => blankSave.ascensionCounterReal),
449443
ascensionCounterRealReal: z.number().default(() => blankSave.ascensionCounterRealReal),
450444
cubeUpgrades: arrayStartingWithNull(z.number())
451-
.transform((array) => arrayExtend(array, 'cubeUpgrades'))
452-
.default(() => [...blankSave.cubeUpgrades]),
445+
.transform((array) => arrayExtend(array as [null, ...number[]], 'cubeUpgrades'))
446+
.default((): [null, ...number[]] => [...blankSave.cubeUpgrades]),
453447
cubeUpgradesBuyMaxToggle: z.boolean().default(() => blankSave.cubeUpgradesBuyMaxToggle),
454448
autoCubeUpgradesToggle: z.boolean().default(() => blankSave.autoCubeUpgradesToggle),
455449
autoPlatonicUpgradesToggle: z.boolean().default(() => blankSave.autoPlatonicUpgradesToggle),
@@ -474,14 +468,14 @@ export const playerSchema = z.object({
474468
platonicBlessings: z.record(z.string(), z.number()).default(() => ({ ...blankSave.platonicBlessings })),
475469

476470
hepteractCrafts: z.object({
477-
chronos: hepteractCraftSchema,
478-
hyperrealism: hepteractCraftSchema,
479-
quark: hepteractCraftSchema,
480-
challenge: hepteractCraftSchema,
481-
abyss: hepteractCraftSchema,
482-
accelerator: hepteractCraftSchema,
483-
acceleratorBoost: hepteractCraftSchema,
484-
multiplier: hepteractCraftSchema
471+
chronos: hepteractCraftSchema('chronos'),
472+
hyperrealism: hepteractCraftSchema('hyperrealism'),
473+
quark: hepteractCraftSchema('quark'),
474+
challenge: hepteractCraftSchema('challenge'),
475+
abyss: hepteractCraftSchema('abyss'),
476+
accelerator: hepteractCraftSchema('accelerator'),
477+
acceleratorBoost: hepteractCraftSchema('acceleratorBoost'),
478+
multiplier: hepteractCraftSchema('multiplier')
485479
}).transform((crafts) => {
486480
return Object.fromEntries(
487481
Object.entries(blankSave.hepteractCrafts).map(([key, value]) => {
@@ -521,7 +515,10 @@ export const playerSchema = z.object({
521515
),
522516
corruptionShowStats: z.boolean().default(() => blankSave.corruptionShowStats),
523517

524-
constantUpgrades: arrayStartingWithNull(z.number()).default(() => [...blankSave.constantUpgrades]),
518+
constantUpgrades: arrayStartingWithNull(z.number()).default((): [
519+
null,
520+
...number[]
521+
] => [...blankSave.constantUpgrades]),
525522
// TODO: real types
526523
history: z.object({
527524
ants: z.any().array(),
@@ -623,11 +620,7 @@ export const playerSchema = z.object({
623620
})
624621
)
625622
)
626-
.default(() => {
627-
const v = JSON.parse(JSON.stringify(blankSave.singularityUpgrades))
628-
console.log('DEFAULT SING UPGRADES', v)
629-
return v
630-
}),
623+
.default(() => JSON.parse(JSON.stringify(blankSave.singularityUpgrades))),
631624
octeractUpgrades: z.record(z.string(), singularityUpgradeSchema('octeractsInvested'))
632625
.transform((upgrades) =>
633626
Object.fromEntries(

src/types/Synergism.d.ts

+36-34
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import type {
1616
} from '../StatCache'
1717
import type { Tabs } from '../Tabs'
1818

19+
type ArrayStartingWithNull<T> = [null, ...T[]]
20+
1921
export interface Player {
2022
firstPlayed: string
2123
worlds: QuarkHandler
@@ -422,20 +424,20 @@ export interface Player {
422424
goldenQuarksTimer: number
423425

424426
antPoints: Decimal
425-
antUpgrades: (null | number)[]
427+
antUpgrades: number[]
426428
antSacrificePoints: number
427429
antSacrificeTimer: number
428430
antSacrificeTimerReal: number
429431

430432
talismanLevels: number[]
431433
talismanRarity: number[]
432-
talismanOne: (null | number)[]
433-
talismanTwo: (null | number)[]
434-
talismanThree: (null | number)[]
435-
talismanFour: (null | number)[]
436-
talismanFive: (null | number)[]
437-
talismanSix: (null | number)[]
438-
talismanSeven: (null | number)[]
434+
talismanOne: ArrayStartingWithNull<number>
435+
talismanTwo: ArrayStartingWithNull<number>
436+
talismanThree: ArrayStartingWithNull<number>
437+
talismanFour: ArrayStartingWithNull<number>
438+
talismanFive: ArrayStartingWithNull<number>
439+
talismanSix: ArrayStartingWithNull<number>
440+
talismanSeven: ArrayStartingWithNull<number>
439441
talismanShards: number
440442
commonFragments: number
441443
uncommonFragments: number
@@ -463,7 +465,7 @@ export interface Player {
463465
openHypercubes: number
464466
autoOpenPlatonicsCubes: boolean
465467
openPlatonicsCubes: number
466-
cubeUpgrades: [null, ...number[]]
468+
cubeUpgrades: ArrayStartingWithNull<number>
467469
cubeUpgradesBuyMaxToggle: boolean
468470
autoCubeUpgradesToggle: boolean
469471
autoPlatonicUpgradesToggle: boolean
@@ -535,7 +537,7 @@ export interface Player {
535537
corruptionLoadoutNames: string[]
536538
corruptionShowStats: boolean
537539

538-
constantUpgrades: [null, ...number[]]
540+
constantUpgrades: ArrayStartingWithNull<number>
539541
history: Record<Category, ResetHistoryEntryUnion[]>
540542
historyShowPerSecond: boolean
541543

@@ -835,13 +837,13 @@ export interface GlobalVariables {
835837
rune4Talisman: number
836838
rune5Talisman: number
837839

838-
talisman1Effect: [null, ...number[]]
839-
talisman2Effect: [null, ...number[]]
840-
talisman3Effect: [null, ...number[]]
841-
talisman4Effect: [null, ...number[]]
842-
talisman5Effect: [null, ...number[]]
843-
talisman6Effect: [null, ...number[]]
844-
talisman7Effect: [null, ...number[]]
840+
talisman1Effect: ArrayStartingWithNull<number>
841+
talisman2Effect: ArrayStartingWithNull<number>
842+
talisman3Effect: ArrayStartingWithNull<number>
843+
talisman4Effect: ArrayStartingWithNull<number>
844+
talisman5Effect: ArrayStartingWithNull<number>
845+
talisman6Effect: ArrayStartingWithNull<number>
846+
talisman7Effect: ArrayStartingWithNull<number>
845847

846848
talisman6Power: number
847849
talisman7Quarks: number
@@ -854,21 +856,21 @@ export interface GlobalVariables {
854856

855857
talismanLevelCostMultiplier: number[]
856858

857-
talismanPositiveModifier: [null, ...number[]]
858-
talismanNegativeModifier: [null, ...number[]]
859+
talismanPositiveModifier: ArrayStartingWithNull<number>
860+
talismanNegativeModifier: ArrayStartingWithNull<number>
859861

860-
commonTalismanEnhanceCost: [null, ...number[]]
861-
uncommonTalismanEnchanceCost: [null, ...number[]]
862-
rareTalismanEnchanceCost: [null, ...number[]]
863-
epicTalismanEnhanceCost: [null, ...number[]]
864-
legendaryTalismanEnchanceCost: [null, ...number[]]
865-
mythicalTalismanEnchanceCost: [null, ...number[]]
862+
commonTalismanEnhanceCost: ArrayStartingWithNull<number>
863+
uncommonTalismanEnchanceCost: ArrayStartingWithNull<number>
864+
rareTalismanEnchanceCost: ArrayStartingWithNull<number>
865+
epicTalismanEnhanceCost: ArrayStartingWithNull<number>
866+
legendaryTalismanEnchanceCost: ArrayStartingWithNull<number>
867+
mythicalTalismanEnchanceCost: ArrayStartingWithNull<number>
866868

867869
talismanRespec: number
868870

869871
obtainiumGain: number
870872

871-
mirrorTalismanStats: [null, ...number[]]
873+
mirrorTalismanStats: ArrayStartingWithNull<number>
872874
antELO: number
873875
effectiveELO: number
874876

@@ -891,19 +893,19 @@ export interface GlobalVariables {
891893

892894
buildingSubTab: BuildingSubtab
893895
// number000 of each before Diminishing Returns
894-
blessingbase: [null, ...number[]]
895-
blessingDRPower: [null, ...number[]]
896+
blessingbase: ArrayStartingWithNull<number>
897+
blessingDRPower: ArrayStartingWithNull<number>
896898
giftbase: number[]
897899
giftDRPower: number[]
898-
benedictionbase: [null, ...number[]]
899-
benedictionDRPower: [null, ...number[]]
900+
benedictionbase: ArrayStartingWithNull<number>
901+
benedictionDRPower: ArrayStartingWithNull<number>
900902
// 10 Million of each before Diminishing returns on first number 200k for second, and 10k for the last few
901903
platonicCubeBase: number[]
902904
platonicDRPower: number[]
903905

904-
cubeBonusMultiplier: [null, ...number[]]
905-
tesseractBonusMultiplier: [null, ...number[]]
906-
hypercubeBonusMultiplier: [null, ...number[]]
906+
cubeBonusMultiplier: ArrayStartingWithNull<number>
907+
tesseractBonusMultiplier: ArrayStartingWithNull<number>
908+
hypercubeBonusMultiplier: ArrayStartingWithNull<number>
907909
platonicBonusMultiplier: number[]
908910

909911
autoOfferingCounter: number
@@ -934,7 +936,7 @@ export interface GlobalVariables {
934936
acceleratorMultiplier: number
935937
multiplierMultiplier: number
936938

937-
constUpgradeCosts: [null, ...number[]]
939+
constUpgradeCosts: ArrayStartingWithNull<number>
938940

939941
globalConstantMult: Decimal
940942
autoTalismanTimer: number

0 commit comments

Comments
 (0)