#💻・modding-dev
1 messages · Page 181 of 1
Yeah that should work
update: i changed it to start with 2.50 xMult and removed the natural decay and now you get an average of 30k chips when scoring a flush of the chosen suit; i think it may need to be debuffed again
what am i not seein' here?
how would I get the name of a joker? I'm trying to make a joker that takes the joker to the left of it and gives mult for each letter in the joker's name
I honestly wouldn't recommend making something like this, because then if you're going to later localize your mod, the other Joker's name might be way shorter or way longer and make this new Joker better or worse
But if you want to do so anyway, maybe try localize{type = 'name_text', set = 'Back', key = [OTHER_JOKER_KEY]}
(replace [OTHER_JOKER_KEY] with some method of retrieving the other Joker's key)
i'm still trying to figure this out, but no dice?
Does anyone here know how the second input of play_sound works?
Like, I know it's pitch, but what number do I put there to shift it from F to G?
how do i get the game assets?
im trying to get the high contrast / non high contrast sprites of the playing cards
Open Balatro.exe as an archive with 7-zip, winzip, winrar or similar
Then look in resources/textures/1x or 2x
Regular card sprites are 8BitDeck.png, high contrast is 8BitDeck_opt2.png
what the hell is that
hit the toad
bump
if it helps, the base pitch of a sound is 1
i'd wager that it works logarithmically? so 2 is 1 octave above, 4 is 2 octaves, 0.5 is 1 octave below?
you'd have to calculate the ratio yourself though
how can I stop this calculate from destroying all face cards in the played hand? I just want it to destroy the last one played
I had it working without destroy context but that's apparently prone to making ghost cards, but I'm not quite sure how destroy context works
Change if lastfacecard to if lastfacecard == context.other_card
The context is called once for each scored card
And the return of destroying_card is not doing anything, only remove = true does
you could also probably simplify the check like this
if context.destroying_card == context.scoring_hand[#context.scoring_hand] then
return true
end
end```
hmm, now it doesn't destroy any of them
ahh
Destroys the last card, not the last face card
okay thank you, that works!
However removing blueprint from the equation is a good idea
this does not look "simpler"
Just so that it doesn't also ramp blueprint (this won't do anything as blueprint doesn't return its chips, mult, and Xmult, but still would look weird)
missed that mb
oh wait it would be adding mult to blueprint, I see
for cases like this would blueprint copying it just return the xmult of what the original is returning
I'm not 100% sure how copying jokers work under the hood
isn't all blueprint does is just call the calculate again but with context.blueprint?
Currently it would copy the entire calculate function, so copying both the Xmult of joker_main, and the destroying in destroy_card
pretty much
ah so anything I don't want to happen to the blueprint I just specify with not context.blueprint
So you just need to add and not context.blueprint to the second one to avoid weird stuff, and it will just copy the Xmult
i like just putting if context.blueprint then return end at the top if blueprint is unsupported
or wathever it is not at my balatro gaming device
Since SMODS follows OOP principles much more closely than regular Balatro, this is also an option, yes

here we are
The irony is that the calculate function, while messy and only really possible because of how lax Lua is, is not a bad idea on its own
The massive 500 lines if else is
will probably rebalance the mult values, it might be a bit op right now
I think it's fine
It ramps twice as slow as Canio and requires you scoring the cards (so you can't burst out mult with Hanged Man or Immolate)
it's really funny looking at the source code of balatro and having that initial reaction of "oh god what the fuck" but then going "actually, this sorta does make sense in a weird way"
true, yeah
And has the same issue of "at some point you don't have face cards anymore"
originally it was literally just mini canio but I wanted something more unique
I do like it
Thematic and a good buildaround
Probably would consider it over something like Hologram or Constellation
Also small nitpick: Xmult jokers generally don't do anything when they're at x1
So a small check that the Xmult is above 1 in the joker_main would be nice
Yeah it's supposed to not be confusing to see the Xmult animation but nothing happens
I love that art, well done
Modding the game has given me more knowledge about how it works than I would have ever wanted lmao
So many things that could have been factorized into helper functions...
Shhhhhhhh
thank you, it was fun to make
i have an idea for a joker
fun fact, the four digits at the end of the phone number spell out joke (or, well, they're meant to)
It was a practice project give thunk some slack
I love how there is only 1 comment about weird bullshit and it’s about love.timer.getTime()
Where's Waldo but as a joker, and when you have it, it randomly chooses one card in your deck and turns it into SOMETHING, and if it is played, big gains
That's great lmao
code it like a seal and have like 4 pixels on the card
It's prime real estate 😭
Oh definitely, me saying bad stuff about the code is in no way related to Localthunk themself. I've written way worse code when starting out
And I assume programming is not their career
this is so true
undertale can relate
(Ironically I also started out programming by making LÖVE games after seeing Move or Die used it, and yeah my code wasn't much better)
if it works it works and you should never touch it again so you don't break it 
I could not imagine using lua for a game myself though
<--- is speaking from experience 
like hard coding the number of boosters in the shop sigh
I could with the intellisense afforded by the VSCode extensions. Once you have touched autocompletion from more strongly typed languages you can't really go back
For all we know, a ton of this stuff gets polished with the gameplay update
That might just be wishful thinking tho
If so, that's nice because cleaning, and not nice because SMODS would most likely go down for a bit because of all the changes
Yeah lovely won't
it'd be a hell of a week or so
indirectly, if syntax changes a lot of patches would need to be updated
I fear that moment
Yeah, that's what I meant by SMODS
Lovely itself should still work (in fact I'm surprised it's so explicitly tied to Balatro, it should work with literally anything made in Lua)
🙏🏽
Show code?
wouldve been nice with the line numbers
thats weird, did you declare card.ability.extra.vol_mod in configs and loc_vars?
yeah, just declaring variables in loc_vars wont add them to card.ability.extra, i think
Ah crap, I forgot it should be in config.extra, not loc_vars
Yep lol
And loc_vars probably should return card.ability.extra.mod and card.ability.extra.vol_mod
Assuming they’re used in the description
yup
but im pretty sure they just got config mixed up with loc_vars
oh also
whats the joker in cryptid with a spinning ball?
i forgot its name
Jimball
Kimball
Limball

thanks guys
also ngl beeps, your name wouldve been really similar to me if i removed the Fever part lol
Jumball taught me joker animation lol
im gonna see what i can learn from jimball and try to code an api for animated sprites
I should look into animated or at least sprite replacement for my timeout joker
Same Error
Before anyone ask, I did hit Ctrl+S
Maybe that's it
Probably
did you make a new run before testing again?
Yep, the card doesn't have the ability configured correctly
A new run is not necessary, just a new copy of the joker
No I didn't, which must have been the issue.
since im pretty sure existing jokers dont add new variables in their .extra.ability when you change them in code
They do not
Config is copied into ability upon creation
Worth noting that using xmult = … does this check automatically iirc
Making a custom challenge for testing has been the best thing I’ve ever done
Making custom challenges in general is just fun
Right, they weren't using SMODS functionality
I just put out 2 more for my mod today
This is true
I recommend installing DebugPlus
I have it but testing stuff with multiple jokers is annoying
Allows you to spawn jokers and consumables among a lot of other cool stuff
Fair
There's also TooManyJokers
I wish you could pin jokers with tmj
What would that be for?
ah, so this is how they animate their sprites
Indeed
Ahhh just in update that’s not too bad
so that they would be the first ones to show up when you click T, useful when you keep restarting
Yeah it’s not (luckily)
You don’t use save states?
Someone needs to figure out how to get the animatedsprites built in to work on things other than blinds
In debugplus ye
UI is my passion
Beeps you keep saying the exact same stuff I’m tryna say but mobile keyboard makes me SLOW 
there are situations where save states cant be used
just a small thing
wow that description is pretty long
I’m on mobile too so, skill issue
but i am in no position whatsoever to comment on that 😭

Only when you change the config but then you can just respawn the joker easily and resave the state

It's just a really good description smh
So quitting gives you almost a full salary? Sign me up
what language are balatro shaders made in?
F# iirc
Navigating collection each time is pain
Making someone play Papers Please through a fkn joker is absolutely diabolical
i mean, only 2 regulations are not that bad
Ok I’m adding a joker to my todo list that gives you mult or smth but if you deselect a card it’ll cost you $1 or smth
you should make it so new regulations are added for each ante passed, alongside more rewards and penalty
❤️
It’s not but the way it’s worded makes is seem like it rotates frequently
You just Tmj and type the joker in?
Can’t wait to have to play papers please, cookie clicker, candy crush and solitaire during my hands for optimal scoring
again, 2 regulations are not so bad when you can just dart your eyes over both of those zones, and you can completely ignore other fields
paper please is worse because theres deadass a handbook with 10+ regulations to take note of
The regulations change after each boss blind, but if I try and add more, 10 years will be taken off my life
yeah, what I mean is that it would be a convenient addition altho I can do without it
nah but hear me out
a joker which has BALATRO installed
beat balatro in there for xmult
balatro squared
Don’t you dare make a fractal 😭
But with one button controls, somehow
arrow keys to navigate between uis, Z to interact
❤️
The alternate: a run with your current seed +1 that sends half its score over to your current run and self destructs if it dies
Toy Freddy from UCN 😭
So this is what happens at 5 AM in dev chat huh 
Oh you could make a security guard joker huh fuck
Security guard joker, but you need to move it to the left and right ends of the Joker area to close the doors
nah but imagine playing fnaf in balatro 😭
That’s how you move the screen left and right to see the doors
What if no jokers to allow that movement?
No 6am for you
L
It adds a desk fan Joker that does nothing except allow repositioning
Lmao perfect
NO PLEASE I’M SO CLOSE

im calling forth power outage on your ass
Lowkey please I need sleep
2 days ago i stayed up late until 5 am when i had school at 6 lol
then sleep
If only it were that simple
Oh god the angel and devil on my shoulders rn
$6 shimp special
it's as shrimple as that
that sounds unhealthy
I’m a college student this is normal I swear
it’s not normal
this is the time my alarm goes off when i have to get up to raid in d2 / ffxiv ☠️

whats d2
destiny 2
Destiny
i see
or a coin, i suppose
what is it thats keeping you up lol
My horrendous sleep schedule over the weekend (and also the fact I got up at 4 cuz there were unsolved bug reports that were tormenting my brain)
Precisely
mhm, thanks
better commit messages than i ever write
istg among the normal gifs i have an absolutely diabolical one which i accidentally sent before 😭
Fr
it may sound cheesy but your health is more important than the mod, close your eyes and sleep 😴
sometimes
wish theres a way to reorder my favorite gifs bruv
(im not refavoriting everything)
actually, i shouldve spoilered that
i wish favorite gifs were not a underbaked afterthoughts
the gifs u send r the literal manifestation of your thoughts
Any idea in which context I should put my code so that the rank change is taken into account in the scoring?
✍️ 🔥
Bruv I know that and I’ve definitely been trying 😭
watch a cryptid gameplay vid
I already watched Roffle’s no legendary naneinf 😭
damn
study for college
-# (youre bound to get bored)
It’s the events that’s messing with it since those technically fire off after scoring
off topic but never before have I seen someone play Balatro PC with a controller
accidentally peeled off those black stuff which form on top of your wounds
💀
damn its bleeding
“I broke it more!” LMAO felt
Bruise Crust
+1 Mult (increases every round), -20 Mult if you peel it off
😭 thats wild
new Mistigris joker dropped
but what if it was a seal instead
i think they should destroy themselves after a certain number of round though
Calling a scab “bruise crust” is foul
seal has a 1 in 4 chance to fall off
since those crusts r gone after a while I THINK
from experience, you should change the rank first before the event, and then you change the visuals when the cards are flipped
because i never left them intact for that long 😭
would you prefer I say "crusty musty bruisy woozy"
krispy crust
Blegh
Could someone please tell me where I can find .lua files on Steam Mac version? Cuz I don't see it inside Balatro.exe, even through search
i am so sorry
(he was, indeed, not sorry)
(hands you this)
i kinda wanna take a try at a fnaf joker now ffs
Why is there an eternal sticker on the card sprite 😭
do it
forever noob 🗣️
its Sob from Cryptid
i photoshopped the eternal sticker on
it gives you obelisks <3
Ah
+1 mult for every blind skipped
me when i steal peoples abandoned projects like a vulture
no its from Cryptid
its actual effect is that:
- when you buy it, you get a negative eternal obelisk
- when you make any move while having an open joker slot, it makes another obelisk
third time im asking this, but can you change the text in loc_txt of a joker?
through code
https://discord.com/channels/1116389027176787968/1338302514616995892
this one also has it
i am a firm believer in the "localization/en-us.lua" philosophy rather than the "loc_txt" philosophy
because of ✨ flexibility ✨
you have to do something like this
this is my my localization file 😭
i will succumb to the will of localization when i wanna release my mod but for now we simply look the other way
Same
This looks like the rambling of an insane person
altho I have 0 intention to add more localizations
it's rude to talk about someone who's listening
you never know
I strongly doubt Mistigris or any other mod I ever make will get popular enough to warrant localization, but it's always nice to keep the door open
also doesn't it let other people localize for you if they really want
I suppose so
do the chinese even play balatro
I’d love for Maximus to get localization but I’m not a polyglot 😭
just only add the languages you know and someone speaking a different language with enough skill points invested will send a random PR
I dont even know the balatro terms in my language so english only it is
English 
congrats you have served 99.9% of modded balatro players
that 1 french player: 
I mean true but accessibility do be important 
like i dont think even any installation guide for lovely and smod is available in non-english?
skill points
grim doesnt have that one, dang
can i ask what this does?
i wanted to say autism but that felt rude
nothing
Huh. I think you’re right about that. Never thought about that
huh, thought it was for hooking or something
idk maybe
I dont get the correlation
y'all want bananas?
the bananerrrrrr
You should make this work with Showman
make it work with showman please
LMAO
make showman work please
i had the same thought 😭
hes slacking off
fr
way ahead of you
wait what happens if you have two of them or brainstorm or smth
does it spawn 2 bananas
epic
it's not blueprint compatible
you can never have too many bananas

It’s a weird concept to get a grasp on but it makes sense once you do
it took me a while to get it
Same
so basically, "igo" is the function im hooking to, and im supposed to run it again in the function below?
once you get it you're hooked though
I understood lovely patches faster than hooks
then i can add the stuff i want below
Hey folks, I'm getting an error with Cryptid, specifically the Calculate Jokers function. My game's crashing, saying that callback is a nil value, which it is being set to. What is the reason for it being set as nil? Thanks. I'd send the function code but it's too long for Discord, it's in calculate.lua
wait hooks are just overriding functions? oh ezzzzz
you should ctrl + c that crash log and send it over here
Think about it like this. A hook is essentially a non-destructive redefinition of an existing function
not overriding, adding to it (to the end or to the start)
well it can be destructive if you forget to reference the original function
well you're overriding it and then calling the old one inside your new one
That’s true but that’s a pretty shitty hook in that case lmao
smh my head THIS is how you localise
"The joke's on you"

so basically jokerless challenge, damn
it's enh because i don't think there's a single person alive who can spell enhenchancmant
ngl lcorp mod was the sole reason i even decided to get into this whole modding stuff
such a cool mod, gotta credit it out of nowhere 🗣️

i actually did make a useful SMODS.Joker hook that's used to
- impart the Cryptid placeholder art on jokers instead of Jimbo
and - allow Jokers to be disabled if certain mods are missing
you mean enhenehancement?
or if you forget the (self)
-# my game stopped saving as a result once
I credit my designer/artist for making a doc of ideas, causing me to think “hey I can do that!”
either way you'd hook a function of SMODS.Joker and not the class itself
because it damn well isn't a function, it's just callable
back when i was a child i legit didnt know how to spell "resource pack", so i went on youtube and quite literally went haybale on my keyboard
funny you mention that
"resurcece pack"
Had to save this one as a file manually, usually Discord does it automatically, weird
correct me if im wrong but isnt cryptid an old-calc mod?
Yes
they're using refactor
oh i see
i'll just update it so that instead of SMODS.Joker it uses SMODS.Joker.register
code will still remain the same, and I think I can also benefit from the definition files in that one pull request this way
interesting how that doesn't just fall apart completely
its probably because I made sure that whenever I use SMODS.Joker in other contexts, I always had the () so it was used as a function rather than to create a class
if I had just done
SMODS.Joker { (stuff) }
then it might have fallen apart
i think what aure's thinking of would be much more obvious and catastrophic
nah that's syntactic sugar for the same thing
somewhat miraculously, steamodded just never has to refer to SMODS.Joker like a table directly
real
good job everyone
like if you were to do the same for enhancements, it would break here
How do I play a sound at the same timing of the returned message?
sound = 'key' in your return
with the prefix I think
I thought that wasn't a thing. Huge thanks!
aure do you have any insight on #467?
it was added with new-calc
Can I set the pitch and volumn too?
@frosty dock okay so I ended up having to go back to SMODS.Joker because using SMODS.Joker.register means that Jimbo appears instead of the placeholder atlases I'm using
so unless there's another method I have to go back to the old hacky ways
And how do I separate the rank change and the visual change exactly?
you might just have to add your mod prefix to the atlas
because you're not modifying the arguments to SMODS.Joker anymore, that doesn't happen automatically
ok yeah that fixed it, ty
I made it like this for my own Joker
play_sound('cs_flip')
for i = 1, #toflip do
local hooked_card = toflip[i]
hooked_card.base.id = target_rank
hooked_card.base.nominal = target_rank
G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
local suit_prefix = string.sub(hooked_card.base.suit, 1, 1)..'_'
hooked_card:set_base(G.P_CARDS[suit_prefix..target_rank])
return true end }))
end
delay(0.8)
cs_utils.unflip_cards(toflip, 'before', 0.1)```
whats G.P_CENTERS?
Pokemon Centres
(i think the card type like lucky?)
It’s basically a master table of all card definitions
thats a nice joke but i dont think thats the case lol
ah i see
so basically pokedex
Lmfao
im seeing if i can use that to make a universal API for animated sprites rn
I'd like to use that to show the effects of Gros Michel and Cavendish on Banana Factory, but I haven't quite figured out how that works with the whole tooltip system
oh, isnt that info_queue?
info_queue[#info_queue+1] = G.P_CENTERS['j_gros_michel']
putting this on all of my jokers
Anyone knows why both of this patches are not taking effect, like the effect changes but everytime, even if i dont have the joker
would that work for custom stuff too
i think i should use next() but not sure how to do it
ok yup that did it, ty!
it would
oh no ive been identified
(I prefer to use the link for that, bonus music: https://tryitands.ee)
ahh thats awesome
are there any tutorials on how to make a balatro shader?
is something up with my screen or is that mult orange
for instance, if its a modded joker, you would use j_(mod's prefix)_(joker's key)
ive already try, and i dont know how to use it
thetes some tutorial down there
thats why im asking 😭
don't look at that readme 🤣
if you dont want credit lmk, i just think it's nice to acknowledge people who've helped even if it's small
it's like 8 months old
i love "Notes in case you can't read"
custom stuff does work! (Up To 11 is a custom Joker)
i mean, yeah, but the resources below r still pretty useful lol
shouldnt the background be red?
that's true
custom colour palette
i see
I see, I was doing it like this until now
a bit off but i dont mind
Beautiful
basing on just the first rendered frame, i already know this is gonna be melody to the ears
that 10s being two colours is cursed
now play megalovania
oh wait actually
that sprite kinda reminds me of holocure
i think theres an attachment which does exactly just that, though my memory might serve me wrong on this one
I... did snagged it from holocure wiki
😭 makes sense
In fact this joker is completely inspired by the "Trumpet Stamp" in that game.
mhm, always used that to enhance my other stamps
honestly your mod really reminded me of holocure as a whole lol
i just realized
I have a Joker that guarantees all probabilities for the rest of the round
what if I made a Joker that ensures no probabilities happen for the rest of the round 
glass card deck winning
NO [TheOffice_Michael_NO.mp4]
downside: wheel of fucking misfortune
to be fair you weren't getting the wheel anyway
true
it doesnt, going back to how it was before
glass card cavendish
oof
what if you had both
imagine having to break gros michel with that joker 😭
If I decide there is enough practical use cases for a Joker that makes nothing happen, I will add it alongside Weighted Dice
how do i use the next() instead of SMODS.find_card("j_toyr_four_leaf_clover") ?
next(SMODS.find_card("j_toyr_four_leaf_clover"))
thanks
Where do I get the cs_utils?
should i be concerned about this?
nah
nah
nah
Is there a way to show a custom description with the info queue? Not referencing another card
hooking update 🫣
yes :)
TECHNICALLY, yes
wdym technically
you just make a loc entry to Other type descriptions and reference it in info_queue with set='Other' and the key you used
thats my utility file for flipping the cards, you should use your own flipping logic
Okay.
shop adjustments here we go!
mhmm
real if based
hell yeah
pack card quantity is a really easy patch
yeah just like a unified way would be dope
perhaps, yeah
but idk maybe something like that would want to be more featureful than just a number
runs into the probabilities' issues and that's a constant headache
stuff["currentdt"] SHOULD increase every frame, right?
what part of the code did you patch to open a shop when skipping a blind?
but its not, somehow
im confused
you reset it to 0 every frame
Thank you! Looks like I'll need to actually stop putting off making a localization file then 
oh, i actually made an entirely new joker to achieve the same result since i couldnt think of that
💀
Can you beat Balatro if time is frozen?!!!
jezus
does it use AnimatedSprite?
If it's stupid but works it isn't stupid (but there's probably a better way)
i basically did the same stuff as what jimball in cryptid did, except it now checks for a table with different variables to account for multiple objects, which, i think, go beyond jokers
i have no clue how laggy it will be if a lot of objects r running this ngl
will these make this code less of a mess?
what is this code doing
creating a Gros Michel or Cavendish in the shop
probably not
to replace one of the items
damn
theres also different stuff to choose from (the image below)
can it use a frames setting instead of using the entire sheet?
theres "endX" and "endY" which should basically do that, i think
oh i forgot to mention #1249486500811378718 to you
damn.
hell yeah, actually got myself a workin custom info box too
Time to actually write up some Actual text now and this joker will be 100% complete
well off to the garbage bin we go, at least i know a bit more about hooking from this
this looks much better than how I understand aura to work
well aura is also only designed for vanilla jonklers
I'd still prefer it to use AnimatedSprite though
whats AnimatedSprite tho
a vanilla class
oof, i see
its how blinds are animated
ohh, i will look into that later then
i feel like itd screw up some sprite drawing stuff
i should probably add "startX" and "endY" as optional variables at the end, so if its a huge spritesheet then you can tell the code where to begin
the problem is AnimatedSprite is like slightly different from Sprite in about a hundred ways that makes it not a drop-in replacement
source: i tried this before too
yeah I've never been bothered to look into it properly
looks good
I can do anything!
yeah uhhhh im like 90% sure that old code straight up doesnt work now
does a flip
and wasn't that good before either ngl
is there a way to increase the wave effect on the name of a joker?
yes
how?
idk
does anyone know if it's possible to access the hud graphics or not?
ui methods?
thanks
oh
this means that they are drawn in game instead of being textures
i swear i can't find it
resources>textures
i mean the file with the textures not the folder
what sort of texures are you looking for?
the hud like the red and blue rectangles and the pause button
those are definitely drawn by code
^ im pretty sure this is the case
yup
man...
they're just shapes on the canvas
What's the variable for total payout at the end of a blind?
wanted to do some texture swap but that's going to wait
if you want to change those buttons appearance, then i think you might need a patch
you can absolutely chagne them to sprites
that's okay i think i'll wait and try to get familiar with coding the lua before i try that
It's prob in G.FUNCS.cash_out
or function end_round() 🤔
you don't, it's already loaded on startup
nvm
you mean your own, not the engine file
use SMODS.load_file instead of require
require doesn't have the context of your mod
i see, thanks
What should I replace cfg?
uhh nope, it didn't do what i need, since animatedSprite.lua is supposed to be a module file, thats why i used require() at first
you should still be able to use load_file, else set up a lovely module
loc_vars should be a function, not a table
but card.ability
This is the easiest way I could think of to tamper with 5 and 15 since those are hardcoded.
(Two screenshots from lovely/dump/card.lua)
I'll patch these up as well.
hee hee hoo hoo
How did you make a second line under the name of the joker
from the game
from the game
even in another run?
oh ok
here it's remove 2 random playing cards in your graveyard from the game
the graveyard necessitates the distinction of destruction and removal
every time someone asks im going to send an increasingly shitty crop of this function
how did you add that additional line below the joker's name
this should allow sprites of basically anything to be animated, hopefully
thats cool
function so good had to gatekeep
fr
its???? literally on github
woah autumn how did you get that subtitle???
yeah but how did you add that subtitle
eremel can you please make ortalab check SMODS.has_no_suit(card) and SMODS.has_no_rank(card) more for its blinds please
I have done on the v1 private branch
please i am tired of my stone and ore cards being actually useless
grinder to grind up stonre cards
look I did it this morning 🥳
anyways, @wintry solar can you check the code for #1341041293119459449?
where do you put the text in the loc file?
pickaxe joker
"There's gold in them cards"
- prospector, encryption
it's honestly baffling how you apparently are working on things just when I'm looking into them, Eremel
subtitle = "..." in the same level as name and text
very nice
hmmm?
What's the context of payout? after the payout calculations.
when I needed the drawn cards on drawn_hand you'd just pushed that, then when I was looking into making some patches for splash, you showed you were working on better splash contexts, and just when I'm looking into no_rank interactions, you're posting about that, haha
oh the no_rank stuff is for ortalab blinds
hes quite a literal 🧙♂️ after all
I'm not fond of modifying the center object rather than each occurance of the object but it looks okay to me
animations are probably the one case where you could get away with it
changing the center object ensures all instances would be synchronized
There's none iirc
that's why I don't like it 🤣
How hard would it be to construct a jokers sprite from multiple sprites?
(Like have a var change/add a small thing without a completely different atlas entry)
Basically like a legendary joker without the animation
It's done in cryptid
It uses calc_dollar_bonus(self) instead of calculate(self,card,context)
Any specific card that does it?
I believe there's lovely patches for them, and exotic cards.
mm i suppose there r cases when that is more desired, though currently i dont know how to get the pos of only one card
im lookin at exotic.lua rn and it seems thats limited to 3 layers too, hm.
oh so its like, assembling parts to make one joker?
you can use similer code to make more, i've done it with this.
is that
it uses about 4 layers. (it doesn't use the base layer or soul)
is this minor reordering acceptable 🤔
wait why does that happen exactly?
lua table jank
ok i kinda wanted to replicate the animated jevil joker i saw earlier, but the spritesheet i got is horrendous so ig not
is there a resource out there somewhere for how to write lovely patches to modify the base game code?
i just look at the steammodded patches for examples
thanks!
is it a keybind that lets you access the shop instantly?
no it's the deck I'm using
oh ok lovely patches actually seem super straightforward
mhm
its just finding a specific part of a file, then you can choose to add your code inside it before/after/at that part
No way...
Guys what should the "J" joker in my mod do?
buff Js
hone looks like buddy Holly imo
does anyone know the mod that will stack copies of the same card in the deck view?
cartomancer
i needed that thanks
I'm just gonna bump this because I'm still not entirely sure where the infinite call is coming from, but commenting out the info_queue[#info_queue+1] = fool_c fixes it , at the cost of not showing the previously used card
In theory, if the previously used card is either the Fool or Reverse Fool it shouldn't be adding anything to the queue
Make a non-joke idea
i mean, i have no clue what the joker is supposed to look like and all that, so i cant really suggest anything
oh, how about making "J" gives more mult depending on how many "J"s there are in every joker's name combined?
localization based buffs my beloved
idk why it's not doing what you want but a quick workaround might be checking for not center.fake_card
How would I make my joker take away money?
add negative money
I found an issue in my if statement, the .name for my reverse fool card wasn't The Fool?, it was c_reverse_c_reverse_fool
yeah, I would probably check for keys instead to avoid those problems
Is there a way to give a custom back sprite to a joker?
this is how i do it
So how do I add money...?
ease_dollars
Can someone give actual good ideas for the joker in my mod "J"?
Thanks
Something related to amount of Jacks in deck/hand?
Each scored jack gives +5 mult maybe?
Would need more, because currently that's worse Smiley Face
Worse smiley face?
not 5
Most likely, just throwing ideas
x1.25 chips per jack in hand?
Jack of all trades, $3 for each jack held in hand on round end?
I don't know how to make XChips
this joker gains +6 mult for every unscored jack
i misread, my bad
I like that
x_chips doesn't exist iirc
It does since less than a week ago or so
it does, it was recently added to smods
Oh, Awesome
How can I have a Joker copy the ability of any other jokers present from a specific list? So if I have a list of Jokers (Joker A, Joker B, Joker C), Joker X will copy the abilities of them like blueprint if they are present
Look at how Blueprint/Brainstorm does it, and instead of checking for the Joker to the left/first Joker, check all Jokers and do it for each one taht falls within that list
Guys how do i check unscored cards again?
If you don't know how to access existing source code, go into your Balatro Steam folder (Steam/steamapss/common/Balatro) and unzip Balatro.exe (you might need to copy it and rename it to Balatro.zip)
SMODS recently added support for that too, lemme check
how do i check if a scored card is a stone card
https://github.com/Steamodded/smods/wiki/Calculate-Functions#main-scoring-loop
check the full_hand
Xchips isn't a valid key, they're xchips,x_chips or Xchip_mod
You can enable it with SMODS.optional_features.cardareas.unscored
And then you can check it with context.area == 'unscored'
Good to know, my bad
this part is checking the relative positions of the cards right? So I'd replace this part with checking the joker ids
I believe it's to stop infinite loops
Seems like it yeah
is there a variable to do that
It increment context.blueprint and stops when it exceeds the number of Jokers
@neat plover
thanks very much
card.config.center == G.P_CENTERS.m_stone
Yeah okay but do I insert anything before context.area?
What do I insert?
Wait isn't it supposed to be context.cardarea == "unscored" and not context.area?
hey again
how would i change the info of a locked joker (smth like a legendary which has the '?????' until unlocked instead of its ability info)
help im having a stroke
how to calculate this i've lost all my knowledge of this game like overnight id k what happen
Why is this line spawinging in a Temperance card instead of a Magician?
local card = create_card('Tarot_Planet', G.consumeables, nil, nil, nil, nil, c_magician, 'fool')
key needs to be a string
What's the thing I write in text for it to be money colour?
{C:money}$#2#{}
Thanks!
thanks, I think I'm progressing in the right direction, but what would I do if there is more than one joker to copy? I think I understand what blueprint is doing here but do I need to somehow trigger the copying joker twice? Concatenate the effects of two copied jokers?
does SMODS.DeckSkin have a way to skin the standard background of playing cards as well as the pip's & faces?
I want to modify the standard faces in the vanilla Enhancers.png
How do I add text to the payout? just the text though.
return {
message = "Your message here",
extra = "Another subsequent message here",
}
I meant to this screen
Would putting a for k,v in pairs(G.playing_cards)do in calculate without an if cause any problem?
what were the reroll things people wanted bundled in to smods?
Use calc_dollar_bonus(self) instead of calculate(self,card,context)
And then return the number of the interest you want player to earn at end of round.
maybe make it so it always gives me the joker I need?
spawn it with debugplus
is this a mod?
I usually make a custom deck that spawn the joker at the beginning of the run. no need for extra plugins
smart, im gonna do that
that sounds like so much more effort than just using debug tools
i have the mod but how do i use it
just hover the joker in the collection and press 3
(it tells you this if you hold tab in-game)
it takes like 3 seconds yea
How would I generate something like this, but for the specific tarot card that I want?
local fool_c = G.GAME.last_tarot_planet and G.P_CENTERS[G.GAME.last_tarot_planet] or nil
leaving some space for character art from the jokers in the mod
I didn't know about the Debug Tools when I started modding, so I made a standard template for a custom deck, and I just change the joker to spawn when I want to test it. 4 seconds of setup then no need for extra menus or anything in the future, unless you want to spawn more of that joker.
Does anyone know if smods has a built-in bonus mult system yet? I remember there being chatter about it but no clue if any work was done on it
Unsure, maybe you could look at how Baseball Card does multiple triggers based on other jokers
not yet
basically, how do I make my own reference to a tarot card object?
thanks, I'll have a poke around
i can't seem to make this work but i think it's because i'm dense
In G.jokers.cards[i], how can I check what a given card is? I tried G.jokers.cards[i].key but that is not correct
That is not the code I pointed you towards
?
G.jokers.cards[i].config.center.key
amazing thank you
You need to check context.scoring_hand[i].config.center == G.P_CENTERS.m_stone
Not is_suit
Would anyone happen to know why my PokerHandPart is causing this crash on startup with the JokerDisplay mod?
Actually wait nvm I think I see the potential issue
its too bad ctrl + b doesnt auto select it
yeah 😄
actually I can just add smods.create_card in the start run function
this is the error I got when starting the game with maximus too
Is there a G.STATE for being in a run?
G.STAGE == G.STAGES.RUN
sick
oh but did you sleep
I think the problem is I have a check for the hand part that checks for the highlight limit to be >= 6 so shortcut and four finger don't activate the hand type when they're not supposed to lol
like 3 hours but yes
3 hours is better than 0 I guess
For sure, I'd be miserable rn without it
Ever since I have a Baron, I just hold a bunch of kings and sleep for like 2 hours, but it counts for like 8
wouldnt that function already have a run check
or you could check for G.jokers
I got it working with the method I thought of so we ball
meet the frickin carved joker
gives you 1.4xmult for 3 hands if you have a stone card in your hand
bumping this ._.
where is the lua to edit a joker's detail in the collection or shop?
How do I word Earn $1 per card less than 5 in played hand. better?
It'd be equivalent to Earn $5 each played hand but -$1 per played card.
I think second one is more clear
working in lua is only strengthening my preference for strongly typed languages
I hear that lmao
Progress post B)
so, I've tracked down that G.GAME.last_tarot_planet holds a card.config.center_key, and in the Card:init() of card.lua we have
card = card or {},
center = center
}```
is it mod specific or something
are you trying to edit an existing joker, or a custom one?
a custom one rn
what does your SMODS.Joker currently look like for it?
ah ok you need a loc_txt field
something like this
key = 'Rekoj',
loc_txt = {
name = 'Rekoj',
text = {
'{X:mult,C:white}#1#{} Mult'
}
},
atlas = "Rekoj",
pos = {x = 0, y = 0},
config = {extra = {mult = -4}},
loc_vars = function(self, info_queue, center)
return {vars = {center.ability.extra.mult}}
end,
calculate = function(self,card,context)
if context.joker_main then
return {
card = card,
mult_mod = card.ability.extra.mult,
message = "" .. card.ability.extra.mult,
colour = G.C.Mult
}
end
end
}```
What about:
Earn $5 when hand is played, payout decreases by $1 for each scoring card
(Roughly based off of Rocket’s description
thanks!
wasn't really where you told me, but searching in the files i found the localization files
got it! The line I was looking for was new_card = G.P_CENTERS["c_" .. words[#words]]
and sure enough, i found where to put the desc
How do you change the cost of a joker?
currently I've just been putting all of my custom cards in my main.lua
What is your mod prefix, what is the joker's key?
Actually found it, it's Joker, not Jokers
Also is it inside descriptions?
thats a long prefix
wait no it is
return {
descriptions = {
Joker = {
j_reg_soldier_spades = {
name = 'Soldier of Spades',
text = {
'Each scored card with',
'{C:spades}Spade{} suit reduces the blind',
'{C:attention}2%{} of its starting value'
}
}
}
}
}
Make sure it's Joker not Joker__s__
Okay it works thx
how can i make a joker run a calculation anytime a queen is scored? :o
FYI xMult values are typically represented with a capital X (e.g. “X2 Mult”)
{X:mult,C:white}X#3#{}
what da hell...
i'm maybe not the best authority to ask, but did you remember to specify it in loc_vars?
(unless it's always meant to be a high card, then you should probably just have it say "High Card" in the text itself)
it's a little annoying for sure; the main thing is that what you do to one (e.g. the actual variables), you do to the other (e.g. the loc_vars section). like this:
loc_vars = function(self, info_queue, center)
return { vars = { center.ability.extra.scaler , center.ability.extra.roundsElapsed , center.ability.extra.Echips } }
end,```
that much i understand but the problem is localizing the current poker hand
having the strangest issue where the first variable green_seal_draws is getting passed to the game object but the second variable ante_stones_scored just isnt getting passed?
Game.init_game_object = function(self)
old_ret = old_game_init(self)
old_ret.green_seal_draws = 0
old_ret.atne_stones_scored = 0
return old_ret
end```
i think so at least
what's your card's description code look like, perchance? :o
atne_stones_scored
okay, at least that checks out. i'm admittedly unsure of how to handle a variable with a string, but the issue at least doesn't seem to be, like, the description itself isn't calling the variables right. can you tell i have had that issue before ;P
oh my god 🤦 it took me a bit to figure out what you meant, thank you lol
Hi, I'm looking to learn how to add new jokers, tarots, planets, etc. but I'm not sure where to start. I have the Steamodded wiki page, but not sure how to use anything there. I've done texture, malverk, and challenge mods before, just not adding completely new content.
I'd like to start out by creating a new tarot that decreases the rank of two cards (opposite of strength). Can anyone give me some pointers?
https://github.com/Steamodded/smods/wiki/API-Documentation
on the sidebar, SMODS.Consumable. that's the routine that handles adding consumables.
woah... cat jumpscare
i removed the localize func and suddenly table jumpscare
so the problem isn't the loc it's the variable being assigned wrong
Right, I have that but I still have no idea how to use any of the information there. I tried looking for a mod that adds a tarot to copy and lean from it but I can't really find anything. That's what I did to learn everything else I have.
do you know how to set up a .lua and .json yet?
okay so i gotta get the key rather than the whole table
How would I check to see if a card is in the "new run" menu?
I have been using this as a reference, if it can be any help
This is for jokers specifically but I imagine tarot cards just have different properties that you define that are documented in the page linked by camwoodstock
https://github.com/Steamodded/examples/blob/master/Mods/ExampleJokersMod/ModdedVanilla.lua
oh ModdedVanilla.lua has come in clutch a lot for me fsdgljk
If you're referring to setting up the whole top bit to work with Steamodded, yes. I've used .lua and .json for the malverk mods already
in regards to this: making a consumable is literally a very similar process to making a new joker, you just use SMODS.Consumable instead of SMODS.Joker ;P
I'll take a look at that and come back if I have any questions, thanks!
...also hello, does context.post_trigger on joker calcuations do anything?
It is listed in the calculation doc as "triggering when a joker triggers" but it is always nil from my testing
probably an optional feature
Ah, I assume I ask the SMODS API to enable it or something?
I can't find it in the docs ^^"
question! how do i make it so a joker activates whenever a queen is scored? docs are unclear how we're meant to make an effect proc every time a card of a given rank is scored. :o
SMODS.current_mod.optional_features = { post_trigger = true }
Thank you ^^
context.individual and context.cardarea == G.play and context.other_card:get_id() == 12
...i think i borked it ^^;
You missed the "then" in the if check
Also just return xchips = …
this might need a nerf...
maybe just X0.5 per upgrade is fine
im on ante 6 for reference
for sure
its a legendary
scaling 1x mult per round is far too much
still tho im thinking about the scaling of stuff like yorick or canio
they're way slower unless you have a very specific setup for them
this one's more flexible and works with almost any setup so i think it should scale less for each upgrade
id argue with canio on scaling
i mean if you can get a consistent stream of hangmans then sure
but yorick sure i guess if you dont get merry andy and ur on blue stake+
i guess it ain't that bad
i meant like it's slower unless you have a billion discards
this one's almost once per round unless you hit a straight flush or smth
not a good comparison
anyways the legendary is strong af but i dont think it should be nerfed
guess he can stay strong until testing tells me whether or not it's too much
this is a very silly question; how do i check for queens held in hand, under the context of them either being steel, or owning Shoot The Moon? i think it'd be really fun if those queens also procced the joker i'm making
How would I check to see if a card (e.g. deck) is in the "new run" menu?
does anyone know how to check when a lucky card is triggered or fails
two questions:
- how can i take the amount of clubs cards in the current deck as a variable?
- how can i have the text color for clubs in a card text?
{C:clubs} for the color
i just need the variable
card.lucky_trigger
if you need it in calculate the context seems to be context.individual and context.other_card.lucky_trigger
so if i want to test if a lucky card fails?
you need to check if it's a lucky card and if not card.lucky_trigger
thanks!
keep in mind that it's reset after card scoring


