Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
ecf1ea6
update diamond bard for new talisman
wingedcatgirl Jan 24, 2025
06d5413
fixed context for several jokers
wingedcatgirl Jan 24, 2025
082014d
added old talisman as conflict
wingedcatgirl Jan 24, 2025
1b6b56c
readme update (i don't think more jokers are coming at this point :v)
wingedcatgirl Jan 24, 2025
f2d63f4
oh yeah fix the stone card thing
wingedcatgirl Jan 24, 2025
ecaf911
that's a bettercalc function, so dependency
wingedcatgirl Jan 24, 2025
78d95f0
Block fusion ingredience from appearing if fusion is present
wingedcatgirl Mar 24, 2025
b9072b3
added a config about it
wingedcatgirl Mar 24, 2025
7f902c2
... make the config *functional*, minty
wingedcatgirl Mar 24, 2025
b65d8c0
Merge pull request #1 from wingedcatgirl/block-ingredience
wingedcatgirl Apr 20, 2025
9d0441b
update so many things to modern standards
wingedcatgirl Apr 20, 2025
8e2b589
right, we ended up not needing that
wingedcatgirl Apr 20, 2025
c668b22
update more things to modern standards
wingedcatgirl Apr 20, 2025
8d7437d
you can't copy that :p
wingedcatgirl Apr 20, 2025
8aa3bd5
what's a 'release', never heard of it
wingedcatgirl Apr 20, 2025
222286d
me: 'i wonder how to fix the issue where it takes another round befor…
wingedcatgirl Apr 20, 2025
045371a
why was this local
wingedcatgirl Apr 20, 2025
11eba38
update dd to todd's new value
wingedcatgirl Apr 27, 2025
45cac7e
... use markdown syntax, not mediawiki
wingedcatgirl Apr 27, 2025
61ab9a0
clarify that
wingedcatgirl Apr 27, 2025
0498f43
document the api
wingedcatgirl Apr 30, 2025
a9130ba
more smods 1.0 updates
wingedcatgirl Apr 30, 2025
6fc1382
don't double upgrade spade archer just because blueprint is there :p
wingedcatgirl May 2, 2025
0ff9279
?? where did that come from
wingedcatgirl May 2, 2025
3c5f530
give this a beta version number for reference
wingedcatgirl May 2, 2025
376a7f9
spade archer now scales with 5+ spades
wingedcatgirl May 16, 2025
f0ded6e
version
wingedcatgirl May 16, 2025
7004a34
Add files via upload
Rot8erConeX May 20, 2025
2fc2e44
Club Wizard/Spade Archer sprites for CB setting
Rot8erConeX May 20, 2025
65f5d15
CW/SA sprites for colorblind setting
Rot8erConeX May 20, 2025
c836111
CW/SA sprites for colorblind setting
Rot8erConeX May 20, 2025
a602a35
Merge pull request #2 from Rot8erConeX/main
wingedcatgirl May 20, 2025
fa2dedd
restore scaling update that got accidentally removed
wingedcatgirl May 20, 2025
3eaeae0
version
wingedcatgirl May 20, 2025
00674b4
fix flipflop loc_vars error
wingedcatgirl May 22, 2025
bd2f69f
Update campingtrip.lua
Rot8erConeX Jun 8, 2025
929170b
preliminary commit for smods probability update (not tested)
wingedcatgirl Jul 15, 2025
8f7c010
Update smods requirement
wingedcatgirl Jul 15, 2025
9534dfa
fixed this old-ass bug
wingedcatgirl Aug 10, 2025
00b5f73
fixed this old-ass bug
wingedcatgirl Aug 10, 2025
7090c7e
Merge branch 'smods-prob-update'
wingedcatgirl Aug 10, 2025
36b7255
Merge pull request #3 from Rot8erConeX/patch-1
wingedcatgirl Aug 10, 2025
5677f7b
version update
wingedcatgirl Aug 10, 2025
be32d4f
was it this simple all along??
wingedcatgirl Aug 11, 2025
2430e82
remove (ish) joker selection limit
wingedcatgirl Aug 11, 2025
7323feb
fix for the issue with multiple fusions of the same joker (please fil…
wingedcatgirl Aug 11, 2025
78a6544
add flag to components when card is fused
wingedcatgirl Aug 12, 2025
f528ac1
fix some logic errors
wingedcatgirl Aug 16, 2025
e3aa084
version bump
wingedcatgirl Aug 21, 2025
38ee243
add a function that does it as a table because lmao this is unwieldy
wingedcatgirl Aug 26, 2025
cce8b31
document it
wingedcatgirl Aug 27, 2025
aba8926
.... be technically accurate (the best kind)
wingedcatgirl Aug 27, 2025
efd4d70
whoops, that's a syntax error
wingedcatgirl Aug 27, 2025
86f83a4
fixed negative fusions being fucky with new smods
wingedcatgirl Sep 2, 2025
4d1a05e
fix timing of set_ability
wingedcatgirl Sep 3, 2025
bd75e4c
optimization attempt (call `:get_card_fusion()` way less often in upd…
wingedcatgirl Sep 4, 2025
8d5a2fc
three of them? in this economy?
wingedcatgirl Nov 29, 2025
e10b715
ah, but the button would still be there
wingedcatgirl Nov 29, 2025
adda132
whoops, syntax error
wingedcatgirl Nov 29, 2025
f4941f6
fusion context update
wingedcatgirl Dec 11, 2025
faa855a
don't let fusion data linger improperly
wingedcatgirl Dec 13, 2025
b46b199
ver
wingedcatgirl Dec 13, 2025
b4bce39
OOPS, TYPO
wingedcatgirl Dec 16, 2025
c89c4a9
remove obsolete badge function
wingedcatgirl Dec 21, 2025
ee51972
add definitions file
wingedcatgirl Dec 21, 2025
43cc86e
disable poorly-received alt artwork for sparcher; fix bug in update f…
wingedcatgirl Dec 21, 2025
6890ec3
make a dedicated option for this
wingedcatgirl Dec 21, 2025
a2cdf13
better logic, probably
wingedcatgirl Dec 21, 2025
0bbe318
version
wingedcatgirl Dec 21, 2025
e2668e8
make component-blocking work on all fusions by hooking smods.add_to_p…
wingedcatgirl Dec 29, 2025
918e66a
me when definitely i typed all the words i'm thinking
wingedcatgirl Dec 29, 2025
0d4736c
ver
wingedcatgirl Dec 29, 2025
f989094
requirement bump
wingedcatgirl Dec 29, 2025
ec641d1
clean up spaghetti in `Card:fuse_card`; fixes https://canary.discord.…
wingedcatgirl Jan 14, 2026
fcdd98c
oh, set_ability handles this already
wingedcatgirl Jan 16, 2026
260deec
disable fusing from areas other than G.jokers for now
wingedcatgirl Jan 31, 2026
fbe315d
actually get the carry stats from the joker you click the fuse button on
wingedcatgirl Feb 10, 2026
3563f46
apparently we don't actually need all that roundabout nonsense
wingedcatgirl Feb 10, 2026
ec1b30d
delete spaces
wingedcatgirl Feb 23, 2026
2775f54
putting an assert in here (if the joker doesn't exist it'd just crash…
wingedcatgirl Feb 23, 2026
9643108
slow down price fighting; allow fusion discounts
wingedcatgirl Mar 31, 2026
839f0d1
wait. why did i put that *there*? i can't tell whether this makes sense
wingedcatgirl Mar 31, 2026
e464dcb
*universally* carry extra value, instead of doing a special-case patc…
wingedcatgirl Mar 31, 2026
21ebaef
remove debug prints and fix the merge thing (how did i miss _that_ ??)
wingedcatgirl Mar 31, 2026
e23d521
readme update
wingedcatgirl Mar 31, 2026
091d6a3
config to disable price flickering
wingedcatgirl Mar 31, 2026
fe8749e
ver
wingedcatgirl Mar 31, 2026
f568c4c
perishable sticker!!!!!!!
wingedcatgirl Apr 5, 2026
faf8df0
use add_sticker
wingedcatgirl Apr 26, 2026
aaeba99
update lsp defs
wingedcatgirl Apr 26, 2026
3577719
readme update
wingedcatgirl Apr 26, 2026
3037a81
update this link lol
wingedcatgirl Apr 26, 2026
3314f15
number!
wingedcatgirl Apr 26, 2026
a7d03d6
inherit no-flicker from reduced motion
wingedcatgirl Jul 15, 2026
3c92fce
also, number
wingedcatgirl Jul 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 56 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<div align="center">

[![Status](https://img.shields.io/badge/status-active-success.svg)]()
[![GitHub Issues](https://img.shields.io/github/issues/itayfeder/Fusion-Jokers.svg)](https://github.com/itayfeder/Fusion-Jokers/issues)
[![GitHub Issues](https://img.shields.io/github/issues/wingedcatgirl/Fusion-Jokers.svg)](https://github.com/wingedcatgirl/Fusion-Jokers/issues)
[![License](https://img.shields.io/badge/license-GNU-blue.svg)](/LICENSE)

</div>
Expand All @@ -22,6 +22,7 @@

- [About](#about)
- [How to Download](#how_to_download)
- [Config](#config)
- [Fusion API (For Developers)](#fusion_api)
- [Credits](#credits)

Expand All @@ -33,22 +34,72 @@ When you have a fusable joker, pressing on it will show a **"fuse" button**. Whe

<img width=500px src="art/jokers_tab.png?raw=true" alt="Showcase of jokers tab 5"></a>

The are a total of 15 fusions added in the mod, with more coming in the future!
There are a total of 17 fusions added in the mod, two of which are exclusive to [Six Suits](https://github.com/Aurelius7309/SixSuits)!

You can find a list of their abilities, as well as the jokers needed to make them, in this link: https://itayfeder.github.io/Fusion-Jokers/

## ⬇ How to Download <a name = "how_to_download"></a>

- The mod requires Steamodded. You can see info about how to use it [here](https://github.com/Steamopollys/Steamodded)
- Download the latest release of Fusion Jokers
- Download the latest release of Fusion Jokers from the [releases tab](https://github.com/wingedcatgirl/Fusion-Jokers/releases) (should be stable), or the latest commit from the green "Code" button up there (might include bugfixes for some dumb thing I overlooked earlier)
- Extract the downloaded mod to the Mods folder (at %appdata%/Balatro/Mods)

## ⚙️ Config <a name = "config"></a>

- **Block used components from reappearing**: Jokers used in a fusion cannot reappear if the fusion is present. Default true.
- These Jokers can reappear regardless if Showman or a Showman-like effect is active, if the fused Joker's `in_pool()` has `{allow_returning_components = true}` in its second return value, or if the component Joker's `in_pool()` has `{allow_duplicates = true}` in its second return value.
- **Alt art for Club Wizard**: A lighter color to better match high-contrast Clubs.
- **No price flickering**: Stop the fusion cost from flickering when multiple fusions are possible.

## ➕ Fusion API (For Developers) <a name = "fusion_api"></a>

The mod adds a way for other developers to create their own fusions!

Developers can call the function `FusionJokers.fusions:add_fusion()` to register their own fusion to the game. The function also allows them to determine carried stats between the component jokers and the fusion joker.
Developers can call the function `FusionJokers.fusions:register_fusion()` to register their own fusion to the game. The function also allows them to determine carried stats between the component jokers and the fusion joker.

```lua
FusionJokers.fusions:register_fusion{
jokers = {
--First component Joker; all values except "name" optional
{ name = "j_modprefix_key", carry_stat = "stat_to_carry", merge_stat = "stat_to_merge" },
-- String, key of component 1 String, name of stat String, name of stat
-- to carry over to merge
{ name = "j_modprefix_key", carry_stat = "stat_to_carry", merge_stat = "stat_to_merge" },
--Second component Joker; same values.
--This works for arbitrary numbers of additional Jokers
--if you want to do the Exodia thing.
},
result_joker = "j_modprefix_key", --String, key of result Joker
cost = number, --Number, cost in $ to fuse this recipe
requirement = func, --Optional function; fusion can only be carried out if this function returns `true`.
merged_stat = "stat", --Optional string, name of stat that contains "merge_stat"s above
aftermath = func, --Optional function; will be run after the fusion is complete.
}
```

> [!NOTE]
> Carried and merged stats _always_ go in the new Joker's `ability.extra` table now! You also no longer need to specify whether the component Jokers' abilities are in an `extra` table or not; this is now detected automatically.

> [!NOTE]
> The old `add_fusion` method is depreciated and kept only for compatibility; please switch to `register_fusion` at your earliest convenience! You should be able to use [this regex](https://regex101.com/r/msZHKS/2/substitution) to quickly swap everything in your codespace.

When fusing, calculation is called with the following context:
```lua
context = {
fusing_jokers = true, --Boolean to flag this context
fusion_components = {
[1] = Card, --first Joker to be fused away
[2] = Card, --next Joker to be fused away
--and so forth
},
fusion_result = Card --resulting Joker
}
```

Fusions can be discounted by indexing a number to the final joker's key in `G.GAME.fujo_fusion_discount` for a flat discount in dollars, or `G.GAME.fujo_fusion_discountpercent` for a percentage discount. Alternately, index at the `universal` key for a discount that applies to all fusions. (Decimals always round down; minimum $1 after all discounts.)

## 🎉 Credits <a name = "credits"></a>

- The mod was written by [**Itayfeder**](https://github.com/stars/itayfeder/lists/balatro-modding), with art created by [**Lyman**](https://github.com/spikeof2010)
- The original mod was written by [**Itayfeder**](https://github.com/stars/itayfeder/lists/balatro-modding), with art created by [**Lyman**](https://github.com/spikeof2010)
- [**elbe**](https://github.com/lshtech) maintained the mod for several months through breaking Steamodded changes, and added some features
- [**wingedcatgirl**](https://github.com/wingedcatgirl) (hi!) is the current mod maintainer
19 changes: 19 additions & 0 deletions mod/FusionJokers.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"id": "FusionJokers",
"name": "Fusion Jokers",
"display_name": "Fusion Jokers",
"author": ["itayfeder", "Lyman"],
"description": "Adds the ability to fuse jokers into special new jokers!",
"prefix": "fuse",
"main_file": "FusionJokers.lua",
"priority": -10000,
"badge_colour": "B26CBB",
"badge_text_colour": "FFFFFF",
"version": "1.2.2~BETA-20260715",
"dependencies": [
"Steamodded (>=1.0.0~BETA-0827a)",
],
"conflicts": [
"Talisman (<=2.0)",
],
}
Loading