#💻・modding-dev
1 messages · Page 491 of 1
horse mentioned
umamusume blast
NO
umamusume mentioned
SOTP
nxkoo train SPEED.
i won my first career yesterday bepis
im proud of u :3
BAKUSHIN
BAKUSHIN
BAKUSHIN 🗣️
BAKUSHIN SHIN 🗣️
laaaaaaaaaaaaaaaaaaaame
would this code satisfy this condition
why are you tryinh to index a boolean
IM TRYING
the "kms" unlock condition you need to be stopped
im assuming this 2 globals mean anything here
which one is right then
its the 'you are an idiot' card
so hold up both your hands, palm out
the one that makes an L is your left
wuh
What's line 378
dont try checking ret
i rewritten it
its just a bool value
hi bepis
if ret.mult then
hi srock
key refers to stuff like mult, xmult, x_mult, etc etc
hi brock
hi srockw :3
i need to like scientifically mess with my hand to make this unlock condition happen
so like
mult?
no ret?
oh wait
i could just make a card that scores the exact amount with debugplus
lol
real
mhm
yeah you cant do that
not how it works yeah
Hi tom
so all no ret?
i could never be the goat
WDYM BAIT
the a was too far away to type with my right hand
fhsy
i forgive you
alright one sec, lemme whip up an example code that, hopefully should work
local success, msg = pcall(function()
if mult then
xmult = (xmult or 1) * (1 + (mult or 0)/100)
mult = nil
if not message then
message = localize{type = 'variable', key = 'a_xmult', vars = {xmult}}
colour = G.C.MULT
end
end
end)
write a crash script
I DID
while true do end
maybe.....wait for bepis... [hand on shoulder sticker]
me me me
postponed
disappointment
local ref = SMODS.calculate_individual_effect
function SMODS.calculate_individual_effect(effect, scored_card, key, amount, from_edition)
if G.jokers and next(SMODS.find_card("j_tngt_autocorrect")) and key == "mult" then
return ref(effect, scored_card, "xmult", amount, from_edition) --Changing key to xmult. If you want to change how much xmult it should give, change amount, I assume.
else
return ref(effect, scored_card, key, amount, from_edition)
end
end
i assume this is how it works
did you enjoy writing that in discord markdown
yes :3
i do this all the time lol
how
...
how what
do i keep the ret.mult?
????
???????
:3 no.
error pfp in 2025 how do we tell them
the era is over...
local success, msg = pcall(function()
if mult then
xmult = (xmult or 1) * (1 + (mult or 0)/100)
mult = nil
if not message then
message = localize{type = 'variable', key = 'a_xmult', vars = {xmult}}
colour = G.C.MULT
end
end
end)
NO
like this>
YOU DONT NEED THAT 😭
NXKOO
IM SO CONFUSED
this is the ENTIRE code
delete your entire code and copy bepis code
o/
ijeqjfiqpojijpfqwcwinpdknlwijpccijpsaiwipqdpo
im assuming thats how it works because i cant, find the original code for some reason
im just basing on how talisman hooks to it
😭
:3 idk how to do that sorry
do you have a .vscode folder
okay so
this?
it worked?
Ya, what's inside settings
wdym
letme record it
What about the one inside your mod folder
I see a different one inside BalatroStarRail
oh yeah its this
oh you do have it as a library
huh
Dunno why it doesn't find it
might be because its inside bsr's folder?
i could try moving the entire thing outside
i dont have bsr
IM NOT TALKING ABOUT YOU NXKOO 😭
OH
It does that cus not every key is just "mult"
Vanilla jokers use "mult_mod"
oooooh yeah, completely forgot about that
i have code for checking if the key is supposed to give mult btw :3
-# probably not perfect at all but still
nxkoo
which one is settings.json btw
do you know what or is for.
that should work
Ya
NO???
Try just copying the contents of settings
if key == "mult" or key == "mult_mod" then
they were experimental :3
nxkoo go take some sleep 😭
after using some of balatro's ui system I think that some hate is honestly overexaggerated / based on other people's opinion. Sure some more advanced stuff is annoying and confusing as fuck but the more basic things are just more confusing html
<tag style=A> ... <\tag>
could be translated into
{n = tag, config = A, nodes = ...}
where tag is the type of an object to be displayed, A is the styling and ... are "children"
IM GOING TO
ui is sometimes incredibly janky because we use some functions in ways localthunk didnt plan for them to do
is there any way to make a consumable be able to appear only if you have a legendary joker
i agree
but also most new modders don't know how to read their own code
my ui hate will forever be justified
for one, text input box doesnt let you type in 0 :3
guilty (getting better)
yes use in_pool
and it fucks up the alignment of ALL ui
-# still doesnt know the cause but at least the fix is simple
what did you mean by this /genq
checkbox? or was that someone else
is this the right way to write it?
loc_txt = {
name = "Dream",
text = {"Creates a random {V:1,E:2}Fantastic{} joker", "{S:0.8,C:inactive}(Must have room.){}"}
},
loc_vars = {
vars = {
colours = { HEX('b00b69') }
}
},
the effect took an hour at most
loc vars is a function
look at the loc_vars docs on the wiki to see how to format it properly
oh the refocus button. i now remember your struggles
thank you for remembering
loc_vars = function(self,info_queue,card)
return {
colours = {
HEX('b00b69') -- haw haw, very funny T_T
}
}
end
which, myst explained that its because seeds dont use 0
so typing in 0 converts it to o instead
it does that for profile's names too
:3
seeds use l33tsp3@k
i think theres a bunch more other stuff with ui that got me crying at 2 am
mother obtain the recorder
heavens, infant! threefold!
yes
does it affect anything if i dont use it
no
:3
yeah whenever that happens you usually need assert in that case
its a vsc thing
ok what is assert for, gotta google rq
i see
and remember kids
crashing is good when youre a developer
so just this, right?
yeah
love when that happens
how do i get a random tarot card's key without neccessarily creating the card
👋
should i just manually put them all in a table
omg hi dilly
Hello friends
hi dilly
that is certainly an option
pseudorandom_element(G.P_CENTER_POOLS.Tarot, "seed")
as for if it is the correct one, no
thanks you fuckin rock
N is so beautiful
that was for Bepis, for them to move the settings.json to the top folder
ohhhh
do you know where that part of the settings is in the gui version or no
if you ctrl + click an smods function you should see both lsp_def and normal
anyone know why context.end_of_round seems to be triggering like 500 times here
don't think there's an UI for it
OH
if context.end_of_round and context.main_eval then
🤔 is that correct
what bepis said, end of round is called with the individual and repetition contexts
:3
I be forgetting main eval and just set a flag lmfao
chip_mod..........
have you been able to fix your fridge's context issue yet
Nope!
oof
It genuinely makes no sense
i cant tell why its THAT joker specifically thats completely ignoring the context.retrigger_joker_check and such
since your other jokers work
what's wrong with it
It prints the retrigger check if anything is out of the fridge
chip_mod is a relic of the past
But not if its within
ancient even
chip_mod doesnt auto-create a message
oh
-# also bepis have i been doing your 'nouns right i see various ones get used so ive been using they but i figured i should make suure
Im considering sending it to something since he's a seals guy and seeing why the heck it doesn't work
But i feel like he doesn't want a whole file and shit
:3 im a guy
what is the issue?
like this? lua loc_vars = function(self, info_queue, center) return { vars = { colour = HEX('b00b69') } } end,
to the notes it goes
It craches says rarity is nil
basically, one of his jokers' calculate seems to completely ignore optional contexts like context.retrigger_joker_check
does this also apply to Xchips
Seals dont work from within it nor does red or gold seal trigger on it
Blue and purple do trigger on it however
I have a hook that let's seals go on jokers but they refuse to work on that one and within it
since that's added by smods
yes, xchips = ...
and also
you dont really need to use card_eval_status_text
return{
message = localize("k_reset")
}
you can do this instead, or if you dont want to return: SMODS.calculate_effect({message = localize("k_reset"}, card)
@manic rune @normal crest @sonic cedar @red flower
thank you so much once again btw
it actually took me half a day
can I see
GO SLEEP
or is it too big
new record
IM TRYING

JUST
DO IT
Its very large but I can dm it to you if you'd like
Being the fridge and the hook and shit
i want to go to sleep but everyone in the office will look at me weird
ya sure
did you have a bad dream

😭
gdi
damn toma got wiped
exrcuted
ugh youtube shorts
I HAVE REASONS
you got it working, why would you punish yourself by looking at youtube shorts
nxkoo go SLEEP.
i love balatro
guys i NEED to get my 5 hours of doomscrolling
theres NOTHING in yt shorts that possibly can be more important than sleeping 😭
so i can complain about being tired and fuck up more or conditionals tomorrow
why is his background so random
at least it's NOT reels
loc_txt = {
name = "Dream",
text = {"Creates a random {V:1,E:2}Fantastic{} joker", "{S:0.8,C:inactive}(Must have room.){}"}
},
-- loc_vars should return HEX('b00b69') to {V:1,E:2}Fantastic{}.
loc_vars = function(self, info_queue, center)
return { vars = { colours = HEX('b00b69') } }
end,
take that
balatrotuber
replace center with card pls :3
anyways, help them
bad practice
and also, s:0.8, not S:0.8
is it not working
did i never add you people am i fool
didnt have to roast them like that 🥀
SMODS.Joker {
key = 'bookshelf',
atlas = CHAR.G.jokeratlas2.key,
config = {extra = { used_tarots = {}}},
pos = {x=7,y=0},
rarity = 2,
calculate = function(self,card,context)
if context.using_consumeable then
if context.consumeable.ability.set == 'Tarot' then
if #card.ability.extra.used_tarots >= #G.P_CENTER_POOLS.Tarot then
return {
message = localize(k_nope_ex),
func = function()
SMODS.destroy_cards(card)
end
}
end
local rand_tarot = pseudorandom_element(G.P_CENTER_POOLS.Tarot, pseudoseed('BLAHBLAHLAFGJEIHJFOAHFUHBNQW{F'))
local function repeat_until_hit()
for k,v in pairs(card.ability.extra.used_tarots) do
if rand_tarot == card.ability.extra.used_tarots[k] then
rand_tarot = pseudorandom_element(G.P_CENTER_POOLS.Tarot, pseudoseed('BLAHBLAHLAFGJEIHJFOAHFUHBNQW{F'))
repeat_until_hit()
end
end
end
repeat_until_hit()
SMODS.add_card({set = 'Tarot',key = rand_tarot})
end
end
end
}
attempt to index local center (a nil value)
Wow.
does #G.P_CENTER_POOLS.Tarot even work actually
after this reels
its a table
since its a table with uhhh
it should in theory
how do i, explain this
i IDDNT MEAN IT LIKE THAT I MEANT BECAUSE I GOT AN ERROR ABOUT SENDINGMESSAGE
yes its integer indexed
oh i see
so where am i messing up here
are we fr
:3 im bad at tech terms
JUST HELP THE MODDER
I AM
GO TO BED
rand_tarot.key
it returns the center
ic
isnt rand_tarot a table here
🧊
friendship 
what if we all held hands and sat in a circle
no
=[
:3
What’s this about??
oh yeah
colours is supposed to be a table
hand too small sorry
youre so small and frail and tiny
colours = {HEX('b00b69')} --wtf is this hex code??
yes this is true
i could throw you
colours = {HEX('b00b69')} --the funny
easily
What’s the right var to use?
what's the context for selling a card
context.read_the_docs
thanks
context.selling_card isnt it
context.go_to_sleep
yes
It’s the only hex code that I remember
one more joker
wtf 😭
I wanna show the color to “Fantastic”
erm nxkoo i freaking helped you say im awesome and cool and give me a high five.
you should be shot
loc_txt = {
name = "Dream",
text = {"Creates a random {V:1,E:2}Fantastic{} Joker", "{s:0.8,C:inactive}(Must have room){}"}
},
-- loc_vars should return HEX('b00b69') to {V:1,E:2}Fantastic{}.
loc_vars = function(self, info_queue, card)
return { vars = { colours = {HEX('b00b69')} } }
end,
you pmo me off
what the hell does "you pissing me off me off" mean.
how do i use a custom gradient for text colors?
noodles indeed
noodles
the background?
ts ts ts
like {C:silly_rainbowgradient}Rainbow Card{}'
right frfr? smh my head
this is wrong, but
i think it should be correct if your SMODS.Gradient key is rainbowgradient, and your mod prefix is silly
-# never used SMODS.Gradient before though so
it is...
is it working
no...
uh oh
:3
let's blame bepis and run
i
i use gradient but i do colors badly in my mod
what
oh
oh my goodness gracious
crashlog jumpscare
show me your SMODS.Gradient code
i cant put it in a message.txt for sm reason 😭
only gradients ive used ever are basegame
same
message is too short
put it in a notepad file
local RainbowG = SMODS.Gradient {
key = 'rainbowgradient',
colours = { G.C.RED, G.C.ATTENTION, G.C.GOLD, G.C.GREEN, G.C.BLUE, G.C.SPADES, G.C.PURPLE }
}```
heres an exmaple of my gradient
G.C.TOXIC_SWIRL = SMODS.Gradient{
key = "toxic_swirl_gradient",
colours = {HEX('00FF00'), HEX('FFFF33')},
cycle = 5,
interpolation = 'trig'
}
no its not
yeah
incorrect
wdym no? i thought it uses hex
loud_incorrect_buzzer.mp3
mine works with hex
this works: -- -- Mythic Gradient local Mythic = SMODS.Gradient { key = 'unobtainablegradient', colours = { G.C.RED, G.C.PURPLE } }
hex and G.C.whatever are the same
yes it does blud 😭
were you awake
really???
yes
go to bed
go to sleep
anyway idk this is the problem
are you sure about your prefix
i think it's this
you are not shayy and this is not materia collective
{C:silly_rainbowgradient}Rainbow Card{}
wtf is pmo piss me off 😭
my prefix is 'silly' and the key is 'rainbowgradient'
do you have the color initialized
blud said pmo twice💔
wtf does that mean 😭
🤔 isnt it automatically done with SMODS.Gradient
it should be automatic when using a gradient
guys i havent used gradeitnthjr sl hhyr
[SMODS _ "src/game_object.lua"]:3458: attempt to index local 'end_colour' (a nil value)
Additional Context:
Balatro Version: 1.0.1o-FULL
Modded Version: 1.0.0~BETA-0706c-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.8.0
Platform: Windows
Steamodded Mods:
1: ENA Dream BBQ Deck v1 by keegankeegan [ID: enadeck]
2: Sinkhole's Silly Mod by sinkhole [ID: SILLY]
3: DebugPlus by WilsontheWolf [ID: DebugPlus, Version: 1.5.0~dev, Uses Lovely]
4: Hollow knight Deck by nolo33lp [ID: HollowDeck]
5: Undertale Deck by nolo33lp [ID: UndertaleDeck]
6: Deltarune Deck by nolo33lp [ID: DeltaruneDeck]
Lovely Mods:
Stack Traceback
===============
(3) Lua method 'update' at Steamodded file 'src/game_object.lua:3458'
Local variables:
self = table: 0x3f74eb78 {2:0, colours:table: 0x3fdbe520, _saved_d_u:true, original_mod:table: 0x3fc311e0, prefix_config:table: 0x3fd34f08, mod:table: 0x3fc311e0, 3:0 (more...)}
dt = number: 0.0215601
timer = number: 0.0215601
start_index = number: 1
end_index = number: 2
start_colour = table: 0x3f71b8b8 {1:0.99607843137255, 2:0.37254901960784, 3:0.33333333333333, 4:1}
end_colour = nil
partial_timer = number: 0.015092
(for index) = number: 1
(for limit) = number: 4
(for step) = number: 1
i = number: 1
(*temporary) = number: 0.996078
(*temporary) = number: 0.000561894
(*temporary) = number: 0.047413
(*temporary) = number: 1
(*temporary) = string: "attempt to index local 'end_colour' (a nil value)"
(4) Lua upvalue 'gameUpdateRef' at file 'game.lua:2548'
Local variables:
self = table: 0x3f7169f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, F_ENGLISH_ONLY:false, F_DISCORD:true, STAGE:1, F_MOBILE_UI:false, F_NO_SAVING:false (more...)}
dt = number: 0.0215601
http_resp = nil
(for generator) = C function: next
(for state) = table: 0x3fa33960 {warning_text:table: 0x3fa21c68, silly_unobtainablegradient:table: 0x3fca34f8, warning_bg:table: 0x3fa32ca8, silly_rainbowgradient:table: 0x3f74eb78 (more...)}
(for control) = number: nan
_ = string: "silly_rainbowgradient"
v = table: 0x3f74eb78 {2:0, colours:table: 0x3fdbe520, _saved_d_u:true, original_mod:table: 0x3fc311e0, prefix_config:table: 0x3fd34f08, mod:table: 0x3fc311e0, 3:0 (more...)}
(5) Lua method 'update' at Steamodded file 'src/ui.lua:84'
Local variables:
self = table: 0x3f7169f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, F_ENGLISH_ONLY:false, F_DISCORD:true, STAGE:1, F_MOBILE_UI:false, F_NO_SAVING:false (more...)}
dt = number: 0.0215601
(6) Lua field 'update' at file 'main.lua:999'
Local variables:
dt = number: 0.0215601
(7) Lua function '?' at file 'main.lua:938' (best guess)
(8) global C function 'xpcall'
(9) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 909 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
i saw someone have a similar problem with SMODS.Suit so maybe it broke
🤔
i havent had to use this for my other gradients though
using gradient didnt initially make it real for me so i ended up doing
G.ARGS.LOC_COLOURS['toxic_swirl'] = G.C.TOXIC_SWIRL
to also use it but im also doing stupid shit for my gradients to work
i started looking for spelling thunk has ruined me
what
G.C.ATTENTION is not a thing
so i had smods.gradient and this
of couse its called G.C.FILTER
try using too much brian instead
i almost thought i was wrong
did you forget our time in the alps
of course its cryptid
of course its cryptid
cryptid BLAST
👅
Washee washee ahh card
yup G.C.Attention fixed it
what
oop nvm
is it called that
[SMODS _ "src/game_object.lua"]:3458: attempt to index local 'end_colour' (a nil value)
Additional Context:
Balatro Version: 1.0.1o-FULL
Modded Version: 1.0.0~BETA-0706c-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.8.0
Platform: Windows
Steamodded Mods:
1: ENA Dream BBQ Deck v1 by keegankeegan [ID: enadeck]
2: Sinkhole's Silly Mod by sinkhole [ID: SILLY]
3: DebugPlus by WilsontheWolf [ID: DebugPlus, Version: 1.5.0~dev, Uses Lovely]
4: Hollow knight Deck by nolo33lp [ID: HollowDeck]
5: Undertale Deck by nolo33lp [ID: UndertaleDeck]
6: Deltarune Deck by nolo33lp [ID: DeltaruneDeck]
Lovely Mods:
Stack Traceback
===============
(3) LÖVE metamethod at file 'boot.lua:352'
Local variables:
errhand = Lua function '(LÖVE Function)' (defined at line 598 of chunk [lovely debugplus.console "debugplus/console.lua"])
handler = Lua function '(LÖVE Function)' (defined at line 598 of chunk [lovely debugplus.console "debugplus/console.lua"])
(4) Lua method 'update' at Steamodded file 'src/game_object.lua:3458'
Local variables:
self = table: 0x2a981828 {2:0.61569786070356, colours:table: 0x2aa11460, _saved_d_u:true, original_mod:table: 0x2a8fb920, prefix_config:table: 0x2a9a0c28, mod:table: 0x2a8fb920 (more...)}
dt = number: 0.0167261
timer = number: 5.72288
start_index = number: 5
end_index = number: 6
start_colour = table: 0x2a39b768 {1:0, 2:0.6156862745098, 3:1, 4:1}
end_colour = nil
partial_timer = number: 0.00601942
(for index) = number: 1
(for limit) = number: 4
(for step) = number: 1
i = number: 1
(*temporary) = number: 0
(*temporary) = number: 8.93998e-05
(*temporary) = number: 0.0189106
(*temporary) = table: 0x2aacf500 {click_offset:table: 0x2aacf840, children:table: 0x2aacfb90, CALCING:true, sprite_pos:table: 0x2aacf4a0, T:table: 0x2aacf688, offset:table: 0x2aad0428 (more...)}
(*temporary) = string: "attempt to index local 'end_colour' (a nil value)"
(5) Lua upvalue 'gameUpdateRef' at file 'game.lua:2548'
Local variables:
self = table: 0x2a3968f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, F_ENGLISH_ONLY:false, sort_id:9, F_DISCORD:true, STAGE:1, F_MOBILE_UI:false, F_NO_SAVING:false (more...)}
dt = number: 0.0167261
http_resp = nil
(for generator) = C function: next
(for state) = table: 0x2a6d5050 {warning_text:table: 0x2a6d55d8, silly_unobtainablegradient:table: 0x2a91b6c8, warning_bg:table: 0x2a6d5248, silly_rainbowgradient:table: 0x2a981828 (more...)}
(for control) = number: nan
_ = string: "silly_rainbowgradient"
v = table: 0x2a981828 {2:0.61569786070356, colours:table: 0x2aa11460, _saved_d_u:true, original_mod:table: 0x2a8fb920, prefix_config:table: 0x2a9a0c28, mod:table: 0x2a8fb920 (more...)}
(6) Lua method 'update' at Steamodded file 'src/ui.lua:84'
Local variables:
self = table: 0x2a3968f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, F_ENGLISH_ONLY:false, sort_id:9, F_DISCORD:true, STAGE:1, F_MOBILE_UI:false, F_NO_SAVING:false (more...)}
dt = number: 0.0167261
(7) Lua field 'update' at file 'main.lua:999'
Local variables:
dt = number: 0.0167261
(8) Lua function '?' at file 'main.lua:938' (best guess)
(9) global C function 'xpcall'
(10) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 909 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])```
G.C.FILTER
“How do I get him off” ahh spectral card
yahimod
yes i have done this
anyimr i see yahi mod i jsut thinbk yahi which then turns into yahoo which then becomes mario

can i see the code again
🤔
Nah but srsly, how do I get rid of the soul crystal and replace it with the star?
which part
all parts
the gradient's?
question, does G.C.SPADES exist
i dont think so
yes
G.C.SUITS.SPADES?
oh yeah
nvm
its G.C.SUITS.Spades
future reference mini tutorial cause i forgot to send it earlier
Is it those ones that don’t do anything
There’s three different references to the suit colour iirc
well it isnt crashing anymore
G.C.SUITS.Spades should work
im useful!
thanks gang
u get 1 sinkhole token
gn bepis
i hand them out to cool people
bye bepis gn bepis
Code?
i dont think you should be handing out sinkholes
Hi bepis bye bepis
did they do this to write it in singular lol
in cryptid
real
can you hand out sinks
you, had me yanking my laptop screen back up
what the fuck 😭
heh
Standard cryptid code
do you want me to continue that
i dont know if this is new cryptid code because its my work laptop
no
lmfao
lmao
there is no new cryptid code it's all old wake up
true!
How tf do I use DrawStep
Tell it what to draw and when to draw it
i heard toma loves drawstep and will make everyones code for them
whats the code
doctor mario image
i should play that game, i have it for the nes iirc
i used the same code from vremade_soul but replaced the key with busterb_dream
ok but take out the one rendering the soul
yeah and that uses G.shared_soul which is the soul sprite
You just need soul_pos in your object definition
G.soul_pos? Or do I have to separate the sprites
Literally just soul_pos = coordinates like the standard pos
idk that looks kinda sick
it does but it's not the intent
waiting
What do I do here?
you dont need the shared_soul stuff
It’s automatic?
no you did it earlier with your own sprite
shared_soul is the soul
the big rock
get rid of that stuff and it wont render
does it work without the entire drawstep
also this
if you want the jiggle it does just add it to your thing
but shared_soul is a whole different render
try this
soul_pos = {
x = 0,
y = 1,
draw = function(card, scale_mod, rotate_mod)
local scale_mod = 0.05 + 0.05 * math.sin(1.8 * G.TIMERS.REAL) +
0.07 * math.sin((G.TIMERS.REAL - math.floor(G.TIMERS.REAL)) * math.pi * 14) *
(1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL))) ^ 3
local rotate_mod = 0.1 * math.sin(1.219 * G.TIMERS.REAL) +
0.07 * math.sin((G.TIMERS.REAL) * math.pi * 5) * (1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL))) ^ 2
card.children.floating_sprite.role.draw_major = card
card.children.floating_sprite:draw_shader('dissolve', 0, nil, nil, card.children.center, scale_mod, rotate_mod,
nil,
0.1 + 0.03 * math.sin(1.8 * G.TIMERS.REAL), nil, 0.6)
card.children.floating_sprite:draw_shader('dissolve', nil, nil, nil, card.children.center, scale_mod, rotate_mod)
end,
}
it's written in the soul_pos??
yes
soul_pos is a table
pretty much yeah
i coudl absolutely devour some scaffolding rn
can children be scaled up and down without changing their initial asset?
why would you want to do that to your kids??
is this a unique way of saying youre craving bamboo?
(yes)
theyre getting slow at manual labour
yes
i think you need to edit their obj.T values
I did this thing to make a textbox appear next to any jokers that have a specific rarity (ty srockw!), and i was wondering if I could do something similar for blinds. I know blinds don't have rarities but i was wondering if i could still do it... somehow...
do you suck the marrow out or just crunch
unfortunately true
but that doesn’t mean you can’t make them in your own localization I think
catch me late at night, bamboo in my hands
no, i mean that blinds cant have extra tooltips
normally
idrc in what way it's done as long as it's done
obviously blindexpander and stuff exists
yeah ik thats what I meant like you make your own
idk how sorry
yeah
ah, is alr
so i have my way of drawing soul sprites on certain conditions, but i still need to declare the inital soul_pos = { x = ..., y = ... rn i have it set to 10 so that its just a transparent soul but is there any way to bypass this so i dont have a blank floating sprite?
bypass what
having to declare the inital x and y params in soul_pos
can you use normal draw instead of soul_pos draw?
what if you just
dont?
like?? Just don’t do it and use regular draw instead?
can draw exist outside of a soul_pos = ...?
yes
but yeah draw is still a function
i dont want to require any other mods to have this one run but i wouldnt even know where to start with that
alr why wont this work, theres no crash report, js wont do the thing it's supposed to do. when booster is skipped, make random joker polychrome, similar to red card (joker) and hex (spectral). got lots of code from hex, but wont work.
key = 'rainbow',
loc_txt = {
name = '{C:silly_rainbowgradient}Rainbow Card{}',
text = {
'Applies {C:edition}Polychrome{} to a random Joker when any',
'{C:attention}Booster Pack{} is skipped',
},
},
atlas = 'rainbow',
pos = { x = 0, y = 0 },
rarity = 3,
cost = 7,
unlocked = true,
discovered = true,
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = G.P_CENTERS.e_polychrome
return { vars = { G.GAME.ecto_minus or 1 } }
end,
calculate = function(self, card, context)
local editionless_jokers = SMODS.Edition:get_edition_cards(G.jokers, true)
func = function()
local eligible_card = pseudorandom_element(editionless_jokers, 'hex')
eligible_card:set_edition({ polychrome = true })
if context.skipping_booster and not context.blueprint then
if G.jokers.cards ~= eligible_card and (not joker.ability.eternal) then
play_sound('timpani')
return {
message = 'No Eligible Jokers'
}
end
end
end
return next(SMODS.Edition:get_edition_cards(G.jokers, true))
end
}```
Look at how they did it probably
You think i'm smart enough to understand this?
you have the code inside func which you shouldnt, but it also will never run if you dont call it
also the return there doesn't make sense in calculate
why is it in a func that's not gonna ru- gdi N
you can ask myst
so where should i run the function?
outside of the func...?
no duh
you shouldnt, you should get rid of the func
oh

put all that code outside
so where should the return go
the return next(SMODS.Edition:get_edition_cards(G.jokers, true))
delete it
mmk
gone
youre trying to put consumable code in a joker
gotta jokerfy it bud
would it crash if i set code to check for a flag that technically hasnt been set yet in the load order
for context i have a bunch of G.GAME.pool_flags that i want rarity code to check for before one of the rarities attempts to spawn
iiiii dont think? idk i could be wrong but it might just skip over
or it could crash actually depending on how youre doing it
it will just be nil so it depends on what you do with the flag
ok cool im not crazy
so how do i jokerify it? i js tested it, and when i opened the booster, it started applying polychrome to everything and when everything had it and it tried again, the game crashed.
i didnt even skip it
you need to apply it inside the context
in fact, unless you know what you're doing all the code in calculate should be inside a context check
what N is saying is that you don't know what you're doing
the flags are in the joker code so i have a bunch of cards like gros michel/cavendish where a second version of the card shows up after the flag is set to true by the previous version's death code
exactly!
agreed
hi
i dont know what im doing either its okay
im at work so my day hasnt started
ok well in that case only one way to find out
if you tell work you dont feel like it they legally cannot keep you
they can also legally fire me
good point
not if you dont consent
also a good point
never thought of it that way
less of a good point but still works kinda
im changing the game
signed that away in the application
not me i didnt
yeah ig so
did you read it
not sure how visible it is in the screen shot but why doesnt my floating sprite get rotated when i move my mouse around the card(if that makes sense) and angle itself when moved to edge of the screen
i cant read
mmm thats good
key = 'rainbow',
loc_txt = {
name = '{C:silly_rainbowgradient}Rainbow Card{}',
text = {
'Applies {C:edition}Polychrome{} to a random Joker when any',
'{C:attention}Booster Pack{} is skipped',
},
},
atlas = 'rainbow',
pos = { x = 0, y = 0 },
rarity = 3,
cost = 7,
unlocked = true,
discovered = true,
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = G.P_CENTERS.e_polychrome
return { vars = { G.GAME.ecto_minus or 1 } }
end,
calculate = function(self, card, context)
if context.skipping_booster and not context.blueprint then
local editionless_jokers = SMODS.Edition:get_edition_cards(G.jokers, true)
local eligible_card = pseudorandom_element(editionless_jokers, 'hex')
eligible_card:set_edition({ polychrome = true })
if G.jokers.cards ~= eligible_card and (not G.jokers.cards.ability.eternal) then
play_sound('timpani')
return {
message = 'No Eligible Jokers'
}
end
end
end
}```
im prob still not doing this right
lol
G.jokers.cards is an array of cards, not a card
so... G.joker?
or G.jokers.card
or am i dumb
eligible...card...
no, i dont know what youre trying to check there
also this
lord
there should be a check to see if eligible_card is not nil also
hex doesnt need it because of can_use
oh i get it, hex checks if the other cards are eternal to destroy them
you dont need that
it's your card
can i put in self and move on to the other variables then
key = 'rainbow',
loc_txt = {
name = '{C:silly_rainbowgradient}Rainbow Card{}',
text = {
'Applies {C:edition}Polychrome{} to a random Joker when any',
'{C:attention}Booster Pack{} is skipped',
},
},
atlas = 'rainbow',
pos = { x = 0, y = 0 },
rarity = 3,
cost = 7,
unlocked = true,
discovered = true,
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = G.P_CENTERS.e_polychrome
return { vars = { G.GAME.ecto_minus or 1 } }
end,
calculate = function(self, card, context)
if context.skipping_booster and not context.blueprint then
local editionless_jokers = SMODS.Edition:get_edition_cards(G.jokers, true)
local eligible_card = pseudorandom_element(editionless_jokers, 'hex')
eligible_card:set_edition({ polychrome = true })
for _, joker in pairs(G.jokers.cards) do
if joker ~= eligible_card then
play_sound('timpani')
return {
message = 'No Eligible Jokers'
}
end
end
end
end
}``` im getting somewhere now, skipping a booster turns a random vard polychrome like it's supposed to, but when all are polychrome, if i skip again, it crashes. ALSO, when you polychrome a card, it gives me the return message = 'No Eligible Jokers'
why would you need to do that at all actually

because im updating my cards to comply with the Probability Update and im reading the update guide but i dont know what it means
shader you have on probably
can i see what you had before? i can help
right now i have dissolve on
is that the only one
do i still need this and how do i use it
Leave it as card
Absolutely do not use self
this is the entire code for that sprite (rotate and scale stuff above), bottom 3 lines were added to see if itd make a difference but it appears not
and what did you set your mods to
not eligible_card == nil
stolen from the smods drawstep floating_sprite
havent even done the main part of it yet, still stuck on loc_vars
bro what where do i put this 😭 🙏
im new to coding alright?
oh my god there's three of you what have i done
lol
you asked me to send a screenshot
it goes in your if statement
@placid star
ok so first of all
you dont need odds anymore
get rid of it, but keep the number in mind
so probability variables arent handled through config anymore?
no
okay so i wowuld just do
if editionless_jokers[1] then
local eligable_card == pseudorandom_elemtent stuff here
set card to polychrome here
end```
below `editionless_jokers = SMODS.Edition...`
before the locvars' return, have two variables set to the new function
for example,
SMODS.get_probability_vars(card, 1, 4, 'hpfx_7ball_id'
gives this card a 1 in 4 chance, and assigns it an identifier of your choosing
then return those two variables in place of your odds and probabilities.normal
can i set a more general identifier if i have multiple cards that essentially use the same probabilities for the same purpose
i mean you can, the identifiers are so the probabilities pick specifics
i wouldnt reccommend it personally but that's a me thing cause i like seeing what came from where
take out the draw_major line im pretty sure
that did not work...
odd
what'd you say the issue was again?
(also add the draw_major line back in)
so yk how when you move your mouse around a card it kinda rotates?
yeah
well that isnt whats happening with my floating_sprites
why are you dividing the T.# by 2 btw
to make it smaller
its not working
also after a while my performance tanks, check my child table there isnt mutliple of the same so im stumped on that aswell
cant you just
trying to destroy jokers inside of a for loop, but its throwing this error\
card upd
youre setting your variable to a number value
@sonic cedar do you have any of these issues with your draw funcs?
i do not
granted i believe mine is different from yours
now show #🎨・fan-art the art
why would I do that
i did not set my sprite stuff in a set_sprites, that may fix my performance issue
why wouldnt you
it's not fanart it's mod development
you can... post your mod's art in fan-art
that's allowed
yea but i already posted it once I'm not attention hungry
modding dev is typically the code end
well i didnt know that 😭
ive been juggling in here
I meant I posted it here. Kinda dumb to post the same image in two channels
🥗
yeah but
it was supposed to go in the other one
so youre fine
naw it fits more in mod development
stop fighting me
holy fucking shit i love you toma, the set_sprites fixed my issues
yeah you kinda need to actually create a sprite for it to draw lmao
well i did just inside my draw function 👉 👈
yeah that was the issue but youre fine now right
but yeah notice the difference
in set_sprites youre telling the joker what your floating sprite is
in draw youre telling it what to do with that information
= vs :
was gonna tell you to ignore the toggle stuff but you figured that already so
you got enough knowledge already dw youre just learning
yeah im just trying to push myself as of late to become a better dev
just do what i do and tell toma to do it
so the challenges are welcome
dilly you are in my credits
what are you talking about
cheeseburger
ceehbs tube
i need to add the ui help credit though
personally if i cant figure something out i beg and plead and offer to pay someone
Better dev as in spaghetti code works or code works and looks nice
so i dont have to rely on others as much and i can adapt and understand new techniques and languages
basically i want to be the mahoraga of coding
i want to become worse at coding
I didnt, ive only made that mistake once
Also she said that i should use blindexpander as reference, but i still understand absolutely NOTHING
what i do is copy the entire code and then start modifying stuff until i notice what it does
now its only destroying 1 joker (even at guarunteed chance) when it should be destroying all that arent itself and eternals
need the destruction itself to be in an iteration
my style is 'if it works it works' 
dilly i reformatted them to multiple messages so you can have a second credit line now
is it not in the for loop?
well idk what you have rn
code is in this message
oh the only thing i changed was removing setting the jokertodestroy to 0
i think this is because of how events work
youre replacing the value of jokertodestroy so by the time the event runs its a single different joker
Gl maintaining your code
how do i use this thing to spawn my things someone sent it when i asked if there was a way to spawn things
press 3 over the thing you want to spawn in the collection
ctrl + 3 on the item
do this if you have the CTRL option off
I don't think that's how it is
i have the ctrl option on but its still 3 in the collection for me
really? doesnt do that for me
rhanks
no wait im thinking of C
@subtle merlin hi somethingcom
how could you
:3
Is there a context for redeeming vouchers?
buying_card
I was planning to make a joker that gains quadruple xmult (starts at x1) AND +5 joker slots per redeemed vouchers, 1 in 4 chance to spawn 1 free random voucher in the shop.
good thing they didnt ask about boosters...
so it doesnt work if it sets the joker and removes it in the for loop?
right now its like this:
for joker held:
jokerToDestory = joker
destroy JokerToDestroy
end
but it only runs the destroy lines once at the end?
is that copypasted from your code
no thats just an example
toma losing faith in humanity
i think theres more than just a typo
I think that’s cardarea == G.jokers, right?
this is the actual code right now
-# I have copied every single fucking thing word for word at this point and all of it is going over my head
this is the first joker im making so i dont know what im doing
im tired boss
i'm not your boss
im tired subordinate
:(
events get put in a queue and don't run until your code is done
oh alright fine equals but only cause you wont take boss
Hey chat so I got a custom localization file I did to rename the jokers and I'm just wondering how to package it as a mod?
If you can just direct me to a tutorial that'll work
where am i in the hierarchy
so is there no way to destroy multiple jokers at once
Of course there is, your logic for it is wrong
i would write the correct one but im on phone
yeah i imagine there is, my next idea wouldve been to create a list of the jokers to destroy and run that through a for loop but i assume that would run into the same issue
grandma-tier
make the list and then use SMODS.destroy_cards(list)
oh sick
Which on the list am I looking for exactly?
thanks will try
you don't need to check for eternal either, that does it for you
ill get u some cookies dear
twink_food i swear to god
what are the reactions lol
Guys, why does calling SMODS.add_card inside a UI not make the joker actually considered as owned, thus allowing you to get at least one duplicate
my friend is doing that
read your question wrong let me give you the right link 😭
Hehe np
anyway thanks
set_ability explicitly checks if a card is created in an overlay
if that's what you mean
@near heart hii

I think I found it @sonic cedar
I see, it just checks whether an overlay exists
not whether the card was created in said overlay
that is a bit annoying but I guess I can work with it
ohhhhh i thought you meant file structure
not the localization itself
Yeah I'm just trying to figure out how to package it
Never packaged a mod before
Maybe this is wrong too lol
well put your localization file in a file labeled "localization"
You mean inside the mod folder? Like
modname
mod.json
localization
en-us.lua
?
yeah you got it
if that's your metadata file
{
"id": "my_girlfriend_renamed_the_jokers",
"name": "My Girlfriend Renamed the Jokers",
"description": "A mod that renames all the jokers to names my girlfriend came up with, with descriptions I tried to come up with to match them",
"version": "1.0.0",
"language":"en-us"
}
yeah youre good
yeah i had the opposite problem where i was creating cards before creating the overlay so it would count them as owned
How does one control the rate of rarities
Cause even when I put it to like 0.002 it always appears
And when you have the jokers in that rarity Jimbo would always appear
yo mb for the late reply but this aint workin for me
what are you trying to do again?
key = 'rainbow',
loc_txt = {
name = '{C:silly_rainbowgradient}Rainbow Card{}',
text = {
'Applies {C:edition}Polychrome{} to a random Joker when any',
'{C:attention}Booster Pack{} is skipped',
},
},
atlas = 'rainbow',
pos = { x = 0, y = 0 },
rarity = 3,
cost = 7,
unlocked = true,
discovered = true,
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = G.P_CENTERS.e_polychrome
return { vars = { G.GAME.ecto_minus or 1 } }
end,
calculate = function(self, card, context)
if context.skipping_booster and not context.blueprint and not eligible_card == nil then
local editionless_jokers = SMODS.Edition:get_edition_cards(G.jokers, true)
if editionless_jokers[1] then
local eligable_card == pseudorandom_element(editionless_jokers, 'hex')
eligible_card:set_edition({ polychrome = true })
end
end
end
}```
whats the error
hold on
Okay I made a mod that just changes all the names and descriptions, and I wanna package it so other people can easily install it instead of just manually replacing their localization files
dude
You know like how other mods are installed
right okay okay
I have an idea I'm gonna try rq
oopsy poopsy
Yeah wait I think I might have been misinformed as to doing the mod.json
change the json's name to metadata
name of the json file doesn't matter
metadata.json or just metadata
prevent confusion later
doesnt functionally matter no
No difference :/
.json but if youre fine with how it is dont worry about it
what's the problem rn?
Trying to package a custom localization
theyre trying to change basegame names
Ye
does your mod show up ingame
Do I need a lovely.toml?
assuming you're using smods
Well no that's the main issue
if it's a patch thing but i was checking the file structure first
but your mod isnt even showing up so
maybe you need to have these required entries for it to load
Oh okay wait, I didn't know about that part. Lemme update it and try again
other thing i was gonna say
So if my main file is in the localization folder I do "localization/en-us.lua"?
no, make an empty main.lua
Oh I have to make a main file
well no that's your localization
Do I need dependencies?
no
Wait yeah no
That's unrelated
YAY I GOT A CRASH THAT'S A GOOD SIGN
Thanks okay I think I'll be able to figure it out from here I think
No crash, just keeps showing ERROR when it saves the run instead of the message.
Left is the Joker code, right is the Localization file.
the message needs to be in misc = { dictionary= {
oh shit it didn't save it when I did it last.
how do you do that so much faster on phone than me (tbf i don’t really do it on phone as much as you)
Wait actually what did I do wrong here 😭
a syntax error on line 512 of your localization file
a modder… reading? Could this be the dawn of a new era?
I have a tendency to look right over things especially with a lot of symbols
nvm 😔 maybe the next one 🥀
this made me happy
this did not
my internet is also going on and off because im on the train, if it helps
it's typoed in the code
yeah
