#💻・modding-dev
1 messages · Page 541 of 1
You can learn how to do things from it, but I think you need to be very comfortable reading and understanding code to really get much out of it. Especially because sometimes you'll be figuring stuff out in the vanilla code, while smods has a newer and more efficient implementation of it, already
while smods has a newer, more efficent implementation thats entirely undocumented
I felt like I was going insane trying to set that up, and realizing that the way seals handle UI is by just checking if there's a badge, haha.
Hey, that's definitely changing. Latest smods releases all document the new features, and people are putting in effort to fill the gap that emerged
heres what i figured from coding yggdrasil and stacked
- if you want to create custom info queues, patch into generate_card_ui, and add into the info_queue table in there
- if you want to create badges, patch into G.UIDEF.card_h_popup
i wish i could contribute to the wiki but i dont know how
same
this is what i did to add badges
I guess that might be smarter, haha. Just circumvent the process
this is what i did to add info_queues from extra effects
My plan is to take some time tomorrow and see if I can make some changes at the SMODS level that make this easier to handle, haha
yeah thatd be nice
unrelated but rn stacked's ui breaks with entropy which kinda sucks 3:
I ran into some issues with setting calculations up as well. Or, issues, more just me not knowing
stacked's calculate is really simple so i didnt come into that much trouble with setting it up
all i did was hooking into Card:calculate_joker :3
I assume Stacked works similarly to how I handled spells, which is real easy, haha
id imagine you will want to hook into uhh something else though, i talked about it here before, lemme check
I've got it all set up and working, I think, but I just kept running into little hurdles of needing an additional patch, haha
Calculations at a card layer level are hardcoded in at multiple steps in the process, is what I learned
this one is more generalized
i think it should check all contexts?
shrug
i havent tried that approach though
That sounds like it might be a good target for the mod calculate function PR
Yeah, my issue was just that in imitating seals, I didn't just need to patch in a calculate_counters, but also add counters as a key to some arrays, haha
do you know how to make PRs?
i don’t know how to PR the wiki
i tried forking it
but
it didn’t take the wiki with it?
i dont think you need to fork it
Also wanna sit down at some point and maybe see if I can mess with the way blinds are handled internally, because a lot of that stuff feels spread out and annoying to figure out as well
oh
u can press here and it will lead you to the wiki github lol
am an idiot
yeah its fine, it took me a good 5 minutes to figure that out too
the only thing I don't recommend editing is the calculation page because eremel is rewriting it
In all that spare time I have
https://github.com/Steamodded/Wiki/pull/51 this is the wiki pr i have rn (the updating text one)
Might just go through a dump and mark all stuff that's hardcoded in and see how easy it'd be to make it modular
I also don’t have a huge amount of time to actually read wiki PRs so if people are interested in reading through and making sure they: a) are accurate; and b) make sense, just leave a comment on them and that would be very helpful
*looks at N'
i dont know how to read
guess we are both in the 98% then
i would volunteer to help but i dont think im qualified myself lmao
N does a lot of help already, and this is a community effort, I’d like to see more of you guys help out where you can, and reading a wiki PR and trying it out is certainly something most people who are reasonably confident using smods should be able to do
Reading wiki stuff I can definitely start helping with
i didnt know this existed actually
looks incredibly helpful since there has been a few people who struggled with what G/G.GAME has
But generally, smods is a project run by volunteers (though mostly me at present) who do stuff in their free time for fun. Having messages complaining about things being missing from the wiki, or PRs not being merged yet, whilst might seem helpful to you, is demotivating and makes me less likely to do it
Yeah unlike a big funded project that can handle basically whatever feedback and filter what's needed, feedback for this kind of thing needs to be constructive and supportive because it also doubles as compensation for the work
im sorry to hear that, please take your time with the new documentation :3
i want to take a shot on making vanilla ui functions documentation tomorrow
I should start funding this project instead then and make it worth the time 😎
and general guides on like, how to create an overlay menu and stuff
the scariest part about ui is just not knowing where to use the nodes imo
UI stuff is definitely one of the lighter documented things, so people would benefit from it a lot!!
I have a bunch of notes that I could realistically turn into some documentation. What to hook for which end result, for example
knowing which function to hook to, where to patch to get your results would be really nice
if anything doesn't fit smods docs feel free to let me know and i can include it in the vremade wiki
A lot of UI hooking that I do looks like complete garbage magic
Id love to actually pr things but I am not confident enough to make it something acceptable to people
So I kinda just sit around
I assume most people have a similar issue as I have when it comes to documenting UI functions, and that is that even if you get end results, it still feels like guessing, haha
uhuh
would yall be ok with me working on a pull request to add some other clarifications to the wiki
i want to contribute somehow but dont have enough time or energy to actually do work on source code
documentation on hooks in general would be nice too I think. from what I can tell most people point to some forum post that isn't even related to balatro modding as a starting point
Same, haha, but I'm trying to get over that. I'm sure if I make a bad PR, Eremel will just tell me and not accept it, instead of me breaking all mods, you know, haha
The main thing is, is that writing documentation that people are going to find useful is hard, especially when it’s about things that you’ve created and iterated upon so know how they work implicitly
eremel has been really nice with my prs despite how horrendously the code is set up ngl
truth nuke
I think that's my issue is i dont wanna be told im bad cause I already i am lmfao
So I fear id just give something in a subpar nature so I dont even bother
I’m happy for anybody to do wiki work
i feel like he would achieve better results by just, reading my code to know where i did it and redo it from scratch lmao
Any code stuff I just rewrite if it needs it
A lot of people want tutorials and not documentation, telling them that a function returns a boolean is gibberish sometimes
-# I’m totally not doing that rn with a pr
gulp
Finding the proper base line is such a difficult skill that there's uni degrees dedicated to proper copy writing, haha
When I was working with setting up LLM training stuff for linguistic research, I was harshly confronted with the fact that even when codebases are documented, good documentation is a whole separate skill, haha. Smods has a lot of gaps that came to be over time, but I personally think the existing documentation is really clear. But yeah, it's definitely not a tutorial.
i also work with LLMs and had the same experience haha
3: i cant relate, i jumped straight into balatro modding
u've done lingustic research?
thats cool i didnt know that
probably why i didnt know that many coding terms too lol, like instead of iterating i used to say "go through the table" before
also yeah good documentation takes lots of effort
writing docs is also boring lol
im used to it
ive been writing 500+ words essay thrice a day for 2 weeks now 3:
-# im growing sick of english by now
uhuh
since u may not read something the same way as someone else
mhm
true
Tbf, don't assume me having touched LLMs means I'm a programmer of any kind, haha. The basics are as approachable as any random type of application. There's just a classic ecosystem of nerds writing documentation that is entirely unaware of a realistic baseline, and both crunch and passionate iteration make it so a lot of code libraries just are very badly documented. The luxury of having knowledgeable people around to bother and get answers from is an insane difference, haha
Yeah unfortunately for a lot of newer programmers, reading function documentation is not easy. And partially it's because for a lot of traditional programming language documents, it assumes a conceptual background that allows people to make more assumptions
It's why I always really enjoyed the Unity scripting documentation because it provides a direct example of almost everything it actually documents
It's a weird balance where reading documentation is a skill, and writing it is a skill, and if both parties are unskilled, it's a real bother, haha
i've done a lot of tutoring for math, helping people understand what the textbook means
i think i could probably provide plenty of examples for docs
mhm yeah i think thats prob what ima contribute to smods since thats the least i can do for such a useful modding api
Yeah. It's hard to build that skill without documentation geared towards the unskilled, but it's hard to write that documentation when you're skilled and primarily sharing for other skilled people, since it seems like bloat
In general that's also a major part of code readability and a skill too. Being able to make your code readable to less skilled or less familiar people
hello guys, i have a question, instead of replacing the vanilla suits, by the modded ones, how do i do to just, not load them into the deck ? (ping me pls)
yeah
something that i appreciate from my math classes is learning how much to assume from people reading your stuff
I would hope that my attempts like the last release notes or [this](#1335002372933423144 message) are more helpful
i'm pretty good about actually commenting my code i think but code readability is definitely not my strongest suit lmao
This is why I'm trying to learn a bit from N's coding style, haha
I hate commenting code other than with doc strings
I'm personally in the camp nowadays of "code needs to be readable on its own without comments", and typically I only primarily comment code for function defs, or if something is required to be segmented across multiple files and it's hard to find those assumptions
The latest releases have been way easier to adapt to and use the new features off. Definitely a noticed and appreciated effort!
i liked the latest release notes format
on a separate note, would it be ok if i add a note somewhere in the wiki about the probability system
since i dont see much of anything for probability in the wiki
I will also occasionally use comments for general file organization as well
ah right yea function defs i should probably get comments on
i'm the resident IDE hater so stuff like the LSP tends to slip past me if i don't purposefully think about it
I comment my code in part because I've seen people link my code to very green devs, haha. I mostly use it to section things, because if a lot of lines get close to each other I lose sight very easily
I don't know if there's a better way but if you wait for the next smods release there will be a way to stop suits from appearing in the pool without taking ownership
i was about to say the same thing, the 0711a release notes are great but a lot of it feels like it should be on the wiki too
i use lsp a lot so i try to pr all the changes to smods when i can
so i need to wait..... lowk shucks, thanks tho
do you have the #region plugin, it's pretty cool for that
i definitely keep it in mind for if i'm working on an smods PR (helps that there's the reminder in the PR template), but for my own code i just don't usually think about it
Yup, after I saw it littered throughout your code, hahaha
same
i always tell people to get the lsp stuff from ur wiki cuz i dont want to open up the balatro files every time i forget an argument to a vanilla function
Oh, I should make sure to set lsp stuff up for these APIs I'm making
jokerdisplay and joyousspring also have lsp :3 mostly because they are both set up as APIs
jokerdisplay more so obviously
I think it’s going in the calculation page
If everything goes well it should be out somewhere within the next week
I also don’t understand lsp properly so miss it out a lot 😭
leave it to me 🫡
insane, if there a server/anything so i can get notified when it happens ?
I keep wanting to learn more about Love2D as a whole just to help me figure out some stuff as well. There aren't too many people I can ask about how to handle UI boxes interacting with shaders, after all, haha
I’ll post it here when it’s out
And whatever other dev channels I remember about if you’re in any of those
Or you could join the steamodded discord server https://discord.gg/FeeRtSVKq6
Right, time to finish this card limit stuff
Card limit stuff?
It makes card limit modifiers on cards affect the area they’re in
Don't they already?
Or do you mean just like aside from the specific one used for editions
They do in the vanilla card areas because they're hardcoded to, right?
if you put a negative joker in your consumable slots you'll still have 6 joker slots
and 2 consumable slots
if you put a negative card in a custom area, nothing happens
Will there also be official support for Cards that take 2 up slots then (for example)?
Ah, I see!!!
uhhh maybe, though is that fundamentally different from it having a -1 slots property?
It's technically not, though it's a slight difference in how the mechanic is perceived by the player
that's true
"-1 slots" is a penalty. "Takes up two slots" feels more like it's a big important thing that deserves space
I mean yeah.. Kinda?
If I have a -1 Slot property I can still pick the Joker up if there's a Slot open x3
If the Joker "Takes up 2 Slots" I just can't take it
I don't think it'd let you take a joker with a -1 slot if you only have 1 slot, though I havent tried yet
Logically it shouldn't because the game tries to avoid putting you in a position where you have more items than the slots visibly allow
Which is why negatives in the first place extend your slots
Rather than just not count against the limit
I implemented a similar thing for my Mods next Update and it would honestly be nice to have something a bit more official - That's why I asked 
yeah I can see the logic behind it
okay yeah it won't let you buy a card with -1 slots if you're at 4/5
I didn't even realize that was an extant property already
I finally finished my pre-beta, yaaaay https://github.com/The-Waal/The-Wall-Mod
Was wondering if anyone could help with this
and not loading specific modded cards is possible ? i have the sprite sheet but i don't want the ones with the poorly noted numerals to be loaded, is that possible ? (sry pinging you again)
yes, look at the in_pool section for the ranks and suits in the smods docs
aight thanks
how would i add a second joker? (just got my first one made and polished)
with smods.joker at the start or no?
cause if not i may just copy my first joker's code
yes
SMODS.Joker{
-- joker 1
}
SMODS.Joker{
-- joker 2
}
<@&1133519078540185692>
no i was pointing mods to how to add more than 1 joker
shaders are so fucking weird man
how do i make it look more like it's burning
i literally copy pasted a bunch of shit from the example mod
Do you have a SMODS.Sound somewhere?
Im trying to make a new hand but for some reason it is disabling full house and flush house, why wont this work??? 😔
if true then return {} end
if #get_flush(hand) >= 1 then return {} end
if #get_straight(hand) >= 1 then return {} end
local valid = {}
local count1 = 0
local count2 = 0
local count3 = 0
for i = 1, #hand do
local card = hand[i]
local num = card:get_id()
if card.label ~= "Base Card" then
if num == 2 then
count1 = count1 + 1
table.insert(valid, card)
elseif num == 4 then
count2 = count2 + 1
table.insert(valid, card)
elseif num == 7 then
count3 = count3 + 1
table.insert(valid, card)
end
end
end
--if hand[1].base.id == 10 then
-- print("WOOOOOOOOW")
--end
if #valid > 0 and count1 == 1 and count2 == 1 and count3 == 1 then
return {valid}
else
return {}
end
end```
ok wtf am i doing wrong (im pretty sure everythings correct)
play_sound() takes the key of the sound you made as a string, and there shouldn't be a file extension
it should be play_sound("thesillymod_horse", 0.7, 0.5)
dont forget the quotation marks
ok its the same error again?????
it might need to be SMODS.Sound with an uppercase S?
capital S
ye
ok it works! (i did NOT realize it needed to be a capital S)
well
SEMI works apparently
(the crash doesnt happen anymore, but in testing the sound just DOESNT play?)
it may be because im on a continued save
nope
this joker MAY just have to go soundless until i figure out how tf to get the sound to work
Is the sound present when you open the file manually
yup
SMODS.Sound({key = "farts", path = "farts.ogg"})
return {
sound = 'modprefix_farts'
}
this
i WAS using play_sound before
play_sound('modprefix_farts')
play sound also works but needs mod prefix too
And play sound should also work
toga is my prefix as example here.
what i had it set to is in the 2nd image here
for some reason the new hand I made is disabling full house, do you know why this is happening?? (even just returning {} in evaluate still does this :/)
Heya
Is the weight of rarities of jokers the probability that said rarity drops in the shop (W/O the probability that a consumable drops) ?
Yes, after the shop has rolled whether it will spawn a joker, it will roll on the rarity table. After picking a rarity, it will roll for which joker of that rarity
very nice, thanks
ty
Error
Syntax error: game.lua:4: '=' expected near 'Game'
Traceback
[love "callbacks.lua"]:228: in function 'handler'
[C]: at 0x7ff843b42fa0
[C]: in function 'require'
main.lua:16: in main chunk
[C]: in function 'require'
[C]: in function 'xpcall'
[C]: in function 'xpcall'
i did a bad
ive got the same error 4 times
GOT IT
Do I make all UI stuff in 1 single file or in multiple?
multi
And into what would I split them?
when working on a single feature I recommend keeping things in one file until you think it gets big enough to split
multiple files will just make it confusing
Do you have an example for me?
of what
What you would count as too big
whatever you feel like it's too big
Okay
if you start getting lost when looking for stuff then it's too big
And for UI stuff I need to make use of patches?
depends on what you're doing, jokerdisplay is a UI mod that doesn't use a single patch but my other mod uses patches for UI stuff frequently
"UI stuff" is too broad a category
Let's say if I wanted to make extra buttons for cards and maybe change like the things in my mod's menu
is this from your mod
probably old bunco if you have that
Are hooks easy to use/make? I barely used lua before
is 5.4.3d old
idk coding is easy for me
are you using this one https://github.com/jumbocarrot0/Bunco
Do you need to do much for hooking or just a few simple things?
nope thanks vro!
That helps, thank you :)
So I wanted to be silly and tried to create a Blueprint that repeats the left jokers effect multiple times; Well, I learned the hard way that trying to merge the same effect crashes the game. I should've seen that coming 
But my Question is: Any good way of repeating another Jokers effect multiple times?
-# Crashing Code attached
calculate = function(self, card, context)
local copy_effect = nil
-- get left joker effect
for i = 1, #G.jokers.cards do
if G.jokers.cards[i] == card then
if i > 1 then copy_effect = SMODS.blueprint_effect(card, G.jokers.cards[i - 1], context) end
break
end
end
if copy_effect then
-- example: just do 4
local repeats = 4
local merged_hell = {}
for i = 1, repeats do
-- freezes when merging same effect
merged_hell = SMODS.merge_effects( { merged_hell }, { copy_effect or {} } )
end
return merged_hell
else
return nil
end
end
there is an optional feature in SMODS called joker_retrigger that may be more suited to repeating the effects of a joker multiple times
if you still want to do it like a copy then you need to copy the table
tho thats not very straightforward with return tables i think
Hmm.. I see.. I'll make it work (or look into the optional feature) x'3
I am surprised merge_effects doesnt work here
yall how are the docs for randomness
am i blabbing too much
i tend to do so when explaining shit
Wait, how do I check if a joker is clicked, so the buttons appear (like the sell, buy and use buttons)?
It's actually really interesting how it crashes:
If you put the same effect in two times, it hard crashes without warning
Anything above that just freezes the game 
I mean there's already a write up for randomness in the last release, but that seems okay to me
i mean theres gotta be a mention of randomness in the wiki tho
dont want to have to look back and forth from the releases to the actual smods wiki
from the earlier convo about adding stuff to the wiki
it will be in the wiki
I just haven't finished working on the calculation page rewrite
I'm not saying what I already have is perfect though, just it might be helpful to use as a reference
oh wait im dumb
oh no im not dumb
i did make merge_effects so if it doesnt work its because im dumb
is it not that they're putting merged_hell inside a table within merge_effects?
and the copy table too
there's just too many tables, no?
good
no thats fine, the syntax is likeSMODS.merge_effects( { ret1 }, { ret2, ret3 } )
or any number of lists
i just copied merge_lists for that part
Well, if I don't put merged_hell in brackets the game doesn't crash!
... it also only copies the effect once too tho x3
-# ope sorry for the ping :')
at least the text is a calm color
hello, how do i make so theres another card instead of the ace of spades floating on the main menu of the game ?
it's still broken though, right?
could someone do a walkthru with me to get brain storm to run its refusing atm
Just boiling down the Code: This results in the same Hard-Crash:
-# (just make sure there is a Joker to the left ig)
-- Unsafe Code:
local copy_effect = nil
for i = 1, #G.jokers.cards do if G.jokers.cards[i] == card then
copy_effect = SMODS.blueprint_effect(card, G.jokers.cards[i - 1], context) break end end
local merged_hell = SMODS.merge_effects( {}, { copy_effect, copy_effect } )
return merged_hell
I'll skip out on that Joker-Idea for now, don't feel like reading up on the optional Retrigger feature either x3
I've been trying to make a joker that levels up a played hand by how many times it has been played, The level up code with smart_level_up works with a test hand (Pair) but when I try anything relating to the hand played it crashes. I am probably doing something wrong, all I need is like an easier way for it to level up the played hand
(ie if I played a pair 3 times I want it to level up by 3)
do you have the count of how often it's been played?
The one I have works with the level up thing
(G.GAME.hands[context.scoring_name].played)
but removing .played makes it crash so
just put level_up = G.GAME.hands[context.scoring_name].played in your return function
okay nevermind i think i messed something else up that would explain crashing
gonna try some other trial and error bc it worked before with trying "Pair"
does anyone know how to stop check_for_unlock triggering when starting a run?
cause currently it checks before the deck is loaded so it always unlocks as soon as run starts
sorry i had to test it myself so i understood lol
but no it makes sense (although it probably shouldnt work this way), in the second iteration you're adding t to t so it makes a recursive table
eh fair enough ill try that
yo is there a function i can hook to prevent a certain enhancement from being copied?
aight that works, thanks lol
ah that makes sense
the fix would probably be to just copy each value in the return tables and in extra manually in merge_effects
copy_table would probably crash with card objects
oh btw have you tried calling blueprint_effect multiple times and then merging that
i think that makes more sense actually
Meant to actually say: This works!
I know I said I'd give up but .. Idk, didn't wanna x3
Replacing the comment "-- freezes when merging same effect" with a simple copy thingy did the trick
Simple copy thingy in Question:
local shallow_copy = {}
for k, v in pairs(copy_effect) do
shallow_copy[k] = v
end
im glad it worked but you might still wanna try this because some effects are not done in return tables
this might not work with effects that use exfra
Also is there a way to make every card of a specific type vanish? Trying to make a joker that makes a card with a specified seal, but theres a chance the joker and all cards with that seal disappear at the end of the round. Sorta like a gros michel thing but different?
Yep, once again you are right 
Will try that, once sec.
my solution was a shallow copy of everything except for the extra table and then doing a pseudo deep copy of that
but it should be handled from merge_effects side
imo
how do i check outside of using context if the player is in the shop/opening a booster?
Yeah, that works and even with the extra stuff too
Thanks once again, I'm in your Debt 
nvm found it, G.STATE exists and I looked over it
Alright I managed to get the card to give seals at the beginning and still have the chance of vanishing. Is there a way to remove all cards of a specific kind such as seals?
how do i make a ui button play a specific sound
go through each card and if it matches the criteria, destory it
you can probably add play_sound("key") in the button's function
then how mute the og button sound
patch this
ty 🙏
Is there a way to check if it has a seal or would it fall under the has_enhancement umbrella?
i believe its in the cards ability let me check
actually
its just card.seal
I meant if it has a specific seal
card.seal will be a string containing which type of seal if it has one, and it will be nil if the card has no seal
use debugplus, hover over a card with a seal with your mouse, and do eval dp.hovered.seal in the command prompt. dp.hovered gets the card object that you're currently hovering over for debugplus purposes
ah
im dumb lol
TLDR what I want to do is when my joker disappears, I want every playing card with a specified seal to disappear too
this is idk probably atrocious code copied from recreated vanilla jokers but what would I do as scripts like this do nothing
instead of card it should be playing_card
so thats what i missed
ive tried playing card but under a differnet thing so
ill try that rq
no it still keeps the cards
you forgot one card
both
so like this?
yes
alright attempt 2
nope it still keeps the cards.
might be something else tho i found so
imma try
joker keys are formatted as "j_key" for vanilla and "j_[mod's prefix]_key" for modded
in the context or in the create card?
Do lower prioritys for .TOML files load after higher priorities?
both
the lower the number the earlier it loads
and do they load based on mod load order too
i dont think so
lovely doesn't read smods files
okay since that didnt work i lowkey dont know what to do
can you post the whole code, from only that snippet it looks fine
still no work
oh your calculate function is inside add_to_deck
it shouldn't be
mines honestly pasted inside some gros michel script but the script itself works fine so im probably messing it up somewhat just pasting it in there so
all other functions work as intended so
this is probably atrocious code so idk
what's the intended effect
to delete all cards with the "OneSeal" seal from the deck
i get that but when, how, why
turns out im a bonehead
also side note that is not relevant to your issue but the smods examples are somewhat outdated, i recommend checking vanillaremade
I put the destroy thing after the card gets destroyed so
I put it before the destroy seal card command and it works now
weird
when its paced like this
that shouldn't be relevant haha
im going to check myself because if that's true that sounds like an smods bug
might be but who knows
all i gotta say at this poitn for me is if it aint broke dont fix it
bump
unlocked = true,
this string maybe?
can i make an animated texture faster
I cant get my joker to count the cards drawn to hand after the first hand, but it will count initial drawn hand and the cards drawn from second hand on
im trying to make a joker that unlocks if you have 0 hearts in deck
but it triggers before the deck is loaded so it auto unlocks
Oh idk then
Is any SMODS function which fetch 1 item from pool and respect get_weight and in_pool thing?
SMODS.poll_enhancement does what I think you are asking
okay!
im losing my mind, is my lua somehow bugged or i just dont understand something
ur lua is cursed
my luajit is cursed
how
tested will all jit versions, all cursed except vanilla lua 😭
# stops when it can’t find the next number in the index
Is there a context for drawing cards to hand, and where can I get the amount of drawn cards?
Oh wait some of them go last 1, wtf
context.hand_drawn
i thought so too but it actually doesn't
luajit might have some weird implementation of it
This sort of makes sense with how pairs works
It just randomly looks through until it finds one where n+1 is nil
crazy
I wonder how it chooses the values
How do I check the amount of cards drawn to hand?
is there a way to do a figured it out, but god is it a janky implementationcalc_dollar_bonus version of SMODS.blueprint_effect
local function check_stickers(card)
if card:is_eternal() then
card:set_eternal(false)
card.ability.eternaldormant = true
end
if card:is_perishable() then
card:set_perishable(false)
card.ability.perishabledormant = true
end
if card:is_rental() then
card:set_rental(false)
card.ability.rentaldormant = true
end
end
local function reverseOnThatThang(card)
if card.ability then
if card.ability.eternaldormant then
card:set_eternal(true)
card.ability.eternaldormant = nil
end
if card.ability.perishabledormant then
card:set_perishable(true)
card.ability.perishabledormant = nil
end
if card.ability.rentaldormant then
card:set_rental(true)
card.ability.rentaldormant = nil
end
end
end
SMODS.Joker {
key = 'phantom_ruby',
pos = {x=0,y=2},
atlas = CHAR.G.jokeratlas2,
calculate = function(_,_,context)
if context.card_added then
check_stickers(context.card)
end
end,
remove_from_deck = function()
for i=1, #G.jokers.cards do
reverseOnThatThang(G.jokers.cards[i])
end
end,
add_to_deck = function()
for i=1, #G.jokers.cards do
check_stickers(G.jokers.cards[i])
end
end
}
anyone got an idea as to why this makes my game crash on startuo
#context.hand_drawn
Is there any way I could swap out an atlas for a deck skin on the fly?
I wanna make my own deck skin change coloring if Smeared Joker is present
which is called first, context.round_eval or calc_dollar_bonus?
if not context.blueprint then
if card.ability.extra.jiggle > 0 then
local eval = function() return card.ability.extra.jiggle > 0 and not G.RESET_JIGGLES end
juice_card_until(card, eval, true)
end
end
anyone know why the card jiggles much more erratically then it should? 'jiggle' gets set to 1 whenever the card is meant to be active, similarly to loyalty card
if i have to guess your card is running multiple juice_card_until
Hi, I'm new to lua, modding in general, everything really 😅
If I'm understanding things correctly I'm wondering if the following would effectively disable the ability to play High Card and make it not show up on the list of hands. Or if there is another simpler or better way to do so.
{
visible = false,
evaluate = function(parts, hand)
return {},
}) ```
https://github.com/LuaJIT/LuaJIT/issues/527 apparently # operator on gapped table (table with nils) is undefined behavior, til
i would access the options table with card.ability.extra.options right?
assuming card is the joker/consumable with the config then yeah
guys i need help my joker does not appear in the game
hi, i've been looking at the source code and have noticed the change_gamespeed and the array intilization of options for speed. Is it possible to call the change_gamespeed in a lua file?
I'm new to this server. Would this be the right channel for getting help with a Malverk Resource Pack I've been working on?
if its not crashing but its not in the collection, then does the joker have a loc_txt or a localization entry?
im getting an error saying that the table is a nil value when im trying to loop through it
(3rd line of code here)
this would be the right place, unfortunately im pretty unfamiliar with how to set up malverk stuff
loc_txt? (dont laugh is my first time coding)
nah its fine
can i see what ur loc_txt looks like
Gotcha, thank you. I have two problems for anyone who knows anything.
can i see the entire function just so i have more context
whats ur mod prefix
sj
calculate = function(self, card, context)
if context.selling_self and not card.debuff then
G.E_MANAGER:add_event(Event({
func = function()
local card_options = card.ability.extra.options
local current_options = {}
for i=0, #card.ability.extra.options do
if not key_in_table(G.Jokers, card_options[i]) then
current_options.insert(card_options[i])
end
end
if not #current_options then
local key = pseudorandom_element(card.ability.extra.options, pseudoseed('treasurebag'))
else
local key = pseudorandom_element(current_options, pseudoseed('treasurebag'))
end
SMODS.add_card({ key = key, type = 'Joker' })
play_sound('magic_crumple2', 0.9 + math.random() * 0.1, 0.8)
play_sound('negative', 1.2 + math.random() * 0.1, 0.4)
return true
end
}))
end
end
its G.jokers, not G.Jokers
thanks
also, depending on what your key_in_table does, G.jokers.cards is the table that includes the cards not G.jokers
the localization key would be j_sj_freddy
its not getting to that line of code, so i wouldnt worry abt it, it just returns true if the key is in a card in the table you give it
also if its not showing up in the collection then can i see ur joker code just to be sure
theres prob something missing
the atlas size is wrong
if im using lovely and lua, how would i go about accessing the change_gamespeed function, if possible? Can I call something like G.FUNCS.change_gamespeed ?
like the px and py
yes
question: what would u need access to the function for
what is the size?
just trying to speed up my game more than it already is
71 95
i must have misinerpreted the error, the line it said the error was on wasnt the one with G.Jokers, but changing it to the proper thing fixed it anyways, thanks!
anything else?
i dont have access to source code rn cuz im on phone
but afaik the function that handles it in vanilla doesnt go past 4x
there are other mods that handle speeds past x8 tho
yeah i looked at some of them but was hoping to make my own as my first mod. never modded a game before.
i have this one idk if you mean this or another thing
i dont think that works?
my lua file of the joker is not named "jokersfreddy.lua" is just freddy.lua
like this
idk if theres something wrong whit that but im mentioning anyways
yo btw joker should be capitalized in ur localization file
IT EVEN WORKS PERFECTLY
that way the text will show up
alr
o my bro
i spent 7 hours on just one
does it get better or worse at this point
lol
itll be a lot faster as u make more
you get used to what you need
also did text appear on ur joker?
Not yet i didnt puta anything on the description yet
But im happy, it ven works perfectly, no bugs no nothing
how would i make a global game variable that gets saved when the game is closed?
Unlock hand by paying 2.99
what do mod_mult() and mod_chips() do?
I'm using Malverk to make a resource pack, does anyone know how to change the undiscovered Joker sprite? Nothing I have done seems to work.
is just the score but with mods scores, like how talisman use BigNum
You can’t
Weird, but thank you for letting me know!
Also, I meant to also ask, can you change the intro screen Joker (the one that appears when you open the game)?
you can, mods like Cryptid does that, but idk how
You can but Malverk currently loads after that so you’d need to do it a different way
anyone know how to get brainstorm mod working?
no mod i use seems to activate i have steammodded and lovely which are the only requirements for brain storm
and i have talismen for cryptid but that wont work either
And if I try to unzip any file blue screen on start up code handler
Thank you, you've been alot of help!
how come it says "ERROR" in my booster pack?
how to check a hand for only a pair, not for contain a pair?
context.scoring_name == "Pair"
I just noticed it says priority under Mods. What is it for? The loading priority?
yes
hey folks, i've been thinking about making a sort of "bot" that can play balatro on its own, and maybe win a run? one can dream, but anyway
my first idea is to make it as a mod, but i have zero previous experience with writing mods for any game, let alone balatro, and i'm not entirely sure if smods provides the apis necessary for a mod to be able to play the game entirely on its own
would this be feasible with smods? or would i have to find some other way to programmatically play the game?
i do see there's some prior art for this here, but i haven't seen if that provides exactly what i want yet
Why would it need to be changed?
also it doesn't seem to have a license so i can't actually use it...
if you have an API mod you usually want it to load first and if you have some crossmod content where you need some other mod loaded first then you want it to load later
well i guess the fact that that project exists is enough to let me know a mod should work for this
Yeah I don't think smods provides any functionality that would help with this but lua is pretty flexible and you can basically control anything in the game so it shouldn't be that hard to accomplish
mhm ok
hopefully i like lua, haven't done much coding in it
ok actually i'll just start setting it up now, i'm a litte burnt out from my other projects
ok probably before that i need to do a deep dive into game theory :D
Hello! Me again :3
Added "Bunco" to my ever-growing mod-podge, and got this when launching before the loading error appeared. Could anyone provide me a fix or context so I can try to debug this?
are you using this one https://github.com/jumbocarrot0/Bunco
also #⚙・modding-general is for issues when playing with mods
that did it; I was running an older version that linked directly to a release rather than the repo. Thanks! ^^
how do i make my number look whit red colour
cause is not working
and i tried the +#1#
didnt work either
mult lowercase
do editions need a calculate function? havent done one til now and it's not triggering anything
I think so
dont mind the horrible amazing music
was going off the example editions mod in the smods examples repo so that might be out of date
guess i'll try it
think it works now thx
Any good documentation on how to make proper blinds/decks? Been trying to find some but come up empty handed.
how can i get a selled card cost value?
Card references the joker not the card being sold
Context.other_card ?
doesn't work
context.card
Is this a thing ?
Vanilla remade wiki is evolution?
usually other_card is for scoring and card is for non-scoring
this is the smods wiki
I think i checked the wiki twice
You always help out
thanks for trying to help
tryna do an info card for my custom edition in a joker but it keeps crashing, tried with and without the mod prefix and it keeps happening - am i missing something?
is there a way to change the ability of an edition based on the card type it's on, or ban it from appearing on certain card types?
also, is there a way to change something when a Joker with that edition is taken, and when it's sold or destroyed or loses the edition?
this is for an edition that adds 1 consumable slot, but adds 1 discard if on a playing card instead
Missing mod prefix in the edition key
might be
Variables missing though
Since that way of adding tooltips doesnt use the default config values automatically
Yes, you would check the card type in the calculate function.
cheers :D
wait, can i do that in loc_vars?
can someone explain to me what's wrong ? (it's a smods shader)
change edition to self.config
Hello chat! i have no absolute idea how do i fix this bug.
what caused the crash?
Yes.
one of my jokers trying to score or multiply
can i see your code?
which joker was it? can i just see its code?
replace:
return {
chip_mod = card.ability.extra.chips,
message = card.ability.extra.chips
}```
with:
`return { chips = card.ability.extra.chips }`
ok yeah that makes sense
replace:
return {
message = card.ability.extra.Xmult,
Xmult_mod = card.ability.extra.Xmult
}```
with:
`return { xmult = card.ability.extra.Xmult }`
alright lemme test
oh ya, question
what's the name of the edition card area, in the collection?
np ^^
It's something in G.your_collection I think.
(bump, add_to_deck didn't seem to work)
trying on_apply and on_remove
No, that's when the edition is applied using Card:set_edition.
So it would happen in the shop.
You would probably have to hook Card:add_to_deck and Card:remove_from_deck
now it says that
remove the card.
you also forgot to change it in x_chips
👍
like that ?
if so, I get the same error
do what N' suggested
why my atlas isnt working?
it works thanks
np
did you read the docs
nope, why?
i thought that was already includeed in the code
Blind atlases must be animated
how i implement it?
how to add custom badges using generate_card_ui
i have another one TwT
it's from Balatro's files
hiya! my conditions don't seem to be applying. can you see why?
Firstly, card is not a valid input of those functions.
literally wait for the new smods release
I am actually working on this right now
card.states.drag.is iirc
Is this a boolean ?
yes
in calculate it wont work because it's not a context
Ohhh
How can i make it work then
Call a function
?
Make the joker play sound when dragged
i think you need to hook Moveable:drag()
How so
Is there documentation or something
Sorry N i’m not good at coding 😭
Sob
well, in the meantime, it kind of works ^^;
Thanks 🥺
😮
ignore the missing slot there
i'm gonna wait for the update because this is really jank

can anyone help me ?
Yay salty ghost now have gool old avatar
any sites/reps which just have the info like all values you can change in card.children.center or card or get from G. ?
because i modify card scale, but it's pivot is at top left
so i need to change it's position too
but i don't know how this position is actually called in code
not really there's no much vanilla documentation
there's this for G
https://github.com/Steamodded/Wiki/pull/30
for card.children.center i would look at sprite.lua
apparently the position is VT
center.T.x and center.T.y probably works too
it only works when dragging the card
weird
i'd like to use the draw function of my edition to change the shader it uses, depending on the card it's being drawn on. is there a better way? what code do i add to it?
Oh damn that's a thing?
That's wild
I really need to know all the codes
It’s niche but yeah it does exist
it moves now. hell yeah.
Wobble
does anyone know what's wrong with this? I'm trying to make a deck that starts with the astronomer joker
I’m doing quite alright
why are you using the vremade joker?
^ the key should just be j_astronomer i think
^^^^^^
okay i'll try that
i should remove all the vremade prefixes in other files
Nice nice
Probably a good idea
it worked! thanks @long sun @frosty rampart
npnpnp!
you could change them to SMODS.current_mod.prefix .. 'blablabla'
people could just copy and paste that I think
oh that's a good idea
but i was more referring to decks using vremade jokers instead of vanilla ones or tarots using vremade enhancements etc
try asking in #⚙・modding-general
oh mb wrong one
download talisman release
okay ty
it worked
How do I make it so where they can buy a card no matter the cost
Like you have 5 bucks but the item is 10
😭
I’m so smart
Hook G.FUNCS.can_buy
what the hell does this mean 😭
why does this:
loc_vars = function(self, info_queue, card)
local numerator, denominator = SMODS.get_probability_vars(card, 1, card.ability.extra.odds, 'tjr_rex_extinct' .. G.GAME.round_resets.ante)
return { vars = { card.ability.extra.chips_bonus, card.ability.extra.mult_bonus, numerator, denominator } }
end
crash the game when hovering the card in a round, but not in the modlist/collection? my other jokers with odds dont have this problem
unless im blind
what's the crash
nvm, it was another joker that crashed the game when hovering this one for some reason
hovering calls the new probability context so it makes sense
You would have to change the button manually.
I had a check if a card is a stone card at the top level together with the context check, so it tried to read card which was nil
but i have no idea why it did not crash in the collection
This sounds like a quantum enhancements crash
Hello, can someone help me please ? I'm trying to install the cryptid mod
Download talisman from releases
Can I ask what instructions/install method you followed?
Cryptid mod's ones
Can you link them?
Has anyone experienced memory leak issues while developing their mod?
I think I know where the problem is but I have no clue on how to actually fix it
is there like a globally agreed upon way to specify that a joker is a food joker
can be eaten
i mean internally 😭
at least somewhat, yes. here's what paperback does:
if not SMODS.ObjectTypes.Food then
SMODS.ObjectType {
key = 'Food',
default = 'j_egg',
cards = copy_table(PB_UTIL.vanilla_food),
}
end
this checks if the "Food" ObjectType already exists, and if it doesn't, it creates it and adds all the vanilla food jokers to it (PB_UTIL.vanilla_food is a table defined elsewhere that contains the keys for all the vanilla food jokers).
then, you just add this to any custom jokers you want to count as a food joker: pools = { Food = true },
it's highly recommended to do the check because cryptid doesn't do the check lmao, so it'll collide if you also don't do the check
does the table look like "key" or key = true
the vanilla_food table? key = true
also don't forget that seltzer's key is j_selzer
local thunk™
Why do I get this error after opening the tab I made in the menu of my mod?
somewhere you have a variable named node as a number when it should be a table
i think
breaking my head here, I'm trying to make a joker to modify the propriety of a ench card, which has a property to "debuff" after a certain amount of uses, I don't know if I have to make a newer funtion to work it out
SMODS.Joker {
key = "chica",
atlas = 'Joker',
pos = { x = 5, y = 8 },
soul_pos = { x = 5, y = 9 },
blueprint_compat = false,
rarity = 4,
cost = 20,
config = { extra = { hands_left = 10 } },
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = { key = "fnaf_WIP", set = "Other" }
info_queue[#info_queue + 1] = { key = "fnaf_sprite_WIP", set = "Other" }
return { vars = { card.ability.extra.hands_left } }
end,
}```
SMODS.Enhancement {
key = 'pizza',
atlas = 'Enhancers',
pos = { x = 0, y = 0 },
config = { bonus = 200, extra = {hands_left = 5}},
replace_base_card = true,
no_rank = true,
no_suit = true,
always_scores = true,
shatters = true,
loc_vars = function(self, info_queue, card)
local chica_check = false
if SMODS.find_card('j_fnaf_chica') and chica_check == false then
card.ability.extra.hands_left = 15
chica_check = true
end
info_queue[#info_queue + 1] = {key = "fnaf_sprite_WIP", set = "Other"}
return { vars = { card.ability.bonus, card.ability.extra.hands_left} }
end,
calculate = function(self, card, context)
if context.main_scoring and context.cardarea == G.play then
if card.ability.extra.hands_left > 0 then
card.ability.extra.hands_left = card.ability.extra.hands_left - 1
if card.ability.extra.hands_left == 0 then
card.ability.bonus = 0
return { message = 'Expired', colour = G.C.FILTER }
end
end
end
end,
}```
I have nothing named node and engine/ui.lua is not my own file
Thank you :3
the lsp at the corner: https://github.com/frostice482/balatro-lsp/blob/master/game/game.lua
it still doesnt count as doc though lol, imo
Dude, I forgot one {}... TwT
We love the UI 👀
yeah ui construction is terrifying lol
how do i make a joker change of slot when blind is selected?
and also not making it able to move
bumping this to see if I get any help
i have no idea im new to this
bro, don't worry about it, thanks for the help anyways
SMODS.Enhancement {
key = 'pizza',
atlas = 'Enhancers',
pos = { x = 0, y = 0 },
config = { bonus = 200, extra = {hands_left = 5}},
replace_base_card = true,
no_rank = true,
no_suit = true,
always_scores = true,
shatters = true,
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = {key = "fnaf_sprite_WIP", set = "Other"}
return { vars = { card.ability.bonus, card.ability.extra.hands_left} }
end,
calculate = function(self, card, context)
if context.main_scoring and context.cardarea == G.play then
if card.ability.extra.hands_left > 0 then
card.ability.extra.hands_left = card.ability.extra.hands_left - 1
elseif card.ability.extra.hands_left <= 0 then
SMODS.debuff_card(card, true, 'source')
return { message = 'Expired' }
end
end
end,
set_ability = function(self, card, initial, delay_sprites)
if next(SMODS.find_card('j_fnaf_chica')) then
card.ability.extra.hands_left = 15
end
end
}
Thank you, didn't needed to modify the code but thank you anyway
are back objects ever removed in the vanilla game?
wym
How do I change the font size on a button?
-# pls tell me it's simple...
Is smods.back or G.back objects ever removed during vanilla gameplay
Nvm, found it :D
no I guess
Don’t tell me, tell the other guy lol
no
huh
they are not removed in the vanilla game
Best way to check if a mod's loaded?
next(SMODS.find_mod("modid"))
Thx!
anyone?
to make it change slot just reorder G.jokers.cards
local joker_at_desired_pos = G.jokers.cards[desired_pos] = G.jokers.cards[joker_pos]
G.jokers.cards[joker_pos] = joker_at_desired_pos```
to pin it idk, look at what the pinned sticker does
damn straight to the code lol
alr
chat how do i change the required blind score
i remember you have to do an extra line to change it visually as well as changing the actual value internally
is there a way i can change the card destruction sound? like say, during context.destroy_card i return a sound argument and that changes the card destroy sound
you could just play a louder sound when a card is destroyed
and drown out the quieter sound
hook remove_from_deck and use play_sound() to play an smods sound
:)
there might be a way to change the internal sound with like malverk or smthn
where do i put it?
joker.area:remove_card(joker)
new_area:emplace(joker)
i dont think so, you would need hook start_dissolve i think

Was doing it in the wrong order
now works
But my problem persists, it seems that my new area, for some reason, has a memory leak when moving the jokers
no
(again lol)

im trying to make a joker that moves in to another joker slot when the blind is selected
but idk how
lol
apply the pinned sticker to a joker to move it to the leftmost and then clear it
that would let you manipulate the positions of jokers without any table shenanigans
how do i do that?
¯_(ツ)_/¯
https://docs.google.com/spreadsheets/d/16DAXw2VjLc3ApcH0mp90yCuJ6QC-44GDk60xKWzVOKI/edit?gid=692733071#gid=692733071 I'm still working on it. If this is the wrong channel to post it in, then I'll move. And before you ask, yes, I am aware that someone has already made a Balatro calculator. This one is being made to calculate both vanilla Balatro and modded Balatro. Right now, I need a spreadsheet formula that can show the possible combinations of cards so it can then calculate what the highest scoring hand is.
yk you need to add like +50k things right?
Yes.
good luck with that.....
mininlla
help 🙏
{
n = G.UIT.R,
config = { align = "cm", padding = 0.2 },
nodes = {
showingList and SMODS.GUI.createOptionSelector({label = "", scale = 0.8, options = pageOptions, opt_callback = 'update_mod_list', no_pips = true, current_option = currentPage}) or nil,
UIBox_button({
minw = 3,
button = "enable_all_mods",
label = {"Enable All Mods"},
colour = G.C.GREEN,
scale = 0.6
})}
},
forgive me for my potential stupidity but why dont these appear on the same row?
everything ive tried thus far has the same result and im feeling braindead
Is there a built-in way to have any calculations that do run when an object is debuffed? 🤔
you want
column = {
row = {
-- page
},
row = {
-- enable
}
}
you can hook card:can_calculate maybe
thought so
do any wrapper functions exist for this or should i just make one in this part rq
Yeah, I guess that's the way to go, haha. I wonder what the best approach is. To just add a new context that runs once on debuffed objects, or give counters their own debuff_check function or something
im very lazy and tired 😭
no haha
how to get the current hand size
It’s in G.hand.config i believe
Mhm
yes
Hey N
hi
I think I might just see if I can add a new context that runs when cards are debuffed, and just pass the normal context's along in a sub table 🤔
{
n = G.UIT.R,
config = { align = "cm", padding = 0.2 },
nodes = {col({
row({showingList and SMODS.GUI.createOptionSelector({label = "", scale = 0.8, options = pageOptions, opt_callback = 'update_mod_list', no_pips = true, current_option = currentPage}) or nil}),
row({UIBox_button({
minw = 3,
button = "enable_all_mods",
label = {"Enable All Mods"},
colour = G.C.GREEN,
scale = 0.6
})
})
})
}
}
dont think it's any different?
do i need to swap anything around (the helper functions just return the node wrapped in a column or row respectively)
that makes sense
It’s just like Html 😭
i promise im more self sufficient than this 😭
Lmao
How’s ui coding going
this looks a bit jank but hell yeah
I hope my code isn’t all over the place
my ui coding is going bad
bro i cannot do it, i looked at the whole wiki and i cant pls help
im trying to add a cardarea to a ui without destroying it when it disappears
Progress has been made
Development resumes tomorrow
Like aikoyori’s ?
whats that one guy with the boulder
sisyphus
which
oh i never played playbook
Basically it’s a joker with a card area that appears when you highlight it and disappears when you don’t
And it counts in scoring
If that’s what you’re looking for
yeah but it needs to specifically be the same cardarea every time, not a copy of it
i have a couple like that but they are copies when they display
i think theres a great irony in telling the creator of vanillaremade to read code haha
wait what
It’s always the other way around
Lmao
what what
that makes it hard to align in different screen sizes
True
thats the first thing i tried tho
same problem
hello! I'm new to balatro modding, and I'm trying to get started with a fairly complicated, though still simple joker that detects if you have 4 or more hands, and gives you a 3x mult. Can anyone tell me how I can do this?
i want to specifically draw it inside the ui nodes so i dont have to worry about aligning it
G.GAME.current_round.hands_left is how many hands you have left
alright thanks
new question, how should these be aligned? having a hard time getting vertical center alignment, wondering if its necessary
Add some padding
It’s just annoying to align different ui elements together
I would just move the page to another row
Down
And call it a day

im not going to just "call it a day" on smth like this anyway
Aikoyori’s fault
you say that but i think its one of the reasons yours didnt get added 😭
everything in less places works better
maybe im a perfectionist
you'll wanna see how the buttons are set up by the code and match their padding
Idk i study ui design and it feels wrong for me
The prefab buttons and tabs are very handy, but they definitely make it annoying to match things, as you don't get to see how they've been set up
You can definitely accidentally click enable all when trying to set flip between pages
maybe, however i want to make sure whatever i add makes it in
for sure
I believe in you

I would’ve wanted to assist but i’m on phone
Also should probably put it to charge i’m on 3%

definitely 😭
i think i'll do the base joker mechanics and then try and do the codependency of them
so i program their basic function and scaling, test it out, then make them try to buff each other
ts frying me, why does putting offset on the cycle do absolutely nothing 😭
im going to bed after this because my brain isnt working
is there a way i could make a card play a sound when you hover over it
i know how to play sounds
but i don't know how i would detect hovering
hook Card:hover
how do i put a custom gradient into the {C:color}
if you made it with smods gradients just do {C:modprefix_key}
hi sleepy
How to call custom context?
y'all know how i can make a joker choose a selected rank of card, store it as a variable, and change it every round? i'm lost
SMODS.calculate_context{ context_name = value }
ok
is there an easy way to make the background move faster
i see. thank you
i don't know why i didn't consider mimicing VRemade mail-in rebate
it's not like making a unique variable separate from mail-in rebate would be a challenge. it would just need a different name.
Why does the text push the button up like this?
n = G.UIT.R, config = {
align = "cm",
colour = G.C.BLACK,
padding = 0.1,
h = 1,
w = width / 2,
},
nodes = {
{
n = G.UIT.T, config = {
text = "CONSUMABLES",
colour = G.C.RED,
scale = 0.5,
vert = true
},
},
UIBox_button({
colour = G.C.CSTORM.CON_BUTTON,
minw = 3,
minh = 3,
button = "cstorm_consumables",
label = { localize('k_cstorm_consumables') }
}),
}
},```
that's funny as hell
Sorry for the extreme code wall😅
only PC modding is supported as per #📜・modding-rules rule 4
-# if someone replies, pls ping me
can you animate the soul_pos like you can the regular pos of a card
Sorry, I didn't read the rules
I don't have a PC lol
hiya! why is this evaluate function for my hand only scoring the 2, and not the 7, 6, 3?
Are you sure about what the SMODS.merge_lists returns
it's said on the wiki that it can be used for exactly this
i think you need to pass the tables to merge_lists as regular parameters, not in a table itself
(so i.e. replace SMODS.merge_lists{...} with SMODS.merge_lists(...), with parentheses instead of braces)
I'm intrested in making a mod and am very lost as to how I start off, I have a general idea as to how the mods work after looking at some example mods, but don't know how to implement it file wise, can somebody help please
i tried that, but the hand no longer evaluates
it doesn't show that the hand is selected
no yea never mind i read the description for merge_lists more closely
bump
What happens if you print your merge lists before hand?
