#⚙・modding-general
1 messages · Page 20 of 1
Mobile version ...
imagine this..... A deck called the angelic deck
This deck has only numbers that is angelic in nature so no 9 no 7 no 6s
.....
Steammoded isn't working for me (BC antivirus)
imagine reading the rules
It is possible but:
https://discord.com/channels/1116389027176787968/1212395714920054864
Do not discuss porting balatro to other platforms
😬
<~> literally no one reads rules
Obviously
that sounds like a you problem
how do you disable antivirus
The first thing I did was read the rules and I don't even see a reason to talk about that anyway
Exactly
I'm gonna loose it lmfao
Random question.
Is there a mod that lowers the curve of endless? As in doesn’t get so hard so quick
Thx Lyman!
🫡
Ayo, I'm using Sound_Util and I want to add sound effects to other cards besides Tarot
Where does balatro internally reference the names of cards? Is it literally just plain text whatever the card is called?
I wish I knew a modder that would take on the task in making cursed card as a separate thing from upgrade s (and whatever Polly's are) lol 🤣 and make a couple jokers based on curses and add one tarot and spectral card one to possibly add a curse with great value to the card and the other to remove unwanted curses
there's a big ol list called P_CENTERS in game.lua that has the internal name for every card, as well as a bunch of other metadata. but it is usually just the english name yes
oh, groovy
I'm building off of @gleaming talon ' sound utils and jojo mod to make a mod to play The Binding of Isaac voiceovers when using certain consumable cards
The Tarots are straightforward but if any Isaac fans have suggestions for runes/souls/others to use for the Spectral Cards I would be thrilled
which modloader has better mods?
steamodded has been around longer, so it has more mods
personally used balamod for my mods since i prefer its utility 👍
Exactly like java and fabric
I'm working on a way to block sounds and also block sound and play another one instead
[very bad idea]
probably a bit legally grey from a copyright stand point
so technicially as long as you don't break anything you can just add a line or two to the og function
trueeeeeeeeeeeeee
i didn't say anything then
that's also kind of what balamod (and lovely) allows you to do where you can inject code into the middle of a function (without rewriting it of course)
yeah i figured.. the thing is we are at a point that for the mod to be more compatible, smod seems to be favourable
lovely at least doesn't have the same compat issues as balamod, because it already runs before any lua is executed so it doesn't encounter issues with overridden functions
evident from the fact steamodded can be trivially installed as a lovely patch
actually now that i think about it i don't really rely much on smod itself in my mod code, still have been reading G most of the time
if only people can make a even cleaner framework that unites the two...
i thought somebody's been doing that tho
(there are now three competing standards)
there are now 5 competing standards.
there are now 10 competing standards.

(video in the 90s and 2000s was like this)
40 competing standards!
naneinf competing standards
oh no you beat the game
10e307 competing standards
ive now read competing so much it looks spelled wrong spelled correctly
nuh uh
having this error with im pretty sure mikas mod idk whats causing it tho, also a screenshot of my mods folder
if anyone knows why this would happen or if this is a common issue
just seems to be a visual bug
loaded wrong argument for rendering messages
is that a bug with the mod or something on my end
if it is not intentional then yes it will be a visual bug
it's likely a compatability error, hard to say without looking at each mod individually
^
alright ill just take them out one by one and see if i can figure out which one it is
you can comment in the mod release thread to confirm whether this is the case across the board
my guess is that community pack is the culprit, since that's the only balamod mod there i think
yea that was it just got it
didnt know it was balamod
probably shoulda payed more attention lol
🤔 code is right... ability.extra.dollars... are you up to date ? (2hours ago)
bankerJoker = {
ability_name = "MMC The Banker",
slug = "mmc_banker",
ability = { extra = { dollars = 2 } },
rarity = 1,
cost = 5,
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = true
},
elseif self.ability.name == 'MMC The Banker' then
loc_vars = { self.ability.extra.dollars }
bankerJoker = {
name = "The Banker",
text = {
"Earn {C:money}$#1#{} for every",
"{C:attention}Gold Seal{} and {C:attention}Gold card{}",
"at end of round"
}
},```
is it possible that my windows defender is flagging the steamodded injector?
So I guess it's in your side, not the mod @dense dock
not possible, almost guaranteed, that injector flags antivirus' like it's going out of style. if you continue to struggle getting it to work, you could try installing steamodded with lovely which uses a dll instead, there's a tutorial for that in the modding forum.
im just reading up on that
i think my defender just autodeletes the injector exe
by modding forum you mean #1209506514763522108 ?
yeah
thanks🙏
Disable real time defender 5min
but itll just autodelete it next time i turn it on so idk
id have to keep redownloading
trying lovely rn!
let me know if defender flags the lovely dll
Once installed ? Weird
not so far! im creating the mod folder and starting game soon
it's funny because in theory Lovely is just as sus as the injector
I think what gets flagged is the shell exec + exe patching
and http query for 7z
my running theory is that it's because it's an exe with embedded python, lots of malware likes to take that form too i hear
Gold stake getting changed to white stake. is this likely a problem with modloader, or a specific mod I am using?
it's likely just a perfect combination of sus behavior
I am playing with @coral shale 's score preview mod
Hmm, probably something to do with how I change the UI to display the score. No clue exactly how it works and how to fix it 🤷♂️ 😥
I have Balamod and Steammodded both downloaded. What kind of problems could that lead to? Aside from the text in top-right corner copying Baldi's Basics Q3.
nothing flagged and the inject seems to have worked but none of the mods are loaded
most likely me being an idiot though

some balamod mods will probably break some steamodded mods
am i doing anything wrong here 
just downloaded some random ones to try out
maybe its too many at once
There should be a folder for steamodded in there, if you're using lovely.
yeah, looks like you skipped the steamodded install step
good idea 
Is there a way to unload Balamod/Steammodded?
so i tried out that mod that lowers the ante scaling...
think imma be done there
its only like XXe12 on ante 39 so you can get to like 50 probably
incase anyone was wondering if u buy all vouchers you just get blank voucher in the rest of the shops
that's why normal endless has exponential scaling: to prevent people from burning out from the game after playing hours for one match
Unrelated, but I'm so happy to see my preview mod being used already ❤️
Lmk if you find bugs 😄
I think the scaling is a bit too rough past Ante 15 or so, tbh. I could do with some leniency to be able to have some flexibility in later-mid-game decks
Hot take:
I think the game should still have exponential scaling, but less than 1000^x. maybe 10^x?
I wouldn't decrease it that drastically
Maybe 50^x?
I think it should not be a strict math function. Antes 1-8 are great, 8-12 are also fine, but I would slow down the increase between 12-16, to make the second boss more reachable, and then make it go sicko mode
Oh, so like in BTD6?
I wouldn't know lol
Late-game ramping is linear, but it grows every 50 rounds.
Nah, I'd make everything past Ante 16 exponential
You could maybe decrease the rate of increase but increase the appearance of bosses to make it more interesting
I like the latter. My idea would be:
First major boss (Cerulean Bell, Verdant Leaf, etc.) still appears on Ante 8,
second one appears on Ante 15 (1 Ante earlier),
then each major boss comes every 5 Antes after that (A20, A25, A30, etc.).
the scaling is definetely not 1000^x, a formula is used
(A) * ((B + (K*C))^2) ^ C
A = Ante 8 amount, 80,000 for example
B = 1.75
C = Ante amount past 8, so Ante 10 would be C = 2
K = insane scaling factor
can anyone help me figure out why steammod isnt working? i drag balatro to the exe, it open and closes, and when i open balatro the mod isnt working
using jelly mod fyi
Anyways, I'm looking for some help on trying to get a custom deck to work properly for me.
I made a deck that is essentially all decks in the base game (without drawbacks) put together; however since I have both Balamod & Steammod downloaded at once, the custom deck is doing double duty in places where it shouldn't be:
instead of getting 2 Fools and 1 Hex, I get 2x as many;
when I play a hand, the Plasma property happens 2x (essentially averaging out the Chips and Multiplier twice, which is idempotent [same power]);
when I beat a boss, I get 2 Double Tags instead of 1 (which can be broken AF).
Look in the upper-right corner for overlapping text.
then dont download both?
there's an easy solution here
How can I uninstall Balamod?
verify game integrity
Thanks!
In this Guide You learn How to Download & Install Mods in Balatro! Plus, YOU see How to get New Deck´s and Joker´s via MODS for Balatro!
🔴LINK 1: https://github.com/Steamopollys/Steamodded/releases
🔴LINK 2: Mika Mod Collection which adds New Decks & Jokers:
https://github.com/MikaSchoenmakers/MikasBalatro/blob/9723e72c194299afed96f7718d9c1181a...
guys if i set the interest to:
does it mean that when i add the two vouchers 100 is the new cap?
then it gets confusing when code says:
v_money_tree= {order = 22, discovered = false, unlocked = false, available = true, cost = 10, name = "Money Tree", pos = {x=1,y=3}, set = "Voucher", config = {extra = 100}, requires = {'v_seed_money'},unlock_condition = {type = 'interest_streak', extra = 10}},
v_seed_money= {order = 21, discovered = false, unlocked = true , available = true, cost = 10, name = "Seed Money", pos = {x=1,y=2}, set = "Voucher", config = {extra = 50}},
50 extra, and 10 extra? what is going on?
Every 1 dollar of interest is 5$, so if the interest cap is 10 then 50$ is required to meet it.
Game calcs interest as G.GAME.interest_amount*math.min(math.floor(G.GAME.dollars/5), G.GAME.interest_cap/5)
And G.GAME.interest_cap is set to the extra value in both those vouchers when redeemed
In this case, it doesn't matter. The game overrides it when either voucher is redeemed
thank you
do you think there is a way to change the code so 100 met after buying the two vouchers? woudl that be too complex code?
Super quick way to install Balatro Mods
https://github.com/AkitaAttribute/GetSteamoddedAHK/blob/main/README.md
hey this seems like the right place to ask; has anyone written an explanation for what's what in profile.jkr? specifically i want to know where joker stake sticker data is.
It would be interesting to try and analyze it actually XD
I know it’s compressed
if i open it as bz2 it's recognized as an archive
but it's exactly the same file 🤔
actually it looks like that's just ark filling stuff in
try it from terminal, no dice
it looks like either it's not compressed, it's compressed in some strange format, or it's encrypted for some reason
well it looks like someone has indeed figured it out
balatro.exe can straight up just be unzipped as 7z so maybe there are clues there
aha
the get_deck_win_sticker function in misc_functions
okay poking around a little more there's compression going on for sure
aha
found it
oh it's just raw zlib
yknow i really should have guessed that
oh wait looking at all this modding the game is..... really easy actually
nice
huh
it isn't even though love wiki says it is
now i'm confused
oooooh wait i misread it
well okay looks like you just have to decompress it with deflate
(note for future: most online decompressors will expect base64)
how many hands is there on average in a run?
i know it depends on your deck and all but just on average
assuming about 4 skips and an average of 2 hands per round, 40 at the end of ante 8
i have no idea how close that is to the real average but it should be in that ballpark
alright yea that makes sense, ty ty
Does anyone know if the sprite of the card is separate object/child of the card itself?
I think it is
I am not home rn, so I can’t check, but try to look into card.draw or card.set_sprites
I don't think that's it, I tried used self.children.center:juice_up() and the sprite did nothing
youre not supposed to juice_up the sprite, you juice_up the card
well in my case I need to juice_up the sprite 
wouldnt juice_up on the sprite mean using juice_up on the card 🤔
I mean yeah but I also added another child to the card and I don't want it to be affected by parent's shaking
Sprite objects dont have a juice_up function, only the Card object does
you could try 'manually' juicing up
oh I entierly forgot that some functions require specific objects
yeah I know what to do now
ty!
👍
so, a quick primer on what's in profile.jkr for future reference: first off is hands. Pretty self explanatory. Hand name, number of times played. After that we have some miscellaneous "best ever" stats that are also pretty self-explanatory. Next is consumables, with two fields. Count is number of times used, order is where it appears in the collection screen. This goes for vouchers too. Also in the consumables section we have "all time" stats like money spent, face cards played, etc.
Next up is decks, and this is where things start to get a little more complicated. Here's an example:
["b_checkered"]={["count"]=1,["wins"]={[2]=1,[5]=1,[3]=1,[1]=1,[4]=1,[6]=1,},["order"]=10,["losses"]={[7]=4,[5]=1,[3]=1,}
As you can see here, the first field is the deck name, so we can tell we're looking at stats for the checkered deck. Second, we have the wins section, where we have the numbers in the brackets representing stake (1 is white, 2 is red, 3 is green, etc) and the number after the equals sign is the number of wins on that stake. Second section is order again, which is 10 here, and if we go to the new game selection, sure enough, checkered is the 10th one over. Last is the losses section, which follows the same rule as the wins section. So put that all together and we see that I've won once on every stake from white to purple with this deck, but failed once on green, once on blue, and 4 times on orange.
Last of all we have jokers, which work on just about the same lines. Ex:
["j_vampire"]={["count"]=180,["wins"]={[2]=3,[3]=1,[1]=3,[4]=1,[6]=1,},["order"]=68,["losses"]={[1]=6,[5]=1,[4]=1,},} shows that it's the 68th card in the collection screen, i've won with it thrice on red stake, lost six times on white stake, etc. Count is unique here, it shows the number of rounds completed with the joker instead of times used like with consumables or vouchers.
What format is a .jkr file?
It's clearly not plaintext
if I had to guess it's some object notation
what app should I open one with
it's compressed with the DEFLATE algorithm
online converters exist but they expect it in base64 usually so what i did was open it with a hex editor, copy everything, convert to base64, and plug it into one of those
it's just gzip without a header so i'm sure there's some command to just do it without all that but i'm not sure what it is
does anyone know what happens if you use a soul card while having every legendary joker
iirc you get jimbo
does he do anything or does he just jimbo
he's just jimbo, the default joker
+4 mult
I don't understand why ?
I'm doing something like that, why would it have legal repercussion ?
is this about the no debugging of source code rule?
that one makes no sense and no one knows what it's supposed to mean exactly
my guess it was supposed to be about decompilation, but the source code is no longer compiled to begin with
so don't worry about it
It's more about the legality of intelectual property rights
Software is split into two things. The product the consumer gets and what makes that product (the code). If you buy the product you aren't entitled to the code unless its expressly granted in the terms.
So even though the code isn't compiled, you're still not entitled to it as that is the property of the programmer, or if there is another legal entity involved which supersedes the individuals rights
but regarding "debugging", the game exe is literally a copy of the game's source code
and thunk definitely doesn't mean we're not allowed to inspect the source code you can literally just extract from the SFX
There is various legal clauses for reverse engineering depending on where abouts you are, and the softwares legal distrubution rights. So yes, looking is fine. But basically debugging creates a copy of that program and is essentially classed as piracy.
It gets tougher to argue with languages which aren't compiled, but the precident is that running decompiled code, even if debugging, is piracy and thus should be avoided
The laws around it are mostly designed to protect against loss of revenue so don't really care about if a programming language is build into a distro or if its running through an interpreter. It's just "you ran it, you're guilty of piracy"
With games, you also have the legal president of game systems are often IP in themselves. So it then is even worse for you to be reverse engineering stuff.
In a legal defense in that situation you best hope you're doing it to expose predatory mechanics or its going to be a very expensive time
The laws and precident around it are archaic and view software similar to a factory. So the law treats it like "just because you bought a car, it doesn't mean you're entitled to enter the factory, and certainly not allowed to tinker with things in that factory"
I don't agree with it, and on principle I make sure all code I write is able to be open source. But it's the way the law is. It's best to be careful around stuff, as getting cease and desists or other legal things is intimating and expensive
Is there a way at the moment to include a new rank without breaking compatibility with other mods ?
I have a joker concept revolving around number 13 cards but I don't want to include it if it breaks other joker/decks mods.
yeah, I made a whole playing card API for steamodded, which allows you to add both new suits and ranks
I'll check it out, thanks
Do you think adding a new consumable type would hog the consumable slots too much, or do you think it’s fine?
probably okay
especially if it doesn't show up in shop by default like spectrals
I dont think so, you use most consumables asap anyway, I guess
I did not check yet, but do we have an easy way to add custom booster packs? I want to try to make a booster that only includes Themed Jokers Jokers for example
Probably yeah, but I will have to check on that further
oh oh, rip compatibility with seal maybe
haven't looked into that at all yet, but with how everything's coming along, an API for it isn't out of the question
It won’t be that hard
Oh BTw next update of FederAPI will have seals, planets, and spectrals
And maybe boosters if I will get them to work
i was just about to ask about planets lmao
I'm gonna try and figure out a priority system for mod loading
The way I update FederAPI was by checking what my mods (MusicalSuit, FederRandos, and a secret one for now) need, and add that
But yeah i can add planets
I'd just implement it myself otherwise, but there's no need if you're already on it
I need to understand how the shop works better, I would love to be able to debug that mf XD
I’ll be on it at the evening. I am not near a pc rn
looking forward to that. I would have no idea where to start , if i had to add that on my own
If actually pretty simple
I already know how consumables are configured, and I can just modify my present registers to accommodate for it
Since all registers follow a similar format
Is it possible to inject into localization files?
with lovely injector for sure
without it?
actually I'm trying to figure out where the localize() function comes from and I checked every file and couldn't find it
its in misc_functions.lua, I think
oh yeah, thank you!
how do I check if all the scoring of the played hand is already done? I feel like i've tried every combination of contexts there is, but my Joker always triggers before the final score of the hand is calculated
I use vscode with it's global search function
I use vscode too but I never actually unarchived the files
hello, it's me again, i cant instal/download the steamodded injector thing on any browser, it always says virus detected
does anyone know a fix?
use firefox
also use the lovely injector
also press keep if popup
i'll try
Using the ps script is a good way around it
sounds like it should be
I've finished my Custom playing sound API and I'm pretty happy with myself,
I have :
- Autoloading sounds in a folder and autodefine sound_code to play them based on their name
- Playing a custom sound by calling it's sound_code and you can modulate it's volume and pitch
- Stopping a base game sound called by the game from it's sound_code
- Call a custom sound when a base game sound gets called with the possibility to modulate sound and pitch
hey, apologies if this is explained somewhere. not very knowledgeable on github/modding, any idea how i install balamod?
I believe there are fairly detailed instructions on the Balamod github page https://github.com/UwUDev/balamod
i think i'm getting there
do i need to run this or sm?
if the instructions say so, I guess. I haven't used balamod myself yet
really sorry man i have no idea how code or any of this stuff works
thats literally all it says for easy install 😭
so confusing
that's probably all you need to do then
would i run it in command prompt?
It's made by UwUDev... shit I should have modded on balamod
same
where do i paste this
It's a description of the file structure. The indentations represent folders or files and the roaming/Balatro is the games main folder structure
what 💀
depending on how you handle the 2%, like 0.98 * 0.98 or 2+2
If you do 2+2 etc you can go up to 100% if you're lucky enough
and 0.98 * 0.98 is a real 2% decrease each time
I haven't coded it in but
good point
Well you do what you want but multiplying by 0.98 will avoid it reaching 0% too fast
or stupidly low %
yeah, I was also worried about it reaching the lose treshold of 25% lol
lol, all that for +5 mult
it was a test, okay?
I'm still finetuning it
Ignore that it's orange x2
Just messing around with the text is all
Trying to find the right balance
That's better, plus come to think of it, if you can easily make glass cards (which this Joker does) it doesn't matter if they die immediately
As long as you don't run out of cards
yeah
Just found out in the localization that the border of the mult is just part of the font so it can be color changed too
you can do cursed stuff like this
do you know how i download center hook?
so in theory if i get this on a1 then at a13 it gets to 0%
Yeah that's why I asked him to change it
now on ante 13 if you get it ante 1 it'll be 0.40 (with the 2 vouchers that reduce the ante by 1)
why would you even need x2 mult there 🤔
is it supposed to be "this joker isn't that good, but X2 mult so you would want to pick it up"
i dunno
I'm just trying to make a joker with code right now
I'm not trying to make anything good/bad, I just wanna MAKE the thing
So I have a really peculiar problem. I downloaded steamodded last night and then it worked. I got a mod on it, but then I cannot find the file to place more mods into. I even asked here, and it seemed everyone I asked was stumped, so I just deleted steammodded and deleted Balatro and reinstalled it and now I for the life of me cannot figure out how to make it work again.
It was supposed to be originally a specific type of card but I don't know how to do that
Certificate adds cards to hand
I've finished My custom playing sound
it should do basicly everything you want to do with sound in the game
Hi. I just started the modding of Balatro. I wanna know is it possible to launch the game with Steamodded + Balamod mods?
It's possible
but it's also very possible your game crashes
so not recommended at all
I had that fear, I guess i will just have to make "mod" packs and switch from time to time
yes but there will be no support if anything breaks
frick
wel I'm a pioneer
but the function is really scary I don't understand everything lmao
i cannot find this method
So I recently installed Steamodded using the Lovely Injector after having done it the "classic" way before, and installed a few new mods.
But now I'm getting this error.
looks like an incomplete install of one of your mods. Mind showing me your mods folder so we can figure out which mods are affected?
phew, that's a lot
there's not supposed to be an assets folder directly in your mods directory, all mods that have assets should go into a separate subdirectory
iirc FrenchTarotCavalierCard should have assets...
that's probably the culprit since "8bitdeck" is the name of playing card art file
Alright, I'll reinstall it and see if that fixes the problem
That did it! Thanks y'all
😉
No idea how I installed the Cavalier mod wrong like that but now it's installed correctly and Balatro launches as it should
when there's more than 1 thing in the installation put it into a fodler
watch as it breaks again due to all the mods
Welp, I still don't know how to bugfix this
but I'll do it in a bit
Plus I gotta add the function to shatter glass cards after scored
local loc_def = {
MurphyLaw = {
["name"] = "Murphy's Law",
["text"] = {
[1] = "{X:red,C:white}X2{} Mult",
[2] = "When Round begins add a random {C:attention}Glass Card{} to your hand",
[3] = "Scored {C:attention}Glass Cards{} break after poker hand"
}
}
}
-- SMODS.Joker:new(name, slug, config, spritePos, loc_txt, rarity, cost, unlocked, discovered, blueprint_compat, eternal_compat)
local MurphyLaw = SMODS.Joker:new(
"Murphy's Law", --name
"MurphyLaw", --slug
{extra = {j_MurphyLaw = true}}, --config
{x = 0, y = 0}, --spritePos
loc_def.MurphyLaw, --loc_txt
2, --rarity
5, --cost
true, --unlocked
true, --discovered
true, --blueprint_compat
true --eternal_compat
)
MurphyLaw:register()
SMODS.Sprite:new("j_MurphyLaw", SMODS.findModByID("MurphyLaw").path, "j_MurphyLaw.png", 71, 95, "asset_atli"):register()
end
SMODS.Jokers.j_MurphyLaw.effect = function(self, context)
if context.first_hand_drawn then
if self.ability.name == "Murphy's Law" then
G.E_MANAGER:add_event(Event({
func = function()
local _card = create_playing_card({
front = pseudorandom_element(G.P_CARDS, pseudoseed('Murphy')),
center = G.P_CENTERS.m_glass}, G.hand, nil, nil, nil)
end
}))
G.hand:sort()
if context.blueprint_card then context.blueprint_card:juice_up() else self:juice_up() end
return true
end
end
end```
I never used the joker API before
The assignment of the effect function is happening before you register the joker, move that inside of the init function
Well some of my mods just aren't working anymore, like the Neow Blessings mod.
I present to you the showmann check
Does anyone know where cards get (vertically) centered, like Half Joker for example? This code only seems to stretch the card out (from Card:set_ability)
if center.name == "Half Joker" and (center.discovered or self.bypass_discovery_center) then
H = H/1.7
self.T.h = H
end
Like this?
pretty much, you might need to put the register line above the effect function, just to be sure.
What the game does when the pool is empty
Well if I inject into the function and copy the same code but for my joker, it ends up looking like this
local set_abilityref = Card.set_ability
function Card:set_ability(center, initial, delay_sprites)
local X, Y, W, H = self.T.x, self.T.y, self.T.w, self.T.h
if center.name == "MMC Incomplete Joker" and (center.discovered or self.bypass_discovery_center) then
H = H / 1.7
self.T.h = H
end
set_abilityref(self, center, initial, delay_sprites)
end
It does get centered to be fair, but it's also squished
did you look at the original file of Half Joker ?
Feder is figuring stuff out...
ohh tags right ?
oh what's that
i mean kinda yeah
I was searching for the difference with the IG one
it opens the tarot menu rn
yup
neat
I think I goofed up
pool manipulation, done
ooh that's neat!
could you send the code you used?
well now I need to make it do what I want lmao
I just putted not(_pool_size == 0) instead of _pool_size == 0
I'm still testing but I've confirmed that it works
and that it's the right function that gets called : get_current_pool
I wonder what would happen if I replaced everything with a joker
Yeah if you replace tag it's not a good idea
as long as you don't hover on skip blind
you can get through
That's a nice voucher
you can buy it and it goes where it needs to
that's cool
that cpuld be a very neat idea for a special joker that can only go here
oh no
wdym oh no ?
jimbo took over everything
it's not the same function sadly but I probably could
So close yet so far 😔
venti jumpscare XD
You'll get it eventually, I believe in you
lmao
Neat seeing the pools messed with, wondering how difficult adding shop slots/functionality would be
adding shop slots seems pretty easy
huh why does the shop only have booster packs
as long as it has a price I can add it
so for no reason at all, black hole and soul will surely also work
they have a price
hmm
you just never see it in game
but they do
the only reason they don't show up in shops is not being added to any pools
Nice voucher
oh yes
it just works
finally we can perkeo infinite black holes
if you modify this line with ghost deck you should be able to see them in the shop (I think)
and maybe also in booster spectrals
I've seen mentions of people working on a multiplayer mod (reddit and here), has there been any progress? Have been thinking about building/working on one myself, but would prefer to contribute to an existing effort if it exists.
They don't talk that much about it from what I've seen here
maybe someone know if you can contact them in discord or something ?
sounds awesome
Is there an easy way to check if repetitions are triggered? This should work in therory, but you cant return a message for other jokers if repetitions = nil is returned while in context.repetition
---Cosmic - Virgo---
SMODS.Jokers.j_cosmicvirgo.calculate = function(self, context)
if context.repetition and context.cardarea == G.play then
if (context.other_card:get_id() == 12) then --repeat played queens
addcountertocosmic() --add 1 counter to Cosmic Jokers
return {
message = localize('k_again_ex')..' +1 Cosmic',
colour=G.C.PURPLE,
repetitions = 1,
card = context.other_card
}
end
for i= 1, #G.jokers.cards do --check if other Cosmic jokers would repeat and add counter
other_joker = G.jokers.cards[i]
if other_joker and other_joker ~= self and string.match(other_joker.ability.name,"Cosmic -") then
local other_joker_ret = other_joker:calculate_joker(context)
if other_joker_ret then
addcountertocosmic() --add 1 counter to Cosmic Jokers
return {
message="+1 Cosmic",
colour=G.C.PURPLE,
card = self
}
end
end
end
end
end
I believe somone else had a similar problem as this one time?
where having steammodded makes the game say the ace isnt there for some reason
simple issue with my get_straight rewrite for the playing card API, I fixed this and put up a PR like a week ago, but it hasn't been merged yet due to Steamo being busy
tried to download base mod but my computer keeps detecting it as malware. help
use the powershell injector or the lovely injector, the executable one is prone to being flagged by antivirus
on inspirion which works better
both should be fine, but lovely doesn't modify the exe directly so you may have fewer issues with it
Is Balatro's source code anywhere? I'd love to look into it
yep, just extract balatro.exe with 7zip or whatever
cool thanks
ive made an api that does this on balamod, if you'd like to use it :3
since the post is flooded with comments anyone know a good walkthrough for installation
there are over 2000 comments
Installation for what?
basemod
Haven't heard of it, sorry
Oh, just read here: https://github.com/Steamopollys/Steamodded
#1217867725532041369 message this guide is the most helpful i could find
yeah that's not terminology people use. you can call it a mod loader, but we have two of those around here
this^^
i wouldn't recommend using the other injectors because antivirus issues, i've never gotten anything like that using lovely
chrome might still not like to let you download it, but you should be fine just using firefox
not the download thing, sometimes windef can block even using it
for the other loaders, yeah
for lovely, I've heard chrome sometimes likes to block the download
ive only had windef block steamodded, balamod worked perfectly fine for me
Hello
yo
the first 2 won't download
After discarding all the shame that remained in me, I come to you asking for a mod that allow infinite money, is there such a thing ?
Short story : I once hit an e36 hand, and never managed to do it again, my frustration won over my integrity
theres the debug mode mod
balamod work for windows?
both work for windows, yea
the steamod can't download
yeah but it's easily rightclickable to fix that
the others arent
try following this
yeah ofc it's a lot easier to make work
Just got the file, thank you, but I'm a bit daft when it come to modding a game, what do I do with that file ?
do you have Steamodded installed yet?
Nope
then go ahead and start by following this guide
Alrighty
then you'll just need to drop the file in the Mods directory you installed the loader into
I hope to come back with a victorious report 🙂
Alright, steps has been followed, altough I don't know how to verify if I did it right
Do I just copy the LUA file into the mod folder ?
yep
Alright, doing it
then just hold tab in game to see an overview of the debug functions
you're welcome :) be sure to check out some other mods as well
we got all sorts of fun stuff
Well, so far, I'm gonna land a score so high my computer's gonna crash, then I'll see 🙂
at that rate you'll want #1216756203833524234... with what 64-bit floats got for you, you ain't gonna crash no computer
Let me dream 🙂
Also, it might take a while before I break the maximum by playing only with more money
gl
This is fine
I gotta be honest I'm not a programmer, but I think something might be a little bit off 
whew
oh no
smh, why do we have scientific notation when we could have this
play an even number of scoring non-aces, probably?
actually I think that other thing is an extra retrigger? then just don't play an ace ig
lmao
is there a mod that adds new vouchers? or is that a thing people cant/havent done yet
and/or one that increases the chance for holo/foil/poly/negative jokers the higher the ante?
if not i think these are 2 pretty cool ideas
https://discord.com/channels/1116389027176787968/1219749193204371456
One of the plans of this mod is Tier 3 Vouchers
oooo that sounds fun ill deff be looking foward to that
Does anyone know how to return both chips and mult as seperate localize messages?
I'm using steammodder and I am not sure how to view the debugger logs? They aren't going to localhost:12345 like I though. Do I need to enable something?
if we're on the same page, debug messages can be viewed by running tk_debug_window.py, which you should find on thes steamodded github
scholar and some other jokers do this, you can reference them for how
I've tried, but it seems to just show an empty message
Do we know if this error is common?
How can I trigger Joker when it's added to your joker slots?
Like, the exact moment it's added
do the cards properly give you chips & mult?
You could probably hook some function
if not, then you have the chips & mult variables wrong
Card:add_to_deck i believe
let me have a look
I have made a new card, and when I "discover" it, this error appears
you gotta define atlas when making the object, i had a similar issue when implementing booster packs in my api
does the atlas name set in the card match the atlas name of any of the custom atlases you've made?
for boosters, the atlas is just "Booster"
i used the same methods jokers use with the API
yea you cant
you can probably make that work
if you look in card.lua line 185, it uses _center.atlas instead of G.ASSET_ATLAS[_center.atlas] instead of whatever set it is
or line 174
oh is the card locked/undiscovered when you install
since the fallback 'centers' is there, probably getting rid of the set check might be fine
is this the custom card type you're making?
yup
if so, you need to edit line 174 to include your card type
but it's still a consumable, so it should be fine
its consumeable value is still true
line 174 doesnt check if its a consumeable, it checks if _center.set is "joker", "edition", etc etc
ohhh i see
it does check that it is a consumeable, but then when defining the atlas, it doesnt check
which is really odd
so it gets to the sprite init then passes nil
Ah, it works in context.individual, just not for if SMODS.end_calculate_context(context) then
oh that's peculiar
easiest way is probably to insert a line with a lovely patch, but preferably it can be made extensible in some way...
:3 balamod injection also works
yeah sure, minus the issue of compatibility of the mod loaders
How do I fix it?
negative booster pack oooo
You have to give it cards
probably you're not supposed to pass self to that
nvm
might be the wrong function
I may try, but no guarantee that I look at it or that it works
it's definitely not taking 2 params
all I did was copy the Certificate effect in cards
try G.context
eh
have you looked at other joker mods?
cause I sure haven't, I ain't got no idea what's right or wrong about that
I don't even know if something HAS something like that
if it did, I wouldn't be making this mod to begin with because what's the point in me doing it if it is already done
Stupid idea
What if i add "if context.first_hand_drawn then --- Code"
some quick research says the function you should be modifying is Card:calculate_joker
wait no i have thast
this is wouldn't be correct
k
I think you're calling the function incorrectly
FLOWWEY, YOU'RE JOKER SMART
.
Isn't it supposed to be SMODS.Jokers.j_joker_slug.calculate?
okay but I don't know where the heck that goes
let me send you somewhere
line 216
crimson is using the steamodded joker api, this is irrelevant
Ok yeah this specific error is due to using effect instead of calculate
...
Should look like this
Or debug mode
oh yeah
Okay debug mode it is then
I also need to add in the logic for scored glass cards and the 2x mult
Welp
Kapoot
game loads, Joker in play
Blind Starts
Crash
context being rough lmao
Context making me want to 0 Hands
this I'm pretty sure yes
Hmm
This idk
Lemme check how
want me to just send it to you Flowwey
something?
Oh my gosh lol

Here you are rebuilding Jimbo as a joker and I'm out here struggling MAKING GLASS CERTIFICATE BASICALLY
Ah yes, my pain is funny
the threads are a bit too long - how do you make mods? ik there are 2 mod loaders and that i need to use lua but that's it
and related, is there a template for joker art somewhere?
epic
Welcome to modding game
Evil jonkler
you know nothing and either you struggle or hope someone has done it and ask
Well I know a positive right now
The way Jelly did their mod makes it easier for me to port the jokers in Archived
so other mods are good starting points?
vineBlind
Since I don't have to do a bunch of converting from Default to Steamodded
yeah, also the jokerapi example you can find on github of steamodded
For now I'm gonna work on archived i guess
any hint on where to start looking for that?
it is mostly "trial and error and ask"
oh dang there is an example thing in steamodded didn't notice that lol
Anyone has modded Superposition to wrap straights around?
By wrapping around I mean 32AKQ Straights
did someone add a way to add a variable to G and save it in the save file ?
iirc it has been done so I'm asking
how do you set up developing for steamodded? noticed it doesn't really seem to be anywhere
like autocomplete in visual studio code
you extract the game in a folder with 7-zip or something and open the folder with vscode
then open the file you wanna write your mod in
ohhh you do that???
it helps with autocompletion yes
alrighty
lol I've been doing this wrong all this time
I've told you to extract the game XD
although steamodded isn't downloading because chrome thinks it's a virus :D
yeah but I thought that was only to search things
stuff in G.GAME gets saved if I'm not mistaken
i might be, though
had to use the powershell injector, that worked at least
I think it is, but I'd check the .lua that saves stuff (save manager?)
I want to cheese proof my mod but it'll be hard if I don't save it frever
imho mods should be saving things in cosaves, not within the save itself
but yeah afaik G.GAME is saved
Yeah I understand why but 99.99% of the time if the modder wasn't stupid it won't have any impact
G.GAME is temporary per run saves as well so it should be fine
that's exactly what I wanted
yeah, it's not a problem when you have a small amount of mods, but it becomes problematic the more you have
just takes one mistake for a save to go boom
yup
do any of the modloaders have cosaves atm? might be a fun project
But since I force load something in the shop I wouldn't want that to be broken by mistake or something
I don't think so
Where can I see the values of the save ? I don't remember there was a site to edit save etc
there's this https://github.com/problemsalved/balatro_save_editor
if i do this, how do i then make it an actual mod? what should my file structure look like?
there are some example mods in steamodded I'm pretty sure
afaik the save is just a zlib binary dump, so you can decompress it and poke around
is it really just one lua file and a potential folder for assets?
I'm trying to include a new rank using the SMODS.Card:new_rank function . Things are working as expected, except for one major issue: game crashes when playing flush five or 5oak using that rank. Actually it doesn't even crash, it just freezes. I'll look into the code to understand what happens 🤔
and respect the template
that's not supposed to happen, I guess I didn't account for something in terms of hand calculation
get_X_same can't possible infloop though...
Stupid question: is it possible to delay a function for some time?
without blocking?
a delay function exists, yeah
Yup G.GAME is indeed saved
looks like this, so it should be non-blocking
and even G itself is saved
does this happen consistently?
if it works it works ig
delay(3) will do
I didn't use G I used G.GAME but it's good to know you know
is there a way to know if you're in the game menu with G or something ?
or know where you're currently at
there's G.SETTINGS.paused, idk if you can know any more specific details
that's a good beginning thx
wait I think it still triggers the functions after the delay function
I mean before delay ended
I mean I tried
ot you can use G.E_manager or something and tell him to do the code after 3sec
yeah it's non-blocking, do the thing and do other things need to be events if they aren't already.
make an event that has trigger='after' and delay='3'
G.E_MANAGER:add_event(
Event({
trigger = 'after',
delay = 0.2,
func = function()
for k,v in pairs(G.playing_cards) do
if v.seal== 'Black'then
v.seal=nil
end
end
return true
end
})
)
delay = 3 should do the trick
Hmm, having trouble detecting what types of plays can be made with the player's current held cards (i.e. on draw, "does hand contain X?")
A few types work, I've gotten success with Pair and Two Pair, but not with Flush.
Any ideas?
return next(originalResults["Two Pair"]) -- works
return next(originalResults["Flush"]) -- doesn't
Yeah. Worth mentioning it happens before playing the hand, just selecting the 5th card freezes the game.
try next(get_flush(hand)) maybe?
mind sending the code over to me?
I'm thinking it's a weird edge case regarding get_straight
Ok, I did get partial results just now. All three selected cards should have been face down (I discarded 3, leaving the flush, drawn cards should be face down if the hand contains a flush)
Is it possible to use already existing functions here?
yes
how?
just use the name of the function like a variable, lua puts functions and variables in the same namespace
just calls them
and looking for something more flexible than "just flushes", I want to check every hand type, as its going to be based on which ever ones have the highest base chips*mult
oh I didn't quite get the context of what you were doing
yep it worked, thanks!
the way get_flush works is it returns an empty table if you give it more than 5 cards
😉
of course it does
whiiich is what evaluate_poker_hand relies on
explains why the first drawn card comes in face down but not the second
there's no real base game effect that needs get_flush and get_straight returning nothing if passed too many cards, I don't think
I just don't really like the idea of potentially altering base-game behavior in the loader
interestingly, get_flush works just fine if the #hand > 5 is removed.
because the final check is if flush_count >= (5 - (four_fingers and 1 or 0)) then
I would have expected it to
that's why having a lot of modders that are really active and touch a lot of different things is really good
right, which just makes it weird that it just goes return nil if its passed more than 5 cards XD
its an edge case that is literally irrelevant to the base game
it's a security
haven't really thought about it since I couldn't think of a case where that matters
when I make a mod or something else I love to have extra security just in case something really bad happens
like playing 6 cards when you''re not supposed to
that being said, I'm now thinking if there's not some way to get more than 5 cards selected with cerulean bell
let me try that
you'd need a pile of "clone that card"
because of the "bug" that if you clone the auto-selected card, the clone is also selected
having more than 2 cryptids in your consumable area is anything but impossible, to say the least
perkeo ?
yep
showman
there's also the Death tarot, though I don't know if Cerulean's bug affects that one
it does, but you'd need 5 of them
actually no
it doesn't
you're gonna have too many selected cards
hear me out... DNA?
no, because that causes one copy to go to the discard pile
hm
well, a cryptid and two Death
which is a lot easier than two+ cryptids
Hi everyone, I'm looking forward to accelerate game speed to go higher than x4, with some mods it takes a long time to play a hand ^^'
Oh shit I read all mods but didn't see it, thanks 😄
anywhoo, looks like I can fix this easily enough.
success, I made a Boss blind that goes "oh you drew one of your high-scoring hands? fuck you, discard and redraw"
either way you can't have more than 2 cards selected and expect to be able to use either of them
that's why I want 2 channels :
1 dev with only code special jokers etc
1 modding chat
point!
Is it okay to "nest" these events inside each other to make chains of events?
should be
or you can create one that isn't inside with a different time delay
like this
so yeah selecting 6 or more cards is literally impossible
i scrolled over my tarot card.
seems like a mod that messes wit tarots and does osmething bad
looks like your localization is fubar
specifically.... the unlock condition I think
actually not sure, show your localization entry
-- This rank can only be created by the joker Number 13
-- Note: Suffix B will be picked by the function, for instance 13 of heart will be called "H_B"
local cards_rank13 = SMODS.Sprite:new('cards_rank13', mtl_jkr_mod.path, 'cards_rank13.png', 71, 95, 'asset_atli')
local cards_rank13_opt2 = SMODS.Sprite:new('cards_rank13_opt2', mtl_jkr_mod.path, 'cards_rank13_opt2.png', 71, 95, 'asset_atli')
cards_rank13:register()
cards_rank13_opt2:register()
SMODS.Card:new_rank('13', 13, 'cards_rank13', 'cards_rank13_opt2', { x = 0 }, {
Hearts = { y = 0 },
Clubs = { y = 1 },
Diamonds = { y = 2 },
Spades = { y = 3 }
}, {
next= {'2'},
strength_effect = { ignore = true }
}) ```
At first I thought something was wrong because I left the "next" field empty (guess it's used by get_straight()) so I tried '2' or 'Ace' but nothing changed.
i believe this is it.
putting 2 can technically cause issues as it won't halt in certain cases, but in case of 5oak, get_straight should just not find a card that belongs to next and exit
Okay, I've finished making a mod that forces the first joker to appear in a shop to be a chosen joker
sheesh
there are people born post y2k that can drink
and that terrifies me
can't confirm, I'm born in 2006 and I'm 17
yes, ik my bio says otherwise, but that's just because rounding
What. No, I mean whatever you did to make your card have tooltip text. Not sure what mod system you're using, but I mean this stuff:
name = "Close Shave",
text = {
"Gives {C:money}$#1#{} when blind is",
"cleared by less than {C:chips}#2#{}%",
},
unlock = {
"Lose {C:attention,E:1}#1#{} runs",
"{C:inactive}(#2#)"
}
},```
They are, but depending on date they may not be 18 yet
oh, here it is
thoughts ? (only works in first shop)
I think I figured it out. Are you using the lovely injector?
if so, I got something to test for you
Does someone know if there is a mod allowing to freeze the shop until the next shop like in Hearstsone Battleground ? I've searched in #1209506514763522108 but I have no results
I've messed with the shop and it may be doable
We making progress, Now all that's needed is the x2 mult and the glass destruction
I know for the galls where it is
lemme check
if scoring_hand[i].ability.name == 'Glass Card' and not scoring_hand[i].debuff and pseudorandom('glass') < G.GAME.probabilities.normal/scoring_hand[i].ability.extra then
destroyed = true
end
G.FUNCS.evaluate_play
in state_events.lua
in functions folder
is there a non destructive way to alter the function in the misc_functions.lua file. Stuff like get_flush() and get_straight()
Or you can check for every glass card and shatter them, then add them to a trash can then at the end destroy them
lovely or balamod patches
theoretically. I'm not 100% sure how, just that I've done whole function replacement before in Surviving Mars, but they were class-specific
but steamodded overwrites them, so be careful with that
Orginal_get_flush = get_flush
function getflush(hand)
Orginal_get_flush (hand)
end
yeah that should work 👆
indeed you can append/prepend to them if that fits your use case
and you can add your logic
in case of get_flush or get_straight, it likely wouldn't
but that depends on what you want to do
also don't forget to return the base one since it seems to return something
cool I'll give this a try
I think this was being discussed earlier, but I'd like to implement a way to score 6 cards at once, but the get_flush() function has a hard lock on 5 card hands, so I was thinking for a non-desctructive way around that, before get_flush gets called, if there are 6 cards I could take out the one card that isn't in the most common suit, run get_flush() then add that card back to the hand
well, all you really need to do is take (copy) the existing method and remove #hand > 5 check
do note that function is being modified for the playing card API
I can however remove that check for you, since it serves no base game use
find the intruder
yeah, i'll do that if there is no other way, but I'd prefer to not override any functions is possible
it's in the middle
(ditto straights, I think, I haven't validated it working correctly with straights)
yep, same thing
I'll get that removed as well
appreciate it
👍
Did someone make an API? I haven't seen that yet
I did, and it's part of Steamodded
Ah, I see the Joker API, is that it? Or is it a full API?
it's its own thing, the file for it is suit.lua
(yes that name is misleading, but card.lua would load before core.lua when I made it)
would always advertise my own
- mikas mod colection. 2 divvy's real-time score calculator. 3 debug menu
also incresed sould and blackhole probabilty is nice
Haven't used lovely yet but I can give it a try tomorrow.
ty
I am working on a botting API, coming along nicely if anyone else is interested. The bot playing does not have any intelligence obviously, but it can automatically lose, so that is progress!
it can automatically lose
That's... something
The goal is just an API so that I or others can just focus on making good decisions....but I'm still on the API phase so intelligent choices will have to wait
well ok fair
Here is a snapshot of the API so far, so it's very easy to get something up and going
It can also interact with the shop but I have to manually play to get to that part atm...
Y'all are cooking some insane API
got a repo 
Meanwhile I'm out here trying to take a crack at those mini UI squares that explain editions and whatnot
Hm hmm, new thingamajigger not workin'
local handScores = {}
for k,v in pairs(G.GAME.hands) do
if v.visible then
handScores[k] = {
name = k,
value = v.chips * v.mult
}
end
end
originalResults[handScores[4].name] results in a "tried to access a nil value" error. This should be identical to originalResults['Flush'] (assuming no planet cards).
What am I doing wrong?
And no, originalResults isn't the nil thing.
not yet, the mod itself is not using steammodded or anything, I manually hooked it. Still need to finish the all of the actions (like choosing cards from packs and selling cards), and adding a decision flow. Hopefully in a week or two
oh did you make the lovely injector?
yeah, that's been my project
Yo that AI API mod looks really cool
wonder if it’ll be possible to make TASes with that
I just wrote a shell script to unpack/repack the executable and my injection is just a "require (my mod)" in the original source. I wrote a hooking library to add callbacks to my code and stuff
yeah metatables are crazy lol
that's an understatement. you can blow the runtime wide open with them
I've been abusing experimenting with them in lovely for the past week
very nice
That is the goal
Got flushes working with 6 cards, thanks for the help
ohhhh
it really interests me
better file format
you could space a bit more the cards
which modloader do you use ?
looking to add extra ui, think i can get away with it without injecting?
if anyone has examples i would appreciate
If you ever want to use Ankh to time runs and have any conflicts let me know
how do i post a mod?
WHAT
github is your best bet right now imho
no
idk why this modding community just hates nexus
it crashes my pc
i have a good reason
thx
Does anyone have an example of adding the plasma deck scoring properties to another deck?
#1211808102999924746 lets you do this
Nice, thank you, I'll take a look and either use that or see if I can figure out how they're setting it
also why do all my probabiltys keep getting set to 1bil
What mods are you using?
New mod out : https://www.nexusmods.com/balatro/mods/11/
GOD DAMIT
you're too good at the game
Yeah, I figured. I set the probability to 1bn to calculate max possible score value
id didnt read the link
It's a lazy way to do it
but now everything is garanted
It shouldn't be permanent tho 🤔
well it is
I've never seen it on my cards
Update to latest version?
just cosmetic variety then?
im on that


me dumb

need repo