#💻・modding-dev
1 messages · Page 285 of 1
ah, i see whats wrong
Riiiight, since is_jet_joker is in config{extra}
I'm learning guys
I swear
My brain is growing wrinkles
hmmmm
maybe still a little smooth
hmmm
oh yeah, i think some jokers may not have extra
check for that too, probably
...and context.other_card.ability.extra and context.other_card.ability.extra.is_jet_joker then
Maybe I'm not code-brained enough, but that seems like a redundancy, doesn't it?
for some reason this card is putting an empty slot into my deck?
its supposed to add a gold queen
its actually required
it checks whether the joker has the extra in them or not
and if it does, check for is_jet_joker
if theres no extra to check, and you try to check something from that then it will crash
Fair
thats like digging through a box to find something, only to figured out that the box never existed and you are digging into the void or something
fully implemented :3 !
based reference
although i think this probably triggers on the hook
👋 I'm trying to figure out how to get it so it deletes played Heart Cards, I figured out how to do everything else I think?
if context.destroy_card and context.destroy_card:is_suit("Hearts") then
return {remove = true}
end
when the Isaac is Binding
Thanks 👍
wait wait
Huh?
i gtg do smt, so i hope u figure it out urself :D
checks for every card
if condition is met, destroys it
Oh ok! Ty
Very cool!! I think you could just word it as “1 time per unused discard” though rather than having the +1 etc
mmmmmmmaybe
the thing is that it starts at 1 and cant go below 1 so i dont think that works as is
but if i decide to lower the limit to 0 then ill probs do that
theres already 4 lines i dont wanna overload the player with info when they see it in the shop
they'll find it out on their own and its not critical information necessarily
higher concept jokers such as this can leave out smaller details
I mean it would be less lines if you say this, js meant in conjunction it could work to not have to change it at all mechanically
ill b real gel its late and i dont really get what youre trying to say but i will keep it in the back of my mind
took me 5 mins to figure out
Understandable mb
Meant like this;
Retrigger last played card
1 time per unused discard
(At least once)
How would I change the "Again!" that happens under the Joker that has this retrigger ability to being a different message under the cards that get retriggered?
message = "new_message",
message = ‘’
i think
Will that overwrite the "Again!"?
nvm, nj need for card
yes
How could I prevent a consumable with a red seal from unhighlighting the cards?
im typing this in the supermarket rn lol
seems hard, since that is hard-coded to the consumable already
you could prove me wrong tho
I feel bad for you carrying me even as you get groceries 😭
lmao all good
Bepis goat
i used take_ownership to give glass cards a custom update function that changes their Xmult depending on a variable i have set, but it doesnt seem to update the current glass cards when i make one for the first time?
make glass card
stats stay the same
make second glass card
second glass card has the right stats but the first glass card never changes?
how can i get the first glass card to properly change its stats?
figured it out, made a new loc_vars function for the glass cards and put it after the update function
"Refuelled!" (my message) happens under the Joker causing the retriggers, and the "Again!" still plays under the replayed cards... I think even if I did do the card = other_card (or whatever it is) it will just queue up both messages...
mayaswell
Bro is whipping out the mobile modding set up while at the store
I hooked it and checked for a global variable that says if the used consumable is red sealed.
🅱️erfect
u dont need the card = context.other_card part btw
Noice
It's actaully a little too OP
turns out making 2 negative colas per blind is also insanely helpful economy
the pepsi one
Yeah I made that rare
ah icic
OKay now super-cruise isn't being retriggered
I accidnetly had it as jet_joker = true instead of is_jet_joker = true but even after fixing that it wont work
wait a min...
start a new run
how
debug plus
I'VE BEEN PUTTING YMSELF THROUGH MANY MANY REROLLS
BRUTE FIORCE BABY
What's the function to create / trigger a new context again?
Don't worry I don't have any anyway
ctrl + Q switch editions of whatever you are hovering on i think
you can hold tab and see what debug plus got
I wanna make a pre-shop context so that cards can be inserted into the shop similar to joker tags without the delay of the shop being created
this also works for blinds and consumables
you can ctrl + C to duplicate something
ctrl + R to destroy it instead
last thing with this bloody aircraft carrier
What does red seal death do?
this too
maybe it lets you do 4 cards or something?
im mostly worried about the hanged man
not by nature
since if it still chooses the two same cards
there will be no cards to destroy after the first time
hence, potential crash
Make them negative?
I have to do this all manually.
Super_Cruise upgrades twice. I dont want that...
So do I just add and not "blueprintcompat" to the upgrade block of SCruise?
I found a message on a while ago that shows how to make custom contexts
Like <#1228149931257237664 message>?
How do I check if a card is a playing card?
similarly to and not context.blueprint
should i nerf this
If it seems overly flirtatatious but is clearly afraid of commitment
check if its either of this
default is a card with no enhancement, enhanced is vice versa
-# finally, a question from you that i can actually answer 😭
This stops the SCruise from being retriggered but the Aircraft Carrier still says "refuelled". What's the context for a card successfully/actually retriggering?
you would probably need to add another var in extra to tell Aircraft Carrier to ignore it too
Could I just go
return {
repetitions = 1,
`if context."card_has_actually_retriggered"`
message = "Refuelled!",
card = context.other_card
...
}```
Or something like that?
we are turning stone cards meta with this one
nope, you cant add any comparison stuff in return
Yeah I had a sneaking saspicion that was the case
Ugh why cant learning languages be easy
I have a greek quiz on thursday and I haven't studued yet lmao
holy shit, you should go study then
Nah it ain't that hard, just declensions and a few vocab lists
I just haven't memorised them yet
you could do smt like
if context.retrigger_joker_check and context.other_card ~= card and context.other_card.ability.extra and context.other_card.ability.extra.is_jet_joker and not context.other_card.ability.extra.ignore_retrigger then
end
ive seen in my searches here that the general recommendation for a new challenge is adding it to the challenges.lua file. I've done that, I believe I have it set up correctly, but is there somewhere else that information is supposed to feed into? I've looked in the game.lua file and a few other places within the Balatro folder, but no luck so far
then put ignore_retrigger = true in what joker you dont want to be retriggered
Well I want its scoring to retrigger, but I don't want it's upgrade to retrigger
ah
well in that case, you need to divide the if to elseif, then have two separate returns then
one for still returning messages, one for not
Aha. that tracks Baseball huh?
what function is used to finish the blind -> move it to cashout?
Wait could I just use this somehow?
{
cardarea = G.jokers, -- G.hand, (G.deck and G.discard optionally enabled)
post_trigger = true,
blueprint_card = context.blueprint_card, -- if applicable
other_card = card, -- the card that triggered
other_context = context, -- the context the trigger happened on
other_ret = ret -- the return table from the trigger
}```
end_round()?
oh yeah, you can probably use that
im 2/3 a full page away... too bad only like 2.5 of them work
Is there an alternative to G.GAME.chips that gives the current "Round Score"? I'm calling G.GAME.chips in context.after hoping to get the final Round Score after scoring but it keeps returning 0
Or a better context?
Mr. Bones uses G.GAME.chips but thats happening end_of_round, i'm trying to retrieve the value after each hand is played
Ugh I can't get it to work
Yo what do you use to capture? That's smooth as butter
I use OBS.
Baseball huh? Checks out.
It still replays the message even when it doesn't retrigger the upgrade (don't want the message, not retriggering the upgrade is intentional). It's such a non issue but I want to to woooooooooooork
Retrigger jokers only retriggers things that get returned
Yeah, the retriggering is fine. It's the message that's being annoying
everything else about it works (no thanks to me lmao)
Just check if the joker that it is retriggering is that one and it is context.end_of_round then don't retrigger
oh right
yeah
wait
So like and not (card == 'SCruise' and context.end_of_round)?
super clonky but if it works it works
plus, who expects a newbies code to be sleek
no that's not right
my brain feels so smoooooothhhh
Try and not (context.other_card.ability.name == 'nameofjoker' and context.end_of_round)
It didn't work 😭
What did you put in nameofjoker?
You need something like this.
I just tried it with ...and not context.end_of_round then and it still showed the message
clearly I'm missing something here
key = 'ACarrier',
loc_txt = {
name = 'Aircraft Carrier',
text = {
"Replays all Aircraft type Jokers",
}
},
rarity =2, -- Uncommon
atlas = 'AircraftCarrieratlas',
pos = { x = 0, y = 0 },
cost = 5,
loc_vars = function(self, info_queue, card)
end,
calculate = function(self, card, context)
if context.retrigger_joker_check and context.other_card ~= card and context.other_card.ability.extra and context.other_card.ability.extra.is_jet_joker and not context.end_of_round then
return {
repetitions = 1,
message = "Refuelled!", -- TO FIX
}
end
end
}```
What is the code for the joker you don't want to retrigger?
You need to add name = 'SCruise' or similar above the key.
I wouldn’t recommend using names
Bruh... you right...
^^^
Like even when I made it supposed to never retrigger anything in context.end_of_round it still happened
Use context.other_context.end_of_round
The retriggering context itself doesn’t have any unique timing identifiers
FINALLLYYYYYY
IT HATH WORKED
THANK YOU ALL
A SINGLE MESSAGE TAKING ME 2 HOURS TO FIX IS...
Well... I guess that's coding sometimes
How do I check what the most played hand of the profile is?
Hey anyone good at coding, I have everything needed I just wanna know how I can turn it into a mod, I will explain it more if u can help kinda got a small issue
So there is this mod which was integrated inside the exe file (ofc which violates the modding rules) plus the mod is discontinued so I wanted to revive it and make it into a standalone mod, now I compared the original game source codes with the modified one and found the modified snippets of everything, I just wanna turn it into a mod steammodded/lovely mod, I wanted a little guide on that of achieving it
I am a newbie 😭 and am very sorry if I will be wasting your time, been trying to get this work for hours now can someone help me, the modified codes are in game.lua, tag.lua and cards.lua that's it
I'd help out but I'm a newb
Let's do it together?
Anyone know how to have the cards created in time with the sound/visual instead of instantly spawning?
That Pepsi sound is satisfying 🤣😅
Mayhaps, but I'd need to do iut in a few hours, I'm trying to release a patch for my mod before I go get groceries and do some study for a quiz I have in a couple days
Try using the event manager.
Same here got a test, Goodluck
I just want a guide, on how I could take those codes and turn them into a mod
I've been reading through the documentation and I think I'll just go get groceries 😭
trying to do some main_end shenanigans with a new joker i'm writing, but i'm getting an attempt to index local 'node' (a number value) error in what is presumably my main_end code - i can't work out why the game seems to think it's a number value despite the fact i don't declare it as such anywhere?
Wait nvm I got it
oh right, double nesting
nope, that just makes things explode even more
fine, game wins, i'll write a stupider function
I can't seem to implement it without screwing something up
What is your code?
key = 'PHarrier',
loc_txt = {
name = 'Pepsi, Where\'s My Jet?',
text = {
"Creates a {C:dark_edition}Negative {C:green}Diet Cola",
"when {C:attention}Blind{} is selected",
}
},
config = { extra = { is_jet_joker = true } },
rarity = 3,
atlas = 'PepsiHarrieratlas',
pos = { x = 0, y = 0 },
cost = 7,
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = G.P_CENTERS.j_diet_cola
end,
calculate = function(self, card, context)
if context.setting_blind then
return {
SMODS.add_card({key = 'j_diet_cola'}),
sound = 'LJet_PHarrierSpawn',
G.jokers.cards[#G.jokers.cards]:set_edition('e_negative', nil, true),
message = 'Pepsi!'
}
--Attempted EventManager Iteration
--[[play_sound('LJet_PHarrierSpawn')
G.E_MANAGER:add_event(Event({
trigger = "after",
delay = 0.7,
func = function()
SMODS.add_card({key = 'j_diet_cola'})
G.jokers.cards[#G.jokers.cards]:set_edition('e_negative', nil, true)
message = 'Pepsi!'
return true
end,
}))]]--
end
end
}```
And it then loses all function with another joker that would retrigger it
if context.retrigger_joker_check and context.other_card ~= card and context.other_card.ability.extra and context.other_card.ability.extra.is_jet_joker and not (context.other_card.ability.name == 'SUPCruise' and context.other_context.end_of_round) then
return {
repetitions = 1,
message = "Refuelled!",
}
end```
IT STILL THINKS IT'S A FUCKING NUMBER VALUE WHY
it did not pull this nonsense the last time i did any main_end stuff
hate hate hate hate hate UI code with a passion
Agree
you need to put a return after your event that has the message and sound in it
Like this?
if context.setting_blind then
--[[return {
SMODS.add_card({key = 'j_diet_cola'}),
sound = 'LJet_PHarrierSpawn',
G.jokers.cards[#G.jokers.cards]:set_edition('e_negative', nil, true),
message = 'Pepsi!'
}]]--
--Attempted EventManager Iteration
G.E_MANAGER:add_event(Event({
trigger = "after",
delay = 0.7,
func = function()
SMODS.add_card({key = 'j_diet_cola'})
G.jokers.cards[#G.jokers.cards]:set_edition('e_negative', nil, true)
return true
end,
}))
return {
play_sound('LJet_PHarrierSpawn'),
message = 'Pepsi!'
}
end
end```
just sound = 'LJet_PHarrierSpawn'
oh yeah whoops it's in return
...return table needs to be double nested 
uuuuggghhh it's sorta working and sorta not
return {
SMODS.add_card({key = 'j_diet_cola'}),
sound = 'LJet_PHarrierSpawn',
G.jokers.cards[#G.jokers.cards]:set_edition('e_negative', nil, true),
message = 'Pepsi!'
}```
^^^This^^^ works fine when there is only one of this Joker and it triggers just once. It's as soon as there is a way for multiple diet colas to spawn that the issue of them all spwaning at once hapens, and even then the sound plays repeatedly in sequence the way I want it to...
It's purely a case of figuring out how to get this all to line up nicely
Cause vvvthisvvv works well at creating them sequentially
trigger = "after",
delay = 0.3,
func = function()
SMODS.add_card({key = 'j_diet_cola'})
G.jokers.cards[#G.jokers.cards]:set_edition('e_negative', nil, true)
return true
end,
}))```
That's it, I'm taking a break
Clearly I need some air, food and water
How could I put a shader on a deck?
lovely patches or SMODS.DrawStep
development on mod number 3 starts today
some1 just sent a scam link
chat, do you understand the mechanic yet 
balatro modders trying to create a unique joker that hasn't been done before

Hey anyone good at coding, I have everything needed I just wanna know how I can turn it into a mod, I will explain it more if u can help kinda got a small issue So there is this mod which was integrated inside the exe file (ofc which violates the modding rules) plus the mod is discontinued so I wanted to revive it and make it into a standalone mod, now I compared the original game source codes with the modified one and found the modified snippets of everything, I just wanna turn it into a mod steammodded/lovely mod, I wanted a little guide on that of achieving it
I am a newbie and am very sorry if I will be wasting your time, been trying to get this work for hours now can someone help me, the modified codes are in game.lua, tag.lua and cards.lua that's it
I have a joker set up for Kino that's specifically meant to be annoying to read, and this does slightly too much remind of that 😛
I think the effect is pretty cool, actually, but I'm quite sure you'd be able to make a more concise description for it
tbf in terms of deliberately obtuse joker descriptions, you can't really outdo aikoyori's tl;dr joker
this isn't meant to be that, but it does contribute a little to the overall theme of what this joker is meant to be...? i guess
Anyone please
what mod
is this actually possible to do
Hidden Aces Edition, I want to turn it into a standalone mod
yes
Yes, just return swap = true
mult_mod and chips_mod
and just invert the values of hand_chips and mult
yeah of course it's hidden aces, idk much about it
or that
oh just that simple?
Yes.
That should work.
@crisp coral I got the parts which have modified the game, I want to take the codes and turn it into a mod now but idk how
you most likely wanna figure out the functionality and rewrite it. If it's a direct exe modification originally, there are undoubtedly going to be issues with smods' many injections
But if that's not the case, you'll wanna set up lovely patches
I did so but it doesn't work idk if I did it wrong or what it's a mess I barely understand now the modified parts were tag, game and card.luas, I compared the files with original and got the modified snippets also
Switches between XChips and XMult after each hand played (Selected XChips)
After 2-9 cards discarded (9 remaining), increases value not selected by X1.5, then resets requirement
(Currently X1 Chips, X1 Mult)
Starting on XChips each Blind feels redundant
Please if anyone could guide me I would really appreciate 🙏
i'm not familiar with the mod you're planning on updating, but you're going to have to understand what the code does, so you can make sure your lovely patches won't conflict with smods
Basically by quick glance the mod looks like it's replacing the numbers adding and removing codes that's all
@manic rune
someone is trying to compete
Nothing new is being added into the game but the same codes being modified
yes
So simple
Hey chat. IF i wanted standard packs of all variety to have a chance to spawn in with negative playing cards or cards with my special enhancements/editions would i have to take ownership of the packs or can i just modify them?
I printed G.PROFILES[G.SETTINGS.profile] and it said most played hand was 0 and the profile I'm on's most played hand is High Card, are the poker hands labeled by numbers?
in what order are achievements displayed in the additions tab?
i tried to figure it out but i dont see the pattern
Where is off by one in the cryptid code?
bump lol
This mod does that https://discord.com/channels/1116389027176787968/1327784267698409564
Thanka
i have given bait more chances to get edition'd
Anyone else doing quantum enhancemente
Cryptid did it once but they had to disable said joker
Why?
does this seem fair
ehhh? is the doubling permanent?
ignore the pity and payout thing
It was buggy idk more
No, you are a lot more likely to get XMult down to 0
0.1x mult decrease instead then?
Not decreasing is a lot more fair even though probably vanity L
I'm trying to create an atlas and this error shows up whenever I start the game, this is my code, and I made sure the images are in the right spots at the right resolutions
you have a 23.7% chance to get X0.25 Mult after 5 rerolls if you don't win any 1 in 4s
@mellow sable any insight?
i kindve want a risk reward thing for the jokers
since im calling it jeopardy anyways
could be done better, since both the XMult scaling and economy arebad here
idk because none of the quantum enhancements mods are working right now
Extra Credit’s cards are also broken
Atlas's don't have prefixes.
Removed aether_ from all my references to the atlases, still causes the exact same error
Also the 1x and 2x folder should be in the assets folder.
Not textures?
No.
That's probably what the problem is then
Very strange that it doesn't go into a textures file like the base game
Does it crash without a log?
Okay I'm so close
last time I tried it, it was just super laggy
But things changed and I haven’t tested it with the new Steamodded changes
For me it got laggier as I added more Jokers and Enhanced cards until it crashed
I just need the message and sound to work again
uncommon
it also does uh
remove all your free rerolls when you sell it
so it's not exactly clown
All Aircraft CarrierJokers 😭
literally chaos the clown powercreep
No
permanent means it will never get used
also those aren’t “…”
Aircraft type*
Nah
Exponential isn’t balanceable like this
Use Log functions
idk how to code that lmao
Unironically kinda swaggy
She log my rythem till I Balatro
I CAN'T GET THIS DAMN PEPSI JET JOKER TO WORK. IT EITHER HAS GOOD SOUND AND MESSAGES OR THE COLA'S SPAWN SEQUENTIALLY BUT NEVER BOTH
AHHHHHHH
THAT'S IT
I'M REBUILDING BALATRO IN ASSEMBLY EXPLODING
hey fellas
where do you see polychrome foil holographic and uh
negatives like
weight in the config
How goes the pools thing for the rarity work
?
SMODS.Rarity{
key = 'Perkeo_R',
badge_colour = HEX('56a786'),
pools = {
["Joker"] = { rate = 1 },
},
}
this
ChatGPT is going insane...
if context.setting_blind then
if not G.pepsi_spawn_queue then
G.pepsi_spawn_queue = {}
G.pepsi_spawn_delay = 0
end
-- Add a Diet Cola spawn to the global queue
table.insert(G.pepsi_spawn_queue, function()
SMODS.add_card({key = 'j_diet_cola'})
G.jokers.cards[#G.jokers.cards]:set_edition('e_negative', nil, true)
end)
-- Start processing the queue only if it hasn’t started already
if #G.pepsi_spawn_queue == 1 then
G.E_MANAGER:add_event(Event({
trigger = "after",
delay = G.pepsi_spawn_delay,
func = function()
if #G.pepsi_spawn_queue > 0 then
local spawn_func = table.remove(G.pepsi_spawn_queue, 1)
spawn_func()
-- Schedule the next spawn in sequence
if #G.pepsi_spawn_queue > 0 then
G.E_MANAGER:add_event(Event({
trigger = "after",
delay = 0.5, -- Stagger delay for sequential spawns
func = function()
G.pepsi_spawn_delay = G.pepsi_spawn_delay + 0.5
return true
end
}))
else
-- Reset delay when all queued spawns are complete
G.pepsi_spawn_delay = 0
end
end
return true
end
}))
end
-- Sound and message play immediately for each trigger
return {
sound = 'LJet_PHarrierSpawn',
message = 'Pepsi!'
}
end
end
I'm not exactly fluent at lua, but this ain't it lmao
oof I'm trying to fix some bugged challenges and I keep creating infinite loops but I can't figure out why they're infinite
What are the loops?
So I am trying to think of how I will structure the GIT repository for my mod.
I kind of think that finding out what kind of cards and jokers, or addition, is part of the fun of playing a new mod
So I feel like maybe I’ll just take four or five jokers from my mod and put them on the read me page
Surely you only do like 3
Otherwise, I worry about it being kind of spoiler. If I just list what all the new jokers do, or how they open up a bunch of new endgame high score routes better not the same baron/mine/steel King build.
One thing I like is that we as a community seem to be agreeing that fragment shaders are close to dark magic and so everyone’s fragment cheater code is full of comments and just lol
it's the check_genre_match function that closes the game if there if passes the ~= joker check. It's called by the check_genre_synergy function, which is called when cards are added or removed, or set in a new place in the joker cardarea
How can I store a value forever even when the game is closed or run is ended?
i'd check how the high scores on profiles are saved
Write to a config file.
oh, I figured out why it closes out. The debuff function
Good schmorning chat
How could I check when a new run is started?
Is that the nerd Joker by Aiko
Schgood morning schchat
Hi vic :D
I'm a little silly perhaps
But I'm pondering on getting up
For my bed is comfortable
mood
My classes have also resumed this week which is a true tragedy
Most readable thing ever
YOKEDY
what do you guys think is more balanced for a rare
it destroying the nonscoring cards of a high card or destroying the card that scord (they have to be 5 card hands)
neither
Its supposed to be comedy
damn
If you want a tiny font, PaperMoon often uses one
lol that m looks more like a k
Idk where id put it
Noone is gonna get what this is in reference to
the m and c definitely don't look like the right letter there
Maybe put it in the Parthenon?
what is it in reference to then
I think both need more restrictions to be balanced
Shameless plug. New Joker in the Jet Set. Surprisingly, its a boat... a boat for Jets....
Thread here
lmao
Its a consumable that gives money or Puts 5 stone cards in ur deck
But im only doing sprites rn cuz like im taking a break
idk maybe restrict it that it has to be number cards probably
Is it possible to prevent the game from drawing cards to your hand when your hand size increases? It's doing it past the actual hand size for some reason, this is not intended behavior, as funny as it may be
stonks
if its more than a dollar i dont want it
it's the SMODS.debuff_card that crashes, but I have no clue what i'm doing wrong there.
How do I check the 3 most played cards in a run?
I'm assuming I have to count manually?
realized the loop, debuffing the card makes it run the add to deck function, makes it run the check to debuff, makes it debuff, ad infinitum
just need to include the fromdebuff check
Yeah cards are added to the deck when they are undebuffed
And removed when debuffed
i knew that for other implementations, but just forgot to include this in the check, so I never even considered it, haha
I require assistance, I'm either not going to make the card change function when it's debuffed, or find a way to prevent it from doing this
This is worse but i like how janky it looks
happy ape rill fools
best game ever
no clue whether this should be decked to -3 or just stay where it is tbh
Any idea on how I could word this better/make it shorter?
maybe If Blind defeated in one/all hands, 0.5x/1.5x the required chips of next Blind respectively
I like the "one/all hands, 0.5x/1.5x"
this is pretty interesting though
why would you reward someone for getting the previous blind done in one hand 😅
Yeah, you might be stuck with a long ass name, some jokers can't really be summarized that well
I would know
could also go with
"If Blind is defeated on first/last
hand, 0.5x/1.5x chips required
for next Blind respectively"
Id make complicated jokers but ive got 0 clue how to code so like
Looks better than one/all, ty
"first hand of round" and "last hand of round" are already existing terminology so thats what made me think of it
actually i think it's final hand of round not last
hm i should probably add custom decks
would recommend
the documentation on the smods wiki is slightly worse for decks than for jokers but they're honestly more similar than you'd expect
you could also just look at how other people implement it and try your best to understand
and ask questions for the things you don't understand, of course
Whats a good Consumable series name with every Consumable being a chance based one with risk and reward
gambles? Bets?
i like Chance Cards but it imposes monopoly-theme restriction on your card art
someone should make a monopoly mod with the properties as jokers and the chance/community chest cards as consumables if that hasn't been done already
Adding it to the list
i'd do it if i wasn't already working on one themed mod plus my "random stuff i wanna add" mod
I think it'd be real fun to just make smaller themed mods that at most take a week to code (besides maintenance), and it sounds like a fun theme for that
Would this draw all of the most played card, or draw one of the most played card?
Think just the one specific card.
do i need to add "and not context.debuff" to all my joker contexts to make them not function while debuffed?
You shouldn’t AFAIK
i was looking through the code of cardsauce and saw it, which is why i ask.
all of the source code uses "and not context.debuff" too.
skill issue
debuffed cards dont calculate for afaik
ive seen context.other_card.debuff used for making sure held in hand effects dont trigger on debuffed cards but thats it
You should use Card:can_calculate() instead
And if you don’t care if the card is debuffed but if it can be otherwise calculated, pass true to the function
this was shockingly easy for a 2 paragraph documentation
How do I detect the suit of the cards played before the actual scoring takes place?
I know how to detect hands but I don't know how to detect suits
I was thinking it would just check rank and suit.
you'd want to check during context.before.
Look up the Card:is_suit function
Ok!
How could I check every card played and store it's rank and suit?
I tried this but it did nothing.
What does this read as
Psycrosilvin
I think that’s 3 too many
So I think the code works? The problem is that it's triggering for each card, and I only want it to detect a flush of hearts and just that?
man why is the moon so yellow today
i had a similar issue last night, and SC515 told me: "You need to check for context.cardarea == G.jokers for the context.end_of_round"
Props to you for knowing damn
i literally know the creator
of course, replaying context.end_of_round with context.before.
ETF
well like not personally but we've talked
he's kinda everywhere
and also a she/it and he/they
Look into joker cards that requires specific poker hands like Superposition or the pants
I fixed this by forcibly shoving cards in hand equal to the current hand size boost back into the deck when it's debuffed
It looks off
pills
are we competing
How could I store the card itself and count how many times its played?
Looks really good, I think the main thing is no other joker goes over its border maybe? Afaik at least
what are you trying to do?
but that raises a problem when you re-enter the run
Its a consumable
also hi ice
This.
yo yo bepis
ah, that's from the beta version of balatro, right?
ah, i got an idea
you should mark the most played card instead
probably have a value stored in the cards themselves
increase by 1 for each time they are played
i dont really suggest storing the cards, because it will break when you re-enter the run
due to the cards being regenerated every time you re-enter, hence the table is now invalid
times_played is a variable on each card in deck already
oh actually?
which I don't think gets overwritten if you death it, even
was it left from when thunk made the voucher
probably
i dont recall anything else using it in the base game
but well thats convenient in which case
Just like the automatic calculation value swap
Or the function that draws played cards back to the hand
there's an unlock condition that checks it, for 'run_card_replays' but I don't know what it unlocks
its just a matter of comparing that with every other card and see which has the highest times_played
Then selecting one randomly
mhm
Do you know about it
It swaps Chips and Mult
To swap Chips and Mult
did thunk plan on making smt with that?
Is it card.times_played or card.ability.times_played
i mean, yes 😭
I mean if thunk coded it the answer is yes ;P
card.base.times_played, iirc
it would be really good if the swap takes place before everything else takes place, so that it swaps the poker hand chips and mult ngl
itd make xmult jokers much more powerful in late game
imagine 2k base mult tho 🔥
question, how do u even know about that...
my favorite novel is the balatro source code
idk actually, I think I came across it when checking for something else. Maybe it was when I was trying to see if I wanted to make a historical movie archetype that cared about how often cards were played or for how long they'd been in deck
ah icic
Ohhh I see ty!
wonderful
I think it takes place when used
So you can add card chips to Mult then swap back
epic
i think swap can allow for some fun synergies, hope thunk will implement it in the future
anyone know how to check if a card is a lucky card?
i want to create a similar card to lucky cat but cant find documentation for it maybe im blind
SMODS.has_enhancement
look into lucky cat's code, i think there r some specific parts to check when a lucky card hits the rng
from balatros source code?
mhm
That doesn’t draw an extra card tho
What do you mean?
It says it draws a card but it doesn’t, it seemingly rigs the shuffle
i didn't interpret it as drawing an extra card.
no clue, but it might be! Are there more stone synergies besides this one?
yeah, there are jokers which scale on many chips a card give
It says it draws a card
So it should be an extra draw
It doesn’t say it modifies the standard draw
this one, for example, gives Mult based on how many chips a card should give
Raised Fist moment
there's no precedent for what "drawing a card" as the blind starts really means. it's a strong enough voucher as-is, i think, so i don't see why it needs to be an additional draw.
orrr this one
I’m not saying the effect needs to be different, just that it needs to be phrased differently
it also scales on bonus chips (hiker, bonus cards, stone, etc...) and editions (foil, hard-coded so no modded editions yet sadly) too
overall giving those more uses lol
jars 😭
Are they not jars?
wdym jars 💔
How would I do this one though?
oh, you mean the art?
I thought they were like magic potions representing
This one is implying that the cards get shuffled to the top.

victin how are you playing balatro and you've never seen a voucher before?
Vouchers are not diagonal
good point
and not jar shaped
ronkai 😭
Honkai Jar Rail*
For such an effect I had worded it as “while shuffling…”
Although maybe I like yours better
Hey gang are negative playing cards already supported or if I wanted to add them would i need to program them manually
SMODS supports it
smods supports it
Perfect
anyone knows how to install an auto formatter or smt
is the nevernamed mod coming up
VSCode extensions
whats the one recommended?
if context.other_card.SMODS:has_enhancement(card, "m_bonus") then
would this be the correct code to check if the card is a bonus card?
i think its ., not :
-# not sure if theres a difference between that
also, nop
if SMODS.has_enhancement(context.other_card, "m_bonus") then
cheers
thiiiis one?
:3 i never used those before so im a bit concerned if they straight up break my code
you know what
go big or go home
here goes nothing
Maybe
the company?
Nevernamed said he's warming up to the idea of releasing it
oh shit didnt realize its made by THEM
And I think we'll make our first release at 25 normal jokers and 5 legendaries
Idk them
Cool
I liked the art and offered making a few Jokers
uhhhhh
But he didn’t like the idea of separating them
the others will be brutally murdered. choose wisely.
Alt shift something
it doesn't really matter which one you choose though i think
you know what
all of them follow the general same standards
if it has "neko" in it, i can trust them with my life
Except the .toml one for some reason
you know your pc is ass when this happens
well that's just because toml is a different language
-# victin wtf
What’s your social security number and the three numbers on the back of your credit card
its tom''s something something language
Nyah~ 
So it’s not all of them
i wonder actually
all at once?
yes
Don’t you trust me~ 
#This is from Wikipedia...
# This is a TOML document.
title = "ImpalaPay Co."
[database]
server = "192.168.1.1"
ports = [ 8000, 8001, 8002 ]
connection_max = 5000
enabled = true
ok so that works
Looks normal to me
Carl+Z
i think
CARL+Z
OH MY GOD WHATS THIS
you should only install 1 lua extension
I have two
they can interfere with each other
🥀
i use the tencent one because i love giving my data to the ccp
lmfao
doesnt work
What is your issue exactly
agh!
for some reason i can collapse "end"
and it does this
dont even know how to describe wtf is going on at all 😭
evil and fucked up lua
i did
🥀
im actually cooked
;broken
i mean, it doesnt really affect anything IF im not looking forward to collapsing anything
but like
my jokers.lua has 5k5 lines
i need to collapse 😭
literally
Try uninstalling the extensions then installing one of them again
Throw in some restarts
after pressing Format Document like 11 times, it kinda works now
with a bit of shenanigans here and there
I feel like that's almost always gonna be High Card, no?
I would prefer to not take guesses.
I couldn't find where cryptid defines the edition decks.
hi belissa
Thankfully thunk discarded those ideas
hi aikoyori the vtuber
Belissa sounds like a girl’s name
hi besties im awake again
i was the sleepiest soldier i kept napping
rest is important lol
Yo it’s that person
thats true
gosh whos that victin person
Some pretty and interesting
Is it possible to skip over a card in scoring as if it isn't scoring on repetitions? I've got a counterfeit card that destroys itself after 3 uses, but with repetitions it still remains and scores below zero uses left and gets destroyed after scoring is over
This is my current code
I checked on a different profile with a different poker hand and it still said 0?
line 1347 you have a extra end,
IT'S WAKING UP
in fact you dont use the correct context either
Also update your religion and possibly your higher dimensions, since that's clearly an error from t̷̀̈́h̴̉̈́e̶̎̄ ̴̈́̾b̷̛̛é̸̿y̸̑ond
sorry for taking long! but now its not giving the mult when playing and is not showing "+2" when skipping a blind
religion updater is broken rn, so they wont be able to do that
the actual issue is string concatenation with userdata but idk why it causes this
to show the message, you need to return just the message
and also, to give mult, you would need to use context.joker_main
not context.skip_blind or smt
ex: return {message = "bluh"}
or alternatively, use SMODS.calculate_effect if u dont want to return
SMODS.calculate_effect({message = "bluh"}, card)
ooh, so i use under the context.joker_main and then i use the return mult = card.ability.extra.mult?
yes
okok! ty!
Still wanna figure this out
@frosty dock how was can_calculate integrated again
are you sure the uses_left are properly decreasing?
Yes, if I don't include the if statement to check if it's above 0 it shows messages of negative numbers
ah wait you want it to fully stop scoring, including it's base chips and such. I'm not sure what the proper approach for that is 🤔
I want it to stop contributing once it's spent
you could probably subtract its values as it scores itself couldnt you
but that kinda a shit way of doing it instead of just stopping it
How do I access this?
I’m thinking it can’t work due to how aure integrated my can_calculate but I forget the specifics
I also want to prevent it from contributing to jokers and stuff, so it won't trigger suit mult jokers or anything
G.GAME
I have a hook in Kino that would allow for that, I think, but I'm not sure if the sequence would be visually satisfying. Because it'd just not give chips or mult, but still seem to score
I'm thinking you might be able to debuff it?
The only thing you'd wanna fix for that is the debuff visual, of course
you could debuff it in before yea but i wasnt assuming they wanted to do that
Debuffing it prevents it from destroying itself
cant you check for if its debuffed, then destroy
I'm not sure, but I'm testing stuff out and it seems like if it has no chips it won't do anything, but I'll have to test with jokers
i know you can check if a card is debuffed so you should be able to just return if its debuffed from your uses or whatever and destroy from there
id be cautious on if cards are debuffed from other things though
Damn it still triggers jokers
If I try to remove it without using the destroy_card context there's a very high chance it won't actually get destroyed and will just be intangible and shuffled back into the deck
Hi folks, anyone have experience with custom hands? I want to make a custom hand where all jokers in the store have a forced edition. I can make all of the cards in my hand have this edition, but so far can't do it to jokers
does anyone know where the logic for booster packs is? specifically standard packs
store the rank and suit for end of round whe no playing cards should be debuffed, then cycle through g.playing.cards to ensure it was removed properly then maybe? im not sure
just to remove the intangible aspect
can you elaborate? I don't really understand
Cardareas I'd assume
i presume its just a deck that when played all jokers in shop have an edition
ohh
Sure! I made some custom editions, and would like to make a deck in the game which has much higher drop rates of these custom editions. Sort of like the Checkered deck, which has only red and black cards, or the negative deck from Cryptid.
I want to make all shop cards have an edition applied as well
oh ok i thought you were talking about custom poker hands but ive never made a deck
So far, all playing cards that you start with appear with the custom edition, but those in the store or playing card packs and jokers seem to have normal edition drop rates
You could use an invisible deity joker
What is an invisible deity joker?
A Joker offscreen in its own card area handling whatever effect you want
It looks like Get_Pack and GetCurrentPool are the functions to override in a SMODS.Back to make this work, I will share what I find.
Like a joker that basically acts as just like, a global joker effect?
hey thanks! unfortunatley i cannot understand this code at all!
Yes
anyone know how to create a random playing card like standard packs do??
with chances for enhancements/seals
I found a way to do it using a hook
If the card has the enhancement, it has zero uses left, and it's not trying to calculate itself, it just ignores it
I would add not context.check_enhancement and
What would that change?
SMODS.has_enhancement calls that context
If the enhanced card has zero uses left I want it to basically not be processed by the game unless it is itself the card trying to calculate it
so you'd infloop if quantum enhancements are on
Alright, I'll change that
ha. ha. ha.
-# i hate this day
Quantum Enhancements are already doing that 
so im most def being rly stupid but i cant figure out whats wrong with my very simple code, if anyone could dm me to help that would be great!
why not share here
when doing the enhancement atlas, do i need to have the image for every card (A, K, Q, J, 10 etc) or am i missing something?
i am VERY embarresed and it kinda seems rude to share a ton of like images here...
No just the base
nah its fine to post your code here if its that rough people will offer better solutions and help
If it’s that rough people will like you to a Lua programming course 
for some reason when i use it doesnt show the rank or suit
nobody here is gonna run you out of the server for bad code
Code
oh, tyty
well you never know, i come from visual basic so i have lit no lua experience so it is very rough
Sorry dilly we have to send you to Venus as a punishment for your code crimes
Do you have this in your enhancement settings?
yeah
That's the problem
oooh, tyty
anyways here is the error im getting on boot and my code
What OS do you have
windows 10
It's xmult not Xmult_mod
Oh wait that’s an old SMODS
Update your SMODS
ohhh ty
Also the textures don't go into a textures folder, the 1x and 2x go directly into the assets folder
oh wait, i was running an old version of almanac and cryptid thats why i have an old smods :P
just a thing i noticed, in the text i would use "{X:mult,C:white}X#1#{} mul" instead of what you have now, just so you have that red box
okay so i updated my smods to the newest on the github and the error persists :(
also i did this, ty for the suggestion :)
you welcome :))
you can also use {X:chips} for a blue box and {X:money} for a yellow one
idk if there is also the green and inactive but i dont think there is
ahh okay so {X:--} is a predefined style for all the joker functions?
These are the valid colour codes for use in localization files and loc_txt.
{C:<key>} for coloured text, {X:<key>} for coloured background
nono, for the multiplier, to get the text just have the collor is {C:code}
oooh, didnt know about that, lemme save
Is it still the same crash log?
i like how you have this set up it looks visually pleasing
i believe so, just with the newest smods version
I’m not specialist but it looks like something didn’t install correctly? I don’t understand
@frosty dock do you know
where did u get this
that looks really nice
Made it as part of the documentation about the Balatro source and styling, still a work in progress. Will finish at some point before the end of the world
context.end_of_world
return nil
Call the SDDP
create_playing_card
dang
It’s a vanilla function
@zealous glen if it helps I only have 1 file and 1 folder, main.lua and assets with 1x (empty), 2x (contains jokers.png)
SMODS.create_playing_card when
be the change you want to see n
so would something like this work
SMODS.make_mod(true)
SMODS.optional_features = { make_mod_good = false }
oh hey i have that feature enabled
Oh maybe that’s the issue
You need to have files in both asset subfolders
is this your secret to making joyousspring all along
i lovely patched balatro into being a good game
No, it’s a function
no yeah
entire game turned into love2d port of super mario brothers
N’ removed Chicot
Finally... what we needed!
Some things yes
holy shit tysm that worked!
Something like C_2
so create_playing_card(C_2) ?
I don’t remember the signature
goddamn man thas what im askin
Yeesh
try searching for create_playing_card in this channel and looking at what messages pop up
or any other function/method/whatever
Or search the source code
even better!
create_playing_card({front = G.P_CARDS["C_2"]}, G.hand)
or something like that
i think this is what people should do first honestly
it's a damn good thing to learn

