#💻・modding-dev
1 messages · Page 695 of 1
what feli said
tl;dr (i'm assuming) is that it iterates through G.playing_cards and checks if card.ability.played_this_ante is true
it would be card.ability.played_this_ante yes
i am, thing is i need to get the list of cards so i can find the most used rank, which i apparently cant figure out
this reminds me of when i saw someone have print = "Hello World!" at the top of their file
you're joking right?
no
lua coders are awesome
I call BS unless you got proof.
go through G.playing_cards and add those who have card.ability.played_this_ante to a table and then check which rank appears most often
god damnit
i think I remember htis lmao
Uh I don't mean to interrupt but it's still not working :(
I REFUSE to believe someone actually did this.
Any crashes?
It's the same crash DX
bugs = no
quality = high
lag = none
controls = wasd
game = good
the game or your joker
Copy-paste the code and drop it in here, let me check it in my VSCode.
My code is still yellow btw
can you send the code
Yellow means that there's likely a syntax error.
I"ll debug it and show you all the issues
no like can you send it so I can copy paste
...no, select all the code, copy and paste it here.
SMODS.Joker {
key = 'tennatiejoker',
atlas = 'xtrautdrjokerimgs',
pos = (
x = 0,
y = 0
),
config = {
extra = {
chips = 200
}
},
rarity = 2,
cost = 8,
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.chips
}
}
end,
calculate = function(self, card, context)
if context.joker_main then
return {
chips = card.ability.extra.chips
}
end
}
Like that?
SMODS.Joker {
key = 'tennatiejoker',
atlas = 'xtrautdrjokerimgs',
pos = {
x = 0,
y = 0
},
config = {
extra = {
chips = 200
},
},
rarity = 2,
cost = 8,
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.chips
}
}
end,
calculate = function(self, card, context)
if context.joker_main then
return {
chips = card.ability.extra.chips
}
end
end,
}
missed comma after y = 0
thats the issue
wait no
nvm
im stupid
wrong brackets
ye
they forget to close their doors after opening them
Wait this will work?
yeah most of your issues were syntax issues
i suggest you pick up basic lua tutorials
SMODS.Joker {
key = 'tennatiejoker',
atlas = 'xtrautdrjokerimgs',
pos = {
x = 0,
y = 0
}, -- you used parenthesis () instead of braces {}
config = {
extra = {
chips = 200
}
}, -- try to keep indents consistant, makes reading and debugging easier
rarity = 2,
cost = 8,
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.chips
}
}
end, -- this is good, nice work
calculate = function(self, card, context)
if context.joker_main then
return {
chips = card.ability.extra.chips
}
end
end -- you forgot to close this function
}
here you go
I can confirm this happened
One sec
Please link me to it
try to keep indents I say and then discord fricks them up
these indents arent even consistent vro
thank you discord
closing brackets not on the same indentation as opening bracket
I don't think it was the Joker
smh smh
I'm still getting the exact same crash thing
well yeah the issue was coming from your main file wasnt it
they arein vs code 😭
I think yellow is non standard formatting (code should still work)
red are syntax errors (won't work)
I'd have to go find it
yellow is syntax fail
wait yeah
yellow usually doesnt mean much
it warns because its not used i think
@outer meteor here u go with comments to explain what was wrong
no unused locals and stuff just become like greyed out
JESUS christ.
I don't think it was the Joker causing the crash
Cause I'm getting the same crash still
I copied it directly :(
--#region Atlases
SMODS.Atlas {
key = 'xtrautdrjokerimgs',
path = 'Tenna Tie Jimbo.png',
px = 71,
py = 95
}
--#endregion
--#region File Loading
local jokers_src = SMODS.NFS.getDirectoryItems{SMODS.current_mod.path .. "src/jokers"}
for _, file in ipairs{jokers_src} do
assert(SMODS.load_file("src/jokers" .. file))()
end
--#endregion
It was working before
for , file in ipairs{jokers_src} do
it should be
for _ , file in ipairs(jokers_src) do
they did put the underscore
It is it just didn't show up :0
formatting killed it
Yeah :(
use triple backticks to make code block
triple whats???
put your code between a set for 3 backticks ```
`
if you do ```lua you get lua code
no you are iterating through {random_table values}
SMODS.Atlas {
key = 'xtrautdrjokerimgs',
path = 'Tenna Tie Jimbo.png',
px = 71,
py = 95
}
--#endregion
--#region File Loading
local jokers_src = SMODS.NFS.getDirectoryItems{SMODS.current_mod.path .. "src/jokers"}
for _, file in ipairs{jokers_src} do
assert(SMODS.load_file("src/jokers" .. file))()
end
--#endregion ```
they did ipairs{}
the underscore just didnt show up
There
instead of ipairs()
thats all theyre saying
for _, file in ipairs{jokers_src} do -> for _, file in ipairs(jokers_src) do
That's the same thing...
no its not
OH THE BRACKETS
but they mean something different...
{a, b, c} is the same as ({a, b, c})
🤯
whats the crash now
The same
can you send it again i forgor
oh
you did the same thing as ipairs as NFS
do
local jokers_src = SMODS.NFS.getDirectoryItems(SMODS.current_mod.path .. "src/jokers")
What...?
you used braces again
Oh THOSE should be parentheses?
every function call should be parentheses
unless its only recieving 1 argument, and that argument is a table
send code again
and is crash the same
SMODS.Atlas {
key = 'xtrautdrjokerimgs',
path = 'Tenna Tie Jimbo.png',
px = 71,
py = 95
}
--#endregion
--#region File Loading
local jokers_src = SMODS.NFS.getDirectoryItems(SMODS.current_mod.path .. "src/jokers")
for _, file in ipairs{jokers_src} do
assert(SMODS.load_file{"src/jokers" .. file})()
end
--#endregion ```
--#region Atlases
SMODS.Atlas {
key = 'xtrautdrjokerimgs',
path = 'Tenna Tie Jimbo.png',
px = 71,
py = 95
}
--#endregion
--#region File Loading
local jokers_src = SMODS.NFS.getDirectoryItems(SMODS.current_mod.path .. "src/jokers")
for _, file in ipairs(jokers_src) do
assert(SMODS.load_file("src/jokers" .. file))()
end
--#endregion
Is that what it should be?
yes

whats the crash
Same
ok take this
--#region Atlases
SMODS.Atlas {
key = 'xtrautdrjokerimgs',
path = 'Tenna Tie Jimbo.png',
px = 71,
py = 95
}
--#endregion
--#region File Loading
local jokers_src = SMODS.NFS.getDirectoryItems(SMODS.current_mod.path .. "src/jokers")
for _, file in ipairs(jokers_src) do
assert(SMODS.load_file("src/jokers/" .. file))()
end
--#endregion
but change the key and path
I'm not using placeholders
wdym nope this is literally the code
send crash
It's the same crash
send it
send it
send your entire folder
a screenshot
???
ok
You want all my code in one screenshot?
send like this
like this
thats better
Like this?
your 2x folder must not be in the 1x folder
yes
ok i see the problem
and have upscaled assets in the 2x
drag the 2x folder on the "assets" text so you have both folders on the same level
guys is this helpful
I have a splitting headache
well if you followed the tutorial you wouldn't have one
if you look at the tutorial tree you would see how the folders are disposed
That's how I have them set up
no
I moved it
good
Yes :(
can i see the metadata.json
send screenshot of file path like you did earlier
can i see whats inside the metadata.json
No that would have my file names in it
could you send just the stack traceback then
yeah
The what?
the list of functions called so we can see what your providing
that traces where the error is coming from
It looks like the traceback also has my file names tho
cut them out
but also those files names are important
and would help us figure out
use the snipping tool and just draw over them
dont
no snipping tool
no snipping tool
oh copy paste
i would like to be able to copy paste the code
no
👿
literally me
refrain
death
you didn't save the file
did you save
i think we all are cause none of us thought of that 😭
Is the Joker supposed to show up in Collection?
it supposed to show in the collection yes
It's not there...
regardless there should be another joker in the collection at the end
is your mod loaded
are there 151 jokers
Yeah
actually nvm it definitely is but
and the 151st is a undisocvered sprite
There are only 150
the joker file is probably not loading
okay what
idk why
if context.setting_blind and not context.blueprint then
local my_pos = nil
for i = 1, #G.jokers.cards do
if G.jokers.cards[i] == card then
my_pos = i
break
end
end
if my_pos and G.jokers.cards[my_pos - 1] and not G.jokers.cards[my_pos - 1].getting_sliced then
local sliced_card = G.jokers.cards[my_pos - 1]
sliced_card.getting_sliced = true
G.GAME.joker_buffer = G.GAME.joker_buffer - 1
G.E_MANAGER:add_event(Event({
func = function()
G.jokers:shuffle()
sliced_card:start_dissolve({ HEX("57ecab") }, nil, 1.6)
play_sound('slice1', 0.96 + math.random() * 0.08)
play_sound('sink_birdcaw')
return {
message = 'fuck you',
colour = G.C.RED,
}
end
}))
end
end
end```
this doesnt send the message and only works twice for some reason?
do not do print = "hello world" feli
print("hello world")
put the return statement outside of the event
and have the event return true
oh yeah
whats the issue
oh yeah
oh yeah
oh yeah yeah
wait you want this happening at the saem time
you are also not resetting the joker buffer in the event
creationa nd message?
yes yes
i forgot 😭
What do I do chat
good question
take a break
send your joker file code
I'm out of stamina for this I just need this Joker to work DX
what is
go to bed and rewatch the tutorial tomorrow
yeah
key = 'tennatiejoker',
atlas = 'xtrautdrjokerimgs',
pos = {
x = 0,
y = 0
},
config = {
extra = {
chips = 200
},
},
rarity = 2,
cost = 8,
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.chips
}
}
end,
calculate = function(self, card, context)
if context.joker_main then
return {
chips = card.ability.extra.chips
}
end
end,
} ```
did you save your joker file
SMODS.Atlas {
key = 'xtrautdrjokerimgs',
path = 'Tenna Tie Jimbo.png',
px = 71,
py = 95
}
--#endregion
--#region File Loading
local jokers_src = SMODS.NFS.getDirectoryItems(SMODS.current_mod.path .. "src/jokers")
for _, file in ipairs(jokers_src) do
assert(SMODS.load_file("src/jokers/" .. file))()
end
--#endregion ```
--#region Atlases
SMODS.Atlas {
key = 'xtrautdrjokerimgs',
path = 'Tenna Tie Jimbo.png',
px = 71,
py = 95
}
--#endregion
--#region File Loading
local jokers_src = SMODS.NFS.getDirectoryItems(SMODS.current_mod.path .. "src/jokers")
for _, file in ipairs(jokers_src) do
print("src/jokers/"..file)
assert(SMODS.load_file("src/jokers/" .. file))()
end
--#endregion
change it to this
tell me what the print output is
your gonna need to look in the lovely terminal for something like this
now he works, he just doesnt work in the leftmost slot? (like he doesnt shuffle or destroy) [or anything from the event]
if context.setting_blind and not context.blueprint then
local my_pos = nil
for i = 1, #G.jokers.cards do
if G.jokers.cards[i] == card then
my_pos = i
break
end
end
if my_pos and G.jokers.cards[my_pos - 1] and not G.jokers.cards[my_pos - 1].getting_sliced then
local sliced_card = G.jokers.cards[my_pos - 1]
sliced_card.getting_sliced = true
G.GAME.joker_buffer = G.GAME.joker_buffer - 1
G.E_MANAGER:add_event(Event({
func = function()
G.jokers:shuffle()
G.GAME.joker_buffer = 0
sliced_card:start_dissolve({ HEX("57ecab") }, nil, 1.6)
play_sound('slice1', 0.96 + math.random() * 0.08)
play_sound('sink_birdcaw')
return true
end
}))
return {
message = 'fuck you',
colour = G.C.RED,
no_juice = true
}
end
end
end```
also you can delete this now to get your name off
because there is no card to the left of his when he is in the leftmost spot
G.jokers.cards[0] is nil
lua is 1-indexed
how would i go about fixing that
and you're executing it if there is a joker to its left
what should it do if its in the leftmost slot
the same thing it does if its not
cut the joker to its left?
shuffle all jokers and destroy the one to the left
destroy happens before or after
What exactly am I looking for
wait i know
fter shuffle
@brittle yacht shuffle your jokers first then do the check
Wait I think I got it
ight
the statements right after all the patches
They have a G instead of a heart is that what I wanted?
what???
???
???????
like move G.jokers:shuffle() before your if my_pos check
yeah i got it
testing now
w PFP btw @wanton jolt
oop
we got an issue
yes
he destroyed both of the 2 jokers i had instead of just one
because what you had there was
Checking if there was a card to my (the joker) left
If true, then shuffle the jokers, then cut the card that was to my left before shuffling
nvm i think i fixed it already
oh wait this is stupid
there was a random delay(0.15) before the slice
thats what im doing lol
I'm pink now. That is my attack.
gulp
i was refering to my previous wrong statement
or specifying
since it was very vague
@outer meteor can you send the image pls
Of the Lovely thing?
This is what I want right?
did you save the main file
foobar
Now it's tehre
lmao
sticker fail
sticker win
Like, just anywhere?
before SMODS.Joker
send code
It just closed
send code
send code
envoie code
envoie
SMODS.Joker {
key = 'tennatiejoker',
atlas = 'xtrautdrjokerimgs',
pos = {
x = 0,
y = 0
},
config = {
extra = {
chips = 200
},
},
rarity = 2,
cost = 8,
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.chips
}
}
end,
calculate = function(self, card, context)
if context.joker_main then
return {
chips = card.ability.extra.chips
}
end
end,
} ```
fzgjk,vezklpogefzj,gez
OMG
😭
@slim ferry
im gonna end it
print equals the sequels
change it to print("I'm a transfem lesbian furry. I have ADHD and autism, touch me and I will cry.")
Do you not like my creativity? :3
do print("does something") omg
😭
its pretty creative to overwrite a function i gotta admit
how do you print in lua?
It just closed again
send code
send code again
also did you save
send code
send code
I'M NOT DOING THAT AGAIN I SWEAR
cend kode
Code senden
SMODS.Joker {
key = 'tennatiejoker',
atlas = 'xtrautdrjokerimgs',
pos = {
x = 0,
y = 0
},
config = {
extra = {
chips = 200
},
},
rarity = 2,
cost = 8,
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.chips
}
}
end,
calculate = function(self, card, context)
if context.joker_main then
return {
chips = card.ability.extra.chips
}
end
end,
} ```
OMG
son
STOP DOING PRINT =
im crine
print("I'm a transfem lesbian furry. I have ADHD and autism, touch me and I will cry.")
do that
not print= just print("I'm a transfem lesbian furry. I have ADHD and autism, touch me and I will cry.")
😔
person
companion
comrade
@ modding mods burn this man
hmmm
ok, so the file is loading properly, and it should be adding the joker
yeah
WAIT THERE IT IS
IT'S IN COLLECTION NOW
what if the issue was because you forgot to save the file and i was right
🍤
Yatta!!!!!
i think you've had enough lmao
its crazy how shrimp
shrimple
I just had my protein and caffeine I can keep going :3
@tawny mica
kolego, to szaleństwo, jak łatwo jest korzystać z ezInstaller™ dla Windows
hi i got a joker that gains +5 mult when score catches on fire, but for some reason when this happens it just starts upgrading like crazy and a lot of times so why is that
because there isnt a context check
it just gains mult at every single calculation if the current hand score is greater than blind size as it is
i forget which one since there isnt really something after all scoring but before score is added
context.final_scoring_step is the same place where plasma triggers but that means the joker will check before plasma balances chips and mult
https://github.com/Steamodded/smods/wiki/Calculate-Functions#contexts theres a list of contexts here, you can see if theres something in there
though theres a good chance youll need to patch in a context in between before and final_scoring_step to properly achieve the effect
put a config in the deck
config = { ante_scaling = 2 }, change it to be how you want it
how do you add custom colors again i forgot
theres an smods page but idk where it Is
im a bit dummb
ohh
im trying to add custom colors for my new stakes
https://github.com/Steamodded/Wiki/pull/112
-# if any of yall know stuff about this function pls hlep
Is this right?
????????????????????
why
because cryptid code does a bunch of shit outside for its loading
also its just old
and this local whatever = { ... } is something it does a lot for loading
then whats the proper code
SMODS.Back{
name = ,
key = ,
order = ,
config = ,
etc.
}
there is a mod made specifically to be used as reference here https://github.com/nh6574/VanillaRemade/
youre probably better off changing the blind size with calculate for this
since this is dynamic unlike plasma
at what speed ingame ost stored in the files?
Please, someone help me fix this error.
Not even the Balatro CLAMS server has any record of it.
I can't even paste the hooked function cause it exceeds 2000 chars
can you post just the first 5 lines
missing self
please don't tell me that was the entire hang-up.
Getting it ready to test
that's what the log is complaining about at least
attempt to call field 'oldcontrollerkeypressupdate' (a nil value)
Now we have that one
On ALL of them or just that? (The others only take x, y for args)
if the original function had a : then the first argument is self
then the rest of the arguments for that function
So all of them. Got it
Ok, so EVEN weirder crash:
This, but the menu music was playing somehow.
Wait, nvm, didn't correctly update it
IT LET ME IN
Oh. Now it's doubling inputs.
But I got DebugPlus and TMJ compat back, so that's a step in the right direction.
So THAT may be caused by some bad checks like this.
Cause in the blind, ANY action opens TMJ
Yep, still getting double input and the settings tab opening at launch.
is there a way to calculate the xmult a card would give IF it was scored, without it actually scoring
eval_card(card, context) but that only works if the card doesn't use SMODS.calculate_effect or card_eval_status_text
For this i would only want to count the enhancement's effect plus any permabonuses, not including jokers like Baron
You still have to use eval_card
Also eval_card doesn't trigger jokers.
Alright, got it
oldcontrollerrcursorpress and oldcontrollerqueuercursorpress are different things, don't know if that's intentional
Thanks for catching that
Sometimes you just need someone to look at it with you. I spent like 20 minutes with a similar issue in latex recently lmao
I have been staring at these functions for 2 days. My eyes are tired of Lua
I've now fixed:
Deselect crash
Double inputs
how could I change the height of a UI Element inside its button func
i tried chanigng config.maxh but its not doing anything
'sho'?
not args or (args.source ~= 'pl1' and args.source ~= 'sho')
do you want it to appear from high priestess
right high priestess exists (ᵕ ´ ∇ ˋ ˶)
I was think what else spawns planet cards
no I do not want that
then just return false lol
that will stop any random spawn
if you later want to make your own random spawn you can do return args and args.source == "your key_append"
that makes sense
is there a way to trigger something only on cards held in hand that themselves trigger a held in hand effect? like a way to check for held in hand effect triggering cards only?
thaatsss definitely not right
that's better, but why the error?
is it a label thing
I think it is
it appears it's not
you're either missing the localization for it or you have it in loc_txt but you added a group_key
oh the latter
Jimbo pack
it's still not working bwehhh
Did you set group_key on the booster?
yeup
Code?
heyy, so i have an edition that has a 1 in 2 chance to debuff a card, and it does it, but the debuff is applied instantly rather than after the card has its effects, but the card still scores for that play, is there a way to maybe apply the debuff after all the scoring animations? ive tried like a bunch of contexts lol
Put it in an event.
I still haven't figured out the issue qwq
group_key doesn't need the k prefix
mar_sealed_pack is enough
wait nvm
I'm not sure what's wrong there
try removing k_ from both
mine doesn't use it
can I see how you have set it up?
is this all you have in the localization
like in general
no I have more and those things work
uhh and is the misc table in the correct place
I double checked both localization files to see where to put it and I swear I had it in the correct place
it's on the same level as descriptions right?
like, on the same vertical line
weird
do you have a loc_txt
no it wasn't in the correct place

I probably wouldn't have noticed that for a while if it wasn't for what you said bweehh
YESSSSS
I was looking at the localization within vanilla balatro I couldn't figure out whyyy
whenever I make an error like this I feel like this image
kendrick first lua coder
I would choze the left one
lebron james reportedly using unknown keywords "do", "then" and "end"
so quick question, is there any way to get like all the text on screen and/or change it?
Might be worth looking into G.I.UIBOX
type, def might take a look, had a funny idea for a deck lol
all text on screen??
i mean yeah but it'll be difiicult and annoying
changing it is a different question though
UI not made to change really doesn't like changing
Please help me locating that guy
Who the hell separates a C++ for into 3 different lines
Instead of just doing
That looks like c#
You might not like it but that's what peak c# code looks like
No wonder why I've never bothered to learn C#
question, did context.hand_space changed name?
yes, drawing_cards
thank you very much ❤️
it's used by the serpent in vanillaremade if you need an example
oh i'll look at it
can i change the sprite of the enhancement if you have a variable track for it?
I have a small issue. I try to make it that the player draws 5 additional card (meaning that if he should have drawn 4 cards to have a full hand, he'll isntead draw 9). Now, when i have two of this joker, and get to 18/8 cards, playing 5 card will only draw 5 instead of 10. I think it's because they both overwrite the cards_to_draw. Any idea on how to dodge this?
if context.drawing_cards then
return{
cards_to_draw = context.amount + card.ability.extra.draw
}
end
previous method was (in the if)
for i=1, card.ability.extra.draw do
draw_card(G.deck,G.hand, i*100/(card.ability.extra.draw), 'up', true)
end
if you have 18/8 cards, playing five will put you at 13/8, and the number of cards to draw will be 0
adding five to that gets five

i think the issue is the redefining of cards to draw in return
since both do it
one overwrite the other
add a print(context.amount) and see what happens?
tried this again, seems to still work
trying this rn
that unconditionally draws five cards, so yeah two won't interfere
so it's not overwrite
anyway i think i'll stick to the for method as it seems to work
oh it starts at negative if you're over your capacity
seems so
not sure, i think it's smth i could overcome by checking context.amount value
and making the sum with zero instead of context.amount if the latter is below zero
but i prefer to keep it simple, anyway thank you a lot for your time !
can i change the sprite of the enhancement if you have a variable track for it?
fixed this in smods
you can math.max(context.amount, 0) in the meantime
card.children.center:set_sprite_pos({ x = num, y = num })
is there a context for when a hand is drawn in a pack? (like arcana or spectral packs)
context.other_drawn iirc
i will try that tysm
Hey guuyyysss
What's uuuuppp
It's meeeee
So
Haha
Having issues AGAIN.
So, I'm tryna add a description to my Joker
But it just
Ain't
As you can see by this image
It lacks a description
But by my code
It SHOULD be working I think
It did print chicken sandwich
missing j_
np
Yall know how can I make custom editions my artist needs help 😭😭
as in the shaders or the code for the editions themselves?
The shaders
i dont know much about shaders sadly theyre kinda hard
there are some resources and commented examples here
https://github.com/Steamodded/smods/wiki/SMODS.Shader-and-SMODS.ScreenShader
https://github.com/Steamodded/examples/tree/master/Mods/EditionExamples/assets/shaders
how can i add another of whatever these are to a joker?
wait why does it return the description here
is this like a different notation than just defining it in loc_txt or
set_badges = function(self, card, badges)
badges[#badges+1] = create_badge("texthere", backgroundcolor, textcolor, size)
end,
is there a way to make it so that when you first load the mod on a save file, it determines the next joker you get on a shop? like a mini tutorial?
check the vanilla code for how it does the tutorial, skipping over the parts you don't need
you can use context.create_shop_card to do that and save a flag to the profile or your mod's config
is there a better way to rearrange the jokers on the collection or do I just, switch the code around on the lua file xd
hello can someone tell me how to start modding balatro?
https://github.com/Steamodded/smods/wiki this has a lot of what you need
Thanks
I can also recommend astra's guide: https://canary.discord.com/channels/1116389027176787968/1486847115127947374
-# that is if you want to make mods, which I assumed because of the channel you sent this in
thanks again
hey, is there a way to get the key of boosters in the shop? everything im trying is turning up nil lol
G.shop_booster.cards[i].config.center_key where i is some in-bounds index
no s, whoops
oh perfect, thats like exactly what i was looking for, tysm!!
why is my joker bent? is it because its long?
is there a way to make the buy button render above the bottom shop background?
eval G.P_CENTERS['classprefix_modprefix_key'].unlocked = false in the console.
thankgyu
yeah the uh tilt math doesn't like it when cards get really far away
card.pixelsize = {x = n, y = n}
idr what the exact units are there
strange, when i drag the card away from the joker area, it actually looks flat like id expect it to
check vremade photgraphi
cause tilt is disabled
ohhh, thats makes sense
it doesnt seem like pixel_size changes what the game thinks the geometry of the card is
does smods adds attributes to the vanilla jokers already? because this kinds doesn't work
Bump
What is your SMODS version?
That one's from december 2025 lol
vortex mod manager you have failed me for the last time
VHAT
idk what happened, I changed nothingggg
Vortex is not particularly recommended
smods is just not updated on nexus, all other mods I got from there are updated and work fine qwq
People aren't usually fond of nexus mods
why not?
it works fine in every other game, and when I uploaded my first 2 mods there I got like 3k downloads each
getting donation points
Depends of the game
and the mod manager received support for balatro so you can download stuff directly from the browser to the mods folder qwq
nexus mods is not recommended because almost no one uploads to nexus outside of some texture packs
damn
We're too used to the thread into github system lol
we need to modernize ts
yeah and atm i have an installer for smods + lovely that can also work like an updater
That's not really a mod manager lol
yeah but atleast smods is up to date :)
the balatro mod index, which imm also uses with the perk of not lagging your game out and not being built with ai
how would one make a booster pack for a consumable that doesnt have a use function
just like any consumable booster pack
how could one upload their mod to said,, mod index? tuna
if you dont want the use button to appear you would have to overwrite it
fill up a form
yeah but like i cant select it
did you make it so you could save it
you have to set select_card = consumables (if you want to save it to the consumables area)
gng whats tje most useful mod
Uuh since you're asking in dev i'm gonna asume it's for making mod it would be DebugPlus
oh oops
and uh do yk whats a good app to make custom cards on lile to replace the normal ones?
Art wise? I use Asprite but there are prob good enough free ones out there
krita.
how much?
Free if you know how to build it otherwise it's ~17€
Krita is open-source and free. I've used it from the jump.
wym free
0€
doesn't cost anything
no i meant like wym free if yk how to build it
this cost $0
You can install Aseprite yourself but I don't know much more than that
broooo
kk ill try Asprite and Krita
gimp is very good :3
kk
how was it to return a custom message when scoring instead of the common like +10 chips or x3 mult
you can have github build it for you
just fork this repo and run the workflow
https://github.com/hardingadonis/aseprite-auto-build
I have a problem with a joker parameter not remembering its state, I have put comments in the code for info what is working and what is not
loc_txt = {
name = 'Astro Stocks',
text = {
'{C:attention}+1{} Shop Slot if Shop',
'contains a {C:planet}Planet{} card',
}
},
config = {
shop_slots = 0,
},
remove_from_deck = function(self, card, from_debuff)
change_shop_size(-card.ability.shop_slots)
-- essentially when sold removes 0 or 1 slots, depending on whether you've seen a planet this shop or not
end,
calculate = function(self, card, context)
if context.before_reroll or context.ending_shop then
-- Reset slots before reroll (added new context) so I don't remove already generated cards by the shop
if card.ability.shop_slots > 0 then
-- this 'if' never occurs (essentially shop_slots == 0), but I don't change the param anywhere else; why? idk
change_shop_size(-card.ability.shop_slots)
card.ability.shop_slots = 0
end
--change_shop_size(-1) -- but this works as intended, so my new context works as intended
end
-- have to change starting_shop (doesn't get the job done, shop slots probably load after that check)
if context.starting_shop or context.reroll_shop then
-- Check for planets in rerolled shop
hasPlanet = false
for i = 1, #G.shop_jokers.cards do
if G.shop_jokers.cards[i].ability.set == 'Planet' then
card.ability.shop_slots = 1
hasPlanet = true
break
end
end
-- Add slots if needed
if hasPlanet then
change_shop_size(card.ability.shop_slots) -- succeeds in adding slot, so here the param is 1
end
end
end
}
also here's the context, I didn't have enough room to share it:
# Make context right before reroll
[[patches]]
[patches.pattern]
target = 'functions/button_callbacks.lua'
pattern = '''
local final_free = G.GAME.current_round.free_rerolls > 0
'''
position = 'before'
payload = '''
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({before_reroll = true})
end
'''
match_indent = true
is there a way to check for unlock when you open 2 of the same booster packs in total?
SMODS.debuff_card(card, true, 'source')
oops wrong modding dev but oh well
working on replacing the card sprite in Sprite:draw_self with a canvas so i can draw shit that gets affected by edition shaders
more specifically i wanna apply a shader to the card that also gets affected by the edition shader
so i can remove parts of the card
you can put the starting_shop stuff in an event probably
event as in another context?
ooooh no, wait why event
is it so that the event handler does something? idk what difference it makes
this continuously increases the shop slots (+1+1+1+1... can't even reroll xd), maybe I'm doing it wrong
any idea why beating the challenge doesn't unlock the joker? I'm pretty sure it has the same key
return args.type == 'win_challenge' and G.GAME.challenge == "c_mar_waters"
end```
Cards cannot be unlocked in challenges.
Yes, you would have to patch unlock_card
return true at the end
[[patches]]
[patches.pattern]
target = 'functions/common_events.lua'
pattern = 'if not SMODS.config.seeded_unlocks and (G.GAME.seeded or G.GAME.challenge) then return end'
position = 'at'
payload = 'if not SMODS.config.seeded_unlocks and (G.GAME.seeded or (G.GAME.challenge and not card.modprefix_challenge_bypass)) then return end'
overwrite = true
match_indent = true
this is in lovely.toml?
that helps, but now it works like without the Event Manager, the shop_slots somehow resets its value
I had to add a couple extra things and then it worked!
tfym overwrite = true
try this inside the event
if G.shop_jokers then
-- your code
return true
end
-- dont return true here
so it waits until shop jokers exists
hmm, doesn't fix the initial shop problem, not even with #G.shop_jokers.cards == G.GAME.shop.joker_max, was mking sure I don't need just the first card to be planet for it to proc
is there a rarity pool?
What is the goal?
I wanted to make a consumable that upgrade the selected Joker's rarity by 1
It's random
Look how riff raff does it in vanillaremade
Got it, thank you
Trying to get back into Modding
what do I need to scale by in order to make the texture fit the image
kk thx
how do i make this video thing from yahimod work
figured it out i think
copied the function out of the yahimod now my game just closes itself when i call the function
did you copy everything it uses
@clever lily
like the event manager (if it uses it)
i copied the function but idk what else it uses
for video popups
probably came from me restarting the game and holding R for too long
alt f5
did not notice that at all
what does it look like
is there any ways to make this to affect selecting a hand?
i.e makes it so that it counts as pair whenever i select K and Q
quantum ranks :scare:
hook pairs perhaps?
i couild
does it mean you cant play royal flush anymore
:3
Do you want it to count as both ranks or just Jacks?
just Jacks
like K and Q are now J
local oldcardgetid = Card.get_id
function Card:get_id()
local g = oldcardgetid(self)
if next(SMODS.find_card('j_modprefix_key')) and (g == 12 or g == 13) then
return 11
end
return g
end
thanks
alot
❤️
Yes.
thank you
Is it possible to override The Sun/Moon/Star/World output to be random
I.e The Stars now turn selected cards into Clubs
uhhhh you would have to take ownership im sure
how would i randomize it though
look at the SMODS.Suit docs
if condition
suit = random suit
function to change the suit
at the bottom
wherte the FUCK is it
missing closing bracket
when this player has this joker, it will take ownership of the consumables
and then i can randsomize it
i think
cant hurt to try
if next find card
local suit = pseudo
else
suit = whatever it is
suit application func
but idk tho
a joker that
wait nevermind
Is it possible to turn the suit output into an enhancement output
i.e The Lovers turns card into wild
you can theoretically make it do anything you want via take ownership
like I have a joker that makes glass cards become gold instead of breaking
and its done via take ownership
did u find it
what are trying to do
trying to put The Sun tooltip into a Joker
info_queue i mean
how could I send information from a UIBoxes ref table into its shader
how do i refer to a custom consumable type in the loacalization file?
same way as tarots or spectrals
do i need a prefix?
check font styling
did you use a prefix?
or is it just the key
consumable types don't get prefixed by default
the category name is the exact key you put in SMODS.ConsumableType
{C:tarot,T:c_sun}The Sun{} i think
Tuning is my consumable type
for what reason specifically
tyyyy
it wouldn't work
tyty
it only works if you can hover your cursor over
card descriptions are gone the monent your cursor leaves the card
oh do you mean info queue stuff
@lament agate add an infoqueue if u cant do tool tips
I want to define the name of the consumable type ythere and idk how else to define the localization of the cards in the consumable
thats what i asked
oh lol
where does the info queue doc located
info_queue[#info_queue + 1] = G.P_CENTERS.c_sun
i thought you meant actual tool tips
Wild enhancement is e_wild right
right
thanks guys
you have to define its label and dictionary (under misc) key
if you want to change the card that is in the consumable type, you have to do it under c_prefix_consumabletypekey in descriptions
key error :chud:
just do .m_wild
ok cool thank you
just c_prefix_key
me when i take code from my shit but dont change it because it was card.ability.extra.whatever
consumabletype isnt put in there unless you choose to
ah
i have a k_key for my consumable types i dont know if its a dupe
or useless
this is the thing i want to group up but gave up when i saw ui btw ^^
@daring fern do you have art i can refer you by or can i just draw you as an all knowing wizard
can i see the code btw
i tried doing the same
no lock
no luck
I would prefer if you referred to my profile picture, but that's just a screenshot.
fuck how would i make that fit as an inscryption card
I'd suggest the thinking emoji but i don't think he fw it anymore
i need to build it like an actual poly
give me a moment
sure
he's DEAD
i found it
SMODS.Enhancement:take_ownership('glass', {
calculate = function(self, card, context)
if context.destroy_card and context.cardarea == G.play and context.destroy_card == card and SMODS.pseudorandom_probability(card, 'glass', 1, card.ability.extra) then
if SynthB.effect.parry() then
card:set_ability("m_gold", nil, true)
else
card.glass_trigger = true
return { remove = true }
end
end
end,
}, true)
actually i should dead ass make a sort of epoxy sticker that if its breaking grants
{break, 0.7}
{upgrade,0.05}
{not break,0.25}
sorry was in a economics lecture
finance me
@lament agate
