#💻・modding-dev
1 messages · Page 240 of 1
does it work for playing cards too?
I think so
I changed a suit. Just let me get my code rq
pseudorandom_element selects a random element from a table so you would probably do something like ```lua
local editions = {
{ foil = true },
-- more elements
}
context.other_card:set_edition(pseudorandom_element(editions, pseudoseed("insert seed here")), true)
what would running a print function in balatro do?
it should just print it to the console
at least it does if you have the DebugPlus mod installed, idk if it does without it but probably does
ok so void, if im getting this right we should have created a new "context" function which the joker can call when calculating?
what do I input at seed?
oh wait i need to edit this
now it should be correct
you would usually just put the name of the joker into it
what does inputting the joker name do?
it's just a seed for the random number generator
you'd need to make a custom RNG for that I think
I guess you could just put the same element multiple times into the table but that's kinda jank 
context is just a table storing variables.
What SMODS.calculate_context will do is go through all the Jokers currently owned, and call each Joker's calculate function and pass the context table you made into it.
Fredoka One
See https://github.com/Steamodded/smods/wiki/calculate_functions for details on how calculate works
I see
😭
i still am so confused about this whole thing, the values in card.ability.seal ARE being changed by the code, I've checked it I'm 100% sure it's happening, so WHY does card.ability.seal in loc_vars only ever return their initial values??
also note it's good practice to prefix custom things you add with a mod prefix just in case
SMODS.calculate_context({ yourmodprefix_change_suit = true, other_card = self } or smth
aaaaand also note the other discussion that Card:change_suit might not even be called becaue SMODS overrides things
How does the return table work, when calling SMODS.calculate_context? I'm trying to parse the code for it, but it's unclear to me what information is passed through all the way back, as it goes through quite a lot of functions
New tarot card checking in.
kitti
@rain slate I keep getting an arror at this line when booting up the game
says there's an unexpected symbol near 'local'
you didnt screenshot the line numbers
it's the one I have highlighted
no it's fair
i think you need some , after your tables
that is a joker? Can you paste the whole code. I don't understand what it is supposed to be doing here
youre also defining things in a table which i dont think you can do (?)
yea 1 sec
you do not need local
that too
would i also need to say "not context blueprint"
🤷
actually yeah i just saw what you're doing you do need local you just wrapped what you're doing in a table for some reason
I think they are right. return after doing your enhancements, you cant' return a multiline statement (well, not normally)
please move it out
handling blueprint is done in a joker specific level
i see
`SMODS.Joker
{
key = 'j_harlequin',
loc_txt =
{
name = 'Harlequin',
text =
{
'All played {C:attention}numbered{} cards gain a',
'random {C:attention}Enhancement{}, {C:attention}Edition{} and {C:attention}Seal{}',
'when scored'
}
},
atlas = 'a_harlequin',
pos = {x = 0, y = 0},
rarity = 4,
cost = 20,
blueprint_compat = false,
eternal_compat = true,
perishable_compat = true,
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play and context.other_card:is_face() == false then
return
{
local editions =
{
{ foil = true },
{ holographic = true },
{ polychrome = true }
}
context.other_card:set_edition(pseudorandom_element(editions, pseudoseed("harlequin")), true),
local enhancements =
{
{ mult = true },
{ bonus = true },
{ glass = true },
{ steel = true },
{ gold = true },
{ stone = true },
{ wild = true },
{ lucky = true }
}
context.other_card:set_edition(pseudorandom_element(enhancements, pseudoseed("harlequin")), true),
local seals =
{
{ red = true },
{ blue = true },
{ gold = true },
{ purple = true }
}
context.other_card:set_edition(pseudorandom_element(enhancements, pseudoseed("harlequin")), true),
}
end
end
}`
jokers need to explicitly handle in its calculate function which parts of its effects are copiable by blueprint-likes and which are not
also just an fyi, that code will set edition twice, never seal. There's also poll_[whatever] functions for seals, editions and enhancements, so you don't have to set up a table yourself each time
SMODS.calculate_context will automatically handle blueprint and all that you do not need to bother
Side note: anyone hear the extended jazz fusion version of the balatro theme? this has been kicking around my brain for days since I first heard it
https://www.youtube.com/watch?v=WJi6m7R8ADY&list=PLhFVkxwhjLxpU2_eSvOwSQ131u8-BhUHb&index=2
Stoked to share this new SOLO cover I worked on recently! I've always been a fan of Rogue-Like Games for a long time, especially deck builders (and being a trading card game junkie). First few that come to mind are games like: Slay The Spire, Monster Train, Peglin, One Step from Eden, and many more.
When Balatro first got announced, I got the d...
when declaring the lists?
you do need it
you just wrapped all your code in a table for some reason
I only took a brief look and assumed you're building a table
so like, no need for curly brackets?
what context would i put in the joker itself, then? (sorry im new to this)
btw, void, do you have some insight in how the return table works for SMODS.calculate_context()? I'm trying to return some string information in a return value for a mod-specific mechanic, but I seem to be bumping my head against where and how I can make that actually show up in the return table
try this @deft niche
local editions =
{
{ foil = true },
{ holographic = true },
{ polychrome = true }
}
context.other_card:set_edition(pseudorandom_element(editions, pseudoseed("harlequin")), true)
local enhancements =
{
{ mult = true },
{ bonus = true },
{ glass = true },
{ steel = true },
{ gold = true },
{ stone = true },
{ wild = true },
{ lucky = true }
}
context.other_card:set_enhancement(pseudorandom_element(enhancements, pseudoseed("harlequin")), true)
local seals =
{
{ red = true },
{ blue = true },
{ gold = true },
{ purple = true }
}
context.other_card:set_seal(pseudorandom_element(enhancements, pseudoseed("harlequin")), true)
end```
i added an extra check for context.other_card because sometimes I have encountered that being nil. and lua is not chill with nil
sorry I never looked at what return_table does
ah shame. I guess I'll keep digging around and trying to print answers to the log, haha
What if I made this a world in my mod...
much appreciate it
still getting some errors, I'll see what I can do
What the heck yall
I export my sprite from esprite, it has ~18 colors
It gets backed up into google photos. I download it. Now it has 4600 colors somehow?
what is the purpose of the starting underscore in "_card_change_suit"
remove the comma after editions @deft niche
you don't need a trailing comma after your local variable declaration
ok
but then I get another error, 1 sec
heres what i have so far:
and uhh you need to use different functions to set seals and enahncements
‼ I found the issue. Google photos is doing some weird shit. It actually makes my 2kb sprite bigger
It makes it 5kb and also looks like poo emoji
you're even using enhancements in the seals part...
Storage Saver, so efficient it increaes the size of your files!
yes, remove the commas after the function calls
jesus christ show us your line numbers
it will still not do what you want but it will be syntactically correct
they disappeared this morning idk what to do abt it 😭
you dont need commas at the end of each line
tho the line of interest is always the one I have highlighted
remove these
My man. What I sent to you did not have commas. also I fixed like eight of those errors my man
done
ok and now there should be no more syntax errors, but it won't do what you want because there's still some things that need to be fixed
copy pasting it f'd up the spacing so I just tried to fix the errors myself
also because if I let another person do the code for me then where's the fun!
I'm all ears
for one, set_edition should only be used once here, because we're trying to set editions, enhancements, and seals, and enhancements and seals are not editions so we can't use set_edition to set them all
oh and thank you, now it doesn't crash
this is what i have so far
the second one is that we should use the seals table in the final one
instead of enhancements
fixed
people here want to help you because we are all mired in agony trying to implement our own stuff and basically falling apart
i was RIGHT, the card argument in loc_vars IS fake
so FUCK.
what do i do about that.
it's only sometimes fake
oh also I think seals shouldn't be a table of booleans it can just be ```lua
local seals = {
"Red",
"Blue",
"Gold",
"Purple"
}
and it seems setting a seal is easy and can just be done with ```lua
context.other_card:set_seal(pseudorandom_element(seals, pseudoseed("Harlequin")))
you mean without the table?
what?
anyone here with knowledge of contexts that can help?
you forgot a comma after name
this
you mean with or without the table you described above?
How would I go about testing my jokers.
Is there a mod or something I can use to just spawn them in
same issue, still crashes with the same error
eremel, would you happen to know what kind of info gets passed to SMODS.calculate_context()'s return table? I've been trying to figure out how to use it, but I have mostly just been running into a wall, haha
Yes, on line 25 you are using this synax #6# which means 'use the sixth variable provided to you in loc_vars and you don't have a loc vars defined at all
ah there seems to be a few other missed commas, which are after key and after atlas in the Joker one
DebugPlus lets you spawn in Jokers from the collection with CTRL + 3
also this
what seems to be the issue here?
You can put the game in debug mode and do it without debug plus. But debugplus does add a lot of cool extra stuff
there's also SMODS.poll_seal, which might respect seal rarities etc more? not sure, I don't know the specifics
still nothing sadly :/
fixed it ty!!! didnt know how important commas were lolol
literally never programmed in my life i will probs ask dumb things in here :P
but ty for the help hehehe
np
yaaaaaay :D
neat art
Hihi :3
eh ill come back to this l8r
i think it is fake here because its on a tooltip for a seal, which is incredibly annoying because i really need to get access to the actual card data
its probably a very bad idea but i wonder if i could just check the hovered card's stats and use that
Has anyone gotten Reverie to work or is it too outdated?
it's being maintained on a new git!
i need this to : Every card played has a 1 in 10 chance to trigger this joker. When triggered, every card played next hand gives +20 Chips and +2 Mult.
can anyone help me???
Dumb question but how can I find it then?
you wanna check the pinned comments #1226234529413468190
im lost af
ty
this code doesn't make a lot of sense to me. You're checking for debuffs and subtracting hands, but that's not the effect you're describing
no wait, I'm reading it wrong, the hands are of course set on the card, not the actual hands in the game
why are you setting hands? It now triggers multiple times? Also, judging by the localization keys, I assume this is mostly just a kitbash of paperback jokers, right?
yep
you're setting and checking some variables that you're just not using as well, huh
It'l trigger twice after being activated as well, currently
changed it for testing purposes
your contexts also don't fit the contexts you'd want this to trigger in. if you want every card to give chips and mult, you need to be in context.individual, not context.main_scoring, which is used for modifiers on cards
going insane trying to make this work
i'm not even sure the code enters the function at this point
as this is a joker, you want the first main_scoring to also be joker_main
ok trying that
it does trigger now
the items you're selecting are tables, while you wanna be passing strings to set_edition
I've not seen set_enhancement before, is that an actual function of the game I've forgotten about? or added to SMODS very recently?
anyone know what was changed in new smods versions which stop this code working? it works properly in alpha build but does nothing in beta one. ive tried looking for reasons why and am stumped.
You'll wanna do set_ability, and again, make sure to pass proper syntax, instead of mult = true, which I don't think would set anything
is this faier
someone suggested me to use SMODS.poll_seal and SMODS.poll_enhancement but they don't seem to work either
That might be me, because that's the proper way to do it and make sure your code is future proof. That way if another mod adds content, or you decide to add enhancements, editions or seals, you don't have to set them by hand. But even if you'd use those functions, I'm still sure you're not using the set functions properly
can you help me do that?
@frosty dock if you know maybe. 
maybe g.hand ?
I haven't done anything with seals yet, but I have a card that also sets the edition and enhancement for playing cards, which you can check for syntax https://github.com/icyethics/Kino/blob/main/items/Jokers/doctor_who.lua
thanks a ton!
the section starting at line 52. Ignore everything else, because a lot of it uses custom mechanics for my mod, so that'll just be confusing, haha
hi @wintry solar does post_injection hook not fire when the object is first rendered? I thought that would be a convenient place to do some setup for a special booster pack but I can't get that handle to get called, in the logs
omg hello balatro goes kino person
hey hey aiko
yall, how do i retrigger a card? (real stupid question, ik)
how do I tell the function which card to apply modifiers to
is context.other_card: fine?
yes
ok
https://github.com/Steamodded/examples/blob/master/Mods/ExampleJokersMod/ModdedVanilla.lua
look at suckin my buskin
you'll also not need to check for it in an if statement, because I think it's always there if you're checking context.individual. But no harm in doing so either, I guess
im actually starting to get a little worried that im gonna have to scrap the black hole seal after already programming the hard part because of something as stupid as not being able to show the right values in the tooltip lol
what's giving you grief?
ok, but how do i retrigger the first and last card played?
did this and it still does nothing
i have a seal thats supposed to grow stronger as you play it, but because of the way loc_vars works for seal tooltips, it seems like i have no way of actually showing the increased values, as the card argument is a fake card made using the default config, not the updated real values
there's a retrigger context. Just check the position in the scoring_hand context
Hmmm?
check the position?
in the array. context.scoring_hand[1] is the first hand, for example
Hi Eremel! I have a booster pack that correctly always spawns cards of a certain special edition. Well, I thought it woudl be cool for the pack itself to have this edition effect, when it shows up in the store.
I tried to use post_injection to make the booster pack apply an edition to itself, so it would render correctly in the store, but I could not figure out if this was the right usage
but for last hand, do i for loop the whole hand?
i'm checking the generate_ui function for a seal, and it should only make a fake card if no card exists, I think. you could add a hook for seal.generate_ui that sets the card if it's in play 🤔
I'd have to see exactly where the generate_ui code gets called to see why it'd be making a fake card in your case
If you print other information of the card in the loc_vars, that are unrelated to the seal, does it match in any way?
if i just print card it's literally just { seal = {...} } with no other variables im pretty sure
I know this is messy and very wrong, but im trying to learn, (its a bunch of jokers smashed together rn)
This joker is SUPPOSED to gain 15 chips every hand but have a 1/6 chance of restting to zero every hand.
the docs say it generates fake cards for tooltips, and seals have their effect descriptions in tooltips so
for the last hand? You wanted it to be the last card, no?
there's specifically a syntax to get the last item in a table, but I'm blanking on the correct one, but you'd quickly be able to google that, haha
context.scoring_hand[#context.scoring_hand]
i'm dumb, that's how you should do it, haha
you don't need to use events for what you're trying to do. Additionally,y ou're stacking them, which definitely overcomplicates things. Would you mind indenting your code, btw, it makes it a bit easier to read
Ah okay. I guess you could hook the generate_ui for seals and work around that. Is there a reason you want the black hole to be a seal and not an enhancement, btw? Scoring related buffs to me feel more enhancement than seals, after all, and that would also solve things, haha
i guess hypothetically i could make it an enhancement, but idk, the revive is a seal and they're kinda meant to be a pair, and also the texture works nicely as a seal
but if it saves the grief i can prolly make it an enhancement
where are the joker abilities located in the files of balatro?
the text or the code that handles them?
mostly in card.lua but in truth literally all over
card.lua contains most joker ability effects by name
It is indented but discord isn't doing it for some reason, and i get the events part, but im still confused on how to actually do what i want
weird ones like Splash get handled elsewhere
i got +6mult working in game and i know how to implement the x6 mult the same but having it trigger with probabilities is where im lost
ah, that's good to know, haha. A screenshot might be helpful too!
also dont know the text color for probabilities or a lot of things so knowing where the joker descriptions are stored would be nice too
{C:green}
cheers
Does anyone know why this doesnt work?
local t = {}
t.insert("Gold")
local card
for i, v in t do
if v[i] == "Gold" then
card = SMODS.create_card(set = "mycustomset", area = area3, key = v)
area3:emplace(card)
i = i + 1
elseif v[i] == "Steel" then
card = SMODS.create_card(set = "mycustomset", area = area3, key = v)
area3:emplace(card)
end
end
aaaaa ty!!
This is a reimplementation of the banana
You can either use a drawstep to draw the shader on your pack or use set ability to give it the edition afaik
Thanks for the reply!! Is Set_ability exposed on the Booster itself?
you have multiple calculate functions, that won't work!
How should I go about putting them all together properly them, into one
how would i implement this
that's what contexts are for! when calculate is called, which happens a lot, you get context, which is why you use if statements to check for the right context. In your case you want to just check for context.joker_main, and in there check your probabilties, and then after that the rest of your logic
Like this?
You're checking probability without doing anything with it currently, for example, which happens at the end of the round. I think that's because you've based it on gros michel, which makes sense, but the reason that it checks probability in context.end_of_round is because that's when it can disappear. You want probability to be checked every time your joker grows
<@&1133519078540185692>
Yes. In this case, you'd increment the current chips in the if statement. You want an else statement to set it to 0, if it fails, and after the if statement, (But not inside of it!), you want to return the chips
wow that was weird
ooooh free money @dapper monolith check this out
?
yup. Now all you need is a return!
wow Lua is the least null safe language I have ever used
I am a certified lua hater so this is gonna take a bit to get used to
so many checks just to make sure 🥲
ok converting black hole to an enhancement is giving me more grief than i thought, where do cards store their enhancement data?
if card and card.ability and card.ability.extra and ad infinitum ❤️
Yeah, every center object should have it
Is this like, play a 6 with 6th sense and DNA?
enhancements are abilities! What's giving you grief?
-# bump
I can run inspect() and see that the return always has a property. And yet when I try to log it out like so, it's nil
sendInfoMessage("created joker card of " .. jokerInfo.label, self.key)```
mods censored the free money opportunity this world is truly unfair
Is there any other way to achieve this effect?
mainly just that everything so far has been written with seals and now i gotta adapt all that to work with enhancements
your code needs some context because I have no clue what you're trying to do, but also you're just setting local card, without defining what card is
me when if G.GAME and G.GAME.blind and G.GAME.bling.config and G.GAME.blind.config.blind and G.GAME.blind.config.blind.key then
enhancements are pretty doable! Or maybe I've just made too many at this point, but it'll give you a whole lot less grief!
at some point i decided to stop nil checking until it crashes
Better nest the conditionals just to be safe 🙃
is this all, or do I need more in the return
you wanna use chips, not chips_mod, because chips_mod will skip the message, iirc, but I think this'll work! I'd recommend just trying it and if it crashes, it'll tell you where it went wrong, haha
yea
so for example i'd just adapt card.ability.seal.chips to card.ability.chips?
give me a sec to check just to make sure 😛
That's how I'm doing it, because that way it stacks with bonus chips from hiker etc.
(The Sci-Fi card enhancement might give you some hints as to formatting :P)
yeah, it'd just be card.ability.bonus
does an ConsumableType need an atlas?
should've spotted it earlier, but that's definitely the mesaage= we are checking line
ok now if this works i can finally get back to the hell of summing up every possible way a card can have chips/mult/xmult/money lol
smods has you covered, haha
so how do i make a card give more mult and chips when scored?
whats wrong with it, I see what line it is but cant see why its not working
no, it's not a card with a sprite
without enhancements
there's a comma at the end. It'll also do nothing, because you're setting an undefined variable that doesn't get called
the return should be inside context.joker_main too or it will do the effect in every single context
no, not like hiker, but when its is scored and the joker is active, give more mult and chips
hm?
the perma_bonuses page has basically every bonus a playing card can have, unless a mod adds a new one
no clue what you mean, then
do you just mean when it's scored? Like suit mult jokers??
@wintry solar , that worked great, thank you
kinda
im not seeing stuff like bonus here though
@turbid maple could I DM you about balatro help if that’s alright? You were a big help earlier
If i create a consumable type, does it automatically show in the collections
heya im trying to make it that when the boss blind is defeated, the mult resets to 1 :)
oh maybe I'm misunderstanding then. I thought you meant the perma bonuses cards can have, that are listed on that page
Nice
I only offer help in this channel when I'm actively procrastinating at my minimum wage job (right now) but feel free to dm me sure
boss makes a dollar when i make a dime thats thats why i complain about lua on company time
i feel you so much on this, haha
maybe? i want to access every single guaranteed way a card can give chips/mult/xmult/money when scored, so for example with chips it'd be default amount (10 for faces, 5 for fives, etc), bonus from bonus cards, the amount from foil cards, hiker bonus,
also im a sad soul that works on sundays so feel free to ask
{C:green}1 in #3#{} is incorrect
What should it be
sad soul can you please help me :))
you want the number between the #s to correspond to the relevant item returned in the loc_vars, but index. So #3# will be the third item in that list. In your case, you want the fourth
better question: how do i make a joker give mult like suit jokers
I'm not entirely sure how editions are checked in this case, but everything else is in the perma bonuses!
context.individual
do you mean like Jimbo?
ah
yeah, but how DO i add mult in the return{}????
you add mult in the return
actually that's sorted lol it's literally just card.edition.chips
like that
Not to be annnoying, but that's literally how it works, haha
heres what i coded, it could be of some help
?????
how do i check what name string SMODS.has_enhancement is getting from the card you feed into it? i think it's returning false and i dont know why
my assumption is i typed the name of the enhancement wrong so i wanna know what its checking for
What do you want to gather this for?
it works
@hushed field Is there something wrong with the probabilities here, The joker is currently always not activating its buff
i tried an earlier version, and it didn't work
black hole enhancement, if played and scored it will destroy all other scored cards after scoring and gain their values
You can use post triggers to easily grab that
Especially if you just want the main scoring of the card
sorry, how would i do that? i have no clue what a post trigger is :p
@red flower
I don't see anything wrong. What are the odds and how does the rest of the function look?
1/6
is it not triggering or are you just unlucky? haha
I got no trigger 10 times in a row.
I've spent time bugfixing a 1/3 odds that didn't trigger for like 14 cards in a row
that's low
wait a minute
I might be dumb
it needs to be 1/6 chance for it to reset, not for it to gain
im stupid
there
lemme try this now
it works now
lets go
Awesome. I think Im understanding how all this works alot more
Thanks guys
originally i was just making this mod for myself but after all this work im putting into actually making it functional theres no way in hell im not sharing this lmao
Im trying to make sure I understand what im writing
you can thank me by getting 50 friends to play Balatro Goes Kino and have them all give me playtest feedback 😛
is this how pseudorandom is implemented? i tried with 3 oops all 6s and it didnt trigger
if im understanding it correctly the pseudorandom value is arbitrary
Realizing that me not knowing shaders is a boon, because otherwise I'd be spending too much fucking time getting each spell to have its own visual effect
yes! the value there is a seed to make sure that seeded runs always have the same odds happening
rightright
what's juice_up()?
epic
makes it do the jiggle it does when it's scored, i think?
not 100% sure but i think thats it
it makes the card go bwop
hhhmmmm
Makes it shake when it's called. You need to call it on an object
how come the 3 and 4 vars brick when changed by oops
called it on other_card, is it wrong?
remove card = self
it's trying to juice up what you pass there, which fails because self isn't actually a card
man i wish there was a faster way of reloading mods than having to close balatro and reopen it
it happens automatically
uhhh
hear me out, is this even possible????
On first turn with no discards, retrigger first and last card played 2 additional times.
yeah why wouldn't it
i think it's kinda weak tho
"burglar"
john smods when you get a chance could you gander @frosty dock
yeah but chad does it every hand
"high card"
sock also does it every hand
that would retrigger 4 TIMES, not accounting if you have other retrigger jokers
got it
it seemed like it wasn't doing the animation but it's actually connected with my other issue
yeah but only on one hand
i don't think you're planning to win with one hand with burglar anyway
that still is 4 retriggers for 1 card
right now the effect works, applying all 3 addons to each scored number card, however the replacement effect happens immediately when the hand is played, instead of after each card is scored, how do I fix it?
I tried using other contexts but then the effect simply doesn't trigger
"photochad and buskin comeback"
man i cant wait to be done with black hole cards so i can add asbestos cards already
bleurgh my brain is getting zapped with this
i get what you mean by high card but wouldn't it be easier to just retrigger 4 times if hand is high card
what do you mean replacement effect
the function that replaces each card's enhancement, edition and seal
now i need to code it to show you its not
im not sure i understand, but if you want a function to run after scoring you would want to use context.after not context.individual
sorry
For that, you wanna set it in event
i guess i was wrong
add a func = function() field to the return and move all the previous code to that function
basically all the calculates run before the animations are played so you need to put it in the return for the correct timing
or this
(you would get cooked easily by the height)
oh ok I'll try
in the rounded brackets you mean?
also don't forget to return true
no, like
return {
func = function()
-- your code
end
}
lets gooooo black hole is destroying cards again
i'll try
should i change the message that pops up when it destroys the other cards, or should i leave it as the placeholder "Yum!" lmao
hello n
helloaiko
do you know how fire is rendered
carefully
i haven't gotten to work yet on the challenge background
no idea but let me check
like this? it crashes my game
or does it have to be a separate return function?
how would i make two context.joker_main events trigger after each other? the first triggers fine but the second does nothing and i dont think theres anything wrong with how the event happens
you're missing a comma after end
put the second return table in a field called extra
in the first return
i don't think you need the message anymore?
ok done
but it's still working like before, nothing changed
then you might need an event
second return table? what do i need two for
i dont mean to be rude im just confused
oh boy
full script
I'll be 100% honest, I have zero idea how they work
think about it
if the first one runs successfully
it would just not run anything else after return
it doesnt need to check?
aaaa right that makes sense
should i do a second calculate function then?
ok, looked at your code and there's a better way to do it
if context.joker_main then
return {
mult = card.ability.extra.mult,
xmult = (pseudorandom("brimstone1") < G.GAME.probabilities.normal / card.ability.extra.odds) and card.ability.extra.Xmult or nil
}
end
i think i should just make a tutorial for custom jokers for new calc as a video
im using a video from november of last year as my main reference, is that outdated?
yeah
yes
yeah i thought it was weird how different that video was from the example mod someone else posted
it you do that itd be much appreciated!!!
stupid question but how do you set the enhancement of a card
STEAMODDED 1.0.0
A tutorial on how to make a modded Joker.
https://github.com/art-muncher/Example-Mod -- EXAMPLE MOD
https://github.com/Steamopollys/Steamodded -- STEAMODDED
https://github.com/WilsontheWolf/DebugPlus -- DEBUGPLUS
-----------------------------------------------------...
this is the one i was following
something like this playing_card:set_ability(G.P_CENTERS.m_gold, nil, true)
this worked for me
the first string randomly gets one of the available enhancements, but you can set it to whichever you want
1 sec
this is what im using now yea
uh tbh that looks terrible. If it worked before, then better calc definitely broke it
I assume you're trying to score cards held in hand as if they were played?
yea
i'm really struggling to understand,
like why does my message only trigger upon scoring but the card modifiers get applied immediately? they're in the same function
I can't think of a clean way to do that without patching the smods calculation pipeline to specifically include such scoring.
i mean if i need it to be a specific modded enhancement
because what you return gets handled at the correct time but everything else in calculate is handled before scoring iirc
shrug, sorry
but the function is inside of return
Once the PR on blind calculation I've been working on is merged, you could move the cards to G.play on context.press_play and later return them to hand, though I guess that's a slightly different effect given it doesn't also score as if held in hand
does anyone know how it could be possible for my mod's lovely hooks to be loading but my main mod file doesn't? someone is running into an error and that's the only way i can interpret the error happening
no idea
trying to implement this and its consistently crashing, saying theres an unexpected symbol near the final } on line 47
ok figured it out, G.P_CENTERS["m_boplatro_blackhole"]
did you define any conflicts in you smods metadata?
nope
you're missing an end
i do define some dependencies though
aah ty i got it running
is that person missing any
i think smods doesn't disable the lovely patches when there are missing dependencies
i see, that's likely it then
working good, ty! :D just gotta figure out why the text isnt green now
green lowercase
by the time it's able to notice, they're already loaded
makes sense
yeah i assumed and already changed it lol, ty though!!
youve been veryvery helpful i appreciate it a lot :3
it'd have to bootloop, and even that can fail due to syntax errors
my fully implemented child,,,, its so very simple but im still quite proud hehehe
also i assume that you dont need to call out the +mult or xmult message? the gros michel example said you had to but n's code never specifies the message and the messages work fine
retrigger
i changed context.individual to context.before but now the effect simply won't trigger
i cannot read the badge 😭
told ya you'd figure it out! 😄
now it gets handled automatically
I'm currently going through every joker in my game to mark every joker that vibes as wet ❤️
i just need to get black hole to absorb xmult and money and it should work
yeah it does that now
sogy
if you add the message it will show up twice
yeah i set it to #ffffff ill make a proper one eventually
This took forever to code 🫠
the badge reads "testjoker" lol
i have a 10 of spades that gives 239 chips and 28 mult, and it grows more powerful every time you play it with other cards
this is peak
i think i'm gonna leave the "Yum!" placeholder popup it's funny
now to texture the card
now you gotta have mayhem the mime
mayhem the mime
.w.
initial shop items cost 0 dollar
spicy i like it
more reliable discount tag
now i gotta go get my hands on a card texture to modify
if we assume that Splash is the wettest vanilla joker, and jimbo's entirely a dry joker, would you classify seltzer as wet? Would you qualify diet cola as wet?
i would classify them both as wet
I swear this is relevant to modding balatro, but would the movie Cocktail, who's poster is Tom Cruise, vibe as wet? 🤔
up
individual and before aren't interchangeable
ask jimbo if this joker is creepy or wet
id class it as fairly wet
what should I do then?
what kind of mechanic needs to know if a joker is wet lmao
what
As a little easter egg, the Gremlins joker copies itself when played with thematically wet jokers
also hi void
lmao
thats amazing
I'm not sure what you're trying to do with the change, sorry! Is it just about timing?
sounds pretty powerful if it's negative too
like, how do I know if two contexts are interchangable and what changes if they are or aren't
hi mr. aikoyori
yes
if the contexts have the same variables they pass along, you can change them without issue. For example, context.before and context.after largely share the same values. context.individual, however, often uses context.other_card, which is not present in a lot of other contexts. You learn by checking the wiki and making more jokers, honestly
Are you trying to fix the animation timing for the change effect?
ok I think I get it
reimplement Anki in Balatro
Because that's entirely unrelated to context. A good rule of thumb is that calculations are done entirely separately from animations, so anything you want to happen visually can't be timed by changing the context. I'm sure that's not always true, but it's what I try to keep in mind
Anki Deck.
the juiceup animation works correctly, but the other function is called immediately as the hand is played, for all cards, instead of when each card is scored
yooo
might actually go hard with my letter mechanics
tho I'm not gonna draw all kanji
the other function being: changing the cards' modifiers
I'll just use a font
I think that if you put the code in an event with the immediate timing, that should work? I'm not entirely sure, I always have to mess around a bit with events to get the proper timing. I'd suggest how to do it with the method N suggested but I'm entirely unfamiliar with the details of returning funcs
I already implemented that function but sadly everything's the same
I guess I have no choice but learn events
pray for me
blind that gives you kanji words and makes you spell their reading in hiragana
events have a lot of complicated details but the chances of you needing to mess with those are incredibly small.
wait didn't you just say that I need to mess with events?
yes
I've only had to really understand events once, and that was when I added the alien abduction mechanic to Kino. But for most things, it's mostly a chunk of lines that look intimidating. My main reasoning tends to be 'if it's a visual element, I'll put it in the events system'
Yeah, sorry! I just meant that it looks a lot scarier than it is, haha. The messing around with timings is just changing a single string around and seeing what feels better!
ah okok
I really feel like shit rn 'cause I've read the first lines of the events article on git 3 times and I still don't understand anything
like, ok you can declare events, but where do you do that??
this shit does take a while to wrap my head around so
In the code! Let me see if I can find a joker with a very simple effect that uses them
Because that's why it feels complicated. All you really need to know for the most part is 'I copy the G.events thingy and the return statement at the end'. You only need to understand them more in depth once you start getting into very complicated ideas
'I copy the G.events thingy and the return statement at the end'
yeah no my brain is def too small for this
is it a Lua thing of a SMODS thing?
if it's lua i can look up a guide on yt maybe
haha, it's not, it's just feeling complicated
I suspect it'll be a LOVE2d or balatro thing, not a lua thing
sucks
what are you trying to do
In the joker I'm currently working on, I'm checking if one of the other jokers is splash, and if it is, it will animate, flip over, change into a copy of this joker, and then flip back.
the uncommented code here is what the event manager code is
Everything commented inside of it is what gets added to the event queue. The details of that are complicated and I can't explain it because I don't understand it. all you really need to know is that for the most part, visual stuff works if you wrap the G.E_MANAGER stuff around it, as it means it won't happen immediately in the calculation, but instead is done a little bit later
oh, the if context.joker_main there should also be commented
I think the concept behind an Event queue isn't too hard. I just don't know thunk's implementation (and it has some questionable choices IMO)
but that's thunk code
well maybe not all questionable choices
some I can understand, others are tied to their hard-coded-ish implementation of Jokers, etc.
basically what this currently does, is:
- You play a hand;
- Immediately upon playing the hand, any numbered scoring cards are applied a random enhancement/edition/seal;
- The cards score (WITHOUT applying their new modifiers);
- Each time a card scores, the "chaos" text pops up and the joker juices up;
what I want it to do is:
- You play a hand;
- The cards score normally;
- If the card that's scoring is a numbered card, a random enhancement/edition/seal is applied, the "chaos" text pops up and the joker juices up;
bepic
Check out Spinagogue Champion from Cosmos and Midas Mask from vanilla, maybe
Those do grant benefits prior to scoring
what's the difference between an event and a function in this case?
midas mask applies the enhancement before scoring
I said that
An Event is a container for something that will happen later, which involves some kind of function
functions are any code in a function. An event is a function that is added to a queue with a specific timing for when it will do what it does
but depending on your personal limitations, you can use a later context and only use Events how Midas Mask does
where is that condition declared in your case
Midas Mask and Spinagogue Champion have some Events only to change the visual aspect of cards
If you apply the Enhancements in a later context, they won't apply during scoring
because they'll be late
but like Midas Mask and Spinagogue Champion, you'll need to hide them temporarily
they already do not apply during scoring
Due to how vanilla code is structured
ooohh
ok maybe I bit off a bit more than I could chew
I just realized you're Homosuck Caliborn
I wasn't expecting it to be this difficult haha
It's not necessarily hard, except only Enhancements can do this in vanilla because thunk only needed it for Midas Mask
The timing I don't actually declare. I can see why it's confusing, because you're trying to actually understand how it works, haha, but with events you basically are going to have to understand it very fundamentally to actually get why and when they trigger, instead of just learning through experience. In this case, there are already events in the queue, and my code just says 'the moment you have the time'. The way balatro works is just that that will always be after calculation if your event is set during calculation
yeah I'd appreciate it if you stopped stomping my head
no pressure tho
lol
what would a black hole card even look like?
i'd mayyybe try a shader to do some cool warping stuff but that's an edition thing and i am NOT changing what type of modifier it is a second time
Spinagogue Champion from Cosmos had us implement that for Editions
So you'd need to copy that and implement it for Seals
Unless SMODS provides some functinality for it now
i am only now realizing your pfp isn't knuckles from sonic the hedgehog 3 and knuckles, Victin, damn
There were some Draw Step changes, so maybe
ok I kinda get it
I'll try something similar
how many damn homestuck pfps are there here i've seen like 3 today
Bunco had a Black Hole shader
says dangling ropes
bunco?
damn, this is peak
just trying is honestly the best thing to do. As I said, I tried to really understand events and I just got a headache, so I mostly just shorthand 'if it's something I wanna do visually, I put it in an event'. If you don't define the timing, it'll just default to immediate, so I just copy it over whenever I need it, haha
I'm going to assume this autocorrected danganronpa
no I just find it funny like a parent calling a video game console a Nintendo to annoy their kids
this server needs more cinephiles and less homestuck dorks imho, it'd be good for my download numbers
We need more Yumedorks
It's more like, if something needs to happen "later" it needs to be in an Event
im personally a fan of "dangling grandpa"
All scoring happens instantly, then Events are handled in order
unfortunately that was too nsfw so we had to cover grandpa with towel
what about danger roomba
your favourite film is pans labyrinth thats already a guaranteed download or 10 from me
I like gandan paron
i have never watched a movie
that's true, but it's rarely that that isn't something you want to happen visually, no? I definitely use events for non-visual stuff but adding that in there does get complicated when to explain when the main use case is definitely going to be 'later'
How would one add a custom sound effect to their mod :3
where's the deep phylosophical kino psychological horror RPG Maker indie game mod
holy Pan's Labyringht mentioned??
not even the ygo movie in which yugio and jayden fight kaiba in space?
very good movie
idk check L Corp
do i need to do anything specific to make my jokers appear in the shop or are they already able to appear in the shop without anything fancy
will happen automatically!
specially not yugioh ones i hate cartoons and anime
yaaaay :D
explains why your pfp's eyes are closed, that way it won't have to see the ygo card art, ofc
like this?
whats the problem?
My mod.
Yesn't. Some things are related to visual aspects, like destroying cards. Earning money or creating consumeables mid-round usually requires an Event to handle the dollar buffer. Etc.
you don't wanna do it in the return in this case, but otherwise, I think that works! haha
here is the joker code
nvm crashed
Ah yeah, that's true. I'd classified seeing the numbers being eased and a consumeable actually appearing also as visual, so it already was kinda tied to it, but that's an overly broad definition of visual
Player playng your mod with the Jokers yume nikki guertena baseball batter mercy idk what omori does
this seems cool ill probably take a look at it soon, but i dont wanna just steal someone elses shader lol
i mean i know thats all shaders.
but i dont wanan steal a shader from another balatro mod for my balatro mod
you're missing a comma before message
please check the line it tells you the error is at. You'd see that you're trying to do 'context.context'
am i setting the context wrong????
also the event is entirely wrong lol
It was 3pm when I told myself, "yeah I can implement that in half an hour"
6 hours later
right now for black hole cards i have a black background with a blurry orange border but it looks kinda lame tbh lmao
you're missing the good movies like Transformers 4, Fast and Furious 12, White Chicks, and Adam Sandler Slop 37
ok? can you help me understand?
you need to put the event inside the func not the func inside the event
Lmao nah.
i love copy pasting!!
I have concepts for every FF and transformers movie I just don't wanna overwhelm my joker pool with 1/3 jokers being a car franchise 😛
To be fair, if a vanilla function handles the Event for you, I'm not counting it. Otherwise, all of scoring happens in Events ;P
i was taking this as reference
I'm just using it as a reference. Maybe you can ask Firch for tips
but I think it's kind of a classic shader
because it's a classical kind of transform
it's confusing because events also need to have their own func inside them lol
the hard part would be "screenshotting" the screen
@tall wharf did you have a blind that gives you infinite hands and discards can I steal that code
so I need to create a parent function for the event... ?
and keep the rest as is?
just put the event ouside the return and see what happens
e.g. Firch allowed me to use some of their code in my mod (which wasn't all too different from vanilla code, in some ways, but still).
infinite discards
just go look on my GitHub
it's somewhere
my mod has a shitton of code
I read FF as the Final Fantasy movie
Is this a real context window?
context.retrigger_joker_check
I am trying to retrigger other jokers but my code is never running
The final fantasy movie!
i did consider that theatrically released one. Still might if I have a fun idea for a classic FF spell to add to the spellcasting pool, haha
did you configure the additional option
ohhh how do you configure that?
I have one FF spell Joker except it's a reference to a FF reference
Lvl. ? Death
is it actually possible to give shaders to card enhancements?
lol
I'd also like to know but you can maybe define draw or use SMODS.DrawStep (the later is mostly for global layers)
I did it to my editions, not sure about enhancements. I guess you could put a do nothing edition, then make your enhancement also apply the edition
something like this
-- SMODS optional features
SMODS.current_mod.optional_features = {
cardareas = {
unscored = true
},
quantum_enhancements = true,
retrigger_joker = true
}
naturally you don't need all of these
yes i went through this xd, still struggling to understand it
Quntum jokers!?
where is the link to the balatro source
check your lovely dump
ain't gonna be the source code, but it's what smods turns it into, so if you're making an smods mod, easier to check that
my lovely lovely dump
i suck at art im gonna deal with visual headaches later, for now i just wanna get as many mechanics out the way as possible
that's why you pick a theme for your mod that let's you get away with simple art
that's how N and I both have mods with so many fucking jokers
the theme for my mod is "random bullshit and inside jokes"
There was once the emoji mod
someone needs to make the pantone colors, it' sjust sitting there
This worked perfectly! Thank you
i was originally making it for my friend group but im prolly gonna make a version that reskins the inside jokes so i can share it here
But I don't have that many good and implementable Joker ideas yet, since I don't mind having placeholder art
Wehre is the code for all the jokers in the source
under what conditions is the debuff cross shown on the shader? these don't properly show it until clicked
mostly in card.lua
the source jokers are kind of oddly done in two or three areas.
I would say its easy to learn by looking at ExtraCredit or cryptid, who use SteamModded and make it very easy to understand
this is n't retriggering
I'm trying to figure out how to make a joker grant permanent abilities to another joker without having to manually add a check for that to every calculate, any ideas?
Do you need the toggle?
Can't you just use the check directly?
give the Joker a child
ill set it to false afterwards, for only the first turn with no discards to trigger
like Tokyo Grandfathers idk I never watched it
@red flower like this or did you mean something else?
no I mean like an extension to calculate
that was kind of my idea
and use it as a medium
give the Joker a child
as long as it doesnt use an update function that runs every frame you'll be fine
ok how about giving each Joker a deity
and the deity handles all of its worshippers
they already have one it's Ra
wait this is actually a fire mod idea
jokers have "allegiances" to like a deity
and if you collect enough per deity it unlocks passive effects
makes sense
I have some Poker Hand effects that depend on invisible Jokers in the sky
is card wrong in the return ?
you can see the invisible Jokers here
you could patch in an extra scoring check that iterates through all jokers and checks them for upgrades. Same way enhancements and card upgrades work
on top of the screen
as in?
calculate 2
a retrain of calculate
i was thinking about that too
new funky mode
new
oh ok
calculate 2 the calculating
i think thats the problem right?????
context.repetition functions similar to context.individual, that's probably why you're getting things you're not expecting
like, calculate = G.E_MANAGER:add_event after the main body?
nekroz of calculate
I don't think it'd be too hard to add, considering it'd just be a function that checks everything that you then patch in
there's a built-in function for that
...ok...?
smods was better when it was mult_mod now all the new calculates ruin the fun
that's how I did Zodiacs
Hmm... I had an idea, but I'm not sure how easy it would be
please check some other code to see how it's done. You'll see where the errors are coming from. Your error log also will show a list of functions. If the crash log points you towards a vanilla function, it's not that function that's crashing, it's one of your additions that passes information to it that then crashes the game, for example.
ahh wait did i reply to the wrong person?
its not crashing actually, its just actually not retriggering
no wait, nvm, i fused two things, i'm confusing myself, haha
I'm really confused right now
I wanna add a Dream Enhancement that triggers a random effect each turn, but I'm not sure how easy it would be
depends on how comfortable you are with programming things. My spellcasting system is almost that, just not always random!
wait this looks kinda clean actually. i mean it probably needs some modifications but its nifty
I love programming :3
I thought you put your custom sounds in assets > sounds > (your_file.ogg)
ah sorry, I think I'm messing up conversations! That was for sure not related to your problem, but to 'N's joker upgrade thingy!
oh okok
sorry
I think the spells.lua I have is pretty readable, haha, so you can check that out
Oki oki!!
i would prefer it crashing, because i could see whare
Once I do that, I can work on revamping all the Yume Nikki Jokers I've made. I feel like they're all a bit... bland
card in the return statement is not the card that retriggers. context.repetition is checking to see if a joker returns repetitions, and then retriggers the card that is in context.other_card that many times
SMODS.Sound({ key = 'shutter', path = 'shutter.ogg', })
this is the code, btwwww
oh my god it looks amazing on diamonds
haha nw, i'm getting messy
so do I really need to create a second calculate function or was that a joke?
you definitely don't!
that means i set context.other_card or smth???
No, context.other_card is always set in context.repetition. You don't set it yourself
That sounds so fun tbh
:0
im lost....
great minds think alike
the event just goes in the proper context. It doesn't need to be in a separate calculate function, or in its return function!
how would i code a joker to trigger every certain amount of hands,
is there an example I can look out, the games source is weird to look at
Yeah!
check some other code to see how that context works, is my recommendation.
thought he implementation isnt quite the same
so wait, I don't understand what I did wrong
I also have this. Art features gore in reference to Goya's Saturn Devouring His Son.
goya my beloved
goated joker
What if I added a Kirby Joker that ate the Joker to it's left and to it's right, combining the effects...
That would be too much work me thinks.
does this not work? I haven't read it carefully, but that should work, no?
I GOT IT!!!!
It functionally works but it's missing the generalized Joker stats functionality
whats the difference between chip_mod and just chip
1 sec
yes
line 86 is this one
i assume you didnt mean to write "ocard"
loyalty card
it was most definitely intentional, yes
strange
oh, try setting ocard outside the event
you'll need to use can_calculate
oh ok, like, right before the event?
what kind of parameter is this and where do I put it
function
Basically it helps you detect if you can calculate with the card
you might need tests to see if the card exists
right now it detects if a card is debuffed or if it's waiting to be destroyed
like this??
no
you redefine it inside
don't
I'd also add to the beginning and context.other_card:can_calculate(true)
it's a bit optional at the moment
could be useful in the future
but anyways
inside the function
it's good to test if the card exists
something like ìf ocard and not ocard.removed
what do you mean by this?
are you referring to can_calculate or ocard?
@hushed field What would I write for a joker to trigger every X amount of hands
oh my bad
Oh I just realized you used can_calculate wrong
keep a counter that you increment every hand, and check if it's your desired value
stiiiill lost here. Why. Why????
Loyalty Card
oh yeah that makes sense
Idk but maybe you’re applying the shader after the game decided what to render
And clicking recalculates what’s supposed to render
i have drastically fucked up the black hole card WHY does it gain x1 mult for every +1 mult it gains
im. so stupid
You could solve it or you could fake a click
the thing is this is just the normal debuff param
and it still properly does the color
It doesn't look great, but I just left it in like that, haha
so i'm thinking it has to do with position updating???
it's got to do with it being in the deck, instead of a hand or play cardarea
what's the difference between card.ability.x_mult and card.ability.Xmult??
spelling

why is the syntax wrong
Gonna mess with the shader itself to see if that produces anything meaningful
what's array?
nvm fixed it
It works now! there's only one thing bugging me
congrats on getting that working, gowly 😄
when absorbing xmult from a card, should black hole cards multiply or add their own xmult by it?
right now it's add but that acts kinda weirdly
welp
thanks a lot, it's still not perfect and I wouldn't have done it without your help
I appreciate y'all's patience haha
multiply would be incredibly bonkers. That's cryptid level balancing, haha
well, yeah, what's array?
its what ice told me to use i think
i can assure you i didn't
i mean, that's how it would act normally right? if you have two cards with 3x, that would multiply out to 9x, so if you combine both of those cards it could reasonably be argued that you should get 9x
i want to die. i didnt see the space
lol
lol
lol
it would mean that any card that upgrades any a card with X0.5 for example would incredibly overcharge that enhancement, haha. It's gonna depend on what you think is fun 😛
Hmm... How would I go about making a red light, green light Joker?
I have no idea how that would function at all
Well upgrade with x0.5 would mean it'd get added onto a baseline x1.0
ill leave it as add for now
the joker switches lights in real time and if you play a hand when its red jimbo guns you down and you die
ARRGGGHH IT STILL DOESNT TRIGGER
chooses a random hand type per round
x0.5 mult for that hand type while green
x2 mult while red
chance to change on hand played
?
tangent question, how do I declare a legendary joker's 2 sprites?
Oooo actually not a bad idea
doesn't it crash, with this code?
soul_pos!
nope
ah?
pos is the position of the background sprite
ah okok
soul_pos is formatted the same way and acts as the position of the floating sprite
both just need to be on the same atlas
i wish it did actually
got it, thanks a lot
I just don't understand where to put it,
do I just add another variable to the atlas called soul_pos?
is this what the cool kids call a "synergy"
i don't think it was ever localthunk's intention for there to be playing cards that give x19 mult before any jokers have been applied
and yet. black hole revive synergy
can anyone help????
please indent your code better than, because it makes it very annoying to parse. I can't match with if statements tie to which end statements
its tedious tho
i guess i give up
i dk how to debug this argghh
VSC with Lua extension has an auto-formatter
Im stuck on how to translate this to SMODs
how do i use SMODS.add_card with custom jokers? smods function works fine with base game jokers but my custom joker crashes the game
where is it????
the key needs to include your mod prefix
Ctrl-A -> Shift-Alt-F
j_modprefix_jokerkey
thanks very much
here you go then
thanks so muchhh
Im struggling to understand how the Loyalty card works. I like see it, butn ot sure how to translate that to the SMODs format
that's not indented in a readable way, man, sorry
noooooo
How do I use it???
if it's on every hand, you wanna set a variable that's something like 'counter = 0' and every time you go to context.joker_main, you do counter = counter + 1. Then you check if counter == goalnumber and then reset the counter and return it
I did that, but it keeps spitting out errors
I'm having trouble making it so the modifiers of the cards change when the "chaos" text pops up, instead of their initial trigger
you can add a card_eval_status_text() in the event! That displays messages without needing a return, for example. The exact syntax you'll definitely wanna check by checking the source code, though!
i absolutely hzte this
it's a balatro thing and not a mod thing, correct?
I can only help depending on what the error is 😛 What's the error?
I'd recommend SMODS.calculate_effect instead
Nvm, I had a syntax error, all my mistake are so dumb
I hate lua
So MUCH
this might be the better way to do it, I just use an outdated method still, apparently, haha
I only don't like lua because some fun things arent available like += -= etc
I'm seeing it being applied to stuff like chicot but I don't fully understand what it does?
sorry, wrong reply
i bet it doesn't run because your toggle is only set when you discard while you can't discard
i just dislike the syntax
You don't need the toggle for what you're trying to do. Just check that in the if statement
i miss += so much
oh, well thats stupid
the then and end is my biggest gripe because it's harder to read than rainbow brackets
wouldn't that make it so that the 'chaos' text appears earlier, instead of the modifiers happening later? maybe I'm missing something
i really recommend playing around a bit with your code so you can understand what you write. Add some print or debug statements, so you can what triggers or not, and such
really dumb question, can you put a soul effect onto a consumeable card?
It's how I'm doing all effects like it, and it works for me. If it creates issues, I haven't noticed them yet, but I think 'N's suggestions of using calculate_effect is definitely going to be the better one!
yes!
Yes
ooh ok awesome!
can I find info on it on git?
I'm not sure actually 😬 I haven't checked it on git, I've just messed around with it by copying it and changing things to see what it does. Sorry I can't be of more help there
damn, what mod is that? That looks sick