#⚙・modding-general
1 messages · Page 30 of 1
wdym?
they're 71x95 as well, technically, but just centered within that space
I mean like, these guys
what are the general dimensions for each as well?
if you have your image editor set to a 71*95 grid you should see that everything lines up in that grid
exceptions for the jokers with code making them smaller (wee, photograph, half iirc)
got it
I'm also using Asesprite, so is there anyway I could find the color palette LocalThunk used?
hey that thread i made :)
yeah :D
thank you so much!
has anyone asked him which palette he used?
but theres like
the colors that show up most frequently
i dont know if its a hard-and-fast palette
i dont think hes ever mentioned it?
just that a lot of colors are reused
but yeah it's more like there are colors that show up mostly everywhere
you dont need to abide by it specifically
but they're there for reference
and nothing's darker than the Balatro Black (which is a rather muted dark grey)
mhm
thank you all so much! I'll share my results with you the first chance I get.
planets, tarot, and spectrals have more limited palettes, though with planets it's also rather lenient due to the planets themselves
i have found that planets typically only have 4-5 unique colors
Mod idea (or even a suggestion for official build): Each time when a Spectral card destroys the joker, make next encountered joker in the shop free.
yes
thats incredible
i just found out smeared joker works with ink and color suits
wait does smeared joker work with ALL modded suits like that then?
i feel like thats a custom interaction coded in
doubt it
idk but it makes my modded jokers with smeared joker work for both suits
probably a custom interaction like luna said i dunno
but i coded it and didn't add that
hmm weird
smeared is weird on modded suits
like for some reason for six suits the stars and moons work with spades and clubs but not hearts and diamonds only
ink and color are the only two smeared together, i checked. So it techanlly works as intended for my mod, which is cool
well clubs and spades, and hearts and diamonds
so card works correctly
but for some reason compatable with my mod
weird
yeah for some reason it's just hearts and diamonds
maybe it only searches for red suits, and then if it isnt, it's a black suit?
idk, but it works so i wont question it or it wont. thats just how code works
i spent all of last weekend fixing bugs. its... code
yep
from 10 pm of friday to 10:30 of sunday
i honestly just cant wrap my head around how lua for loops work
my mod is the first time i used lua
same here
im used to it being so clearly defined as
for(int i = 0; i < 5; i++){}
but
lua??
for k, v in ipairs(context.glass_shattered) do
for k, v in pairs(t) do
t2[k] = v
end
it doesnt specify the increment at the end too which is annoying
why is it do and end
YEAH
anyways please help me
i think the error is with what youre looping over
i know whats going wrong since the game crashes when glass breaks but i dont know what to do about it
what is it that youre trying to code
idk, i feel like the difference between the coding programs i use is a very small difference, mainly syntax wise so i find it easy to figure out.
im trying to make a joker that, when a card is destroyed, it gains chips equal to 2x the rank of the card
hmmm ok that shouldnt be bad
i tried copying the caino code but i dont know whats going wrong
i tend to reveiw the source code
should i send the whole file?
im not really sure why the caino code doesnt work
im willing to bet that looping over ipairs(context.glass_shattered) is whats messing it up tho
you're probably right
it's a complete copy of
for k, v in ipairs(context.glass_shattered) do
if v:is_face() then
faces = faces + 1
end
end
just without the whole check for face thing
huh
so i just coded stuff without it
thats, fair
what's the full code for this joker?
i think glass_shattered is just a list you can iterate over without ipairs?
i use this to dissolve cards if it'll help for i = #G.playing_cards, 1, -1 do
-- Remove odd cards
if not is_Ink(G.playing_cards[i]) and not is_Color(G.playing_cards[i]) then
G.playing_cards[i]:start_dissolve(nil, true)
end
end
the entire calculate code or the whole thing?
entire calculate
SMODS.Jokers.j_deathly.calculate = function(self,context)
if SMODS.end_calculate_context(context) then
return {
message = localize {
type = 'variable',
key = 'a_chips',
vars = {self.ability.extra.current_chips}
},
chip_mod = self.ability.extra.current_chips,
card = self
}
end
if context.cards_destroyed then
local value = 0
for k, v in ipairs(context.glass_shattered) do
value = value + v.getID()
end
self.ability.extra.current_chips = self.ability.extra.current_chips + value*2
return {
message = localize('k_upgrade_ex'),
card = self,
colour = G.C.CHIPS,
delay = 0.45
}
end
if context.cards_removed then
local value = 0
for k, v in ipairs(context.removed) do
value = value + v.getID()
end
self.ability.extra.current_chips = self.ability.extra.current_chips + value*2
return {
message = localize('k_upgrade_ex'),
card = self,
colour = G.C.CHIPS,
delay = 0.45
}
end
end
oh it is?
you should try it, but thats what it seems like to me
oh it's not v.getID it's v:get_id()
oh.
yeahh
oh and that would cause extra.current_chips to not be a number which causes that error i think
i would help more, but I think I've procrastinated enough today.
does that fix it?
just tried it and
somewhat!
it
still crashed
but it didnt crash at the exact same time
a different error is progress
the one in end_calculate_context
oh wait what?
the other code ive looked at had {} instead of ()
lua is weird
seems like {} is for when there's more than one element?
yeahh
see what happens if you change card=self to colour = G.C.CHIPS
in that call
also you should probably limit the range that get_id can return
since stone cards go from -100000 to 100
and jacks, queens, kings, and aces return 11, 12, 13, and 4 respectively
try v.base.nominal instead
that didnt change anything :(
ohh wait
add and not context.blueprint to the two destroy card if checks
that probably won't fix it but it should be there
fair
i also just noticed that this has been happening while the joker that im debugging is
not in my joker slots
which is a whole different thing
what was in there?
alright, thanks for helping me guys
here's an aesprite color palette I made with your help
the two other two custom jokers i made
what's the code for them?
which are both working fine
one sec
SMODS.Jokers.j_techno.calculate = function(self,context)
if context.end_of_round then
self.ability.mult = self.ability.extra.base_mult
return {
message = localize{type='variable',key='a_mult',vars={8}}
}
elseif SMODS.end_calculate_context(context) then
return {
message = localize{type='variable',key='a_mult',vars={self.ability.mult}},
mult_mod = self.ability.mult
}
end
if context.after then
self.ability.mult = self.ability.mult + self.ability.extra.mult_mod
return {
message = localize{type='variable',key='a_mult',vars={self.ability.mult}},
}
end
end
SMODS.Jokers.j_beast.calculate = function(self,context)
if SMODS.end_calculate_context(context) then
return {
message = localize {
type = 'variable',
key = 'a_chips',
vars = {self.ability.extra.current_chips}
},
chip_mod = self.ability.extra.current_chips,
card = self
}
end
if context.discard then
if G.GAME.current_round.discards_used <= 0 and #context.full_hand == 1 then
self.ability.extra.current_chips = self.ability.extra.current_chips + self.ability.extra.chip_mod
return {
message = localize('k_upgrade_ex'),
card = self,
colour = G.C.CHIPS,
delay = 0.45,
remove = true
}
end
end
end
neither of them contain for loops
the error is in the game's code, not yours
oh
here's the aesprite color palette if you want it
actually?
ooooooh nice
It's based on Rob's work, and I simply (painstakingly) copied over the colors to Aesprite using coolors color picker
I'll add it to the thread
radical
change techno's if context.end_of_round then to if context.end_of_round and not context.individual and not context.blueprint?
sdjdh still nothing :(
the latest one?
which one?
ah ok
also yeah it does seem to be happening with the techno joker now that im looking more into
trapped in a paradigm on god 😔
I FIXED IT
I DELETED ONE LINE OF CODE AND ITS FIXED
WOOO
okay apparently
context.end_of_round doesn't need a return
or
something?
wait no
yeah wait yeah??
that is
bizarre
it crashes when i try to give a return statement
that is strange
weird
well
guess im just gonna have to do this without the whole 'reset' message flavor thing
ohh wait
waiting
well? we're waiting....
Also waiting
oops
waitingg
Im taking a vacation today, so I will have a lot of work done on Codex!
XD no worries
Hey guys I'm trying to mod balatro with the injector but this is too sketchy...
This is the newest version... is it gonna be ok?..
generally recommended to use Lovely instead of the injector
it gets flagged as a trojan because it works the same way as one
how do I execute lovely then? Is it the same way as the injector?
dragging balatro into it?
nah you put a dll in the same folder as balatro.exe
see here for full instructions
(there's also at least one mod to my knowledge that only works fully in a lovely+steamodded install, that being the Risk of Jesters mod, since lovely's capabilities can be used by other mods as well.)
is there a mod that allows you to spawn tarots/jokers/whatever at will?
debug mode
ty ty
2 new jokers: Breaking Bozo (guess the reference XD), and Essence of Comedy!
Sick
tks, after a bit I finally did it
I wonder what show has its first word as breaking 
XD
I feel like there's not enough money jokers/consumables in mods.
Hm.
Scrapper Joker (Rare):
Removes enhancements from cards when played and gives $1. Gains +1 dollar per enhancement removed.
(Yes, this is a Midas synergy.)
Actually, I'll throw that in suggestions.
how do you add editions?
even though this is seeded holy shit i did it
holy retrigger
am i stupid or whats modded here
oh neat
im gonna try gold stake on this wish me luck
oh no
wait does that mean 0 discards
yup
💀
does burglar give you 4 hands?
idk
@rare shell Did you got legendary joker sprite working?
is there any documentation on all the formatting options one has in card descriptions?
you could check the en-us localization file, but no easy list afaik
i did!
Yooo sick, do you use a spritesheet or individual, does the method change depending on that?
hey, am I able to get some help with some trouble shooting please? Every time I go to launch balatro after placing the .LUA files of JellyMod and Mika's mod into the mod folder of Balatro the game loads and then just closes, completely disappearing without saying anything like an error or anything. Only one mod has worked before and that is the extra joker slots mod. I have tried placing the entire (still compressed cause I don't know how to decompress it) JellyMod file into the mod folder but then it just says that there are no detected mods. Anyone know how to fix this?
try removing JellyMod
so... absolutely no one understands why hologram's sprite is broken if you "replace" the entire joker sprite table, even if the pixels are identical...?
also yeah if it's still zipped the loader can't parse it
I don't think so?
at least I don't
god this game's code is weird
if you have the zip file, just click on extract all in the file explorer. If you only have the lua files, you'll be missing the assets
all right, time to figure out how to make my jokers point to custom sprites instead ig... if that's even possible with steamodded
it is
yep it is
i guess it involves overriding Card:draw(layer)?
and you really should if you wanna be compatible with other mods
no, you just need to give it a spritesheet you defined with SMODS.Sprite:new()
yeah that function's built in to the modloader
would be kind of rubbish if it wasn't
the loader also checks if any atlas matches the joker's slug and uses that if it does
oh, so i... didn't need to start with the vanilla jokers at all?
do what i do and just check six suits' code haha
valid haha
it's what I've been using for testing, so that's a good place to look for examples lmao
I can't find the extract all option
just right click the zip file and find the option in the context menu
figured thats why The Fool? is in there
also I just thought that's funny
thank you very much!!!
i am so sorry i did not respond earlier
my legendary jokers use a spritesheet
i just have the soul next to the background in the sprite is all
example
same with mine but the face is below the base
horizontal gang
you can pick which is where
probably go vertical though
it doesn't matter
diagonal gang
it saves you fiddling if we use the website template graaaah
me when soul_pos = { x = 41, y = 68 }
oh no
thats me on most days
unfortunately today is a soul_pos = { x = -1, y = 32 } type of day
ah yes
yeah ive been there
happens to everyone
as long as its not a soul_pos = { x = 0.7, y = 0.3 } day
ooooooooooooooooh baby, that feels good.
buuuuuuuuuuuuut that's definitely an issue, no?
because it seems like i'm not the only one who's had an issue with hologram breaking when other cards change
oh well, i guess you can work around that by only changing the sprites you want to change
yeah we're not exactly sure what's up with it though
if you want to change card sprites other than hologram
actually, it probably has something to do with that scan line
yeah, that's probably exactly the problem
hm?
I'm setting up lovely + steamodded for my balatro. following the directions, everything setup fine. but when i opened balatro and changed between my profile and my wife's, it merged our collections. i.e., her collection was updated to nearly complete the way mine is despite only having collected around half. i made backups before modding, so no harm done. is this a known issue? is there a way around this?
just watch hologram's sprite long enough, it's hard to explain
it happened with the lovely method and when directly patching the exe
oh the effect?
So with classic injector and with lovely if I understand ?
iirc it fixes itself once you restart the game
correct.
that's because of a rather sloppy way of making sure added game object persist a profile change
I'll try to improve on it
On that one of your change that cause that ?
tried restarting it several times just to make sure it wasn't a temporary thing. it persisted. let me try again after restoring the profiles to the originals, though.
Also, this will probably be how profile would be managed in the future: https://github.com/Steamopollys/Steamodded/issues/14
I may also add an auto backup for profiles to ensure there is no bad surprise
anyone know which mod this joker is from?
if it even is fro ma mod
t causes my game to hardcrash when i hover over it
What is the crash error ?
yep
I don't think so... The only possibilty to see it would be with the tk_debug window but that's for devs so don't bother with that
For badges and card tracking ?
does this work on vanilla jonklers btw?
yeah even having the like CMD window open
its gone so fast i cant read if it even says anything of importance
nope, center APIs
but I think it'll work fine if I just make it re-inject stuff instead of loading the old pools
is this a ligma
no
should i troubleshoot a bit further or just delete and move on
tried reinstalling, still broke
assuming the mod is depricated
Are you willing to share the code?
im going to scream
sure, let me get the snips
modified initialization code
-- thank you mika for this code!!!
local function init_joker(joker, no_sprite)
no_sprite = no_sprite or false
local joker = SMODS.Joker:new(
joker.ability_name,
joker.slug,
joker.ability,
{ x = 0, y = 0 },
joker.loc,
joker.rarity,
joker.cost,
joker.unlocked,
joker.discovered,
joker.blueprint_compat,
joker.eternal_compat,
joker.effect,
joker.atlas,
joker.soul_pos
)
joker:register()
if not no_sprite then
local sprite = SMODS.Sprite:new(
joker.slug,
SMODS.findModByID("JankJonklersMod").path,
joker.slug .. ".png",
71,
95,
"asset_atli"
)
sprite:register()
end
end
then just declare the soul_pos in your joker
mobile user jumpscare
local fortuno = {
loc = {
name = "Fortuno",
text = {
"For each {C:attention}numbered card{} scored",
"in your first hand each round,",
"destroy it and gain {C:attention}$3{}"
}
},
ability_name = "Fortuno",
slug = "fortuno",
ability = {
extra = {
dollars = 3,
trash_list = {}
},
},
rarity = 4,
cost = 20,
unlocked = true,
discovered = true,
blueprint_compat = false,
eternal_compat = true,
soul_pos = { x = 1, y = 0 } -- the good stuff
}```
mobile jumpscare 2
help I've been flashbanged by lua
got it
order in all things
is that saved to the profile?
xd
yeah!!! thanks for all you've been doing!!
(also is it okay if i ask for help with an issue that came up
of course
'course
okay i wanted to bring up uhh
hold on
so it seems like the game crashes whenever i try to do a return in context.end_of_round?
like
uhh, what does the crash message say?
one second ill see if i can find the ss
here
sjdhsh im not sure if im just doing it wrong
but when i have code like this
if context.end_of_round and not context.individual and not context.blueprint then
self.ability.mult = 8
return {
message = localize('k_reset')
}
end
thats what crashes
wait
looks wrong as in i did something wrong or the game did something wrong
oh for what you're trying to do
doesn't exactly look like it's your fault
oh
one moment
hm
wait try and add and not context.repetition to the ifs
yes aure the GOAT for being so helpful with apis
gotta credit @cunning silo as well for these, I just revised them and added some features
oh that
did it
yeah alr
np
phh calculate_joker contexts are weird
i should make a chart for that
you are doing most of the hard work XD
xD I view it as putting the pieces together
how dare you put down yourself and your contributions to this community!
you are a god amongst men
/lh
ty :3
me, watchung from yhe sidelines 
yall doin great work
clearly i should learn to github so i can implement consumable api :calculate functions
do we know if the last hand played is saved somewhere?
idk i know someone made a joker that uses what was played last hand so i think it might be saved somewhere
0.9.6 has that
oops i was thinking of something else
if it isn't, then you should be able to save it anyway
where should I do that from? I cant do that from calculate_joker since it's for a consumable
uh wait for 0.9.6
actually calculate_joker does work for consumables
oh pog
for Observatory voucher
yeah the API just currently doesn't handle it
oh no you pinged myst
ic
oops
every time someone reply pings me all my mods get delayed by one day /j
ohhh i see how
too bad
every time i wake up my mods get delayed by one day /hj
mood
(ill sit down and learn how to use github one day hhhhhhhh)
okay apperantly i placed it in the wrong place XD
whether that day will be before or after i put 100 things in my mod is another question
i might figure out a custom consumable type first even lol
wait a minute
i didnt work on my mod at all today

youtube musiic stunlocked me by refusing to show me anything that wasn't dad rock or the songs ive heard play 20 times in the last 6 hours
i guess its not true because i nearly deleted all of my (newer) art files before i got them on the github

huh
my mods all have individual folders but some of my decks still have invisible card backs, not a big deal, but if anyone knows a fix that would be lit ty!
no clue what is going on with this either considering InscrybedJokers works properly
🪵
Has anyone done a "every blind is a boss" mod yet? Or is working on that? Could be wild to play.
😮
xD
just disable every other effect but
it has a chance to randomize small/big blinds into any boss blind
actual bosses are unaffected
Is there a way to make that chance 100%? Lol
yes! it's configurable

I was thinking about doing a "what if every blind was a boss" kinda run so this is perfect
due to how i coded it, the blinds can also turn into small/big blind but that shouldn't be too much of an issue
actually i can just quickly modify it to completely ignore small/big in the randomized boss pool lmao
If it's more work I can play as is. Just was curious if it existed or not. I'm checking out some more mods on stream tonight and was curious if smth like this existed yet.
Once again the balatro mod community knocked it outta the park!
it should be a quick modification! just gimme a sec
like i can do this and force everything into Verdant Leaf lmao
Is it possible to remove suit?
like the mild cards from shampack?
?
an enhancement that removes suit
no I meant completely remove a suit
LOL new jokerless mode just dropped
like the opposite of what steamodded's SMODS.Card:new_suit() does
probably not
i think it might be doable actually
i dont think itd need that much
You can just remove it from deck and every possible transformation/pack pool
And that's it
right? if you remove all the playing cards in P_CARDS, it shouldnt show up in packs, then you just gotta remove everything that interacts with that suit
yea
I mean, it's not a one liner but still pretty easy to do imo
you should put joker_randomization_chance at 100 too :3
how do you add an edition?
You can change the font in visual studio code?
yea
i have it as monospace comic sans
card:set_edition({edition=true})
Welp, i’m gonna put the balatro font as mine
i use RDLatinFont - the one used in Rhythm Doctor
I mean add a new one to the game.
o
nah I want to remove it from view deck ui
so like, hide specific suits in the view deck ui???
okay okay
xy problem moment
so my idea is suits that aren't given at the start at the game but you can acquire them with any other normal means
tarots/boosters/etc
I can register them on the fly, so that means I also need to remove them on the fly if I started a new run or there's no more cards of that suit
that's why I want to remove em
wow should've explained sooner
in Game:start_run, you can iterate through the deck and remove the unwanted playing cards
that will still make them registered tho
you can probably change the deck ui function to have an if statement around when it generates suits
means that they will appear during menu transitions, ui, etc
and I don't want that to happen
Never touched this part before
that's tough
i mean, you could probably just look at the add suit function and just make your own remove suit function that just sets everything to nil
yep I found the function but I don't understand what's happening with the list there
unfortunately i am very inexperienced with the ui and steamodded so cant help ya there o7
glgl
I think this is it?
i am also inexperienced with anything ui related :p
I don't want to have anything to do with UI anymore
there's nothing ui related here I think, ui happens sometime later?
It was a nightmare when the code was still obfuscated
this list is just for suit registering if I understood it correctly
well I'll try tinkering around
good luck!
So, is it known on how to add a new edition to the game?
I have underdeveloped custom edition, it has no badge but it is separate from other editions and can have it's own shader and effect
legendary
aure doing god's work as always
you do need the cards to exist in G.P_CARDS if you want to convert anything to them though, so keep that in mind
how'd you add it, i can probably fiddle around with it later and see if i can have it show up with the rest.
(and yes, this would allow you to straight up delete base game suits, though that probably causes issues)
https://github.com/Firch/Bunco/blob/main/Bunco.lua you can check here, CTRL + F 'fluorescent'
yeah I register the suits right before converting
alright I'll probably go for one function that just wipes the suit data entirely, and also methods for just creating/deleting the cards in G.P_CARDS
when registering the suit, it also creates color for localization, yes?
yeah
Will it wipe it too?
do you need it to?
nah XD
just to be sure
wait I probably need to create it beforehand anyway
before registering
you can register a suit but no cards for it btw
Just wondering, will the bottom of the steamodded wiki be completed soon?
when I get to work on it, it will
Nice
nah that's not what I'm trying to do
yeah I see
Anyway wiping the suit data should cause issues if any cards of that suit are present in the deck (at the very least, the view deck UI will crash the game), so there's a case for just removing the entries of G.P_CARDS
where'd you make your shader?
yes, an fs file where'd you get it?
that's my path, but you can do any path to shader
i mean where did you get the file
same
I copied the shader from game's files
ok, thanks
LMAO
it's under the same relative directory I think
i could see why that would say filesystem
lol
Does anyone have the files of the images of the cards? I looked on Spriters resource and didn’t find anything
open the .exe of balatro with archiver
7zip or winrar
and all the sprites will be here
I don’t have the steam version, I got it on switch
oh
well, I don't know if I can share them
If not that’s ok
honestly it's a shame the sprites aren't on spriters resource
I was just planning on making a poster for my room lol
ohhh fair
that was the first place I checked when I looked for sprites
i think the wiki has the cards, though they're all individual
yeah the one at https://balatro.wiki/ does
How do I add new colors to localization?
G.ARGS.LOC_COLOURS['whatever'] = HEX('ABCDEF')
use like {C:whatever}text{}
🫡
(playing card api does this for suit colors, that's how I know)
I wrapped it in this, not sure if it's needed
WOAH
yeah that function is where this thingy gets set to begin with, so prob won't work without that
Now THAT’S an error code
Oops! Something
Hey Aure, is it possible to make multiple buttons to choose between A, B, or C?
I think I've tried before but didn't get very far
the game exclusively uses option cycles in cases like that
Well you wanna try again for Ortalab?
We’re gonna have options to use Balatro Only Content, Ortalab only content, or both.
and why not use an option cycle?
Idk what that is lol
these thingys with a left arrow and a right arrow button, like the stake selector
seriously what even is that
How does one apply shaders to a deck back? Like what the foil/holo/poly decks from the beta were doing, they had the respective edition effects on the deck rather than being part of the texture.
Hello all! I'd love to look into modding this game a bit and am curious if there's some like basic "tutorial" somewhere about the things specific to balatro to get started that would help me to just sort of understand the basic structures used.
unfortunately there's no real documentation for a lot of things yet so the best bet is generally to just read the source code (open balatro.exe in 7zip) or other mods (i personally defer to Six Suits and Mika's Mod Collection often)
I figured it's all so fresh that it's not likely been standardized or anything yet. Is there a regular place to find existing mods? Sorry if this is somewhere I'm not seeing
Thanks!
Soon™️ we might have r2modman/thunderstore going
but thats been in-waiting for a good while now so dont hold your breath
Lol noted. Anything to just kinda let me tinker around with stuff is the start I'm looking for haha.
there should be a mod where if i skip for a foil/holo/poly tag it CANNOT go on one of the two common four of a kind jokers
it feels like those two bastards steal my tag 80% of the time
hm, now you've got me curious how tags work
i jest but the tag system is definetly underutilized, i saw a mod of a "tag pack" where you can open and get 1 of 2 to use immediately
more skip jokers ! more tags :D
ok but "EditionTagQoL" could still be a funny mod
and i am incredibly motivated by humor
so true
oh Wow Tags Are Not Easy To Modify
adds Tag API to the bottom of to-do list
actually i think it's fine i just got flashbanged by boilerplate code
/hj even if that's gonna be on my to-do list, it's gonna be pushed back for a good while
honestly i kinda forgot Tags even are like.... a game object???
That's my mod 👀
sometimes this game's code is so unserious
uhh looks like it has to do with applying tags
(ignore the fact I can just look it up myself)
check out Tag:apply_to_run
i wonder, how did you display it in the pack menu?
I AM A BIG FAN
https://gyazo.com/e943a1e9b1378e55dbd44e17b4668f41.mp4
New alchemical: Arsenic!
(this one's a fun one)
You mean collection?
That’s very cool
when you open a pack, it changes to a little pack display. how did you do that one?
like, how does it look>
alright now to do like 70 runs so i can see if this worked
what worked?
edition tag blacklist
i set it to every common joker to test with so here's hoping the game shows me an edition tag ever
It looks like this
i could probably cheat one in
oh wow
that's impressive
did you add your own gamestate, or modify another gamestate with a special config depending on pack?
I added a new state for this one yeah
ooh, would you mind sending your source code? I also have a pack in my mod, and I was interested to see how others do thaT
cool :0
oh niiiiiice
.... now i have to learn how to github, right, my mortal nemesis
That's awesome
that was insanely fast
For sure, but there are a lot of other stuff so it might be a little messy 😅
oh, it's all good
my code is not better Xd
it's not a particularly complex mod!
heyy good job
vhere is zees it looks dope as hell
Mega Verdant Leaf Pack: Choose 2 of up to 4 Jokers to sell
i relese smth woooo
congrats!
now hell can freeze over and cows can fly oh no
no I meant something like
pick additional blinds to fight with
bonus blinds 
yep
me when i skip a small blind to open a blind pack
Add enough blinds and we just get slay the spire map
i definitely left the default blacklist as every common joker tho
whatever it works lol
honestly just all the food jokers and the four of a kind ones are what id pick
if i ever learn to mod i wanna make one that will inherit Gros Michel's edition if it expires on Cavendish
so if its foil or poly the cavendish will be too
but what if it's holo
(i'm joking lol)

holo cavendish isn't bad
+30 mult
Is replacing badge for tarot supposed to be different from planet consumables?
should be the same method, are you having trouble?
you'd want to have SMODS.Tarots[your_tarot_slug].set_badges set to a function
it's just weird that wiki tells 'Tarots' for everything but that function
there's a wiki?
oh, i think it's just Planets for that one since that's probably the most prominent use-case for it
ohhhh you need to return badges at the end im pretty sure
I think I removed the part where you need to do that
for example
but not sure if it's on 0.9.5
I didn't test changing the name via nodes jank, it might not work
but it should
then try overwriting the badge instead
it looks like there's several threads in #1155557846805643434 regarding twitch integrations, but has anyone started working on a mod to do that? just asking since it doesnt seem like those suggestions have gotten traction (or should i make a thread in #1209506514763522108)
DynaText might not like its string being changed
uh?
badges[1] = create_badge(...)
alright I'll remove that part from the wiki then
the reason it's planets there is because planes have a default badge that you likely want to change
oh wow, some of my alchemical cards are negative...
I wonder how that happened...
(2 new vouchers)
I noticed that if I hover over undiscovered card with badge replaced, it crashes the game unless you put an badge ~= nil condition
when you spend money in this game id like to imagine this is kinda what they look like
0.9.6
it crashes if undiscovered either way in 0.9.5
but I have a fix ready
nice
0.9.6 Soon™️
i guess so
😆 no rush i just find it funny
neat
casually incredible art btw
what the flip is a flueron and a halberd
i love vanilla styled balatro art
some folks can almost create spitting images
has anyone made a mod for zodiac signs?
i think like two or three people are working on a mod that includes them lol
i cant be trusted to not make it homestuck
in #1217704157574860810 im pretty sure the reverse tarot are zodiacs
that would be hilarious
forgib me if wrong
ooo i see it
The idea behind Fleurons and Halberds:
Those are exotic suits. They aren't given at the start of the game, yet can be acquired by rarily appearing in booster packs or rare tarots (like these "Tarots?")
It is challenging to get enough of them, yet you will be able to do some overpowered poker hands with them (like spectrum from sixsuits, but rebalanced for this)
do they have a different chip worth or just the same as the number
Don't see the reason why they should have higher chip value
i like the design of the symbols
i like the idea of rare suits. i hope to see jokers that give +8 for the special suits or that give those special flushes super big upsides
These suits are just my take on sixsuits mod honestly
I just wanted to see what am I able to come up with that isn't just "new suits given at the start of the game"
and also make them more in-line with original suits (design-wise)
halberb
halberb
hope to see a high contrast option too. i use that often when i play at ||3-5am||
will do that, although I'll also need to replace some vanilla sprites for that
i use the high contrast option just all the time
it's prettier
why would you need to replace vanilla sprites?
hearts are red in hc mode
and I really want to keep red on fleurons
I was talking about the color inconsistencies earlier here I think
one sec
here
I made hearts pink instead of pink and red
suit color itself is unchanged; only joker and HC sprites will be changed in the future
i see 
loteria are reverse tarot and zodiacs are reverse planets, but pretty much nothing is in game yet
the heck is a loteria
spanish bingo card thing
Aure don't execute me but knowing that removing the suit will not remove the localization makes me able to register then immediately remove the suit to generate localization 
Reverse Tarots are Lotteria
I know nothing about Zodiacs
I need caught up, been busy with other projects that i need to catch up
Oh the zodiacs are the reverse celestials
They basically work like, next x hand played, do y
adding a new consumable type is going great 
oh great
i fully believe this is my own fault i just wanted to see if anyone had any input
with consumeable = true and an atlas name, the sprite api should set it up for you
make sure to misspell it
doesn't seem to be the case :/
what do the center objects you're registering look like?
Is there a good Balatro-modding tutorial?
Tutorial? not really, not yet
https://github.com/Steamopollys/Steamodded/wiki exists but is still incomplete
if you like i can send you the code for my Tones consumable, im not fully sure if im gonna finish it
other than that, look at the game's code (just decompress the executable with 7-zip) and look at what us other modders have done
oh that'd probably be helpful yeah
if not with this issue then probably for something else later ^^"
(you should totes finish it tho your mod looks cooooool)
you'll need to add a set property on these
the sprite api checks for the presence of one for whatever reason
maybe it would catch something it otherwise shouldn't it if didn't
oh that gets set in my "injectOddities" function because i based this on tarot api
and injectOddities hooks off of injectTarots ^^"
me, modding the modloader
unless that's why this doesn't work LOL
lmao
I guess that works?
the fact it still says consumeable or true in the tarot api is kinda funny
like you might say "this tarot isn't consumable" and the loader just goes 
yeah
i wanted to remove that parameter completely but that would be a breaking change
unlike freq on planets, which I didn't realize was useless hfublwyq-
now the only thing I need for now is deleting the suits, very happy with how this turns out
smoooth
i love it
can always save it for when the game itself updates, if that'll break mods anyway
why tf the video has quality of UFO recording tho
I mean the easiest way is probably to combine them into one and deprecate the old versions
true
that would also ease support for custom consumable types
oh well hey there
Too op
im honestly surprised it didnt crash because i didnt specify the badge color? seems like there's a fallback
the mod badge color? yeah that's optional
no the one for Oddity
I think I figured out applying shaders, but realized I don't know where the deck cards are 'drawn'. It doesn't seem to be in Card:draw() like most other cards, unless I'm mistaken? Is there a special place the game generates the decks you see for deck selection and in the bottom-right during play?
yeah maybe there's a fallback there too
it's possible it just draws them as "face-down cards"
in Blind.lua there is a function called "stay_flipped" that is specific to blinds that have face-down cards
I seem to be able to manipulate the flipped cards in card:draw, but it doesn't affect the deck itself
oh hummm
Implies that they already start face down and this function determines whether to keep them flipped or not
there's also CardArea:draw(), seems like that handles drawing the deck (as well as other things)
i'm not sure what is needed to draw a shader on something, since... im not sure how shaders work in this engine at all lol
Thank you, i'll take some time reading over CardArea:draw() and see if I find anything! I just need something like self.children.center to use draw_shader on.
self.children.back doesnt work?
it probably will, but I need to find the proper spot for it too
right. from what i can tell self.children.back refers to the deck-based card back
it appears to be what the deck api sets, and looks similar to how other sprites are set, so i'd think it'd just work
I can't seem to call that from within CardArea:draw()
sorry, that's in scope on cards
so it'd be something you'd want to do in Card:draw()
my apologies for the confusion, i should have clarified scopes
I think I need to do that where the deck backs are being drawn though, which isn't Card:draw(), right?
i mean it looks like the deck just iterates through its cards calling :draw() on each of them?
lines 321-329 in cardarea.lua
btw the fact i can sell this for $1 or use it for $1 is funny to me (i have dumb humor)
i'll try playing around with that, thanks!
it needs "gives $1 when destroyed" too
but if you destroy a jollar you can't redeem it
if destroyed, you go to jail because vandalism of currency is a crime
hm
sneaky
it doesn't work any different from a normal 2 of spades tho
2 of Jimbos
2 of spades enhanced to be Jimbo
yo im new to balatro and modding and was wondering if anyone knew how balatro actually does random stuff based on its seeds?
is it a hidden algo that the dev keeps secret or is it known?
Hope there will be a step-by-step "how to make your first Joker" tutorial someday
all the randomness in the game has to do with the pseudorandom function or one of its wrappers
so the function is known but the algo isnt?
not by me lol
i see, thank you for the info though
Oh, challenges look EASY to mod
you could probably find out how the pseudorandom works in the source code, im just too dummy to understand it :)
I'm personally pretty knowledgeable on the seed algorithms, what specifically do you want to know?
OOOOOO they are known
i wanted to see if i could replicate it to speedrun certain things
do you think that would be possible?
extract the game's exe
sorry i am new to modding and the only experience i have seen is when function headers are extracted and you dont actually get the source code
i didnt think you could just reverse engineer it
yeah the exe can be opened in 7zip
wtf
its not normal yeah
I think this is actually using cards:draw and not card:draw, so CardArea might not be where the decks are being drawn after all
hm, im not sure i follow. i havent done anything with decks yet myself so idk lol
i think cards:draw is another function in CardArea that does something i'm unclear on, rather than the :draw from Card that actually draws card graphics, but i am having trouble following it myself too
it feels illegal to do this
it's not
7z can open a lot of exe's but balatro just happens to have a lot of stuff you can get from it
I think I'll make a Challenge mod first, seems the easiest of the things I want to do
yeah love2d the exe is the engine and you just bundle a zip file into it and it loads it
i like the simplicity
yeah it's a quirk of love2d... I think it's amazing
I did find it now, the shaders for the card decks are drawn by line 4495 in card.lua, thanks for the help!
you don't need to edit Saturn, you need to edit the hand type Straight
yeah that's the wrong timing
ah, gotcha
hold on just a min
that's what i figured; knowing what method would be the right timing so it shows up in the collection on boot should be all i need
local init_game_object_ref = Game.init_game_object
function Game:init_game_object()
local t = init_game_object_ref(self)
t.hands['Straight'].l_mult = 3
return t
end
that context has worked fine for my spectrum hands
oops I broked it.
relatable
{
greetings
salutation
does anyone know where these kinda functions are kept?
theres a few for loading the various packs but i cant find them
Now I just need a variable to specify which deck is currently being displayed/used. back.lua has self.name, but I need something within scope of card.lua. Any suggestions?
G.shop_jokers is a CardArea
so you're looking for CardArea:load()
which is at cardarea.lua:632
uh are you adding your own badge on top of the loader's one?
also that's just high priestess
i figured it out
my Oddity code was re-adding it to other game objects erroneously
and yes that's just high priestess
one can hope
Tytyyyty
aure is it ok to ping you for stuff?
yeah i don't mind
well rn since you're here i can just ask: are unlock conditions in the plans for mod api stuff? or are they already possible?
ah you answered in the other chat lmao
nice, i think bunco will probably also want unlock conditions
anyway just because the API doesn't support it, that doesn't mean it's not possible
what is this glitched score wr
well this is something
i just don't wanna ask people to do anything very difficult since i'm not actually gonna help at all lol
I had the highest score in the 0.9.3 demo by abusing a bug the game had at the time
What does that Station card do?
upgrades most played hand
how does that work for observatory lol
I did record the last part of that run, it's right here
Seed: K7ISTBDD
no audio because i don't bother editing stuff
go figure what i did before ante 5
0:00 Ante 5
20:30 Big hand
Oh, nice! Just choose a hand to stick with, and go ham with it!
it was far from perfect tbh, didn't quite have the polyglass technology
currently it doesnt but i'll make it work with observatory when steamodded 0.9.6 hits
I'd assume it doesn't
thought about an enhancement that could be neat
a tarot that gives Split:
card counts as it's original rank and the rank below/above it
not something I'd want in the main game but gives flexibility to straights
oops, I did something wrong...
finally, straight houses
any full house with a gap of 2 between the ranks would be a straight house with that tech lmao
planning to have an enhancement that does this in Ortalab but thats like, at some point in the future
gonna prioritize full houses like how 4oak trumps flushes
Sometimes I miss the old demos
I edited the Challenges file, but forgot to edit anything else
straight spectrum flush houses? (make it stop, split cards can't be wild)
that creates so many questions 
defo not a base game thing, it's too cursed
Is there a way for me to make custom text colors?
imagine multi rank cards with 6 card hands
uh yeah
how easy?
Epic, thanks
this is what the suit API uses
G.ARGS.LOC_COLOURS['key'] = HEX('ABCDEF') means you can use {C:key}text{} in loc text and it will be that color
nil
negative nil
I did something wrong when editing this file, because...
I don't understand how that works lol
normally you could just register your values to G.ARGS.LOC_COLOURS, but it's only in that function that actually gets defined
