#đ»ă»modding-dev
1 messages · Page 50 of 1
if you want to prevent this issue in the future, nuke all other python installations except the one you want to keep
if you just want to bypass it right now, use py -m pip install pillow and wait for it to finish
(does pip have some kind of verbose flag?)
-v I believe
this worked, tysm
NFS apparently allows you to read to filedata directly without having to use a string in between
yeah that's what i did
Mhm
NFS.read('data', self.full_path)
I think with that, the sound PR is exactly where I want it
gonna merge it I think
i uninstalled all of it and reinstalled the one i wanted and now its doing this
it wont let me use py as a command anymore
add py to path
the other installation
find where the python.exe is, and follow this
https://stackoverflow.com/questions/4822400/register-an-exe-so-you-can-run-it-from-any-command-line-in-windows
could also restart the installer and check the checkbox that says "add py to path" iirc
@mellow sable (or anyone else if they know the answer)
some booster packs in my mod get too many options to pick from and then you can't select some of the options
I recall cryptid having a fix for this, but I can't find it in the code anymore lol
edit: can be fixed by modifying G.GAME.pack_size before the UI function for the pack is called
oh nice, you did their card indication on the bottom too
were you planning to do the planet indication on the top as well?
nah
oh i mea
i guess i could put them for what planet's moons it its
back to work
I mean earth already has the moon there
How do they look in game?
ill check
hopefully they look good
ohhh shit
when i hover over one
it crashes due to nil value
and the graphics are all shit
this is not applying anything to the joker when used, does anyone know why? Club augmentation is supposed to apply snow_a_club to the selected joker when used but instead does nothing.
i made the px and py sizes the size of one of them
i dont understand
this is the image
It doesnât have a use function
i set it to 63 x 93 for the thing
Set it to 71 x 95
but this consumable seems to work fine when i use it?
Fix is in Misprint.toml I believe
alright I'll take a look
That also shouldnât work
or else they crash
Have you set the loc_txt and loc_vars?
Oh wait this has mod_conv
what
I donât think mod_conv will work on jokers, thatâs a base game function
this is the code i pasted
for every planet
just changing names and hands
and x pos and ypos
trying to do something really basic, just want to write a mod that changes the names of some jokers. is there an example mod that does this somewhere that i could model mine after?
idk why hovering over one of these would giv a nil value error
Do the other planet definitions look the same as moon?
yep
i copied moon
changed names
hands
and x pos y pos
they should be basically the same
maybe you arent allowed to use spaces in planet hand level ups
run has no spaces and gives no error
but the other hands all do
that makes no sense, but I'm not sure my dump matches yours
can you send this file: Mods/lovely/dump/functions/common_events.lua
i myself am stumped on what the issue could be
i just dont get it, the planets are literally exactly the same code; what was fucked up
hey have you found anything since?
Yup, found it. It was G.GAME.pack_size, fixed by your _size*G.CARD_W replacements. Thanks! :)
yw
hey have you looked yet
I'm not sure what exactly is causing this, you got me the code for the hand types again?
this contains all code
huh you're not even using the get_run function outside of run house?
nope
Enceladus also doesn't work?
Enceladus should work from what I can tell
for titan and io, you capitalized the of in Run of Three / Run of Four
well lemme check if it does
which you did not do in the key, so these are different strings
oh lmfao
thats really stupid
ill check if it works now
yay it works
i finally have something sharable
thank you so much for helping me make this mod
https://discord.com/channels/1116389027176787968/1267206668996050989 i finally uploaded it
and i credited you
np
just a small thing, don't upload the zip file to github
upload the files directly
anaglyph deck?
any way i can draw that somewhere on screen?
Isnât that anaglyph deck or am i stupid
the view deck overlay or what?
like the stack of cards
oh
sorry i wasnt descriptive enough lol
Itâs just a load of cards
that's just a card area
In a card area
oh sick
Like itâs literally your deck
Yeah
cool
thank you
i feel kinda dumb now lol
ofc its a card area
its a deck
this just doesnt look as good
is the ambient tilt or whatever it is how i get it to be straight?
and not wobble
cool
just gonna have to make it another function rather than reusing the ones for other card types then ig
thank you
I donât think the tilt looks bad though
wtf i forgot to respond, yes it does
Should still be able to straighten it up though
ill have to see how it looks w more cards in it
uh
maybe i dont need 52 cards for each
need to figure out how to line them up lol
every deck kinda needs to be its own cardarea
it is đ
đ
cheers
đ»
theres a cardarea:align so thats probably perfect

oh i didnt make them deck card areas
oops
theyre all title card areas
thatll be why
nvm still needs some work
why not just 1 card per deck, if it's just stats
So iâm trying to figure out how to make a deck based on abandoned. instead of everything but the face card only in the deck. Trying to learn how to add code to 1.0.0 decks
i feel like the decks gotta be thick
they look better imo
Gonna have to figure out where abandonedâs code is first and recreate it
if you look in backs.lua in the game code its all there i think
Yeah. Thatâs what iâm gonna do. I gotta see what 1.0.0 mods have decks to see how to import the code in.
no
some of my deck code for 1.0.0
that is not the real 1.0.0 way
you can have an apply function on your deck object
it works
Ah Aure! Whatâs up?
i just got my own spectral
otherwise, nothing much, just just watching some balatro university rn
Itâs also drawing every card so might cause performance issues if thereâs too many idk
clearly underestimating lua
is there any examples on the 1.0.0 or are the examples in the example folder already the 1.0.0 way?
thats sick asf
Iâm not sure how up to date the examples are
ive lowered it now
:C yeah im having to rewrite my mod due to some ehh spaghetti as i didnt use the steammodded from the getgo -.-
they've sort of been updated, though I've just noticed deck of 4 still hasn't been fixed and I should probably add SMODS.change_base before I do that
Nice. Iâm still trying to figure out how to do decks for ortalab and such
though basically for the decks, what you should do is pass an apply function and put any code in that would otherwise go in a Back:apply_to_run() hook, removing conditions that gate for this deck
cool, will have a snoop and do the migration the right way >_>
you may find hooking Back:apply_to_run() is still preferable sometimes, for effects that aren't specific to any one deck
anything else in particular you need guidance on?
how would you set a joker to have this? I looked at how it's done for editions and seals, but I think they are hardcoded
it's possible but requires messing with the calculation stack
cryptid does it, but it should become steamodded core functionality at some point
needs some cleaning up first though
oh I'd probably be able to use change_base (assuming it's similar to card:change_suit)
yeah it'd basically be a more generic version that allows changing one or both of rank and suit
anyone know how i change which deck the card area actually is?
local row = {n=G.UIT.R, config={align = "cm", padding = 0.07, no_fill = true}, nodes={}}
for j = 1, args.col do
S.card_display[#S.card_display+1] = CardArea(
G.ROOM.T.x + 0.2*G.ROOM.T.w/args.row,G.ROOM.T.h,
G.CARD_W,
0.95*G.CARD_H,
{card_limit = deck_limit, type = 'deck', highlight_limit = 0, collection = false})
table.insert(row.nodes,
{n=G.UIT.C, config={maxw = 0.2, align = "cm", padding = 0, no_fill = true}, nodes={
{n=G.UIT.O, config={colour = G.C.CLEAR, object = S.card_display[#S.card_display]}}
}}
)
end
table.insert(deck_tables, row)
end```
thats the code for the card area
can i pass it a key or anything?
current_center = current_center + 1
local center = G.P_CENTER_POOLS[args._type][current_center + (S.current_page*(args.row*args.col))]
if not center then break end
local card = Card(S.card_display[i].T.x + S.card_display[i].T.w/args.row, S.card_display[i].T.y, G.CARD_W, G.CARD_H, G.P_CARDS.empty, center)
for j = 1, deck_limit do
S.card_display[i]:emplace(card)
end
S.card_display[i]:s_create_view_deck()
end```
thats my code for emplacing the top card
card.children.back = Sprite(card.T.x, card.T.y, card.T.w, card.T.h, G.ASSET_ATLAS["centers"], G.P_CENTER_POOLS.Back[count].pos) this is what I'm doing
do your cards drag around btw?
ty
yes they do
do they snap back to the area?
yeah
its pretty rough lol
just tryna get it to work then ill clean it up and resend if youd like
i added a lovely folder named lovely to my mod and now the game is crashing immediately, im not sure why
hmmm, is that all you have for this screen?
1 sec
G.SETTINGS.paused = true
local deck_display = {_type = 'Back', col = 5, row = 2,}
G.FUNCS.overlay_menu({
definition = s_create_options({
back_func = 'saturn_stats',
title = 'Click on a Deck to view Stats',
nodes = s_create_deck_display(deck_display),
})
})
end```
args = args or {}
args._type = args._type or 'Back'
args.col = args.col or 5
args.row = args.row or 2
args.specific_center = args.specific_center or nil
local deck_tables = {}
local cards_per_page = args.col*args.row
local current_center = 0
local deck_limit = 1
S.card_display = {}
for i = 1, args.row do
local row = {n=G.UIT.R, config={align = "cm", padding = 0.07, no_fill = true}, nodes={}}
for j = 1, args.col do
S.card_display[#S.card_display+1] = CardArea(
G.ROOM.T.x + 0.2*G.ROOM.T.w/args.row,G.ROOM.T.h,
G.CARD_W,
0.95*G.CARD_H,
{card_limit = deck_limit, type = 'deck', highlight_limit = 0, collection = false})
table.insert(row.nodes,
{n=G.UIT.C, config={maxw = 0.2, align = "cm", padding = 0, no_fill = true}, nodes={
{n=G.UIT.O, config={colour = G.C.CLEAR, object = S.card_display[#S.card_display]}}
}}
)
end
table.insert(deck_tables, row)
end
if args.specific_center then
local center = args.specific_center
local card = Card(S.card_display[1].T.x + S.card_display[1].T.w/args.row, S.card_display[1].T.y, G.CARD_W, G.CARD_H, nil, center)
S.card_display[1]:emplace(card)
return {
{n=G.UIT.R, config={align = "cm", r = 0.1, colour = G.C.CLEAR, emboss = 0.05}, nodes=deck_tables},
}
end
for i = 1, #S.card_display do
current_center = current_center + 1
local center = G.P_CENTER_POOLS.Back[current_center + (S.current_page*(args.row*args.col))]
local card = Card(S.card_display[i].T.x + S.card_display[i].T.w/args.row, S.card_display[i].T.y, G.CARD_W, G.CARD_H, G.P_CARDS.empty, center)
card.children = Sprite(card.T.x, card.T.y, card.T.w, card.T.h, G.ASSET_ATLAS['centers'], G.P_CENTER_POOLS.Back[current_center + (S.current_page*(args.row*args.col))].pos)
for j = 1, deck_limit do
S.card_display[i]:emplace(card, nil, true)
end
end
local t = {
{n=G.UIT.R, config={align = "cm", r = 0.1, colour = G.C.CLEAR, emboss = 0.05}, nodes=deck_tables},
{n=G.UIT.R, config={align = "cm",}, nodes = s_create_page_cycle_options({_type = args._type, colour = lighten(G.C.GREEN, 0.03), _type = args._type, row = args.row, col = args.col})}
}
return t
end```
that crashes btw
the sprite thing isnt working
cant tell why
that's strange
anyone know how i can stop the cards from tilting about
actually its not that big a deal
but if anyone does know please lmk
Would anyone have any idea where card trigger order would be located
I want to try things held in hand such as baron and steels trigger after jokers instead of before
evaluate_play function in state_events if i recall
ty
"tilting" as in moving when the player hovers over them?
do your pages work?
yeah
yeah
and they like spin about idly
I want to run heap analyses, does Balatro (or Steamodded at least) use some kind of system that I can use to introspect/analyze/reflect the contents of things the heap walker encounters
the move on-hover can probably be stopped with one of these (prob hover), don't think any of these also stop the idle spinning though
#đ»ă»modding-dev message
ugh I have no idea why my cards don't go in the card area
also, I'm very interested in why your card elements do snap back but mine and eremel's don't đ€
the card areas are display through nodes with objects right
i just make a node with an object thats a card area
then emplace a card
thanks
oh ive already tried that nvm
it decreases it a bit
a deck
let me try title
the code i sent is literally all i have for it
apart from the create_options but thats literally just ui
If you really care (I think it looks fine tbh), you could also take a look at what the deck selector does, since those dont spin
what?? but I just emplace mine on top of the cardarea of the deck select
whose top card does snap back I'd like to add
but my card doesn't
So apparently Balatro internally uses an OO framework, does steamodded use it as well or is it a different one
At least now I have some idea of how I can introspect heap objects I come across
are you talking about Object, Node, etc?
engine/object.lua iirc
yes that's Object, and Node is one of the subclasses that extends that
Does steamodded also use this, or do they have their own
and yes, SMODS' GameObject extends Object
Okay
it seems that every other cardarea type snaps back, but not deck T_T
but why/how is the top card of the deck select special??
I don't know
but I've literally copied that cardarea and it doesnt snap
đ€·ââïž
tf?
isn't that also the one used in the collection deck and in-game deck (the one with "view deck")?
Cuz all of them have their top card snap back đ
well that can't be good
yeah
but I can't figure out why the card doesn't snap at all
like even if I hook align_cards to use a different types alignment it doesn't snap
the snapping must be somewhere else in the code
some of these tooltips have tiny text but I'm not sure if I can be bothered fixing that for now
alright let me check if this card area is finally working-OH NO
no biomes for you
uhhhh where did your trees go
seems like a featureTM to me
accidentally put the position fix in the draw function so it was getting "fixed" every frame lmao
is there a better way to solve card positions in new card areas than just editing the transform of each contained card? bc this feels really hacky and prone to breaking
oh I should probably just inject something into the align_cards function huh
maybe look at reverie to see how they did it
here's a clip of my horrendous attempt of trying to let the sleeve width adhere to the deck size
Itâs not applying any of Cryptidâs fancy rendering tricks đ
I should probably actually just do the same thing in the deck select tbh
what rendering tricks am I missing
If I want to make my custom joker art, what canvas size should I use?
71x95
Thanks
@tepid crow omg I think I've fixed the snapping thing
please enlighten me
I just got jebaited so hard
rip
the fuck?
IT WORKS
red deck
card.children.back:set_role({major = card, role_type = 'Glued', draw_major = card})
you need this
and then it works
#magic
I tried to set the role but I didn't know the correct syntax T_T
I just went looking for where the game actually sets the back of the card
when I enable hitboxes/bounding rects this happens
I put the role on the node containing the cardarea instead of the card
yeah the sprite isn't attached to its box
yeah exactly
if you click on the deck it flies back
yup
how do you change the probability of a specific item showing up in shop or packs?
atm nope. but that's because I passed out for ~4-5 hours and woke up
using take_ownership and modifying the weight works for most items I believe?
that's for booster packs at least, not sure if it works for any other things
oh my god it works (and even has an args.offset) that's amazing
where in the files are the effects applied?
Enhanced.toml I think
Probably injected into the draw function.
How to I tell my mod to use assets from the assets folder?
if you're using steamodded declarations then they will automatically use assets from assets/1x
So I don't need to change the atlas parameter?
oh, have you made a SMODS.Atlas?
Using this example from the wiki:
local j_example = SMODS.Joker:new('Example Joker', 'example', { mult = 10 }, {x=0,y=0}, {
name = 'Example Joker',
text = { '{C:red}+#1#{} Mult' }
}, 1, 2, true, false, true, true, 'Mult', 'my_mod_jokers')
j_example:register()```
you're using 0.9.8 on purpose?
that is VERY old
Alright, what's the skeleton for 1.0.0?
on the wiki, the numbered pages
Oh, so the "Creating new game objects" page is not for 1.0.0
nope
found the perfect solution to this, literally just copied the align code from the joker section lmao
where's the skeleton for making a 1.0.0 joker?
https://github.com/Steamopollys/Steamodded/wiki/03.-API-Documentation#creating-an-object has the call formatting
https://github.com/Steamopollys/Steamodded/wiki/05.-SMODS.Center#smodsjoker has the arguments
https://github.com/Steamopollys/Steamodded/blob/main/example_mods/Mods/JokerAPI_Example/JokerAPI.lua#L30 is an actual implemented example
Thanks
only issue I still have is that role_type='Glued' just ignores offset lmao
why do you need to offset?
the sleeve sprite needs to be in a very weird position
and right now it's just... on top of the deck
probably because of CardArea:align_cards()
can you make the sprite bigger so it fits?
yeah that's what I was thinking too
actually, don't think that'll work because I also need it to be slightly wider than the cards in its cardarea
yeah when glued it just sets all properties (x, y, w, h) to the major's
even if the actual sprite itself is bigger?
I'll just try and see
How do I change cards (when scored) into a different suit and rank?
I use card:set_base(base), with base being a value in G.P_CARDS (e.g. G.P_CARDS["H_8"] is 8 of hearts)
And I can remove the loc_vars and calculate functions without consequence?
Nvm, just tried it and it works (somehow)
not really - I always need to actually scale the card height, and the sprite auto-adjusts with it
you could try Minor instead of Glued, I think that has a similar effect
I can make the card higher, which "stretches" the sprite (which I can then fix again by scaling sprite properly, but that's all so... eh)
so..., I thought I tried both Major and Minor and that neither worked, but turns out I only tried Major and Minor works perfectly
(aka actually behaving according to offset)
nice!
@brisk pond you can use SMODS.load_file(path) (I saw that sneaky message delete)
yeah bc i solved it with local UTIL = load(NFS...) and returning a table of function in the util.lua
figuring out the answer to your own question the moment you press enter it is always nice đ
Pantheon spirits
I think using the smods version avoids having to return a table in each file
52 card decks?!
lmao the rightmost 2 drawing over their neighbours
I guess the game draws from left to right
by order of G.I.CardArea iirc
I think 15 is a good number
Selebrak seems very... boring?
I didn't rlly know what to do with that one
Because in cookie clicker it buffs seasonal events
right, it is way past the time I should have been asleep...
How do you represent that in balatro
I guess selecting them properly will happen tomorrow
I just looked at the wiki and imma be honest I barely understand what that actually means
Because having certain seasonal events active has different unlocks and buffs
So selebrak just makes those more prominent
gn btw đ«Ą
I mean that table basically reads like "golden cookies appear more often"?
That's fair
Okay I changed selebrak
But are the others alright in terms of balance
I'd say they at least "feel" legendary
if SMODS.end_convertCards_context(context) then
return {
card:set_base(G.P_CARDS["h_a"])
}
end
end```
Got this much done, what else do I need so it can be triggered and convert the cards after scoring?
what kind of object do you have? if it's a joker you could do the same thing hiker does
It's a Joker
yeah you can copy hiker's code
Cool.
Problem: How?
combine hiker's code and an steamodded joker example (e.g. https://github.com/Steamopollys/Steamodded/blob/main/example_mods/Mods/JokerAPI_Example/JokerAPI.lua) into a single thing
2 notes:
I think you need to use calculate = function(self, card, context) instead of the example's calculate = function(card, context)?
it's G.P_CARDS["H_A"] (they're always capitalized)
But where do I get Hiker's code?
do you know how to look through the game's code?
local steam files
open with 7zip
hiker's code is around card.lua:3066
you only care about "when" hiker triggers though, if that makes sense
context.other_card.ability.perma_bonus = context.other_card.ability.perma_bonus or 0
context.other_card.ability.perma_bonus = context.other_card.ability.perma_bonus + self.ability.extra
return {
extra = {message = localize('k_upgrade_ex'), colour = G.C.CHIPS},
colour = G.C.CHIPS,
card = self
}
end```
So this code?
the "when" is the if-chain above it
if context.cardarea == G.play```
because that's the condition for hiker to trigger
aka the condition for your joker
and then the return { card:set_base(G.P_CARDS["H_A"]) } goes after that G.play thing?
I'm honestly not sure
if context.individual then
if context.cardarea == G.play
return {
card:set_base(G.P_CARDS["H_A"])
}
end
end,
atlas = "AryaTheWitch"```
This check out?
the return seems to create both the pop-up for the... joker? and sometimes also an action?
I have no clue what i'm doing, but I just need it to do a message and the actual action.
huh, I can't get a message to appear lol
Alright, running it with this code. Let's see.
well you do seem to be missing an end
where?
Alright, last check before run.
got the then, didn't got the end
where does the new end need to go?
to close the 2nd if block
đ
if your code is still looking like this you're still missing that end
But where does it need to go?
the ends already look like they close it
that's cuz you're not indenting correctly
should look like this
do you see the change?
Now I do (pushed the changes)
Now let's test it
Cause Balatro's successfully running
always a good first step
wow I just edited that image without noticing the issue myself lol
What was it?
read this message again and see if you can figure it out too lol
A --> Ace / ACE
remove "self"?
ait Imma go to bed
maybe someone else can help you out with the message thing
oh and use context.other_card:set_base(...) instead of card.set_base(...)
I think card is the joker
ah, nevermind, self is the center and card is the joker instance, similar but not the same
Every change pushed.
Testing time
IT WORKS
But I need to get that AFTER it scores
and message still
BUT IT WORKS
anyone know what's wrong with this lovely patch? the print statements aren't running and it doesn't show up in the lovely dump. this is specifically targeting evaluate_play after the joker_main and edition contexts.
[[patches]]
[patches.pattern]
target = "state_events.lua"
pattern = '''local nu_chip, nu_mult'''
position = "before"
payload = '''
for i=1, #G.biomes.cards do
local _card = G.biomes.cards[i]
print("biome eval trigger A")
local effects = eval_card(_card, {cardarea = G.biomes, full_hand = G.play.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, biome_main = true})
if effects.biomes then
("biome eval trigger B")
local extras = {mult = false, hand_chips = false}
if effects.biomes.mult_mod then mult = mod_mult(mult + effects.biomes.mult_mod);extras.mult = true end
if effects.biomes.chip_mod then hand_chips = mod_chips(hand_chips + effects.biomes.chip_mod);extras.hand_chips = true end
if effects.biomes.Xmult_mod then mult = mod_mult(mult*effects.biomes.Xmult_mod);extras.mult = true end
update_hand_text({delay = 0}, {chips = extras.hand_chips and hand_chips, mult = extras.mult and mult})
card_eval_status_text(_card, 'jokers', nil, percent, nil, effects.biomes)
percent = percent+percent_delta
end
end
'''
match_indent = true
target = "functions/state_events.lua"
y'know, after like 6 years of programming you'd think I'd be better at it by now
thanks lol
info_queue[#info_queue+1] = ... there's literally a function called append, what are you doing?
it's faster than using table.insert
I'm also trying to work out where the game creates packs inside the shop
huh interesting
Is it possible to give Wee Joker a different texture? Afaik it just takes the usual Joker's texture
yeah you can just change its atlas/sprite position
will it still be wee?
as in little
Great, does it need to be patched in or a base lua function will do?
iirc it is scaled down in the same place as half joker and others do
yeah
also do you know where this code is?
you can do it with steamodded functions
if you want a different joker to be wee, I think you can just make its (internal, not key or display) name 'Wee Joker' and it'll work
actually I've yet to try that
that's a strange thing about the code in this game. It mostly relies on string names for things
steamodded mostly uses keys instead because why decollision two separate strings
found it in game.lua:3118
I think
Nice, now I need to find where it assigns atlas to cards
jokers have no atlas associated with them usually, it will just default to the Joker atlas
you can assign a different one through steamodded by doing something like SMODS.Joker:take_ownership('j_wee', { atlas = 'your_atlas', pos = { x = 0, y = 0 } }) where your_atlas is defined through SMODS.Atlas, and the x and y values match the joker's position on the atlas
I meant the position, I'm familiar with .json atlas configs but not whatever happens here
I found this one
pos={x=0,y=0}
the shrinking happens in code elsewhere
{x=0,y=0} is just the position of the standard joker, and it uses the name elsewhere as a condition to shrink
Ohh, so it counts the tiles by itself? That's why it is so confusing
In card.lua:251 actually
Anyway, issue solved, thank you!
how do you make a joker like "the duo" and "the tribe", the only feature i need is x2 mult when a hand type is played
You can read the source code for those
ok
Though IIRC they use a variable not in extra, which you could use, but you can also define your own
you can look at card.Lua but generally itâs easier to open the folder inside a decent program and searching all of it
is base_spectrum wehere the poker hand would be put
I use vs code
yeah
or you can just put the key there, like 'h_rh_Run'
I just like to not hardcode prefixed keys
what's a run? A smaller straight?
its a hand in my mod
also for some reason i cant enter a seed
i havent even messed with text input it just did that
well its fine now
3 cards containing a Pair and an additional High Card that is one rank higher than the Pairs rank.
yep
interesting, doesn't sound too hard to find
yeah but it gets rarer later on
run of three has to contain a 3oak and a high card
run of four contains 4oak
and run house is the same thing
but the high card is a pair
run of five contains 5oak?
what
2,2,3,3 for example?
run of five doesnt exist
because that would require
5 cards
and then a high card
run of four has to contain 4 cards and a high card
what if you add my mod which lets you play 6 cards with the card+ voucher?
ooh
that could be cool compatability
ill add it to the feature list
except my mod isn't finished yet
what would a run two triple be then? (e.g. 2 2 2 3 3 3)?
also a run house is
eg.
22233
and not 22333?
yeah
what would that be? Just a full house?
speaking of which do you have flush runs?
so it contains a run
;yeah
no
would be a bit too specific
four of a kind and high card with all cards the same suit
alright đ
I need to work out why my omni cards aren't working
yeah that's a steamodded bug
Iâm transitioning to it
from...?
Sublime Text
paste seed bug is fixed on latest

me when ERROR
Teach me your ways
there is one issue in that the original card gets drawn below
it's a 1 patch fix
if you find in code how negative is drawn
you can see that there's a check with like if card is negative then only negative shader is used
but otherwise its dissolve shader (which causes the card being rendered behind)
guys serious question what is match_indent even doing
i remember asking it somewhere several times but got bumped away
it prepends the whitespace before the matched line to each non-empty line in the payload
oh so it wont at all be the cause of any failed patch but kind of a prettifier
yeah

and i got 2 more Qs
whats its default if its not present? or its required?
and does the priority work as steamodded (the bigger the later?) or the opposite?
it is required
priority 0 applied first
but because like 99% of mods have priority 0 it's random
between other 0 priority patches
iirc unreleased lovely version supports negative priority already which is nice
k got it
also if u copied someone else's patch with overwrite you can safely remove that line as it does nothing
only "at" patch will overwrite
It didnât do anything for my regex patch IIRC
lovely gives a warning in console when you have parameter that does nothing in your patch
Question. I want to add custom configuration to blind object, which can be used by others for integration with my mod. Which variant is better: use blind.config.extra or create own table like blind.config.my_mod?
blind config as opposed to card config does not have special keys
so it really doesn't matter
Is there a way to add a new deck art into this menu?
not at the moment
AltTextures have been put on the side for now
it'll look like this eventually
Also, can i somehow flip blind chip sprite upside down?
looks good
Looks cool
looks great
but probably better to have some better selected deck indication
oh it will do
What will right panel do?
I think I'll have the deck appear in that panel
I think "Green Deck Deck Selected" is a placeholder
the selected deck and the stake chooser?
I'm also thinking about stakes
stakes will be on the next page
this is my current idea
the bit at the bottom is what you've selected, and the green lights will indicate which stakes are applied for that
What about placing the stakes on the deck to indicate you're choosing it
I'm just thinking out loud
ngl this somehow looks off
can't put my finger on what exactly
no I mean layout
This look like config menu, not someone playing in a casino
maybe it's the green/red dots
But I mean it's certainly going to change
well, I'm simply giving my opinion
What does the dots indicate anyway
too big, i'd rather have them as lists like houserules does
Really think it would be cool to simulate someone actually playing in a casino
Current progress: I can use Lua's introspective capabilities to get ahold of the source locations where classes are defined
Not exactly names, but pretty close
You pick a deck from the deck piles, pick which stake to gamble on
Stack the stakes like they are actual stakes
maybe this could work (without applies previous stakes text)
you might want to use the controller highlight thing, it gives a nice white border around a selected element
What I imagine is, like real stakes, you will stack them, the one on the top applies all the below ones
On second thought it might look bad in practice/hard to be implemented
Yeah I have no idea what the best way to display stakes is
Will look into this, I was trying to dynamically add an outline but couldnât get it working
hey does anyone know why this joker wont work
its supposed to only give 2x mult
for h_rh_run
but it gives 2x for everything
Pretty sure your type should be a string
yeah else it's just nil
I donât know how I feel about it being multiple pages long. Is there a quick start option?
That said, I think you could use the Stake chips without the green and red dots, just highlighting them in some way (size, saturation, outline, etc.)
just wondering, what would a "quick start" look like?
I imagine it will remember your last run's setting and you can apply it in one single click
So you don't need to click here and there... click this... click that
ohhh just a single "play previous", kinda like the game already does for the normal play menu
yeah makes sense
Yeah itâll function as it currently does in terms of pre selecting things for you
doesn't base game already do that
do I need to add all language support for my mod?
But in this there are multiple pages
You just wonât need to cycle through 50 decks or stakes to find the one you need
In the game right now you just click new run, but in eremel's you will still need two clicks
I donât see that as an issue tbh
Well maybe, there's always room to improve it
i also see that as a nonissue
Maybe just make play button always visible, and the select stake/deck a toggle
I consider it a potential issue
I thinking adding one extra click if youâre playing the exact same deck stake combo is fine when you consider all the saved clicks if you want to change either option
uh, does modding this game require knowing like, any pre-existing coding languages
I wouldn't try learning how to program by modding balatro if that's what you're asking
if you already have experience with some other language (e.g. Java, Python, C, whatever) then using Lua isn't very hard
Fair then, at least yours are much more efficient
But if anyone wants to mock up some stake selection ideas I am more than happy to take a look and find a solution that everyone likes
what's the variable to make the sound start over like the old behavior?
by sound i meant music
I really think they should be stacked together like sideways and you can flip through them, they are overlapping each other meaning they will apply all the ones below them
i just don't have any programming experience but think making a mod would b cool
Also remember that this is to counteract having 50+ options
hey thats what im doing
and im doing
fineee
Iâd like the solution to make it easy to select the one you want, but also able to see what effects you are applying to your run, especially as custom stakes arenât ordered in any sort of way from what I remember
Aren't they supposed to be ordered
I mean personally I'd suggest at least looking at a lua tutorial before going into balatro
If I remember right, there is an option to set which stake it comes after, but I think it still just puts them in injection order in that category
As soon as two different mods try and add their own stake chain, or you have branches in your own stake chain it becomes a mess to flick through
how do you make your jonkler blueprint and brainstorm compatible
Usually nothing
well
my thing that gives 2x for hand types
is not brainstorm compat
i just happened to get the both of them
and it said incomptabile
But did you test it?
Because saying itâs compatible is separate from compatibility
The message is just a Boolean variable set when you create a Joker
How about the vanilla content being 1 click accessible but modded content being hidden deeper?
And quickstart helps you 1-click modded content
@tidal edge
Check the wiki
Or another mod
the balatro wiki or another wiki
For example: all vanilla stakes are in the first page, and modded stakes are hidden in further pages
also why WONT THIS WORK
my hand is named
Run
and the prefixes make it
h_rh_Run
but it gives mult
for every hand
do u know any goo one?
Idk ping aure
good ones*
I started without any tutorials but I already knew Python
I think beginner programmers need to understand that computers are stupid
i just looked at other mods code and see what they did and figured out how to mod from there
After you get past that barrier it becomes easier IMO
Maybe group them into subgroups? Like base game, cryptid, <mod name1>, <mod name2> and inside you get to choose the exact stake to play? By this will significantly reduce the amount of clicking
Thatâs close to what I said, but I still think vanilla should all be in the first screen
base game, other mods in alphabetical order
how
Most mods are on GitHub
In fact, mods shared here need to be open source
I started with a single Joker mod for Steamodded 0.9.8
You can try modding a single Joker into 1.0.0
That sounds way more convoluted than just having pages of stakes in the order theyâre in their table
How so?
My personal opinion is the stakes should be shown in one page...to indicate their stacking effect
I'd also like to suggest taking a look at this mod to try and start off with, it's meant to be for beginners, but is still a little WIP. Let me know if there's anything that doesn't feel clear in the explanations. Doesn't have the atlas with it yet, though.
But mods donât need to have linear stakes
So that kind of breaks down
Well if you can mock up a clean way to show all the stakes at once, be my guest
I donât think all stake options should be onscreen at the same time, but after selecting one, maybe all of the ones it implies could be shown to the side
Like a deck
Or a pile of chips
Or a mound of chips
no like, how o you just look at a mod's code and learn how to do it
That's what I originally saying
Besides the selection part that is
I mean, if you want to do Ă and a vanilla or modded Joker does A, then you only need to figure out how to go from A to Ă
With Steamodded thereâs some incomplete documentation, and undocumented vanilla options, so you can see how other mods set up what theyâre doing even if theyâre doing B
But I think starting with a single Joker is easier
I could make a tower of chips to represent the stakes that are applied, would you want them to have tooltips too?
i guess
how could i crack open some joker coding
Should be separated tho, or else it could look like a mess
oh yeah a pile of chips sounds good
Do you imagine the tool tip only showing the top one? Or the one currently hover over?
I thought about tooltips but Iâm not sure if itâs worth supporting
How many can there reasonably be until they canât fit?
And how many would the average mod have?
You can unzip vanilla or again check some mod on GitHub
no, sorry, I never followed any lua tutorials đ
Also should make it easier to visually understand when the stake order doesnât represent the order you select them
could u please not ping me so much btw
and how would i unzip it?
With anything that unzips
Maybe tooltips only for the highest stake and on hover?
0.3, because Cryptid has 24 and almost every other mod has 0
You can copy the .exe then unzip the copy
like opening the archive?
What archive
Zip file
yes, like opening the archive
i can turn houserules into a stakes mod
so the average would become 0.6
oh hey and i have a code editor installed from that one time a friend tried to convince me to raid some crypto scam server
I thought about:
- Selected stake, mentions previous stakes in the dependency graph;
- All implied stakes, added dynamically;
- Selected stake, nothing else;
- Selected stake, can hover over others to see them.
Balatrostuck wants to add 1 Stake IIRC
2 or 4
I donât think 2 is good because the tooltip could go offscreen
Unless itâs like
Misprint
i've always found just being able to crack open a game's brain while it's running lol
And when thereâs too many in the stack, they stack tighter
Stakes added by different mods will mix or will be separated ?
I mean their applied order
stake tech tree
I dont like the idea of stakes being ordered same way as decks, just makes no sense
wonder where these jokers are hiding
honestly a tree pattern would be interesting if mods have stakes that're applicable out of order
I just donât see how else youâre going to display them on the screen
.
my idea
it's not ideal, but it makes a bit more sense imo
Missing a quickstart button. Also Iâd do a proof-of-concept to see how high can the stake tower get
stake tower has the same issue as old menu with tons of modded stakes
As I said, it could be a mound
You donât select the stakes on the tower
Thatâs just there for diegetic purposes
Itâs just a visual representation for how many stakes youâre applying
No Iâm trying to avoid having to single scroll through the entire stake selection to find what youâre looking for
An idea. Have the chips in chip-shaped holes, and desaturate unselected ones
Youâll always be able to see the top chip of the tower, and itâll only be stakes that are being applied, not all of them
Alternative they could be distinguished by size or outline
Desaturating the ones that arenât applied you mean?
where are the jokers stored in the files
resources/textures/2x/jokers.png
Ehh⊠the ones except the specific one you selected
Although
Since Stake colors are important, maybe desaturating them isnât a good idea
not like the sprites
like their coding
Itâs just a long if-then-else tower in card.lua
they're kinda completely scattered over multiple files?
Oops
Or circle it
My bad for the ping
nah its fine
the occasional ping is cool
it just sets me off when i get like, more than 2 in one conversation
I prefer size or outline. Heck maybe alpha
that's worrying lmao
I usually just do a global search in the game's code for the jokers name
Name or key
Sometimes you search for the overlap
But sometimes itâs hard to tell what the key should be
Or thunk made a typo
god the caino typo stil fucks me up
oh god is it just defining jokers as not any of the jokers behind the joker it's referencing
no it's basically just if joker.name == "Campfire" then ... for 2000 lines
oh so the actions are defined off of the name?
Steamodded does define everything* locally
Not for modded Jokers
Just for vanilla ones
well yeah the vanilla ones
Also context
time to name every joker perkeo!
basically? they also have a hardcoded "context" they apply in
Steamodded automatically adds an infix to your Joker keys
I suggest you just go read the code at card.lua tbh
yeah that's what im doing
I donât think reading the source code is relevant until youâre writing calculate functions tbh
sure, but they seem interested in the inner workings
i just kina wanna make some neat jokers
heres a simple example of a modded joker, that give x3 mult (the other part of what it does is somewhere else)
the debuffing of suit
is somewhere else
@shell tangle has a great resource that writes some base game jokers in the modded style
Also Steamodded supports localization files
Which Iâve been using
im gonn guess rarity 2 is uncommon
I prefer to keep most of my code to one file
so like, does that joker give you 3x mult and debuff all of your heart cards?
oh, neat
why does it mention debuffing?
oh wwait lmao
im a bit dumb
thats the description
I think itâd be easier to localize when the entire localization is in one file
And I plan to have three localizations
well that's a lot of code for a flat 3x mult
ÂŻ_ (ă)_/ÂŻ
I mean most of that is just setting variables every Joker needs
Why is your emoji half-Rayman
You didnât escape the escapes
what're the variables?
there's a wiki?
Name price tooltip rarity etc.
this part gives the x3 mult, while the rest is mostly setting up the joker
that key in message won't work though its mod specific
...do you have the link to the wiki?
I have it open constantly
you guys are my favorite modding community fr
i feel like my thousand yard stare is swiftly getting larger (longer, wider? idk)
same tbh
I have no clue what other modding community looks like
are the other ones bad?
idk what any of those mean lmao
I would say the important ones are badge_color, display_name, and prefix. I don't really use the others
what's the difference between the display name and actual name?
actual name will appear in the code and mod folder, display will appear on the badge
display name might as well be called badge name 
oh wait
sorry i missed that message lmao
uh, will messing with the code disable achievements?
a badge is a thing like "Negative" on tooltip
ah
an identifier that tells what joker is from what mod (the six hundred suits is the badge for this example)
ah god adding new stuff to the sprite sheet would prob be a pain
Bumping this up, because it has explanations for everything that's been asked so far.
example from cryptid
And here's the mod itself with atlases, so you can actually boot it up and mess with the values and experiment.
cryptid has a lot it could probably be shorter
i only use four of these atlases, the rest i am working on
bump
is the example mod ultimate random deck the best way to do randomness in Back:apply?
because I don't think that respects the game seed?
no_sync
no because it doesn't respect seeds or custom objects
is there... a better way?
alright I'll take a look
thanksies
You mean cryptid's antimatter deck right?
I'm probably stupid but I can't find any randomization being done in antimatter's (or misprint's) apply
I was looking for more of a simple randomize starting hands and discards (while respecting the seed) if that matters
I could also:
a) hook Game:start_run myself, and call my own apply afterwards, but that seems prone to breaking for a variety of reasons
b) use lovely to move the seed generation in Game:start_run forward so it's before back:apply_to_run(), but if multiple mods do this it'll probably break
alternatively, if you can do random with run seed in back:apply and I just need to wait for you to update the example mod lmk
