#đ»ă»modding-dev
1 messages · Page 22 of 1
While composite hands is a really fun mod to make, I am trying to figure out some kinks about it
Feder what?
XD
can I at least make the case of the function names consistent?
I have only 5 projects
meanwhile you have like twelve projects
man i really wish that it wasnt so difficult to set up a "Select and Use" button for oddities in packs...
like how you can Buy & Use consumables in shop
huh, I guess there's only one or the other in vanilla packs
but that's special-cased for cards in shop
yeah; since you Select most oddities, i dont want it to not be an option to Select ones that could be Used (think the case of the dollar bill oddities, which are always usable)
oh and then controller stuff. groan.
i did get controller stuff working in oddity packs tho :)))
Oh thatâs good
turns out theres a separate function to hook/inject to for controller related stuff for card buttons, its not just use_and_sell_buttons
i think its card_focus_ui but i forgor if thats right
you might need to do similar for Fuse
(and alchemy packs, actually)
tbh I might still just port it and decide later if I should use it, idk
i actually forget if the oddityapi i sent you has a card_focus_ui hook, or if i did that later; might be worth checking out
uhhhh loading yhem at all
they had a nil prefix and :lower()'d the mod prefix even if it should have uppercase letters
and you cant have multiple underscores in a seal iirc
kk
I am not sure too, wanna send me an updated version anyways?
In 1.0 when you add a Suit it's added to all Decks ? How to not to ?
I should add API support for that tbh
as of now you would have to modify Back:apply_to_run() to accomplish this, but it's a good thing to have as part of the API
iirc feder's musical suit did this on 0.x
yep
Yeah I ended the poll cause the results are clear, time to port fusion jokers!
i cant recommend the way this is implemented, it can cause crashes
i had implemented a hook for Game:start_run in dankranks to remove its ranks from the starting deck; when i get home i can grab that code
(note that standard packs and other random card generation effects still will create those cards)
(the crash occurs if the suit/rank that is removed in this way appears during the loading animation at any time during the play session, then the deck preview popup will crash)
it might be possible to just patch the loading screen cards to omit your cards im not sure
oh yeah... that reminds me
i wonder if an "omit_from_pool" function for centers would be a good addition to smods...
remove from specific pools?
like instead of doing my jank yes_pool_flag's that update every frame, the đ§» could have a function that checks "hey do you have any 2s in your deck" and if it's rolled for create_card but fails this function, the card is rerolled
or however that pool stuff works i dont really understand it 100%
Idk how the pool stuff works but couldnât you only turn it on and off when relevant?
i could probably not run it every frame yeah lol
The game turns off cards as theyâre added to the deck
And then turn them on when theyâre removed
yeah i could probably just update it on add/remove
but thats not the point
this could be arbitrary mid-run-unlock conditions
If itâs arbitrary then the only common point is right before theyâre generated
groan no i mean doing it as a function of the center
Otherwise each object ought to have its own flag switcher at the appropriate time
oh yknow what, the pool flag stuff is already checked for every center in the pool right? its probably not that hard to shunt a function call in there
i really oughta learn how to use github
so i can actually add stuff to smods instead of pestering aure :(
i mean ive sent a lot of stuff to aure in dms here lol
That works too
I just forgot the name of the command that generates the thing that people used to use before GitHub
but im sure they'd rather the brunt of implementation wasnt all on them
âHereâs an unsuspicious zip file, aureâ
@frosty dock thoughts on this?
What am I missing?
morning chat
Morning
sounds better
sound like a good add to smods?
?
What were you guys talking about?
Morning
uhhhh a function to omit centers from pools
similar to how yes/no_pool_flag and enhancement_gate work but as a function that can have arbitrary requirements
Oh I see
because some cards would want like... suit_gate, rank_gate, seal_gate, etc... this would be a "silver bullet" solution to that problem
rather than just adding tons of flag checks it could just be a function for the api user to determine a valid check
Time to get badges working with my editions I suppose
@shell timber Donât you wanna begin porting morefluff to 1.0 before it comes out?
it is not finalised and also exams
I see
đ
Just FYI, there are a ton of cool things about 1.0 that you could take advantage of
let 'em take their time, no need to strongarm people into updating
True
a label that works đ
now to figure out how to get the mod label on these too
đ€
Is this 1.0 or 0.9.8?
0.9.8 atm
I want to see how you did it because I was having issues making Edition badges show up
G.localization.misc.labels[self.slug:sub(3)] = self.name
I can make cards show the Consumable tooltip (and display a badge) but not a new custom one
Lemme know if 1.0 is out
how do you define your edition?
Whatâs this wizardry
Itâs the built-in Negative edition
I just apply it to cards
I'm building it as an API
yeah but Idk what self.slug:sub(3) is
oh that's just grabbing the name of the edition to throw it in the table
so like, greyscale in the picture above
have you looked at how negative consumables are handled? I know there's some wizardry in the code aorund those
Yes, I made a lovely patch thatâs supposed to do the same but with my custom tooltip, except it doesnât work
Again I can make them display the Negative Consumable tooltip instead of the vanilla Negative Joker tooltip
Because if you make a card Negative thatâs what naturally appears
(the Negative Joker tooltip)
hmmm
i should release mystblinds for 1.0.0
I'm currently trying to get the tooltip to show properly so will get back to you when I've figured it out
I could maybe help but Iâm not home to check my code
Me yesterday looking at MystBlind to learn how to make a Blind:
I-
I don't think so?
Was it working before?
yes
when
before the so called loader improvements
this is why i have not touched 1.0
hm okay
but blind atlases were broken before, I'm pretty sure
it was more recently that I actually fixed that, though I'm fairly sure I didn't touch loc_def
but I'll check
might've missed a function
there's a patch for that one, but I may have forgotten to change something I changed elsewhere
I-- what??
good morning chat (it is midnight)
it's like 10:40 here
good 5pm
am or pm you will never know
(it's 9:47pm)
i know
what is it
pm
just to confirm this is the most recent commit?
Hello arachnei how has your vacation been
yes
pretty good so far đ
Got a joker idea again, -The Eraser: The first card that is played is transformed into a wild card
Could be interesting with Wildheart
âïž
Clodsire!
I'm currently working in a mini joker collection that has 21 jokers
I already have 3 done
mini joker collection
I intend to release my small mod with 10 Jokers
Codex only has like 9
(1 coming out in 1.2 when steamodded 1.0 comes out)
little
little leauge jokers
babu goo goo dada jokers
I think Iâll release the beta later today for testing finally
Baby joker: gives X-900 mult when a queen is played
Iâve been sitting on it for weeks
yesssssssssssssss
- E (joker): Gives E
L Joker: Gives L
U joker: Gives U
wait the 1.0 version needs it?
Alphabet Joker: Creates the entire alphabet into your deck
Does the what need what
does the 1.0 version of your mod need oddity API
well that's not right
\o/ thanks lovely
oh that;s super neat
I can't find any issues with defeat
tf
no it was just for testing purposes
Shader? Yea. Effect, nah
i just tried with reducing hand size by 5 and it definitely happened
they currently work for any combination of +mult, + chips and XMult
what is the blind table this is on and what are you doing with it? it works on my end passing it directly to the constructor
the issue with loc_def was dumb btw, I somehow swapped it for def
here's the thingy
https://github.com/Mysthaps/BalatroMods/tree/main/Steamodded/MystBlinds
i just updated it with the 1.0.0 code
new commit should fix loc_def and sprite jank
is there a way to view full crash log? it is cut on window edge
0.9.8? use the debug window. 1.0.0? you can scroll
what's debug window
a python script that serves as a debugger
In Steamodded files, there's a python file tk_debug_window.py
logs are forwarded to it if it's running
How do I use it? it exit instantly on run
is it possible to make a localization mod for an entire new language
is there a way i can make a joker recognize the first card played and get it turned into a wild card?
It's possible, check of Midas' mask does it
I just run the tk debug script with Python
but one thing i'm getting angry at is the fact that i can't find a way to make only the first card the triggered
You can check if the current card is equal to the first card in the scoring hand
I think that would work
Otherwise look at how Photograph works
Instead of looping just change to context.whatever_hand[1]
yeah, with 1.0 at least
i hate this error
oops, I'll have to wait then
rn I only have the modified m6x11plus that fully supports Vietnamese
Missing an exclusion of context.repetition somewhere
do i need a context.repetition?
Some specific contexts (context.individual, context.cardarea == G.hand and context.end_of_round) also run through context.repetition, which had a different return.
So whatever joker is causing this would need something like and not context.repetition
like, i play i card and the game crashes still
idk why
time to figure it out i guess
What exactly is this joker supposed to do?
turn the first played card into a wild card
check if context.scoring_hand exists too
Oh wait this doesn't have a proper main context too
i just put it in there
When's the transformation supposed to happen?
Doesn't midas does it before?
Check jokers that use context.after
i said it wrong
I think there's something before context.after but I dont remember
i want the card to be transformed before its played
Then put the same context than Midas' mask use
i deleted every effect step and he is crashing
i just wanted to test
oh my god
i hate myself
i don't know what is causing this
Did you just add Midas Mask code or also the contexts that are above it?
yes
but i don't think i need to put blueprint
because it crashes like repetition
btw here are the sprites of the joker i'm trying to make :p
I think the issue is with the keys that context.scoring_hand has compared to what you are expecting. I think you're missing some context too to ensure that context.scoring_hand has the necessary information.
Maybe try for i=1,#context.scoring_hand and then access cards with context.scoring_hand[i] (or is it context.scoring_hand.cards?)
Artwork for Syzygy.
That's not valid Lua syntax AFAIK
Donât you need to do ipairs(context.scoring_hand)?
with the ipairs
What does that line look like?
for i = 1, #context.scoring_hand do if context.scoring_hand[i]:is_face() then faces = true end end
You're missing some context that ensures scoring_hand exists
it could be if context.scoring_hand then
Have you shared the whole block of code earlier?
nope
but its working
now
if context.scoring_hand then
if self.ability.name == 'The Eraser' and not context.repetition then
local faces = {}
for i = 1, #context.scoring_hand do
if context.scoring_hand[i]:is_face() then end
end
for k, v in ipairs(context.scoring_hand) do
if v:is_face() then
faces[#faces+1] = v
v:set_ability(G.P_CENTERS.m_wild, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
v:juice_up()
return true
end
}))
end
end
if #faces > 0 then
return {
message = localize('k_gold'),
colour = G.C.MONEY,
card = self
}
end
end
end
end```
the joker changes the card into a wild card then it just tries to turn the entire hand into a wild card aswell, but it fails
You have redundant stuff in there
sorry, i'm still new to modding this game
This isnât doing anything
and i need to say sorry if i ask too much
So does it turn everything into a wild card?
just the played card
it says the message for the cards in hand but they are not affected
And just face cards?
yes
i still need to make this joker turn the first card in any hand get turned into a wild card
I havenât done any joker stuff myself yet, but donât you just need to break out after you find the first face card?
but i don't want to make it turn only face cards
And context.scoring_hand just contains the cards in the hand right?
if self.ability.name == 'The Eraser' and not context.repetition then
if context.scoring_hand then
local faces = {}
for i = 1, #context.scoring_hand do
if context.scoring_hand[i]:is_face() then face = false end
end
for k, v in ipairs(context.scoring_hand) do
if v:is_face() then
faces[#faces+0] = v
v:set_ability(G.P_CENTERS.m_wild, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
v:juice_up()
return true
end
}))
end
end
if #faces > 0 then
return {
message = localize('k_upgrade_ex'),
colour = G.C.BLUE,
card = self,
}
end
end
end
end```
idk what is causing it to make every card trigger
The return I think
you can return nil
still softlocks
Maybe it's because it's missing some context? Idk why it would softlock
This isn't checking for any specific context other than excluding context.repetition, try adding and context.cardarea == G.jokers and context.before.
hey do any of you smart lads have any fkn idea on how to check when a lucky card is triggered, ive tried using both context.other_card.lucky_trigger and if self.lucky_trigger then how ever nothing i do seems to work, this is my code rn if anyone is curious
luckyjoker.calculate = function(self, context)
if context.individual then
if context.cardarea == G.play then
if context.other_card.lucky_trigger == true and not context.blueprint then
return {
message = localize('k_plus_joker'),
colour = G.C.RED
}
end
end
end
end
it might be that your function isn't actually getting run? In 0.9.8, you need to it be defined on SMODS.Jokers.j_yourslug after registering
Have you checked how Lucky Cat does it?
yea im usin 1.0.0 since makin jokers for cryptid, this is how i called another one i made and that one works
@stiff leaf Here's Syzygy in action.
yup uses context.other_card.lucky_trigger, and even when copyin the same structure still doesnt want to work
oh my bad then, I just assumed that since you didn't just shove it on the constructor
Did you see if there's an implied (negative) context in thunk's if-elseif Tower of Babel?
isn't it just joker_main
niceeee
no glitches with using 6 planets? also how does bp/bs compatibility work (and duplicates of the joker ig)?
What do you mean 6 planets?
Also no BP or BS because it's redundant
Nothing to balance once it's rebalanced
It probably stops searching after itâs active
You see, I dont think that far ahead
not that i can see, this seems to be the entire code for it
More importantly, it doesn't count doubles
There's probably a better way to do it but I was too tired to think when I wrote this
self.ability.extra.syzygy tracks when it's active or not; it's not necessary, but I wanted to have it
Hence not ⊠syzygy ensures it only activates this part when it has less than 3 different Planets
Again, the elseif at the start implies all previous contexts don't apply
One of them could be relevant
try adding and not context.end_of_round
yea still nothin haha
Are your Lucky Cards triggering?
yup
Try printing lucky_trigger both in calculate_joker and maybe when the Lucky Cards proc
yeah, using sendDebugMessage() to track where your code is going helps
I see i = 1 a lot what does that represent?
Thatâs assigning i the value of 1 but youâre probably seeing it in for loops where that is the start of the loop instead
So what is i specifically?
alright cool
Super important that i feel like i need to understand i see cardarea == g.play a lot
can you break down what that does
Card area and g.play i see a lot
ok, now that my joker activates only when i play face cards, how do i make him affect other cards, and especifically the first one
and sorry again for asking too much
The game has CardArea objects to hold Card objects. context.cardarea is a variable in the context array thatâs supposed to be a CardArea, and many Jokers check to see if the specific CardArea is the CardArea of played cards
Remove the check for Face cards
Presumably
Where would you find the contexts for all of these functions? Is it in like the base game code?
For example context.scoring_hand how are do people know scoring_hand is what you need to type out
You can find them implicitly in thunkâs if-elseif Tower of Babel, or looking for a specific context key and seeing where itâs called
where is the Tower of Babel
Usually you can find it by searching most Joker names, but itâs calculate_joker in cards.lua, I think?
good ol if else
if self.ability.name == 'The Eraser' and not context.repetition then
if context.scoring_hand and context.cardarea == G.jokers and context.before then
local faces = {}
self:set_ability(G.P_CENTERS.m_wild, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
self:juice_up() --This makes the joker get enhanced by itself
return true
end
}))
return {
message = localize('k_upgrade_ex'),
colour = G.C.BLUE,
card = self,
}
end
end
end```
I couldnât find a GIF of Bartâs internal monologue but image that
CTRL F the joker name and 99% of the time you can find the logic for it.
What function do you think id use for the joker to search for a specific hand played like .context.played_hand? Or is there another key for that
i tried alot
and still no way to make the cards i play get affected
What do you mean?
its just crash frustration
FYI that self:set_ability is trying to make the Joker Wild instead of the card
Because the Joker is the self
I said set_ability not juice_up
oh
You want to call it on a card that isnât the Joker
Maybe something like ⊠and context.other_card == context.scoring_hand[1] ⊠but you need that context.other_card which probably means you need context.cardarea == G.played instead and context.individual.
Try looking in the code for individual = to see where that context is passed to calculate_joker to see whatâs available where and when
I donât know if all these context key names are correct
Again Photograph should help
Or Hanging Chad even
You only need the conditions, minus the repetition part probably
You donât need the rest
Going to back the full house idea i had a while back, if.self.ability.name = fullhouserock then
If. And Iâm not sure where i would go from here to make it check if you are playing a full house yknow what i mean? Like what do you think would work?
Sorry meant to @ this
I'm pretty sure you just need the context.scoring_hand[1] if you want to change the first card
Hey, can someone help me? I'm honestly stumped rn
you don't need to iterate over it and you don't need anything to do with faces
so do i just let the set_ability?
I'm trying to use G.FUNCS.skip_blind(), but it requires argument e, which I can't pass it because e is the UI component that called it.
Is there a way around that, or shall I just write my own version of G.FUNCS.skip_blind()
G.FUNCS.skip_blind function
G.FUNCS.skip_blind = function(e)
stop_use()
G.CONTROLLER.locks.skip_blind = true
G.E_MANAGER:add_event(Event({
no_delete = true,
trigger = 'after',
blocking = false,blockable = false,
delay = 2.5,
timer = 'TOTAL',
func = function()
G.CONTROLLER.locks.skip_blind = nil
return true
end
}))
local _tag = e.UIBox:get_UIE_by_ID('tag_container')
G.GAME.skips = (G.GAME.skips or 0) + 1
if _tag then
add_tag(_tag.config.ref_table)
local skipped, skip_to = G.GAME.blind_on_deck or 'Small',
G.GAME.blind_on_deck == 'Small' and 'Big' or G.GAME.blind_on_deck == 'Big' and 'Boss' or 'Boss'
G.GAME.round_resets.blind_states[skipped] = 'Skipped'
G.GAME.round_resets.blind_states[skip_to] = 'Select'
G.GAME.blind_on_deck = skip_to
play_sound('generic1')
G.E_MANAGER:add_event(Event({
trigger = 'immediate',
func = function()
delay(0.3)
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({skip_blind = true})
end
save_run()
for i = 1, #G.GAME.tags do
G.GAME.tags[i]:apply_to_run({type = 'immediate'})
end
for i = 1, #G.GAME.tags do
if G.GAME.tags[i]:apply_to_run({type = 'new_blind_choice'}) then break end
end
return true
end
}))
end
end
what is in the context.scoring_hand table?
idk if this is correct
send me your code in DM
sure
k
For Steamodded you donât need to check the Joker name. I suggest looking at Jokers that care about hands played to see if any of them help
What do you think it does?
Why do you want to call it?
to add a keybind to skip blind
Isnât there one for controller players?
No, they just select the Ui component and then press a.
It's something I could emulate, I'm just wondering if there's a way around the UI check.
Canât the keybind select the UI component?
Some UI elements can be identified by an ID
Regardless, yes I can emulate a Ui press. I'm just wondering if there's a nicer way of doing it; like calling the function.
edition api coming soonTM...
it currently lets you add new editions that can have a combination of +chips, +mult and Xmult effects, and lets you add them to cards via consumables. What else do you think needs adding at this stage?
or a custom effect (like jokers)
okay this is just baffling me
ive basically as far as ive figured out, just replicated walkie talkie or odd todd/even steven code, but changed the specific cards to proc the effect, and the specific bonuses
the goal right now is to get this card to work at all, with "score with a king and a jack, get mult and xmult"
wont even do a thing
hmm
actually. i think im making it so it needs a card thats both at once?
yeah seems like the issue
iicr, to make the mult work you need a mult_mod in the return section
oh mb then
x_mult was the one
got the end product down, just need to get the "if you have two different ranks in one hand" working
question
when we migrate to 1.0, how can we make things happen at the beginning of the opening the game (globally)? I heard there is no init function anymore
the entire file is the init method
what are you trying to do?
a new pack that opens (to offer) playing cards
oh i see
also it's for my highcard mod so it opens xplaying cards pretty much
@mellow crag feder i remember you have packs in codex, did you do that as well?
setting new states and all
oh we didn't do states
we latched onto the opening of standard packs
like, the state we use is the standard pack state with a flag that says its an alchemy pack
so they would share the probability of generating? is that the case
i think so? the rates don't really connect to the state
(like standard pack would generate less because the game just decides to generate standard packs and sometimes they are alchemy packs)
ok so
the packs generate normally
opening an alchemical pack goes into the standard state
also, just curious, why not latch onto consumable packs? since they are consumables
they have to go to consumeable slots and not get used up
ohhh
cuz standard packs only has a pack of cards right
i see i see
hold on
is booster pack api gonna be a common thing in SMODS 1.0?
hopefully
it isnt yet
tldr no because the new packs are different objects, they just put the game into "standard pack" state with a flag set to change behaviour
(i do the same thing in oddityapi)
finished porting Fusion Jokers!
btw is the current github of codex ported?
no
is oddity available yet
no but i can send u the latest files in a bit
many thanks!!
do you also want to send me a mod to fill up that page? (sneakily asking to try thac)
the file i sent kenny is the same one i sent u i literally downloaded it from our dms hahah
eight hours remain... :/
i've been looking through other people's mods to try and find a way to change the name and description, but i haven't figured anything out. is there a way to change the text on base-game jokers?
i found out how to change just the names on planet cards, but replicating it on jokers doesn't seem to work
Sweet! Did you made it handle config extra values?
Not yet, I am not adding new features yet, though I will look into this when I get home
I already know how I wanna do this
Ah ok
how would i go about making a custom challenge
which version of steamodded, 0.9.8 or 1.0.0?
i believe i'm using 0.9.8?
yup
i'm not touching custom jokers just yet, just a simple challenge for now
#1211082061251874866 message here's an example challenge I made, you can use it as reference
sweet, i'll pick this apart đ
also this if you'd like
(it's old
i should do an overhaul sometime
this repo is a mess
@zealous glen or anyone else has modded jokers before i get to calculations is everything looking in the right direction? Nothing thatâs a âthis will not work because of thisâ in this code?
init func missing an end
then prob
actually lol just realised your the one who made the gude im following
oh shoot sorry iddnt mean to ping
yeah im myst's bouncer
im here to escort you out of the server for trangressions against myst


you're not doing anything with that loc text, it seems like - and it isn't in the right format, either
{
name = 'name',
text = { 'text', 'more text' },
}
This better?
yeah
okokokokokko
so then
uh
when i put what i have into balatro
nothing happens not even a crash
and thats concerning because i feel like at the very least i was gonna get a crash and work from there
am i missing a few things rn i have the lua and the asset for the card
is the first line of your mod file --- STEAMODDED HEADER?
the loader looks for that specific first line
if it's something else, it literally won't load
uhhhhhhh it still didnt load does it have to be spaced a certain way?
no spaces at the start
still no load weird
oh i tried to change that but it never did ill see what i can do
its weird cuz its caved as Alizatest and not Alizatest.LUA but whenever i open it its still LUA
uh what code editor are you using?
i think this is just sublime text
hm I'm not familiar with it, but you should be able to change the file extension
you might need to enable file extensions on your system first if it doesn't show in the file explorer
btw all that is here is ALL the code i have is there something im missing you think?
can you send the file?
yeyeyeyeyeyeye
Idk if someone gave you that, but there is a wiki here :
https://github.com/Steamopollys/Steamodded/wiki
HUH
and you also misspelt init
wait where did i misspell init?
SMODS.INTI
OK
it loaded
and crashed,
OK
thank you thank you thank you
its not about the crash
its a bount the loading
thats def my time to get off and work on it tmrw but thank you again now i can actually start taking steps forword
meanwhile me still unable to figure out how to remove the "of" in "Rank of Suit" since in Vietnamese it's just called "Rank Suit"
You probably want to change the localization dictionary directly
I can't find anything related to "of" in there
I imagine itâs not a variable, but rather each description writes âofâ manually. Either that or the localize function manually adds the âofâ
"of" would be different per-language already right? :?
the localization entry you're looking for is G.localization.descriptions.Other.playing_card
Idol also has âof since itâs in a new line
hm right
thx a lot
while waiting for Steamodded 1.0, I shall prepare vi.lua
seals seem to be working well enough
pog
btw more than one underscore isn't an issue
i can't get around :lower()ing the mod prefix though, it's just something the game does
nope
the key itself doesn't get messed with
it's just that the game makes this modification based on the seal's key for the badge and then expects it to be that way
hm. seems like it'd cause problems but fair ig
eh
ill have to poke jokerstamps today if i dont get too distracted
i did need to add a reverse lookup
i can't find the modded seal based on the badge string otherwise
turns out I need to do that for the tooltip
how does misprint desc work
does it grab the "Mult" in dictionary or sth (since the +mult value goes randomly, while Mult jumps to and from rand{} occasionally)
it uses this piece of code in Card:generate_UIBox_ability_table()
so yeah, it grabs Mult from the dictionary
glad to hear that
How do you guys feel about things that multiply chip value? I donât recall seeing people make something like it.
As playing card effects I could be okay with it, as joker effects đđđ
Sanzang letâs GO!
the great royal gala debate
I see
i will eventually have loaded disk + bigshot joker fusion that gives x3 mult and x2 chips
im honestly indifferent to it
i can get behind xChips but its not the most exciting thing
xChips can have cool interactions
that is true
speaking of which ive always thought royal gala couldve been scaling +chips but you could do something interesting with the xchips
its just it alone is about as interesting as xmult
but flavor
yoo noway
X(treme) Chips
call it the doritosAPI thats funny
Paqui Joker that gains x1 Chips each time you get an overkill (flaming) score
Spicy chip
akai you should make flourite octet jackpot be X8 chips and X8 mult
thats so real
im doing that
if someone makes the XChips api
i wonder if aure would integrate it if i make it and send it his way...
Iâm not a fan because that already exists and itâs called Mult smh
:P a lot of people have mentioned the idea, even during last yearâs demo, but I havenât seen a mod with it (I havenât seen many mods)
but
FLAVOR
What would you like to know about GitHub?
What flavor?
i have changed my mind
this discussion has made me actually like xchips
not yours btw, the one above
doritosAPI is too funny to pass
Doritos isnât blue though
idk i just wanna add stuff to smods so im not just being a whiny ass at aure all the time
You have some mods on GitHub so Idk what youâre asking
i know how to upload stuff to github's website so clearly im a git master....
thats
so boring tho
like sure yea doritos red so mult or smth but like fukin a lot of things are red
Itâs not that different. I think you can clone the repository the push to it, maybe in a different branch
Idk if PRs require anything special but at least that way other people should be able to see what you did
what the fuck do those words mean
Pushing means you exert force on an object away from your body
im literally the stupidest person to ever live
So you push from your local repo to the cloud
ok
You start by cloning a repository. Git provides you the command to do that if you click on the green button I think
Then you probably want to git checkout to create a new branch, I think itâs something like git checkout -b main or whatever local repositories are usually called
Or maybe itâs -b after
ok so i should just leave it to the smart people qq
blue doritos exist you dunce
Then why is it called blue Doritos instead of Doritos
Theyâre not blue
fake doritos fan
it shows
I mean after that youâre mostly done, you just need to commit and eventually push. Sometimes you pull to get an update. If youâre working in a separate branch thatâs fine. The difficult part might be merging
i literally understand nothing
Pulling means exerting force to bring an object closer to your body
So you pull from the cloud to your computer
if you're going to both treat me as a toddler and also expect me to be fluent in git then shut up
Sorry
I think I failed to find a good middle between both explanations and that came across as disrespectful
push - Changes from your machine are uploaded to GitHub servers
pull - Changes from GitHub servers are uploaded to your machine
commit - Abstraction for total changes made to your files described under a single comment
merge - A resolution to an issue where the contents of a commit are contradictory with another commit submitted by another person
I think @edgy reef has made Xchips work
Not talking about it as part of a larger mod
Specifically talking about it as in a small addon you add to your own mod
Yeah but Iâm sure it can be pulled out of that for others to use
Best to make it an API then
hm
idk im just too stupid to be a programmer
there's an official github client which abstracts all of the cli stuff
bites you
im sorry
im sorry
Now that I finished codex and fusion ports, what should I do?
FusionAPI
Apart form that?
crops tho
really tempted to make like a $12 booster pack that gives stuff that impacts the next run
Crops are fun
Omega Pack (Booster)
Specify up to 3 consumable cards of your choice to use immediately

wait, you mean next run?
ok then
Foresight Pack (Booster)
Choose one of up to 5 consumable cards to start your next run with
start next run with 5 fully random jokers, lose this run immediately (spectral)
Instant use
lmao
fully random rental jokers
fully random eternal rental jokers
Spend 100$ right now to be able to begin with a random common joker every future run
I also need to push a fix on the sound player APi of Steamodded
Fully random eternal rental debuffed jokers
I think I'll pass on that one
eden's blessing
figured better here than general, but: does anyone know what the order field is in the usages in prof.jkr?
..is it just the arbitrary order of each consumable? fool and mercury are 1
it's the ordering in the collections tab
Joker idea - Sharpener: Gets +15 mult for every joker you sell. Currently +15 Mult
oh god that's busted
like it's 5x the mult of red card to begin with, it's not limited to only 2 per shop, buy/sell jokers is far cheaper than packs...
should begin at 0 imo and be less scaling
riff-raff
When the riff gets raffed
Riff raff synergy intended
but it's like
a lot of synergy
+30/round without much effort is hmm
maybe +mult based on the sell price (with a cap of like 10 or something)
would this not also just be a stronger variant of cermonial dagger
it would be a sidegrade wouldn't it?
dagger is 2x without cap, this would be 1x with a cap
and you get the money back
Oh.
đ
yeah ok ill release mystblinds 1.0.0 now
pog
yes... i'm still trying to make the joker work
:|
if self.ability.name == 'The Eraser' and not context.repetition then
if context.scoring_hand then
for k,v in pairs(context.scoring_hand) do
sendDebugMessage(k..": "..tostring(v))
end
if context.scoring_hand and context.other_card == context.scoring_hand[1] and context.cardarea == G.played then
local cardarea = {}
for k, v in ipairs(context.scoring_hand) do
v:set_ability(G.P_CENTERS.m_wild, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
v:juice_up()
return true
end
}))
return {
message = localize('k_upgrade_ex'),
colour = G.C.BLUE,
card = self,
}
end
end
end
end
end```
i tried and tried
Epic, time to get to work tomorrow that is
noice
neat
Oh did steammodded update?
What are you trying to do
It's just the alpha, hasn't officially released
a joker that transforms the first played card into a wild card
Ahhhh sick
sadly the alpha isn't even working on Mac afaik
Oh danngggggg
no it's just lovely that "doesn't work on mac". well, it works. it just hasn't officially released
lovely does work on Mac, it's just not properly documented
is there a thing I can refer to help with porting to 1.0?
People are starting to put their stuff out there for 1.0, but I'll be writing docs soon as well
https://github.com/Steamopollys/Steamodded/wiki but take it with a grain of salt, it's been incomplete and will soon be updated for a new major version
it will likely be useful to you to inspect the game's source code, to do that you simply need to extract the game executable with 7-zip
released beta3 with hopefully better documentation
lovely indeed
Is "findModByID" deprecated in steamodded 1.0.0?
yes
Oh
SMODS.Mods is now indexed by mod ID, allowing this operation to be constant time instead of O(n)
So if I wanted the path of my mod it'd be SMODS.Mods["my_mod_id"].path?
even simpler
during load, SMODS.current_mod contains your mod's data
the APIs have access to this, meaning you don't need to provide your mod's path to the sprite API either
Do I just put the file name in the path?
yeah
windows link downloads the mac arm archive
I am trying to implement this but find redeeming clearance sale gives only +2. it seems the discount effect is applied before trying calculate joker...
Did you add your own context?
context.card.cost from vanilla
But it probably needs another context to trigger
i've been looking through other people's mods to try and find a way to change the name and description, but i haven't figured anything out. is there a way to change the text on base-game jokers?
i found out how to change just the names on planet cards, but replicating it on jokers doesn't seem to work
It works perfectly after restart, I don't think I changed any code
very very strange
fixed
oh, previously in the animation part I calculate that again but now I pre-calculate it and pass this to animation, this seems make difference
Has anyone succeeded on doing a joker spritesheet on SMODS 1.0.0? I don't get why it doesn't work. It doesn't crash but the first sprite is not showing.
matador rework progress
B = Big Payout of $5 at start of round or when hand effect triggers
S = Small Payout of $3 per affected card played (even if unscored)
yes, this means the tooth is a net profit of $2 per card
Red vs green
not implemented vs implemented
the idea is for it to have as much compatibility with boss blinds as possible
so you at least get SOMETHING, even during boring boss blinds like wall
So a different interpretation of the effect to get as much interaction as possible?
How exactly do some of these make sense as âwhen boss blind ability triggersâ
they don't. that's why it's been reworded
https://github.com/MathIsFun0/Cryptid/blob/main/Items/Exotic Jokers.lua
Hereâs an example from my mod, make sure your X and Y positions are set properly
$5 when ability triggers (when something is done to the whole hand, or you are affected at the start of round)
in response to this
$3 per affected card played
You don't use a spritesheet tho it seems?
some of these cards are going to go craz
though what's the chance of getting an epic card
violet vessel undiscovered?
you can look at things like the exotic jokers though
they use a spritesheet for all 3 parts
listen, i haven't gotten to ante 8 often enough yet because i'm bad at the game and i wanted to gold stake black deck so i never had to play it again--
Violet Vessel is x2 Wall payout
Still, each joker is their own small spritesheet, it's not a big one
yeah, they're just giving me grief for not having unlocked it on my file yet
damn đ
you can also look at my spritesheets for stakes if that would be more helpful
yw
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = '''r self.config.center.demo then'''
position = "after"
payload = '''if self.edition then
for k, v in pairs(G.P_CENTER_POOLS.Edition) do
if self.edition[v.key:sub(3)] then
self.children.center:draw_shader(v.key:sub(3), nil, self.ARGS.send_to_shader)
if self.children.front and self.ability.effect ~= 'Stone Card' then
self.children.front:draw_shader(v.key:sub(3), nil, self.ARGS.send_to_shader)
end
end
end
end'''
match_indent = true
overwrite = false
``` this lovely patch won't load, what am I doing wrong?
ye. i literally got into modding this game for two reasons.
1.) black deck is ass
2.) straights are ass
and by "ass," i mean "easy to whiff on"
straights really did get a lot better with the saturn buff tho i have to say
actually worth the risk of whiffing
yeah, glad localthunk and i had the same idea there
i think the big thing of it is that there's no really good way to fix your deck for straights
hanged man helps a lot
is there an easy way to slightly modify what a tag does in tag.lua?
or just edit a function in it
what is the problem?
can i see your code?
not my code just downloaded cyrtid with steammodded 1.0
looking to port my code to it, but need a mod that I can see what's different
Not using mod prefix for some sprites which causes errors
I have to update my mod to match that Steamodded version
i mean... in a way, yes...
but at the same time, cutting a rank...
unless it's an edge number, it reduces the number of possible straights you can draw
so cut those ones
but the problem is, those are both the lowest AND the highest value cards
and the ones with the most joker synergy
2-3-4-5, and A-K-Q-J-T
and even then
the joker synergy doesn't really matter when straights score so much
well, yeah
Wait, do objects now need to have the mod prefix for sprite atlases?
no, things outside of Steamodded API
ohh ok
# New perishable texture
# Quartz Stake - register pinned sticker
[[patches]]
[patches.pattern]
target = "game.lua"
pattern = "set_profile_progress()"
position = "before"
payload = '''self.shared_sticker_perishable = Sprite(0, 0, self.CARD_W, self.CARD_H, self.ASSET_ATLAS["cry_sticker"], {x = 4,y = 4})
self.shared_stickers['pinned'] = Sprite(0, 0, self.CARD_W, self.CARD_H, self.ASSET_ATLAS['cry_sticker'], {x=5, y=0})'''
match_indent = true
overwrite = false
this was the issue (before, these were looking at sticker and not cry_sticker)
so @unkempt thicket the latest GitHub should be compatible
cool, thanks
I'm also probably going to refactor tonight or tomorrow, which will likely make it more confusing to use as an example tbh
since it involves the fileloading system more
readme is updated to include mac guide, but run_lovely.sh from source code hasn't included a version for Intel-based Macs
Yeah the current one for Balatro is pretty confusing at first glance.
like I don't think this syntax is going to help you understand how to use Steamodded
That's an interesting way to register an object.
this way I can load it from a file only when I want to when I read a file
return {name = "Very Fair Deck",
init = function()
local Backapply_to_runRef = Back.apply_to_run
function Back.apply_to_run(self)
Backapply_to_runRef(self)
if self.effect.config.cry_no_vouchers then
G.GAME.modifiers.cry_no_vouchers = true
end
end
end,
items = {very_fair_sprite, very_fair}}
I basically return a table with the things that I want to happen
and it just works
to be quite honest, i've been thinking while i deal with RL shit, and i think just realized: the main problem with straights, is that under normal circumstances... there are only nine valid straight hands, that require five cards to each be a specific rank.
5432A
65432
76543
87654
98765
T9876
JT987
QJT98
KQJT9
AKQJT```if that wasn't bad enough, it's harder to force even one of those 9 specific hands in the same way than it is to force your cards to be a single suit or rank... _and_ less rewarding than most hand-type oriented builds
flushes have the sin jokers, AND an extra joker for each suit
Isnât that 10?
maybe i counted wrong?
you did
i guess i did
yeah
but regardless
that's less than "pick 5 out of 13" for flush
I want more help understanding how to make a modification for balatro using steammodded, can someone give me some tips?
well, it'd help to have an idea of what you want to implement first
Free jokers or something easy like that so I can understand what I'm doing
joker that makes 432AK, 32AKQ and 2AKQJ valid straights when (/j)
already done in #1226055105204453428
reworked to make those valid AND spawn a random consumable on playing any straight
that makes it very good
for stat nerds: the odds are currently 45-45-10 for tarot, planet, and spectral.
might actually remove the whole spectral spawning thing from seance
now that i've changed that to offer x0.5 mult per spectral card used the whole run.
hey can someone look over the code for the sprite i believe im getting a crash error because it says line 37 attempt to index a nil value im not sure if thats the only issue but if you can lemme know ill send the code
advice: asking to ask a question is pretty pointless, just post info & code and someone will help if they want to
Goooooooooo morning yall!
mornin feder
what have you people been up to?
waiting for my hotel check in time
vacation?
yea
i kinda wish i was coding rn tho
i could use my laptop but typing for a while on it hurts my wrist
no harm in asking imo feels more abrasive to not ask
good luuuuuuck
if you sent the code with that message then you would've gotten your answer earlier
`function SMODS.INIT.Alizatest()
local jokers_def = {
testcard = {
name = 'Testcard',
text = {'test'}
}
}
local Testcard = SMODS.Joker:new(
"Testcard",
"Testcard",
{extra = {x_mult = 10}},
{x = 0, y = 0},
2,
1,
true,
true,
false,
true,
'',
"Alizatest_Jokers",
nil
)
Testcard:register()
local sprite = SMODS.Sprite:new("Alizatest_Jokers", SMODS.findModByID("ALIZATEST").path, "Alizatest.png", 71, 95, "asset_atli") sprite:register()
-----ok im gonna calcuate this now and pray it dosent break ok cool go
SMODS.Joker.j_Testcard.calculate = function(self, context)
if SMODS.end_calculate_context(context) then
if (context.scoring_name == 'Full House') then
return {
message = localize {type='variable',key='a_xmult',vars={self.ability.extra.x_mult}},
Xmult_mod = self.ability.extra.x_mult
}
end
end
end
end`
i am getting an error when i load the game that says 52: atempt to index field 'j_Testcard' [a nil value] and im not sure where to work from that message
im sure it has something to do with calculations but idk what would have caused the issue on 52 it was just the end
if its when you launch the game, its an issue with how you declare the joker, i believe
im not familiar with smod so i cant really help beyond that
SMODS.Jokers.j_Testcard
also is this a mobile thing whats with the whitespace near the end
i thinkso
grrr mobile discord
there's just that many linebreaks
oh
yea i gotta fix that lol
im still getting the same crash error though
does end have to be in a specific spot or does that matter?
indentation doesnt matter, if thats what you mean
so as long as there is 3 ends to the function and ifs its ok?
yea
i have a feeling its a missing bracket or comma somewhere
maybe?
xmult_mod doesnt have an opening bracket
wait no
SMODS.Jokers.j_Testcard.calculate = function(self, context) if SMODS.end_calculate_context(context) then if (context.scoring_name == 'Full House') then return { message = localize {type='variable',key='a_xmult',vars={self.ability.extra.x_mult}}, Xmult_mod = self.ability.extra.x_mult } end end end specifically this is the text
the very last end is where its saying there is an issue
ok uh
nevermind????
now its giving another one
which one
im comparing to bunco rn which im not sure if youre on the same version of smods as, but i think youre missing localization when making a new joker
before rarity, after sprite pos
actually yea im pretty sure thats it
you declare jokers_def but dont use it anywhere
hmmm still giving me the main.lua error
lemme download bunco and see what your talking about rq
just check their code on github
specifically im looking at bunco.lua line 1670ish
im not sure how smods does sprites, but should the first argument be j_Testcard instead of Alizatest_Jokers
OK so error log changed so i think i may have fixed it
now its saying bad argument #1 to 'ipairs' [table expected, got nil]
where would i find steamodded 1.0 btw? im starting modding stuff of my own and apparently if the version of the modloader im using is about to become obsolete thatd be a bit of a pain
or is it not a public out thing yet
there's no release for it as of yet since it's still rapidly changing - you can find it on the main branch of the Steamodded github
1.0 requires using lovely
right, ty
Been looking through the code so many times I still canât see what would be causing this
looking at the traceback, your joker loc_def is probably invalid
i cant really help beyond that, i dunno how smod loc def works compared to balamods
you know what, i'm more proud of this than i thought i'd be
i think this is going to be my full house joker (after i move the text down a pixel or two)
đș
and the new and improved brick by brick is going to be the joker that makes stones count as their own rank
I appreciate your help regardless Iâll look into it more tmrw
balatrostuck logo version 3
Sick
Bal
tro
balstuck
Sure
Just wanted to say, despite the early struggle, it feels so much nicer to code on 1.0.0, took this opportunity to write better code and use a spritesheet
um
Truuuuuu
I'm using NFS.load now too i'll finally become a cool kid đ đč
Wtf
How does it work
I couldnât figure it out so I just used require
swishy
Oh, I like the effect on the bottom
right?
this mod made possible by alchemy
Balatro && Homestuck
how do you guys feel on these extra swishes
