#💻・modding-dev
1 messages · Page 564 of 1
i'm not normal
-# Play Maximus
Play fanfare when i fix it and make it balanced
Shoutout N
i forgot what it was slmao
slmao
ok astra is blocked

yeah that's a better example lol
S what
Forgive me for thinking "sluhmao" sounds funny 😭
Poor astra
what does the s mean in that acronym
im like, so laughing my ass off rn
context.post_trigger, check "other_ret" for values of "mult" or "mult_mod" and if it exists (and is greater than 0), increment a stored value
Slay N
don't forget to enable the post_trigger optional feature
calculate = function(self, card, context)
if context.post_trigger and context.cardarea == G.jokers then
if context.other_ret.jokers and context.other_ret.jokers.mult or context.other_ret.jokers.mult_mod then
card.ability.extra.Xmult = card.ability.extra.Xmult + card.ability.extra.Xmult_add
end
end
if context.joker_main then return { Xmult = card.ability.extra.Xmult } end
end
something like this
Goodnight everyone
good night! sleep well!!
cya
thank you x100
omg

goodnight s
^ this too btw @warped radish
notedd!
Goat
aa i'll have to explain what the deck does for that, so basically when you use the active item (card above the long use button) the next used consumable won't be triggered, instead it will be turned into a locust with its own unique effect that relates to the consumable (each consumable has its own locust). So when you press swap you will see all of your locusts arranged which makes things a lot less cluttery and prevents weird interactions between jokers and locusts (i used to have both in the same area before)
it's just a visual thing
it has no impact on the gameplay
Can i see it ?
yup! I'll record it
where is this?😅
aa tyty!!
I'd keep VanillaRemade open on your end, it is a boon for beginners like yourself

VanillaRemade my beloved
If there's a joker that adds a random joker at end of shop will context.post_trigger catch it as the joker triggering? Even If the joker doesn't return anything in the calculate function

it's Excelsior OST from the binding of isaac
the music is mostly just there because I personally use it, i can't rly use it in the mod but god damn it would fit so well if i could
I love the idea and btw
You can attach a button to the card
Instead of using the massive use button
oh yeah i know i just thought this looks cleaner, i couldnt rly get a proper button to work on this card area
Ah i see
I really do like the idea and the art
thank ruby for the art
it is really beautiful
this project wouldnt even be half of what it currently is without Ruby's help
i went to go test my mod, put it in my mods foulder but its not showing up when i open the game?
any way to make the duff sticker incompatable with the rental sticker
do you have a .json for the metadata?
yea
it should show up unless you didn't properly specify the main file 
? :(
Show the JSON
yeah invalid version
o
should be 0.0.1~beta or smth
Is prefix comment a thing?
i think so
is it something in the compat_exceptions or should apply
cryptid does it on dev versions
i tried both but not sure if i did it right
read the documentationnnn
https://github.com/Steamodded/smods/wiki/Mod-Metadata
i think having extra fields in the json that aren't read just doesn't do anything, so it can be used as a comment. which is helpful because json doesn't actually have syntax for real comments
jeez i should have gone to this server first, the yt vid i watched gave me pretty much no info DX
tysm!!
There are YouTube tutorials,?!?
there are some
not good ones, thats for sure. dude give the bare minumum of info and called it a day sigh
yeah but theyre all very old and sucky because yk. cant update a yt vid
yeah thats kinda the problem with a lot of them
and yeah the main problem is that they can get outdated stat
not a fault of the youtuber more of the fact youtube doesn't offer some sort of service of updating your videos
that's why often you see an addendum in either a new video or a pinned comment
yeah
very true
Another competing platform just for coding tutorials 🔥
i tried both card.rental and card.ability.rental and both don't seem to work
has someone have done this before where they made a sticker that isn't compatible with one of the vanilla stickers
yo im tryna change my jokers description mid game and what the vanillaremade wiki told me to do didnt really work
i know yahimod changes description for bee and horse after spawning and triggering obviously not the best way to get code but its worth a try
you can return a key in loc_vars, which makes it draw from a different localization key
https://github.com/Yahiamice/yahimod-balatro/blob/aaffff54cf7572afb84b8bd83c1c19b498b14d13/items/jokers.lua#L4044
https://github.com/Yahiamice/yahimod-balatro/blob/aaffff54cf7572afb84b8bd83c1c19b498b14d13/items/jokers.lua#L1284C1-L1284C6
yeah thats what i did
you actually need a localization entry with that key too
yes yes
that fucking horse that i hate
i have a new entry with the modjoker_alt
i cant tell what i did wrong?
looks like that is what yahimod does or at least for horse it looks like it has another joker called horse bait
this is probably so for stuff like the win tarot card or the horse it can just spawn the regular horse
Missing comma
We've all been there for the comma's
i was gonna say, feels weird adding something that says "do nothing" lol
also the variables in your calculate dont match the ones in your config but im gonna assume youre changing that after
i swear ill be working on this months from now and that will still be what i always forget
oh? how so
It's not that bad
it does that normally
Especially with a code editor with an lsp
someone did the calculate part of this card for me, i dont really know how it works yet
Someone 🥲
the some one :)
ok so i think i did this and now the joker has no localization for some reason
its fully blank now
The ping 🙏
you need to set Xmult to 1 and Xmult_add to whatever you want it to increase by in your config's extra table
OOOH, tyty. also sorry for the ping, forgor to turn that off
I'm on an alt account so it doesn't bother me dw about it
vars = {card.ability.extra.mult, card.ability.extra.x_mult, combo},
key = {card.ability.eternal and "j_nebula_phobos_alt" or nil }
}
j_nebula_phobos= {
name = "Phobos",
text = {
"{C:mult}+40{} Mult if",
"played hand contains a",
"{C:attention}Four Of A Kind{}",
"{s:0.9}Part of the {s:0.9,C:diamonds}Mars{}{s:0.9} set (1/2){}",
}
},
j_nebula_phobos_alt= {
name = "Phobos",
text = {
"{C:mult}+40{} Mult if",
"played hand contains a",
"{C:attention}Four Of A Kind{}",
"{s:0.9}Part of the {s:0.9,C:diamonds}Mars{}{s:0.9} set (2/2){}",
}
},
i literally copied the key from the wiki and made a new localization with the _alt in front
like this SHOULD work
If youre changing one number you shouldnt do this
Just use a variable returned in loc_vars
how would i do that
Add next(SMODS.find_card("j_nebula_deimos")) and 2 or 1 to the vars return
how do detect if a certain joker is in your jokers
Add next(SMODS.find_card("joker_key")) to the vars return your code
SMODS.find_card("j_modprefix_jokerkey")
, true) if you want to find debuffed jokers too
and don't forget the next() if you're checking in a condition
does this return a boolean
also yay discord back
though this could break with a showman, the issue is that i have a card that plays music on loop and gives you money when it ends, but it activates in the shop (the code is in an update function)
next() returns the next item in a table, nil if there is none. Because SMODS.find_card() returns a list of jokers, and {} by itself in a condition is considered true, nil however is considered false, wrapping it innext() makes sure that a condition evaluates correctly
basically its just this
this fixed it running in the collection
but not in the shop
which update function?
Why are the playing cards turning blank and the blind activate sound playing at the start of the hand? Its turning into stone at the end but the rest is happening before, I am confusion 
Try putting the blind:wiggle() and everything after in another Event
try checking G.GAME.used_jokers[joker_key] in the condition instead
not 💯% sure that's quite the right thingy but should be fine
wait are you also trying to not have it run in the shop?
is used_jokers the current jokers you are using
yeah basically
just not have it run when you're not using it
otherwise the song i put plays
it's a map of their keys to be specific, so kinda yeah
wouldnt this break with a showman
hmmm why?
because the joker key
like used_jokers would return the proper key so it would play wouldnt it
actually wait i figured out a workaround
set a value when the joker is added to the deck
theres definitely a more efficient way to do this but who cares
used_jokers is just a table like this;
{"j_key" = true}
showman doesn't affect it
Ooh you right
yeah you should probably use added_to_deck or similar
should it run during the blind only?
how would this update the description
this should work
no it runs forever
This screenshots is crazy
In your localization text, #1# is replaced with the first entry of vars, which you return in the loc_vars function of an object
I see
how would i stop all sounds a joker is playing
Oh god
Quite frankly;
I have no idea :)
Good luck lmao
you'd probably have to take a look at the SOUND_MANAGER and related
or better yet
preexisting code
can't you use select_music_track for this
why do you do it in update
well because im such a good modder of course
also because it does something when the music track ends
thats why it loops
Now call me crazy
how would i do select_music_track though
but could you just set up a timer that has the length of the music you're playing
thats what it does
just make the music the highest priority when you have the joker
i just use play_sound
if you're already using a timer it will work the same
Thx that helped and the stuff is happening after but the cards are turning blank in the animation not into stone? (they are turning into stone its just not showing it properly I assume?)
Any idea how I can fix this?
so how would i do that
read the docs
not sure how to use select_music_track and priority
oh ok ty
hmm strange
maybe try scored_card:set_ability('m_stone', nil, false)
still not sure
🌈 you got this 🌈
well like how would i change the priority
a global variable?
yeah ill just mess around utnil i've broken every single joker
perfect
no, the return of select_music_track
if you return a high number the music will have higher priority
that's what the docs say
Huh that fixed it weird
Why does Midas mask have nil to true?
that last param was delay_sprites
I know why (somewhat);
midas mask happens before scoring, the animations of the cards goin up and the slight delay after happens after midas mask is evaluated
so if it immediately changes the sprites of the cards it has turned to gold, they would turn to gold before fully finishing the pre-scoring animation
so it sets delay_sprites = true (the 3rd param) in the call to set_ability
but for after scoring, delaying the sprites appears to achieve the opposite effect, where they don't get updated in time before they are removed from the playing area
so that's why you want to call it with delay_sprites = false
do i just rename it
yeah the key has to have 'music' in it
that's hardcoded?
...isn't that erm.. interesting
I think SMODS should change it so GameObjects are only considered Jokers if they have 'joker' in their key 
the joys of bringing a whole load of different people's work together in the initial smods days 🤣
is there a way to apply debuffed to a joker .. from a joker ?
actually wait i just remembered something let me try it
SMODS.debuff_card(joker, true, "source")
okay well im kinda doing it but right now when i move around the joker it doesnt update the debuff until i click on another joker
ill send the code in a sec
its prolly stupid overengineered
is it possible to affect the entire deck? if i wanna remove a specific edition from all cards in the deck for example
calculate is only run when certain things happen, if you want to apply a continuous effect like this you would either have to add a call to calculate when you move a joker or use update. i dont know what's better because an effect like this is kinda janky haha
ye yea ofc
yeah just loop through G.playing_cards
How would this work against boss blinds
It's a cool concept
damn i had the same idea as well
I used update for a similar effect
okay, i think the joker works pretty fine as is right now even if the calculate thing is a little off
yaay
when the documentation is helpful:
https://github.com/Steamodded/smods/wiki/Mod-Metadata
inside of your manifest.json file
"badge_colour": "4A412A",
replace the hex code with the color you want
thank
Hey, how hard is it for me to make it so that you can enable and disable groups of content (including vanilla content) in my mod?
updated the description because of a funny edge-case which i decided to leave in
wait what about this
i could make it where it doesn't count negatives
also not sure if that's the right word basically lose a dollar per non-negative joker you have
so item remover?
not necessarily
I mean i guess it's a remover, but more a filter in a sense
See, I'm planning to port everything from older versions of Balatro, I wanna have the possibility someone can play with just for example: 0.8.6 content in one run, but then 0.9.0 content in another, or have a mix of 0.8 and 0.9 content,
because the chaos option of every version would mean you'd have dozens of the same joker but from different versions
Is there a way to put discarded cards back into the deck?
also to change the playable hand size?
Ortalab has a boss blind that does the back into deck part
and I think cryptid has some playable hand stuff
mm okay
Free Spectrum every hand.
whats a spectrum
A hand with 5 different suits.
Bunco and Paperback has that kind of hand.
it would probably just count as a flush
as it just returns true for any :is_suit() check
if spectrum is above a flush (which it probably is) then it'll be prioritized over flush, and at least with paperback's code for spectrum it would count as a spectrum
What am I doing wrong here?
ive updated smods to the newest version where it has support
you possibly didn't save your code. the code screenshot references booster_choice_mod, but the error says booster_size_mod
alternatively your code screenshot just isn't relevant to the crash. the "1827" in the crash is the line number

nope
genuinely lost, i've never had this error before, im pretty sure i did everything correctly
try (G.GAME.modifiers.booster_choice_mod or 0) + 1
you can see that the local variable is never used because it has a darker color, this is because you misspelled it
i put mix instead of min-
it's 1-4 on the current joker since its 75/25, if it isnt 1, then run the other calculation
(which i realize now is not what the card says-)
no i mean that it will run in every calculation context so for example when you click on a card
^ the else is on the whole (context.joker_main and random_number_from_min_to_max == 1)
also do you want this to be affected by oops?
yeah
uh... maybe for this one, i dunno about the stronger versions though since those go X#,X#,^# and ^#,^#,^#
imo if there are other unaffected versions then this one should be unaffected for consistency
but if you want it anyway i would recommend looking at cavendish in vanillaremade
if not then keep doing what you're doing
yeah, im gonna have a way to fuse jokers to make stronger varients
starts as Little Siblings, then Middle, then Big siblings. if you have big sibling + another joker/item, then you get an exclusive
i'll just leave them as is
also im still crashing, same error
it's because of
shouldn't it only run if it's context.joker_main though?
that's what i have the calculate as
if context.joker_main and random_numberblahblah then
calc 1
else
calc 2
the condition says: if it's joker main and the number is less or equal to 3 then do this, in every other situation do this other thing
you don't want to give xmult in every other situation
so i need to do "elseif context.joker_main and (longname) == 4 then"?
yeah or just put everything inside a joker_main check
i would recommend so anyway because pseudorandom can be manipulated otherwise
for doing that, wouldn't it just be
if context.joker_main
return {
if (longname) <= 3 then
calc 1
elseif (longname) == 4 then
calc 2
}
no because you can't have if statements inside a table
-# i dont have my flower mod to look over to ;-;
what would i do to have it only run with joker_main?
if context.joker_main then
if condition then
return {}
else
return {}
end
end
ah
i actually recommend doing the pseudorandom thing inside joker_main too, so you aren't making a ton of unnecessary pseudorandom calls in every other context
true :3
also if you have pseudorandom out it can be manipulated by the player by just clicking cards
so i'd put pseudo into the return tables...?
no 😭
-# im slow okay
-# ;-;
if context.joker_main then
local (psuedo code)
rest of code
?
basically yeah
okay, also, just so i don't have to type random_number_from_min_to_max, can that just be replaced with anything?
ah
also vscode should suggest variable names if set up properly so you never have to type them all out yourself
well, my school internet sucks and wont let me connect to github at all
so i can't get any suggestions 🤷
it doesn't use internet
agent doesnt work, the vscode suggestion thing uses agent
i can't connect to github to use agent, can't use suggestion
yeah, that also does the vscode suggestion
now im lost, what other suggestions are you talking about then?
-# also the code works now, no crashing :>
not AI ones, normal intellisense stuff
are you talking about when you're typing and it tries to autofill?
if so, that doesn't work for me
the only time that works is when im putting a comment, anything else and it doesn't try to autofill
i mean the vscode extension. it's not mandatory to make lua files
but it's what gives you the suggestions
can't get it even if i wanted to, school internet sucks. it's only allowing discord
-# im complaining about the school internet, but i know that it's my laptop that sucks
once im back at my dorm i'll swap my pc's ethernet to my laptop to download it
yeah i have that
then its weird you dont get suggestions lol
i mean, it works on my pc, which is connected to ethernet
-# and has agent, so i dunno
does anyone know how you can render a sprite in front of the screen
trying to do a screen effect
wait i might have figured it out
almost answered then i read the rest 🥀
how do i destroy the joker in the code
so i'
m giving my mod to my friend to try
and he says that all of the sprites are invisible, even though they work completely fine on my end
SMODS.destroy_cards(card)
does he play on a different pixel smoothing setting
i figure, i just left the 2x sprite folder alone because 1x was working for me
does anyone know where i can scale my sprite sheet ?
your best bet is aseprite (that's paid unless you compile it yourself, i recommend libresprite as a free fork of it)
how do i check for context.blueprint in an update function
Blueprints don't copy update functions.
oh alright
update function doesn't get any contexts
what's your actual goal here
i forgot to add code to prevent blueprint from activating when it isnt supposed to
so i went through the jokers
oh yea, then you don't need to do anything special. like something said, blueprints can't see update functions at all
Hey, I'm mostly just someone who replaces and makes textures, is it possible to replace a specific sound effect only in specific circumstances?
My current example is I want to replace the click sound of Again with Neon Green from Neon White saying Again, but I don't want it to change the rest of the cases where it makes the click sound
yeah, whatever object causes the retriggers, have it also return a sound key
like this https://github.com/wingedcatgirl/MintysSillyMod/blob/main/jokers/scoundrel.lua#L65
Thank you!
im trying to make a joker that adds an additional effect to polychrome cards, but it doesnt activate, am i doing something wrong
editions are tables, not strings
if card.edition and card.edition.key == 'e_polychrome'
oh alright
I have realized I posted that in the wrong channel…
debugplus is great for this kind of thing, because you can easily check stuff like "is card.edition actually what i think it is?"
Have I earned my certification of insanity yet?
doggos...
is that toby fox i see
Correct 
deltarune deck skin for 2025 update frfr
Yes you have
Pixel art is difficult
I made it work somehow
I hope you know we're on 872 rn 😭
872?
Yeah the smods version
You're on 406
I wonder how different it is
Although the mod still runs perfectly fine on that version since others have tried it
It's far more developer friendly
Though most of your stuff should still work in theory
Is it?
For the title screen I had to force overwrite the title screen ui 
Okay I’ll do it rn
If you used a hook for that you should be fine I think
I did
good
Have people actually modified the main.lua before?
wdym by that
Like directly
Like through patches?
I just spent like over an hour trying to figure out why a line wasn’t working just to realize it was working the whole time I just accidentally put it in a if statement of a previous effect
somecom on his way to ask the most niche questions about seals known to man
Do you know what a lovely patch is
Because if that's what you're talking about then yes, plenty have done that
Must be scary
No not really
That explains a lot
I might as well get rest
And then continue my monstrosity tomorrow
I will be taking my leave 
Is it bad that i still code using notepad 😭
bad as in painful for you, i imagine
Its not even that bad to work with for me though
Certainly a way to code
certainly a way to code
Ive gotten so used to lua that i dont even need the formatting anymore
I used to that for modding another game I played, it’s a lot less painful in vsc imo
I might consider switching if i find it to get tiring
It’s basically the same thing ngl but the colors for stuff helps
Its so weird to see just how far my mod has come
It used to be just simple retextures
Then i figured out how to make custom jokers
And its just evolved into a whole fiasco of things
Yeah a lot of my first jokers were basically ripoffs of example jokers
I showed my english teacher my mod and he asked if i could make him a joker
So i did 😭
Tbh idk if anyone in my school knows Balatro
and if they do idk if they’ve gone down the rabbit hole enough like I have
I got my friends at my school hooked to balatro
I got some irls who don’t go to my school addicted
and some online friends addicted to balala too
Sir
(:
Hello latro enjoyers
I was actually gifted balatro as a birthday gift by one of my friends
Sir this is a Wendy’s (#💻・modding-dev)
Then their birthday rolled around, so I gifted them the game too 😭
Ok bye bye
I bought it on my phone personally and got hooked
I know my friend got their dad hooked
Then I discovered mods like cryptid and it has devolved into this obsession
Balatro is just an addicting game in general
And i feel like mods add another layer onto it
lest we forget the fact that now YOU'VE got me hooked
Jimbo does that to you
Even if its something as "small" as talisman, you can still do alot more
Ngl I’ve def made a lot
I have too
Idk what my favorite is tho per se tho I did like finishing making the “One” from TPOT joker
Ive made warioware into a fucking joker 😭
A really stupid joker i wanna add is like
A teamwork joker
That uses http requests so that if 1 person upgrades it
It upgrades for everyone else
That would lowkey be interesting but idk if you could abuse it
Using like debugplus or something
Maybe one that checks if debugplus is installed
Also whats the upside to this joker? I dont really see one.
-# (ba dum tss)
Mine tries to be relatively balanced but it’s definitely not
I have one that levels up a hand by how many times it’s been played, and one like misprint but XMult ig
I mean all the ones seal really does bc I’m not too original is just give a spectral when discarded
Oh fire
Ive made a joker that literally adds several new hand types
(6 to be exact)
Tbh idk what I would add that would work
Because it lets you select 1 more hand, and lets you play ✨ six card exclusive hands ✨
Maybe one if it contains all prime number ranks or something
I actually put that into a voucher
I would find six card plays interesting but it seems a bit cryptid-like to me or something
I called it a "Gay" because "Haha opposite of a straight"
Nah you gotta call it that when it’s all polychromes in a straight
I scaled it based off of their 5 card cant counterparts
If I was insane id add more ranks but im probably not unless I go crazy
1000000 of hearts let’s goooo
Two Pair scales to Three Pair
Three of a Kind scales to Two Three
Full House scales to Fuller House
Flush House scales to Flush Full
FoaK scales to SoaK
Flush Five scales to Flush Six
I actually added 6 new suits for a tarot
"The Amalgamation"
"Select 2 cards of the same rank, and combine their suits."
I’m keeping the suits the same tbh
I mean they technically arent new suits
Just combinations of the old ones
But they count as both suits :]
I was considering adding 3-Combos and possibly even a 4-combo, but i decided against it for now
You gotta make the Cluheiamonades (club-hearts-diamond-spade) when combining a four combo/j
I just mashed all four together but still
It would be called a Spheamolubs
The naming follows a sort of priority system
Spades>Hearts>Diamonds>Clubs
Ah
So Spades+Diamonds = Spamonds
is there a way to get the screen width in the same scale as the offset values of ui so i can always have a ui element on the edge of the screen
cant you just use love.graphics.getWidth and getHeight and then do what you gotta from there
or getdimensions actually https://love2d.org/wiki/love.graphics.getDimensions
im not sure honestly
you can get that number from G.ROOM.T.w iirc
oh nice
that number is specifically 20 for me
so i guess ill just do the screen width minus a little bit
& prolly make it update(?idk if that really matters tbh)
im pretty sure if you're trying to put something there you need to subtract the width
depending on alignment
you can prolly just be imperfect though
ya the main thing is i just want my new ui element to be offscreen until i slide it onto the screen when i need it
true
putting that on the bucket list
is it possible to have mult/chips effects delay smaller?
I know next to nothing about what I'm doing here so this is probably embarrassing but does anyone know why my sound doesn't play when a retrigger happens
how do i change the pitch of the sound played in here
pitch = number
how do i make a deck have only face cards? reverse abandoned deck
Maximus Autographed deck kinda does something like that
You would remove all non-face cards in an event in apply
I think I have my files named and ordered right so I'm at a roadblock
Card:calculate and context.retrigger_card don't exist.
how do you put a message on a card outside calculations?
SMODS.calculate_effect({message = "message"}, card)
thank you
Trying to make an Xmult Ceremonial Dagger that scales based on sliced card's rarity, but I dunno how to check the destroyed joker's rarity without it creating an error
calculate = function(self, card, context)
if
context.setting_blind and
not context.blueprint
then
local my_pos = nil
for i = 1, #G.jokers.cards do
if G.jokers.cards[i] == card then
my_pos = i
break
end
end
if
my_pos and
G.jokers.cards[my_pos + 1] and
not SMODS.is_eternal(G.jokers.cards[my_pos + 1], card) and
not G.jokers.cards[my_pos + 1].getting_sliced
then
local sliced_card = G.jokers.cards[my_pos + 1]
sliced_card.getting_sliced = true
G.GAME.joker_buffer = G.GAME.joker_buffer - 1
if context.jokers.cards[my_pos + 1].config.rarity == 1 then -- WHERE THE ERROR IS (jokers.cards[my_pos + 1])
G.E_MANAGER:add_event(Event({
func = function()
G.GAME.joker_buffer = 0
card.ability.extra.joker_score = card.ability.extra.joker_score + 0.4
card:juice_up(0.8, 0.8)
sliced_card:start_dissolve({ HEX("ec8957") }, nil, 1.6)
play_sound('slice1', 0.96 + math.random() * 0.08)
return true
end
}))
elseif
context.jokers.cards doesn't exist, also it would be card.config.center.rarity
alright, got a few errors trying to impliment something like that? this is where I'm at now
if context.card.config.rarity == 1 then
ok, adding center to it
context.card doesn't exist in context.setting_blind
I'm stumped on what context will get the sliced joker's rarity to be read when blind is selected, then
sliced_card is the sliced card.
it's not a context. literally you can see elsewhere in your code (that i assume you borrowed from vremade) that you access jokers with G.jokers.cards[index]
and yes the vremade code also literally sets sliced_card to the card that's being destroyed
I understand how the code functions to identify the right joker, then assign it as the card being sliced, but I'm still attempting to get it's rarity to then decide what Xmult to add
if sliced_card.config.center.rarity == 1
sliced_card is a nil value when I put it in the context
Code?
brain's finally working. had to remove context.
Sorry for the headache and tyasm for the help lmao
How would I randomize the rarity like how suits and ranks work
Cause I just did a 1 to 4 thing but it would be cool if it worked for other modded rarities
Get a pseudorandom_element from SMODS.Rarities
Hm
You would use rarity.key
localize('k_'..rarity.key:lower())
Thank you
Okay it's working for modded rarities, but when it comes to the base rarities it doesn't register
What do you mean it doesn't register?
This legendary doesn't appear from the Soul spectral card, but my others do. Is there anything blocking it?
SMODS.Joker {
key = 'thunderlord',
loc_txt = {
name = "Thunderlord",
text = {
"Gains {C:blue}+#1#{} Chips for every {C:enhanced}Enhancement{} in deck,",
"{C:red}+#2#{} Mult for every {C:attention}Seal{} in deck,",
"and {X:red,C:white}X#3#{} Mult for every {C:dark_edition}Edition{} in deck",
"{C:inactive}(Currently{} {C:blue}+#4#{} {C:inactive}Chips,{} {C:red}+#5#{} {C:inactive}Mult, and{} {X:red,C:white}X#6#{} {C:inactive}Mult){}"
}
},
blueprint_compat = true,
perishable_compat = true,
eternal_compat = true,
rarity = 4,
cost = 20,
atlas = 'JokerPackOne',
pos = { x = 1, y = 0 },
soul_pos = { x = 1, y = 1 },
config = {
extra = {
chips = 80,
mult = 10,
Xmult = 1
}
},
loc_vars = function(self, info_queue, card)
local enhance_count = 0
local seal_count = 0
local edition_count = 0
if G.playing_cards then
for _, playing_card in ipairs(G.playing_cards or {}) do
if next(SMODS.get_enhancements(playing_card)) then
enhance_count = enhance_count + 1
end
if playing_card.seal ~= nil then
seal_count = seal_count + 1
end
if playing_card.edition ~= nil then
edition_count = edition_count + 1
end
end
end
return {
vars = {
card.ability.extra.chips,
card.ability.extra.mult,
card.ability.extra.Xmult,
card.ability.extra.chips * enhance_count,
card.ability.extra.mult * seal_count,
1 + card.ability.extra.Xmult * edition_count
}
}
end,
calculate = function(self, card, context)
if context.joker_main then
local enhance_count = 0
local seal_count = 0
local edition_count = 0
if G.playing_cards then
for _, playing_card in ipairs(G.playing_cards or {}) do
if next(SMODS.get_enhancements(playing_card)) then
enhance_count = enhance_count + 1
end
if playing_card.seal ~= nil then
seal_count = seal_count + 1
end
if playing_card.edition ~= nil then
edition_count = edition_count + 1
end
end
end
return {
chips = card.ability.extra.chips * enhance_count,
mult = card.ability.extra.mult * seal_count,
Xmult = 1 + card.ability.extra.Xmult * edition_count
}
end
end,
in_pool = function(self, args)
for _, playing_card in ipairs(G.playing_cards or {}) do
if next(SMODS.get_enhancements(playing_card)) then
return true
end
if playing_card.seal ~= nil then
return true
end
if playing_card.edition ~= nil then
return true
end
end
return false
end
}
Yes, you need to use card:is_rarity()
<@&1133519078540185692>
Smh
these yellow highlights really fucks me up
Do you not have the lovely dump in your workspace?
this is a different workspace i think, ill add it
thanks for reminding me
how do i make the chips going faster?
That’s the native speed no?
yeah
but is it possible to individually make it go faster?
i remember ortalab doing smt like that
You can check in github bro😭
downloading means i get access to better searching in vsc though
Makes sense
yeah its this one
Yeah that one is fast
Eremel is so cool
i do wonder why its G.C.RED and not G.C.MULT though lol
how do i change the sprite of an joker during a calculate function? more specifically changing the "pos" in the atlas
card.children.center:set_sprite_pos({x=number, y=number})
thanks!
no clue what's happening here but it's 100% related to my card areas. It happens when I go into a blind with any deck and then try to start a new run with another deck or try to exit to the main menu.
can you show me the code where you patch the area for calculation
[[patches]]
[patches.pattern]
target = '=[SMODS _ "src/utils.lua"]'
pattern = "-- TARGET: add your own CardAreas for joker evaluation"
position = 'before'
match_indent = true
payload = '''
if G.pactive_area then table.insert(t, G.pactive_area) end
if G.locust_area then table.insert(t, 1, G.locust_area) end
'''
does it fix it if you do if G.pactive_area and G.pactive_area.cards then (and the same for the other one)
Oh it seems like it did work? I have to check out a few other things to make sure everything is working normally
Yes it does work !!
Thank you so much @red flower, you've helped me a bunch over the past few weeks (counting in vanillaremade as well
)
which one is grey as seen in "(Currently +x Mult)"
inactive
Wow thankyou
dark_edition is for editions and the word Legendary and Edition
green is for probabilities
there is also mult and chips colors iirc
the rest should be self explanatory
should i use them instead of red and blue?
and whats attention
attention is the basic highlight
a lot of jokers use a lot of attention
it grabs your attention
orange?
ok thanks
if you need xmult or xchips
you do {X:mult,C:white}
mult is the color of the box and white is the color of text inside it
you can also add the arguments S:x inside the brackets
S: changes the size of the text
if you set E:1 the text is wavy
thats pretty much everything
yeah thankyou
use mult or red on non background text (+mult)
Hi! How do I localize custom poker hands?
prefix_name = {} doesn't seem to work inside poker_hands and poker_hand_descriptions in my localization file
i have a deck but it gives 3 random jokers not just jimbos
key = "jimbo_deck",
loc_txt = {
name = "Jimbos Favorite",
text={
"Start with 3",
"{C:green}Vanilla Jokers{}",
},
},
config = { hands = 0, discards = 0, consumeables = 'c_opentolan'},
pos = { x = 1, y = 0 },
order = 1,
atlas = "Decks",
unlocked = true,
apply = function(self)
G.E_MANAGER:add_event(Event({
func = function()
if G.jokers then
for i = 1, 3 do
local card = create_card("Joker", G.jokers, nil, nil, nil, nil, nil, "yahimod_deck")
card:add_to_deck()
--card:start_materialize()
G.jokers:emplace(card)
end
return true
end
end,
}))
end,
})```
Also... Do I have to connect dictionary in my localization lua to the jokers or something? Because for e.g. joker names are showing up just fine but when I use message = localize('prefix_name') it shows up as error
sorry for the misunderstanding i mean that red text, is it C:mult or C:red
my deck wont spawn 3 jimbos why?
can you show your localization file
sorry
both are the same
ok thanks
N can you help me with my deck problem
also there's a page on the smods docs about the colors
yeah i should probably refer to them before asking here
use smods.add_card
i did but it does add random
you did it wrong then
scroll up a bit and look at the code
i did, you're not using add_card
That is in .lua obviously, as jokers work as they should
G.E_MANAGER:add_event(Event({
func = function()
if G.jokers then
for i = 1, 3 do
local card = add_card("Joker", G.joker, nil, nil, nil, nil, nil,)
card:add_to_deck()
--card:start_materialize()
G.jokers:emplace(card)
end
return true
end
end,
}))
end,
})``` is this more correct
no
for i = 1, 3 do
SMODS.add_card({key = 'j_joker'})
end
why is canio spelt caino 🫠
misc is inside descriptions
it should be outside

play the deck if you really love jimbo
"why is consumables spelled consumeables" 
C:mult and C:red use the same colors, its only really important for Trance (the mod) which changes colors of stuff
can you add an animated joker in game?
so its usually suggested you use them correctly to not have Trance changing colors in unintended places lol
yes, id recommend looking into mods that have already done that
what are some of them?
Tangents i think
ah, thanks
Thanks
good luck
Are aces generally considered number cards?
ooooh ok makes sense, didn't notice that
No, they are non-face cards.
probably should just say 2-10 to be clear (played 2's-10's??)
incantation says numbered cards and that doesnt include the ace so it's a vanilla term
last I checked the ace doesn't have a number on it
dang im weird
is there an info card for enhancements in general
can you elaborate
dw abt it how to pick pseudorandom element from list
" (i.e. affected by Oops! All 6s)" not sure how oops would affect picking a random number a to b
i'm new to this and idk what the error is here (probably just made some stupid error)
you are missing a ,
how would i make something happen when a key is pressed?
SMODS.Keybind?
i should probably elaborate further:
i want to cycle through a list on a joker when a key is pressed, how would i go about doing this?
where do i have to put it?
-# why does that sound like description pages
on the line above
after the } here
ok thanks
- set up SMODS.Keybind
- check for what joker is hovered
- if it is the joker you want, do stuff
if you want to refresh the description easily then you can do card:stop_hover() -> card:hover()
how would i check the current joker hovered?
hook to card:hover()
you dont need to do that
wuh
hey y'all, trying to make my first mod! How can I make my joker look at and modify the played hand?
sorry for asking another question, but what do i have to do here?
is there a thing to check for hovered cards now
your SMODS.Joker has two config i think
local selected = G and G.CONTROLLER and (G.CONTROLLER.focused.target or G.CONTROLLER.hovering.target)
oh
idk why i check for G
and can i directly access the card's ability from here?
yeah
how would i get its key
i remember asking about questions relating to checking for hovered cards at least 2 times here nd no one brought it up so i didnt know :p
card.config.center.key
thats a really long if statement
how do i get a table of all of the suits?
if i try to deleate one of the config it creates many errors
show the code
SMODS.Suits or SMODS.Suit.obj_buffer
quick rebump :)
modify in which way
but the played hand should be G.play.cards
this is the code part where the two config are
its not
the joker i'm trying to make would convert each played hand to a flush house, so for example it would take the suit and rank of the first card to make the 3 of a kind, and then take the second card to make the pair
this is the result
remove the }, at the beginning
thanks
how would i get the name of a suit?
from where
SMODS.Suits
what for
so i can display it on the joker
basically what my joker does is:
Prioritize drawing [RANK]s and [SUITS]s first.
Press R to cycle rank
Press S to cycle suit
do you have the suit selected
it starts off as "Hearts", but in the keybind i have it saved as "index"
imagine people try to hold R thinking it will cycle through the ranks quicker and it restarts their run instead lmao
can i see the code, its easier to tell you if i know what names youre using
SMODS.Keybind{
key_pressed = "s",
key = "andrew_suit_cycle",
action = function(self)
local card = G and G.CONTROLLER and (G.CONTROLLER.focused and G.CONTROLLER.focused.target)
or (G.CONTROLLER.hovering and G.CONTROLLER.hovering.target)
local suits = SMODS.Suits
if card and card.config and card.config.center.key == "j_JCJ_j_andrew_ex" then
local current_suit = card.ability.extra.suit
local index = 1
for i, suit in ipairs(suits) do
if suit == current_suit then
index = i
break
end
end
index = (index % #suits) + 1
card.ability.extra.suit = suits[index]
end
end
}
oh ok, i think SMODS.Suits is not integer indexed
i'm trying to start the game with my mod but it crashes with this log, what's the problem?
youre missing a required field
your joker doesnt have a key
why did you remove that too 😭
add it back
ok
partially my fault for having the cross a bit too big i guess
also in Jr case maybe we can use pseudorandom_element or something to have a table of suits thats consistent to cycle through 🤔
try using SMODS.Suit.obj_buffer
idk
is this integer indexed?
it sorts the suits alphabetically
it has the objects in a integer indexed table
oh
i think
is the order consistent when you reload the run/game though 🤔
its alphabetical
i would assume yes if it loads depending on mod order idk
so unless if the alphabet gets an update after you close your game, no 😭
then the suit would be SMODS.Suit.obj_buffer[index] and you can get the name with localize(SMODS.Suit.obj_buffer[index].key, "suits_plural")
there can still be the issue of three suits having the same starting letter if you go for that approach so yeah
i dont think it is
maybe for the vanilla suits
im pretty sure its just load order
now it does this when i hover a joker
whats the code
of the joker?
idk
change it to card
also you dont need tostring
ok
its fine, you should refer to SMODS.Joker wiki to make sure you got everything right :3
ok thanks
also for this one, i think you want to change the cards in context.modify_scoring_hand
probably press_play
that could work yeah
THANK YOU! :D
so when i try to load SMODS.Suits.obj_buffer[1], it returns nil for some reason??
and then nil 😔
Ive been somewhat working on a frutiger aero themed mod (prolly jokers only) but idk how to make my legendary idea work since im using joker forge.
My idea was that it doubles the effects (probabilities and multipliers alike) of all cards to its right.
SMODS.Suit.obj_buffer only contains a table of strings btw (at least, for vanilla suits) so you dont need the .key part mentioned in here
you can do the probability one using context.mod_probability and doing the same thing as oops but checking if the joker is on the right
value manip is harder and would probably require something like cryptlib
i dont think its possible with jokerforge idk
how do i get the card's text to update when i use the keybind
you're not seen mine
Also need some advice on if this is balanced or not (do plan on making butterfly more expensive)
selected:stop_hover()
selected:hover()
gulp
what's a good way of turning all my consumables negative inside an event
for _,v in ipairs(G.consumeables.cards) do
v:set_edition("e_negative")
end
in the event's func?
i had my variable saved as card so when it crashed i got confused 😭
yeah
before I waste time on this:
is it possible to set an animation atlas for joker art?
I SHOULD PROBABLY ALSO LOCALIZE THE RANK
Me and all my homies love the 14 of spades 🤑
it would be nice if you can stylize the suit part to its respective suit color too lol
whats the function to localize the rank again
localize("key", "ranks")
im getting to that, i just wanna make sure the text actually works before adding stuff
im guessing key is a number?
.
One day I'll make extended Balatro UI guide
i have the rank stored as a number
Which will include localization lul
how would i go about converting that
well dont
what table do i have to cycle through this time 😔
SMODS.Rank.obj_buffer should be similar
what does front and center even mean in create_playing_card() ? im sorry for interrupting.
front is the rank and suit, center is the enhancement
dont use create_playing_card tho, use SMODS.add_card
N' should i make herta randomly play between kuru kuru and kuru ring sfx instead or just the first one
random
check aiko's mod
how would I add a button to the win screen? 
how'd i do that for just planets instead of all consumables
check for card.config.center.set == "Planet" i think?
and now i cant find it in the wiki...
it's in utility functions
gulp
is that herta's key/hammer ?
hammer, yeah
dope
the angle is a bit too bad to cover the hammer head unfortunately ;-;
i dont feel like redrawing her yet though so i will keep it like that for the time being
still looks nice 👍
for _,v in ipairs(card.config.center.set == "Planet") do?
inside the func?
im more proud of my recent works like this one lol
inside the for loop you added earlier
alr
that one is so cool
i wish she was good
if you invest into her a lot then she can still 0cc moc i think
:p
i dont think i will
for _,v in ipairs(G.consumeables.cards) do
if card.config.center.set == "Planet" then
v:set_edition("e_negative")
play_sound('generic1', 0.9 + math.random() * 0.1, 0.8)
end
fair
could it be like this then
change card with v
it was either between that and this one, but the sig lc's bg looks much more clean imo
alr ty 🙏
so i somehow managed to get the complete OPPOSITE effect of the joker i wanted
also what function would i call to reshuffle the deck?
actually wait im stupid
CardArea:shuffle()
dont i need a seed though
just any will work
how do i do a seed again i kinda forgot (havent done alot of randomizing in a while)
okay so now it says attempt to index nil "list"??
idk how niche this is, is there a way to make a specific joker spawn in the first shop of Ante 8 and never again after that?
look at morefluff
it has a voucher like that
only shows up on the win ante
i wonder if i can just use card.sell_cost instead of using the entire sell cost function
it works :)
nah
when the game recalculates the sell value your changes will be reset
unless you mean just reading the sell cost
their code is using the voucher tag to add the voucher
ye trying that out rn
you should change card.ability.extra_value and use card:set_cost() instead of changing card.sell_cost
hi what variable keeps tracks of the number of hands you have
G.GAME.current_round.hands_left?
thx
Any idea why it doesn't work properly?

all with sound