Skip to content

Commit df07ba9

Browse files
Merge branch 'master' into 6030s-4-2-0-fixes
2 parents ae6582a + 0526c06 commit df07ba9

10 files changed

Lines changed: 448 additions & 83 deletions

File tree

src/BlueberryUpgrades.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,7 +1097,7 @@ export const ambrosiaUpgrades: {
10971097
amount: format(levels, 0, true)
10981098
})
10991099
},
1100-
extraLevelCalc: () => getRedAmbrosiaUpgradeEffects('freeLevelsRow2', 'freeLevels'),
1100+
extraLevelCalc: () => 0, // INTENDED
11011101
name: () => i18next.t('ambrosia.data.ambrosiaFreeGenerationUpgrades.name'),
11021102
description: () => i18next.t('ambrosia.data.ambrosiaFreeGenerationUpgrades.description'),
11031103
unlockCriterion: 'Exalt1x1'
@@ -1106,8 +1106,8 @@ export const ambrosiaUpgrades: {
11061106
level: 0,
11071107
ambrosiaInvested: 0,
11081108
blueberriesInvested: 0,
1109-
maxLevel: 25,
1110-
costPerLevel: 20000,
1109+
maxLevel: 40,
1110+
costPerLevel: 10000,
11111111
blueberryCost: 2,
11121112
ignoreEXALT: false,
11131113
prerequisites: {
@@ -1125,7 +1125,7 @@ export const ambrosiaUpgrades: {
11251125
amount: format(levels, 0, true)
11261126
})
11271127
},
1128-
extraLevelCalc: () => getRedAmbrosiaUpgradeEffects('freeLevelsRow5', 'freeLevels'),
1128+
extraLevelCalc: () => getRedAmbrosiaUpgradeEffects('freeLevelsRow4', 'freeLevels'),
11291129
name: () => i18next.t('ambrosia.data.ambrosiaFreeRedLuckUpgrades.name'),
11301130
description: () => i18next.t('ambrosia.data.ambrosiaFreeRedLuckUpgrades.description'),
11311131
unlockCriterion: 'Exalt5x1'

src/Config.ts

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

5-
export const version = '4.2.2 April 17, 2026: Steam!!!'
5+
export const version = '4.2.3 April 24, 2026: Steam!!!'
66

77
export const isSynergismCC = location.hostname === 'synergism.cc'
88

src/Shop.ts

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,8 @@ interface IShopData<T extends ShopUpgradeNames, K extends keyof QuarkShopUpgrade
237237
maxLevel: number
238238
type: shopUpgradeTypes
239239
refundMinimumLevel: number
240-
upgradeTypes: ShopUpgradeGroups[]
240+
upgradeTypes: ShopUpgradeGroups[],
241+
freeUpgradeMultiplier?: number
241242
}
242243

243244
const resetNever = () => false
@@ -545,12 +546,16 @@ export const shopUpgrades: { [K in ShopUpgradeNames]: IShopData<K, keyof QuarkSh
545546
cubeToQuark: {
546547
name: () => i18next.t('shop.names.cubeToQuark'),
547548
description: () => i18next.t('shop.upgradeDescriptions.cubeToQuark'),
548-
effects: (n) => 1 + 0.5 * n, // cubeQuarkMult
549+
effects: (n) => {
550+
if (n >= 1) {
551+
return 1.5 + 0.5 * (1 - Math.pow(0.9, n - 1))
552+
} else {
553+
return 1 // cubeQuarkMult
554+
}
555+
},
549556
effectDescription () {
550-
const effects = getShopUpgradeEffects('cubeToQuark', 'cubeQuarkMult')
551-
return i18next.t('shop.upgradeEffects.cubeToQuark', {
552-
amount: formatAsPercentIncrease(effects, 0)
553-
})
557+
const cubeQuarkMult = getShopUpgradeEffects('cubeToQuark', 'cubeQuarkMult')
558+
return i18next.t('shop.upgradeEffects.cubeToQuark', { amount: formatAsPercentIncrease(cubeQuarkMult, 1) })
554559
},
555560
isUnlocked: () => player.ascensionCount > 0 || player.highestSingularityCount > 0,
556561
price: 2000,
@@ -565,12 +570,16 @@ export const shopUpgrades: { [K in ShopUpgradeNames]: IShopData<K, keyof QuarkSh
565570
tesseractToQuark: {
566571
name: () => i18next.t('shop.names.tesseractToQuark'),
567572
description: () => i18next.t('shop.upgradeDescriptions.tesseractToQuark'),
568-
effects: (n) => 1 + 0.5 * n, // tesseractQuarkMult
573+
effects: (n) => {
574+
if (n >= 1) {
575+
return 1.5 + 0.5 * (1 - Math.pow(0.9, n - 1))
576+
} else {
577+
return 1 // tesseractQuarkMult
578+
}
579+
},
569580
effectDescription () {
570-
const effects = getShopUpgradeEffects('tesseractToQuark', 'tesseractQuarkMult')
571-
return i18next.t('shop.upgradeEffects.tesseractToQuark', {
572-
amount: formatAsPercentIncrease(effects, 0)
573-
})
581+
const tesseractQuarkMult = getShopUpgradeEffects('tesseractToQuark', 'tesseractQuarkMult')
582+
return i18next.t('shop.upgradeEffects.tesseractToQuark', { amount: formatAsPercentIncrease(tesseractQuarkMult, 1) })
574583
},
575584
isUnlocked: () => player.highestchallengecompletions[11] > 0 || player.highestSingularityCount > 0,
576585
price: 3500,
@@ -585,12 +594,16 @@ export const shopUpgrades: { [K in ShopUpgradeNames]: IShopData<K, keyof QuarkSh
585594
hypercubeToQuark: {
586595
name: () => i18next.t('shop.names.hypercubeToQuark'),
587596
description: () => i18next.t('shop.upgradeDescriptions.hypercubeToQuark'),
588-
effects: (n) => 1 + 0.5 * n, // hypercubeQuarkMult
597+
effects: (n) => {
598+
if (n >= 1) {
599+
return 1.5 + 0.5 * (1 - Math.pow(0.9, n - 1))
600+
} else {
601+
return 1 // hypercubeQuarkMult
602+
}
603+
},
589604
effectDescription () {
590-
const effects = getShopUpgradeEffects('hypercubeToQuark', 'hypercubeQuarkMult')
591-
return i18next.t('shop.upgradeEffects.hypercubeToQuark', {
592-
amount: formatAsPercentIncrease(effects, 0)
593-
})
605+
const hypercubeQuarkMult = getShopUpgradeEffects('hypercubeToQuark', 'hypercubeQuarkMult')
606+
return i18next.t('shop.upgradeEffects.hypercubeToQuark', { amount: formatAsPercentIncrease(hypercubeQuarkMult, 1) })
594607
},
595608
isUnlocked: () => player.highestchallengecompletions[13] > 0 || player.highestSingularityCount > 0,
596609
price: 5000,
@@ -1796,7 +1809,7 @@ export const shopUpgrades: { [K in ShopUpgradeNames]: IShopData<K, keyof QuarkSh
17961809
refundable: false,
17971810
resetOnSingularity: resetNever,
17981811
refundMinimumLevel: 0,
1799-
upgradeTypes: [ShopUpgradeGroups.AmbrosiaLuck]
1812+
upgradeTypes: [ShopUpgradeGroups.RedAmbrosiaLuck]
18001813
},
18011814
shopRedLuck3: {
18021815
name: () => i18next.t('shop.names.shopRedLuck3'),
@@ -1824,7 +1837,8 @@ export const shopUpgrades: { [K in ShopUpgradeNames]: IShopData<K, keyof QuarkSh
18241837
refundable: false,
18251838
resetOnSingularity: resetNever,
18261839
refundMinimumLevel: 0,
1827-
upgradeTypes: [ShopUpgradeGroups.AmbrosiaLuck]
1840+
upgradeTypes: [ShopUpgradeGroups.RedAmbrosiaLuck],
1841+
freeUpgradeMultiplier: 2,
18281842
},
18291843
shopCashGrabUltra: {
18301844
name: () => i18next.t('shop.names.shopCashGrabUltra'),
@@ -2195,9 +2209,12 @@ export const shopUpgrades: { [K in ShopUpgradeNames]: IShopData<K, keyof QuarkSh
21952209
export const shopUpgradeNames: ShopUpgradeNames[] = Object.keys(shopUpgrades) as ShopUpgradeNames[]
21962210

21972211
const getBonusLevels = (upgradeKey: ShopUpgradeNames) => {
2212+
if (player.shopUpgrades[upgradeKey] === 0) {
2213+
return 0
2214+
}
21982215
let bonusLevels = 0
21992216
for (const type of shopUpgrades[upgradeKey].upgradeTypes) {
2200-
bonusLevels += shopUpgradeTypeInfo[type].bonusLevels()
2217+
bonusLevels += shopUpgradeTypeInfo[type].bonusLevels() * (shopUpgrades[upgradeKey].freeUpgradeMultiplier ?? 1)
22012218
}
22022219
return bonusLevels
22032220
}
@@ -2253,16 +2270,22 @@ export const createShopHTML = (input: ShopUpgradeNames) => {
22532270
let symbolHTML = ''
22542271
let bonusLevelHTML = ''
22552272

2273+
const bonusLevelMult = shopUpgrades[input].freeUpgradeMultiplier ?? 1
2274+
22562275
// This is done in order for consistent formatting
22572276
for (let i = ShopUpgradeGroups.Offering; i <= LAST_GROUP; i++) {
22582277
if (shopUpgrades[input].upgradeTypes.includes(i)) {
22592278
const bonusLevels = shopUpgradeTypeInfo[i].bonusLevels()
2279+
let bonusMultText = ''
2280+
if (bonusLevelMult > 1) {
2281+
bonusMultText = ` x${bonusLevelMult}`
2282+
}
22602283
symbolHTML += `<span style="color: ${shopUpgradeTypeInfo[i].HTMLColor}"> [${
22612284
shopUpgradeTypeInfo[i].symbol
2262-
}]</span>`
2285+
}${bonusMultText}]</span>`
22632286
if (bonusLevels > 0) {
22642287
bonusLevelHTML += `<span style="color: ${shopUpgradeTypeInfo[i].HTMLColor}"> [+${
2265-
shopUpgradeTypeInfo[i].bonusLevels()
2288+
shopUpgradeTypeInfo[i].bonusLevels() * bonusLevelMult
22662289
}]</span>`
22672290
}
22682291
}

translations/de.json

Lines changed: 66 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"blueberryCost": "Blaubeeren (Zum Aktivieren):",
2828
"prereqNotMetAlert": "Du hast nicht die notwendigen Voraussetzungen, um dieses Upgrade zu kaufen.",
2929
"notEnoughBlueberries": "Du hast nicht genug Blaubeeren, um dieses Modul zu aktivieren.",
30-
"timeThresholds": "Your Ambrosia Bar Point requirements have been doubled <<cyan | {{threshold}}>> times due to lifetime Ambrosia. Next doubling in <<orange|{{toNext}}>> lifetime Ambrosia.",
30+
"timeThresholds": "You've reached <<cyan | {{threshold}}>> thresholds due to lifetime Ambrosia. Next in <<orange|{{toNext}}>> lifetime Ambrosia.",
3131
"cubeUpgradeThresholds": "Your Ambrosia Bar Point requirements have been doubled <<cyan | {{threshold}}>> times due to lifetime Ambrosia. Next doubling in <<orange|{{toNext}}>> lifetime Ambrosia. <<cyan | Ambrosia Bar Point gain +{{percent}}%>>!",
3232
"cubeUpgradeRedBarFills": "Your Red Bar has filled <<maroon | {{amount}}>> times while Cookie Upgrade 29 is purchased, giving <<green | +{{luck}} Ambrosia Luck>>!",
3333
"ambrosiaBuyPrompt": "Wie viel Ambrosia willst du ausgeben? Du hast {{amount}} Ambrosia. Gib -1 ein, um das Maximum zu verwenden!",
@@ -191,6 +191,31 @@
191191
"name": "Rune Coefficient Module",
192192
"description": "For each of the first five runes, add 1 to their Rune Coefficient per level! For Infinite Ascent, add +0.001 to the Rune Coefficient per level.",
193193
"effect": "Runes 1-5 have +{{amount}} Rune Coefficient; IA Rune has +{{amount2}} Rune Coefficient"
194+
},
195+
"ambrosiaBrickOfLead": {
196+
"name": "The Brick of Lead",
197+
"description": "I always keep this under my hat. This reduces your Ambrosia Bar Point generation speed by 2% per level, but grants Ambrosia Luck to compensate! It also slows down the Singularity timer by 1% per level.",
198+
"effect": "Ambrosia Bar Point Requirement x{{blueberryGen}}, Ambrosia Luck +{{luckMult}}, Singularity timer speed x{{singularitySpeed}}"
199+
},
200+
"ambrosiaFreeLuckUpgrades": {
201+
"name": "The Green, Green Grass of Ambrosia",
202+
"description": "For all 'Luck' type Quark Upgrades, gain +1 free level per level! These will have a corresponding icon.",
203+
"effect": "+{{amount}} free levels for 'Luck' type Quark Upgrades"
204+
},
205+
"ambrosiaFreeGenerationUpgrades": {
206+
"name": "Time in a Bottle",
207+
"description": "For all 'Generation' type Quark Upgrades, gain +1 free level per level! These will have a corresponding icon.",
208+
"effect": "+{{amount}} free levels for 'Generation' type Quark Upgrades"
209+
},
210+
"ambrosiaFreeRedLuckUpgrades": {
211+
"name": "The Gambler",
212+
"description": "For all 'Red Luck' type Quark Upgrades, gain +1 free level per level! These will have a corresponding icon.",
213+
"effect": "+{{amount}} free levels for 'Red Luck' type Quark Upgrades"
214+
},
215+
"ambrosiaFreeQuarkUpgrades": {
216+
"name": "Mechanical - the 1981 Cut",
217+
"description": "For all 'Quark' type Quark Upgrades, gain +0.1 free levels per level! These will have a corresponding icon.",
218+
"effect": "+{{amount}} free levels for 'Quark' type Quark Upgrades"
194219
}
195220
},
196221
"loadouts": {
@@ -342,6 +367,31 @@
342367
"name": "Berries that are... blue?",
343368
"description": "They look like Blueberries. They act like Blueberries. You're not really sure if they're Blueberries.",
344369
"effect": "Your Blueberry inventory is increased by <<lightblue|{{amount}}>>"
370+
},
371+
"redAmbrosiaFreeAccumulator": {
372+
"name": "Red Digital Octeract Accumulator Accumulator",
373+
"description": "The Digital Octeract Accumulator (DOA) is mighty powerful. Did you know you used to be able to get free levels from events? Now you can get it whenever!",
374+
"effect": "The Digital Octeract Accumulator gains <<white|{{levels}}>> free levels per usage of code 'daily' <br> This upgrade can get up to <<white|{{cap}}>> free levels until fully saturated."
375+
},
376+
"freeOfferingUpgrades": {
377+
"name": "The Feast and the Famine",
378+
"description": "Gain +1 free Offering level for Quark Upgrades per level!",
379+
"effect": "+<<orange|{{amount}}>> free Offering levels"
380+
},
381+
"freeObtainiumUpgrades": {
382+
"name": "Weird Science",
383+
"description": "Gain +1 free Obtainium level for Quark Upgrades per level!",
384+
"effect": "+<<pink|{{amount}}>> free Obtainium levels"
385+
},
386+
"freeCubeUpgrades": {
387+
"name": "Livin' in a Box",
388+
"description": "Gain +1 free Cube level for Quark Upgrades per level!",
389+
"effect": "+<<white|{{amount}}>> free Cube levels"
390+
},
391+
"freeSpeedUpgrades": {
392+
"name": "The Distance",
393+
"description": "Gain +1 free Speed level for Quark Upgrades per level!",
394+
"effect": "+<<yellow|{{amount}}>> free Speed levels"
345395
}
346396
}
347397
},
@@ -372,7 +422,7 @@
372422
"22": "A national treasure: Establish 1 Coin Mint.",
373423
"23": "Now with competition!: Establish 10 Coin Mints.",
374424
"24": "Counterfeiting with Style!: Establish 100 Coin Mints.",
375-
"25": "Why do we need all these?: Establish 250 Coin Mints.",
425+
"25": "Why do we need all these?: Establish 333 Coin Mints.",
376426
"26": "No really, why??: Establish 5,000 Coin Mints.",
377427
"27": "Is no one to stop us???: Establish 10,000 Coin Mints.",
378428
"28": "Oh well, time to mint: Establish 20,000 Coin Mints.",
@@ -636,13 +686,13 @@
636686
"286": "... when you ARE the market: Purchase 1 Billion Investments.",
637687
"287": "Office Space: Purchase 10,000,000 Printers.",
638688
"288": "I'm going to need that by Saturday: Purchase 100,000,000 Printers.",
639-
"289": "If you could do that, it'd be greaaaat: Purchase 5 Billion Printers",
689+
"289": "If you could do that, it'd be greaaaat: Purchase 5 Billion Printers.",
640690
"290": "Mint Condition: Purchase 100,000,000 Coin Mints.",
641691
"291": "Chocolate Mints, anyone?: Purchase 1 Billion Coin Mints.",
642-
"292": "A good clean feeling, no matter what: Purchase 20 Billion Coin Mints",
643-
"293": "Alpha Regeneration: Create 1 Billion Coin Mints.",
644-
"294": "Citrinitas Synthesis: Create 20 Billion Coin Mints.",
645-
"295": "The Philosopher's Stone: Create 1 Trillion Coin Mints.",
692+
"292": "A good clean feeling, no matter what: Purchase 20 Billion Coin Mints.",
693+
"293": "Alpha Regeneration: Create 1 Billion Alchemies.",
694+
"294": "Citrinitas Synthesis: Create 20 Billion Alchemies.",
695+
"295": "The Philosopher's Stone: Create 1 Trillion Alchemies.",
646696
"296": "Prestige...?: Prestige for at least 1e10,000,000 Diamonds.",
647697
"297": "Shine bright like a ...: Prestige for at least 1e10,000,000,000 [1e1e10] Diamonds.",
648698
"298": "Diamonds are forever: Prestige for at least 1e10,000,000,000,000 [1e1e13] Diamonds.",
@@ -3484,7 +3534,10 @@
34843534
"shopPanthemaCubes": "+{{amount}} Cubes! (+{{amount2}} per Cube level)",
34853535
"shopPanthemaAscensionSpeed": "+{{amount}} Ascension Speed! (+{{amount2}} per Speed level)",
34863536
"shopPanthemaQuarks": "+{{amount}} Quarks! (+{{amount2}} per Quark level)",
3487-
"shopPanthemaInfinityMeta": "+{{amount}} bonuses for all other Upgrade Levels! (+1% per Infinity level)"
3537+
"shopPanthemaInfinityMeta": "+{{amount}} bonuses for all other Upgrade Levels! (+1% per Infinity level)",
3538+
"shopPanthemaAmbrosiaGeneration": "+{{amount}} Ambrosia Bar Points! (+{{amount2}} per Ambrosia Generation level)",
3539+
"shopPanthemaAmbrosiaLuck": "+{{amount}} Ambrosia Luck! (+{{amount2}} per Ambrosia Luck level)",
3540+
"shopPanthemaRedLuck": "+{{amount}} Red Luck! (+{{amount2}} per Red Luck level)"
34883541
},
34893542
"names": {
34903543
"offeringPotion": "Offering Potion",
@@ -5988,7 +6041,7 @@
59886041
"ScalingReward1": "+100% increase to <<yellow|ALL Cube>> gain",
59896042
"ScalingReward2": "15 Achievement Points!",
59906043
"UniqueReward1": "1st - +12% <<gold|Golden Quarks>>!",
5991-
"UniqueReward2": "1st - A free <<var(--blueberry-box-color)|Blueberry>>! Also, unlock <<var(--amber-text-color)|Ambrosia>>!",
6044+
"UniqueReward2": "1st - Three free <<var(--blueberry-box-color)|Blueberries>>! Also, unlock <<var(--amber-text-color)|Ambrosia>>!",
59926045
"UniqueReward3": "10th - A new <<orchid|Quark>> upgrade!",
59936046
"UniqueReward4": "15th - +5% <<lime|Ambrosia Luck>> for free!",
59946047
"UniqueReward5": "15th - A new <<orange|Quark Shop>> upgrade for NOT FREE!"
@@ -6765,6 +6818,7 @@
67656818
"NoAmbrosiaUpgrades": "EXALT - No Ambrosia Effects:",
67666819
"Cookie5": "Cookie Upgrade 5 (Cx27):",
67676820
"BlueberryUpgrade": "Ambrosia - The Eight Leaf Clover:",
6821+
"BrickOfLead": "Ambrosia - Brick of Lead:",
67686822
"HorseShoeTalisman": "Horse Shoe Talisman Inscription Bonus:",
67696823
"Event": "Event Bonus:",
67706824
"Total": "Total Additive Luck Multiplier:"
@@ -6780,6 +6834,7 @@
67806834
"ShopUpgrade2": "Quark Upgrade - Ambrosia Luck II:",
67816835
"ShopUpgrade3": "Quark Upgrade - Ambrosia Luck III:",
67826836
"ShopUpgrade4": "Quark Upgrade - Ambrosia Luck IV:",
6837+
"Jack": "The Jack of all Trades:",
67836838
"SingularityUpgrades": "Golden Quark Upgrades (I-IV):",
67846839
"OcteractUpgrades": "Octeract Upgrades (I-IV):",
67856840
"AmbrosiaLuck1": "Ambrosia - Luck Module I:",
@@ -6821,6 +6876,7 @@
68216876
"ShopUpgrade2": "Quark Upgrade - Ambrosia Generation II:",
68226877
"ShopUpgrade3": "Quark Upgrade - Ambrosia Generation III:",
68236878
"ShopUpgrade4": "Quark Upgrade - Ambrosia Generation IV:",
6879+
"Jack": "The Jack of all Trades:",
68246880
"SingularityUpgrades": "Golden Quark Upgrades (I-IV):",
68256881
"OcteractUpgrades": "Octeract Upgrades (I-IV):",
68266882
"PatreonBonus": "Ambrosia - Shameless, Ambrosial Subscriber Advertisement:",
@@ -6952,6 +7008,7 @@
69527008
"ShopRedLuck1": "Low Class Dice of Asmodeus:",
69537009
"ShopRedLuck2": "Dice of Asmodeus:",
69547010
"ShopRedLuck3": "High Class Dice of Asmodeus:",
7011+
"Jack": "The Jack of all Trades:",
69557012
"Viscount": "Benefits of being a Viscount:",
69567013
"HorseShoeRune": "Horse Shoe Rune Bonus:",
69577014
"HorseShoeTalisman": "Horse Shoe Talisman Bonus:",

0 commit comments

Comments
 (0)