#💻・modding-dev
1 messages · Page 481 of 1
that makes it so you're doing (number < number) / number which is boolean / number and that doesn't make sense
post the crash or whatever it's doing
if you change the 5 for a 1 does it work?
weird, looks fine to me
okay idk if this matters
but ill test it
i changed G.GAME.probabilities.normal / 5
to G.GAME.probabilities.normal / card.ability.extra.repetitions
.odds i mean
nope
ugh
im stumped
is there a way to change the card text? (like a changed the card image earlier)
i dont think i do (im on a mac)
oh yeah thats a pretty crucial part for changing strings
download it and set it up (very easy dw)
can you elaborate?
so you know how i changed the image everytime the hand ended, i want to also change the text so the joker is different every turn
oh, you need to return a key in loc_vars
oh nvm i thought you meant changing ingame strings

ah its fine, now i have 7zip
like return { key = choice and ((choice == 1 and "j_modprefix_key_alt1") or (choice == 2 and "j_modprefix_key_alt_2")) or nil }
and then you would have j_modprefix_key_alt1 in your localization file
did you not save
lol
pwease help me
can you repost your query
this?
no, in loc_vars
not in calculate
also choice is a placeholder, you need to replace it for card.ability.extra.chosen
got it
I need my joker to apply mult every hand but add .5 mult at the end of a blind.
This is what I did so far:
It could work but I'm assuming it doesn't since the discription of the card has Xnil and stuff on it.
this?
i would add an or nil at the end
then it keeps yelling at me about closing my } but i dont see it
somewhere inbetween the loc_txt and the return
wait i see the issue lol
🤨
is there a reason we aren't using string concatenation for this
(like "j_pdub_key_alt" .. card.ability.extra.chosen)
is there a different variable for mult added to a joker and for mult given to score?
is it mult_mod?
like the difference between the card.ability.extra.mult and just mult?
no i mean like normal joker gives mult, and ceremonial dagger gains mult. is there a different variable for those?
card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.add ?
makes sense
then you can return mult = card.ability.extra.mult later
breaking again
oh it should be center not self
then what do i put in the loc_txt to pull it
return { vars = { card.ability.extra.mult, card.ability.extra.mult_mod, card.ability.extra.suit } }```
is this correct?
please check this out: #💻・modding-dev message
you need a localization file
just listing the variables from extra = {
should be, then you can call it to your text using #1# for extra.mult and #2# for mult_mod
it needs to be in Joker, not Other
also i think all of them need a name too
is there anything i need at the top of my SMODS file
like where i usually have my description
no
because im still having that error
can i see the code again and where the file is
loc_vars = function(self, info_queue, center)
return {
key = center.ability.extra.chosen and ((center.ability.extra.chosen == 0 and "j_pdub_key_alt0") or
(center.ability.extra.chosen == 1 and "j_pdub_key_alt1") or
(center.ability.extra.chosen == 2 and "j_pdub_key_alt2") or
(center.ability.extra.chosen == 3 and "j_pdub_key_alt3") or
(center.ability.extra.chosen == 4 and "j_pdub_key_alt4") or
(center.ability.extra.chosen == 5 and "j_pdub_key_alt5") or
(center.ability.extra.chosen == 6 and "j_pdub_key_alt6")) or nil,
}
end,
how do i make it look nice lol
im kinda new to modding, anything i can do here to fix?
```lua
```
i meant the localization tho
how does your assets folder look? do you have a mitosis.png?
ope lol
how can you make a joker check for a rankless card? (not just stone cards)
Joker uppercase
also it should be in descriptions like you had it before
there are png for each 1x and 2x
SMODS.has_no_rank(card)
hmm no idea then
is it my main file perhaps?
that looks fine
odd
make sure the pngs don't have a double extension accidentally maybe
wdym by that
alr thx for the help
like when i had it in loc_txt on accident
they gotta be png right
this was correct but you need Joker instead of Other
#💻・modding-dev message
still broken
may i see the localization, just send a screenshot
and how's the localization folder structured
it was in libs lol
whats wrong with my code?
\
if context.individual and not context.blueprint and not context.other_card.debuff and
card.other_card:is_suit(card.ability.extra.suit) then
card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.mult_mod
return {
message = localize('k_upgrade_ex'),
colour = G.C.MULT
}
end
if context.joker_main then
return {
mult = card.ability.extra.mult
}
end
end
}```
oh i see slef
lemme change that
i wonder if that will fix it
context.other_card not card.other_card
lol i knew it
en-us
it would be "SMODS.has_no_rank(card) == true" no?
owh okay
did i copy that wrong?
oh lol i did
you don't need the == true but yes
yep that worked, im used to doing underscores in everthing i do lol
im doing some changes to some code, I THINK I need to replace the (card) with (v.config.center.key)??
no, v is the card
You can make this shorter by doing
key = center.ability.extra.chosen and "j_pdub_key_alt" .. center.ability.extra.chosen
wow i just made a new joker (mostly) by myself
so just SMODS.has_no_rank(v) got it
what is the function to open a mod's config menu
i dont think there's one
wha
you would need to call the function to open the mod UI and then change all the SMODS globals to point specifically to your mod and to have the config tab selected
how do i get pages in the config tab to work then 🤔 my idea was to just force the menu to be reopened
that's what i do for my card collection page but that's easier because there is a specific separate function for thats screen
damn...
you should be able to have the contents you're swapping in an object node and just mess with it that way, though it can be pretty finicky to do the boxes right
-# yes i still exist
i was actually surprised to see you typing lol
hi aure how's everything
ive been good thanks, hbu
quite busy these days still, thanks
-# asides from constant mental torture i have to endure from ui
-# relatable
this does not work 'attempt to compare number with table' , i literlly do the same thing in a different joker
talisman issue
classic
ahh, i did just put my mod on there
ill try without it
or whats the exponental variable
emult but it's talisman-exclusive
i do have talisman
you'll have to add it as a dependency if you do use it
yeah you should use that then
thanks
...surely i dont run initSteamodded() to open my mod's ui, this is the only place i find that uses create_UIBox_mods which seems to be the function that creates the mod's menu
(i considered aure's approach but i dont think i want to mess around with ui anymore 🥀 )
you would run what's inside it
this is what i have to open the collection page
yes
i overlooked that because i forgot functions can be defined in a function 😭
thanks, i think i got this now
i think SMODS.LAST_SELECTED_MOD_TAB is what selects the starting tab as well
mhm i see, tks
hi, is there a way to check how many times player has been saved by mr bones?
I thought my peacock joker finally works, It should gain 1 extra xchips and XMult per played polychrome but it’s not working, What am I doing wrong?
Is this how you're supposed to write it?
if context.individual and context.cardarea == G.play and not context.blueprint then
if context.other_card.edition and context.other_card.edition.key == "e_polychrome" then
card.ability.extra.SA2XChips = card.ability.extra.SA2XChips + card.ability.extra.SA2Mod
card.ability.extra.SA2XMult = card.ability.extra.SA2XMult + card.ability.extra.SA2Mod
card_eval_status_text(card, 'extra', nil, nil, nil, {message = localize("k_upgrade_ex"), colour = G.C.PURPLE})
else
local chance = pseudorandom('peacock_polychrome')
if chance < G.GAME.probabilities.normal / card.ability.extra.odds then
context.other_card:set_edition({polychrome = true}, true)
end
end
end
You'd want to hook SMODS.calculate_individual_effect(effect, scored_card, key, amount, from_edition) and check key == 'saved' and store the value somewhere.
anotha one
yoooo
bretherin bob
Kindred Robert
sibling jerome
anyway
i have no idea what bobby should do
like
i thought something with clubs and chips
cause blue
whats not working
It should gain 1 extra xchips and XMult per played polychrome but it’s not working, What am I doing wrong?
hm
not a particularly interesting card, but I'm gonna make Familiars a whole thing as you can see
gimme a sec, could be because of you setting up the if statements incorrectly (i barely worked with editions though, so i gotta check ingame)
actaully a funny idea
i dont think ill do familiars
maybe
I want to add pretty much everything in Isaac, which means I'm gonna have to keep track of familiars for the sake of Conjoined anyway
i get that
what's not working about it? Does the first if part of the if-else not get entered?
oh, conversation's moved and discord didn't update
btw did you just take screenshots of ingame items
lol
yeah, I already have this implemented
Do you want me to share the entire lua?
just try some print statements to see where you're getting, and what information is stored where. just a print(context.other_card.edition.key) will show you that
does context.individual and context.other_card do anything
i think ill do
something with copying club cards or something
when selecting blind, create 1 random club card
ill look at certificate
hehe
it looks right, i rechecked and context.other_card.edition.key should return the key of the edition
like ice said, try putting print statements to see where it doesnt run, i would recommend inside the if context.other_card.edition block
certificate has some odd behavior, so be careful
I had to borrow some code from it too
maybe dna or marble joker if certificate is too confusing
by "odd" I mean that if you select a Blind, which triggers Certificate, and then exit, the card will not be saved unless you discard or play a hand first. However, if the card is not saved, Certificate's effect is not proc'ed again upon coming back
it's not, just kinda weird as I described
pretty sure it's more of an "oversight" than a bug, but yeah
yeah. If it gives a card you don't want, you can just exit and come back and it won't save anything
broski bobbleton is implemented
you gonna add every Isaac item or just the ones you have ideas for?
im doing them 1 by 1 starting at item id 1
i temporarily skip actives cuz i wanna make a new mechanic for em
i now have sad onion to bobskiboo
I wanted to do that too, but got really stuck with Lunch, Dinner, Dessert, Breakfast, and Rotten Meat all in a row
id just give them all a simple effect like +1 hand/discard/hand size
I decided to skip ahead and implement Binge Eater so that I could at least give them different effects
well look who it is
can you give me another ss of your code with the print functions (sorry i was busy)
can i just remove playing cards in context.discard and its fine?
i think so, yeah
🤔 it should work with all contexts if you got events
i changed the way it checks for polychrome
this is what i got now
likely, yeah
-# either that or i have had incredible luck with that :3
mmm
i wouldn't recommend it
same, but i bet people will do that with joker forge though
there's no reason not to do it in destroy_card
discard context is special because that also has destroy_card
why wouldnt you recommend it
what is the effect called? (if you know)
i swear to fucking god if this is a cryptid override situation again
is it supposed to be played cards or card held in hand?
- you have a possibility of side effects from not doing it properly
- you need to do more things than just returning remove = true which can lead to more errors (for example, calling the remove_playing_card context)
- you won't have any of the fixes or improvements smods might do to the destroy_card context
- even if jokerforge is automatic people look at the code and it might lead them to follow bad practices
can you try running eval G.hand.cards[1].edition in the debugplus' console with the leftmost card in hand being polychrome?
i want to see whats going on there
3 is the most important in this case imo
very good points
currently it already does make its own context and everything, just making special casing for destroying on discards and i was wondering why it wasnt working but then i looked at trading card
context.discard works like context.destroy_card so that's a special case
eventually (in a few weeks to a month) i wanna make it so the code is much cleaner than it is, a lot of unecessary stuff and i dont want to instill bad practices
theres a lot of these i have to code around haha
i want to ping firsttry to make sure they saw my message but i will probably seem annoying to them 😭
ghh
@pastel kernel
a
:3 wtf is going on
wdym
...'tis what I mentioned - key is the actual type of effect you want, being saved.
how is this still false then, i
i'm not sure myself, i'm just an amateur
i might be dumb? can you put a print(context.other_card.edition) before that and score a polychrome card
ohh, sry I dont rly know how those things work
you mean put the existing one before instead of inside?
oh, before the local is_polychrome = ...
i want to see what the hell the code is reading
like this?
print("Peacock: Polychrome check - edition: " .. (context.other_card.edition and "present" or "nil") .. ", is_polychrome: " .. (is_polychrome and "true" or "false"))
local is_polychrome = context.other_card.edition and context.other_card.edition.polychrome```
that works, yeah
score any polychrome card and see what it says, if its still nil and false then you should probably try turning off a few mods 😭
joker i made, retriggers played polychrome cards
😭
also applies them herself
no
sdasin
ima be honest i think i might need N' to work on this one
it looks simple but not at the same time??
😭
is there a list of commands that can be used in debug+?
you primarily just need to know eval (anything in here) which will run the code similarly to minecraft commands
type help in the console
orrr that yeah
what's up
can you check their code and see why its not detecting the scored card as having polychrome
this one
let me test it myself
thanks :3
works for me
likely a mod fucking up polychrome then
-# which seems to affect during scoring specifically?
can you try disabling all of the other mods except yours and try again
Hi everyone I'm playing on android mobile, is there any way to play on a retroid 5 handheld pretty please?
i mean of course it'll work without cryptid- what the fuck
against the rules, sorry
#📜・modding-rules rule 4
still doesnt work???
what version is your smods, im so baffled rn 😭
@red flower I'm so sorry, I didn't realise
how are you making the cards polychrome
I have it hooked (at least I think) but how do I change a value with this
i guess this?
they said it works without cryptid tho
i think it's a joke that they thought it would work but it didnt, the screenshot shows it didnt
i mean to test
fair
return "1.0.0~BETA-0706c-STEAMODDED"
I seeeee, that's certainly one way to interpret that lol
how are you testing the card? debugplus?
Like G.GAME.yourvalhere or something before/after you've called the original function.
yes?
How do I give myself a specific joker? is it through the debug console?
do you set polychrome through debugplus or some other method
install debugplus and press 3 while hovering the joker in the collection
k thx
wdym through debugplus? i use the joker itself to apply polychrome
so it applies polychrome and then you use those same cards to test the other effect?
yes?
I will never forgive you for this N
i would forgive you for anything
lol of course
i knew that's what it was, the card checks if it has polychrome currently and if it doesn't it applies it
so it was working fine
rip
can I check the value of a variable using debug+?
it should work even after applying
yes
yeah, just do eval whatever
whatever being the variable you want to check
if it says nil smth is not right yes?
if it says nil then the value was nil
not necessarily, if it says nil it means the variable is nil, which might be correct depending on what you're checking
can you describe what you want it to do again
I want it to be 0...
and I defined it as 0
what's the context, is the variable inside a joker? what did you eval exactly
probably wants to apply polychrome in the modify hand context so that it applies before individual happens
you can just add this here too
I want to have a variable that counts everytime mr bones has saved you, but I dont rly know what im doing
Hello friends and besties
well how have you implemented that so far
hi dilly
am i friend or bestie
You are bestie N
yay
Hi srock
can you send the entire thing?
for now it looks like this (deaths is defined as 0)
Where is this code, where did you define deaths
I'm still not clear on where the snippets of code you've sent are being placed
top of the file (main mod file)
Just do G.GAME.deaths = G.GAME.deaths and G.GAME.deaths + 1 or 0.
can you send your main mod file if it's not too long
if key == 'saved' then
SMODS.saved = amount
deaths = deaths + 1
end
SMODS.Atlas {
-- Key for code to find it with
key = "RBDMod",
-- The name of the file, for the code to pull the atlas from
path = "ModdedVanilla.png",
-- Width of each sprite in 1x size
px = 71,
-- Height of each sprite in 1x size
py = 95
}```
okay well, that explains why it isn't doing anything
if you do eval deaths you should see 0 tho
but it will never increase
ooh thanks
should be below the atlas? (that would make sense)
no, you'd either have to hook or patch the SMODS.calculate_individual_effect function
I'm still stuck on my UI bullshit but I will survive
is there a explanation on how to use that fucntion somwhere?
local cie_ref = SMODS.calculate_individual_effect
SMODS.calculate_individual_effect = function(effect, scored_card, key, amount, from_edition)
if key == 'saved' then
deaths = deaths + 1
end
return cie_ref(effect, scored_card, key, amount, from_edition)
end
try this
And you want to eventually replace the global variable deaths with this, so it saves alongside the run if you ever go to the main menu and back in the run
Oops I didn't mean to ping
🍞
tho you don't want to set it to 0 the first time
(G.GAME.deaths or 0) + 1 would be more correct
thank you
it says that game is an nil value (error)
Go on, complete the ui
What does your code look like now
G.GAME.deaths = G.GAME.deaths and (G.GAME.deaths + 0) or 1
local cie_ref = SMODS.calculate_individual_effect
SMODS.calculate_individual_effect = function(effect, scored_card, key, amount, from_edition)
if key == 'saved' then
deaths = deaths + 1
end
return cie_ref(effect, scored_card, key, amount, from_edition)
end
the rest is the atlas
replace deaths = deaths +1 with G.GAME.deaths = (G.GAME.deaths or 0) + 1 and remove the first line
okok
can I do smth for the G.GAME.deaths to not eqal nil before the first use of mr bones? or it doesnt matter?
you can but it isn't really worth the effort, just whenever you access G.GAME.deaths do (G.GAME.deaths or 0)
local new_card = SMODS.add_card({set = card_type, area = area, key_append = "reroll"..reroll_type}, add_to_deck)
if area == G.shop_jokers then create_shop_card_ui(new_card) end
if odds ~= nil and SMODS.pseudorandom_probability(new_card, reroll_type, 1, odds) then
SMODS.debuff_card(new_card, true)
new_card:juice_up(0.15, 0.15)
end
is there any reason new_card would be nil on the SMODS.debuff_card() line? I'm getting a crash here that says table index is nil
to be more specific, the table itself is getting passed correctly, but it has no index apparently
when it says table index is nil it means somewhere in the code it tried to do table[nil] = smt and that crashes
how do i access a joker's name (not key)
card.config.center.name iirc
localize { type = 'name_text', set = 'Joker', key = key }
to get the localizaed name
oh god
this mod is gonna be a pain to localize
i'll figure it out (someone else will do it if they want it localized)
this for modded jokers is just the key btw
after some research, I found that
card.ability.debuff_sources[source] = debuff
is the line in the SMODS functions causing the crash. Am I required to pass a source?
so you still want to do the localize call
yes
ok cool
a unique string basically
yeah I gotchu
anybody know how to do chance in a card? im trying to make a joker that has a 1 in 3 chance to upgrade all poker hands
are you using the most recent version of SMODS?
yeah
Latest release or dev version
idk bro hold on
SMODS.pseudorandom_probability(trigger_obj, seed, base_numerator, base_denominator
return "1.0.0~BETA-0706c-STEAMODDED"
so how does this work exactly
i got into coding like yesterday
yeah true, make sure the version you're on has this function. If it doesn't just do
if G.GAME.probabilities_normal / odds < pseudorandom("seed")
is there a way I can change this value on 1 joker only
i don't want it to change on the center cause then it changes for every instance of the joker
you can change card.ability.name
but it will have no mod support basically
well this isn't something a lot of mods will use unless they
go out of their way to explicitly add it
Going out of my way
without getting to into the weeds, trigger_obj for you would be the card that is the cause of the function call. seed is a string that will be used as the seed for the RNG. base_numerator and base_denominator are used for the math, and should be set to 1 and odds respectively.
All the documentation for SMODS is available online btw
oh wait, do you want to change the name the game checks or the localized name
i'm trying not to spoil my million dollar idea here i've got a table inside the joker's info (like in the same area as the key is in) which can be changed by some other consumables and jokers
but again, make sure you're on the branch of SMODS that has this probability function. If you aren't, you should use if G.GAME.probabilities_normal / odds < pseudorandom("seed")
alr thanks
I can't put it in the ability table because the table contains a number and it could be randomized or altered by any jokers that change ability table values
you have it backwards
which then breaks literally every joker in this entire mod
so i have to put it somewhere else because not all of them have a thing like cryptid's immutable argument to blacklist values
i think if a mod breaks mine by trying to change values then it's their fault
even if it is their fault i want to avoid it if I can
Nuh uh
MY goat
wait i might be really smart actually
how do I get a string value as an integer
can i just convert between string and int freely if it's always a number
tonumber("10")
right so
jokers that change ability values on other jokers
skip strings because otherwise they would crash the game for doing math on strings
^
so I can store the number as a string and convert it to an integer whenever i use it as one
what about putting it in a table
and then no mod can break it
that makes more sense
they check tables inside the ability table for stuff
what if the mod checks if the string can be converted to a number, and then randomizes it and puts it back as a string
there's just no way you can avoid all scenarios
idk ive never seen any mod modifying like card.ability.extra.whatever.mult
how would i prevent a layer shadow being drawn inside of SMODS.DrawStep
if a mod does this they are absolutely just trying to break other mods
like modifying another card's config externally?
no sane person looks at a string and tries to randomize it
true, but that's just an exaggerated example
I can at least avoid the most common ones and i'll be happy with that
that's what cryptid's misprint-like effects do, but they usually just modify stuff in card.ability and card.ability.extra
I have a Joker that does that in my mod. It modifies every other Joker that gives Mult or Xmult
I will say it, cryptid and talisman have caused the most cursed code in mods trying to be cross compatible with them, and it pains me to see it happen again
it's not that bad cmonn
I'm not even attempting it, I don't really care
Cryptid cross-compatibility is a pipe dream for me atp
my life would have been easy if i was not told i should immediately attempt to make my mod compat with talisman
so i immediately ran into making it work both with AND without
anyway, i think saving values as strings is going too far for no reason
but you do you
i'm gonna do it cause it won't take too much longer than the regular way and it might be helpful
ok i changed my opinion because i hate emojis
lmfao
this is great
the joker gains +1xmult everytime a base event happends and I have no idea why
Somethingcom ruined them
i have so many trues
you got me
these are all my trues i couldve given you
why did you stop with the trues tho
youre true........
:true:
because you don't have a context check
also i think that should crash
how do i make this contains instead of is
if G.GAME.last_hand_played == card.ability.extra.poker_hand and context.end_of_round and not context.game_over and context.cardarea == G.jokers then
you need to save the contained hands yourself
how do I do that? (for some reson it doesnt 🤷♂️ )
wdym?
idk what your effect is
G.GAME.last_played_hand only saves the name, the game doesn't save the contained hands so you need to do it yourself
gain +1xmult everytime mr bones is used
you don't need to increment the xmult
just return { xmult = 1 + (G.GAME.deaths or 0) }
i mean now it says 'if last hand is three of a kind' but i want it to be 'if last hand CONTAINS three of a kind'
or is that what you meant aswell
yes that's what i meant
owh
the game doesn't save that
so how do i do zat
also I just realized if you have multiple jokers that save you at once this will probably be inaccurate
or is that really complicated
manually check for containment I think
where should I put it? I understend what it does but I have no idea where to put it
or you could go cheap and check if the hand is Three of a Kind, Four of a Kind, Five of a Kind, Flush Five, Full House, or Flush House (not recommended lol)
that might be a problem but I will leave it like that
but what if theres a flush with a 3oak?
i think you need to save context.poker_hands (or if you only care about three of a kind you can check if next(context.poker_hands["Three of a Kind"]) and save that in like card.ability.extra.was_toak or something
context.joker_main
and loc_vars
thats why you gotta make checks so you can only be saved by one joker at a time
i had to implement that cause i ahve like 3 jokers which can save the player but will destroy things
you might get away with doing if key == 'saved' and not SMODS.saved but I'm not sure what SMODS does with the saved value
im sorry, im stupid, could you elaborate? wdym by "save"
card.ability extra.is_toak = not not next(context.poker_hands["Three of a Kind"]) saves if the hand contains a 3oak
I need my joker to apply mult every hand but add .5 mult at the end of a blind.
This is what I did so far:
It could work but I'm assuming it doesn't since the discription of the card has Xnil and stuff on it.
-# ping me!
not not
the numbers inside of hashtags act as arguments. so change 0.5 to 1 and set 0.5 as the first argument inside of the card's loc_vars function
similarly, change the second set of hashtags to #2# and make it the corresponding value in loc_vars
also that event will run forever cus you never return true
should this be an if statement?
do you mean
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.mult_per_potato,
card.ability.extra.current_mult
}
}
end
something like that
loc_vars is the function that controls what shows up in a card's description
no
also i don't really know how to explain it better sorry
that's saving in the card.ability.extra.is_toak if the played hand at the time contained a three of a kind (also remove the not not that's unnecessary)
yes
i like my types being clear, thank you
been trying to remove a drawstep shadow from a sprite entirely, but there's still a very subtle one here. any tips on removing it?
if anyone's wondering why i'm doing this, i intend for the joker to have a sprite with a bunch of possible variations
where in loc_vars?
also the one on the left is what it SHOULD look like
wherever you have the "currently X" variable
Do I put this in the lang folder?
as a dictionary?
the name of the variable doesn't matter, as long as the variable you're referencing exists inside the card's config. The localization doesn't need anything else added
is it possible that I dont have that? (or is it extra.xmult)
I just typed mult_per_potato for the sake of clarity
should me your description text
it's probably extra.mult
So what do I put instead of the "+#1#" then?
I dont understend...
quick question, im trying to make the color of text in a description of a consumable a differenet color, is there a chart or something with every color code to use?
does the joker have a description
I have given up on having proper types, I just let the name of the variable speak for itself
yeah
thank you
but it doesnt work...
dont give up
I just now realised
already have
if context.joker_main and next(context.poker_hands[card.ability.extra.type]) then
the game doesnt like this line
noooo
something wrong??
by not liking the line wdym
i recommend posting the crash with your query
drawstep code if it helps
-- alexi draw steps
-- gets scale and rotate mod, directly taken from SMODS' floating_sprite draw step code
local function floatingSprite()
local scale_mod = 0.07 + 0.02*math.sin(1.8*G.TIMERS.REAL) + 0.00*math.sin((G.TIMERS.REAL - math.floor(G.TIMERS.REAL))*math.pi*14)*(1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL)))^3
local rotate_mod = 0.05*math.sin(1.219*G.TIMERS.REAL) + 0.00*math.sin((G.TIMERS.REAL)*math.pi*5)*(1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL)))^2
return scale_mod, rotate_mod
end
SMODS.DrawStep({
key = "alexi_face",
order = 61,
func = function(card, layer)
if card.config.center.face_pos and (card.config.center.discovered or card.bypass_discovery_center) then
local scale_mod, rotate_mod = floatingSprite()
-- local pos = (card.ability.immutable and card.ability.immutable.face) or card.config.center.face_pos
if card.children.face_sprite then
--card.children.face_sprite:draw_shader('dissolve', nil, nil, nil, card.children.center, scale_mod, rotate_mod, nil, 0.1 + 0.03*math.sin(1.8*G.TIMERS.REAL), nil)
card.children.face_sprite:draw_shader('dissolve', nil, nil, nil, card.children.center, scale_mod, rotate_mod)
end
if card.edition then
local edition = G.P_CENTERS[card.edition.key]
if edition.apply_to_float and card.children.face_sprite then
card.children.face_sprite:draw_shader(edition.shader, nil, nil, nil, card.children.center, scale_mod, rotate_mod)
end
end
end
end,
conditions = { vortex = false, facing = 'front' },
})
SMODS.DrawStep({
key = "alexi_eyes",
order = 62,
func = function(card, layer)
if card.config.center.eye_pos and (card.config.center.discovered or card.bypass_discovery_center) then
local scale_mod, rotate_mod = floatingSprite()
-- local pos = (card.ability.immutable and card.ability.immutable.eye) or card.config.center.eye_pos
if card.children.eye_sprite then
--card.children.eye_sprite:draw_shader('dissolve', nil, nil, nil, card.children.center, scale_mod, rotate_mod, nil, 0.1 + 0.03*math.sin(1.8*G.TIMERS.REAL), nil)
card.children.eye_sprite:draw_shader('dissolve', nil, nil, nil, card.children.center, scale_mod, rotate_mod)
end
if card.edition then
local edition = G.P_CENTERS[card.edition.key]
if edition.apply_to_float and card.children.eye_sprite then
card.children.eye_sprite:draw_shader(edition.shader, nil, nil, nil, card.children.center, scale_mod, rotate_mod)
end
end
end
end,
conditions = { vortex = false, facing = 'front' },
})
code jumpscare
is it here i type the name of the variable instead
it crashes and says its because of that line
what is the crash
j_p_potato = {
name = "Potato",
text = {
"This Joker grows one potato each round.",
"Each potato is an additional {X:mult,C:white}X#1#{} Mult.",
"{C:inactive}(Currently {C:current_xmult}+#2#{}{C:inactive} Mulu}"
}
}
also, unless you defined C:current_xmult yourself, that's not a color that exists
what is the value of card.ability.extra.type
"Three Of A Kind"
thats the color?
"Three of a Kind"
yeah, C: means make this text this color
Yep
And X is the variable defined in the joker file
o7
are you referring to X: or X#1#?
X:
X: is like a background. So Vanilla cards that give Xmult all have a red background with white text inside, which looks like this: {X:red,C:white}
whats with line 427??
Did you start a new run
oh that might be it yeah
I recommend reading this page https://github.com/Steamodded/smods/wiki/Text-Styling
It will explain all about text styling
and variables
j_p_potato = {
name = "Potato",
text = {
"This Joker grows one potato each round.",
"Each potato is an additional {X:red,C:white}+#1#{} Mult.",
"{C:inactive}(Currently {C:red}+#2#{}{C:inactive} Mult}"
}
}
so I would recommend this. Also, I noticed that the top of the description implies that it gives times mult, but the bottom suggests it gives plus mult
i exploded
It should be a plus
is there anything wrong with this code? im getting errors for some unknown reason
SMODS.Atlas{
key = 'sugarseed',
path = 'sugarseed.png',
px = 71,
py = 95
}
SMODS.Consumable{
key = 'sillymod2',
set = 'Tarot'
loc_txt = {
name = 'Sugar Apple Seed',
text = {
'Spawns a {C:green}Sugar Apple'
}
},
atlas = 'sugarseed',
pos = {x = 0, y = 0},
rarity = 3,
cost = 5,
}
you forgot a comma at 'Tarot'
when !postcrash command
i did?
and under py = 95 i think
there should be a comma there right
lemme check
is #1#
^ The first line?
Because how would the game know what it is otherwise.
Unless I define it somewhere?
then i will feel smart
lol
nah theres still an error
but it might not just be that theres probably something else wrong
#1# is the first variable in extra = {
if you don't post the error N will cry
that's what I'm saying, you need to pass in whatever variable you want to show up in the description
post crash log?
is that just what it says on my giant screen
whith this? So I did it already?
mb i started yesterday
that makes sence
type ctrl + c on the crash screen and ctrl + v here
as long as mult_per_potato and current_mult both exist in the card's config, this should work
whats line 33?
SMODS.Joker{
key = 'sillymod1',
loc_txt = {
name = 'Sugar Apple',
text = {
'{X:mult,C:white}X#1#{} Mult'
}
},
atlas = 'sugar',
pos = {x = 0, y = 0},
rarity = 4,
cost = 10,
config = { extra = {Xmult = 30}},
}
},
loc_vars = function(self,info_queue,center)
return {vars = {center.ability.extra.Xmult}}
end,
calculate = function(self,card,context)
if context.joker_main then
return {
card = card,
Xmult_mod = card.ability.extra.Xmult,
message = 'X' .. card.ability.extra.Xmult,
colour = G.C.MULT
the italcized
you have an extra } there
yeah was bout to say
put your code between ``` so it formats nicely here
what
explain
do blind checks not trigger in endless mode versions of the blinds?
asking cause none of my blind specific effects triggered on my joker while it was endless mode
```lua
code
```
?
ight mb
key = 'sillymod1',
loc_txt = {
name = 'Sugar Apple',
text = {
'{X:mult,C:white}X#1#{} Mult'
}
},
atlas = 'sugar',
pos = {x = 0, y = 0},
rarity = 4,
cost = 10,
config = { extra = {Xmult = 30}},
}
},
loc_vars = function(self,info_queue,center)
return {vars = {center.ability.extra.Xmult}}
end,
calculate = function(self,card,context)
if context.joker_main then
return {
card = card,
Xmult_mod = card.ability.extra.Xmult,
message = 'X' .. card.ability.extra.Xmult,
colour = G.C.MULT
count the number of { and } from config up to loc_vars, they need to be the same amount
every } closes a {
think i fixed it
I reccon they are there. But something else is wrong. It still says nil.
im still confuzzled
config = {
extra = {
current_mult = 1,
mult_per_potato = 0.5,
rounds = 0
}
}
the config is formatted wrong. Unless you want to keep it that way, in which case remove the extra. from the variables inside loc_vars
instead of
config = { extra = {Xmult = 30}},
}
},
it's
config = { extra = {Xmult = 30} },
OH
bless your soul
you will come to learn that N` is the goat of the Balala modding discord
lol
i need some help
it's formatted like this and so on (first image)
and then ends like this (second image)
is it something to do with my code, or is this a balatro bug itself?
hi toma
hi srock
it is working now
thanks you
regarding my joker
something something dont ask to ask something
ok
ok turns out turning off shadows doesn't remove that????
what exactly is wrong? it would help us pinpoint the problem
there's no context.post_discard
which is unfortunate
you increment the buffer every time, but if none of the blind match you return without setting it back to 0
Is there a way for blinds to disable enchancement
does it crash?
no
oh thats always annoying
what..but-I PUT IT OUTSIDE OF THE CONDITIONAL YOURE RIGHT
at least this one was simple
i tried it with pre.discard
it works BUT i have to discard an extra time for it to work
so how do i use context with a tarot card?
ok there
that's what you nmeed to use, do you still have the code for that?
im literally only js trying to make something occur when it is used
no but i can edit it
like how tarot cards are supposed to work
you need to set it to 0 in an event, not immediately
but how do i make it reminiscent of faceless joker's effect?
if context.consumeable and context.consumeable.config.center.set == "Tarot" mabye?
nvm i figured it out
thx though
sorry to bother once again but I have no idea what im doing, Im trying to make a joker that gains 1xmult everytime mr bones is used (the mr bones part is alredy done, it adds +1 to G.GAME.deaths) but I dont know what to put into the joker code (this is what I was able to copy from other jokers but it doesnt work)
SMODS.Joker {
key = 'rbd',
loc_txt = {
name = 'Return By Death',
text = {
"{X:mult,C:white} X#1# {} Mult",
}
},
blueprint_compat = true,
rarity = 4,
cost = 20,
pos = { x = 0, y = 1 },
config = { extra = { xmult = 1, xmult_gain = 1 } },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.xmult_gain, card.ability.extra.xmult } }
end,
calculate = function(self, card, context)
if (G.GAME.deaths or 0) > 0 then
card.ability.extra.xmult = card.ability.extra.xmult + G.GAME.deaths * card.ability.extra.xmult_gain
return { message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.xmult } } }
end
if context.joker_main then
return { xmult = 1 + (G.GAME.deaths or 0) }
end
end,
}```
more like vanilla peakmade
while im at it, what does the area part of use API method do?
if you dont want to help, just please point me into a direction
in use?
yes
it's for the area the tarot is used (the consumable slots or a pack for example)
area refers to the Cardarea that a card is being used from if I'm correct, so for a Tarot it would be G.consumables
he's too fast
oh ok thanks
huh, so if i wanted to make a tarot card that could be used anytime, (it spawns a joker) what would i do
just this should work if deaths works correctly
calculate = function(self, card, context)
if context.joker_main then
return { xmult = 1 + (G.GAME.deaths or 0) }
end
end,
look at the Vremade for Judgement, you could just copy its use function and that should cover it
ight
will try that, thnx
wat dis mean?
it means ipairs got a string instead of a table
it does work, thank you very much
for anything else i will need the code
and the full crash
which part sets the joker?
its a specific joker im giving.
i'll give it a shot
this
ight
you would change it for SMODS.add_card{ key = "j_modprefix_key" }
if you want to force it to become a - DAMMIT N`
gotta type faster than that
idr if it was n or not but mfs also beat me at times on mobile too
lol
ill be on pc and theyll be faster than me on their freaking phones
yall are actually frickin goats bro
probably not me im bad at typing
tats so specific
yeah but you're so knowledgable that it doesn't matter lol
N deserves only sheer specifics, never would i leave him wondering
N should drop his MonkeyType average
alr so i used the tarot card and my game crashed heres ur crash report
my mod prefix is "silly" and the joker im trying to spawn's key is "sillymod1"
you need to have the first part be key
mb
SMODS.add_card{ key = "j_silly_sillymod1" } to be more specific
yup thats what i got now
mines only 76 =[
no
im satisfied with 76 because for awhile i was stuck at 60 or less
but ol boy is recovering his abilities
thank u its working as intended now
I've been hardstuck 60 wpm for a long time
i think at my peak i was at like 118 or so i dont truly recall
but then my blasted injuries done set me back
like i said, not a good typer
excessive typer
i got my arms obliterated a bit in the military so it set me to like high 40s for awhile in wpm
but ive been recovering the last few years that ability
i am monkey
im pretty happy with the 70s so far
thank you again
🥱 catch up buddy
playtesting with speed set to 1 is crazy
ah yes
I KNOW IM ACTUALLY REALLY SPECIAL
the wojaks 😭
i'm getting there
i cant stand gag honestly
maybe in 100 years
i believe in you
real
us real men play princess tycoon
i have no idea what gag is

bad roblox game
ah ic
grow a garden
*Honkai Star Rail (this is a joke)
ur on my list if that wasnt a joke
it was like top 1 game ever i think
yea
i was never much of a roblox fella
how to create a certain joker when a boss blind is selected? (as an ability of other joker)
mmm so youve resorted to playing a 10 dollar game about poker
lol
no i played a real game growing up
what's the best approach for making jokers that affect how card ranks and suits are interpreted? (e.g. "[rank] and [rank] count as the same rank")
ooh
holy moly
uve got great taste
how to install steammodded?
censor your name please
check the pins in #⚙・modding-general
real
with how money ive wasted on steam i sure freakin hope so
imagine not having 2000+ hours in TBoI
all achievements too 🔥
i dont think i even own the game lmfao
casual 🥱
youre true...
bro one of my friends has 1500 hours on doki doki 😭

yoo
how many of those games have you played?
how do you even get that much time out of that game.... wait
ALR GUYS
so far im at a 51% game completion rate
eventual goal is 100%
TIME FOR A STICKER
ive spent over 10k USD on steam 🙃
im lost on this card
completion 😱
i cant think of an effect
Where do you see this
what was that item called?
in steam click help, steam support, my account, data related to my steam account, then external funds used
whats the usual sticker size
I have it as a 1/8 to disable the current boss blind, but I'm considering nerfing it to like 1/10
sprite size i mean
Halo of Flies
actually great idea
i dont steal though
you can steal it lol
GANG
whats the usual sticker sprite size
all other effect will be original
from one Isaac enjoyer to another
sec
what
give me a sec I will check
Wtf, it says I spent 163, that's crazy
ok
if isaac is so good why isnt he named fred
163 bucks or 163k
163 usd
insane
Ofc not 163k lol
lmfao
yea ive spent alot
a third of this is yugioh
It's accumulated for the past 11 years
N when are we gonna be friends on steam
So I think I have good spending habits
for 2x its 38 x 38px
its in my carrd just send me an invite
ight
bump
Is it gambling
yes
added u bestie
makes sense
wait i forgot but
thankfully you dont buy honkai jades on steam
How much have you spent on hsr...
mine is over the last 11 years
not good spending habits but i didnt think id live this long so ill take it
a normal amount
i wonder if theres a way to check
so 0?
between 0 and 10k
i was gonna get bepis something from the summer sale but he didnt tell me what to get him, sad days
Surely you keep track of where you spend your money on
haha
imagine keeping track
i dont worry about where my money goes, i just make sure i take care of what i need to
i keep track on how close i am to 0 on my bank account
i cover my bills, otherwise my money goes to my friends
i think my monthly spending is around 3700 usd
when was the last time you spent on hsr
a week ago
not all of us have the privilege :(
where do you see this btw? in steam?
yea
here
refer to here
oop
srock faster
cringe
my condolences...............

I retract my previous statements
what about it
he works now
this just means i can buy my friend many things
u wouldnt dare
also hi dilly
hiii
i have spent a great deal of money on friends i can assure you
i will do such things
same honestly
UI colors my beloathed UI colors my beloathed
my friends detest my lack of wishlists most times
i have to get winter on steam at some point
I don't have a wishlist either lol
cause winter is ym bestie
You will download steeeaaaam 🌀
all of you can add me if you desire my steam is linked to disc 
Regardless I don't really play online multiplayer much so Id say not expect a lot
I feel like I only ever see winter when she's hating on UI
I meant to but i forgot
thanks for reminding
hating on UI is a state of being
now I can't add you, cus it will seem I'm trying to get you to buy games for me
real
obama jumpscare
are you even a real developer if you like modding UI
add me anyway
i'll add you if you can find my steam profile
...yes?
I'm inclined to disagree
very interesting profile (very long too)
So you want to say that I'm not a developer?
how am i meant to find that silly
thank u
you dont count
local _rank = math.random(2, 14)
SMODS.change_base(card, nil, _rank)
why no work change rank
with determination
You need to pass in the key, not the number.
can I ask what game were you banned from?
find my (steam) pages
Like "Ace" instead of 14
hi somecommmm
dead by daylight, i did the infinite legion exploit even though they said they would ban for it
so i did in fact get banned for it
more than one?!
was the last time we talked about dbd the last time you played it
times are rough
oh lmao
could I do "".._rank and have that work?
was that an important game to You or just playing with friends?
No.
dang, ok thanks
i just ahve an alt account i play on, so no big loss
Just get a random element from SMODS.Ranks
bump
if context.setting_blind and context.blind.boss then
SMODS.add_card({key = "j_modprefix_key"})
end
thnx



