#💻・modding-dev
1 messages · Page 101 of 1
oh
But it's not pretty
Well I was using it to change blinds
hol yp
up*
LMFAO???
that was NOT what i expected
ok
yeah i can fuck with this
This is nadicslly the entirety of reroll blind code
hey wait
if _element and _element.config and _element.config.tag then
local _tag = _element.config.tag
if key == "2" then
G.P_TAGS[_tag.key].unlocked = true
G.P_TAGS[_tag.key].discovered = true
G.P_TAGS[_tag.key].alerted = true
_tag.hide_ability = false
set_discover_tallies()
G:save_progress()
_element:set_sprite_pos(_tag.pos)
end
if key == "3" then
if G.STAGE == G.STAGES.RUN then
add_tag(Tag(_tag.key, false, 'Big'))
end
end
end
``` is this not like
exactly what i'm tryin gto do on the last part
if i just changed it to G.STATE == G.STATES.BLIND_SELECT
No that just gives you the tag as if you skipped the blond for it
oh
oop
alr
ok let's see if it works
@rough furnace not sure why this wouldn't work, any thoughts?
local par_small = G.blind_select_opts.small.parent
local par_big = G.blind_select_opts.big.parent
G.blind_select_opts.big:remove()
G.blind_select_opts.big = create_UIBox_blind_tag('Big', true)
par_big.config.object = G.blind_select_opts.big
G.blind_select_opts.small:remove()
G.blind_select_opts.small = create_UIBox_blind_tag('Small', true)
par_small.config.object = G.blind_select_opts.small
G.blind_select_opts.small.parent = par_small
do i actually have to 1:1 write out the ui programming for each tag or can I just do it the way the game handles it
¯_(ツ)_/¯
You might be able to hijack the get next tag function and tell the game to regenerate the first 2 blinds
¯_(ツ)_/¯
Probably magic
What do you think would be a good pro to give to a deck that starts with a eternal joker like this?
Wrath Joker Adds/Subtracts mult or chips each played hand in the range of -20 to +20. Doesnt go below 0 chips or 1 mult
@rough furnace ```lua
G.blind_select = UIBox{
definition = create_UIBox_blind_select(),
config = {align="bmi", offset = {x=0,y=G.ROOM.T.y + 29},major = G.hand, bond = 'Weak'}
}
G.blind_select.alignment.offset.y = 0.8-(G.hand.T.y - G.jokers.T.y) + G.blind_select.T.h
G.blind_select.alignment.offset.x = 0
this does it
i went digging for what these functions connected to and found in game.lua where it uses it
so uh if anyone asks for some reason how to regenerate the blind select ui
this is how
how come the chip and mult limits are different
subtracting all the way to 0 mult would be chips * mult = 0. So 0 score.
ya but the same is true vice versa
oh wait youre right

If I wanted to subtract chips, would I just return a negative number to chip_mod?
its always so funny whenever i forget to put return true at the end of an event
god i hate event manager
note: add G.blind_select:remove() before you do this or it'll draw 2 uis
how do i initialize all joker config values on r key because for whatever reason it isn't doing that already
scratch that it is literally whenever a new run starts
bruh
hm
ok wait nvm
you can't get a jokers center without it's config so
nevermind i fixed it
i wonder; how easy is it to mod this game
what are you doign rn
Anyone know why my math.random isnt working right? I have a max set in the config to 20, but it able to go above that, to stuff like 24.
local amount = math.random(hand_chips - 1, card.ability.extra.aMax)
im trying to create a tab in a specific area of the game and i have no idea how to specify that area
add a tab into this function G.UIDEF.deck_info
Tattered Ghost Deck effect: adds a modifier based on a spectral card to all blinds. Beating the blind grants that spectral.
hi a bit late but I think this won't work because jokers that are not vanilla are not loaded yet when jokerdisplay loads those values
I'd recommend using a fixed color or using style_function to change it instead
god.
Is this range too big?
never too late, I appreciate it
How would I retrieve the center's config values without P_CENTERS?
where can i get the total score of the played hand?
does the steamodded ui guide give any info on how to insert a button into a already existing uibox, or does it just tell you how to make ui boxes because ive been looking through it multiple times and i cant find anything that is useful to me rn
so, there is a 1/8 chance that wrath will give you +10-20 Mult, and a 7/8 chance that its effect will be essentially negligible to damaging, if anything the range should be higher since its a worse version of misprint (For reference misprints range is 0-23)
It ensure it doesnt go below 1 mult or chip. But yeah, i can raise it for more randomness. maybe 50?
you have to add a tab like they are formatted in that function
the guide does not explain this, you just have to look at examples in the game files and work it out
how do i make it so my rarity can't show up in a shop if it's in hand already (for some reason it's doing this???)
If you do it inside the style_function the center is "card". So instead of setting the color on initialization, you set it during runtime by doing reminder.children[2].colour = lighten(loc_colour(card.ability.extra.suit:lower(), 0.35)
Or just hardcode it to "hearts", that's what I did with other mod support (assuming it doesn't change)
Is there any way to change the rarity of consumables in packs?
i.e. to have a consumable set with different internal rarities
should i remake this art from the original ro-balatro or is it fine as is?
Does G.hand.highlighted still contain the cards you have selected when you play your poker hand and the game reaches context.joker_main?
I don't believe so
Okay, which one would be the played poker hand?
context.scoring_hand is the scored cards, context.full_hand is all played cards, G.play.cards is all played cards
weird bug i just got not sure why
Is there a way to poll all jokers in the game? (Can be just vanilla jokers, but modded would be good too)
get 🫘ed
But yeah, this is part of my unbalanced mod
i should fix enhancement names looking like this
Aka the "Crimson's learning everything" mod
Make it so that we can pick the color
pls
so after every played hand you get one extra hand size?
Maybe make it so you get a bean joker every played hand
correct
I'm not taking suggestions for this unlike my other mods
This is me learning to do whatever
might as well just give yourself the entire deck as your hand size
never said Shinku's cards are balanced
It actually works now 🤔
No crash or anything, weird
I kept it like this
jd_def["j_my_enamored_joker"] = {
text = {
{ text = "+" },
{ ref_table = "card.joker_display_values", ref_value = "mult", retrigger_type = "mult" }
},
text_config = { colour = G.C.MULT },
reminder_text = {
{ text = "(" },
{
ref_table = "card.joker_display_values",
ref_value = "localized_text",
colour = lighten(loc_colour(G.P_CENTERS["j_lusty_joker"].config.extra.suit:lower()), 0.35)
},
{ text = ")", colour = G.C.UI.TEXT_INACTIVE },
},
calc_function = function(card)
local mult = 0
local text, _, scoring_hand = JokerDisplay.evaluate_hand()
if text ~= 'Unknown' then
for _, scoring_card in pairs(scoring_hand) do
if scoring_card:is_suit(card.ability.extra.suit) then
mult = mult +
card.ability.extra.s_mult *
JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand)
end
end
end
card.joker_display_values.mult = mult
card.joker_display_values.localized_text = localize(card.ability.extra.suit, 'suits_plural')
end
}```
the top bar just shouldn't be there
oh
Does card:get_id() work on jokers?
it should be for replace_base_card cases
note to everyone in chat: having a function in config.extra will crash the game
isn't it supposed to?
no clue but i found out the hard way
yes that's expected
Having a function anywhere that the game will save is gonna crash
i'm done for the day idc
card config values need to be serializable
yeah i see that
or generally anything the game tries to save
ok i think i have a lazy fix then
how does the game determine what the next playing card swill be
where in the sc
the next card drawn to hand from your deck
Ow my head 😭😭😭
also is it just me or does holding m to restart just not work anymore
Does G.jokers house all jokers in the game? Would pseudorandom_element be able to get a random joker out of it?
pseudorandom_element on G.jokers.cards would give you a random joker that you own
I need to get a random joker to spawn at start of a run
using SMODS.create_card is preferable to vanilla create_card for cleaner syntax
or can you tell me what that second nil is doing without looking it up?
I also noticed this
but I have also modified my key to [ now and it works
oh i never took a closer look at that
SMODS.Center:take_ownership() seems bad because it's more of an abstract parent class to different types of centers
but c_base isn't any particular type of center
it's a special type of center technically
it has the set 'Default' which is used to special case it in certain places including generate_card_ui, making it an SMODS.Center type object can break its control flow
at least that's what I assume would happen if there were no atlas issues
https://github.com/BDonutGLXY/Balatro-Donuts-Mod ok so this is up now
yeah base cards aren't right then, you'd be excluding all enhanced cards
I tried using SMODS.create_card, and it places it in the jokers slot, but they arent locked into that spot (The joker count doesnt increment above 0), and I can drag them around anywhere. Do I need to call add_to_deck() on them?
SMODS.create_card({
set = 'Joker',
area = G.jokers,
no_edition = true
})
Playing cards are the one thing I've avoided trying to comprehend due to
spaghetti nonsense.
Best start would be telling us what you're trying to do (in case you don't even need to use take_ownership).
I just tried to get around it by embedding the tooltip into the playing_card loc entry, but it doesn't work unfortunately
the only way I see then is to lovely patch into generate_card_ui, which is not great
cards can only have one center
actual playing card info isn't even part of any center, they're their own thing
centers and cards aren't the same thing
if v.key == 'm_stone' then
return v
end
end```this feels... suboptimal (trying to get the stone enhancement for create_playing_card)
it does go in a Card object's base table, but that's not part of what a center controls of a card
G.P_CENTERS.m_stone
anyways this ugly bar is forever gone now
Looking at suit and rank implementation I don't see anything that would suggest that adding a tooltip onto a card of X rank or suit is doable (at least directly).
With the power of lovely injection this is easy to solve but I'm still wondering if you can get away with not doing that.
it's probably best solved with steamodded providing an API function on suits and ranks for tooltips (a pseudo loc_vars function i guess)
Center info doesn't add anything other than specific info tied to playing card, no other properties (such as loc_vars)
we're not reliant on center info as we're always passing the card
this has lots of potential for patch conflicts if multiple mods need it
it should probably still just be <Suit|Rank>.loc_vars(self, info_queue, card) but toss the return value
how do i stop these particles from always showing up on my cards in booster packs?
in normal packs they only do 1 explosion when its opened
also i cant really show this in a photo
but when the pack is opened you can see them move to their positions from somewhere in the top right corner
I wonder is this thought can be extended to more than just adding tooltips
is there anything wrong with it?
SMODS.Suit and SMODS.Rank is designed for basic cards which is typically fine but for making them "special" in some regard requires more work than it probably should.
cuz idk why the particles on the card physically will not go away
doesn't seem like it, looks identical to the one used in regular packs
no clue
still working on it to see if I can get it fully featured
no it is not keep_on_use
tho there's a split path between enhanced and base cards that I'd have to work around
thinking I'll just leave it as it is for now, having suits or ranks change descriptions might not work that well with all the other moving parts
like you might have an enhancement that gets rid of your base chips but still keeps your suit unlike stone cards
in which case the suit and enhancement would conflict when trying to replace the description
yep
i can't think of a reason why you wouldn't just want to use tooltips
you just shove a loc_vars function in your suit/rank definition
SMODS.Suit {
...,
...,
loc_vars = function(self, info_queue, card)
info_queue[#info_queue+1] = ...
end,
}
https://github.com/Steamopollys/Steamodded/wiki/SMODS.Suit-and-SMODS.Rank#api-methods went ahead and updated the docs with this as well
yeah card is the playing card as a Card
that's a lot of cards in one sentence
the tooltips are in a format where you can directly shove a center into it and it'll happily pass it through generate_card_ui to find the correct localization for it
(this will also call loc_vars on that center if it has one)
all it needs is a set and a key and it'll try to take the localization entry from G.localization.descriptions[set][key]
as well as any additional variables if they're needed
(there's some issues if you try to tooltip a vanilla joker because it won't be able to find the variables, so you'd need to pass them yourself)
usually for extra descriptions that don't inherently belong to an object, you want the description to go in the Other set
What's ur guys' opinions on this joker? the sprite on it's own
i like it, looks kind of like an alternate blueprint
reminds me of code joker
you may have forgotten a bit of subpixeling on the lips, but it looks neat
It could maybe work better with the vanilla palette
besides that I’m probably gonna be biased because there’s a Cryptid joker with similar design
That did NOT work 🙏 😭
oh fr?
the epic, right?
Yeah
😭
yeah, with the second one in the correct place within descriptions.Other, of course
Ya love to see it
i'm surprised nobody had made a balatro palette image with every single color used in the base game
they have done that
unless i'm blind
you are small blind
https://canary.discord.com/channels/1116389027176787968/1224362333208444989 there's something in here iirc
yep, can i see?
there have been multiple attempts at this in this server, just need to hunt around for it
problem is the cards don't actually have a consistent palette
the loc_vars and the localization file
anyone who's actually good at. pixel art want to help with jimbo or do i need to keep making dogshit 😭
i'm trying an
man*
i hate this so much though that i'm like about to delete it
:(((
What exactly is G.GAME.probabilities.normal/self.ability.extra doing? I get the G.GAME.probabilities.normal part, but whats the /self.ability.extra part for?
probabilities, eg Space Joker, Reserved Parking
figured out what the bug was
i was calling SMODS.create card
but i never specified a ton of things
like the literal area
which made the cards very jank
oh that makes sense
nvm I wasn't paying attention
the loc file isn't set up right
needs to be { descriptions = { Other = { ... } } }
what is the base game weighting for spectral packs?
do they even have a weight?
or are they simply rarer by virtue of there being less versions of them
Stars?
Each spectral pack (other than mega) has a weight of 0.3. Mega is 0.07
You can find this in the declaration of booster packs in Game:init_item_prototypes
okie dokie
xd it's not the first star suit we have
suits were actually the first thing I dabbled with in modding this game when it first released, that sure was something
smeared still has some problems with modded suits because we've just kind of collectively ignored it, but that's the tip of the iceberg
Lovely wasn't introduced until later so imagine having to hook every function to make them work.
Any of you like to spin the wheel with the Wheel or Fortune tarot cards? Heres a joker like that. Are the benefits it gives too much or are they just right? (Its a 1/4, but i have a Oops! All 6 joker)
Contribute to Aurelius7309/SixSuits development by creating an account on GitHub.
this is what it looked like
needless to say that was completely unmaintainable and has seen at least 3 full refactors to get to the current state of the API
#1#
you can use loc_vars and return a table as { vars = {} } and in the description have variables as #1#, #2#, and so on
change the text to be like #1# in #2# and #1# in #3# chance, then add the variables as vars (i think? might be specific_vars) to the info_queue table
lemme check the impl on that
it's specific_vars, i don't remember why
so like
info_queue[#info_queue+1] = {
set = 'Other',
key = 'stars_jack',
specific_vars = { G.GAME.probabilities.normal, 10, 5 }
}
or wherever you're storing these as config values instead of hardcoding them
Can you add them into the card?
that's fine, you don't really want to store it on the front
are there any existing mods that add a new page in the shop menu? had a mod idea but it needs a new UI to work
have fun
:eyes:
How did you make your own playing card art?
Wdym?
That's an enhancement
Btw I make my art in paintdotnet and aseprite
No, the different colored diamond cards (the symbols) and the jack.
me when deck skins
Anyways, looking further into rank/suit implementation there's definitely some improvements I can think of so you can make ranks and suits more modifiable.
yeah for sure
of course you wouldn't, the whole suit API thing exists because of me
xd
oh that? It's a deck skin
I haven't uploaded it
wait there's a mod that acts like "what mod is this from?" awesome
it's just steamodded doing this
that's so cool.
ty
I need this on a t-shirt
lmao
is that a no to the bugfix or a no to the bug's existence /gen
Bugs existence
there was no bug
the bug is the friends we made along the way
We were talking about it here when aure closed it
Aure fixed the bug with his no
So true
anyhow it's getting late
maybe we get some more progress in on docs tmrw
when all is documented, we should be more than ready for beta
for still missing we have
- Sticker
- Seal
- Challenge
- DeckSkin
- something for per-mod functions
I'm sure I missed something, feel free to spam ping the hell out of me or something idk
(one ping's enough, i check them all)
That reminds me I need to revisit the SMODS beta suggestions doc I made for documenting stuff to add.
should i add pills like isaac
like a whole new consumable system with seeded values for what they do and then also phd
why is it every time i think of something for my mod it's "should i do something that will cost 2 fucking painkillers for my head"
oh right achievements also lack docs
or did you make these too and i just forgot about adding them?
- Art for Pinned (LocalThunk please make Pinned sprite)
was there actually a decision made on whether this should be done by steamodded or not?
k added
I don't believe so no. I mostly marked it because 1: not everything in here has actually been discussed (and that's fine, it is a suggestion board after all) and 2: it would pose issues with the moving sticker sprites addition.
I remember it being brought up at some point (the possibility of using Cryptid's art as temp)
yeah i remember that too
I can't figure out how to get joker to recognize custom hand
yeah I remember it being brought up too, I just didn't remember whether any final decision on it was made 😅
btw... https://github.com/Steamopollys/Steamodded/issues/120 old af issue that's never had anything done about it (i can't)
https://docs.github.com/en/discussions/quickstart I think steamodded would benefit from having a forum for those that don't use discord.
"I can't"? do we need steamo?
Not sure on discussion since idk what it is but Github Projects would be fire.
I hope my hand doesnt contain an ERROR
Problem is that i don't want ERROR, i want it to be the hand
projects I might be able to add, but discussions needs to be enabled by the repo owner
you might need an entry in the localization file to be able to localize it?
what if i have it localized in loc_txt already
that doesn't sound like a localization file to me
localize('prefix_test', 'poker_hands')?
loc_txt vs loc file doesn't matter here
card.ability.type, duh
that could work
ok this worked
now i gotta test if the joker works with hand
wait, SMODS.PokerHand automatically puts stuff in the localization table? 🤔
all loc_txt does
I'd hate to have a test in my hand 😔
change test to testy
nah
where does the game shuffle cards using pseudorandom?
this is why i pretend other languages don't exist
Okay, now that stuff is working, no more previews on that
what in gods name am i looking at
gamblecraft?? 🤑
A UI
can you help?
if i were to get into modding i'd probably have too many ideas and i'd make multiple mods
i've found that most my ideas are far too overengineered and a pain to implement
ah.
balatro is so simple that less is more most of the time
very few people want to play with a joker that comes with an essay of a description
me as fuck
but even then
even with the overengineering
i still make them easy to understand
...
somehow
worst one is when you implement something that sounds cool in your head and you play it and you go "god damn it this is boring"
hasn't happened to me yet
maybe i've just got some really stupid ideas rattling about in here lol
me whjen i remember. remember this is official isaac balatro art that i can totally use as a base for a joker
very real
polyphemus?
If you want to have your ideas in a mod then suggest stuff in the Cryptid Suggestions Log https://docs.google.com/document/d/1AyXwy49X0XaJxidAGO_KCeTgURd-caMN_454BSYMxMQ/edit?pli=1&tab=t.8qjnysvpwzj2 - totaly not sponsored
Cryptid Suggestions Log Discord Link Cryptid banner art by lolxddj on discord Screeners:Squiddy (discord tag: squiddytl) Math (discord tag: mathisfun_)Jevonn (discord tag: jevonnissocoolman)Mystic (discord tag: mysticmisclick)Tremble (discord tag: tremble4601) playerrWon (discord tag: p...
gang does this look like a dumpster i dont even know 😭
surprisingly not ass i just need to finish the idea i had for this one
the polyphemus one i mean
i was basing the cards on the four souls cards lol
WHY NO WORK
you havent explained what the problem is how is anyone supposed to help you lol?
its sposed to have one of the einfo things
like a second area just for the explanation?
to show req
like the tooltip
oh to show whats required to craft it
yeash
GGGGG FUELLLLLLLLL
i dont know enough about this specific topic to give you a proper answer but i found a mod that does something similar enough to what your trying to do right now to help you. https://github.com/GauntletGames-2086/D6-Jokers/blob/main/D6 Joker Mod File.lua the code is on line 55
from what i see the main immediate difference between that code and yours is that you are returning the tooltip from inside the locvar while this one doesnt.
Bigger issue is that Crafts do not have loc_vars as a usable function.
So unless there was code added that hasn't been pushed to main the loc_vars function inside the craft will never be called in the first place.
when colors are used in the name of a joker and that joker gives cashout money the name that appears in cashout summary includes the color declaration (this thing{C:RED} idk what it's actually called)
is there any way to remove the color declaration from the cashout return message while keeping the color in the joker name
That's due to them not using the localize function iirc
oh
i guess i should do localisation
alright how do I do localisation in a separate lua file
ive put this off long enough
this is crashing with attempt to index field 'other_card' (a nil value) instead of destroying 1 in 7 non-7s
i'm guessing i'm acquiring the id incorrectly? looking at sixth sense and trading card got me this far but neither of them do exactly what i'm trying to do...
if context.destroying_card and context.other_card:get_id() ~= 7 and pseudorandom('eaten') < G.GAME.probabilities.normal/card.ability.extra.odds then
return {
message = "Drowned!",
colour = G.C.RED,
delay = 0.45,
remove = true,
card = card
}
end
remove all of your other mods, add either dump_loc = true to your json or ---DUMP_LOCALIZATION to your header
a localization file will be generated, rename it to default.lua or en-us.lua
uhhhh
if i remove the dependency marker the mod will crash on boot because i directly access a table made by fusionjokers
you can probably manually remove the fusion stuff from the dump
Enchantment table ahh
do i need to do anything (other than removing loc_txt) to make the localisations work
Morning chat
So that's why balatro is pegi 18
oh
context.other_card works during context.individual and refers to the currently scored card iirc
but if you're destroying a card i'd recommend doing it either before or after the hand is played because if you destroy it during the hand it looks kinda jank
in which case you can do for index,value in ipairs(G.play.cards) do
and value will be the variable that you use to refer to the card in this case
right, after the hand makes most sense
my previous efforts failed to destroy the card at all, so i'm not sure i actually know how to do that part
this is so peak
Well it's kinda working
bSZiHP
how would I do that
i mean i've used the function before but idk how to do it with a joker name
eh, colors aren't needed
just put the loc file in localization/default.lua and youll be good
i did that indeed and it missed one joker but i fixed it
everything works as before but now with separate localization that's nice
maybe i should do jokerdisplay too while i'm here
Should i make the randomization of letters longer than 6 characters long or nah?
also maybe i should figure out what's wrong
oh oh i know this one
you set an entire table as a loc_vars value so it won't print properly
so i should should just randomize the letters individually like i had before
whatever method works for you
if you wanna print an entire table though
balatro has a tprint function
print(tprint(tablename)) iirc
so with this...
local ChosenLetters = {}
for i = 1, 7 do
ChosenLetters[i] = pseudorandom_element(LetterChoice, pseudoseed('TarotNotFound'))
end
tablename is ChosenLetters?
i think you need to concatenate the table manually for this
is that the right word? whatever that funny word is
add together the strings
uh... not the print i want
in python you can do that super easily by just adding string variables like you'd add integers "string1" + "string2" for example
idk if it's that easy in lua
okay the string concatenation operator is .. so
value = table[1] .. table[2] .. table[3] .. table[4]
something like this
should work
table.concat
I did a little research
table.concat(ChosenLetters, "") should do the trick
yeah that sounds close enough
that looks
correct?
gyBzsYo
yup
alright nice
why are you always so talented
and I can change it to however long i want
your stuff is gas lmao
me?
yes
idk
I get a lot of help from you all tbh
Trust me, if I did Ortalab as my solo project, we wouldn't even be close to Demo 1
NGL, biggest mistake of my life was not using Lovely earlier for stuff
not a big deal :-)
Just realized I'm using 7 characters, probably should bump that up to at least 8
ugh what the fuck why aren't the challenges challenging
this functions mostly as intended, but the cards get destroyed before scoring animations play? does context.after not mean what i think it means
if context.after then
for index,thecard in ipairs(G.play.cards) do
if thecard:get_id() ~= 7 and pseudorandom('eaten') < G.GAME.probabilities.normal/card.ability.extra.odds then
thecard:start_dissolve()
return {
message = localize('k_drowned_ex'),
colour = G.C.RED,
}
end
end
end
... and the message is in the wrong place too lol
i think i just want card=card for that one
couldnt tell you
context.after is indeed after the hand is scored but
yeah ive had no luck destroying cards
the one time I tried to make a joker selectively destroy cards in hand it just
the fun part is the card still scores even though it's not there anymore, lel
quick rundown on destroying cards
if you use context.before, joker_main, or after, it will create a ghost copy of the card
oh
instead of context.other_card:get_id(), use context.destroying_card:get_id()
and your return should just be true
what
taken from my code,
if context.destroying_card and not context.blueprint and not context.destroying_card.ability.eternal then
return true
end
(which destroys every non-eternal cards)
wtf, how did i get a SOUL before the tarot card i made?
it destroys after hand is scored
according to steamodded's joker calculation guide, after deck effects and before context.after
oop
^
i get this all the time its great
- Card Destruction Stage
Self-explanatory.
i guess!
just getting godlike luck
when testing for stuff
I got a black hole and soul in the same pack when testing my spectral
i'm so fucking confused why this patch removes challenge names
Soul: 2 (Perkeo, Chicot)
Error Tarot: 1
moment
better question: How'd you get a custom font
mmmmmm not a fan
it could use an animated sprite that cycles through the sprites of other tarot cards (excluding top and bottom borders)
nah, i don't wanna animate it
well damn
imo, an animated sprite is out of place outside of blinds
or other items that use it
but you just said it's supposed to be out of place
yes, i know
and if it's not supposed to exist it makes "lore-wise" sense it'd use parts of sprites from other tarot cards
I got an idea, don't worry
I'm gonna do something random
and by that i mean, grab all the pixels from the inside sprite of the tarots and randomize them
oooh
sure, it'll be a jumbled up mess but eh, it makes sense
or i can do a 4 color channel of random pixels and then assign a color to each
make the card 3 tarot cards at once sounds fun
or even do something fancier since I have no idea what you mean by that 4th color channel
how do we make it do a message over the destroyed card? is that a thing we can do
it looks out of place, but not the right kind of out of place, y'know? it doesn't look like a tarot card that shouldn't exist, it looks like a thing which isn't a tarot card at all
that's much more like it
I basically pulled a pokemon
how they assigned 4 colors of white, light gray, dark gray, and black using two sets of black and white then assigned the four states a color
yeah i did that with some random bitmap generators and then assigned the colors to make a missingno essentially
can you write ballsack in the galactic alphabet in the nameplate to troll people who translate it
lol no
aww
but yeah, I followed this section of the video
How does MissingNo. end up looking like the way it does? And how exactly are Pokémon sprites displayed on the screen? It's all explained right here.
LINKS
Twitter (updates): https://twitter.com/RetroGameMechEx
Patreon (support): https://www.patreon.com/rgmechex
Discord (discussion): http://discord.rgmechex.com
PATRONS
Thank you to all of ...
In this case, I generate 2 bit planes the size of the inside tarot and then put the higher layer to 75% to get the same effect as the gameboy would for its decompression and merging of bitmaps
I then used the 4 colors usually used in tarot cards and assigned them to each combination
Yipee
is there a way to add every joker in the game to the joker spot as all negatives and eternal?
Manually and painfully yes
Auto idk
Make a mod for it lul
fym
this would be so easy???
ohhh
wait EVERY single joker
still would be easy
But long and painful
Oh with a code I said its okay
I mean if jokers have a number attached to it just increase it by one spawn make negative repeat right
nevermind i'm too lazy
apparently
apologies
😭
i'm
eep
it is 12:29pm
am*
How do I make it when you open a pack it draws cards, like how it does in a tarot pack
for k, v in pairs(G.P_CENTERS) do
if v.set == "Joker" then
local ccard = create_card('Joker', G.jokers, nil, nil, true, nil, k)
ccard:add_to_deck()
G.jokers:emplace(ccard)
ccard:set_edition({negative = true}, true, true)
ccard.ability.eternal = true
end
end
...can I specify a set of items that can be spawned in a booster pack? A bit scared to see or do how the Meme ones does it.
yes
How so, then, do I define a custom pool for the Booster Pack to choose from?
you can define a create_card method on your booster that chooses what card to generate
...ah, so that's what the forced_key argument could be used? I'd pass the custom Joker "key" to it?
How would you implement individual card offset? 🤔
right now I tried a couple of ways - setting card.y value makes the card appear offset only on hover, this on screenshot I made using card:hard_set_T() but it can't decide whether it want to respect cardarea's alignment or mine, resulting in flickering and tilt
maybe it's flickering because the game updates area's T every frame with CardArea:align_cards or something like that
if you want to override vanilla alignment you have to patch into that function and handle position there
kinda like what I did with cartomancer for zoom into jokers area
yeah figured out this would be the case and doing the injection here now - the result is far better, yet getting some unexpected offset when dragging the cards that have my offset
that already happens, but it still does the weird offset
when removing the condition the weird offset is even worse
can't help without seeing the code
If I check for drag:
The card assumes that I took the card from its the usual position, it teleports to the top row (and starts moving as if I picked the card from the top row)
If I don't:
The card moves below the screen
yeah you have to patch the main G.hand align then
because your code runs before the vanilla align
no, it is set to trigger after
frim the cardarea.lua - vanilla code
my part
(I know that the check isn't consistent with the vanilla code, but for now I'm testing grounds)
ah your check is in cardarea:draw
not align_cards
actually I'm a bit confused why that'd happen
but it should still be in align_cards
if weird snap still happens then I'd try integrating your custom align in this
no it is in align
I'll record a gif, one sec
it is in align_cards(), not in draw(), and it happens after the default hand align, so I'm not sure what's going on
hmm, I think I know
the cardarea itself is still in the center, inbetween those rows
so the cards aligned upon the cardarea itself when I did the offset of clubs
oh I see, I was looking at the wrong .view_deck check
I did this to check
altough I don't think this should happen either?
What I want to accomplish is "fake" separated cardareas that are essentially one cardarea with cards that are offset based on certain rules
so cards that are separated visually, but actually in the same cardarea
what if you just move the cardarea really fast to make the illusion of two cardareas
that sounds like a solution for NES sprites lol
Interlaced Balatro.
is that brief pause after the first 2 jokers supposed to be like that?
first 2 are in context.individual, last 2 are in context.joker_main
it's barely noticeable on a game speed faster than Tortoise Mode™️ but it makes sense that there's a small delay here yeah
thanks, I just notice the small stuff
you couldnt notice the small pause menu apparently
there's so many buttons
this pause menu is not okay
why do you even need a fold button???? doesn't that just end the run why would you want that
trance needs to move out already
It's a bunch of mods in the vanilla+ version of Dimserene's modpack, I don't need most of them xD
Trance makes the background colors pretty tho
😳
how is this vanilla+ what
i'd expect this from the full modpack
if this is vanilla+ what the fuck is full like
it doesn't add new content
.
so you
modded the game for what exactly
isn't the content like the main draw of it
Qol and appearances
I feel like adding my own content for now
read my books
Yeah vanilla plus is meant to be added upon
well that makes more sense but
when i hear vanilla+ i imagine
vanilla style mods
with vanilla esque jokers and stuff
the name feels a bit misleading that might just be me
I don't know where's the line to draw between vanilla-esque and not
that's fair
although i feel like it'd be much clearer if it was named "non-content pack" or "quality of life pack"
🤪
me when i have too many cards in uno and i can't hold them all at once
true
That looks so cursed to me
because it is
you made a modpack with 140 mods in it you should be like
a war vet for this stuff
thousand yard blind type shit
Pardon?
i made remove Customize Deck from options during a run because i like my shit non-cluttered
surely just copy the code used for raising highlighted cards
oh wait nvm you figured it out
gg
looks good tbh

this works surprisingly well! although I do it manually for now for each suit
that's all the code
oh look, this doesn't have outdated information anymore https://github.com/Steamopollys/Steamodded/wiki/API-Documentation#common-parameters
A Balatro ModLoader. Contribute to Steamopollys/Steamodded development by creating an account on GitHub.
(also no_collection added)
How do I add that?
YAYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
I CAN FINALLY HIDE SPOILERS FROM MY MOD
i still have in the blind config when i made the pr 🥹
guys what to do I accidentally washed my cards in the wrong mode and they shrunk 😭
this is why you don't wash your cards, you should shuffle them instead
...now to figure out singletons and Showman.
How can I get which SMODS.OPENED_BOOSTER is opened? I tried retrieving .set, .key and .name, and all of them were seemingly nil
EDIT: Got it, SMODS.OPENED_BOOSTER.config.center.key
So uhh yesterday I started looking into modding balatro and I ran a few tests to make something interesting. I ended up making an imo cool joker. Can I share it here?
ofc ofc, feel free to share
ofc
Thinking of just adding Gambling to Balatro now because of the 18+ rating
meowning everynyan, does anyone have an answer to this?
Thanks, btw the card is just a little bit... maybe touches a lil sensitive topic so I'm not sure if that would be a problem
you could put a spoiler on it and a trigger warning if you feel its necessary
trigger warning?
meowning
you can prolly do a card_eval_status_text
idk you said it was a sensitive topic so i assumed you would want to warn people of it before they took the spoiler off but as long as it doesnt break the rules of the server you can just post it no problem
ah yes yes
beware, kinda sensitive topic.
probably i will rename it, it sounds like a boss blind
if there's any problem i will delete just in case
No Laughing Matter moment
a bit touchy but that should be fine
Voucher:
3 Card Monte
You may bet $1 for a SET 1 in 10 chance of $5
You may bet $5 for a SET 1 in 20 chance for $30
BlackJack
You may bet $10 for a set 1 in 30 chance of $60
You may bet $20 for a set 1 in 50 chance at $175
Thinking this would be funny
honestly neat idea, i like it
thx!
np np
Might be overthinking how to have a card appear only once in a booster pack if w/o Showman...
this is still not fixed 😔
the key has to be the same as the path
i think
2 ways
debug+ watch shader
the reason i dont recommend shadertoy is because some stuff is different
for example uv.y is flipped in baalatro for some reason
Mods\modname\assets\shaders\shadername.fs iirc
nope its the other slash
Mods/modname/assets/shaders/shadername.fs
truth
ok i have a bone to pick
why does the watch path use a different slash
its so annoying
/ is generally more reliable anyways
afaik it works everywhere on windows?
i just want to copy from windows
this is in file explorer
how do i make a consumable config change when a boolean changes
\ and / both can be used in the Run dialog.
yea but its harder to copy directly from the file explorer
unless there is an opion
whoops lemme change that 💀
thanks!
wait what's wrong exactly
the key needs to match the shader name in the shader file, not the path from what i can gather
what if i just say they should all match?
- The shader's
key, file name (without extension) and the shader name used in the GLSL file must be identical.
awesome
it should be F# file no?
no
the file extension being .fs does not make it F#
in fact it stands for 'fragment shader'
lmao
ok updated
💀 ...yeah, I can't really figure out singletons with a custom "pool".
singletons?
can't you use an ObjectType for that?
...in the same way Cryptid's Meme packs?
cursed or awesome?
yup
... both?
fragCooed -> texture_coords
iResolution.xy -> image_details iirc
feels like the Set game
that would be a cool minigame honestly
its probably not image details then
try texture_details.xy, and if that doesnt work, texture_details.zw
I actually considered doing set as a challange thing, and will do at some point
do you have an iTime anywhere?
its shadername.y
idk
try image_details.ba
ok its not that...
can you send the file?
you did it?
Awesome! one problem
the shader goes over the joker
its all up to your prefrence though
ok awesome
your welcxome
ok now im going to do perthro
where is the isaac guy
i said PERTHRO!!!
perthro is simple, rerolls everything in shop
like voucher, booster packs and jokers
when do you want the shader to show?
'nother page down
A Balatro ModLoader. Contribute to Steamopollys/Steamodded development by creating an account on GitHub.
the way id do it is create an edition that has the shader that doesnt do anything
and all the cards of that suit have the edition
i heard this about overlapping enhancements but bleh
there's no Card:draw api function for suits (or anything besides editions really, iirc), so I'd lovely patch Card:draw()
that's a terrible idea for one reason only
cards can only have one edition
these draw methods should defo be added at some point
update is the wrong function here
but I'll add the Card.draw methods rn
@frosty dock The suggestion did work... but what of the Showman restriction?
create_card takes care of that normally
i don't see why that wouldn't be the case here
Did u make it so that only your jokers appear
Also that looks sick
Love the art
Yes and thank you... even though it's more of an "original edit" of stuff, save for the Windows jokers that use front box art w/o much edit beyond resizing and feathering.
The background colors I didn't define at all, that's what the game defaulted to.
check throwback code
draw function added, you can now have something like this in your suit
draw = function(self, card, layer)
card.children.center:draw_shader('your_shader', nil, card.ARGS.send_to_shader)
card.children.front:draw_shader('your_shader', nil, card.ARGS.send_to_shader)
end
how do i reroll the shop
G.FUNCS.reroll_shop()
THESE LOOK GREAT
Thank ye.
how does the game calculate what card to draw next using the seed
has anyone made a jonkler card yet
like a joker card?
does task manager allow you to delete cards and why is iron wall called iron will
The jonkler
i could do it in like 5 seconds
but it would take me a minute to give it a interesting ability
if you told me to make a joker it would take me a day to make the art and a month to make the ability
...that could potentially be added as an ability, but it gives XMult depending on average of your hands and discards.
turns all played cards to jonkler cards, jonkler cards are played like how joker cards would be for normal games.
dawg you better make a clippy card
...and then BonziBuddy? 😛
joker cards can only be 95 to 71 pixels iirc so if you really want me or anyone else to make a jonkler joker then youd need to change the size drastically
that’s the idea
big joker
just. comedically downsize the image to be bitcrusbed
ngl it would be pretty funny to change the Joker text on the left and right of most jokers to Jonkler
tysm im definitely going to click on this link
why don't you ping them instead of just shouting lol
He must be executed
<@&1133519078540185692>
OH YEAH <@&1133519078540185692>
🔫
order 66 has been executed
Gg
192.168.0.1 🤖
leaking it to everyone unless you send me $50 of amazon gift cards
127.0.0.1
0.0.0.0 🃏
you already leaked it?
19j.imb.o.2
uhhh this is a special secret chat where only you can read it that's why it had a dark background
i have a vpn so even if i did click on that stupid link it wouldnt have stolen my ip
That is a valid domain btw
jokes on you 12345.8.69.420
got your ip address
damn
your vpn SUCKS.
No way that's also my ip
never click any links they will steal all your steam games
Especially don't click https://shorty.stealsyour.info
My website for my stuff.
thats the stupidest domain name i love it
if you hover over a link it tells you where it redirects you to
https://www.patreon.com/Asmrbeforesleep
A small donation will help to get me a camera and make videos, with your help i will make lots of videos. I hope you like it
but they just bulk added a bunch of formatting stuff like this
they can be different sizes but it tends to not play nice with stickers and stuff
Its handy
i've found 95x71 is a huge amount of pixels to play with
Random question: What function makes you win/lose the game?
Or duplication.
Make a 32x68381923 joker
the integer limit
Fr?
yeah im so good that the only way i can loose is if the game forces me to
win_game() for winning
that looks terrible
For good reason
Joker art can be very nice looking
im not trying to make good cards im trying to make funny cards
make it like big m
can you scale it a little better instead of just forcing it to fit the 95-71 pixels
how do i change global blind size base whatever
i forgot the var name but check Plasma Deck
a card can be funny without it being shittily formatted, the fact its literally jonkler should be all the punchline neccessary
can you tell me where you got the joker blank template
in this server
from the joker
steammodded has joker examples
i love hi
doesnt have a blank joker png there
and rekoJ
have you deep fried one yet
thank you for this wonderful suggestion.
have you added any effects or are you just playing around with the art
im just playing around with art
Rekoj could screw around with the scoring or something, have it go from right to left or something
or jokers first instead of cards
FKJSDHFKSDJF
would be a pain in the ass to program mind you
J
the j
J
What is the Joker Font?
The J
what does this do?
nothing i just made it because it's funny
can someone tell me what the joker font is
Joker
i don think they have a specific font
custom font