#💻・modding-dev
1 messages · Page 215 of 1
how do i access it?
local start_run_ref = Game.start_run
function Game:start_run(args)
local availableCards = getDataFromSaveState(args.savetext.cardAreas.shop_jokers)
local availableVouchers = getDataFromSaveState(args.savetext.cardAreas.shop_vouchers)
local availableBooster = getDataFromSaveState(args.savetext.cardAreas.shop_booster)
print(JSON.encode(jsonify(availableCards)))
print(JSON.encode(jsonify(availableVouchers)))
print(JSON.encode(jsonify(availableBooster)))
start_run_ref(self, args)
end
``` its the `args`
Weird...when I call card:set_edition and use negative, my consumable works. But if I use my own edition I have made which has almost no fields defined other than key and the minimum fields, the game crashes with an error from smods saying p_edition is nil
thats my use case of the function but you should be able to start from there
Shiiiiit I totally neglected the local declaration being in the wrong scope 😭 I just threw the if statement together to see if that'd fix it without actually cleaning it up
Ty though! I'll try that shortly
you can hook/patch into it, although if it's a specific joker effect you could use SMODS.Center.load for your purpose
so when its supposed to generate the UIBox for the card?
SMODS.Center.load runs on continuing a run and loading the card from save
this would be exactly what i need, my goal's just to reset a variable on game reload
defined on the joker itself?
ye
lemme go look
if the effect is specifically on loading the joker from save then it's exactly what you need
when is shader code not jank
Is it possible for me to make an effect like "when this joker is destroyed"? I've been playing with a few different contexts and nothing seems to fit.
when you know what you're doing
i mean it sounds stupid but try to set a bonus cfg that is 0 for your card, i dont really know where the cfg is set tho. i would need to look for it
"the file name and the first variable of the shader have to be the same string"
yep
janky jank
because what happens on that line is
all cards that have a name that isnt stone card if they have specific vars and they have the bonus_chip param or the cfg
these jokers are amazing, @tall wharf ! You even have an animation next to the side of one showing the hand change!! Amazing
they trigger the line
another idea i have is, specific vars should be an empty table in most cases if i remember my dive into localization correctly
so maybe just set the loc_vars of your card to an empty table if you dont have variables
looks so cool
doesn't work
identical crash
maybe try figuring out how canio works and apply that logic to jokers? i mean cards and joker are the same Card item after all they probably have the same events...
yep worked!
figuring out what to access for what property was kinda goofy
not surprised in the slightest but that did end up working! ty spa
dori no longer crashes the game by being hovered over 
where is that line from? because its a weird line in general
Ok, Steammodded seems to crash when using set_edition to set a custom edition. I need to see how cryptid is handling this. If I don't set the edition with an e_ prefix, then it throws from an assertion, but if I do, then the edition is not listed in the edition table
you did add your mod prefix right
e_prefix_editionkey
oh god. Is it like sounds where you have to add a prefix
no it's a prefix for all modded objects you make
each mod has a prefix
like cryptid's is cry, and tsunami's is tsun
it goes before the object key to determine which mod owns what thing
also prevents name conflicts
if you didn't set one, it defaults to the first 4 letters of your mod key
iirc
you should set one yourself
great example: c_cry_replica vs. c_pencil_replica
(these are both real objects that would conflict if not for mod prefixes)
it won't be able to find your edition without the prefix included
my mod prefix is fox, does that mean that I would use card:set_edition('fox_ghostRare', true) to set the edition then?
e_akyrs_texelated
e_fox_ghostRace
should do it
class prefix
class prefix is the e_ for editions, j_ for jokers, etc
class prefix, mod prefix, object key
isn't it triggering three times because you are specifying 3 different areas for it to trigger?
this makes it not work at all
it's e_fox_ghostRare i think
each card can only be in one of those three areas
another idea, reading the code, is to set an empty table as your card.config param
but the context gets called to every object regardless of area AFAIK
so you need to check which area it is in
My solution is kinda janky so I was hoping there was a better way
Ok thanks for the help folks, looks like it still fails with that p_edition error, but I appreciate it 🙂
already have that
what is it supposed to do
trigger on end of round no matter where it is
what is the object
enhancement
I'd like to juice up a Joker until a Blind is selected, are there any useful variables in the base game for that
its supposed to die at end of round once the counter hits 0
bump
right, but it says config is nil?
i think theres juice_card_until
it's there ¯_(ツ)_/¯
have you tried this but without the area check
config = {},
replacing it with context.cardarea == card.area still triggers it 3 times
context.main_eval should fix that
or at least, dna seems to be using something similar to that (i haven't checked what function it uses)
it triggers no times
I was gonna ask how I can check when to stop then I just realized I can just set a variable when the Joker receives a setting_blind context to stop juicing
I'm slow
do you have a repo with your code i could look at?
hmmm enhancements are weird
is it not just get_chips or something like that
still triggers 3 times
i think there's a function with similar name to that
not currently and i will not show the code
until there has been a release for this mod
hopefully that will also account for bonus card enhancement
else i will probably hard code that in
😭
which i can't do while there's a hover tarot crash
ok what about context.main_eval and not context.indvidual and not context.repetition
why is it reaching in the set for cards when you're rendering a tarot? shouldnt the set for the tarot be tarot?
I have no idea
oh wait, the retrigger 3 times at end of round
the set for the info queue is Enhanced
context.main_eval makes it never trigger
i fixed that in my mod, lemme check the code rq
on the tarot?
ok without that one then
the tarot displays the info queue for the enhancement it applies
which uses the Enhanced set and the correct class prefix and mod prefix and object key yes
i dont really understand the info queue thing
it's the little information boxes that show up next to a card
like how Perkeo tells you what negative means
Steel Joker tells you what a Steel Card is
...nvm its the same code as the above, weird
now it triggers twice
you put an info queue in which references a localization entry in a certain area
let's go
in this case being the Enhanced set containing my enhancement
maybe print the contexts to see what's the difference
was just doing that
oh my god wait
is it because i'm using the seal method
instead of the enhancement method
rubber ducking for the win
what's that
ok so context.playing_card_end_of_round works???
usually its just explaining the problem out loud to a rubber duck sitting on your desk, and then solving the problem by yourself because you were explaining what was happening
that was it.
but in this case its just two people discussing the how your code runs and you figuring it out
I don't know why that method didn't work but
fucking hell okay well I solved it
I was using the wrong method to get the info queue
what even is that lol
I forgot enhancenemts use G.P_CENTERS.enhancement key
seals use the set and key of the localization (which should work anyway??)
qat
i dunno remember this game was made by an indie on his own time expecting to sell about 5 copies so
i like it but it's kinds janky still
unrelated bug I found in tsunami when doing this
when starting a run that redeems a voucher, then leaving and continuing the run, the voucher gets stuck on the screen
back to my problem, anyone has any idea on how to get the cards that are rendered inside of a booster pack?
G.pack.cards
i also got my thing to work 🎉
it's one of the two
G.pack_cards didnt seem to have anything interesting earlier when i checked
i use both card.config.center_key and card.config.center.key in my mod lol
i should pick one
maybe you're looking at it before it is created?
also where are you looking for this? if it's for a joker or something with calculate I think there's a context for it
in G:update_baffoon
what are you trying to do
get the card entity from a booster pack, any type
yeah but for what purpose
is there any context for when an ante changes? i want to make a joker that resets its values every time an ante changes but im not sure how to accomplish that
i have the whole framework to read the data i need as long as its a Card
maybe you can do it inside the general update and check if G.STATE is one of the booster ones
look at campfire how triggers i guess
maybe the other one is called at a weird timing
campfire checks when the boss blind is defeated, my intention is to reset whenever the ante is changed, including the vouchers, but i guess that isnt really necessary + it might mess with the balance
thanks for the help
thank you!!!!
so like inside of G:update_shop if G.STATE == G.STATES.BAFFOON_PACK
i mean arent they the same thing? boss defeated, ante changed?
oh
so even if you use hierogliph or petrogliph it triggers, im stoopid
last time i read G:update i was feeling like it was for when the game itself was receiving an update but i might have read that wrong
yeah- but on rethinking it, it doesnt make sense for my joker to reset when that happens so boss blind works perfectly well
update gets called every frame afaik
fire
anyone have any ideas on what's going on here? the last line in the screenshot is crashing because it's comparing a number to a table
do you have talisman installed
ya
talisman compat 🔥🔥🔥
we love when numbers become tables ❤️
i figured it was likely talisman, was about to say i'm trying to figure out compatibility with cryptid
okay i was planning to do talisman compat but this has immediately changed my mind
can someone do me a crash course on why talisman compat?
talisman turns numbers into tables to get bigger numbers
lua not likey when compare table to number
talisman turns scoring into tables so that balatro can store larger numbers
dang it
how would i support this? cuz i would like if i could get it to work
crap, it works with enhancements but NOT editions
that
so Foil doesnt seem to count 😭
oooof am i gonna need to do that to all my number comparisons 😭
probably gotta hard code editions in then
only when comparing dollars, blind mult and chips and poker hand levels AFAIK
i wonder if it's possible to like
make a joker that when you run out of cards in your deck you just redraw them from the "discard pile"
so the graveyard
where are the edition keys being stored?
i think whenever a card has an edition card.edition.(key) is true?
oh no, like, where do i find all of the editions keys
SMODS.Editions may also exist
(shouldve specified that, sorry 😭)
much like SMODS.Suits and stuff
...oh
or this
yeah i see, thanks :D
Is there a good resource for getting up to speed with the file structure, objects and code?
ok so checking G.pack_cards works but i need to check that G.pack_cards.cards[1] is not nil and then set a custom bool to true so it stops spamming, and i can call it inside of the Game:update_baffoon func
this will probably not account for the edition's value being changed for only one card, but ehhhh
like this
local gotBaffoonContent = false
local update_baffoon_pack_ref = Game.update_buffoon_pack
function Game:update_buffoon_pack(dt)
local return_val = update_baffoon_pack_ref(self, dt)
if
G.pack_cards ~= nil
and G.pack_cards.cards ~= nil
and G.pack_cards.cards[1] ~= nil
and gotBaffoonContent == false
then
gotBaffoonContent = true
local boosterContent = getAllCardContents(G.pack_cards.cards)
print(JSON.encode(jsonify(boosterContent)))
end
return return_val
end
besides SMODS wiki, https://github.com/Steamodded/smods/wiki, the only way to really get up to speed with the code is by extracting the source code from the game itself. SMODS wiki is more for working with modded in general, the source code is the base game's... code
Cool, thanks! I've been poking around for a couple hours and am slowly getting it so the SMODS wiki will def help
and just working on your mod and talking to other people, thats how i mostly learned
guys my mod main file finally reached a milestone
30
thats it
there's also some examples you can find here: https://github.com/Steamodded/examples/tree/master
these really helped me when starting out!
mine has 250...
my mods main file is a bunch of assert(SMODS.load_file
not a flex nor a complain, just confusion
This is great! I downloaded a couple mods to see their structure but having them like this is way better
my mod files are extremely unorganized ❤️
i see what you did there
let's go
if you don't care about the order you can just load all files in the folder
i still need to organize mine, but ill start by getting it to work first once its working we refactor
this is my main.lua, its so random 😭
its fine mine is too dont worry
has anyone done sound design on custom editions
i don't think my texelated sfx works
as it not fit
what is this "extra" thingy for
I think it was the type of message, extra makes it orange
o, i see
added this to the main file recently so i dont forget to change debug flags before pushing lol
and i guess that debug.lua is in the git ignore?
yeah
not a bad idea
currently tryna using this code to make my Joker announce the chips value of all the playing cards played
is there somewhere i can find a list of all the available colors within localization & text
but the message is left for when the whole hand is played and scored
try blockeable = false on the event
got it, lemme try
thank you!!
teto kasane teto
(why the fuck did i get invisible joker at ANTE 2)
how do i make it so that my custom stake is in between two vanilla stakes?
omg teto kasane teto
hello it is i kasane teto
nope, doesnt seem to work :(
teto kasane teto
teto
should be blockable = false
what if you do cardarea == G.play and instead of doing the event you return { message = "your message" }
that im bad at the englishman language
oh, i suppose that works too, if the timing for its intended functions is off then i will fix it later, thanks ❤️
British English in Balatro source code 💔
is there a smods even for opening packs i would need to hook into if i want to be able to check all packs even modded ones?
just hook into calculate_context and check for context.open_booster
context is always empty when i tend to check it
weird because I do that
i also want to stay away from smods as much as possible because the less i use smods the easier it is to transform my mod into a stand alone app
but didn't you just...
yes
i know what i asked
im trying to make a stand alone app for streamers who want to play full vanilla
and a mod for those who dont mind playing vanilla but have like utilities installed
but might as well support the fully modded game if im making a mod right
ok but what does that have to do with your question you can't check for smods boosters without the user having smods installed
you can do the vanilla check or the smods check if they have it
im confused
lets move to my topic so we dont pollute this chat
...oh i remember the original purpose of what i was doing with this 😭
i wanted it to select a number of cards in the played hand
then increase the joker's var by their chip value
using context.individual and context.cardarea == G.play doesnt seem fit with this
How do make a card flip while it's gaining an enhancement or something so you can't just see the card while it's changing
miku cursor
miku cursor
shenanigannery
↓【Mac】version【Static】version【Sticker】are limited to Member-Only ↓
https://ko-fi.com/s/7f7decb06d
Donation will help me to create more animated cursor...
heres the cursor if yall like it ❤️
migu...
i'm using a rin penrose cursor
rin penrose
sadly no teto cursors
when people realise pixel art is not easy
it is indeed not easy
real
mod development is stunted by my inability to draw well
i try drawing on my own
so true
same but it takes forever
a few hours
that hasnt stopped me
JEVIL STAR RAIL!?
id be surprised if my mod even somehow has all of the art done before release 😭
hes a T0 character, meta dps, support, subdps and sustain
highly suggest getting him
here u go
im trying to draw an anime girl's fancy ass chair that I can barely find references of
i mean
is it that one chair
chair in question
OH
way too many curves and little parts man!!
True..
this is the most normal chair in the game
yeah
at least it's not this
fancy ass wheelchair
an entire ass wheelchair
she probably has more mobility in that compared to me with fully functional legs tho 😭
idk I just keep getting vibe checked when trying to draw the little fancy details and the backrest in a tiny pixel art image
is the code alr becaue the mult isnt going up apparently
try changing it to G.play.cards instead of just G.play
😭
ive made a joker which supports foil and bonus cards :3
what if i help u
i feel like if we were to ever add cross mod content, you would add shi to make the mod much more difficult 😭
cross mod content with joyous spring where it puts a virus in ur pc
randomly chooses 3 cards in your played hand, and increases the joker's chip equal to how many chips they give
on top of that, the joker also has xchips which scale on how much chips it gained too, that should make bonus cards much more useful
why did i stylize my mod wrong
false
oh actually, does :get_chip_bonus account for hiker
lemme check
it should i think
mhm
is this targeted?
new boss blind coming
boss blind starts tomorrow
i mean, thanks myself???
i have no clue what the fuck i meant by "the thingy" either
💔
boss blinds starts at 7:00pm
my stupid ass at 6:99
6:99 😭
context: a joker has those functions which uhhh, shouldnt they only be running when each card is scored?
@iron iron did this fix it
because it calculates so early, it didnt account for the debuffs later
bruhhh 😭
this is ruining my day
ill get back to you on that once i can get my friend to actually boot up the game lol
Had a couple ideas for some more decks so I'm gonna get those done today and try to upload the mod today
nevermind, changed how inflicting debuffs works and it works now
https://streamable.com/tlhsvm is this broken
damage taken?
i fucked up lol, ik why the xmult is triggering so much, ill fix that but why are they getting destroyed?
jokers which work like "Played cards with Spade suit give +5 Mult", and basically all DoTs count as attacks
meow
which can become stronger when the playing cards they are "attacking" have debuffs, like DEF Reduction and DMG Taken
the xmult should be returned in context.individual and context.cardarea == G.play
that looks intentional
you sure theres no code which destroys cards with that enhancement?
here is code
thats odd
put return inside the if?
i think it runs every context
Is there a trick to making the tooltips work? It's just {T:whatever_key} isn't it?
I think maybe the issue is that I'm trying to add the description of an object from my own mod, so I'm not sure the proper way to refer to it
it is
I have a card idea but idk if it’s even possible to make
“With this joker in hand, the Boss Blind is 20% weaker”
that's simple enough
ok
😭
i have a boss blind that just overrides score
i just checked end round + boss
oh, how would i do that
i know the end round stuff, but idk about the checking the boss blind
g game blind boss
if G.GAME.Blind.Boss then?
lowercase b s
oh i see, thanks :D
eremel will probably cry when they see my shaders for how horrible it is
nah, its good ❤️
😭
the FIRST element of rng in my jokers ❤️
please help
New to modding Balatro, so sorry if it sounds basic, but I tried finding the answer everywhere and couldn't find one. How does one tally all playing cards in the full deck that have a seal? I need it so that a joker gains chips for every seal that is in the player's full deck (Whether played already or not)
wrong channel but update your Cryptid
if you just want to play Cryptid smh
thank you
local seals = 0
for k,v in ipairs(G.playing_cards) do
if v.seal then seals = seals + 1
end
return seals```
G.playing_cards is the full deck
however it doesnt exist outside of runs iirc so keep that in mind for if you use this code somewhere it can be called from outside a run
in particular, the loc_vars of collection items gets called regardless of if there is a run
Thanks for the advice.
theres really no need for this
you could just do something, like:
if context.individual and context.cardarea == G.play then
local played_moss = 0
for i,v in ipairs(G.play.cards) do
if v.config.center == G.P_CENTERS.m_vrds_moss then
played_moss = played_moss + 1
end
end
return{
xmult = card.ability.extra.x_mult + (played_moss * card.ability.extra.x_gain)
}
end
its fine ❤️
Sorry, another question. How can I check to see if an played hand has an unscored '2' and if it doesn't have a seal, give it a random seal
mult doesnt change
huh, thats odd
Depends on the timing. You can manually iterate over the unscored hand or use the modded unscored CardArea
i believe its because played_moss = 0 is in the wrong place?
it shouldnt be
i could be wrong abt that tho
For every card in context.full_hand, check if it is in context.scoring_hand; and if not, check if :get_id()==2.
its indentation shit
Or use the 'unscored' CardArea
Huh, I didn't know context.unscored was a thing.
It’s not
its an optional feature
context.cardarea == 'unscored'
context.cardarea == 'unscored' you mean
so, something like this?
and it's not optional feature anymore i believe
oh
Yes but you need to turn the feature on
Or maybe not if aikoyori is right
For the random seal on the card, I can just use the same random code used for the Certificate Joker Card?
Use the SMODS utility functions
To poll and apply seals
I think it was “apply” anyways
It’s on the wiki
That is for create a sealed card, but you said you need to apply a seal to a already existing card, so the answer is no.
after changing the indentation it still dont work
...thats really weird, im pretty sure my code should work
can you take a ss of what your code currently looks like?
hmm
real quick, can you try putting a print(card.ability.extra.x_mult + (played_most * card.ability.extra.x_gain)) on top of the return
Didn't find 'unscored' in my smods file folder, I guess another update is needed on my end.
How outdated is alpha-1410a?
About a month or so
They’ve gone out of alpha
nothing printed
It’s beta time
Try checking for the key instead of the center
...huh, so the code didnt even bother to run
Can I simplified this chunk with SMODS utility functions?
@long sun I have Paradise Parrot, Wildheart, and Wild Draw Four; and Baby’s Building a Tower into Space
omg
Paradise Parrot and BBTS is in the Alpha :3 so you can play with them right now
Hm?
More anime girl Jimbos
Have you seen Legendere
(yes)
Parrot retriggers Wild Cards
(I literally use Bluestorm)
BBTS give you a Planet card for the poker hand if the hand contains a Stone card
Wildheart makes Wild also another Enhancement, swapping every round
Wild Draw Four makes you draw 4 extra cards in your next hand if the hand contains a Wild card
What’s Bluestorm
Ah I see!! Neat abilities :D
-# who
Here are mine:
Firey: If played hand has exactly 1 card, and it is a face card, destroy it and create a Wild Ace
Match: Gains +3 Mult for each played and scored Wild card (Currently +0 Mult)
Pencil: When Blind is selected, add a random Wild playing card to your hand
Woody: Gains +10 Chips for each Stone card discarded (Currently +0 Chips)```
mod that turns brainstorm and blueprint into anime girls
chat
(this also has synergy with two of my other Jokers that like Aces)
what if i add boss blind that kills stencil
empty joker slots are filled with eternal egg
-1 Joker Slot?
nah that's too forgiving
Very interesting
What’s the theme?
I have a Joker that creates a Temporary Negative Ace of Spades in hand at the start of each round
I’ve had an idea sort of like that
BFDI S1 contestants :D
But it’d be a Boulder
🔥?
Sort of! They're just objects in general
“🔥?”?
Ah
fill your joker slots with a dud
THE DUD
eternal dud
NOOOOO
It’s the question mark that confused me
See, personally I’d prefer the Dud to be useful in a niche scenario
I think all Eggs are too useful
Maybe 1 Egg
Maybe debuffed eggs?
Not nichely useful
Not useful at all :}
Eternal Egg would be useful with Jokers that care about sell value
Debuffed Eternal Egg only with Abstract
I do have a Boss Blind that shuffles Stone cards into your deck
unhanced
i don't know the correct terminology
I call them Disenhancements
unenhance is removing enhancement
Aha, maybe you could call it The Exhaust
Because Enhancements can override them
It’s called The Rock
no I'm replacing the enhancements
It could work the other way around
yeah
I just don’t intend to create those effects
cards in hand are permanently debuffed after scoring
Disenhancements is still a valid name
I also have…Stheno
Hello ! I would like to create my Balatro mod, but I don't know what tools to use/way to go and I can't find any ressources about that online... Could somebody maybe help me ?
add discovered = false like so
https://github.com/Steamodded/smods/wiki/Your-First-Mod best bet is to go here
thanks ! 💜
didnt work somehow, it's still discovered
it will be undiscovered on new profiles
well is it possible to do it in the current profile
or is it gonna be some save file manipulation stuff
reset your save
If I had a joker that generates a random joker, how can I make it so it picks from a small list that I picked out from instead of entirely random, and is there a way to not get a duplicate from this list, unless you have Showman?
you could just make a new profile
or back the current one up
yeah you can dupe it
One of these days I need to separate my consumables, jokers, enhancements, and blinds into their own files and stop working directly in main
nah if its all in one file you can never lose it trust...
Trueeee
debugplus
eval G.P_CENTERS.yourkeyhere.discovered = nil
then it should appear undiscovered
currently making my first joker. Dont know how to reference the localization file
tips?
you don't
you just write things in the en-us.lua
also you don't have key
like that?
How can I get a code for something from vanilla if I need it? And can I get it at all?? 
For example, create something of my own based on this or just learning how it works?
@simple mural , you can unzip the .exe and then take a peek inside.
Really? I'll try, thanks.
Hi Aiko, I was wondering how do you test the application of your editions? I can't reliably set a custom edition without crashing the game. But when it randomly spawns, it does work!
Balato loads the mod but not the joker D:
i just use Cryptid edition deck lol
lol
yes
Can I find images there too?
and then in en-us.lua you add new entry in Joker for j_modprefixyouputinthejsonfile_myfirstjoker
How did you preview what your shaders would look like? I am trying to find a place or tool I can use to tweak shader logic without having the dev loop of reloading the game over and over
glsl.app for initial
and i just load that shit in game
thunk should make the update like
Balatro season 2
what doesn't load
show en-us.lua
wait hmm
you have to use
SMODS.Joker
instead of declaring local myfirstjoker
🤔
like, where do i put SMODS.Joker
ah
didnt appear in the pokermon mod, thats why i didnt saw it
"undefined global" says my environment.
i will try it out
Some big mods like to like list out their items then use a constructor at the end
I recommend checking this instead https://github.com/Steamodded/examples/blob/master/Mods/ExampleJokersMod/ModdedVanilla.lua
thats something i hoped to find in the documentation 😄
ah
found it
i need to use ' instead of "
not really.
ok still doesnt appear
which one
"prefix": "Lilith",
"main_file": "main.lua",
"priority": -20,
"badge_colour": "008000",
"badge_text_colour": "ff00ff",
"display_name": "LGG",
"version": "1.0.0",
"dependencies": [
"Steamodded (>=1.*)",
"Lovely (>=0.6)"
],
"conflicts": [
],
"provides": [
],
"dump_loc": false
is this the entire file
this is my entire file
ong
ong
omg i am stupid
main.lua is basically empty
print("Hello World")
uh
what do i have to put in there
the Joker code
no thats what belongs into the joker file
what do i have to put in the main file 
THE SMODS.JOKER
PUT THAT IN THE MAIN FILE
do you want to structure the files now
if so assert(SMODS.load_file("./jokers/jokers1.lua"))()
ok, did it, works now 😄
people are not going to steal your mod ideas. Everyone here is trying to make their own things or help others. It's ok
did you know that at least 5 mods has the hand selection linit mechanics
ok so the good news is, the joker can be found in the collection
the bad news is, the description is not loading
send screenshot of en-us.lua
We must all release the same mod I've decided
This way development can resume
lowercase j in front
oh lord. This whole time, @tall wharf , I have been modifying the wrong shader. I thought I was working off of holofoil but no , i was accidentally working off of negative. This explains why nothing made sense
ERROR :: Loader :: Found invalid metadata JSON file at C:\Users\Arko\AppData\Roaming\Balatro\Mods/BalatroMod/.idea/settings.json, ignoring: [SMODS _ "src/loader.lua"]:226: id
for some reason it works but the descriptions are still not appearing
i guess i just try out to make a bit more before i figure out how the hell i make localization work
What is the overall term for all foiled, hologram, and polychrome playing cards?
Because I find calling them "Cards with editions (except negative)" is too long.
thats called Edition 😄
positive editions
I'm more expecting something like "[Something something] Card",
"scoring editions" might get the idea across, assuming there aren't any mods adding more editions that score and/or that you want to include them if they exist
other than that, there's no term
Non-base Edition?
Can I call them "Editioned Card"?
no, because that implies negative is included
if you want to exclude negative, you're gonna have to say it
Honestly negative included or not is not my main concern.
I just need a shorter term than "Played cards with any editions".
I'm not sure you're gonna get anything clearer than Played cards with editions (except Negative)
even if you don't care whether negative counts, "with edition" is as short as you're gonna get, i think
Oops
Hi folks, is it possible to also apply a texture with a special edition? I have my own boarder I woudl like to use to overlay, source of like how enhancements work
Vanilla just calls them foil, holographic or polychrome
How to change key prefix when using :extend{?
Oh Hi John!
I have a new edition with a key of 'ghostRare'. I have a prefix of my mod for 'Fox_', is this how I should be assigning an edition?
Hihi! Two questions:
- How can I check if the played hand is a High Card?
- How can I check if the player just used Pluto?
Would this be too illegal?
Sweet! I got my edition working! And the first one it ever appeared for was an @tall wharf card!
Actually ignore the first question, I found that out :}
wtf scoreless
context.scoring_name == "High Card"
2.
if context.consumeable.config.center.key == 'c_pluto' then```
my boy
have you tried not hovering over it
the last time I saw your code your mod prefix was Lilith with a capital L but here you're looking for a key with lilith?
@waxen mesa
yeah i made it small
sure XD
potential deck or challenge idea
Start with 10 hand size
Full Deck starts with 5 copies of each card (so 260 cards)
When a card is discarded, remove it form deck
would this work and does it already exists under some mods
gaming in general :}
might help if you shared the localization entry and the booster pack implementation
thinking about it i don't remember the game ever crashing for failing to find a localiztion entry though hmmm
another silly chal idea
Strength in Number
Deck starts with 52 2s
Start with Eternal Negative Cartomancer (if it's funnier to not have them that also works)
Playing Five or a Kind, Four of a Kind, or Flush Fives scores no point for the entire run
Quick question: Can I give a Joker an ability that triggers when it's obtained?
mhmhm! lemme check
i know Juggler and Drunkard do that
same with being sold
what is mode r
but a chal called the Cure, where you start with 52 Stone Cards and the goal is to have 0 stone cards by the end
maybe custom Ante 8 Boss with "Mult is set to 0 if Full Deck contains any Stone Card"
add_to_deck = function(self, card, from_debuff)
//...
end```
Hypercuration
Start with normal deck
Custom Ante 8 Boss with "Mult is set to 0 if Full Deck contains 6 or more cards"
Is that what I need?
mhmhm!
Where do I put it?
fuck custom Ante 8 boss basically means any arbitrary run-spanning goal can be implemented
just load using jokers/joker.lua, without the ./
you'd have to ban director's cut and chicot but yeah
doesnt help, still cannot be opened in mode r
can you show the new error?
it's fine no one will miss chicot
huh 🤔
is there to implement a joker that triggers when you sell other jokers or consumables
something like a Joekr that allows you to sell anything for double the normal sell price
context.selling_card
so good for tarot spawning builds
thank u
oh yeah and how do you grab the price of the card that was just sold
context.card.cost or context.card.sell_cost depending on which price you mean
mind doing a icacls "consumables/vegetables_cards.lua" in your cmd?
go to C:\Users\Arko\AppData\Roaming\Balatro\Mods/BalatroMod/ in your windows file explorer
then in the "url bar", replace the text with cmd and press enter
then input the command I gave you and show the output
that's impressive haha
weird error you got then; I would have expected some sort of "file not found" instead of "could not open in mode r"
oh interesting, that's the default error smods gives... but why so uninformative 🤔
no clue but I've seen it before so just search this channel with some of the terms in the error
with the release of the new Steamodded update. Can I finally get rid of Talisman/are xchips natively supported ? Talisman mess up a lot of things with my game
xchips are supported by steamodded now yes
good to know !!
Shorts Creator
When the Joker to its left is sold, add double the price sold to the sell price of the card on its right
aka Double It and Give It To The Next Joker
this is also a reference to how short form contents somethefuckhow rakes in so much money and also how money centric they can be
obviously phenomenal money generator
but you do have to keep buying and selling jokers to feed the money machine
which can be weird to your build because you're basically always wasting 3 slots for money generation and not contributing no mult
but it is a fuck ton of money
Riff raff my beloved
Hi folks, anyone else having a problem using set_edition with a custom edition in the newest version of Steammodded?
i'm not having an issue but then again i'm using the newest beta as opposed to just edition
how do i make a Joker script trigger when a boss blind is selected?
G.GAME.blind.boss is set when boss blind and context.setting_blind is true when entering a blind
weird why is it clipping like that
how do i get the uhhhh
destroying card part to be earlier
its currently in context.after rn
does anyone know how the hell to enable autocomplete? ive tried virtually everything, putting steammodded and balatro source code folders in the workspace, i've tried doing both that and putting my mod's folder in the workspace, and nothing has worked (im using vscode by the way)
thanks
and I'm almost pretty sure that's the step you want to check if it's getting destroyed by Madness or Ceremonial Dagger (which set card.getting_sliced or something like that)
I do not know if smod handles this for you
ok
is it possible for a joker to change the requirement needed for a blind? or does it need to be done in the base game's blind script or something
so I have something like this inside of one of my custom blind's disable effects, you could probably do something similar inside a Joker's calculate method if you set the context you want to do it for
G.GAME.blind.chip_text = number_format(G.GAME.blind.chips)```
ok cool
Show code
for context, this is also exactly what The Violet Vessel/Wall do on disable, so if there's an effect you already know exists in the game somewhere but you want to modify in some way for your own purposes, you can try to find where in the code the base game does it and try to understand how the effect works from there
probably there is somewhere in the game that does what i'm trying to do (reduce the required chips for the boss by 30%) but i don't know for sure
ok thanks
oh looks like they added a can_calculate check that handles cards being destroyed
neat
yeah disregard my prior comment about daggers
bump
This is for jokers primarily
the base values of a joker, unmodified by gameplay, are stored in the config, right? Are those accessible through card.config.extra, or wouldn't that work?
it works!
i'm totally new to Balatro Modding, why does it show "+nil" and not a number ? (I want it to be "+10" / "+0")
I referenced it with self.config.extra and it seemed to workf o rme
rather happy I don't have to have another variable sitting around to store the initial value
yeah, I thought it'd work to, haha. I'm assuming I'm making an error somewhere, so I'm trying to figure out where, because it returns both self.config.extra and card.config.extra as nil. But that's probably me missing a step in how the information is being passed around
you're not passing the variables to your loc_txt properly in your loc_vars!
Does anyone want to see the idea in #⚙・modding-general ?
calculate = function(self, card, context)
if context.joker_main then
return {
Xmult_mod = card.ability.extra.xmult,
message = localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.xmult } }),
}
elseif
context.end_of_round
and context.main_eval
and G.GAME.blind.boss
and not context.blueprint
and not context.retrigger_joker
then
card.ability.extra.xmult = self.config.extra.xmult
return {
message = localize("k_sugar_replenished"),
colour = G.C.FILTER,
}
elseif context.after then
if card.ability.extra.xmult - card.ability.extra.xmult_loss >= 1.0 then
card.ability.extra.xmult = card.ability.extra.xmult - card.ability.extra.xmult_loss
return {
message = localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.xmult } }),
card = card,
}
end
end
end,

This seemed to work for me
this is going to be fun figuring out how to keep the UI from disappearing between waves
currently I'm doing some patch shenanigans in function Game:update_hand_played(dt) but I may need to do something else
It comes back when I reload the game, and the effects all work despite not visibly showing the text so uhhh at least it's functional?
what do i need to do if i want to properly destroy a playing card
where tf is the chariot code
if context.destroying_card runs through every card like context.individual or context.repetition so now you can do logic on context.other_card to see if it's the card you wanna destroy
Thanks it worked !
then you need to return a specific thing to destroy the current card
no
Can someone explain to me why does the condition is true whenever I play a High Card or not ? I probably misunderstood something but I can't find what
(I want the hand to be exactly a High Card)
Hello, I'm a newb in coding, but is there a way to make this stake from Cruel Blinds show after the Ascendant stake from cryptid? I'm just talking about the visual. Any help is appreciated cause I'm stuck right now. Thanks.
so uh, this should work right?
should do yeah
you don't need context.individual though
does someone know what's wrong with my game? it crashes every time a modded boss blind starts
nevermind i figured it out
seems to be a problem with the Distro mod
...doesnt seem to work
Poker hands is a table of all valid hands in the played cards, therefore high card is always present. You want to check context.scoring_name instead
is this right?
Okay thanks !
it should be setting card.ability["card_to_destroy"] to the chosen card in this
Ohhh that is exactly what I needed
thank you
Does anyone know how to overwrite the ability of a card in the base game using steam modded? Whenever i use the take_ownership function and add a new calculate function it resolves the old effect and the new one.
SMODS.Joker:take_ownership('ceremonial',
{
calculate = function(self, card, context)
if context.setting_blind and not self.getting_sliced and not context.blueprint then
print("calculate resolved")
end
end
})
without the comma after boss but yes
ok thanks
this is the code that breaks everything
you need to return something, if it's not an effect table do return nil, true
-# what is that crop
tasty tasy code blocks
also 2 shaders
wdym?
bruh that is pure schizo energy i love it
removed the comma but the game still throws up the same error
you're having a talisman incompat issue btw
pretty sure there is a "then" pretty close to it
i've been reading this thing for a while and i still have no idea what the issue could be can someone help me :d
so then what should I be doing instead of what I'm doin?
the editor should tell you where the syntax error is
use to_big(nr) when setting instead of nr; also see https://github.com/Mysthaps/LobotomyCorp/blob/main/LobotomyCorp.lua#L376
is there a better way to define calculate function for editions
or is it just not
real
thanks!
What do you mean?
if only theres a function to manually destroy a playing card without needing to go through that....
What are you trying to do?
basically, after playing a hand i want my joker to destroy a card (which should work like this below)
Every object uses calculate functions now
I think edition docs just got missed
They need a bit of a more complex check though because they deal with jokers and playing cards
but uh, the thing is, the context.destroying_card seems to be in before or maybe even before before, how would i achieve this
It’s not
so basically?
It’s after everything scores
its not?
you're just meming (memeing?) with the cropping at this point right
it prints 5 "aa" immediately when i play a hand though
wdym? Is the code ok?
The heart was on purpose
Yes the game does all the calculation almost instantly and then does the animations
okay cute haha
Censorship is important all of us have only had original ideas >:[
The code looks fine to me, but I've never directly had to interact with talisman code, so I'm just giving you my best guesses. Try it out and see if it works I guess
crap, how can i destroy the card after the scoring animation is done :(
By doing exactly what your code says 👍
okie dokie 👍
wh
but dont i need to go through context.destroying_card to destroy the playing card?
That’s what this does?
theres this part in context.after that selects the card to be destroyed
kinda hoped it would somehow pass it to context.destroying_card after that
After is after everything
Select your card earlier
thank you
oh
oh wait, so if i were to already destroy the card in context.destroying_card, the animations will still be fine right?
Yes
💔
What about this is against the server brother
I guess I don't get to ask eremel anything man
my disabled ass thought it would remove the card from the playing hand immediately 😭
thanks :D
I have no idea about creating poker hands
thank you it works as intended now
probably the "fuck with" if i have to guess
Maybe autumn would know?
but i can still send it though, weird


