#💻・modding-dev
1 messages · Page 176 of 1
but assuming both change the text as well, they'd have to do so non-destructively for that to make sense
I was more thinking about other cases
how to detect if you are currently choosing a card in a pack instead of using G.state ? (using a custom created booster)
or how to add my own pack to G.STATES ?
in following the api for smods.pokerhand i still get ui error in the example hand for my poker hand, i even simply copy and pasted the example and it still shows as ui error
is this not the correct way to list it?
{ 'S_K', false }, -- King of Spades, does not score
{ 'S_7', true }, -- 7 of Spades, scores
{ 'D_7', true }, -- 7 of Diamonds, scores
{ 'H_7', true }, -- 7 of Hearts, does not score
{ 'D_3', false } -- 3 of Diamonds, does not score
},```
I believe it needs a specific_vars arg too
how come this code keeps crashing?
misc = {
suits_plural = {
flip_Flowers = 'Flowers'
}
suits_singular = {
flip_Flowers = 'Flower'
}
}
}```
the game says im not closing the bracket on line 3 near where it says "suits_singular"
Missing comma
really? i thought a comma was only necessary when putting multiple things inside the brackets
You are, you have suits_plural and suits_singular in misc
Put a comma after the closing bracket of suits_plural
oh, was adding a comma to the wring thing, thanks
The crash log should tell which line it's found an error in. Generally for this it will be the line right after the place you need to ass a comma to
(So in this isntance it should have pointed you to suits_singular)
Make it {} instead of nil
Setting it to nil is basically the same as not putting it in
still gives error
what's the "ui error"?
ok i tried getting the hand to register if a 7 and 10 was in the hand played
didn't work
help me
it's even white
like another type of UI
you didnt close the {C:attention}10{}
ah
uhhh I recall seeing that one before
its suppose tos how the example cards for a played poker hand like it does in vanilla
try moving thee description from Tarot to Other
i don't think that would affect the function of the joker though
it's literally just text
can you show your full pokerhand code?
still gives error
key = 'blackjack_hand',
mult = 5,
chips = 100,
l_mult = 0,
l_chips = 0,
example = {
{ 'S_A', true }, -- Ace of Spades (Scoring)
{ 'H_K', true }, -- King of Hearts (Scoring)
{ 'D_9', false }, -- 9 of Diamonds, scores
{ 'H_6', false }, -- 6 of Hearts, does not score
{ 'D_3', false } -- 3 of Diamonds, does not score
},
loc_txt = {
name = "Blackjack",
description = "A hand where the sum of card values equals {C:attention}21{}."
},
evaluate = function(parts, hand)
local total_value = 0
local ace_count = 0
local scoring_cards = {}
-- **Step 1: Calculate total value with Aces as 11 initially**
for _, card in ipairs(hand) do
local rank = card:get_id()
if rank == 14 then -- **Ace**
total_value = total_value + 11 -- Assume Ace is 11 initially
ace_count = ace_count + 1
elseif rank >= 11 and rank <= 13 then -- **Face Cards (J, Q, K)**
total_value = total_value + 10
else
total_value = total_value + rank
end
table.insert(scoring_cards, card)
end
while total_value > 21 and ace_count > 0 do
total_value = total_value - 10 -- Convert an Ace from 11 to 1
ace_count = ace_count - 1
end
if total_value == 21 then
return { scoring_cards }
end
return {} -- No valid Blackjack
end
}
ok aside from cosmetics
who can help me out here
thats odd, if you add that same info queue to one of your jokers it should work
everything else about it works, just simply the display does not
try changing the description to be a table of strings instead of a string
tested, does not work
inside en-us.lua in the root mod folder, ill try adding a localization folder and update you
It needs to be in the folder yes
that definitely helped, i just need to make it display properly now, appreciate it
already fixed the ettention
<@&1133519078540185692>
<@&1133519078540185692>
oh wait nevermind, i didnt restart my run, im clear
🔫
lmao how many pings did you guys get
🫡
It’s hard to ping on mobile I have to scroll to the bottom of the list
this isn't working
my leading theory is that when it scores each card, the rank checks reset back to false
and since a card cannot be 7 and 10 at the same time, it never triggers
You’re returning values that aren’t things
You can do all this in joker main too
And use local flags when you find the correct ranks
IT FINALLY WORKS
wow thats really good
now for the important matters
do i call it "Unleashed Ability", "True Potential" or something else entirely?
unleashed ability is fine
i think unleashed ability is cool enough
You should move the "of" to the second line and add "the" after it
"true potential" feels good to me
You should probably add true as a third arg in take ownership too
It’ll remove the mod badge
so i removed the "return" brackets and made them simple flags
local hasSeven = false
local hasTen = false
if context.individual and context.cardarea == G.play then
if context.other_card:get_id() == 7 then
hasSeven = true
end
if context.other_card:get_id() == 10 then
hasTen = true
end
end
if context.joker_main then
if hasSeven == true and hasTen == true then
return{
xmult = card.ability.extra.xmult
}
end
end
end
}```
still nothing
but are you suggesting that i can take all the code starting from `if context.individual and...` and put it in `if context.joker_main then`?
It would need slightly adjusting, but yes
it can replace the "#1#" part now
after the function?
wdym?
it crashes if i do that
Well you’d have to loop over the hand yourself
like
do a for k, val in ipairs loop?
It shouldn’t crash, but also you should update smods
OH IM USING OLD SMODS FOR CRYPTID I FORGOT THANK YOU
I don’t think that will be the reason of the crash though, silent take ownership has been a thing for ages
using new smods doesn't fix it
Are you reloading a save perchance?
the crash happens as i load the game
would this be acceptable?
Oh I think it’s crashing in your loc file?
luke pickman music pack coming soon ™️
Almost, you want the id of val not other card
And it’s not context.scored
forgot to close a bracket, coding license revoked for me 😔
rq, what happens if i use tonumber("abc")?
that's what I was wondering
what would be the correct context?
nil
epic, thanks
scoring_hand seems to be the right one here
gotta be somewhere
i'll leave this error message from playing any hand
maybe it's because i'm writing context.val instead of just val?
why would context.val exist if these are your values
What's your code exactly
?????
Need to localize
how
pretty sure that's supposed to be m_lucky in the code
unless this is another localthunk moment
ye it is m_lucky in the code im just trying to take ownership and it lost localization
Try finding how the base game does the localization
how do i detect if the card being bought is a consumable?
the context buying_card comes with context.card which is the bought card, could check its content
another function i made
if context.buying_card and context.card.<whatever specifies card type> == "Tarot" then...
I wanna say it's context.card.ability.slot
steamuconmmunity
at local thunk smite this sinner
i can probably add a table to my function, so it knows what else to color too
yup, it worked
how do i take ownership of the default names of hands to change them in steamodded
i'm doing something really stupid instead of working on my mod
is it really as easy as just writing it into the localization lmao
Guess not
There's a bunch of small mod who did it, like the one that replaces Straight by Gay
hyperpup defeated
you would be about the fourth person to do it
there was the balamod version which got ported to steamodded
so that's two if we're being generous
then #1324037115171831819 does it
hivemind fr
crying
i think skyline wanted to do that aswell
does smods change the way rarity weights are handled?
I want to make it so the shop can only have rares in it
cryptid has a deck which maybe does that (the one which makes everything has an equal chance of spawning, im pretty sure it changes rarity weight, idk)
so true
Hello! Me again asking how to add smods for vscode to detect the variables cause I have it in my workspace and it doesn't work
#💻・modding-dev message I put this on my .vscode/settings.json and that detected it
assuming you're using the Lua extension ofc
Sorry pretty new to programming, where and how do I add this?
I create a .vscode/settings.json and add it there?
Mods/your mod name/.vscode/settings.json
👌
I put smods there, but maybe your smods mod folder has a different name
how would i destroy a random card held in my hand (not in the played hand)?
Like this?
No
Try with this?
Like, have both at once
What does ../ mean? Is it that it's supposed to be in the same folder?
Cause maybe it's that
../ means going up a folder
Ah ok
so it should access the Mods folder
Ok that's the problem, I don't have it in the mod folder
What's in your mods folder
Oh
You should
Or I guess if you don't want to
you can copy the full path
and paste it instead of ../smods
Will try
Hmmm like this?
Still the same error
Let me try putting it in the mods folder
I just have my full mods folder in my workspace 
Yeah I added the whole mod folder just now
Including the one I'm making
Still getting the same error
Ah wait no
Now it works
Still shows squiggly line though
What'd you end up putting in the settings.json?
ahh
I'm not familiar with it so I wouldn't be able to tell you how to set that one up too
Ok extension yeeted
you'd get globals from other mods if you do this tho
and they wouldn't make sense if you have them disabled ingame
i only did patches for that
# banana image scaling, part 1/2
[[patches]]
[patches.pattern]
target = "card.lua"
match_indent = true
pattern = "if center.name == \"Wee Joker\" and (center.discovered or self.bypass_discovery_center) then"
position = "before"
payload = '''
if center.name == 'banana' and (center.discovered or self.bypass_discovery_center) then
H = H*0.5
W = W*0.5
self.T.h = H
self.T.w = W
end
'''
# banana image scaling, part 2/2
[[patches]]
[patches.pattern]
target = "card.lua"
match_indent = true
pattern = "elseif self.config.center.name == \"Wee Joker\" then"
position = "before"
payload = '''
elseif self.config.center.name == 'banana' then
self.T.h = H*scale*0.5*scale
self.T.w = W*scale*0.5*scale
'''
steamodded has display_size
you probably need to set self.children.center.scale
you don't need to patch that in
imma bump this rq
a month ago
I think the front needs to be G.P_CARDS.empty
not sure if that necessarily makes a difference, you could check what cryptid does though
it don't solve the problem 😔
the size changed though
Alright, I honestly forget Cryptid does more than make the Ace glitched lol
How do I check what a card's ID is?
context.other_card:get_id() == 14 gives you Ace
Ok, rephrasing, how do I make it a specific card? I wanna do 7 of diamonds
how would i check if a joker is a specific joker by key? i'm trying to make a joker like joker stencil that boosts when another "joker stencil" is in play
this is without putting a size variable
card.config.center.key == "j_stencil"
you can also get if there's one in play with next(SMODS.find_card("j_stencil"))
bumping this seeing as i'm back and have no answer
i see
so what's your code
ive got this code to add the names and descriptions to the cards but when I check the game it turns blank what am I doing wrong?
descriptions = {
Tarot = {
flip_flip_t = {
name = 'The Flip',
text = {
'Flips 3 selected cards in your hand',
'into their flipped suit',
},
},
},```
would that be the same for all consumables?
Yes
thanks
SMODS.Joker { key = 'sietedeoros', loc_txt = { name = '7 de oros', text = { "Each played {C:attention}7{} of {C:diamonds}Diamonds{}", "gives {X:mult,C:white} X#1# {} Mult" } }, config = { extra = { Xmult = 2} }, rarity = 1, atlas = 'BarajaEspaniolaJokers', pos = { x = 1, y = 1 }, cost = 4, loc_vars = function(self, info_queue, card) return { vars = { card.ability.extra.Xmult } } end, calculate = function(self, card, context) if context.individual and context.cardarea == G.play then if context.other_card:get_id() == 7 then return { Xmult_mod = card.ability.extra.Xmult, card = context.other_card } end end end }
Trying to make a joker make 7 of diamonds give x2 mult
I'm copying walkie talkie from the examples
But can't get it to work on any 7
Let alone on specific ones xD
put x_mult instead of Xmult_mod
Xmult_mod always requires a message due to vanilla behavior
...so I have a table of sounds that I want to look for. Would it not be like this?
local sfxtable = {'chips1', 'multhit1', 'multhit2', 'coin3', 'generic1', 'foil2'}
if sfxtable['insertinputsfxnamehere'] then ... end
I guess is a pretty mid card just because they are easier ways to make the same amount of money but i dont know how to improve it keeping the theme, ¿any ideas?
No, the indexes in that scenario are from 1 to 6
that's what one might call an array
if you wanted to access it by name you'd need to to local sfxtable = { name = 'something' } etc etc
if you want a table representing a set, the values should be the keys
local sfxtable = { chips1 = true, multhit1 = true, ... }
i also want to make the "suits changes every round" smaller like the ancient joker does
but i dont know how to make that subtitle
like {s:0.8}
oh true, scale exists
-# (scales by a factor of 0.8, tweak as needed)
-# now it's also a subtitle
local sfxtable = { 'chips1' = true, 'multhit1' = true, 'multhit2' = true, ... }, ya?
that's not what I said
without the ' around the names
that was just a mistake on my example that i edited to fix
either chips1 = true or ['chips1'] = true
you may need the latter for keys that are not valid identifiers
thanks, now its perfect
(forgot the decimal point)
lmao
Housing Market:
...
CHANGES EVERY ROUND
thats my grandma's phone font size 😭
"i still cant read anything", she says ✍️
yeah.
nice.
Definitely better being tame instead of outright replacing all sound calls with the click.
if card.is_suit('Diamonds') and card.base.value == '7' then
Trying to detect if it's a 7 of diamonds with this, is this correct? Assuming not cause I get this crash:
card:is_suit with a colon
where can you find the vanilla code for consumables in the game files?
Hmm changed it and now it doesn't crash but still doesn't trigger
what's your code
how would i make it so that my custom rarity uses the label i set for it? cause right now it's just ERROR
they should be in card.lua i think, seach for the full name
Im trying it to detect if Full house contains a trio of some suit and/or a pair of some suit, but can not think on the logic around it
next(poker_hands['Pair'])?
wdym
I wonder if it's possible to make custom behavior to allow Jokers to become gold 🤔
that is how you find out of if a hand has a pair in it
then you can do card:is_suit() for the second part
How do I look at the four fingers code?
okay thanks
ill try it :)
if you get the game's code and then go into card.lua you should be able to find it (id use the search function in your platform when looking for four fingers)
i think the way four_fingers works is it is a core part of the functions that calculate if a hand is a flush (or a straight), so you should try looking at common_events.lua as well
i think is this one
just because in card.lua i think four fingers doesnt even have variables
yep
thats the only time four fingers shows in card.lua
Seems to be in misc_functions.lua
four fingers is implemented in get_straight
which smods overwrites
so just look at the smods version
or don't tbh
might be more understandable in vanilla
more applicable in smods
whatever suits you
hehe
suits

okey
now is there a way to check if all the three cards that take part on this three of a card are of the same suit?
Is there a way to differentiate cards in the collection display from actual cards in the set_ability method?
the three of a card is inside a Full house so checking if there are three cards of the same suit wont work
Trying to do a joker that allows you to do flush 2, should I look at smods straight anyway?
two fingers? 🤨
theres an example mod that shows how to add a new hand, maybe that could help?
link: https://github.com/Steamodded/examples/tree/master/Mods/RoyalFlush
But that would make it a new hand that wouldn't level with flush right?
i guess the four fingers should what youre looking for, so take a look to the misc.functions.lua there
or anything related to four fingers
this crashes if i play any 5 cards that doesnt contain a 6
Anyone know the keybind to hide the console (DebugPlus)?
It should be esc
Not it
weird
i need the keybind to show it 😭
its suppose to be "/"
but doesnt work for me
if you mean what haircut id say give him a mullet
is your "/" above seven
I couldnt open it either so I had to change the keybind in the mod's folder
what kinda keyboard do you guys have that slash is on shift+7
every keyboard that i know is like that
you can edit this part (I replaced it with f12)
besides if you have a numpad you can also do it there but most laptops dont have numpads
thanks
same
where are you guys from lmao
in what file is it?
Spain
console.lua
viva
yeah spanish keyboards are like wildly different from american ones when it comes to special characters and stuff
also i think mullet was the right call so thx
added a J tattoo for good measure
Looks like Perkeo kinda
he looks exactly as my roommate
oh hey, German keyboards also seem to have that
bet he's chill
French keyboards also, so i guess is an european standard
ye
´
could someone help me with something?
i wanted to make consumables free in the shop but the game's code isnt really helping me understand how it would work
Did you check Astronomer's code
can anyone tell me how to make it so that when you use a tarot card the cards that get selected turn into a certain suit
as in hearts change from one suit to another and clubs change to a different one
where is that in the github?
SMODS.Joker {
key = 'envido',
loc_txt = {
name = 'Envido',
text = {
'You can play {C:attention}flush{} with {C:attention}2{} cards. ',
'If doing so, add {X:mult}Mult{} equal to',
'{X:mult}#1#{} + sum of ranks',
'of numbered cards in scoring hand.'
}
},
atlas = 'BarajaEspaniolaJokers',
pos = {
x = 0,
y = 0
},
rarity = 1,
blueprint_compat = false,
cost = 6,
config = { extra = { mult = 20, hand_type = 'Flush'} },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.mult, localize(card.ability.extra.hand_type, 'poker_hands') } }
end,
calculate = function(self, card, context)
if context.joker_main and next(context.poker_hands[card.ability.extra.hand_type]) then
if context.other_card:is_numbered() then
return {
mult_mod = card.ability.extra.mult + context.card:get_id(),
card = context.other_card
}
end
end
end,
}
I've got this, getting this crash when playing a flush
is it possible to read what badges a card has?
Im trying to do a joker that gives you money at the end of the round, but just found this on the source code, i dont know where or what it references to
would this code be correct?
use(SMODS.change_base('Hearts','Flowers'),('Clubs','Drinks'),('Diamonds','Stars'),('Spades','Shovels'),('Flowers','Hearts'),('Drinks','Clubs'),('Stars','Diamonds'),('Shovels','Spades'))
wtf is use
?
consumables xD
look at https://github.com/Steamodded/smods/wiki/Utility#mod-facing-utilities
that's not something you should be calling (in most cases, unless you know what you're doing), that's something you should be defining
not to say that this isn't valid syntax and I'm not sure I get what you even think SMODS.change_base does
I mean there are some fundamental misunderstandings going on here
maybe giving an example would help explain what im trying to do here
like if you used the card on a spade, a heart and a club, each of them would turn into a diffeent suit from the same card
use = function(self, card area, copier)
-- Get highlighted cards
for _, c in highlighted_cards do
assert(SMODS.change_base(c, "Hearts", nil))
end
end
^example of usage
wouldnt that change all the cards to hearts? or am i misunderstanding
well for starters highlighted_cards doesn't exist here
yeah
you'd want something like G.hand.highlighted
I'm too lazy to find how to get highlighted cards
also you need to wrap that in ipairs because lua
u right there. def meant to :P
my friend is helping me out with the art for my mod. Any thoughts on which one for these 3. I like the white border the most. Joker name - "Devil's Machine" in a reference to earthbound
card_area
What's the target path if I want to patch smods /src luas?
And also, do the smods scripts run before the lovely patches? what's the order of operations?
well this is the code
if (self.ability.set == 'Planet' or (self.ability.set == 'Booster' and self.ability.name:find('Celestial'))) and #find_joker('Astronomer') > 0 then self.cost = 0 end
the cards itself check for astronomer, not the reverse
so i dont know how to reference the cards in the shop in code i guess is my problem
what "reverse" are you looking for? 🤔
it's target = '=[SMODS _ "smods_rel_path"]' iirc
lovely always goes first
never learned what ipairs is
THANK YOU!! awesome B)
i mean the shop cards are the ones checking for astronomer and adjusting their price accordingly right?
cards in general but yes
i just needed to know what specifically i need to use to reference them in code
you should check edition tags
how do you do info_queue for a modded seal again
they change the cost of jokers to 0, so i believe that should help
Alright let's go back a bit. What are you actually trying to do?
this is inside the function for setting card costs
have a joker set costs of consumables and boosters to 0
so what's the issue with doing that in the same way astronomer does
yeah you can hook the function astronomer does it inside and do it there
line 359 in card.lua has the function card:set_cost() which is where the astronomer functionality is
i guess im confused by the use of self there?
if (self.ability.set == 'Planet' or (self.ability.set == 'Booster' and self.ability.name:find('Celestial'))) and #find_joker('Astronomer') > 0 then self.cost = 0 end
im pretty sure this is the entire code for that
self is the card itself (in the shop)
who actually calls the function set_cost?
it gets called in a couple of places when modifying a card i think, to recalculate how much it costs
yeah it accounts for editions and stuff
I made a couple of jokers that sets price to free and I just hooked card:set_cost and put self.cost to 0
gets called in a lot of random places, but the important one is this one:
function Card:add_to_deck(from_debuff)
...
if self.ability.name == 'Astronomer' then
G.E_MANAGER:add_event(Event({func = function()
for k, v in pairs(G.I.CARD) do
if v.set_cost then v:set_cost() end
end
return true end }))
...
so just have an add_to_deck defined that does that
(oh and also in remove_from_deck)*
iss it a problem that the discount isnt permanent? like it has limited uses?
cause the number has to change for mine
it isnt a permanent rule
what does that mean
why does the print in 229 gives me the amount of cards scoring instead of the rank of each card scored
I guess it goes from 2 to 14?
basically at the start you have one free purchase. when you buy something, it is spent.
you regain one purchase every blind (and as a chance when buying anything)
i think so, yeah
okay, thanks
oh if the first thing you buy is free then you might need to hook buy_from_shop
couldn't it just use the buying_card context
could give you the money back on purchasing a card context
i guess, though i would prefer if it appeared as costing 0
could also set all cards money to 0 normally and reset back to normal on purchase-card context
well, it has to be specifically consumables and boosters.
thats why i wanted to be able to reference the specific shop cards
the buying_card context seems to be called before spending the money so you could do
card.cost = 0
you'd set the money in :set_cost and check if it is a consumables/boosters, if your joker is present, and whether it's "active"
(aka not debuffed)
it needs the colon, not .
oh, okay thanks :)
bump
does G.P_SEALS['seal_key'] work?
That should work
or maybe this badge to key thing
no
I think that's all done with juice_up!
ill elaborate the question a little bit more, so i got the line of code juice_card_until(self, eval, true) from the trading card, how do i set the eval to make it stop jiggling?
do you want it to jiggle until a condition or do you just want it to jiggle once
until a condition
eval should be a function, make it return false (I think false? might also be true tbh) to stop jiggling
where can i see where planet cards are working? i was trying to search up earth as an example but couldnt seem to find it
the information's all in game.lua. Line 559 for earth.
affirm, thanks
ive tried a lot of things but the card doesnt want to juice
should it be self instead of card?
ill try

like I said, a function; you're just passing it a boolean
so this?
function() return whatever end
okay
Something along the lines of
local eval = function() return card.ability.extra.ready and not G.RESET_JIGGLES end
juice_card_until(card, eval, true)
i see
Double checked, this is what other people were instructed to use in the past, but it crashes?!
ill try to work with that
Mmmmmmm that's the good stuff
make sure you're using 0.7.1?
Alright, gotcha
Check my example again, i had the result backwards, should be right now. juice_card_until should really be named juice_card_while. It will juice until eval returns false
that's a way better name yeah
yeah I assumed it juiced until the function returned true at first
same
is there a way to make a card trigger as if it was played in the current hand, even when it wasn't? (via a seal applied to that card)
like how steel cards trigger, but instead of X1.5 mult, it's the values of the card itself, including enhancements and editions and such
well...
Ah, it's not a class function, my bad.
local eval = function() return card.ability.extra.ready and not G.RESET_JIGGLES end
juice_card_until(card, eval, true)
I know its right because i was looking the code for the loyalty card and it does exactly the same
but it doesnt work for me
one question, why card and not self?
why does this return 3 when i play a 10 instead of 1
what context could i use to make it only check once
you sould specificate context.before probably
Depends where you're calling it from. If you're within the card class, then self refers to the card table object, and you should use that. Otherwise i assumed the card you're working with is card, since you had that in your code
Any, just depends on when you want it to happen
It is happening 3 times because G.play is passed as a cardarea to multiple different contexts
Then card should be right, but it does juice up lol
And since you're not filtering one, it's executing for all three
is it like checking before during and after
something like that
you can check the contexts here
context.before and context.after are two of them
Before is before hand is scored, after is after
i know i have it open i just dont know how to use it sometimes
thank you for the help
it depends on what you want to do
if you want the ability to scale before the joker triggers, use context.before, if you want it to scale after, use context.after
Is there a way to make the game recalculate the scoring hand during context.before?
My joker turns non-scoring cards into Stone cards and I wonder if I can make them score too.
i dont know if they can score, but you could add 50 chips for each stone card held in hand after the jokers transforms the card
ive got most of my shit workin, but when a planet card levels up, how does it display that on the ui? i cant seem to make the ui reflect the levelling changes
is itt he generate ui im looking for in the smods api?
I guess that could be a good workaround until I learn more about lovely patches. 🤔
Im trying to do a joker that gives you money at the end of the round, but just found this on the source code, i dont know where or what it references to
i dont even now what context to use, because i guess context.end_of_round if for before the cashout tab appears
huh, there is an example mod with an end of round money joker in there if i can find the link so that should help
found it
https://github.com/Steamodded/examples/blob/master/Mods/ExampleJokersMod/ModdedVanilla.lua#L137
Trying to have a global variable referencing a specific card, but if I quit to main menu and come back the variable messes up to the the card now being "gone" per se, what's the proper way to reference a specific card?
youll have to save it to the save file
and then somehow figure out which card it was again on load
Hmph, alright, thank you!
id recommend using a variable on the card itself
!
I've been trying to make this work for a while can someone please help me?
Great idea! thank you!
and then modifying the Card:save() and Card:load() functions to keep that marker
Nice ^^
(if needed, depends how you do it)
Can't I just put it in it's ability?
what is it i need to mess with to make it so i can play more than 5 cards?
im able to select the 6, but then it just greys out the bar
i wonder if there is a way to make the text italic
config = { extra = { Xmult = 4 } },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.Xmult } }
end,
calculate = function(self, card, context)
if context.joker_main then
if next(context.poker_hands['High Card']) then
if card:get_id() == 14 or card:get_id() == 7 or card:get_id() == 3 or card:get_id() == 2 then
return {
message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.Xmult } },
Xmult_mod = card.ability.extra.Xmult
}
end
end
end
end
Trying to make a joker trigger when it's both a high card and a specific card but can't seem to get what I need in the 3rd if
trying to make it so that the 4 new suits dont appear in a regular deck but it keeps crashing
end```
does find_joker() find a joker by key or by name
Use SMODS.find_card instead
And they look by key (correction: find_joker doesn't look by key)
are there any more structured guides for how to create a simple mod from scratch
im finding the steammodded documentation hard to find my way around
ah i see. but also if i'm injecting things into the game via lovely should i just find_joker() then?
cause rn i'm trying to make it so that when a certain joker is present glass cards do not shatter at all
no, don't use find_joker
okay
okay for some reason my lovely patch isn't finding the line i want to inject into even though i literally copied it from the file >_<
make sure you're basing the patch on the dump
Mods/lovely/dump
would i be able to do a lovely patch on SMODS? because SMODS overrides how the game normally calculates which glass cards to shatter and puts it in a different file
ahoy just wondering if it would be possible to create a joker that destroys the joker to the right even if its placed in the last joker slot
so it would wrap around, destroying the first joker
I also can't just do the trick like:
local function_ref = function_name
function function_name()
because it's not something that just comes after
any ideas on this? I've been attempting a patch but nothing has worked so far
You can do lovely patches to smods since lovely 0.7.1
I don't know the specifics tho
id recomend taking a look at the stone card code (wherever it may be) from the base game
Apparently it's this #💻・modding-dev message
I don't mean scoring when it should be unscoring like a stone card, I mean scoring if you even have it in your hand, like a steel card (except instead of a specific X1.5 mult, it's just whatever the card is)
the brute force method is to just grab every possible variable from the card the seal belongs to and return it under if context.cardarea == G.hand and context.main_scoring but I really don't want to have to manually tell it what to do for every single enhancement
id look at shoot the moon's code then, use that as a template alongside baron and steal cards
the queen +13 mult joker
How to decide if a string should be k_ or ph_ in localization file?
these are extremely different, they're just looking for specific ranks in your hand and giving +13/X1.5 mult when they're calculated
the issue I'm trying to figure out is how to make a card calculating from your hand have the same effect it would when being played
seems like you would have to make a whole new event for that which im not very experienced at,
but you should find something in the steammodded github guides
Great question actually, I wonder the same thing. My best guess is that k_ is for joker popups etc while ph_ is more for general text (and b_ is for buttons)?
And which one do I put in joker desc?
Wait.
Omg. I could just make it like the changing suit/rank in vanilla.
does anyone know how I would get the value for the amount of a specific type of suit in your deck?
e.c. like the amount of hearts in your deck
Wdym put in joker desc?
I want to reference this global variable but can't find what class it belongs to to put in place of ".C." if anyone knows off the top of their head that would be wonderful
I have a joker that would create either a "Full Moon" (Moon tarot card) or a "New Moon" (Negative Moon tarot card) depending on situation.
You'd just use loc vars and give the localized key in there right?
Yep. I haven't set up their localized terms yet, though.
_phase will be change to localize("[prefix]_"..card.ability.extra.phase)
And the problem I currently have is what this prefix should be.
why does my game crash whenever i try to add my modded joker? the joker preview in the mod menu looks fine, and adding the vanila jokers work too.
Have you tried SMODS.add_card?
https://github.com/Steamodded/smods/wiki/Utility
you can do SMODS.add_card { key = 'j_para_the_train' }
Without a crash log we don't know what the issue is tho
This guy was fun to test
alr here
did you forget to save your file after modifying it
the crash log mentions add_card which you didn't use
i did save it
this code can't cause that crash then
oh wait its add_card not SMODS.add_card
So you coded add_joker, yet the game thought you called add_card...
hold on brb
no, it's SMODS.add_card
did you accidentally use add_card by itself
finally got the legendaries to pop out :D
bump
This?
I was just trying to figure out the correct syntax to reference the global variable in my files (sometimes it's G.JOKER, sometimes it's G.C. etc...) but I figured it out
Just called a different context that does the same thing
how does oops affect this
Is there a way to make a joker that can toggle between two different sprites?
Depends on how you want to trigger it to happen.
It doesn't, that'd be dumb
Changing sprite method:
I want it to have a chance to go to one sprite or the other every small blind
That'll be easy. if context.setting_blind and G.GAME.blind:get_type() == 'Small' then
alright chat how do I add permanent +mult/xmult/xchips to playing cards
i remember it requiring a lovely patch and some other stuff
but I don't know how to do this in a way that doesn't conflict with other mods
-# i mean i don't know how to do it in general
maybe this can help?
how hard is modding this game? i wanna add in GUI's to replace the current system of sliding cards
modding isn't that hard but UI mods are
the UI system in the game takes time to wrap your head around
UIs are a PITA to implement just in general, not only in balatro
still gonna be worth it since me and my friend keep ending up with 40+ jokers and i normally end up with ~200 during my modded runs
Check out Cartomancer, which might cover what you need
its also to give me something to do while someone else is working on that performance uncap mod
tho tbh i think making a game that works in lua in the first place was an interesting decision
it's a very good decision for something like this
rapid prototyping is one of the most valuable things you can do, along with staying flexible for future changes
löve2d does that fantastically
Hey, does anyone know how to make a deck load multiple of the same card?
I want the deck to have the proper amount of "Tiles"
Yes, I know there's missing ranks and the honor tiles from my deck, but i have yet to figure out how to add additional copies
"supported mods - cryptid"
crashes with cryptid
:pain:
are you on oldcalc or newcalc
cryptid doesnt work on newcalc...
old calc
dang
i was playing cryptid like 15 minutes ago
😭 Aotenjo
it took me some time to do the wordle game thing 😭
speaking of ui, gonna bump this in case you guys know the answer
“Oh man, if only there were some way to have two Ludwig Von Koopas to be present in my dearest Balatro mod”
The humble double cherry:
look at the level up function itself
tl; don't rember: there's a function to update that text until it changes again later
Gotcha, appreciate it
I'll dig through and see what I can find
i did it with this code
update_hand_text({ sound = 'button', volume = 0.7, pitch = 0.8, delay = 0.3 },
{
handname = localize(_hand, 'poker_hands'),
chips = G.GAME.hands[_hand].chips,
mult = G.GAME
.hands[_hand].mult,
level = G.GAME.hands[_hand].level
})
level_up_hand(context.blueprint_card or card, _hand, nil, 1)
update_hand_text({ sound = 'button', volume = 0.7, pitch = 1.1, delay = 0 },
{ mult = 0, chips = 0, handname = '', level = '' })
_hand is the hand you're levelling up
try that
this also includes whatever it is that actually levels up the hand
if only
I have no idea how any of this works, but it works
Much obliged, I'll test it soon, laid down for the day
Thanks a ton for your assistance
also how do i make stickers not like be tiny asf and determine their location
How would I check if the boss blind is a showdown boss? I've tried this method but no dice
just check if the ante number is divisible by 8
unless you're using bonus blinds, they only appear on intervals of 8 antes
Wouldn't work after a hieroglyph/petroglyph
yeah not really
it'd be great to just have it be a dependency and have that be the end of it
but amm has a bunch of other extra stuff that i don't want
it'd be nice to have a library mod that literally just adds perma bonus mult, xmult, xchips and nothing else
the trustable jimbo koopa:
as my own little nugget of info, I use a lot of functions from JenLib (a dependency for Jen's Almanac), but i dont have it as a dependency. I just borrowed a few of its functions
Kinda wish people remembered that libraries exist, so many libraries are created as SMODS mods when they really have no reason to.
i feel like i dont undestand what library means in the context that it's not a "library mod" and is instead a "library"
whatever it is, it'd be nice to have a library that does that
or for smods to just have it
if that doesn't exist already can someone do it
heya, what would be the best way to make a Joker where if you sell it, all probabilities are guaranteed for the rest of the round?
hey can you elaborate on what the hell this means thanks
also wouldnt it be swell if i could add things to smods
but thats not the world we live in
so tough luck
i guess i could try to set something up like smods' optional settings for amm
that way it disables irrelevant parts of the mod
which is all of it lmao
what do you mean by this
update: I think I figured it out. I used a patch to add a variable called "rig_all_probs" and then I used a hook to add a separate function that makes that variable false at the end of the round
what this mean

Can you add the mod badge to stickers
Nvm I got it
Weird that it's not a thing in smods
G.P_BLINDS

i want blueprints to also set redox to +1 how would i do that
does this need rebalancing?
That's something only testing can tell I think
The concept is very cool though, and you have two easy levers to pull to make this more or less powerful
i made a few changes to it to combat skipping
Skipping blinds already comes with pretty major cost penalties, -3 might be too much
Oops
I was thinking of changing it to only 1 or 2 since skipping both blinds without upgrading discards/hands leaves you with only one discard
Could only take away hands and leave discards alone
"double-skipping" now gives you the default hand & discard count.
when possible, which is superior
3
3
1
hooks!
my code is too low quality for smods standards
if youre code is low quality I dont know whats mine
I just have a lot of SMODS.joker tables and like 3 hooks
tbh now that better calc is out i feel kinda stupid trying to unify joker/playing card calcs before better calc
better calc makes everything so much easier
Fixed! :D
missiung an =
only one item left in the todo list...
Im having issues with the timing and the flipping of the cards, what are the ingame delays??
check basegame tarot cards 
had an idea to make it more unique and less of a baron copy
Also, does anybody know how to test out your mod jokers in a run without having to go through the trouble of actually finding it?
debug mode -> go to collection -> press 3 on a joker to spawn it
also seeing this was like dear god
Install the mod debug plus
i also have too many jokers that gives me this menu
huh didn't know about too many jokers
You just press "T" to show the menu, search for the card (consumables too) and while hovering press C to spawn it
i dont even need to go to the collection
Why is it showing +nil though? It's supposed to show +10 mult
There is a variable
you wrote #10# instead of #1#
Oh
Is there somewhere a list of all localize messages?
Balatro.exe/localization/en-us.lua
Random idea:
Giant (Common) - +30 Mult, but takes 2 Joker slots
Obviously, but I think that's fine considering a lot of flat mult jokers are
I could bump it to uncommon
Negative Giant would just be regular size which is funny
lol
new edition: double negative
but it really does nothing because negative*negative = positive
Yeah
@red osprey I see you can make joker ideas, can you think of an idea for the modded joker called 'B'? I'm making an alphabet jokers mod and I need your input
That's not a very inspiring prompt tbh
Why is the message not showing up? Im also open to suggestion to what to put in the message
Yes, because you're calling juice_up in the event
The message is managed in SMODS by the return of the calculate function
oh okay
Keep the juice_up in the event, and put
return {
message = localize('k_upgrade_ex')
}
at the end of the calculate function
so message must be in return
You can do it manually but it's best to handle it like this yes
inside it?
okay
Events define new functions, so if you use return in those, you'll only return from the event callback, and not the wider calculate (because they're called later)
That's from the return?
Also, does anybody know how to check when an uncommon joker is triggered and how to retrigger it?
i would say check baseball jokers code
Maybe something with this
im still struggling with my code
i need to get the cards in the shop, check if they are consumables and if so set their cost to 0
Look at the code for Astronomer
If you don't know where, unzip Balatro.exe in your Steam folder, and it should contain a bunch of Lua files. Open that unzipped folder in VSCode and use the search function to explore
Le Codex would be a top teacher fr
Stealing code is a very good method when doing stuff already done elsewhere
(As long as you understand what you're stealing to modify it)
i know, i already did, but the problem is astronomer does the check when it is added
mine isnt a permanent effect
it needs to be able to be turned on and off
based on a variable
What is the exact functionality you're lookign for?
Write out the ability
im trying to make it so that the new suits arent added into every deck but ti keeps crashing
here's my code local function allow_suits(self) = false end
That's not valid Lua
joker: you have [variable] free consumable purchases. Gain one at the end of every blind
If you want a function that returns false you need to use return false instead of = false
Let me just make that into my mod rq
I don't know if replacing prices upon being bought is something Balatro supports
So I guess the cleanest way would be to refund the money when that happens
But then you wouldn't be able to buy them if you are broke
yeah, someone suggested that
i guess ill just do that
now i just need to figure out that
The buy event probably happens after the item has been bought, so you'd need some kind of event that triggers either when the card is selected or right before the buy happens
Could be added fairly easily with a patch or hook into whatever function handles that
guess ill learn lovely patching now
Is this even a thing?
^
Does anyone know how I would make it so that a custom poker hand looks for one specific card
Guys how do I look at the code for jokers in the vanilla game?
like for example how would you make it only activate if I have an Ace selected
@lavish lake
loop through the hand and use the key of the card
can you show a picture of that?
card_key would be the specific card (doesnt look for enhancements, seals or editions)
there's two things here that aren't things
G.full_deck isn't a thing, it's G.playing_cards
the enhancement check should look like SMODS.has_enhancement(v, 'm_stone')
Ok I see that the way the checking if the joker is uncommon thing works, but how do I retrigger?
Return an object with repetitions = <number of retriggers you want>
Might need to be in context.repetition
Is playing_cards checking also the cards in my hand?
I need to check if the code is correct first.
Is it?
calculate = function (self, card, context)
if context.other_joker.config.center.rarity == 2 and self ~= context.other_joker then
if pseudorandom('letter_b') < G.GAME.probabilities.normal / card.ability.extra.odds then
end
end
end
the game keeps crashing and saying i need to add a "do" near the "in" in my code but I alreagy have one
assert(SMODS.change_base(c,'Flowers', nil))
end```
it's your full deck
all the playing cards you have
wtf are you doing with that for loop
what is name = 'Hearts' doing here
You might wanna script in Roblox Studio some more first...
I'm not even sure what you're trying to do tbh
im checking for hearts in the played hand and changing them to flowers
change all selected cards to flowers? change all selected hearts to flowers? something else entirely?
then you need a for loop and an if statement to check if the card is hearts
nah but genuinely, having experience in roblox studio beforehand helped me with modding a lot 💀
@frosty dock
I wasn't joking, helped me too
uhh im pretty sure you got the language wrong as a whole
its operating in some weird way for me
SMODS.Joker {
key = 'great_wall',
subtitle = "Art and idea by Toyrapple",
loc_txt = {
name = 'The Great Wall',
text = {
"Gives {C:mult}+#2# {} Mult for",
"each {C:gold}Stone card{}",
"in your {C:gold}full deck{}",
"{C:inactive}(Currently {C:mult}+#1# {C:inactive}Mult)"
}
},
config = { extra = { mult = 0, mult_scaling = 2 } },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.mult, card.ability.extra.mult_scaling } }
end,
rarity = 1,
atlas = 'ToyrappleCollection',
pos = { x = 0, y = 1 },
cost = 2,
calculate = function(self, card, context)
card.ability.extra.mult = 0
for k, v in ipairs(G.playing_cards) do
if SMODS.has_enhancement(v, 'm_stone') then
card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.mult_scaling
end
end
if context.joker_main then
return {
mult_mod = card.ability.extra.mult,
message = localize { type = 'variable', key = 'a_mult', vars = { card.ability.extra.mult } }
}
end
end
}
for index,value in pairs(table) do (sometimes it can be ipairs too)
...
end
for index = 1,10 do
...
end
thats how most for loops should look like
it should look more like this
for i, c in ipairs(G.hand.highlighted) do
if c:is_suit('Hearts') then -- is this card a heart?
assert(SMODS.change_base(c, 'prefix_Flowers', nil)) -- change prefix to your mod's prefix
end
end
help a buddy out
why are you counting cards in every context?
shouldnt it be like, G.deck or something?
you can move that into context.joker_main and additionally do the counting in loc_vars
i dont think G.playing_cards is correct honestly
so the currently mult changes no matter where you are?
it doesn't need to do that
calculating in loc_vars scares me /jk
you need to count in loc_vars so it gets updated when you look at the description
card ~= context.other_joker, not self, im pretty sure
other than that, you only need it in joker_main
oof
G.playing_cards is all playing cards you have (your full deck)
ohh
G.deck only has the cards that are physically in your deck pile right now
like putting the loop in loc_vars?
yeah, putting this block before the return statement in your loc_vars
no, basically, if you have a variable in loc_vars, then loc_txt's representation of that variable will be automatically updated if the value of that changed too
or wait, u can actually put a loop in loc_vars itself?
honestly, i didnt knew i could do that
😭 i thought loc_vars is not a loop, you tell it what variable to check then it will update if that changes
thank you Mr smods
sorry this chat is a bit full rn
the outer condition has a few issues
istg im learning everything just reading this channel 💀
you need to check if context.other_joker exists before doing any logic on it, and self is the wrong table to compare against
if context.other_joker and context.other_joker.config.center.rarity == 2 and context.other_joker ~= card then
is it context.other_joker or context.other_jokers for the second condition?
mb that's a typo, it's context.other_joker
silly me i should have seen that
ah i see, gotta ask to make sure
Cool. I want the joker to retrigger the other joker. How do I do so?
cryptid- 🗣️
whoops i didn't pick up the context for your question. that's a different context
if context.retrigger_joker_check and context.other_card.config.center.rarity == 2 and context.other_card ~= card then
you also need to put SMODS.current_mod.optional_features = { retrigger_joker = true } somewhere in top-level scope of your mod to enable it
and you'd want to return something like { repetitions = 1 }
so at the start of the code right?
wherever you want in your main file, just not inside anything else
the deck code didnt work and the suits are still on a regular deck
return false
end```
that's just a local function
how are you using it?
Ok so the code isn't working apparently...
what smods version are you using?
The one that gets installed along with cryptid
quick question, where do i check all of the optional features of smods?
just knew about the existence of that
and it seems really useful
with latest steamodded, you can use this branch of cryptid
{
retrigger_joker = true,
post_trigger = true,
quantum_enhancements = true,
cardareas = {
deck = true,
discard = true,
},
}
i need to get that into the docs
sweet, thanks
what the heck are quantum enhancements
quantum science
cards being able to have multiple enhancements at the same time
like polychrome wild card right
thats neat
thats vanilla
no
wait so, is there an example for the application of that?
polychrome is an edition
its more like polychrome negative
its like, steel wild card
what context checks would I want for increasing a card's mult after each hand is scored? I tried just context.after, which didn't work, and "context.after and context.scoring_hand" which also crashed
that would be quantum editions
thats two editions 😭
I installed the latest version but it still doesnt work
nah but i get u man, i get editions and enhancements mixed up all the time 😭
trolling worked
can i see the code again?
or is it just, set_enhancement smt smt and it just works
SMODS.Joker {
key = "letter_b",
loc_txt = {
name = "B",
text = {
"{C:green}#1# in #2#{} chance to retrigger an uncommon joker,",
"{C:attention}except this joker{}"
}
},
config = { extra = { odds = 1 } },
rarity = 2,
atlas = "alphabet_atlas",
pos = { x = 0, y = 0 },
loc_vars = function (self, info_queue, card)
return {
vars = { (G.GAME.probabilities.normal or 1), card.ability.extra.odds }
}
end,
calculate = function (self, card, context)
if context.other_joker then
if context.retrigger_joker_check and context.other_card.config.center.rarity == 2 and context.other_card ~= card then
if pseudorandom('letter_b') < G.GAME.probabilities.normal / card.ability.extra.odds then
return { repetitions = 1 }
end
end
end
end
}
This is for the joker
rn it only works with jokers via calculation
you just return a table with the enhancements to add as keys
you still have the other_joker
i told you it's a different context
oh i see, thanks
just get rid of that outer if
john sama i pushed a pr into smods wiki but not sure if its not pulled because its bad or not noticed
You mean the second one?
no, the outer one
if context.other_joker then
other_joker and retrigger_joker_check are different contexts
looks good but I'm gonna remove this change because that information is not true
I did but the game crashed, do you know why?
calculate = function(self, card, context)
if context.before and context.cardarea == G.jokers then
for i = 1, #context.scoring_hand do
if context.scoring_hand[i].is_face() then
print("face card played")
card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.scaling_factor
end
end
end
if context.joker_main then
return {
mult_mod = card.ability.extra.xmult,
message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.xmult } }
}
end
end
i mean its technically true
context.scoring_hand[i]:is_face()
damn, the colon
a row/column node need not be long or contain multiple elements
why isnt my jokers mult increasing
you didnt return anything
okay actually thats fair was too sleepy to notice that
nah its fine lol
@frosty dock
Maybe check your code compared to mine
SMODS.Joker {
key = "letter_b",
loc_txt = {
name = "B",
text = {
"{C:green}#1# in #2#{} chance to retrigger an uncommon joker,",
"{C:attention}except this joker{}"
}
},
config = { extra = { odds = 1 } },
rarity = 2,
atlas = "alphabet_atlas",
pos = { x = 0, y = 0 },
loc_vars = function (self, info_queue, card)
return {
vars = { (G.GAME.probabilities.normal or 1), card.ability.extra.odds }
}
end,
calculate = function (self, card, context)
if context.retrigger_joker_check and context.other_card.config.center.rarity == 2 and context.other_card ~= card then
if pseudorandom('letter_b') < G.GAME.probabilities.normal / card.ability.extra.odds then
return { repetitions = 1 }
end
end
end
}
Oops! The game crashed:
main.lua:1781: main.lua:1882: table index is nil
Additional Context:
Balatro Version: 1.0.1n-FULL
Modded Version: 1.0.0~ALPHA-1413a-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.6.0
Platform: Windows
Steamodded Mods:
1: Alphabet Jokers by Runtem [ID: alphabet_jokers, Version: 1.0.0]
2: Talisman by MathIsFun_, Mathguy24, jenwalter666, cg-223 [ID: Talisman, Version: 2.0.2, Uses Lovely]
Break Infinity: omeganum
3: DebugPlus by WilsontheWolf [ID: DebugPlus, Version: 1.3.1, Uses Lovely]
Lovely Mods:
Stack Traceback
===============
(3) LÖVE function at file 'boot.lua:352' (best guess)
Local variables:
errhand = Lua function '(LÖVE Function)' (defined at line 553 of chunk [lovely debugplus.console "console.lua"])
handler = Lua function '(LÖVE Function)' (defined at line 553 of chunk [lovely debugplus.console "console.lua"])
(4) global C function 'error'
(5) Lua upvalue 'gfep' at file 'main.lua:1781'
Local variables:
success = boolean: false
err = string: "main.lua:1882: table index is nil"
(6) Lua field 'evaluate_play' at file 'main.lua:1898'
Local variables:
e = nil
(7) Lua field 'func' at file 'functions/state_events.lua:480'
(8) Lua method 'handle' at file 'engine/event.lua:99'
Local variables:
self = table: 0x23134f80 {start_timer:true, timer:TOTAL, blockable:true, trigger:immediate, func:function: 0x2305f7b8 (more...)}
_results = table: 0x2346e640 {blocking:true, pause_skip:false, time_done:false, completed:false}
(9) Lua method 'update' at file 'engine/event.lua:182'
Local variables:
self = table: 0x22bdc330 {queue_last_processed:18.466666666667, queues:table: 0x22bdc358, queue_dt:0.016666666666667 (more...)}
dt = number: 0.0133257
forced = nil
(for generator) = C function: next
(for state) = table: 0x22bdc358 {unlock:table: 0x22960038, other:table: 0x229600d8, tutorial:table: 0x22960088 (more...)}
(for control) = number: nan
k = string: "base"
v = table: 0x22960060 {1:table: 0x22ebd1a8, 2:table: 0x23134f80, 3:table: 0x231353f0, 4:table: 0x23135478 (more...)}
blocked = boolean: false
i = number: 2
results = table: 0x2346e640 {blocking:true, pause_skip:false, time_done:false, completed:false}
(10) Lua upvalue 'gameUpdateRef' at file 'game.lua:2631'
Local variables:
self = table: 0x22978aa0 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x231f63e0 (more...)}
dt = number: 0.0133257
http_resp = nil
(11) Lua upvalue 'upd' at Steamodded file 'src/ui.lua:84'
Local variables:
self = table: 0x22978aa0 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x231f63e0 (more...)}
dt = number: 0.0133257
(12) Lua method 'update' at file 'main.lua:1761'
Local variables:
self = table: 0x22978aa0 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x231f63e0 (more...)}
dt = number: 0.0133257
(13) Lua upvalue 'oldupd' at file 'main.lua:996'
Local variables:
dt = number: 0.0133257
(14) Lua field 'update' at file 'main.lua:1788'
Local variables:
dt = number: 0.0133257
(15) Lua function '?' at file 'main.lua:935' (best guess)
(16) global C function 'xpcall'
(17) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 906 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
hm
Why do they still count as 3s?
I think it's because theres no underscore between the suit prefix and the rank suffix
you know what, random guess, its probably because of the chance OR the rarity
try removing each to identify the error, i have no clue rn since im pretty new to modding myself
Right, kinda wanna learn to actually make a mod. Is there a simple quickstart guide & wiki I could use, or is it simple enough to just stare at other mods & the smods source 'til I've figured out how it works?
Nope, doesn't work
oops
weird
did you add this on top of everything?
@frosty dock why doesnt this work
ye
heyo! how do you create one of those little side info boxes?
i'd like to do that for both enhancements and jokers
?
this crash is useless
it's not a talisman issue, but talisman makes the crash screen be like that
thought thats just me being bad at troubleshooting 💀
I solved my problem I was being silly and evaluating context.after within context.joker_main
Why does this happens? they turn to stone but they are white while scoring
... i disabled talisman and the mod worked
what did obs do 😭
1 frame per sometimes
oh nvm I know this issue
it's a talisman bug, it requires a card in return tables where smods doesn't
oh
went from showing hand straight to cash out
crazy
😭
well how do i make the mod compatible for those who use talisman and are unaware of the issue?
maybe try flipping the card first before turning it into a stone card?
its kinda unavoidable otherwise since stone cards wipe out the texture of the card before applying itself, i think
try adding card = card, to the return table
