#💻・modding-dev
1 messages · Page 250 of 1
I’m pretty sure windows screenshots has arrows baked in like that
Oh fr
Maybe I'm clueless
I never really use the screenshot editor anyway
I'm curious, is there a technical reason why ghost cards can't be fixed so that cards can be destroyed anywhere? is it just a really complicated issue?
I mostly understand destroying context at this point but I'm still curious
whats the opposite of is_face() because i need to count not face cards
Here's what I've got so far which works great, just want to make sure it does reduce amount of hands to 1 no matter what
not is_face()
Yeah that
so like this?
for k, val in ipairs(context.removed) do
if not val:is_face() then non_face_cards = non_face_cards + 1 end
should be it yeah
is it possible to create a consumable that changes the edition of a selected joker
Yeah
well shit, im now crashing
good to know
you can check what aura does in card.lua
oh, i should be calling for card.ability
then just change the card references to jokers?
card:set_edition works on any card
aight, time to figure out how to make an unselectable enhancement
yea but I meant make it so it will work on jokers as opposed to playing cards
any card, as in, jokers, playing cards, consumables, everything supports editions
what if you could enhance jokers
horrifying to think of the sprite system that'd be required for that
yea more so i meant like it'll only be usable on jokers
ah okay, yeah the jokers area has a highlighted value just like that, so it shouldn't be hard to swap it out
G.jokers.highlighted
the best way would be like, replacing the borders i think
I think I can just patch CardArea:add_to_highlighted()
How would I check to make sure a joker is in the right most position?
syntax error
Is there a list of all the vanilla color codes anywhere? Trying to find the one that Antimatter uses for it's joker slot +1 thing (like {C:attention}
bro, how do i join these two together
message = ("X", tostring(card.ability.extra.x_mult))
you don't need to, the game can do this for you
can anyone help me with this https://pastebin.com/nU6PMYwv
Here is my shader's code:
#ifdef GL_ES
precision mediump float;
#endif
uniform float iTime;
uniform vec2 iResolution;
uniform vec2 mouse_screen_pos;
uniform float screen_scale; // Declare the required uniform
varying vec2 vTexCoord;
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords) {
// Use screen_scale explicitly so it's not optimized out:
float scale = screen_scale; // use it in a dummy variable
// Compute UV coordinates scaled by screen_scale
vec2 uv = (screen_coords / iResolution.xy) * scale;
float timeFactor = sin(iTime) * 0.5 + 0.5;
float mouseEffect = length(mouse_screen_pos - screen_coords) * 0.001;
// Mix two colors using time and mouse effect, using uv if needed
vec3 finalColor = mix(vec3(0.1, 0.1, 0.1), vec3(0.5, 0.5, 0.5), timeFactor + mouseEffect);
return vec4(finalColor, 1.0);
}
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
its better to do
message = "X"..card.ability.extra.x_mult```
It’s better to not send a message
im assuming this is for things like upgrades
Does anyone know why my button keeps on running away?
Setting up a good localization for the quest system is going to be some effort. For now, just going to serialize the table and show that, ugh
so close
oh no
do you know whether it's the button moving, or the entier ui set up?
i know damn well theres an easier way to do this.
if context.other_card:get_id() == 1 or context.other_card:get_id() == 2 or context.other_card:get_id() == 3 or context.other_card:get_id() == 4 or context.other_card:get_id() == 5 or context.other_card:get_id() == 6 or context.other_card:get_id() == 7 or context.other_card:get_id() == 8 or context.other_card:get_id() == 9 or context.other_card:get_id() == 10 or context.other_card:get_id() == 11 then
remind me never to implement anything that requires keyboard or button inputs
No
what does Auto do?
even if there wasn't, I'd consider instead checking if the cards aren't those ids, haha
oh that makes so much sense...
old behaviour
god damn it
maybe add some background colours to the nodes, see which parts move. If all of them do, it may be what you attached the button to, rather than something in that code (because I definitely don't see a reason for it to flee the screen)
Its the UIBox, if i remove offset = { x = 0, y = -0.005 } it works
if you increase it to -.01, does it move quicker??
why would offset work that way????
i use offset and it doesnt move it lol
I guess something there makes it so that the offset stacks
Why aren't my Jokers having the x2 mult applied?
SMODS.Edition{
key = "e_guns", -- Edition key.
raw_key = true, -- Use the key exactly as provided.
shader = "shiny", -- Use the shader we register below.
loc_txt = {
label = "Gun Metal Edition" -- This label appears on badges.
},
config = {
chips = 0, -- No change in chips.
mult = 1, -- Baseline multiplier of 1.
x_mult = 2, -- This will double the card's multiplier.
p_dollars = 3,
card_limit = 2,
},
unlocked = true,
}
Where does the game store the player's current number of hands? Doesn't look like it is G.GAME.hands
pretty sure its just G.hands
Oh gotcha
could be wrong though im new to this
Doesn't look like it, DebugPlus is giving me a nil for that
G.GAME.current_round.hands_left?
hello, anybody know why my joker doesn't show my sprite?
i added the atlas so i dont know whats wrong
SMODS.Atlas{
key = "Jokers",
path = "Jokers.png",
px = 71,
py = 95
}
SMODS.Joker {
key = "Key",
loc_txt = {
name = "Name",
text = {
"text",
}
}
}
That was it! Thank you!
you need pos = {x = 1, y = 0},
or probably 0,0 for you
In your joker, add atlas = 'Jokers'
so no one knows ab this? lol
When checking if a mod exists do I use pcall?
And how do I or where do I find a mods name?
Why is Game:start_run(args) being cvalled multiple times?
the get ID is causing a crash, what else can i do?
if context.other_card:get_id() == 2 or context.other_card:get_id() == 3 or context.other_card:get_id() == 4 or context.other_card:get_id() == 5 or context.other_card:get_id() == 6 or context.other_card:get_id() == 7 or context.other_card:get_id() == 8 or context.other_card:get_id() == 9 or context.other_card:get_id() == 10 or context.other_card:get_id() == 11 then
What are you even doing here?
Checking if a card exists?
getting every number except queen and king
GOING INSANE HELP
just do this
if not (context.other_card:get_id == 12 or context.other_card:get_id == 13) then
Why not just ```lua
if context.other_card() != 12 and if context.other_card() != 12
????????????????
lua doesnt accept exclamation as negation
Aw, i was to late
that and thing is also wrong syntax
THATS WHAT IM SAYING
its simplistic i like it ngl
I once again asking, when checking if a mod exists do I use pcall?
i like != a lot more
Omg keku from happy birthday
especially since it almost looks like the unequal sign

it is my birthday :)
Get totally happy birthday’d again absolutely destroyed :3
i know youve been working on that for a while is this mod out in some form i wanna try scrabble balatro
I once again asking, when checking if a mod exists do I use pcall?
!!!
thank u
yeah it looks awesome
ah all good
but u can try the alpha
Happy bday!!
happy bnirthday kekealso
that would be awesome i'd love to try that
What makes an alpha an alpha? :3
Anyone?
Contribute to Aikoyori/Balatro-Aikoyoris-Shenanigans development by creating an account on GitHub.
help me pls 😢
TIL DynaText is fucking laggy as shit
okay so I got my edition to display correctly, but the calculations aren't happening
any ideas as to why?
SMODS.Edition({
key = "e_guns", -- Edition key.
raw_key = true, -- Use the key exactly as provided.
shader = "shiny", -- Use the shader registered for this edition.
loc_txt = {
name = "Gun Metal Edition", -- Displayed at the top of info boxes.
label = "Gun Metal", -- Appears on badges.
text = {
"{X:mult,C:white}X#3#{} Mult"
}
},
discovered = true, -- Mark as discovered.
unlocked = true, -- Available by default.
config = {
chips = 0, -- Bonus chips.
mult = 0, -- Bonus multiplier.
x_mult = 2, -- This will double the card's multiplier.
p_dollars = 3,
card_limit = 2,
},
in_shop = false, -- Can spawn in the shop.
weight = 8, -- Weight for shop appearance.
extra_cost = 6, -- Extra cost applied in the shop.
apply_to_float = true, -- Apply shader to floating sprites.
loc_vars = function(self)
return { vars = { self.config.chips, self.config.mult, self.config.x_mult } }
end,
})
Do you have to manually program the Debuffed! message and interaction? Or does smods simply just refuse to calculate things if a debuffed card is involved
why
i think its auto but i can check if you give me a hot second c:
Much appreciated
np, least i can do for all your help earlier!
is there a way to display a message on the joker after context.destroy_card ?
if i do return{message="whatever"} it displays on the card and context.after seems to happen before context.destroy_card
try adding card = card to the return table
won't that destroy the joker
not to my knowledge? the purpose of adding card there is to juice up™️ a specific card
context.destroy_card has an attribute that contains the card currently being destroyed
which is context.destroying_card
i think it'd have to be message_card = card
omg aure
ty aure for correcting me
ok is there a way i can modify children ui element
like
i wanna change text on the fly
but dynatext is somehow very laggy
Anyone?
ok not somehow they are supposed to be a bit laggy
probably some object node setup with a UIBox inside
so i can just use uibox
to set a new text object

i have 10 youtube shorts limit for myself
sorry
I'm trying to make a compatibility check for another mod. I only use lovely injector so smods is out of the question. Is there a way to check for other mods in any way (for example does pcall work)?
yep that did it thanks
ok i think my mimic joker works now
it's automatic, my jokers are debuffed and not triggering c:
this is a sad day
neat, what about playing cards with jokers that interact with them?
no, lovely does not keep track of any mod metadata. the only way without smods is to rely on fixed folder names (which i think is a bad idea)
still trying to figure out why jokers with my edition aren't calculating the config
i guess you can rely on some global that a mod sets
What's the way to do this with smods?
i would test but i dont have any custom cards as of now, but i presume if it's auto for jokers it's auto for custom cards

smods provides a utility SMODS.find_mod
how can i move a card to another card area
Yo aure
i meant card interactions, as in like jokers that interact with certain card ranks and suits
noted
thanks
OHHHHH
ill test that rn c:
also, does the mod you're trying to implement compatibility for also not use smods?
wait do i have any jokers that reffer to that?
Yo Aure, do you know my button is running away from me?
wait could you elaborate? im still a little confused

at a glance, no
Do you know how Baron or Bloodstone don't work with debuffed playing cards
yes!
OHHH gotcha, ill yoink code and test c:
Yeah i was wondering if that behaviour was automatic or programmed
I cant really check rn cuz im on my work laptop
that's automatic, debuffed cards don't go through the same scoring routine that normally scored cards do
At further inspection?
👆🏻
so for example using get_id will always return an id that never belongs to any playing card?
I think it has something to do cuz the Game:start_run(args) is being called many times?
bloodstone'nt
some variation of old_area:remove_card(card); new_area:emplace(card)
how is that scoring
I'm referring to anything that uses a calculate function of some description
oh do debuffed cards just not get evaluated at all?
it works after a flood of spelling errors ❤️
they're not evaluated unless specifically told to
neat
how would i go about increasing boss blind required chips with a joker?
G.GAME.blind.chips = G.GAME.blind.chips * [whatever]
Times one BEELION
I really don't want to deal with UI code rn
do you ever actually 'want to' or do you just get yourself to do it sometimes?
what does the red half of this description sound like its saying? trying to keep the description concise and perhaps a bit obfuscated for the funnies
my mind thinks that it applies a negative edition to your playing card but, it doesnt state how or bring clarity
teh enhancement itself is called asbestos?
oh i see what its supposed to mean
Value may reach a negative value
if you apply another enhancement it becomes negative right?
might be better
ohhh'
i have not a single clue what's going on
it's not usually my favorite anyway, but rn I just don't have the brain power for it
I spent three hours on it after work today doing very simple UI stuff and I'm braindead now, so I get it, haha
actually its meant to be 2 seperate things:
the value can decrease to negative if its there for too many played hands, AND
if you try to discard or destroy it it has a chance of coming back worse
ill prolly make it more descriptive
ah time to draw a skeleton
what did i do wrong
i didnt mean to reply to that LMAO
It must go. Its planet needs it.
???
xmult can go negative and if you try to remove the enhancement something bad happens but i can't tell what
you're modifying the table you're iterating over
is that it
did not seem to work, and, made my blind radioactive
then how do i move all the cards
Actually Idk if making it go negative is a good idea since you can combine two to make it positive again
but maybe that's what you want
you're fine if you do it backwards i think
probably has to do with how you're setting it then. What's your code?
It just doesn't get paid enough to deal with another player
for i = #G.jokers.cards, 1, -1 do
it's just this
Take a look at Champion from my mod
victin i love you wait lemme take a look
(platonic)
iirc that works internally, it just doesn't update the display
i hate uis
would it function like that?
i thought the mult just functions on correcting the value of score by a number of 5 in this case or if it were negative dividing it down
hold on what would negative xmult even do? would you score negative chips? i know fractional mult would decrease chips
i miight try janking it to count how many you have and accounting for that so it always ends up negative
i have to start concepting for my mod plans
I'm not sure what you mean, but xMult multiplies the current Mult, so if you multiply by two negative numbers in a row it becomes positive
why
20*.6 is an odd way to write 12
idk il change that but just bruh
well ik but is that how balatro would calculate two negative x-mults?
balatro doesn't make multiplication work different
doesnt smod refuse to calc any returned xmults that are equal or below 0?
Balatro uses real numbers so it uses real multiplication and real addition
-# technically floats not reals but shhhh
ah i see, good to note
thx yall
perhaps it used to, but no
SMODS removed the restrictions on that from vanilla, although I think the card stats added some of them back
why does it work onl for a split second 😭
well see this is just a mouthful
@frosty dock I think some card statistics like bonus chips and such can't be negative
id test it right now except asbestos cards area ctually broken right now :p
really
well, I remember Lars and Baliame discussing and deciding to implement it this way
@frosty dock do you have any ideas as to what is going on in the ui
why are there so many ui questions today
ok that works great, now i need to implement it incrementing the score every like, 5 seconds spent
@frosty dock if you would answer the question "how are ui?" using a Balatro UI element instead of words, how would you?
is there a timer already in the game or do i need to implement one myself?
I think Cryptid does that
a few
G.TIMERS.…
oh i see
I meant to type "how are you" but my brain was rotted by UI
I'm becoming half-human half-UI
which one do you recommend i use?
Idk
why cant i move ths stupid card area
also uh this is still true
I think for your use case they're equivalent
ok alr i'll handle this myself
then "how are you" but you answer using G.UI.T
I don't even think you need to handle timers directly
can you please stop bothering me
Just set a recurring Event on a 5 second delay
Sorry I just wanted to ask how you are in a funny way
can you take a break
maybe take a little walk outside?
play with your cat
it's 9pm smh, dark af out there
ignore the fucked text and the nonsense thematics of it all, but it's working
I came back like an hour ago from an orchestra rehearsal
oh
ohhh do you play
also ignore my broken fucking brain forgetting how straights work ❤️
rehearsal
impressive
do you sleep aiko

i would but he's sleeping
fair
cat

meow

oh, ye that would work
You are insane
god i wish we could just press ctrl esc or something instead of having to hold M, it keeps auto focusing the window under it
I feel that
the lua file being bombarded by 2 billion Ms:
no
yes
insanely multitalented
i mean I've wanted to make it configurable
small problem, my UI would suck
actually I think I'll just add alt+f5 for now
I LOVE WORKING WITH UI
whats the correct context for a card that's being discarded? i thought it would be context.discard and context.cardarea == G.discard but that only triggered when other cards were being discarded while the card was already in the discard pile
ok seriously i cannot for the life of me figure out what's wrong
there's a context before discards
you don't need an area check I think
can someone tell me why perma mult has this extra +?
huh
maybe @tepid crow
i have no idea but maybe you need a root node wrapping the text node?
did you add any localization yourself for permanent +mult?
its because i had an old version of neato jokers installed which had its own permamult localization
Truly
Lars copying Lars

what the fuck is going on
looks good to me, ship it
you might need a row or column wrapping it too

sigh
wait
This crashes whenever it tries to score a card.
Are you inventing screen keyboard? 
are you trying to implement a keyboard in balatro?
ill send the crash log in a sec
you used to many letters in your mod you dont need anymore
i copied the vanilla one and made it support the shift key
context.other_card doesn't always exist
that's all i am trying to do
i believe i may have made a blunder
Imagine SMODS.Keybind support not only keyboard 
me when i forgot to return true
oh how i love taking shitty stock photos and compressing them to 71 by 95
THE SKELETON APPEARS
my baby boy <3
why am i crashing?
ok context.discard triggers whenever any card is discarded, how do i make it only trigger when the card running the calculate() is discarded?
note since its a png i literally put the pixel ratio in the corner LMAO
it no longer crashes but now it just doesnt give 2 x_mult
the joker is literally called skeleton.png
i love it
these people will refuse to help me i've asked like 20 questions good luck
nah, you just gotta wait
trust
i have been lmao
im the joker im literally the joker im like "why're mods so.., SERIOUS??"
this is minimal information smh
sure this one is, but not the other 19 ive asked
i mean, i would also send the crash log
i must be doing something right
i didnt go through the effort of doing a pastebin when no one is going to read it anyway
because the capital letters flashes a bit before disappearing
bro... send ur message as a file
what's the keybind to debug layout again
uhm
question
how do i make recurring events without putting them in the update function
I was obviously exagerating
i want to simply make an event repeat every 5 seconds
wait is this how you get x_mult to do the x_mult job
x_mult = card.ability.extra.x_mult
as well as it being in return
two ways
if you look at the code for Champion
I create an Event inside an Event
anyways I can't help you with this amount of information
In my case, it was because the Blind UI doesn't always exist
so it's waiting until the Blind UI exists
im trying to do the same thing except for a custom edition
I have the following but it doesn't seem to do anything:
calculate = function(self, card, context)
if context.joker_main then
return {
x_mult = card.ability.extra.x_mult
}
end
end
wait, is x_mult just xmult
editions shouldn't evaluate in context.joker_main
use context.pre_joker or context.post_joker
its xmult
depending on if it should trigger before or after the main effect of the joker in this stage
either works
so like this?
calculate = function(self, card, context)
if context.post_joker then
return {
xmult = card.ability.extra.xmult
}
end
end
why is it red
im not sure if im overlooking something
oh collision i guess
context.other_card is present in lots of contexts
you need to check for the specific one you want
oh, really?
here you want context.cardarea == G.play and context.individual
okay what the hell is this debug mode
also remove these lines
hello everyone, i am new to balatro modding. I'm trying to trigger an effect on scoring (much like with calculate functions) but without needing any joker, edition, specific card, etc. Basically it should always trigger on scoring. I've read the doc and can't find something that helps me, do you guys have an idea how i could achieve that ? thank you
what is the condition for the effect?
basically, it should always happen when any joker or card is scored
is it a deck effect or something
no, always on
I created a CardArea to hide invisible Jokers in and calculated them there
just inherent to your mod
the Jokers don't show up in the collection or anything
that works
yes exactly
wait, how do i put a message on the card, i see message_card but im not sure if i call for that as in message_card = "" or something else
or you can make use of an existing such area and always (silently) redeem a voucher on run start and use that to calculate
i thought of something like that but did not know wether it was possible, i will look into it
should be automatic, you can put something like message_card = card or message_card = context.other_card if you want to force a repositioning of the message
I have a patch to do it
I've been brainstorming an idea and just need to know if something specific is possible. Is SMODS capable of dynamically changing a joker texture when specific things happen? Just as an example if I have one steel card in my deck it's one texture but if I had a second or more it's a different texture? I know animated textures exist for things like the Jimball in Cryptid
I think the code is there but hidden in my mod's current release
not directly supported but you can make things like that
okay sweet, how red (how to make the message a red background)
Gotcha, that's what I figured. I'll have to dig into it
this prints test but doesn't give me the mult:
calculate = function(self, card, context)
if context.post_joker then
print("test")
return {
xmult = card.ability.extra.x_mult
}
end
end
okay what version of smods are you using
did you activate the additional option
smods-1.0.0-beta-0312b
what additional option
this isn't post_trigger
sorry whats this mean?
My bad I misread
can i just start by creating the joker and adding the effects then worry about hiding it a bit later into developpement ?
Yes
mb that's irrelevant i just found the issue
card.ability.extra belongs to the card's center, i.e. the data of the joker itself
edition config is stored in card.edition
xmult = card.edition.extra.x_mult?
yeah if your edition config is set up with an extra
(though it's not strictly needed)
its in config
if it's directly in config, no extra
ok i think i know what's going on
card.edition is basically a copy of your config along with some other information
it get's scaled to oblivion
so card.edition.x_mult
is it just me, or does Trib have a diffrent score sound
no
that worked tysm
oh, the scoring on my modded card plays the chip score sound, not the x_mult sound
im not sure if i can change that
oh, i see how
ok i fucked something up but this is so funny i've got to get you guys a video wait
one last question, what do i look for when finding what sounds it uses, because I see generic1 is listed on the wiki but i dont know how to call for it or the other sounds
oh theres a sounds wiki
why do people add cards to the title screen is that a tradition i've yet to learn
it looks cool
LMAO EXACTLY WHAT I THOUGHT
i love the pause at the end like "well. the fuck am i meant to do about this"
A part of me wants to keep it like this
+10% blind req every time the joker feels like it
Can someone please help me to fix the bug (cryptid)
the presence of cryptid is the bug
💀
There are some joker cards which have a top layer asset but for some reason it floats like this instead of sticking with the card
how do i make my joker play the MultiHit2 sound?
cryptid my bugloved
ok at this point i dont' care anymore ill revert to the laggy dynatext impl until someone comes up with something that works
ok wait actual joker idea (and make it a snapcube reference because why not)
Something Just Happened:
gain 0.1 chips whenever literally anything happens
how are you gonna define 'anything'? haha
anything that triggers a context id assume
a context being checked doesn't per se mean anything happened in it tho
i have a joker that checks for mult and chip change
It's not too different from making a Joker
sob:
Is there documentation for the new Blind contexts?
due to my inferior programming skills, i still haven't got the recurring event working
any tips?
"I can do anything!" - An insane jester, probably
In hindsight the specific timer used might matter since you can change the gamespeed, but Events can also be told which timer to use.
You probably don't want it to be blocking, but Idk about blocked
omg jevil joker
also Cryptid has a similar Blind which could be helpful to use as a reference
there's a rewrite of the calculate docs in progress, i wanted to wait for that
for now uh there's this https://github.com/Steamodded/smods/commit/d4a5ebac18a2cdadec7d06ed5b73ffeb9cb7fc88
is there a way to make a card that's being discarded in context.discard be drawn back to the hand instead?
not sure how clean that is, but i think you can draw the card back to G.hand in an event
sorry to bother again, i actually want my effect to trigger during the scoring, basically every ding you hear during scoring triggers it, what's the best way to do this
sounds like a use for context.post_trigger
it happens after anything calculated with an effect basically
added this and it started freaking out
you can narrow down further what happened by checking context.other_context
you do have to enable it like SMODS.current_mod.optional_features = { post_trigger = true }
the key should be the same as your consumable type
on the undiscovered sprite
i've found this solution to be optimal, but it only happens on contexts if i use it in the calculate functions, is there a workaround to this?
oh shiz ty
wait i have an idea
This is such a specific question but does anyone know where the animation for the jimball is in Cryptid's code so I can get an idea of how it works?
k i did that but its still giving me the error, i did save already btw
you can also check out Aura
Good to know! That's probably a better one to take a look at
if you just want to change textures occasionally, Bunco also does it with the tape
oop that wasn't the source of the crash, just the first thing I saw
it's this
how can I add a joker to my jokers directly when the run is started ?
MathIsFun reused Jimball's code for Aura
the text isn't a table
Gotcha
oh zoinks you right
trying to test the asbestos card and it refuses to draw to my hand
as i typed that it drew to my hand
ty
im trying to make a soul-like card for a specific rarity and it just keeps giving me jimbo
local t = {
set = 'Joker',
rarity = 'pm_bosses',
}
SMODS.add_card(t)
here's the code
SMODS.Rarity{
key = "bosses",
default_weight = 0,
badge_colour = HEX("9c1072"),
pools = {["Joker"] = true},
get_weight = function(self, weight, object_type)
return weight
end,
}
and here's my rarity
how do I cause a card to retrigger?
i think i've got the description for asbestos to be just short and brief enogh that im happy enough with it for now
now im having a new issue, after I added the consumable type and a card, now its crashing because of this, and saying something about one of my jokers before
what kind of card
athbethtus
how can i add a joker to deck on run start ?
retriggered by a edition
i know you can spawn one with debug plus but i dont know through coding or anything
so it retriggers itself, like a red seal
yep
context.repetition_only then
you should return something like { repetitions = <number of reps> }
you can add a message, by default it'll be "Again!"
i want every run to have this joker on start
so not just using debug
this also isn't a deck effect, right?
no
SMODS.Edition({
key = "e_gun_gold", -- Edition key.
raw_key = true, -- Use the key exactly as provided.
shader = "shiny", -- Use the shader registered for this edition.
loc_txt = {
name = "Gun Gold Edition", -- Displayed at the top of info boxes.
label = "Gun Gold", -- Appears on badges.
text = {
"Cause a card to retrigger 3 times
}
},
discovered = true, -- Mark as discovered.
unlocked = true, -- Available by default.
config = {
chips = 0, -- Bonus chips.
mult = 0, -- Bonus multiplier.
x_mult = 0, -- This will double the card's multiplier.
p_dollars = 0,
card_limit = 0,
},
in_shop = false, -- Can spawn in the shop.
weight = 8, -- Weight for shop appearance.
extra_cost = 6, -- Extra cost applied in the shop.
apply_to_float = true, -- Apply shader to floating sprites.
loc_vars = function(self)
return { vars = { self.config.chips, self.config.mult, self.config.x_mult } }
end,
calculate = function(self, card, context)
if if context.repetition_only then
return {
repetitions = {3}
}
end
end
})
like this?
repetitions = 3
if if
other than that, yeah
also why are you using raw_key
that's been deprecated for quite some time
you should hook Back:apply_to_run and add an event that adds the joker with SMODS.add_card
is there a way to check if player is currently in a blind without contexts?
local batr = Back.apply_to_run
function Back:apply_to_run()
batr(self)
G.E_MANAGER:add_event(Event({
func = function()
SMODS.add_card({ key = 'j_whatever' })
return true
end
}))
end
G.GAME.blind.in_blind
thanks🫶
it crashed when i started a run
(i did change the key)
if it's a modded joker, does it include your mod prefix?
yep missed that
ok
can confirm
x0 and below do not do anything
damn
hypothetically how would i patch it so that they do work
how do i word this better?
j_bh_test
is this how I remove an edition?
card:set_edition("e_gun_headshot", false)
thank you, it works
how do i get achievements to work >_< i'm trying to make achievements for when a boss blind is defeated and im struggling
balanced?
the clock be like:
can someone tell me why this is increasing the permanent mult on a playing card in increments of 3?
id love to play a challenge where you have an eternal one of these
it should only be increasing by 1
does smods mess with the score in a way that could stop x0 and below from scoring or will that be a vanilla quirk i can patch out?
smods patched that out
damn
so you can just xmult however you please
how tf do i patch it back out of smods
yes
i would like to aptch that out
for asbestos
i want asbestos to be able to x0 mult and below
i feel like you could just add that to your calc and make it not return if its 0 or below
you both are interpreting the exact opposite of each other
i think we are
oh
this is on a joker, right?
pfft
as in, smods added it in, i guess
so smods prevents you from doing x0?
vanilla didnt allow negative or null xmult
no it specifically allows you to
it allows it
the first argument should just be nil to unset an edition
is that new because its not working for me
yes
ohhh okay whats the boolean for?
editions are mutually exclusive, there can only ever be one. you're not adding or removing an edition ever
????
there's two boolean flags you can pass, "immediate" and "silent"
this is because jimbo despises you
I don't see anything in the code here that should trigger it multiple times, honestly. Maybe I'm missing something obvious, but it's probably not happening because of a missing context check or anything
immediate removes the visual delay of applying the edition
did the round end as the score increased?
so the game read it as a loss?
yes i think that's what's happening
silent removes the edition sound
probably just add conditionals for when it can deplete then
you could check after you score whether you beat the blind and stop increasing
ugh, i'm not enjoying trying to construct proper strings. I'm going to have to figure out when localize is going to return a table, and when it returns a string. Maybe there's a smarter way to do this than to stack localize funcs
the weird thing is the card description shows the correct value
ok so
This is giving me an assertion failed crash
calculate = function(self, card, context)
if context.post_joker then
card:set_edition("nil", true)
return {
xmult = card.edition.x_mult
}
end
end
with the smods allowing for 0 and negative xmult, does that extend to in-hand mult? cause i have a card in my hand with -5 h_x_mult and its doing jack shit
i hate that about lua
weakly typed languages 💔
try making a joker with -5xmult
to see if it's that
that's so strange. do you have any patches that could cause that?
none that i know of?
ok making joker speedrun ig
unless i have some leftovers from neato
i had a run where i got a soul card and i got my useless joker for the first time in an actual run and im actually voming and crying this difficulty is so difficult and because i felt so stupid that i had MADE THAT JOKER INTO EXISTANCE, the cryptid time scaling ante got way past the base score i was barely on pace with as i walked around my room holding my head in my hands

hold on let me do it i have it set up
cool thx
localization's a bitch in any language in my experience but maybe that's just me hating anything that isn't just making jokers give xmult
-5xmult doesnt do shit on jokers either
do you have an older version of smods?
yeah localizations are hard but the fact that something can return a table or a string is bad
according to the manifest json im running 1.0.0 but idk if thats just like a placeholder
the main issue with it is that it fucksme up the moment I'm switching language 😢
look at the top right when on the balatro main menu
1.0.0~BETA-0314b-STEAMODDED
i lied it works
wh
that's new enough
im wondering if its just because its h_x_mult and not x_mult
can you show your code
if thats the case
its weird
theres no fancy code i literally just gave the card -5 h_x_mult to test and its not doing anything
try doing it with just regular x mult?
Just gonna shut off for tonight, I've been setting up this quest system for too long and I'm starting to see untyped variable declarations float in my vision when I close my eyes
so it just adds more cards to your deck?
Yes
doesnt seem like a very hard blind
It's not
i'd go to sleep but i'mma watch a movie instead
It can make your run harder though
absolute cinema
or easier
watch Inception
add a copy of all your discards would be kinda sick tho
the blueful blue joker:
I thought that'd be too beneficial
rewatched that recently, not gonna be it. Also too mad at Inception for being a hard to code joker that I still need to fix
find the Donald Duck comic book Inception was based on and watch a slideshow of it
why is nobody working on a duck tales mod???
new DuckTales or old DuckTales
"discard a copy of all played and discarded cards would be a mess tho"
I enjoyed new DuckTales but now I'm reminded I didn't finish the last season
might be too evil
too beneficial still
I really like the new ducktales, no clue about the old one, though
though very messy
ok so yeah its just negative mults arent working for me at all
nubby's number factory reference
hi! finally getting around to fixing Train Station
(first of all, ya, it needs nerfed to +1 Mult)
I wonder if @tepid crow removed it for everything ;P
second, you can see what the error is :) lemme grab the code
what about "for every discarded card, discard a copy of a random card in your deck" no benefit unless your deck is trimmed
what am I doing wrong?
calculate = function(self, card, context)
if context.post_joker then
self:set_edition("nil", true)
return {
xmult = card.edition.x_mult
}
end
end
the ERROR is from this line:
localize(G.GAME.current_round.train_station_card.rank, 'ranks')
at that point it could just copy random cards at the beginning of the Blind
(also third thing, the ability should say "increases")
I don't want to make Water 2
is this for perma stuff?
(instead of changes)
and I don't want to copy random cards
hmmmmm
i cant get negative xmult to work
no but maybe it interfaces with get_…
I'm not sure that ever actually worked?
this is the code that increases the rank (and in there is another Joker that you can ignore)
what am i doing wrong?
I think there are better ideas; my issue is that those better ideas were implemented by Myst and/or Autumn
is this the part that's wrong or is it your loc_vars that's wrong
what about "discard a copy of first discard, first discard must be 5 cards" if you play some hands you can make it beneficial but if you get unlucky you add a bunch of garbage
well, the loc_vars is trying to localise the value, but failing
lemme remove the localisation function so i can see what it's passing in
but maybe you're passing the value the wrong way
that's more complicated than what I usually like to make
but
im losing my mind
true it seems a little contrived
I was considering "Discard a copy of first 5 discarded cards"
this is the crash I am getting
i tried using card instead but that gave me an assertion error
so in the collection, it says 2
how
i thought about that but it seems really beneficial too, i guess it depends on the amount of hands you have, you could try it out and see how good it is at deckbuilding but i think it has more potential
hmm, beating a blind changed it to 4
Literally what the fuck
ah i see. that's a bug i can fix
using card I get this:
so then it's the localization function
I mean, you could do almost the same with the original version. I think you could dig slightly deeper without copying more cards, but it seems a bit contrived
all i did was add a song
please someone help i genuinely dont know what im doing wrong
it's really weird, because the game uses it like i'm using it
damnit i keep clicking the create thread button
it's because I was trying to set the edition to nil but I thought that that is how Im supposed to remove editions?
could anyone help me out with how to code a consumable that gives an enhancement?
they're a real simple set up. I'm not at my pc anymore, but if you want, in #1340334060597285025's tarot.lua I've got a bunch of tarots that function exactly like the vanilla enhancement tarots, except for custom enhancements
this is freaking awesome thank ya
okay so how am I actually supposed to remove editions on cards?
(bump? why does passing 2 into the localization function, alongside "ranks", yield ERROR?)
(how does that function work?)
(ah wait lemme try something. maybe i have to stringify it??)
(question mark??)
bump
The localize for ranks needs strings, yes
what does this mean
rightright
has anyone done a "reverse tarot" mod
so it's "2" = 2, "14" = Ace, right? just making sure
yes
cheers ^^
pretty sure someones working on one yea
damn
haha you're all geniuses!! thanks <3
Just looked, wtf lol
has anyone done alchemical symbol consumables?
yup
damn
dont know what im doing wrong??? in theory it should work
multiple
there was a famous mod that was forgotten/abandoned when 1.0.0 rolled out
oh goodness
I do think other people are using alchemical symbols now too
genuinely this effect is so op im glad i thought of it
tried, the bastard stiill activates
ok so i've patched in negative mult
it works
however. there is literally no visual indicator that anything is happening
you just. lose all of your chips
immediately. no smoothing or anything just in 1 frame back down to 0
this is jank
like. really jank wtf
i should work ont his tomorrow
OK I FIXED THE THING FUCK YEAH
WAIT NEVERMIND
I FUCKING FORGOT
ALL CARDS HAVE X0 MULT BY DEFAULT
YOU CANT DO JACK SHIT ANYMORE
x0 mult, lol!
I made this enchantment that drops the card down to 0.3x mult, then increases every time it is scored. it's a slpw burn
is there like a way i can code my consumable with the mod_conv stuff cus idk how to lay it out where multiple files talk to each other i just have it all in one lua
without the mod conv i should say
If you put your tarot in the same file, mod_conv should still function the exact same way!
Mod_conv is actually a tarot quality to chance the modification of a card. I suspect its there from before enhancements were called enhancements, and were called modifications instead
see that sounds about right but when i put your code for both tarot and enhancement in my lua file to test (sorry) it just crashes
Oh, I'd avoid using my enhancements, I think all of them refer to variables not in your code. But in theory, you'd just need to change the mod_conv key to your enhancement key, and the tarot code should work!
Though, don't copy the if statement wrapped around it that checks the config, that's not applicable, haha
yeah i figured lol
well shucks thanks for the help at least i guess i just gotta hit it with a rock till i figure something out
What's your tarot code looking like?
well it was just a simple like added +10 mult but i havent been able to even test that without the consumable working lol
If you show your tarot code, I can maybe see what you're doing wrong 😄
I gotta be doing something wrong here
calculate = function(self,card,context)
if context.main_scoring and context.cardarea == G.play and G.GAME.current_round.hands_played == 0 then
if G.GAME.hands[context.scoring_name].level == 1 then
local card = create_card('Planet',G.consumeables, nil, nil, nil, nil, nil, 'star')
card:add_to_deck()
G.consumeables:emplace(card)
G.GAME.consumeable_buffer = 0
return {
true
}
end
end
Bit of a silly question but I figured this was the chat for that
If I make a silly music replacement pack, do all the tracks need to be the same length
Or can they be different
is there something to increase the amount of cards in a booster as well as extra choose?
how would i play a sound when a joker is triggered?
can I spawn a booster pack in the shop using debug plus?
Yes
how?
I think you can return something
ok so so far this is what i got, the card works and shows up in game, selected only one like i told it to but just doesnt apply the enhancement cus idk how to write that bit
and th mod conv lines up with the enhancement key
how easy is it to implement things that save your run like mr bones
like, say, vouchers or tags that do such a thing
You're missing your modkey and the enhancement type for the key!
hi ice :3
It should be key = "m_[whatever your modkey is]_seff"
somehow, some way, I fixed it
I have no clue what did it
actually I think I kept changing G.GAME['fvb_personality_rate'] instead of G.GAME['fvb_personality_mod']
how do i make my mod compatible with talisman again?
to_big = to_big or function(x) return x end
I'm trying to learn how to make shaders, and I've finally actually, like, made a shader, and I was gonna port it in before realizing it's not the right type of shader lmao 😭
like, I don't know how to translate any of this into the stuff I see in the balatro shaders as the text appears different lmao, any tips for shader making for someone who's just started lmaooo hehe :333
I love to, like, print this effect in someway ontop of a joker with an edition, but I don't even think my shader is the "print on top of" kind of shader lmaoooo
probably easy
A Tag might be hard
but Idk how Tags work
questione c:
is there anything else i need cus it still kinda just fizzles out and doesnt apply the enhancement
Love uses a different shader language but it's close. I'd try looking at the Steamodded example shaders, and maybe the one table from the love wiki explaining the 4 differences between languages. If you've made it this far, I think you can figure out the rest.
I'm getting too tired
does anyone know off the top of their head what the function is to remove the last X amount of characters from a given string is?
maybe sub works
lua's string.sub
stackoverflow, my friend
now, I've gotta hunt down the part of the code that says if you have no cards in your hand or your deck you lose
string.sub("your string",1,#"your string" - X)
thoughts?
so discards no longer allow you to draw
ok after i moved the mod conv INSIDE the config it just gives me this crash error
i mean, i think it should also show the current -hand size in current, but i guess you can also just check that by looking down
I might suggest phrasing it as "do not draw after discard" instead of the -1 hand size thing. I think the description is more intuitive this way
how do I spawn a specific booster in the shop using debugplus?
although, the game does force a draw if there a re 0 cards in your hand, so you'll have to worry about how that interacts with this I think
press 3 in the collection on the booster you want to spawn (in the shop)
simple 0 check will do
sorry im confused
Hi confused
when in the shop, go option-> collection->booster pack, hover over the desired booster, press 3 on your keyboard
are my modded packs supposed to show up in that menu?
yes
dang what's wrong with my booster code then?
SMODS.Booster{
name = "Arsenal",
key = "arsenal",
kind = "Guns",
atlas = "Arsenal",
pos = { x = 1, y = 0 },
config = { extra = 3, choose = 1 },
cost = 999,
order = 4,
weight = 0,
draw_hand = false,
unlocked = true,
discovered = true,
no_collection = true,
create_card = function(self, card, i)
-- force pack_choices to 1
G.GAME.pack_choices = 1
local gun_cards = {'Sniper', 'Pistol', 'SMG', 'Shotgun'}
local temp_card = {area = G.pack_cards, key = gun_cards[1 + (i-1)%6], no_edition = true, skip_materialize = true}
return SMODS.create_card(temp_card)
end,
loc_vars = function(self, info_queue, card)
return { vars = { card.config.center.config.choose, card.ability.extra - 1, 1 } }
end,
in_pool = function(self)
return false
end,
group_key = "k_arsenal_packs",
}
doth confused
card in that context is self right?
if G.jokers.cards[i] == card
it may be a more productive use of my time to ask if anyone knows where the code that loses a run is
no_collection = true
make it no appear anywere you can spawn it
i would like to turn all of these red buttons blue
but after poking through ui_definitions.lua post patches and trying to patch in some changes myself, i can't seem to make it change from red.
what should i do?
Hu Cards
the patch doesn't seem hard
this might be something steamodded just Yoinks (meaning the original game's version is no longer used at all)?
It crashes when I open the pack
SMODS.Booster{
name = "Arsenal",
key = "arsenal",
loc_txt = {
name = "Arsenal Booster Pack", -- Shown on the pack opening screen.
group_name = "Arsenal", -- Group text (bottom text) for the pack.
text = { "Get your arsenal of guns!" } -- Description.
},
kind = "Guns",
atlas = "Arsenal",
pos = { x = 0, y = 0 },
config = { extra = 3, choose = 1 },
cost = 999,
order = 4,
weight = 0,
draw_hand = false,
unlocked = true,
discovered = true,
no_collection = false,
create_card = function(self, card, i)
-- force pack_choices to 1
G.GAME.pack_choices = 1
local gun_cards = {'Sniper', 'Pistol', 'SMG', 'Shotgun'}
local temp_card = {area = G.pack_cards, key = gun_cards[1 + (i-1)%6], no_edition = true, skip_materialize = true}
return SMODS.create_card(temp_card)
end,
loc_vars = function(self, info_queue, card)
return { vars = { card.config.center.config.choose, card.ability.extra - 1, 1 } }
end,
in_pool = function(self)
return false
end,
group_key = "k_arsenal_packs",
}```
figured it out 
is there any documentation to how to increase the amount of boosters in a shop
code i used for testing
SMODS.Booster{
loc_txt = {
name = "Arsenal",
text = {"description"}
},
key = "arsenal",
atlas = "booster",
pos = { x = 1, y = 0 },
config = { extra = 3, choose = 1 },
cost = 999,
order = 4,
weight = 0,
draw_hand = false,
unlocked = true,
discovered = true,
no_collection = true,
gun_cards = {'Sniper', 'Pistol', 'SMG', 'Shotgun'},
create_card = function(self, card, i)
local temp_card = {key = self.gun_cards[1 + (i-1)%6],
no_edition = true,
skip_materialize = true}
return(temp_card)
end,
loc_vars = function(self, info_queue, card)
return { vars = { card.config.center.config.choose, card.ability.extra - 1, 1 } }
end,
in_pool = function(self)
return false
end,
group_key = "k_arsenal_packs",
}
da ba dee da ba die
no but it's SMODS.change_booster_limit
Yeah I still get the crash with this when I open the pack
change the atlas my bad
I did that already
same error?
ok this work thanks dont know how i bugged it this much
yep
maybe you called it multiple times?
maybe, im trying to have one extra while held by a joker
third var in here
...are you guys SURE that pattern in the patcher has to be the entire line? 
modify it by +1 in add_to_deck and by -1 in remove_from_deck
sorry, what about it?
Not sure whrere that would fit in here
calculate = function (self, card, context)
SMODS.change_booster_limit(card.ability.extra.bonus)
end
use add_to_deck instead of calculate
it does it every cal step
lies and slander (it still proc'd, my blueprint code is fine, just not the disc)
ignore my pretty sample art
Im new to lua and balatro modding lol so idk whats wrong with it
try this return { vars = { card.ability.choose, card.ability.extra - 1, 1 } }
same crash
what would i have to add to my smod code to enable me to have 2 seals on top of each other like this?
like how can i remove the 1 seal per card limit?
SMODS.add_card({ key = "c_fool" }
what would it be for a random tarot card?
set = "Tarot"
instead of key?
yeah
thank you <3
loc_txt = {
name = "Arsenal",
text = {"description"}
},
key = "arsenal",
atlas = "Arsenal",
pos = { x = 1, y = 0 },
config = { extra = 3, choose = 1 },
cost = 999,
order = 4,
weight = 0,
draw_hand = false,
unlocked = true,
discovered = true,
gun_cards = {'Sniper', 'Pistol', 'SMG', 'Shotgun'},
create_card = function(self, card, i)
local temp_card = {key = self.gun_cards[1],
no_edition = true,
skip_materialize = true}
return(temp_card)
end,
in_pool = function(self)
return false
end,
group_key = "k_arsenal_packs",
}
i think you just gotta return the full key now
same crash
i did gun_cards = {'j_bulletro_Sniper', 'j_bulletro_Pistol', 'j_bulletro_SMG', 'j_bulletro_Shotgun'},
is bulletro your prefix?
yep
Is it possible to change or add code to the card add_to_deck function?
like in vanilla jokers?
just for test stuff can you change the temp card to this
no_edition = true,
skip_materialize = true}
like in every card, the actual Card:add_to_deck function
its working now thanks
crashed still
should I make a meme joker that's just 0x mult and 0x chips
and costs $69 in shop
hmm if you want you could send the mod so i can have a viable debug session
sent it
fixed! good code:
miss clicked send it again
there you go lol
thx
i don't like it when i search up questions and they and up having no replies on stackexchange so i always post my fixed code lmao. config center blueprint_compat
this is alsop how i end up learning diet soda is compatible
You're a blessing
I do so much searching in this channel
Anyone have any custom decks I can download and try?
i think that's #⚙・modding-general
but im pr sure there's a git thing
with a lot of mods
i mean i do