#💻・modding-dev
1 messages · Page 552 of 1
You can multiply your money by a specific value is what I’m getting at.
bump
Not just x2
ease_dollars(math.min(card.ability.immutable.moneymultceiling, G.GAME.dollars * (mult - 1)))
mult must be doublemoney?
mult = 2 will double your moneu
yes
doublemoney is a Config variable btw
so, just replace it
sorry to nag, i still have. no idea how to start on this. ^^;
"5. Removes the stickers of all your jokers.",
this is the next random ability of neo metal sonic
yes, he has 1 in 8 random effects on trigger
How to check joker for having sticker?
For k, v in pairs(G.jokers)?
i think you can check for individual stickers
idk how you check for stickers in general though
modded stickers...
G.jokers.cards..................
Well, I think so too, but mod stickers will get in my way.
His ability is to remove ALL stickers of the jokers
ipairs
pour guy
for k, v ipairs(G.jokers.cards) do?
yes
G.jokers.cards is just number indexes
i looked at entropy and what it does is:
loop over SMODS.Sticker.obj_table
then for another loop inside that loop going over a cardarea
thats for counting every sticker that is
Does debuff also count as a sticker?
I didnt understand anything :/
no
Oh.
Would’ve been fun to have a joker that gets rid of all debuffs
i understand
though i assume you just want to check stickers of a single joker
All of them actually
okay
The original idea by auzzy was to make all jokers eternal but that would probably be detrimental
entropy does this for counting stickers
just replace G.I.CARD with G.jokers.cards
like that?
oh
it would be joker.ability[sticker]
Does anyone know if there's a way to have localization text only appear conditionally? I can make it not appear but it's on it's own line so it leaves a big empty space which I'd like to avoid
oh yea
ty!
bump2
all of that is in G.GAME.hands["hand name"]
if randomeffect == 5 then
for k, v ipairs(G.jokers.cards) do
local total = 0
for i, v in pairs(SMODS.Sticker_obj_table) do
for i2, v2 in pairs(G.jokers.cards) do
if v2.ability and v2.ability[i] then
total = total + 1
end
end
end
return total
end
it's 12:28 AM.
why are you doing 2 loops over G.jokers.cards
oh for the love of
if randomeffect == 5 then
local total = 0
for i, v in pairs(SMODS.Sticker_obj_table) do
for i2, v2 in pairs(G.jokers.cards) do
if v2.ability and v2.ability[i] then
total = total + 1
end
end
end
return total
end
there
yeah
the next listed ability is this apparently.
-- Squares all of your current chips and mult (Triggers After Scoring).
this was just proposed to me
idk what they mean by squaring AFTER scoring
Stiker.obj_table
4 line
What
Ok
saw it
next ability -- Gains 1.5XMult if a Soul is used, or a Legendary joker is to Neo Metal Sonic's right.
How to modify vanilla tarot card?
multiply a number by itself
probably
They sent me a new message
They told me it squares my chips and mult AFTER ALL OTHER jokers stop scoring
1 AM, and I have class at 7
- sleep
- read the documentation, this is a pretty simple question to answer
I swear if it’s context.after_scoring
actually my bad, if you want it to affect score i think context.final_scoring_step is better. and that's not documented yet i don't think
(context.after is a thing but it might be too late in the process)
oh it is documented
mixed it up with initial_scoring_step then
will nothing bad happen if i call a function outside a context check, but that function does have a context check inside itself?
i do that often when i want to do the same on multiple cards
alr
creates 7 negative perishable jokers.
if randomeffect == 8 then
for i = 1, card.ability.immutable.rnpjokers do
local neojokers = pseudorandom_element(G.P_CENTER_POOLS.Joker, pseudoseed('neo2')).key
SMODS.add_card({ key = neojokers, edition = 'e_negative', stickers = {"perishable"} })
end
end
Random too
Anyone know how to check if a card is a joker? as in
if context.buying_card then
if card.??
I think you can check for Cardarea here
I forgot
context.card.ability.set == "Joker"
I’m stupid i was thinking of both
oh cool ty
yall are actually so helpful you wouldn't belive
maybe I'm kinda taking advantage of yall and not doing enough research tho lol
I will bookmark this
if it makes you feel worse this is in the vanillaremade wiki
damn, I looked through it for a bit but I didn't ctrl f well enough ig
I’m gonna go to bed
i would like to make a joker which treats enhanced cards as wild cards, but i want to write it in a way that doesn't result in it infinitely looping due to context.check_enhancement
It’s already late
tbh the wiki is kinda hard to navigate
yeaaaah
if context.other_card.ability.set == "Enhanced"
would i use that instead of check_enhancement or in tandem with it, because this code i currently have doesn't work
if context.check_enhancement and context.other_card.ability.set == "Enhanced" then
return {
m_wild = true
}
end
it was
then idk
can i put additional sets into the descriptions in my localization file? i have a set of things i want to use for info_queues and i would like to keep them seperated for organization purposes
they wont show up by default, i think you need to do some stuff for other sets to be parsed properly
You can put as much stuff as you want
you can add extra blank lines and comments :3
fair
I just have them in descriptions.Other because i can't be bothered and use the --#region plugin to separate them in vscode
I'm just adding them in descriptions and then make lines manually 
i also have my loc files separated so that helps
I guess it's not the best way to localize stuff but hey, it's working
Can i make a Handy ui redesign ?
For the sake of nothing
I just like ui
Depends on what you have in mind
Nothing.
Because I'm already working on this
Oh neat
But I allow you to try to make smth
can i do for loops outside context checks too (with no code inside it actually happening outside of a context check)
Yes
what is the full key for booster pack ?
it was not this, it broke literally on the line of trying to call smeared_check.
function SMODS.smeared_check(card, suit)
if ((card.base.suit == 'Hearts' or card.base.suit == 'Spades') and (suit == 'Hearts' or suit == 'Spades')) then
return true
end
return false
end
}```
p_[prefix]_[key]
Why it still doesn't convert card into wild suit?
so, for example p_mod_card_pack
Thx
is there a way to prevent a card from getting flipped?
the key is 'Wild' not 'wild'
in the 2nd pic
oh shoot wait, i just realized
tazzan, are you
?
yeah i'm an admin in the tf2 blender server
how's it been? I left quite a while ago
it's been updated to the latest update and the ports are all way better now
Still doesn't work😭
Lovers doesn't select 2 cards and doesn't convert them to wild suit
But I want to make it suit
i just realised that's a new suit
I can apply changes while in game, right?
trying another approach and it's similarly breaking on the very first line. what exactly am i missing here...?
function Card:is_suit(suit, bypass_debuff, flush_calc)
local ret = card_is_suit_ref(self, suit, bypass_debuff, flush_calc)
if not ret and not SMODS.has_no_suit(self) and next(SMODS.find_card("j_modprefix_key")) then
if ((card.base.suit == 'Hearts' or card.base.suit == 'Spades') and (suit == 'Hearts' or suit == 'Spades')) then
return true
else return ret
end
return ret
end```
did you mean to write SMODS.find_card("j_modprefix_key")
instead of your joker
let's say my mod prefix is "mymod" and my joker's key is "myjoker", you would write SMODS.find_card("j_mymod_myjoker")
no, but that didn't fix the initial problem ^^;
What is wrong??? It still doesn't do anything (not even extends selection limit)
what's the code look like now
like. what am i missing here?
oh there's your problem
why are you else returning ret
it shouldnt be in your joker definition
move the hook outside of your joker definition block
FUCK
teehee
lol
ah. trying that now
Haya spotted
it did NOT like me going into checkered deck and selecting 5 cards from there.
self.base.suit
Can i be able to select more than 1 joker in joker slots?
doesn't crash, but isn't detecting right. this should be a flush house by calculation's standard.
Remove if not ret?
why doesnt this work?
is prevent_debuff a thing that can be returned in context.debuff_card? i couldve sworn i saw it somewhere but the docs dont have anything on it
do SMODS.debuff_card(card, "prevent_debuff", "seed")
yes
that worked! pretty much the only thing is, with Smeared, it should logically start treating. All. as flushes. (technically modded suits would disagree but shhhh)
Ofc Ali would know how to do a heart and spades count as the same suit
Isaac Sacred Heart?
No,
(((
...I do have Hearty Spades that does the same thing, but my implementation of that, while working, is quite old...
i did try this for "with smeared, just treat anything non-suited (stone) as flush" but it didn't work
function Card:is_suit(suit, bypass_debuff, flush_calc)
local ret = card_is_suit_ref(self, suit, bypass_debuff, flush_calc)
if not SMODS.has_no_suit(self) and next(SMODS.find_card("j_stla_sacredHeart")) then
if ((self.base.suit == 'Hearts' or self.base.suit == 'Spades') and (suit == 'Hearts' or suit == 'Spades')) then
return true
end
else if not SMODS.has_no_suit(self) and next(SMODS.find_card("j_stla_sacredHeart")) and next(SMODS.find_card("Smeared Joker")) then
return true
end
return ret
end
end```
where does localization go into? i want to check if a specific localization key exists, which i need to do because im generating an info_queue from a for loop where not everything is guaranteed to have a description
G.localization
this is basically 1 to 1 with the loc lua file
uhhhh
it has a bit more than that lol
Is it too op?
ah ok
its the same structure as the loc lua file
it seems fine, but i feel like selected could be a bit much. ectoplasm is random and has a downside thats usually much worse
I basically don't want to randomize the selection, that's the idea
still looking for tips on how to make it so when the modded joker & smeared are present, the game's like. "Well shit guess they're all the same suits now"
what is the context for when the played hand is a 4oak
But maybe it needs to be weakened somehow...
next(context.poker_hands["Four of a Kind"])
context.scoring_name == "Four of a Kind"
this is contains
fair
thx n
hmm. what're we missing here?? (as, no, the change to j_smeared wasn't it)
function Card:is_suit(suit, bypass_debuff, flush_calc)
local ret = card_is_suit_ref(self, suit, bypass_debuff, flush_calc)
if not SMODS.has_no_suit(self) and next(SMODS.find_card("j_stla_sacredHeart")) then
if ((self.base.suit == 'Hearts' or self.base.suit == 'Spades') and (suit == 'Hearts' or suit == 'Spades')) then
return true
end
else if not SMODS.has_no_suit(self) and next(SMODS.find_card("j_stla_sacredHeart")) and next(SMODS.find_card("j_smeared")) then
return true
end
return ret
end
end```
I'm working on an updated function that you can check out later. (also featuring https://discord.com/channels/1116389027176787968/1326135270759993364)
<@&1133519078540185692>
<@&1133519078540185692>
Yum
man we missed it
We balalaling with this one
what's that deck skin, those aces look sweet :o
(also silly question, was that directed at me ^^;)
Yeh.

Those are Pure cards by https://discord.com/channels/1116389027176787968/1326135270759993364
hm...
High card...
gonna attempt to mod balatro more
last time went awfully so i'm abandoning that joker concept
Something do be wacky.
if flush_calc then
if not SMODS.has_no_suit(self) then
local smearcheck, heartyspadescheck = SMODS.smeared_check(self, suit), togabalatro.heartyspadescheck(self, suit)
if smearcheck and heartyspadescheck then
if togabalatro.config.DoMoreLogging then sendInfoMessage("Hearty Spades + Smeared Joker flush pass.", "TOGAPack") end
return true
elseif heartyspadescheck and not smearcheck then
if togabalatro.config.DoMoreLogging then sendInfoMessage("Hearty Spades flush pass.", "TOGAPack") end
return true
end
end
return issuitref(self, suit, bypass_debuff, flush_calc)
else
if self.debuff and not bypass_debuff then return end
if not SMODS.has_no_suit(self) then
local smearcheck, heartyspadescheck = SMODS.smeared_check(self, suit), togabalatro.heartyspadescheck(self, suit)
if smearcheck and heartyspadescheck then
if togabalatro.config.DoMoreLogging then sendInfoMessage("Hearty Spades + Smeared Joker pass.", "TOGAPack") end
return true
elseif heartyspadescheck and not smearcheck then
if togabalatro.config.DoMoreLogging then sendInfoMessage("Hearty Spades pass.", "TOGAPack") end
return true
end
end
return issuitref(self, suit, bypass_debuff, flush_calc)
end
togabalatro.heartyspadescheck = function(card, suit)
if not next(SMODS.find_card('j_toga_heartyspades')) then
return false
end
if (card.base.suit == 'Hearts' or card.base.suit == 'Spades') and (suit == 'Hearts' or suit == 'Spades') then
return true
end
return false
end
That's some pretty solid evidence
would returning stay_flipped = false in context.stay_flipped stop a card from being drawn face down?
no lcue tbh
whoops. ;P
Reverting mostly back to my original code...
i don't think it's my fault but 😭
Aiko
Yeah, such is not your fault, just mine being wacky, but I specifically wanted to test it with Pure cards.
Old code it is, with a minor tweak.
Im getting this crash while I try to implement a voucher that add 1 choice in my custom pack
Is the G.GAME.giga table even initialized?
idk, are you talking about that
capitalization
That's a completely different table.
Giga exists, not giga
ooooooh
also yeah
im dumb
G.GAME.giga and giga would be different tables and located in different spots.
So its G.GAME.Giga
well that doesnt exist unless you create it
redeem = function(self, vouchers)
G.GAME.giga = G.GAME.giga or {}
G.GAME.giga.vouchers = G.GAME.giga.vouchers or {}
G.GAME.giga.vouchers.newMenu = (G.GAME.giga.vouchers.newMenu or 0) + vouchers.ability.extra.choice
end
G.GAME i'm pretty sure has all data about the current run
It does, yes.
also
And do I need to change something in the toml
G.GAME doesnt like storing tables afaik
at least not tables that arent usually there
so if you create a table in it i dont think itll save with the run
It should.
i remember hearing it didnt
table stuff just explodes if you try storing stuff like Cards
yes
This is after reopening the run, but also making sure save_run() was called.
which includes cards, sprites and everything else the game has a class for
also obviously functions don't work either
anything you want saved in G.GAME has to be serializable
isn't G.GAME.blind a thing
yes
oh man you really shouldn't be doing that anyway
makin joker art
it gets special treatment
you cannot save functions inside G.GAME
well why would you save functions there
so no functions and no circular references
https://github.com/TheOneGoofAli/TOGAPackBalatro/blob/5b4a6251a9f0d2db48df8b10de62c084398409b0/togastuff.lua#L536-L562 Here, copy and replace j_toga_heartyspades with your key... and remove the sendInfoMessage debugging lines from yours. 😛
sorry
guess i'm gonna need to make a lovely patch or something to store another blind-like object reference
yeah like
I LOOOOOOOOOOOOOOOOVE SAVE FILES THAT COULD FUNCTION AS AN ACTUAL VIRUS
theres like no reason and its a security vuln anyway
it work but why do ortalab isnt doing the same thing
gottem
because it creates those tables elsewhere
you probably dont need that, just save whatever config options it uses
that's what blinds do
oh right
G.GAME.blind.config.blind
Alternatively...
SMODS.current_mod.reset_game_globals = function(run_start)
if run_start then
G.GAME.giga = {}
G.GAME.giga.vouchers = {}
end
end
now there's G.GAME.blind.effect :3
boind
blocked
my mod nerfs chicot so certain blinds require log_10(score) > 0.5*log_10(blind requirement) before being disabled and i'm probably gonna apply that change to some blinds in other mods
mostly so he isn't deadweight but you still have to like. actually fucking interact with the blind
idk if using base 10 logarithms is really fitting for balatro but eh
@faint yacht thx soo much all is working like I want
what's the difference between context.blueprint and context.blueprint_card?
context.blueprint_card is the copying card.
like its the one copying?
cause im trying to figure out why this isnt triggering destruction
and i feel like it's something obvious but then at the same time it could be something really obscure
or a bug
i hope its not a bug
ok nvm it's not about blueprint at all ill figure it out
that... should work fine

can i see it not working :jimbo_spin:
when im back at my computer but it’s literally just
Discards hand
Cards get discarded
cards do not get destroyed
Is there a way to change the scale of the soul on a card?
is SMODS.calculate_effect completely identical to returning in terms of functionality?
maybe the file just isnt getting loaded for some reason????
wait that actually could be the reason
does trading card work
yes it works fine
also aure look at ts 🥀
stupid question:
is it possible to add a joker to the consumables pool?
it was in fact the incredibly obvious answer
k then something's not being loaded right
amazing
bump
no
bump
Holy Maccheroni 
First of all... Many MANY Thanks for sharing! 
And Second of all...... Yeah, I think I'm gonna go with your API-Mod 
I did not realize, how much work that simple lookin' feature brings

returning can pass state out such as removing cards or debuffing/undebuffing hands and cards among other things
i see
pools = {
['tjr_pool_mischief'] = true,
['G.P_CENTER_POOLS.Tarot'] = true,
['G.P_CENTER_POOLS.Spectral'] = true,
},
this does not work so my joker shows up in tarot and spectral packs, right?
just
pools={Tarot=true}
If you want to use the API mod, then it has a function ArrowAPI.credits.add_credits(mod, args) to register strings for credits in a central location.
I usually call this in the main file, and it looks smth like this:
ArrowAPI.credits.add_credits(SMODS.current_mod, {
['gote'] = "BarrierTrio/Gote",
['cejai'] = "SagaciousCejai",
['eremel'] = "Eremel",
['keku'] = "Keku",
['guff'] = "GuffNFluff",
['wario'] = "MightyKingWario",
['rerun'] = "KawaiiRerun",
['vivi'] = "Vivian Giacobbi",
['gameboy'] = "Sir. Gameboy",
['chvsau'] = "chvsau",
['dolos'] = "Dolos",
['stup'] = 'Stupisms',
['reda'] = 'Redastrin',
['araki'] = 'Hirohiko Araki',
['luckyland'] = 'Lucky Land Communications',
})
Afterwards, you can just set the artist property on the item and it'll do all relevant crediting including hover tooltips and this deck menu thing, which also supports Galdur via hover code
well add whatever else
but no G.P_CENTER_POOLS and whatever
that's not part of the pool key, it's just where the table of pools is
else you'd be addressing G.P_CENTER_POOLS['G.P_CENTER_POOLS.Tarot']
Maybe ill add something to programmatically make a mod credits tab when you call this function but I can't guarantee it. Would help so that fewer people have to fiddle with UI
bump2
yes but I'm not in a clear enough state of mind to tell you how to make it look right
I'll try it out and I know whom to ask if I fail somewhere along the way 
Thank you for the troubles 🙇♂️
Feel free to use its other features too!! Unfortunately since it's not officially released it is not properly documented, though most of the API functions have docstrings at least
Can you tell me the function that it uses so that I can try out how to use it?
can i make a joker take no space without a negative edition
negatives dont make them take no space, it just increases how much you have, but yeah
you should be able to use set_sprites to change the soul sprite, but I'm not sure if you'd also need to patch the corresponding SMODS.DrawStep to account for the scale
ah
Some features include
- loading helper functions
- universal art crediting
- generic extra blind effects
- custom challenge description options
- pseudorandom prediction
- boss blind background gradient support
- easy consumable selection limit modification
- various helper functions for vanilla stuff
- support for two custom consumable types, Stands and VHS Tapes (both previously used by Cardsauce)
how would i check if a discarded hand is currently being iterated through the last card in said hand?
oh my god 😭
said DrawStep being this one https://github.com/Steamodded/smods/blob/dfc5cba8f5ba128dd4178355fb4257aa8e17007e/src/card_draw.lua#L328
which reminds me that you can define soul_pos.draw instead of patching that step
config = {
joker_slots=1
}
I think
otherwise if just setting config doesnt work you can do
you can put card_limit in the joker now but i just tested it and it's kinda janky haha
yay jank
wait fr
how?
Put it in the config
eremel made it so most objects can have card_limit in the config to act like negative
i dont think this is intended tho
I suppose I could add it into add to deck humm
make sure to also reverse it in remove_from_deck if you do
oh wait i can just trigger my function in post_discard
duh
What's your oh my god
when in doubt, ask yourself if you're asking the right question
thats a lot
the S stands for Sthinker
Surprisingly it doesn't feel like it. Some of those are pretty small features. Love to expand it though
many small thing make big thing
as long as you keep the h I won't comment on that
I mostly wanted to fill in stuff that is either A) hard to do or B) requires overwriting vanilla code and so is safer for people to get from a unified source to reduce mod conflicts
The extra blind stuff was Hard. The consumable limit stuff required a lot of overwrites because of Vanilla Jank
we love apis we need more of those
i mean feel free to PR stuff to smods that you think is useful to have from a unified source
lmao
Most of the stuff in my API here is stuff I would reasonably consider to be not vanilla enough features for SMODS IMO
yay more api mods, love to see it
I just need someone to finally make a mod manager that handles dependencies
That said I'm sure I could technically simplify the consumable limit stuff if I just overwrite card.ability.consumable with an actual deep copy instead of a shallow reference, but for some reason I didn't do that. Can't remember why I chose not to
smods features need not be vanilla, they just need to not change anything about the game while they're not being used by anyone
||in-game mod manager 2026?||
Cause smth the API also does (only in English now because I am Sadly Monolingual) is add support for automatically updating relevant consumables' loc texts to plural conjugation if the select limit changes
that's hard to do well for the general case
I.E. chariot goes from saying "change 1 card in hand into a steel card" to "change up to 2 cards in hand into steel cards"
Yeah
Plus I'd also need to vary by language depending on how they treat conjugation, or if they consider zero to conjugate like a plural like English does or not
Regardless it's a useful feature and can be iterated on
is there a list of vanilla joker keys?
hey, question- how can i detect if a joker has been obtained during shops? (including stuff like judgement, etc)
jinx
yes, in the game's source code in game.lua
that works too
depends on why
if context.card_added and context.card.ability.set == "Joker" and G.STATE == G.STATES.SHOP might work
it works for purchased jokers but not judgement cards
also it doesn't work on buffoon packs
oh i thought you were saying just in the shop by any means
what's the intended effect you need?
i'm trying to make a joker that re-opens a skipped boosterpack, once per shop. the re-opening part is done, i'm trying to figure out how to make it specifically work in shops
i don't think there really is a way to tell if a pack is being opened in the shop or not without setting such a flag yourself
for edge cases when you get this joker outside of shop, i want it to not shake until you are in a shop
maybe it would be easier to do the opposite and check that the joker is not added during a blind in add_to_deck using not G.GAME.blind.in_blind but idk how your current logic looks like
yeah maybe. but then i'll need to take skips into account
any idea why my code aint working?
when do you want it to shake/stop
how do I make a github for my mod
there were recent changes to this, there's now a global variable to check if the last hand one shotted
it starts shaking when you enter shop/presumably obtain it during shop, and stop shaking when you skip the first boosterpack in a shop or exit a shop without doing that
oh, nice, what's the variable?
check the release notes
ok then you can just use add_to_deck with G.STATE == G.STATES.SHOP (not the context like i said before)
i'm looking around and can't find it, do you remember which version?
N', do you know how to scale the soul of a card?
SMODS.last_hand_oneshot
https://github.com/Steamodded/smods/discussions/919
no
well not the soul_pos one
i would maybe look at hologram in vanillaremade
is there a context that comes after context.destroy_card and gives access to (whats left of) the played hand?
probably just context.after honestly but might as well check
Gonna do that, thanks
i think it would be context.after but you need to check for the destroyed flag iirc
What does the 'hologram' stand for?
x = 5, y = 1,
draw = function(card, scale_mod, rotate_mod)
card.hover_tilt = card.hover_tilt * 1.5
card.children.floating_sprite:draw_shader('hologram', nil, card.ARGS.send_to_shader, nil,
card.children.center, 2 * scale_mod, 2 * rotate_mod)
card.hover_tilt = card.hover_tilt / 1.5
end
},```
So if I replace 'hologram' with 'dissolve', I could test it in game?
Wait, no. I get an error 😅
@N how do i specify background color documentation doesnt mention it
or i missed it after reading through it twice 💀
Got it working :D
i would recommend checking the vanilla examples in the repo
raaah (thank you)
i do do that im just stupid 😔
hooray
Does anyone know what the different 'nil' parameters are for in card.children.floating_sprite:draw_shader('dissolve', nil, nil, nil, card.children.center, 5 * scale_mod, 1.5 * rotate_mod)?
How do you have that little window under your joker?
look for Sprite:draw_shader
i think they're for the shadow and the parameters to send to the shader
jokerdisplay mod
In the documentation?
no, in the code
What code?
the source code of the game
I take it ms, mr, mx and my stand for scale, rotation, x-position and y-position?
yes
how do you add delay to the end of an event again
delay(x)
Syntax errors will be the death of me.
is there a way to make a joker eternal but still sellable? or ig just any way of preventing a card to be destroyed but still be allowed to be sold
Golla love lua
I mean you can but do you wanna go through it
hook Card:can_Sell_card
I'm trying to decide whether or not I wanna split up the malverk texture options in my mod for a little more customizability.
Currently I have it in two, one for the cards/enhancers/seals and another for the jokers
you should put them all in one
Yeah that's what I originally had
i've made geometry dash in my mod
couldn't be possibly harder lol
Any chance we'll be getting the documentation for setting up stuff like sleeves through malverk? I'd love to get that set up on there so it can be toggled on and off as well.
hrmm will look ino that
I love it
why would you want them not in one pack?
I’ve seen something similar
Oh I was just debating on it for customization purposes. I like giving people options.
it does it by default
yeah you don't need to customise packs that aren't applied
that's because you haven't defined localization for the alttexture objects
it should be explained somewhere on the github iirc
Found it
Descriptions alt texture
Hmm, I must still be doing it wrong it's still giving an error...
alt_texture={
hbp_enhancersHELLUVA = {'Test'},
hbp_jokersHELLUVA = {'Test2'},
hbp_tarotsHELLUVA = {'Test3'},
hbp_sealHELLUVA = {'Seals'},
},
}```
This is within the appropriate spot under return
is it possible to make an effect happen everytime a joker or playing card rolls for a random effect (or like. i guess what would i have to hook into to do that.)
how do you do "when game over"
like how do i trigger
a thing
when the game is over
yes, see these release notes https://github.com/Steamodded/smods/releases/tag/1.0.0-beta-0711a
Okay so now ironically how would I remove an option from the config. As part of my mod it replaces the names of the tarot cards. Unless there's a way to trigger something else based on malverk options I'd prefer to disable the config option for tarots.
also, for some reason, this card's anim borked at some point. i feel like SOME of this is tied to the juice_up call before giving the seal???
set_seal method is put on an event queue by default (used for playing cards created from standard packs)
the same action for consumables doesn't do that; it triggers immediately
how can i check if a given joker is compatible with a sticker (aka where can i read a givens joker eternal_compat/perishable_compat)?
because the vanilla stickers instead of the should_apply function just have a boolean of the same name?
how could i make it more instant, out of curiosity? rn there is a noticable delay even if i move the events to put the seal-giving thing first
give the juice up animation event more delay (when the seal setting is set first)?
actually thats not really a solution one moment
hey why does my new suits have this tiny black border?
do highlighted:set_seal(SMODS.poll_seal{guaranteed = true}, nil, true), because set_seal takes arguments (_seal, silent, immediate)
I tried to run balatro mod manager, but it seems there's some file that isn't localised in a .dll file
re install it
How can I change the order of the config menu options for a malverk texture pack?
Helluva balatro?
Yeah 😄
Omg! 
xD
i'm also having an issue where playing cards in booster packs count for my one joker that cares for adding enhancements/seals/editions for whatever reason. (and also one i made that uses the same setting_seal effect). weirdly, the big one procs twice when the one that only wants seals procs once? uh. how can i fix that.
if ((context.setting_ability and context.old and not context.unchanged and G.P_CENTERS[context.new].set == "Enhanced") or context.setting_seal or context.setting_edition) and not context.other_card.stla_from_copy and not context.blueprint then
How difficult would it be to implement the ability to pull cards, such as the code cards from cryptid?
copy from cryptid
still looking for pointers on how to be like "not in a shop" for this. if it helps, this is the code for setting_seal for those that missed that:
function Card:set_seal(_seal, silent, immediate)
local ret = set_seal_ref(self, _seal, silent, immediate)
if self.ability.set ~= "Joker" then --this is such a hacky solution and probably breaks cryptid a tiny bit since you can actually seal jokers in that mod. too bad!
SMODS.calculate_context({setting_seal = true, other_card = self})
end
return ret
end```
Overwhelmingly peak, I'm afraid.
Hi, I had a mod idea but I'm a beginner at coding, and I never modded a game before, is there a place where I can find the basics for modding Balatro ? (I've heard about a toolkit for adding jokers but that's not what I wanna do)
check the second pin in #⚙・modding-general it has all the resources to get started
Oh thanks, I didn't think about checking that chat since after reading #📜・modding-rules I assumed it was not for discussing mod creation 😅
idk where the code is
yeah i think the pin should be here haha
hello, i´m new in discord (and my englsih is very bad, probably i use the translator)
I started doing it, but I'm suffering from a lack of content on the internet
layman's question: if I ask for a script, can you make it for me or at least the base?
how do i either:
put an inline hex code into loc
or
add an arbitrary colour to whatever table the localization entries access
still need some help with this ^^;
sorry, did I say something wrong?
I think people can help you write something, they are not going to do it all for you
ok, sorry if that sounded a little rude
It wasn't rude, just letting you know
So, I was trying to make a joker that gives money when the blind ends according to the selling value of all the wild cards, but I don't know how to do it
How would I make it identify the jokers I have and their selling value?
I'm stupid woops
how tf do you use jokerforge lol
How do I get the game to run a function on startup? (Looked through steamodded's entire documentation, haven't found what I was looking for, and most mods I looked at don't do it because they just add stuff with stuff like SMODS.Edition, SMODS.Consumable etc)
I'm trying to just to on ante completion, 1 in 8 chance for +1 joker slot and it's confusing me
depends for what
Isn't there a general case such as an init function? 
there are a couple
What I basically want to do is run a few functions on the game's base jokers
like the vanilla ones?
Yeah
then you dont need a function
just do it in the main file
I would recommend using take_ownership if you want to modify them tho
Oh, so I run that bit of code out of a function?
I never really used lua so idk what is or isn't possible, and I assumed that wasn't 
Well for now I want it to work on vanilla Balatro
Once it does maybe I'll try to adapt it to modded jokers
To answer your question there's no SMODS api for that, you need to hook one of the game's/SMODS' start up functions
Thanks
hmm. trying to make a satellite-esque joker but for Emult and i have no clue how to set up the variable. in loc_vars, it can track planets_used just fine, but obviously when it comes time to actual calculation, it crashes.
(what's more, i need to try to figure out how, exactly, to add that if config.showOrigin then t.key = self.key..'_source' end line in so i can have my "showOrigins" text work properly, but since the loc_vars section has no t table for the variables... hmm.)
card.ability.extra.planets_used doesn't exist.
did see that much, though fixing it didn't do much in...well, fixing it.
Did you start a new run?
ok I made my voucher works earlier today with Ali but I didn't see that the game crash when I open my pack without the voucher
did that. it doesn't crash anymore, but it's also not... doing anything. like, it doesn't score the listed emult whatsoever.
Yes, you need to put the thing you're doing in loc_vars in calculate
This is probably a dumb question but I want to be sure I'm not doing stupid stuff, the different sets ("Joker", "Consumable", etc) include both vanilla and modded cards, right?
Yes.
Thanks
Am I missing something in the toml section
My guess is that I need a condition to check if I have the voucher but idk how to do that 🤣
we have no clue what the heck the problem is here yet get the feeling it's probably staring me in the face and i'm just too tired to even fathom it
okay, at least saw sometihng in vanillaremade, but... again, confusing syntax
trying to figure out to make a cards chip go up the less discards there are
How can I get the current chips and mult of a poker hand?
@faint yacht you were helping me with this earlier
do you know how to fix it
+ (G.GAME.giga and G.GAME.giga.vouchers and G.GAME.giga.vouchers.newMenu or 0) and similiar for the other one in patch to check if the table and entry exist, otherwise, use 0.
Ok ok thx you're the Goat
still trying to figure this one out ^^;
same
I just don't understand ?!?!?
Huh
im laughing so hard
Can someone guide me in the right direction please
I made a text mod a while ago that works perfectly
I want to now change in game textures to go along with that
Is the process for installing new textures the same as installing the new text
Maybe, I’d rather not use that if I can get around it
why
I have this so far
I’m on Mac
and?
Life is harder
So is the image I sent above wrong?
yes
Ok
One excess end?
I just realized this was irrelevant since it should be done once per save file, not everytime I start the game
Wait does this work with retexturing the decks?
it was like that in the original function from VanillaRemade i'm basing this off. removing it just makes it crash faster, at the start of loc_vars, rather than in calculation.
im pretty sure yes
we'll need to cycle back to loc_vars to un-comment the thing that changes the localization to the _source version later, but for now we're trying to get this functioning, and it's currently borked on line 455.
Ok thank you so much! I didn’t know this thing existed and it’s not as hard as I thought it would be
anyone have an idea on how to make a card give more chips when you discard a hand?
How would one make clicks register twice?
still stuck on this ^~^;
Remove the return on that line.
trying to make a joker that retriggers a random joker if the played hand contains a pair, does anyone know a way to do this
i have some code that i made and then had an ai help but it still doesnt retrigger anything
now it's mad at the bracket for the actual calculation for some reason?
I think you'd do
if context.pre_discard and context.cardarea == G.play then
and then increment your chips value in there
No, it would just be context.pre_discard
oh, im just goin off what the wiki says
sorry lol maybe i shouldnt be tryna help ppl yet
btw do you know how to find things like a jokers sell value
card.sell_cost
tyy
this is getting a bit silly here
You have an extra end on line 454
ah, that'd do it. only things now would be that one commented line in loc_vars, as right now, it isn't properly appending _source to the actual localization if config.showOrigin is on. and maybe making it so every time a new planet card is used, the joker has a juice_up anim, but i'm taking this one step at a time here
...yes it does??? it's, part of my mod
if it detects that config, it should instead of checking the ordinary localization (like j_stla_theAliens), it instead uses the localization for j_stla_theAliens_source)
...then how the heck have i been calling it on basically every other joker?
...like, this isn't a rhetorical question, how does this work if config.showOrigin doesn't exist, because config doesn't exist.
...changing it to that causes the config menu to immediately crash the game. no, the solution isn't to make it SMODS.stla.config, that errors out much the same.
...like this?????
which yeah the global variable is "config" and not "SMODS.current_mod" but like. is this not what this is doing?
like, i'm not about to find-and-replace all instances of the "config" global variable into direct calls for SMODS.current_mod unless it turns out that that is absolutely mandatory. that feels a bit excessive.
In the return you would put key = config.showOrigin and self.key..'_source' or nil
How does one define a new sprite in an atlas for use in other places? I am trying to pull an image from a new atlas image for use in quips.
What do you mean in quips?
As the image used when a quip is shown.
You mean the card?
I know how to do the quip part but I'm not sure how to define the new sprite keys.
New image, wat dis?
No. I'm trying to define the image.
<-- this would be a message, for instance
Are you referring to the card?
Yes.
1 of like 5 mods I'm working on xD
Then you would have to patch where it creates that card and change its sprite to that.
also, that worked--now all we'd wanna do is make it so using a new planet card has a juice_up anim and an "Upgraded!" message
Bet these are your characters that would fit in a RPG.
How do you grab all cardareas?
if context.using_consumeable and context.consumeable.ability.set == "Planet" then
return {message = localize('k_upgrade_ex')}
end
I don't need to patch that we can replace the card easily with SMODS.JimboQuip{ key = 'asmodeuswin', type = 'win', extra = { center = Asmodeus, particle_colours = { HEX("d80007"), HEX("f5d985"), G.C.BLACK }, materialize_colours = { HEX("d80007"), HEX("f5d985"), G.C.BLACK} }, sound = 'voice11'}
G.I.CARDAREA
thank you
No, you do have to patch that.
Asmodeus refers to c_sun
?
Yes, but to change the sprite you have to patch it.
I'm a bit confused, are you referring to a different thing?
it still does the anim even if it's a planet card that's previously been played. :o
I didn't need to add any patches to change it to c_chariot.
You don't need a patch to show a different image there. I just need to learn how say c_chariot is defined.
Yes, you do.
Then how am I doing it without a patch..?
You're not, you're changing the center.
How do I define a center then
No, if you want to change the sprite, you have to patch.
Is sprite a different thing?
Yes.
I don't understand your goal.
I want one of these floating heads to show up when I do a quip
Then you need to patch, to change the sprite.
So, I made a bit of code to prevent Ectoplasm from targeting a group of jokers I created (potion jokers). It's a modified version of what was implemented in the VanillaRemade. For some reason, it seems to only say that the card can be used when the leftmost joker either: 1) is not a potion joker, or 2) it has no edition applied to it. Any ideas on how I can fix this?
can_use = function (self, card)
local editionless_jokers = SMODS.Edition:get_edition_cards(G.jokers, true)
local no_potion = {}
local flag = false
for _, j in ipairs(editionless_jokers) do
for _, k in ipairs(POTIONS) do
if j.config.center_key == k then
flag = true
break
end
end
if not flag then
no_potion[#no_potion+1] = j
flag = false
end
end
return next(no_potion)
end
})```
no, the solution to making this only happen when it's a new planet was not, in fact, to put the return {message = yaddayadda} into the for loop. (at least, not in the way i did it. i feel like this is close to working, but um. Yeah I'm Missing Something Here Clearly ;P)
for k, v in pairs(G.GAME.consumeable_usage) do
if v.set == 'Planet' then planets_used = planets_used + 1 end
card.ability.extra.Emult = ((planets_used * card.ability.extra.scaler) + card.ability.extra.base)
return {message = localize('k_upgrade_ex')}
end```
if context.using_consumeable and context.consumeable.ability.set == "Planet" then
for k, v in pairs(G.GAME.consumeable_usage) do
if v.count > 0 and k == context.consumeable.config.center.key then
return nil
end
end
return {message = localize('k_upgrade_ex')}
end
now it's not doing the upgrade anim at all... weird.
is this supposed to work like Satellite?
yeah, it's like satellite
every time a unique planet card is used, it scales. the scaling part works, but the problem is. giving it actual feedback that "yeah it's upgraded"
atm you kinda just have to Know it does that.
Yes, but Satellite doesn't have a message.
it might be a case that by the time the consumable is being inspected, it's already been added to the table
true, but also it gives cash at the end of round, while this is a bit more tactile than that
try setting v.count > 1
heya, how can i stop this from juicing when there's nothing to retrigger?
Remove the first event and card = context.other_card
and it's gonna juice both the card and the joker, right?
Yes.
nope. the text is on the joker now
i meant the text and juice the card
and just juice the joker
Add message_card = context.other_card and juice_card = card to the return
did my suggestion for the planet stuff work?
I'm trying to make it so my consumable grants a selection between 2 jokers under a certain condition, maybe as a separate UI? I'm not expecting this handed to me on a silver platter but I was wondering if anyone knows a mod that has this functionality.
for advanced UI stuff joyous spring is probably the place to look
https://github.com/nh6574/JoyousSpring/
but its probably easier to create a booster for your needs that you can get from your consumable, I think
Alright now I have some pretty stickers seals
How do I make a joker never spawn? Just found a jank way create a sprite
G.GAME.banned_keys["j_[modprefix]_key"] = true
You wouldn't need the mod prefix if it's a vanilla joker but yeah
in_pool = function(self) return false end
Thanks I was about to bang my head against trying to make a custom rarity of 0.0 xD
So using this I'll just make a handful of fake jokers, no collection them, and set them to not spawn.
Them boom easy peasy "sprites" for the quips
would anyone know how do something like the fool but for jokers? I just want it to record a highlighted joker's key when used and that's all it has to do
G.GAME.modprefix_joker = card.config.center.key
Ignore the helluva particles let's goooo.
hey, apologies if this is bothersome, but i'm experiencing a problem that i believe requires a specifically made mod to fix. the game keeps on crashing without producing an error screen when it tries to save my game (after i play a hand, after i reroll, etc.) which is probably due to the fact that i have 2500 double tags and my save file is over 150kb. i already looked around to see if there was a mod that could help reduce the save file size, and the only one i found didn't optimize double tags at all, meaning it didn't fix the problem. please let me know if you can help me out here.
i already tried that, and as mentioned it didn’t help
Then your save file is unfixable.
:D
I still don't know how to actually make them do anything but that's for later ❤️
I got distracted by the thing I was originally doing
what's the equivelent of G.jokers.highlighted for jokers in the shop?
G.shop_jokers.highlighted
ty
My mod doesn't work
Ok
Ok
have you ever tried modwork = true
I didn't

How does one do card_eval_status_text but with a position instead of a card?
How to set modwork true?
How key for vanilla tarots should look like?
c_lovers or lovers?
-# if you don't describe the issue nobody will help, what are we supposed to do with the information that your mod (you can't be more generic) doesn't work
How do I add a little window next to a card/description?
You mean like for example the Red seal window next to deja Vu?
Yes, I think so
There's probably a better way, but I just created a fake card and changed its position.
For custom ones too?
Okay and how do I make custom ones? Like where do I write them?
In the loc_vars
So I would write info_queue[#info_queue+1] = "Some Text" instead of info_queue[#info_queue+1] = G.P_CENTERS.m_stone?
I think you would need an entry in the localisation files for that
if you want to do it "properly" you make a localization/default.luawhere among other fields you have descriptions = { Other = { green_seal = {[name and text]} } } and then for the info queue info_queue[#info_queue+1] = localize('green_seal')
(green seal is an example key here)
something a la this
Okay, thank y'all
though it doesnt have to go into descriptions/Other if the thing youre putting into the info queue already has an existing description, then you just call that key iirc
https://github.com/Steamodded/smods/wiki/Localization has more info and a list of fields for descriptions
how do i increase amount of shop slots?
If I do that and the info_queue[#info_queue+1] = localize('my_thingy') then it just shows ERROR in the description window
See?
gimme quickly how your localization lua looks
The whole file?
just the important part
I have idea_credits = { name = "{C:green}Idea:", text = { "{C:purple}TheDogVT (Twitch)" }, },
in the Other = {} part of descriptions and info_queue[#info_queue+1] = localize('idea_credits') in the loc_vars of the joker
Other itself is inside descriptions = {}, right?
Yes
and the default lua file is correctly placed, right?
Well, all things in my localization file work so yes
It's okay, thank you anyways :3
info_queue[#info_queue+1] = {set = "Other", key = "idea_credits"}
That fixed it, thank you. What is the difference between them though?
localize would return 'ERROR'
Because localize is for something from the main code of Balatro?
No, the problem is, localize doesn't do what you want here.
I am currently trying to decouple my mod from being dependent on Cryptid, but I have trouble with one of my Jokers; the mult/chip bonus is not saving at all whenever a hand level is levelled up afterwards and reverts to the usual hand mult and chips for that level. This is supposed to be a slightly weaker but more specific and scalable version of Universium, but for planet cards held in hand. This is part of my existing code responsible for levelling up:
function exponentLevelExtra(hand,exponent,v,instant)
--print("g")
if not instant and (not Talisman or not Talisman.config_file.disable_anims) then
update_hand_text(
{ sound = "button", volume = 0.7, pitch = 0.8, delay = 0.3 },
{
handname = localize(hand, 'poker_hands'),
chips = G.GAME.hands[hand].chips,
mult = G.GAME.hands[hand].mult,
level = G.GAME.hands[hand].level
}
)
end
G.GAME.hands[hand].mult = G.GAME.hands[hand].mult*exponent
G.GAME.hands[hand].chips = G.GAME.hands[hand].chips*exponent
if not instant and (not Talisman or not Talisman.config_file.disable_anims) then
delay(0.1)
update_hand_text({delay = 0}, {mult = G.GAME.hands[hand].mult, StatusText = true})
G.E_MANAGER:add_event(Event({
trigger = "after",
func = function()
play_sound("multhit2")
v:juice_up(0.8, 0.5)
return true
end,
}))
delay(0.1)
update_hand_text({delay = 0}, {chips = G.GAME.hands[hand].chips, StatusText = true})
G.E_MANAGER:add_event(Event({
trigger = "after",
func = function()
play_sound("xchips")
v:juice_up(0.8, 0.5)
return true
end,
}))
end
end
Any ways for hand levelups to save existing mult/chip bonuses?
But it would still return 'ERROR'
can I set animation atlases to jokers? I assume I can
[[patches]]
[patches.pattern]
target = '''=[SMODS _ "src/game_object.lua"]'''
pattern = '''
hand[self.key] = math.max(hand['s_'..self.key] + hand['l_'..self.key]*(hand.level - 1), 0)
'''
position = "at"
payload = '''
hand[self.key] = math.max(hand[self.key] + hand['l_'..self.key]*amount)
'''
match_indent = true
```?
I'll try that
wdym animate manually?
you need to code the animation yourself
You can but you either need to use aura or code the animation aka update the sprite every 1s or so
<@&1133519078540185692>
I recommend using code since no one wants dependency to play their mod
good morning chat
Morning
while i was sleeping, i had a dream where i was playing with my lgbt mod
and came up with an idea
thanks
Cool
is it possible to make a scalling joker that does the following
lovely patches are really easy wdym
starts at 0 chips
playing specific hands upgrades it
playing other hands downgrade it
at reaching a certain amount of chips, it doesn't scale up anymore but it remains at a certain level
Where are the docs
I can’t find anything
the lovely readme
there's faq for it in the vanillaremade wiki too
doesn't look hard
that's most of programming yes haha
i can look at the code of the scaling blahaj i made
Very possible
can i also add a custom variable to it?
playing x hands levels variable by 1, playing y hands downgrades variable by 1
once variable reaches a certain level, it doesn't scale down or up but remains there
is it possible to change the color of a node thats already in an UIBox
yes
the easiest is with a func but you can also find the node and change the colour in the config
i was also watching some tutorials on how to code in lua, so i can get better too
i did
y'all proud
it didnt change though 3:
ui is hard
you might need to recalculate it
mm
How would I have the balatro music change when you have 1 hand?
use the SMODS.Sound's select_music_track to return a high number when the hands_left is 1
i dont remember the exact variable for hand left
I like really do not know well how I would start coding this btw :3, further help would be very appreciated
which part is the problem
Mmkaeee
can_use = function(self, card)
ensure_CSData()
if G.GAME.CSData.sroundkeeper >= 8 and #G.jokers.highlighted > 0 then
for _, j in ipairs(G.jokers.highlighted) do
if j.config and j.config.center and j.config.center.key ~= "j_tdec_dried_joker" then
return true
end
end
end
return false
end
use = function(self, card, area, copier)
ensure_CSData()
for _, j in ipairs(G.jokers.highlighted) do
if j.config and j.config.center and j.config.center.key ~= "j_tdec_dried_joker" then
G.GAME.CSData.sketched_joker_key = j.config.center.key
G.E_MANAGER:add_event(Event({
func = function()
card:juice_up()
G.GAME.CSData.sroundkeeper = 0
G.GAME.CSData.sketchrecordactive = true
G.GAME.CSData.messagesketch = false
return true
end
}))
end
end
end,
I don't exactly know how to make it so you can also record the key of a highlighted shop joker. I've tried using G.shop_jokers.highlighted but I have no clue how to handle it. I'm genuinely clueless please help
G.shop_jokers.highlighted[1] and G.shop_jokers.highlighted[1].config.center_key ?
How to make card return to hand after scoring?
anyone know what the value is that controls the speed up of animations when scoring?
How do I make it, so that an enhancement only activates, when the card with it is played?
key = "pride_parade1",
atlas = 'pride_parade',
pos = { x = 0, y = 0 },
rarity = 2,
discovered = true,
blueprint_compat = true,
eternal_compat = true,
cost = 5,
config = { extra = { chips = 0, chips_gain = 5 }, },
loc_vars = function(self, info_queue, card)
return { vars = {card.ability.extra.chips} }
end,
by starters, would this work?
Absolutely not
Your SMODS.Joker is open
i know this, i just copied the code wrong
And try to fix your syntax
Idk if it’s because i’m on phone
But the lines don’t line up
If you’re coding on vscode there’s a lua extension that helps a lot
Maybe try installing it
What extension
?
bump
Elaborate
Do you mean a custom enhancement or all including gold / steel
<@&1133519078540185692>
This is as far as my silly brain could get, trying to add alternatives to music 1 and music 5
<@&1133519078540185692>
yeet
My own enhancement
Just copy lucky card code from vanilla remade
And edit it
this is an example from my mod
anyone knows wheres the code that adds the outlines on buttons when ur using controllers 🤔
i tried using recalculate for changing the color of the button but it doesnt work sadly
could be a stretch, but it could be mentioned somewhere in Controller.lua
it handles keyboard mouse events, so my best bet is that it also handles controller related events too
im just guessin tho
Yeah I don't really understand the select_music_track thing, and how would I use the replace thing to have them replace the normal music @red flower
i dived in there before to create a hook for right-click detection so
me who already has a modpack with 4 jokers fully coded reading this
That’s not too much actually 😭
for someone who never coded in lua, it's monumental lol
i tried putting delay(1.0) at the end of an event to make it hold at the end before doing anything, but that did nothing, and i tried increasing the delay variable of the event, but that made the start longer. how do i make it hold on the end longer? do i have to start an empty event with a long delay?
my point is, i already know these things
i just never made a chip joker, so i am not very familiar with it
but is chips_gain valid?
just return a high number
I've tried tampering with it some more, that helped thank you :)
Chips_gain is a variable
so... goes in loc_var
You can name it anything if it’s in your config
As long as you use it properly
Loc_vars returns the variables to be displayed in loc_txt
How would I have the music only play at one hand then?
check if hands left is 1, check how the vanilla jokers do it
@cursive gazelle
key = "pride_parade1",
atlas = 'pride_parade',
pos = { x = 0, y = 0 },
rarity = 2,
discovered = true,
blueprint_compat = true,
eternal_compat = true,
cost = 5,
config = { extra = { chips = 0}, },
loc_vars = function(self, info_queue, card)
return { vars = {card.ability.extra.chips} }
end,
calculate = function(self, card, context)
if context.before and (context.scoring_name == "Pair") and not context.blueprint then
card.ability.extra.chips = card.ability.extra.chips + 4
return{
message = localize("+4!"),
colour = G.C.BLUE,
}
end
if context.joker_main then
return {
chips = card.ability.extra.chips
}
end
end
}
You need to fire a flag to SMODS.music to replace background music i think
Or can you call it in joker code ?
Idk
What ?
I'm guessing they're asking if hover ui can be juiced up like jokers
Sounds about right
Idk about the localize tho
i'll have to change that soon
i was wondering if i can just call :juice_up()
plus, this is from a different joker, so the localize in that joker works well
why not just test that
Oh cool
since i dont see function UIBox:juice_up
I never knew this existed lol
they prolly use a different function for it then
doesnt really seem like theres any that would juice up the uibox
are UIBoxes defined as Centers tho or?
you can just call :juice_up on them bepis
where is Tarot?
:3 i see
Bepis you need to show me how that looks like
same here\
{C:tarot)
Yes
How does this look?
thanks
https://github.com/Steamodded/smods/wiki/Text-Styling i liked referring to this part of the wiki :D
They know how to style they just typed a ) instead of }
silly me)
tbh coding in lua is kinda confusing like
theres functions that are typed like localise{} but also use the standard ease_dollars()
true
I was also confused
good, 2 things: the return should be [condition] and 1000000 or false or something like that, you need to return a big number
the key should also contain the word "music" in it
<@&1133519078540185692>
if the only argument is a table or string you can omit the ()
get UIE by ID or whatever that function is called
How would I check if it is a non boss blind
not G.GAME.blind.boss
bump
Just change the value until you’re satisfied
This good?
yeah
Yay!
what value
you might need to check if youre in a run tho i dont remember
Imma check it soon


