#💻・modding-dev
1 messages · Page 196 of 1
i had it on common just to see it in the shop more often while testing
an idea: check if blueprint is in hand
that makes no practical difference
in a completely uniform distribution, the probability of hitting a number exactly is zero. This isn't exactly uniform, but the precision is high enough that it's still negligible
we mean, the check is already in the code, but it's not the relevant part so we didn't show it. everything else works except for the "trigger 3 times" aspect. (Unless we woefully misunderstood this message)
does spawning it in using debugplus not work?
maybe this will help?
i feel like context.no_blueprint might not exist at all
will try that & if it doesn't work ig i'll circle back to it <-- abt to head out the door
no yeah it works, i was just checking how it looked when you found it naturally in the shop
i plan for it to be uncommon and to require 4 or 5 rounds until it triggers
idk if thats good balance
ah yeah that sounds a bit more reasonable; though 4-5 rounds is a lot haha
compared to e.g. invis' 2 rounds
post_trigger did not work, at least not the way we used it. gonna look into that later. ;P
is there a context that checks if any lucky effects have triggered?
You can throw it in a loop and use the calculate effect function yourself
If I start messing with the probabilities of Lucky cards, how much compatability problems would that potentially cause 🤔
prob 0 if ur doing lovely patches
or editing global probability
like oops all sixes
does anyone know?
I just felt that other mods may mess with lucky card odds already, haha. I guess it's a quick patch then 😄
What do you guys think of making "Balatro" UI online? SO you can test UI elements online, Like put a box, But text and so on
But no Gameplay!
i love rhythm game
i think it would be more doable to make a standalone love2d game that just renders balatro ui elements
this might fit
Thats what i mean, like a balatro screenshot that renders balatro ui elements
But no "Gameplay"
so basically a ui tester
i will go insane
I'd dither a bit less with the shading, and first try to just do some polygonal shading, then add detailing to that. Though I'd say that already looks pretty good
skyblock
not skyblock😭
oneblock
😭
ive been rewritting my code for about 5 hours today
wtf is that photoshop job
if it werent for N' help (once again) then i wouldve been here for a couple more DAYS
tbh theres a mod to break like, pixels, they shouldve used that instead ngl
chisel n bits
mhm, that
so like, wait, with the code we already shared, would it be something like if other_joker_ret then for (variable tracking retriggers) > 0 do (and then the rest of the blueprint copying code)? though y'know. not in a pseudocode mess.
What do yall think of the idea of an ui tester
i think it would be great
I hope that you aren't ironic (or sarcastic). But isn't that ridiculously hard to make?
Probably not ridiculously hard but it would take a bit to make it
And I don't know how many people are messing with UI
I am so it would help me
is there a way to check which deck is currently being used at the start of the run?
you would have to manually carry everything ui-related from balatro source code, im guessing
this crashes with "attempt to compare table to number" why tho
talisman turns the dollars value into a table
usually you would make a dummy to_big function that turns your numbers into talisman's representation but I don't know if that works with math floor
hey quick question how do i get the player's current amount of money and set that to a local var to compare to?
G.GAME.dollars
thank you
Trying to figure out how to create a joker that functions similarly to To Do List
I tried to blindly guess the poker hand to see if its only an issue of the localization not picking up on the variables but nothing has worked so far, and when it "Resets" to a new poker hand it adds the reset popup to everything
Would you want to help me?
👀
It's okay if no, but to make this happen i'll probably need a team
no, sorry
even without math floor it still
crashes
when doing to_big on it
you should use {X:mult,C:white} for xmult
Is that whats causing the issue?
nope, it looks better that way tho❤️
Doesnt really matter since the joker cant multiply because it doesnt work
- you need a loc_vars function for the localization
loc_vars = function(self, info_queue, card)
return { vars = {card.ability.extra.x_mult}}
end,
- you need to use context.end_of_round and context.main_eval
imagine getting the needle though?
it's all a possibility
you need to do to_big to the number that's multiplying
we love gambling
well, except serpent
oh, also
and wall and vessel, for obvious reasons
the "+1 joker slot" part
?
doesnt it seem like the contract has no upsides to having it in your jokers area?
i feel like that should be specified
try both then maybe?
it is, sec
the problem is the math.floor part
do i do this inside the calc function or before it
before
I am pretty sure talisman's bignums automatically handle multiplying by a non bignum value
"wtf is this circling work" pt 3
pretty sure it still crashed without math.floor
ty!
but ill try again
Was the crash the same without math.floor
maybe it doesn't like returning big num
i believe so "compare table with number'
in calculate
try making a to_number function the same way you made a to_big one
and pass to_number(G.GAME.dollars * whatever)
it seems like the joker never actually changes the poker hand despite the reset bubble going through
technically i just stole it from unstable lmao
it also never scales the mult
but ill try
specifically, the edition gives +1 and the contract gives +1, which is shown in their respective info areas
it should be clear when you see any other contract that the +1 joker slot(s) in the edition area is separate
ah i see
you're changing to_do_poker_hand instead of lighthouse_poker_hand
idk the xmult part
to_number worked
i guess it was this
make one which x0.5 your mult
do they stack blind effects
yes, that's the plan
cool
no, it's not random
god i "love" lua
Has anyone messed around with SMODS' quantum enhancements? It hard crashes the game when this joker's present. It's the :is_face() call that causes the crash, but I'm not sure how to work around that
you should make a challenge with 5 pacts in your joker slots lol
for now there are "unseen" pacts, which apply a minor blind, but you don't know which one, before you pick it, "dangerous" pacts, which always apply a showdown blind as long as one is left in the pool, and "treacherous", which apply a minor blind that you can see before picking but also have an additional downside
and of course
context.scoring_name gives the name of the currently played poker hand right?
try if context.other_card and context.other_card:is_face()
can you though
it's +3 mult on red card :^)
make a pact which forces you to play the game at x0.5 speed
that's evil
exactly
too evil
maybe, but let me first get this blind system to work, i had to rewrite way too many things for it and i expect literally every boss blind is broken right now
okay so i gotta figure out how to check every time a new card is created
dang.
hook a table into init_game_object and hook Card:set_ability to add things to that table and you have to somehow check if it's a collection card or not
I don't think there's a context where other_card would be nil, considering it's only ever used with other_card = card in the same call. But that does crash it too
if not card.area.config.collection
i personally never touched quantum enhancements before, so that was my best guess
cmon guys
dont patch my exploit
:(
teehee
and uhh we also need to figure out if set_ability is called before it's added to the cardarea
depends
might be a curveball though
will find out when i test it
please?
yea
check docs or test it
which docs
I love that gif
it's beautiful
context.scoring_name is the key of the "highest priority" hand being scored (Flush if there is a flush and a pair, Straight Flush if there is a straight and a flush, Straight Flush even if it is a royal flush).
wasup
i read the Smods docs and i often dont see stuff that other people are using
how would we feel about stuff like perma_mult, perma_xmult (I think AMM has it right now) going core
john my game crashes so bad there isn't a crash log 💔
like context.scoring_name isnt even in smods when i search the git
they're not fully updated with some newer stuff, we'll get to that soon hopefully
for no other reason that me not having to depend on any other mod
that's because you're not searching right
is there a way to get the context of after you end the round / when you enter the shop?
context.after and context.end_of_round and context.game_over == false doesn't seem to work
i looked in there
i have the smods wiki permanently attached to my second monitor at all times
that wasn't meant for you, sorry
you only need context.end_of_round and context.game_over == false i reckon
I think we have context.starting_shop as of recently? idr
new thing pog?
yeah but i specifically want the player's money as they enter the shop
fair
and money updates after end round
ill try putting that in
indeed
well i havent crashed
okay it didn't error but it didn't print any debug info i set it to
show code
(still making it but the prints have worked with different contexts)
fym you can't art
that return table looks atrocious but I'll choose to ignore that
chances are you're not on the absolute latest smods version then, because that's when this was added
outside of the ones i assume are unfinished these are really solid
the observer, quasi connectivity, and both pickaxes are unfinished
how recent?
those are the ones i thought
ill make a joker called
a day
Please do not the cat
perfect
oh yeah then i gotta update
i'll do it when i get back from lecture
kk
are there documentation for SMODS.optional_features
I'd grab a crash report, but the game crashes before it generates one. Somehow this just shuts down the game when quantum_enhancements is enabled, and I can't figure out why.
💔
it's called 'bothering the devs until they tell you'
no
i am not that kind of person so ill just patiently wait for the documentation
like i wait for portal 3
uh yeah certain functions are just forbidden in check_enhancement
is_face counts as such because it needs to know the enhancements of a card to tell if it even has a rank
ah, that makes sense. I suspected it was something like that, because of stone cards, but it was hard to traceback as it doesn't generate a crash report, it just shuts down
infloops be like that
you can eliminate that issue if you solve the halting problem ||(you can't)||
hmm how about i redesign the very core assumptions that computing is based on 🤔
The LSP Definitions is the closest
Altho even then idk what precisely post_trigger is.
would 'SMODS.Ranks[context.other_card.base.value].face' get around this? I assume it'd run into problems with paradoleia maybe?
should've just tried before asking. it won't
😭
what
Im trying to scale this joker when a played hand IS the randomly selected poker hand (similarly to To Do List) but i cant get it to increase at all
dude i just updated to the latest smods version and now apparently blind.lua is borked
someone fucked up a lovely patch or smth?
Update Lovely
yup that fixed it lmao
That looks like a reasonable explanation of post trigger
how do i change the booster pack so it doesnt use the consumable and instead just puts it into the area
Add select_card = “consumeables”
and what if i want it to go into a special area
thats not in the base game
oh nvm
got it
thanks
Change the string to the name of the area
okay so i can confirm card.area is not set before calling card.set_ability
which might just make my life 100x harder
this is what i got rn for contextç
What’re you trying to do?
this
by creating a table which stores the names/ids of the cards
but actually detecting when a card is seen while it not being in the collection (that would be some major cheese) is pretty hard turns out
Can’t you inject into the functions that populate the shop and packs instead?
Yes
😨
reee blind descriptions don't show up in info_queue
i've actually never done a patch before
might be necessary here tho...
ahw fuck
do also need to keep in mind stuff like judgement or skips adding new cards i think
Yeah true
strange question, but G.STATES.SMODS_BOOSTER_OPENED considers any screen as valid? im using it for a can_use function but it always returns true no matter what screen I'm on, and not just the booster pack screen?
maybe i could just use the emplace hook i have already
there isn't any instance where a card isn't emplaced in some area right
Not that I’m aware of
we might be back
bump
having to write card.ability.extra for every variable is to be fair a pain in the ass
okay, well, this is silly. in trying to implement that for loop from earlier, instead of making a blueprint that loops its retriggers based on a variable, we seem to have accidentally made a functioning blueprint with a finite durability.
Thank you so much
@edgy reef oh now I’ve read the git change your old description was much better. Post trigger is just a context to do anything after any joker triggers, it can be on itself or on a different joker
Sort of like individual on playing cards but on jokers I guess
Ah
are we like, on the right track with this, or is this not even close to what we should be doing? (for context: trying to make a joker that operates like blueprint, but then retriggers that joker 3 times instead of just 1)
it seems to be working
now just let me check if the collection counts or not
Once you return you exit the function entirely
isn't it xmult instead of x_mult? or is that a talisman change?
Both are valid
You should be able to put everything in the return
i did that and it didn't do the thing i wanted it to do
What is the thing
i wanted it to give +15 mult then x1.5 mult after
what's your card config
It’ll do that putting both in
i have no idea how i'm gonna be able to condense this description
Will it do it in that order tho
Is there anything wrong with the contexts im using to scale it?
Yes
This Joker gains X0.1 Mult for
every Tarot, Planet, Spectral
and Joker card seen this round
card = self will crash
What is the issue you're having
i cant figure out the appropriate set of contexts to trigger the scaling, only context.before makes sense but it doesnt seem to be working
Can you send your full joker
key = "light_house",
config = { extra = { x_mult = 1, scaling = 0.2, light_house_poker_hand = 'High Card' } },
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = true,
perishable_compat = true,
rarity = 3,
atlas = "NeatoJokers",
pos = { x = 1, y = 0 },
cost = 8,
loc_vars = function(self, info_queue, card)
return { vars = {card.ability.extra.x_mult,card.ability.extra.scaling, card.ability.extra.light_house_poker_hand}}
end,
calculate = function(self, card, context)
if context.before and context.scoring_name == card.ability.light_house_poker_hand then
card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.scaling
return {
message = localize("X")..card.ability.extra.x_mult,
colour = G.C.MULT
}
end
if context.end_of_round and context.main_eval and not context.blueprint then
local _poker_hands = {}
for k, v in pairs(G.GAME.hands) do
if v.visible and k ~= card.ability.light_house_poker_hand then _poker_hands[#_poker_hands+1] = k end
end
card.ability.extra.light_house_poker_hand = pseudorandom_element(_poker_hands, pseudoseed('light_house'))
return {
message = localize('k_reset'),
}
end
if context.joker_main and card.ability.extra.x_mult > 1 then
return {
message = localize{type='variable',key='a_xmult',vars={card.ability.extra.x_mult}},
Xmult_mod = card.ability.extra.x_mult,
colour = G.C.MULT,
}
end
end
}```
its card.ability.extra.light_house etc
thank fuck the next joker im making is super simple
what do you mean
you forgot the extra in your check
unfortunately, the schemes for jokers I keep coming up with get more and more complex
same...
it's so hard to make something both creative but also simple and elegant enough to fit into base game
god i wish vscode could flag stuff like this
glad i got this working
so true
I have one joker that I made recently that I feel just makes sense
it's essentially just a strange version of Mr. Bones but still
I feel like you should be able to get rid of the collection not included part
probably yeah
so 0.75x blind req with extra steps?
its kind of implied and if not people will learn fast as its easy totry
Also parenthesis around the Currently line
god i always forget about the brackets on xmult scaling jokers descriptions
okay, that much we get, but by removing that return there, it no longer retriggers and the reset function also just... isn't happening. we're definitely missing something here. at this point we're wondering if it'd be easier to just bite the bullet and try and somehow fit the retriggers in the post-trigger thing we deprecated
i mean, the only extra step is that you have to play a hand after you meet the requirement
so it doesn't clutch for you like mr. bones
i was gonna suggest eval_this() but apparently that's deprecated
calculate_effect replaces it
Is anyone familiar with Quantum Ranks? I would like to refactor one of my jokers to use them but I have no clue how they work
Well, they don't really exist yet.
Ah I see
Just a few people adding their own implementation.
it's all an illusion
A deception...
Two things, one, you're setting context.blieprint_card to nil without saving a reference, so whenever you use context.blueprint_card or card it always returns card
seeing you in the chat reminds me that I should try your mod when I get home lmao
I do have to test inter-mod compatibility at some point lol
Yeah I'm starting to shift focus towards that (inter-mod compat) in the dev cycle so anything you can find would be super helpful
oh alright, lemme get the crash for that too
Two, try replacing your previous return statement with SMODS.calculate_effect(other_joker_ret, blueprint_card or card) where blueprint_card is the reference mentioned here
There's already a few I know will not work (i.e. pessimistic, soil, group chat, perspective) since those have very specific implementations that I don't know how I would do otherwise lol
I see
luckily most of the friends vs balatro jokers are implemented in a pretty vanilla way
What I mean by that is they'll work with vanilla and maximus jokers, but outside of those they won't
oh I see
Refrigerator probs falls into that group too
well the one luck-based thing I added (a seal) doesn't even work with oops all sixes yet
vanilla compat out the window already lmao
but yeah I can't imagine any of my jokers have that issue (yet)
Oops compat is pretty easy lmao
the huh
yeah I know
I just didn't do it yet lmao
interesting
valid
the seal in question, btw
(I've had runs destroyed by this seal before)
you'd think you'd never really hit the 0.5, but I have the world's worst luck
oh hey I just realized Maximus now officially has more challenges than Cryptid lmao
we ball 
😭
oh yeah I should make some challenges at some point
Challenges have been really fun honestly
i dont think thats supposed to happen lol
fascinating
I keep just making decks 😭
Challenges are the easiest for me to make cuz I'm not the artist lmaooooo
can i make it so that consumables have a chance to be able to be used again?
(changed the suits of cards in the deck and now they dont respect the line
status effects in Balatro ‼️
I was going to make this an enhancement
But then I'd have to do art lmao
Looks like you just didn’t change them properly, can you show your code?
guys when i put select_card into my booster pack config it gives the card into the area but also activates it
how do i prevent it from activating
i think cryptid’s code card booster pack do this
thanks
what do you mean it activates it?
pogress
also there's a possible smods contribution here
might as well push that in before i forget
so the card is like a quest that you get from a booster pack
and when you complete it it rewards you with another card
and when i open the booster pack
i select it
it immidiately rewards me with the card
dissolves the quest
but its still in the consumables
and it says 1/2
show the code
ok i nerfed it hard
key = "questpack",
loc_txt = {
name = 'Quest pack',
text = {
"Choose one of up to 3 quest cards"
},
},
atlas = 'quest_booster',
pos = {x = 0, y = 0},
discovered = true,
config = {choose = 1, extra = 3},
loc_vars = function(self, info_queue, card)
return {vars = {card.ability.choose, card.ability.extra}}
end,
create_card = function(self, card)
return create_card("Quest", G.pack_cards, nil, nil, true, true, nil, "questpack")
end,
ease_background_colour = function(self)
ease_colour(G.C.DYN_UI.MAIN, G.C.RED)
ease_background_colour{new_colour = G.C.RED, special_colour = G.C.BLACK, contrast = 2}
end,
group_key = 'janm_quest_pack',
draw_hand = false,
cost = 12,
select_card = "consumeables",
weight = 1,
particles = function(self)
G.booster_pack_sparkles = Particles(1, 1, 0,0, {
timer = 0.015,
scale = 0.2,
initialize = true,
lifespan = 1,
speed = 1.1,
padding = -1,
attach = G.ROOM_ATTACH,
colours = {G.C.RED},
fill = true
})
G.booster_pack_sparkles.fade_alpha = 1
G.booster_pack_sparkles:fade(1, 0)
end,
})```
no of the card
i mean
goodness
I can't think of a reason this would happen
btw on the topic of boosters (kinda), how would I change the music of my boosters to the planet pack music?
is it maybe because i changed the buttons on the cards
the use and sell buttons on the quest itself is altered
are
could that be the problem?
that sounds likely
xchips isn't any worse than xmult
so why is it upgrading 10x more
Doing it vanilla would require adding meteor particles when the booster pack is opened.
I think
what a weird way to handle that
i have a code that does that
I take it letterPack.ogg is just a copy of the planet music
lmao
i recreate the notes in fl with no midi
😭
Yeah using SMODS API also works for this
The whole music control looks scuffed but technically works perfectly fine.
I did locate that and was very confused which is why I asked here lmao
okay, after some finesse (and a brief interlude to go outside for a bit) it is retriggering thrice now, but the "reset retriggers to 3 once they're 0, then exit the loop" still isn't working; it just exits without resetting. what're we missing there?
You don’t need to reduce your value within the loop
I honestly didn't even know celestial packs had different particles
oh! that actually fixed it, tysm!
Took a page out of Marie’s book for this one lol
Splash synergy be like?
I slightly misunderstood, this is like splash but only for high card
Yep
And because of the hand type restriction you get the retriggers as a consolation
i made something kinda similar kinda not, just made it in the same vein has duo, trio, family, tribe
where instead if the hand contains a high card (lol, lmao) its a x2 mult and retriggers aces
i called it the single
so it's just strictly better than the duo
depending on your run every hand could contain a pair too
ive had runs of nothing but full houses so its not uncommon at all
but it being so easily triggered is why its just an x2 mult, realistically x2 is not that significant
especially not when i have a card that goes up to x12
it's literally a guaranteed x2, but the retrigger on aces is really nice if you turn them into glass
i do not super often have glass aces on the regular so ive not run into much of an issue
realistically every card that gets you past the midgame is busted if you build for it so i dont see it as a massive issue
I mean I think it's balanced, it's just funny that it triggers on every hand you play
yeye i agree lmao
one of my favored cards is the brokie gamble
for every 5 bucks below 0 gain x3 mult
so -20 is 12x
The Ox kills that build, in the most hilarious way possible
on the other hand you'd love to see The Tooth
im thinking about making more jokers which increase how much you can go into debt, and they wont spawn unless you own the credit card already
but idk how much further to limit the debt
maybe first to 50, then 100 and end there
but thats alot of mult
alternatively, debt voucher?
thats true i could prob do that, but i figured the prob with voucher was that its a one time use for it to last the whole run, if i tie it to a joker then make the debt only last for as long as they hold the joker it at leasts costs a slot
then if they sell the jokers they can no longe ruse the mult
Technically any scaling Xmult card can scale that high 
thats true enough, i guess i just considered it much easier since you just need the card to farm it
Anyone here good at lua and Löve with some freetime that can help me with a thingo (That can take quite a while)
what's being cooked
I think I'm going to cook a multi-wave finisher blind
i have this concept for a new consumable type for my Pokemon TCG mod, lemme know what you guys think
Legendary Pokemon based cards
Arceus: add 1 of each possible upgrades of your liking to a card.
Giratina: destroy 6 random cards from hand and make 2 random Jokers negative.
Palkia: +4 permanent discards.
Dialga: +4 permanent hands.
Regigigas: debuff selected joker for 3 rounds. Joker gains custom X4 Edition after.
Groudon: +7 hand size.
Kyogre: +7 permanent free shop rolls.
Rayquaza: +1 Joker slot and +2 consumeable slots.
Ho-Oh: Shows you a selection of (7? maybe 8) jokers you've previously had in your possesion and allows you to take 1.
Lugia: First shop each round is free.
Mew: Hand pick any Joker you want.
Mewtwo: Select 1 Joker out of 15 random that are shown and select an Edition for it.
Xerneas: Selected Joker becomes Eternal and negative.
Yveltal: Remove Eternal from selected joker and adds custom X3 Edition.
the plan for these are for them to be really really rare
like 1 or 2 per run
+4 hands is basically guaranteeing you win the run
I would not call 1 or 2 a run rare
An online ui tester for balatro
except for some hard counter boss blinds
does anyone know of a mod that adds a custom consumable area and gets those consumables from a booster pack?
+2 would be better then?
There's sorta already something like this with BalaUI iirc, but that's more for card descriptions.
I assume this is more about general Balatro UI?
me when the blind chip requirement goes up higher and a different boss music starts playing
So Mew is basically Death Certificate from Isaac 👀
amazing
These seem very strong. Are these supposed to be like soul/black hole rarity?
finally some good fucking joker effects
the idea is that chips, hands, and discards would reset per wave, and everything would get shuffled back into your deck. And it will consistently have the same set of boss effects in the same order to clear
yeah something like that
Had a feeling you'd take a liking to it lmao
actually, I really like that idea for a legendary joker
i actually had it written as death certificate on my notes lmao
i had to elaborate on the description for that message
naturally
actually, looking through the list again, some of these are better than legendaries... 😅
bump?
yeah, i wanted them to be unique. Not sure how im gonna implement them into the gameplay loop once i've made them i want them to be really rare
if my mod has two branches on github and I make a release, how can I make the release use a specific branch's code?
more of a github question i'm still kinda stupid with this stuff
For context, I'm making boss blinds loosely related to the runes from Isaac, and this finisher blind was going to be called "The Beast"
y'all are working on branches?
I replied to the wrong message...
yeah imagine not just force pushing everything to main
the way linus torvalds intended
So, who has time to help me?
I think you're going to have to more clearly define what kinds of features that entails
Hey! Im making a balatro UI tester, like a screenshot of balatro, where you can put ui elements on to see how it looks.
In the future you would be able to drag and drop the ui elements and then convert that into code, add paramiters, show ui on click either in a specified place or the whole screen and mush more!
Im currently looking for someone to help me make this
So any help would be greatly appreciated
This should cover it
Thoughts on this challenge? 👀
When you say "help me make this", do you mean "help me with advice on final tweaks and testing", or do you mean "yo bro I've got a great idea for an app all it needs is some code bro"?
Both, ive started making it today with lua and löve
So a little bit is done, i just dont think I can port all balatro ui stuff alone
Best way to gather interest and support is probably to make a thread in #1209506514763522108 about it and show off what you've accomplished. Most devs are wary of ideas alone, but showing your work will get people alongside. And showing bad work that needs to be fixed is even better at drawing support because people on the internet love correcting things
"the best way to get information on the internet isnt to ask a question but to look for someone asking the same question, provide a wrong answer and wait for people to correct you" or something like that
i forgot where i saw that but like its funny
Kinda true and real
ACKTUALLY that's a misquote by a later copycat and the original is "blah blah blah"
🔥✍️
was meant to be only when scored originally but i messed up the code and was like wait it might be more fun like this
Dollar sign goes in front
my european ass really just did that
just gotta do the artwork for these and that's 10/15 done
damn i'm going fast
more language than continent dependent 😛
make it my spanish ass then
Was really hoping this smods update would've added a context for entering a shop
i don't like this description, how would i make it better?
It did though?
Really? I swear I couldn't find one in the updated utils
For making a deck, if I'm doing something like Ghost/Magic deck, what do I need to replace self with in stuff like self.effect.config.consumables
How can i score a card with SMODS.score_card() with a repetition context?
hang on nope I'm just bad at writing code
its pretty well said tho?
weird bug we discovered with our one blueprint-like joker from earlier; for whatever reason, it just... doesn't work with jokers that retrigger playing cards, like chad. it works just fine with most other jokers, even ones that activate on playing card activation, too, which is weird! any particular reason this isn't working we're just missing?
me when i make the deck radioactive by accident
i want to have what he's having
i mean it doesn't do anything it functions properly
there just simply is radioactive particles emitting from the deck
Is there a way to adjust the chances of what edition would be chosen?
my lazy ass forgot about the wiki
thanks
1.) Make the word destroy red? Maybe. You'd have to look at Sixth Sense,
2.) The second to last line should probably read "and this card gains +3 Mult" to match vanilla nomencalture.
3.) The last part of the last line needs {C:inactive} after the mult part
How can i score a card with SMODS.score_card() with a repetition context?
how does the self destruct detect the round score and blind amount
they're.... weights
if the sum of weights is 10, a weight of 1 means 10% chance
if the sum is 3, a weight of 1 means 1/3 chance
smods update on its way to break one of my patches somehow
One last question: does poll edition suports negative edition?
like e_negative
yes but it has a field you can use to not spawn negative
is this possible?
Third line -> "and gain +3 Mult."
it should be the same thing
it doesnt work
Repetitions are collected only with return values
I did this for that effect card:set_edition(poll_edition('tag', nil, false, true))
It creates negative as well
^ cant verify since im on phone and not pc but should be like this
if you want no negatives you simply change that false to true
What are these settings stand for?
context.starting_shop works btw 
whenever i try to add a localize = message to my joker, i get a really weird error that takes place in common_events.
functions/common_events.lua:1241: attempt to call method 'juice_up' (a nil value).
my joker DOES use juice_up, but the fact that this returns an error from common_events and only when i try to implement a message makes me think that i'm not using the 'return' function properly. any help would be super appreciated!
Tag can basically be anything I usual use the jokers key, _mod is usual nil, _no_neg is removes negative from pool when true, and _guaranteed is if its guaranteed (if not that's where _mod comes in).
it's probably some easy fix that i just can't see rn
card = self is the problem, self is NOT a card, card is
oh okay! is a card= statement even necessary then? i pulled card=self from midas mask's code in the dump, which is where i found the card=self statement
it's not necessary, no
it's generally used to specify what card should do a little jiggle when it's triggered
or what card the message should appear on
yup, just tested it and didn't need it! tysm 🫡
ah, but if you use localize within a card's functions then it will already know which card to jiggle?
that'd make a lot of sense
not quite, the default is probably the card that returns the effect
might depend on the context tho
mmm got it got it, thanks!
we get that much, having encountered repetitions being return-only before. is there a way to like, fudge collecting repetitions for the sake of this card, like how blueprint can copy them? :o
on a walk rn so can't really check but like. could you use SMODS.calculate as like, a VERY hacky way to try to detect repetitions?
I believe someone in here a few days ago had some issue with invisible cards after cards are destroyed
I'm getting the same thing with this joker
Ghost card moment
Youre destroying cards during scoring incorrectly
There's something specific you have to do
Oop, I see it here
is the point of that joker deckfixing alone?
Basically
Does it not send the destroy_card context to unscored cards?
mmm, yep, it only does it for the scoring hand
you should get unscored cards if you enable the optional feature for them
sorry to nag, still looking for pointers on this front as it'd kinda suck if it just Didn't Work With Repetitions like blueprint does. if someone wants to combine this with baron, they SHOULDN'T, but they should be allowed to make that mistake
it does not, no
always found it kinda weird it doesn't ngl. like it's one thing to not support BMP as that's largely been overtaken by PNG, but like. SVG is still very frequently used. it's like THE vector graphic file type.
That's a shame because it's goddamn beautiful
given how long it took them to add audio embeds on mobile that aren't just "download the file", we expect them to add .bmp and .svg embeds in... 2034
Well, for those who want to bother with downloading and opening this svg in a browser, let me know how it looks and if it's fully functional
And more importantly if it displays smoothly or is stuttery
looks great, is fully functional and displays smoothly
How can i make this in the context of repetitions? SMODS.score_card(context.scoring_hand[1], {cardarea = G.play, full_hand = context.full_hand, scoring_hand = context.scoring_hand, scoring_name = context.scoring_name, poker_hands = context.poker_hands})
Okay I did enabled unscored cards as a feature, but now I'm running into a separate problem in that I can't seem to get it to function. I cant even get the debug statement to play if I remove the hand size check, but I saw by looking through the SMODS code that it just sets the cardarea to 'unscored' as a string when unscored cards are enabled
if context.cardarea == G.play and #context.scoring_hand == card.ability.extra.hand_size then
sendDebugMessage(tostring(context.destroy_card)..' | '..tostring(context.scoring_hand[#context.scoring_hand]))
if context.destroy_card ~= context.scoring_hand[#context.scoring_hand] then
return
end
return {
delay = 0.45,
remove = true,
}
elseif context.cardarea == 'unscored' and #context.full_hand == card.ability.extra.hand_size then
sendDebugMessage(tostring(context.destroy_card)..' | '..tostring(context.full_hand[#context.full_hand]))
if context.destroy_card ~= context.full_hand[#context.full_hand] then
return
end
return {
delay = 0.45,
remove = true,
}
end
end```
hmkay what's your smods version?
0.9.8. Is this a more recent feature?
Cool?
who tf told you to use it
With all my love and respect, this is not a cool response
i'm so sorry, i'm just flabbergasted
you said you were looking at smods code setting the cardarea to unscored, so it just doesn't even begin to make sense to me
like, you were looking at the updated code but are using an old deprecated version??
Code search on github because I couldn't find it in the front-facing docs
so you're looking at the most recent code while using 0.9.8
that's because the feature was added a week ago
you should use the same code that you're looking at
I'd sooner search my own smods code with Visual Studio
For the record, first balatro mod I've made here, and I created this mod explicitly for compatibility with Cardsauce, which began development roughly a year ago. So that's probably why Cardsauce is/was using 0.9.8, and I myself am not intimately familiar with smods releases
good point
Cardsauce is still in active development and has long updated to newer versions of steamodded
what do people use to make joker art
literally any art program with transparency will do. we use paint.net personally
I use kirta but a lot of people use asprite.
any of the above are viable options
the OP of the thread's last post was 8 days ago, which I feel is a bit long, but is definitely more recent than bettercalc
same
paint.net is good
like, the only option we can think of that wouldn't work is like, MS Paint, just bc paint doesn't have the ability to handle transparency. which if you're using MS Paint in 2025, that's... that's its own entirely separate question. ;P
I generally make my sprites at 2x size, and then Resize to 50% (with nearest neighbor) for the 1x sprites
yeah but they have their own discord
I genuinely don't know what to tell you my guy. BarrierTrio probably could've told me to use a more recent version but didn't. It is genuinely not a big problem to update nor is having missed it a big problem either lmao
oh and localthunk made a pinned message about joker art tips thats nice
This is also useful https://discord.com/channels/1116389027176787968/1224362333208444989
I'm not trying to make a problem out of it, I just don't get it in the slightest how you could have been using it at all
Because I'm a professional game designer and using older/less supported tools is often expected if it means ensuring compatability and not having to bugfix an entire codebase due to an update?
oh thank you so much this is amazing
Same reason my past employers used a version of Unity that's like 4-5 years old at this point
yeah but there's a big notice that the version is deprecated?
and.......? A deprecated tool means it's not supported anymore, not that it's non-functional
I'm not gonna turn my nose up at something being deprecated if I'm advised to use it by someone else I'm working with
at the same time you want to use a feature that was added a week ago...?
that's the part that's confusing me
am I supposed to inherently be aware that this feature I didn't know existed until you offered it to me was added a week ago?
you didn't give a timestamp
you just said use it
It's not even the unscored feature in particular
destroy_card in the form you're using it is also a more recent feature
No no no, don't walk back from that. You told me to use unscored cards, then got weirdly annoyed when my tools didn't support it
destroy_card does work by the way
destroying_card does. destroy_card is not a thing in 0.9.8
i know that because I personally added it a month ago
Hey y'all, why is the check for if the playing card's edition is polychrome not working? (I'm guessing the condition is checking if the joker has polychrome currently)
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play then
if context.other_card.config.seal == G.P_CENTERS.Gold then
if SMODS.has_enhancement(context.other_card, 'm_gold') or card.edition == 'e_polychrome' then
return {
dollars = card.ability.extra.money,
card = card
}
end
end
end
end
since you seem to be working off up to date docs, I'm starting to question if you're using 0.9.8 at all
card.edition.key
Update your manifest please 😭
How can i make this in the context of repetitions? SMODS.score_card(context.scoring_hand[1], {cardarea = G.play, full_hand = context.full_hand, scoring_hand = context.scoring_hand, scoring_name = context.scoring_name, poker_hands = context.poker_hands})
lovely 0.3.1 dependency 👀
yeah you're just about a month behind then 😭
that file was for thunderstore, which I don't maintain
so i forgot that it was a thing
so it's just a big misunderstanding we've had, I am so sorry
Regardless, I'll see if I can update it to get unscored cards
Idk what version cardsauce is running now since it's diverged since I copied it last
what actually is the difference between the two?
It just says Version 1.0.0~ALPHA-1317a or later, cool
So yeah I had gotten what was then the most recent version roughly a month ago when this started, probably right after destroy_card was added
from release notes
destroying_card is specifically for scored casrds iirc
destroy_card is on every card
current latest is 1425c for reference
should be good to just grab latest then
yeah should be fine, I don't think we've done any major breaking changes since then
regardless that version would still be too old to have unscored support
More like I've probably done some patches over SMODS code that might have self-inflicted breaks. It'll probably be fine tho
oh huh I think I see what happened to the manifest. There's been a release workflow on changing this file that I've neglected to change. so it just sort of sat there until I forgot eventually
fwiw i'm new to lua/modding itself, so I didn't think to check for the version file. Manifest is more familiar to me from some typescript projects I've used before
So with the update, let's see if the code runs. It was buggy anyway so I think fixed it
on an unrelated note, we're officially no longer a mod loader
nods nods, new feature works great. Thanks for letting me know!!
How can i make this in the context of repetitions? (so instead of triggering things that retrigger it again like seals it just retriggers the card) SMODS.score_card(context.scoring_hand[1], {cardarea = G.play, full_hand = context.full_hand, scoring_hand = context.scoring_hand, scoring_name = context.scoring_name, poker_hands = context.poker_hands})
just use context.repetition normally like red seals / repetition jokers do?
oh we should probably update our steamodded ASAP come to think of it--
again I'm so sorry for my reaction earlier. That was really unnecessary on my part and I should have known better
-# also it's 2am and I'm tired af so that doesn't help my case
It's cool!! I understand the confusion, and I offered incorrect information myself because I didn't really know where to look
In scoring_hand or... I already use it in the code, and it doesn't work if it retriggers a card that's not itself (the reason I'm using score_card)
what are you trying to do?
and what kind of card is this even
but all things considered little scuffles like that just kinda happen a lot in game design from my experience. Not everyone's on the same page and sometimes you just gotta double check and reset everyone's expectations
retrigger the left most card, this code works but it causes a problem (i'll take a video rq)
So my apologies for causing a stir!! Esp so late, go to bed!
what a beautifully vague respose
New manifesto when?
Hey y'all, how do you add specifically the Gold Seal and Negative Playing Card (+1 hand size) tooltips to a Joker?
--gold seal
info_queue[#info_queue+1] = G.P_CENTERS.Gold
--negative playing card edition
info_queue[#info_queue+1] = G.P_CENTERS.e_negative_playing_card```
G.P_SEALS.Gold
For the seal
this is how steamodded adds the negative playing card one
without the if statement of course
is there a way to make jokers detect other jokers of a certain edition
yes
all good, and i will
I want to fix the problem of it retriggering the seal again on the leftmost card
good to know this is a seal
that was 0% clear before
I'm not sure of the ability of playing cards to retrigger other playing cards and I'm too tired to think about it
yeah I cant recall a way to do it
I recently did that by hooking into calculate_repetitions
I believe the problem is that when the card is scored again it goes though reptations again I just want to make it not do that.
Also sorry if you already saw it, but could you take a look at what I mentioned in #1209564621644505158?
about verdant leaf?
Yeah
I havent looked at any of the blind stuff recently
I did see some commits were made recently on blind stuff, and I tested it only with debugplus
yeah I believe someone rewrote how they're applied but I ahvent had time to look over it
Looks like it was @humble girder, it only happens with Verdant Leaf
Is it the same with Crimson Heart?
Nop, that one seems to work perfectly fine
And the suit debuffing blinds work as well
All other showdowns also work
Im making a skin pack and the planet cards arent showing up in game. how do I call for them specifically?
This is the Verdant Leaf code due to the commit (which is why I asked cause it looks like the problem is that Verdant Leaf hits the 1st condition and can't reach it's own).
Oh I see, they are not elseifs in the vanilla code
Not sure how The Pillar is hit too.
the pillar isnt in an elseif
hmm ok
anyone know what im supposed to do here?
oh actual 0.9.8 code
sorry to keep pestering on this, but we're still looking for an answer to this if anyone has one; as it stands, the inability to properly mimic retriggers on playing cards is like, the one absence we've found. :o
You should find a way to return the repetitions
how would i be able to save cards from booster cards? i tried using
select_card = 'consumeables' but it doesn't work (unless it means like select_card = 'G.consumeables')
update smods
Is consumables spelled with an extra e in the code for the game?
yes
Blame LocalThunk
okay so, SMODS.calculate_effect(repetitions, target or card) wasn't the answer to that. honestly felt like that had maybe a 33% shot of working just out of the box given how lua's been treating us ;P
(for reference, this is the current calc code)
Soo I don't know the best way to do this
But I was thinking if other_joker_ret has repetitions in it, remove them and store them somewhere else to return after the loop
for some reason i got a crash and i don't know why >_< (maybe it has to do with the fact that i made new boosters? idk)
did i forget to do something why is it so small 😭
I am terribly confused, why is my booster pack crashing when I hover over it in the collection?
So, I'm trying to set up a blind effect that shuffles the order of the played cards, and I cannot figure out what to call it on. Using G.hand only shuffles the cards that are not highlighted, and this crashes
if not self.disabled then
G.E_MANAGER:add_event(Event({ func = function() G.hand.highlighted:shuffle('aajk'); play_sound('cardSlide1', 0.85);return true end }))```
What's the crash
What is your actual code
highlighted is not a cardarea and so it doesn't have a shuffle function
Its just a list of cards
what would i need to do if i want to destroy a joker?
your loc should be in descriptions.Other.p_modprefix_key for booster packs
I blame the Steammodded API wiki for this.
in most situations, you'd want to do:
joker_variable_name:start_dissolve()```
but if you're going for the way Gros Michel, etc does it, there's a specific set of code you can copy from that
I believe that specific part refers to group_name
well hopefully it's G.play, otherwise I'll need to do something fancy
Yee, that fixed it!
is this a new joker you made? if so can you send the code
yup that was it
i realized i forgot to export the 2x spritesheet as 2x the size
That joker looks uncannily similar to a certain school idol I know of…
it may or may not be
I don’t think I have a say in this but I’d rather you have your jokers cosplay as them without the clown makeup.
lmao
Also, obligatory that's what she said
Oh, and don’t forget to put a giant ほ in its background.
i got this code working and allat, but the thing is that: the card doesnt seem to destroy itself, so i have to do it manually through the line which was commented
but if i do so then it just wipes off the card completely, and the dissolve animation wont run, is there a better way to achieve the same results?
oh thats so true
how'd we go about checking if other_joker_ret has repetitions in the first place? there's NO way it's as simple as other_joker_ret.repetitions, right?
If you want to destroy a joker you should look at how vanilla destroys food jokers for example
Yes it's that simple if other_joker_ret.repetitions then whatever end
god i fucking forgot which file has the print function
I mean idk if this is why but like here's one of my booster packs
-- Basics
SMODS.Booster {
key = 'bc_basic_1',
atlas = 'pm_PMBooster',
pos = {x = 0, y = 0},
config = { extra = 3, choose = 1 }, -- have 3 cards, choose 1
group_key = 'pm_battle_card_booster',
cost = 3,
weight = 10,
--weight = 1.5,
draw_hand = false,
kind = 'pm_BattleCard',
select_card = 'consumeables', -- save the cards instead of using them
loc_vars = function(self, info_queue, card)
return { vars = { card and card.ability.choose or self.config.choose, card and card.ability.extra or self.config.extra } }
end,
create_card = function(self, card)
return create_card("pm_BattleCard", G.pack_cards, nil, nil, true, true, nil)
end,
ease_background_colour = function(self)
ease_colour(G.C.DYN_UI.MAIN, G.C.RED)
ease_background_colour({ new_colour = G.C.RED, special_colour = G.C.BLACK, contrast = 2 })
end,
}
and then this is the line that the crash screen says causes the issues
localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = loc_vars}
You don't need loc_vars btw
That gets done automatically
I'm not sure on what the error is besides that
the thing that i got it on was the manacle, and i had two of my custom cards too
the game works fine after that tho, i restarted the run and it's fine
The crash happened when hovering over a card?
Probably because the Stack Trace got the line wrong.
It's displaying info for calculate_reroll_cost which is a completely different function.
Tbf they haven't told us when exactly the crash happened
I kinda assumed it was hovering a booster pack ngl
What function are you looking for?
thats odd
oh, i added print(card) to debug some stuff for my mod earlier
but uhhh
im pretty sure i deleted all print() in my mod already
and its still printing that
idk, maybe you forgot to save?
nop, i did
otherwise if you're using vscode press ctrl + shift + f to search for stuff in all files
invaild asset/Atlas
either it named wrong or you misspelled
im pretty sure its a smods version issue, which is usually the crash reason for cryptid
i did just that rn, there really is no print() which prints out the card details at all
im actually gonna go insane
Does anyone know of a mod that adds different save files? For example, I want to play a vanilla file while one save I'd like to play pokermon file
ok i did not fix my problem
so i have a joker that i want double the players money when sold, with a max of 100
SMODS.Joker{
key = 'century_egg',
loc_txt = {
name = 'Century Egg',
text = {
'Sell card to {C:attention}double{} money',
'max of $100'
}
},
rarity = 4,
atlas = 'century_egg',
pos = {x = 0, y = 0},
config = {
{extra = 100}
},
loc_vars = function(self,info_queue,center)
return {vars = center.ability.extra}
end,
calculate = function(self,card,context)
if context.joker_main then
self.ability.extra_value = self.ability.extra_value + self.ability.extra
self:set_cost()
return {
card = card,
color = G.C.MONEY
}
end
end
}
this is what i got
tbh im just copying from the game files and seeing what sticks
change "self.ability" to "card.ability"
self is Not a card
oh, dope, duh
oh sorry i think it was legit just me entering a blind
atlas = 'century_egg.png'
hey gang -- i tried to follow the perkeo implementation for adding consumables to deck, and i'm having an issue where i believe everything it wants to spawn (including with blueprint/brainstorm) does it all at once (with the only interrupts being messages, which doesn't actually seem to affect the event logic?), which is an issue because, for some reason, that means copies of this card that can't add anything to the deck still give the message indicating that they have
-- draw stiletto on blind selected, if there is room
if context.setting_blind and #G.consumeables.cards ~=
G.consumeables.config.card_limit then
G.E_MANAGER:add_event(Event({
func = function()
if #G.consumeables.cards ~= G.consumeables.config.card_limit then
local card = create_card('ESkill', G.consumeables, nil,
nil, nil, nil,
'c_Impact_KQSkill', nil)
card:add_to_deck()
G.consumeables:emplace(card)
return true
end
return true
end
}))
if #G.consumeables.cards ~= G.consumeables.config.card_limit then
card_eval_status_text(context.blueprint_card or card, 'extra',
nil, nil, nil, {
message = 'Incoming!',
colour = G.C.PURPLE
})
end
end
i'm probably missing something obvious but i'm a tiny bit puzzled 😭
i thought it required the suffix for file type
name is what the game shows
key is in the code
ah right
Instead of using ~= use <
I guess now we have both Balatro: Star Rail and Balatro: Genshin Impact
next we need Balatro Run Kingdom
i sure as hell am not developing that
we need zenless balatrone zero imo
Actually I think you should put your message inside the event, right after you spawn the card, Perkeo is not the best example to base it off of here because it always creates a negative card and doesn't check for space

next project for me when im done with PMCS
I did originally put the message in the event - what it did was spawn every single card at once and it went over the limit somehow
This did the exact same thing
For the record, when there's only 1/2 consumables, it will always trigger the message for every single copy of keqing
When consumables full and you start the round it'll correctly do nothing at all
my apologies if i'm interrupting something, i uhhh. have encountered a mod crash and i'm not all that knowledgable on parsing crash reports. would you all mind if i post it here?
you're making a paper mario color splash mod...?
what the fuck based???
i have no idea what the hell is going on here, to put it lightly
try the Purple seal code
hmmm i'll look into that
Also you can just do SMODS.add_card { key = 'c_Impact_KQSkill' } to spawn a card instead of using create_card
it will handle the adding to deck and emplacing for you as well
did consider that but i'll optimize everything once it's functional - ty
in that case I have another suggestion for when it's working, instead of card_eval_status_text, try
SMODS.calculate_effect({
message = "Incoming!",
colour = G.C.PURPLE
}, context.blueprint_card or card)
It might make your code easier to understand without needing all those nils
behind the scenes it just does the same thing you did
i actually hadn't encountered calculate_effect in docs yet, thanks!
ok still wont work hmmmm
ye, i made a forum post in #1209506514763522108
thats what I use for sleepy! :D
key = 'century_egg',
loc_txt = {
name = 'Century Egg',
text = {
'Sell card to {C:attention}double{} money',
'max of $100'
}
},
rarity = 4,
atlas = 'century_egg',
pos = {x = 0, y = 0},
config = {
{extra = 100}
},
loc_vars = function(self,info_queue,center)
return {vars = center.ability.extra}
end,
calculate = function(self,card,context)
if context.joker_main then
card.ability.extra_value = card.ability.extra_value + card.ability.extra
card:set_cost()
return {
card = card,
color = G.C.MONEY
}
end
end
}
Pro tip: the set can be skipped since it automatically gets it from the center if available
do i have to call in the extra_value as well?
Are you crashing or is it doing nothing
try card.ability.extra_value = (card.ability.extra_value or 0) + card.ability.extra
my implementation is accidentally extremely similar to the purple seal code, only difference is it utilizes G.GAME.consumeable_buffer. that's probably the solution here
should be an easy fix
Hopefully
could somebody help me parse this? i'd like to be able to use balatro again without literally nuking it FHFKLJSDH
I understand what you're trying to do but I think it might be better to use context.selling_self and ease_dollars
Rather than changing the sell cost of the card
hey, it worked perfectly!
thanks for recommending looking at purple seal code
appreciate you
(sorry for the delay, was caught up in some stuff ^^;) it seems like this is storing retriggers at least, though no idea how to return 'em. do we need to store the target card's target, too? would we like. use SMODS.calculate_effect?
After the for loop is over
return { repetitions = targetRepetitions * 3 } the * 3 cus it'd copy the card 3 times
That was my idea anyway, I'm not sure if it'll work
and you probably don't want to have that else branch inside the for loop
tho it probably never gets executed
yeah, that else isn't doing much. that message never appears.
yeah cus funk is always 3, unless some cryptid card changes its values lol
ooo, what does keqing do?
anyone who would willingly combine cuberry and gemini is a masochist
she's not fully finished yet, as i still need to add functionality to the lightning stiletto -- but i've shown off keqing's main ability a few times already
she retriggers the first and last played card if hand is not High Card
well... it doesn't crash, but it's retriggering itself, which does... nothing. how could we point this at the target, perhaps? :o
I don't think it's retriggering itself
It looks like it's properly triggering the played card 3 times
o, i was wondering if the new consumable card she adds does smt lol
if you mean the "Again!" message on the card itself you can do other_joker_ret.repetitions = 0 in your check for repetitions after you saved it
I think
I'm experimenting as much as you are
not yet, that functionality hasn't been built yet! but check it
oops meant to reply to bepis
this is an example of how i want character cards to "synergize" with their respective skill cards
so
diamonds will eventually correspond to the Electro element when i implement elemental synergy as well
Diamonds feel more like geo to me
i tried to do what the hermit card does
key = 'century_egg',
loc_txt = {
name = 'Century Egg',
text = {
'Sell card to {C:attention}double{} money',
'max of $100'
}
},
rarity = 4,
atlas = 'century_egg',
pos = {x = 0, y = 0},
config = {
{extra = 100}
},
loc_vars = function(self,info_queue,center)
return {vars = center.ability.extra}
end,
calculate = function(self,card,context)
if context.joker_main then
ease_dollars(math.max(0,math.min(G.GAME.dollars, 100)), true)
return {
card = card,
color = G.C.MONEY
}
end
end
}
but nothing happes either
i thought about it a lot and i really don't want the inert elements to be on the suits
cryo/hydro/electro were easily in there, tough fight between cryo and dendro for spades but i went with cryo because it was implemented first
