#💻・modding-dev
1 messages · Page 569 of 1
Did you put a function in G.GAME?
how do i skip the redeeming animation for a voucher
the game is crashing because of a nil atlas, however PhantaDeckJoker exists — i've tested that by seeing the Joker in the collection before it is changed
what did i do wrong?
No, it doesn't, you're missing your mod prefix.
oh😭 thanks
what's the best way of going about destroying a random card from the deck?
there should be a pseudorandom function that gets a random object from a table, don't remember the name of it off the top of my head
ah it's pseudorandom_element
ok
Im having an issue with making a very basic joker in the game, its saying it cant find the file path for atlas but i already have the image for the joker while being named "jokers.png" in 1x and 2x in an assets folder. Anyone now how to fix this?
Lua code:
--- STEAMMODDED HEADER
--- MOD_NAME: Johnbo
--- MOD_ID: JOHNBO
--- MOD_AUTHOR: [Wii_Bowler]
--- MOD_DESCRIPTION: I love johnboing it so good yes
--- PREFIX: Jnbo
-----------------------------------------------
---------------MOD CODE ----------------------
SMODS.Atlas{
key = 'Jokers',
path = 'Jokers.png',
px = 71,
py = 95
}
SMODS.Joker{
key = 'joker2',
loc_txt = {
name = 'Johnbo',
text = {
'When Johnbo is collected',
'Give like perma mult idk'
}
},
Atlas = 'Jokers',
pos = {x = 0, y = 0}
}
-----------------------------------------------
----------------MOD CODE END -----------------
Json code:
{
"id": "JOHNBO",
"name": "Johnbo",
"display_name": "Johnbo",
"author": ["Wii_Bowler"],
"description": "Hehehe funny johnbo",
"prefix": "JNBO",
"main_file": "main.lua",
"priority": 0,
"badge_colour": "",
"badge_text_colour": "",
"version": "1.0.0",
"dependencies": []
}
capitalization matters, make sure the files are named "Jokers.png" with a capital J
they both do
show a screenshot of the files in the file explorer app, with the path fully visible
is this good enough?
yes
you've typo'd the assets folder as "assests"
fix that
thx man that was it
any way i could define the text highlight through a global with something like DynaText
like the equivalent of {X:mult,C:white} but in this format for use in DynaText
{string = ' +', colour = G.C.MULT}
not with only dynatext
you need to wrap it in a column node
check how localize does it
how am i meant to call blind configs? is it blind.ability.config or something
blind.effect or blind.config.blind.config
well i have a whole thing i just want to change the highlight colour, here's the full code
yeah you can't do it with only dynatext
i actually did misprint text like that before actually let me get the code
i referenced the vanilla remade docs for a lot of this
check a couple messages down for the code
#💻・modding-dev message
this the code?
yes
i think we should have high contrast suit emojis 
having an issue where the Xmult doesn't appear (either it's white and unhighligted or it's clear), and the word does not change from "Mult"
i would send the code but it can't fit in a screenshot and a message is 1744 characters over the limit
here
and the func ofc
the function is looking for "+50" and "X1.5" specifically
if the text can be other things then you need to check for that
does the event queue "after" mode bypass the normal queue order?
alright
how do you check if youre drawing cards in a booster pack
I wonder how hard it would be to make a coin flip
Can someone give me some guidance to learn how to start making mods for Balatro? I have made a few mods for other games Skyrim, and Baldur's gate but don't know where to start here
check pins in #⚙・modding-general for a link to the "Balatro Modding Starter Pack"
balatro (and by extension balatro modding) is entirely in lua, so here's the reference for that too https://www.lua.org/manual/5.1/
cool thank you. appreciate the help
how would you have a joker store a boolean thats like only to prevent an infinite loop
like should you just put that in config { immutable }?
or is there a proper way to store "internal" variables like that
saving it in the config is fine
ok
if you don't care about saving the value on a reset then it can be directly in on the card
also is there a context for when a booster is closed in any way
?
ending_booster
thx
so it turns out putting a command to draw more cards in other_draw leads to an infinite loop because that alos counts as other_draw
if you only need the value once in a place where the game doesn't save then you don't need to save it to the config
you can just do card.foo = x?
yeah
are nil/undefined values truthy or no
no
ok good
so its safe to just use that as a true false switch and check it before its actually set
yeah
cool thx
how do i know if a card is getting destroyed by grim?
Hey, recently came back and been doing a variety of playtesting in terms of the newer mods and the like, and I'm just wondering as to why some of the cards in DeFused (Fusion Jokers except they're standalone jokers and not part of the fuse mechanic) tweak out as shown here
https://streamable.com/gxaklc
I've tested about every joker in the mod and these are the ones that have this issue, every other one doesn't have this issue
I'd ask GayCoonie (the dev of the mod) about this but from last I've searched he seems to have gone MIA
is there any possible way i could make jimbo always say "The house always wins!" if you lose by a specific condition
And to be sure, heres my co-current list of mods (after I took out the others for the sake of testing defused)
If i want to make a method that goes through ranks in order rather than choosing a random rank, how do i go about doing so because i'm lost
try iterating over SMODS.Ranks iirc
do i set a case where it does so every time the round starts?
yeah
and how could i do that exactly
Because there is no context check.
tryna think of how to do it, whether to do it in the joker code itself or in the method i'm doing
i guess if you're doing it with rounds you should probably use modulo (%) to get the index of the table
whhhhhhich would entail as to what type of card's they're set to interact with?
like SMODS.Rank[insert modulo logic here]
would the inner logic be like G.GAME.rounds % (idk what to add on this side of the modulo operation)
try SMODS.Ranks[G.GAME.current_round % #SMODS.Ranks]
Gotcha
so could i do something like this?
i think that's good
No, G.GAME.current_round is a table.
how could i get the current round value?
then idk :(
You would want to do if context.other_card:get_id() == (G.GAME.round % (SMODS.Rank.max_id.value-1))+1
and if i wanna print it in the joker description, would this work?
oh shit
forgot
to put the image
idk max id value, because if there's a card that's 100 points away from the next one (like UnStable with a 161 of spades) then you'll run into a problem 🤔
but i might be wrong idk
i tried to make a joker that gives mult when a joker from my mod (kls) is sold. this doesn't seem to work and it crashes
calculate = function(self, card, context)
if context.joker_main then
return {
xmult = card.ability.extra.xmult
}
end
if context.selling_card and context.card.ability.set == "Joker" and context.card ~= card and not context.blueprint and context.main_eval and context.other_card.config.center.original_mod == SMODS.Mods["kls"] then
card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.xmult_gain
return {
message = localize { type = "variable", key = "a_xmult", vars = { card.ability.extra.xmult } },
colour = G.C.MULT,
card = card
}
end
end
No, because the id is not actually 161
got it
Log?
ok im probably an idiot but im stuck here
trying to do something for each joker the player has, excluding negative ones (thematic reason for this). i'm trying to check if a joker is negative but just copying over the 'check for edition' code results in a crash. assuming there's a different way i have to check this ?
bump
also a screenshot of what i tried that didn't work
probably crashes bc it tries to check an edition for jokers without an edition
G.jokers.cards[i[.edition and G.jokers.cards[i].edition.negative
would printing out the rank work like this or a different way?
thank you so much 😭
for k, v in pairs(context.full_hand) end
my Toddprint is finally complete
🔥
they removed reactions, literally 1984
or i can't react???
wtf
It's context.card not context.other_card
i tried that too
funny monkey doodoo jokers i made
actually maybe it's because my mod prefix is kls but my mod name is KLS
i knew removing cards directly from the deck wasn't going to work as intended
when the joker is in play, new cards don't get added to the deck view, but removed ones do disappear
(hope im not taking up too much time on the coding assistance since I pratically know zilch about it for this game @daring fern )
but as far as I see I don't seem to have found any differences in its code from Defused and Fusion in terms of its context checks (unless im looking in the wrong place)
Try looking at this version instead: https://github.com/wingedcatgirl/Fusion-Jokers/
How can i print out the rank in the joker description without causing errors
Change .rank to .key
SMODS.Ranks[(function() for k, v in pairs(SMODS.Ranks) do if v.id == ((G.GAME.round % (SMODS.Rank.max_id.value-1))+1) then return v.key end return 'Ace' end)()].key
put this inside of the loc_vars?
dang I had the older version
No, put it in localizes first input.
Yes.
bump
i got an error
okay hold up I think I'm getting an angle here
got it
this is supposedly causing the issue rn
the brackets near the .key
unexpected symbol error
all I had to do was change this to this
SMODS.Ranks[(function() for k, v in pairs(SMODS.Ranks) do if v.id == ((G.GAME.round % (SMODS.Rank.max_id.value-1))+1) then return v.key end end return 'Ace' end)()].key
it's now displaying properly but the code does not work as i intend it
What is currently happening?
the joker is supposed to give $2 when a specific ranked card is scored, the gimmick is that it's supposed to go in order like it's going in a circle like a ferris wheel, but it isn't doing so during scoring
if context.other_card:get_id() == (G.GAME.round % (SMODS.Rank.max_id.value-1))+1
it worked thank you!!!
Btw quick question, i had this issue a few days ago and left it off for a bit, but i tried to make a joker that will give money based on if you change the volume level of the music, but that never gets returned by the joker at all
is there another way to do it
Now dementia joker is working flawless,
next is Flag Bearer
alrighty, easy peasy, same as dementia joker's solution, change the last if context.cardarea line
thats the last of the regular fusion jokers now cause now its time for the others
trying the context.cardarea line first
...okay wow uh
are all of these going to be fixed by just pasting "G.jokers and context.joker_main then" in their last context.cardarea line?????????
Yes.
Also SMODS.Jokers doesn't exist.
bump
well, as long as the jokers themselves aren't flipping out before I even get my first hand out I'd say its fine by me
...I say that and watch something is gonna go out of whack
well well, looks like they're all working without a hitch!
I appreciate your assistance (even if the solution was literally changing one line of code to another lol)
Im working on a coin flipping mechanic. I assume that in order to get it to actually flip, I'd need to use either drawSteps and/or Shaders, right?
No, you would just animate the flipping.
Okay, but how? Just have a list of sprites, or can I do it in the same way playing cards are flipped?
Perhaps.
FYI, context.cardarea == G.jokers will almost always be true and doesn’t really do anything
Guys
Does anyone exactly know
how you can add a new button containing text, like Money or Ante to the left
Or maybe should I simply just ask how the Ante button code was done so I can make a copy
I really need to stop using Jokerforge
how would I hide a specific card? By hide I mean straight up just make it as if it's not there but still let it score/do its thing.
card.states.visible = false
ty
it's me again, and this time i wanna ask where the run-initializer is, so i can hook into it. i looked at game.lua but didn't find anything there
(ps: with run-initializer i mean the function that gets ran once a new run is made)
Game:start_run ?
hm lemme try
oki
hm. idk what i did wrong, but it still crashed. could be that some calculates happen before the run was fully initialized?
ps: i just made a check to init data once its needed
can you show the code
-- Initialize Run Save
FATES.Data.Funcs.init_run = function ()
G.GAME.Fates = {
active_fates = {},
fate_history = {}
}
end
local start_run_ref = G.start_run
G.start_run = function (self)
-- Before Hook
local ret = start_run_ref(self)
-- After Hook
FATES.Data.Funcs.init_run()
-- Return
return ret
end
mb
i hooked into the wrong fun
😭
nope
local start_run_ref = Game.start_run
function Game:start_run(args)
start_run_ref(self, args)
end
You're probably looking to do something like this
still nothing
Code?
it's here
No, Game:start_run and G:start_run are the same, you just forgot args
You're looking for Game:init_game_object
are you sure? it just crashed my game on startup
wait
lemme test smtn
Odd Modd is going well
nope
No, the return of the function is G.GAME
oh. lemme try then
How does one run balatro in balatro?
is that a theoretical question?
also is there an instance where i can make this be only ran once (context.cardarea = G.jokers somehow didnt work)
if context.end_of_round then
No, that's a real question.
context.main_eval
well then idfk
dosen't this trigger every hand, and not at the end of every round?
No, it would be along with context.end_of_round
wowwsome tysm
what's the G.jokers.highlighted equivalent for boosters
G.pack_cards.highlighted
ty
How possible would it be to make a Joker that puts you in limbo?
Like any time you beat the boss blind, instead of going to next Ante, the Ante restarts, the scaling on hand levels, jokers, the joker lineup itself, your money, everything goes back to what it was when you bought the limbo Joker? Of course no eternal compatibility and you could break the cycle by selling the Joker, but I'm unsure how possible it is to implement certain aspects, like scaling on other Jokers
Quite possible.
You would just save everything at the start of the ante and revert everything back at the end.
What would I need to put in here to create a specific joker when sold? can't quite find anything that works
SMODS.add_card({key = 'j_modprefix_key'})
Wolf isn’t a joker key
It's an earlier key I put in, or does that not work?
It's j_modprefix_key
Code?
j_yourmodprefix_thekeyofthejoker
ohh
I was going to say the modprefix and key need to be the actual modprefix and key
yo, i need a lil help in making a mod...idks about mod developing but got a cool idea ig
like i was thinking of making a lil group to make these mods and stuff
Hello,i wanna make a mod that replaces all jokers with custom sprites,how can i code the lua? (if you know what i'm talking about)
i really suck at coding lol
thanks!
beat me to it 😔
rules = {
modifiers = {dollars = 20}
}```
why does this not crash but doesnt do anything in a challenge
modifiers = {{id = 'dollars', value = 20}}
If I do
if context.playing_card_added then local card = context.cards...
Will card contain all cards that got added, or does it get called for each card one by one, so doing it for 1 card is enough?
thankyou 😬
cards is the table of cards that were added.
Thank you!
are these not the same table?? how do i get the cards i returned up there
... hello computer i marked that up -
these tables
Yes, they are, but card here would be a table of cards.
so like
{
1 = {card, card, card, card, card},
2 = {card, card, card, card, card},
3 = {card, card, card, card, card},
4 = {card, card, card, card, card},
}
??
No, it would be {{card, card, card, card, card}}
Because cards is a table of cards, and you're returning that but in another table.
... aha. i see. what i did
so the problem is that i'm stupid, but in a completely different place than expected
same tbh
what the fuck does this even mean
It mean that the function returns one or more value and calling it without assigning it results might lead to bugs
You need to do
local new_card = SMODS.change_base(G.hand.highlighted[i], nil, card.ability.extra.rank_conv)```
no you don't
why would i need to store the value when its just changing an existing card
That’s what i understood from the comment
you should just do assert(SMODS.change_base(blablabla))
OHHHHHH
if context.playing_card_added then
local card = context.cards
for _, card in ipairs(context.cards or {}) do
if card.get_id and card:get_id() == 12 then
local _card = copy_card(card, nil, nil, G.playing_card)
_card:add_to_deck()
G.deck.config.card_limit = G.deck.config.card_limit + 1
table.insert(G.playing_cards, _card)
G.hand:emplace(_card)
_card.states.visible = nil
G.E_MANAGER:add_event(Event({
func = function()
_card:start_materialize()
return true
end
}))
return {
message = 'I just want to make you happy!',
colour = G.C.PURPLE
}
end
end
end
end```
Is there a simple way to display the message without returning? If I return, then if a second queen is added (e.g.: cryptid), only one gets copied, but if I remove the return it works properly, without message though.
I know it's an option do display the message x number of times after it's all done, but I want it displayed as it happens.
Put the return after the for loop.
Then it wouldn't display the message for each copy, right?
SMODS.calculate_effect({message = 'message'}, card)
if you want that you would use SMODS.calculate_effect(<return table>, card) in place of returning iirc
Thank you, works like a charm!
Whoops I just noticed I redefined card multiple times too so it didn't know where to put it, but fixed
how to get a pseudorandom value from 0-1 or just a random int within bounds?
You can do math.random() but it will be different each time even in the same seed
Pseudorandom(“seed”)
pseudorandom("seed")

hmm who should i trust
and is there a table inbuilt of every tag,vouncher,edition etc
What do you want to do exactly
its fine i will just make a table manually
suit yourself
no the game just magically knows what tags and vouchers and editions there are
🧠
Lua is magic
hm true
sorry

the tables are G.P_TAGS, G.P_CENTER_POOLS.Voucher, and G.P_CENTER_POOLS.Edition btw
🏊
why art thou swimming
Edition pool
👍
does pseudorandom_element ignore elements with value nil?
I mean probably
Yes, because they don't exist.
repeat
yellowprint_value = math.random(1, #G.jokers.cards)
until G.jokers.cards[yellowprint_value].blueprint_compat ~= false```
how do i make it check if a joker is blueprint compatible? this isnt working
use a for loop first of all
G.jokers.cards[yellowprint_value].config.center.blueprint_compat but this will loop infinitely if you don't have any compatible jokers
okay thanks
does get_current pool return a table of tables or of object keys?
keys
Does anyone know how Balatro does the flipping animation for playing cards? Id like to try to recreate it myself
card:flip()
Yes, but like. Where is it stored so I can look at the code so I can recreate it for my own purposes?
(I need to create a coin flipping animation)
i imagine somewhere in functions/common_events.lua
Ty
it'll be in card.lua
if context.individual and context.cardarea == G.play then
if SMODS.pseudorandom_probability(card, 'jackpot', 1, card.ability.extra.odds) then
context.other_card:set_ability('m_gold', nil, true)```
why is other_card nil
event shenanigans
do local _card = context.other_card and then _card:set_ability(...)
I don't remember there being such a functionality in the game, what's the way of having a Joker triggered when it's destroyed? Can it even trigger at that time, or is it already gone and the code won't run for that?
Specifically destroyed, not sold
Why does this error appear when I hover over a joker in a collection?
card.ability.extra.suit doesn't exist.
thanks
how would i go about making a joker that checks if you have two specific ranks of card in your played hand
...my first Joker has been just that.
Seeing double but change suits to ranks
awesome thanks man
i'm trying to add my mods to the Mod Manager, but i need access to push to a branch
how did you guys do it?
Submit a pr
fork it first
it's a god awful method of submitting mods tbh
good morning chat
config = { extra = { odd_one = 1, odd_two = 5 }, },
loc_vars = function(self, info_queue, card)
return { vars = {card.ability.extra.odd_one,card.ability.extra.odd_two } }
end,
calculate = function(self, card, context)
if context.joker_main and pseudorandom('adhd_joker', card.ability.extra.odd_one, card.ability.extra.odd_two) then
return {
mult = 15
}
end
end
}
this isn't doing a 1 in 5
it's doing a 5 in 5
the pseudorandom value will always return true
you're not comparing it against anything, and it will always exist
so, what changes do i make?
use SMODS.pseudorandom_probability(card, "heartbreak", 1, card.ability.extra.odds) instead
ahhh, okay
and change ur loc_vars to something resembling this ^u^
but change the heartbreak to your random key
okay i've forked it, and i've made a commit on the fork
how do i make this a pull request ;u;
Why this error appear?
remove one of the ends after the if
trying again 💀
calculate = function(self, card, context)
local _card = context.other_card
if context.individual and context.cardarea == G.play then
if SMODS.pseudorandom_probability(card, 'jackpot', 1, card.ability.extra.odds) then
_card:set_ability('m_gold', nil, true)```why is context.other_card nil
ah no nevermind i've got it ^u^ thanks
are you getting a crash? can you share it?
its when the chance hits
and can you share your code with line numbers?
you're still using context.other_card in an event
line 32
it tells you where the problem is
I don't understand why this is happening since i'm not giving ease_hands_played a table at any point
Any idea how I would make a consumable change into a random joker every round?
do you take ownership of something
no
my guess is you're passing card.ability.extra to ease_hands_played
that's what is happening but i'm not sure why at all. It's likely because of how the deck works but it makes no sense. It's made to reroll jokers at the start of each round
i can paste the code here but yeah, i am completely clueless
What's the table with all jokers in the game (vanilla and modded)?
G.P_CENTER_POOLS.Joker
try hooking ease_hands_played and print debug.traceback if passed value is not a number
How do I make it change back when the flag is true? Do I use the flag in every Joker?
_card:set_ability(pseudorandom_element(G.P_CENTER_POOLS.Enhanced, 'jackpot1'), nil, true)
G.E_MANAGER:add_event(Event({
func = function()
_card:juice_up()
return true
end
}))
return {message = "msg"}```how to have message show right before enhancement?
At the end of a round
is there a context for when Cash Out is pressed?
context.starting_shop
awesome ^U^ thanks
it appears that burglar was kicking the bucket because the jokers were getting rerolled in the middle of the blind so yeah, i'll just make the reroll happen in a safer spot.
Yes. It would change into a random joker when a blind is selected and turn back into itself at the end of the round
So how would I change it back again?
bump
I currently have this but the calculate doesn't apply to it anymore, when it changed into a joker
if context.blind then
local RNGesus = pseudorandom_element(G.P_CENTER_POOLS.Joker, "scorpioJoker")
card:set_ability(RNGesus)
Is_from_scorpio = true
end
if context.end_of_round and Is_from_scorpio == true then
Is_from_scorpio = false
card:set_ability("c_cstorm_scorpio")
end
end```
Yes, because it doesn't exist anymore.
Is there a way to check if another joker becomes debuffed?
And how do I make it change back then?
You flag the card, and you change it back in the mod calculate
What do I use instead of card?
Is_from_scorpio = false
card:set_ability("c_cstorm_scorpio")
end```
hi chat, i wanted to ask how the level color text on planet cards work? i did this but the colors didnt show up
exoplanet.lua
...
config = {
hand_type = "sp_plateau",
},
loc_vars = function(self, info_queue, card)
return {
vars = {
G.GAME.hands[card.ability.hand_type].level,
localize(card.ability.hand_type, 'poker_hands'),
G.GAME.hands[card.ability.hand_type].l_mult,
G.GAME.hands[card.ability.hand_type].l_chips,
colours = { (G.GAME.hands[card.ability.hand_type].level == 1 and G.C.UI.TEXT_DARK or G.C.HAND_LEVELS[math.min(7, G.GAME.hands[card.ability.hand_type].level)]) }
}
}
end,
...
en-us.lua
c_sp_j1407b = {
name = "J1407b",
text = {
'({V:1}lvl.#1#{}) Levels up {C:attention}#2#{}',
'{C:blue}+#4#{} Chips and',
'{C:red}+#3#{} Mult'
}
},
yes i know i got the chips and mult swapped i'll change it later
So I leave card in there?
did you level up the hand? at level 1 its just the default text colour
yeah i did
So I replace it with SMODS.set_ability("c_cstorm_scorpio")?
what
oh
no because you need to target a card
so you need to actually find the card you need to turn back first
oh i thought you meant for mod calculate
yeah no you gotta loop over everything and check what cards need to be transformed
supposed to be green right
i dont know the exact level colours but it definitely shouldnt be that colour
strange
hmm
Is there a way to have the hand size adapt to the joker's config?
From what I can find Jokers that change hand size only do it on adding to deck and removing from deck, and Bean does every time remove 1 from it
But is there a way to not continously change it, but just like set the hand size change from this Joker, and it'll adapt if it the hand size variable of the Joker changes from 1 to 2?
i'd make an issue in vanillaremade since that seems to be where you got the code from
yeah that's where most people tell me to get the code
turtle bean just subtracts the hand size by 1 and its own variable by 1 seperately
so the way is to just modify the config and hand size by the same amount
Yeah that's my issue with it, I'd rather have it track its own variable
That sounds annoying, thank you!
for k, v in pairs(G.I.CARD) do
if v.c_cstorm_scorpio then
v:set_ability("c_cstorm_scorpio")
end
end
It still is the joker...
Are you setting card.c_cstorm_scorpio?
Where?
when you transform the consumable
what would i hook into to prevent the boss blind from refreshing blinds when you beat it
get_new_boss?
?
guh
I'm doing calculate = function (self, card, context) if context.blind then local RNGesus = pseudorandom_element(G.P_CENTER_POOLS.Joker, "scorpioJoker") card:set_ability(RNGesus) Is_from_scorpio = true end end in the consumable itself and ```if context.end_of_round and Is_from_scorpio == true then
Is_from_scorpio = false
for k, v in pairs(G.I.CARD) do
if v.c_cstorm_scorpio then
v:set_ability("c_cstorm_scorpio")
end
end
end``` in the `SMODS.current_mod.calculate`
why are you just making a random local variable
that does nothing
no i don't think so.. You know how when you advance the ante after beating the boss and all the blinds get reset? I'm looking for that specifically
Yes, you're not setting card.c_cstorm_scorpio
Where?
How do I set it?
Is_from_scorpio = true
reset_blinds?
literally the exact same as every other variable
<thing> = <value>
should be it, thank you
card.c_cstorm_scorpio = true?
yes
It works now, thank you
How would I add an info to the joker now?
Like info_queue
Patch generate_card_ui
To check if card.c_cstorm_scorpio == true and if so add the info_queue?
No, you would just check if card.c_cstorm_scorpio
So not the info_queue?
No, you would add the info_queue
Now I'm confused
whats so confusing he literally just what to change the check to
nothing was said about the info_queue
I'm confused because this doesn't work
[patches.pattern]
target = 'functions/common_events.lua'
pattern = "elseif _c.name == 'Palette' then loc_vars = {_c.unlock_condition.extra}"
position = 'after'
match_indent = true
payload = '''
elseif card.c_cstorm_scorpio then loc_vars = info_queue[#info_queue + 1] = { set = "Other", key = "scorpio_ability" }
'''```
Wait...
whats the area for boosters in the shop?
Nope, still crashes
G.shop_booster
No,```toml
pattern = 'for _, v in ipairs(info_queue) do'
position = "before"
[patches.pattern]
target = 'functions/common_events.lua'
pattern = 'for _, v in ipairs(info_queue) do'
position = "before"
match_indent = true
payload = '''
if card.c_cstorm_scorpio then loc_vars = info_queue[#info_queue + 1] = { set = "Other", key = "scorpio_ability" } end
'''``` still crashes
if card and card.c_cstorm_scorpio then info_queue[#info_queue+1] = { set = "Other", key = "scorpio_ability" } end
Been trying to make blinds go in a reverse order for the past few days, pretty close to giving up atp 
Why this error appear?
i would give up :3
The more I dig the more I realize how scuffed this would be
but honestly i personally wouldn't touch blind stuff until smods adds the functionality
yeah I'm probably gonna hold off for now. I'm trying to add something reminiscent of Ascent from TBOI for my mod as an alt deck unlock condition but going in the small -> big -> boss order feels pretty weird since ur moving down the antes.
I was hoping i could hook into the function which boss blinds use to reset blinds
but alas
Hello friends! I was wondering if you could help me with a few things
Wo-Chien here gets 0.1x mult for every spade card in the deck, but the variable isn't updating properly in the joker's description. how can i fix this?

Firstly, you should be using card:is_suit(), Secondly, you need to put the same thing you put in calculate in loc_vars
i'm trying to add a sound but i keep crashing when it tries to play it. i register it like this
SMODS.Sound({
key = 'collage_dollar_mult',
path = 'collage_dollar_mult.wav'
})
then i place it in assets/sounds/
and then i call it like this play_sound('collage_dollar_mult', 0.95 + math.random()*0.1, 0.6)
and then it crashes like this:
Could not open file resources/sounds/collage_dollar_mult.ogg. Does not exist.
I don't understand. Isn't it supposed to look in assets? And why is it looking for an ogg when I specified a wav?
It's play_sound 'modprefix_key'
oh mb 💀 i thought it was just a straight up key system and the prefixes were a convention, i guess i never realized
tyyyy
replace the current code in loc_vars with this:
local spades = 0
for _, _card in ipairs(G.playing_cards) do
if _card:is_suit("Spades") then spades = spades + 1 end
end
return { vars = {xmultvar + (count*0.1)}
(also joker forge code moment)
wh
okay thanks discord formatting for breaking my shit
mmmm, is there a way to straight up just make it so the small and big blinds dont show up at all
Why this error appear?
i think i put it in the code wrong lol
missing end
no i just forgot a bracket lol
ah
add another } to the end of the return
ok thank you 🙂
This but also Big Blinds: https://github.com/SpectralPack/Cryptid/blob/main/lovely/stake.toml#L337-L364
dope
Why doesn't it count end on 113?
No, you have 2 extra ends.
As soon as I hovered over Wo-Chien it crashed and gave me this
i may be stupid again
you didn't close the first if before starting the 2nd one
you're not alone in that
replace count with spades
Also, install the lua extension.
happened again
when did this happen
Then how do I merge the second if into the first? or is it not necessary
same time, as soon as i hovered over Wo-Chien
^
oh i
replace xmultvar with card.ability.extra.xmultvar
works now, but i have one more thing
how can i make it so it debuffs a suit?
add the following to calculate:
if context.debuff_card and context.debuff_card.area ~= G.jokers and context.debuff_card:is_suit("<suit>") then
return {
debuff = true
}
end
I did this but appears a new error
please install this extension
No, now you have 3 extra ends.
Is there a context, or something akin to do that that checks if another joker becomes debuffed?
Is there something that tells you if a lucky card, glass card or so is going to hit or not?
not afaik
why
ok thanks still
ok i might have implemented it wrong because it's debuffing clubs AND spades
I thought that I could use that as the ability of my consumable type
it tells you if it will hit?
i honestly got no clue, do you have smeared joker by any chance
nope
The idea is that it tells you if the lucky card's 1 in 5 and 1 in 15 will hit the next time it is played. Same for the 1 in 4 of glass cards
what did you try to do
i dont think it's really possible to know given other probability effects
the debuff code had "spades" instead of 'spades', it had double quotes instead of single quotes
but i dont think that changes anything
in lua quotes are interchangable yeah
wh
i just started a new run and its only debuffing clubs now
I still don't understand
were you in a particular spade-debuffing blind by any chance
i believe i was in a small blind
thats
odd
might just be a product of not starting a new run after making changes though
yeah that's true
How do I make only 5% of the score balanced?
hello,i need help! basically i use malverk,i am replacing joker sprites but the 1x sprites wont show,the 2x sprites works tho
you gotta implement that yourself
not a default smods feature
should i send the lua?
maybe i messed up something on the code
game does not crash so i dont really think so
do you have the same image file in both assets/1x and assets/2x
do they have the same name
Is there a context for when a Joker is specifically destroyed? Not sold, destroyed by like Sac Knife or Madness
And also have the event trigger inside, as I'm afraid it would no longer trigger if a Joker is destroyed
context.joker_type_destroyed i think
should i send the lua ?
sure
Thank you!
ok the ruin pokemon are mostly working but they're interacting really weirdly when they're spawned and sold
yikes
what part of them is acting wierdly
when i sell one of them, they stop debuffing, but when i sell another, the remaining ones start debuffing again
i would have to show you directly to actually get across what i'm seeing rn
alr
I think i know what i messed up!
let me see,and i'll tell you if it works
what is happening right now
fuck it we ball ig
ok still not working
like i get it recalculating debuffs when selling
damn it
can i see the code for each of them
it'd take up a lot of space in chat rn so i'll DM you
alr sure
hum heya, I am new to balatro modding and I was wondering if there was a way to make the flip effect permanent, after the use of a spectral card
I tried it, this triggers when other Jokers are destroyed, but it doesn't work when the Joker the script is on gets destroyed, which would be my goal
You would have to hook Card:flip()
-# ah Ive never heard of hooking something else than a fish
how would you do that exactly?
Is the joker area G.jokers?
https://github.com/nh6574/VanillaRemade/wiki#whats-a-hook have a look at this
Yes.
tried to change my smod version since i didnt update it,still wont work
this is really weird
my game wont crash,so the code is good right??? i dont know what i messed up
i checked the pngs and they are the edited ones
this is rlly weird
ignore the lag on the video,steam recording
how can I use JSON in Balatro?
Im making a meme joker that gives XMult for each user in a voice channel - it all completely works including the requests. But I cant decode the response
if context.setting_blind then
https.asyncRequest("http://localhost:3000/vc/975100210671919134", UpdateUserCount)
card.ability.extra.mult_current = vcusercount;
end
response:
{"name":"vc","memberCount":2}
Why this error appear?
so is that how my hook should look like?
it looks weird and theres a lua duplicate error so idk
full image*
oh uhh for some ungodly reason you have to nest malverk content
what does that mean
so i have to make a json?
i dont think you need one honestly
what should i do then
i just used one bc its my normal modding process
nest the folders as ive shown maybe?
could you please explain what nest means i really suck at this
basically in the texture pack folder, add another folder and put your stuff in there
Hi, folks. My teammate is currently on hiatus in terms of Balala coding, so I'm looking for some help
If anyone is interested dm me
so i create another folder and put the same stuff in there
is that right
yeah
Oh and here's the thread of the Mod: https://discord.com/channels/1116389027176787968/1335221042204901396
yeah
forgot to add
go in dms,i'll show you what my texture pack folder looks like
alright I should be able to flip cards before they are drawn thanks
what function handles poker hand parts?
How can I play a sound when a joker is added to your joker slots?
use play_sound(<sound key>) in add_to_deck
and check for not from_debuff so it doesnt play when undebuffed
wait is the thing that goes (self, card, context) the check?
add_to_deck = function(self, card, from_debuff)
so would it be
add_to_deck = function(self, card, not from_debuff)
play_sound(<sound key>)
add_to_deck = function(self, card, from_debuff)
if not from_debuff then play_sound(<sound key> end
end
and i would add this after calculate?
yeah
ok so there's something specific i wanted to do
i wanted it to pause for just a second, then play the sound effect and juice up at the same time
would i have to create an event for that?
yeah an event would be the way to do that i think
since thatll wait for the animation of it moving to the slots
so if i'm trying to make it a function, would i put SMODS. before play_sound?
ok
yes its an unfinished string at line 15 like it says
ok eris i think i've been hiding something from you
i'm trying to use a custom sound
if youre using a custom sound then
https://github.com/Steamodded/smods/wiki/SMODS.Sound have a look at this first
you should probably ask the malverk thread for that
since this seems like a malverk specific issue
the malverk thread is dead
the dev is still active
HOLY SHIT I FINALLY DID IT
AFTER TWO HOURS
MY GOD
ok basically the x1 sprites shows and i have no crash
that's what i was trying to fix
Hi so im using jokerforge to make sum jokers, and im trying to make a sound play when mult is applied, but it plays when the hand is played instead, what should i do?
Anyone know how to disable this warning? It's starting to get on my nerves
click on quick fix and thenm disable globally
Thank you
@shell timber just out of curiosity have you also experienced this
with hypercam or hyperjimbo
oh mb bluddy
you need to add your own scoring step iirc
oh
guess i'll just go and see what morefluff does then
tried to this custom joker but doesn't work in game. it should give +100 chips if the played hand has only 1 card.
needs to be card.ability.extra.chip_bonus i think
is it fine if i steal the code morefluff uses for its context
i intended them to be the same already and i plan on adding a patch that makes them evaluate simultaneously
ofc
use context.initial_scoring_step, unless you want it to trigger even before that
the game resets to the base hand score after context.before because e.g. space joker might level up the hand
How would I make a consumable not highlightable?
i do want it to trigger before context.initial_scoring_step
Would it be possible to have a Joker that "saves the gamestate" when you buy it, and as long as you don't sell it, you will keep repeating the same ante over and over again, you'll get the same items in the shops, your money will keep resetting to what it was, jokers, joker/planet scaling and the deck itself keeps reverting until you sell that Joker?
I asked something similar in the morning, but that wasn't this deep
ok, fair enough. keep going with the custom context then
cryptid's revert code card is probably a good reference
Thank you for pointing me in a direction!
i'm not sure where it saves the state, but using revert immediately resets the game state to the beginning of the current ante
local code,body,headers = https.request(args)
local response = json.decode(body)
response.memberCount
bump
you mean like you can't click on it to get the Use and Sell buttons?
i imagine you would hook/patch card:click to stop it from being highlighted
actually, what jokers use intial_scoring_step
pretty sure it's added by smods
Yes
yea I don't think anything vanilla uses it
my Dice use it for sure
you should just set [card].states.click.can to false once it's acquired
if it can appear in the shop, that might be a bit tricky, because you want to be able to buy it. but if not, then just do it in the card's set_ability or something
what do they do then
d20 gives +(random number from 1 to 20) Mult before other scoring effects, d100 gives +(random number from 1 to 100) Chips before other scoring effects. they work properly on their own but i'm not sure how they interact with other cards that have initial_scoring_step effects yet
ah
i'll probably just use initial_scoring_step then
morefluff was the inspiration for that joker effect but don't think it needs to be one to one with morefluff lol
It spawns only under certain conditions, not in the shop, booster pack or something
ok yea if it only ever spawns into your consumables slots, do it in the set_ability function
okay i must admit i didnt know that was a thing
yea it's not documented on the calculate functions wiki page yet :3
but it was added in 0711
oh lol
initial scoring step is peak
i mean granted
i didn't know about context.money_altered and also patched in a custom context for that
thats still pretty new tho
i should put together a list of all the contexts for people to be able to reference while eremel is still rewriting the calculate wiki page
i will do that after i eat lunch i think
would be nice
I was doing some earlier actually!
heres one i did a bit ago #💻・modding-dev message
How would I make a card similar to blueprint but it picks a random joker and does double their amounts? Let's say it picks Even Steven. Instead of giving +4 Mult for even numbers, it would give +8 Mult for even numbers
cool, thanks
Only need to know how to double the values
local old_get_new_boss = get_new_boss
function get_new_boss(self)
old_get_new_boss(self)
if G.jokers and G.jokers.cards then
for _, j in ipairs(G.jokers.cards) do
if j.config and j.config.center and j.config.center.key == "j_tdec_photoquestion" then
if G.GAME.round_resets.ante == 0 then
return "bl_beast"
end
end
end
end
end
I'm trying to force a specific blind on ante 0 while a specific joker is held, although the game keeps crashing..
you aren't actually returning anything unless it's ante 0 and you have the joker
do this I think
local old_get_new_boss = get_new_boss
function get_new_boss(self)
if G.jokers and G.jokers.cards then
for _, j in ipairs(G.jokers.cards) do
if j.config and j.config.center and j.config.center.key == "j_tdec_photoquestion" then
if G.GAME.round_resets.ante == 0 then
return "bl_beast"
end
end
end
end
return old_get_new_boss(self)
end
bump
Still crashes, but I did get it as a blind randomly so I know that the blind isn't faulty at least
lemme eat lunch and then I can look at the crash
Oki, thank you
enjoy your meal
is there a way to disable the animation of cards getting added to the deck? currently with one of my decks you can see an animation of cards being added at the start of the run
oh
you're missing the mod prefix when you return the blind name :P
what's the difference between card.config.h_popup and card.config.h_popup_config?
well, i tried that but uh 
bru
you specifically did "bl_[modprefix]_beast"?
OH
holy fuck i forgot that the prefix is supposed to be in between
i'm so sorry
bump2
What's the context for all the time? Like one that runs every tick
use the update function for stuff that has to happen every frame
Thank you!
how would I make a boss blind immune to Luchador or Chicot
hook blind:disable()
ty
bump3
Would this just be like
Check if the ability.extra is a number if so double it, if not iterate over it's element's and double the values
Optionally you could add a check of sorts
For something similar to blueprint_conpat
I’ve got an idea for a Balatro mod and am really hyped to make it, but I’m kinda new to modding. so anyone here interested in like collabing on it maybe?
Elaborate?
i dont think thatll work for this situation
because thats more of a Cryptid.manipulate type deal
Oh wait
i'd look at how forgery from paperback does it
I kinda misread
Yeah I basically explained Cryptid.manipulate
Maybe oversimplified
hey uh anyone know anything about this
how would i get the number of destroyed Jokers this run, or make a function to track that, in order to make an effect like this possible
i remember asking this prior and being told to wait for an smods update so i'm asking again
one is the uibox and the other one is the config for the uibox
if i perchance wanted to move the h_popup itself where would i do that
move it after it is created or before
preferably after but that might be really difficult
Does someone have the mentioned list? I can't find it there
-- The list of all effects can be found in smods/src/utils.lua:1121
'chips', 'h_chips', 'chip_mod',
'x_chips', 'xchips', 'Xchip_mod',
'mult', 'h_mult', 'mult_mod',
'x_mult', 'Xmult', 'xmult', 'x_mult_mod', 'Xmult_mod'
}```
hmmm no idea
I would think so but I don't know
G.GAME.current_round.hands_left and G.GAME.current_round.discards_left
welp how would you do it before it is created?
i think you would need to hook/patch align_h_popup
Is it possible to give Jokers backs? Do they already have them? Because if the answer to both of those is no, then im gonna have a hard time implementing coin flipping
Someone can explain me how to download mods in balatro mobile
modding mobile isn't allowed
yeah
rule 4: "Only PC Modding discussion is permitted - discussion of modding Balatro on other platforms will not be tolerated."
this is how i change the back of my jokers https://github.com/nh6574/JoyousSpring/blob/5f10b2eaecbe7219905fe44ec7f3ce33a29f0f89/src/card_ui.lua#L464
anyway uhh does anyone know how I could do win_game() when a specific boss blind has been beaten
Sorry don't know the rule I m so Sorry
you're fine
My laptop is not working properly I buy the game in for 600 Indian rupees in Play Store
how do i patch smods?
=[SMODS _ "src/utils.lua"]
for example

I'm trying to make a joker give money if you set your music volume ingame to a randomly generated value, but it never gives it at all, is there a way to fix it?
what is it printing when you select the blind
the volume level
was doing that to test stuff
also you can remove the in_pool
for the music
appearing if you dont have a duplicate is the default behavior
i assume removing it affects nothing about whether it appears in the shop
correct
rn actually your joker appears even if you have another
because of the way in_pool works
after the print add print(type(to_number(G.SETTINGS.SOUNDS.music_volume)))
let me know what that prints
yup
doesnt work
[[patches]]
[patches.pattern]
target =[SMODS _ "src/utils.lua"]
pattern = "if args.operation == '-' and scalar_value < 0 then scalar_value = scalar_value * -1 end"
position = 'at'
payload = "if args.operation == '-' and to_big(scalar_value) < to_big(0) then scalar_value = scalar_value * -1 end"
match_indent = true
gives me
target = '=[SMODS _ "src/utils.lua"]'
error occured
oh yeah typo
mb for not pointing that one out
replace SOUNDS with SOUND
nothing prints unfortunately
not from the command menu by pressing /
I did yes
that's on
what if you just print G.SETTINGS.SOUND.music_volume
just eval and then put the code after it
like eval print(G.SETTINGS.SOUND.music_volume)
it's a nil value
maybe imma try eval print(to_number(G.SETTINGS.SOUND.music_volume))
yeah do that
so thats probably not how you get the volume then
How would I remove the endless button under a specific condition?
that seems the case yeah
there might be something about it in the SMODS documentation
if i'm not mistaken
i think https://github.com/wingedcatgirl/Go-To-Bed--Minty does that so you could maybe look through this?
will do!
gotcha
thank you
OH wait
my baddd
i thought you replied to me for sec
got distracted with somethin
how would i get a joker to show a message without returning?
i believe something along the lines of
SMODS.calculate_effect({message = " "}, card)
Is it possible to replace the default Jimbo with something else for a custom rarity?
So if the pool runs out of cards, it will keep giving that one Joker
what sound is typically played on retrigger?
odd todd meta
i don't think this is right 😭
how do i add a 3rd node thingy
okay i figured it out
this looks so scuffed i love it
elseif context.individual and context.cardarea == G.play and not context.blueprint then
local scaled = false
if context.other_card:get_id() == 9 then -- Check for triggered nines
card.ability.extra.nine_counter = card.ability.extra.nine_counter - 1
scaled = true
if card.ability.extra.nine_counter <= 0 then
SMODS.scale_card(card, {
ref_table = card.ability.extra,
ref_value = "planet_retrigger",
scalar_value = "planet_retrigger_growth",
scaling_message = {
message = localize('k_upgrade_ex'),
colour = G.C.SECONDARY_SET.Planet,
message_card = card
}
})
card.ability.extra.nine_counter = card.ability.extra.nine_requirement
end
end
if SMODS.has_enhancement(context.other_card, 'm_lucky') then -- Check for Lucky Cards
SMODS.scale_card(card, {
ref_table = card.ability.extra,
ref_value = "x_probability",
scalar_value = "x_probability_growth",
scaling_message = {
message = localize('k_upgrade_ex'),
colour = G.C.GREEN
}
})
scaled = true
end
if scaled then return nil, true end
why do the messages occur before the playing card itself scores?
Is there a easy way to detect when you've clicked on a joker?
https://discord.com/channels/1116389027176787968/1403861979059327116
install
if context.card_clicked and context.card.config.center.set == "Joker" then
end
local l_click = Card.click
function Card:click(...)
local c = l_click(self,...)
if G.deck then
SMODS.calculate_context{
card = self,
mod_prefix_card_clicked = true,
area = self.area,
}
end
return c
end
how do i make something only appear if theres a specific mod installed
use the dependencies field for that
how would i make text update on a card?
where do i leave it? in the .json?
In the object defintion if youre doing it for individual objects
actually
more pressing matter
Am I able to store arrays in a card's config?
Hi, how do you have like a 1 in 2 chance for a card to activate (give a multiplayer etc.)
do not store a table in a joker's config
more importantly, extra extra do not store a card in a joker's config
who can help?
it wont instantly cause issues but its unstable and generally very unrecommended
SMODS.pseudorandom_probability
thanks!
well
this worked just fine for the effect i'm trying to get
only problem is that the countdown number doesn't update
simply put
without putting a table in config
there's simply just no way of getting the effect i want (a buff when ten unique ranks are played in straights)
since having the declaration in the calculate function just resets it
What size are individual blind sprites again?
34x34 i believe
yea, 34x34 (at 1x scale obv)
is there a way to look at vanilla jokers' code but in the SMODS format?
tysm! i couldnt find this anywhere for some reason
😭
i mean if it works you can keep it but, make sure it works with the game saving
oh
shrug
they could work fine in cards and its just a bit of a bad practice to do so unless you need to
i won't be the first to admit i know nothing about if it actually causes issues but
knowing the game's saving i wouldnt be surprised if it didn't like storing a table
ive just heard to not do it so i dont personally
yeah
Because of data storage shit
i guess someone confused an object for a table when they were claiming that putting a movable or its descendants into a card was evil
I remember being told that saving tables at all was like evil n shit
and then i just never bothered to learn more because i never needed a table for storing something for a joker
i still think its bad practice but if you have to its probably fine
anyways, back to this
the countdown (card.ability.extra.countcards) doesn't update when i play cards
Actually if you cant store tables in cards then Cryptid.manipulate wouldnt need to be recursive
So its probably fine
you forgor the .extra. it's just card.ability.countcards = ... there
ah thanks-
also, technically speaking, you don't need countcards. you can just do 10 - #card.ability.extra.numberarray as the 2nd locvar. unless you're using countcards for more than just that
very helpful
I want to update my mod, but github is making me add 2FA. Any suggestions on what to use?
they do?
card.ability.extra is a table
why would it be bad practice
idk it feels bad to put a table there since 99% of the time you dont need them anyway
imo it's better practice to have poker_hands = { "High Card", "Pair" } than poker_hands_1 = "High Card", poker_hands_2 = "Pair"
How would I go about doing a 50/50 chance again? I forgot since last time I tried modding full time
i mean im not saying to expand out a table into individual elements thats obviously stupid im just saying if you can i think its better to avoid a table in the first place
why
https://github.com/Steamodded/smods/releases/tag/1.0.0-beta-0711a check the Probability Changes part
i do not have an answer for you that isnt just already what i said above
and i also have to go so iwill probablky not be able to reply again for a while
https://github.com/kustik9262/SixSuits
I forked six suits mod, and now, I planned work on this mod
Because I like this mod
Can you point out any errors if there are any?
would I specify K for King or 13 for King?
K probably
Seems to be the case
I was just formatting it wrong
Needed to format like {id = 'K'}, instead of 'K', 'Q', 'J'
doesn't seem to have worked
i swear i'm doing this right
do challenges have calculate functions
yes! since recently
im assuming its not this calculate = function(self, back, context)
as per the 0827 release notes, it's just calculate = function(self, context)
https://github.com/Steamodded/smods/discussions/919
Hiii, im new here in the modding side of balatro, and overall modding and i wanted to know what should i learn, or do, or anything
im really lost and don't know where to start
i'm not even sure if this is where i should be asking this
check pins in #⚙・modding-general for a link to the "Balatro Modding Starter Pack"
balatro (and by extension balatro modding) is entirely in lua, so here's the reference for that too https://www.lua.org/manual/5.1/
oh, ok, thanks a lot!
elseif context.individual and context.cardarea == G.play and not context.blueprint then
local scaled = false
if context.other_card:get_id() == 9 then -- Check for triggered nines
card.ability.extra.nine_counter = card.ability.extra.nine_counter - 1
scaled = true
if card.ability.extra.nine_counter <= 0 then
SMODS.scale_card(card, {
ref_table = card.ability.extra,
ref_value = "planet_retrigger",
scalar_value = "planet_retrigger_growth",
scaling_message = {
message = localize('k_upgrade_ex'),
colour = G.C.SECONDARY_SET.Planet,
message_card = card
}
})
card.ability.extra.nine_counter = card.ability.extra.nine_requirement
end
end
if SMODS.has_enhancement(context.other_card, 'm_lucky') then -- Check for Lucky Cards
SMODS.scale_card(card, {
ref_table = card.ability.extra,
ref_value = "x_probability",
scalar_value = "x_probability_growth",
scaling_message = {
message = localize('k_upgrade_ex'),
colour = G.C.GREEN
}
})
scaled = true
end
if scaled then return nil, true end
why do the messages occur before the playing card itself scores?
Hello! I am working on a mod (it is currently in fairly early progress but already in a state where it adds enough content to be unique) and was just curious on best ways to publish it
There's GitHub and Balatro Mod Manager, and you could probably promote your mod by posting about it here, on Reddit, contacting YouTubers / Twitch streamers, etc.
Oh, and the Balatro Modding Wiki. You can post a link to your GitHub there along with info about your mod.
Thanks!
Btw one more thing does uploading it to Nexus work too? Cause I've never used GitHub before so Nexus would probably be a bit easier to me
Most likely, it's just less commonly used than GitHub so I forgot to mention it.
How exactly would I go about posting it here? I'm to stupid to figure out the wiki formatting so rn that is probably the best option
Posted it there
Question: Does anyone know where the code for the pre-existing stakes are?

gg