#⚙・modding-general
1 messages · Page 31 of 1
hey im looking to download mods for balatro i this the correct channel?
local loc_colour_ref = loc_colour
function loc_colour(_c, _default)
loc_colour_ref(_c, _default) -- toss the return value, we don't need it
G.ARGS.LOC_COLOURS['your_key'] = YOUR_COLOUR
return G.ARGS.LOC_COLOURS[_c] or _default or G.C.UI.TEXT_DARK -- recalculate result
end
#1209506514763522108 has the good stuff
thank you
oh btw, found a slight bug of the engine in implementing a black deck rebalancing idea
looks to me like one of the cards you defined is missing some properties
if you start with hieroglyph, the -1 hand debuff goes away as soon as you select the first blind
Alright, I'll let you know if I need help lol
Something like "if self.back == Back(G.P_CENTERS.b_anaglyph) then" should work, using the anaglyph deck as an example, right? or do I have the variable or formatting wrong?
interesting
i've compensated for it by having the black deck secretly keep its innate -1 hand debuff
so it goes from 2 to 3 instead of from 3 to 4
but it is kinda funny to see
Oh yeah, what if i need to make multiple colors?
i know i set the cost to 3, not sure why it's 1 here? i dont have the voucher(s)
uh I thought I fixed that?
Huh. Not seeing which one. I fixed the "ERROR" name, that was a dumb mistake, but I can't figure out what r I'm missing
well I don't have the patience rn to look through everything
rookie mistake, I only fixed that for spectrals 💀
should have checked if tarots have that issue as well
just put all the keys/values you need in there
I think card.lua's self.back is probably the correct variable but I just need to figure out how its defined for each deck, Back(G.P_CENTERS.b_anaglyph) might be the wrong format but i'm not sure where to check for the right one.
hey ive downloaded the steammodded-main but where do i put it and what do i do with it (yes i would be laughing at me too)
How do I update steamodded?
me you both brother
like this?
and i just put this wherever in the code?
yeah
As far as I can tell, you go to Balatro on steam, go to properties, verify the integrity of its files, and then install the new update as if the old version doesn't exist.
i cant download anything anyway my computer wont let me because it says virus detected which is blocking my downloads.
There should be a way to tell your computer to download it anyways, or to let the download complete.
your right, i will watch a video on how to get around that
Ok epic. I’ll try it in a moment.
I’m gonna be making a fixed update for the Ultimate Collection
And yes, insane deck will be in it
i still can't find out what I did wrong
deck = {
type = 'Challenge Deck',
cards = {{s='D',r='2',},{s='D',r='3',},{s='D',r='4',},{s='D',r='5',},{s='D',r='6',e='m_lucky',},{s='D',r='A',e='m_stone',},{s='C',r='2',},{s='C',r='3',},{s='C',r='4',},{s='C',r='5',},{s='C',r='6',e='m_lucky',},{s='C',r='A',e='m_stone',},{s='H',r='2',},{s='H',r='3',},{s='H',r='4',},{s='H',r='5',},{s='H',r='6',e='m_lucky',},{s='H',r='A',e='m_stone',},{s='S',r='2',},{s='S',r='3',},{s='S',r='4',},{s='S',r='5',},{s='S',r='6',e='m_lucky',},{s='S',r='A',e='m_stone',},{{s='D',r='2',},{s='D',r='3',},{s='D',r='4',},{s='D',r='5',},{s='D',r='6',e='m_lucky',},{s='D',r='A',e='m_stone',},{s='C',r='2',},{s='C',r='3',},{s='C',r='4',},{s='C',r='5',},{s='C',r='6',e='m_lucky',},{s='C',r='A',e='m_stone',},{s='H',r='2',},{s='H',r='3',},{s='H',r='4',},{s='H',r='5',},{s='H',r='6',e='m_lucky',},{s='H',r='A',e='m_stone',},{s='S',r='2',},{s='S',r='3',},{s='S',r='4',},{s='S',r='5',},{s='S',r='6',e='m_lucky',},{s='S',r='A',e='m_stone',}, }
I've tried multiple ideas but can't seem to figure out what self.back is stored as...alternatively, is there any way to read what a stored variable is ingame?
G.GAME.selected_back should have the Back object for the current run, and G.GAME.selected_back_key for its internal name
Dumb question
Dumb answer
How do I make cards have specific numbers in a deck?
For example: all cards are aces
isnt it the id?
you would need to define every card in the deck
Not in a challenge though
oh for a deck?
yes
i still have yet to touch deck coding 
that all cards are considered aces?
or literally all cards are aces
literally
Like every card is "rank" of their respective suit, giving you 13 of that rank
i think there's an example mod that replaces it with all 4s
I'll have to look
this
mika also has some special decks, and that code might be more up to date for what you want
Is the last , needed?
I really just need to change the rank from the example deck, but it's gonna be a funny mod compared to Insane and extreme deck
Does anyone know why juice_up happens immediately but ease_dollars and card_eval_status_text are delayed?
if context.end_of_round and not context.individual and not context.repetition then
for _, v in ipairs(G.jokers.cards) do
local dollars = self.ability.extra.dollars * v.config.center.rarity
ease_dollars(dollars)
card_eval_status_text(v, 'extra', nil, nil, nil, {
message = localize('$') .. dollars,
dollars = dollars,
colour = G.C.MONEY
})
if v ~= self then
v:juice_up(0.5, 0.5)
end
self:juice_up(0.5, 0.5)
end
end
Welp the deck crashed, lemme try again
Nevermind, I forgot both of the delayed functions have an 'instant' parameter as well
broken
imagine cloud 9 when youre playing that deck upside down
sorry that was a shit joke ill excuse myself
man that joke six
i was trying to figure out a way of having an animated joker sprite using an atlas but
- i dont know if you could really swap the atlas constantly on a frame-dependant basis
- im not sure where i'd call a function that tells an animated joker to move to the next frame that runs inside the game's processes
just write a shader, it’s not that hard /j
Thanks! Trying this led me to an interesting scenario: using "if G.GAME.selected_back_key == b_anaglyph" results in ALL decks having shaders applied on the deck select screen, and also NO decks (including analgyph) having shaders mid-run. No idea why?
Oh this is funny
Sorry for the phone image. This Whiteboard joker is from More Fluff, but I'm having a hard time actually knowing if and how it's working. Anyone know how exactly it works?
based
i think there is a mod that does that
oh yeah!!! there is one
made by jellymod person then added to jellymod later
wait the atlas part i have no clue about
THe other challenge decks have that comma
is there any list of all the {C:______} color things
I had an idea for a Joker/Voucher and I'd like to hear how feasible it is with our current understanding of Steamodded/Feder
TL;DR, it would allow you to, instead of using a Tarot/Spectral/Planet from any given Booster Pack, 'Pocket' it instead, adding it to your consumable slots
But I don't know about adding the alternative button to do so
I also had the thought that the (upgraded) voucher might let you pocket actual playing cards from standard boosters and sell them
adding it to consumable slots has already been figured out so the button is the only part that could be weird
i hope that someday i'll be able to add the button to my "joker fusions" mod
allowing you to manually fuse them, under the sell option
I don't see any differences in the format of my Challenge and the others in the challenges.lua but it still won't work...
Yo, quick question, do the latest Steamodded versions support Lua modules? (ie. using require "myModModule.lua" )
hi, I was wondering, does having mods enabled affect achievements and unlocks?
steamodded turns off achievements but they can be turned back on, unlocks progress as normal and don't revert when mods are removed
hmm ok
I was looking to start with some simple ones, first one would probably be faster stakes unlocks
but maybe it would be better to just do that with a save editor
why?
I have gold stake on one deck but the rest are around red
and it just takes a while to get to the higher stakes across all decks
I could just put in the time but I was wondering if I want to just jump forward a little bit and skip some of the easier stakes
i like how faster stakes does it so i do recommend that if you're not struggling at all in lower stakes, i didn't use it but they were really as easy as i thought
yeah so would you reccomend turning it on, getting to gold on one more stake and then turning it off again?
I'd like to try divvy's preview too but not if it will block the last few unlocks and achievements I need
oh yeah I forgot about that one
having steamodded installed at all disables achievements even without mods on pretty sure
Try out Lovely for that
You can probably do that along with Steamodded to get module loading working
right so it might be worth not trying them until I have the next few unlocks
I just need canio to appear to get the collection achievement and I don't want it not unlocking if I have mods on when it appears
nah unlocks are normal
but then I wonder once I get it could I turn on achievements but then uninstall them all and steammodded before doing the last gold stake for example
but the achievement might not trigger?
it will if you have achievement enabler
oh I thought you said having steammodded installed overrides it
oh well I could try them out sooner then I suppose!
nono sorry miscommunication
I accidentally gave myself the joker unlock for finishing a game in 12 or less rounds

You can get the achievement to trigger later if you ever verify your game files to update/uninstall steamodded.
verify through steam?
i did all my unlocks and stakes legit 👍 except i think some of my stickers are messed up so i ignore them entirely
well divvy's preview looks really cool and useful, I'd like to have it on while I try for the stakes
and of course the faster unlocks to get there a bit quicker
If you right click on a game in steam, and go to properties, you can find an option to Verify the Integrity of Game Files.
(Great for removing stuff that isn't vanilla)
right cool, didn't know that would retrigger achievements
@cedar patio also i highly recommend this https://discord.com/channels/1116389027176787968/1220667431199047711
ah cool, I've seen that, I'll give it a go when I try the others out
was looking to try playing through steam link on my odin lite, this could make it better
Hm... seems Balamod could make decks more easily, but Steamodded is more used as the default...
Well, I thought so too, but I broke SOMETHING
I tried making a challenge
It crashes
so if I do this it will uninstall all the mods?
It will uninstall the modloader, I think. The mods remain but won't be loaded.
cool, that could be useful
Catra? Where's Adora?
Giving Hordak a hard time.
Fair. 😛
Average modded Balatro hand tbh
I got unlucky on my final discard and didn't get a diamond that would've gave me the win and don't want to redo this run. How can I modify the lua file to lower the crimson heart requirement?
Modifying the mult for crimson heart doesn't have an effect on how many chips I need
thats a pretty funny request
i think once you're in a round it doesnt load from the prototype anymore
I don't have a way to mod yet but is it easy or hard to mod balatro? As a beginner.
there's not a Lot of documentation yet so it depends on how comfortable you are with reading source code
either of the game itself or of other mods
No amazingly comfortable but my brother might know how to a bit more
lua formatting isnt too hard to follow as a First Language; at least it's not C lol
I took one coding class in high school but didn't retain much
i can ride a bicycle but forgot all of what little knowledge i had of coding
Maybe I'll look into modding when I get a pc down the line
maybe by then someone will have made better docs lol
There's actually a decent chance that you can modify the save file for this
How do I have to use steammodded
ive never modded anything before but i feel like i'm off to a great start here
easiest method is with lovely https://discord.com/channels/1116389027176787968/1217867725532041369
ummm.... why is it 6?
Why not?
less of a why., more of a how
Where do I find this file? Wdym by open the zip archive?
this is dwmapi.dll
has anyone come up with a sort of save state mod so you can try different pathways in each seed?
what would a joker that gives +mult for each purchased voucher be called
coupon junkie
Probably using the Hand of Six mod.
hand of 6?
Thank you!
Was trying to figure out how to link to that.
Been messing with Hand of 6 for a bit, actually. Makes the game substantially easier, I'd say.
Still very fun, though.
Didn't someone make a Joker of that?
Yup.
jellymod iirc.
does jellymod add a joker that increaces played card count?
I think so, but this looks like Hand of Six.
Yeah, I remember seeing that joker in Jellymod.
Never got it because legendary, but it was in the collection.
what do you guys think is the best modded joker right now? I'm curious.
Does modding the game turn off your ability to get steam achievements?
yes but there's a mod to reenable them for steamodded
Ah, cool. I will need to look for that then
Double Vision is a run winner. (Makes all cards count as twos)
That's the one I'd argue is strongest, though certainly not for endless.
Dagonet might also be a contender.
the best modded joker is my own[citation needed][reference not found]
hee hee hoo hoo
I personally also enjoy special edition joker.
i also assume they mean actually released content, of which my mod is not yet
hee hee hoo hoo
oh that'd be fun with this one of mine
Unfortunately it's a Jellymod Joker.
mm
with the stuff that it does i can't see it becoming compatible with other mods for a while
I think most of what it actually does is possible to do without such severe compatability issues.
Not sure on the Tarots, though.
there's a tarot api now i think
but it still overwrites the spritesheet
there's no enhancement api rn though
@civic grail i got it working and in game
Sickk
Might have to reword
Balatro uses “round” instead of “turn”
Gains $7 of sell value and 1 in 4 chance this is destroyed at the end of round.
i think they mean 'gains $7 of sell value and 1 in 4 chance to be destroyed after each played hand'
that's how i interpereted it
nope, grassy is right
oh ok
i got pretty lucky i played though an ante an a half before it "broke"
gros egg
"Gains {C:attention}$3{} of {C:attention}sell value{}",
"at end of round. {C:green}#1# in 4{} chance to",
"{C:mult}expire{} at end of round"
}```
define the local variable as your probabilities so it updates with oops! all 6s
(you can also remove the mult color on "expire", thats just personal preference, albeit not vanilla)
i keep my eggs in all my baskets
To play a 3 pair obviously
Okay, Dagonet is probably the most busted Joker that isn't Perkeo with the ghost deck.
Okay, what if there was a Rare/Legendary Joker that allowed you to put Booster Pack Tarot/Celestial/Spectral cards into your consumable slots?
Dunno.
You can't normally get black hole in the consumable area, so I haven't a clue whether it works.
it probably doesn't
I think it's technically a spectral.
Hm.
Yeah, nothing really breaks by getting Booster consumables into consumable slots, other than a possible Perkeo + Soul.
you just get jimbos after the 5 legendaries
huh.
It'd still be REALLY good for getting other systems online, like Observatory, or saving certain Tarots/Spectrals for the PERFECT time.
Fair enough.
I'd say rare?
Mods.
Debug because I wanted to mess with a stupid lucky card build, Hand of Six becuase it's funny, and Mika's Jokers because I had it enabled already.
Started myself with 5 jokers that were good for building/scaling a deck up to ante 8, traded the worst few out for Dagonet and a few need things from the shop.
Final build was Flush Six of Lucky Polychrome Red Seal 5 of Spades...provided I actually could manage to get 6 of them in my hand.
Acquired a ton of negatives from a mika joker that gives you a random negative if 4 lucky cards activate. Had enough retriggers to almost guarantee that once I got enough lucky cards. (Dagonet is not synergistic with What are the Odds? Dagonet turns it from 4 to 8 required.)
Mika's adds a joker that retriggers lucky cards, by the way.
Also had Hack + Blueprint at the very end.
Died to only drawing 4 of my 6 necessary 5s.
when i have multiple mods on that add lines on the settings menu (e.g. Color Selector, More Speeds, etc), the game crashes when Settings are selected. I'm assuming because the menu is larger than the window itself. Is there a mod to work around this, like a scrollbar for the menu?
depending on the things modifying the ui, they might just have conflicting code
to my knowledge i dont think we have a uniform way to modify the ui yet
If you don't show the error we won't be able to help you a lot
what is color selector, by the way? i dont think ive seen that
where can I find crash reports to see the error thrown?
you'll see it usually directly in balatro itself
we dont have crash logs (that print into a .txt), just the error log showed directly in game
that's what I suspected, but since he asked for an error, I questioned it. there is no error log in this particular. it just crashes and hard exits.
particular case*
ah, yeah fair nuff
yeah hard crashes with no error log means something is really fundamentally screwed
i am probably going to chalk it up to the ui breaking from this + other things that touch the ui code
on another note
you could try removing the mods one by one to see if a particular one is causing the crash
thats really cute
stop stealing the cute ideas i need to finish rewriting my mod

that's what I've been trying. it seems to be using More Speeds and Colour Selector in conjunction. Which make sense, they both try appending something to the second position in the menu. I might try tweaking them to see if I can get them to get along.
i wish you best of luck 🫡
🫡
I can probably edit more speed, it was a fast made dirty mod for a request
only if a j_slug atlas exists actually, if not you can still provide your own
man, this bug is so frustrating
applying hieroglyph anywhere else in the run
updates the hand count properly
but not at the start of the run!
Hello, and how easy might it be to add a button / key to invert the selection in the hand. Like, I've got my good hand of cards selected and ready to play. But I decide I want to discard the rest instead. Click 'invert', click 'discard' instead of 'click every card' then discard
this mod has that functionality:
https://github.com/Agoraaa/FlushHotkeys
Grrrreat
there we go, i fixed it!
is it possible to rollback or edit a save to the previous blind or ante? I absent mindedly softlocked my current run and forgot to reroll the boss blind.
balatro with rollback....
well
lads
my monitor is Fucked
i have the aseprite load buttons burned into the monitor
i wish i was joking
someone should make a black seal spectral card for the mod
you can always do it yourself by learning how to code 🙂
be the change you want to see
this is why you use windowed mode
i do 😭😭😭
certified aseprite gamer
I'm current running with 8 suits in the game (4 vanilla + moons, stars, ink and color
It makes getting flushes a lot harder, and spectrums a lot easier.
I'm wondering if I should try anything to balance out the multipliers. maybe flushes should be increased?
is that the gta font 😭
haha yes, sorry if you don't like it
no i just find it very amusing is all
If you want it let me know. I made mine custom
i dont think flushes need to be increased honestly
but if you wanted to do it maybe something like making flush match a full house
yeah that would be reasonable. I'd have to figure out how to mod it first
Is the game over text replaced by "WASTED" ?
not a bad idea. made I can change the text somehow
Love the art so much, what the space joker be doing? (At 2,2)
im just doing a rewrite of my mod ^^
all my descriptions are here, if i released them
Oh neat
Sir Joker has 2 "or" next to each other in the desc
nice catch
also
it is done
all of them reimplemented
(except mind mage because im going to rework it)

With all the modded jokers existing Im scared one day I make a 1:1 copy of an existing one
dont be
Feels bad for the person who did it first
thats why you write your mods with a config
Yea I should add a config too
👍
i already got over my grief when i remade a joker from multijokers on accident
Need a database of all the custom jokers
base game needs to add a joker that is basically already existing joker with very few behavior changes and different art
and ta-da
all the modded duplicate issues are no longer issues
yeah, how do i generate a copy of a custom joker i've made with SMODS.Joker:new()?
like, just spawning it in the run
G.E_MANAGER:add_event(Event({
func = function()
local chosen_joker = YOURJOKERNAME
local card = create_card('Joker', G.jokers, nil, nil, nil, nil, chosen_joker, nil)
card:add_to_deck()
G.jokers:emplace(card)
G.GAME.joker_buffer = 0
return true
end})) ```
wait
yeah, that just seems to be creating an error message when i try looking for it
gonna be trying to look through SMODS.Jokers instead of G.jokers
probably will get me what i need
lets gooooo
sending energy 
you could also try getting the slug
its been rewritten 🫡
remeber the api adds j_ before the slug
that's also why my jokers have mf_ in the slug
thank god for quinton uploading a 40 hour video about beverly hillbillies
to avoid clashes
mf...
i should also prefix my crads but lazy.....
yeah, i have the slug
how the hell you got that image ready
its 7 in the morning and i havent slept yet
i use dream magic while awake you see

took a little bit but i made it
made it the void
the fooooooont
wa
i can fix it i tried looking for the right font closest i found
i built that "font" i linked to from the Tarots.png atlas. it'll be the most consistent you can be, barring the handful of letters i had to custom make
okay thank you how am i suppoosed to apply it tho
in an image editor
so make a file for each letter?
what
nvm nvm i see now
greetings, who of you use VScode to mod in Lua?
i do
I do too
i do as well
i do
I do
i do
what if tho
Fixed
all right, anyone have a clue why my joker sprites aren't working properly anymore?
Excuse me, but does anyone know good practice of adding a playing card to the deck?
I'm struggling to update the state of the deck.
what extensions do you use? LuaHelper? cause it doesnt help me too much tbh
do you not register your jokers as unlocked and discovered?
i only have the "Lua" extension
which of them hahahaha
sumneko
ok ill try it too then
thanks, this seems to work better than the one i was using
ace up the sleeve. idk what it does
they're unlocked and discovered now, but now i have the problem of them drawing vanilla sprites, instead of my custom ones
do you use an atlas or single sprites? I had an typo in my atlas yesterday that caused the same problem
i use an atlas, and here is my code (i use notepad++)
someone help me install balamodd
I installed the windows .exe version, now idk what to do, i tried to run "balamod-v0.1.11-windows.exe -a" in my command prompt but i got no clue what im doing
what should happen, is my array of "fusedJokers" variables (which i'm going to fuse with my "jokerLocalization" array at some point) should create the joker, then initialize it
and then the atlas should register at the end
@stable crag Hi, which step am i missing?
you have to specify the atlas in your joker, I think
[...]
v.rarity, v.cost, true, true, true, true, nil, "j_fused", nil
[...]
this is documented on the steamodded wiki
can anyone help?
"balamod-v0.1.11-windows.exe -a
'balamod-v0.1.11-windows.exe' is not recognized as an internal or external command,
operable program or batch file."
ive ran windows balamod .exe
there's a wiki?
move the exe to downloads and then type
cd downloads
balamod-v0.1.11-windows.exe -a
in cmd
https://github.com/Steamopollys/Steamodded/wiki
more or less
go to the github for steamodded
and theres a wiki
ye
is there a reason why you set the pos so complicated?
im guessing its just an automatic thing
makes sense
i have the same 10 cards per row format of the default joker sheet
ugh, now that i'm done with that, it's time to pass out
Do any of the mod loaders not freak out chrome or windows?
Steammodded gets blocked in chrome and then I use edge to download it and then Windows blocks it
I think lovely works when installing steamodded without triggering the anti virus
https://discord.com/channels/1116389027176787968/1217867725532041369
balamod doesnt aggro my firewall
Magic, thanks guys. Is there a recommended one to use at the moment? Not sure if it matters but all I'm interested in currently is the mod that previews the score before you play
Hi guys. I had an idea I think would be neat but I don't have the know how to do it or if it's even feasible. I just think it'd be cool and figured this may be a good place to spit it out. I think it'd be super fun to have joker stickers for the challenges like beating the omelet challenge adds an egg sticker to the joker and what not. I'm a big fan of the stickers and have just had that in my head for a little bit. Ty thx sorry for bothering u kisskiss
iirc divvy's score preview uses steamodded
Ah so it does, thanks!
So after getting around all the blocks I decided to have a look on virus total
VirusTotal
I don't think I've ever seen anything innocent flag up this many different things
To be fair I haven't looked up much of this stuff
Am I being overly cautious? Would it be impossible to load divvy's score preview without Steammodded?
you can use lovely to install steamodded to load up the score preview
If that would have been a virus, it would have been deleted a long time ago
You can scroll a little bit in the steamodded channel, this has been discussed a million times
it's because it injects into the game's exe in the same way a virus would
but it only edits the game so it's safe
Ah okay, thanks for your help guys!
does anyone here know how to get rid of the fps counter with debug menu enabled?
I just realized
There is no voice channel on this server
I really wanted to do a modding live today
Is there any way to access the joker description of a specific joker inside G.jokers.cards?
The joker’s description? Do you want to change a field inside of it?
If so, you need to use a UI method (I think it’s something UI_ability) to add a new description
No, I want to check if a Joker gives mult or chips, and since the config is inconsistent (sometimes just called extra instead of mult or chips) I want to check the description for those keywords.
Or at least a new dynamic element of the description (inside #1#)
I'm just removing them with lovely, not sure about other ways
[[patches]]
[patches.pattern]
target = "game.lua"
pattern = '''love.graphics.print("Current FPS: "..fps, 10, 10)'''
position = "at"
payload = ""
match_indent = true
overwrite = true
Oh I see. In that case, you can get to the localization table (it’s accessed in the registers, I don’t remember what it is rn), and access the joker’s “text” segment using its table is
Ah okay, I'll look into that. Thank you!
Always happy to help!
Hey guys, are the blind sizes calculated at the start of the run or calculated "as you go"?
I think blinds are chosen at the start of an ante, and it is calculated then
There’s a specific formula as to how it’s calculated. Each blind has a mult value which multiplies the calculated number for that round
each blind has a multiplier and its used to calculate the size depending on the ante right?
Yup!
That’s how the wall works, it has a larger multiplier
you think i'd be possible to change the blind size during a round? i might have an idea 🫣
does anyone know what version of lua the love engine balatro was made in runs?
It is possible (I’m doing it for my mod XD)
Can't you check if extra exists and check if it contains chips mult or Xmult?
5.1
what are u doing? i might cancel if we were to make the same thing xD
tytyyty
It’s for a new type of consumable, an alchemical card. You can check it out in #1221916334372290620
No, for example bull is defined like this, there's no mention of chips anywhere:
j_bull= {order = 93, unlocked = true, discovered = false, blueprint_compat = true, eternal_compat = true, rarity = 2, cost = 6, name = "Bull",set = "Joker", config = {extra = 2}, pos = {x=7,y=14}},
I could just hardcode a list of Jokers that give chips and mult, but I'm looking for a more flexible solution
looks sick, i might check out your code 🫣
oh
i was going to make some jokers on the same idea
had to add manifest to it but this did the trick after that, thank you very much for your help :)
do blinds automatically generate?
wdym
yeah they should
another ultrakill joker
hm I think that's good for a start (started run on absolute deck and removed it)
time to actually implement this lmao
it is slightly too confusing imo
Hello, does anyone know if there are some instructions to make mods? I wanted to try making one but wiki on steamodded github page isn't that clear for me.
I'd prefer "when Boss Blind is defeated"
yeah i changed it to that
yeah the wiki is still incomplete. Sorry about that, but the game in its full release state (and the modding community alongside it) is still fairly new
for starters, you'll want to have a look at the game's code by extracting the executable with 7-zip or similar
another useful resource would be other mods
this solution does allow one to get an extra discard on top of any deck effect that happens at the start of the run, but I think that's acceptable
I tried analyzing one but I have no idea where the effects of jokers are written, like a joker is created, its visuals and texts are set, but can't see the effects
which mod?
I looked at JellyMod
If a mod uses the Steamodded joker API, the Joker effect will be in a function called SMODS.Jokers.j_joker.calculate()
where j_joker is whatever the slug (key) of the joker is
that's not a great starting point, it's not fully up to date with the newest loader version
also the way it does things is incompatible with a bunch of other mods
What mod should I check then?
#1215775159638818826 is a good reference point for jokers last I checked
how would i modify the size of a blind as it's being set?
check better balatro wink wink
oh of course
I think I can't understand such complicated stuff (at least it is for me, I've never used lua or modded games) without someone explaining it to me, guess I'll wait for some good instructions
If you have any specific questions, I'm here to help
I have no specific questions, sorry
Hey. Does anybody here know how i can download mods from my steam deck?
is there a known way to add a line to a card's loc_txt if a condition is met?
Doesn't Loyalty Card's text changes to "Active"?
I think the number of lines is fixed
it probably also isn't disregarded if left empty, but that might be the closest you can get without modifications to parsing rules
I love the tooltips,
i can put even more text on my cards now
wait how do you add a new info box
SMODS.Joker.j_slug.tooltip function
ic
you can probably shorten it by a lot
oh I already cut like 50% already
yep
"Cosmic-Tokens improve Cosmic Jokers by the amount listed in parentheses."
and "5% (+1%)"
+1% chance per Cosmic-Token to change scored card into a random Enhanced card (currently 5%)
effect can also be shortened to "5% chance to enhance scored cards"
hm right
oh yea lol
throwing a few ideas to not make this mod turn into yugioh synchro summon shit
thats exactly what i want. So much text that you need scroll bars
oh also
god
random Enhanced card makes me think of the effect of spectrals like incantation
like, a random card that has a random enhancement
another argument for rewording
much better, I think
Gains 1 Cosmic-Token per 6 scored?
this seems to happen when you open options>settings
Introducing: Antimony!
https://gyazo.com/56556eeaa9d7d5cffa061f425ff7aa7e.mp4
nice
ooh
Does it last until the end of the end of round or until the next blind?
Antimony Cryptid strats for e100,000
use the negatives in shop and get back that many perkeos for the roundhmm 🤔
OpenGL is used for the game right?
hm, might have to do with the added mod badge UI setting setting
is it obvious how the repetition scaling works, or do I need to add an example into the tooltip?
dont mind the typo
Is "Repeat" just retriggering?
yes
uncapitalized key words look odd tho 😐
so do capitalized verbs :I
hey guys is this Legendary Joker too overpowered?
I posted it to the Balatro reddit, but everyone seems to think its way too strong, even compared with other Jokers
Does anyone know why my legendary joker is not showing up, but only the background 🤔
-- Create Joker
local cicero = {
loc = {
name = "Cicero",
text = {
"Jokers that do not",
"give {C:mult}Mult{}, {C:chips}Chips{} or",
"{C:attention}retriggers{} will be",
"{C:dark_edition}negative{} in the shop"
}
},
ability_name = "MMC Cicero",
slug = "mmc_cicero",
ability = {},
rarity = 4,
cost = 20,
unlocked = true,
discovered = true,
blueprint_compat = false,
eternal_compat = true,
soul_pos = { x = 1, y = 0 }
}
-- Initialize Joker
init_joker(cicero)
My init_joker function as well
local function init_joker(joker, no_sprite)
no_sprite = no_sprite or false
local new_joker = SMODS.Joker:new(
joker.ability_name,
joker.slug,
joker.ability,
{ x = 0, y = 0 },
joker.loc,
joker.rarity,
joker.cost,
joker.unlocked,
joker.discovered,
joker.blueprint_compat,
joker.eternal_compat,
joker.atlas,
joker.soul_pos
)
new_joker:register()
if not no_sprite then
local sprite = SMODS.Sprite:new(
new_joker.slug,
SMODS.findModByID("MikasMods").path,
new_joker.slug .. ".png",
71,
95,
"asset_atli"
)
sprite:register()
end
end
Isnt there more arguments before soul_pos
I remember effect arg before it
and something else
let me check
oh god i dont wanna imagine this on plasma deck
stonks
ummm +200 thousan chips and mult
fishing though a deck isn't hard and thats an insta-win long into endless
Oh, effect is missing from the parameter section in the wiki so I missed that one. Let me see if that fixes it
hmm I guess I thought fishing was much harder than it actually was
Oh yeah I already told Aure about that
it was slight overlook but at least it is mentioned in the code snippet itself
yeah I really should add that
effect, then atlas, then soul_pos
so actually two more arguments, not one
So like this?
local new_joker = SMODS.Joker:new(
joker.ability_name,
joker.slug,
joker.ability,
{ x = 0, y = 0 },
joker.loc,
joker.rarity,
joker.cost,
joker.unlocked,
joker.discovered,
joker.blueprint_compat,
joker.eternal_compat,
joker.effect,
joker.atlas,
joker.soul_pos
)
new_joker:register()
I deleted the post so that I could rebalance the cards, could you guys give me some ideas on what the Joker should do? @magic sandal @hard grove?
I'm still missing something, now it's showing up as whatever the joker with the green hair next to jimbo is called
checks out
Ideally I want this joker to create an exclusive Emperor Joker, but what could a more balanced version of my idea look like?
hmmm
I asked Lyman how he got it working and sent this, maybe it will help you #⚙・modding-general message
isn't this just play high card with emperor get 48,400,000,000 chips
funny how the code tells thanks to Mika at the start
By itself it makes a score of 48,400,000,000, which is easily in the Post 8 antes
I saw that too, but it's exactly the same now that I added effect as well
ok so it seems like I overestimated the weakness of only having one powerful card in the deck
Huh
this soul_pos code feels like it is passed from generation to generation
Follow up: #⚙・modding-general message
I'm trying to come up with better balanced versions of my idea now
If it's using vanilla sprites, it's probably a problem with the atlas
How is this Legendary Joker? Is it more balanced than before?
probably still busted
for Emperor it should be “Retrigger a non-emperor joker for every Emperor Joker”
or else it is exponential retriggers the more emperors owned
ok thank you
But how do I fix that 🤔
wait hmm
what do you mean I can't thin out my deck by literally deleting ranks from the game
perfectly normal straight btw
now delete all base ranks 🤪
*instantly loses
and then suits
Not on my pc atm, but can you show me the sprite that you want to use?
no way, dialogue emotions in my balatro???
How is this? @woeful finch
more clear, but i think the problem of emperor joker’s exponential retrigger scaling might be a problem
cuz if i have 3 emperors that’s 3x3 9 triggers i think
?
Emperors cannot trigger other emperors though, so it would be three other jokers only, no?
but each emperor has the “retrigger ability”
oh, I'm an idiot
I forgot about that
the retrigger ability would probably have to be on dongfang to solve this
alright let me do that
wait so you get chaos the clown instead of the needed sprite?
Yea
I felt like I remember lyman trying to fix this
If I remove the soul_pos = {x=1, y=0} it goes back to the proper background though
this problem didn't occur to me tho when I was doing this
Can you try to set atlas = slug manually? I think it is like that by default, and I can't find another thing that could cause this
Like this?
looks better
do you suggest any other changes?
In sprite or in joker?
what if emperor gave 100 chips and 100 mult per legendary joker in play?
Joker
very niche though that’s a problem
Ideally I want Dongfang to have some special interaction with the Emperor Joker, so any ideas around that would be cool.
220 is just a reference to something Dongfang himself did, but its not necessary.
I mean DongFang could retrigger all Emporers
Like this?
-- Create Joker
local cicero = {
loc = {
name = "Cicero",
text = {
"Jokers that do not",
"give {C:mult}Mult{}, {C:chips}Chips{} or",
"{C:attention}retriggers{} will be",
"{C:dark_edition}negative{} in the shop"
}
},
ability_name = "MMC Cicero",
slug = "mmc_cicero",
ability = {},
rarity = 4,
cost = 20,
unlocked = true,
discovered = true,
blueprint_compat = false,
eternal_compat = true,
soul_pos = { x = 1, y = 0 }
}
-- Initialize Joker
local new_joker = SMODS.Joker:new(
cicero.ability_name,
cicero.slug,
cicero.ability,
{ x = 0, y = 0 },
cicero.loc,
cicero.rarity,
cicero.cost,
cicero.unlocked,
cicero.discovered,
cicero.blueprint_compat,
cicero.eternal_compat,
cicero.effect,
'j_'..cicero.slug, -- Set atlas
cicero.soul_pos
)
new_joker:register()
if not no_sprite then
local sprite = SMODS.Sprite:new(
new_joker.slug,
SMODS.findModByID("MikasMods").path,
new_joker.slug .. ".png",
71,
95,
"asset_atli"
)
sprite:register()
end
that's a good start, but what do the Emperors actually do then?
I mean they are kings
baron exists
yeah I don't want to retread on Baron's ground with 1.5x for Kings. I also need to make sure that this is better than Baron, because that just a Rare card apparently.
Looks good, I guess. Not sure if it's j_j_... in the end tho
interesting idea. So like, +1 Joker slot and x1 for every Joker, thus allowing infinite scaling in the very long run?
that's just evil stencil
anti synergy with stencil hmm
Still not working 👎
I think I might just wait for lyman to wake up lol
You could make Emperor common since they need Dongfang to spawn, similar to why Cavendish is common
do we have other ideas then? I'd like to brainstorm somethiong
well look, the deck preview also adapts to ranks being removed now
fair, that's a good start.
wait suggest ranks being gone if you have 0
looks very clean
is there a way to change the Highest Money stat in the profile.jkr? was messing around with a save editor trying to give myself some extra discards to fix a mistake I made, only to forget to change the default money value that it had
jevil moment
wait money is a good idea, Emperors are rich
what does this mean?
let me draft something
I'm currently trying to rebalance a legendary Joker because it was too strong. If you want, you could help us come up with ideas.
You reminded me that money exists in this game, so I'm trying to see if I can whip up something about money
lmao
sorry for the confusion
Not sure what I'm doing wrong or if it's another context issue
you could use this save editor https://balatro.shorty.systems/
works, thanks!
If I replace 'j_midas_joker' with 'nil' it works fine, not sure what I'm supposed to use, Mika uses the joker slug as well
try sendDebugMessage(inspect(context)) to check for context issues
in unrelated news, I can't explain to myself why no one has caught this dumb mistake
has no one been playing with added ranks?
Not me
anyway enough of that
Doesn't seem to be a context issue?
There's some issue with the debug console that will be resolved in the next steamodded release. Sorry abt that. What python version do you use ? (also it does not responds to your question, sorry abt that)
3.11.9
thanks
Alright, I made a request for new ideas for my legendary Joker on the Balatro reddit. If anyone has any other ideas for my Joker, please tell me.
https://www.reddit.com/r/balatro/comments/1bvycjk/i_made_a_new_legendary_joker_but_it_was_way_too/
idk where there the endoflog strings came from, what version of steamodded do you use ? is the debug console up to date ? I just tested the console with python 3.11.9 and it does not show the "endoflog" strings
Here are the ideas I came up with, so far, for reference/inspiration:
0.9.5, tho I haven't download the lastest tk-debug.py file...
download the latest debug console. it will be better
how would i reference top-up tag to ban it for a custom challenge? i was looking in the tag lua and couldnt find it's name
Oh wow it does look better
This is what I get
there's 2 jokers I don't recognize (that may come from mods, or I don't remember all default jokers), the Lusty Joker and the Seeing Double joker, do you know where those jokers come from ?
yes that might be that, you seems to by at the end of a round, so that seems plausible
anyways, I'm going to do something else than my legendary for a bit
How is this Joker?
I have a new idea for "Building Jokers" that disable Jokers next to them in exchange for cool buffs and boons.
interesting concept
thamk you
Can config.center.soul_pos (.x/.y) be used to change soul_pos at any moment?
I found mentions of it yet can't get it to work
perharps it's not working the same way as config.center.pos
good "morning" chat
5:33pm is morning because i just woke up

Ga Lyman
you might need to call set_sprites again, but that should be no different from regular pos
how do you design the ideas for Jokers? I've been having issues with coming up with a legendary one and I wanted to learn some tips for the future.
lol
Uhm idk what I did but now it works fine?
i try to make them fit with the original 5. i tend to try to think of really powerful effects that would really only make sense as a one off, and completely makes me ask "How do I adjust my build for this?" when i pick it up, like canio or triboulet does
Got it, thank you for the help. I've been trying to create a Dongfang Joker whose main gimmick revolved around an Emperor joker that was exclusive to him, but I've been drawing blanks so far. Do you have any ideas by chance? If you don't that's okay, since I'm focusing on other things right now and you did a lot for me already.
Is there a way to access all shop jokers from a joker.calculate function?
Maybe G.shop_jokers.cards?
I'll try that, thank you 🫡
I'm afraid that's not a good enough reason to thank me
try this
xd
ooh
my boy
he winks thats awesome.
hmmmm.... let me try to think of something. i saw the original and i like the idea of doing things with the emporer joker so ill try to work with that
a lot of possible emotions actually
my evil suit deletion plan worked!
🤯 🫡
rightmost is experiencing something
Jimbo has seen some shit
Decided to keep the placeholder art in case people wants to play with it for some reason
Definitly not lore
hmmm possible, possible
you had me working to get everything nice and smooth for ranks as well
totally a straight btw
nothing weird about that
fgbsjdfbf you keep beating me to the punch for using the soul_pos to psuedo-animate it

😈
for future:
unlike center.pos, you'll also need to call set_sprites to make it work
Why not make a dictionnary?
- lazy
- not a real programmer (fake)
you can't call not being lazy lazy
My soul is at pos.y = 50000 rn
programming is all about being lazy
I just write stuff until it works
Me making a function when 2 things repeat (I'll never use it again)
lmfao
okay now a question
okay now an answer
if something would remove a card from the deck, most of the time it'll be start_dissolve or is there a function for card removal?
now that I think about it, probably should've checked if start_dissolve calls something else before asking the question
There's Card:remove() and start_dissolve() calls it iirc
start_dissolve calls remove, yeah
base game usually uses shatter for glass cards instead
yeah
np
hi, does anyone know whether the bug in steamodded where it bricks your profile if you have a saved run on a modded deck and you turn the mod off has been fixed?
gotta inject into remove to check if deck has no exotic suits, and remove them if there's none
i'm coming across a similar issue with my stakes mod and want to know how they dealt with it, bc i've run out of ideas
Newest Steamodded update fixes this yea
do you know any details of how they did it?
it's a pretty simple fix, the game itself has a fallback and sets that somewhere
So I just had to use that property instead of what's passed in
as always it's only bug free until someone finds the next bug
but this should be the most stable we've had in a while
Surely someone isn't gonna miss a bug like that voucher crash (clueless)
that one was fairly obvious once I read into the function I was modifying
first try
Okay Weird question: Is there a way for me to have it so that whenever I would Gain money, I don't and instead have something else happen?
I think you can inject and simply not call the original function?
Would injecting break the function if i uninstall though?
🤷♂️
And would this work for a joker effect
If you want it to affect all you can append the ease_dollars function
Can't remember if this also works for stopping money from payout
I mean I could just have it convoluted as like
"If you gain money, lose that amount and store the amount in a hidden ID"
I mean you could make a bank out of it
I'm helping with a project
Basically my idea for programming it is this (in pseudo code)
if (Moneygain & Joker){
Money = Money - MoneyGain
StoredValue = MoneyGain
Joker xmult = +(0.2x MoneyGain)
StoredValue = 0
}
Money = Money - MoneyGain is so that the amount you have before gaining the money and the money after the effect are the same.
That amount is stored temporarily so that it can become the multipler for xMult, and then refreshed so that you don't accidentally add the old stored mult (though it could be useless to put stored value back to 0)
prefix the ease_money function
though ease_money doesn't tell you where the source of money came from methinks
I don't think the source of the case comes from, as long as this works when the joker's out and works as it did before when the joker's gone
if you're doing to any money gain then yeah prefix the function
though playing without any money sucks major ass
Well you are gaining xmult
and if you want cash, just sell the joker
simple as that
oooh, that's nice
i just successfully bypassed the normal joker limit when you're specifically buying a joker that will immediately fuse with one you already have.
in short, you don't have to sell to fuse if you're full slots
Fuse?
my joker fusion mod
I'm trying to find where all the sfx are located but I literally have no idea where they'd be
for base balatro
under resources/sounds
where is the initial deck generated?
there's these lines in start_run
and these lines at the end of Card:init
but like where tare the cards initialized
Could somebody give me some help with using Steamodded + Lovely Injector? I'm not entirely sure how the combination works. I promise I'm not stupid, I looked everywhere for a detailed guide and didn't find one.
Things worked fine before but I updated to the latest version of Steamodded and now the game crashes unless I remove all my mods.
same error im getting
everything's explained here :
https://github.com/ethangreen-dev/lovely-injector?tab=readme-ov-file#manual-installation
Steamodded is, in this context, considered as a mod.
https://github.com/Steamopollys/Steamodded/tree/main?tab=readme-ov-file#external-tool-lovely-injector
please ensure that the Balatro.exe is clean. For that, verify the game files in steam. If something's wrong with one of the files, it will patch the game files
i had mods installed previously. i just did a clean wipe. and did everything. but im getting that same error. about the nil value
Same here. Just did a total wipe and reinstall.
Something must have changed in the latest version of Steamodded to cause this.
thats what i think
fresh install of the game works just fine. as soon as steammodded is installed without any mods. i get that error
I managed to recreate the issue, I'll search a but tonight what's happening
I'll explore more tomorrow, it's almost 3am where i live
Fair enough. Thanks for offering to help
Did found anything in the immediate, I switched to something else
the darkmode debug console will come later, still have to work a lot on it, tkinter sucks for that
hm, yes, steamodded isnt a steamodded mod....
so I'm trying to use the deck creator mod (using steammodded), and I've installed all the files for it, but whenever I launch balatro it crashes and this is the error that pops up. if anyone could help me I would appreciate it greatly
not at home right now to try it but Thank You Aure 🫡
yippee
yippee
yippee
yippee
yippee
yippee
when I use the yippee card: 
yippee
Ayo new joker modpack? https://www.youtube.com/watch?v=p_VwYBbgBj0
About Balatro:
Balatro is a deck-building roguelite where you must play poker hands and earn chips to defeat enemy blinds. Enhance your deck of playing cards, buy Jokers to modify each hand you play, and discover new and wild synergies to win!
Mod Pack: https://batabata3.github.io/balatro-pampa-joker-pack/
Try it out here: https://store.steam...
RE: global 'hand_chips' (a nil value) error - it appears to be affecting 0.9.6 but not 0.9.5. A clean reinstall and steammodded install w/ 0.9.5 worked for me
hi uhh can i ask for some help regarding this code?
the effect im trying to do here is to make it so that whenever a card is destroyed (like with glass or hanged man, this card gains chips equal to twice that cards rank)
but it doesnt seem to be doing anything
elder berry
hm
try also having context.remove_playing_cards?
caino also hooks into that so that might be the issue
also cards_removed doesn't seem to be a thing
oh huh
minecraft!
oHHH you're right
i mustve mixed up context.removed and context.remove_playing_cards
A pretty technical question, how do you guys handle function wrapping upon adding to deck?
these will be lost when you close and reload the game right
is there a way to set those upon loading up a game? is there a stage like that in game?
hey its like my wanted poster
does that do something like that?
hmmmm, i get the first error if i play my retrigger card in 0.9.6, and the second if i hover over my tarot card in 0.9.5
well oops
New joker! Catalyst Joker
what do you think balance wise about these jokers?
Snow berry: 1 in 3 chance to lose $1, Retriggers all scored Color cards
Elder berry: 1 in 2 chance to Retrigger all scored Ink cards
Snow Berry just has a random chance effect?
try 0.9.7
snow berry retriggers color every time at a possible lost of money while elder berry has a 50% chance to retrigger
got i love the mod badges XD
im open to suggestions hence why i posted their effects here
i cannot seem to find this function
it gets called in generate_card_ui, which was a consumables thing originally, so it's in tarot.lua
I couldn't possibly have bothered patching that function multiple times, because it's disgusting
huh
not too clean but works
+9.9 mult is cursed
Any suggested alterations?
Also yeah it tooltips your tooltips
i love tooltipping my tooltipped tooltips
anyways i forgot i had wheel always fails enabled lmao
@lean dune I just thought about something.
Maybe we should find a way to split mods into separate files?
is it possible for a tooltip to be conditional? like if there is a function set does it have to return/set one or can it return nothing (i want to make my planet cards show exactly what Observatory makes them do but maybe set it so its only while you possess Observatory? not sure this is good design but w/e)
mods already can be multiple files tho right
btw guys how to use the new debug console
tooltips aren't returned from any function directly, you're passed on info_queue and you can modify it however you want
i got nothing out of it currently
Take a look at my deck creator mod, I'm linking multiple lua files using normal require syntax due to some special loading behavior
you need to run it before starting up the game
i did
do i have to set it to specific mode?
when i run it and then start the game, nothing happens
doesn't say it's connected so probably wasn't
do you have a specific log level set? it might be hiding stuff if so
how do i do that?
oh yeah i realized python console has been telling me this
no it was indeed log_level
but how do i set those things and where
there should be selector at the bottom of the screen where it should say TRACE or DEBUG or INFO or whatever
yep it says this when i set it to debug
(i set it to debug before launching the game, and this shows up when i launch the game)
does this need 0.9.7?
well it worked when i updated it to 0.9.7
is it because of of the debug.lua? hmmmm
anyways it works now, thx for the help!
you might have had an outdated version then, idk
i was on 0.9.5 which i think is supposed to support new debug console
uh yeah 0.9.6 had some changes to it
I'm gonna take a look
There's a breaking change between 0.9.5 and 0.9.7 (debug console side only). You should use the debug console that is shipped with the Steamodded version that you use
oh i usually just download the injector and inject, i grabbed the newest debug console from the current git repo directly
probably that's why
btw what's the breaking change 👀
not that i didn't read the change log, just want some highlights
the way the timestamp of a log is generated, this was delegated to Steamodded instead of letting the debug console generate it. This was needed in case a huge amount of logs comes at the same time
therefore parse an incoming log differently, which might have create the exception you had
any reason this isn't returning a message?
return {
chip_bonus = {message = localize('k_upgrade_ex'), colour = G.C.CHIPS},
colour = G.C.CHIPS,
card = self
}```
You checked how Hiker works?
Some contexts don't use returns, see if card_eval_status_text (forgot the exact name) works?
oh btw, does context have something like drawn_to_hand?
i know blind has that state, but not sure if context can trigger at that stage
context.playing_card_added ?
Oh wait you mean when you receive your hand after discarding/playing?
yeah that
you know cerulean bell would force you a card? i think that uses drawn_to_hand
but that was a blind specific thing
i wonder if there's anything like that for context
Yea drawn_to_hand is a blind function

