#đ»ă»modding-dev
1 messages · Page 94 of 1
Okay, so it was just the .wav files being too old apparently to understand... but having them in a subfolder works with spaces too.
okay small problem
every info queue is appearing on the same side
and because of the spacing, size of each box and how many there are, they're nigh unreadable in the collection
at least half of them are
oh god I have to add info queues for negative and eternal too
and the stake sticker đ that's 11
do you actually need that many?
yes
I don't wanna make an almanac-level joker description
i want it to be like chocolate die in cryptid
there are 8 different effects here and negative and eternal are involved
as well as splash but honestly if you have my mod downloaded do you really need the info queue for it
i could probably cut negative and eternal, most people know what those are
but the other 8 I do need all of them yes
maybe i just need more line breaks
ight merged this and a buncha other PRs, surely nothing will break
How big are joker sprites?
The width is 71 and the height is 95, it's considered 69x93 for usable design space since there's a one pixel border on all sides of any card.
I see, ty!
Hopefully someone here is smart enough to help đ
Trying to do custom challenges and I have this template, how would I go about implementing this into a mod?
Why is it acting up now?
https://youtu.be/CuWfgiwI73Q the fiest 22 minutes of this video are probably helpful for people. Not sure exactly if it's that helpful for someone with no previous programming knowledge
Ok, so maybe not exactly 1000 seconds, but Fireship doesn't stick to exactly 100 seconds either!!
I mentioned my course from boot dev, which you can check out here: https://boot.dev/teej
All notes are here: https://github.com/tjdevries/advent-of-nvim/blob/master/03 - Lua Crash Course/03 - Lua Crash Course.md
Useful for Neovim,...
Can't see the error but orbital tag crashes if spawned without a blind so it can generate its hand. Probably have to do something like https://github.com/WilsontheWolf/DebugPlus/blob/master/core.lua#L320
lemme try looking at it in game then
well... it still crashes
Where?
the blue one after text
oh ok
Let me get to my PC to read the error
maybe ability needs to be config?
(G.P_TAGS['tag_skip'].ability.orbital_hand == '['..localize('k_poker_hand')..']') and G.P_TAGS['tag_skip'].ability.orbital_hand or localize(G.P_TAGS['tag_skip'].ability.orbital_hand, 'poker_hands'), G.P_TAGS['tag_skip'].config.levels}}
That's 562
it looks like the center for a tag doesn't have an ability
Btw this is in the official balatro tag.lua
(self.ability.orbital_hand == '['..localize('k_poker_hand')..']') and self.ability.orbital_hand or localize(self.ability.orbital_hand, 'poker_hands'), self.config.levels}
well self is probably a tag not a center
oh
wait i see possibly the problem
may have copied the wrong tag
I had tag_skip instead of tag_orbital
and it still crashes
it looks like the center for a tag doesn't have an ability
but it does. it's literally part of the code of orbital tag
thats a tag not a center
thats not a tag object
I mightve missed it, but in case its actually there:
Is there a section in the steammodded wiki on how to create custom challenges? Is there a way to learn how in general?
it's not documented but you can look at others' code
Yeah you can take a look at how SMODS handles a challenge and how other people use it https://github.com/Steamopollys/Steamodded/blob/b233b1931c951d1aebe3ca89fa75c5659dd5f3de/core/game_object.lua#L2502
I think cryptid makes some challenges
this is so complicated for me âčïž
Okie
I would also recommend looking at the base game's challenges.lua file to see how the base challenges work too
Itâs not really creating them thats the problem, itâs more just actually implementing them and actually being able to play them thats giving me trouble
You're not getting what it's supposed to do
This
I just want the variable from the orbital tag to use in the description
This was said outcome at the time
well the orbital tag doesn't store the hand it has in it's config
cause its random
then what do I do then?
what are you trying to do>
Okay so you know Orbital Tag's description
Trying to put that on the card because I really don't want to just put "Creates X Tag"
okay so just pass the '['..localize('k_poker_hand')..']' as the variable
well you're never going to know the hand as it doesn't exist so you don't need to check it
you can know the hand if you want
well theres no tag to get it from
there's a reason the rng functions support prediction
Should i just put Poker Hand for this one because y'know... it's a card
thats only if you spawn it immediatly
ah
you could store the poker hand and then do sometibg to force the tag to keep it when you spawn it but thats a bit more work
I'm thinking of just replacing it to [Poker Hand] Like when it's null
ya and that fucks with seeded stuff anyways
meh you can do it and pass it off as a design thing
didn't want to make it predictable
Sill causing me issues I still can't get a working version
Especially working with multiple
hey when I tried running my mod I got an error and don't know where it's from
May someone help me figure it out
I see
never mind, I don't see aren't you supposed to put a } at the end to close SMODS.Joker?
All {'s need to have a matching }
I belive I did unless I can't find it
is the end at line 59 not the end of the calculation
no thats the end for the if statment
so put a second end after that?
yes
wouldn't I also need and 'end' after if context.after
that one has one
ok so just 1 end and the final } for SMODS.Joker?
probably
alright I'm going to try it I'll probably write back if i still have a problem
Ok, so now I fix the problem syntax but now there is a null error
whats on line 47
the xmult isn't defined
isn't it defined in line 23-26 config = { extra = { Xmult = 1, Xmult_gain = 1 } }, loc_vars = function(self, info_queue, card) return { vars = { card.ability.extra.Xmult, card.ability.extra.Xmult_gain } } end,
it's case sensitive
so it need to be capital?
or lowercase?
got another error saying index field 'start' (a nil value)
what's on line 40? also why is your steamodded 4 months out of date?
yall is my mod haunted
i swear i didnt do anything with this
i cant replicate it
i dont know why it happens
i do not have any lovely patches in my mod yet
i mean its different for me since i added a few jokers
so no not really
but i didnt change anything about pokerhands or neon prism or selling cards
and i dont think i ever changed anything about pokerhands anyways
Get the user to send their mod list. Could be another mod or a conflict of some sort
Trying to run the pokermon mod but it keeps giving me this crash, can someone help me please?
Is the mod nested?
Meaning? sorry I'm pretty new to this
The mod folder, when you open it is it just another folder. If it is, drag the folder inside that one into your mods
Then I would ask here https://discord.com/channels/1116389027176787968/1292971421349445785
Do you have steamodded?
yes and lovely installed. I have three more mods that are working fine
thank you for your help
Is steamodded nested?
I "injected" steamodded
Old version
oh, that's probably it
well I did the other way since I had a backup with it already but now the game starts and crashes as soon as I clicked play in new run lol
found out what the new problem was. It was conflicting with another mod I had installed
Might be a memory leak...
known issue
occurs with tmj if you scroll hard enough
im not watching the whole 1 minute video so i don't know if you figured out that entering a run fixes the issue
Planned fix?
i mean, who's spamming the next button and complaining for lagg? ._.
probably not, it's inconsequential
ill look into it if i get bored
I think on lower end machines it could be bad
i disagree
Literally doubles memory usage. That's bad?
^
âDoing this random thing that no one normal would ever do could cause issues on lower end machinesâ
Donât do it then
How do you know this extreme of the issue isn't affecting the game in other parts
I mean it's likely just a galdur issue
This is only showing it off obviously, it probably is causing atleast some perceptable lag on lower end machines with big decks
Also if it is affecting other parts of the game we would notice cause we do have people on low end machines who would report if their fps dropped significantly
I doubt it's a signifcant drop, but I mean it's atleast something we should maybe look into?
Iâm also pretty sure that I patched out the galdur memory leak but I could be mistaken
Like maybe it's low priority but ignoring the issue I think is counter-productive
But if it's not percieved by others then it's fine
I mean if there is somewhere else that is creating and destroying cards like crazy in the normal game let me know and I can take a look but also I'm not going to go try to debug some issue with a specific mod that is only noticable by someone doing something very much out of the oridinary that is only possible due to that specific mod
Fair
destroying cards in general
as i said this happens with tmj
it's not a vanilla bug though
if i coincidentally made the same mistake as eremel and we both just have the same memory leak then oh well but i think it's just a main menu thing
what if i wanted to change the base game joker vars? do i just use card.? orrr
but it's inconsequential either way
Intresrint
I think it's a vanilla issue though with how it handles removing items right?
Whatâs the question
how exactly do i change the config (i figured i didn't need the loc_vars)
Indeed you can just pass the new config
The last boolean can be either true or false
Depending on whether you want it to display a badge or not
IIRC
so if true it would just display the new config on the joker?
Either way it would replace the config
Itâs just if it displays a badge or not I believe
hmm aight
yeah I looked into this at one point
iirc some list of game objects only keeps increasing
(aka some game objects arent getting cleaned properly)
hmm, smth ain't right (i put the increase to $5
Check if the text uses loc_vars or if itâs hardcoded
Also see if another mod also doesnât touch it
Although there is a badge. Is that your modâs?
did you load a save from before you changed it?
No
oh now i know what u mean, ye, working on a new mod
hmm
sad i cannot take ownership while in run
:I
welp, thats too bad, i do now know how to take ownership of a joker, so wasn't for nothin :D
https://www.balaui.dev/joker
This is helpful for formatting how it will look ingame
I know, but that was a take ownership, smth I've only did.. idk once before (before i actually started modding normally)
just updated steammodded and now my json header isn't recognized?
[SMODS _ "loader/loader.lua"]:420: [SMODS MintysSillyMod "MintysSillyMod.lua"]:163: '}' expected (to close '{' at line 162) near '='
... but why? am i stupid?
calculate = function(self, card, context)
if context.joker_main and context.scoring_hand and card.ability.extra.status == 'Active' then
local faces = 0
for i = 1, #context.scoring_hand do
if context.scoring_hand[i]:is_face() then
faces = 1
end
end
if faces == 1 then
return { --Line 162
card.ability.extra.status = 'Inactive', --Why is a } expected here?
message = 'Stopped!',
colour = G.C.MONEY,
card = card,
} --Why is this bracket not good enough?
end
end
we made some changes something probably broke
check logs
that name doesn't work in an table
do you mean that 'status' is a reserved word and i should rename my variable, or do you mean something else
no I'm saying card.ability.extra.status doesn't work as key
or well it might work but you would need to wrap it in [""]
Probably uou don't want it in the table at all
oh, the return table
took me a moment to connect that dot
can you tell i'm running on three hours of sleep
now it's doing some really incomprehensible stuff
- intended behavior: at end of round, create a random spectral card if no face cards were played that round (must have room)
- observed behavior: at end of round, create a random spectral card if no face cards were played that round (must have room), then also create a random spectral card if any consumable card is possessed regardless of whether face cards were played (must have room), then if no consumables are possessed crash with
'for' limit must be a number
i copied this code right out of seance, i have no idea where this extra behavior is coming from
if context.end_of_round and not context.blueprint then
if card.ability.extra.status == 'Active' then
if #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit then
G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
G.E_MANAGER:add_event(Event({
trigger = 'before',
delay = 0.0,
func = (function()
local card = create_card('Spectral',G.consumeables, nil, nil, nil, nil, nil, 'sea')
card:add_to_deck()
G.consumeables:emplace(card)
G.GAME.consumeable_buffer = 0
return true
end)}))
return {
message = localize('k_plus_spectral'),
colour = G.C.SECONDARY_SET.Spectral,
card = card
}
end
else
card.ability.extra.status = 'Active'
return {
message = localize('k_reset'),
card = card
}
end
end
G.start.dissolve(card2) and I didn't know there was an update
I'm using 1.0.0 Alpha is there a newer version then that one?
1.0.0~ALPHA-0812d is indeed not the newest version
it's in the name, alpha versions are in-development and usually get frequent updates
but definitely nowhere close to no updates in 4 months
for the actual error, that's just not a thing. I'm guessing you wanted to use Card:start_dissolve?
is there anything i can do to have pre_discard return this table? the ability works part works fine just the return doesn't seem to return, the return works with context.before
card_eval_status_text
Is that for destroying a card after it gets play
đ or SMODS.eval_this
that does indeed destroy a card when it's called
it'll give you ghost cards in the deck though if you call it carelessly
thank you both
we do love the inconsistencies of the code tower that is the calculate function
pre_discard has exactly one vanilla use, so i guess there was no reason to have return values do anything
so would my code look like
---check for hearts suit, card2 is the value in the current loop
if card2:is_suit("Hearts") then
---destroy the card
Card:start_dissolve(card2)
---increment xmult value by adding increase to the xmult value
card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.increase
end```
if you don't know what you're doing, maybe just check for appropriate vanilla examples
I don't but I want to learn, also I don't think a vanilla card does this
where would I find the jokers like this in the original code
that part of the code is a mess and it's hard to find things if you don't know what to search for
i don't know exactly what you're trying to achieve still, but sixth sense should be close enough (and uses the destroying_card context eremel mentioned)
card.lua:2603
it's a bit too much to explain briefly
uh
just read this
destroying_card is step 11
ok thank you
Is there a good example of documentation for learning how to get started with adding stuff, like a checklist of sorts? I'm just getting started with modding, currently only have my metadata .json file
Checking out other mods is usually a good start
Is there a good set of base cards I'm allowed to use as placeholder then?
if you have set up steamodded there is a folder where you can find many example mods adding different mechanics
the one i've referenced the most is examplejokers
goes through a bunch of different jokers and how they work
That's news to me. That sounds like a wonderful repository of information. Thanks!
no problem
Does it have anything on lovely patches? I anticipate I'm going to eventually hit the need to do one of those...
i'm not sure i'm afraid
i'm quite new to this myself
my Mods folder didn't come with any examples
in the steamodded folder
example mods
ok yep just looked in the wrong place
is this not correct???
what values should i warp with to_big() so i can have compatability with talisman?
Anyone know how to call the function to open a booster pack? I'm having trouble finding a mod to use as an example.
Okay so whenever my consumable spawns an orbital tag, the tag has [Poker Hand]
idk how to fix it
how do you get the current round number
G.GAME.round?
how do you cheat in a consumable?
DebugPlus.
i cannot believe it took me friggin. two hours to think of "save the last round activated and make sure it's different when trying to activate again"
i still don't know why context.end_of_round is called like six times but it no longer matters, it's only activating once
why is mod compatability so hard,,,,
is there a list of color tags for the text rendering?
G.C
oh wait
yeah it's just G.C
run eval print(inspect(G.C)) in debugplus if you want a full list
including those defined by mods
if you want to define your own then you can do something like
G.C.mycolor = HEX("FF00FF") and "{C:mycolor}text{}"
I don't get what part of this isn't right... the loc_txt is being defined inside the Consumable and I have no loc files, if that's the solution
Got my mod working, albeit poorly đ . The booster pack spawning is kinda janky and spawns in the middle of the "money counting" animation after you beat a boss blind and interrupts it, but it seems to be functional.
getting a new error something about attempt to index field VT
whats at P5HeroJoker.lua line 40
fyi you also need not context.individual and not context.repetition(s?)
{C:attention}, and {C:orange} isn't a color
Card:start_dissolve(card2)
I don't think thats how start_dissolve works
card2:start_dissolve()
yeah the first option is the colour
assuming card2 is an actual Card
for destroying_card = scoring_hand[i] full_hand = G.play.cards do I replace i with what I want to destory?
you could spawn an ethereal tag instead of creating the spectral pack directly
Found invalid metadata JSON file at C:\Users\ninji\AppData\Roaming\Balatro\Mods/yart/yart.json, ignoring: [SMODS _ "loader/loader.lua"]:124: attempt to call method 'gsub' (a nil value)
logs are not helping
a mod is messing with the code and i dont know what it is sdfkjdhskjh
something here is messing with the card:calculate thing but jsdfkghskdfjhkjfhs
ugh hhhh h hh
Can I have your JSON file?
Dependencies/conflicts have been changed, it should now be "conflics": [modid(>=modversion)].
this is the json file so that looks correct
What code? It could be SMODS itself.
okay so
im testing for compatibility between my mod and that of others
ive already had it on its own and it definitely works
,,,just that when i put it in a modpack, it breaks
something is modifying how the calculate thing for steamodded works and i cannot tell where it is
You can do it one by one, or you can do it in halves by deleting half of the modpack and see when it's still working to narrow it down, maybe?
yeahhh thats what im doing now
the mod now loads, but the conflict is not recognized
Can you throw incantation's header/json here real quick?
--- STEAMODDED HEADER
--- MOD_NAME: Incantation
--- MOD_ID: incantation
--- MOD_AUTHOR: [jenwalter666, MathIsFun_]
--- MOD_DESCRIPTION: Enables the ability to stack identical consumables.
--- PRIORITY: 89999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
--- BADGE_COLOR: 000000
--- PREFIX: inc
--- VERSION: 0.5.4
--- LOADER_VERSION_GEQ: 1.0.0
sidenote the use of long strings of 9s to set priorities really pisses me off
Does it work when you specify the exact version, out of curiosity?
Try switching up the brackets around the mod version, maybe? And if that doesn't work, throw the JSON and mod header into https://discord.com/channels/1116389027176787968/1209564621644505158 and see what they say?
Also, maybe try updating SMODS again just in case? Dependency change was earlier today/yesterday depending on your timezone, but there's something about conflicts that was updated 10 hours ago.
just did; no change
Yeah, throw it there and see if they can figure out why the conflicts aren't being detected, then.
Bunch of things got merged into SMODS, bugs are expected.
the whole json wasn't being detected
so it was showing up as a lovely mod
Can you post your json again?
It was working at this point, excluding the conflict, but not when you changed the brackets around the version, right?
at this point the mods loads but the conflict is not recongnized
changing brackets and stuff does nothing
Did a few tests, "conflicts": ["incantation(>=0.1.0)"] really doesn't work? If it doesn't, try just "conflicts": ["incantation()"]. And if neither of those works, then into the steamodded post.
this works, did not think you had to put the = inside the parens
No worries, completely fair mistake to make.
trying to make a thing that gives $2 at end of round for each splash (or ripple from jokerevolution) owned and it's simply not paying out the bonus?
i made sure other end round bonuses work (golden joker i just checked is working)
...extra.greenmoney is 2, this should work, right?
calc dollar bonus isn't inside another function
i think cryptid does an end of round bonus with Neon M, i recommend you look at that
Cryptid/Items/M.lua
oh, sorry. nevermind ):
ipairs(G.jokers.cards)
but this loop works on other jokers without the .cards
why is it sometimes .cards and sometimes not
qhar
qhar indeed
you're looping through G.jokers, not G.jokers.cards
what's the difference
oooooooooooooooooooooooooooooooooooooooooooooooooohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
i opened fuckin yomi hustle instead of balatro
she yomi on my hustle til i
it didn't work
oh shit
i crashed eslewhere
okay uhh
how do I make an if statement to check if a card is being viewed in the collection
also how do i make a joker eternal
(card):set_eternal(true) i think
The better way is using the sticker api but I donât have the function on hand
if card.area.type == "collection" iirc
were you always a furry or did you just have a ritual performed on you
thanks
meow
homeowner has meow in it
true ....
skeletor leaving.gif
lmao
meow
this didn't work
is the card perishable
or does it not have eternal compat
actually
just do (card).ability.eternal = true
meow
it was set to false, whoops
halfway there, 4/8
okay how do I check if a card is negative
card.ability.negative iirc?
it didn't work
if card.edition.negative then
i think
this worked
alright now I need to figure out how to mr,bones
mr bones' code in card.lua doesn't indicate the method where it actually saves you from death? where is that done
is it just returning saved = true?
if self.ability.name == 'Mr. Bones' and context.game_over and
G.GAME.chips/G.GAME.blind.chips >= 0.25 then
G.E_MANAGER:add_event(Event({
func = function()
G.hand_text_area.blind_chips:juice_up()
G.hand_text_area.game_chips:juice_up()
play_sound('tarot1')
self:start_dissolve()
return true
end
}))
return {
message = localize('k_saved_ex'),
saved = true,
colour = G.C.RED
}
end
Appears to be the case.
alriight
i dont know if im just stupid at coding but why does steamodded coding look so much cleaner than vanilla joker coding
like everything for a joker is in one big block in smods; in vanilla, its spread across 2 files
...don't ask me, I literally started last month. đ
oh sorry, i didnt mean to frame it as a question to you
i kind of mean to say it, in general
because i was reminded of it from that message
Fair.
yeah for sure
idk why thunk did it like he did
i mean, he was one guy makinga game that he enjoyed
one guy cant code perfectly
and i don't expect him to
im just glad modding doesn't work like vanilla when it comes to coding
imagine doing the shit that thunk did when coding jokers
giant if statements are surprisingly common
...or modding the executable directly. God, early Minecraft modding days...
question, how would i go about making a joker give an extra joker slot to the player?
just, if player has that joker, they gain an extra slot
-# im gonna presume theres an example somewhere, on some mod, but i dont know of it đ
Check SDM_0 in SDM_0's Stuff
(cryptid also has negative joker iirc)
spy as well
also the pipe joker from that one mod
Oh that would've been way easier lol. But I also only wanted the packs with 2 cards to open and I wasn't sure if it's possible to remove cards shown on that screen
:Đ·
my idea is literally called Negative Nancy đ
philosophical joker from morefluff
graaagh
yeah yeah that guy
If it works as a joker it's fine if the ideas overlap imo
i wasnt even worrying about it, i just had an idea and was curious
Hey! I just learnt Lua, where can I get started?
I believe balatros method is actually a bit more performant as it's not calling out a bunch of functions, but I imagine it's one of those well make it better later and then later comes and your like I have better things to do
Lua's bytecode makes function calling fairly efficient, so I imagine it might be like a couple hundred nano seconds faster
ethereal tag creates a base spectral pack, why would you need to remove cards?
Couldn't remember if the ethereal tag opens the pack with 4 spectral cards or 2, and I only wanted the packs with 2 to be opened
I suggest making a single Joker mod
With Steamodded
Look at vanilla code and other mod codes for references
Thereâs also the Steamodded wiki on GitHub and some example mods inside Steamodded
Imagine this turns into a creepypasta as the placeholder images get creepier and creepier
Derek.EXE
Xxjimbobrine420xX
"Hi i'm derek".
I've never been able to play a video game to this day. He's haunting me..."```
Does smods have compat for eternal playing cards by default?
should I go for vanilla injection or SMOD api?
Iâm not sure what you mean but SMODS makes modding easier and more likely to be compatible with other mods
cryptid has an eternal deck so probably
along with all the other stickers
whatever vanilla injection is
pretty sure that's cryptid specific still
cryptid adds eternal/perishable/rental playing cards
I meant using Lovely to directly inject code into the game's source
Smods where possible, then lovely as a backup tool
this shouldn't calculate for other jokers right?
why are you using "self"
self is for the center
also idk what u mean by that question
its a sticker so the values aren't gonna be changing
someone testing my mod reported an issue where the sticker retriggers other jokers
the intended effect is 1 in 2 chance for this Joker to retrigger 1 time
I donât believe it should interact with other cards, no
hmm
kid named cryptid glitched
tbh i don't even think some cryptid stuff (like azure seals) do that correctly on glitched
like, the loc_vars will return a properly randomized value but the calculation always outputs 3
love when discord does this
what would be the best way for a joker to have two joker_main effects? (example: joker adds +mult THEN adds +chips and then moves onto next joker)
basically return two effects after each other
use SMODS.eval_this
thank you
Is there a function or table that turns a rank into the string the game displays them as?
global dump if anyone cares
is there a way to figure out why a file isn't loading? the extent of the error I can see is this line is trying to run nil...
SMODS.load_file("atomic/consumable.lua")()
Assuming the mod folder is root, is the atomic folder present within and the consumable.lua inside it?
I'm assuming there's a syntax error in consumable.lua
try this instead:
file, exception = SMODS.load_file("path")
if exception then
error(exception)
end
file()
ah, there we go, a nice error, thanks!
...because I declared variables using var instead of local... dang it.
actually, why doesn't load_file error out better* đ€
also is there some way to do hot-reloading of the game or do I need to crash or relaunch every time
Relaunch. Try holding M?
did not know that bind exists, thanks
how would I go about getting a card's base chips and extra chips?
you can also do file = assert(SMODS.load_file("path"))
having trouble injecting into malverk texture packs for cross-mod support
so i want to add a custom sprite for one of my new items to an existing texture pack
i've got the following code so far
if (SMODS.Mods["sun_is_sus"] or {}).can_load then
AltTexture({
key = "rsus",
set = "Tarot",
path = "rsus.png",
keys = {
"c_yart_rsun"
},
localization = {
"c_yart_rsun"
}
})
table.insert(TexturePacks.texpack_sus_sus.textures, "yart_rsus")
end
what are you trying to do?
I'm not on my dev machine, but try setting the key to alttex_yart_rsus in your table.insert line
nope
actually setting the key to anything other than yart_rsus crashes when i hover over the texture pack
what didnt work before?
texture was not replaced
aight got it working now
silly mistake with localization + wasn't enabled in the texturepack config
If I want to change the available jokers with a deck, does that need a Patch?
i'm brain farting right now does anyone know what I can put an if statement for a joker to only trigger code if the player is in the middle of a round
i.e. not in shop or blind select or results etc.
G.STATE == G.STATES.PLAYING_HAND iirc?
Lol just trying to figure out the same thing
maybe G.STATE == G.STATES.SELECTING_HAND or G.STATE == G.STATES.HAND_PLAYED or G.STATE == G.STATES.DRAW_TO_HAND ?
Hmm nope
AH it might be
Except PLAY_TAROT is its own state so I don't know how to figure out if a tarot card is played during a round O_o
Ah I guess you could check #G.hand.cards > 0
does anyone know how to make jokers rental in a custom challenge? I tried
{rental = true} but that didnt work lol
would it be under a different name?
I think for my purposes just using G.STATE == G.STATES.SELECTING_HAND works well since i'm trying to prevent code from running when selling a joker
can only sell during this state when in a round afaik
what's the difference between the 1x and 2x sprites? Is one just an upscaled version of the other?
how would i go about removing a suit tally from the deck view
iirc hidden=True if its a custom suit of yours
doesn't seem to work
SMODS.Suit({
key = "nothings",
card_key = "NOTHING",
hc_atlas = "cards_high_contrast",
lc_atlas = "cards",
hc_ui_atlas = "ui",
lc_ui_atlas = "ui_high_contrast",
pos = { y = 0 },
ui_pos = { x = 0, y = 0 },
hc_colour = HEX("1A1A1A"),
lc_colour = HEX("404040"),
hidden = true,
})
It depends on when you want it to be hidden. Always?
how do I refer to a specific spot in g.jokers
G.jokers.cards[x] where x is your position
is for index,value in ipairs(G.jokers.cards) not working for anyone else or is that just me
every time i try to use this loop the game skips over it
Got a full code example?
local G_FUNCS_skip_blind_ref=G.FUNCS.skip_blind
G.FUNCS.skip_blind=function(e)
if G.jokers then
for index, value in ipairs(G.jokers.cards) do
print("step")
if value.key == "j_fuseforce_PowerPop" then
add_tag(Tag('tag_double'))
end
end
end
return G_FUNCS_skip_blind_ref(e)
end
step doesn't print here ever
Cant you get the value though SMODS.find_card
Yeah just use find card here
but i want it to run more than once if there's more than one
it should create a double tag for each of that joker
The function gives you the amount of card
it does???
Just check the function
find card also hasn't been working well
SMODS.find_card returns a table with all instances of that card
for the jolly joker splash fusion find_card would always flag after the card was there at least once so the effect persisted after it was sold
i know this one isn't a me problem because math had the same thing
Flag for what? The fusion or the original jokers?
the fusion being there
Thereâs no reason that would happen
@royal mica (continuing from #đă»server-chat message)
loyalty card is a bit of a special case
it uses multiple localization entries to format its own description
you'll need to look at j_loyalty_card, loyalty_active, and loyalty_inactive
Ty so much
this was one of my last roadblocks
jokers are now basically done, so I'm getting close to finishing the whole Finnish localization file
just to make sure, you know of the existence of https://discord.com/channels/1116389027176787968/1300869004260282388 ?
I've been chatting in #1303766500435431494 , and tried to reach the guy who left the server who was the previous main translator
ty, final stretch and checks start soonish
wow that guy completely disappeared lmao
yup, hasn't even added me on dc despite me sending hi a request
and the other translator in #1303766500435431494 isn't really active
so unemployed me decided "eh sure why not"
fair enough haha
yeah i don't get it either
yeah
Yeah I dont think thats supported unfortunately. The base assumption is that the player should always be able to see the suit counter once they have at least 1 of it
is it possible to have lovely patches target lua files from other mods?
Does smods have a collection for custom suits?
yes, the chunk names are formatted like =[SMODS modid "path/to/file.lua"] for steamodded mods
no
It actually does, SMODS.Suits
Oh I was asking for an object collection lol
A table
Should probably make a suit collection in game tho
Yeah, a table is a type of collection. Mostly semantic confusion so that's my bad.
I have never stopped procrastinating on whatever type of usable/scalable playing card UI
Maybe call it a âsetâ đ€
Or a âcategoryâ đ€
yeah we just don't use the term that way here precisely because it would create confusion with in-game collections
internally steamodded calls it an "object table"
Those are all forms of collection, I was just using the most general word possible (but in the process forgor that the game has an in-game area called "collection"
)
I thought everything was a set axiomatically
Well, I heard in Lua everything is a table, but Iâm sure Lua is a set too 
Yeah lua is a hellscape where everything is table
is the set of all sets that are valid lua programs a valid lua program? đ
me when flawed set theory
Do you mean in the deck view?
that too, but also the fact that there is no collection
I just want structs 
depends on definitions
Ah right yeah, I might have some time coming up to do some more UI stuff like that
I feel like a program would be like a set of programs with structure
Hence a set of all Lua programs sans structure isnât a program
sets inherently don't have structure
I had an idea for an esolang like that once. Every func is just a mini-program where the args are passed in as pre-defined variables (so no mutability by default).
Hence why I donât think a set would be a Lua program
I think it would just depend on whether you're allowing translation or not
They should make a programming language where you can take the limit 
surely you can find a representation of lua programs as sets
Cus then if you pre-define certain numbers to represent tokens in lua then there you go
And that representation would have structure
Like representing numbers as sets
Or tuples as sets
okay whatever
real
đ€
I donât think so because itâs a collection of finite sets
either way, set theory is weird
Each Lua program is finite
So the set of all Lua programs is at most a countable union of finite sets
Well I guess it could be uncountable
In runtime or in length 
no
Maybe notâthe set of each Lua program with n characters is finite
halting problem ahh shenanigans
I'm ususally really inclined to call it a "class"
So itâs countable union of finite
countable union of at most countable sets is at most countable
uSUSually
Class implies it has methods attached to it

don't get me started on lua and classes please lmao
Give it the trivial method
me when I metatable my classes
The nonmethod
which is just the empty set
is there any documentation available regarding the game's RNG mechanics, like how cards are determined according to the seed?
I tried looking at the source code but I'm unfamiliar with lua
afaik, there's no docs for anything (nvm, see below)
so unfortunately reading the source is as good as it gets
Did the latest steamodded patch change the dependancy syntax?
fortunately however, Lua is probably one of the simplest langs to learn
This PR has critical errors with loading json files. Can anyone fix it? https://github.com/Steamopollys/Steamodded/pull/315
I made this once? Should be up to date https://docs.google.com/document/d/1GvyAtXB-ptrkRXhIxVQAWV9vhgumvx9YyVfjH5hFXb0/edit
you should also look at something like Immolate
These are moreso about the theory behind it, though, not which functions do what
Balatroâs RNG Mechanics Balatroâs RNG Internals Items with Preconditions Fallback Items Balatroâs RNG Rates The Shop Pack Rates Jokers Spectrals Standard Packs and Playing Cards in the Shop Miscellaneous Balatroâs RNG Internals In Balatro, RNG mechanics are determined in a queue, with there ...
What programming language does balatro modding use?
lua
Dang, I know nothing about lua, guess it's time to start learning my third programming language
It's kinda python with less stuff
i would suggest looking at the example mods on the steamodded page! i can send you the link if you need but i cant post it here. i am a complete beginner w lua and have managed to get my own jokers in the game and give them some unique abilities by recognizing patterns in the code and following the steamodded wiki
it'll give you a start in terms of reading the code for the game so you can find the code for the seeds
basically if im looking for something to reference in the code, i just ctrl-f what i think it might be called and look through all the game files that way until i find what im looking for
It also helps to use vscode's right click shortcuts
This is not at all what the game uses lmao
the core function is pseudorandom in misc_functions.lua
I would look at how other things use is it already
i didnt think so after i actually looked around the code i just copied the first thing i saw that used seed 
https://github.com/Steamopollys/Steamodded/commit/252266c3c9cf2fc7a79389f1c55cd1037db758f0 are yall seein what im seein
@fathom raven paperback has a malformed version and crashes with new steamodded
Oh no! I havenât heard from Opposite in a while. Iâll see if he knows anything about it though, since I canât program for the life of me
all that needs to be done is removing the "alpha" from the version part of the header
Got it. Thank you!
np
me when I Balatro (>=1.0.1m) because I finally updated docs and realized I forgot to include that part
awesome
i'm not 100% on this, but i believe that cavendish dying doesn't remove it from the pool
at least it doesn't seem to set a flag like gros michel does
(of course i can't be sure cause i've never seen this in action, lol)
what does ambidextrous actually do? im confused by its description
flush 5 steel baron build đ
Can a specific Spectral card be made to play a sound when its' booster pack is opened?
when cards are scored they also count as held in hand
ex. steel card gives X1.5 mult
And man locked it behind 1 joker instead of a deck 
how can you effect other jokerâs numbers with another joker?
(so if a jokers amount is 2, itâd add 2+ to every other jokers amounts/mult/chips/etc)
You could, but it's not a good idea
If you still want to do it, I suggest looking at Cryptid
So I don't think it's a good idea, but Cryptid does it, so
thats fair enough, i just like the idea đ
how are yall getting cryptid to work it keeps crashing on me
I don't use Cryptid
ah
did you install Steamodded and lovely correctly
yeah
newest versions, correct folders?
yep
what about Cryptid version
i believe so
Oops! The game crashed:
main.lua:1821: [SMODS Cryptid "Cryptid.lua"]:602: attempt to index local 'card' (a nil value)
Failed to get additional context :/
Stack Traceback
(3) global C function 'error'
(4) Lua field 'update' at file 'main.lua:1821'
Local variables:
dt = number: 0.00851363
success = boolean: false
msg = string: "[SMODS Cryptid "Cryptid.lua"]:602: attempt to index local 'card' (a nil value)"
(5) Lua function '?' at file 'main.lua:912' (best guess)
(6) global C function 'xpcall'
(7) Love2D function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 883 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(Love2D Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(Love2D Function)' (defined at line 355 of chunk [love "boot.lua"])
this is the error i keep getting
im using the negative deck
@mellow sable
Can you send me the file in Mods/Cryptid/Cryptid.lua?
the last time I've seen this happen is with a mod incompat thing
But if you replace card.will_shatter with card and card.will_shatter (line 602) then you should be good @raw hollow
okay how do i do that, i'm very new to all this sorry
from
if card.will_shatter then
to
if card and card.will_shatter then
okay thank you!!
yw :)
im not getting this error
try this
Im getting the same error
if this one doesn't work then I might need another error screenshot
however I also think it might just be a bug with that run that won't happen on the next run
okay, ill try this and start a new run then thanks
i'm pretty sure its the same as the last but i started a new run with the antimatter deck and this happened
delete the other copies of Cryptid.lua you have
I did
i only have the most recent one you sent
what
is "Cryptid (2).lua" then
any Cryptid (1), Cryptid (2).luas should be deleted
alright
this is the new error im getting, is there any mods that cryptid doesnt work with that would make it crash?
i don't know of any by name, but this does look like a mod compat issue
'card' is usually never a nil value
i have cryptid, dreadjokers, and talisman
im going to assume its dreadjokers then
Im going to turn it off and see if it works
It works now that i turned the other one off thanks for the help!!
how would i create a specific consumeable?
its one of the args in create_card(), second to last iirc?
what would i put there? plus where can i find out what the arguments are for that? have no idea what the 5 of them are
you can read the code that defines the function
ah found it thank you
There a list of what all the vanilla joker contexts are?
there is a list of all scoring steps
I'm not sure if there's a public list of all contexts per se
I mean like whereever the vanilla game uses eval_card, the keywords it uses for each joker
saerch context in the modding channel
but the scoring steps go through most of the scoring steps
it's in the modding channel but also the Steamodded wiki
Calc context guide has what i need, thx
card.lua also lists a bunch of contexts.
Huh, there's an unused joker context for buying_card when a joker is first bought
Actually it's for any card my bad, tho a joker can call it when it itself is bought
Fucked in the head if you ask me
Weird thunk didn't seperate it out like they did with selling_self and selling_card
Can I force skip a booster pack if a consumable is used?
call G.FUNCS.skip_booster
button callback but the button isnt used
alternatively call G.FUNCS.end_consumeable, if you want to skip all joker calculations for skipping packs (e.g. red card)
for some reason my booster pack displays with the default atlas even though i have the atlas set
How to fix that?
probably couldn't find an image
check ur filenames
trying to stop a consumable from disappearing after it's used but am not having any luck
got this so far
[[patches]]
[patches.pattern]
target = "functions/button_callbacks.lua"
pattern = "local dont_dissolve = nil"
position = "after"
payload = '''
for k, v in ipairs(G.jokers.cards) do
if v.ability.name == "j_pencil_pencil" then
dont_dissolve = true
break
end
end
'''
match_indent = true
some print debugging shows that dont_dissolve is being set, but the card is still destroyed anyway
https://github.com/Steamopollys/Steamodded/wiki/05.-SMODS.Center#specific-to-certain-subclasses look at keep on use
Yea consumables in SMODS has a way implemented already to prevent being deleted
I was messing with en-us.lua in a mod, so i know which mod is causing the crash, but i dont know what i changed specifically that is causing it
you're missing a } in your loc file
turns out it was a missing , but I got it fixed either way
what the actuall fu- đ
So mod only stake from Crimstakes?
wharg
oh is that like
a stake that disables vanilla jokers
Yup
Well vanilla everything except their defaults
So if you load an arcana pack with no mods, you get strength i believe
First time making a mod. Just copied another Tarot card mod and made my own from it, but it crashes the game. Tarots are 116x186 rather than 126x186 - do I need to add something to make this work?
Just tried with another pack at normal card size, seems my lua is probably wrong
@rough furnace seems that most debug keybinds dont work w jens (or at least jens with his modpack)
If youâre using the most recent version I know some keybinds changed to be ctrl+<key> instead of just <key>. That was my problem
is that reversible? seems really inconvenient
Idk, I kinda just went with it
Youâd have to ask Wilson why they did it
there's a toggle in debugplus' steamodded settings tab
I think it was changed to avoid conflicts and accidental keypress
is there any way to call a function after a hand is played and calculated, ONLY ONCE?
One per hand? Round? Ante? Joker? Game? User profile?
local oldevplay = G.FUNCS.evaluate_play
function G.FUNCS.evaluate_play(e)
oldevplay(e)
myfunction()
end
overriding detouring evaluate_play it is
once per blind/round
this is not an override
nvm
i mean if you want to be sure you can do
local oldevplay = G.FUNCS.evaluate_play
function G.FUNCS.evaluate_play(...)
oldevplay(...)
myfunction()
end
but there shouldnt ever be more than that one argument
thx!
Not until the next update comes :)
I always find it funny how there are seemingly three terms for this. 'Hook' is most popular and widely accepted, 'detour' is exactly the same but used rarer, and 'advice' seems to be a relic of the past when hooks were deliberate/intended places to run external functions within a function.
I like calling it "wrapping" a function
Wrapping has a bunch of different meanings tbh, some technical some less so
wrapping my tortillas đ
Hence it being a relic of the past, even tho it made the most sense đ
Also a different meaning
(Actually, maybe the combination of advice and hook as it was in the past would make most sense if they were reversed, but I digress)
Yeah this is right, modernly hooks usually refer to set places you add in a bit of code
Funny how language evolves
how do you get the name of the stake you're on....
Is it not in the smods stake object?
G.GAME.stake
Its funny I have background in iOS tweaks so hooking is just natural to me, but then you get other people who use other definitions for stuff and don't know what hooking is.
its a number
G.P_CENTER_POOLS.Stake[G.GAME.stake] i would assume
nvm
that wouldnt be in order
G.P_STAKES[G.GAME.stake]
oh wait
those are strings
hm
function getStake(num)
local t = {}
for i, v in pairs(G.P_STAKES) do
t[v.order] = v
end
return t[num]
end
ig
Should be an smods function probably
you dont even need to do that actually idk what i was thinking
Yeah 1.0 made keybinds need Ctrl to run by default, with a keybimd to toggle it. Was mostly made so I'm not taking up half the keyboard from other mods and so people don't accidentally trigger other Keybinds (especially distructive ones). I tried to make it clear you had to hold Ctrl and its togglable in the config in everywhere you would see keybinds and put a warning in the changelog. I'm not sure if there would be somewhere better for people to see it or if this is just a case of you just updated the mod willy nilly and then they keybinds you are used to stoped working so you were confused.
thank you â€ïž
Hey all, completely new to modding
I was wondering if there was a way to show money gained after a blind (like the Golden Joker) but for a deck? I want to give the player money after a boss blind but have it show up in the UI. It already does give the player money but it just kinda pops up instead of showing it visually
Have you tried ease_dollars(n)?
isn't there a steamodded function similar-ish to this? đ€
I haven't, it's currently just using G.GAME.dollars = G.GAME.dollars + 10 after it checks for the boss blind in particular. I'm honestly not that great with code so just mostly referencing from others haha
Instead of that, just do ease_dollars(10)
It will animate and add dollars to the player
Ahhh okay, thank you so much
ah yeah
SMODS.stake_from_index
@nocturne garnet use this instead
omg i still forgot to change that subscription
meant to be two sets of jokers not two joker slots
do jokers in one set of jokers prevent them from appearing in the other set? (assuming no Showman at least)
they dont
subscribe to Jimbo.
does anyone have working code for a joker that increases its sell value at end of round (like egg)
keep trying to get it to work but can't, joker does nothing
check source code for egg
did, copy pasted, doesn't work
setting loc_vars to self.ability.extra crashes the game so i have to set it to card.ability.extra, but then it does nothing
The calculate part of should have the context.end_of_round condition check and then you can apply the change to card.sell_cost.
still doesn't work
i must be doing something wrong because something like this
config = { extra = 1 },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra } }
end,
calculate = function(self, card, context)
if context.end_of_round and not context.blueprint then
card.sell_cost = card.sell_cost + card.ability.extra
card:set_cost()
return {
card = card,
message = localize('k_val_up'),
colour = G.C.MONEY
}
end
end,
doesn't work
card:set_cost() is an empty function?
possible issue
unless that just runs the update loop for the sell cost, since you do set the sell cost above it
i haven't looked too deep into the games source yet, but its pretty small compared to some others so I could probably go find it
Oddly enough, I didn't use that when setting the sell value of the two "joke" Jokers to 0.
set card.ability.extra_value to increase the sell value of a joker
card:set_cost() updates the cost based on things like edition, extra value, etc.
config = { extra = 1 },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra } }
end,
calculate = function(self, card, context)
if context.end_of_round and not context.blueprint then
card.ability.extra_value = card.sell_cost + card.ability.extra
card.set_cost()
return {
message = localize('k_val_up'),
colour = G.C.MONEY
}
end
yea i can't figure this one out because this also doesn't work
card.ability.extra_value = card.ability.extra_value + card.ability.extra and card:set_cost()
extra_value is used in the Card:set_cost() calculation so thats why you wanna increase that value
ok question
if you have a game with a custom joker and you edit the joker's code, does that apply to the current game or do you have to restart
(i know that if a joker has a probability you have to restart for the new probability to take effect)
because it still did nothing when i updated with that code so i restarted thinking i had to find it again and now i can't find the joker in any game
- you do not need to look for your jokers to test them. use debugplus to spawn them in (and optionally TMJ to search for them, but that's not necessary it's just faster and i need to shill)
- yes you have to restart for changes to apply (this is exempt for some things that can be watched by debugplus like shaders)
but yes it applies to current games
you have to restart the game, but not the run
^
ah ok thanks
well anyway i got lucky and randomly found the joker but the code still doesn't work unfortunately
so yeah i'm completely stuck now, nothing is working
just to clarify not only does the sell value not go up but the message also doesn't appear, does nothing
can't believe it's this hard to make a joker that does the same thing as egg lol
it gets worse
this joker has a second calculate function that does something different under the sell value one and it works as intended, but when i removed that code and just left the sell value part (because maybe the second function was what was causing the sell value to not work), the game crashes at the end of the round and gives the error "'for' limit must be a number"
ok so i managed to make it work
but now for whatever reason the sell value increasing triggers 7 times instead of just one???
it might have to do with the fact that the joker cost is 6 and the listed increase in value is 1, 6 + 1 = 7, no idea why it triggers that many times though
are you using context.end_of_round
yes
if context.end_of_round and not context.repetition and not context.individual then
thanks, this worked
finally i have a working increase sell value joker :3 after so long lol
Hey do you want to make this into an API
any way to juice up another card while retriggering with a joker?
i'm trying to make a joker with an effect of âretrigger each played 4 once for each 7 held in handâ and want the 7 to animate when retriggering the 4
How are you identifying the 7?
can you not do v:juice_up() during that
the only return smods gives has a single repetition
i'm unsure how to manually trigger the 4
smods has an api for this
wait no
that's vanilla
card:get_id or soemthing
im not entirely sure
how would you go about changing a cards rank when its in a played hand? im gonna presume theres a modded joker to base it off of, but i have no idea đ
the joker idea is that if you play a king, it will turn into a queen and vice versa
ah, the transgender joker
that is literally what the joker is, the transgender flag đ
oh god đ
i have to see that mod when it's over
i currently have the gay and lesbian flags in development, and then im adding a couple more after: #1292795163000705024 message
copy what debugplus does
why tf does it not work wth
oh wait
i think i see
shiiiit
some mod is overriding it
theres gonna be like only one other use for this mod so im adding a deck
#1315304310707327017 balls
i'm trying to have a joker behave similarly to invisible joker but for whatever reason when i try to increment the rounds by 1 it goes up by 7? the part of code posted is the only part that edits this value
if context.end_of_round and not context.repetition and not context.individual then
can we just pin this line
thanks
in fact, I don't think individual is EVER called in end_of_round
local eval = G.jokers.cards[k]:calculate_joker({cardarea = G.hand, other_card = G.hand.cards[i], individual = true, end_of_round = true})
?
yup
||ignore the sprite its a placeholder||
i fucking HATE context.end_of_round....
y? i like it
yeah but everytime i gotta go through my code and copy and paste if context.end_of_round and not context.repetition and not context.individual then
I am blind
why couldnt it have just been if context.end_of_round
it's added by retrigger api and I forgot to check the toml file
l183 state_events.lua
boss blind
either way, I've put it in here now https://github.com/Steamopollys/Steamodded/wiki/Calculation-Context-Guide#end-of-round
might wanna also document the joker retrigger stuff?
effort
Btw is there any guides how to make mods? I want to try to make deck myself
a couple https://github.com/Steamopollys/Steamodded/wiki/01.-Getting-started#creating-your-first-mod
Okay to clean up what happened
version of mod had nothing to do with glitch, i first installed them on 0.9.8, and then on 1.0.0, it just turns out i didn't cleaned some file stuff and it kinda conflicted
And when i deleted and reinstalled everything, it worked like clockwork
I can help if you put it on GitHub
I can extend it to Jokers
If you used the code I sent you for reference we are basically already collabing anyways :P
Yeah, i noticed i needed add_tag(Tag('tag_orbital'))
instead of just tag_orbital
but now the problem is different
add_tag(Tag('tag_orbital'))
local _poker_hands = {}
for k, v in pairs(G.GAME.hands) do
if v.visible then _poker_hands[#_poker_hands+1] = k end
end
G.P_TAGS['tag_orbital'].ability.orbital_hand = pseudorandom_element(_poker_hands, pseudoseed('orbital'))
end,
}```
Eremel helped get it to work
How did you do it
Eremel had a patch in ortalabâs code for mystery soda. We modified that code to make it work for the consumable
All that needs to be done for now are the booster packs and then release the ShinkuLib Update
Then those can be used to make more tag cards and potentially later actual cards
Hi, quick question, steammodded 1.0 is good or steammodded 0.9.8 is still used by the majority of the mods ? Bc the pokemon mod isnt working for me
1.0.0 is used by essentially all mods
Bc i kindaaaa made the game crash on all mods by updating (haahhh why its not working with nexus.....)
yeah any mod that was working on 0.9.8 will either not be on 1.0.0, or youâll need to get the 1.0.0/most recent version
Thatâs not what I meant lol
I meant an API for displaying these values
So other effects could grant them to cards and Jokers
But I can probably work from that
Bunco had a similar issue with Orbital, I suspect
How do I make it so the joker spawns as just an eternal card? I've tried "eternal" but that doesn't work, and I don't want it to be negative
add_joker("j_lusty_joker", "negative", true, true)
(It's supposed to spawn at the start of the game as part of a deck)
go into balatro source code and check definition for add_joker function
then you can probably do it with a hook
but I think steamodded might have override for this function?
There is this which is for a challenge I assume?
