#💻・modding-dev
1 messages · Page 319 of 1
Do you still want to know how to add mod badges
i already figured that out
I'm trying to retexture Mult and Wild Cards, but it keeps saying that "Enhanced" is a nil value despite it not being one, does anyone know how to fix or work around this?
It's SMODS.Enhancement
thank you
What are you trying to do?
Trying to put a modded joker between existing jokers
Example (this is photoshopped)
Only way I can potentially see this working is if I just don't make the joker with smods
I'm guessing you could modify the function that orders the collection but I have no clue elsewise.
you can probably modify the return of SMODS.collection_pool
bump.
i meant what reason balance-wise
Maybe? I just don't see it working rn
this is probably the worst way to go about trying to change the text based on where the card with the edition is
SMODS.Edition({
key = "Nitro",
loc_txt = {
name = "Nitro",
text = {
"{C:attention}+#1#{} hand #2#",
"#3#",
"Idea: BoiRowan",
},
},
discovered = false,
unlocked = true,
shader = 'nitro',
config = { handsize = 1, line1 = 'size when scored', line2 = 'Resets at end of round' }, -- triggers twice, so actual gain is double
in_shop = true,
weight = 15,
extra_cost = 4,
badge_colour = HEX("ea763e"),
apply_to_float = true,
loc_vars = function(self, info_queue, card)
return { vars = { self.config.handsize * 2, self.config.line1, self.config.line2} }
end,
calculate = function(self, card, context)
self.added = self.added or 0
-- Played and scored cards get the buff
if context.main_scoring and context.cardarea == G.play and not context.individual then
G.hand.config.card_limit = G.hand.config.card_limit + self.config.handsize
self.added = self.added + self.config.handsize
self.config.line1 = 'size when scored'
self.config.line2 = 'Resets at end of round'
end
-- If it's a Joker with the edition, buff hand size at start of round (setting blind)
if context.setting_blind and card.ability.set == 'Joker' and not (context.blueprint_card or self).getting_sliced then
G.hand.config.card_limit = G.hand.config.card_limit + self.config.handsize * 2
self.added = self.added + self.config.handsize * 2
self.config.line1 = 'size'
self.config.line2 = 'until end of round'
end
-- Remove the buff at end of round
if context.end_of_round and not context.repetition and not context.individual then
if self.added > 0 then
G.hand.config.card_limit = G.hand.config.card_limit - self.added
self.added = 0
end
end
end
})
<@&1133519078540185692>
yeet
why balance
can you make a local function within a joker to more easily call a large code block in other functions (namely set_ability and calculate)
:33< couldn't mew just put the big block of code in the joker's function?
yeah but the idea is not wanting to have it pasted in there twice
:33< right right
does anyone know where in the code id find how the deck is displayed
im trying to recreate it but i dont know how to get it just right
and im struggling to find where it is in the code
calculate = function(self, card, context)
if context.debuff_card then
return { prevent_debuff = true }
end
end
this works for preventing cards from being debuffed while you own it, but how do I make it also un-debuff cards if it's created via judgement in the middle of a round?
bump.
Is it possible to use SMODS.Joker to replace a parameter for an existing joker? I have a custom texture for my Square Joker that is not square and I want to change the pixel_size parameter.
I have tried patching out the "ifs" related to the Square Joker in card.lua that change the center position and scale, but I just end up with a stretched out version. I assume because it's taking into account the pixel size for the default texture
hello everyone. despite my best efforts, i cannot seem to find the starting point for making a mod. i've read that "your first mod" page on github, yet i still don't know what to do. anyone, lend me a hand.
how the fuck do people make UI
Is this correct?
```calculate = function(self, card, context)
local extra = type(card.ability.extra) == "table" and card.ability.extra or self.config.extra
if context.cardarea == G.hand and context.repetition then
return {
repetitions = extra.repetitions
}
end
if context.joker_main then
local keys = {
SMODS.find_card('j_rwby_ruby').key,
SMODS.find_card('j_rwby_weiss').key,
SMODS.find_card('j_rwby_blake').key,
SMODS.find_card('j_rwby_yang').key
}
local has = {}
for _, j in ipairs(G.jokers.cards) do
local key = j.center and j.center.config and j.center.config.key
if key then
has[key] = true
end
end
if has[keys[1]] and has[keys[2]] and has[keys[3]] and has[keys[4]] then
return {
xmult = extra.team_mult
}
end
end
end
}```
ok if you want a serious answer from me
i think disabling the blind makes it a bit boring
like chicot is good but it makes it a bit boring
ykwim when i said it makes it a bit boring
i didnt read the entire thing because im on mobile but SMODS.find_card("...").key doesn't do anything
find_card gives you a list of cards
Sorry, can u explain it a bit more 😭🙏
I want to make the card to first look for the 4 other jokers in the deck/hands if so it gives out *x10 mults as it's second Function
if next(SMODS.find_card("j_key1")) and next(SMODS.find_card("j_key2")) and next(SMODS.find_card("j_key3")) and next(SMODS.find_card("j_key4")) then
return {...}
end
what's the link in your pronouns field
Hi, I'm hitting some very strange behavior
I'm adding 2 poker hands, but only Sequence loads its localization strings properly, while Blackjack causes a crash whenever I open the Run Info screen
Here is the code involved:
-- hands.lua
SMODS.PokerHand({
key = "Sequence",
visible = true,
chips = 20,
mult = 2,
l_chips = 15,
l_mult = 2,
example = {
{ "H_8", true },
{ "S_7", true },
{ "D_6", true },
{ "C_2", false },
{ "C_T", false },
},
evaluate = function(parts, _)
return {}
end,
})
SMODS.PokerHandPart({
key = "seq",
func = function(hand)
return {}
end,
})
SMODS.PokerHand({
key = "Blackjack",
visible = true,
chips = 80,
mult = 2,
l_chips = 20,
l_mult = 1,
example = {
{ "S_A", true },
{ "H_9", true },
{ "D_7", true },
{ "C_4", true },
{ "H_J", false },
},
evaluate = function(_, hand)
return {}
end,
})
-- localization/en-us.lua
return {
misc = {
poker_hands = {
["aod_Sequence"] = "Sequence",
["aod_Blackjack"] = "Blackjack",
},
poker_hand_descriptions = {
["aod_Sequence"] = {
"3 cards in a row (consecutive ranks).",
"They may be played with up to 2 unscored cards.",
},
["aod_Blackjack"] = {
"At least 3 numbered cards, summing to 21.",
"Aces may be scored as either 1 or 11.",
},
}
}
}
they wait until Aiko makes it then steal it
Currently yeah
i havent added any new UI in a while..
bump
please someone just tell me why taking ownership of gold cards breaks their description and how i can fix it
Ignore my previous message, I didn't realize that hands were defined by runs
Starting a new run fixed the problem
I'm trying to change the texture of the Square Joker by using take_ownership but it's giving me an error. I already set up the atlas for the jokers, so I'm just trying to change the position for the Square Joker so it would be replaced with the standard Joker texture. In this case "pmmod" is my prefix:
SMODS.Joker:take_ownership('j_square',
{
atlas = "pmmod_Joker",
pos = { x = 0, y = 0 },
}, true)```
But it keeps giving this
i think you should just store the old function
what?
oh, i see - i should hook gold card's generate_ui()?
...does that work specifically in this context?
can i do
local oldGenUI = generate_ui
generate_ui = function(self, info_queue, card, desc_nodes, specific_vars, full_UI_table)
SMODS.Center.generate_ui(self, info_queue, card, desc_nodes, specific_vars, full_UI_table)
oldGenUI(self, info_queue, card, desc_nodes, specific_vars, full_UI_table)
SMODS.Center.generate_ui(self, info_queue, card, desc_nodes, specific_vars, full_UI_table)
end
```inside the take_ownership?
i actually got no clue about taking ownership over vanilla content
but when i takeover cryptid's hand part
i can store the old function
somewhere local
Why are you taking ownership of gen ui?
i am not
i am taking ownership of gold cards so i can add a tooltip to its info_queue without it merging into the description box like it has so far in my experience with it, wild and glass jokers when i simply append to the info_queue as part of functionality i write in a patch that adds to the end of generate_card_ui()
but it's breaking its description by returning nil where it should have the dollar value #💻・modding-dev message
hello im new someone can help me?
i know this was like 2 days ago but where can i find it im interested now
what are you attempting to do?
im learning how to install mods
Why aren’t you just lovely patching the info queue in?
how do i hook into another mod's function?
i'm trying to use DebugPlus's reroll boss function with my mod, but it can't find the function. i'm assuming this probably has to do with load order:
local debugplus_reroll_boss_hook = global.handleKeys
global.handleKeys = function(controller, key, dt)
local prevBoss = G.blind_select_opts.boss.parent
debugplus_reroll_boss_hook(controller, key, dt)
if G.blind_select_opts.boss.parent ~= prevBoss then
G.HUD_blind_tracker:reroll_boss()
end
end
Error: attempt to index global 'global' (a nil value)
are deck ids something like b_yellow or Yellow Deck?
i cant figure it out from the code, feels like they are used interchangeably...
and i dont want to accidentally use a localized id, that explodes the entire system im working on
do u have a tutorial explaining how can i use it?
there should be several tutorials online
just look up "lovely balatro injector"
sad
its saying AKYRS is nil
is your folder nested maybe
no?
idk then
i have code that does this. i tried using it at first, but it just does this #💻・modding-dev message
so far, i've been able to find this holds true for wild, glass and gold cards, but is fine for stone cards as lovely patching info_queue into stone cards works as expected - my suspicion so far is that it applies to all enhancers but stone for whatever ereason
which is probably something to do how the enhancers are handled in generate_card_ui()
figured it out, my smods were just outdated
Is it possible for me to use sprites from the vanilla game sprite sheets?
It should be
Then how would I do that
Pass the correct atlas
i think im pretty much done the game screen 👍
ignore how pretty much everything is impossible
the +12 on the king is meant for when hiker adds to cards
I guess the next question is what are the vanilla atlas keys?
can someone please explain how to create a new rank using SMODS.Rank? I cannot for the life of me get the name and sprites to work 😭
I think they're the same as the filenames
or you can search it
That seems to not be the case
It's probably using to prefix your mod prefix by default
Probably, but how do I not do that LOL
playing card jokerdisplay is very funny
raw_key = true
And where would that go
hmm actually
you probably don't need that
could probably look into G.ASSET_ATLAS for vanilla atlases probably but
that probably won't work with what you're doing
I did try doing that actually and no dice
Tbh with how many mods Include copies of the vanilla atlases I feel like this is non trivial
ig maybe just redefine the atlas for the vanilla joker graphics because i think you can do that then use that atlas
That seems... like it might get weird with other kids and especially texturepacks
how would i make a consumable only be able to spawn when youre using a certain deck?
Probably with an in_pool check
I think the easiest thing to do is just copy the relevant atlas pngs into your own mod
im talking about making a new atlas with the same filename lmao
you CAN replace the vanilla atlases via raw_key = true
Ah I misinterpreted something
My bad
im not sure if smods could just load the vanilla asset if it exists
Not sure if copying the entire vanilla Joker atlas for one use case is ideal 
Well... you could just copy the relevant sprite into your own atlas if you just need one
But yeah ideal and what works seem to be different things sometimes
I could do that yes but I'd much rather use what's already in the game. Totally get what you're saying lol
are you trying to use a sprite for another kind of object? (like a tarot for a joker)
No, I'm using a Joker for a Joker
then the joker atlas should be the default one lol
I'm stuck in the past where an atlas was a required thing LOL
That did it, thank ya
now to prevent it from looking tiny when undiscovered lol
1 pixel joker
Accidentally made a Hermit machine gun
bump
Is there a way to hide this?
@red flower I'm reworking Rebate Tag. I probably should get a new name
which mod could be the culprit here?
crash happened when i hovered over a joker from TOGA's Stuff but not sure if that's the one, it was pretty stable so far
He is here
Thoughts?
how do you check the discards used throughout the whole run
btw the number that it's being divided by is the starting hand count per round
not sure why this is happening, did i miss something?
If it's just for your personal use, you could change line 40 in Steamodded's src/ui.lua file from
text = MODDED_VERSION,
```to
```lua
text = "",
``` I'd discourage you from making this change in your own mod though, it's useful information for users to have
Tried but no dice
Are you sure you edited the steamodded being used by your game, and saved the file after changing it? I'm quite sure that will work
What did you change the line to?
i like the idea
I’m worried it’s a bit too strong but it’s also a Tag 🤔
im the worst guy to ask for balancing my mod lets you make infinite tarots by ante 2
I’m thinking maybe I could restrict it to only show up on later Antes
I’m not sure if Tags have these kinds of restrictions
Or maybe nerf it to 1 copy
Or stop it from copying Spectrals
-# or stop it from copying cards from packs
a space, a blank character, and nothing
all crash
how would i go about replacing/editing vanilla stuff
Did you try #💻・modding-dev message ?
tags have ante restrictions yeah
How does this work with Wild Consumables?
/j
calculate = function(self, card, context)
if context.debuff_card then
return { prevent_debuff = true }
end
end
this works for preventing cards from being debuffed while you own it, but how do I make it also un-debuff cards if it's created via judgement in the middle of a round?
Iterate over cards in hand and undebuff?
today i learned you can just slap joker code in a boss blind and it will work
what would that even do
the boss blind would just do what the joker would do
hey so i've never coded before, but i really want to surprise my gf with a Balatro text replacement mod we've joked about
how would i go about making a text replacement mod, and then giving her a way to download it?
If y'all aren't interested in other balatro mods is almost suggest just editing the game files directly
in general anything thats extended by SMODS.Center can have a calculate function
yeah, but that'd kinda ruin the surprise, yknow? like, how would i make something where she downloads it and it overwrites the files so one word changes to another word?
like, that mod Balagay that changes straights to gays
how does that work?
Well you could just switch out the exe with a pre-modified one, if you were to edit the files directly. Do it elsewhere and then switch it out at the right time
But of you just wanna be like 'here's a cool balatro mod I found' then yeah you can do it the normal way
You basically just have to make a new localization file
hmm, okie
what would be the best way to trigger something if a card with a custom enhancement is destroyed?
like is there a context to see if a card is being destroyed that I can call in the calculate function?
Iirc is as simple as installing smodded and lovely the normal way and then making a 'mod' with just a steamodded header and a new en_us.lua included and it replaces automatically
But there's others who know a lot more
but how would i go about making a mod?
like, in the most basic sense
like how would i take a changed file and make it into something someone could download
again, very sorry, i've never modded before so im very in over my head
That part's easy, just put it on github
ah, okie :3
So you need to first install lovely and steamodded. There's a guide here: https://github.com/Steamodded/smods/wiki
no yeah, already got those, plus Balatro Mod Manager
how do you check the discards used throughout the whole run
https://github.com/Steamodded/smods/wiki/Mod-Metadata
You need to create a new folder in your mods folder and make a json Metadata file for it
And then from there, make a localization folder with an em-us.lua file in it
how do i make a json?
Use the en-us.lua file in the actual balatro exe and edit it with your new text
It's just a text file formatted as shown with a .json extension
You wanna turn off 'hide known file extensions' in windows explorer probably top make this easier
ok so its like a .txt file but with an overlay from an extension? how do i access the extension
Just set notepad to all files instead of text files on the save dialog and type it in yourself
ah okie
thanks
Np :3
:3
@brisk rose sorry to ping again, but ive got another question
so, prefixes... how do i get a prefix? do i just like, type in anything?
it says its gotta be unique
Yeah just make it whatever. Just not something another mod would likely use
okieeee
should i use a copy of it?
why can't chicot disable the effects of this blind
Yeah start with a copy of it
It's in the balatro exe (open it as a zip)
calculate = function(self, card, context)
if context.debuff_card then
return { prevent_debuff = true }
end
end
why does this only work if you own it before a blind that debuffs cards and not if it's spawned via judgement during a blind?
Like drawn cards still get debuffed?
As I said to rebuff already sevuffed cards I think you need to iterate over the hand
But I'm just guessing to be fair
if you go into a blind like the head with it it prevents the cards from being debuffed like it should
if you spawn it during a blind it doesn't undebuff any cards at all, not drawn ones, not generated ones, nothing
iterating over the hand or deck i feel like is definitely not the best way to do it
i feel like there's something easy that i just don't know how to do
Do you mean it doesn't undebuff them?
yes sorry
I mean... if a card is already debuffed, which I think is often determined at the start of the blind, I see why 'prevent' doesn't work. Which is why it feels to me that just going through every card and seeing it to not be debuffed is the logical way... I haven't done any proper moddding myself though and my coding experience in general is limited to a couple classes in college years ago
because if i do that the only way to be sure it works is do it every frame which is very excessive
bump
So, I'm effectively calling Game:start_run in order to start a new game. How could I figure out when the game is fully set up and I can access i.e blind info?
If you make sure everything is undebuffed when you first get it, shouldn't the prevent_debuff make sure they don't get redebuffed?
I think you should be using set_bound instead of calculate and you don't need the contexts?
You aren't doing it like most people seem to do blinds
https://github.com/Steamodded/smods/wiki/SMODS.Blind
Here's the documentation in any case
yeah it's essentially just modified joker code
Idk if using calculate directly on blinds is supported or emergent functionality ngl
I'm any case you ought to be able to use the same function regardless whatever you may need to call it or however you need to format it
how would I have a joker debuff the joker to the right of it?
replaced calculate with set_bound and now it doesnt work at all
Set_bound or set_bind?
I made a typo
oh i see
You should really read the wiki thing I sent, lol
i did, just not being very smart right now lol
what exactly is the area parameter in a consumable's use function?
Pfft that's a mood
dammit
is there a way to keep my context function because im pretty sure its quite necessary
but it seems set_blind doesnt work with it
Check gameplan from bunco
oh sweet thanks didnt know about that
I mean... other blinds don't seem to have it
But I'd ask someone who knows anything about coding (not me)
It's fairly outdated, but you can use http://lshtech.github.io to spot check if jokers exist that might do similar things and where to find them to reference them
thanks a ton again
Np :3
the best resource ever would be a whole list of vanilla effects converted to the easily readable smods version
i wish something like that existed because the balatro source code is damn near unreadable
It'd be a nice resource but tbh many nod joker effects are different enough where it wouldn't be that useful a lot of the time
anyone know if SMODS overrode the eval_card function?
I'm not at my computer rn but I'm stuck on a bug and have been trying to think through it all day
basically I want to manually score a card in the most mod-friendly way possible, but I was trying to use eval_card and it just wasn't working for me
bump
how do you check the discards used throughout the whole run
really dumb solution but i figured it out lmao
I presume it's the same as used hands and there's a tag for that so I'd check that
...how do I stop info queue from going down the chain of command
Do you really want to stop it? Tooltips exist for a reason
It's kinda pointless for base game stuff sure, but modded stuff you might need the info
Even if it looks crappy
what card the fool is making isn't important for the joker's tooltip, it only matters when it's on the fool itself
instead of adding the center to the info_queue, try { key = 'c_fool', set = 'Tarot' }
this works, thanks
that tag checks for unused discards though
There's a tag that checks for used hands though. At least I don't think that's a mod tag
If it is that'd make it even easier to study though
Oh wait it is isn't it
Ortalab
Ortalab cool
is there not enough quote text in this one
Nvm that's unused too
I'm thinking Handy tag
From the base game
what context am i missing here?
it says that context.open_booster is nil and i dont know why
:33< the ability of this is gonna be "copies the ability of food jokers" if you would like id appreciate it if you gave me the names of food jokers in your mod or mods you play so i can make them compatible!!
GOATED
added some visual + audio feedback for my symbolic cards
note: after recording this i made it so the sounds vary in pitch, i just don't feel like recording again
could also have a function that can be openly called that expects whatever your mod needs passed into the function and have that go wherever you need it
how do you add more deck colour options? i see in the api how to add deck skins ala friends of jimbo but nothing about stuff like LC/HC
:D
can you change the rate at which showdown blinds appear?
oh i’m making something really similar using ancient runes!! :3
i love how yours came out
how do i modify vanilla stuff
lovely patches or taking ownership
lovely patch ,,,,,
Tbh I wish steamodded wpulda leaned more heavily into making lovely patches as unessacary as possible
how do i take ownershiop
Lol best me to it
I be quick like that
i was trying to get chatgpt to convert the jokers into json for me and made me the "cosmic egg" joker instead of giving me what i want
its a legendary
bro is hallucinating so hard rn
average chat gpt moment
MF JIMBO!??!??
bro is using chatgpt for silly card game modding 💔
balatro coding is hard sometimes chat gpt helps more than asking in here and not getting a response lol
but other times its completely useless
honestly, mood 
speaking of, still having my gold card issue
remember to always say thank you to cost openai more money ❤️
but hey chat gpt made a working shader and i dont understand shaders at all so i take this as a win
What's the problem?
why the !?
I added on because I'm surprised CGPT was able to do that
i mean it took multiple attempts
chat gpt also kept thinking i wanted terrible art and its like no chat gpt i dont want ai generated images of what a good shader might look like i want shader code 💀
i can't append anything to the info_queue of enhancements other than stone card, it just merges whatever tooltip i try to add, into the description, ala this #💻・modding-dev message
and this seems to be the case for me for every enhancement so far except stone
i was able to overcome it with wild and glass by using loc_vars in take_ownership, but it doesn't work for gold because there are variables inherent to generate_card_ui() that break whenever i try to append to info_queue via loc_vars or generate_ui() in a take_ownership
so unless i can fix the broken var in gold card's description, i have basically no method to add a tooltip to gold cards.
You specifically asked for a card shader? 😭
"this is the right color but you just made the card orange it needs transparency" oh so you want me to generate a picture of a card on fire??
I wish I could help but this is some advanced stuff I don't know my way around. Best of luck
need to figure out how shader code works fr chat gpt is very bad at it lol

chat gpt be like
LMFAO
so uh yeah i guess dont ask chat gpt for help with shaders it will repeatedly try to generate imagines instead of help you
how do I level up a specific hand
help
like i know shaders use code and all that but like why can't editions just be like enhancements man let me set an edition to like a gif that just plays that would so much easier
we can animate souls and jokers with long sprite sheets why can't editions be like that local thunk
local thunk was secretly the Fuck You Guy
fr everything else is like so simple you just set it to a picture and you're done or make a sprite sheet and cycle that
but yeah i dont know anything about shaders so personally i wouldnt touch them but if you want to make a shader you're probably best off... learning how to make shaders
but editions are like nah you gotta learn a whole other language to make one
In your level_up_hand call, the second variable passed in is the key of the hand that gets levelled up
or you ask chat gpt like 50 times and it finally creates the color orange
i don't know what that is
guh
i have neer done this before
I'm surprised honestly lol
help
In that case you'd call both
level_up_hand(card, 'Straight', false, 5) and level_up_hand(card, 'Straight Flush', false, 5)
Yeah lol
the boolean in the third field is just an instant flag
So change that how you wish
I'm pretty sure that is normal.
np
It's because your selecting the cmd
still upset that changing balatros name can't complete discord quests that would be such a funny way to do them

like if you do that discord will say you are playing it but it wont count for quests
I think you'd have to change the actual name of the exe for that to work
i did
yeah i wanted to complete my quest by playing balatro but it didn't work
balatro discord quest when?
Honestly not out of the question
gimmie that jimbo avatar decoration it'd be fire
Though depends if Thunk wants to shill the money to Discord to do it
like come on discord im making a fortnite mod for balatro balatro is basically fortnite
what does that even mean
Right click on the cmd
what is "the cmd"
The black window with a lot of text in it.
ok
im confused
it says my json is invalid or whatever and doesnt load the mod and doesnt have it in the mods list
its in the mods folder and there is no ignore file in it.
I did not just magically make that happen
welcome to "the cmd" fuck your mod haha yes
your json file is made of bad
i dont see how this is bad
hey guys?
hi
i feel like this is an extremely inefficient way to do this but im too lazy and dumb to find the better way to do it
I have to make L now....
am i tweakin or are those last two elseifs the same
oh and you're missing "and"s between the pities in the conditionals
yeah i just realized that
the one at the bottom was just residue i forgot to delete it
ARE YOU ALIVE
Can I have help with making L or no?
I don't wanna be that guy but we can't hold your hand the whole way through developing a mod man
?
hey guys can anyone help with something
I'm trying to make a texture pack as a mod but I'm totally new to lua and need help
I want to change some of the text in the game like renaming the jokers or suits and I also want to know how to add more spritesheets than just the regular 52 cards to this starter LUA file i found
I think I should be able to do the rest sorry if this is the wrong place guys
That starter file looks incredibly dated. Wow
Malverk is a lot more friendly to less code-savvy folk
wait does malverk just help you with making the textures and text files and stuff? from what I heard you had to make a pack first and do even more coding to make it compatable
like is it its own editor?
No.
Not really. It's a mod that has a lot of modular tools to help make your process easier than just straight code (from what I know)
There are examples to go off of in the mod listing
I don't know how to make part of the code for L. Really, I don't.
4 days ago I was informed from my github's issue section that this is a thing:
And I'm worried that other enhancements have got similar effect-visual desync problem.
Where in the code can I look into to find such thing?
x_mult, xmult and Xmult all are interchangeable. x_mult_mod and Xmult_mod also count, but those don't produce a message by themselves. Search for SMODS.calculate_individual_effect definition in smods/src/utils.lua.
I seriously don't know.
-# I frankly do not have context to really process what is desired for your Joker.
+30 Mult if last hand scored under 25% of the blind requirement
im getting this whenever my pack is being opened idk why it crashes but anyone got idea?
alrighyt i fixed my stupid ass mod
json
file
now my joker is broken
how do I make this also have Xchips
whats their xchips
u have tailsman?
Isn't xchips in smods now?
im not sure it might be
97.3% sure it is
SMODS had integrated XChips a while ago.
noice thats hype
HOW DO I ADD IT?
like another config line?
xchips = number
then do what u want with calculate function
so like this
sorry to reask but curious to see if more pro coders know this issue
this was errror i know its something with how set is being read that inst matching up
if G.GAME.current_round.hands_left == 0 and hand_chips * mult < G.GAME.blind.chips*0.25 then?
@hoary crown do like this
what is power
that was... something
oh thanks.
why do i need that?
This is a booster pack anyway, why the area?
return create_card("Snack", G.pack_cards, nil, nil, true, true, nil, "mills_snack_pack")
I'm as confused as you guys.
idk im trying to figure out how i can basically call the card in it. better way?
u dont.. im just showing an example lol
That table must be return-ed.
ok
missing some closing stuff there
line 504?
Just return { mult = card.ability.extra.mult }.
why doesnt just this work?
You're creating a card for the booster pack, G.pack_cards is expected there.
what?
oh
thats what i had og but i think my key is off would i need prefix?
...there may be an extra end below the return?
crazy joker
cool
For the key_append, no, not really.
YOU.
HOW DO I MAKE THE THING WORK
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
imma dm u so i can show u what i mean
Just return the two values in a table. Why are you capitalizing the X, anyway?
xmult and xchips.
vs doesnt do anything either.
can u be more specific in what u mean by not working?
this will help u
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.xmult, card.ability.extra.xchips } }
end
Individual means trigger once?
.individual is for a given playing card.
I want the joker to just trigger once.
HOW.
When?
after the jokers are triggered?
just do what matches ur function
triggering once after all other jokers should be context.final_scoring_step
individual happens once per card, so that will happen way more than once
am i tripping or does this not create a joker from the uncommon rarity pool
im pretty darn sure blueprint isnt an uncommon
I’m pretty sure the 1 is making it a rare joker pool
oh is it like 0.9 0.8 something
prob use this instead
i thought it was like 1 for uncommon yadda yadda
Damn you beat me
:3
Belis the speedy one for once lol
question, i have a joker that creates a planet card in context.before, but newly created planets aren't taken into calculation by observatory, any idea?
Is there a way to make the game think a joker is a Voucher/Spectral/Tarot/Planet and not a joker?
i wouldda expected that to emplace it automatically but i guess not i guess
SMODS.add_card emplaces automatically.
well i must be doing something wrong then
check observatory code
how do i make it so that a consumable can only be used where a hand is drawn (whether that be when you open a spectral/arcana pack) or just in a blind
actually i think i found my error, my card creation was in an event
so probably delayed, will try taking it out
Look at immolate.
ty
is there a context before context.before? but after hand selected has been pressed play?
Why?
cuz i have a cardeval text i want to appear before card creations, but despite putting it above within the same context, it seems to appear after the cards are created
if i were to move the card creation to joker_main, then the planet created wouldnt be taken into acc by observatory within the hand (i think?)
context.modify_scoring_hand is called before context.before.
thanks will try it
-# At least, I think it does.
mhh its called before playing
it's called when selecting cards
welp will stick with the context before and the message appearing slightly after the creation, a bit underwhelming but at least it's functionnal as for now
You wouldnt be able to get a message to appear before the planet of you want it to be taken into account by observatory due to how calculation and events work
that's what i suspected, but even if i put the message in an event before?
Yup
okay, thx for the answer!
Because you want it to work for observatory you have to create the card not in sequence of events and there’s no way to get a message to display in that way
-# Not even a patch of a custom context before the before would work?
How do you even know if your messages fail to send? They're already grayed out
¯_(ツ)_/¯
Not to respect observatory, no
Fair 'nuff.
SMODS.Joker {
key = 'anjo',
loc_txt = {
name = 'Anjo Nala',
text = {
"{X:mult,C:white}X#1#{} mult after triggering",
"joker to the right 5 times",
"{C:inactive}Currently #2#/5{}",
}
},
rarity = 3,
-- 1 common, 2 uncommon, 3 rare, 4 legendary.
atlas = 'ModdedVanilla',
pos = { x = 0, y = 0 },
cost = 5,
blueprint_compat = true,
config = { extra = { Xmult = 3, check = 0 } },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.Xmult, card.ability.extra.check } }
end,
calculate = function(self, card, context)
for i=1, #G.jokers.cards do
if G.jokers.cards[i] == card then
my_pos = i
if card.ability.extra.check < 5 then
if my_pos and context.cardarea == G.jokers and context.other_card == G.jokers.cards[my_pos + 1] and context.post_trigger and not context.blueprint then
card.ability.extra.check = card.ability.extra.check + 1
return {
message = " " .. card.ability.extra.check ,
}
end
if card.ability.extra.check == 5 then
card.ability.extra.check = card.ability.extra.check - 5
return {
message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.Xmult } },
Xmult_mod = card.ability.extra.Xmult
}
end
end
end
end
end
}```
More readable joker description:
X3 mult after triggering joker to the right 5 times
Currently 0/5
Three questions here
1.card.ability.extra.check = card.ability.extra.check - 5
doesn't deplenish itself, how should I handle that
2.If joker to the right is going to trigger multiple times check
charges up immediately, is there a workaround for that?
3. Xmult_mod = card.ability.extra.Xmult adds mult instead of XMult for some reason, confused because that's literally how Cavendish works in the example jokers mod
Why did I format it like that
That's better, I think
Put it on the profile.
where would i check the code to do that?
G.PROFILES[G.SETTINGS.profile].variable = value
- that check looks to be within the check that it's < 5.
- not sure what you mean by this, perhaps a video would make it clearer?
- this wouldn't be adding mult, but it also needs to be within a seperate context check I think from your description
Oh, I did misplace one end... I'll change that and then elaborate more, ty
Shouldn't it just send as an embedded text file then?
We like those here
It didn't
Huh that's weird if you're on desktop
Okay somehow that solved all three problems at the same time, but now I'm not sure how to set check to zero since if I do it before return{} it would just prevent X3 mult from happening and I don't think that I can do that inside instead
If you add a "func" entry into the return, you can put a function there.
Ah
when do you want it to reset?
when it gives the xmult?
if context.joker_main and card.ability.extra.check == 5 then
card.ability.extra.check = 0
return {
xmult = card.ability.extra.Xmult
}
end
just use this
assuming you want the xmult to trigger in the standard place AFTER it has been primed
Wanted to say that this doesn't work but when realized that after sending my code I changed every Xmult to x_mult to check if that was the issue lmao
It works now, ty!
is there an easier and more efficient way to write this code?
if context.indivudal and context.cardarea == G.play then
i = i +1
if smods.has_enhancement(G.play.cards[1], 'm_mult') then
return {Xmult =card.ability.extra.Xmult, colour = G.C.MULT, card = G.play.cards[i]}
end
end
Why are you checking if the first card has mult?
i thought this would check if A card has mult
What does your joker do?
gives mult cards an additional effect of 1.5x mult on trigger
Anyone know if you can make a pokerhand that requires enhancements, trying to create "Stone Five"
if context.individual and context.cardarea == G.play then
if SMODS.has_enhancement(context.other_card, 'm_mult') then
return {
x_mult = card.ability.extra.Xmult,
colour = G.C.MULT,
card = context.other_card
}
end
end
ah okie so does context.other_card check that specific card?
This is how I did it: https://github.com/Somethingcom515/SealsOnJokers/blob/main/main.lua#L1206
@daring fern can you change localisation for base game items in an add_to_deck?
This should help
Side note: writing out every single vanilla joker as an enhancement is an effort that should not go unseen
Thats commitment
Rise.
What do you mean?
like if I wanted to make mult cards called smth else whilst a joker is held
You would have to take ownership of it probably.
shittttt okay I'll just do that!
what do i even change here so it doesnt get fucked up cuz of talisman
to_big(mult)???
Would it be possible to automatically make a joker for every planet?
What does the "parts.pokerhand" mean?
Hello how are you
I'm making non-joker jokers and the planets are all the same except the hand type and name and key and atlas and pos.
-# to bepis
@manic rune
im gud, thanks :p
hmm, u could try running a for loop through G.P_CENTERS, and smt to grab only Planets (i forgot)
then put SMODS.Joker in there and do some stuff, idk :p
-# very useful i know
Which palette looks better? (Those lines are stitches, in case anyone wonders.)
that red looks really red for me, if that somehow makes sense
i’m gonna add the devilsknife as a joker
it’s gonna be like the ceremonial dagger but for chips
1
10x sell value
btw does anyone know if there are filters or something for aseprite to get the same kind of saturation as in game?
What do you mean by that?
note that the crt shader still does crt shader things even if its set to 0
yeah the game changes the colors quite a lot than what they usually would look like - if you check the source code and copy paste the hex color code, e.g. for the base red, you can see it's completely different
or let me phrase it differently: where in the code is that color correction happening? is it shaders?
Tbh I have never kept an eye on such difference before, this is a TIL moment for me.
it's the crt shader
alright thanks (so the CRT.fs?)
Is there a way for this to work with modded planets aswell?
I've been playing with a patch that removes the crt shader for so long that im used to the true colors
i only have it because my pc poopoo
and that i also use mobile from time to time
i'm gonna research if i can somehow turn the color changes in the shader to an icc profile
Also why is this not working? I printed the keys of the jokers with this in game and it had a value.
it should account for all planet cards, but what im worried is that it might run before all the planet cards are loaded in
i
i
isnt that just that one joker
permanent troubador
but imo, yeah, i like hand size
also easier painted
They all work except the localization.
you could try rerouting the set for that probably
via loc_vars
you can set them individually per joker you make
Anyone know why this is crashing
I patched in the enhancement thing in the examples.
could i make a function that replaces base game blinds with my ‘upgraded’ base game blinds
i wanna do something where the difficulty steps up
i just realised I'm in dev
v is the card's value
My bad, How would I fix that?
What does this mean?
Do you have a lovely.toml in your mod folder directory?
is there an example mod of how to make a tag? I'm rly struggling...
context.buying_card is when buying anything from shop;
context.open_booster is when buying and then opening a booster pack;
then which context is when taking a joker from a buffoon pack?
Dont believe so, my mod just has its main.lua and assets
Make a file called lovely.toml
Is there a function that happens when all mods are loaded?
Sorry makin tea, be back soon
Back and made this file
...how can we check which bosses were beaten at least once?
Put this in it ```lua
[manifest]
version = "1.0.0"
dump_lua = true
priority = 1
[[patches]]
[patches.pattern]
target = "functions/UI_definitions.lua"
pattern = '''
local card = Card(0,0, 0.5G.CARD_W, 0.5G.CARD_H, G.P_CARDS[v[1]], G.P_CENTERS.c_base)
'''
position = "after"
payload = '''
if v.enhancement then
if G.P_CENTERS[v.enhancement] then
card:set_ability(G.P_CENTERS[v.enhancement])
end
end
'''
match_indent = true
times = 1
You could check in G.GAME.defeated_blinds
Rise.
Still crashing
Which is line 35?
Where did you get this code from?
I cant really remember, its from one of my jokers that effects steel cards. guessing it doesnt work the same
func = function(hand)
if #hand < 5 then return {} end
local ret = {}
local stones = 0
for i = 1, #hand do
local v = hand[i].base.value
if v then
if hand[i].config.center.key == 'm_stone' and stones < 5 then
stones = stones + 1
table.insert(ret, hand[i])
end
end
end
if stones >= 5 and #ret >= 5 then
return { ret }
else
return {}
end
end
Or is there a different way to get future planets?
So no crash but it still does nothing
Show your code.
It should be parts.prefix__stone5
Do you have these in your localization file?
Something like this? ```
return
{
misc = {
poker_hand_descriptions = {
scdrl__stone5 = {"5 Stone Cards"}
},
poker_hands = {
scdrl__stone5 = "Stone Five",
},
}
}
Yes, but like this: https://github.com/Steamodded/smods/wiki/Localization
Wrong link.
Im so lost, what am I doing wrong here. I read the documentation and am now using the skeleton
Show the rest of your localization file.
Try copying the whole thing in there.
whats the name of the file
go beyond!
en-us.lua
Is it in a folder called localization?
oh, the poker hand is stone_five
not _stone5
I'VE BEEN USING THE PARTS KEY NOT THE HANDS
the Bulwark in question:
though it's probably fine for multiple mods to add the same thing
nobody add 5 gold cards thats my thing now
The other mod adding harder version of vanilla Blinds:
five of a gold kind
But yeah multiple mods already add the same things
yeah repeats of existing content is fine
if anything modpack glue should add Reprint which is just blueprint again
Toasted Wigeon plays 5 stone of a kind, asked to leave the casino
how do i make a joker effect consumable sell values?
From Credit Card code of source...
if self.ability.name == 'Gift Card' then
for k, v in ipairs(G.jokers.cards) do
if v.set_cost then
v.ability.extra_value = (v.ability.extra_value or 0) + self.ability.extra
v:set_cost()
end
end
for k, v in ipairs(G.consumeables.cards) do
if v.set_cost then
v.ability.extra_value = (v.ability.extra_value or 0) + self.ability.extra
v:set_cost()
end
end
return {
message = localize('k_val_up'),
colour = G.C.MONEY
}
end
this gets triggered at the end of round, but i want a passive effect
Define "passive".
effect is there as long as joker is present
...sounds like something that is done by add_to_deck and remove_from_deck respectively.
alright, how do i use them?
what's the exact effect?
the joker has bonus for selling consumables, but consumable sell for 0
you would need to modify the cost every time in context.card_added probably
or maybe in selling_card but that wouldnt update the value in the sell button
you'd hook set_cost to check for the presence of that joker and whether a consumable is in your possession, I reckon
that's how I go about it for the Ocean's 11 joker
might be a problem when the joker is removed
You could store base value when the joker is present then run a for loop in your base values table when you sell the joker
To update costs back to old values
If the joker is removed, you'd force it to reset everything, yeah. That's how I've set it up on that joker as well.
yeah but doesnt it still count as owned in remove_from_deck?
You can check for context.selling_card where the card being sold is the joker
Then run reset loop
What color is used for probabilitys
i mean you can do it in remove_from_deck, my problem is that i dont like storing all the old values haha
green
Ah fair
C:green?
yeah
toight
question, is G.GAME.kino_oceans_11 defined anywhere or can i put anything after G.GAME. ?
cause i copied the code into my joker with a different thing and it doesnt work
G.GAME.kino_oceans_11 is only defined on the joker itself! If the game checks for a variable in G.GAME and doesn't find it, it's the same as returning false
You can define game specific variables anywhere you want
And yes you can put anything after G.GAME.
Just make sure you’re defining it after the game starts running (I made that mistake a few times)
did you also copy the hook of set_cost?
Show your hook
as in?
For set_cost
aaah, yeah, you're missing some additional code, haha
goog morning
Goog morning to you as well
kino_oceans_11 is a custom variable, so the cost_function doesn't inherently know what to do with it.
-- Booster:Set_cost hook for oceans_11
local b_sc = Card.set_cost
function Card:set_cost()
-- print("entered: " .. (oceans or ""))
b_sc(self)
if (self.ability and self.ability.set == "Booster" and G.GAME.kino_oceans_11) then
self.cost = 0
end
end
in kinofunctions.lua, there's this snippet of code, which runs the base set_cost function, and then afterwards checks if it's a booster pack (as that's the specific use case of my joker), and if that variable is set
hello besties
in your case, I'd actually opt for not setting a boolean like G.GAME.kino_oceans_11, but instead making it a variable with the number you wanna alter the cost by. That way you can have a bit more control over it, and you also don't need to access the joker's data itself. Only issue with that would be that it'd not actually be perfectly compatible with a mod like Cryptid which allows a joker's power to increase.
Yo yo Dilly
how have you been ice, faring well?
dealing with some chronic illness issues but that's just an excuse to stay home and work on Kino, I guess
im sorry to hear, i hope you recover well enough soon since its chronic
Take care Ice
ice is my goat nothin keeps him down for long
Planet card for the Stone Five
I'm currently also playing around with how to rebalance my archetype for Dune content, which is tied to 'least played hand', as I'm realizing it's really just a concept that does nothing but level up your straight flushes, haha
you could instead of making it look for 0 make it look for the least played hand that has been played at least once
Ooooh, that's good
adds 50 chips, which is the same as adding more stones
your least played played hand
yes
I did this for a spectral card
how do you reckon i check for the first and last scored card of a hand
not like, the first and last entry in the hand list
but like the card that actually scores
context.scoring_hand[1]
context.scoring_hand[#context.scoring_hand]
Could run loop and skip debuffed
And check new table with same mechanic as this
but also if a player is putting a debuffed card as the last one you should punish them
no but see
that's like appealing to me
cuz like a big hinging point of my pack is that i want to encourage and reward players for doing stupid plays you wouldn't do in any other situation
discarding wilds on a flush build, running both a stone and glass based deck at the same time, etc
How does one retrigger all possible things?
presumably return a retrigger with every possible thing?
like make a list that grab, "every single thing"
probably more like run a loop through G.play then G.joker then G.hand etc and adding them all to one big list
then return a retrigger for everything in that list
-# And G.deck and G.discard.
probably
so true
honestly grab G.playing_card to be safe
that'd be funny
Also how would one shake the game window?
When something gets retriggered when retriggering everything?
Also how would I display an Again! message that covers the entire screen?
Interesting
This is a really neat solve. Works well. Just gonna make 'Least Played' a glossary term that actually indicates that it only counts hands that have been played, for clarity
glad i could be of help :D
i took a break from my development because i was runnin into a wall so i played minecraft instead
but im starting to feel the itch to resume
Hello Dilly it’s been a while
How are you
i think it'd be fine
I hope you’ll feel better soon Ice
cuz like to me, you can absolutely get away with saying Least Played and Unplayed are two different categories
upgrading your Least Played hand would be the hand you played the least
but like a hand with 0 players would be an Unplayed hand
Hi vic!
im feelin alright, went through a bit of a rough patch mentally for a bit but im recoverin well
i hope you are also well
which i think would also be an interesting concept
I've seen three videos of people playing my mod and it's radicalized me, as far as supplying specifying info goes, haha
like intentionally not playing a hand just so you can scale it hugely instantly later
investment
How so
I do think if there is content that interacts with 'unplayed' hands, you wouldn't need to per se explain least played
see i dont usually run into the issue of 'oh im gonna not play this hand to save it for later'
i more often ran into the issue of 'well ive played too much of this hand to switch now'
literally Obelisk gameplay
obelisk has gameplay?????????????
Rise.
obelisk is the most fun rare joker to use
I do like the idea of cards interacting with unplayed hands as a mechanic. Would you mind if I used it? I might make another Dune joker that gives +mult for each unplayed hand
obelisk is the pivot joker
obelisk does not need to be the pivot joker
You people use Obelisk
no but thats just cause i suck at the game
skill i
skill u
Part of it is from me making pokemon fangames back in the day and being of the opinion that fan projects and mods often need to communicate slightly differently from mainline stuff, because people play them more casually, and are less prepared to learn systems in-depth. And that also causes things that aren't super clear to not be interacted with as much.
The other part is just that I noticed content creators, at least, but probably people generally, be quickly confused by new mechanics, and have questions, which more information doesn't hurt with. It's a lot easier to engage if you just tell people what things do, rather than have people learn parts of a mechanic due to interacting with it over and over
i struggle with deciding between too much and not enough information myself
i have also gotten idea from unplayed hand card
+2 dollars at for every unplayed hand
Make it optional, is the best middle way, I think. Victin's press a key to show information system's the way to go there
I mean, throwing too much information at people is one thing that makes mechanics harder to learn
i make it a config option too
The solution is, of course, to have simpler designs
booooo
roffle mod
look inside
pho-
yea i need to do that at some point
buttons my detested
What context is for "when acquire a joker"?
i still dont understand this
context.card_add and you test if it’s a Joker or not
Also, mods have the issue of people not understanding a concept immediately (which is normal), making an assumption about what it does, and then assuming it's not actually working due to the mod not being made properly
thank god i was able to vote
What don’t you understand?
why is it needed in smods. i dont think it's hard to implement in each mod and any keybind will always clash anyway
yeah
The secret is that this isn’t exclusive to mods. Marvel Snap has changed how cards work to either be less confusing or to conform to players’ perceptions.
To a player, unintuitive behaviour and a bug look the same, so they’ll both always be reported as bugs
It's not the same, but it's a pretty big change in frequency, I'd say, haha
the issue is taht with mods people don't have a place to go to learn that it's not a bug other than asking the creators
As I said, it’s not about difficulty. It’s about not having 10 different mods define 10 different shortcuts that do the same thing and players need to configure 10 different keybinds manually
balatro has some unintuitive mechanics but i learned them watching videos
the problem is that I don't see many mods doing the same thing for the same reasons wanting the same keybind
Tag and Boss Blind restrictions on when they can show up
Rise.
The issue is if you don't throw the info in players faces they'll still not learn it for awhile, or even worse you've mentioned people don't read your stiff which explains everything
At some point it is less the mods fault
But I'm partially biased because in creative writing projects, when I would do unconventional things with language, the assumption changed from 'creative license' to 'not understanding how proper English works' if people knew I am ESL, haha
oh i noticed that people actually read the tooltips so thats good enough
i got many less questions after i made all the glossary stuff
in tooltips
I think they don’t do it yet because it’s not an API yet. But it’s just a button that reloads the card the mouse is hovering over by default, which mods can listen to to change the regenerated UI
what is the context to have when a play has ended?
bc the context.main_scoring doesn't trigger
yeah but what does "listen to" mean. different mods have different things they want to do when updating a description, sometimes multiple things
thats fair, tooltips are my beloved
i still need to start implementing that shit to move tooltips depending where they are
Listen to just means an if check to see if the key is being pressed
Like this?
No. My bad I meant to write card_added
I know, I mean what are they listening for? The "updated description" signal is too generic
I’m also not sure where the card is provided. Check the wiki
I don’t understand your question
Let's say I want to add a keybind for showing tooltips like you do. I also have one to change pages like BSR does. Can I only do both at the same time?
To be fair I think SMODS should also provide a paging keybind
Personally I wouldn't do pages like BSR, I prefer keybinds to switch between specific pages instead of being indexed
I mean, I don’t think SMODS can cater to every possibility, but a binary choice like mine or paging like BSR seem simple enough to be used multiple times
My point is that your system is too specific and doesn't really solve any conflicts nor makes anything easier
I don’t think you have argued that point successfully
It does make the player’s life easier
It makes the modder’s life slightly easier
Naturally some mods will be incompatible for this or that reason
I don't think many modders are going to care is my point
even the ones that want to add systems like that
i mean a way to integrate more description doesnt feel too specific
the amount of mods with a shit ton of information having a good way to integrate said information would be delightful and im not sure why regardless of amount of usage adding support for a feature is inherently negative
by default support for a shared system is a net positive since at the end of the day this is all unpaid work
I agree, I think a keybind to turn off all tooltips is a lot more useful
Isn’t there one already?
hmm not sure
i guess but most people don't use debug mode haha
yea debug mode should not be the reference point imo
Fair but I’m just saying
If you want that to be put into SMODS
You can request or PR it
Then you can use DebugPlus for it 🤔
there are probably like 2 mods, maybe 3 that would utilize this
some people don't like having the cheating options but anyway my point is that "hiding the shit tons of information" is more generic than the hovering thing
The hovering itself is very specific, I agree, but it enables the more useful and general feature
Displaying extra info
I still think the problem of a mod wanting to have two sets of "extra info" makes the solution too narrow
-# I'd rather have this than how I tried to cram everything into one description.
okay that's your fault ngl
i had to right align the tooltips so they didnt go off the screen lol
¯_(ツ)_/¯
Rise.
can i ask a question?
that anihilats all cards in sigh
any idea why?
bcs i don have a card deletion anywhere
I think that’s a more specific subset of mods, and again I think SMODS can provide paging shortcuts
Interesting. I’ve been thinking about adding a kart Joker
I think that specific set of mods are the same ones that want to use the system and like I said paging shortcuts would have their own problems like someone wanting separated pages vs indexed pages
hmm no idea sorry
What’s the difference between separated and indexed pages
Is it like individual page keybinds versus left and right?
Instead of Page 1 > Page 2 > Page 3 > Page 1, you have different keybinds for each page
I mean SMODS could provide a limited version of that too
It was bound to happen, considering I used to play SRB2Kart quite a bit more than I do now.
am i in the wrong server 
But you're providing a million APIs for the exact same thing lmao
Idk what I’m looking at
sonic
I don’t understand your point
These would just be reserved keyboard shortcuts that mods can opt to use, and be consistent with other mods
Maybe that’s an argument against separated pages
Separated pages are just much better than indexed ones imo
-# The green Hatsune Miku in 3rd place. But 'tis is modded SRB2Kart, pretty much.
Debatable, but also they’re very specific
I don't think that's a good enough reason to add more bloat to smods
I don’t think it’s bloat; I think it would be useful for mods to have access to
what
you said more bloat, whats the bloat that you feel exists?
exactly
everything feature is bloat 🙂
smods is bloat
i think the real problem is that binding keys in the config is a pain
mine will likely never have controller support unless i can rob someone elses support
is the card_add context from a recent smods version?
yes
added*
card_multiply
Someone who’s neither pretty nor smart added it
i never made changes to smods what are you talking about
So it's not in a released version yet?
What do you mean
You’re a cutie pie
Context.card_added is not a vanilla context, right? The smods version that adds it, is that in a release version of smods, or only in the dev branch still?
the release seems to be from a couple of days after
Right and Idk
Oooh okay, maybe I didn't actually properly update smods then, and just imagined I did, haha
That’s what you get for buying Hallucination
Oh, I didn't add smods to my dev folder, just to the Balatro mods folder, that explains things, haha
I might’ve made my joker a bit too rare aaaa
i like my jokers medium well
how does one replicate the sizing effect of wee joker?
cardloadref = Card.load
function Card:load(card_table, other_card)
local ref = cardloadref(self)
local scale = 1
local H = G.CARD_H
local W = G.CARD_W
if self.config.center.name == "Big Joker" then
self.T.h = H*scale*2*scale
self.T.w = W*scale*2*scale
end
return ref
end
cardsetabilityref = Card.set_ability
function Card:set_ability(center, initial, delay_sprites)
local ref = cardsetabilityref(self)
local X, Y, W, H = self.T.x, self.T.y, self.T.w, self.T.h
if center.name == "Big Joker" and (center.discovered or self.bypass_discovery_center) then
H = H*2
W = W*2
self.T.h = H
self.T.w = W
end
return ref
end
🤔 it says attempted to index local 'center' (a nil value)
your hook has some issues

