#š»ć»modding-dev
1 messages Ā· Page 264 of 1
oh well #NotMyProblem
the stickerās effects appear on the description
just read that if ur so fuckin inclined
:/
Is there a channel for the Balatro plus mod?
in the modding forum? you could search yhere for it
nah there not
|| https://discord.com/channels/1116389027176787968/1321202386420764824 ||
Could I ask about an issue with the Balatro plus mod or is this not the right chat? Iām new to discord haha
this is the modding dev chat, this is where we make stuff
you might be better off going to the balatro plus forum post
yeah here is the best place for it https://discord.com/channels/1116389027176787968/1321202386420764824
which was linked already.
Oh ok gotcha. Thanks didnāt see it
no problem! hope whatever issue you have is solved
also this is genuinely one of the most helpful modding discord sections iāve seen lol
helps when people are actually active in here
omw posting misinformation
hey welcome back Myst!
Putting one challenge on hold because I don't want to do the edits to the buttons UI with lovely injects
UI comes to bite me yet again
Is it possible to ban card ranks from showing up in challenges?
yeah but you were on hiatus, no?
hey guys, is it possible to check if a joker has a certain sticker?
going nuts over this, checking for a while now š
not entirely, banning them entirely would affect stuff like strength, but you can have a modified starting deck without said rank
which sticker? most of them are in card.ability.[rental/perishable/etc.]
oh, thanks! that's pretty much all i needed
mhm
i actually happened to find those in the SC right as you typed this LOL
i may make a āfire extinguisher jokerā that gives you $5 in exchange for leveling down the first discarded hand
is that balanced or no
what rarity is that?
rare like burnt probably
as a common yea
oh nvm
oh wow this is super not worth it
5 balatrillion dollar
is it BP/BS copyable?
do you need to downgrade to gain $?

itās like reverse burnt
thatās the point
not what I'm asking
in some situations you could
yeah
i donāt see it being viable at all otherwise
still doesn't answer my question
still dunno, maybe if it's an uncommon
I think thatās balanced for an Uncommon, will it work if your hand is level 1 does it no work or does it work still?
kind of useless though
fails at level 1
it just simply doesnāt do anything
unless you have a high card build thats kind of a strict benefit
Yeah thatās perfectly fine then imo
oh no nvm its totally useless
if it fails then uh
Rare is too much
$5 is common
Your hand gets destroyed and burnt
Bad take
Fire extinguisher
burns your entire hand
seems legit
Mfw joker
Well if you fail to use it

average willy joker enjoyer
this is a green joker household
tbh no yeah i think all jokers are amazing, im just going silly mode
Oh I hate that joker tbh
except for the discount card
Saying that Jokers are useless in a Roguelike is wild
bad take bad takebad take bad takebad take bad takebad take bad takebad take bad takebad take bad takebad take bad take
it really is extremely conditional
I like discarding :(
green jokers fans are coming for you, run!
green joker + bandit?
burglar
burglar right
iām such a fake fan i should refund the game right now
how much hours?
20
it's a lost cause...
Could I at least prevent ranks from showing up in the shop/packs then, or would I just have to deal with the unwanted ranks being present?
hard-coding my beloved
i feel like this game is about to show up on my steam replay
as like my top game of the year
hardcoded, I see
add another 0 and weāre good
yet i have 309 in ultrakill, im such a fake fan
it bewilders me how people can get like thousands of hours in a game
hanged man me
see, thats a true fan!
my most played game has like 169 hours ;-;
not doc level though
I still havenāt beat the ante 4 help
i mean i guess
mother of god
OMG SO TRUE
i have like 200 hours only
Very well, I'm not gonna ban the card packs, so I'll just have to deal with having ranks outside of 2-6 in packs then
iāll never know this since i compile it my own damn self
i have like 4000+ hours in gms2
everybody is a fake fan until they get at least a 1000 hours
my most played is Fall Guys on steam
we shall all grind
-# 87.5....
20 hours but iāve had this game for a week
hanged man them
Long road ahead o7
i spent more time modding then playing lol
iām a real fan because i started modding a week in
Just to let you know Iām having issues with the mythical deck. It wonāt spawn in sigil cards whenever I select a blind for some reason
man aseprite is so good
btw, thoughts on the art?
Wow.,, a whole box..!!
good
i think that infinity probably looks weird
it's so good i am willing to pay for aseprite
iām not. i love free shit
sick
krita supremacy
not for pixel art!!
i used csp then found kirta better for 8 bit
is this balanced? dunno if people will actually be using infinity or not
it took me so long to figure out how to export a sprite sheet at double size
they got me on the mf aseprite CLI š
the card is only there for the cool ass stencil ankh runs
could someone help me with custom tags? how can i add them to the info queue of a card?
Wait does anyone know how to do the soul thing
also can i just make a symlink to a mods directory in my home dir
you can get aseprite for free if you compile it from source
pretty sure
like ln -s ~/BalatroMods ~/.local/steam/whatever
i use linux
oh welp
what do you think i do
bye
honestly rather lobotomize myself than code on windows š
why
I have to use windows at school
welcome to peak
tbh I do most of my dev on windows but mainly becaue I'm also on a valorant team
it needs more lobotomy i think
I'll just say I mistook those for being vanilla
Which is about the highest praise I can give
my ritual cards are gonna be like red
i have a lobotomized joker in my mod if you care
it was a product of rage
ayyyyyy
did the joker start out that way orrr
Yes, and I would use it.
added some color
Can someone help me with the soul effect on a joker I'm making
It feels a little bit vanilla too
I have the atlas set up but the soul overlay won't appear
i also have margaret thatcher joker
those are awesome
let me see code
ty
sometimes i want to compile something on windows and the instructions are like
linux:
download files
open directory in terminal
run make
windows:
build libgsl
build libssl or something (forgot the name)
build libpng
write c standard library from scratch
install cmake
write cmakelists.txt yourself lazy bum
build it
i got pissed off at the game for crashing so i lobotomized jimbo
real
Yummy radiation.,,,,
Omg I have a joker with that cat :3
oh I just used a github action lmao
uhhhh...rrr
didn't even have to really think about it
aseprite compiling is just like
clone git directory
download deps from package manager
make
SMODS.Atlas{
key = 'jokers',
path = 'Jokers.png',
px = 71,
py = 95,
-- 2x is 144 by 190
}
SMODS.Joker{
key = 'Perk-O-lator',
atlas = 'jokers',pos = {x = 0, y = 0},soul_pos = { x = 0, y = 1 },
loc_txt = {
name = 'Perk-O-lator',
text = {
"Creates a {C:dark_edition}Negative{} copy of",
"{C:green}Perkeo{}",
"at the end of the {C:attention}shop",
}},
calculate = function (self,card,context)
if context.ending_shop then
G.E_MANAGER:add_event(Event({
func = function()
local card = create_card('Perkeo', G.jokers, nil,nil,nil,nil,'j_perkeo')
card:set_edition('e_negative', true)
card:add_to_deck()
G.jokers:emplace(card)
return true
end
}))
end
end
}
I long for the day where I return to linux
do it
I'm going to get a new, lightweight laptop soon, so I'll probably install it on that
soul_pos has to be on a different line
@modern kindle got some challenge code up on my dev branch (it's the one called sci_fi_dev because I thought I'd be better at using different environments for different features ā¤ļø )
https://github.com/TurningWheel/Barony/blob/master/INSTALL.md real life example of this
is soul pos like that thing that the legendary jokers got going on where the joker is on a different layer than the card
yes
i might do that for Crazy 8 since itās a legendary
where in the code is that made a thing cause i want to edit it?
this is actually comical š
Interestingly, a lot of my cards visual effects break specifically if the card has any edition but foil. Foil for some reason works for all of them, I assume because it's drawing transparent pixels rather than mixing and drawing an opaque pixel?
mac instructions just being fucking missing seals the deal lmao
Wait what does your car joker do
no idea yet
crazy 8 does x4 mult and +88 chips for every 8 played
Valid :3
looks like i need to redo the art to be less bit crunched
although I don't really know what laptop to get
I was considering a framework but people keep saying they flex a lot
I have a bad habit of pickup up laptops from the corner š
thank you!
how do you make a card "glass"
put a sand card in the furnace joker
got a laugh out of me
thanks for the feedback!
Fantastic thank you my friend
I'll look at it shortly
Is there a way to edit the default balatro shaders?
calculate = function(self, card, context)
if context.before then
local preservation = {}
for k, v in ipairs(context.scoring_hand) do
if v:is_preservation() then
preservation[#preservation+1] = v
v:set_ability(G.P_CENTERS.m_gold, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
v:juice_up()
return true
end
}))
end
end
if #preservation > 0 then
return {
message = localize('k_gold'),
colour = G.C.MONEY,
card = self
}
end
end
end
I'm not sure the base shaders are stored in SMODS.Shader
is_preservation checks for if a card has a rank that exists within a table that i have created above
that part works
im not sure why "juice_up()" breaks the game since i copied that from base game code
It's breaking the game because the juice_up isn't being called from the function similar to midas mask
It's because the return block is passing in self to card instead of card
Not what I mean
i fixed this return to card instead of self
It should look like this:
message = localize('k_gold'),
colour = G.C.MONEY,
card = card
}```
card = card is redundant
gotcha
you don't need it
oh? okay awesome
help me
you don't necessarily yeah, I just tend to specify the message card regardless
I have been cooking. V1 of Balatro irl is within my grasp
loc_vars = function (self, info_queue, card)
local random_mult = {}
for i = card.ability.extra.min, card.ability.extra.max do
random_mult[#random_mult+1] = tostring(i)
end
local local_mult = ' '..(localize('k_mult'))..' '
main_start = {
{n=G.UIT.T, config={text = ' +',colour = G.C.MULT, scale = 0.32}},
{n=G.UIT.O, config={object = DynaText({string = random_mult, colours = {G.C.RED},pop_in_rate = 9999999, silent = true, random_element = true, pop_delay = 0.5, scale = 0.32, min_cycle_time = 0})}},
{n=G.UIT.O, config={object = DynaText({string = {
{string = 'rand()', colour = G.C.JOKER_GREY},{string = "#@"..(G.deck and G.deck.cards[1] and G.deck.cards[#G.deck.cards].base.id or 11)..(G.deck and G.deck.cards[1] and G.deck.cards[#G.deck.cards].base.suit:sub(1,1) or 'D'), colour = G.C.RED},
local_mult, local_mult, local_mult, local_mult, local_mult, local_mult, local_mult, local_mult, local_mult, local_mult, local_mult, local_mult, local_mult},
colours = {G.C.UI.TEXT_DARK},pop_in_rate = 9999999, silent = true, random_element = true, pop_delay = 0.2011, scale = 0.32, min_cycle_time = 0})}},
}
trying to get misprint's text thing to work, but for some reason it's just rendering as a blank box. should i be returning main_start? or maybe it's something with G.deck?
it works now, thank you!
Ah wait yes, Aure, do you know if it's currently possible to change the file path of the default shaders?
now i only need to figure out how to covert it to a glass card instead of gold card
I cna barely read this on mobile, but yes you should be returning main_start
i knew i wasnt crazy
thanks john
is this possible?
I am not sure and I'm not at my PC to be able to check
Change 'G.P_CENTERS.m_gold' to 'G.P_CENTERS.m_glass'
should i call my āaverage logan subplotā joker the āAverage Jimbo Subplotā
return {
message = localize('k_gold'),
colour = G.C.MONEY,
card = card
}
I assume i have to change it here as well
?
k_glass
G.C.GLASS
Afaik there's not a default message for glass cards like that
will i still be leaving the localization text blank? or would i put a #1# in the text section?
You'll have to add one
I assume you can either define a SMODS.Shader with the same (raw) key or it's unsupported
you should still leave it blank
gotcha let me check
ok cool it should work then
Hmm I guess I'll try this
thanks 2 mr. smods
I can't take ownership of the default because afaik SMODS doesn't normally package the default shaders into it
Aight let's see
Oop, yep, seems to work!
And by work, I mean I broke it visually, but that means that I broke it
neat
Now I have to figure out how to rewrite all the default edition shaders to function like the foil shader does
Yay
sounds... fun
hello john smods
hello raevyn
so its still not showing up, do i just have to leave the whole thing blank? is there no way to add that dynamic bit ive been using?
did i return it wrong, then?
OH BECAUSE ITS A
return { main_start = {...}, vars = {} }
cause its tables right
Just returning it as a variable won't cause the game to know what to do with it
horrible
it'd just stringify and insert it whenever it sees #1#
im learninggggggg 
how did you change your vsc font to the balatro font
i want that.
"liquidated"
ji,m,b.;/o
:3
installed the font from game files and then added it to my vscode in settings
awesome
oh please have certain spectal have certain numbers
mostly working,,, couldnt get aces to work without it returning as 14, their id, lol
so then like THIS (i tried "..." in case that's what you meant but i took it out after saying it's not allowed outside of a vararg function)
if you can get that to work be my guest but im done with this
makes sense
I used ... as a placeholder for whatever you want to put inside š
I'll try
annotated already btw :]
tbh I expected the ranks to be a table of numbers and not a string š
but if it works it works
fixing š
JOKeR
rank IDs are numbers, but they're practically useless
call it "Agonized Joker"
I made a blackjack program once, and originally all the cards were jus strings in lists
j..,im.;'b/.o
New one has a card class
hello screen friends
--All scored Aces, 2s, 4s, and 8s become Glass'ed
SMODS.Joker {
key = 'scdrl_lady',
atlas = 'scadrial',
pos = { x = 0, y = 0 },
rarity = 2,
cost = 6,
unlocked = true,
discovered = true,
loc_txt = {
name = "Lady Mistborn",
text = {
"Each played {C:attention}Ace{}, {C:attention}2{}, {C:attention}4{}, and {C:attention}8{}",
"become {C:attention}Glass{} cards before scored"
}
},
calculate = function(self, card, context)
if context.before and not context.blueprint then
for k, v in ipairs(context.scoring_hand) do
if v:is_preservation() then
v:set_ability(G.P_CENTERS.m_glass, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
v:juice_up()
return true
end
}))
end
end
end
end
}
Had a quick question about this joker. It works as intended converting all A,2,4,8 to glass before they are scored (if they are scoring)
If an Ace that is already glassed is played, does this joker "re-glass" that ace? hence resetting its probabilities of being destroyed?
how do i check for this?
card:is_edition() == e_glass or something like that I'd have to check
next(SMODS.get_enhancements(v)) should work (it will be nil if it has no enhancement but i that doesnt matter)
editions != enhancements
I mean in the config/loc_vars
i get the two mixed up
okok let me try
same tbh
i still cant get my joker sell value effect to work
can SMODS.find_card be used to find what deck is being used in the run?
trying to see if my mod's booster packs spawn naturally in the shop is hell
ayyy
it showed up
right as i sent
nice
if next(SMODS.find_card("b_devildecks_scourge")) and self.ability.set == 'Joker' then
self.sell_cost = -10
end
this is the conditional i currently have and it didnt work when i tested it
just crank up the weight next time
for k, v in ipairs(context.scoring_hand) do
if v:is_preservation() and not SMODS.has_enhancement(v, glass) then
v:set_ability(G.P_CENTERS.m_glass, nil, true)
so true
this should work right
just make sure you do it right or else you get the Curse of Jimbo
oh wait hang on yeah i need to figure out the weights properly
dont suppose anyone knows the vanilla weights off by heart
i can check em rn
(or where the game stores them that would also be fine)
search all for weight = and you'll get them right quick
omg
they're defined in the giant centers list
default rates are in game.lua starting at line 1900
i gotta start reading the base code in vscode
dont know how anyone manages without doing that lol
right now i use vscode for mod code and np++ for dump/vanilla code
put another challenge on hold because I don't wanna figure out where I should place the patch, oof
I'm trying to cook up some challenges for my mod rn
it's tougher than you'd think
(challenge is "sacrifices")
I can imagine yours currently has a bit less levers to pull. I've got a bunch, it's just based on how much tearing apart code I wanna do to get them to work, haha. I've got ~25 or so concepts, but some of them need a lot of patching to get them to work
Or I need to find clever solutions
true
How about a challenge in which playing cards don't score, so you're more reliant on your weapon?
i love my balala font
true
I mean if they're all debuffed the weapon doesn't fire so š
That's why they're not debuffed, they just don't score š
oh true
I've got a patch that could do that for ya

I have a Jurassic Park joker that multiplies all nominal values by 5 for cards, and that's easily expanded into weirder functionality, haha
I've got the romance reroll challenge, the jumpscare challenge and the rent-a-movie challenge that I'm putting on hold, and the next step is figuring out what the best way is to make it so movie jokers can spawn in specific forced orders
the scariest part of modding any game is wrapping your head around the creator's spaghetti code
Can't blame thunk that he didn't make the button layout easily injectable š
i was modding windowkill and had to give up on the mod because the variable i needed to set was being hard set every single frame
no sane hobbyist game dev would account for that, I reckon
lol fair
at this point if a mod friendlyness update was released it would probably do more harm breaking existing ones than good i reckon
Some of the things I wanna do are definitely possible, they're just a bit problematic right now with me not fully understanding vanilla's code
"math.random"
poor peusdo random
yeah i tried pseudorandom and couldnt get it to work
again be my guest lmao
me when i try to pull a good Power Pack and the game gives me 2 copies of Toxigenesis
pseudorandom'll mostly just make sure your random functionality keeps the run's seed in mind
I thought I had some clever solves for the metadata-related joker spawning, but I think I might just need to write a whole custom create_card function for it
by the way, balancing question:
do you guys think this should work if there are no jokers?
id say no
or not
No based on vanilla
fair
calculate = function(self, card, context)
if context.before and not context.blueprint then
for k, v in ipairs(context.scoring_hand) do
if v:is_preservation() and SMODS.has_enhancement(v, m_glass) == false then
v:set_ability(G.P_CENTERS.m_glass, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
v:juice_up()
return true
end
}))
end
end
end
end
I think this does not check for cards already glassed and recoverts it into glass thereby potentially resetting its probability of being destroyed. Can anyone check?
and not SMODS.has_enhancement(v, "m_glass")
would probably be better
and also
m_glass should be a string, i just realized
what's the goal there?
yeah? because when i accidentally put == true it worked
...it does?
i want to convert all A,2,4,8 into glass before they are scored, but if they are already glassed then i dont want to "reconvert" them into glass
yeah for some weird reason
like opposite functionality, it just didnt glass any of it
let me retry with your code
In my opinion, you shouldn't even be able to use it if there's no non-enternal jokers
its an immolate-level balancing spectral card
yeah, implemented that! i think this should be fair
yeah, that was my thought process
its actually really good imo, but not so unbalanced that it doesnt feel vanilla-ish
so what does v:is_preservation in this case?
first time heard of that tbh
checks for those numbers A,2,4,8, i have it stored as a separate table
like thunk did for face cards
and implemented is_face()
aaaah okay
--Function to check if Aces, 2s, 4,s and 8s appear in played hand/discard
function Card:is_preservation(from_boss)
if self.debuff and not from_boss then return end
local id = self:get_id()
if id == 14 or id == 2 or id == 4 or id == 8 then
return true
end
end
the way glass cards are destroyed shouldn't be a problem there, btw
you can override a card's glass status anytime you like, it'll never reset it's destroy calculation
so i dont have to worry about resetting probabilities by "re-glassing"
nope
ahhh
i have two more cool spectral card concepts, will elaborate later perhaps!
trying to balance them and make them vanilla-ish
i thought everytime it doesnt get destroyed, the probability "increases"
those are calculated right before it gets destroyed. Unless you yourself patch something in there, it won't ever be a worry. Unless SMODS changed something recently I'm not up to date on
this is awesome then
...why would localthunk implement a pity system for breaking glass cards š
by the way, how do i add an eternal sticker on a joker?
lol idk
btw your implementation worked here, thank you!
np! :D
SMODS.Stickers['eternal']:apply(card, true) should work, just change card to your variable
can i get some balancing advice?
i have a card enhancement that gives x chips with a y% chance of destroying itself, both values increase after being triggered. what should i increase them by? currently its +10 chips and +5%
thank you!
that sounds fine. I'd say, play with it and see what the feel is
what do you guys think of it balancing wise? cost is 6 and rarity is uncommon
My guess is that it's incredibly strong, just because converting consistently to one of the strongest enhancements is very beneficial
so is this like... the longer it stays the higher the likelihood of it dying of a heart attack, but it gets stronger?
can make it a chance of being converted to glass then hmm
like 1 in 4 chance
sure, sounds fine! perhaps you could have a spectral card that decreases the chance of destruction of held cards with this enchancement in hand?
My personal take is to not balance cards you're not sure about before you've played with them
this. might not help actually. it also has a lot of asbestos cards which give insane mult early game
FREE POLY HANGING CHAD
could be a fun concept with perkeo, where you have a card with HUGE chips
i see
hey uhhhh is the text for the wheel supposed to just say "1 in 7 cards get"
saying this because with socks and buskins and shit this might get really bad real soon
like... empress level of bad
I reckon there's better balances than adding a chance, because the chance will both make it 4 times weaker, but also chances aren't super fun, I find, unless they really pay off big
it's cool early-game but makes no sense as soon as you're past ante 2
how do i allow legendary jokers to show up in shop
and a lot of glass cards is strong. 1/4 chance of a glass card is a lot less strong, in that sense
i see, how else could i balance it?
I've got this implemented in Kino in a weird way. Do you want all legendaries to show up, or do you want just your own to do that?
all
I think in that case, take control of the rarity and give it a chance to spawn, which I think should work? Or perhaps overwrite it with a custom rarity that's identical
Perhaps the first card of that type that shows up
hmm actually might go with that
or if you wanna use the chance aspect still, make it a cascading chance. 4/4, 2/4, 1/4, 0/4, 0/4
how do 
@tall wharf do you know if Blinds can have variables now?
i just store everything i need in debuff lmaoo
hey, is there any sorta template mod for friends of jimbo packs?
debuff?
Blind.debuff
I got that but how
There is a take_ownership function that SMODS adds. The only thing that I'm not sure of if the game hardcodes a check to see if legendary is polled. But if you take ownership of it, you can just add a weight, that may work
where would i find that?
oh wait this is pretty cool i think
how would i word it in the ability though
idk what to ownership for that š
Example SMODS mods
tried it, wouldnt work
the legendary rarity. Rarities are objects!
what did you try
the example mod listed for deck skin packs
What was your issue?
either would crash, or wouldnt display any sprites
Have you played other mods?
"4 in 4 chance to turn the first TYPE scored into Glass. Each following TYPE has half the chance" Something like that
yes they work fine, i currently got the rainworld and collabs reimagined packs installed
???
okay i like this idea best, going to stick with it, thank you!
can you show me your code then
i heard that steamodded is bugged with smods.deckskin
make sure to remind me when your mod is playable! I'll give it a shot then š
that might be it since i checked both collabs and rainworld and neither use deckskin if i remember right
It was bugged at the time the template was made, but the bug was fixed cocurrently with the template release
probably ahaha
I really like your color scheme
I have a DeckSkin working right now
I will! :)
So I don't think that's the issue
aint got it anymore, overwrote it with copying some of the collabs reimagined code
like
which does work but doesnt display the custom aces
what version of SMODS do you have
uhhh lemme check
why are my packs still showing "ERROR" as the text at the bottom above "Choose (x)"?
hmmm
That's a few days old
I still don't think it'd have been an issue then
What texture did you make
Aces through Jacks from above or below
Doesn't matter much but still
What did you texture file look like
Initial tests are promising but confusing. Trying to make Polychrome genuinely transparent, but doing so results in more difference in extremes a lot of the time (All three joker in the top row are Polychrome in both images, but the editions were applied at different times and the images were taken at different times
The atlas
atm its laid out similar to collabs reimagineds
Idk what theirs look like
1 sec
I think for the template your file would look like a lot of empty space with the textures to the⦠right
so four rows, and 9 columns of empty space with JQKA on the right
Yeah because the use the collab not deck format
The template uses deck
You can't replace Aces with collab
There was a third option but I forget
big things
something weird: for some reason when this spectral card is negative and used the game crashes. (there are 6 non-negative jokers near it)
use = function(self)
local bank = {}
for i=1, #G.consumeables.cards do
local card = G.consumeables.cards[i]
if (not card.edition or (card.edition and not card.edition.negative)) then
table.insert(bank, card)
end
end
local card = pseudorandom_element(bank, pseudoseed('exorcism'))
card:set_edition({ negative = true }, true)
end,
four actually: suits and ranks
I think one of those is new
consumables is misspelt
?
yeah idrk what im doing, im an art guy not a code guy
could that be it
no
well no, haha.
didnt expect getting it ingame would be as complicated as it is
consumeables is right
oh what
thats how thunk spelled it
caino 2.0
š„
The template should work if you position the textures correctly in the file, the file name matches the name inputted in the template, the files are put in the correct folder, and the template if filled correctly
so basically just take the default 2 thru 10 textures and throw them onto the image files?
You don't need them, you just need empty space
If you remove the ranks 2 through 10 from the template
It will load the default textures
But the code still needs to know where in the texture to find the correct ranks
so the only
well
the best option is to have the full deck
with 9 empty columns
alright
basically they should be positioned like the default deck texture
wait, does the card removal from the consumable slot happen before or after use?
after
do you have any specific complaints about how the template is laid out
I should ask @long urchin too I suppose
uhhh not that im aware of
would this put them on the same line?
for concatenation in lua i believe you want "text".."text"
.. instead of +
i may be stupid tho
no space inside {}
it might be .. actually
come again
actually for the template mod, is the icon code used for anything?
after the comma
this part
in the formatting brackets
huh oh no that works fine
it doesn't change the size
That text is normal-sized
yeah i have it like that rn
im trying to fix the lines
cause misprint text style requires a blank set of quotations
but im trying to add onto it at the end with my dynamic text
where are they
If you want the text to be normal-sized you can remove the s control
got aces and peusdo random working
samsung notification sound
text joker
im gonna tinker with the size later, it's just there to remind me to do that
hi toma
hi aiko
im coking
coking

oh hey a calligram of sorts
twinning
COOKING
i dont watch breakinfgb ad

does anyone know whats going on here?
error pack?
/j
how would i do this the correct way? is there some way to get the index of the card that's getting used?
Alright, game's crashing when I open the restrictions section of this challenge, which I'm gonna assume means something's wrong with this particular chunk of code:
restrictions = {
banned_cards = {
{id = 'j_sock_and_buskin'},
{id = 'j_hanging_chad'},
{id = 'j_selzer'},
{id = 'j_dusk}'}
},
banned_tags = {
},
banned_other = {
}
}
changed the altus for testing
didnt work
damn
.. is the right concatention
how do i define what's in a pool? :3
yeah but
im making a card pack and i wanna put jokers from vanilla in the pack but only certain ones
why are you doing this by the way
("".."text")
ah
isn't a pool just a table
You wanna make a pool you inject them into
dynamic description
but why like this
Oh NVM missed some context
But yeah, you can add existing items to pools quite easily
I've made dynamic descriptions before but not like this
what are you trying to do with the pool?
They're creating a new one
perfect!!
but isn't a pool just a table
how would i do that? :3
It's a table that the create card function enjoys using
{}
... i meant defining the items in the pool
Absolute Lua

oh tysm!! yeah this is perf, im just gonna implement a message that plays whenever a valid rank is discarded thank youuu
you put them inside the table
joey spotted
I'm not at my pc rn, but kinogenres.lua on my git does this. They're technically not vanilla items, but they are items that are created before the pool is and then injected

@sonic cedar this is how I've done dynamic UI before
oh okie, vanilla or not i just need to know how to format putting an item into the pool
I think you might be able to do it with keys but maybe the pool functions expect objects
or is it literally
oh with keys would be nice :3
You define a list and then inject it. I think I did it with a list of keys, then used SMODS.Jokers[key], but you'd be able to use G.P_CENTERS[key]
how to inject it
so far my only interaction with injection was hacking it to add sprites to the game
a balatro mod for movie dorks. Contribute to icyethics/Kino development by creating an account on GitHub.
howd you get pseudorandom to work? im like 90% sure i did the same as you and it always crashed on trigger
what do we think of this design
Inject, in the case of pools, is actually a built in function!
cool shit
here's me
idk just copyed the example jokers
weird i did the same
What's not workings on your end?
Hahaha good to hear
this look good?
I'm still not sure how you're doing it that needs a specific definition in the localization file
although i do remember the error said it was happening in common_events.lua with a pairs function
Ah so you created an Object
Instead of just creating a Pool
ahhhh the difference was i forgot to put a nil at the end
didnt know that was needed
what does group_key actually do for booster packs?
I confused the two, but yeah. In most cases I think it's easier to do that
well the ijigray thing is just a color value i have set, but the description goes like this
Though atm I'm setting up a system to dynamically create pools based on arbitrary qualities, though I'm bumping my head quite a lot
"local index = pseudorandom_element(card.ability.extra.valid_cards, pseudoseed('phone'))" make sure both of these look like this pls forgot to change the other one
so it SHOULDNT have nil at the end?
thats for copy card
i figured as much
so wait this is how you add stuff to packs?
how do i get a consumable to generate a joker
I see; if you just want a simple text modification that probably works but for deeper modifications (like Misprint) I'd recommend main_end
of a certain rarity and with a sticker
did you use "#other_joke_list_example" instead of "other_joke_list_example"
so change the main_start's to main_end's?
Rarities are pools, so you can create_card on "uncommon" instead of "joker"
specify the key when calling SMODS.create_card()?
And then just set the sticker
. w.
how would i do that
You can define a main_end in the return
set the sticker i mean
The main_end are extra UI nodes appended to the end of your text description
not sure what you mean but i used this https://github.com/Steamodded/examples/blob/d43316d97bc927f3de431dd84c0283d41e69761a/Mods/ExampleJokersMod/ModdedVanilla.lua#L344
so change my VARS (vars) to main_end
Ah, main_start is AFAIK the same thing as main_end
It just goes in the beginning
the last parameter is for setting stickers
But this didn't have main_start
im gonna get you
Hey the other screenshot didn't have it
true mb
an array of sticker keys
meaning?
I still don't think "".."bla" is doing anything but *shrugs*
oh so i would do like {'eternal'}
yes
okay
only one way to find out right
i still cant figure this out idk how to get the cards i want in this pack . 3.
--Each played Ace, 2, 4, and 8 become Glass'ed before scoring
SMODS.Joker {
key = 'scdrl_lady',
atlas = 'scadrial',
pos = { x = 0, y = 0 }, --to be changed once atlas is updated
rarity = 2,
cost = 6,
unlocked = true,
discovered = true,
config = { extra = { odds = 4 } },
loc_txt = {
name = 'Lady Mistborn',
text = {
'Before scoring, {C:green}4 in 16{} chance of turning',
'each {C:attention}Preservation{} card into {C:attention}Glass{} card',
'{C:inactive}(A, 2, 4, 8 are {C:attention}Preservation{} {C:inactive}cards{C:inactive})'
}
},
calculate = function(self, card, context)
if context.before and not context.blueprint and (pseudorandom('scdrl_lady') < G.GAME.probabilities.normal/card.ability.extra.odds) then
for k, v in ipairs(context.scoring_hand) do
if v:is_preservation() and not SMODS.has_enhancement(v, 'm_glass') then
v:set_ability(G.P_CENTERS.m_glass, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
v:juice_up()
return true
end
}))
end
end
end
end
}
Hey everyone, I am trying to implement a 1 in 4 chance of converting a card into glass. Is this the right way to do it?
im not sure how psuedo random even works
i kind of copied it from bloodstone implementation
shoot i think thats for stake stickers
wh
how would i do this
this how i do it
with the param setting
it feels wrong
SMODS.create_card('Joker', G.jokers, nil, etc)
oh i use nil for empty params
yes
oki
whether a joker is eternal is based off its card.ability.eternal variable, i dont think you can set it with the create_card() command
so how do i set it
because its kind of part of the whole thing that the generated joker is eternal
Card:set_eternal(boolean)
so this, besides the last array, is a perfectly valid and good command?
thats the only place i can find where you can set it
Does the apply function not work for eternal?
would card in this instance not be the card itself?
the ritual card i mean
Okay I've gottena decent solution to changing how the default editions look
It's not perfect, but it's close enough to not kill my visual effects
anyone know why this isnt working?
yes
Typically you need to specify name and text, and it needs to completely match the key it's being displayed for if this is for a UI box
girls
btw Ice, i decided to keep it as 1 in 4 chance for each card since cascading is kind of complicated to explain for game and makes it unattractive since users wont care for the complexity
you'd need to call it for the joker itself
and how would i possibly do that
Big fan
could i assign the create card to a variable?
for that specific scope and then just call it on the variable
yes i believe so, create_card() returns the card so that should work
have you made a boosterpack yet? i need help ;w;
im so smart
if context.before and not context.blueprint and (pseudorandom('scdrl_lady') < G.GAME.probabilities.normal/card.ability.extra.odds) then
for k, v in ipairs(context.scoring_hand) do
if v:is_preservation() and not SMODS.has_enhancement(v, 'm_glass') then
is this the right way to add probability to a joker? assumbing ive added odds = 4 in config
i just found out abt this command like 20 mintues ago lol
MY PREVIOUS CODING KNOWLEDGE APPLIES HERE
i just have no idea for the life of me how to get the cards i want the booster to make to.,,, make them
just coincidence that you needed it at the same time
What cards do you want it to make?
Eternal Rare Joker
here's the card design btw :3
just like, whatever its not gonna be anything specific just things i like :3
oh that wasnt directed at me
Nope
I suppose the easiest way to do it is to temporarily set every card you don't want it to create as a banned card, and then you can use the create_card() function or the poll_rarity() function as normal, respecting the rarity weights of the remaining cards in the pool
x-x;
Is setting up a pool not working, Kawaii?
not really, i have no idea how it works and what it wants for me to get that started
Also yeah you can set up a custom pool of cards to draw from as well
It's quite easy, don't worry. If you want I can guide you a bit once I'm done with dinner
that'd be nice, the wiki isn't really explaining it
I've set up a bunch for Kino's genre specific packs
yeah its just confusing the hell out of me sorry .w.
i made a booster pack, and im not getting any errors, but its not showing up in the collection?
the file is being loaded
no clue why this is happening, it's driving me insane!
can somebody help if possible?
SMODS.Consumable{ -- Exorcism
set = 'Spectral', atlas = 'bpp_tarots',
key = 'exorcism',
loc_txt = {
name = 'Exorcism',
text = {
'Turns a random',
'{C:attention}Consumable{} {C:dark_edition}Negative{}'
}
},
can_use = function(self)
if #G.consumeables.cards < 2 then
return false
end
local bank = {}
for i=1, #G.consumeables.cards do
local card = G.consumeables.cards[i]
if (not card.edition or (card.edition and not card.edition.negative)) then
table.insert(bank, card)
end
end
return #bank > 0
end,
use = function(self)
local bank = {}
for i=1, #G.consumeables.cards do
local card = G.consumeables.cards[i]
if (not card.edition or (card.edition and not card.edition.negative)) then
table.insert(bank, card)
end
end
local card = pseudorandom_element(bank, pseudoseed('exorcism'))
card:set_edition({ negative = true })
print('a') -- THIS SHOWS UP BY THE WAY (even with the error)
end,
discovered = true,
config = {},
pos = { x = 1, y = 0 },
}
ok strange, am i doing something wrong with my textures for my deck skin?
my textures are much blurrier than others when pixel smoothing is off
and some of my pixels have these strange thin outlines around them
maybe because atlas is misspelled as "atls"?
lol
check if the edition is nil before checking if the card is negative
if card.edition ~= nil then
if (not card.edition or (card.edition and not card.edition.negative)) then```
when the edition is nil, card.edition.negative doesnt exist
how do i check if jokers are full
haha
as in? the joker slots?
yeah
i need to define can_use for my ritual card but that is based on if you have a free slot or not
#G.jokers.cards >= G.jokers.config.card_limit
thanks
?
thats what i need
im p sure
also what ide do yall use
i use intellij with a lua plugin
vs code
intellij ultimate actually
i code everything else in vsc so this worked out best
i love my jetbrains
doesn't this just never result in a true, then?
like with both statements
still doesnt show up :/
ah fair
you just want to know when a card isnt negative right?
oh wait... why did you add the parentheses?
pretty sure it's just
SMODS.Booster{
...
}
that is indeed correct!
'attempt to concatenate local '_type (a nil value)
hmm
i set a param in create card wrong
what is _type? is that related to set?
if card.edition ~= nil then
if card.edition.negaive == false then
[YOUR CODE]
else
[YOUR CODE]
theres definitely a better way than typing the code twice but i cant come up with it
joker, spectral, base, tarrot etc
no
well what the fuck then
doesn't my code already do that?
oh, its worked for the other cards ive made, i'll go fix that tho
set = 'Joker',
it still checks every conditional even if one is false
that is what the 'or' is for
some languages stop as soon as one is false but lua doesnt
invalid
wait OH wow i didn't know that
this might be the issue, i see
check all conditionals
check logical comparisons
get single bool
this is just based on my experience on it, i havent looked it up but thats what it seems to be
doesnt run for the same reason
get rid of set =
that wont work either
well its also not right
dear lord
yooo!!
what did i do this time
set = 'Joker',
key = keys
}```
SMODS.create_card('Joker', G.jokers, false, .96, false, false, 'fuck you balatro')
that should work
you can leave spots blank if they're all just nil
SMODS.create_card or
yea
also wouldnt it just assign false to the nil vals?
no i think
oh okay
sure
killing myself, the ordering didn't help
just implemented messages too teehee
im not really sure tbh
or have a good rest of your day or something
gn, good luck
wait thats so epic omg
thats really cool!!
WOW this is amazing
thank you!
any ideas?
this function is getting a nil value but idk how
i'll need to trace the path from create_card() to here
hmm
is this how you make a pool for packs? , w,
no, sorry abt that
oh, just curious :3
guh
this looks like what your looking for, i can help in a sec after im done with this other thing
that's not how this function works
i was just realizing that
oh, sure
sorry i just heard some awful news
idk if im in the mood to code anymore
how would this look in the G.C format?
like G.C.MULT, etc
awe, whatever it is i hope it gets better
so i can call it in a UI function
it's not like that unfortunately
you need to manually insert it there
like G.C.IjiGray = HEX(..)
so how doi write this function
which
create card
this is exactly what i was looking for though thanks <3
it's on the wiki but what do you need to create specifically
a rare joker, and then i need to immediately make it eternal
this is what i have as of now
SMODS.create_card({set= "Joker", rarity=1, stickers={"eternal"})
double equal sign since it's going colour = all that though
I'm pretty sure
rarity = 3 thou
stickers is for stake stickers tho im pretty sure
is it? doesn't this one go 0 to 1 unlike the others
it does
oh
what is this code used for in the example mod for deck skins? i cant seem to find the icon images anywhere visible ingame but the game crashes without this bit of code so im really confused? Should i make a custom icon for any deckskin mods or?
Put rarity = "Rare"
hey you forgot a curly bracket >:(
see me after class
crashed 
can i see the code
nice!
i'm on misprint now, but since it doesnt do a traditional description im on something like this
I swear I sent a message that is now gone
how do i make the animation of it burning up
CURSE OF OBELISK š š š š š š š š š š š š š š š š š š š š š š š š š š š š š š š š š š” š¢ š£ š¤ š„ š¦ š§ šØ š© šŖ š« š¬ š š® šÆ š° š± š² š³ š“ šµ š¶ š· šø š¹ šŗ š» š¼ š½ š¾ šæ š š š š š š š š š š š š š š š š š š š š š
no, I meant you need to do G.C.whatever = HEX() somewhere before
ohhhhh ok
to define it
and then in colour i can jjust put Ijigray
You can put "Rare", "Uncommon", "Common" or "Legendary" or any other modded rarities
ahh
it needs to be G.C.Ijigray
I'm pretty sure that's mentioned in the wiki too, but if not it's definitely in the code
when people refer to "the wiki" do they mean the documantation on github or is there a wiki with modding info on it?
yeah ofc but i dont need like quotes or anything since its a defined thing
The github wiki
they mean the github
yeah the docs
github wiki
Lots of undocumented stuff tho
thx
fr
you can do it either way, that's just a lua thing
oh real
umm small problem
i have absolutely no fucking idea where i just spawned this joker
and it damn well is not in the joker slots
you need to use add_card instead of create_card if you don't want to emplace it manually
it takes the same arguments
so just swap create for add
thats it
yeah
this booster pack isnt giving any errors, but it wont show up in game, any idea whats wrong? the file is being loaded
still crashes (these have been on hover not on startup or anything) š
{n=G.UI.T, config={text = 'test', colour = G.C.IjiGray, scale = 0.32}},
is it your collection?
nope