#💻・modding-dev
1 messages · Page 504 of 1
fair enough
i will fix you
its just not clear how many chips it gets, or that it'd reset at some point
At least to me
idk scored cards to me implies all of them due to lack of specification
i do think resets on discard would be better for clarification though
Looking at the vanilla jokers discard is typically not orange, should i highlight resets and or per hand?
vanilla is not consistent, just do what you think is best
rest well
thanks
I got some more ideas like one idea is a fortune cookie joker which doubles luck and decreases or “cracks” each time a lucky card is triggered
sup gang
Or wheel of fortune hit too hah
Question: if the hand has five Wild cards, would context.poker_hands.Flush contain just one item or up to the amount of suits?
I'm worried whether the highlighted Flush[1] would cause issue or not.
Wait, never mind.
I already put the suit-check step in there, so there shouldn't be any issue of that.
how would one have a joker reroll into a specific boss blind for no reason in particular 
hi dilly
wave emoji

How does one make it so if you play 4 stone cards cards it's considered a four of a kind
iirc there's a new context for hand modification, including changing that poker hand it is under conditions.
Because you can return one of 'replace_scoring_name', 'replace_display_name', 'replace_poker_hands' to context.modify_hand...
This is all I got lmao
It works
But when trying to detect stone cards it doesn't work
You should probably iterate over the hand and check if only Stone cards are present.
context.other_card is not sent alongside those contexts.
Yeah that's the problem
Iterate over context.scoring_hand:
local isstone = true
for i = 1, #context.scoring_hand do
-- check if only Stone cards are present. If not, use 'break' to end the loop and set isstone to 'true'
end
if isstone then return { ... } end
Where would I put this
Where you are currently checking for Stone cards, just move the actual enhancement check inside the loop.
what am i doing wrong man 
nvm i just figured it out nvm the nvm I am cooked nvm I forgot to actually call a reroll
I can't cook 😔
I can smiley face
does anyone know how to change a jokers soul_pos when it activates
What would be the best way to count the number of total chips scored (up to a certain value, then reset. it won't go above 21)? I'm not even sure what context I should put it in, it just earns $ sometimes when you meet that requirement
figured it out
nvm figured this out 
Updated the challenge buttons to automatically use the mod color and the mod icon with a tooltip for the mod name
How you do that :O
hooking basically
How did you do that ?
- Oh just coding
Okay, I'm trying to make a joker that copies an enhancement to other cards, but it's broken and I'm not sure what's wrong since the exception it throws is a little vague.
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play and not context.blueprint then
if (#context.full_hand == 1 and G.GAME.current_round.hands_played == 0 and SMODS.get_enhancements(context.other_card)) then
card.ability.extra.enhancement = SMODS.get_enhancements(context.other_card)
card.ability.extra.trigger = true
end
end
if context.individual and context.cardarea == G.play and not context.blueprint and card.ability.extra.trigger and G.GAME.current_round.hands_played ~= 0 then
card.ability.extra.trigger = false
return {
context.other_card:set_ability(card.ability.extra.enhancement),
}
end```
I know it stores the enhancement, but it's throwing `attempt to index field 'config' (a nil value)`, like it isn't? Am I missing something obvious here, or is there a different path I should be taking on this?
get_enhancements returns a table, which looks like { m_lucky = true }
I mean the better way to describe it is nonsense without just showing code
I hooked the UIBox_Button function and reorganized the returned UI nodes to sort them into columns and add the mod icon SMODS uses for the mod config menu in the first column????
Oh, that's uhhh, not great. Is there a different function that gets the actual enhancement table, like from G.P_CENTERS.m_lucky?
Hmmm what's the best way to get text nodes from the localize function...
you can get the enhancement key by doing context.other_card.config.center.key, and set_ability accepts a string too
You should also change your way of checking if the card is enhanced, the way it is rn will treat every card as enhanced
oh, right since it returns a table either way
context.other_card.ability.set == "Enhanced" is prob enough
hmmmm... i think the context in which i am applying the enhancements is too late, as it's not counting during scoring of changed cards. Although, I may keep that for balancing reasons.
im almost done with my current last call bbs cards
Still need to figure out hooking as that's probably the best way of getting chips scored, since it's supposed to count initial chips from the hand played as well as all the other cards and jokers
that's for another time though, im gonna try and start work on my music ones
oh yea....papas cookin..
hey guys, i have a joker that is supposed to decrease the level of full house and flush house hands
calculate = function(self, card, context)
if context.before and context.scoring_name == "Full House" then
return {
level_up = -30,
message = ("I FORBID THIS!")
}
end
end,
calculate = function(self, card, context)
if context.before and context.scoring_name == "Flush House" then
return {
level_up = -50,
message = ("I FORBID THIS!")
}
end
end,```
although it only decreases the level of flush house, any way i could fix this?
The Balatro ARG
You can only have one calculate func per joker
Ughhhhh what is the most generic way to get text nodes for the UI? I'm running into a crash where it says a UI node is crashing due to missing a colour property but because it's from a draw function, I can't actually trace it easily
ah. i tried doing this earlier but it bugged out in ways i can't explain
calculate = function(self, card, context)
if context.before and context.scoring_name == "Full House" or "Flush House" then
return {
level_up = -30,
message = ("I FORBID THIS!")
}
end
end,```
"Full House" or "Flush House" will always be Full House
Because Full House is always true
Check the code for trousers how they do the hand check
that's not how equivalency statements work. Just make a new if context.before... block with flush house
if context.before and context.scoring_name == "Full House" or "Flush House" then this is basically saying "false or "flush house"
But otherwise youd do 'context.scoring_name == 1 or context.scoring_name == 2'
like this?
calculate = function(self, card, context)
if context.before and context.scoring_name == "Full House" then
if context.before and context.scoring_name == "Flush house" then
return{
level_up = -50
messasge = "I FORBID THIS!"
}
return {
level_up = -30,
message = ("I FORBID THIS!")
}
end
end,```
try it and see
unfortunate
check your syntax
are you using vscode or anything with syntax highlighting?
crash when i press the buttons, weird
ah nevermind i see
weird, this shouldve crashed my mod
im using vscode
did you install lua extension
im new to this lua thing, i should probably do that
i'm not sure how to rewrite this to make it stop yelling at me
confused
level_up = -50,
oh but also
you are putting a return after a return there
if i make a custom rarity what do i put in the "rarity =" field in a joker
yeah, that's probably unreachable code. I'd put the full house check and flush house check in separate blocks like
do something
end
if y then
do something else
end```
modprefix_(rarity key)
With the latest smods update (and, well, in general) how am i supposed to represent chance numbers? It doesn't like it when i set chance = G.GAME.probabilities.normal in config.extra
The SMODS.get_probability_vars for loc_vars and such & SMODS.pseudorandom_probability for actual chance effect rolls.
config = {
extra = {
chance = SMODS.get_probability_vars(),
odds = 3,
Tarot = 0
}
},``` like this?
is this how you create a fake card
I’m not sure you can emplace it
I know Ali was trying to help me earlier but I'm confuzzled on how to do it TvT
return {vars = {SMODS.get_probability_vars(card, G.GAME.probabilities.normal, card.ability.extra.odds), card.ability.extra.odds}} This seems to work normally, however now oops uhhh quadruples the chance
which is very silly
yo, im trying to make a joker that checks if the chips are below 30 and if they are then it x15 mult. but it keeps x15ing no matter what
pls help
could a joker stabily store a joker cardarea in it ability.extra. table?
context.chips isnt a thing unless you coded it in to be
iirc its just chips
does anyone have an example of a joker storing a card area (not in the main_end using nodes), everything works fine, i can have multiple copies but when i COPY my joker my game crashes, no crash log either
if i use "chips" the game crashes saying im comparing with nil
Edit: I also tried G.Chips
You get a stack overflow no? Areas saves jokers and one of them have an area so it repeats
Its called 'hand_chips' iirc
this is factual information, i think the mult value is just mult
You're using copy_card correct?
Whats your thing for/do?
i use control c with debug or ankh to test
only ref i have to the card area at current
What is that area for?
storing jokers, im not scoring them however
If you have jokers saved do you want the copy to have em too?
that would be preferable
Yea sorry Im not sure how I can help, I dont mess with areas
they are... tempremental to say the least
is there a way to check if a playing card with a special seal / edition is triggered or not
as in if a playing card w a seal is scored?
yes
i mean
if their special thing is triggered
like
if steel card
is activated or not
when in hand
or played
i think mime just adds repetitions if cardarea is G.hand
i think i understand what you mean..? you could check by hard coding each enhancement.. e.g.: if context.cardarea == G.play and context.individual and context.other_card:has_enhancement('m_glass') then
as in steel cards give Xmult when played?
yes
return {
Xmult = 1.5
}
end```
oh
i thought there was a way to like
trigger the card itself so
i dont have to hardcode it all
no matter how i think about it youll have to hardcode it i think
np!!
sadly unless you change how the play evaluation works you need to hard code everything
and even then i dont have the brain power rn to think abt how to do that stably
something like this?
local playtriggers = {"m_gold", "m_steel"}
local handfunction = {}
local playfunction = {"m_gold" = {dollars = 3}, "m_steel" = {xmult = 1.5}}
if context.individual then
local cantrigger = false
local str = ""
for _, x in pairs(playtriggers) do
if SMODS.has_enhancement(context.other_card, x) then
cantrigger = true
str = x
break
end
end
if cantrigger then
return {unpack(playfunction[str])}
end
elseif context.final_scoring_step and context.cardarea == G.hand then
local cantrigger = false
local str = ""
for _, x in pairs(handtriggers) do
if SMODS.has_enhancement(context.other_card, x) then
cantrigger = true
str = x
break
end
end
if cantrigger then
return {unpack(handfunction[str])}
end
end```
sorry for the horrible formatting, discord just does that when pasting code
when do you want the values like the xmult to be triggered
well, since steel triggers when in hand i want it to trigger when played
also gold and steel card have values for held xmult and held dollars so you can account for increased values
in card.ability
do you have debug plus installed?
press / then do eval G.hand.cards[index of card, e.g. 5 for 5th card in hand].ability
i dont
install it
alright got it
its because i was modding with just lovely and steamodded
no plugins
no nothing
yah it just makes debugging alot easier
??
how come this crashes the game
i see nothing wrong
is it because im nesting a table inside a table
nvm i fixed it but
it doesnt seem to work
new calculate code
["m_bonus"] = {
["chips"] = 30
},
["m_mult"] = {
["mult"] = 4
},
["m_stone"] = {
["chips"] = 30
},
["m_glass"] = {
["xmult"] = 2
},
}
local playfunction = {
["m_steel"] = {
["xmult"] = 1.5
}
}
if context.individual then
local cantrigger = false
local str = ""
for z, x in pairs(playfunction) do
if SMODS.has_enhancement(context.other_card, z) then
cantrigger = true
str = z
break
end
end
if cantrigger then
return {unpack(playfunction[str])}
end
elseif context.final_scoring_step and context.cardarea == G.hand then
local cantrigger = false
local str = ""
for z, x in pairs(handfunction) do
if SMODS.has_enhancement(context.other_card, z) then
cantrigger = true
str = z
break
end
end
if cantrigger then
return {unpack(handfunction[str])}
end
end
end,```
the joker doesnt seem to trigger even once
if context.individual and context.cardarea == G.play then
if context.other_card:is_suit(card.ability.extra.suit) then
card.ability.extra.spade = true
end
end
if context.joker_main then
if card.ability.extra.spade == true then
card.ability.extra.spade = false
return {
xmult = card.ability.extra.xmult
}
end
end
end
}```
this sgit
whats wrong

i think i got it
?
what is game_object.lua?
okay i fixed it
but the joker doesnt work
im going to implode
show code and explain what its supposed to do
Oh is this it?
no i changed it
Show the change please
if context.joker_main then
for _, playing_card in ipairs(context.scoring_hand) do
if playing_card:is_suit(card.ability.extra.suit) then
return {
xmult = card.ability.extra.xmult
}
end
end
end
end
}```
And it doesn't trigger the xmult?
nope
Can you show your config table too?
ill paste the entire code
name = 'Wooden Spoon',
key = 'j_bali_spoon',
config = {
extra = {
xmult = 2,
spade = false,
suit = Spades
}
},
loc_txt = {
['name'] = "Wooden Spoon",
['text'] = {
"{X:red,C:white}X#1#{}{C:red} Mult{} if hand includes",
"a {C:Spades}Spade{} card"
}
},
pos = {
x = 2,
y = 0
},
cost = 5,
rarity = 2,
blueprint_compat = true,
eternal_compat = true,
unlocked = true,
discovered = false,
atlas = 'CustomJokers2',
loc_vars = function(self, info_queue, card)
return {
vars = { card.ability.extra.xmult, card.ability.extra.suit }
}
end,
calculate = function(self, card, context)
if context.joker_main then
for _, playing_card in ipairs(context.scoring_hand) do
if playing_card:is_suit(card.ability.extra.suit) then
return {
xmult = card.ability.extra.xmult
}
end
end
end
end
}```
wall of text jumpscare
the Spades in config.extra should be in quotation marks btw but you don't use it it seems
i do 😭
if playing_card:is_suit(card.ability.extra.suit) then
it works
because i forgot 2 fucking quotation marks
Oh thats weird I copy pasted the code to test it myself and it worked fine

Oh so that was the issue lol
I did add em after pointing it out
now i can FINALLY continue coding
-- variables
config = { extra = {handfunction = {
["m_bonus"] = {
["chips"] = 30
},
["m_mult"] = {
["mult"] = 4
},
["m_stone"] = {
["chips"] = 30
},
["m_glass"] = {
["xmult"] = 2
},
}
playfunction = {
["m_steel"] = {
["xmult"] = 1.5
}
}} },
-- actual code
calculate = function (self, card, context)
if context.individual then
local cantrigger = false
local str = ""
for z, x in pairs(card.ability.extra.playfunction) do
if SMODS.has_enhancement(context.other_card, z) then
cantrigger = true
str = z
break
end
end
if cantrigger then
return {unpack(card.ability.extra.playfunction[str])}
end
elseif context.final_scoring_step and context.cardarea == G.hand then
local cantrigger = false
local str = ""
for z, x in pairs(card.ability.extra.handfunction) do
if SMODS.has_enhancement(context.other_card, z) then
cantrigger = true
str = z
break
end
end
if cantrigger then
return {unpack(card.ability.extra.handfunction[str])}
end
end
end,```
joker wont work
how do i check if you have a joker from an specific pool?
loop through G.jokers.cards and check (joker.config.center.pools or {}).poolname
how do i do that?
i dont think i could have been more clear without writing out the code for you
can you explain "wont work"
like does it crash
does it not get past a certain point
how much debugging have you done by printing variables
WORKED!!!!!! legend
@red flower ive tried using SMODS.load_file but I cant seem to get it to work, is this how you use it or am I doing it wrong, I couldnt find it on the wiki
SMODS.load_file("Jokers/whatsappjokers.lua", "Commence_Trolling")
it's on the wiki on the utility page
Got it to work, thank you

could be that the copied joker attempts to copy the joker again which causes a loop
🤔
just a theory though, whats the code that copies your joker
im just using ctrl+c or ankh (so copy_card) to test it
where are you saving the cardarea
inside ability.extra
what do i call the table in that case to account for multiple copies of my joker?
you can give each a unique id in the name
never done something like this so there might be a better solution
there are some mods that do this
Is the card area something to appear in the tooltip?
could i store them all within a sub table? e.g. G.mycardareas[cardarea1] .. G.mycardareas[cardarea2]
i dont think the game will save them properly if you do that
youre trying to store cards inside a joker?
mhm
cryptid has a joker that does that too, you could try looking at that
do you know where the game saves the contents of G? or does it not store tables because it cant
no it probably can it's just that it's programmed to only store cardareas directly in G
i dont remember where in the code rn
or instead of storing it in G.whatever[] could i do G[prefix_cardarea1]?
yeah
hiya! i'm using an extra in my Joker's pos, but doing so seems to only show that extra, not the base pos.
(pos = { x = 0, y = 0, extra = { x = 9, y = 0 } },)
why is this happening? ^^;
why do you have two pos tables...
for the sakes of animation
i'm able to animate both the base pos and extra pos, which is what i'm doing
oh and nevermind ^^;
i found an issue with my animation code, so uhm
ignore sdjfkngkjdfngdkf
ah ya i see, Aura implemented extras itself
lemme do this my own way then ^^;
if context.joker_main then
local suits_in_hand = {}
for _, card in ipairs(context.scoring_hand) do
if not card.debuff then
suits_in_hand[card:is_suit()] = true
end
end
if suits_in_hand['Spades'] and
suits_in_hand['Hearts'] and
suits_in_hand['Clubs'] and
suits_in_hand['Diamonds'] then
if card.ability.extra.xmult_gain then
card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.xmult_gain
end
card:juice_up(card.ability.extra.juice_power, card.ability.extra.juice_power)
play_sound('chips1', math.random() * 0.1 + 0.8)
return {
xmult = card.ability.extra.xmult,
message = localize('k_xmult_x', 'xmult'),
colour = G.C.MULT,
card = card
}
end
end
does nothing somehow
any ideas?
try return { vars = { ... [your vars] } }
buddy whats card:is_suit() 😭
is_suit() checks if a card's suit equals the argument specified
why do you have a double table for your loc_vars return table
you shouldnt
so is_suit("Hearts") returns true only if the card is Hearts, or Wild or otherwise
:is_suit() return a bool value when the card has the given suit, if you want to grab the card's suit, you need to check card.base.suit
oh i think put the brackets in the wrong place by accident whoops
that makes sense
i need to increment it right
-# yeah i know, i suggested him to use it earlier
he misunderstood it though sob
shh
shut up
how's my code looking like:
Edwin
where is my ball?
how do you get the code to appear like this
use ```lua
and close the code again
```lua
your code
```
you can do that with other languages too
like C#, Java, HTML, JS, CSS, Python, ...
if context.std_haver then
return {
hiv = true
]
end
SMODS.Joker{
key = "greg",
loc_txt = {
name = "Greg",
text = {
'{C:red}+2{} Mult[s]{C:green}#1# in 5{} chance of {X:red,C:white}x2{} Mult',
}
},
blueprint_compat = true,
rarity = 1,
cost = 5,
discovered = true,
atlas = 'Jammbo',
pos = { x = 2, y = 0 },
config = { extra = { flat_mult = 2, xmult_chance = 0.2, xmult_value = 2 } },
loc_vars = function(self, info_queue, card)
local numerator, denominator = SMODS.get_probability_vars(card, 1, card.ability.extra.odds, "greg")
return { vars = { numerator, denominator, card.ability.extra.xmult_value } }
end,
calculate = function(self, card, context)
if context.joker_main then
if SMODS.pseudorandom_probability(card, "greg", 1, card.ability.extra.odds) then
return {
mult = card.ability.extra.flat_mult,
xmult = card.ability.extra.xmult_value,
}
else
mult = card.ability.extra.flat_mult
end
end
end
}
what have i done wrong now
your denominator isnt real
numerator and denominator are locals
they should be in your ability.extra
or you can recalculate them
@red flower so i get this crash on quiting to menu with my card area (stored as G.kenjkau-#SMODS.find_card-)
ah FUCK i forgot to put that in im not having a good day
for ref that function is the calculate card areas
SMODS.Joker{
key = "greg",
loc_txt = {
name = "Greg",
text = {
'{C:red}+2{} Mult',
'{C:green}#1# in 5{} chance of {X:red,C:white}x2{} Mult',
}
},
blueprint_compat = true,
rarity = 1,
cost = 5,
discovered = true,
atlas = 'Jammbo',
pos = { x = 2, y = 0 },
config = { extra = { flat_mult = 2, odds = 5, xmult_value = 2 } },
loc_vars = function(self, info_queue, card)
local numerator, denominator = SMODS.get_probability_vars(card, 1, card.ability.extra.odds, "greg")
return { vars = { numerator, denominator, card.ability.extra.xmult_value } }
end,
calculate = function(self, card, context)
if context.joker_main then
if SMODS.pseudorandom_probability(card, "greg", 1, card.ability.extra.odds) then
return {
mult = card.ability.extra.flat_mult,
xmult = card.ability.extra.xmult_value,
}
else
mult = card.ability.extra.flat_mult
end
end
end
}
ok new code but now instead of crashing it just does nothing
you didnt return the card.ability.extra.flat_mult
yeah i did
thanks for your help!
i wish there was better documentation haha but i understand its difficult to put together
are you looking at the smods wiki
yes
oh okay
a lot of it is "to be completed"
alright now it crashes
whats wrong
i have not run into that yet
log?
might be thinking of a different one.
as in, i might be
if card:is_suit is a bool then why are you making it the key of a table entry
oh i changed the is suit
to card.base.suit
...why are you trying to card.base.suit() as if it is a function?
yeah i dont know what causes this exactly but sometimes smods tries to call a context when a cardarea is being destroyed
what mods do you have
malverk, galdur, smods, lovely, my mod, debug plus, nopeus
its probably none of those
i solved it by hooking smods.calculate_context and preventing it from triggering when the game is ending
but i removed that because it hasn't happened in a while
thanks heaven
man i've been working through this myself
it's hard but I think we all can do it
i know you can do it ethan
we've been there before
i can't get ma pants off
i have never changed clothes
Too busy coding
Just hold your sweat in smh
This is a very accurate dev chat
i took a look, how could i do that if i have multiple card areas that i dont know the name of? would i slice the start of the name of it to check if its one of my cardareas then return {}?
you can just check G.in_delete_run
i had a look, what do i do with G.in_delete_run?
-- dont trust that this is 100% correct because i didnt check
local calc_context_ref = SMODS.calculate_context
function SMODS.calculate_context(...)
if G.in_delete_run then return end
return calc_context_ref(...)
end
big ty that worked ive had this issue for so long
@red flower
use = {n=G.UIT.C, config={align = "cr"}, nodes={
{n=G.UIT.C, config={ref_table = card, align = "cr",padding = 0.1, r=0.08, minw = 1.25, hover = true, shadow = true, colour = G.C.UI.BACKGROUND_INACTIVE, one_press = true, button = 'jjok_kenny_use', func = 'jjok_kenny_can'}, nodes={
{n=G.UIT.B, config = {w=0.1,h=0.6}},
{n=G.UIT.C, config={align = "tm"}, nodes={
{n=G.UIT.R, config={align = "cm", maxw = 1.25}, nodes={ {n=G.UIT.T, config={text = 'BODY',colour = G.C.UI.TEXT_LIGHT, scale = 0.4, shadow = true}}}},
{n=G.UIT.R, config={align = "cm", maxw = 1.25}, nodes={ {n=G.UIT.T, config={text = 'HOP',colour = G.C.UI.TEXT_LIGHT, scale = 0.4, shadow = true}}}}
}
}
}}
}}
end```
so this is my code for a joker with a use button, the ref table is `card` yet when i try to access `card.ability` in my functions it crashes, im assuming card here is reffering to the buttons instead but i cant find a solution
so do arg.config.ref_table.ability.extra?
Any ways to summon a random consumable with the exception of one type? (ex: Spawn Tarot or Planets ards but will not spawn a Spectral)
nvm it didn't work
SMODS.add_card({set = _type})```
There's set = "Tarot_Planet" iirc
or that
context.consumeable.config.center.key == 'c_mars'
thank you
yay
Hello chat
hi dilly!
Hey!
How are you my pal
If I use G.GAME.round_resets.hands in context.end_of_round I'll get the amount of hands at the end of the round, right?
reminders to never set card limit of cardareas to 1
it fucks up the aligning somehow
-# im lazy to figure out why
Ill set it to 0 then
sob
Could anyone tell me what I'm doing wrong, it doesn't want to show the actual mult here
local joker = SMODS.Joker({ name = "Whatsapp Car", key = "whatsapp_car", slug = "whatsapp_car", config = { extra = { baseMultiplier = 1 } }, atlas = "whatsappcar", loc_txt = { name = "Whatsapp Car", text = { "For every {C:green}Whatsapp{} Joker,", "you will gain {X:mult,C:white}X#mult#{} applied to {C:red}ALL{} of them." }, vars = {"mult"} }, rarity = 3, cost = 6, unlocked = true, discovered = true, blueprint_compat = true, eternal_compat = true })
this isn't how you make jokers
i ask this just in case, was chatgpt used to create this
i used copilot to help with the description because i was constantly not getting it right
one sec
I hate copilot soooo much
SMODS.Joker({
key = "whatsapp_car",
config = {
extra = {
baseMultiplier = 1
}
},
atlas = "whatsappcar",
loc_txt = {
name = "Whatsapp Car",
text = {
"For every {C:green}Whatsapp{} Joker,",
"you will gain {X:mult,C:white}X#1#{} applied to {C:red}ALL{} of them."
},
},
loc_vars = function(self, info_queue, card)
return{vars = {card.ability.extra.baseMultiplier}}
end,
rarity = 3,
cost = 6,
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = true
})
i hope i didnt forget anything
sure, basicallyyy
between ## it has to be a number corresponding to the order of the variable thats gonna be returned in loc_vars
so #1# is pointing to card.ability.extra.baseMultiplier, as you can see in loc_vars
oh yeah i got confused on that when i started modding too lol
-# i hope thats clear??? idk im bad at this 😭
yeah most of us got confused at this when we started me think :3
basically it's just in order of whatever you return in loc vars
Imagine being bepis and thinking you're bad at anything
{ 13, 14, 15 } in loc vars
will make #1# into 13, #2# into 14, and so on
it's all in order
gets really confusing when you have to say #2# in #3# chance
how do i make a joker destroy itself? i cant find it in the documentation
:start_dissolve()
Is there a way to know how many hands were used in a round?
docs don't tell you stuff like that
there is but idk the variable name i used it before
what do i put before the colon?
check the house
reference to the joker card
is that the key
Yeah I di a hack here, but G.GAME.round_resets.hands doesn't give you the amount of hands you have left on the end of the round
It still gives you the amount you get at blind select
can't you just say the players current hands
or at least
save the value
then check it later
no
like in some functions inside jokers it passes card
that would be the current joker card
i think
ill try that
Oh wait, there's a way to check it?
gimme a minute, i think i can figure this out
yeah uhh
do i know the variable on the top of my head
hell nah
nice
that makes my life way easier
I was doing exact that but in a more hacky way
I'm making a joker that gives you money if you beat the round using only one hand
lmfao
ok this is probably a silly question but how do i do a message like gros michels extinct
i tried this, like in Vanilla Remade and that did not work
you have to actually add that message in a localization file
to use localize at least
ohh
i may do in the future but i doubt it
pretty sure any of those messages go into dictionary in misc in a localization file if i remember correctly
how does your localization files look?
i just did the string, for now
go to your localization, add k_Shrivelled!_ex = "..." in misc -> dictionary
this is the code. I know its running because the maths is working fine
ah ok
if you dont want to return, use SMODS.calculate_effect({message = "Rotting!"}, card)
also you should look at this if you ever want to do localization files:
https://github.com/Steamodded/smods/wiki/Localization
oh i understand now, thank you so much
i don't think i'm doing this right
the LOADING flickers from end to splash prep
im trying to make a joker that only activates when a few other jokers are alongside it.. how would i go about doing that?
like lets say ive got a custom joker oops12 and i only want it to score if it also has an oops in a joker slot as well?
if v.config.center.key == jokerkey then
local found = true
end
end
if found == true then
trigger stuff in here
end
Hey folks, brand new to the discord, I'm interested in reading through the codebase. Does anyone have a github link to share or a resources page?
Thanks 🙂
Sweet!
loc_vars = function(self, info_queue, card)
return {vars = { card.ability.extra.xmult, card.ability.extra.xmultincrease, card.ability.extra.blindsize }}
end,```
only the first var is read and the other two are read as nil
dont do extra = {xmult = } just do extra = {xmult = 1.5, xmultinc...}
how do I get the current amount of chips scored of the current round
that code is wrong
found is defined as a local inside the for loop
well of course it is??? its a placholder
and you're not using break so you just define it over and over again as found
i was too lazy to declare it outside the for loop
like here, I want to get the "1,920" of the round score
iirc its G.GAME.chips
what am i doing wrong here? the jokers show up in game, but they dont give the crazy mult when theyre all together
if i wanted to call in_pool in a function, would it be calculate_joker or something im not thinking of?
seeing you reminded me you fixed my button
wdym
yeah :3
like you know how objects use in_pool
if i wanted to handle a group of jokers instead of having to do each one individually
trying to hook in so i can just go "if joker is in this group, dont put it in the pool"
have u guys seen the new credit page i made for nxkoo :3
send?
and thanku!!
i did fix the aligning later btw
turned out cardareas with card limit 1 got some weird alignment like that
that.... that's exactly what i was envisioning for mine.... i didnt think it was possible
how the hell
A lot of things possible
true
TRUE
can you hover over them and it says what they did?
have u finished it yet btw :3
its possible yeah
i still dont get it
Rn i'm more worried about how to deal with 98%
im gonna work on a really cool ui tomorrow, yall wait :3
Like, make much simplier config page for dummies

where can i find this legendary figure
check tangents' code if u want to take inspiration from the credits menu
-# god spare your soul, the file names made me question why i mod
i thought config pages are easy to understand already.....
ok so let's say in a table of keys i have uhh j_joker
i want to make it so while j_joker is in the table, it can't be in the pool
if you want them to be even MORE simpler to understand then you could add live demonstration like my mod's introduction page
If you in 2% then yes
But oh well
add it to G.GAME.used_jokers
Was trying to work with quantum enhancement and this happens
it actually looks like something you would see out of an AAA game
-# opinion from someone who have NEVER played an AAA game before btw
dont they get removed from there if you dont have the joker?
or no
So big so I implemented search
how did you get to this point.
How
QUANTUM ENHANCEMENTS CANT BE THAT HARD 😭
But maybe because it's in last tab people can't find it
i know about the files dont worry,,,
I don't know bruh
I geniuely no idea
show me the dang code bruc 🥀
it gets removed only if you get rid of the joker but it doesn't update after that
you messin with the fabric of the universe there or smt
This is literally the code 🥀
probably, maybe most people r too used with smaller config pages
so when they r flashbanged with text they got confused immediately :3
wait so since the key table gets updated on a joker being removed will it update or no
That's a problem for me. So I want to implement short version of config which you can toggle
never used quantum enhancements before but it looks right?
Other mods?
ingore that
bro forgot the context
Nevermind I figured it out, something in the function code is bugging this shit out
Idk what it is but it's something in there
do you have any other mods installed
I do
i dont think, its supposed to do anything similar to that
if you add j_oops to the table then it will only get removed if you manage to get oops and sell it or destroy it which is hard if that bans it from being obtained
But I recall turning off all my mods so
Hold up I think I figured it out
hello, modding dev, why is this spawning the default joker instead of jokers from the desired rarities
SMODS.add_card({ set = 'Joker', rarity = 'cosmicjo_arcane' })
i have got my rarities defined here and there are jokers with rarities in game that it can pull from
SMODS.Rarity {
key = "imperial",
pools = {
["Joker"] = true
},
default_weight = 0,
badge_colour = HEX('ff001e'),
loc_txt = {
name = "Imperial"
},
get_weight = function(self, weight, object_type)
return weight
end,
}
SMODS.Rarity {
key = "doom",
pools = {
["Joker"] = true
},
default_weight = 0,
badge_colour = HEX('252020'),
loc_txt = {
name = "Doom"
},
get_weight = function(self, weight, object_type)
return weight
end,
}
SMODS.Rarity {
key = "arcane",
pools = {
["Joker"] = true
},
default_weight = 0,
badge_colour = HEX('2c90ed'),
loc_txt = {
name = "Arcane"
},
get_weight = function(self, weight, object_type)
return weight
end,
}
it just spawns jimbo, which i know is the default but like why, my modprefix is correct and everything im going a bit crazy tryna solve this code generation bug (its for jokerforge)
so this would be fine then
and now the "oops" wont appear
This is what I get for stealing code
do you have any joker with that rarity yet
yes, multiple
yeah
or you can wait for this :3
https://github.com/Steamodded/smods/pull/828
When I deleted it, it starts to work and not fly everywhere
which is strange
how does this keep happening
when's it coming
is rarity in jokers "cosmicjo_arcane"?
yes
SMODS.Joker{ --Lady of the Stars
name = "Lady of the Stars",
key = "ladyofthestars",
config = {
extra = {
slot_change = 3,
strushplayed = 0,
hands = 2,
Planet = 0,
c_neptune = 0
}
},
loc_txt = {
['name'] = 'Lady of the Stars',
['text'] = {
[1] = 'Grants effects for using {C:gold}Tarot{} Cards',
[2] = '{C:blue}The Magician{} - Spawns a {C:planet}Neptune{} Card',
[3] = '{C:diamonds}The Star{} - Adds an additional {C:money}$5{} every',
[4] = 'time a {C:attention}Straight Flush{} is played',
[5] = '{C:clubs}The Moon{} - Adds {C:attention}2{} {C:blue}Hands{} for the round',
[6] = '(Currently {X:money,C:white}$#1#{})'
}
},
pos = {
x = 7,
y = 0
},
cost = 20,
rarity = "cosmicjo_arcane",
blueprint_compat = true,
eternal_compat = true,
unlocked = true,
discovered = true,
atlas = 'CustomJokers',
oh wait this is a PR
N' at this point make your own smods damn.....
and they show up fine in game and everything
for the life of me i cant figure out why its not working lol
N is so beautiful
do u have a link to some nice docs for me to look at with it
i actually planned on, checking its code
what happens if you eval G.P_JOKER_RARITY_POOLS.modprefix_key?
the annoying thing is, sometimes it works perfectly and sometimes it doesnt
but i think SMODS.add_card should be documented in the utility functions (or smt) tab of smods documentation
deal
N' can u pr me a stable release of bsr...
in debug plus? nil
yes
this code ive got doesnt seem to give the xmult when i have all 5 jokers owned... i know its probably a problem with that little middle part but i have no idea how to fix it.. please help!
if it's nil then the rarity hasn't been created properly
ur checking G.jokers, not G.jokers.cards
you left some checks that still check whether the object has an in_pool function before calling SMODS.is_in_pool, was that intentional
yeah but i dont see the issue with my rarity code
unless im being silly
wait lemme test something
yes
maybe i got the logic wrong but i think those are not equivalent to the checks i do in the function
once i change that i just get a crash lmao
theres 889
like i return true if in_pool doesn't exist which for those specific checks it's not correct
(i think)
its gonna be so funny if this just works cause i forgot 2 words
it should
nope, never mind, i thought it was an issue with how they are being imported in main but thats all fine
that's true, just makes the code look odd, it tickles my brain
Balatro
even simplifying the issue to one rarity still creates jimbos what is this
but also, i dont think you even need that loop to check for if you have all the five jokers actually
unfortunate..yyyyy...... its not applying the xmult.. and im a billion percent sure i have the other jokers in my code correectly...
just smt like
for _,key in ipairs(required_parts) do
if not next(SMODS.find_card(key)) then return end
end
should work me think
yeah it also doesn't help that i dont really understand the deck view code lol
another mistake you made is that all joker keys begin with j_
okay so just j_kaliimoddy_exodiahead
joyous
IMPOSSIBLEEEEE...EE..E....>E..E>.
no useless cards in deck truly
In which line is the balatro hand scoring evaluated?
like the final chips * mult?
yep
and where chips are added to G.GAME.blind.chips
It's in G.FUNCS.evaluate_play after the Joker Debuff Effects comment
thanks
you are like an encyclopedia how do u remember all this lol
btw do u know in which lua file is G.FUNCS.evaluate_play
state_events.lua
thanks
read a lot of the code so i know how to search it quick
when will you read alot of me
now

SMODS.add_card({ set = 'Joker', rarity = 'modprefix_testytest_royalty' })
you forgot the prefix
in the joker too
oh wait i misread
hmm im going to test it myself
yeah this is nutty
also while i still remember goodmorning we have to update the version of steamodded in the dependencies to the newest
shit wrong channel
lmao
Someone please..... I need UI help please.......
thank god im not going insane
is this an smods issue then
nooooo
i forgot my create_card shenanigans
whats up
if its the thing in the smods server i didnt understand it :3
FUCK
do i need to use create_card instead then cos id rather use add_card if im being honest
no it works with add_card
im sorry winter i dont comprehend ui at all or i would love to help you
I just don't know how to normally get localization information outside of select contexts 😭 I don't know what I'm doing differently from instances in generate_ui
what's the problem exactly? can you re-explain it?
this crashes with this message
did you restart a run before testing
also whats line 202
card.ability.extra.xmult = card.ability.xmult + card.ability.extra.xmultincrease
man
i did a clear wipe of my mods folder to just have smods, lovely, and the mod im testing only to realise i couldnt spawn anything in because i didnt have debug plus lmao
So basically, I need to get UI nodes from this localization entry to put them in this new "story" tab I added for challenges. So I have this entry stored under G.localization.Descriptions.Other
Typically, calling the localize function with type = 'descriptions' and set = 'Other' should make the localization function append the nodes to whatever table you pass in, in basically the same way descriptions are assembled for the card hoverboxea
I'm back trying to get this one working again. I switched to context.starting_shop as SDM_0 suggested, but how can I make it handle one pack at a time if more than one pack is generate?
Right now it seems to work with a single pack but if two are generated then the sort of overlap on the screen, cards from multiple packs are shown all at once, and then once you choose a card all the display goes away but it still thinks you need to choose another card for the other pack.
i would honestly suggest just making tags
else you would need to do stuff to detect when the last booster has been closed which will just be you recreating tags lol
However, for whatever reason, doing this results in an error. It says some UI node doesn't have a valid colour in its config when it goes to draw, and the stack trace doesn't help because the draw function is called from the update behavior (so it's being created successfully without error, then the update grabs it, tries to draw it, and encounters whatever failed initialization)
localize{type = 'other', key = 'ch_st_'..story_id, nodes = story_text}
local story_node = {n=G.UIT.C, config={align = "cm", minw = 3, r = 0.1, colour = G.C.BLUE}, nodes={
{n=G.UIT.R, config={align = "cm", padding = 0.08, minh = 0.6}, nodes={
{n=G.UIT.T, config={text = localize('k_challenge_story'), scale = 0.4, colour = G.C.UI.TEXT_LIGHT, shadow = true}},
}},
{n=G.UIT.R, config={align = "cm", minh = 4.1, minw = 3, maxw = 3, padding = 0.05, r = 0.1, colour = G.C.WHITE}, nodes = story_text}
}}```
this error?
Maybe! But I don't see how what I'm doing is using it any differently than correct examples given?
The returned nodes should be just a list of row UI tables
i don't know what do i do here
Setting the passed in story_text to an empty table results in it working correctly, so the outer nodes aren't the issue
is that your nuclear reactor
what modpack are you playing
what about
local story_text = localize{type = 'other', key = 'ch_st_'..story_id}
hbm ntm but ignoring that
modding-dev the second 1 frame of minecraft is shown on screen
why does the loading screen get stuck on "splash prep" and "end"
youre overwriting the game draw function
oh
you need to hook into it, probably
Afaik only the name types directly return? I can try it but I'm fairly certain it returns nothing for descriptions if you don't pass in nodes for them to modify
i honestly dont remember :3
Wegh
how can i make him start doing calc_dollar_bonus? cause while i did this with golden, i cant do that with a dynamic value like satellite or cloud 9
Hate, it's so hard to debugggg
why cant you
i mean i can but is there a less tedious way than doing that for each joker that calcs dollar bonus
sounds hard
ill do some tinkering i guess
this joker is supposed to increment for each card destroyed, but instead increments for each destruction event (ie an immolate only gets it 10 chips instead of 50). how can i fix this?
what happens if you do nodes = story_text[1] or nodes = desc_from_rows(story_text)
Dunno, will have to try when I get home (at the deli for a yumby sandwidch)
im hungry i could go for a sandwich..
Get urself a sandwich
i'm still so lost on hooks holy
card.ability.extra.chips = (card.ability.extra.chips) + 10 * #context.removed
ah, thank you!
i will try to have a clear explanation on hooks in the vremade wiki soon
ok this isnt so bad actually
hey guys i'm back yay
finally got a new laptop and as such i'm back with more questions :D
i've seen some people do an "all boss blinds" challenge but they never provide a download link (probably because they made it themselves). so now i'm left wondering on how to do it myself?
as in, how to modify the small and big blind so that they're always boss blinds
eremel is teasing a system in smods to replace blinds soon so i would wait for that
or look into how ortalab does it
@modern kindle crying
he better not
im 0 for 3 with these pushes istg
rate this joker idea
prob calc, then in_pool, now blind changing
yummy
i can look at the code for oops all sixes and lucky cat but not sure how to know if a wheel of fortune is triggered
thats really easy now
it's a context for that and if it's something['Wheel of Fortune']?
if context.pseudorandom_result and context.result and context.identifier == "wheel_of_fortune" then
it also works with lucky cards
how the hell am i gonna do this with rocket
ah! that's makes it easier thanks i was gonna accidentally program this twice
wait that's right its being tracked
for lucky cards the identifier is either lucky_mult and lucky_money
context.identifier == "wheel_of_fortune" or "lucky_mult" or "lucky_money"?
the idea is there but thats not how lua works sadly
context.identifier == "wheel_of_fortune" or context.identifier == "lucky_mult" or context.identifier == "lucky_money"
I haven't seen the ortalab mod in action, but i found this in the source code. if I understand it correctly then this only applies the effects but doesn't show the boss blind in the blind select screen, or am I missing something?
i need to catch up on my lua game then 😤
you should also have it in ()
i have the programming in lua volume 4 book
thats for my mod jokerdisplay lmao
yes
okay, i finally have my codebreaker pretty much how i want it
if any code tampering is detected before the boss blind of an ante it forces a blind, if tampering is detected during the boss blind it sets the next boss blinds ante
??
delightful
thank you
the video doesn't show it because i'm testing it without any additional mods outside of debugplus
did they take it from your code or what
that code is for jokerdisplay compatibility
ok
anyway good luck 
the humble retcon
But I assume that the important part is the for loop above, no?
that entire screenshot is jokerdisplay code
it ignores rerolls
Guys I don't understant why my code doesn't work. The part where using a consumable change the txt to active work but nothing else work
then where is the joker's function code?
what about chicot and luch
this is the one that i sent
local variables are not kept between calculate calls
dunno, i didnt make ortalab lol
for luchador good luck moving to it to sell it, im not sure about chicot though
oh
well, let's wait for eremel's thing then i guess
remembered that you make several text boxes
not sure if the currently chips should be in the first or second
what do you think
god i wish somecom was here to help decipher his safe_set_ability code
he has been pretty quiet recently unless ive just been missing his active times
is he alright
can create_toggle() nodes have tooltips?
i havent seen him either
how the sigma did you do that
does anyone here know if i can make a set of stakes "parallel" to the main set and have their descriptions show up properly?
he wasnt here yesterday, but seemed pretty active the day before
text = { { BOX 1 }, { BOX 2 } }
i'll have to work on the actual coding of the fortune cookie after work
fixed the writing as looking at the vanilla cards tarot cards have that too where it's the name followed by card
not sure if they are too long though but gotta get ready
new plan maybe (do i change self to card)
yes
draw_card situation is crazy
talisman ,,,,
no wait its because the game is looking at ijiraq's table for extra
smh
why must i be plagued with complicated cards
why dont i just make +4 chips
alright after they were brought to my attention if codebreaker detects tampering it will debuff both chicot and luchador before you ever get to the blind and it wont be cleared until youve beaten it

nodes = story_text[1] is this, showing that the first node at least is correct and is likely formatted correctly. desc_from_rows(story_text) results in an error that "node" is nil but I'll see if I can debug that
i was gonna tell you but i thought you did already
i was gonna just make it do on disable to the blind it just didnt work, but it didnt work how i wanted and i was too lazy to find a workaround so i just linked debuffing to my flags
Okay at the very least the stack trace there is actually direct since it occurs when the nodes are trying to set parent-child references
yeah the desc_from_rows i realized was wrong
i doubt people are going to actually really try and cheat the codebreaker but, why not
if the first one works then you might need to append all nodes to that table?
wdym? they're already in a table yeah?
the structure might be looking like
{
[1] = { { n = G.UIT.C ... } },
[2] = { { n = G.UIT.C ... } },
}
this means that each node inside it is too nested
ough
i think doing desc_from_rows on each value solves it
that's what i have on one of my things
local parsed_text = {}
localize{type = 'other', key = 'ch_st_'..story_id, nodes = story_text}
for i, v in ipairs(story_text) do
parsed_text[i] = v[1]
end
local story_node = {n=G.UIT.C, config={align = "cm", minw = 3, r = 0.1, colour = G.C.BLUE}, nodes={
{n=G.UIT.R, config={align = "cm", padding = 0.08, minh = 0.6}, nodes={
{n=G.UIT.T, config={text = localize('k_challenge_story'), scale = 0.4, colour = G.C.UI.TEXT_LIGHT, shadow = true}},
}},
{n=G.UIT.R, config={align = "cm", minh = 4.1, minw = 3, maxw = 3, padding = 0.05, r = 0.1, colour = G.C.WHITE}, nodes = parsed_text}
}}```
Okay well it doesn't *crash* but it does do this, organizing them into a single row
funny
oh wait right desc_from_rows()
yeah desc_from_rows(v)
crash
😭
ok new plan
this is what i do for one of my config tabs
doing desc_from_rows(v[1]) does this tho
its trying
doing its damned best
i'll try copying your example and see if it works
this part is always fun
err wait
-4
is the issue that I'm not passing in colours in the vars? I know you said it's usually caused by some nesting issue
context.consumeable.config.center.key
if context.consumeable.config.center.key == "key"
i dont think so, thats usually just that it couldnt read the node because its nested
but try it out
CURSES
I will never get over the fact that the code of this game is written in brittish english
like wdym i have to put an U in color?!?!?!
I dont understand how the flip thing when a card is being enhanced work. Right now this code make me crash
the majority of english speakers worldwide use british English or some derivative due to the legacy of the British Empire fwiw
or kids like english
added a nilcheck
???
what do you mean America isn't the only English speaking country in the world?? /s
forget about it
Okay following your direct example: kinda?
whats hand[i]
ship it
ok well now nothing happens lmao
not really sure why only the last row is in that raised node?
the loc_vars should have removed the background so thats weird
oh I didn't use any loc_vars, should I?
this i mean
idk I saw that in Unstable but I tried without and It doesn't work either
how would i recreate a destroyed card with a random rank?
i want it to copy everything but the rank
can somebody send a link to the vremade jokers?
it should probably be pinned imo
thanks
I was saying that a lot of people in the world are considered english speaker but their english I limited like kids. Like me for example.
wait isn't this wrong? You're passing in a vars property that your locally declared loc_vars doesn't have and the background color property goes unused
your english is fine
thx I'm doing my best
because i copied and pasted it from something else that did use that stuff haha
but it does use the background colour
also anyone can learn a language at any age, I'm not gonna associate choppy language skills with being a child tbh. Especially since due to the global hegemony of English-speaking countries, a lot of people are unfairly expected to learn english as a second language when English speakers aren't expected to learn second languages in return. So yeah you're fighting an uphill battle always being expected to engage with a lot of English-speakers in their native language rather than them having to use yours
oh sorry I missed it at the bottom using the background color lol
yeah fr
So yeah ur doing fine, if someone tells you you talk like a kid, swear at them in both English and however many other languages you know
But if I swear in french they find that attractive 😆
how do i get a random rank?
pseudorandom_element({'2','3','4','5','6','7','8','9','10','J','Q','K','A'}, pseudoseed('key_ig'))
surely theres a better way to do it
this doesnt work with custom ranks after all
I think there’s a poll for ranks
(the rank is the rank object so i think you need to do rank.key)
im trying to make a sigil-ishh kind of joker but it just does NOT want to change the cards to the suit...
yeah thats the wrong context
should be context.after not context.end_of_round
also don't use math.random
pseudorandom right
local suit = pseudorandom_element(suits, "unique seed")
local chosen_suit = pseudorandom_element(SMODS.Suits, pseudoseed("painter_wowcoolseed")).key
How would you make it spawn 2 stone cards instead of 1
And yes this is from the marble joker
for loop
SMODS.add_card is simpler to use and ideally you'd just do a for loop on a var in ability.extra
Right
Why does Card.ability. show autocomplete suggestions, but card.ability. doesn't, inside functions like calculate? Is there something I'm missing?
this seems to be a more showy way of doing it thats closer to vanilla
likely from vanillaremade
vscode is weird like that sometimes
do you suggest other editor?
no it's good still
yeah that's what I thought
it doesnt have access to all the code in the balatro source code so it cant really autocomplete with accuracy
Actually where would I put the loop
put it in the event and move SMODS.create_card inside the event
i think emplace gets fucky if you try to do it with the 'same' card
outside everything else but just inside context.setting blind
gets different stone cards that way
a little miffed that challenges and consumables have the same c_ prefix lol
I'm a silly man
yeah its a bit obtuse but
you really wont be using the key of a card and the key of a challenge in the same circumstance
me when i spawn the entirely of Five-Card Draw into my consumable slots

how can i get the on-screen coordinates of a Joker?
tryna make a Monika joker and i wanna make it pull your cursor towards the center of it
Nvm I understand now
how do you add the extra text at the bottom that says a name or something similar?
wdym
finished the fortuen cookie joker 👍
add a hook to create_mod_badges
what is this embed image
i'm pretty sure there's some way to like have the eaten animation after the lucky or wheel card is triggered and not before
😭
the blueprint is to show it's not compatiable like oops all sixes
put it in an event and make the timing 'after'
animations for probability triggers are janky because of how theyre implemented
like this (popcorn)
yeah sure i can try that real quick
it might not work since the probability is rolled before the card is done being animated
but who knows
you might need an event inside an event or something like that
only one way to find out
maybe if that doesn't work, maybe have a boolean that is turned on (either debuff or just not have it work after triggering) and after scoring or round it is eaten
question how do i make a joker use custom rarity
why does alt+f5 just not work for me
might have to do this 😅
sorry i don't understand what is going on here
@red flower thank you for the help this was killing me lol
for a moment I thought you made the challenge play the song its name is referring to when you clicked it
no im just listening to smth in the background
lets goooo
well i didn't hear any elo
my volume is super low for discord videos
max it out
is the text next to the badges better than the tooltip
your info queue needs an info queue for xyz jokers
true
okay it works
also yes, it is, only cus the description the joker is really big
if it was smaller it'd look odd
one question is that is there a way to make sure it doesn't accidentally get the wheel of fortune if you have another joker
now the tooltips are scary
i think it looks fine, i might need to right/left align the text
if it was any less wide it'd start looking odd
so if that's as narrow as it gets, you're fine
id rather it look odd so that people read it than nobody reading it lol
also how does it look with more badges
still fine
now time to turn this into multiboxes
i patch G.UIDEF.card_h_popup to do this
so something like that
or this
yeah thats the "or this" part of what i said
oh it's called set_badges
i tried reading through it but didn't understand anything... 😭
do i just copy-paste it and see what happens?
why does this happen
