#💻・modding-dev
1 messages · Page 161 of 1
very cool
all of my jokers are album art
ok but wheres the weezer jok-
I could deduce that from "Jimbo Records" lol
LMAO

😭
played face cards are given blue seals
the damn one is so good
thanks!
I'm a big fan of the Demon Days one
that one's great too
Love how you tied in the Suit Jokers for it
that one took a while to get working
i'd kill for a wu-tang clan one
trying to copy this hold on
right now im working on one for the low end theory
oh not again now the train's gone and left
sick
Ah nice
budget ancient joker
jokevillainy 🔥
PEAK
alright im trying to make the backwards jimbo remove 4 mult but it keeps crashing, what am i doing wrong
joker_main
宴
bruhhh what am i doing
you have context.joker.main, it's context.joker_main
yeah i fixed it thank you lmao
just feel dumb for it being that simple
poor jimbo he's trying his best
dang
LMAO
is this better?
dont ask how the cards dont dematerialize
does this look better
that looks peak
so you know how in #⚙・modding-general i said "i love concepting cards and accidentally making them an essay"
what the hell
dear lord
i messed up the values damn
i missed a line damn
okay this should be the correct one
what is F-02-58
Feels like a mtg card
Sick looking
i can art but not when i code
i hate you for the calculus how could you remind me of my weakness 😭
I'm joking
i was so unbeliavably good at calculus i should major in mathematics instead
id hate my life but id be good at it
Oh hey
wait thats a really smart ability for it lmao
sigmoidally 😭
It has equally smart results lmaoooo
Cmon you've gotta have some funny Jokers in the mix
If anyone happens to be curious, here’s the scaling function for it:
2 * math.exp(-(((#G.playing_cards - 52) ^ 2) / 250)) + 1
Holy complicated 😭
it's not as complicated as it sounds
Nah I get the idea but that’s a lot of text
The diamond pick is funny, would probs have some silly synergies with my Hammer and Chisel card
i made this one earlier as well
it also synergizes with observer
tho in my puzzle blinds scoring doesn't matter
you have to play a straight flush
imagine that
The hammer and chisel in question btw
goated joker
It’s also cursed as hell lol
cursed
is it possible for me to get the value that has already been added to the mult?
hand_mult maybe? I know hand_chips gets you already scored chips
it doesn't seem to be working, it just says nil mult
and crashes when i play a hand
Honestly it was just an educated guess, I didn’t truly know if it would work or not
im pretty sure its the same as just a 2X mult anyway so ill think of something better
LMAO
yeah that shit gets you lmao
never forgetting to return true in event manager ever again
and it happened twice because i forgot to save after adding return
why does it say nil?
why are you using visual studio 😭
theres a better option? 😭
Visual Studio CODE
...huh
well
i will go change that later
💀
that explains a lot
i didnt notice i downloaded the wrong visual studio lmfaoo
anyways
turned out, the bug is caused by this inside the calculate
which i still cant understand why
since i made sure theres no missing "end' or "}"
the aforementioned statement is in this
is there any way i can get the current mult?
mult
is that not the mult that the card adds?
there's a global var mult
if i want to add the current mult to the chips, how would i do it?
is there a way to check if the scored card has a specific sticker?
chips_mod = mult
that doesnt seem to be working
that's because chips_mod isn't real
return { chips = mult }
(assuming better calc)
in a for loop, is there any way to still let it run even after using return inside the loop?
It’s so late I didn’t realize I was referring to a fake return value 
No. Returns will always be the end of a function
dang
That goes for basically any language lol
any workaround for that?
yeah ik, i just kinda wished theres a way to do that 😭
Been there lol
what are you trying to do?
a joker of mine has this function which checks for each status effect on a playing card, then buffs different stuff depending on what status effect it found
but currently, it stops after finding one status effect because of the return, which i dont want to happen since i want it to keep checking all status effects
uh what context is this in and what is cardInHand
oh mkay
basically what you can do is have a table like local ret = {} and just assign to/modify the table in the loop then return it at the end
e.g. ret.chips = (ret.chips or 0) + 100 * ...
hmm, i think i understand now, thanks a lot :D
This reminds me I should really go through and change a bunch of unnecessary stuff because of better calc (if I even really need to)
Mostly card = card s lol
?
now its worded properly !!
is there a way to have a joker detect each card that you draw into your hand cause i don't understand how you'd go around doing that
a dumb workaround im thinking of is checking the current hand you have, the hand you played, the cards you discarded, stuff like that, so that you can compare the new hand you drew to the current hand lol
maybe, i'm trying to make a joker that randomizes all cards that you draw into your hand
this looks goofy
which part of the card selection limit should i make dark edition
i think this looks good enough
unless i dark edition the limit
You can use context.hand_drawn but it doesn’t include the cards
is there a context or other method for when a card is added to your hand?
Not a context no
what about the add_to_deck function, what is that function used for?
or more specifically this way of implementing it
scavaging cryptid code 
Add to deck is called when you obtain a joker
real quick, this makes it so that blueprint cant copy whatever effect is below the context right?
Yes
nice, thanks
GREGOR???
brother damn, thats 10 days ago, whatchu doing scrolling up all the way there 😭
trying to make the sell value of a joker equal to the sell value of the other jokers combined. have tried to look at swashbuckler and egg and gift card but havent been able to figure it out. sell value doesnt change
anyone got any ideas
i searched "limbus" in the search bar and saw it 😭😭
well, theres a really high quality lcorp mod if you are interested in pm content 😭
i barely even know how to play but pass the name
i think you should use update instead of calculate on this one, actually
i'll prolly play it when i have a competent understanding of the game
yeah, good idea, you should play vanilla balatro first so that you can understand how the game works
the mod can be really tough if you dont know what you are doing 💀
tell me, if I get all 3 bird jokers, do I get an apoc bird joker
assuming they're jokers

you have to fight the apoc bird first
technically 7 phases
lol
using update should be avoided where it isn't necessary
oof
mostly because it's inefficient to run something every frame
yeah i can see that, but isnt it the best way to ensure that the joker's sell value is updated in real time?
I'm not sure if it isn't needed here though
for something like swashbuckler, the mult it gives only needs to be accurate up to loc_vars or calculate being called
that isn't the case here because other cards interact with sell value
and that unlocks the apoc joker? 
wait how many cards are even in this mod
yeah i think update might be needed here
damn
also you need to call card:set_cost() to update the sell value after changing extra_value
so im assuming its probably smt like this, right?
looks mostly fine. though the area check isn't needed, cards in G.jokers.cards always have their area as G.jokers
I'd also throw if not G.jokers then return end at the top, I feel like it'll crash otherwise when viewed in the collection outside of a run
yeah, got it, thats probably all then
art is hard
i hate art
https://streamable.com/5dvfkg yall check out my kafka e6 + sampo e6 dot build 🗣️
GAMBLING?!?!
gambling²
nobody:
the rainbow discard button in question:
bug guy!
i am making a mod based entirely on limbus company heheheh
progress has been rocky but thats cause im a newbie, i have a lot of plans
I feel like this is too strong for rare and too weak for legendary
did you let myth know already or
Bet
anyway
i went to play arcade
i have decided that the effect of my joker is not what i want
Yes
Banger
Hmmm
for a rare
Without hand type support it’s pretty poor imo
Banger
and it unlocks a few utage class jokers
I should do an oshi no ko joker
Ai hoshino, face cards are all the same suit
i am turning it into a voucher
Sounds good
does the art at least look good
Banger
is it possible to use take_ownership (so I can change some hard-coded values into variables) without having the joker displaying as now being part of my mod?
Better than what i would have come up with
I'm making a challenge, and it's supposed to put a purple seal on every card, but it's just creating a normal deck
SMODS.Challenge {
key = 'themystic',
loc_txt = {name = "The Mystic"},
rules = {custom = {{id = "no_shop_jokers"}}},
jokers = {{id = 'j_cartomancer', eternal = true, edition = 'negative'}},
consumeables = {{id = 'c_judgement'}, {id = 'c_judgement'}, {id = 'c_soul'}},
vouchers = {
{id = "v_tarot_merchant"}, {id = "v_tarot_tycoon"},
{id = "v_crystal_ball"}, {id = "v_omen_globe"}
},
restrictions = {
banned_cards = {
{id = "p_buffoon_normal_1"}, {id = "p_buffoon_normal_1"},
{id = "p_buffoon_normal_2"}, {id = "p_buffoon_jumbo_1"},
{id = "p_buffoon_mega_1"}
},
banned_tags = {
{id = 'tag_uncommon'}, {id = 'tag_rare'}, {id = 'tag_negative'},
{id = 'tag_foil'}, {id = 'tag_holo'}, {id = 'tag_polychrome'},
{id = 'tag_buffoon'}, {id = 'tag_top_up'}
}
},
deck = {
type = 'Challenge Deck',
seal = "Purple"
}
}
yes. take_ownership(key, { ... }, true)
you raise a true however ive kinda gave up on that joker for now because it's way out of my skillset
i just ripped this off directly
Somehow yours looks better
I think its the outline you did
simulates the glow...
Peak
aikoyori more like peakoyori
sweet. Thank you.
Daigo umahara, boss blind has a 1 in 3 chance of being disabled
now i need to make vouchers real
look at these jokers with unfinished art
peak
peak
i have like 15 jokers with the same art
at least you make unique placeholders
is everything in the game 71x95
i mean
all cards
i mean all the things the game consider cards
yes
That's how prototyping works 
Can i make playing cards banana perishable?
Damn you beat me to the minecraft references
🔥
it gives 2 stacks of 64 chips
What effect should I give this joker?
Peak
Give it insane stats
each played 4 or 7 gives X4 mult and X7 chips when scored
Those are insane stats
Checks out
that's the point
Thats why i said it checks out
seems like that's the case, yep
Would you like to review the current joker and consumable ideas i have
ok i fixed the title
god 😭
Peak
what if you added localisation and the english version was just english
me?
oh wait just realized
yes
so you want me to write U-TA-GE in vertical?
i mean sega did it like that so
i blame sega for not translating 宴会場 to Banquet Hall
What criteria of situations should I differ between play_sound('multhit1') and play_sound('multhit2')?
Aiko do you listen to ciao white
what is
what are the working calculation contexts for seals?
Like, among +mult, Xmult(joker_main), and Xmult(when scored), where do I draw the line between multhit1 and multhit2?
Japanese music
idk
I wanna make a joker that's split in two vertically that you can move each half around to encase other jokers and loop them once
but yikes
Yeah sounds like a lot
speaking about oshi no ko
TVアニメ『【推しの子】』第3期2026年放送開始。
2026年、物語は新たなステージへ___。
==========================
✦INTRODUCTION✦
新たな舞台の幕が開く──
人気マンガ『東京ブレイド』の舞台稽古が始まった。
劇団ララライの役者達に囲まれ、大きく飛躍するかな。
かなの才能を認めながら、ライバル心を激しく燃やすあかね。
才能と熱意のある役者が集う中、アクアは演技すらも利用してアイの死の真相を追い続ける──。
そしてアイドルとして母の背中を追い続けるルビーは……。
✦STAFF✦
原作:赤坂アカ×横槍メンゴ(集英社「週刊ヤングジャンプ」連載)
監督:平牧大輔
助監督:猫富ちゃお、仁科くにやす
シリーズ構成:田中 仁
キャラクターデザイン:...
oshi no ko ss3 teaser visual
hi
S3 when?
Thats so far away 😭
Just G.P_CENTERS.j_jimb_ouroboros now
art downgrade
can you make it more low-effort please
Balatro mod ideas
Tower of babel, turns half your deck into 4 new suits, x2 mult.
Or
Gains .5x mult every face card scored, when mult >= 12/ after 8 rounds debuffs all face cards/ turns half of your deck into 4 new suits
Penitant one, destroys scored face cards to gain x1 mult
Mea culpa, destroys scored number cards and replaces then with a random face card.
Bauhaus, destroys kings, gains 0.5 mult
The lord of the jammed, cursed cards give 1.5 mult, first discarded card becomes cursed.
Yellow chamber, consumable, adds 10 heart cards to the deck, raises curse by 3,
Curse, like in gungeon, big blinds have a chance to be boss blinds, each point of curse gives x0.2 mult(min 1)
Max 9 increases chance of cards being cursed.
Cursed cards cannot be destroyed and score half their chip value
Cursed cards have a 1 in 10 chance of giving 10$ when scored
Neco arc, 1 in 3 chance for +10 mult
1 in 5 chance for x2 mult
1 in 10 chance for ^1.5 mult
1 in 100 chance to just win the ante
Turns the cryptid cat tag into necoarc
Ai hoshino, face cards all count as the same suit
Satsui no hado, balances chips and mult at the end of round
Particle accelerator, aces give +5 mult
Penitance, consumable destroys 5 random cards but doubles the + chips and mult of 2 selected cards
Yin, destroys 5 cards, can only be gotten from balance
Yang, creates 5 enhanced cards, can only be gotten from balance
Balance, gives one yin and one yang
Toxin, select 5 cards to become red seal polychrome glass, but become banana perishible
Heptagram, give 3 specral cards if space is avaliable,
Pentagram, give 1 spectral, one tarot and one planet card.
Pentacle, gives 2 rare jokers +1 ante
Dingir, turns 2 jokers negative, shuffles and puts them face down.
Summon, give 2 soul cards, +1 ante
Chaos, all cards in hand gain random enhancement and editions. -1 hand size
Eye of foresight, next 3 card with either be the same suit or rank as last discarded card if possible.
Umbra, turns 2 selected cards negative or polychrome
Ramiel, destroys any consumables at the end of shop, gains mult based on consumable destroyed
Badeline, +10 mult, gives a random tag for every skipped blind
Sisters of mercy, queens give +5 mult
Sweet tooth, cards are retriggered twice
Gun to your head, retriggers the joker to the right
Human Instrumentality, all face cards in deck become wild cards.
Undernight inbirth, gains 0.5x mult for consecutively playing the same hand
0.9x mult
Roman cancel, adds score of last hand to current hand.
Instant overhead, when boss blind ability is triggered, x4 mult.
Reversal, inverts boss blinds ability.
Counter, when blind is defeated add 0.5 of last scoring hand to starting score next blind
Sonic.exe(mr. Sucks at modding) tbd
Install super, sell this card to gain x2 mult for the rest of the round.
Suggestions appreciated
yes
Oops that was bigger than i thought it would be
mattagan pooreh
the manga ending is so ass the fanmade one is accepted as canon
😭
How do I make separate text boxes?
UI magic
[insert smods documentation here]
-# you have to hook the function that creates the tooltip and add new boxes to it
oh that seems fine enoughish
that page will help with actually building the box
But you can probably just copy the games way
Which game file do I look into?
Wherever generate_card_ui is iirc
common_events I think?
common_event.lua, found it
Oh no
Better than no ending
you can always read the fanmade one lol
Im looking at you no game no life
unlike the jjk fanmade ending, its actually peak
Your username made me think of a joker
wha
Pootis ha
I assume making joker name displayed in multiple lines also require UI magic?
Bepis kinda sounds like pootis
Ill make it a joker
😭 nawwww what
The card with just be heavys fingerguns
though, the "Bepis" part actually came from "Pepsi" but its like for dog memes or something
Bebsi
Nyan cat
Omg bepis
bepis my beloved 🗣️
I love drinking penis
ayo? 😭
I need ultrakill references in my mod
coin gun
+0.2x mult per $
tf
Works too
are there two of each here
for the first row yes
Maurice, just looks at you, literally does nothing, why are you picking this card
May I just see how you did it in your source codes?
yeah
It’s not publicly available yet and I’m not at my machine
bug lad!
dude wtf is wrong with my mod???
its just not updating
i am changing the code and its not doing anything
me when I edit lovely dumps
im not editing lovely dumps
im editing my own mod
sure but I am
oh
what am i doing wrong here why does it draw cards and allow me to play them after ending the round?
SMODS.Consumable {
key = 'LTMPizza',
set = 'LTMConsumableType',
atlas = 'Jokers',
pos = {x = 3, y = 10},
cost = 1,
loc_txt = {
name = 'Pizza',
text = {
'Gives 25% of current {C:attention}Blind requirement',
'as {C:chips}Chips',
},
use_msg = "You gained {chips} chips from the Pizza!",
},
config = {
extra = {chips = 0},
sfx = true,
},
loc_vars = function(self, info_queue, center)
local chips = center and center.ability and center.ability.extra.chips or 0
return {vars = {math.floor(chips)}}
end,
can_use = function(self) return #G.hand.cards > 0 end,
use = function(self, card, area, copier)
-- Play sound effect
if self.config.sfx then
play_sound(math.random() < 0.9 and "fn_pizza1" or "fn_pizza2")
end
-- Award chips based on blind requirement
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.1,
func = function()
local blind_chips = G.GAME.blind and G.GAME.blind.chips or 0
local award_chips = math.floor(blind_chips * 0.25)
-- Add chips and update the game state if necessary
G.GAME.chips = G.GAME.chips + award_chips
G.GAME.pool_flags.ltm_pizza_flag = true
(copier or card):juice_up()
if G.GAME.chips >= blind_chips then
G.STATE = G.STATES.HAND_PLAYED
G.STATE_COMPLETE = true
end_round()
end
-- Return the success message
return {message = self.loc_txt.use_msg:gsub("{chips}", award_chips)}
end
}))
end,
}
nevermind i just forgot to remove a piece of code
Should read if poker hand or played hand
Depending on the time you want it to trigger
How do I patch steamodded files with the new lovely?
does anybody have a reference i can use for adding ranks?
yea i have that open it's just unclear to me since i'm new to all this
there is no other reference sadly, you gotta read what others wrote and copy them
my longest description so far
least insane modded joker
When Blind is selected, a random playing card becomes a Target if there is none
Scoring a Target eliminates it
When Target is eliminated, 1 in 2 chance for +1 HP
When Blind is defeated, +$10 if Target is eliminated, otherwise, -1 HP
At 4 eliminations, creates a Negative Legendary Joker
At 0 HP, permanent -1 hand size
(3 HP remaining, 0/4 targets eliminated)
oh thats way better
i know my jokers are usually explained in essays but yours feels like feature bloat lol
If I want a joker to give both chips and mult in the joker_main context, how do I setup that return?
Line 12 is where SMODS.Rank opens. What did I do wrong?
return {
chips = X,
mult = Y
}```
Ty, if you don't mind me asking, is there any functional difference between mult and mult_mod and a message?
How do I patch steamodded files with the new lovely update? Are there any examples?
target = '=[SMODS _ "src/utils.lua"]'
p sure there's examples in thac
thanks!
I'm assuming you fixed this by now but if you haven't, you're missing a ton of commas
didn't know they were necessary, good to know 👍
It's very abstracted, but you're actually performing a function call with 1 argument, a table
And the entries in the table need to be seperated with commas
hello how do i put the UI on the play screen properly
elaborate?
It makes more sense for it to be over the deck instead
i mean yea but cryptid has like a few things over there i dont wanna overlap
Oh yeah
in the case cryptid gets updated to new calc
But seriously this mod looks really cool
thanks
How is it going to work without playing specific poker hand types?
In relation to the jokers
it just does not trigger
Wordlatro
scrabbleatro consistenly remains one of the craziest mods
this simplifies things
should work on any G.FUNCS thing that requires it be passed the object that normally calls it
nice
It straight up doesn't do anything but the fact it even shows up makes me happy
did not stop me from needing to do this though
does first_hand_drawn not have a G.hand cardarea context? the smods wiki page said it did
I believe you can still access G.hand.cards without verifying context.cardarea
As in, you can put the for loop directly in if context.first_hand_drawn then
Does anyone know whether SMODS has patched any part of generate_card_ui or localize?
I'll try that rq
it would be G.hand when calculating a card held in hand
context.cardarea == G.jokers should hold but there's no area check needed here
that's because there is no "other card" being evaluated here
Does that mean it should be ipairs(G.hand) instead of ipairs(G.hand.cards), or?
no that part is fine
just don't check for context.cardarea
what does this mean?
how would i check if a round was beaten in one hand?
so there should be nothing wrong with my for loop itself right?
as the error says
there's an object that is missing a key
but all of my objects have keys
where's the code in balatro's source for the use effect tarots like empress? i'm being blind & can't find it unless someone has it on hand
i think card.lua
Card:use_consumeable in card.lua
got it thanks
refer to game.lua for the card prototypes, the consumables aren't always referred to by name
Can anyone help me? I'm trying to make a joker that gives +9 mult for 2s, 3s, 4s, and 5s, but has a chance to give an additional +9 mult if they're hearts
this code crashes the game
I think it would be context.end_of_round and G.GAME.current_round.hands_played == 1.
Having an issue with start_dissolve. It does remove the cards partially, but they become invisible and shuffled back into the deck, (Image showing 40 out of 27 cards), and are then drawn in future games, but does not exist.
I am guessing I am not cleaning up properly?
SMODS.Back{
key = "charreddeck",
atlas = "charreddeckatlas",
pos = {x = 0, y = 0},
config = {discards = 3, hand_size = 2},
loc_txt = {
name = "Charred Deck",
text ={
"Discarded cards are {C:attention}destroyed{}"
},
},
apply = function()
end,
calculate = function(self, back, context)
if context.discard and context.cardarea == G.hand then
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.2,
func = function()
for i=#context.full_hand, 1, -1 do
context.full_hand[i]:start_dissolve({G.C.BLACK}, i == #context.full_hand)
end
return true end }))
return {remove = true}
end
end,
}```
that'll be why, i found the name in game.lua but couldn't find the use case on them, thanks
you can't have code after a return in the same block
you need to merge your returns into one table
define the table first and modify the mult if the chance hits, then return it
or if you really want it to be separate messages, you could use an extra table
how do I define the table?
local ret = { mult = card.ability.extra.mult }
if [chance hits] then
ret.mult = 2*card.ability.extra.mult
end
return ret
or this version for separate messages
local ret = { mult = card.ability.extra.mult }
if [chance hits] then
ret.extra = { mult = card.ability.extra.mult }
end
return ret
I was missing a comma and thats what was messing things up, thanks
isn't it great when that doesn't cause a syntax error
Does SMODS patches any part of generate_card_ui or localize?
how do i properly spawn ui somewhere during play 😭
do i just hook into the updates
nvm
i got it
generate_card_ui is quite heavily patched by smods
But localize not so?
my mod doesn't work for someone else. What should I check for?
steamodded version
we match version and files
and lovely version™️
yep copied everything
I'm planning to make joker description into separate boxes since Eremel isn't at their machine at the moment
is the game the same version\
anyone know how you can edit the text that jimbo says after a win or a loss
my config is not updated actually
does that mattere?
no, all that can impact is removing mod badges, seeded unlocks and achievements
the error is that one of the texture pngs can't load
that code actually does come later than the other smod atlas functions.
it's the blind_chips
i got it
So i'm having an issue right now where a Joker is destroying cards that it's not supposed to during the Boss Blind that discards 2 random cards.
I want it to where if the first hand of round is one card, the Joker destroys the card and gains XMult. But in this boss blind in particular, it doesn't destroy the played card always, but it does always destroy two of the cards that I have held in my hand, which is not what I want. I know that Sixth Sense does something like this but with 6's, but I don't know how to translate that into my code
wordle in balatro is crazy
i'm also glad that you get infinite discards so you're not just stuck with the letters you got
here is the error screen
But what are the consumables it creates?
Im having a simillar problem and was about to ask as well
😭
in the case word uses more than two z
😭
why is the hand still here
it does not seem to end round properly
oh i fucked up the code
my assets folder was misspelt 😑
it was "assests"
finished another joker! yay
LETS GOOOOOOO
this
is there a specific function to set enhances from the key of the enhancement? can't find it
card:set_ability(G.P_CENTERS[‘keyhere’])
ty
actually same for me
It somehow decided to rename itself or my game execution just always ignored it 
added ui to the main play area
IT'S WORDLE
wordlatro
I was about to ask if you got extra discards or anything until I saw the sideways 8 lmfao
though you might still want to include that in the blind description?
Do cards go back into your deck when discarded?
That’s sick
that's fun haha
Wonder if you could replace the usual scoring place with your words instead
the "round score: 6,419"?
Yeah
very epic gaming
And the chips x mult part
probably could but right now i am happy i got the ui to work as i wanted it
oh and also the hand level and mult x chips
yeah yeah maybe, might be a lot of work though
Depends how it’s structured, might be as simple as inserting one check
Can you show the ui code?
probably remove padding
probably, yeah
Get rid of the padding yeah
which padding
The root element
if you want external padding you can nest the word boxes into a container with no padding
wait pause, you can play longer than 5 letter words?
yes
interesting 🤔
wdym?
staights with more than 5 cards
oop
we should make a library mod for hands bigger than 5
You can just play all of your cards to see what letters are in any given word
Or if there's a penalty for doing so
library mod for infinite length X of a kind because im lazy
you don't get words
it HAS to be a word to count
Question, how do you detect if a card is destroyed? I would like to detect if a heart card is destroyed for a joker. I am making.
probably check how canio does it
Cool I don’t know where canio is in the code
I am very confused on how caino detects if a face card has been destroyed or not
i think its context
Is there a simple guide out there on how to create my own balatro mods?
I am very confused on how I’m going to make this work for detecting if a heart card is destroyed
if context.remove_playing_cards then and then look at each card inside context.removed
do localization files change anything about the game other than text?
someone just crashed with my mod equipped and so far it only changes text, colour and images
whats the error message?
didnt get to see it fully, but something about "edition"
the edited joker was Burglar name and description.
the crash happens when playing a hand, and it disabling the mod does not prevent it from crashing again
idk if it's a default crash or related to the mod
What unexpected symbol
If you can spot, what’s being upset by that would be very helpful
you have a function and 3 ifs, but only 3 ends
OH GOD
hi, is there a way to get every registered card (boosters, jokers, consumables, vouchers, etc.)?
G.P_CENTERS and G.P_CENTER_POOLS?
thanks, i'll give that a look
all mods are loaded before any jokers/consumeables are btw
so if u check that as soon as your mod is loaded itll only show vanilla stuff
Can someone explain to me why my asset I made for my second joker isn’t showing up and why part of my first jokers design has part of the second joker in it
This has broken my brain
alright, thanks
im checking it during a game though
did you properly size them
oh
should this not be 1
yeaa
ok switching FireTerrain to TerrainFIre worked somehow but now I ave this probelm
I'm trying to make a consumable set (take polymino for example)
I'm assuming SMODS.ConsumableType is what I'm looking for but can't find it on the wiki
my pluhs, what do i do
Making a new seal like object type is a pain in the ass
It should be a one, but did not fix my problem
new objects always are 😔
I started this project yesterday so I don't think my steam modded version will have any impact on it
which problem
regardless you should always develop on latest steamodded and latest lovely
i see
The asset for the Joker not showing up
cryptid's rush hour does this too
Yeah show texture file
it should look a little something like this
These are my texture files. All of them are properly sized
I think
are you sure
the base game jokers are 71×95 with 1 px padding
also can you take screenshots
-# (on a side note is that Garuda Linux wtf)
Yes, it is
show code for the atlas
They need spacing correctly too
here is the code and atlas itself
x = 1
CHANGE JOKER ATLAS X FROM 72 TO 1
THAT IS WHAT I SAID 15 MINUTES AGO
Also neither of those calculates will do anything
Not 72 to 71 🤦♂️
I thought you meant 71 like change the one place from two to one
😭😭😭😭😭😭😭
Why would it be 71 or 72
I don’t know
Yes, I did think it was pixels
now it should work
I was so confused
Desperate measures, (can only be bought from the shop before a boss blind) 1 in 3 chance to retrigger all jokers twice, 1 in 3 chance to do nothing, 1 in 3 chance to destroy all jokers and divide mult by 3
Always eternal.
Thoughts?
to be fair, pos is explained incredibly bad last time I checked
pos should probably error out when grabbing something outside the sprite sheet actually
(i still don't like Garuda Linux)
I do like Garuda Linux
that seems pretty bad ngl
there now my mod crashes on the latest versions
What is the word used to make something grey like when you see the currently times one mult. It is not simply called gray and I do not know what it is called.
Deperate measures
IT WORKS!
You'd only take this card if youre 100% gonna lose the run without it
side note I need to find a darker color, I just choose a random one
do the 1 in 3 chances roll every hand?
If you retriggered all your jokers twice i think would win the ante, your setup cant be that bad
Theres a way to make text colored, right?
If your jokers cant beat the boss blind after being triggered 3 times then you didnt deserve to win
So yeah every hand
does it or doesn't it roll the 1 in 3 chance every hand
ah okay
yeah I don't think that's good
Its not a good joker
Its not supposed to be a "good" joker
I'm gonna put it in anyway
it literally has a 1 in 3 chance to kill your run on the spot
Your run was gonna die already if you took it
Its literally only for one specific situation
okay so it's right before the ante 4 boss blind, and I'm about to die, so I take Desperate Measures
does it matter
🤷♂️
best case scenario, I need to not roll the 1 in 3 a total of 5 times
It feels like it'd only every be useful ante 8
Maybe you find something better next ante
how would i get this little +4 mult to appear on my tarots?
that's insane
Probably put it in only ante 8 shops
see now we're talking
I wasnt imagining anyone taking it in ante 2
Its not a joker youre supposed to keep around
But its always eternal
Youre supposed to pray it works in your favour and swap it out the moment it does
it's eternal
make it debuffed after one round so that you cant keep it
????
Totally forgot i added that
info_queue[#info_queue+1] = "m_mult" in loc_vars i think?
Now why did i add that
i don't remember the key
Hmm
I dont think anyone would want to keep it tbh
fair enough
i don't remember the key
so how does this intract with oops all 6s?
Im gonna make it a challenge run
not exactly for the +4 mult but for another enhancement, i'm presuming the same info_queue part at the front
yeah
ty
It would be better if it was just the 1 in 3 to retrigger and then it self destructs, getting rid of the other parts
Thats funny because someone actually said i should make it do oops all 6s
Its not supposed to be a joker you'd want to buy on a normal run
I think it's G.P_CENTERS.<enhancement key>, e.g. G.P_CENTERS.m_mult
I can’t think of why I would ever want to take it
^
It may win the ante
Or end your run faster
Since you were always gonna lose the ante anyway
But still in that scenario it doesn’t need the downside, the chances of it showing up in that specific situation seem pretty low
I'm going to have it specially show up in ante 8 shop
That usually where my runs look unwinnable
Hmmm what if, its a normal jimbo but does that on the last hand of the round?
thoughts on this mechanic?
This plus desperate measures
i try info_queue[#info_queue+1] = G.P_CENTERS['m_mult'] and it shows the +4 mult, but when i try to change it to 'blr_wisp' (blr mod prefix, wisp is the enhance key) it doesn't show anymore
I like it
I'm confused why is it "1 in 4 chance for X and 1 in 4 chance for (X again)"
You need the m_
ah so m_blr_wisp?
thanks that worked
I wanted to make so that if you have one water stock you can still get another one from a water card. The stocks are added to your total after your hand is finished scoring.
Okay okay, i need advice on balancing this mechanic
Curse, like in gungeon, big blinds have a chance to be boss blinds, each point of curse gives x0.2 mult(min 1)
Max 9 increases chance of cards being cursed.
Cursed cards cannot be destroyed and score half their chip value
Cursed cards have a 1 in 10 chance of giving 10$ when scored
i was patching the info queue thing like no tomorrow to get it to work as i wanted it to
And did it?
it did
wouldn't the better approach be to exclude water cards from being influenced by water stocks?
remember the letter cards?
Yes
I think thats the most unique mechanic I've seen yet
yes that
could someone help me debug this as it is something beyond what i have learned? my problems are either it is not detecting weather a heart card has been destroyed, and if it is doing that successfully the mult is not increasing by two.
context.removed is a table of cards that are being removed
card.ability.extra.Mult instead of just Mult too?
A suppose but I also wanted to make it possible to get more than one from a single card but not always
If things end up needing to get reworked though thats not that big of a deal
Were you gonna show me something?
should it look like this
This hasn’t solved 3 of the 4 problems you were told about
I’d recommend going and reading the calculate functions wiki page and looking through some well made mods to see how their functions are structured
I have the following code intended to open a booster pack, however, after the card is skipped it should return to the blind select screen. It only displays a blank screen, however. How might I fix that?
G.E_MANAGER:add_event(Event({
trigger = 'before',
blockable = false,
blocking = false,
func = (function()
print('!!> opening pack')
local key = 'p_mypack'
print(G.P_CENTERS[key])
local card = Card(G.play.T.x + G.play.T.w / 2 - G.CARD_W * 1.27 / 2,
G.play.T.y + G.play.T.h / 2 - G.CARD_H * 1.27 / 2, G.CARD_W * 1.27, G.CARD_H * 1.27, G.P_CARDS.empty,
G.P_CENTERS[key], { bypass_discovery_center = true, bypass_discovery_ui = true })
card.cost = 0
G.FUNCS.use_card({ config = { ref_table = card } })
card:start_materialize()
print('!!> opened pack')
return true
end)
}))
Could you link it?
Best I can get on mobile
I do have a learning disability so being able to understand the things you are saying is a bit harder for me because I need things explain thoroughly.
It goes to this, when it should ideally go to the screen with the blinds
I’m still not really sure how to make my code detect if a heart card has been destroyed and how to make it scale properly
how do I extract the source code?
how would i increase the volume?
i know how with play_sound but how would i do it in a return?
No way... I did it... I just implement "overflow: hidden" in balatro ui
just volume = 'whatever'?
how would i go about making an enhancement that starts off with 2x mult, and each time it's used it loses 0.2 of its mult? so 1.8x mult after its first use
if you have 7-Zip just find the exe right click it and extract/open archive
Thank you
okay so it looks like something's stuck in the event queue
wait
no i dont think so?
anyone know how to properly format this? i need to detect when a planet card is being used and update my card, but i haven't found any info on what the right way to check for the consumable type is yet, nothing i've tried did anything
i've tried checking the code dump for what other vanilla jokers did but it's not set up the same as SMOD style
pressing main menu then returning to the run works
iirc vol = number
Oh no volume is correct
Can also do pitch = too
is there an Xchip_mod the same way there is Xmult_mod but under a different name?
I'm getting an empty table for G.hand.cards in first_hand_drawn with my code. Is that supposed to happen? When should I actually access the cards in the first drawn hand?
if context.first_hand_drawn then
for _, handCard in ipairs(G.hand.cards) do
print("for loop works")
if handCard.ability:is_face() then
print("check works")
card.ability.extra.current_mult = card.ability.extra.current_mult + card.ability.extra.mult_gain
end
end
end
Not in base smods for now
Balatro is made in lua right?
i've resized a joker but the stickers won't resize as well, i've checked the code for wee joker and i found nothing that could help me
hi again
i have a different problem now
this is my code:
if context.individual and next(context.poker_hands['High Card']) and G.GAME.current_round.hands_played == 0 and context.cardarea == G.play then
this works fine until the last hand is scored. it crashes right after saying that "poker_hand index is nil"
im confused because i dont even know why it would check that after the round is over?
if i take off next(context.poker_hands['High Card']) it works fine
This doesn't destroy the stone card, this destroys the first card. Odd...
if context.destroying_card then
print(#card.ability.for_destruction)
for _, value in pairs(card.ability.for_destruction) do
if SMODS.has_enhancement(value, "m_stone") then
card.ability.for_destruction = {}
return {
remove = true,
card = value
}
end
end
end
okay, i fixed this, now i have a new problem i need to figure out. how do i open a booster pack after another one has been opened & finished? if i try to open it before it plays the animation then adds the choices to the current pack
your context check is incorrect
if context.individual and context.cardarea == G.play and ...
what you have now is incorrectly including an end of round calculation
so just add a not end of round too?
.
just add the cardarea check
am i using the wrong context check? i've tried
if context.using_consumable and next(context.consumeable.ability.set['Planet']) then
and this doesn't function either, i have no idea how to check the consumable type
yeah that ain't right
two things, actually
- it's
context.using_consumeable, blame it on thunk ability.setis just a string, not some kind of table [i just noticed you've had that correct before]
if context.using_consumeable and context.consumeable.ability.set == 'Planet' then
wait seriously was i misspelling consumeable this whole time
hi, im trying to figure this out and am having the same problem as you, what was your solution
yeah it was the typo that was the issue... apparently i looked at the title and not the actual code

well, you were wrongly not misspelling it 
What’s card.ability.for_destruction?
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play then
print(#card.ability.for_destruction)
local bonus_chips = 0 + (context.other_card.ability.bonus or 0) + (context.other_card.ability.perma_bonus or 0)
local foil_chips = context.other_card.edition and context.other_card.edition.chips or 0
if context.other_card.debuff then
return {
message = localize('k_debuffed'),
colour = G.C.RED,
card = self,
}
elseif SMODS.has_enhancement(context.other_card, "m_stone") then
table.insert(card.ability.for_destruction, context.other_card)
return {
message = 'Broken!',
colour = G.C.CHIPS,
card = context.other_card,
chip_mod = (bonus_chips + foil_chips) * card.ability.extra
}
end
end
if context.destroying_card then
print(#card.ability.for_destruction)
print("context indiv" .. (context.individual or "nope"))
for _, value in pairs(card.ability.for_destruction) do
if SMODS.has_enhancement(value, "m_stone") then
card.ability.for_destruction = {}
return {
remove = true,
card = value
}
end
end
end```
It's a table I used ot try to put the cards I mean to destroy; this joker is supposed to destroy stone cards while applying 4 times their efffect
Does it always destroy stone cards?
it's my current plan, yes
is there an in depth post/guide on how to localize card messages
if context.destroying_card and SMODS.has_enhancement(context.destroying_card, ‘m_stone’) then
return {
remove = true
}
end
You don’t need to mark them and that’s also not how destroying card would work anyway
Oh, so destroying_card isn't like a stage, it's a variable that holds the first card, then later the second card, and so on...?
But thank you, it worked perfectly
Yea
wtf lmao
im sorry, i dont really understand
add a cardarea check?
isnt that already context.cardarea?
i should be more specific
yours is at the end
which means it's checked after the other conditions are already met
oh ordering matters!?
yeah lua does lazy evaluation
context.poker_hands exists under the condition of context.individual and context.cardarea == G.play, so that needs to be checked first
ive managed to get it to crash without even showing a message 🙏 i am peak dev
it worked, thank you!!
next stage is crashing Balatro before starting it 👀
i mean technically this was before starting it but Im Up for a challenge
Me screaming "LETS GOOOOOO" after something finally works
real tho
me after spending 10 hours trying to position a line correctly on the screen
Is this Midas Mask's full code?
looks like it
I'm curious what part of this code is responsible for which enhancement cards are being turned into
is it G.P_CENTERS.m_gold?
let's say I want Midas Mask turn face cards into stone cards instead
which part of the code do I change
and how
set_ability(G.P_CENTERS.m_gold, nil, true)
me at 5 am after adding all the bells and whistles to this joker
set_ability by itself doesn't flip the cards, you should take a look at how tarots do it
I should add it resets every round... when I wake up to work again
Can I just copy Midas Mask's code and modify it in my main.lua?
Also, is there a guide or a documentation for modding Balatro?
(not installing mods but how to make them)
My cards don't flip when enhanced, any idea why?
check the wiki section of smods
on their GitHub?
heres the code
yah just what they linked you above
I see, thank you
a bit confused about the calculate function in custom enhancements
does context.repetition not trigger for every card in this? i was looking to retrigger cards other than the card with the enhancement
I've been looking for the code for the jokers and I can't find them
its in card.lua
thank you
Well... I suppose I never said I wanted them to flip back 😑
well I can just call the flip function again and it fixes
however Im pretty sure theres a function to flip it then flip it back
what's the flip function? I want to do the same to a joker
Is there a way to do something similar but to increase the number of vouchers or booster packs that appear in the shop?
G.E_MANAGER:add_event(Event({ func = function() change_shop_size(2) return true end }))
you could always take inspiration from other mods which already managed to do the same function, like that one really MASSIVE voucher mod
betma?
I find its a lot easier to understand what other mods are doing than to try to understand the games actual code
well, the game's source code is a bit unorganized sometimes so i can see that
ye
well... for now, the only thing I do is copy-paste whatever I find that works and pray
Okay, let's say I'm using this code here to open a custom pack I made. The pack opens fine - what I want to do is run something AFTER the pack has resolved (all the choices are made/the pack is skipped)
how would I do that?
is there any api reference i could look at/similar
id look at basegame code but i can't think of any instance where this happens
what does your pack do?
currently, the workaround im thinking of here is putting a value to true after it is opened (context.open_booster), then for instance, if your pack gives opening cards then when they are added to the deck, it checks the aforementioned value to know whether it comes from your pack or not (as for the skip, i believe its context.skipping_booster)
its just a pack with usable consumables (think tarot cards), but after its opened i need to run some other code
depending on the condition, i need to open the pack again for example
where would i put this? this isn't handled by a joker or anything
i ended up figuring out how to get the info on card changing enhancement
for anyone maybe looking for that info
local set_ability_ref = Card.set_ability
function Card:set_ability(center, initial, delay_sprites)
if center.set == "Enhanced" and center.name ~= "Default Base" then
-- card gets new enhancement trigger here
end
set_ability_ref(self, center, initial, delay_sprites)
end
How would I make a card that gives exponential mult when in hand?
first you must create the universe
As enhancement or edition? Or just base?
Enhancement, like a super steel card
I assume Talisman has the exp. mult api but idk
how would i add a stone card to the hand? currently this code crashes the game, since i don't know how to properly format the create_card() function for stone cards
https://github.com/Steamodded/smods/wiki/SMODS.Enhancement
But in the config, try setting emult to the desired value?
Is it possible to create a new modifier for cards and if so how would I go about it
Wdym by a new modifier
Like an edition
no, like a new type of thing to put on a card. It could coexist with editions, seals, and ehancements
ohh
gemstones exists, could check there
good idea
How'd I go about to make my normal custom jokers take up 4 joker slots, but also increase the default joker limit to 20?
can't really be an edition like negative hmm
basically, its just stickers
literally just stickers
just make the set of stickers exclusive with each other and huzzah, new modifier
is there an easier way to make it soa booster pack puts the item in your consumables instead of using it right away
cryptid has code cards which have a pull botton that does that
you can yoink the code from those
Which SMODS doc has info about badges?
what do you wanna know about badges?
Declare, define, and display them in description.
just a little sidetracked from generate_card_ui study
there's SMODS.create_mod_badges that might be interesting to look at
I’m more interested in something like type badges in pokermon.
tbh I have no idea what pokermon's "type badges" are or how they're displayed

