#💻・modding-dev
1 messages · Page 431 of 1
bump
It seems to have something to do with the recursive_extra function, I also tried using the new SMODS.merge_effects but that didn't change anything.
I cant help with the latter, but the first issue is bc you have no text to display, so it defaults to ERROR
Looking at SMODS.Booster, looks like you haven't defined the group_name string. You can do this either in a localization file or in loc_vars, though the localization file is the better way to do it
i have this
ignore the first 3
So it must be something wrong with the table being inputted because the function works fine in seals or elsewise.
do you have an example in-code? im not completely sure what the localization is trying to imply
Are there problems with this?:
The main focus is just that the key needs to be in misc.dictionary instead of misc.v_dictionary. I think moving the lootpack keys there should work
I'm trying to play a sound, but each time it tries to play the game crashes saying it couldn't find the file. Can anyone help?
play_sound('Bonk!', 0.96 + math.random() * 0.08)
are you using copy_table at any point? i dont see why it would hard crash
that did work, thank you
Oh, and the background colour issue is just a typo -- needs to be ease_background_colour instead of ease_background_color
I don't think so.
The only reference of it in my code is commented out.
hmmm weird
im sniling
the only think i can imagine is that it's trying to do something recursively and causing a stack overflow but idk what
Emptying the table doesn't do anything but setting the table to {} fixes it?
Isaac
when you use SMODS.merge_effects, how are you calling it
My partner (whose much better at coding than me) has tried to help me with setting up a joker, but it isn't triggering in game, any idea whats wrong?
SMODS.merge_effects(extraseals) extraseals being the table with the effects in it.
It happens with my original recursive extra function aswell.
extraseals is an array of the return tables right?
Yes.
No, because I'm pretty sure it's crashing at the line of SMODS.merge_effects because it prints things before it but not after it.
sorry for making a broken function 😭
do better
the only thing i can think of is that one of the tables has a reference to the other tables
I'm trying to make a challenge that bans every card except for one but this code doesn't ban any modded jokers, am i doing this completely wrong or do i just need to make a slight change
local banned_jokers = {}
for k, v in pairs(G.P_CENTER_POOLS.Joker) do
if v.key ~= "j_ckl_darren" then
table.insert(banned_jokers, {id = v.key})
end
end
SMODS.Challenge({
loc_txt = {name = "Where More Good Things Happen"},
key = "ckl_wmgth",
rules = {
},
restrictions = {
banned_cards = banned_jokers,
},
unlocked = true,
})
G.P_CENTER_POOLS might not have modded jokers until the game finishes loading
so probably it won't work this way
is there a different way to do it
uhh not sure
Install python, then run py resize.py <your file to resize> in the command line
How do i apply a seal to a card? Is it the same as applying a sticker?
card:set_seal("modprefix_key")
Ty!
I'm trying to play a sound, but each time it tries to play it, the game crashes saying it couldn't find the file.
Code:
play_sound('Bonk!', 0.96 + math.random() * 0.08)
You need your mod prefix.
bump
No, you would do play_sound('modprefix_Bonk!', 0.96 + math.random() * 0.08)
Is there some kinda program that makes making a mod for Balatro easier? Almost like MCreator for Minecraft, but for Balatro? Ive had a few others tell me there arent but I figured I'd see if anyone knew anything
No.
Dang alr, thanks!
It still crashes and says that theres no file
Show your sound definition.
What does that mean again?
The SMODS.Sound?
so, this is doing everything I need it too except for 1 thing, it's not actually giving $2 when an ace or 8 is played, so uhm please help I beg
Does Bonk!.ogg exist in assets/sounds?
is there a way to make a joker always have eternal?
Yes.
how
set_ability = function(self, card, initial, delay_sprites) card:set_eternal(true) end
thank you
Any idea what is wrong here? No errors or crashes but the joker just never triggers
card would be the joker and even so .base.id would be a number also please use pseudorandom
Am I crazy, or isn't "card" in that instance also the Joker itself?
The code was primarily put together by my partner who hasn't played balatro yet but knows lua and coding a lot better than me
This is how I check and calculate for Queens of Hearts for example
with some reading of the Smodded wiki
not enough reading 😔
i assume your goal is to turn all jacks and kings into queens?
or a 1 in 4 chance to do so
you can access a card when it is scored by accessing context.other_card in context.individual
Preface all this with, I'm still relatively new at this myself. I think within the calculate function you're going to want to check and work within the "context.individual" and use "context.other_card". context.other_card:get_id() of 11 or 13 should be a jack or king.
yeah
And then because this is a seeded game, and you want it to remain deterministic, while appearing random, you'll want to use "pseudorandom" instead of lua's math.random
Oki thanks for the help
I know why this doesn't work, UIT has to be something else instead of 1, game.lua apparently has a table somewhere of valid ui types, but i cannot find it
Where in the wiki can i read more on using this? :3
thx
Ok so the code to check if the scoring card is a king/jack would be this?:
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play then
other_card:get_id() == 12 or
other_card:get_id() == 13 then
return
followed by my return to mess with stuff?
No, it would be context.other_card instead of other_card
Ok
id=12 is Queens as well. id=11 should be jacks
Oh right forgot the scaling for the cards lol
bump
globals.lua
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play then
if context.other.card:get_id() == 11 or
context.other.card:get_id() == 13 then
return {assert(change_base(card, nil, 12))
}
ok this is what i have, when the joker should have triggered i was given an "attempt to index field 'other' [a nil value]" crash
you put other.card instead of other_card
Thank you
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play then
if context.other_card:get_id() == 11 or
context.other_card:get_id() == 13 then
return {assert(SMODS.change_base(card, nil, 'Ace'))
Currently have the card its meant to become set to ace since that is what the example has, even if its 'Queen' iIget "tried to call SMODS.change_base with invalid arguments suit="nil" , rank="Ace" (or rank="Queen")"
-# also sorry if me asking for so much help is annoying
Move the function out of the return.
you want to do SMODS.change_base(context.other_card, nil, "Ace")
Ok sweet it worked!
Is it possible to have it do the flip animation similar to how death works and or a custom animation, before the cards are discarded?
you can probably do card:flip()
Where do i implement that in the code :?
how do i make it so that my joker can't show up more times with showman?
You would hook SMODS.showman
No, they want it to not show up more than once even with showman.
Ah
Read it wrong myb
Well you still wouldn't need a hook, you could still use in_pool
let's goo
how can i make the held in hand card give more chips when played next time for every destroyed card?
how to add a joker to your jokers with the console?
eval SMODS.add_card{key = "key"}
would I just do SMODS.Showman = false or what?
i would recommend the in_pool method too personally
in_pool = function(self, args)
return not next(SMODS.find_card("j_modprefix_key"))
end
the other method is
local smods_showman_ref = SMODS.showman
function SMODS.showman(card_key)
if card_key == "j_modprefix_key" then
return false
end
return smods_showman_ref(card_key)
end
you don't need to check in this one actually
like that
I see why you recommend the in_pool method
had a crash involving this function in card.lua
any idea what it's for?
(line 242 being for key, _ in pairs(self.T) do)
iirc it sets the size of the card correctly when setting the ability to a different one
like from wee joker to another
huh...
well in terms of set_ability (this is the fodder joker for ijiraq
transformations i was talking about) i have this?
which is within its function of course
i feel like that has some extra stuff that's not needed like the set_sprites or card.config.center
granted this hasnt been worked on in a while
smods has been through some huge updates since
card:set_ability(exceptions[...] or jkey or "j_joker", true) should work
(obviously abbreviated)
that was also abbreviated
i see
fixing
i'll see if it crashes
for some reason it still uses the regular sprites though???
that's weird, you shouldn't need to use set_sprites
what would be the code to give the strength tarot card?
maybe you do inside set_ability
it has patches, maybe one of these isnt working?
hmm i would try adding back set_sprites
SMODS.add_card{key="c_strength"}
thank you
strenght....
same thing it had probably
k
did i spell it wrong
n
fixed :3
teehee
one more check before i test
actually that true wasnt there
alr here's hoping
yeah no that's regular supernova
did you spelling it wrong and me copying it cause this?
still crashed on ability usage (in this case scoring)
How am I supposed to link my localization for my Joker's text (I know I already have text in my joker but I want to remove it) ? I know its a dumb question.
just remove the loc_txt
idk then :3
does it crash without the set_sprites
gonna find out
is your localization file in a localization folder
yeah like in my screen shot
descriptions
cooked me ngl
what's the mod that shows the joker values in a box beneath the joker
JokerDisplay!

I think it looped a few times (ignore the fact of the description being written wrong) any ideas why? this is my code
i promise this is relevant to your question: do you have a link to/use vanillaremade
yes
omg it was only that, big thanks
did I need to add the and context.cardarea == G.jokers?
which section, joker?
too late
if context.end_of_round and context.game_over == false and context.main_eval
I just want it to have the ability of the joker and then transform when it’s triggered is that so much to ask
i think the problem might just be calling set_ability inside set_ability
wait actually?
Im sure its obvious but why does this reset when a blind is selected?
apply = function(self)
G.E_MANAGER:add_event(Event({
func = function()
-- = -3,
--G.GAME.current_round.discards_left = +3,
ease_hands_played(-3)
ease_discard(3)
return true
end
}))
end
those functions only modify the current round hands and discards
Do you see how it says current round
you need G.GAME.round_resets.hands/discards
Oh okay
you want both actually so they modify the value properly the first time
hello, i just got here an i need help. I wanted to make a mod to the base game where the only thing that changes is the names of items/jokers/poker hands/etc i thought this would be easy but i cant get it right can anyone help?
I probably won't be able to finish working on it tonight, if it isn't too much of a hassle can someone dm me the wiki links to the documentation on pseudorandom and how to use card:flip?
this is a texture mod that changes text
you only need a main mod file and a localization folder
https://github.com/xssgm/Touhou-Balatro-texture-pack/tree/main
neither exists
Ah
That feels a bit short sighted, at least for pseudorandom.
Any tips on how to use them?
Where should I place it code wise so it triggers after scoring but before the cards are discarded?
uhhh maybe an event in final_scoring_step? im not sure
looking at this i want to made something similar to the default.lua folder under localization, is there a way to find a document like this with the original game's text, not the already modded text
unzip the game's exe
can i do that on mac?
The order of actions for my joker would be
Score king(s)/jack(s)
Chance Trigger Calico
Flip and flip back to show that they are now queens
Discard played hand
or use vanillaremade for english maybe
no idea
There's instructions on how in the modding resources part of the steammodded gitgub
For mac
i saw that but none of it applies to text modding
Ah
like theres stuff on how to make the balatro text and font but not how to change names of things in game
I think I saw a video on just renaming things but not sure if it would work for Mac
do it with .app file
thank you aiko
Steam version right
i have steam version, yes
it's inside balatro.love
i have never seen love before
how do i even open that?
so like copy and paste it onto desktop
mood
ok im here with it
sorry i need a bit of hand holding, ive never done anything like this
you need the localization folder from there
the one for the language you want
after extensive research i have 3 notes
- the costume appears with the sticker while in the shop, which gives it away that it’s fake
- if the joker doesn’t do anything scoring wise then it’ll trigger like normal, but the transformation won’t trigger
- How do I fix what you mentioned here?
wait its languages 💀
How do I generate a planet card of the last played hand type with a joker?
no idea how to fix that honestly, seems complicated
It is <3333 might just release without the engine <3333
ok so what program edits .lua files?
Can someone help me? I want to know what splash does in the game code. I've tried to look everywhere but I can't find it. I want to create a seal so that the card that has this seal is always scored, but I don't know how to make this seal because I don't know what splash does for the card to always be scored.
I hope you understood what I meant
Thanks
VSCode is good in my opinion, though I don't know if there's a more commonly-used code editor for MacOS
https://code.visualstudio.com/docs/setup/mac
And the Lua extension is very helpful
https://marketplace.visualstudio.com/items?itemName=sumneko.lua
that's why i made it :3
back in my day we didn't have vanilla remade
thank you so much :3
you had to manually ask it to show mult message
back in the day we had card = self
can confirm
I have a blind that I have no idea if I can implement
The concept is that Scaling Jokers scale in reverse... but the infrastructure required to do that and make it not be jank might be too much
back in my day we didn't have smods.joker
I wonder if there's some really lower-level Lua thing I could take advantage of to know when a value on a table has changed?
pro tip: do not be like cryptid and do jank for scaling jokers detection
there are a lot of values that can change while not necessarily being scaling
I know, yeah, that's what I'm concerned about
look at double scale or something
All of my jokers are very specific about it
You could temporarily change mult mod values and store original values to restore after blind is over
Metatables! https://www.lua.org/pil/13.4.4.html
I don't put scaling values anywhere but in the extra table, but I can't expect everyone to use the same paradigm
For example^
Oh!!!
Hmm yeah fair
Apparently im a better coder tired than awake because ive figured this out on very little sleep but now i just cant? Why does it just crash on use?
Hmm yeah if I can take advantage of this, I could definitely do something more along the lines of "scaling jokers don't scale"
Because it's more reasonably to just expect to prevent values in card.ability or card.ability.extra from changing, rather than interpreting what changes mean
I don't know how many effects that might prevent that aren't necessarily scaling though
Often a major consideration for mod compatibility isn't "how would this work in a best case scenario" and more "what's the most generalized way to do this to account for code potentially being written in an suboptimal way"
what line is crashing
That's the thing, i can't tell, it says line 205 but its in a completely different file
💥
I don’t think it’d be very different from scaling in reverse (for implementation purposes)
Scaling jokers would need
- Total value
- Value change
I’d assume you make the effect of “scaling jokers” do not scale by crawling through the extra table and changing non scoring or non money values to zero, you could do the same by just making it negative right?
If you just make all numbers zero then it would remove 1. Total value as well
No it's more like id intercept the changes and revert any changed values back to what they were at the start
Hmm
Because setting them to 0 requires more assumption (I think) about what values mean
Easiest way is to do a temporary debuff?
But idk how to differentiate between scaling and giving the ability
Yeah it would also debuff certain other jokers
Also scaling jokers that score at the same time
It's a tricky problem but not impossible. If it means learning more about metatables though, it'll be a fun challenge!!
Like split pants
Ping me if you figure this out, I’m interested as well now
I'm familiar with something similar because at my old job, we used a ReactJS UI, which typically has a paradigm that it doesn't update the UI until any value has changed and tracks changes to those values
:o
For performance reasons but also it's useful to the developer to know when the UI receives an update rather than it just being continuous
How does tags generation works?
I want to generate a tag randomly
My seal doesn't work
what is the seal supposed to do
apply the splash effect but for that specific card
why exactly does it not work
I play the card (with the seal) with, for example, a pair, and it doesn't count together, but it was supposed to count
a what
?
Basically, the card with the seal scores points even if it is not to score in the poker hand played.
I want to create a modded joker that creates one red-seal steel king every round, how would I go about doing this?

dw im @dense wedge mate

How would i get the direction that a card is facing?
Someone help me
what about it doesn't work
is there a readily available database with all the code names for like, money colored text, mult text, and all that fun stuff in joker descriptions?
YAYY ty
We really should get someone to pin the wiki here, or maybe that mod starter pack thing that was mentioned this morning
might be my fav joker art ive drawn
i drew a bunch for femto labs collection too but i think i have a much better grasp on pixel art now
not a reference to anything specific just found a really cool photo i liked alongside some others looking for whales
I meant the functionality but that's still neat
Like a Microtransaction Whale lol
ohhhh i see
in my head the cards are little plankton
in a way we are all the whale
I feel like this is a very simple thing that i should know by now
The card with the seal was supposed to be scored in any hand played but it is not
how can i tell if you're in the big blind shop
G.GAME.blind:get_type() == "Big" doesn't work in shops
i could store the last blind but i'd like to know if there's something better for this
How would one increase/set the money per remaining discard stat?
change G.GAME.modifiers.money_per_discard
does anyone know if theres some super awesome and efficient way to check both
- if the player's deck contains a specific hand
- and get the bare minimum cards that make up that hand
ouch
yea i had a funny idea for a deck that always makes you draw the hand with the highest score that's also in your deck
oucher
i have ideas but i feel liek all of them would cause exponential amounts of comparisons/checks if you got more cards

how do i get the mod i made to show up here?
okay minimum case -- straights only, get_straight() checks
get_straight() is really slow function wise
52 choose 5 is 2598960
actually
do you know what function is used to get whatever hand is being selected by your current cards
i could just guess based on what happens if you """select""" all of your cards and then get a valid list of cards which applies to that hand
G.FUNCS.get_poker_hand_info(G.hand.highlighted)
hell yea thanks
I actually had to do this specifically for myself, hold on
-- boss blind shop
elseif G.GAME.round_resets.blind_states.Small == 'Defeated' and G.GAME.round_resets.blind_states.Big == 'Upcoming' then
-- small blind shop
elseif G.GAME.round_resets.blind_states.Big == 'Defeated' and G.GAME.round_resets.blind_states.Boss == 'Upcoming' then
-- big blind shop
end```
very useful

ive already installed pillow for resize.py but im getting this message from the script
C:\Users\philippe\AppData\Roaming\Balatro\Mods\PhilsAwesomeMod\assets\1x>py resize.py Jokers.png
Traceback (most recent call last):
File "C:\Users\philippe\AppData\Roaming\Balatro\Mods\PhilsAwesomeMod\assets\1x\resize.py", line 2, in <module>
from PIL import Image
ModuleNotFoundError: No module named 'PIL'
have made some progress
i have a functioon now that looks through your whole deck and draws a specified hand (if possible)
It's possible that you have multiple python installs, have installed Pillow in one, but are running with a different install.
Could you check the contents of %UserProfile%\AppData\Local\Programs\Python ?
It's also not absolutely necessary to use resize.py, and it's almost definitely easier to resize it with a proper image editor like GIMP or Paint.NET or Krita. Just make sure you resize with "Nearest Neighbor" or No filtering" and they'll look fine
how could you make a card draw first priority? i have this code that i feel like, should work, but when i eval it it never draws the list of cards first (regardless of when i run it)
card draw first is decently difficult
cryptid code is MOCKING me with this
Cryptid code is stinky to reference
tbf theyre one of the few mods i know does draw priority
also my mod is a cryptid addon so i am inclined to look there first
Unfortunate
ok so i have an init.lua file that changes the text of items but when the mod is launched, the regular game text appears to overwrite my modded text
theres still something slightly off
also chatGPT has no clue what the fuck is going on either so it cant help me
Using CGPT will never work for this
i know this
I did it! I figured it out with no help
iirc if you're looking for cards that stay flipped between zones (like from wheel), you'll want .ability.wheel_flipped I think
I'd need to check my code though
tested, it does not
you can just do:
#SMODS.find_card("j_modID_key") > 0
skips the effort of having to do it yourself
I already solved it awhile ago, ty tho!
ok how do I force a loss
How does one make it so a joker shows two messages? I currently have message = localize { type = 'variable', key = 'a_mult', vars = { card.ability.extra.mult } }, and message = localize { type = 'variable', key = 'a_chips', vars = { card.ability.extra.chips } }, but only the chips message shows up
Is there a reason you’re not using the default messages?
how can i get cards in hand?
like forcibly draw a card or...?
i want to make all card held in hand get an enhancement
G.hand are the cards in hand
G.hand.cards
ok thanks
You need a mod_data.json file in your mod.
Default messages?
Yeah, calculation has default messages so you don’t need to add them yourself, you just need to use the correct keys
Tell me more, because this is something I don't really understand as I'm new to making Balatro mods
I’d recommend looking at the calculation guide on the smods wiki
you mean this?
I honestly can't find anything that would work
Can you access the hand_chips and mult after a hand is played from a joker?
the entire mod is functional, thanks tho
Mod getting detected now?
Can you show the entire return block?
...what would be the return for the context.check_enhancement? 🤔
key_of_enhancement = true
how can i level up a poker hand?
In the calculate function, return { level_up = true }
but how do i level up an specific one?
Add level_up_hand = "handname"
level_up_hand(card, 'HAND_TYPE', instant, AMOUNT_OF_LEVELS)
hello, I've been looking into modding balatro with no prior experience. found out about steammodded, examplemod, and the basic process of setting up a joker, but where do I go to figure out implementing specific effects, say a joker that scales mult for played stone cards?
how can i retrigger first scoring card? ik how to retrigger every scoring card, but not the first one specifically
https://github.com/nh6574/VanillaRemade/blob/main/src/jokers.lua#L593 Refer to how Hanging Chad does it
It only retriggers context.scoring_hand[1], which is the first card in the played hand
ok
Sorry it took so long, I was doing something, but here it is return { mult_mod = card.ability.extra.mult, chip_mod = card.ability.extra.chips, message = localize { type = 'variable', key = 'a_mult', vars = { card.ability.extra.mult } }, message = localize { type = 'variable', key = 'a_chips', vars = { card.ability.extra.chips } }
Is this not possible?
is there a way to make a joker disappear like the gros michel?
Are you trying to have it make itself disappear and remove itself?
is there a difference?
I'm just asking exactly what you're trying to achieve
no i just dont know the difference, can you explain it?
This is Gros Michel remade with SMODS, I would highly suggest looking through its source to understand what you're trying to achieve.
Yeah just use mult = number and chips = number
What exactly should I replace with that?
Hey all, I started working on a seed finder software (heavily inspired by Immolate and The Soul but CPU-bound). I don't know if it is the right place to discuss that, but if you are interested, here is the link: https://github.com/izanagi1995/balatro-seed-finder. It was built with ease-of-use, performance, and custom filters in mind. At some point, I would like to use it at a high scale to index all Balatro seeds.
I would love any feedback, ideas, or contributions 😊
Everything in that return
Is it just a better implementation of Immolate? I see it still uses the filters and is using immolate, is it easier to create filters or such or what
Immolate is GPU bound, and I wanted to build a solid implementation for the CPU as I work on Macs (no shaming please) 😅 Filters are roughly the same as in Immolate for now. At some point I may implement another method to write filters
Aha I see! I didn't realize that immolate used the GPU. That makes sense!
I still get solid results even on the CPU, depending on the complexity of the filter, it can scan around 50M seeds per minute on my M2 Pro. I get results for any of the current filters in less than 2 minutes.
And of note, just because it concerns another question I had been wondering about, there isn't a DLL involved here right? Just c/cpp code?
how can i create a negative card?
Yep, just plain CPP. The filter choice is made with preprocessor macros
Card:set_edition({negative = true})
I think might be able to point you in the right direction?
@north lodge , don't hesitate to let me know if you give it a go !
If I remember correctly there was a "card_eval_status_text" in smods right? does anyone know which one it is
Wait nvm it is
That key is wrong regardless, but it would be edition = 'e_negative'
Is there a way to get the current blinds score?
is there something wrong here?
Capital P
Because I here is a card object not a string
i.config.center_key iirc?
It didn't work, now it just does absolutely nothing
Like it doesn't even give the mult and chips now
what does the code look like now?
return { mult = number, chips = number Like this
Here's a picture to make it more clear
well you need to change the number
replace number with your card.ability.extra stuff from before
oh
I am an idiot it appears
yeah it works now
Just didn't think of changing the number to the number of the thing
Is there a way to check how much mult there is while you are playing a hand?
how can i change the main menu ace card and gradient? can't seem to find any doccumentation online
im not sure if this is helpful but the function for loading the main menu is Game.main_menu so you can hook that
and the card area for the cards there is G.title_top
Is there a better alternative to card_eval_status_text?
SMODS.calculate_effect({message = "msg"}, card)
is this ok to use if I only intend to juice up the card with a text
I only need the card to to do that little shaking (like juice_up) and display a message, with no other effect
then yeah
ty
well it didn't really help that much, im new with balatro modding so i don't know basically everything😭 (just adding new jokers and stuff)
Also how would one have a card have multiple editions?
And multiple of all things that can't have multiple things?
smtcom asking the real questions of the year
...quantum editions and quantum seals?
how can i make a new rarity?
https://github.com/Steamodded/smods/wiki/SMODS.Rarity
probably this
So I'm trying to determine which cards in the played hand are unscored and feel I like it should be simpler than I'm making it. Currently my thinking is just compare the G.play.cards to context.scoring_hand and if G.play.cards[i].id doesnt exist in the scoring hand, that would be how I'd know its not scored. Not that that is terribly difficult, but before I do it, I'm just checking to make sure there isn't some scored flag on the individual cards that I'm missing.
is there any way i can check if the discarded hand contains another hand? i found G.FUNCS.get_poker_hand_info(G.hand.highlighted) in cryptid but it only seems to return the poker hand itself, i.e if i played a flush five it would only return 'Flush Five', whereas i would want a table like {'Flush Five', 'Five of a Kind', 'Four of a Kind', 'Flush', ...} etc.
the third return of that function is the poker hands but in the same format as context.poker_hands
context.cardarea == "unscored"
Thanks. I knew there had to be a simpler way. I struggle to find the stuff on the wiki
i don't blame you lol. the wiki is missing a lot at the moment
also, is there a context specifically for buying a booster pack? context.buying_card does not trigger on booster packs, and i also don't want a context that triggers when i, say, skip for a booster pack
so context.open_booster would be no good because it triggers on boosters from skips right?
yeah
there's not afaik
for a few cards where i'm using buying_card which includes shop cards and vouchers, but ideally i'd want them to trigger on any shop purchase
guess i'll probably have to patch that in
can you hook ease_dollars?
isn't ease_dollars also used in boss blinds like the ox?
local old_ease_dollars = ease_dollars function ease_dollars(mod,instant) local ret = old_ease_dollars(mod,instant) G.E_MANAGER:add_event(Event({ trigger = 'immediate', func = function() SMODS.calculate_context({money_changed = true}) return true end })) return ret end
ease_dollars is used for any money manipulation so it's definitely not what you want
yeah i thought that
my current thought (sorta hacky) would be could do that, set a flag for money spent, then use the context.open_booster and check for that money spent flag
but depending on context triggering order, could fail I guess
i think just patching where boosters are bought is just easier
yeah i'll look into that
Probably right, listen to them
how do i make a joker create a specific joker?
SMODS.add_card{key = "j_modprefix_key"}
okay, thanks :3
Back with the dumb questions. Within that context, is there a way to access the unscored cards? I'm looking for something similar to context.other_card in context.individual
I think I figured it out. Will report back.
oh
how can i make this trigger on a shop reroll? it's supossed to 2 the mult every reroll that there isn't a rare joker and reset if there is, but right now it's doing nothing
local found_rare = false
-- Assuming shop.jokers is the table with current jokers after reroll
for _, joker in ipairs(shop.jokers or {}) do
if joker.rarity and joker.rarity >= 3 then
found_rare = true
break
end
end
if found_rare then
self.ability.mult = 4
else
self.ability.mult = self.ability.mult * 2
end
self:juice_up()
end,```
i was about to say you can still use context.individual and context.other_card, just with an extra context.cardarea == "unscored" check
context.reroll_shop exists if that's what you're looking for
it's used in vanilla for flash card
I was trying to destroy cards anyway, so was using context.destroy_card which I realized was the card object. I said it was a dumb question. I'm not caffiened enough yet.
i have asked much stupider questions here lol you're good
okay, so... how do rarities work? am i getting it right?
what like this? ```if waffle and context.reroll_shop then
local found_rare = false
for _, joker in ipairs(context.reroll_shop) do
if joker.rarity and joker.rarity >= 4 then
found_rare = true
break
end
end
if found_rare then
waffle.ability.mult = 4
else
waffle.ability.mult = (waffle.ability.mult or 4) * 2
end
waffle:juice_up()
end
calculate = function(self, card, context)
if context.joker_main then
return {
mult = self.ability.mult or 4, -- fallback to 4 if nil
colour = G.C.WHITE,
card = self
}
end
end,
}
it's crashing
context.reroll_shop only exists in the calculate function, move all the rare-finding logic into the calculate function
whats the variable for the cards in the deck? lua for _,playing_card in ipairs(all cards in deck) do
full deck
G.playing_cards is correct
thanks!
i need help, i wanna make a joker that works like blueprint but increases how many time it copies the joker each time a straight is played, how could i do it ?
ok i got something like this ```calculate = function(self, card, context)
if context.reroll_shop and type(context.reroll_shop) == "table" then
local found_rare = false
for _, joker in ipairs(context.reroll_shop) do
if joker.rarity and joker.rarity >= 3 then
found_rare = true
break
end
end
if found_rare then
self.ability.mult = 4
else
self.ability.mult = (self.ability.mult or 4) * 2
end
self:juice_up()
end
if context.joker_main then
return {
mult = self.ability.mult or 4,
colour = G.C.WHITE,
card = self
}
end
end,
Did you create localisation text for it?
whats that...
the blueprint code starts at line 3831 in this file, by the looks of it you would need a variable in config.extra that increments by 1 every time you play a straight (if you need help with that, Ctrl+F "runner" in the same file), and then just trigger SMODS.blueprint_effect(card, [joker to retrigger], context) with a for loop like so:
-- replace "repetitions" with whatever you end up calling your variable
for i = 1, card.ability.extra.repetitons do
SMODS.blueprint_effect(card, [joker to retrigger], context)
end
context.reroll_shop does not contain the cards currently in the shop. unfortunately i wouldn't know which cardarea contains the shop cards. maybe someone else here can help with that
blueprint_effect only returns a table of effects
G.shop_joker
G.shop_jokers.cards
close enough
ok imma try that now thanks guys
as a begginer, i understood atmost 5 words ...it looks clear but i don't really understand
just add a line that says loc_txt = {name = "Unknown"} and it should display that instead of ERROR
You want to use SMODS.merge_effects with the returned value of blueprint_effect
nvm, got it to work
yeah... hehe
right as you said that i got it
thanks tho :3
wtf is merge effects
if what srockw is saying is true you might want to start with making a few jokers with simpler effects to get your bearings. what you're asking is fairly complex
It auto adds effects tables as extra recursively
its not much more complex than your for loop
i know i've done simpler ones, but this one got on my mind and i hate leaving projects behind, even if i have to suffer to make them true
that's fair enough, i know absolutely nothing about SMODS.merge_effects so maybe someone else here is better equipped to make that work
Before the for loop you want to declare a local table that you later return, inside the for loop I think you'd assign ret = SMODS.merge_effects(ret, blueprint_effect stuff), ret being the table you declared
oh uhh for multi blueprint?
Yeah it can be used for that
Find the bit about text localisation on the SMODS wiki
Basically it's a file containing all the text for your mod in a particular language
I'm guessing since you didn't set any localisation for your rarity, it can't find the name for it and puts error instead
ok i have 2 more questions
1- is it possible to replace the +4 mult in the description with the current mult?
2- how do i make it show a message when rerolled like +8 mult or +16 mult?
key = "waffle",
loc_txt = {
name = "Waffle",
text = {
"{C:mult}+4{} Mult, {X:mult,C:white}X2{} every",
"shop reroll without finding",
"a {C:red}Rare{} Joker"
}
},
atlas = "waffle",
rarity = 3,
cost = 10,
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = true,
perishable_compat = true,
-- Initial multiplier state
ability = {
mult = 4
},
juice_up = function(self)
-- Optional: particle/sound effect or debug print
print("Waffle juice up triggered! Current mult: " .. tostring(self.ability.mult))
end,
calculate = function(self, card, context)
-- Only run multiplier update if reroll is happening
if context.reroll_shop then
local found_rare = false
for _, joker in ipairs(G.shop_joker or {}) do
if joker.rarity and joker.rarity >= 3 then
found_rare = true
break
end
end
if found_rare then
self.ability.mult = 4
else
self.ability.mult = (self.ability.mult or 4) * 2
card_eval_status_text(self, 'extra', nil, nil, nil, {mult = self.ability.mult, text = "+" .. self.ability.mult})
end
self:juice_up()
end
if context.joker_main then
return {
mult = self.ability.mult or 4,
colour = G.C.WHITE,
card = self
}
end
end,
}```
for 1, you can have updating variables in your description like so. #1# in the card description refers to the first variable returned from loc_vars, #2# the second, and so on.
- Yes, look into loc_vars
- When rerolled, you can return
{message = "your message"}. You can change the message to be smth like"+"..card.ability.mult(although I'd recommend putting all the variables in a table called extra, not just under ability)
also, card.ability.extra is preferred over self.ability
I just realised you already did part of 2
I'm not sure why you're using card_eval_status_text tho instead of returning a message or even using SMODS.calculate_effect
is this one print lol for every card held in hand?
ok part 2 is working but in the description it's just showing nil value ```local waffle = SMODS.Joker{
key = "waffle",
loc_txt = {
name = "Waffle",
text = {
"{C:mult}+#1#{} Mult, {X:mult,C:white}X2{} every",
"shop reroll without finding",
"a {C:red}Rare{} Joker"
}
},
loc_vars = function(self)
return {self.ability.extra or 4}
end,
atlas = "waffle",
rarity = 3,
cost = 10,
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = true,
perishable_compat = true,```
Yes, one per card. You can put G.hand.cards directly into ipairs btw, no need for a local variable
but i don't know why this isn't working
oh ok
is there a reason for _, card in ipairs(table) is preferred over just for card in table
Can you send the entire code
Because it seems that you've entirely removed the config for the card
So youre still supposed to use card, not self
Because the second one isn’t how lua functions
key = "waffle",
loc_txt = {
name = "Waffle",
text = {
"{C:mult}+#1#{} Mult, {X:mult,C:white}X2{} every",
"shop reroll without finding",
"a {C:red}Rare{} Joker"
}
},
loc_vars = function(self)
return {self.ability.extra or 4}
end,
atlas = "waffle",
rarity = 3,
cost = 10,
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = true,
perishable_compat = true,
ability = {
extra = 4
},
juice_up = function(self)
print("Waffle juice up triggered! Current mult: " .. tostring(self.ability.extra))
end,
calculate = function(self, card, context)
-- On shop reroll
if context.reroll_shop then
local found_rare = false
for _, joker in ipairs(G.shop_joker or {}) do
if joker.rarity and joker.rarity >= 3 then
found_rare = true
break
end
end
if found_rare then
self.ability.extra = 4
else
self.ability.extra = (self.ability.extra or 4) * 2
return {
message = "+" .. self.ability.extra .. " Mult"
}
end
self:juice_up()
end
-- Main joker effect
if context.joker_main then
return {
mult = self.ability.extra or 4,
colour = G.C.WHITE,
card = self
}
end
end
}```
I said a table called extra
Like vars = { extra = { mult = 4}}
And for loc_vars the 3 arguments for that function need to be self, info_queue, and card
Then use card.ability.extra.mult
oh okay
how can i make that show correctly?
Okay I see the issue
I don't think you can do that
Have multiple formatting things one after the other like that
#1# is for the possibils, and #2# is for the {mult}
so then how can i do it?
how... can i make it create a joker when sold?
or i simply cant
wait im confused, like this? ```local waffle = SMODS.Joker{
key = "waffle",
loc_txt = {
name = "Waffle",
text = {
"{C:mult}+#1#{} Mult, {X:mult,C:white}X2{} every",
"shop reroll without finding",
"a {C:red}Rare{} Joker"
}
},
loc_vars = function(self, info_queue, card)
return {card.ability.extra.mult or 4}
end,
atlas = "waffle",
rarity = 3,
cost = 10,
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = true,
perishable_compat = true,
ability = {
extra = {
mult = 4
}
},
juice_up = function(self)
print("Waffle juice up triggered! Current mult: " .. tostring(self.ability.extra.mult))
end,
calculate = function(self, card, context)
-- On shop reroll
if context.reroll_shop then
local found_rare = false
for _, joker in ipairs(G.shop_joker or {}) do
if joker.rarity and joker.rarity >= 3 then
found_rare = true
break
end
end
if found_rare then
card.ability.extra.mult = 4
else
card.ability.extra.mult = (card.ability.extra.mult or 4) * 2
-- Optional message when rerolling
return {
message = "+" .. card.ability.extra.mult .. " Mult"
}
end
self:juice_up()
end
-- Main joker effect
if context.joker_main then
return {
mult = card.ability.extra.mult or 4,
colour = G.C.WHITE,
card = self
}
end
end
}``` it's crashing tho
here you want to replace ability with config
I don't really know sorry
Oh yeah that's my mistake
I woulda checked against an actual example if I was at my pc
it's still crashing
the game parses this kind of text on startup, you're just adding plain text without the parsing
start a new run
If the issue continues send a screenshot of the full code with the line numbers visible
Is there a context right after context.hand_drawn? Trying to make a joker to always draw additional cards but context.hand_drawn is only true if there's space in hand to draw into
ok now it's not crashing atleast, but still says +nil Mult every time
@rare torrent can you do this
your loc_vars function is wrong
you want to return { vars = { card.ability.extra.mult } }
Whats the exact effect?
simply calling draw_card(G.deck, G.hand), works on context.after for example but thats not ideal
That doesn’t tell me at all what you’re trying to create
that fixed it! thanks
What editor are you using btw
that's notepad++
notepad++
You should probably use visual studio code and install the lua extension
Makes things a lot easier imo
maybe someday
i don't like visual studio code that much tho
idk why it doesn't print lol in lovely log
it’s so worth the time it takes to set it up i promise
I want to always draw an additional card after for example playing a hand, so after the hand would be drawn as usual but regarless of if any cards were drawn cuz the hand was full
doesn’t hand_drawn trigger after the cards enter your hand anyways
Use context.hand_space and return cards_to_draw = context.amount + 1
where are all these contexts coming from
I am the context wizard
smods really needs some better docs lol, i’m not qualified enough to write them
context.drawing_cards*
Oh yes i changed it whoops
nice ty both
wait ok just found out this isn't working ```calculate = function(self, card, context)
-- On shop reroll
if context.reroll_shop then
local found_rare = false
for _, joker in ipairs(G.shop_joker or {}) do
if joker.rarity and joker.rarity >= 3 then
found_rare = true
break
end
end
if found_rare then
card.ability.extra.mult = 4
else
card.ability.extra.mult = (card.ability.extra.mult or 4) * 2
-- Optional message when rerolling
return {
message = "+" .. card.ability.extra.mult .. " Mult"
}
end``` because i did get a rare joker in the shop and it still multiplied it by 2
G.shop_joker.cards
oh yeah? name all the contexts
G.shop_jokers.cards and joker.config.center.rarity but it's also a string sometimes so >= won't work all the time
how can i make it create this card when sold...?
use only context.selling_self
Do yall have any ideas how I could animate these in the collection? this is the code im using
update = function(self, card, dt)
-- Store animation state in self
self._counter = self._counter or 0
self._timer = (self._timer or 0) + dt
-- Update animation every 0.05 seconds
if self._timer >= 0.5 then
self._timer = self._timer - 0.5
self._counter = (self._counter + 1) % 4
self.pos.x = self._counter + 4 -- Update self's position directly
end
after doing that it crashes
oh, alrighty
G.shop_jokers.cards
Yeah i just copied what you had because I don’t know all the shop areas off the top of my head 😂
What are all the contexts added since may 9th
can anyone tell me why this is defining as a table?
context.drawing_cards
context.buying_self
context.round_eval
i think thats it?
ok now it works perfectly thanks guys!
how do i make it work?
oki now add them to the wiki thank yew
i don't know
nvm it seems like it's just an extension issue, especially since the quick fixes are just "ignore it lmao"
Im just wanting to check, in the docs it says "Cards are considered added when they become undebuffed (in this case, from_debuff will be true)." if from_debuff comes in as false, does that mean it was purchsed/spawned in and will never trigger from undebuffing?
how to use the x mult and x chips in talisman mod?
from_debuff is probably nil but yes when it's false it means that it was added in a way other than undebufffing
thanks!
so, this is doing everything I need it too except for 1 thing, it's not actually giving $2 when an ace or 8 is played, so uhm please help I beg
Coming soon tm
You forgot the return in calculate
dollars =card.ability.extra.dollars
When does context.round_eval hit?
out of curiosity
it's the anaglyph tag timing during the evaluation screen
holy shit, noelle pfp
snow

oh
is there a function to get base.nominal that returns something like 0 or nil for rankless cards
What are you trying to do

i use base.nomimal for quite a few different cards but i don't want it to return the underlying rank of, say, stone cards
You could just check if it has m_stone i guess and return 0 manually
why the fuck does get_nominal() return -80.33... for stone cards
just use SMODS.has_no_rank
got it
My ass forgot this existed
i think it's a random negative number
idk why probably some smart sorting thing or something
Oh that reminds me of a question i had you can prob answer N
shoot
Can I still detect modded suits from card.base.suit or is that still pulled from has_no_suit
I remember awhile ago I believe that's where modded ones were messed with for some reason
You can use it to add custom things to the cash out screen https://media.discordapp.net/attachments/1233186615086813277/1381044150299791360/image.png?ex=684ea6d7&is=684d5557&hm=c897393e9b0d2952f0c43420e37414bcb092f205d9ba824f649a29f1021ae543&
yay
no idea sorry
huh
if anyone wanna help test the new menu stability it is here
unfortunately the mod authors are dynatext and it might affect performance somewhat
You didn’t update galdur!
sorry
how can i know if a card is destroyed?
They are? For what reason?
Does the new SMODS automatically pass in a pseudoseed now?
for pseudorandom_element it just takes the string like pseudorandom does
Huge
I know it's crashing because of the assets not working correctly, but I can't find why it is crashing because all the sizes should be right.
anyone know what the gluttonous joker is called in the game files I'm getting this
INFO - [G] Error: Joker center not found for j_gluttonous_joker
try j_gluttonous
instead of j_gluttonous_joker
ye ty ty
ops
mb
it's j_golden and not j_golden_joker
why gluttenous?
how do i make that a consumable its not destroyed after using it? ( in context.using_consumable )
dynatext in general is much slower than normal ui text
Of course it is, every letter is a separate ui element
precisely
I've had this crash two times already. Once someone else was trying my mod, it worked for everyone except for them.
And now it's me, I got it to work now by using the zip they sent of my mod where the artist replaced the art by theirs.
Can someone help me, I want to make a seal that when the card with the seal is played it is always scored
you can probably return true on keep_on_use
keep_on_use = function(self, card)
return true
end
im doing it on a calculate function, its a deck
oh my bad gangster, i thought it was a consumable
will the new smods release fuck my code up at all
Please help
this is for enhancements, but ig it works for seals too
Ok
not sure tho 😭
Does anyone know?
No I meant like why are they dynatext
Cuz that should be a static text field, should it not?
its probably easier to add the marquee effect to dynatext instead of it being in every goddamn ui element in the game
That seems like an egregious reason to drop performance 😭
plus it makes sense to be in dynatext
its simple, have a system that wont mind the drop
Well yeah but that’s still a little wonky
also its not like dynatext is gonna immediately gonna fuck up your day anyway
it won't kill your grandma
unless the author string is very very very long and at that point they might as well put et al.
& co
what is the thing for current money called?
Like the card.ability.extra_value in card.ability.extra_value = card.ability.extra_value + card.ability.extra.price
can you elaborate? im not following
current players money is G.GAME.dollars iirc
but without more context thats all i can guess you mean by current money
Don't worked
try
if context.modify_scoring_hand and context.other_card == card then
return { add_to_hand = true }
end
i'm so bad at coding
I'm only spreading misinformation 😭
nah this is just undocumented
insert undocumented func sticker
the amount of dollars a player currently has
yea, thats G.GAME.dollars
ok, thx
So if I do G.GAME.dollars = G.GAME.dollars * 1.5 my money will get multiplied by 1.5 (that 1.5 will be something else)
?
I’m not 100% sure if that would update the ui, you could use ease_dollars(0.5*G.GAME.dollars)
I feel like I just need to start saving discord messages of undocumented things for a random day of feeling like adding to a wiki
Dont worked
return {
add_to_hand = true
}
end
end,
}```
im not good at writing stuff but also eremel is already working on the contexts page
can you screenshot the whole code
I'm using the example mod for seal that's on Steamodded, can I send code to you in dm?
technically speaking all the docu already exists
i would prefer if you send it here
there's a cute cat too
kitty~~
yay
the cat is very cute
we are talking about stuff that's not documented there
really!?
thats awesome
youve got to be very advanced then
im learning the ropes myself rn
its my 4th day
good luck :3
i mean if you want to
I think I'm about double you right now, whopping 8 days
I swear the worst part is trying to sort out art for these jokers
I remember that @manic rune and @wind steppe helped me a lot in the beggining
I would ask them for stuff too
I got a decent hand for that; I mostly recycle sprites from other jokers and tweak
👉 👈 it would make me feel special
@red flower
Only seal code
Artist I am not. Jokers I've created are 50/50 placeholder/original art right now.
yeah right?
look at this
anyone knows how to change the card of the title screen and change it for a joker?
I made this three
I understand they look rookie
but they dont hurt the eyes
(I hope)
As soon as i keep practice it will get better
the code i sent needs to be inside a calculate function
they look infinitely better than anything i can do
ayy lmao thank you
im right now studying how to make the third effect
Those are awesome
but i have seen here a clue
G.Game stores gamestate variables
I'm hoping that accesing that variable makes me able to know the current player money
These look cool honestly one of my favourite designs ive seen recently
right!? and its mostly recycled!
Here are mine that currently have something other than a placeholder
Wow those are much more complex
Left two my brother did w/ AI help
Otters
Otters!!!
I love those
they are very detailed v nice
The concept of the casino joker has a lot of potential
and the bowling joker is funny
but i would correct it by giving you a little help:
I've got two main themes right now:
Bowling
Casino/Blackjack
calculate = function(self, card, context)
-- main_scoring context is used whenever the card is scored
if context.modify_scoring_hand and context.other_card == card then
return {
add_to_hand = true
}
end
end,
}
This is the balatro palette
@violet gulch always colour using the original palette
free my ass
(i know, lmao)
its supposed to be an extension of other behaviour its why its worded that way
but i gochu ill change it
it wont say "free" anymore
feel like this is just wraith 2
yeah
intriguing
nah it makes sense just funny lol
yeah right? thematically works
its a cool observation
🤣 This game is supposed to get us away from reality
ill change the description and make a capture one second gang
also gang btw
I forgot about the third texture; but the other two have an amogus hidden somewhere
can you guys find the two amogus? uwu xd
It's the code I put in the mod N'
did it work
Don't
can i see the whole code again
I can send you the file in lua. I think it can make things easier
please
ok guys I can confirm that this does set your money to cero
@red flower wrong code
that code was cool tho
did you happen to add at any point a tarot card to the player?
i need that behaviour figured out
@unkempt rover can i copy your homework?
so, example code right?
thank you
these are all the vanilla jokers made in smods so if you need anything the vanilla jokers do you can check there
awesome
<@&1133519078540185692> is it possible you could pin this link to this channel to make it easier to the community to learn please?
what steamodded version are you using
this one
<@&1133519078540185692>
That one at the beginning of the code
Why are you doing it again
i wouldnt recommend pinning that link specifically because it doesnt point to the main page, also it's already in the thread in modding-chat
because in my first comment i havent commented the link
then update
Oh man
oh, my bad then sorry mods
💔

I’m not pinning resources in this channel - egg will pin in threads but in main channels it’s usually exclusively rules posts
fair enough; well I'm commenting only because i have not been made aware where mod documentation is
there are a lot of miscellaneous threads there
finding the docu was to me unexpected,
but i understand you make the rules
thank you for your time regardless
my only real guess is to look at how smods implements quantum enhancements and try to apply that methodology to editions
i think it was something talked about loosely before but i never saw anything further come of it
actually, sorry for ping @chrome widget
you had/have a quantum editions patch would you be able to pass that here
Oh yes I do do a thing with quantum editions
ok guys, it looks like this is not the way to spawn a card:
It's inherently very simplified and is based on my specific single joker use case
how does one start a balatro mod that reworks existing jokers
i wish i could help im a bit of a noobie here too
SMODS.add_card({key = "c_soul"})
icic
i know something wants to do something with quantum editions (hell at some point i want to also) but i figure if he and myself can see what you mess with we can go from there
right! thank you
What is wrong in my code I keep crashing when I want to see My consumable
You don't return in the use function.
ok well this does not work
SMODS.add_card({key = "c_soul"})
ok, I may not know how to read
which is entirely my fault
I'm sorry
oh like if I want the consumable to give cash I just write dollars = 2, right
No, you do SMODS.calculate_effect({dollars = 2}, card)
oh ok thx
Unlike with Quantum Enhancements, this actually sets permanent values on a Joker that it then calculates as normal using the lovely patch. In this specific case, it's based on a Joker that treats all editions as Holo, Foil, and Polychrome in addition to their base effect, so right now the code just adds those three in addition to whatever edition is being set. You'l have to chane the code to get something to directly set and unset quantum editions
thank you very much bestie
@daring fern you can take a gander at what winter has done
I thank you a lot because this works!!!!
how can i know if a joker is destroyed?
What is the goal?
to give mult for every destroyed specific joker
You would have to make a custom context for that.
hm i see
My mod now has three functioning jokers!!!!
the wine looks like the acid from deltarune chapter 2
Thank you everyone I'm really learning from yall
i see the vision
I have played deltarune 1
I know its out its just life got me yk?
Ill get there I promise
i havent even finished undertale yet
thats a shame!!!
vro 😭
the final boss fights are super cool and difficult
ive already finished deltarune...
asgore happened on my pacifist route and i stopped there
is that a joke
no
asgore is very good boss
also it's a neutral route
once i saw what flowey did to my boy
don't be rude...
i ceased
or maybe pacifist but not true pacifist
i didnt want to offend
cool beans
anyway; I'm going to flex my mod in general 💪
ill see you around in a sec
ok
one day ill probably finish the game but
who knows when cause i have alot to get through anyway
hey everyone 👋
it's me! A random user struggling with atlas
hey it's me again, im trying to make a card that retrriger every stone card
what am i supposed to put instead of "is_face" ?
if SMODS.has_enhancement(context.other_card, 'm_stone') then if you want to check for quantum enhancements
if context.other_card.config.center.key == 'm_stone' then if you only want to check base enhancements
wait a second i just realised. is your username because of the nice cream from undertale?
thanksssss
can you not do has_enhancement for base ones? huh
id assume you could just do both
yes hehe
more you know
You can
That my crash ( I correct the issue with the return in use btw )
so nice
cream
has_enhancement checks for both base and sents the quantum enhancement context
oic
