#💻・modding-dev
1 messages · Page 530 of 1
you can check out other mods that have a similar effect, or check the documentation of smods to see if there's something that can help, think of ways you can do it yourself (if you havent xd), or work on something else while you wait
You know, I might just download a few random mods from here and try to understand the code behind them
so for this kind of voucher, do i modify the pool or something?
Do not cryptid
crashed when I bought the perry, says center is a nil value
Why not?
which line?
idk just says this
G.GAME.joker_rate.uncommon?
the ever-ominous ctrl + c and ctrl + v:
@tall wharf heads up The Psychic and other Not Allowed! blinds are kinda fucked on math deck rn
well
i shuol dprob update this
if context.after then
if G.ARGS.chip_flames.real_intensity > 0.000001 then
return {
dollars = card.ability.extra.dollars
}
end
end
why is the dollars activating on the played hand and the hand after?
is there any function from SMODS that shadows create_UIBox_your_collection_blinds ?
does it still crash if you remove the for loop?
sorry for the late reply xd
K so this was a me problem trying to make it so when you buy the original joker it turns into the Perry joker
but there's another problem where the inator joker isn't getting destroyed
that is something that i noticed
give me a sec
what's the px and py for vouchers?
Red
its a placeholder
wait i just realized something
i, too, am prone to fucking stupid disease
try this one
if context.card_added and context.card.config.center.key == 'j_modID_jokerinator' then
for _,v in ipairs(G.jokers.cards) do
if v.config.center.key == 'j_modID_jokerinator' then
v.getting_sliced = true
-- this part was copied from dagger
G.GAME.joker_buffer = G.GAME.joker_buffer - 1
G.E_MANAGER:add_event(Event({
func = function()
G.GAME.joker_buffer = 0
v:start_dissolve({ HEX("57ecab") }, nil, 1.6)
return true
end
}))
end
end
end
still not working
what is the problem?
same as last time
crash, doesn't destroy, ??
Doesn't destroy
it should be working fine
wait no
i think that the code for destruction should be in the inator and not in the platypus
(in very Doofenshmirtz fashion)
how do you write his name (there)
perry?
then the code changes a little
yeah because they get destroyed when perry arrives, no?
How do I destroy a consumable without it getting used?
no yesvermind xd
if context.card_added and context.card.config.center.key == 'j_modID_perry_the_platypus' then
card.getting_sliced = true
-- this part was copied from dagger
G.GAME.joker_buffer = G.GAME.joker_buffer - 1
G.E_MANAGER:add_event(Event({
func = function()
G.GAME.joker_buffer = 0
card:start_dissolve({ HEX("57ecab") }, nil, 1.6)
return true
end
}))
end
try using :start_dissolve
and make sure to mark it for destruction (for interaction purposes) with getting_sliced = true
Do you have an example?
this one
card:start_dissolve()
card is the pointer to the card to destroy
so you'll need to first find your consumable and assign it to some variable (that is not card, because that one is already in use by the context)
Could I use self todestroy itself?
yeah
if you're running the code from itself just use this like that
what do you think
the home run one
thinking on either having either a fourth wall break with the voucher look like a broken glass or the baseball on flames
I was thinking of the latter
almost done :3
https://github.com/nh6574/VanillaRemade/wiki
baseball, huh?
Is there a way to use a consumable but have it not dissolve?
I demand compensation for copyright infringement
maybe add a bit of darkness due to the shader?
ey you know things, any code for destroying a specific joker when purchased?
aka when you buy perry, the inator joker in your hand gets destroyed
SMODS.destroy_cards(SMODS.find_card("j_modprefix_key"))
how do i get the name of an enhancement?
Bump
like turn m_gold into "Gold Card"
Is there a way to use a consumable but have it not dissolve?
what do you replace 'name_text' with?
as in keep it? or as in do a different animation?
nothing
Keeping it
keep_on_use(self, card) -> bool
Allows a used card to stay where it is or be moved to the consumables area from a booster pack instead of getting destroyed.
dilly did u look at the wiki

And where do I add that? In the use function?
how do i find the current play limit
G.GAME.starting_params.play_limit
will that be changed by SMODS.change_play_limit
yes
awesome
and this is an integer right
i'll assume yes
probably
SMODS.destroy_cards(SMODS.find_card("inator"))
end```
still not working crying emoji
what am i doing wrong
any way to change the chances of a rarity appearing in a shop?
the joker key is inator
it should be j_modprefix_inator
outside of the art which thinking about i'll do later as concepting and then coding should go first
so if i get this right: SMODS.scale_card doesn't.... scale.... the card? you still have to do that yourself?
it does, if you return the values im pretty sure
so if i get this right: SMODS.shrimp_fried_card isn't fried by a shrimp? you still have to fry it yourself?
so how do you change the vanilla/base rarities
um, what does it return
i hate how dumb i am
so, for this you just want only high cards being possible to be played?
scaling_value to set the value, scalar_value to set the scalar
is there a list somewhere of all G.GAME variables and tables?
you basically are doing it manually yeah
so i still have to do all of this
G.GAME[key:lower() .. "uncommon_mod"] = G.GAME[key:lower() .. "uncommon_mod"] * 2?
something like that
Bump
no
G.GAME.uncommon_mod
it didn't work, returns ERROR
G.GAME.uncommon_mod = G.GAME.uncommon_mod * 2?
Yes but I managed to get it with SMODS.change_play_limit(-G.hand.config.highlighted_limit + 1)
thanks
im guessing its card.ability.extra.enhancement
and basically the same for the rare one just rare_mod instead
yes
right i forgot xd
well, ive done this whole thing with a bit of testing in a different way if youd like it, ill send it in dms so i dont code block here but ill have to add you first
yes
i dont think many mods will support this lol
yeah but eremel didnt want to complicate incrementing a value, which I agree
so instead you complicated incrementing a value instead of replacing incrementing a value
i have no idea if it worked right
makes sense
does it print to the nearest number or something
im not gonna support it til it makes sense
what are you printing

in the second one you didnt change the rare_mod
does anyone have a link to vanilla remade
woops
also this is the modifier not the weight
how do you change the weight
the weight is calculated in poll_edition
thanks
300 bucks
w dilly
also N sorry i was helping giga but the wiki looks fantastic
you did a wonderful job
SMODS.destroy_cards(SMODS.find_card("j_CC_inator"))
end```
still not working...
and how do you change it within poll_edition?
it will crash with that = there
but whats not working
with that modifier
you dont need to change poll_edition
oh i added something and deleted it after, that's why that was there. inator is still alive when perry comes in
so G.GAME.[...]_mod = G.GAME.[...]_mod * 2 is correct?
yes
are you sure your mod prefix is CC
is that that one that says prefix?\
yes
wait what are you tryna do?
i have stumped the master
can i see the whole file
I know the addPerry function worked, but idk about the other one
"You see, Perry the Platypus,",
"when I was a kid",
"back in Gimmelshtump,",
"the carnival had opened",
"for an entire month.",
"I asked my parents",
"if I could watch the",
"show, but they said",
"no! On the last",
"day, they decided",
"to go to the fair,",
"and you know who",
"they took with them?",
"My brother, Roger!",
"From that day, I hated",
"carnivals and its",
"contents, so now with",
"this inator, Ill destroy",
"all the jokers and",
"take over the Tri-State",
"Area!!!",
such wise words
exactly
no idea, it should work
oh
i think i know what happened, how are you testing it?
and what's the intended effect?
i think we both had the same idea
i've been adding it manually instead of buying it
nope, not the problem
wdym then?
probably passed a string instead of a table
you probably want this
wrap it in {} and send it like that
i don't think i have one
i'm trying to iterate through every enhancement and add their keys to a list but it crashes when i pull G.P_CENTER_POOLS.Enhanced.key, so what's the right way to do it?
heres the code if you want to see for yourself
the auto run code was made by the one and only dilly

local list = {}
for _, enhanced_center in ipairs(G.P_CENTER_POOLS.Enhanced) do
table.insert(list, enhanced_center.key)
end
wrong reply

there
Joker? GASP. Jimbo the Joker!
I don't understand why it doesn't work if, as far as I can see, everything is fine.
That was unexpected and when i mean unexpected, COMPLETELY EXPECTED
strangely i can load into the blue card run i had to test so it looks it crashes when starting a new run but on the bright side
i believe the vouchers work!
@daring fern if you were curious
[SMODS ChaosControl "ChaosControl.lua"]:8: Error processing file 'jokers/jokers.lua' for mod with ID 'ChaosControl': [SMODS ChaosControl "jokers/jokers.lua"]:320: '}' expected (to close '{' at line 281) near 'add_to_deck'```
idk what to do
you wrote something wrong, show me a screenshot
thanks for the help nh once again you are a lifesaver but if anyone knows what is causing this i would greatly appreciate it
im gonna cry
i think variable assignment isn't allowed inside of return, but then how would you pass this so that it actually enhances?
Sorry i forgot say helo
then hello
he's still fucking there how do we kill doof
local ret = {}
ret[card.ability.extra.enhancement] = true
return ret
I wanna do what clearance sale does except on a joker, how can i do that?
looking at it, it might be the loc file
hey uhh react to this message with a thumbs up if we're giving up
My Twitch stream intro!
🎮 Main Channel ➔ @NickEh30
🪙 Support-A-Creator code: NickEh30 (Epic Partner)
━━━━━━━━━━━━━
🎮 TWITCH ➔ https://www.Twitch.tv/NickEh30
📷 INSTAGRAM ➔ https://Instagram.com/NickEh30
🐦 TWITTER ➔ https://Twitter.com/NickEh30
🎭 FACEBOOK ➔ https://Facebook.com/NickEh30
...
NEVER GIVE UP 🗣️🔥
i wanna
ok its the second voucher that's not working
maybe the requires is a table?
I GOT IT WORKING
it was because the requires is a table so keep that in mind folks
DONT TRUST
doesn't work
why the hell is stelle from hsr here
shes boutta give up
Bepis
this is worse than the time I fought that one boss from hsr
which one
the one
family guy cutaway gag:
Im never cool enough for a bepis hello anymore smh my head
bump, since the solution i thought worked, doesn't
can we have this for Balatro
i made a function to stylize your text faster
Its too late they already shot me dead
Are u talking about me
Oo
i made a function to stylize text slower
this basically adds C:inactive to the entire string while still repsecting existing C:
so u dont have to add C:inactive like 4 times anymore :3
my gf is firefly, we matching
WAIT THAT LOWKEY COOKS UP
lmao makes sense
Code?
theres also a toggle that you can turn on to override existing s:,C:,... (what the hell are those called)
actually even if you jump ff is just gonna get you lmao
take ownership.......
Hi!! i'm trying to make an enhancement change if the card is in hand at the end of round. However, i'm wondering how do I target the card in the hand for creating an event (I wrote G.hand but I don<t think that's an actual function)
anything that could help me out please?
calm little bump
What exactly is not working?
the context.individual part. the card just scores as if it wasn't enhanced
Yes, it would be context.main_scoring
right
and they spawn naturally! (i spammed the voucher tag)
if context.end_of_round then
for _,v in ipairs(G.hand.cards) do
if v == card then
G.E_MANAGER:add_event(Event({
func = function()
card:set_ability("enhancement key in here")
end
}))
break
end
end
end
probably smt like that?
i cant remember if enhancements need context.main_eval too
No, because they don't have context.main_eval
and if nh is correct the voucher is down outside of art and localisation
i'll try something like that! thank you
how do i replicate this?
The Deck of Absolute Hate -- Start with a random Busted Buffoons Joker. Selecting a Blind has a 1 in 10 chance to create a random Fantastic Joker, otherwise creates a random Joker that isn't from the Fantastic Pool.
is this mod open source? you can look at it for yourself
decks have a function for spawning stuff in when you enter a run, and you can use decks' calculate for the context before entering blinds

as in?
change G.shop_jokers.cards[n].cost
https://github.com/nh6574/VanillaRemade/blob/main/src/vouchers.lua
just have the clearance sale effect function on add_to_deck
for adding the sprite of an enhancement on a card, should I use an atlas or a "set_sprite" function? :0
and reverse it on remove_from_deck
because I don't understand the difference lol
No, you would just change G.GAME.discount_percent
function for spawning stuff
Still no.
Because cost changes every time Card:set_cost() is called.
so
wait really? i only changed .cost in the shop and it still worked
where would i put that?
do i skip the "if context" part and straight to SMODS.add_card?
if you want the joker to discount everything then do what smtcom said instead actually
ok
add_to_deck = function(self, card, from_debuff)
G.E_MANAGER:add_event(Event({
func = function()
G.GAME.discount_percent = card.ability.extra.percent
for _, v in pairs(G.I.CARD) do
if v.set_cost then v:set_cost() end
end
return true
end
}))
end
what do you think about this
would i just do G.GAME.discount_percent = card.ability.extra.percent?
do this
Yes, if you have set extra = {percent = number} in config
ok thanks
i guess i just do what smthcom said
Bump
and also add
remove_from_deck = function(self, card, from_debuff)
G.E_MANAGER:add_event(Event({
func = function()
G.GAME.discount_percent = G.GAME.discount_percent - card.ability.extra.percent
for _, v in pairs(G.I.CARD) do
if v.set_cost then v:set_cost() end
end
return true
end
}))
end
so it reverses when you remove the joker
oh right thanks
"Start with a random ..."
that shouldnt need any context, no?
is there any way to change the chances of the jumbo and mega booster packs to appear
this is another voucher idea
not sure if i should make it like +1 booster pack slot > +1 voucher slot or have that as another voucher set for booster packs
no joke you've somehow landed on the exact same voucher ideas as me 😭
i even got +1 booster > +1 voucher
i mean i am trying to keep it vanilla so its bound to happen 😅
yo no way
you know what they say about great minds...
the other voucher set idea is skipping a round or ante for a tradeoff
real
APES TOGETHER STRONG
@red flower i may be wrong, but i think vanillaremade's glass card is wrong?:
when i try a setup like this, it never procs. i even removed the probability check to see if i was just crazy and it wasn't proccing even when it was supposed to always proc
i think it should be more like
if
not card.glass_trigger
and context.main_scoring
and context.cardarea == G.play
and SMODS.pseudorandom_probability(card, 'vremade_glass', 1, card.ability.extra.odds)
then
card.glass_trigger = true
end
if context.destroy_card and context.destroy_card.glass_trigger then
return { remove = true }
end
? since to my understanding, context.destroy_card is only called when there are cards to destroy
what do you think
maybe a consumerable or joker slot?
just realized this is the first leaked ss of batrocities lmao
speaking of vouchers my game crashes when i start a new run with a voucher enabled
the crash has nothing to do with the voucher's effect
did you forget a pairs() or ipairs() in a for loop somewhere?
Yes, but that is exactly the code used when SMODS takes ownership of it I think.
...huh
don't use any in the file it's in
the only possible thing i can think of is that it requires "foresight" and the "for" in "foresight" is somehow making it think that it's a loop
im excited to steal everything thanks you lost it all
- turn the voucher slot into a booster > voucher
- make them seperate
- what about that reverse hieroglyph
i dont know what youre talking about
oh i found it, i wrote it as requires = 'v_chak_foresight' not requires = {'v_chak_foresight'}
oh, right. it was trying to iterate a string when it wanted a table
tooltips are shear thinning fluids, you need to vigorously shake your monitor to get it to fill the space
i think it should do it by default
huh
do you have maxw or something
i dont think i do
god damn it
Me too also
man im gonna have trouble doing ui in the future if yall hate it now
what if you put ret in the column above instead of the row
uhh
the opposite of what i said
this?
yes
nope
what about replacing minw = 2 for minw = 7 or something
pretty sure thats the width of the gray box beneath though
how do i check if a card is an enhancement even if they werent part of the scoring group? So practically just part of hand played. (scored also counted too)
G.play.cards?
oh i misread that ret as a separate thing
ill try thanks
i removed the entire G.UIT.R node
still didnt work
how the hell do i replicate the look of an info queue box.......
cant you.. use info_tip_from_rows
im assuming its
box = {
name
box
}
for the look
how do you call localize for a message already in the localization files, am i stupid?
SMODS.calculate_effect({ message = localize('k_upgrade_ex')}, card) this doesnt show up at all, it just shakes the card
that is correct
not sure if it should take your back or forward an ante
do you have talisman or something
no??
this just shakes the card
G.E_MANAGER:add_event(Event({
func = (function()
card:juice_up()
SMODS.calculate_effect({ message = localize('k_upgrade_ex')}, card)
return true
end)
}))```
that should work
it nearly works, it doesn't display the message tho
where are you doing it
why
it upgrades when you play a flush
why are you calling the message manually
return {
message = localize('k_upgrade_ex')
}
yeah, thats probably better, lol
how do i check if card in a for loop is my enhancement?
card:has_enhancement("enhancement key") if im not wrong
what the FUCK
i copied the ui code from info_tip_from_rows 😭
WDYMMMMMM
ok thanks, but im going in a for loop so how would i check if card [i] has enhancement etc etc?
well on the bright side
i know it semi-looks like what i want if it DOES work
for _,v in ipairs(...) do
if v:has_enhancement("m_glass") then
...
end
end
?
ah ok thanks
NEVER GIVE UP!!!!!
It works now
also how do i use for iparis etc etc? Cause i just used for i = 1, #G.play.cards do.
i means index, v means the value
for i,v in ipairs({1,2,5}) do
print(i,v)
end
--[[
> 1 1
> 2 2
> 3 5
]]
if you refer to v here then it should give you the card similar to G.play.cards[i] in your case
i remade the ui from scratch to remove maxw, still doesnt work
help
not sure if pogo should be the booster slot and unicycle the voucher slot or keep it as is
i dont know what im doing wrong anymore
ah ok thanks
oligraphy and monarchy dont sound balanced to me
those are some scarily strong vouchers
no -1 ante
monarchy could def be +1 ante
and split pogo and uni for voucher and booster so one does one
would have to come up with a different naming scheme but yeah good idea
not a bad idea
if you need the code for voucher and booster slots we can send you ours
wow really thanks
but for oligarchy i am a bit more confused on how to balance it because of the existance of crystal ball
i mean theres antimatter too
but antimatter requires picking up a useless and potentially harmful voucher beforehand (harmful due to the money requirement)
fair enough
while CB is a base voucher
hmm do you have a suggestion instead of a consumable slot
lemme think
this is me and @old epoch when it comes to coding
trying to think of something worth +1 ante
lemme check the main game real quick
legendaries appear in the shop or have a higher chance of appearing in tarot/spectral packs?
i dont, fucking know anymore
i added minw = 2 to all possible places that could affect the box's width
im gonna fucking change v now
not a bad idea
bepis is boutta crash
id say maybe giving soul/black hole a 1.5x or 2x chance of appearing in packs, but my main concern is that its +1 ante for a gamble of soul/B hole
correct?```lua
SMODS.add_card( set = "joker", key = "busterb_bustjokers" ) -- Spawns a random joker from the busted buffoons mod, pool = bustjokers, prefix = busterb
maybe an ante plus and then ante minus? wait maybe a negative/double when you beat a blind?
negative/double tag?
@old epoch @frigid cargo is this okay
apply = function(self,back)
SMODS.add_card( set = 'Joker', key = "j_busterb_bustjokers" )
end,
one or the other
Yep that works, i usually prefer Floppr tho
i SWEAR to god if this doesnt work
No, everything in SMODS.add_card needs to be in a table.
okay 👍
id say a negative tag when beating boss, as it allows for the player to get a decent amount of jokers that have potential to be good, prob a trade worth 1 ante
it doesnt
good idea thanks
SMODS.add_card({ set = 'Joker', key = "j_busterb_bustjokers" })
WHAT AM I SUPPOSED TO DO 😭
we really leaking the mod today, huh?
np
Yes.
im gonna crash out holy fuck
dont give up trust
-- Selecting a Blind has a 1 in 10 chance to create a random Fantastic Joker, otherwise creates a random Joker that isn't from the Fantastic Pool.
this is the other ability of the deck
Yep, i was thinking the joker slot one should be the tier 1 as well
since my original idea and the inspiration being the hieroglyph the theme should probably be like sci fi or something
how do i make an otherwise condition?
like an elseif?
use the same probability code but this time add an else?
not a bad idea. could also do a connection between the two allowing more jokers to be obtained
maybe about cloning or living for a long time?
oooh, i like that
if [CONDITION] then
else if [CONDITION] then
else
end
and this means any joker, not limited to lesser jokers
maybe a reference to kid a and or clone wars maybe like
Jim A or the Clown Wars
not familiar, but i say go with it
kid a is a radiohead album based off the concept that if we did clone humans the first one would be named something like "kid a"
and the clone wars is a star wars thing not that knowledgeable either but its called the clone wars for a reason?
those fit pretty well
ill think about it if you have any ideas let me know but formatted them
current progress:
calculate = function (self, back, context)
if context.selecting_blind then
if SMODS.pseudorandom_probability(back, 'busterb_fantasticjokerchance', 1, back.ability.extra.fantasticodds, 'busterb_fantasticjokerchance') then
SMODS.add_card({ set = 'Joker', key = "j_busterb_Fantastic" })
else
local randjoker = pseudorandom_element(G.P_CENTER_POOLS.Jokers, pseudoseed('hatedeck')).key
SMODS.add_card({ key = randjoker, edition = 'e_negative' })
end
i aint the most knowlegeable on many media things, but if i do get an idea i'll let you know. The two you suggested are pretty good though.
for the other one i would need to look into or see if it is possible where it can do something when a blind is completed and therefore if its a boss blind
it is easy peasy to check for that 👍
yeah
its one of the few documented contexts
check anyglyph deck code, as it does the tag thing but with doubles
would it be possible to have a calc in a voucher?
smods.voucher
yes
how the fuck did i miss that im literally on the wiki page i should get my eyes pulled out
im the same way dont worry
The right one feels like it should be a joker
does there need to be a boolean or the api does that where it will only trigger the calc if you have it redeemed
Generally you can just check VanillaRemade for things like this
It triggers of calculate of all cards in G.vouchers which contains all the redeemed vouchers.
which i do, but i don't think there's a vanilla voucher that does a calc function
if something only does things when it is added it would use the add_to_deck field, rather than calculate
well now let's see this in action
Observatory for one
i forgot that 💔
🤔
Vouchers also have redeem
for _,v in ipairs(G.play.cards) do
if v:has_enhancement("m_btct_astral") then
astralcount = astralcount + 1
end
end
why does this just crash
Because Card:has_enhancement() doesn't exist.
It's SMODS.has_enhancement
ah
I don't think vouchers even have add_to_deck, you use redeem for them instead. Also what they're doing is definitely not just when the voucher is redeemed.
my favourite part of programming, debugging
the ui is the problem its fine
bepis is washed, mods cancelled
mike delete ALL the mods
calculate = function(self, back, context)
if context.round_eval and G.GAME.last_blind and G.GAME.last_blind.boss then
G.E_MANAGER:add_event(Event({
func = function()
add_tag(Tag('tag_negative'))
play_sound('generic1', 0.9 + math.random() * 0.1, 0.8)
play_sound('holo1', 1.2 + math.random() * 0.1, 0.4)
return true
end
}))
end
end,
bsr is now cancelled 
wait how would i check regarding the card then?
MIKE! TEAR DOWN MY HOUSE! TEAR DOWN MY KIDS!
SMODS.has_enhancement(v, "enhancement key")
i think thats correct
i see thanks
i want to create a deck that removes the Big Blind, how would i go about this?
oh sweet
anyone knows what this error reffers to lmao? Like I understand that "Center" has no value but idk what "Center" is ;-;
Looking at the SMODS documentation there ain't a page lol
what did it do to you 
i think it would be a fun gimmick to have shorter Antes, and Red Stake uses Small Blind
this is the only two left
I might need some DrawStep help ngl 😭
im assuming there's some way to do that similar to rarities but its getting late and im going to get some rest
IT WORKS
Not yet gonna be implemented, but like, I’ll need a template for when I use this in the future.
RAHHHH
i think programming in (not saying by myself, thank you dilly for the auto save, and floppr and jga for the vouchers (i mean it wasn't too hard since it's an api call, but i still appreciate it. if someone already got the solution, you share it so every one else doesn't lose time figuring out how to do it themselves)) four sets of vouchers is good work in a few hours
need to recharge 🪫🗣️
Try looking at how Cryptid removes the Small Blind
its ALWAYS cryptid
reading cryptid code is a bit like tying your balls to a ceiling fan blade and turning it on
theone what the hell is this sentence im reading right now
i won't respond but feel free to mention me if you know how or have any other ideas. ken is off to hit the docks now
and you would know how...?
Idris Elba coughing on HotOnes
Original- https://www.youtube.com/watch?v=tYRS0aXaBC8&t=1186s&pbjreload=101&ab_channel=FirstWeFeast
More like dipping your whole head in boiling oil
imagining doing either invokes the same visceral disgust deep inside my soul
fair, fair
oh my god lmao
Ts shit so crazy, it deserves a unicorn react
WE ARE THE True...LINGS PLEASE FEED US
false
why this message collecting the truefinity stones
my
army cannot be 
YOU WERE SUPPOSED TO OBEY ME
no. you are supposed to obey LOVE
Hiii
The 7 True… reactions:
can you write a custom line
Anyways
for debugplus?
like debug message?
actually
scratch that
my plan was to make a custom message to shpw
in a crash log
I still need a DrawStep template for this
Id redo the colors of the last one, if its meant to be an AVA ref. Color picking is your friend
It’s an example, I’m looking for someone to help me out with DrawStep setup
Ahh! I have code for it, if you want?
You got code for triple layers?
Not exactly, but im pretty good at figuring stuff out. Just tell me exactly what you need. Like. Do you need them to move separately from eachother like souls or just layer them?
Trying to replicate exotic display
It has 3 layers
What's that from?
Exotic jokers from Cryptid
how can i make enhancement trigger only once and not all the cards with the enhancement that i have?
welp lmao I still don't understand what "center" it is reffering to
It happens the moment that I try to apply a modded enhancement, which then I'm guessing it's searching for a sprite maybe? Because all of my required parameters for both my consumable and my enhancement supposedly :/
i feel like this should be simple but I've tried just about everything I can think of
I want to give the other lucky card proc on trigger with a joker, what am I doing wrong
hey paizanos, I back to get help to figure out why this thing isn't working fully
the code does spawn the joker, but not destroy
<@&1133519078540185692>
🔫
thank you :3
G.jokers:remove_card, [card]:remove(), and [card] = nil when SMODS.destroy_cards exists...
Yes, but then it would dissolve instead of being like Seltzer
wdym?
It would dissolve instead of instantly dying.
ah, if that's what they want instead then yea they shouldn't use that
help
Then what should I use?
Line 40 refers to ">>"
SMODS.Back {
key = "hate",
atlas = "atlas_hate",
pos = { x = 0, y = 0 },
config = {
extra = {
fantasticodds = 10
},
},
loc_txt = {
name = "The Deck of Absolute Hate",
text = {"Start with a random {X:spectral,C:gold}Busted_Buffoons{} Joker",
"{C:green}#1# in #2#{} chance to spawn a {V:1,E:1}Fantastic{} Joker",
"Otherwise spawns in a random Non-Fantastic Joker."}
},
loc_vars = function(self, info_queue, back)
>> local fchance, fodds = SMODS.get_probability_vars(back, 1, back.ability.extra.fantasticodds, 'busterb_fantasticjokerchance')
return {vars = {fchance, fodds, colour = {HEX('b00b69')}}}
end,
calculate = function (self, back, context)
if context.selecting_blind then
if SMODS.pseudorandom_probability(back, 'busterb_fantasticjokerchance', 1, back.ability.extra.fantasticodds, 'busterb_fantasticjokerchance') then
SMODS.add_card({ set = 'Joker', key = "j_busterb_Fantastic" })
else
local randjoker = pseudorandom_element(G.P_CENTER_POOLS.Jokers, pseudoseed('hatedeck')).key
SMODS.add_card({ key = randjoker, edition = 'e_negative' })
end
end
end,
apply = function(self, back)
SMODS.add_card({ set = 'Joker', key = "j_busterb_bustjokers" })
end
}```
what do i do
ofc it refers to that why do you have those random ass characters there that serve no purpose?
delete those arrows
the title screen is G.STATE.SPLASH right?
idr
oh no i just put them there
so you don't get confused
the actual file doesnt have that
no idea tbh, you'll want to defer to the smarter ppl here
Lmao oki
or is there a way to know if after a run is over the player selected to go to the main menu
this is what the lua looks like atm```lua
-- Deck #1
-- SMODS.Back {
--}
--Deck #5 - The Deck of Absolute Hate
SMODS.Atlas {
key = "atlas_hate",
path = "hate.png",
px = 71,
py = 95
}
SMODS.Back {
key = "hate",
atlas = "atlas_hate",
pos = { x = 0, y = 0 },
config = {
extra = {
fantasticodds = 10
},
},
loc_txt = {
name = "The Deck of Absolute Hate",
text = {"Start with a random {X:spectral,C:gold}Busted_Buffoons{} Joker",
"{C:green}#1# in #2#{} chance to spawn a {V:1,E:1}Fantastic{} Joker",
"Otherwise spawns in a random Non-Fantastic Joker."}
},
loc_vars = function(self, info_queue, back)
local fchance, fodds = SMODS.get_probability_vars(back, 1, back.ability.extra.fantasticodds, 'busterb_fantasticjokerchance')
return {vars = {fchance, fodds, colour = {HEX('b00b69')}}}
end,
calculate = function (self, back, context)
if context.selecting_blind then
if SMODS.pseudorandom_probability(back, 'busterb_fantasticjokerchance', 1, back.ability.extra.fantasticodds, 'busterb_fantasticjokerchance') then
SMODS.add_card({ set = 'Joker', key = "j_busterb_Fantastic" })
else
local randjoker = pseudorandom_element(G.P_CENTER_POOLS.Jokers, pseudoseed('hatedeck')).key
SMODS.add_card({ key = randjoker, edition = 'e_negative' })
end
end
end,
apply = function(self, back)
SMODS.add_card({ set = 'Joker', key = "j_busterb_bustjokers" })
end
}
when i try to look at my decks
I know bepisFever was helping me earlier
it gets an error
i really need his help with this one
I know, but idk how to help you
asleep currently(?)
Damn
and it's talking about
local fchance, fodds = SMODS.get_probability_vars(back, 1, back.ability.extra.fantasticodds, 'busterb_fantasticjokerchance')
i don't know how to fix it
solved:
to have a deck get variables from itself its self.config.[thing], not back.ability.extra.[thing]
oh
vanilla remade is so helpful i think N deserves something for it
N deserves the world
i should buy him another game because he did the wiki
if it still crashes (it shouldn't but theres a chance as i didn't test myself) then try changing back to self
colours = {HEX('b00b69')}}}
end,```
(it's attempting to index 'colours')
it crashed when it tried to index colours
i'm gonna try this
N is the GOAT
cryptid is where i tap out, i don't touch it
i always do cause im amazed by how they did cryptid
it's held together with so much dark magic that satan himself told them to chill the fuck out
i look at cryptid and simply go 
cryptid overrides drive me nuts sometimes
No, I think it's G.STAGE.MAIN_MENU
what am i doing wrong brahhh
it was close, it was G.STATES.MENU apparently
whats the distinction between splash and menu i wonder
also you have [thing] = [other thing] in your loc_vars
wasn't that the crash?
alr then
i see cryptid, au revoir
cryptid more like..mid..pid..?
more like cryptmid
the joy i felt
if you were to make a deck that would spawn any random joker... wait, does my deck work properly?
it should
maybe, there's a problem with this?
apply = function(self, back)
SMODS.add_card({ set = 'Joker', key = "j_busterb_bustjokers" })
end```
what joker has the key j_busterb_bustjokers?
that's a pool
it's looking for jokers from my mod, the pool is keyed "bustjokers" to refer to all my jokers
bleh ```lua
-- Jokers Pool
SMODS.ObjectType{
key = "bustjokers",
default = "j_busterb_spinel",
cards = {},
inject = function(self)
SMODS.ObjectType.inject(self)
end,
}
that isnt how key works...
ok then how do i write it?
the function of the deck is as is:
The Deck of Absolute Hate -- Start with a random Busted Buffoons Joker. Selecting a Blind has a 1 in 10 chance to create a random Fantastic Joker, otherwise creates a random Joker that isn't from the Fantastic Pool.
get a pseudorandom_element from said pool and use it's key for key
ok so
local randbust = pseudorandom_element(G.P_CENTER_POOLS.bustjokers, pseudoseed('bustrand')).key
SMODS.add_card({ key = randbust })```
like this?
afaik yes
Attempt to index local area
-# PLEASE send the error that you get instead of just saying 5 words abt it
Ok fine, I’ll recreate the errorr
like what you did here
oh right add_card needs an area parameter
No, it would be SMODS.add_card({set = 'bustjokers'})
that- would actually make a lot of sense
CRYPTID STRIKES BACK
yes
apply = function(self, back)
SMODS.add_card({ key = 'bustjokers' })
end
i did use this code
No, you didn't, it's set not key
bigger number = more likely to appear
No, it's the opposite.
3
i believe holographic is also 3
and then polychrome is like 16
wait those might be the other way around
I will try again
And see if it works
so, anyone awake who can help me destroy cards before making them?
apply = function(self, back)
SMODS.add_card({ set = 'bustjokers' })
end
like this?
if that's the case, then
area = G.jokers
Yes, you need to put it in an event.
apply = function(self, back)
G.E_MANAGER:add_event(Event({
func = function()
local card = SMODS.add_card({ set = 'bustjokers', area = 'G.jokers' })
card:add_to_deck()
return true
end
}))
end```
im making a joker that saves you from death, but i cant seem to figure out what to put in saved, it either shows "ERROR" or "saved by mr.bones"
No, ```lua
G.E_MANAGER:add_event(Event({
func = function()
if not G.jokers then return false end
SMODS.add_card({ set = 'bustjokers', area = G.jokers })
return true
end
}))
You would put a key to a localization entry.
oh, that makes sense, would that be in descriptions.other?
No, it would be in misc > dictionary
event?
Foil is 20, holo 14, poly 3 (sometimes 6), negative 3
there you go
it works just as planned
now to test out the "gives a random joker" ability
<@&1133519078540185692>
boo
ok so```lua
calculate = function (self, back, context)
if context.end_of_round then
if SMODS.pseudorandom_probability(self, 'busterb_fantasticjokerchance', 1, self.config.fantasticodds, 'busterb_fantasticjokerchance') then
SMODS.add_card({ set = 'Joker', key = "j_busterb_Fantastic" })
else
local randjoker = pseudorandom_element(G.P_CENTER_POOLS.Jokers, pseudoseed('hatedeck')).key
SMODS.add_card({ key = randjoker, edition = 'e_negative' })
end
end
end,
b
i'll see what i can do
hehehehehehehe
now it just defaults to "saved by Mr.Bones"
what is line 47?
Remove the {} and it would just be 'saved_by_toyotama'
local randjoker = pseudorandom_element(G.P_CENTER_POOLS.Jokers, pseudoseed('hatedeck')).key
Yes, it's G.P_CENTER_POOLS.Joker
joker without an s
thanks
if context.end_of_round then
if SMODS.pseudorandom_probability(self, 'busterb_fantasticjokerchance', 1, self.config.fantasticodds, 'busterb_fantasticjokerchance') then
SMODS.add_card({ set = 'Fantastic', area = G.jokers })
else
local randjoker = pseudorandom_element(G.P_CENTER_POOLS.Joker, pseudoseed('hatedeck')).key
SMODS.add_card({ key = randjoker, edition = 'e_negative' })
end
end```
broken as hell
spawned the same joker over and over again at a rapid pace
didn't show on screen
it registered a sound file tho
You need and context.main_eval
It works
Though it does not seem to uhh
I don’t know how to make it so that it blacklists jokers, so instead I’ll rewrite the description
1 in 10 chance It guarantees a fantastic joker.
how can i make the jokers from my mod appear more frequently than other jokers
any bird enjoyers
woah
hi smt
i just have to fix the anims and clean up the hitboxes a little more and i think this one is done
calculate = function(self, card, context)
if context.joker_main then
local last_face_card = nil
for i = #context.scoring_hand, 1, -1 do
if context.scoring_hand[i]:is_face() then
last_face_card = context.scoring_hand[i]
break
end
end
if last_face_card and context.card_eval and context.card_eval.other_card == last_face_card then
return {
xmult = card.ability.extra.xmult
}
end
end
end
somehow not registering the last played face cards
any help?
context.card_eval doesn't exist.
fuck me
how do i fix this
What is the goal?
last played face cards gives X1.5 Mult
I know that there's a load function, but is there also something like an unload function?
-# Like when I leave the Run to the Menu?
does anyone know how to change the title screen title image and background colour?
if context.individual and context.cardarea == G.play then
local last_face_card
for i = #context.scoring_hand, 1, -1 do
if context.scoring_hand[i]:is_face() then
last_face_card = context.scoring_hand[i]
break
end
end
if last_face_card and context.other_card == last_face_card then
return {xmult = 1.5
end
end
i almost did the same thing
damnit
thanks
No.
Yes.
Nice an precise, thank'cha 
cool! How do you do it?
You have an atlas with the key 'balatro' and the property of raw_key = true for changing the logo and you would redefine the draw steps for G.SPLASH_BACK for the background colour I think.
i'm a bit new to modding, how exactly do you code it?
SMODS.Atlas{
key = 'balatro',
raw_key = true,
path = 'newlogo.png',
px = 333,
py = 216
}
it still doesnt seem to be working :/
it's not changing the logo
Did you change newlogo.png to the image path?
I just named the image newlogo.png
what would happen if there were two mods that changed the title image active at once?
is it still supposed to be in the 1x and 2x folders?
I think that is what "priority" is for in the mod menu
Yes.
hmm
The one with the higher priority would change the image last.
No, you would have to remove a slot when it is added and put the slot back when it is removed.
can i have a joker debuff or rebuff adjacent jokers?
Yes.
How so?
I have the adjecent joker thing set, just not sure how to apply debuffed or buffed to the neighboring joker instead of itself
SMODS.debuff_card(card, true, 'source'), also context.other_card doesn't exist in context.setting_blind
could someone please direct me to the location of the sound effect code wiki?
thanks in advance
wtf
what was that?!
What do i change to make SMODS.debuff_card(card, true, 'source') target the specifc joker i want?
You would change card to the card you want.
Think im doing this wrong
Remove the ifs
explain
This???
No, remove and context.other_card
got it
It works
Two questions
How would i make the joker itself immune to debuffs and can i make it remove a neighboring joker's perishable sticker?
SMODS.current_mod.set_debuff = function(card)
if card.config.center.key == 'j_modprefix_key' then
return 'prevent_debuff'
end
end
Yes.
what am i doing wrong?
path = { "sound.ogg" } play_sound("sound")
the wiki has so much room for improvement i swear
do i put that in calculate or outside the joker's code?
Remove the {}
Outside.
oh!
i thought it was like config and the wiki didn't have an example
thanks
still doesn't exist?
Yes, it's modprefix_soundkey
wait do i change current.mod to the mod ID or leave it?
No, it's SMODS.current_mod
I think i need the ifs because it crashes if there's no jokers on both sides of it
still crashed...
path = { "sound.ogg" } play_sound("modprefix_sound")
even remembered to include my actual mod prefix this time
the file is in assets/sounds/
am i missing something?
create_tabs({
snap_to_nav = true,
colour = G.C.ORANGE,
tabs = tabs
}),```
is there anyway for each tab to have their own button colour?
Yes, you need to check if left and if right
what are you trying to do when blind is selected
Turns out a hook didn't fully work, so now I'm trying to add a patch but it doesn't seem to be doing anything either, how would i write the patch to add the payload (as seen in the image) in the code that makes it so that you are saved by a joker? (im pretty sure it's either the target or pattern that's wrong)
and also how would i remove the perishable sticker from jokers?
are you sure you are checking the dump file?
and also, make sure your lovely patch priority is higher than smods since you seem to be patching into a smods line
-# mod priority shouldnt affect lovely patch priority right 🤔
Yes.
nice, guess im not that rusty yet :3
priority = 0, iirc smods is -10(?), and here's the lovely dump file, the part i want to patch
i think it might be because its an incomplete line? shrug
that twas the issue 🥳
ty!
Bump
have u tried if context.after and not context.end_of_round then
No, those contexts don't get called at the same time.
hm
lemme check smt, i remember having an issue like that
yeah no clue
3"
i remember making a bsr joker that has context.after trigger twice before, adding something to that helped but i forgot what exactly
context.post_trigger also works for held in hand card stuff too, assuming, as G.hand is mentioned there?
what are you trying to check with the flame intensity thing?
context.main_eval?
Hey ! i need help with multiple thing abt one joker, basically, i need the joker to give 100$ when bought in the shop, and i need the joker to switch the position of the discard and play hand button, how could i achieve those things ? (and it needs to play a song that doesn't replace the games music but don't worry 'bout this)
I've tried watching at other mods but couldn't find anything -_- and it is useless to share a screenshot of the joker as i haven't made anything expect the base like the Atlas and loc_txt and such
(and yes the joker is annoying on purpose)
there is a setting in the game that changes the play/discard buttons, you could try changing that setting maybe? idk if itll update instantly though
and for the money just put it in the add_to_deck for the joker
i thought of that but how x)
well first you need to find what the setting is called
if context.buying_card and context.card == card then ease_dollars(100) end
G.SETTINGS.play_button_pos which is 0 or 1.
mmmh mhhhhhh
ok but the G.SETTINGS.play_button_pos needs to change every X second how could i achieve that ?
Do stuff in the update function then.
logical enough
is it normal that updating steamodded should make all the colours more vibrant
No, just use context.buying_self
?
for now i have this what did i do wrong ? (ima begginer btw so it might be a dumb error)
You can't use context in add_to_deck
oh x) so from_debuff ?
No.
then nothing ?
You have to use calculate
do you want it only when bought or when obtained by any means
when bought only
like this ?
the idea is correct but the syntax isn't, you put the code inside the other context check
f#ck
also please format your code
it's working for me and i don't get lost so... but i'll works around it if it really bothers people
it's not working for you because you just made a mistake cause of it lmao
just right click > format
yes
from_debuff should be context
i.e. calculate = function(self, card, context)
😭
-# I need to go 'eep, but my mind is locked on post_trigger-like context for if a held in hand card has any valid effects... need that context.card_effects.
it works now yh but i don"t know how to make the G.SETTINGS.play_button_pos change every blind,
This has been bugging me for a while and now I wanna ask:
How do you juice_up the Blueprint-Card?
I tried to see if the Context was context.blueprint and call context.blueprint_card:juice_up() or just context.blueprint:juice_up()
I tried the code from Vanilla Remade: (context.blueprint_card or card):juice_up() or also the if-else from the certificate joker....
In all cases it just juices up the original card again ^^'
Ah, I figured it might've been that...:
When you use (for example):
(context.blueprint_card or card):juice_up()
Before returning, everything works fine.
BUT, if you use that same function IN a return, than it doesn't work;
-- Quick and Dirty example:
return {
func = function()
(context.blueprint_card or card):juice_up()
return true
end
}
Welp, consider my Question answered, thank you for comming to my Ted-Talk 
i would like to know if the way im implementing a joker is sane but i dont wanna flood the chat with my code
i feel like im doing something wrong performance-wise or inefficiently
oh fire im just gonna post an image
Help, my stake is being stupid.
it's aight, but I think you should use a local tally variable for calculate and for loc_vars, then you don't need to save it to ability.extra.lucky_cards
I'm doin it like so:
also consider taking a look at our lord and saviour; https://github.com/nh6574/VanillaRemade/blob/main/src/jokers.lua
yeh ive been following along with that
i think you need to disable the prefix for the applied stake
prefix_config = { applied_stakes = { mod = false } },
oh cool!! i wanted it to immediately update the joker text but wasnt sure how to get it to work, i just needed to do the same thing in loc_vars
thanks!
how does the loc_var updating work?
huh what?
Pretty sure the game regenerates all UI whenever it reappears, so loc_vars() gets called every time you hover over a card / click it
it applies the mod prefix by default
don't ask me why
what i said
I don't know where you want me to put that code snippet.
Remove the stake_ prefix in stake_black
Also i think itll be important to add unlocked_stake = "whatever stake you want"
erm
And SMODS.Stake:take_ownership('whatever stake you want, {applied_stakes = {"prefix_pink"}, above_stake = "prefix_pink"})
if i say things and they get ignored there's no much i can do lol
Shoutout makson
I just have taken it from Bunco when tried to make my own stakes lol
hey y'all, how do you refer to an atlas from a different mod? i've tried putting the mod's prefix in front of the atlas name but that doesn't work
i think you need to use the prefix_config to remove your mod's prefix from the atlas
hi! i'm trying to add enhancements with the use of a consumable but it seems that i'm missing something because it gives me a ''center'' error ;-;. I tried to copy the Vanilla example mod but it isn't quite right. Anyone got a clue please?
m_[mod prefix]_Copper_v1
So its just a naming problem?
yes
damn ;w;
the key for your enhancement is fine, the problem is that you need the full key when converting
huh? does the game never load the deck on reload? or am I missing something in the code?
crazy
today i found out canio is misspelled in the code 🥀
does he know
how do i see how many times a hand has been played
wait shit i have a card that does this
nvm lmao gimme a sec
how do i turn on stencil for balala again
alt + f4
amazing, thank you kind sir

hello folks, i have a question, can i change the resolution of the playing card for my custom deck?
I couldn't find a way of unlocking a joker upon obtaining a consumable, so I did this
Yes but silly me dont know how
This is awesome, will check it out and try to follow with examples
so while that prob solve a problem it didn't fix my current problem lol-. i'm still getting "attempt to index local 'center' [a nil value]" ;w;
can you share the full log
you can copypaste it here
wait I can? (lmao sorry i'm new to this)
yeah
also did you change both mod_conv?
is tinbox the correct prefix?
going in mt mod.json it should be
you have a copper_v2, right?
could it be the _v1 of my key name that is ccausing the issue perhaps?
yep
may i see it