#⚙・modding-general
1 messages · Page 3 of 1
Wait, are you overriding the main game function ?
Card:set_ability() doesn't return anything for me to ref it tho
or do i just. make a new func
A good practice is to register your own functions in a specific table, like the modloader does with SMODS
So you ensure that it will be unique
any examples of that in the example mods?
Not from an example mod but: https://i.imgur.com/HyorcnI.png
If we take the sprites as an example
Also, Card is not nil in your example ?
Because for me there is now way that works, you should refer to self no ?
and with : so self is actually mapped
update on this: i found out what was causing everything to break! it seems it was the localize negative tag stuff--i guess it was essentially trying to re-define negative tags, again, or something? so now i've got the game to launch!
however now the game crashes when i pick the deck, giving me this error message. here's the code and stuff, hopefully someone understands why this is happening--i thought the args stuff was necessary for decks, since it's in like the example deck thing??? but maybe i'm not using it right, not sure
also i'm aware that the description says one less joker slot and the code here does not currently remove a joker slot--i'm trying to fix the main effect right now since i figured that's smarter than having the simpler effect ALSO be there and potentially breaking things too
Doing something interesting.
(I used stars and moons from my textures I did as an example)
This is a mock up
Not in-game
Inspired by the Six Suits mod but wanting to try and expand it for the modpack I wanna do
THE JOKER WORKS
WOOOOOOO
now for the loyalty card part
the problem is that i don't know what anything full_UI_table returned by generate_card_ui means and how to append the x remaining into it
--Update localization
for iter_231_8, iter_231_9 in pairs(G.localization) do
if iter_231_8 == "descriptions" then
for iter_231_10, iter_231_11 in pairs(iter_231_9) do
for iter_231_12, iter_231_13 in pairs(iter_231_11) do
iter_231_13.text_parsed = {}
for iter_231_14, iter_231_15 in ipairs(iter_231_13.text) do
iter_231_13.text_parsed[#iter_231_13.text_parsed + 1] = loc_parse_string(iter_231_15)
end
iter_231_13.name_parsed = {}
for iter_231_16, iter_231_17 in ipairs(type(iter_231_13.name) == "table" and iter_231_13.name or {
iter_231_13.name
}) do
iter_231_13.name_parsed[#iter_231_13.name_parsed + 1] = loc_parse_string(iter_231_17)
end
if iter_231_13.unlock then
iter_231_13.unlock_parsed = {}
for iter_231_18, iter_231_19 in ipairs(iter_231_13.unlock) do
iter_231_13.unlock_parsed[#iter_231_13.unlock_parsed + 1] = loc_parse_string(iter_231_19)
end
end
end
end
end
end
@tacit mountain what is the purpose of doing this
I honestly dont see what this does, since it seems like you directly set the localization 5 lines earlier, so this segment seems confusing to me
i spent another three hours fucking around and gave up on this joker
has anyone made anything besides retextures etc?
nice pfp you have
thanks!
damn thats nice
Wonderful reference to Binding of Isaac
So on ante 12 it would send me back to ante 2?
do I double win if I beat ante 8 again?
So many questions
yes and no
Free win joker?
Will there be steam workshop?
test it with ante 9 heiroglyph
New spectral idea: Merge two random adjacent jokers (that don't both have editions) into one joker that takes up two slots.
It lets you decrease the amount of uneditioned jokers so wheel of fortune procs on the one you want it to
Maybe how about it only takes 1 slot?
if it takes 1 slot the it's strictly a better Negative
honestly this would feel too niche to be a spectral
then let's make the spectral decrease your hand size by 2
bad design
explain
you're making an already existing spectral that is strictly better with a bigger downside
There is also the downside of you can't sell just 1 of the jokers
since i haven't touched modding at all yet, i just wanna ask
do all mods disable achievements, or are there certain ones that can be used just fine (like purely cosmetic ones for example)
Steamodded disables achievements by itself but there's a mod to revert it
i see
Looks like Demo code
But setting loc is not enough, you need to operate some modifications in multiple places
Same logic exist in new Deck API
for g_k, group in pairs(G.localization) do
if g_k == 'descriptions' then
for _, set in pairs(group) do
for _, center in pairs(set) do
center.text_parsed = {}
for _, line in ipairs(center.text) do
center.text_parsed[#center.text_parsed+1] = loc_parse_string(line)
end
center.name_parsed = {}
for _, line in ipairs(type(center.name) == 'table' and center.name or {center.name}) do
center.name_parsed[#center.name_parsed+1] = loc_parse_string(line)
end
if center.unlock then
center.unlock_parsed = {}
for _, line in ipairs(center.unlock) do
center.unlock_parsed[#center.unlock_parsed+1] = loc_parse_string(line)
end
end
end
end
end
end
New release !
#1209564621644505158 message
anybody in here wanna help me bring these to life? :0
they do seem pretty cool, although the chip numbers seem really low
oh the abilities are defo open to change
i also think making wanted give money instead of chips fits better
but also, i meant the joker gains x amount of chips. so it stacks
Make it like the Idol but with specific face cards and it gives like $10
So playing a Golden King of Spades rewards $10
type shit
you could also randomize it
ye thats what i mean by like idol
like every round you have a different face card that gives you dollars
yeye
the spritework is really great
tried some custom jonkler. Looks like it also works with blueprint even though I never used context.blueprint 🤔
Only problem right now is it still works with non-scoring jacks/queens/kings, I'm not sure how the game handles this.
Yeah the art is great and the effect ideas are neat, but they're really underwhelming in terms of their effect. e.g. if you started a run with passport and triggered it every round, you would only have x2.4 mult at the end of ante 8
i don't think you need to define blueprint stuff unless it would function differently from normal
again, effects are just ideas i had :) they're open to change - i would like to keep the core concept similar tho!
while checking for scored hand you need to ignore debuffed cards
Looks real good
hey guys, are their alrdy mod´s existing for balatro which are ready to play with?
lol
lmao
amazing
Gotta tell me how you managed this
never pass on the 3 of stop signs
Ikr
Well then
hmmmmm
Last one for public chat (you can see more in the thread)
Which card should I take?
the ian + idiot combo with 5th edition is clutch
Mercury
Mars? Sega Saturn? Planet Vegeta? The World?
has synergy with sega saturn
Here's the lua file (I reused the structure in Mysthaps joker). Most stuff happens in the Card:calculate_joker() function. Just like Space Joker, the effect is evaluated before any scoring is done (context.before).
Then it just calls level_up_hand() on two random hands if requirements are met.
Not a final version because I'll need to change a few things and check if secret hands work as intended.
Sweet, how does it function with the collection page?
Silly question but is there just a site/link where all the currently downloadable mods for Balatro live? Rather than searching from them within the modding server as some mods don’t have individual posts it seems.
where do i find mods? like what are they located under?
it seems to work well
Why is everything lua 😔
Maybe what we need is a mod browser, similar to what btd6 has
Does it just make a new collection page?
yeah, haven't tried with two new jokers though
why is my Runner missing some of the white borders on the joker text? i couldve sworn id fixed that
I had to scale down to fit on my texture
i see
I work w/ 1x then scale up
that sucks, it really needed to have the border to be readable
how big is 1x?
half the size of 2x
i dont know how big 2x is lmao
@river anchor Was watching your video, and in making mods I have peeked at the game code - you asked whether Ancient joker picks off of the deck, it does not - it is completely random between suits
Castle and Idol both pick a card from your deck at random and take its suit (or in the case of idol, its suit and rank)
Mail-In Rebate also does pick based off of the deck
This is as of a few versions ago, let me check the latest though
does it choose specifically from those or would it have a chance of picking something like stars and moons from six-suits
Ancient takes from a predefined list of Spades, Hearts, Clubs, DIamonds
Check out line 2293 of functions/common_events.lua
Confirmed to still be true
you could totally overdefine the function to work on a list of all 6 if you want to keep the behavior, or do the same thing that castle does if you want to give it a buff
hehe you ruined my stencil joker run lol
I did some testing on collection page stuff https://canary.discord.com/channels/1116389027176787968/1211392496433893416
also https://canary.discord.com/channels/1116389027176787968/1210728178201526373 new release should be good to go now, i still had some stuff with wild cards to fix
is steamodded the primary way to play with mods or is there an official way?
Steamodded is the way
thanks
There a means to swap out the existing music?
Balatro's background gives me Earthbound vibes and I'd like to substitute in some music.
does anyone know why whenever i try to switch the game to my monitor's resolution (borderless and fullscreen), it defaults to 4K?
I know i have DSR enabled on my Geforce settings but I can't choose 1440p for whatever reason
there isn't even an option to set my resolution if i play borderless
Anyone here have ideas on how to partially unlock stuff? Might semi-be in the realm of editing save/collection files? Had a syncing issue and now my main local instance has a lot of collection reset. But it still recognizes that I've beaten them/unlocked things:
anyone know where the game gets the names for cards from
i find the same thing, it only lets me set to 4096x2160, but that isn't a resolution I ever use... I have to trick it to get it to go 3840x2160 borderless
You can use https://canary.discord.com/channels/1116389027176787968/1209857245316255744 to unlock them manually, coupled with https://canary.discord.com/channels/1116389027176787968/1210290099036885042 if you also need it for some achievements
Sorry, I don't know how to help you, I just wanted to let you know that very few games allow you to change resolution while the window mode is Borderless
(I have a 4k monitor and when I want to play games in 1080p borderless for performance the games never let me)
like all of the recent versions say this, but is 0.6.1 still the recommended version?
Also, how do i look at existing jokers code? (ie; to figure out how to increase hand size/add text to a card)
uh
figured out how to add an exception, but how do i look at existing code for the game?
trying to figure out how to change the negative playing card text
which considering it seems to be set to be different for consumable cards, i should be able to look at whatever handles that
Extract the Balatro.exe file with 7zip, the code is in there
thanks
anyone have any suggestions on where to start with replacing negative playing card text? ie; is there a way to replace the text that doesn't involve me redefining the entire card hover text function
It might be in the English locale
yeah but more wondering about how i get a new string to show from it
since the checks seem to be manual
i get that, I'm mainly asking why it defaults to my DSR resolution and not my monitor's max res
the chips and unlocks are in seperate files
I have been meaning to add unlocking things to my save editor
Are there any good modding tutorials that give a basic understanding about modding this game? I'm okay with Lua so I'm not someone with no knowledge trying to mod.
Hey, just got told there was a modding section of the discord after figuring out how to mod the game myself (I actually was thinking of making a mod loader eerily similar to Steamodded if it didn't exist - albiet in the form of a second exe that loads the main game rather than an exe patch) -
As for my actual question, though, is there anywhere centralized mods are gonna be stored?
mod.io or something? Right now it looks like it might be disorganized with just being github projects and manual uploads but I'm not sure
The biggest center has been the forum here: #1209506514763522108
I do think an official site for Balatro mods would be cool though once the modding infrastructure is a bit more developed
follow up question because me and him were working together on something-- I saw that people have managed to make new suits and jokers, but has anyone made a new enhancement?
new enhancements are also easy I'm pretty sure, sham
yeah but I just wanna see if anyone has made our idea already or not
fair enough - and honestly that's a really big reason for me suggesting a mod hosting site (alongside the fact that it'd be totally doable to integrate it for automatic mod downloads similar to how Synchrony is for Necrodancer)
oh true, sounds fun though
Heck, if something like mod.io is set up I could add the API integrations to steamodded myself in a pull request, for uploading/downloading mods
Something like OpenPlanet for Trackmania would be cool: https://openplanet.dev/plugins
You pretty much can just install it and then download any mod you want in-game
Sir, can i ask something?
Sure
Is there a way to unlock all from the game files or is it only through steam?
I haven’t looked deep into how the localization works exactly but from my memory it will load the localization file of the language you want into a table, and then whenever it wants to display text it’ll call something along the lines of localize("b_jokers")
You’d have to change a lot manually, at that point just make a mod to do it
Ok thanks
I used the unlock all function for my speedrun mod (so it can load a fresh profile with full unlocks) and it pretty much loops through every item in the game and unlocks it; doing that manually would be tedious
Thanks a lot!
why tf does my pc say, no you can't add an exclusion, because this has potentially unwanted things in it
thats the reason i'm adding the exclusion.
because i'm the one who knows its safe
Yeah, if you want a more relevant example, there's a reason I called out Synchrony in particular - it has kind of an ideal setup in a lot of ways where you can upload or download from ingame
what card is R_4?
unless you're adding a custom suit you probably want something like suit = "H_" instead
(H for Hearts)
not to mention that the base suit you're looking for is Diamonds, not Stars
(game.lua, lines 298 on, the P_CARDS table)
what's the problem?
Aha, I haven't taken a look at that yet
I'm attempting to make a custom Joker, and i'm not sure what i'm trying to make it do works
nope this is about custom suits #1210728178201526373
or if it needs a new G.Game
pretty sure you could just call set_rank or whatever
don't have the source code in front of me rn, but something like this
The effect is 2x mult when first scored card is a different suit than the previous hand, so it needs to save the suit, and, if its not that suit, give the bonus
for k, v in pairs(G.playing_cards) do
v:set_rank('4')
end
tho I'll need to look at the code first to confirm
lmao
By the way, why does 6 suits override tables such as G.P_Cards instead of append to it?
I think calculate_joker in card.lua is the starting point, but I haven't coded a joker myself yet
table.insert ? ?
I could append to P_CARDS, it just that the game expects a definitive list of suits elsewhere which I also have to overwrite
so why not just. edit that list
I've yoinked myst's fantastic efforts so i have the base of getting it in im just not sure how to write the effect out lol
for P_CARDS that works fine, but usually these lists of suits are hardcoded in so I have to replace the entire function
are you talking stuff like what you do with change_suit?
yep
because that isn't Replacing the function, it's Wrapping it
if someone else added another two suits it'd just wrap around your function
as long as you call the base_ref at some point it's fine
although looking at change_suit in particular you don't wrap it there
set_base you do, though
I replace anything that relies on a hardcoded list of suits, calling a ref to the original wouldn't make sense
for set_base, I guess I could only catch the stars and moons cases and ref otherwise
but for stuff like get_flush it just doesn't work
yeah that's what I meant
I mean, what you'd do is just get_flush_ref, see if it returns something, and if it doesn't check stars and moons, right?
code hooking takes a slightly different way of looking at things compared to hardcoding, but it's way more powerful than it has any right to be
there's no reason this can't be purely additive
if you want I can try making a PR changing it to be that way
yeah you're right
Ah what the heck this is doing my head in lmoa
I am gonna refactor this anyway tho
ye
for the UI functions it's especially bad, I just copied these ones over and added what I needed to add
actually, if you want to be funny you could always iterate through G.P_Cards and keep track of what suits show up, but that'd just be a pain
oh yeah that makes a lot of sense
that seems like the inefficient solution
agreed
I apparently chose the one of the hardest of my jonklers to add lol.
If I had the talent I would mod the arcana cards to have the persona designs
gonna need a simpler jonkler
btw, for storing it just set self.ability.variablename
for saving the suit, that is
man
i'm so far out of my depth with this
like i want to learn how to make it work
but i am so new to this, and i'd need a lot of teaching ahaha
if context.individual then
if self.ability.name == 'IndecisiveJoker' then
if #context.scoring_hand > 0 && context.scoring_hand[1].suit != self.ability.suit then
self.ability.suit = context.scoring_hand[1].suit;
return {
message = localize{type='variable',key='a_xmult',vars={self.ability.extra.xmult}},
Xmult_mod = self.ability.extra.xmult,
colour = G.C.RED,
card = self
}
end
end
end
try this?
"!=" is basically just "not"
Oh!
context.individual:
This is the one I understand the least, but it appears to be testing that joker by itself for a round of scoring
self.ability.name is the name of the joker
#context.scoring_hand > 0 is checking all the cards in the scoring hand and making sure there's a card that IS scoring
context.scoring_hand[1].suit != self.ability.suit is comparing the first card against the stored suit
self.ability.suit = context.scoring_hand[1].suit; sets the stored suit for next time
and the return is something I copied
and this code should be in Card:calculate_joker, and it looks like it should also be wrapped in a if self.ability.set == "Joker" and not self.debuff then similar to what's probably in the example
(which just checks that yes, it's a joker being calculated, and no, it's not a debuffed joker)
but yeah, uh, on my end at least I'm coming into this with a LOT of experience in coding and modding
I don't blame you at all for needing to take your time
make it choose a random color for each number every millisecond
the colors will be used for validating runs
so should sit with the Card.calculate_joker
doesn't lua use ~=
OHP
iunno, I'm not a lua programmer
you're right
i'll change that too
that one always gets me
I just know it from very very cursory understanding of programming
and yeah, wrap the if context.individual in
if self.ability.set == "Joker" and not self.debuff then
(in other words,
if self.ability.set == "Joker" and not self.debuff then
if context.individual then
if self.ability.name == 'IndecisiveJoker' then
if #context.scoring_hand > 0 && context.scoring_hand[1].suit ~= self.ability.suit then
self.ability.suit = context.scoring_hand[1].suit;
return {
message = localize{type='variable',key='a_xmult',vars={self.ability.extra.xmult}},
Xmult_mod = self.ability.extra.xmult,
colour = G.C.RED,
card = self
}
end
end
end
end
I might need to make an update to my custom keyboard's firmware, rn it just doesn't have ~ accessible, I always have to copy it from somewhere
oof, yeah, maybe set a hotkey shortcut for it if you have software for that
although I think you can do not a == b?
maybe not (a == b)
So like this
idk, I never trust operators introduced by individual languages to have the priority I expect
yeyeye
I recommend fixing the indentation though
(in other words using tab to make it look nice again)
so just push them out neatly
yeah
works but that's 2 more inputs I have to do
I'll just throw it on an unused symbol layer key
looks like you're in VSCode, you can just select all the lines with dragging your mouse and press tab once to do it
(select all the lines that need another layer of indentation, that is)
Where do i draw the line with that though ahaha
right click and format document
so it makes sense i sposee
all nice and tidy
uhh
Also do we know the different calls for the description box? i know {C:attention}{} makes the text orange
Or at least where that stuff would be scored so i can go find it myself
card.lua has a bunch of examples if you have any particular joker you want to copy
Yeah i've got that open in the background too
doesnt seem to have the attention calls though so i'll have a dig
OH I see, the descriptions
that's an error
which is more likely
oh, you're missing an end in your code here
that's an error with your code, you have an extra end
okay i'm getting mixed signals
missing an end would be end expected near <eof>
I didn't change anything that would need ending except for the bottom paragraph there i'm pretty sure
How do i tell which line needs ending?
just remove end once from the bottom and see if that does it
if not, you've got a mismatch somewhere else
if i remove that last end it leaves it on a return, is that fine? or should i axe one of the ones above it
well here's all the colors it seems
Oh cool, thanks
misc_functions.lua is where the localization stuff's stored
that's odd, you actually need one more end there
ok I think I'm happy with how this looks
just throw an end in i spose
if you send over the file I can fix it up rq
it's hard doing curly brace hunting when you're not used to it and lua just makes that harder
"curly brace hunting" ahaha
At least it's not lisp, where you have all kinds of ((s)((h e)(n((a)((n)i))))gans
(I am forever grateful that there are no modern languages people use that are lisp-based anymore)
is it also possible to add the last suit played into the description? or would that require being more weird
also that sounds hell
uhh maybe? I'm not familiar enough with the codebase
my brain tells me i could just use the ability context but we've proven i can't trust my brain
I only just started looking into this today
I'll work on that later
Welp, tomorrow (later today since it's 1:30 AM for me), I'll be looking at the code to see if I can make not just new suits like Six-Suits, but to make new RANKS
I want to make those negative suits
I think I might have fucked something up with the code for replacing card textures. Trying to learn to do it so I can compile a mod for a streamer I like too, but I keep fucking up getting my test card working
I can't even get the mod I made to appear on the mod list LMAO
probably a \r\n issue
A what?
So there's two kinds of newlines
Windows uses \r\n by default, but Steamo checks for \n when looking at a file header
So if your mod doesn't appear and you have the mod folder and header set up properly, that is probably why Steamodded isn't detecting it
I don't think I have any of this setup properly lol, I have no idea what I'm doing but I am trying my best
def not on windows
I'm just trying to use the code for Texture replacement that's on github. I have the folders all set up corretly, but nothing seems to be working right
anyone had experience with the sprite stuff?
I'm having a nil value problem
its hating on line 86, saying wcolour_mod is a nil value
Man, I give up fucking with trying to mod this texture in right now, it's 2 AM and my brain is not working enough for this lol
yeah i'm having texture issues too
My mod wont even register as a mod by the game LMAO
As far as I can tell the code and files are all where they should be, I'll just have to get some help when it's not so late lol
yeah me too lmao
If this isn’t in your init function it might be running before Steamodded finishes loading the mod code, causing the error
Happened to me earlier tonight lol
as far as i can tell it's included in the init function
Function smods.init isnt ended until after the sprite section
I can't tell what's causing this
hey dataminers, does wheel of fortune work differently than written
can you explain what this means 😂
That art is so good
I will say this type of effect seems super cheesy as long as whatever hand you’re playing isn’t a flush
Since it’s based on the first played card you can just alternate between the first being Suit A and Suit B
Or have it be wild
It's effect also isn't terribly strong
will see though
if i can make it work
i also don't know why it doesnt work
I think maybe it's because it doesn't have a suit to start with?
free mod idea to anyone who wants it (no attribution needed): tarot card skins for JoJo's Bizzare Adventure, Persona and Yu-Gi-Oh
lovely
i think its related to the suit selection/storing
it doesn't
i took it out and the game doesnt crash anymore but nothing happens stil
okay looking from this
you're comparing the scoring hand with the suit of the joker itself i think
ah
hold on hm
cuz it needs to store a suit
to compare the currently played suit against
i think it should be this
just reverted back to when it was doing nothing prior
I also need to work out how to add the suit that it currently is into the descript
I accidentlly picked one of my most complex ideas
I think i might know what's wrong
Idk if it has a check or anything
I think it just sets the suit and returns
hmmm ok so there's no truth to the idea that it picks the joker first and then rolls odds?
ah ok. so it can only roll on a non-augmented joker, it doesn't pick from all of them and just automatically cancel if it's already augmented? that's what I thought that meant
yeah, it picks a joker that is not yet editioned
if all jokers are already editioned, you can't use it
Is there a mod for custom challenges?
not a lot thus far, though I have made https://canary.discord.com/channels/1116389027176787968/1211082061251874866 which combines all deck effects at the cost of another X2 base blind size
i might change it to be a deck though
We should make a mod that makes the glass shattering effect more violent
Instead of just being based on the “burning” effect the game uses for everything else, I want my glass cards to just shatter and explode
500% volume metal pipe falling sfx on Glass Card shatter
yippe
@grand geode If you think that your method is robust enough, feel free to do a MR to the Modloader so we can add it !
oh no
oh no wrong number
balatro thing. Contribute to Mysthaps/BalatroMods development by creating an account on GitHub.
Can anyone help me out?
My steamoded_injecter file keeps disappearing After downloading it where ca I find it?
Yeah I read about it but I have no clue how to turn it off or find the antivirus program
I expected you'd be able to use something like that as well, but there's no set_rank() method. there's a change_suit() method but no change_value().
how does strength work?
was about to check
theoretically you could just do what strength does for arbitrary rank
great question, no clue lmao
I know you cant redistribute it so
maybe delete just to be safe
leave checking the source code as an exercise for the reader lol
so yeah, strength also has to get the suit initial just to change rank
interesting indeed... should be easy to add
function Card:set_rank(rank)
local suit_code = (self.base.suit == 'Diamonds' and 'D_') or
(self.base.suit == 'Spades' and 'S_') or
(self.base.suit == 'Clubs' and 'C_') or
(self.base.suit == 'Hearts' and 'H_')
local new_val = (rank == 'Ace' and 'A') or
(rank == 'King' and 'K') or
(rank == 'Queen' and 'Q') or
(rank == 'Jack' and 'J') or
(rank == '10' and 'T') or
(rank)
local new_card = G.P_CARDS[suit_code..new_val]
self:set_base(new_card)
G.GAME.blind:debuff_card(self)
end```
something like this I believe, where `rank` is a string number from 2 to 10 or the strings Ace, King, Queen, or Jack
or this if rank is a number, which i think is quite elegant ```lua
function Card:set_rank(rank)
local suit_code = string.sub(self.base.suit, 1, 1)
local rank_str = ['T', 'J', 'Q', 'K', 'A']
local new_val
if rank < 10 then
new_val = tostring(rank)
else
new_val = rank_str[rank-10]
end
local new_card = G.P_CARDS[suit_code..'_'..new_val]
self:set_base(new_card)
G.GAME.blind:debuff_card(self)
end```
I feel like suit codes should be a table added to Steamodded at this point
maybe ranks too
(just a key/value table with stuff like {"Spades": "S"} so you go card_code = SMODS.codes[self.base.suit] .. "_" .. SMODS.codes[rank])
hiya im having troubles loading mods, ive made a file called mods in %appdata%\Balatro\Mods and put the .lua file in there (its for the ulitmate random deck mod) and ive installed the latest steam mod loader, however when i launch the game the mod doesnt seem to load up, wondering what im doing wrong lol
try this file
does it replace a deck in game or is it its own seperate deck as i cant seem to find it if its working
also do i launch through steam or elsewhere lol, sorry i have no idea what im doing with this
i think the thing that might be wrong is the download for steam modded, where it says to drag and drop the balatro.exe onto the executable for steammodded, it like flashes a window for half a second but thing happens after, idk if ive done that bit right
nvm got it, i had downloaded a pre release mod loader version and not the current release
Please, for Steamodded support go on his dedicated channel, it's way easier to gather the informations: https://discord.com/channels/1116389027176787968/1209564621644505158
I'm currently updating my mod to make it possible for other mods to mess with suits given six suits is installed
steammodded has been pinned in the modding channel @tacit mountain
I'm thinking I'm going to try and add basic suit/rank support on the steammodded side, because that way there aren't shenanigans from people trying to add either
(ofc suits/ranks with special effects will still need custom code, but this would still remove a LOT of boilerplate and allow for, say, mods that add a 15 rank in there to work with suit mods and vice verse)
@white scarab @tacit mountain - it looks like we can only have one pinned post at a time in the modding channel. previously it was the mod suggestions post. maybe someone makes a main post that links to other important posts, and we just pin that?
Thx 🙏
although I will ask, mind if I use six suits as a launch point to know where code needs to be modified? I'm gonna be using hooks instead of destructive replacements where I can, but it'd still be nice to have a base implementation to go off of
I already converted a bunch of potential points of incompatibility to hooks, I'm just gonna make sure it all works and push that to the github
nice
I'll be trying to do the implementation into steamodded myself to start with, feel free to contribute though
Oh, sounds good
I'll just suggest making sure you have something similar to this somewhere in there then, because while I imagine the API's gonna help with the boilerplate a LOT it won't cover all use cases because of custom content being custom
Just make a main post linking both of them and pin that
yeah that's what they said
Like modding started guide or something
Oh they asked someone to do that
I'll try formatting something when I get home
something that would be even better, is auto-generating suit IDs instead of having the user define them every time, which can result in conflicts. however, this will require replacing G.P_CARDS with one that is generated from the modded version
alright- I pinned project666's modding starter guide post.
yeah, that'll probably be done with the steamodded api that's being made now
also lmk when I can help, since I imagine you need an initial push for me to work from to actually help instead of duplicate work
I'm struggling to download data stored on a website because LOVE only lets you make HTTP requests, not HTTPS
does anyone know any workarounds to this or any file uploaders that I can edit without changing the link and support HTTP?
wait nevermind they added HTTPS
I'm so silly
I was about to say lul, my first google was saying they added it already
also is it just me or is the post not pinned?
maybe my discord is bugging or he didnt pin it
it's not just you
is there a way to make your own challenges?
Oh my gosh, people are making mods that honestly are making my job easier for porting Dungeon and Degenerate Gamblers
Needed to figure out how to make new Ranks: BOOM RANK MOD COMES OUT COUPLE HOURS AGO
Needed to figure out how to add the "Nothing" suit? BOOM SIX SUITS
The power of community driven modding
Since I'm combining all my concepts into one modpack instead of "DNDG mod", "Concepts" and "Additional Suits" as separate things...
Why not just have it all in one
Oh and yes, the Murphy's Law joker I concepted will be made
that's actually a plan that me and Golden Epsilon have, except we plan to make it work as an enhancement and not as a new suit
because it makes no sense for a suitless card to ALSO be able to be a wild card
Oh sick. I'm only making it a new suit that you can't use normally because DNDG card logic
Like DNDG cards, you can play them in poker hands, but they could cause some weird stuff to happen
How'd you make the artwork?
you can unzip Balatro's .exe file and get into the assets
from there you just edit the sprites
ah alright
Edited together showman and burgler and then added the banana
couple examples I made of this concept
Oh that's cool
I'm a sprite artist as a hobby so I know my way around a pixel
for an edit, what you made is pretty damn good
actually no, I do want feedback from you in particular, are those above jokers readable as to what you'd guess they'd do?
(left is a suit joker for suitless cards, right is a suit joker for wild cards)
But yeah, I plan to try and recreate negative ranks and additional ranks from DNDG.
So you could just randomly get a 21 of Hearts in your deck
I'm gonna Add the booster pack from DNDG as an actual booster where it gives you 5 cards and you have to take all 5 (no skipping)
there's hearts and spades in there as well
left is grey, right is gold taken specifically from the golden joker
it's basically just a glorfied edit
so whats the best way to add a joker to your game? I guess i can just add one in the code, but idk how to add a description and artwort
also does anyone know the best way to add a voucher? i see some example mods for jokers
Curious why you didn't make it rainbow, sham
(instead of gold)
all of the other sin-themed jokers are in one color group
Well, after i get the effect working, i guess i try working on multiple jokers in the same mod
couldnt this just be easily manipulated by just dragging the suits around?
Yes
seems too easy so like idk how the xmult should be
since you can get 3 turns with x2 mult for free
make it per blind
that depends on your build
so you have to play 2 hands
this really doesnt make it too dependant
It would also be unusable if you're playing one suit flush or something
But i spose any other build it works okay
Flower pot is 3x if it has all 4 suits which is a bit more tricky
at X2 it really doesnt need to be very hard to proc
well idk there isnt really a good way i can see to balance this
also how do you spawn a specific joker/card for testing?
probably just leave it then
Debug console
yeah i think its balanced fine rn
debug menu
Can spawn it from collection
how do i bring up the debug menu in debug mode?
if you have the mod its tab
ohh tab
i tried pressing every letter
nope
tab does nothing
q works to cycle editions though
That’s odd
you hold tab
The other important hot key is 3 to spawn things from the collection
just hold tab and youll see which one does it
you dont need the mouse to be able to see all the commands
do modded jokers not get added to the collection?
I believe putting them in the collection should be part of the mod
ohh okay it was being odd and not loading it but relaunching it loaded it
smol joker was too smol for the sheet
🤔
Time to make the ULTIMATE DECK AMALGAM
Not combining effects into one, but taking real life decks and combining them into one set
lol
i've been trying to get a couple of joker arts working with using a custom asset atlas (instead of the base jokers one), and it's not quite working (when it initially loads the sprites, it's loading from the base game's jokers.png), but if I used debug to add the joker to my hand, the art in the collection window updates, but the jokers it actually spawns use the base jokers.png art
I noticed that when spawning in a joker with the debug tool, it does call set_sprites on the card (because it was locked/undiscovered, it wants to unlock/undiscover it), so i'm not sure why it's not hitting right when it initally loads the sprite in
I'm thinking the first thing is gonna be not even a Tarot or traditional playing card thing
It's Hanafuda
A new release, patching CRLF issue have been deployed: https://github.com/Steamopollys/Steamodded/releases/tag/0.6.2
CRLF
downloaded and tried loading, crashes on 1.0.0k-Full
like it loads the window then closes it
I think you did not reset the gam properly
I'll try again then
I removed every file then press the verify integrity thing and got a fresh balatro, still doesn't work
V0.6.0 still works fine
Though that's on balatro 1.0.0i
is steam running?
I just installed latest version of 0.6.2/1.0.0k and it works fine for me
lemme try
yeah you try. i wanna see if it's me or the injector acting up
and so far it's looking towards the injector if 62+k doesn't work but 61+k does
Hm?
I'm getting out of memory crashes
huh...
lemme close out of vscode and try that again
okay what the heck then
Can anyone who's played a bunch on a profile give me their profile.jkr file?
Which file should I edit if I want to modify the 4 color deck? 8 bit deck opt2?
yes
I see, thanks
8 bit deck and 8 bit deck opt 2
Both?
for low contrast and high contrast respectively
Ohh
Okay
I mostly want to make clubs green, I like all the other colors
but not blue clubs
ok
clubs green and diamond blue are what I've always seen as standard for 4color decks
Works perfectly now
ty ty
I still don't know what happen, but sometime specific users have this issue
oh what the
okay guess i'll have to reimport the mods
wait fixed
I got it working, but if i ever need to try, i'll definitely check it out. Thanks
Mr. Jay
When you progress to the next Ante, destroy all other Jokers and gain their effects.
After beating the Boss Blind, loses all gained effects.
The oldest one destroys the others (triggers first)
always
is age kept track of in the joker slots?
so you can't create some janky echo chambers
also it could just be made incompatible with blueprint
I'm not a dev, can't answer that
I mean, we have access to the code for jokers, because that's how we're able to mod in the first place
I was mainly saying it because I'm not aware of age being kept track of
I mean jokers can store custom values in them
true
yeah
looking at the save, doesn't seem to be any kind of age
in that case they would trigger from left to right
or dupped copies would automatically have less age than the original
ig there are many ways to adjust that
what do you think?
probably left to right just makes more sense
yeah
ok actually, i've got it pulling in my art now it seems, but I must've done something wrong because they do some weirdness when being click and dragged (maybe because they don't use the joker atlas, some bit of code may be looking for that specifically?)
the sprite doesn't slide back to where it should be
Basically the idea behind Mr. Jay is that it technically gives you +4 extra Joker slots but you have to pay for new random Jokers from the shop every ante. It also synergies badly with Jokers that have stacking effects
it is kinda silly
Not the joker wit da pitties
lol yesss
it's like that Ourobouros snake that other guy suggested
iirc
making the wraparound straight work was the first mod I tried out, just to dip my toes into the code a bit. Now that I'm getting more comfortable, I wanna start getting the effects onto jokers
I wish I could code!

it's partly a curse, i've only played like 4 rounds of balatro since i started digging into the code for it 😦
do we have proper joker tools in the modloader yet, or is each mod just hacking it in?
right now they're just getting hacked in, that's why I'm trying to figure out a friendly way to do it (so I can help with suggestions on a joker api)
Yeah I've played balatro like 1 round, (and well it was my friend playing but I helped) and I've been doing save loader the rest of the time
haven't even modded the game yet
the save editing is kinda crazy powerdful
WHAT
I swear everyone but me has made a wrap around joker
it was the first thing that came to mind, and a really quick "lets learn how something in the code is working", honestly i'd throw "make straights wrap around aces" as a junior dev task at work if I could
I should mess with the modding tools, but I'm afarid I would not work o my save thing again cause I would be too busy with that
Welp, I'm concepting a mod
Not sure which one works best but it'll be crazy if it works
I'm somehow mixing KoiKoi (The most popular game using Hanafuda) with Poker (Apparently the second most popular traditional playing card game)
Now I personally believe Poker is more popular than spades or Bridge, but Google's saying second overall
i managed to get this much money with the super random deck
and the 2 interest vouchers
the devil
i got a question. if I wanted to get a quality image of one of the jokers, would I have to download Love2D?
ohh thank you!!
it should then be in resources > textures > 1x > jokers.png
gotcha. i got it opened! i wanna print a sticker of my friends favorite joker and give it to them so this is perfect
oh wait @pastel wolf i got it working i'm stupid
Bootstraps would be balling with this
let me just make sure it doesn't conflict with the rkeys joker really quickly
it work!
my 2 are using their own atlas, so it doesn't overwrite the full "Jokers" atlas (so it can play alongside other mods)
I wanna make a joker but I'm still clueless as to what effect the test joker would have.
yeah i have bootstraps
Maybe "King, Queen, and Jacks are considered the same rank"?
I'll share a bit more tonight when I rewrite and put the effects into the jokers, and not just have them as standalone mods
allow straights to wrap from high to low
genuinely a good way to start digging into the code
Like if you had this joker + Hit The Road and discarded kings that would proc HTR as if it was discarding jacks
wild face
Yea something like that
Blurry face
lmao
so im messing around with the debug mod
and i decided to give myself the two interest vouchers
and a ton of to the moons
and at a point the money symbols literally condense into
yeah when I had like 999 hands it does that too
¯_(ツ)_/¯
no, but it could be added with a mod
I can modify the save to get like 1000 double tags
modify it how
AppData/Roaming/Balatro
if you give me a save with a double tag in it, I can give you as many double tags as you want
i should do that
wait what are you wanting to do?
sometimes the voucher behaviours can be changed manually
I should do the same too but I'm not sure how you'd implement that.
wait hold on I might've found something silly
I'll have to check later
oh fun fact for people, the game lets you select more than 5 cards in a hand, but doesn't let you play them
but it shows the hand type on the side
and you can discard
and 2 3 of a kinds is considered a 3 of a kind and not a full house
@proud wadi if you could send the snippet for custom atlas thatd be nice
Thank you WarioWare
all of the objects' prototypes are in the main file
have been working on the transforms for them though
wdym main file?
of the source
game.lua maybe?
I can pull out my file searcher
oh I haven't even really peaked at the code much
I just extracted it like earlier today but just to get some images
then I got curious abou the MANUAL_REPLACE so I took a small peek
think it's just a placeholder?
it appears the game uses it to encode some stuff it can't encode into the save
but I think for the most part its probably just a monkey patch to use the save directly as the in game object
I wonder if I can replace the save load encoding
with the mod loader
So wait, what’s this custom menu?
It doesn't check for straights if you have more than 5 selected I think too
Yeah when I get home tonight I'll send something over
bruh does lua/love2d not have a built in way to encode objects
oh neat looks like balatro's save loading is a modified version of this https://github.com/BroccoliRaab/SaveData/blob/master/saveData.lua
oh it appears to, although idk how much this will properly encode https://love2d.org/wiki/love.data.pack
oh it doesn't look like it does objects
so I would need to write a bunch of code
man thats annoying
im confused with the mod installation
do i drag the balatro exe/shortcut into the modloader.exe?
Can you link what’s the best version to use for .exe cuz the version I used didn’t work
lol idk what I did
oh I had like all the other planents in my consumable slots
pluto must be the fallback
Me when I go to the pluto and fool store
showman probably
why are there NORMAL cards in your joker slots? THe heck
how do you have playing cards in your joker slots
what did you do???????????
huh
ye pluto and fool are the fallbacks
Is there currently any way to import any of these mods into my game?
Ty
why not
funny enough I haven't modded my game yet
wait what?
save editing
We need to archive the old versions if they aren't already
I'm working on making cards able to be easily modded and not just manually modded
what kind of cards specifically?
Like just jokers and consumables or playing cards too
uhh I plan to support all card areas so it should be jokers, consumeables the deck, play (which I think is cards it can draw) hand discards and the shop slots
awesome
Because some of the interesting mods that have come out include new suits and all ranks (but that's just me)
Plus that'll help make creating my hanafuda deck and all that
actually I should see what the packs do
they also might be able to be modded when your in one
oh?
The game saves a lot lol
looks like the game doesn't save the cards that are in the vourhce but just that the vocuher is being opened
booster*
silly game
oh
oh?
I know my card effects are gonna be hell since I'm using Suit and Rank in the same ID
You can play Straight House with this and four fingers (ex. AAKQJ)
Now you’re obliged to add that as a secret hand
how are people creating their own jokers?
(ik you program them in but where would you do that?)
oh no what have we done
wait uhh
uhm
I didn't think of that lmao
also this makes KQJQK 5 of a kind
You write a mod for it, that injects into the game files
I'm turning hanafudas as ONE suit altogether, so that's why it's gonna be a pain
yeah i understood that, more of a question of how people are getting into the files. I'm fine with the programming aspect it's just the part of safely getting access to it that i'm curious about
You just open the exe's archive
man im excited for this
For context this joker makes Jacks, Queens, and Kings considered the same for scoring jokers (i.e. if you discard a king with Hit The Road it will gain mult as if you were discarding a jack)
I didn't think of extending this to hand scoring.
I could add the latter assuming my mind doesn't explode trying to figure out how they're scored
Does this also effect the all cards are face cards joker?
No Pareidolia works differently
Trying to think of what Colors to make each seasonal Joker
Current WIP of Fall Joker
Dunno what color to make it still
Probably a red-orange.
is there a context for when a joker is added? either bought or from a card like riff-raff?
I mean the game unlocks them if it's the first time getting it
So there's definitely something
what does it do
It's for my Hanafuda deck I'm doing
It's the equivalent to the Greedy, Lusty, Wrathful, and Gluttonous Jokers
ah thats cool
But it's gonna be for the fall seasons in Hanafuda
So September, October, and November cards give +4 Mult
If you get hanafuda packs in your normal game, you can buy the cards to treat them like stone cards
looks like add_to_deck may be the place to put it. thanks
https://gist.github.com/theVDude/d6dab9f8ec49091616b7248d84489111
the assets I made/used have a single row of 10 worth of space, but i'm only using the first two slots right now. Figured I'd leave myself space to grow.
the main bit I needed to do was in "set_ability", have it call set_sprites again (I think when it first loads it, the atlas hasn't finished being created, so it falls back to the Joker atlas because that's the set the cards belong to, i'm not 100% sure)
is it possible to cleanly override the generate_UIBox_ability_table function? i need to pass some local vars to my joker ui
what
that seems incorrect
its acting like you have paradoleia
or however you spell it
I think I screwed up formatting
it's effecting all cards it seems
So much more is going wrong
oh yeah I see
for each card it's running all other jokers, even if it's not in your played hand
I love buggy code that doesn't crash the game
wait
literally all the jokers except baron are triggering as if they are shoot the moon
managed to get it working, mult goes up for every consumable purchased as well though
Lol
PLACE
HOLDER
Me when i be holding that place
I don't think that's quite the proper terminology
But neat
The other 3 are a little too bright i think
Then again game shaders make things darker
Alright, I'll ask you all: Red Frame vs Black Frame Which looks better? (This would also be the card back)
Red would work with the game palette better
My suggestion is to make the other darker color more darker
If you're worried about that
Should make the jokers less overly bright
you can see how i overrode the generate_UIBox_ability_table here. it's not pretty, i'd love to see a cleaner way to do it if someone has found a way https://github.com/lusciousdev/LushMod/blob/main/LushMod.lua
I hue shifted the original, they're shaded the exact way from the others but i can look
i basically just reworded the obelisk description lol
unless you mean deck is the wrong term for where your jokers go
How did you get it to update the current mult amount
I need to add current suit to mine that im working on but cant work out the wording
you need to override Card.generate_UIBox_ability_table, see my github link above
I will do when im home
the way i did it is messy and probably will have unintended consequences
Guarentee you did it better than i couldve
But yeah, gonna ask around
I mean my effect doesnt even work yet so
i think both of them look good
For now I'm only doing one
i like black more
Black could look good, if you use the dark green that the palette considers black
ooh yeah
Yeah I agree, black looks better
or maybe a black to red gradient but that seems impractical
I'll do just black then
Is there something i can look at to assist in making custom playing cards?
hey btw what os are you guys using to run the modloader
Balatro
i mean windows version or whatever
balatrOS
thanks, very helpful
花札 mod? i've only ever had decks with black backing, the red is pretty though
First card done
hey guys where is the balatro mod folder
I'm limiting myself to Balatro's color palette btw
Neat
Yup. I'm #1210976027036352582 is where I'm concepting everything
ooh very cool, good luck! i like the look of the first card
please
Thank you, A lot of the hands are based on koikoi with a hint of poker logic too since Balatro's poker
Read the modloader github, all info should be in there
yeah they talk about it in the thread
False positive
it literally won't let me download
make exception in Balatro folder and save there
use firefox
they talk about it there
Yeah that
i changed it to just "per joker added". not sure if that's clear enough
only reason i called it the deck is the function that gets called when you buy a joker is "add_to_deck" lol
but i agree i wouldn't call it the deck without that knowledge
I'M A FOOL, I'M THE JOKER
in my quick sample i even have a comment "you could check for just your jokers but i'm lazy", but just reloading the sprite for everything causes a few issues, like half joker, photograph, and wee joker
note to self: don't be lazy
Finished August's cards
Laziness is only worth doing if it's well executed
I think I fixed all the bugs for this barring one (Mail-In Rebate is double triggering, not sure on how to fix)
nvm actually they all do and I know why and I have no clue how to fix without just directly overriding the calculate_joker function
Now the fun begins
by the way do mods screw up achievements or anything
i'm gonna assume not yet because modding is still not even really an intended addition to the game
like it works, but it's not accounted for in the code or at least that's what i'd assume as a dev in other things
apparently the mod disables steam achievements
only because the modloader was configured to do so
