#💻・modding-dev
1 messages · Page 316 of 1
G.jokers is a cardarea, G.jokers.cards is a list of cards in the area
nvm figured it out:
For anyone looking for it:
card.sell_cost = num
well, how would i loop through every joker in general? i don't need just the jokers in the player's inventory
this is for a tag that will add a random joker from the Food pool
keep in mind this might get ovewritten by something calling set_cost
but i need to do all this indexing because vanilla food jokers exist without that pool
G.P_CENTER_POOLS.Joker
True. Is there a better way of doing this? I want to set the sell cost to a var in the joker.
you can change extra_cost instead or hook/patch set_cost
i discovered that i am fucked
How did you get a custom font?
perfect, thanks!
i should add a custom font to my mod to display the ☆s
why do i always have to re-discover my jokesr
FINALLY LMAO
is there a command that lets me spawn a joker into the current shop? trying to see if it renders properly but without the shop
if there is that would also be helpful for showing off jokers that do something the moment you buy them as well lol
like to show off this one i just kept giving myself uncommon tags and rerolling until i found it in shop lol
yeah the thing with mine is the way its sprite is set up you cant load it in the collection so i wanted to spawn it instead
but idk how debug mode does it so i cant just tinker my way to a functioning command
smods add card with area shop jokers
How would I recreate the "Upgraded!" effect that the hiker does but in a consumable
something like this perhaps but changed for chips?
SMODS.Consumable{
key = 'Popcorn',
set = 'Tarot',
atlas = 'Jokers',
pos = {x = 3, y = 21},
loc_txt = {
name = 'Popcorn',
text = {
'Split {C:mult}+20{} permanent Mult across {C:attention}all selected cards{}',
}
},
config = {
extra = {} -- No selection limit needed
},
loc_vars = function(self, info_queue, center)
return {vars = {}}
end,
can_use = function(self, card)
return G and G.hand and G.hand.highlighted and #G.hand.highlighted > 0
end,
use = function(self, card, area, copier)
if G and G.hand and G.hand.highlighted and #G.hand.highlighted > 0 then
-- Calculate split multiplier
local split_mult = math.floor(20 / #G.hand.highlighted)
for _, target_card in ipairs(G.hand.highlighted) do
-- Apply split permanent multiplier
target_card.ability.perma_mult = (target_card.ability.perma_mult or 0) + split_mult
-- Juice-up effect for feedback
G.E_MANAGER:add_event(Event({
func = function()
target_card:juice_up()
return true
end
}))
end
end
end,
}
so like
SMODS.add_card{ key = "my_joker", area = G.shop}
-# please for the love of god tell me i pressed OFF
put SMODS.calculate_effect({message = localize('k_upgrade_ex'), colour = G.C.BLUE}, G.hand.highlighted[1]) in your use function, assuming you are upgrading the first selected card
oh i thought they meant the actual effect (perm chips)
in a different program replace the key then throw all that into the console
is this right for adding a vanilla shader to a joker
I think im gonna use this one thanks!
I think adding unlocked = true or discovered = true to your joker makes it discovered even if you are on a new save
unlocked is if you can find it discovered is if you have seen it
like how you gotta unlock blueprint by winning a game to find it
oh I see, thanks!
how do i make a consumable appear in 2 pools at once
like how black hole is in planetand spectrals if i’m not mistaken
and how soul is in tarot and spectral
ok how about this
the thing is im not on a new save
how do you make a legendary joker not show up in the soul?
do i replace the "scored_hand" with "full_hand"?
is this a good boss
Hi, is there a way to access to all of the registered jokers in the game ?
i tried it with a full hand, but, it didn't work
seems kind of funny but ultimately useless
i mean
certain enhancements do kinda want to be at the end
or some cards might want to be the first
calculate = function(self, card, context)
if context.joker_main and #context.scoring_hand % 2 == 0 then
return{
card = card,
Xmult_mod = card.ability.extra.Xmult,
message = 'X'..card.ability.extra.Xmult.." Mult",
colour = G.C.MULT
}
else
return{
card = card,
mult_mod = card.ability.extra.jmult,
message = '+'..card.ability.extra.jmult.." Mult",
colour = G.C.MULT
}
end
end,
can someone help me with this? it should work fine, but it keeps on saying mult is nil
what the old calc
whats the issue
just replace every return with { xmult = whatever } and { mult = whatever }
messages are automatically added
wait did something update
i tried to play the ace of hearts in a full hand (two pair, pair, straight, etc.), but it doesn't work and it only works with high card
situational
works for me
90% of the time its useless probably
just makes it a bit annoying
how do i check the version of smods im using
top right corner of the main menu
which case
you can just return the xmult and mult
calculate = function(self,card,context) if context.joker_main then for _, full_hand in ipairs(context.full_hand) do if scored_card:get_id() == 14 and scored_card:is_suit("Hearts") then return { xmult = 3 } end
what you wrote is kinda outdated stuff
i don't know what i'm doing at this point
you changed the name of the variable to full_hand but then you're still using scored_card
bad logic too
whenever i try to use the joker, the game crashes and this happens
you want something like this
if context.joker_main then
for _, played_card in ipairs(context.full_hand) do
if played_card:get_id() == 14 and played_card:is_suit("Hearts") then
return {
xmult = 3
}
end
end
end
I recommend reading some lua basics too
Tbf, this is my first time using Lua
wdym
is there a way to just get the suit of a card, rather than having to use is_suit
and i ljust slapped on an else
card.base.suit
without checking if it was just the second condition being false
oh yeah
fixed it with an elseif 👍
ami being too generous with the base chips
Should this be rare or uncommon? "Money" in this case is the card's sell value.
play aiko's mod it's very good
you should try joyousspring
oh my god this is so peak
I feel like uncommon
man blind calc really fucked with the automatic messages T_T
one question:
can you play pneumonoultramicroscopicsilicovolcanoconiosis
no
i noticed that sometimes i had to define a message_card for other_joker now
sob
not in dictionary
uncommon, also, does it scale? like, each round the payout is incrementing? or it just takes 5 rounds until its sellable
aiko do i add card to my calculate function if its a bliind
hand size issue lmao
are there jokers that specifically affect those wordle blinds
whats the longest word you can play then
feel like there's some cool potential with those ngl
how do you make a modded legendary joker not show up from the soul?
a wee bit
o okay
It's a constant +$2 per shop. It doesn't stop at 10, so you can let it keep going. Maybe I'll increment it by a small percentage every few shops or so.
boy i do love my EX jokers
i think
in_pool = function (self, args)
return not args or not args.source or args.source ~= 'sou'
end
gg
this is readable code right?
quick question, do jokers that say "if blahbalbhah contains a straight" do they take in unscored cards when checking if there's a straight?
relatively sure it only checks your scored cards, but dunno.
you might need to change the tooltip, since its based on its own payout and not the player's current balance. I thought it was sellable off of how much money you already have
o yeah if you're playing a straight all cards score 💀
i am too smart bro
cursed
use {C:mult} for the +15
so it doesn't look cursed
even better
maybe with four fingers but idk if you can get that case in the vanilla game without a higher poker hand
worked perfectly, thanks!
yeah I just changed it. Do you think it would be better if the payout increased over time (Make it compound interest)?
hmm
in vanilla impossible
but you can do this in vanilla:
minus the acended hands stuff
but the straight flush calculations are the same
that's +1?
how am supposed to set boss
i mean
how am i supposed to tell a boss blind to be a boss blind
in cryptid with four fingers it gives +1 yeah
since the straight only needs 4 cards now
the other one is extra
odd
i literally thought ascended hands were in vanilla for a second
stop gaslighting
little help here ;-;
they got added today in 1.1
as an avid four fingers sflush player it s unfortunately not real
wait
im waiting
ill just try it with flower pot since that better suits what im trying to look for
maybe not, ngl, $2 each round is pretty good, maybe it can increase by 1 after each boss blind or smth or you can use a function and round it, but if you want to balance a scaling econ joker you should look at rocket's numbers
ok so flower pot does not take unscored cards
guys i‘m really hyped about my progress with my botting and automated testing API mod so far, hope someone will find it useful as soon as i get everything a bit cleaned up and pushed to GitHub
Balatro modding is fun, this scene feels cozy
yeah i fixed that
most things like that i normally fix after i send the image and realize
"huh. that doesnt look right."
how would you make a card's soul bounce/wiggle like the soul? (as in, the consumable)
I made it increase by 1 at the end of each boss blind. Would this still be "fair" on uncommon or should it stay rare?
i removed it to see how many people would notice
youre the first
you just forgot about it didn't you
....
yes
wait how do you forget about it dont u use like a template or smt
vro probably copied from jimbo and forget
id say uncommon, its generally more risky than rocket and has a lower payout later on, plus diluting the rare pool is kinda annoying imo since it happens so often.
but its not my joker, do what you want with it
how would i force a shader onto a joker
use a drawstep
alternatively
is this correct for applying a vanilla shader "hologram" to an edition
🤞 automatic messages are fixed 🤞
why is my legendary consumable not being added into packs with this exact set? if i remove the line it appears just fine in spectral packs but not the card's base set (being "Silly")
WHY CRASH :(
when we generate a "random" value it's actually random, and not based on seed. How could we make it depend on the seed?
pseudorandom
well that's what we're using
maybe we're using it wrong?
local seal = pseudorandom_element(G.P_SEALS)
you dont have a pseudoseed in there
so like we're missing an argument?
yea
And how would one get a pseudoseed? 
heres how i use it
just add pseudoseed("whatever you want the seed to be")
no
psuedoseed() depends on the run seed by nature so thats already handled
that is based on the seed
i see
that is just an identifier for the randomizer
whatever you put in pseudoseed() will just make it unique from other psuedorandom generations
does this joker look "nerdy"
does this fella look nerdfy
uhh im gonna take that as a yes
yes it does
also how would i be able to access the jokers in the shop? i'd like to be able to update their costs
i just found it yea
here are a couple more #💻・modding-dev message
also also i think aiko would prolly know this best but like how would i create a little textbox similar to what you'd see in like boss blinds? i wanna use it to show the player a score prediction and I'd like to be able to just put the number there
because when i tried to use the chip text it just wouldn't update
when it comes to adding in a drawstep between two parts of an existing drawstep (i.e. adding a draw_shader() function between the drawing of the center and front of a card when it has an edition, is the best/only way to do that to patch the existing drawstep? i can't think of a better way since you can't do it with a new drawstep without it being in the wrong order
in general the drawing order of drawsteps is very inconvenient if you want to add extra layers between existing layers of a card lol
since they draw at different times if the card has an edition
i keep getting this error when im trying to make my mod. I'm not sure at thispoint what is causing it.
can i see your json file's code?
change "main.lua" to "Balatrans.lua"
how do i make it so the card only is removed after it ends scoring?
just wondering why the name and display name doesn't match
what
what should SMODS.Mods be?
i don't think that should even be a thing anymore
the only thing i see here that mmakes sense for me in parts is the atlas
where did you get this code
used other people's and my own...
use the context for destroying cards
to be more exact where did you get that SMODS.Mods part
I'm going to sleep i swear
how do i make this?
also just realized your pfp aint knuckles
Clips Jokers
stay up, I'll sleep for you
https://github.com/Steamodded/examples/tree/master/Mods/ExampleJokersMod here is an up to date example joker mod
like that? doesnt make much sense to me i think i did it wrong
destroy the card after 3 uses
but only be destroyed after scoring
it s being destroyed as soon as played
wait what are uses
scoring
destroy what card
thanks ❤️
is it a joker
a enhancement
that after being scored 3 times it is destroyed
Check the end of the screenshot I sent
also context.destroying_card is a boolean you don't want to manually change it
i think you decrease uses in main scoring context
context.destroying_card is a card
loc_vars = function(self, info_queue, card)
local suits = G.GAME.current_round.j_baguette_ex_suits
return {
vars = {
card.ability.extra.chip_mod,
localize(suits[1], 'suits_singular'),
localize(suits[2], 'suits_singular'),
card.ability.extra.chips,
colours = {
G.C.SUITS[suits[1]],
G.C.SUITS[suits[2]]
}
}
}
end,
a bit of help with this? its saying colours is nil
right my bad
that i already got working, i just need to make it only be destroyed after scoring
and once that reaches 0 you check for destroy card context and return remove true
In my defense it's midnight
Aiko might function sleepless but I'm not them
I will never be them
bbut then where do i add this? i need the = 0 for the card.ability.extra.uses
you need to check that card.ability.extra.uses is 0
not context.destroying_card
im so confused
the card and uses part is already working, i just need it to only be destroyed after it is scored in the last use
what they're telling you is to move == 0 to uses
i took out the changes i did and it just started working as intended for some reason
bump
🇦🇷 🤝 🇧🇷
for the record. i think localthunk is just lying here
maybe you're accessing the color with the wrong keys
like straight up, it's the only effect not nested under "and not context.blueprint"
he HAD to do it intentionally
maybe he forgot
now it isnt returning the 3X mult 😭😭😭
He just didn't notice it was in the wrong place
my theory is that he decided that, it'd be odd if mime was "compatible" but didn't work specifically with gold cards but did work with everything else
nvm figured it out
I think you're overthinking it
Thunk didn't realize he let Mime work with Blueprint
I think he either forgot to put it there or you're right but he forgot that he came to that decision when making it
I remember during the demo thunk discussing what to do with Blueprint since they didn't want it to include a timing element into it
thunk would hate the moveman
(Some) players enjoyed the timing element
whom
im not a fan of end of round abilities being uncopyable personally
So I remembered correctly
I agree with thunk's motivation. And I'm not sure there's another solution that doesn't remove more fun interactions
i can show you the hooks if you think that might be the issue
i think thunk was right in not allowing them in vanilla but also i think nothing is wrong with installing a mod that would make them compatible
how do i add a animation like in the marble joker?
i think it's fun but I agree it probably shouldnt work for accessibility, balatro shouldnt be about testing motor skills
Not the hooks, just the keys
thats what im sayin yeh
I mean you can do that right now
which keys are we talking about?
does a mod that allows blueprint to be compatible w end of round effects exist?
cause i personally have no clue how to create a mod which overwrites code
Not that I know of, but it wouldn't be hard except for Jokers that give money at the end of round
Anyone, I wanted a small help, one of my joker mods I wanted to make that the copies that are created should be registered in the deck and wanted to make that it multiplies the mults not add so if there is x4 in the scoring and the card is giving x2 than it should be 8 and not 6 like that
Here is the code
SMODS.Atlas {
key = "j_rwby_weiss",
path = "weiss.png",
px = 71,
py = 95
}
SMODS.Joker {
key = 'j_rwby_weiss',
loc_txt = {
name = 'Weiss',
text = {
"If the first hand contains {C:attention}1 card{}, copy it {C:attention}twice{}.",
"Gain {C:money}$5{} for each copy made."
}
},
rarity = 2,
cost = 8,
atlas = 'j_rwby_weiss',
pos = { x = 0, y = 0 },
config = {
copied_this_round = false
},
calculate = function(self, card, context)
if context.end_of_round then
card.ability.copied_this_round = false
return
end
if context.before and not card.ability.copied_this_round then
if G.GAME.current_round and
G.GAME.current_round.hands_played == 0 and
#context.scoring_hand == 1 then
local original = context.scoring_hand[1]
local dollar_gain = 0
for _ = 1, 2 do
local copy = copy_card(original, nil, nil, nil, true)
copy:add_to_deck()
G.play:emplace(copy)
table.insert(context.scoring_hand, copy)
dollar_gain = dollar_gain + 5
end
ease_dollars(dollar_gain)
card.ability.copied_this_round = true
end
end
return {}
end
}
The function of the card is that if first hand contains one card, gain 2 copy of that card . Gain 5$ every time a card has been copied
the suits should be right
its a table consisting of (as the name suggests) 2 suits
oh i forgot to reply to you in the other server
i dont understand what the problem is
the hooks set the table
No it's not a problem I actually want to add those things and
then i dont understand what you want to add
I'd try to confirm it in another way
Otherwise, what does the localization look like
see i thought i was too sleepy to comprehend
i think my hooks are broken, as when i removed the color coding, everything's showing nil
show the localization
even the predefined variables
which localization
the relevant one
the suits_singular?
i think i just had a stroke reading
how can I add back a joker in the pool after I got it ?
hold on i think i mightve figured it out
how do i add a joker slot, and how do i check edition on a joker
i know how to get jokers
but how do i check the edition on one
- modify
G.jokers.config.card_limit card.edition
so for card limit
card.edition.negative for negatives btw
how do i bind that to a joker
heres the loc_text
text = {
"This Joker gains {C:chips}+#2#{} Chips",
"per scored #3# or #4# card,",
"suits change every round",
"{C:inactive}(Currently {C:chips}+#5#{C:inactive} Chips)",
}
how do i make the extra slots go away when the joker does
change it in add_to_deck and change it back in remove_from_deck
I want to make the copied card to be in the deck when it gets copied like adding a new card and I want the mults to multiply the scored mults not adding it
this is a context, right?
no
no
api method
from my mod
hm alright
You're not using the custom colors
yeah because it crashed the game everytime, im trying to solve the nil issue for now
im just having it iterate over every joker one by one to check for negative, is this correct?
im sorry i dont follow
heres the loc_vars too
loc_vars = function(self, info_queue, card)
local suits = G.GAME.current_round.j_baguette_ex_suits or {'Spades', 'Hearts'}
return {
vars = {
suits,
10,
localize(suits[1], 'suits_singular'),
localize(suits[2], 'suits_singular'),
card.ability.extra.chips,
colours = {
G.C.SUITS[suits[1]],
G.C.SUITS[suits[2]]
}
}
}
end,
yes
okay
@red flower what? Anyways I think u can't help thanks
I'm saying that I don't understand what you're saying lol
why is my legendary consumable not being added into packs with this exact set? if i remove the line it appears just fine in spectral packs but not the card's base set (being "Silly")
so for G.jokers.config.card_limit, when i feed it the value should i just do [var] = [var] + 1
when it pops
Owh sorry i thought u were busy as you said I don't follow, lol, look my joker creates 2 copies if 1 card is scored in first hand now what I wanted is that those two cards copied should be saved in the deck instead of disappearing and the mults I want them to multiply the scoring mults not add them (now? Was it clear or?)
and i will also have a loc var
and then whenever the card is removed, i should do [var] = [var] - [loc_var]
i hope this is understandable enough]
bump
oh for the first one you probably want G.deck instead of G.play
i don't know what mult you're talking about still
like do you mean in a gros michel/cavendish way or a showman way?
Wait I think I got it working I think let me test I will let you know thanks again ☺️
more of a showman way
based on the lack of response im gonna guess this is the way to go
does it have to be any joker or just the one you're making
i think you can give a Joker a in_pool function that returns {allow_duplicates = true} , allowing the Joker to show up even if you have one
basically I want to make it a sticker, if the joker has it it can be found again
you probably have to patch get_current_pool then
i think you might have to do a lovely patch in that scenario
you might also be able to do it by setting G.GAME.used_jokers[key] to nil
...I FINALLY DID IT
Ok I'll try these out thank you very much,
yeah it turns out my hooks were way out of wack
btw does anyone know if i can just create a text box on a whim using the update() function?
COLORSSSSS
nice
native multi box is life
horizontal boxes when
Also to quickly explain EX jokers
Buffed jokers that require you to have a golden stake on the normal version of the joker
I currently have 12 Normal Jokers, and 4 EX jokers
bump
why doesnt this work
you can use it now!
show me those gloriously large tooltips
You know you can just use context.card to get the card that was added.
what
Instead of looking through the jokers you should do if context.card_added and context.card.ability.set == "Joker" and context.card.edition and context.card.edition.negative
so replace the for loop with this?
Yes.
if context.card_added and context.card.ability.set == "Joker" then?
Replace the for loop and ifs with that.
can i use table.find?
hmm is there a way to order them
they should be in the order you type them
they dont seem to be, unless one of my patches is breaking something
like this
can you send me the loc string?
Yes.
oh
I know what it is
it's your typing bit
so when it tries to put the extra ones in the 3rd place in the box, that's above the first description instead of after
it adds an extra node in
oh when i kill negative it doesnt have time to process that
you have to get it therapy then
@red flower is there a way to show total mults the card is carrying in the tooltip so in changes when the joker card mults increase?
loc_vars?
I think you'd have to patch in this bottom row similar to how I add in the extra boxes
i can also be lazy and just put the last line first 👍
I mean if you want to reorder all of your loc files instead of writing a small patch knock yourself out 🤣
looks good though!
I was debating adding colour support to it, perhaps another day
i will think about it once i get the energy to go through 300 joker locs
yeah for that one i kept my patch
oh I guess you have to update all the locs anyway
Yh I kept it but yet
I want to change the art of a joker from another mod using a lovely patch, how would I do that
I know how to do lovely patches but not how to make it use the art from my mod
Question, is there any easy way to change which hands contain which other hands?
my evil creature joker has 0.2x mult for every cursed card in the deck
im relatively new to modding and I want to add a utility joker that makes all hands contain all other hands
I'm not sure about that but I assume you would need to take ownership/patch all jokers that deal with contained hands.
awww
theres no utility function for checking what a hand contains or anything I could patch?
Now that I'm looking at the code you could probably fill context.poker_hands with every hand.
hmmm
that would work
except it’d make every hand count as a flush five right? or whatever the strongest hand is
I’ll try it later today tho
You could hook G.FUNCS.get_poker_hand_info get the real scoring name then fill it with poker hands.
how do i do the end of round money like cloud 9 or golden joker
by reading the docs 🙂 https://github.com/Steamodded/smods/wiki/SMODS.Joker
okay jeez
how do i do a shifting color like negative does
i think it should be modprefix_key yeah
kk
...how did you do that
ok ive got a slightly weird issue my snack cards and booster are being added no problem but the jokers dont get added to collection did I do something wrong?

i can send a joker file if needed
try using SMODS.load_file instead
i see
anywhere specific?
im not sure what u mean
instead of all the NFS.load stuff you're doing
me when I
for _, file in ipairs{...} do -- ... is just a list of filenames here.
assert(SMODS.load_file("items/"..file))()
end
me when im evil
local others_src = NFS.getDirectoryItems(SMODS.current_mod.path .. "src/others")
for _, file in ipairs(others_src) do
assert(SMODS.load_file("src/others/" .. file))()
end
outside of the SMODS change to make this natively work with loc_text.text/loc_text.description, would this also be possible via main_end or would it have to be done via generate_ui()?
should i just replace the NFS set ip with this? ik it works done in past its jus weird because only jokers dont work
so should I just change jokers?
i found issue SMODS.Joker had " = {" no = XD
¯_(ツ)_/¯
oh, right
so i'm writing a new joker and my plan for it is to have, among other things, the name change based on certain conditions. i know about description changing via main_end and other stuff, but how do i change the name on the fly? 
Just the name?
how can I apply a sticker using a spectral card, I know that there's an "apply" method but I dont know where or how to use it
no
i see. what does this do?
ah, so i need corresponding items in localization, then
yes
I've done something like that for my Seal^2 and the 2 upgrade vouchers.
Egg.
nvm I got it
crashing here I need to define certain jokers in sets for some cards functions idk if right way
do i add this in main
...should it not be ['Joker'] = true?
for the joker pools code?
If this is supposed to be a Joker and you're adding it via SMODS.Joker... why the manual inject attempt?
Nope.
so what am i supposed to do im not really understanding what ur saying tbh
If this is a Joker being defined, just ignore the pool stuff as it's handled automatically.
ok I just added pools variable in becuase it still wasnt regerstering in my main idk why i can send the main file again and ex of joker
ive tried what u said and hasnt worked
fwiw, I have a "pool" of my own defined in the main file and, at the bottom of said file, I do the loading of other .lua scripts to load the actual content, like the Jokers and such.
ok thank you visual is a lot easier to interpret
-# The main file was getting a bit too big to scroll through, so I split it off into many parts.
nah i get what u did tho so ill prob just input manually
is this correct? trying to figure out how shaders work on editions
the foil shader is from vanilla
how do i get the most played hand?
didnt work sadly desinged it in i think the correct way based on urs. my jokers are in specific folders in my joker folder under items
i just wanna keep orginized
look at G.GAME.hands i think was it
if not, print(tprint(G.GAME)) should help you
...did you still keep the pool stuff in the Jokers?
Send the pimento_pepper one over?
...hm, all appears well. What of your SMODS - tried updating it?
heres my main so u can see it
i changed the jokers loading to how u did it but kept the boosters same since they were fine before
-# ...wait, did you even define a 'Pepper Jokers' set?
set = 'Pepper Jokers', is still there.
oh so you dont need that?
Remove (or comment out) the set = line in your Jokers and try loading.
k
local _hand, _tally = nil, 0
for k, v in ipairs(G.handlist) do
if G.GAME.hands[v].visible and G.GAME.hands[v].played > _tally then
_hand = v
_tally = G.GAME.hands[v].played
end```
telescope does this
how come i can find those things for anyone but for me
didnt change anything sadly
-# Did you update SMODS?
how do i make that little animation of the card being created in the screen then going to the deck like the marble joker?
i already looked at the marblee joker code but didnt understand
juice up gives you animation part not sure how u do the stone joker effect i havent seen send and i can try helping
okok! 1 sec
Look at the Event i add with GE Manager
0401a? Current one, as of this message, is 0419b. Also, kind? Not set?
For consumables, need the set.
mm right
is that what the juice up does?
Anyone know why I am getting this error whenever I hover over a booster pack with this code
That's a message being displayed by either a return {} defining such or card_eval_status_text.
yes i saw it shake u can use juice up to have card shake in a sense
send me the lua code of marble joker plz i can figure out how to do other part
updating game ur prob right jsut noticed too lol
i meant the card showing up then going to deck, not the "+1 Stone"
it should be colours = { HEX(...) }
i can send you the code for my joker if its better, it is already working, just need the enhanced card to show up in the screen and then go to the deck
ya feel free to dm me ive made tons of joker ideas i bet i can help
if self.ability.name == 'Marble Joker' and not (context.blueprint_card or self).getting_sliced then
G.E_MANAGER:add_event(Event({
func = function()
local front = pseudorandom_element(G.P_CARDS, pseudoseed('marb_fr'))
G.playing_card = (G.playing_card and G.playing_card + 1) or 1
local card = Card(G.play.T.x + G.play.T.w/2, G.play.T.y, G.CARD_W, G.CARD_H, front, G.P_CENTERS.m_stone, {playing_card = G.playing_card})
card:start_materialize({G.C.SECONDARY_SET.Enhanced})
G.play:emplace(card)
table.insert(G.playing_cards, card)
return true
end}))
card_eval_status_text(context.blueprint_card or self, 'extra', nil, nil, nil, {message = localize('k_plus_stone'), colour = G.C.SECONDARY_SET.Enhanced})
G.E_MANAGER:add_event(Event({
func = function()
G.deck.config.card_limit = G.deck.config.card_limit + 1
return true
end}))
draw_card(G.play,G.deck, 90,'up', nil)
playing_card_joker_effects({true})
end
okok!
adding cards in deck is easy so i got u
great way to figure out too
still the same error
what's the code now
oh sorry, loc_vars should be a function
i didnt notice that
@faint yacht ur a legend bro it worked thx so much solved an error i could not get XD
how do i check if a card is a facecard?
i normally check if its within ranks 11~13, but i realized that doesnt work with the one joker
:is_face()
can a seal check for when its drawn?
jippie
I think this is sick
How do I make playing cards in the shop free?
Is this the right way for a joker to destroy itself
remove(self, card, context, true) was what I did recently @worldly thicket
@faint yacht finally seeing my jokers in game is so satifying all thanks to u 🙌 clutch coder in the house
Alright! Thank you, I was just going off of what the Gros Michel does and was confused lol
It's saying it's an undefined global
Anyone have an example of adding cards to your deck with a back? Nvm, found one!
ohh, sorry, remove() is a pokermon function, that wraps around some lines that are probably relevant. G.jokers:remove_card(self) then?
It won't be affected by oops all 6's, do you want that?
how do I get the create card part of a booster pack working
If I want it to be affected would it break anything I already have?
Hmmm wait you have a 4-way (40% to do nothing) probability check, which is probably best not to involve Oops. Since which odds would go up?
Also should I start the pseudorandom at 0 and check for 0 in which case to do nothing
that's just preference
Alright, but with my current set up it will work?
seems like it will work, 20% chance of xmult, 20% of chips, 20% of destruction, 40% of doing nothing
does anyone have a list of EVERY Smodded function, context, and whatnot?
the smoded docs has a lot, but i know its missing some stuff and id love to know what im missing out on
anyone know whats up here?
Syntax error: card.lua:5360: 'end' expected (to close 'function' at line 828) near '<eof>'
Additional Context:
Balatro Version: 1.0.1o-FULL
Modded Version: 1.0.0~BETA-0419b-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.7.1
Platform: Windows
Stack Traceback
===============
(3) C function 'function: 0x1c86cf38'
(4) global C function 'require'
(5) main chunk of file 'main.lua' at line 884
(6) global C function 'require'
(7) LÖVE function at file 'boot.lua:323' (best guess)
Local variables:
c = table: 0x1c86a5a8 {identity:false, version:11.5, accelerometerjoystick:true, modules:table: 0x1c86a5f8, gammacorrect:false, title:Balatro, externalstorage:false (more...)}
openedconsole = boolean: false
confok = boolean: true
conferr = nil
(8) global C function 'xpcall'
(9) LÖVE function at file 'boot.lua:362' (best guess)
Local variables:
result = boolean: true
(10) global C function 'xpcall'
(11) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
It worked however sometimes it doesn't do anything not even with my check for 0
id wager, its a syntax error /j
pseudorandom("hatter", 1, 5) will roll 1, 2, 3, 4 or 5; what are your checks like?
have you checked for missing commas or end
rn I set it to pseudorandom("hatter", 0, 3) and I check for 0, 1, 2, 3
well, put a print after you roll it so you can see which number is failing to do stuff
it might be _pool == 2, that ease_chips inside the return statement seems suspect
That works, but let me to the print statement
was the bunco mod existing in my mods folder lmao
wasn't even turned on
quite
@weak gate I found out, it's when _pool == 3, the Joker doesn't destroy itself
card:remove()
card = nil
``` maybe do all these to destroy itself...?
how do I get the create card part of a booster pack working
(my current code)
https://github.com/InertSteak/Pokermon/blob/main/boosters/packs1.lua @tired wharf there might be a good example in Pokermon
How can I make a return that levels up a random poker hand by a random amount
alr i'll try that thanks
Could someone give me a rundown on what I need for my json file?
I tried this and got this error
Thanks!
how does one reference the name of the currently played hand?
context.scoring_name == 'Flush' for a specific hand is what I use
does anyone know why I am getting this error when I open this booster pack
this worked but how do I make it do the burning away effect
hmm there's a start_dissolve() function
there's also Card:explode
SMODS.Consumable({
key = "rchariot",
set = "Tarot",
pos = { x = 2, y = 1 },
atlas = "rtarots",
config = { extra = get_starting_params().hand_size },
set_ability = function(self, card, initial, delay_sprites)
card.ability.extra = G.GAME and G.GAME.starting_params.hand_size or self.config.extra
end,
loc_vars = function(self, info_queue, card)
table.insert(info_queue, G.P_CENTERS.m_steel)
return { vars = { card.ability.extra, G.hand and math.max(G.hand.config.card_limit - card.ability.extra, 0) or 0 } }
end,
can_use = function(self, card)
return #G.hand.cards > 0 and G.hand.config.card_limit > card.ability.extra
end,
use = function(self, card, area, copier)
local targets = {}
local valid_targets = copy_table(G.hand.cards)
for _ = 1, G.hand.config.card_limit - card.ability.extra do
local new_target = pseudorandom_element(valid_targets, pseudoseed("rchariot"))
targets[new_target] = true
for i, held_card in ipairs(valid_targets) do
if held_card == new_target then
table.remove(valid_targets, i)
break
end
end
end
local modification_list = {}
for _, hand_card in ipairs(G.hand.cards) do
if targets[hand_card] then
table.insert(modification_list, hand_card)
end
end
modify_cards(modification_list, function(target)
target:set_ability(G.P_CENTERS.m_lucky)
end)
end,
})
using this consumable causes the game to close with no error message
the log also doesn't show anything useful
I don't know if I should do L today or not.
try limiting/early breaking the first for loop
or all loops fwiw
im getting a crash everytime the joker is activated
skipping the first loop has no effect
What do you guys think of these designs?
commenting out both loops doesn't fix anything actually
Does it freeze then crash or does it crash instantly?
probably a 7.5 out of ten
just instantly closes when i press use
no freeze
great! im pretty new to this stuff so im glad im doing good thus far
also here's the definition of modify_cards
---Modify cards with the tarot animation
---@param targets Card[]
---@param modification fun(card: Card): nil
local function modify_cards(targets, modification)
for i, target in ipairs(targets) do
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.15,
func = function()
target:flip()
play_sound('card1', 1.15 - (i - 0.999) / (#targets - 0.998) * 0.3)
target:juice_up(0.3, 0.3)
return true
end
}))
end
delay(0.2)
for i, target in ipairs(targets) do
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.1,
func = function()
modification(target)
return true
end
}))
end
for i, target in ipairs(targets) do
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.15,
func = function()
target:flip()
play_sound('tarot2', 0.85 + (i - 0.999) / (#targets - 0.998) * 0.3, 0.6)
target:juice_up(0.3, 0.3)
return true
end
}))
end
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.2,
func = function()
G.hand:unhighlight_all(); return true
end
}))
delay(0.5)
end
this works with another card i used tho
And if you commented out everything it doesn't crash?
my main reconmendation is to add some shading/more colors and add a border to some of them but besides that I quite like the designs
aaaa iaaa iaa
Gotcha
game does not crash if the entire use function is commented out
How much can you comment out before the game doesn't crash?
i'd also reconmmend that you look at the base game jokers to get an idea of how they look
copy_table(G.hand.cards) seems to be causing the crash
apparently copy_table is a deep copy!?
since when!?
How can I increase the level of a random poker hand
Is there a way to target all files at once with lovely
check orbital tag and space joker 
always has been 🧑🚀
-# just gonna reply to this to try to get a responce
use SMODS.create_card
Probably by getting a random value from G.handlist and then checking that it is visble then leveling it up.
is this it? This seems like too little
where are you finding this?
it's now giving me this error
That levels the played hand.
Ah, I just saw the Space Joker's code and went with it
Also you should be using card not self
I have been and the booster pack page (among others) is not helping (I also started making balatro mods a week ago and had no prior experience with lua)
SMODS.create_card is documented on this page
SMODS.create_card expects a table
in the future you could find this out looking at other's code or yes, the docs
-# I'd like to ask this again hoping someone answers
Try this level_up_hand(card, pseudorandom_element(G.handlist, pseudoseed('seed')), nil, 1)
Thanks
i've been looking at the code for cryptid and pokermon for a while and have been testing and trying things for a while and nothing has been working so asked here
i'd also recommend cloning https://github.com/Steamodded/smods.wiki.git, then you could use an actual usable search function locally instead of the github wiki's
not entirely your fault, github's wiki feature got neglected for the past few years and it's dogshit
that's why i recommend downloading some docs locally regularly, and then searching through them with vscode or whatever
alr
-# I'll just assume it's impossible now
can you be more specific?
I'd like to patch all lua files of the game with basically the same thing
oh
And it's not very convenient to do it for every file separately
you could write an external script that does the mundane work for you - other than that idk, sorry
Nah no problem
Tried it, it works for a split second then crashes
turbotastic
i like them...however even though i'm not an f1 nerd, that car looks a bit thin; and the autograph text is a barely legible, but that can be a stylistic choice, it's obvious it says "Joker" (right? :D)
Show your code.
It worked for me.
Try removing the colour.
It was the color
the hour clock handle also looks a bit out of place, you could maybe mask that with a spade symbol?
How do you check for WoF fails?
I tried checking cryptid but I can not find the code where the "Celestial Globe" is
idk man
im just checking chat history
it was labelled apparently on the wiki as "Celestial Globe"
This is how cryptid does it.
(when?)
how would i inject the patch? Sorry, still very new to balatro modding.
wait nvm
i think i found it
You put it in the lovely.toml
Looks like using any multi-use card added by cryptid will instantly crash the game
3rd time now that I tried to use a multi-use followed by an instant crash
What do you mean Multi-Use?
I tried it with a different code card that also said "Multiuse: (2 remaining)" with even less mods than I have now
and it caused a similar crash
I tried it again, the exact same thing, and it didn't crash this time
K it looks like it does the crash if you have multiple consumables when you use the card
does anyone know why this doesnt work
if context.individual and context.destroy_card and context.cardarea == G.play then
if pseudorandom('burn',G.GAME.probabilities.normal) <= G.GAME.probabilities.normal/card.ability.extra.odds then
card.ability.extra.Xmult = card.ability.extra.Xmult + 0.25
return {
destroy_card = card,
message = ('Burning!'),
colour = G.C.ATTENTION,
}
end
end
if context.joker_main then
return {
Xmult = card.ability.extra.Xmult
}
end
end
} ```
first step: learn to screenshot 
Could such be animated?
I don't think you can animate mod icons.
My dad turned off the wifi so I couldn't
i seemingly keep getting this error when removing a UI box: engine/ui.lua:396: attempt to index field 'object' (a nil value)
is there any reason this would be causing that?
if self.uibox then self.uibox:remove() end
if i remove that line, it works perfectly, just doesn't clear the UI box
this is the definition of the UI box:
self.uibox=UIBox{
definition=def,
config={
major = G.HUD:get_UIE_by_ID('blind_tracker'),
align = 'cm',
offset={x=0,y=0},
colour=G.C.CLEAR,
}
}
i guess i would need to show def but it's rendering fine otherwise
maybe if apngs are supported?
not exactly a mod but im working on something using nodejs canvas that can display a game state
this entire ui (other than the images obviously) were generated programmatically from the game state
still gotta add cards
but it shouldnt be too hard
i also need to make it so the deck in the bottom right can change size (right now the deck stack is just an image other than the top card)
and i need to handle selected cards for the cerulean bell
one nitpick: the jokerdisplay textboxes seem slightly too short
because right now the chips and mult display will always say 1
I'm entirely unfamiliar with what nodejs canvas is, but I'm very interested haha
it's a library for node.js that lets you draw images
hows this
seems close enough. it doesn't really matter
i also thought it looked a little short but i thought copied the exact value from the screenshot i took
turns out i was 2 pixels off
either way im not copying jokerdisplay functionality entirely
yeah fair enough
i just figured id use the ui as inspiration
i just wanted to use it to easily show where scaling jokers are
wait i just realized i would need 2 for yorick
me when i cant hard code because of one joker
because the end goal is to make a text based balatro
to be used for a discord bot and/or over sms
i already made a bot that can recieve and send text messages from my phone
so i figured itd be cool to make balatro
localthunk please dont kill me
oh on the topic of balala discord bots
but yeah if its text based its pretty important that i show the details of cards because you wouldnt just be able to hover over it quickly
what would probably be useful is being able to do like [[Baseball Card]] and having a message show up with the joker's effect and art
sounds pretty easy
Does calculate return table support delay?
https://github.com/AlecM33/balatro-joker-bot/tree/main/modules
could even take the details from the reddit bot so you wouldnt need to take them yourself
It has to be done with generate ui
What are you trying to delay?
Just want a message stay a couple deciseconds longer on screen.
Uhhh it might do, just give it a try
@daring fern what situation are you experiencing missing messages?
On the most recent version as I've seen the again message is only showing for jokers in context.joker_main
what have you used to test this
This:
what exactly does the 'destroying_cards' cardarea in calculate context target?
wait, i'm not even sure if that's standard smods or just in my dump due to another mod patching it in
I'm not entirely sure how the game handles the cardareas that are presented as strings
Also context.individual message positions are still a bit strange.
Is this the correct way to reduce the score requirement by 10%?
Remove the message and message card lines
0 difference.
Can you record?
https://github.com/TheOneGoofAli/TOGAPackBalatro/blob/0844919610e2a95096eab3ac5c9b1125b16a5f43/items/joker.lua#L324-L333 Somewhat, have a look.
How does it look with chad?
There is a retrigger message.
So chad works fine?
I think it might.
Huh
apngs aren't animated btw :D
my pepper isnt evoliving to the 'anaheim chile' correctly am i doing SMODS.create_card right?
Replace SMODS.create_card with SMODS.add_card and key = 'anaheim_chile' with key = 'j_mills_anaheim_chile'.
...curious if we can access the pos of the atlas itself somehow and change it that way?
kk
totally worked! i want the next evolution to keep previous mult how do i have it be added to next joker per say?
local newcard = SMODS.add_card{...}
newcard.ability.extra.mult = card.ability.extra.mult
youve been so clutch bro i hope you have a blessed day u deserve it
finished the cards
first picture is canvas generated one
second picture is reference image
well technically not finished i still need to make the editions for them
i dont generate the editions live i have folders like jokersbase, jokersfoil, jokersholographic, etc.
Is there a way to make scoring happen twice?
so i just gotta do that for the card backs and overlays
did you manually make one version for every edition instead of applying a shader...
i made a script to mass convert them
i dont know of a way to apply a shader with nodejs canvas
im sure there is one
but it was just easier to make the images instead
how would you be able to get a card's rotation exactly right on the canvas
it was just based on the distance from the center of the card area
the closer it is to the center the less rotation it has
oh right there's uh reduced motion
oh yeah
that ss was taken with reduced motion
yeah otherwise theyd be moving all around
i could always add some randomization to the rotation once im done
but even without it i think it looks great
i sure cant wait to recreate the shop screen and the blind screen once im done with this
and then rewrite the game logic in js
luckily i can borrow the balatro calculator code for the game calculations
but i still gotta make everything else
local def = {n=G.UIT.ROOT, config={align = "cl"}, nodes={
{n=G.UIT.R, config={align="cl",maxw=2.075},nodes={
self:get_sprite("Small"),
self:get_sprite("Big"),
self:get_sprite("Boss"),
}}
}}
^ that's the def for the UIBox, all the get_sprites is markup with the sprites in them as object nodes. is that the "object" it says in the error can't find? do i have to make a UIBox for every object?
n = G.UIT.C,
config = {align = "cm"},
nodes = {
{
n = G.UIT.R,
nodes = {
{ n = G.UIT.O, config = { object = blind_sprite } }
}
},
blind_preview_ui and { n = G.UIT.R, config = { align = "tm" }, nodes = { blind_preview_ui }},
{
n = G.UIT.R,
config = { align = "cm" },
nodes = {
tag and {
n = G.UIT.C,
config = {align = "cm"}, nodes={{
n = G.UIT.O, config = { id = choice.."_tag_sprite", object = tag_sprite, colour=G.C.CLEAR
}}}
}}
},
}
does it have an issue with the nodes being made from booleans?
Add an or nil in any logic to add nodes
still getting attempt to index field 'object' (a nil value)
{
n = G.UIT.C,
config = {align = "cm"},
nodes = {
{
n = G.UIT.R,
nodes = {
{ n = G.UIT.O, config = { object = blind_sprite } }
}
},
blind_preview_ui and { n = G.UIT.R, config = { align = "tm" }, nodes = { blind_preview_ui }} or nil,
{
n = G.UIT.R,
config = { align = "cm" },
nodes = {
tag and {
n = G.UIT.C,
config = {align = "cm"}, nodes={{
n = G.UIT.O, config = { id = choice.."_tag_sprite", object = tag_sprite, colour=G.C.CLEAR
}}}} or nil
}
},
}
} or nil
...fiddling around, maybe it'd take a bit of rewriting of the way the mod icons are prepped and such for animated mod icons to be feasable imo.
okay it's not happening on remove nvm
so it breaks when it is removed before being remade, but only when the UIBox is assigned to self.uibox 
oh it was deleting the references to the AnimatedSprites on :remove() lmao
i can never EVER spell it correctly on the first try
anyone how i can do multi-box descriptions with generate_ui()? the actual syntax for it
full_UI_table.main[#full_UI_table.main+1] = { what ever fucking ui node setup you have here }
atleast that's already if you already have generate_ui setup in your card of choice
i don't, for what i want to do, i'm gonna need to move my stuff from main_end to generate_ui()
i'm not confident
if you wanna see how the text description is actually parsed you might want to look into localize for that
got a joker that makes diamonds considered kings, although it doesnt interact with wild, and i dont seem to find how to hook wild cards info (tried ability == 'Wild Card', and ability.name == 'Wild Card'), any idea?
if next(SMODS.find_card('j_drx1_dauphine')) and (suit == 'Diamonds' or ability == 'Wild Card') then```
here, doesnt take the ability into account, guess thats because it's not how it's called, and no clue on how it would be
(bonus, how do you declare a card as a face separately to it's rank? card.is_face = true ?)
or shall i do a separate hook perhaps
Anybody got a good resource to start with? I have some experience with lua but looking at some of the other mods it seems a bit overwhelming
I tried looking for an example mod but couldnt find anything
github/smods/example_mod
Maybe a bit of my stuff could help? Though, as you mention the entire Diamonds suit being treated as Kings, you'd want to also take :get_id() into account.
before any modif, it was like that :
local getidref = Card.get_id
function Card:get_id()
local id = getidref(self)
local suit = self.base.suit
if id == nil then
id = 13
end
if next(SMODS.find_card('j_drx1_dauphine')) and suit == 'Diamonds' then
if id <= 12 or id == 14 then
id = 13
end
end
return id
end```
will check your code to see if there's my answer
but doens't seem to activate on wild cards for now, and doesn't count as faces
i see you've separated it clearly per thing, like issuit, isid and isface
You can do the SMODS.has_enhancement(card, 'm_wild') to check if it has the Wild enhancement.
in the ifs? will try
had to replace the card with self but works with wilds now, thx !
i see that you did another iscardref with also pareidolia in it
is it necessary to do an additional checking in a hook like that to ensure the transformed card's id to be seen also as isface ? and to put pareidolia in it too to make sure it doesnt somehow misinteract with the base game code?
I put it there just in case.
i think i'll do it too then 😂
my pixel art (bottom) vs the pixel art she tells me not to worry about (top)
did i do it wrong? the diamond cards are still showing normally even against the boss that flips face cards, idk why
local isfaceref = Card.is_face
function Card:is_face(from_boss)
if self.debuff and not from_boss then return end
local suit = self.base.suit
if next(SMODS.find_card('_drx1_dauphine')) and (suit == 'Diamonds' or SMODS.has_enhancement(self, 'm_wild')) or next(find_joker("Pareidolia")) then
return true
end
return isfaceref(self, from_boss)
end```
doesn't work
also, this removed my joker's name
how do you check if a planet card of most played hand is being used
SMODS.find_card('_drx1_dauphine') ?
Missing a j there?
For you can't Wee.
Lol
a friend of mine wanted me to make heart card considered as 2s
it's very stupid (i might do it)
it already looks fine, and the crt shader (which I personally don't use) makes it look even more seamless
how do you look at currently selected cards
I blame @marsh radish for having me end up processing this sheet into the 4 atlases for the 4 DeckSkins.
G.hand.highlighted
this is a list?
ye.
What are you trying to do?
Is this valid
what you showed before
Just put a table of tables as your loc description
no it would be ability, right
because ability is enhancement
which ability is a string
but i do things with this description that won't work in a loc description table
Like what?
value in (Currently: changes colour with the value. that's not possible in loc description, right?
That’s absolutely possible

for the can_use function of my consumable, how would i check for an enhancement on both cards
do i just do an or statement
but i already have the ui code, why can't i just do this via generate_ui() that way i can also keep my animatedsprite
for looking for an enhancement on either
If one of them has it or both?
i just don't know what i'm doing wrong
just one
Then just carry on using your code if it works
or either i mean
or.
so if G.blahblahblah[1].ability = "blahblahblah" or G.blahblahblah[2].ability = "blahblahblah"
and this wont error out if the second index simply isnt present, right?
It would because you would be indexing a nil value.
okay
how do i remediate this
why the fuck are you hardcoding the description 
if (G.hand.highlighted[1] and G.hand.highlighted[1].ability) or (G.hand.highlighted[2] and G.hand.highlighted[2].ability)
got it
and does this work\
you put else statements before the end if im not mistaken
wait why am i asking ive just ought to see if it works
Sometimes it is needed.
Though, sometimes, it can be as simple as
can_use = function(self, card, area, copier)
return G.playing_cards and #G.playing_cards > 1
end,
...i'm gonna have an aneurysm
please. i just want to know why my code in generate_ui() is:
- removing the joker's name
- not splitting into multiple boxes
that's all. i'm not shopping for alternate solutions to this
wdym by splitting into multiple boxes
also full_UI_table.name = localize{type = 'name', key = desc_key, set = self.set, name_nodes = {}, vars = specific_vars or {}}
you might also want to worry about the debuffed and undiscovered descriptions
if not self.discovered and card.area ~= G.jokers then
localize{type = 'descriptions', key = 'und_'..self.key, set = "Other", nodes = desc_nodes, vars = vars}
elseif specific_vars and specific_vars.debuffed then
localize{type = 'other', key = 'debuffed_default', nodes = desc_nodes}
else
-- your custom ui
end
kinda like this
Because you’re editing generate ui wrong
full_UI_table.main is the main description box, that's not going to make more boxes
Just do it in the easy way
i was told by someone else to do that #💻・modding-dev message 
Use main_end to put your sprite at the end of the main box, and then use the new feature for your multiple boxes
new with newest smods version
you can populate loc_text descriptions with multiple tables of text and it'll do that
new smods feature that allows for multiple [[[box]]]
the method im currently using just uses a lovely patch to do it
wait what the fuck do you mean by multiple tables of text
So you know how descriptions are normally tables of strings?
Just use a table of those tables
god
as in
loc_text = {
name = 'bla',
text = {
{ 'hi' },
{ 'xd' }
}
}
what the fuck is a backwards compatibility 🔥🔥🔥
i would switch to this if you had the ability to change the boxes' color which doesn't seem to be the case currently
Yeah I was considering colours
that and i don't want to update to a dev smods version just yet
is it only for descriptions type loc
It is back compat myst don’t worry
is this a little too unreadable
It works on the “other” type too whatever that is used for (I know it’s used for boosters for some reason)
lol of course my blind passive system doesnt work with it
use = function(self, card, area, copier)
local potential_victims = {}
for i = 1, #G.jokers.cards do
if G.jokers.cards[i]:can_calculate(true) and not G.jokers.cards[i].ability.eternal then
table.insert(potential_victims, G.jokers.cards[i])
end
end
local victim = pseudorandom_element(potential_victims, pseudoseed("I LOVE AMONG US"))
if not victim then return end -- Safety check
victim.getting_sliced = true
G.GAME.joker_buffer = G.GAME.joker_buffer - 1
-- Store reference in local variable for closure
local dissolve_target = victim
G.E_MANAGER:add_event(Event({
trigger = 'immediate',
blockable = false,
func = function()
if dissolve_target and dissolve_target.start_dissolve then
dissolve_target:start_dissolve()
end
G.GAME.joker_buffer = 0
return true
end
}))
--[[ And Thus begins the part where i purify the cards. I'm not worried for if they are cursed or not, thats checked in can_use...
-- Now, in a perfect world only cursed cards will be selected, but I'll make sure that the cards are cursed before operating on them.--]]
for i = 1, #G.hand.highlighted do
if G.hand.highlighted[i].ability == "m_astropulvis_cursed" then
G.hand.highlighted[i]:juice_up(0.3, 1)
G.hand.highlighted[i]:set_ability("m_astropulvis_purified")
end
end
end,
a based one
get on my fucking level idk what to tell you
The game or the character
what character
Is there a similar function to SMODS.current_mod.reset_game_globals(run_start) that is called every ante?
among us
below the event
what character
among us