#💻・modding-dev
1 messages · Page 247 of 1
i don't think so
is there a context that's after a consumable resolves? like context.consumeable and context.using_consumeable are before the actual effect of the consumable triggers
pretty sure you can use an event in context.using_consumeable
there's no post-consumable context
i hate the use of table as a local var in this 🥴
cards are also just a huge table, you can see them that way
i did say it was a bad practice below, i forgot 💔
the game is a huge table
balatro the table
dinner will be ready soon can you help set the Balatro
balatro with the fine china would be perfect
"babe the guests are coming, bring out the fine china"
(puts a scribbled on napkin and a blueprint for a clown on the table)
wait would this be useful to what im trying to do?
what are you trying to do
trigger an effect if a joker from a table is trigerred
make this effect work
i think they need to also enable post_trigger, right?
probably not, you don't need to find the joker you need to find when it triggers
i still dont know why this isnt working
at this point im just diving through the github to see if i can find anything i can yoink that'll get me vaguely close to what im trying to do and its not working
maybe i am just actually dumb
I mean, it's a somewhat complicated effect. I wouldn't know how to do it without diving into the code
you're destroying all scored cards if the leftmost unplayed card is a dream card
Oh it's supposed to only destroy the left most played card.
I think I know how to do that.
time for me to start drinking lmao
you need to check the enhancement on context.destroy_card, not some other card
don't drink too much
Oh
also that's not exactly the effect your description claims, it says it destroys the first played dream card, shouldn't matter if it's leftmost in the played hand
still wondering this
you could set a temporary ability value once you've destroyed a card in this hand, and reset that in context.before
Oh okay
it goes both ways. the newly introduced blind context works on all calculations, and blinds can use all other contexts
I see, thanks! i'll have to figure out what i'm doing wrong here
what smods version are you running?
most recent, just installed it earlier today after noticing the blindcalc commit
here it is
so why isn't this giving me a hand size of 12?
...how's your UI knowledge? 
i've actually been bashing my head against a wall trying to figure out how to properly get my mod config UI to not act the way it is and failing, it's been giving me no end of grief. no matter what it try to do, it always wants to be all the way to the left. and if i don't restrain the size, it tries to be unnecessarily huge. and i don't understand why. anll i want is for this to be in the middle and to fit on the screen. that's it.
shown code gets returned directly into SMODS.current_mod.config_tab by way of an assert(SMODS.load_file()) so as a result, this thing is its own file that gets to sit in the corner because of what it's doing
i'm happy to share it if it means reining this endless annoyance in
How do I properly set up a deck?
What are you trying to do? Also McClaren sweep
I just want the Name and Description to work
Unfamiliar with how decks work
(Mclaren sweep deezs nuts)
First issue that i can see is that you have Columns nested inside Columns inside Columns. For the flexbox to size itself properly, you always have to alternate Rows and Columns
this worked
thank you
For that you need to set up a loc_txt attribute to the deck. This holds the display name of the deck as well as a table of strings for the description. Should look something like this:
this is what i figured
just wasn't sure and im a lil stupid
All g
do i have to start with rows or columns or does the order not matter
this feels like it should be easy what have i managed to screw up
It depends on your UI layout. For yours because of the centred top text, start with a column containing 3 rows: the two text rows, and a third container for your panels.
Then in that container, two columns, one for each of the blue-bordered containers.
Then a bunch of rows within those containers, each containing one toggle only
In your case just changing the options column wrappers to R might do the trick
How do i edit base game objects pool settings?
you might have to take ownership of them for that
this is 100% a shot in the dark but have you tried taking G.GAME.starting_params.hand_size out of the event?
hmmmmmmmmm
For organization is possible to split the code in the main lua file into multiple lua files which are referenced in the main one?
yes
yes
How do I do that?
assert(SMODS.load_file("filepath.lua"))()
Or separate Lovely modules, which i would argue is a neater way to do it
👍 k will take a look at that later
How do i use this correctly?
how do i force shop to open
without causing this
that's cursed
With examples here:
Modules defined in modules.toml
Patch using module
Module implementation example
how do i return a card to hand?
bump
from where? when?
I want a card to have a chance to return to hand after it's been played.
Reminds me of the demo's Gold Seal
Anyways, you can just use oneof the draw functions
not those draw functions the other draw functions

There's CardArea:draw_card_from
(or was it CardArea:draw_card_to?)
and another one whose name I forget
Im trying to make a joker like blueprint, but this doesnt seem to be doing anything, any idea why?
you can use SMODS.blueprint_effect
how do I make a joker give a seal to played cards?
I can also just use G.hand:emplace
yes, that is what im doing
there's nothing in the wiki about doing that lol
there is
that's skipping some other things that happen when you draw I think
oh wait its not in the wiki?
Oh yeah, but I just want it to return to hand. Not to be drawn again
it only has the references for making a seal
Returning it to hand is drawing it
give me a sec
probably Card:apply_seal or something like that
Oh Oops then yeah. I'll try CardArea:draw_card_from
I'll need to look at the code to see how to apply it though
card:set_seal('Purple'/'Red'/Whatever, true)
where card is the playing card you're modifying
what is the variable for gaining xmult
this is only for UI purposes
yeah thats the text that shows up inthe joker description
im assuming i have to calculate it
does your joker calculation have a return table
ty!
what are you trying to do exactly
Every ante gain xmult
i still dont get what you mean by this, i have it in my code
in your calc function you're gonna do a big if statement that checks for a few things
like did the round end, is this a boss blind
so there isnt a setting_blind but for antes I assume
oops I can't read
not to my knowledge
card.ability.extra.active = true
card.ability.extra.text= "active"
juice_card_until(card,function(card02) return card02.ability.extra.active == true end, true)
end
end
}```
Maybe ask Eremel then idk
this is a codeblock for an effect i have when an ante increases
you're just gonna use those same if conditions and instead of my activation stuff, you'll have something like
do the gain for xmult
card.ability.extra.xmult= card.ability.extra.xmult + card.ability.extra.scaling
tysm
np
bump 2
i have no idea how to help you
sob
if you want you can also have a little message popup for it
yeah, how?
Do you just want to display text or do you want to display the value
Display Value
card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.scaling
return {
message = "X"..card.ability.extra.x_mult,
colour = G.C.MULT,
}
end``` this is some code i use for upgrading a joker, you're gonna want to look at the stuff after return
what those two dots do is they concateante the X with the numerical value of your Xmult
So you get X3 for example
colour can be whatever, although typically for Xmult its red
oh
the ones in config
what pool are suits in the base ones
Does anyone know of a way to make sure the card.ability.extra.money = card.ability.extra.money - card.ability.extra.money_gain triggers after the gold card counts in hand, currently it keeps triggering before the gold increase
if SMODS.has_enhancement(context.other_card, 'm_gold') then
return {
dollars = card.ability.extra.money
}
end
end
if context.end_of_round and context.cardarea == G.jokers then
card.ability.extra.money = card.ability.extra.money - card.ability.extra.money_gain
end```
i think you can do this by using an event? events can be delayed and can have a priority which makes it easier to manage when they get executed
that should work, its needed anyways when the bonus hits 0 and the joker implodes
Does anyone know how I could make a wee joker but for multiplier? I've been trying but I'm struggeling a bit
what are you struggling with
like, it gains Mult for every 2 scored?
also the easiest solution: look at the code for Wee Joker and modify it
uh oh
I dont have any "juice_up" in my code, does anyone know whats happening?
send me your code
like in dm or just here?
its attempting to call juice up in the vanilla game code, you are doing something wrong in your return table i reckon, send it here
here
so if i say anything stupid someone smarter can correct me
you probably have card = self somewhere
card = card would be correct but is also not needed, you can just remove it
Just the joker, doesn't have the other ones:
the message return has x_mult instead of Xmult
For some reason when modifying it to mult, it keeps crashing and giving the message that mults value was nil for some odd reason
it technically doesnt matter which of the two you use, but it needs to be consistent
Give me a minute, I can bring up the code in a second
kk i'll try that
also this should just be return { x_mult = card.ability.extra.Xmult }
what pool are suits in the base ones
even the message part?
{
key = 'binary',
loc_txt = {
name = 'Binary',
text = {
'Gains {C:mult}+#1# {}Mult',
'if played hand',
'contains {C:attention}Ace{} or {C:attention}10{}',
'{+:mult,C:white}+#1#{} Mult'
}
},
atlas = 'Jokers',
rarity = 2, --rarity: 1 = Common, 2 = Uncommon, 3 = Rare, 4 = Legendary
cost = 5,
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = false,
perishable_compat = false,
pos = {x = 1, y = 0},
config = {
extra = {
mult = 4,
mult_mod = 4
}
},
loc_vars = function(self,info_queue,card)
return {vars = {card.ability.extra.mult, card.ability.extra.mult_mod}}
end,
calculate = function(self,card,context)
if context.individual and context.cardarea == G.play then
if context.other_card:get_id() == 14 or context.other_card:get_id() == 10 then
card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.mult_mod
return {
message = localize('k_upgrade_ex'),
colour = G.C.MULT,
card = card
}
end
if context.joker_main then
return {
message = localize { type = 'variable', key = 'a_mult', vars = { card.ability.extra.mult } },
mult_mod = card.ability.extra.mult,
card = card
}
end
end
end,
}```
yeah, it has an automatic message
Give me a second for the message
oh wait thats for applying Xmult
the one that only has a message is fine, it just needs to use the correctly spelled ability value
Wait
i cant figure out why it isnt doing anything
still not working
Wait i'm actually so confused, it's literally working now
what error do you get
Okay, don't mind my problem, keep helping others!@onyx sonnet
oml the formatting on this

i don't think that's how you use SMODS.blueprint_effect
what's the correct way to use it?
it does most of the code you have here for you, and you just return the result
oopsie daisy (part 3)
add it to the config.extra table
do I just do scaling = 1 or something else
replace this with ```lua
if pseudorandom('bad photocopy') < G.GAME.probabilities.normal / card.ability.extra.odds then
return SMODS.blueprint_effect(card, other_joker, context)
end
will do, thanks aure 🫡
well its the value you're increasing your joker's Xmult by
so you choose whatever
what pool are the base suits in?
yeah i wasnt sure wether it was like +1 or somehting
well you have it as addition in your code
wdym
so you could have any number in existence probably
like spades, hearts, clubs, and diamonds. i want to know so i can remove them
Whats the easiest way to make something blueprint compatiable, I just have a basic mod that does x mult on certain cards
i know what you mean by base suits
since its xmult = xmult + scaling
xmult = 1 + 1 = 2
next ante its gonna be xmult = 2 + 1 = 3
if you have scaling as 1 that is
i have it like this but its still throwing the error did i miss something
did you save the file before launching the game
anything is blueprint compatible that you don't specifically exclude in code
yeah
for the display, set blueprint_compat = true on the joker
guys how can i set up an options menu
like turning certain jokers on and off (i have two separate joker files)
wait
did you copy my upgrade code 😭
that has variables that dont exist in base game
oh
ofc its gonna give you errors
i still don't know how or why you want to remove them, or what you even want to remove them from
Is there a way to force a card to skip a red seal repetition?
Actually hmm I think it's easier to just not do it on cards that already have seals tbh
Like the pool, modded suits have an in_pool function, and i want to remove them so this doesn't happen.
in_pool isn't specific to something being modded
POUNDS, YUAN, EUROS, AND DOLLARS AS SUITS???
you can just declare one on the base suit by taking ownership
Or is that Yen... I can never tell.
But doesn't taking ownership mess with stuff?
how so
its yen
it just changes a value
but put it where because i dont know what to put it as so it does that every ante
in this case, the in_pool function
well you already have the check for scaling
having it return false during the initial deck check also removes the base suits from being added to your starting deck
just add the return after the xmult = xmult + scaling part
Oh, i thought it could have some cross-mod incompatibility
i guess so, if another mod also changes the same value and doesn't do so in a compatible way
you can do something similar to hooking the in_pool function by referencing the previous function, should it exist
but it won't mess with anything other than this specific function
is there a way to manually trigger debuffs to recalculate? like if I have a blind that changes which cards are debuffed mid-blind
it seems like debuffs are only updated at the start of the blind and then at the end to remove them
anyone have a better alternative to github?
There's a recalc for debuffs, iirc
im sorry but huh
call G.GAME.blind:debuff_card(card) on each card you want to recalculate
oh, alright thanks
uh how so
I tried deleting them, github said they were deleted
reloaded and the files were back
I'm not sure what you're using for github to be in your files or if you just mean git
are you doing that on the github website or what
yeah
do you not have a local repo
wdym
a git repo on your machine tracking the remote github repo
oh so you don't know git
This is supposed to add chips to the joker but it stays at 0. What am I doing wrong?
yeah i wouldn't exclusively use the github website to manage a repo
the return of a calculate function is for effects that happen in-game in some way
move it out and remove the excess =
Oh
can you even write updates directly on GitHub???
you are peak
with the regular github website, you can really only edit single files
using git on your machine locally is much more practical, but working with git can take some getting used to
I didn't even know it was possible to edit directly on the website
i didnt specify earlier mb
i have a main file, then two seaprates for the different joker sections.
i want the option to turn off or on a set of jokers. i'm GUESSING it'll be something to do with load_file???
besides uploads, at least. there's an edit button
this is the only file I ever use it for
DUDASDAS IM SO HAPPY TYSM
IT WORKS
wait
hol up
imma make it so it says the right thing
add scaling to your loc vars
👍
take "Mult" out of the highlight though
what im doing
oh k
how do i make the currently grey, what is the color
isaac mentioned 👀
have it like this rn
inactive
C:inactive
ty
hehehe
peak
what is that joker next to it that looks like blueprint + lusty + gluttonous etc.
beginners worst nightmare
x1 mult lmao
what's the sprite all the way to the right? I know the others
Icecream
ohhh you're definitely right
How do I return the value from the original function instead of true?
When taking ownership
my test run is dead bruh
exactly
debug plus
currently trying to think of how to implement a joker that turns into a random uncommon joker each round
initially, i thought that when a blind is selected, it would destroy itself, create an uncommon joker, and give that joker the same ability of self destruction and uncommon creation, but then i checked the perma-bonuses page of the smods wiki and realized all it does is change values like chips n mult
also really useful for spawning jokers (CTRL+3 in while hovering over the joker in collection btw)
Can you delay debuff sprites in the same way you can delay sprite changes for setting the card's center?
would it be considered bad practice to look at the code of other people's mods for the sake of reference
i've been using a random mod i found on awesome-balatro to do that
stealing code is good and encouraged
nice to have an all in one
is this meant to be read sarcastically or
No
it's great practice i'd say
oh hi keku
it's fine so long as you credit it imo
yeah i plan to
you could just like have a lil comment above the code you imported
not at all
-- This is from such and such
yeye
id be going to jail if its bad
odious joker isnt turning into another joker so much as it is switching modes
ohhhh
i have actually made code for transforming jokers directly though
but it wouldnt be reliable for what you're doing cause i havent figured out a way to get it to be able to transform itself once its already been transformed, cause all its calculation code gets rewritten to the new form's
This is weird, I am supposed to be playing a sound when we review a card held in hand but it is is playing like all of my sound effects at once
actually to be completely clear i didnt make the code it was repurposed from ortalab
i had an idea of like, creating a custom sticker that has the ability of turning into another uncommon joker with the same sticker
oh that's definitely doable then
so you dont need the headache of applying the ability recursively
the transforming code i've used retains editions and stuff so the sticker can run the code to transform it again and again
yeah it's on the cardsauce repo, search for G.FUNCS.transform_card in main.lua
ty!
this worked thanks
how do i colour the square behind a message return? like how with the ice cream joker the losing chips message has a blue square instead of yellow
colour = G.C.RED or whatever in the return statement
it was difficult for me to get used to writing that as a non-canadian 
Got a mac user that can't get the SMODS patches to work. They're just not patching any SMODS files
it was difficult to put the letters together
known issue, lovely dev is aware
so looking through the code, G.P_CENTERS refers to properties that a given card has, right? (edition, enhancement, seal, sticker)
specifically balatro's card.lua i'm looking through
centers are basically the prototypes for most items in the game
they have most of the critical info for initializing them
mm
Where are lovely crash logs located?
Something in my mod is crashing the game, but it just closes entirely without displaying the crash screen
%AppData%\Balatro\mods\lovely
thank you
is there a way to check when a consumable is created? I want a blind to destroy all consumables that are created during the round
I recommend using the CMtrace log viewer, it will stream in real time and highlights lines with warning and error
I currently have it destroying them when the blind starts, but this doesn't account for consumables that get created mid-round
hey chat what would the correct pattern be if i want to change pseudoseed('boss')?
I tried pseudoseed\(\'boss\'\) and it didnt match
if it's a pattern then just pseudoseed('boss')
i mean both should work so maybe the target is not right?
what line are you targeting?
if you have a pattern patch, you need to target the full line
bump 2 2; electric boogaloo
if you have a regex patch, you need to escape the parentheses but not the quotes
alright, thanks!
So I am trying to set up an enhancement for a card and I have the code for it all set up... BUT I have no idea how to code the consumable that is going to give said enhancement, like what lines do i have to put so the consumable applies the enhancement?
all i know is MAYBE i put something like with a seal like this but beyond that i have no idea (the example mod i have been using to help has no enhancement example sadly)
still working on a fix. it's complicated
no like guys seriously tho i need help
Cryptid has a code card that does that iirc
and it just ended up making this
i presume they have a patch, did you implement that as well
Hmm... I'm trying to figure out how to pre-empt glass breaks.
Pre-empt?
The card effect I'm working on adds a retrigger to a glass card if it's going to shatter
there's a shattered context I think, so I guess I can just try retriggering it from there?
too late
any reason the card itself can't destroy Glass
-# You could try simulating the random seed with the vanilla feature to do so
I added a more robust prediction feature because the vanilla one isn't useful for anything except its one use case
I might have to use it, the main issue with it is that I think it would still be dependent on evaluation order, because the joker could only know the shatter will occur after the effects table has already been put together
at least, if glass cards work like lucky cards
I think making the Joker itself destroy them would be statistically the same except for potentially other modded effects that directly impact Glass Cards
Hmm yeah probably true. Just manually do the calculation myself and then flag it for destruction
Seems simple enough
Any mods that let me spawn in jokers for testing and anyway to restart the game or reload scripts without closing it
DebugPlus!!!!!
that's like hyper^2 factorial^3 DebugPlus
thx i found it
Way better than what i was doing before
time to figure out why this doesn't trigger Glass Joker...
local destroyed_cards = {}
local temp_hand = {}
for k, v in ipairs(G.hand.cards) do temp_hand[#temp_hand+1] = v end
table.sort(temp_hand, function (a, b) return not a.playing_card or not b.playing_card or a.playing_card < b.playing_card end)
pseudoshuffle(temp_hand, pseudoseed('leo'))
for i = 1, 3 do destroyed_cards[#destroyed_cards+1] = temp_hand[i] end
G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
play_sound('tarot1')
card:juice_up(0.3, 0.5)
return true end }))
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.1,
func = function()
for i=#destroyed_cards, 1, -1 do
local _card = destroyed_cards[i]
if SMODS.shatters(_card) then
_card:shatter()
else
_card:start_dissolve(nil, i == #destroyed_cards)
end
end
return true end }))
delay(0.5)
SMODS.calculate_context({ remove_playing_cards = true, removed = destroyed_cards })
end```
I merely want to destroy 3 random cards in hand
and they do destroy, but Glass Joker does not scale if this destroys a glass card
I essentially just copied the code from immolate and modified a few things
WAIT WHAT
Using Immolate on a Glass Card does not proc Glass Joker???
since when
how does one use a .toml
did people know this?
[patches.pattern]
target = "file_path.lua"
pattern = '''line to match here'''
position = "after" #after, at, or before
payload = '''code to insert here'''
match_indent = true
times = 1# of instances to replace```
follow up
what the fuck is cryptid doing here
inserting their own code after that line
ok why do they do
if true then --Cryptid.enabled["menu"]
doesn't that just do nothing
whati s the thing that gives something a chance to happen
I want to make my joker have a 1/3 Chance to give X7 Mult, but I don't know how
pseudorandom("seed")
then check if it's less than G.GAME.probabilities.normal divided by the chance of happening
so for that it would be
if pseudorandom("7mult"<this field doesn't matter that much>) < (G.GAME.probabilities.normal or 1) / 3 then
forgot to reply
<this field doesn't matter that much> is filler lmao
this is base game btw
I just tested it
oh wait I see what happened
literally unplayable
huh?
sorry man im not getting this
Just delete that part
it was just a note telling you that the seed isn't that necessary
Ok
you can make it whatever you want and it would still work fine
you ended the function but you never ended your if
but why is the function not getting the end, makes no sense
yeah the seed is important, but what it is doesn't matter as long as it's different from other seeds in the game
wait
you need an end for the if in calculate
lua syntax is quite verbose and specific sometimes
Also, I want this joker to enhance played 7s to lucky, how would I do so, with SMODS.PokerHand? or SMODS.Rank?
I'm going to patch this in because it's bugging the everliving christ out of me
a calculate like this would be what you're looking for, I believe
context.individual activates per card, context.cardarea == G.play narrows it down to just played cards
context.other_card is the card the context is activated on, get_id() gets the card's value
thank you
this is what i ended up doing - just rewriting the whole thing the way you said
and it's giving me a nil value error (error happens the moment i click the config button and it tries to load the menu)? and i can't figure out what could be causing that
is this just not the correct implementation of create_toggle()?
yo
im learning
i made it so it only does mult when it has a 7 in the hand
and i fixed it not making them lucky on my own
This is usually caused when there's a Text or DynaText object that hasn't been provided a colour. Double-check your spelling and if you're making Dynatext objects, make sure you provide an array to the colours property (not colour) with at least one colour value
is G.UIT.T a dynatext object 
Nope, that's regular UIElement Tezt
i mean, i guess it doesn't matter, it's a text object either way. but it is being given a colour
does it have to be an array?
That looks right
well the only other text is the create_toggle()s 
It could also be caused by a missing set of brackets, all nodes should be a double-nested table
...i think? Or maybe create_toggle already returns a table
Let me check
ohhh
yeah, i think the nesting of create_toggle() is the issue. it shouldn't be nested
oh, you made systemclock! are you aware of a weird issue with it & malverk in which, if you have malverk and systemclock loaded texturepacks don't immediately load on start and you have to force load them via the malverk ui? 
That sounds like the issue with 1.6.0 - 1.6.2, fixed a few weeks ago. I'd hooked the wrong main menu function and broke all other proper main menu hooks for mods that loaded after SystemClock... Not my proudest moment, haha
ahhhh
Also notably caused the Multiplayer mod to disconnect after the first ante
so this is what it looks like now after taking the create_toggle()s out of the nest
Could you post the whole file?
btw you can do a multiline comment with
]]```
I'm on mobile at the moment and can't type up a full table, but i think your understanding is a little off based on the comment about rows arranged inside the column.
Any element that you want to be arranged has to be contained inside either a UIT.C or a UIT.R.
To arrange a group of say 6 UIT.T objects in a column as rows the way you want, you need one UIT.C element, containing 6 child UIT.R elements, and each of those UIT.R elements should contain their individual UIT.T.
So the Options column container should be a UIT.R, containing 2 UIT.Cs
ah, so i have them backwards?
I found this guide with diagrams really helpful when starting out, if you haven't seen it yet:
https://github.com/Steamodded/smods/wiki/UI-Guide
oh, i've seen that diagram. makes no sense to me 
There's also the obscure print_topology() function that all UIElements have, if you're unsure about the tree structure
well i rearranged it to go R, C, R, C, toggles but now i'm back at my original, original, original, original issue of "the text will not go on top and demands to be the first item in a the row of everything rather than first in a column of everything" no matter where i move the text to
do playing cards have an internal sell value? and if so what is it and how do i get it
ROOT (
R (
C (
R ( T ),
R (
C (
R ( T ),
R ( T ),
R ( T ), ...
),
C (
R ( T ),
R ( T ),
R ( T ), ...
)
)
)
)
silly joker that predicts next blind ^^ (placeholder art)
woah how
also what is the menu on the right (ik it looks like debugplus but i didn't know there was a menu for it)
might need to look into that, could be useful for a lot of things
seems like prediction jokers arent really popular
i snooped around turns out predict_seed was talked about only once here
not that i used it, but it seems like the logical thing to ask here if youre making this sorta thing
you didn't use predict_seed or you didn't use the other conversations about it?
most predictions aren't that useful tbh
and I can't even think of one of the top of my head that'd be worth a joker slot
yeaaah my one is kinda dookie too
view contents of selected pack?
the rare is temporary it's defintely uncommon
is there a way to check for last card in hand such as a context.scoring_hand[-1] or does lua not have a -1 to check last in array
it'd have to be executed right since jokers aren't supposed to add ui elements according to localthunk's design stuff
that's actually not too bad
context.scoring_hand[#context.scoring_hand]
i might add that to my mod sometime
still not sure if it's worth a joker slot in most cases though
actually predict_seed is way more useful for something i'm doing in a worse way rn so ty anyways
my main mod #1344061963373641799 has a joker that shows you the top 3 cards in the deck
oh? what might that be?
i thought of that too
I guess you could do a joker that shows the next cards you'll draw yeah
predict_seed is only used in vanilla for finding the first legendary
replacing certain tarots with certain other ones as they're generated
currently mine breaks the 'no repeats' rule if it rolls into the same thing after the first one is replaced, then the second one is replaced too
but with this i should be able to just do predict_seed to replace instead so it doesn't affect the next pull
i think
ac tu a ly
idk if that works
i still havent entirely figured out how predict_seed works, so if youre stuck on it i can chuck at you the two lines i wrote for it
have you tried card.sell_cost?
yes pls
i'm sure it works i haven't tried it tho
was more just asking if it existed or not since they aren't sellable
local key = 'boss'
local newseed = nil
if not G.GAME.pseudorandom[key] then
newseed = pseudohash(key..(G.GAME.pseudorandom.seed or ''))
else
newseed = G.GAME.pseudorandom[key]
end
newseed = math.abs(tonumber(string.format("%.13f", (2.134453429141+newseed*1.72431234)%1)))
newseed = (newseed + (G.GAME.pseudorandom.hashed_seed or 0))/2
local _, boss = pseudorandom_element(eligible_bosses, newseed)
change first line and last line
oh,
though, keep in mind
this can only predict the next step in the seed
interesting
uhh i guess i can package it more neatly hold on
yeah no im lazy nvm, this is what you get, use newseed instead of pseudoseed(' '), if it wasnt clear
Very weird!
It looks like loc_vars behaves differently when a card has a special edition, depending on if it is in your hand or in the overall deck view
Then compared to overall deck view
What does your loc_vars function look like?
loc_txt = {
name = "Akashic",
label = "akashic",
text = {
"Weakens then strengthens the afflicted card",
"Applies {X:mult}x 0.5{} mult to begin",
"Increases by {c:attention} 0.1{} when scored",
'{s:0.9,C:inactive}Currently {X:mult} #1#{}{}',
}
},
on_apply = function(self, card,context)
sendInfoMessage("triggering on pickup logic for this card", self.key)
self.ability.x_mult = 0.5
-- self:set_edition('e_holo', false)
-- card.cost = 10
end,
apply_to_float = true,
loc_vars = function(self,card,context)
-- local thunk= inspectDepth(context)
-- sendInfoMessage(thunk)
if nil ~=context and nil~= context.ability then
return {
vars = {
context.ability.x_mult }
}
end
I found that self refers to the editions own vars, while card is actually empty, but context does contain a handle back to the base card. Maybe the overall view does actually populate card
Unrelated but XMult is usually indicated by with white text using {X:mult,C:white}, by the way
Not sure why LocalThunk didn't just include the white text colour with the X command, since it's only ever used in that one way everywhere
i knew mine looked wrong!
Sorry, i forgot to reply to your comment earlier. This should be the right topology
#💻・modding-dev message
The very first R container is unnecessary for structure, but useful for padding distances
yep, i've got it, just working out some teething issues with the final layout
@stray warren
i'm wondering if i can solve this weird size thing with a maxh but i'm unsure where to put it
I'm not too familiar with editions, but I'm pretty sure self should be replaced with card
also, your parameters for loc_vars are misnomers. It should be loc_vars = function(self, info_queue, card)
on_apply should only be on_apply = function(card)
All this info is from the smods wiki btw. Really helpful to get the definitions right https://github.com/Steamodded/smods/wiki/SMODS.Edition
Which weird size thing?
This is why the context had a handle to card, it's because in this case it is actually a reference to card
well, i solved it, but you see how the main box was weirdly clipping out of the screen bounds? that
ah, that explains a lot about this weirdness, thank you!
Oh, that's not a cropped screenshot, i should have looked closer.
maxh and maxw generally aren't that helpful as the containers already scale to the minimum possible size for their contents, so setting the max either doesn't do anything, or causes bad overlaps
Reducing padding and scale is the way to squish things into place
I think these cards power up way too fast. If you get a joker with this edition, it ends up being very strong. Of course it is a low hit rate edition
been trying to make this suggestion but this isnt doing anything
SMODS.Enhancement({
loc_txt = {
name = "Modified",
text = {
'Reduces blind requirement by {X:mult,C:white}X#1#{} when {C:attention}Scored{}',
},
},
key = "Modified",
atlas = "Jokers",
pos = { x = 1, y = 21 },
discovered = false,
no_rank = false,
no_suit = false,
replace_base_card = false,
always_scores = false,
config = { extra = { reduce = 0.9 } },
loc_vars = function(self, info_queue, card)
return {
vars = {
card and card.ability.extra.reduce or self.config.extra.reduce,
}
}
end,
calculate = function(self, card, context)
if context.main_scoring and context.cardarea == G.play then
return {
G.E_MANAGER:add_event(Event({
func = function()
G.GAME.blind.chips = math.floor(G.GAME.blind.chips * card.ability.extra.reduce)
G.GAME.blind.chip_text = number_format(G.GAME.blind.chips)
G.FUNCS.blind_chip_UI_scale(G.hand_text_area.blind_chips)
G.HUD_blind:recalculate()
G.hand_text_area.blind_chips:juice_up()
G.FUNCS.juice_up() -- Fixing missing juice_up function call
return true
end
}))
}
end
end
})
does it throw, or does nothing happen
How would i check if a certain joker exists by checking from another joker, (Ex: Lets just say the joker checks if there is a lusty joker or something)
I believe you would use SMODS.find_card() for that
it's now how i want it, thanks
do you happen to remember the arguments for create_option_cycle() off the top of your head? 
i've been thumbing through your config_ui.lua for insight, but it doesn't really elucidate what exactly the function expects as a lot of the variables you call it with are inherent to your mod and i'd have to be looking back and forth to figure out the full context
Try adding just a log message to be sure you are hitting this code path
I have done a lot with editions but not touched enhancements
Would i put that in update() if i want to check this at all times
i haven't done editions i would do editions if i knew how to do the shader stuff for them lol
read the book of shaders then start copying and pasting random crap is my advice!
I mean, if update() is called all the time, then I don't see why not
does findcard return true or false
It's all documented on the wiki
The game code is a better reference for that. I think that function is near the end of functions/UI_definitions.lua
didn't send anything
can next(context.poker_hands["Straight"]) only be done with context.before each time i try and use it a second time to upgrade a card in scoring its giveing me a nil error
Im bad at navigating this wiki is there any search, as it would probably reduce my questions by alot
I just downloaded the whole thing as a zip and opened it in vscode
i'm trying to organize my code into different .lua files so i dont go crazy
Briefly, label is the top text above the cycle, options should be an array of name strings that it will display (typically a list defined in a localization file), current_option is the index number of the default pip, and opt_callback is the name of a function it will try to call on every cycle change. This function needs to be defined as G.FUNCS.<function name>(e), but opt_callback should just be the function name part.
those cards look cool
Most of the random functions are under the Utility Functions tab, with the object specific functions being housed in those respective tabs. There is unfortunately no search option other than going to each page and using CTRL + F
thats what they'll look like if i actually find a way to make them function lol
but it's having the opposite effect because i cant figure out why my require calls dont work
i'm doing this in lovely.tmol and requiring each one in the main mod .lua but it only works with the rares
version = "1.0.0"
priority = 0
[[patches]]
[patches.module]
source = 'jokars/rare.lua'
before = 'main.lua'
name = 'rarejokars'
[[patches]]
[patches.module]
source = 'jokars/uncommon.lua'
before = 'main.lua'
name = 'uncommonjokars'
[[patches]]
[patches.module]
source = 'jokars/common.lua'
before = 'main.lua'
name = 'commonjokars'```
otherwise probably just getting thrown to the pile of stuff that could be cool but idk how to make work
Why is it all in a return {} block? That is not how I did mine, nor some examples I looked at
Ok im searching but i cant find this, does anyone know how to make the joker do like the invisible joker shake animation when its active
try removing the wrapping return and curly braces, if you check this example which I know works, they don't have such braces. I also didn't use them in my editions which are functionally similar
if card.ability.set == 'Joker' then
I have a sample for you
You could check Invisible Joker's code in card.lua if you haven't already
in your code, set a card variable that will turn false when you want the jiggling to end
local eval = function(card) return (card.ability.ready == true) end
juice_card_until(card, eval, true)
--will jiggle forever until the end of the round or asomething sets card.ability.ready to false
Hihi
idk removing the return {} didn't fix it tho
SMODS.Enhancement({
loc_txt = {
name = "Modified",
text = {
'Reduces blind requirement by {X:mult,C:white}X#1#{} when {C:attention}Scored{}',
},
},
key = "Modified",
atlas = "Jokers",
pos = { x = 1, y = 21 },
discovered = false,
no_rank = false,
no_suit = false,
replace_base_card = false,
always_scores = false,
config = { extra = { reduce = 0.9 } },
loc_vars = function(self, info_queue, card)
return {
vars = {
card and card.ability.extra.reduce or self.config.extra.reduce,
}
}
end,
calculate = function(self, card, context)
if context.main_scoring and context.cardarea == G.play then
sendInfoMessage("Got scoring!", "MyEnhancement")
G.E_MANAGER:add_event(Event({
func = function()
G.GAME.blind.chips = math.floor(G.GAME.blind.chips * card.ability.extra.reduce)
sendInfoMessage("Got blind!", "MyEnhancement")
G.GAME.blind.chip_text = number_format(G.GAME.blind.chips)
sendInfoMessage("Got blind chips!", "MyEnhancement")
G.FUNCS.blind_chip_UI_scale(G.hand_text_area.blind_chips)
sendInfoMessage("Got blind ui!", "MyEnhancement")
G.HUD_blind:recalculate()
sendInfoMessage("Got recalculate!", "MyEnhancement")
G.hand_text_area.blind_chips:juice_up()
sendInfoMessage("Got juice!", "MyEnhancement")
G.FUNCS.juice_up() -- Fixing missing juice_up function call
sendInfoMessage("Got to end!", "MyEnhancement")
end
}))
end
end
})
the first problem is to solve why you can't hit your log message. Oh yeah, be sure you enabled info level logging if you haven't yet! you get that for free with debugPlus
as a sanity check, is the index 1-based or 0-based? 
It should be 1-based
Is there a global that holds the name of every seal, including modded ones? I want to call pseudorandom_element() on it
G.P_SEALS
yeah i have info level logging
in game.lua
yk that would be a good name for it lol
im a little confused, am i using the function wrong local search = SMODS.find_card('benjoker', false) print(#search), doing this always results in 0 even if the joker with the key exists
it uses the key, so you need to prepend j_MODPREFIX_X
in your case, it would be j_X_benjoker, where X = your mod's prefix
Hmm...... I need to keep cards perpetually debuffed, but I know blinds reset debuffs whenever they need to, so I'm not sure I can set it once and be done with it
pov one of my only attempts at doing something with editions (it didn't work)
why they gotta be this like whole other code langague and not just like a gif or something
shaders are complicated
How could one move jokers from the jokers category to the "other" tab?
In the collection?
...what exactly is it doing when it tries to call the function name i specify in oh, i see it HAS to be opt_callback?
because unlike with create_toggle(), using ref_table and ref_value to link the cycle to the config option doesn't work, so i'm trying to get it to call a function to set the config value to the new value, but i can't figure out the proper syntax because i don't know where and how it's looknig for the function it's trying to callG.FUNCS
If I wanted an event to trigger after scoring, how would I go about doing that?
Hyperglobal = {}
Hyperglobal.config = SMODS.current_mod.config
SMODS.current_mod.config_tab = function ()
return {n = G.UIT.ROOT, config = {r = 0.1, align = "cm", padding = 0.1, colour = G.C.BLACK, minw = 8, minh = 4},
{n = G.UIT.R, config = {align = "cl", padding = 0}, nodes = {
{n = G.UIT.C, config = {align = "cl", padding = 0.05}, nodes = {
create_toggle{ col = true, label = "", scale = 0.85, w = 0, shadow = true, ref_table = Hyperglobal.config, ref_value = "Isaac" },
}},
{n = G.UIT.C, config = {align = "c", padding = 0 }, nodes = {
{n = G.UIT.T, config = {text = localize('hpfx_isaac_option'), scale = 0.35, colour = G.C.UI.TEXT_LIGHT }},
}},
}},
{n = G.UIT.R, config = {align = "cl", padding = 0}, nodes = {
{n = G.UIT.C, config = {align = "cl", padding = 0.05}, nodes = {
create_toggle{col = true, label = "", scale = 0.85, w = 0, shadow = true, ref_table = Hyperglobal.config, ref_value = "Ijiraq" },
}},
{n = G.UIT.C, config = {align = "c", padding = 0}, nodes = {
{n = G.UIT.T, config = {text = localize('hpfx_ijiraq_option'), scale = 0.35, colour = G.C.RED}},
}},
}}
}
end
i believe i have this set up correctly? but how do i link the toggle to whether or not SMODS asserts a file?
edit: i messed up somewhere and now the box is empty
edit 2: actually i’ll ask in the morning when i’m not so TIRED
because that's the code sent to GPUs
what's the easiest way to make a new context? I wanna patch ease_dollars to make a money_changed context
I'm partially aware of how the contexts system works but I'm not sure how to add onto it
is there a function that destroys a certain joker in your hand
check the gros michel code
https://github.com/Steamodded/examples/blob/master/Mods/ExampleJokersMod/ModdedVanilla.lua#L120
okay, how do i get it to save it to the config file? 
...ohhh i have to save the entire table each time... i have to do file i/o, yaaaaaaaaaay
Im running into an issue of i can't put the permanant chip bonus after the if context.before and next(context.poker_hands['Straight']) since it is doing the calculation before the score but if i do a if next(context.poker_hands['Straight']) with context.scoring_hand an nil error. anyone know or see something i dont
--level up code
if context.before and next(context.poker_hands['Straight']) and not context.blueprint then
if pseudorandom('LAGN') < G.GAME.probabilities.normal / card.ability.extra.odds then
return{level_up = true,
message = 'Insured!'}
end
--permanant +10 to last card
return {Flag_LAGN = true}
end
--permanant +10 to last card
if Flag_LAGN == true then
if context.cardarea == G.play and context.individual and context.scoring_hand then
if context.other_card == context.scoring_hand[#context.scoring_hand] then
context.other_card.ability.perma_bonus = context.other_card.ability.perma_bonus or 0
context.other_card.ability.perma_bonus = context.other_card.ability.perma_bonus + card.ability.extra.chips_extra
return {
extra = { message = localize('k_upgrade_ex'), colour = G.C.CHIPS },
card = card
}
end
end
return{Flag_LAGN = false}
end
--calc end
end```
i tried using a boolean Flag to get around it but it had not worked
That's the point where I'd recommend you look at another mod to see how they deal with their config using SMODS, should be a bit easier that way. I rolled my own solution so that i wouldn't need to depend on it
With SMODS, I think as long as your values are stored in the YourMod.config table, it'll trigger a save automatically when the config menu is closed. No need to worry about read/write or anythingel else. It's pretty handy
it didn't.
that's why i'm asking 
i set the value in a way that i confirmed sets it to the table. close config menu. close balatro. re-open balatro. re-open config menu. cycle is set to the normal default option - which is loaded from the config table
...actually...
Hrm. Okay. Make sure you've got a local or global variable (depending on your situation) called something like mod_instance or my_mod or whatever makes sense to you. Then assign that mod_instance = SMODS.current_mod at the start of your mod initialization
yep. it does that.
Then i believe the SMODS config table will be accessible with mod_instance.config
There might be a load_config function to run at the start also, I'm running on memory right now
the more perplexing thing is that now i'm sanity checking by changing the var and closing the config menu
it is not updating the file.
Are you looking at your local config.lua file, or in the %AppData%/Balatro/config/YourMod.jkr file?
the latter
okay nevermind this was super easy actually
I remember running into a problem where it seemed like SMODS was checking the type of the default variable set in config.lua and discarding the new value if the types mismatched. Could it be something like that?
nope, i definitely made it a number.
the only thing i can think of is that this is something that i am changing from a boolean value to a number value, but that shouldn't be an issue
not like, in runtime
but this config value used to be a boolean value, but i'm making it a number value now
if that makes sense
That might be an issue, yes. That's the type mismatch that I'm referring to
dont know what made it work but its fixed, praise the machine spirit
do i really have to make a whole new variable in the config table just to use a different type 
Is this possible?
Yep, that's what SMODS wants. That's also why opt_callback comes in handy, as you can do your own more complex variable assignment in there.
You're welcome to copy my config save/load system in SystemClock as an alternative solution, it's SMODS-compatible but doesn't exclude different types and keeps arrays ordered.
Whatever you think is easier and more reliable for your use case
how do i change the rank of a card again
I am absolutely new to modding in general, but have some programming experience and want to try and make something little for a friend. How exactly do I start modding?
I'd imagine I'd need to download a lua environment and maybe even steamodded?
does anyone know how to exit a for loop prematurely?
break
Or move your loop to its own function and return. Different people have different preferences
similar question: what's the best way to ignore a value in a for loop, but have it still continue regardless? is the only way to have an "if" statement?
Possible?
In other languages you could do if not condition then continue, but Lua doesn't kave the continue keyword for some reason
i just use label for that
For code neatness you could predefine an array of values and iterate through that instead, but it likely wouldn't be any faster than just checking if condition then ... end for every iteration in the loop
This guide has a few handy links about how to use the Steamodded API and a bit about the game code structure https://discord.com/channels/1116389027176787968/1349064230825103441
ty
If you've programmed before, whatever code editor or IDE you're comfortable with is probably fine. Lua doesn't require any specific environment, set up or build configuration since it's (sorta kinda) an interpreted language.
I'm happy with VSCode and the Lua extension personally, but different strokes for different folks and all that
Impossible?
how can i display attention_text over a played card with an enhancement in that enhancement's calculate() function? it keeps showing up in the wrong place and idk what i'm doing that much
how do I check if the player has a joker selected?
cards gone™️
somehow caused a crash? card = nil somehow
not ability set, and it worked in the past
im essentially only wanting it to upgrade if a Joker has been sold
it's not steam cloud sync bs (esp. because i disabled steam cloud just to rule it out), it's not weird file bs.
SMODS literally just isn't saving the value
wtf why didn't it record the console window
oh right, i dragged it in
balatro just doesn't like being recorded
this is the function the cycle calls
i just can't understand what's wrong
I tried that and couldn't get it to work
Careful where you put this, as SMODS.current_mod will only point to your own mod for a brief period on loading before moving onto another mod. This might well destroy or overwrite other mod's config files
this is right at the start of my main lua file and the mod priority is 99999 
is there a better way to guarantee that it'll be this specific mod that it's getting
I have it initialized like this
No worries. From your screenshots I thought it might have been in G.FUNCS.cir_CycMatureReferencesVal
ah
what is the [1] for 
find_mod returns a table, [1] gives the first element
im trying to make it work for every hand played but it only does it one time every game i dont know how it works
change context.scoring_hand to context.individual and then you can refer to the scored cards as context.other_card instead of using a separate loop to iterate through the scored cards
the reason it is triggering once per game is because of card.ability.extra.triggered not being properly reset to false
if you want it to be once per hand, set it to false during context.before
if you want it to be once per blind, set it to false during context.setting_blind
i assume it is meant to be one of those two
i wanted it not once per hand just it plays it every hand like i play a 4 and 7 it trigger in the same round i play a another 4 and 7 and it triggers etc etc
then... what's the point of card.ability.extra.triggered?
im just taking code and hoping it work ngl 😭 💀
yeah you don't need the card.ability.extra.triggered blocks then
you can js get rid of those
you should do this as well
replace played_card in your checks with context.other_card and remove the for _, played_card in... loop (and its corresponding end)
and then move the line local has_4, has7 = false, false inside the if has_4 and has_7 block
this will make it play every time a 4 and 7 are played regardless of how far apart they are, even across different hands and different rounds
if you want it to reset after a hand anyway you can re-add the false changes under context.after which is after a hand is played
Is there a way for a print command to print everything instead of "+x more values"?
realising this is a lot i might just rewrite it for you if you're cool with that
im changing it hold on
alright
i think i fuck it up because its crashing from line 61 at local has....
don't return
you don't need to return anything during this block
the one on at the if has_4, has_7 ?
both of them inside the if context.individual and ... block
the first is redundant and the second is causing the crash
if you want a message then there's two other ways of doing it that do not involve a return
one of which is apparently better but i don't know how to do the better version
so card_eval_status_text it is
although this doesn't seem like an ability that should have a text popup when triggering
balatro standard would be to use card:juice_up at this point
-# this is way simpler than the message stuff anyway, this is the line of code that makes the card do a little shake animation
but there's nothing stopping you from doing a message if you still want one

that means remove the {} as well
do you or do you not want to keep the message
you do need to return the message or use another method
okay then you should also localize it
hard coding a message to english isn't good practice for future translation but you can handle that later probably
remove the on_hand_start section it's no longer needed
also what is this joker actually supposed to do
i notice you're trying to make it give mult during joker_main but also during the other context check?
it gives +10 mult if a 4 AND 7 are played and scored
so
why are you using xmult_mod
and the way you phrase it, it sounds like it should be once per hand
this is second card i ever coded
😭
wtf
what happened to SMODS.current_mod
somebody reported crashes on startup, and I changed it off of SMODS.current_mod and it fixed it
how
maybe its foreshadowing the fact astrapboy doesn't own Mistigris...
nahhhhh
becuse the mult is to high ? i could get it down a bit
we just dont know...
no, because of the phrasing
oh
the joker's effect is as described by you gives +10 mult if a 4 AND 7 are played and scored
which implies that, after a hand is played, if the hand contains a 4 and a 7 that score, it gives +10 mult once
but the way you code it makes it seem like it should be gives +10 mult after a 4 and 7 have both been scored
which could activate infinite times per hand, activating immediately once a 4 and 7 have been scored
so is it the first one or the second one
[SMODS mistigris "src/startup/smod_hooks.lua"]:9: attempt to index field 'current_mod' (a nil value)
the incriminating code in question:
infinite time per hand
alright then
Is there any function to define own mod description UI?
change card.ability.extra.xmult to card.ability.extra.mult
go to the joker's config = { extra = { xmult = X } } line and change it to config = { extra = { mult = 10 } }
change the xmult_mod = on line 61 to mult =
add a return { that starts after line 60 and ends with } after the colour = line
😭
remove all the code under the context.joker_main block after doing these other steps (do this last because it will change the line numbers)
darkwoke
ctrl + h to do find and replace btw
ok
maybe don't do that actually it could fuck up your other joker
if it also uses card.ability.extra.xmult
ctrl + shift + F would allow for better replacing, since you can pick out where to replace
that opens the search bar in vscode
like that ?
no
the return should start 1 line lower
do not put the local has_4... inside it
you removed the code that sets has_4 and has_7
put it back
remove the return and end on the lines directly below context.individual
-# i've said this twice now
@manic rune
where do i put it before or after ?
is this copied from kym directly
i copied from google
i added the return { but i dont know if its rigth
remove the if context.joker_main block
you moved the return up???
move it to the line above mult =
make a new line to put it on
you know i think that's probably easier
backseat programming
😭
hey they never turned down the help they came here for help
i give help that gets overridden when someone better than me shows up
that's my joker 
😭
like you
no im having breakfast rn
lets summon aure to help with simple code :3
alright great i can preach card_eval_status_text quickly
@frosty dock how do I print to console help me
it's pretty simple actually
local console = { log = print }
console.log('Hello World')
😭😭😭😭😭
we are java scripting in lua now???
you don't know JavaScript
do you want to be a developer
i want to
Fuck JavaScript
insanity
calculate = function(self,card,context)
if context.individual and context.cardarea == G.play then
if context.other_card:get_id() == 4 then john_has_4 = true end
if context.other_card:get_id() == 7 then john_has_7 = true end
if john_has_4 and john_has_7 then
return {
mult = card.ability.extra.mult,
}
end
end
if context.after then
john_has_4 = false
john_has_7 = false
end
end
this is yours now replace your ENTIRE calculate function with this code
there is no message because i think it shouldn't have a message because a message is already output by the mult being output
it doesn't have and not context.blueprint because this code is perfectly blueprintable and it's not an end of round effect so it has no reason not to be blueprint compatible
make sure you change blueprint_compat to true though
this should kill a lot of Cryptid runs tho
Finally, a way to kill negative deck
i don't kill editions
i don't specifically kill negatives
yes you do (you just did)
i kill jamming cards into your area
sometimes cards are just jammed into your area
my 4 chicots:
but you have 5 joker slots

real asf actually
exactly why you need chicot for this one actually
i've been wondering if it is possible to make my chicot fusion automatically win blinds that include disable, disabling or disabled in their descriptions (or by a hardcoded list of blinds that do stuff when disabled)

you know just to send a message back at the anti chicot blinds
is that a thing i can do
true
even tho i have "Disabling this blind sets requirement to some big number"
i have this bullshit
This is so stupid lmao
i think it evens out
im also gonna make it return saved = true so a blind can't pull "disabling this blind instantly loses your run"
it's going to take you a lot of shit to get rid of me
you are up against the wall and I am the wall
uhh payload juggernaut said that i think
how about "Disabling this boss blind starts a new run entirely"
it joins the next run and instantly wins that run
I read "I'm going to pin you against the wall" and was confused lol
can i just pay you to code it at this piont like i got other idea for jokers and all
you won't know unless you check
after what just happened with jen's almanac i'm
quite scared to ever accept money for code in this context
i'm also very busy with other projects at the moment
Marie drama
what happend?
squid games
is this a trap set by Playstack 😭😭
Marie drama would be like "She got caught selling the splash card"
marie
sometimes you do want to sell it
like on red/blue/green deck splash sleeve
splash...
helo 46 year old from somali selling wife for internet connection
i got fucked up by my own joker. thanks Judgement
well thats the beauty of it
wtf
"oops"
splash is inherently splashable
why would you want that 😭
blame judgement
you know what
Free driver's license proc
might as well buy invisible joker for 60 bonus cards
silly
And hologram scaling
Stonks
And sooooooo much blue joker value
at most points while running my mod if you have a regular splash for too long it becomes a burden
-# which is also why i'm making ripple count as splash in fusions as per the polls because this is actually a really big problem when running my mod
yes, but
your deck is fucked after that
Clearly this is the best joker ever
sell this card to double your deck size right now
good early game for drivers liscense
oh
someone already said it
something about this wording is really funny to me
the card demanding "Right now"
RIGHT NOW
It has limited application and a stupidly absurd drawback
i swear to god i cant be the only one reading "deck size" as smt else.
imagine diet cola with "sell this card to create a double tag Right Now!!!!!"
The wonderful ceremonious dagger:
Ripple too good 💪
someone make a mod that changes all the jokers to be aggressive
Unless you're playing some fucked up plasma build with splash
SO TRUE
oh i gotta go get madness and cere now
thanks
I 💙 splash
i love playtesting my own mod
Jimbo but he says a swear word 😱
Holy shit i feel like yandere dev💀
jimbo gives +#$%! Mult
Or
well you're not yandere dev
because you listen to feedback and let people help you
What if Jimbo drank alcohol and said BITCH!
like a reasonable human being
you are nowhere close to the level of yandere dev
stop it guys you are going to make me blush
-# what
yeah okay we're gonna stay very away from this actually
i'm just gonna put this ocean between us and communicate to you via message bottles
it seems we both agree on something there
i hope that's not an inconvenience
