#💻・modding-dev
1 messages · Page 567 of 1
the ui
but for now you could focus on making it not crash in the menu
well it fully works, i didnt even replace the cfg.odds yet
cool cool, now what i'd recommend is getting out of that cfg system, you don't really need it
my best guess is that there is some sort of method i need to use to add the card or didn't set up the set correctly
what was wrong with my code before? so i know for future reference
ummm i dont think this was intended
trying to make a Joker that has two effects: one that gains flat mult if any of the cards in the scoring hand is a 3, 4, 2, or 8; and another that gives Xmult on the final hand of the round. However, this calculate function is doing neither of those things. hewp pwease?
when you assign local cfg = card and card.ability and card.ability.extra you're basically telling lua to tell you if that's true or false, it's not really turning card or its other tables into a variable you could then use like cfg.odds
from my understanding
NO WAY THATS ALL IT WAS
same with this
will work on the art and such later
you are also hardcoding numerator as 1, while SMODS.get_probability_vars can already do that for you when you create two variables in one line: local numerator, denominator
since the great pyramid is the oldest world wonder i think its fitting it would be the default and since that it would be the fool of the set
no need for {vars = {xmult}}
it's
return {
xmult = card.ability.extra.xmult
}
do get this error probably got the label wrong
do you know why all the odds are 1/2?
like in the entire game
do you want me to push what i have and you can look at it then
you probably accidentally hooked the probability to be set to 1 in 2
wdym? for every card?
was it like that before or after this crash fix?
the effects still aren't triggering at all
hold on let me
only after the crash fix
Ok well it had something to do with the CFG
cause i went through and changed all them to card.ability.extra.X and it fixed it
ok so your logic is a lil fucked since
doing if context.other_card:get_id() == 3 or 4
will do nothing
i dont really understand why or how that happened but glad its sorted out now
https://github.com/nh6574/VanillaRemade/blob/06b5cc65d9085b2d6500abfbef3df06f21a5e9e3/src/jokers.lua#L752 it's best if you look here @stark viper
yea im very confused too but hey it all worked out
oh okay i knew there would be a vanilla joker that would help me out but i couldn't think of any until now (odd todd, fib, etc.)
i feel a little dumb lol
if you would like i could refactor your code and add comments to explain why we opt for certain "writing behaviors" while coding
completely up to you though
first time making a joker?
no, but i'm still a little green 😭
it's the first time i'm making one based on ranks
i just completely forgot vanilla remade exists
i learned the concepts in balatro modding through this: https://github.com/Steamodded/examples/tree/master/Mods/ExampleJokersMod
very detailed
i always have vremade on standby
just in case.
ok nevermind its still an issue the whole everything being 1/2
its just when i have the joker
THEY DROPPED PERKEO 2????
hmmm, mind sharing the code?
remember back when i told you that you're using context.mod_probability wrong
you're still using it wrong
remove that whole if block
Is it ok if I interject with some questions for my own coding?
or should i wait until y'all are done
ok so now what
it was canio
oh
in your retrigger joker check, the pseudorandom call has the arguments in the wrong order
it should be SMODS.pseudorandom_probability(card, 'seed', 1, odds, 'Doofed')
immolate + pareidolia 🗣️
also, in context.individual, replace that return with
return {
Xmult = card.ability.extra.Xmult
}
it just looks cleaner + you could then change Xmult in the config table to 2, for example, if you wanted
the config table is really handy when you want hard set variables
i've tried updating the logic to reflect what I'm seeing in vremade and example mod, but it's still not updating. neither this nor the xmult, for that matter
context.other_card doesn't exist in context.before
another lily spotted
also you don’t need to use extra = {} in the return
so is there any way to do what I wanna do, which is scale mult if any of the cards contain a certain rank?
im pretty sure
oh wait a second im fucking stupid nvm ignore
o hi, caught me at a bad time, i'm losing my mind 💀 😭
thats ok and normal
yes
set local flag = false, then do a loop for i, v in ipairs(context.full_hand) or context.scoring_hand (scoring_hand if you don't want unscored cards to count) and check each card v for the rank. if there is a rank, set flag = true. then after the loop, if flag == true, scale the card
balatro modding is fun and gruesome at the same time
i like coming up with the ideas and (often) drawing the art, but actually implementing my ideas into the program has been arduous at best 💀
i try my best not to get frustrated at ppl struggling with coding because y'all are trying your best
keep up the good work ✨
have you looked into joker forge?
ive heard good things
coding is fun though
it is better to make a mod yourself badly than to make it with jokerforge and be unable to code yourself imo
and if you're transitioning from jokerforge to coding, referencing generated jokerforge code probably leads to bad habits
jokerforge is good if you want an easy way to outline your mod, and also maybe an easy way to manage the sprites, but on the code side it's unbearable
yea just pointing out things that could help albeit temporarily
and that's coming from someone who can't code
the loc_txt = {
[1]
never actually looked at jokerforge code... is it that bad?...
the blueprint code is horrendous 😭
jokerforge is not capable of the same nuance that a human programmer is capable of
it just combines blocks
yeah
if the blocks go together weirdly its bad code
:true:
i have an example of the blueprint code from jokerforge but i cant go on my pc rn
that's exactly what my mindset is. I wanted to learn how to make Balatro mods as an avenue through which i can explore programming. I personally get much more satisfaction out of building my mod up from scratch than relying on someone else's program that may not even work properly, and ultimately devalue the learning experience.
hi me 3 years ago when i decided to take comp sci for game development
i'll admit that i'm part of the "use jokerforge > jesus christ this code is dogshit > coding on your own" pipeline
glowup
i started off on jokerforge
then eased out of it because of some more complicated jokers
now i’m making batshit insane jokers that aren’t unstable from shit code
:myman:
back in my day (may 2025) jokerforge did not exist
DAMN it's that recent?
lmao
yeah i'm pretty sure jokerforge dropped in like july lol
because i remember it was around the time i started coding my own mod
i mustve caught it hella early
because when i started using it only jokers were available
i think i was around before like
xchips were in jf
and when the code was really bad internally
anyways i need some help coding
let the good people of this server help you
thank you quite much :>
may god have mercy on your soul. /j
if I wanted to count the amount of cards with a specific edition currently in my deck, how would i go about doing that?
You can try and look at how Driver's License does it in the VanillaRemade
yeah i was looking at cloud 9 as a reference but i'm not exactly getting it just yet
wait
all of this is happening within the calculate function, correct?
reference cloud 9 + the vanillaremade wiki entry for "how to get a card's specific edition"
yes
WHERE!?
yes, more specifically replacing the
if context.other_card:get_id() == ... line
ty n'
oh right i forgot about smth
yeah uh how do i make this work properly
(this doesn’t work and it crashes the game)
In context.open_booster, how can I tell if the booster I just purchased was from the shop (rather than a Tag)?
i'm gonna keep it real if I want to learn ANYTHING im gonna need to get in a call with someone who knows what they're doing
or unless people keep answering my really small questions here
for some reason
i just throw stuff together and pray to god it works
well i dont because if i keep doing that i'm just gonna dig myself into a deeper and deeper pit until someone shows me the ladder that was right behind me
Wouldn't it be something like
https://github.com/nh6574/VanillaRemade/wiki#how-do-i-get-if-a-card-has-a-specific-editionenhancementsealsticker
local edition_count = 0
for index, playing_card in ipairs(G.playing_cards) do
-- check for foil
if card.edition and card.edition.key == "e_foil" then
edition_count = edition_count + 1
end
end
i mean it’s the learning process:
mistakes make you stronger
if someone tells you there’s an easier solution after making a mistake, that’s fine
you learnt about something new
-# even so, there's a difference between making a mistake and effectively finding a solution, that's why the steammodded and vanillaremake wikis exist
anyways, I wanted to ask about something specific
zygarde here makes a Cell consumable when a full house is played. How can I make it so the consumable appears once the hand finishes scoring?
No, it would be playing_card not card
oop, thanks for the catch
hey if ur still available i can help in a call
really? that would be wonderful
i think ive figured this out ken...
whats the code for replacing the title ace of spades with a specific joker?
imma update you tomorrow
im tired asf
trying to add a joker to the main menu, not working
i keep getting attempt to index field jokers over and over
yeah i've completely mutilated my calculate function at this point i have no idea what's happenign
How do you get a ConsumableType's localized name?
Log?
localize('k_'..key:lower())
It's because you set the set to Joker and it tried to check for unlocks, which iterates over G.jokers.cards which doesn't exist.
yeah there's just something i'm not understanding about the logic here, i may need to have this clear cut explicitly spelled out for me
You have to use the key for the joker.
Yeah that wasn’t a good time to jump in. Sry! 
so how do i fix it?
SMODS.create_card({key = 'j_modprefix_key'})
local passed = false
for k, v in pairs(context.full_hand) do
if v:get_id() == id then
passed = true
end
end
if passed then
-- scale
end
this?
yea what something gave you is right
-# this is the part of the experience where I curse my god for making me autistic
okay
Yes, remove rarity = 'Common'
if you only want it to count scored cards, use context.scoring_hand instead of context.full_hand
right right
ATTEMPT TO INDEX FIELD JOKERS AGAIN
I AM GOING FUCKING CRAZY I SWEAR TO GOD
use debugplus, hover over a joker in the collection, and press ctrl-3
post your new code
Log?
i'm referencing entropy now, and it seems like using SMODS.create_card is just a no-go
so what is?
you'll want to do this
local newcard = Card(
G.title_top.T.x,
G.title_top.T.y,
G.CARD_W,
G.CARD_H,
G.P_CARDS.empty,
G.P_CENTERS.[card key goes here, no quote marks],
{ bypass_discovery_center = true }
)
so for example if you wanted the default joker to show up, you'd use G.P_CENTERS.j_joker in that second to last line
oh my god
entropy has a 1% chance to ||make the ace on the title screen freaky instead of solar||
Hi guys, I would like my mod to have options when creating a save file, and I have no clue how to run code on save file creation, any ideas?
okay so I tried this, and it worked before i added the joker main context part of the function, i.e. the joker was scaling, but it just wasn't adding the mult to the actual score. As soon as I added the joker_main context part, all of a sudden, the scaling quit working, but the xmult would be added.
is it just not possible for me to have two different effects like this?
(tbf the xmult is rather juiced, so i'm fine cutting it from the joker if that's the case)
Yes, because you didn't add the for loop.
Remove the card area check.
oh mah lord
we're halfway there
now
how do I get the xmult to trigger only on the last played hand
if G.GAME.current_round.hands_left <= 0
would this be in the return function?
xmult = G.GAME.current_round.hands_left <= 0 and card.ability.extra.xmult or nil

ahhhh okay this is all clicking now
i was trying to do nested if statements before and it just wasn't working
so if i understand this correctly, this is saying that for xmult to be returned, the number of hands remaining must be less than or equal to 0
Yes.
The more I'm trying to progress, the more I wonder "Why am I even trying to write a mod that doesn't just create jokers ?" 
what about the label used for the consumable type's button in the collection?
localize('b_'..key:lower()..'_cards')
thank you
so curious question, why is "nil" included here?
So it doesn't set xmult to false
oooo icic
oh wait, it doesn't work, just returns 'ERROR'
It's b_ not k_
Does anyone know how I could execute functions at a given moment? I'd prefer if it's when a save file is created but since I'm just testing rn it can be a keypress or anything, I just need to see if the problem is that my code is running on game start 
Erm, I thought you used "other_card:is_face" to check if a card was face but its not working and crashing..? It says other_card is a nill value? I confuse 
during destroy_card, context.destroy_card itself fills the role of context.other_card
oh so I would do context.destroy_card:is_face() then?
yea
now its saying destroy card is a nil
Code?
It was working fine before I tried to check if it was a face card
You still need to check that context.destroy_card exists.
oh so do both context destory_card:is_face() AND it without the is_face?
I understand now
my joker wont appear in the gaem
please indent your code and also loc_text{ should be
loc_txt = { and also the atlas doesn't have the same key as the atlas on the joker
Also this will be very helpful
https://github.com/nh6574/VanillaRemade/wiki
is it possible for a Joker to inherit the effect of a different one when a round begins? Not in the sense of Blueprint where it just copies the effect, but i.e. the Joker randomly decides it's copying Gros Michel this turn
I'd imagine you could save the id of the joker in its loc_vars
or just call the calculate function of the chosen joker from the other
ah, perfect! thanks :>
Will I need to define G.modprefix_savedjokercards anywhere or is that all handled on its own
how do i make a card juice up repeatedly while a certain condition is met?
No, you just have to change modprefix to your mod prefix.
juice_card_until
alright, thank you
is there a better way to do this
so this gives X3 mult when the hand is striped in rank (ex. hand is played like 1,3,1,3 or 5,4,5,4,5)
it gives X3 mult on the last card instead because i have no idea how to apply it at the end of hand scoring and the last card applies X9 mult if it has a red seal 💀
context.joker_main is when the joker scores.
yeah but like i did that before and it didn't give the mult
Yes, because you're setting it to false in every context.
wait hold on i might be stupid
Yes, you would put each id in a table and check if there are only two ranks and they either have the same amount or they are one off, then you would loop through context.scoring_hand and get the first cards rank, then compare the next card with the opposite rank and do that for every card in context.scoring_hand
Then it would work for hands of any size.
I'm trying to make a joker to where changing the volume to a specific level earns you money, but it doesn't return when i do the comparison and printing the value of the volume doesn't print anything
Sorta-probably-complicated follow-ups:
- Is there a way to have it so that the Joker sprite doesn't change? What got copied over from the copied Joker's ability that changed this?
- Given I've figured out how to use
loc_varsto add a "(Currently <Joker>)" description, would it be possible to append the info box/description of the copied joker to the bottom as well?
bump
2: No, you would have to use an info_queue
loc_vars = function(self, info_queue, card)
local main_end = {
{n = G.UIT.C, config = {align = "cm", padding = 0.0}, nodes = {
{n = G.UIT.R, config = {align = "cm", padding = 0.0}, nodes = {
{n = G.UIT.T, config = {text = "(Currently ", colour = G.C.UI.TEXT_INACTIVE, scale = 0.32}},
{n = G.UIT.T, config = {text = localize { type = 'name_text', set = "Joker", key = card.ability.extra.copying_joker }, colour = G.C.FILTER, scale = 0.32}},
{n = G.UIT.T, config = {text = ")", colour = G.C.UI.TEXT_INACTIVE, scale = 0.32}}
},
},
}
}
}
return { vars = { card.ability.extra.copying_joker }, main_end = main_end }
end
alright; would I just info_queue[#info_queue + 1] = <joker description> at the end here?
Why are using main_end?
so I can constantly update this part
I don't think doing it in the normal translation files worked
(also not sure why it's 8 ball)
No, it does.
it does, but only to the key, I think
return {vars = {card.ability.extra.copying_joker and localize({type = 'name_text', set = "Joker", key = card.ability.extra.copying_joker}) or 'Nothing'}} and having '{C:inactive}(Currently {C:attention}#1#{C:inactive}){}' would work.
-- ...
local old_center_key = card.config.center_key
card:set_ability(key, nil, 'j8mod_modeling_clay')
card:update(0.016)
-- ...
Am I setting the ability here in the right place, or should I be doing it somewhere else? And am I using the right key
No, it needs to be 'quantum'
Oh! I thought that was the name of the original joker or something, haha. Thanks
That tells it to not set the sprites.
ahh, it's not on the docs, I wouldn'tve known ^^;
the info_queue thing would be the last thing I need, what should I be adding there?
info_queue[#info_queue+1] = G.P_CENTERS[card.ability.extra.copying_joker]
thanks!
oh wow, it even shows up like a little tooltip, that's sweet
Thank you so much! that's it for tonight from me haha
how do i change the Joker in the intro
thanks
Hey three questions:
- What the heck is pinned? I've deactivated all mods and it's still here
- How do i define the localization of a sticker? There's nothing on the docs
- How do i define the stake sticker iin localization. the way it's formulated is a bit cnonfusing
Pinned is a base "sticker" that is used in challenges
Sticker localization should have the name in misc.labels and description in descriptions.Other
fun, never heard about it
and with the suffix _sticker?
(misc = { labels = {)
no, there is no key for stickers
so its just modkey_stickername
which challenge?
-# the premade jokers?
the cdag one
last q: must the sticker be defined in this case
i mean, no
you can put whatever the hell you want in localization
although you will not be able to access it in game unless you define the sticker
wait does that mean stake stickers and joker stickers are defined the same way or what
i have no clue about that, look in vanillaremade
No, those are stakes.
yea but the stake sticker that gets applied
onee you win
Yes, they come from stakes.
im crafing my jokers in Joker Forge, and i cannot find a way to destroy discarded card(s)
very well
isaac we love you
guys I want to make a mod inspired by Neapolitan cards and culture, is anyone interested in the project?
Why this work in joker code and didnt work in blind code, just copy the code from one of my joker
chip_text is not a number
It even says that it is a string...
maybe sometimes it is set to a number and you haven't tested a case where it's not
ok, just add tostring() and it work
weird
heya, anyone good with joker display?
How do I make my sticker not appear on a judgement-created joker?
if context.setting_blind and [BLIND TYPE IS BOSS] then
how would i do something like this
@red flower
😭
check context.blind
ty
Wait doesn’t judgment created cards not have stickers
so like context.blind == "Boss"?
nop
idk what context.blind has rn though so you want to print it out and check lol
-# or wait until someone that knows about it answers idk
I guess it's something like context.blind:get_type() == "Boss"
lovely/dump/card.lua
Vanilla remade
or vanillaremade
that is insanely useful ty
There’s also a wiki
You should read it
First
Pls help me, SMODS wiki is awful
Do I really have to analyze it's source code?
I have no idea
Oh, it was simple
I thought they spawn without it
Yes they are, unless you're adding your own sticker
context.blind.boss
yeah i figured it out dw
if i wanted to make a 1 off consumable that isnt in any particular set how should i go about that
Smods.Consumeabletype
I think
No, it's SMODS.ConsumableType
whats up
border_colour
and i need check the size of the full hand instead of the scoring
so i need to get the length of that?
yeah
thanks
is there any tools to help with atlas making or updating
You kinda just have to make the image yourself 
i use this to merge sprites but idk if there's a use case for anyone other than me https://www.finalparsec.com/tools/sprite_sheet_maker
Use this free tool to make a sprite sheet for your Unity game and optimize performance for your 2D game.
tried to make a joker that randomizes all mult given by jokers, but if i try it in game it doesn't work. did i missed something?
Yes, mult isn't always located at card.ability.mult
how can i add custom consumable set to this menu?
i think it's Consumable in this instance
thats what i did its not appearing
Code?
key = 'slop_shit',
default = 'c_slop_calling_card',
primary_colour = G.C.SET.Tarot,
secondary_colour = G.C.SECONDARY_SET.Tarot,
collection_rows = {5, 6},
shop_rate = 0
}```
no thats for a single instance
thunk effect
do you have debugplus
yeah
what happens if you eval G.P_CENTER_POOLS.slop_shit
No, consumable types don't have mod prefixes.
true
slop shit
or even better eval SMODS.ConsumableTypes
the mod is called slop and i wanted to create a random 1 off consumable item so i just made a type called random shit
lemme check
i fw it
where do i put that sorry im kinda new
open the console with /
ah ok
still not appearing
whats the problem
if you scroll up does yours appear
then its not registered
ohhh
check if the file is loaded correctly
how
i tried making a custom joker but it wont appear on the collection
^^
and make sure you have a metadata file thats set up correctly too
uhh idk i dont have your code
what is a metadata
oh right
a .json file in your mod folder
assert(SMODS.load_file("file path in here"))() <-- if your code is not in the main file
ok thanks
you could also set up an auto file loader in your main file if you dont really care about the order of files loading
ahh yes its all working now thank you
Play with values
hmm
c_sp_j1407b = {
name = "J1407b",
text = {
'(' .. tostring(G.GAME.hands["sp_plateau"].level) .. ') Level up',
'{C:attention}Plateau{}',
'{C:blue}+25{} Chips and',
'{C:red}+4{} Mult'
}
}
guys i'm trying to change the level text and the color also has to be dynamic too idk
I don't think "Consumables" is a proper set
Try changing it to "Tarot" for testing
Also
you set your key for tags as "alt_tex_rhfull_rh_tags" but called it as "alt_tex_rhfull_rh_tag" at the bottom
it's missing the s
That's the cause of the crash, at least
i am supossed to do this? @manic rune
remove the comments and see if its still red
but also, remove the dependencies
you dont need it
okay
lets see
remove dump_loc too
there's a template for copying just below that one 😭
Post the code again
i also probably have to edit the default LUA and rename the
no wait i dont have to rename the tarots
When I mentioned renaming it to Tarot, I meant just the set. You could have kept the key and filename the same
oh
I assume you changed it to rh_tarot.png but didn't change the actual file name
Do that and post the crash and code if it crashes again
like tis?
I should not be doing this with an empty stomach
here's TWO of them [because i think it might just be both of them at this point]
Comment the localization = true line for now, test without it
Once you can load in and it stops crashing, you can check the localization
so turn off the Localization on the tags>
?
got it
On all of them
Okay
Let’s see
it
works
oh my god
o
this looks really fucking goofy tho
wait
😭
ima be real
This looks so goofy to me
im not even that pissed
I'm at work rn so it might take a bit for me to answer
Use display_size
Where do I put that in the code
Oh
In the atlas
I have to double it
Since my dumbass drew in 2x
Yeah double it and try
So
Have it at 282 and 380?
Is that double 71x95?
No
Then why are you asking
What
You have to add the px and py parameters inside AltTexture with the new Joker size
I made it 142x190
When it was originally 71x95 yea?
but you drew it in 2x so it was originally double size and you need to half it
No, you gotta keep it double
i'm very confused
Hey um i know i asked this already but why does it show the highlighted thing?
My joker is meant to spawn ANY Joker, not just Jimbo
I think if you add px = 142 and py = 190 inside AltTexture, it should work
nil in nil 💡
i didn't code that yet 💔
You probably add a infoqueue for it?
Why is my jokers
idk what that is-
i'm not good at coding :(
It's the thing you highlighted
You specify it in loc_vars
i didn't add that while i coded it tho?
lemme check
is it somewhere around here??
info_queue is literally right there...
😭
"did i clean everything?"
while everything around you is covered in mud and mold
aight i fixed it :D
yo could anyone put this error into english pls 😭 it happens when i try to open the shop
i can send full error if anyone needs
it may be because i have shop rate set to 0 on a card
but how can i made it not appear
if thats the issue
Ok
I took a shower sorry
two questions:
- how do i let the shop spawn multiple copies of a joker from a certain rarity (think showman but for one rarity only)
- how do i destroy all copies of a single joker
theres, no padding
1: Hook SMODS.showman and check if G.P_CENTERS[card_key].rarity is the rarity you want.
2: SMODS.destroy_cards(SMODS.find_card('j_modprefix_key'))
where do i hook smods.showman to?
Speed? ATK?
in G.FUNCS.discard_cards_from_highlighted, what tells the hand cardarea to draw to hand?
i'd like to patch that and change the number of cards drawn
there's a context for that
omgomgomg i should've asked for that first :D!!
there seems to be a context for almost anything now
what is it?
welcome to bsr
👍 :D
What’s the mod that adds a clock that can be dragged ?
iirc
@red flower how can i check if the cards were drawn because of a discard, and how can i see how many cards were discarded?
You would set a flag in context.pre_discard, and context.full_hand
👍
I need a context.card_added but before the Card applies it's Abilities;
For Example if I add the Drunkard Joker,
I want to do something before Drunkard gives me +1 Discard...
I could patch some stuff in but I wanna ask for better Ideas first, so;
Any good Ideas? x3
Drunkard gives +1 discard immediately because it’s add_to_deck and not a calculate function
Yeah yeah I know, the Goal is a Context that goes before that 
You can check for bought
context.set_ability is a thing now i think? idk what thats called on currently though
I tried that, thinking it would work but... Alas, doesn't work for bought Jokers, Spawned in Jokers or Jokers from Packs x3
Ah i see
I think you’d need to calculate it unless there’s something I don’t know about which can be the case
i just make it myself
<@&1133519078540185692>
<@&1133519078540185692>
mr bearst
i keep trying to ping but it keeps giving me other members in the server 😭
just type @ mods and then space
just type @mods
It's called when a card is changed or created.
Is that implying that I should make something myself or that you are working on something yourself? x3
Firstly, you can't store cards in cards.
that you should make it yourself
ah
because youre setting the cards to draw to a value instead of increasing it
not the problem, i'm checking if it'd draw less than 2
this error shows up when in the joker collection i go to the page where my jokers are. Why it does this?
i'll try setting the number of cards, instead of the cards themselves
the atlas youre using for your joker doesnt exist
what does the code look like
working! thanks!
do you have an atlas called Joker in your mod?
also youre supposed to replace modprefix with your actual mod prefix
i wonder if there's a mod out there somewhere that has the actual prefix "modprefix"
also <card>.edition = "Polychrome" doesnt work, card.edition is a table
i didn't put the whole code that's the rest
do played_card:set_edition("e_polychrome")
thats not relevant to the atlas
and doesnt answer my question
I tried to instance my blind in Balatro but this error message appears, does anyone know why?
Line 40
Remove return true and return false
Also card doesn't exist.
to make it exist should I set the variable to card = G.playing_cards?
No, you would replace it with context.debuff_card
The thing that was giving me error was the loc_vars thing.
Now the game doesn't crash but the blind doesn't disable the cards of the corresponding random chosen rank
how can I fix this?
card.base.rank doesn't exist, also I meant you would store the value in the table of G.GAME.blind.effect
Hi! Why does my blind doesn't work as intended? It should destroy 1 random card after each played hand:
name = "juzian",
key = "juzian",
atlas = "blinds_juzian",
pos = { y = 0 },
dollars = 10,
mult = 2.5,
boss = { min = 1 },
boss_colour = HEX('5b8561'),
calculate = function(self, context)
if context.after then
if G.play and #G.play.cards > 0 then
local idx = pseudorandom("juzian", 1, #G.play.cards)
local card = G.play.cards[idx]
if card then
if card.ability.name == "Glass Card" then
card:shatter()
return {sound = 'misiek_niom'}
else
card:start_dissolve()
return {sound = 'misiek_niom'}
end
end
end
end
end,
}```
the boss blind still doesn't debuff the chosen rank
You didn't change anything I told you to change.
I'm kinda confused rn
Is there a way to force eternal sticker on lower stakes?
I've been sitting here for a while not understanding why the eternal sticker is not working for add_card(), but now I have a strong suspicion it's because the new deck I'm creating only has access to white stake for now
i think add_card always adds the sticker as long as the joker is compatible, how are you doing it
SMODS.add_card{set = "Joker", key = "j_princess", stickers = {"eternal"}, edition = "e_negative"}
And on the Joker I have:
eternal_compat = true,
hmmm try force_stickers = {"eternal"}?
does "j_princess" work also
because its missing the prefix
force_stickers still doesn't work
I do have a negative princess joker spawning
can i see the whole deck code
I only started modding very recently, so it most likely won't be pretty
name = "Princess Deck",
key = "princess",
pos = {x = 0, y = 0},
config = { princess = true},
atlas = 'SlayThePrincess',
loc_txt = {
name = "Princess Deck",
text = {
"Start with {C:red}level 0{} {C:attention}poker hands{} and",
"a {C:dark_edition}Negative{} {C:attention}Eternal{} {C:purple}The Princess{}."
},
},
apply = function(self)
G.E_MANAGER:add_event(Event({
func = function()
if G.jokers then
SMODS.add_card{set = "Joker", key = "j_princess", force_stickers = {"eternal"}, edition = "e_negative"}
end
return true
end
}))
for poker_hand_key, _ in pairs(G.GAME.hands) do
SMODS.smart_level_up_hand(nil, poker_hand_key, true, -1)
end
end
}
------------JOKERS---------------------
SMODS.Joker{
key = "princess",
pool = "joker",
blueprint_compat = true,
rarity = 1,
cost = 5,
pos = { x = 1, y = 0 },
eternal_compat = true,
unlocked = true,
discovered = true,
atlas = 'SlayThePrincess',
config = { extra = { mult = 0} },
loc_txt = {
name = "The Princess",
text = { "{C:red}+1 Mult{} for each {C:attention}Queen{}",
"in your {C:attention}full deck{}" }
},
in_pool = function(self, args)
return args.source ~= 'stp'
end,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.mult } }
end,
calculate = function(self, card, context)
if context.joker_main then
local queens = 0
for _, playing_card in ipairs(G.playing_cards or {}) do
if playing_card:get_id() == 12 then queens = queens + 1 end
end
return { mult = queens}
end
end,
}```
stickers = {"eternal"}, force_stickers = true?
Thank you, that fixed it!
I even removed the card.base.rank but still the boss blind won't debuff the cards.
I don't get if there has to be something with the G.GAME.blind effect or something else...
If i want to change a rank in chronological order without it being random, what do I change about this method?
chat, I just started modding. Just a simple Joker :D but nothing works 😭 I followed multiple tutorials. All of 'em saying the same things. But still doesnt work
the script in question:
--- STEAMODDED HEADER
--- MOD_NAME: YOU ARE AN IDIOT mod
--- MOD_ID: YOUAREANIDIOT
--- MOD_AUTHOR: [some cool guy]
--- MOD_DESCRIPTION: Adds the "You Are An Idiot" joker (inspired by the virus "you are an idiot").
--- PREFIX: xmpl
------------MOD CODE -------------------------
SMODS.Atlas{
key = 'jokers', -- atlas key
path = 'jokers.png', -- atlas' path
px = 71, -- width of one card
py = 95 -- height of one card
}
SMODS.Joker{
key = 'xmpl_idiot', -- joker key
loc_txt = { -- local text
name = 'You Are An Idiot!',
text = {
'When a Blind is selected,',
'creates a {C:negative}negative{} copy of this joker.',
'+10 {C:mult}Mult{} for each copy of this card'
},
unlock = {
'Be {C:gold}Funny{}'
}
},
atlas = 'jokers', -- atlas' key
rarity = 4, -- rarity: 1 = Common, 2 = Uncommon, 3 = Rare, 4 = Legendary
cost = 6, -- cost
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = false,
perishable_compat = false,
pos = {x = 0, y = 0},
_init = function(self)
-- This event listener creates a new instance of the joker when a Blind is selected.
self.s_select_blind_hook = function(blind)
-- This checks to make sure the blind isn't a boss blind.
if not blind.boss and G.jokers then
-- Use a timer to add the card with a small delay.
SMODS.Timer.create(0.1, function()
local new_joker = G.jokers:add_card('xmpl_idiot', nil, nil, nil, {card_mod = 'k_negative'})
if new_joker then
G.FUNCTIONS.play_sfx('xmpl.idiot_sound', 1)
end
end)
end
end
G.E.SELECT_BLIND:add(self.s_select_blind_hook, self)
-- This event listener handles the Mult bonus at the end of the hand.
self.s_post_hand_hook = function(self, hand)
local idiot_count = 0
-- Count all regular copies of the joker
if G.jokers and G.jokers.deck_jokers then
for i, joker in ipairs(G.jokers.deck_jokers) do
-- This check is more robust to ensure it's the correct joker
if joker.base_name == 'xmpl_idiot' then
idiot_count = idiot_count + 1
end
end
end
-- Count all negative copies of the joker
if G.jokers and G.jokers.negative_jokers then
for i, joker in ipairs(G.jokers.negative_jokers) do
-- This check is more robust to ensure it's the correct joker
if joker.base_name == 'xmpl_idiot' then
idiot_count = idiot_count + 1
end
end
end
-- Apply the mult bonus directly to the hand's score
if idiot_count > 0 then
hand.mult = hand.mult + (idiot_count * 10)
end
end
G.E.POST_HAND:add(self.s_post_hand_hook, self)
end,
}
------------MOD CODE END----------------------
G.GAME.blind.effect.rank, and you can't store cards in the save file, also you would do return {debuff = true} in context.debuff_card
can i use this?
if context.other_card:is_suit("Spades") or context.other_card:is_suit("Hearts") then
Yes.
sorry, i meant to share this
if context.individual and context.cardarea == G.play then
if context.other_card:is_suit("Spades") or context.other_card:is_suit("Hearts") then
Still yes.
basically it should: create a negative copy of its self WHEN blind selected (which plays a lil audio :D) and add +10 to mult. But still nothing works :C
_init doesn't exist.
_innitbruv
with what should I replace it with? Sorry if I ask too many questions. Is that LUA isnt so easy 😭
init = function
ooh oke thanks
No.
ah
No.
wait, then what should I use? :C
ohhh
Uhh
if context.setting_blind
calculate
What tutorial did you follow?
ooh oke
if you wanna make it give a negative copy of itself
like this?:
calculate = function(self,card,context)
if context.setting_blind then
-- This event listener creates a new instance of the joker when a Blind is selected.
self.s_select_blind_hook = function(blind)
-- This checks to make sure the blind isn't a boss blind.
if not blind.boss and G.jokers then
-- Use a timer to add the card with a small delay.
SMODS.Timer.create(0.1, function()
local new_joker = G.jokers:add_card('xmpl_idiot', nil, nil, nil, {card_mod = 'k_negative'})
if new_joker then
G.FUNCTIONS.play_sfx('xmpl.idiot_sound', 1)
end
end
Use SMODS.add_card
ah
Is this AI generated?
sad to admit but some things cause IDK coding T-T
key = “j_yourmodprefix_yourjokerkey”, edition = “e_negative”
You can't talk about it in this chat
Yes and AI doesn’t know anything at all about writing balatro mods
It does you more harm than it solves
Btw just ignore the topic cuz read pinned message
Almost everything here is wrong.
If you keep talking bt it you'll get in trouble
So much of your code is just things that don’t exist
Just read vremade
ooh sorry
Like, AT ALL
Try reading jokers with similar abilities
It's alright they didn't put that in #📜・modding-rules yet
they should though
so everyone knows that
is there a joker with those abilities T-T
so like this then?
there's a joker with similar one
ooh cool! what is it? :D
oooohh
I would look at a combination of perkeo and invisible joker
Cartomancer has setting blind context
oke :D
oke :D
And actually read the code to understand what they are doing
too many things T-T
Mindlessly copying stuff is a terrible way to learn how things work
it's basically building blocks
oh oke
like scratch?
no
i mean there's jokerforge but that's kinda lame
look
if you know what pieces to fit in
then it's as easy as drawing
No, you would set it to card:get_id(), also you would check context.debuff_card:get_id() == G.GAME.blind.effect.rank
Hello
mh
Please give me deck ideas
if you want references, i suggest you install vanilla remade
give me deck ideas please
try copying the most basic joker in the game: joker
oooh oke
Jimbo Deck - start with a random vanilla joker
but, ig imma try to use the one someone suggested which is joker forge cause I think its easier cause I spent the entire day to try to make this mod 😭
copy cavenid
that wasn't for u
oh
Hi! Does anyone have an idea how to make blind destroy random card from played hand each time? I think I've tried everything and it doesn't want to work
but copy cavendish
hold up, what exactly should I set to card:get_id()?
G.GAME.blind.effect.rank
aight
Yes, I'm referring to the random card.
how do I make this work T-T (i cant find the + mult nor the create a negative copy when blind selected)
yes, I am trying joker forge cause I find it easy ig
so something like this should work?
it should get the id and then check if the cards of the full deck correspond to that id and then debuff them, right?
something in this code is causing an error can someone point it out to me pls it happens whenever i open the shop
SMODS.ConsumableType {
key = 'slop_shit',
default = 'c_slop_calling_card',
primary_colour = G.C.SET.Tarot,
secondary_colour = G.C.SECONDARY_SET.Tarot,
collection_rows = {1, 1},
shop_rate = 0,
}
SMODS.Atlas{
key = "consumables",
path = "consumables.png",
px = 71,
py = 95
}
SMODS.Consumable {
key = 'calling_card',
set = 'slop_shit',
loc_txt = {
name = "Calling Card",
text = {
"Disables current {C:attention}Boss Blind{}",
}
},
atlas = "consumables",
pos = { x = 0, y = 0 },
use = function(self, card)
print("Using Calling Card")
end,
can_use = function(self, card, context)
return context.blind.boss
end
}```
okay nvm I found all
done
Did you also draw the sprite
for?
Jimbo deck
Bruhhhhhhh
Perhaps.
Hey guys, I forgot how to display “upgrade”
You know? For when a joker upgrades something?
return {message = localize('k_upgrade_ex')}
sadly still nothing, I played a hand to see if the effect would trigger but nothing
bump
chat I need help :C
How about when canio or sum shows the current XMult
so uhh. this is now the script but it still crashes the game T-T (i am going insane btw)
--- STEAMODDED HEADER
--- MOD_NAME: YOU ARE AN IDIOT mod
--- MOD_ID: YOUAREANIDIOT
--- MOD_AUTHOR: [some cool guy]
--- MOD_DESCRIPTION: Adds the "You Are An Idiot" joker (inspired by the virus "you are an idiot").
--- PREFIX: xmpl
----------------------------------------------
------------MOD CODE -------------------------
SMODS.Atlas{
key = 'jokers', -- atlas key
path = 'jokers.png', -- atlas' path
px = 71, -- width of one card
py = 95 -- height of one card
}
SMODS.Joker{ --You Are An Idiot!
key = "youareanidiot",
config = {
extra = {
mult = 10,
eternal = 0,
respect = 0
}
},
loc_txt = {
['name'] = 'You Are An Idiot!',
['text'] = {
[1] = 'Creates a {C:purple}Negative {}copy of its self.',
[2] = '{X:red,C:white}+10 Mult{}',
[3] = '{s:1.9}YOU ARE AN IDIOT!{}'
},
['unlock'] = {
[1] = 'Unlocked by default.'
}
},
pos = {
x = 0,
y = 0
},
display_size = {
w = 71 * 1,
h = 95 * 1
},
cost = 6,
rarity = 3,
blueprint_compat = true,
eternal_compat = true,
perishable_compat = true,
unlocked = true,
discovered = true,
atlas = 'joker.png'
pools = { ["modprefix_mycustom_jokers"] = true },
calculate = function(self, card, context)
if context.cardarea == G.jokers and context.joker_main then
return {
mult = card.ability.extra.mult
}
end
if context.setting_blind then
return {
func = function()
local available_jokers = {}
for i, joker in ipairs(G.jokers.cards) do
table.insert(available_jokers, joker)
end
local target_joker = #available_jokers > 0 and pseudorandom_element(available_jokers, pseudoseed('copy_joker')) or nil
if target_joker then
G.E_MANAGER:add_event(Event({
func = function()
local copied_joker = copy_card(target_joker, nil, nil, nil, target_joker.edition and target_joker.edition.negative)
copied_joker:set_edition("e_negative", true)
copied_joker:add_sticker('eternal', true)
copied_joker:add_to_deck()
G.jokers:emplace(copied_joker)
return true
end
}))
card_eval_status_text(context.blueprint_card or card, 'extra', nil, nil, nil, {message = localize('k_duplicated_ex'), colour = G.C.GREEN})
end
return true
end
}
end
end
}
----------------------------------------------
------------MOD CODE END----------------------
bro put that in `'s please
put that in a code block
put that in a code block
aslo
huh?
oke
but how-
huh?
like this
ooh but i dont have the thing
steammodded has a new version of defining mods
just copy the ```
wdym?
oke
edited
in the new version you have a folder with mod.json like this
{
"id": "reddit",
"name": "Reddit Bonanza",
"author": ["ItsGraphax", "mindoftony", "The_Neto06"],
"description": "Adds loads of Joker concepts provided by redditors to Balatro",
"prefix": "reddit",
"main_file": "main.lua",
"priority": 0,
"badge_colour": "ff4b08",
"badge_text_colour": "ffffff",
"display_name": "Reddit Bonanza",
"version": "1.3.23.1",
"dependencies": [
"Steamodded (>=1.0.0~BETA-0623b)",
"Lovely (>=0.6)"
],
"dump_loc": false
}
which loads main.lua
i feel like i'm missing something pretty obvious. can someone help me? I'm trying to flip the joker when the sticker is applied, and unflip it once removed
apply = function(self, card, val)
print(card.facing)
if card.facing == 'front' and val then
card:flip()
end
card.ability[self.key] = val
end
what's the crash
I already have a mod in the works but I haven’t made the logo/badge for it
what does it do
it shouid be atlas = 'jokers' instead of atlas = 'joker.png'
oooh okay I get it now :D
like this?
ooh oke
no the path is fine, i meant in the joker
wait imma send the .png
Oh
i had in mind to make even another one but not now
then atlas is the key of SMODS.Atlas
im saying you're correct
this atlas?
deck idea:
Rainbow deck:
All cards are polychrome
yes
is this good idea
okay thanks :D
can i make local variables in my localization file if i want to reuse a single bit of text a bunch of times or will the game kill me if i do anything other than returning
So the XMult upgrade message is instead emplaced into the cards, how do I make the XMult upgrade message stick to the joker
message_card = card?
WeightedElement:new_process("create_card",function (t,args)
local requires = t.requires or true
print("creating card?")
if requires then
print("info:",inspect(t.info))
local created_card = SMODS.create_card(t.info)
local emplace_at = t.info.emplace_at
emplace_at=loadstring("return "..emplace_at)()
print("create passed?")
emplace_at:emplace(created_card)
print("emplaced?")
created_card:add_to_deck()
print("added?")
end
end)
edition: e_negative
set: Tarot```
why this gives stack overflow? With Cryptid mod enabled
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play then
if context.other_card:is_suit("Spades") or context.other_card:is_suit("Hearts") then
card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.xmultmod
return {
message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.xmult } },
}
end
end
if context.joker_main then
return {
x_mult = card.ability.extra.xmult,
sound = "busterb_explode"
}
end
this is what my code looks like
yeah add message_card = card to the return
i made a monster. it adds mults BASED on how many max slots D:
message_card right under message?
stencil?
why this give stack overflow
and only with Cryptid too
wha?
its the "You are an idiot!" virus thing, yk the reference?
the sticker flips the joker while applied :)
no I mean isn't that just stencil
no i mean what does it do currently, does the print do something
it prints the facing of the card, yes
mb
but it doesn't flip?

ah
jimbo deck white stake done
weird. have you tried an event
ps: the cards play a flipping animation, but don't flip
guys can I have any deck ideas
brainstorming session
what
can you share the full sticker code, so i can try it
does it have to do with the card being unflipped while being revealed in the shop?
SMODS.Sticker {
key = 'flipped',
rate = 1.0,
needs_enable_flag = false,
apply = function(self, card, val)
print(card.facing)
if card.facing == 'front' and val then
card:flip()
end
card.ability[self.key] = val
end
}
forgor the code block
probably
the game unflips cards most of the time
oh I got an idea:
Random deck:
All cards in this deck are randomised
Start with 5 random jokers
should i overwrite the shop code? or what is your guess
gtg again
you will need to hook card:flip to do this effect anyway so I would just do that
what got deleted i didnt se
spam
this is fun
^
i just need it to give the player 1 specific custom consumable item
SMODS.add_card({key = 'c_modprefix_key'})
thanks
I got like, 1250 of these jokers now. I am in hell. (i even have jimball as a friend :D)
how can i make it so it doesnt go over the limit?
this does not destroy cards for some reason
i've tried with guaranteed odds
local variables are not saved betwen calculate calls
so in between context.before and context.after destroycards becomes empty again
G.jokers and #G.jokers.cards < G.jokers.config.card_limit
Should work
Wait there was a buffer
if #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit
Tyyyy
had a feeling
do i need to create the list in the card's config?
my joker is becoming a menace to society.
it's not a good idea to save cards in the ability table
it's better to give the cards a flag
how can I make my joker more lethal to the round making it look like a good joker but it isnt?
Game design 🔥
wdym?
should I make a tarrot that removes all of "you are an idiot" cards called "antivirus"? 😭
thing is
i don't really know what you mean or how to do that
cuz the list thing pretty much does exactly that only it stores the card
val.my_destroy_flag_or_something = true
then you check that in context.after
How to make calculation for joker, which interacts with probability? For example, like joker "Opps al 6s"
Anyone know why this Legendary won't spawn from the Soul spectral card? I have 3 other Legendaries and they all spawn
-- Thunderlord
SMODS.Joker {
key = 'thunderlord',
loc_txt = {
name = "Thunderlord",
text = {
"Gains {C:blue}+#1#{} Chips for every {C:enhanced}Enhancement{} in deck,",
"{C:red}+#2#{} Mult for every {C:attention}Seal{} in deck,",
"and {X:red,C:white}X#3#{} Mult for every {C:dark_edition}Edition{} in deck",
"{C:inactive}(Currently{} {C:blue}+#4#{} {C:inactive}Chips,{} {C:red}+#5#{} {C:inactive}Mult, and{} {X:red,C:white}X#6#{} {C:inactive}Mult){}"
}
},
blueprint_compat = true,
perishable_compat = true,
eternal_compat = true,
rarity = 4,
cost = 20,
atlas = 'JokerPackOne',
pos = { x = 1, y = 0 },
soul_pos = { x = 1, y = 1 },
config = {
extra = {
chips = 80,
mult = 10,
Xmult = 1
}
},
loc_vars = function(self, info_queue, card)
local enhance_count = 0
local seal_count = 0
local edition_count = 0
if G.playing_cards then
for _, playing_card in ipairs(G.playing_cards or {}) do
if next(SMODS.get_enhancements(playing_card)) then
enhance_count = enhance_count + 1
end
if playing_card.seal ~= nil then
seal_count = seal_count + 1
end
if playing_card.edition ~= nil then
edition_count = edition_count + 1
end
end
end
return {
vars = {
card.ability.extra.chips,
card.ability.extra.mult,
card.ability.extra.Xmult,
card.ability.extra.chips * enhance_count,
card.ability.extra.mult * seal_count,
1 + card.ability.extra.Xmult * edition_count
}
}
end,
calculate = function(self, card, context)
if context.joker_main then
local enhance_count = 0
local seal_count = 0
local edition_count = 0
if G.playing_cards then
for _, playing_card in ipairs(G.playing_cards or {}) do
if next(SMODS.get_enhancements(playing_card)) then
enhance_count = enhance_count + 1
end
if playing_card.seal ~= nil then
seal_count = seal_count + 1
end
if playing_card.edition ~= nil then
edition_count = edition_count + 1
end
end
end
return {
chips = card.ability.extra.chips * enhance_count,
mult = card.ability.extra.mult * seal_count,
Xmult = 1 + card.ability.extra.Xmult * edition_count
}
end
end,
in_pool = function(self, args)
for _, playing_card in ipairs(G.playing_cards or {}) do
if next(SMODS.get_enhancements(playing_card)) then
return true
end
if playing_card.seal ~= nil then
return true
end
if playing_card.edition ~= nil then
return true
end
end
return false
end
}
Holding the boss reroll tag and going into the shop activates it too early and rerolls the small blind (this only works on the small blind, nowhere else). Any way to delay its activation? Idk if this is just an existing bug because you're not supposed to be holding this tag while in a shop in the first place.
Do you have a seal, enhancement, or edition in your deck?
Just checked. Only spawns if there's an enhanced, sealed, or editioned card in deck. Thanks
Thanks
this still doesn't destroy any cards even when i guarantee the odds
oh this is always false
Yes, booleans are not present in context.scoring_hand
to be honest it would look neater if i just checked if a card was steel or gold and then wrapped it all in a not gate
apparently that reformat fixed it
but one more test should do it
YEP IT WORKS
does defining a can_use function override the automatic max_highlighted functionality?
Hey hey hey,
How do I make the blind background a custom image instead of those default colorful swirls?
Is there a way to make Stone Cards considered Queens?
Closest I think is Pareidolia, but from a technical perspective that seems different, as there's just a bool for face cards, while ranks have an ID that's not registered because of stone cards
not currently
well actually
since stone cards dont have a base rank you probably could just hook card:get_id
but since the current function for checking ranks returns a number rather than there being smth like an is_rank function to hook its fairly limited what you can do in terms of quantum ranks
I see, thank you for the info! Then I'll think up something else
Yes.
How would I make it so that a Joker's description changes based on whether or not the player currently has it in their Joker slots?
Ex. this is how it'd look in the collection/shop:
+1 Chips
(...?)
And this is how it'd look in your jokers:
+1 Chips and
the top card of your deck is a 2 of Spades
(if it's a loc_vars thing, I don't know how to do it; I have the functionality down though)
Replace the 2nd line of the description text with a single loc_vars variable
like,
-- in your loc_txt or localization
text = {
"{C:chips}+#1#{} Chips",
"#2#" -- optionally add a color variable
}
-- then in your loc_vars...
loc_vars = function(self, info, card)
local description = condition and "description" or "(...?)";
return { vars = {
card.ability.extra.chips,
description
}
}
end
thanks!
🫡
calling G.FUNCS.quit would be funny
os.shutdown() :troll
os.remove(“/system32”)
love.system.vibrate() sounds fun but sadly it does nothing on pc
Currently this will only work on Android and iOS devices that have a built-in vibration motor.
😢
Hi, whats the key for decks texture?
does anyone know if its possible to force-select a card within a booster pack? like, a tarot card that you're forced to take
Does this work if you have a plugged it controller
not sure
don't have a controller on me
You can add it to deck and force skip booster
os.execute :troll
i want it to force highlight, like with cerulean bell
Selecting a card in booster pack
And highlighting it are different
well yeah but
if its force highlighted you might as well be forced to select it right
You can probably
as a follow-up, can that description have text formatting? my attempt at doing so just results in the full text being displayed
Idk how
You put the formatting in the loc_txt before the #2#
If you need the color to change, look into the text styling wiki page
Has docs on variable colors
right, but the text itself might have different formatting
the (...) would be all gray, but if I'm doing Ace of Diamonds I'd like to have it be the "{C:attention}Ace{C:inactive} of {C:suit}Diamonds{}
oop, I missed that, I'll look more into it
nice quotes
God forbid you forget the `
would sure be a lil more complex but you can just use more loc_vars
like, #2#{C:inactive}#3#{C:attention}#4#{C:inactive}#5#{V:1}#6#
lmao
this is the caveman approach im sure theres a better way to do it but thats my first guess
if the description doesnt change much then you can just use a different description key
Got this SMODS error when booting up the game while coding
your joker is missing a key
you didnt set the key of ur joker
the woker
this doesnt work, doesnt even highlight it
dunno what to do differently
why so queerious?


