#💻・modding-dev
1 messages · Page 391 of 1
I'm working on a mod for a game I've basically quit
and shes my motivation to grind hsr
so it kind of demotivated me a lot
its only the ult that i think is cool
really? she looked fine to me
other animations are like, 4*-quality
what do yall think of the quadratic formula joker
castorice is the outlier tbh
have you seen her other animations
asides from the ultimate
yeah
i think its pretty bland
like, i will argue that xueyi's animations look more satisfying 😭
honestly true
I like the idea but where's the rest of the sprite
its a short sprite
i wouldnt mind if the animations quality are like, on par with 2.x 5* at least, but her animations are just... lackluster?
like half joker
what it do
doesnt help the fact that shes in the same version with phainon too
and phainon animations are just insane
thats actually a similar to my idea. i dont really know how it would be implemented though. kindof like equipment esque for your jokers. let me just flex a bit on my drawing skillz
a is hands, b is discards, c is $
the plus-minus sign is
- for chips
'-' for mult
what is x
x is +chips and +mult
I think part of it is security
Using tools like GitHub makes version control much easier
Also makes it easier for people to add support/crossmod for your mod as well as bug fixing and such
and a lot of important reruns in 3.4 like tribbie, with phainon and 2 collab characters is just making my wallet cry
sob
i put all my skills into drawing and dumped coding. Except Python. I'm good at Python for some reason.
i mean like
what point do you need to publish it
oo super cool
cause idk where you actually publish balatro mods
reminds me of yellow diamond from steven universe actually
here if you want to
i think the collab banners will last more than one update
do you mean what's in the rules?
here, thunderstore, and that one mod manager right?
meanwhile me chilling with castorice with only a bailu and lynx as the ONLY HEALERS on my account, happy and satisfied bcs i got all my characters I wanted
thats true, but what if 3.5 also has good limited chars
thats a lie actually I got gallahger on castorice's banner but hes barely built rn
(i hate thunderstore's publishing to my very core tho)
i will admit that sucks, personally i just don't bother with trying to get a specific character
same
YES
i had a cool boss blind idea, and i want to know if its possible.
"The Anomaly."
"Replay the same boss blind 8 times."
"If there is an anomaly, please lose the blind."
though the dot buffs are very nice
please
castorice is quite broken
That's actually a great question I'm not sure
dot team's average cycles in moc lessened by like, 3c now
is there a base SMODS thing for ^mult
i got both castorice and anaxa, won both 50/50s at ~75 pity
or do you need to customcode that
damn
no, you need talisman
i'm more happy with anaxa than castorice tbh
i have dragon, butterfly, and meaning of death autism so ofc i needed castorice
he's my favorite character so far
i didnt even see her kit before getting her
pales in comparison to phainon, the power creep both animation-wise and power-wise is insane ngl
how do i make soul_pos use a different sprite than the base joker sprite
just that she has a MASSIVE FUCKIN DRAGON
your image should have both the soul and the joker sprite
theres the predicament, talisman crashes my mod and i dont know why
i mean you can but ^mult doesn't go that far without bignum
i think castorice animations are more satisfying than phainon
phainon's feel like they could belong to any random gacha turn based game
are you attempting to compare a number with a table
yes
yeah thats talisman
its the part where it compares amt in common_functions
so the game determines what the soul_pos should do?
and since i am rambling now. The first guy. is the joker im coding now. and i feel like its so fitting that he's being such an ass to coding. Disenfranchised Stem Kid </3
mmm fair, im not a huge fan of castorice so maybe im a bit biased there lol
should i put the name of the mod im working on in my name or is that just something some ppl do
you just hate whimsy /lh /j
sob
most people do it
i dont like it because my name is too short so people call me by the mod name lol
i guess for me i haven't spent money in the game so I don't have any kind of attachment to it
i don't expect anything out of it
i started in 2.6
all of my mods in any game are just "CGNik's [whatever the mod adds]"
r/acheronmain is going wild now
are you still playing it
so then how do i get soul_pos to only apply on the joker image, and leave the background normal like all legendaries
wuh
yeah
what do you mean by that
pos is the normal image, soul_pos is the floating sprite
i haven't either yet i just have so much luck that i always manage to get my favs <3
im currently playing zzz and pgr, i think i might like hack and slash games
I'm also playing zzz yooo
i am playing too many incremental games please help me
balatro zone zero coming soon
do you play on na, if so i'd like to add you ingame
played it once wayyy back and kindof hated it at first but now I love it sm
my favs become the characters i get lol
no i play eu 😦
same
i have already committed to like 2 different mods but - i can make art
the ping is crazy tho im just there because my friend is italian
then how do i tell the game which sprite to use for soul_pos
soul_pos = { x = 0, y = 0 }
change x and y accordingly
position in the same atlas as pos
-# that was a joke
i already have balatro star rail, and i still intend to expand on that lol
i live on south america so my ping on na is bad too
it's like 180ms most of the time
why does my achievement not pop up visually?
code:
SMODS.Achievement{
key = 'deathbypineapple',
hidden_name = false,
hidden_text = true,
bypass_all_unlocked = true,
earned = false,
unlocked = false,
reset_on_startup = true, -- uncomment to reset achievement. Should be a onetime thing and then the player goes "dont do that again"
unlock_condition = function(self, args)
return args.type == 'deathbypineapple'
end
}
SMODS.Joker{ -- Pineapple implementation. TODO: fix achievement
key = 'pineapple',
config = { extra = {
xmult = 3
}
},
pools = { ["Food"] = true },
rarity = 1,
cost = 2,
blueprint_compat = true,
eternal_compat = false,
perishable_compat = false,
loc_vars = function(self,info_queue,card)
return {vars = {card.ability.extra.xmult}}
end,
calculate = function(self, card, context)
if context.joker_main then
return {
xmult = card.ability.extra.xmult
}
elseif context.end_of_round then
G.STATE = G.STATES.GAME_OVER
G.STATE_COMPLETE = false
check_for_unlock({type = 'deathbypineapple'})
end
end
}
still very proud of this little guy :3
i can hear it pop up and checking the mod settings shows i got it but it doesn't appear visually
big chicken
😔 fucked up.
Mayhaps i can just think about the cards. because i dont want to code like a million more.
sushang and lynx were the two characters that made me see hsr as an absurd comedy game tbh
the other characters all had serious animations
lynx and her bigass pill
i used lynx so much too
what about m7 hunt tho
lynx was deadass my only healer for ages
by the point i got m7 hunt i was used to it
this just game me an idea
I was scraping by with. SUSTAIN WELT
also it really fits her
X5 Mult in a common joker, but at the end of the round it goes Eternal and loses all effects
i think 3.5 will have another form of dan heng, if im not wrong
i started the game with bronya seele bailu tingyun
oh?
will it actually be good
i have dhil and i never used him
dhil and his light cone
as my boyfriend
He still one of my best characters if only because i keep dumping all the free eidolons onto him for a stupid ass bit
he will be a pres unit

I played all the early game with yanqing xueyi lynx and someone else
why is gacha in the balala modding channel
but that just uses my background for the joker, how do i tell it to use the actual joker
got yanqing on the beginner banner
wait ya we should move
the gacha discussion
true
uhh we're talking about balatro star rail
yeah #1338562637453066240
oo
what's your atlas rn?
i haven't touched balatro in months
balatro star rail is like one of the top 5 mods i played this year
i mean the image
oh
aw thanks, the mod is so incomplete that i dont expect anyone to even find it fun at all 😭
afaik you can't define different atlases for soul and normal pos
my early game was uh. Welt with his Light Cone, Kafka, Lynx and Robin w/ her Lightcone
that reminds me, I loved Welt at first, but he was very underwhelming
Anaxa is just better welt
you dont understand the bit
oh no, welt was fine for me, dps welt was cool as hell
i got him on 2.7 :(

im pretty sure i told you the soul sprite needs to be in the same image as the joker
unfortunately never used SMODS.Achievement before
-# and i think very few people used it too
sorry
;(
my robin is also like. beefed up as like a sub dps.
yeah but then how would the game separate them
you need to add the soul pos in this atlas
separate?
just add a different joker slot on the right of that and put the soul sprite
so you get two joker sprites side by side
ohh
im very proud of my jingliu build
anyway i got him in 2.7 with the free selector, i imagine he was better back then
with weaker enemies
Yeah I didn't even know it existed for a good while
My next mod is gonna be just adding an achievements section to the stats or collection or smth so that people notice and care about them more
and i dont think she needs that much crit dmg anymore too
yeah she gets a lot of crit dmg in the buffs
prob better to go for ice dmg (i don't have her tho, so ignore me)
:(
yeah, ice orb, everything wants hp%
its me hanging chad

bepis can i give you 50 dollars to manage my relics for me
i also have full dot team too, so thats cool
😭 it cant be that serious
i hate metagaming
personally idk the problem, sorry
i need someone to hold my hand and tell me exactly what to put on characters or i get bored
i think only myst ever used SMODS.Achievement
glad to seeing people use the Food pool tho
use the recommendations
cryptid too no?
yeah fair, i guess you are a casual player
i never farm relics, I just craft them
yeah those are cool i was honestly going to quit the game before that lol
i did a bit on the 3x drops but i got trash
i use prydwen to figure out what build i should have for my characters
super cool website
i use that for end game stats mostly
Garbshit (my beloved) does as well
I'm gonna add achievements for the full release of my mod
i will also add achievements to yggdrasil soon, just uh, when i get the art done :3
is this good actually
oh god the soul_pos discussion is gone my shitty diagram is useless
very???? the background is immpaculate
im new to pixel art so
yes this is very good
peak
is that for yggdrasil
:3 aw thanks
yes we are having a collab with balatro star rail
skill tree mod?!
skill tree, crafting mod
yggdrasil was initially not planned at all, actually
bsr was supposed to have a skill tree as one of its updates
but people wanted it to be a separate mod of its own, so
is it a library for skill trees or a content mod
both
:D
i opened my art to see which character i was working on next and its the reason i dumped all my free eidolons into welt 😭
you can add your own sections and skills very easily, so yeah
well. he doesnt look much like him in this era
but the second card for him will be much more welt-y
how do i make a joker eternal
:add_sticker("eternal")? not sure if thats the key
like always be eternal or when its spawned by something
when triggered to be eternal
seems like it
:set_eternal(true) and :set_eternal(false) to add/remove respectively.
it would look nicer if the card is flipped faster
what if you dissolve the card
and maybe some shuffle effects?
or is that too much
maybe if it moved to the left a bit as its being flipped over like in an arc
i agree i did make it faster later
i feel like dissolve would make it look like they are being destroyed, same with shuffle, i dont want them to think the deck is shuffled
this is the best visual i can make
evil
hmm i dont get it
like to give it a more natural feel than just turning over in place. It makes it look like its actually being grabbed and flipped over.
Like adding anticipation to the animation can make it clearer and easier on the eyes
my problems would be solved if the deck drew from the top like a normal deck would lol
oh is it from the bottonm??
I mean I think my idea still works lol its just extremely cursed to me
oh ok i like the idea but im not doing that lol i would prefer not to mess with the standard flip animation
ah
i think the flipping animation looks fine
you're right that the disappearing feels a bit sudden
maybe just like throwing them off to the side with a little fade?
yeah, I don't know how to make it look like it's the top card of the deck
(because it's actually not in the deck)
wdym like discarding them to the side?

like just a simple transition whilst moving them to the side? Now that I think about it im not sure thats what you were going for
and also creating tags
im trying to show the top x cards of the deck
okay
chat will i win
there are going to be effects that depend on hitting a certain rank/suit/enhancement etc
add_tag(Tag('tag_something'))
yes
don't remember any tag ids
no
do you know how to get the current blind's tag?
uhhh
cryptid does that i think
sob
it's buried somewhere in G.GAME.current_round or smt
i don't remember exactly but if you have debugplus you might be able to find it easily
that's the best joker in the mod
true
one sec
hm. the best thing I can think of is the original idea i had. Or making it slower actually, since it might make it a bit easier to understand whats going on.
OR maybe particles coming out from the card when its 'put back' think like dust ?
Not sure how feasible either of those would be
a bit slower would be annoying i feel, someone already asked me to do multiple at once lol
classic balatro stuffs yk
yeah this is just a polterworx joker
polterwox joker but balanced
-# i think
balatro players hate animation i can't live in this economy (animation major) /j
must have fast dingding ding number Bigggg
i mean this is supposed to happen once a blind so i get it
I also understand not wanting it to be slower LOL animation is all about making sure you can see whats happening while gaming is all about speed
i might actually have to nerf kafka later
its still crazy how good she is just from eidolon 0
sob
i am going to have a log where you can see the cards after the animation anyway
also from what I saw it seems they made the buffs optional
yeah
so you still can use the old versino
but lets be honest, why would we want kafka to be worse
@red flower this right? crashing game
for comparisons!!!
kafka is my fav hsr character probably
mhm. I was coming from a readable animation so you can tell whats happening vs. just getting information fast
it should be
any quick way to find whats triggering G.FUNCS.text_input_key, because i can't figure out whats calling it at all
doesnt work for some weird reason
search the entire source code for "text_input_key"
it's prob called in ui elements
some definition of an ui element that specifies that func
heres my color define btw
hope this helps, i recently made one for testing purposes
its triggered by 6 things, none of which should be interacting with this as far as i can tell, ill test all of them out tho
how u call this for local text outta curosity tho?
could also be other mods, or even steamodded itself
i need a button in the middle
well right now im just trying to make it possible to type 0 into create_text_input, and while bepis has done it in yggdrasil, and that method 100% works, i want to try and make a way that won't cause a mod conflict
nevermind, i was just doing the patch wrong lol
pom pom button
it plays a very loud pom pom sound
i havent really checked, but i would GUESS you just replace the hexes with the locals tho, if anything dont forget to add {}s around the locals
you also need a button in between those and the joyousspring graveyard
you need a button on every empty space
good idea
@uncut cloud pretty sure i did tho
let's replace all card based gameplay with buttons
otherwise you are obligated to do a x10 in hsr
this is just actual hsr now
{C:purple,s:1.2}
blasphemy, i always did s:1.2 first
i want to play the new hsr story but hundred line is so long lmao
hi hayaya
i actually enjoyed the new hsr story
also, from what i heard, ||everyone fucking dies in the story??|| story spoilers
aight ill try
hi haya
||yes they do||
everyone fucking alright
truly a heartwarming story
hm
i did see that in your screenshot you were missing these idek if its actually needed but if i take em out i crash so
how is he still triggering multiple times 😭 what the hell is happening
pretty sure it doesnt have to do with scaling its the enfuse word
yeah, thats just something i noticed
i learned to treat the story as a book
also, probably unrelated but update smods
this is prob it not being in a table great call
it finally allowed me to truly enjoy it
you don't expect fancy animations from a book anyway
i usually play them as background noises lol
unrelated lol
👍
sometimes even sleep to them
well you set the flag to 0 each time so it's not going to make a difference
yes. i just noticed that 😭
mmm never used SMODS.Gradient before so idk
i dont really like. actually fall asleep i just get super tired and then turn it off and then go to bed so no mem <</3
fell asleep while doing hsr story once
that might mean it's so boring u get sleepy
nw i got it lol
what did you wake up to
OH MY GOD IT WORKS
wake up to see 10 am turning to 7 fucking pm 😭
felt like i was in a dream, cant explain ihy
is it? I think the color thing was added after your version
oh lol ill update XD
does anyone have any idea why this doesnt work
this' a joker btw im testing a part of it rn and havent been able to get a sticker on another joker
i imagine the characters in the game waited for you for 9 hours to speak
trailblazer spacing out for 9 hours and they can do nothing about that
there has to be a horror story about being an npc in that scenario
wouldnt be surprised if theres a niche side story about that tucked in a hidden corner somewhere
what part doesn't work? also use not context.game_over instead of == false
idk if add_sticker works but if it does then it's probably :add_sticker() with a colon
nil == false is false apparently
i use == false because aure said so one time
this' probably it
that game_over means something when its nil
huh
oh thats new knowledge
but idk if that's true
but anyway if you see it it's because they're copying my vanillaremade stuff
I think my cat fixed it cause as soon as she started hanging out around my laptop it worked <333
noted
is it possible to do smth inside a calculate function that counts up like
for k, v in pairs(G.play.cards) do
if v:is_suit("Hearts") then
suits = suits + 1
if v:is_suit("Spades") then
suits = suits + 1
if v:is_suit("Clubs") then
suits = suits + 1
if v:is_suit("Diamonds") then
suits = suits + 1
end```
?
yup, that was it, thanks yet again
you can do this anywhere as long as G.play.cards is defined
yeah i used it on another joker bc it looks through the played hand apparently
you can also use context.full_hand
And even with this-- his code isnt fucking done 
in any case this should work as intended where it counts up based on the suits in the played hand right? or will i need smth to reset it after it's used?
no it's a local so it will reset every time
the only problem is with wild cards probably
oh wait i thought those were eleseif
wdym?
you wrote
if cond then
code
if cond then
code
end
so i read those as elseifs
if they're elseif they're not going to count wild cards properly
since they're just if, do they count wild cards properly
probably
i think good coders will throw up reading yggdrasil's code
i throw up reading any code not made by me
even eremel's? damn you got some ego
i throw up reading any code not made by me in the last 3 months
a
Oh my god I just pulled SMODS to find out Eremel finally pushed a universal hand limit API 
At long last
Guys I am become lost
yeah its super cool
I'm trying to make a consumable
🔥
That when used, creates a specific Joker
i want my PRs to get merged
I hate looking at the code of my headmates 😭 girl why is it all hardcoded
SMODS.add_card({key = ...})
And despite this I STILL need a patch to make it work with challenges 😭
Whatever at least it's less destructive now
i actually want aiko's pr to get merged
yeah it looks super useful
I actually formed because our host wanted to get itno gamedev but kinda sucked so then I happened and now I do all the coding for him
i gamedev because roblox sucks
how would i make a deck where all the cards have one enhancement
This is an insane statement LMFAOOOOO
Same body makes code in two wildly different styles 😭
okay so our first project was inspired by pressure but we were so adamant about not doing it on roblox so we learned gdscript. only to learn that we couldve been doing lua the entire time
like this?
i love godot but ive never finished a game
pressure fucking mentioned
@glad osprey
gdscript is admittedly pretty neat
hello
hi
removes then
peshr
hello quid
its actually really complex considering STEM is a part of trauma for us so the knowledge of it gets chopped up and hidden from people and I happen to just have more of that knowledge :3
also hi
I am not biritsh
gdscript, like, geometry dash script??
im an (not introject but close enough) of our pressure au oc lol
anyway i should sleep i work tomorrow
byeee
like i know cryptid does this but also its cryptid and the other code from it ive tried to use doesnt work at all so...
opnly british people like teto
thanks for all your help
how would i set up the soul_pos so that only the joker is used?
do I replace it with and?
Fascinating alter lore ngl
no
or just remove it and move the other part to the next line
yes
its in our oc lore too so :p
lol nice
also, gn N'
-# i read that too late i think
I assume you can just move the normal pos to a completely transparent square?
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
worked, thanks!
real
found issue since it still was crashing does the table for colors need to be number? i have input as hex string but lsp def says other
this too was with it
😭 i wish </3 it can't make me forget the suffering to code that SHOULD but WONT work
grrr
Dev chat is supposed to help make that easier on ya lol
i think im good enough with ui now, hopefully?
the past 1 week of ONLY working on ui made me want to poke my eyes out so badly, but at least they work now
-# eremel will still probably kill themselves reading my mod's code
before i go does anyone know why my achievement does not pop up visually?
code:
SMODS.Achievement{
key = 'deathbypineapple',
hidden_name = false,
hidden_text = true,
bypass_all_unlocked = true,
earned = false,
unlocked = false,
reset_on_startup = true, -- uncomment to reset achievement. Should be a onetime thing and then the player goes "dont do that again"
unlock_condition = function(self, args)
return args.type == 'deathbypineapple'
end
}
SMODS.Joker{ -- Pineapple implementation. TODO: fix achievement
key = 'pineapple',
config = { extra = {
xmult = 3
}
},
pools = { ["Food"] = true },
rarity = 1,
cost = 2,
blueprint_compat = true,
eternal_compat = false,
perishable_compat = false,
loc_vars = function(self,info_queue,card)
return {vars = {card.ability.extra.xmult}}
end,
calculate = function(self, card, context)
if context.joker_main then
return {
xmult = card.ability.extra.xmult
}
elseif context.end_of_round then
G.STATE = G.STATES.GAME_OVER
G.STATE_COMPLETE = false
check_for_unlock({type = 'deathbypineapple'})
end
end
}
sadly no :(
it was kinda funnt because
as a tip idk if you do this, but sometimes i put random ahh print statements to see if everything is functioning fine and if that section of code is actually being run thru
also.. death by pinapple...
anwyays uh. how to destroy card. I've been so focused on moving the card i. realized i dont know how to do this
Idk what happened but a joker that's supposed to be retriggering isn't retriggering jokers at all
Visually? Does it unlock silently???
no i can hear it
She won't care lmao
I will tell her that you killeded myself :/
I know about context.destroying_card but i don't know how that works? would destroy_card = card be the card i want to destroy?
She still wouldn't care 
fair enough
Honestly using card:start_dissolve() is the best way at going about it
poggers
where 'card' is a reference to a card object
I wonder if it's some weird conflict with the states changing
off topic but
the card textures
maybe?
how do i delay something
how would i make context.remove_playing_cards include all playing cards removed instead of just if a playing card is removed?
like this?
elseif context.end_of_round then
G.STATE = G.STATES.GAME_OVER
G.STATE_COMPLETE = false
G.E_MANAGER:add_event(Event({
func = function()
check_for_unlock({type = 'deathbypineapple'})
end
return true
}))
end
ye try that
calculate = function(self, card, context)
if context.cardarea == G.play and context.main_scoring then
for i = 1, self.config.extra.DupeAmount do
local new_card = copy_card(card, nil, nil, G.playing_card)
new_card:set_seal(nil)
new_card:add_to_deck()
G.deck.config.card_limit = G.deck.config.card_limit + 1
table.insert(G.playing_cards, new_card)
G.hand:emplace(new_card)
new_card.states.visible = nil
G.E_MANAGER:add_event(Event({
func = function()
new_card:start_materialize()
G.GAME.blind:debuff_card(new_card)
G.hand:sort()
return true
end,
}))
end
end
end,
}```
Why is this not working with Hologram?
It's a seal btw, (is that why it's not working?)
i'm trying to make a retrigger joker but it isn't retriggering any jokers to the right
had to move return true to inside func but it just doesnt grant the achievement now
Now that's quite odd
Any ideas?
Specifically not hologram? or is it all jokers
this was so remarably easy compared to everything else im a bit suspiscious.
LMAO
do stone joker and steel joker properly update?
Oh I see what you mean now
Stone does properly update
Guys, anybody know what I did wrong here? I'm not getting a crash, the card shows up in game, but it doesn't let me click use.
Both do update
It's just hologram
My guess is copy_card doesn't actually trip the playing_card_added context
DNA trips it
does dna do it itself then?
AH ok I see how DNA does it
there's this funny extra thing in the return that probably trips it
So maybe do this in your seal?
I just playing_card_joker_effects(addedcards).
where are decks defined in the source code (the decks themselves, not the class)
why are you looking at the balatro source code itself and not vanillaremade
Why am I not looking in there I fkn contributed to it 😭
because I'm trying to make a mod not dependant on smods
that is a death sentence
ok you got an answer or
lemme try rq
how to i implement my own custom colors?
in game.lua I think
SMODS.Seal {
key = "Silver",
atlas = "BCU_centers",
pos = {x = 0, y = 5},
config = {extra = {DupeNum = 1, DupeDenom = 2, DupeAmount = 1}},
discovered = false,
prefix_config = {
key = {mod = false}
},
badge_colour = HEX('B1B1B1'),
shiny = true,
sound = { sound = 'gold_seal', per = 1.2, vol = 0.4 },
loc_vars = function(self, info_queue, card)
return {vars = {self.config.extra.DupeNum, self.config.extra.DupeDenom}}
end,
calculate = function(self, card, context)
if context.cardarea == G.play and context.main_scoring then
for i = 1, self.config.extra.DupeAmount do
local new_card = copy_card(card, nil, nil, G.playing_card)
new_card:set_seal(nil)
new_card:add_to_deck()
G.deck.config.card_limit = G.deck.config.card_limit + 1
table.insert(G.playing_cards, new_card)
G.hand:emplace(new_card)
new_card.states.visible = nil
G.E_MANAGER:add_event(Event({
func = function()
new_card:start_materialize()
G.GAME.blind:debuff_card(new_card)
G.hand:sort()
return true
end,
}))
return {
card = self,
playing_cards_created = {true}
}
end
end
end,
}```
And... nothing
true probably isn't what you want, you wanna return the card you created in that table
In what sense? Do you wanna have a constant or just as a one-off
Im assuming id either need to insert them into Args.loc_colors or make my own ?
i'm so confused
dna does this
func = function() -- This is for timing purposes, it runs after the message
G.E_MANAGER:add_event(Event({
func = function()
SMODS.calculate_context({ playing_card_added = true, cards = { copy_card } })
return true
end
}))
nope :D
oh hello. (i was backreading when you replied lol} I'd like them constant so i can type out like {C; Aether} and get the color associated with that character
will investigate next
i think i found them once before because I was VERY lost on my fist attempt at modding. godforbid i remember though
im not sure honestly what im doing wrong tested with norm colors in game and still crashing anyone know?
back.lua

The way I implemented this sorta functionality was with a lovely patch but there are probably some better ways out there to do that
not what I'm looking for
Those are just localization calls, not the objects
^
anyone know what card area that cards in packs are in?
G.pack_cards
iirc
G.pack_cards
ty
that's where they be ty
u got it
anyone know?? plz...
theyre lower down there
That's the functionality of the deck, not the deck object
i'm trying to make a joker retrigger jokers to the right but it doesn't do so
OH
yeah that would be game.lua 😭
how could i forcefully move a card from g.pack_cards to g.consumeables
trying to make a card that forces itself into your consumables if you see it at all
would it just be emplacing it in consumables or smtn else
try destroying it on creation if its in pack_cards and then creating it in the consumables
maybe other way around
yeah alright
should be card:juice_up() afaik
What is getJokerID()??
there is none
Hmm
THIS SCARED ME SO BAD I THOUGHT I BSOD'ed 😭 why is the crash like this
well something's not happy about you trying to juice it up
blue jumpscarw
Your consumable type doesn't have any color attributes
i never made any consumables
So what do I do then? add a juice_up?
No, there's an existing one that you have that doesn't like what it's being called on
I think
Did you lovely patch something?
no. i renabled cryptid though? idk if something went weird with it
so logically i disabled it again and now i get this
Did you make a rarity? 😭
i think balatro has decided to delete all its important files
reinstall it and steamodded
no
Also it's typically best to develop with a clean environment (no other mods you don't intend to develop alongside)
yeahhh thats why i disabled them but i wanted to study something from cryptid
I'm gonna restart my computer bcs i was having random ass issues with JenLib earlier for no apparent reason that restarting fixed (it wasnt even modding related. it just hated me)
- If you wanna do that just pull up the github lol
- Cryptid is notoriously bad to study because of it's self-defined conventions built on old modding standards that are well outdated
fair enough
the only reason to look at cryptid is if you specifically want cryptid compatibility
and you dont have it yet
Or it does something nothing else does and you wanna figure out how
Well i looked through my code and the only juice_up that could be related is the one for the spectral, but that's impossible to be the juice_up it's dealing with
coding while food poisoned. yaaaay
Looking closer it's in common_events.lua so it's no one of yours
Dude get some rest oml 
I can't sleep because of it
blegh
you have to try anyways
I wanna get this seal working before i try
what do we think
Okay resetting did not work. Looks like I'll either need to reinstall or replace files cause I do just have another copy of the files on my computer. Because I was very lost on my first foray into modding.
That's a thing for tomorrow me though. I'm going to take this as a sign from God to Cease
i'm trying to make a joker retrigger other jokers to the right but it doesn't do it, does anyone know what's causing that issue
Make it change to random colors on init and then we're talking 
/j
i would do that if i knew how
I got no idea tbh
Yeah no that sounds like a mess lol
are there any other documentations outside of steamodded's github?
Seems easy from a game dev perspective. Idk how well it would work in Smodded
i could also just make multiple recolored versions
much appreciated, thanks
np
So what's my issue then?
Subscribe to see more. I left a few hints in the video as to where the project is going next :) (I'M NOT RELEASING THIS GAME, JUST TRYING TO LEARN GAME DEVELOPMENT)
I switched the project to Godot. L Unity.
Find the line the crash report gives you and the surrounding code will help diagnose it
Balatro mention in the video I believe lol
G.E_MANAGER:add_event(Event({
trigger = 'immediate',
func = (function() card:juice_up(0.7);return true end)
}))
end```
that's where it's crashing
send us the whole error report
where tf does juice_card get called 😭
functions/common_events.lua:1255: attempt to call method 'juice_up' (a nil value)
Additional Context:
Balatro Version: 1.A.0-FULL
Modded Version: 1.0.0~BETA-0506a-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.7.1
Platform: Windows
Steamodded Mods:
1: Galdur by Eremel_ [ID: galdur, Priority: -10000, Version: 1.1.4, Uses Lovely]
2: 1.A.0 by ??? [ID: BalatroCommunityUpdate, Version: 1.A.0, Uses Lovely]
3: DebugPlus by WilsontheWolf [ID: DebugPlus, Version: 1.3.0, Uses Lovely]
Lovely Mods:
Stack Traceback
===============
(3) Lua field 'func' at file 'functions/common_events.lua:1255'
Local variables:
(*temporary) = nil
(*temporary) = table: 0x08a92940 {loc_vars:function: 0x08a92dc0, _saved_d_u:true, original_key:Silver, mod:table: 0x08834bf0, registered:true, badge_colour:table: 0x08a92ce0, _discovered_unlocked_overwritten:true (more...)}
(*temporary) = number: 0.7
(*temporary) = string: "attempt to call method 'juice_up' (a nil value)"
(4) Lua method 'handle' at file 'engine/event.lua:99'
Local variables:
self = table: 0x088b17e8 {start_timer:true, timer:TOTAL, blockable:true, trigger:immediate, func:function: 0x08e8ec48, delay:0, complete:false, time:35.335690537427, blocking:true (more...)}
_results = table: 0x08c41348 {blocking:true, pause_skip:false, time_done:false, completed:false}
(5) Lua method 'update' at file 'engine/event.lua:182'
Local variables:
self = table: 0x0848ad58 {queue_last_processed:77.53333333333, queues:table: 0x084886f0, queue_dt:0.016666666666667, queue_timer:77.656603529895}
dt = number: 0.0166752
forced = nil
(for generator) = C function: next
(for state) = table: 0x084886f0 {unlock:table: 0x08405700, galdur:table: 0x08b68ba0, other:table: 0x0832a0d8, tutorial:table: 0x0851d4d0, base:table: 0x0856a388, achievement:table: 0x0847e330 (more...)}
(for control) = number: nan
k = string: "base"
v = table: 0x0856a388 {1:table: 0x08881c20, 2:table: 0x088b17e8, 3:table: 0x086f7b18, 4:table: 0x08a99a38, 5:table: 0x08567208, 6:table: 0x08e27f90, 7:table: 0x087b3608 (more...)}
blocked = boolean: false
i = number: 2
results = table: 0x08c41348 {blocking:true, pause_skip:false, time_done:false, completed:false}
(6) Lua upvalue 'gameUpdateRef' at file 'game.lua:2573'
Local variables:
self = table: 0x08349618 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x08cab1a0, F_ENGLISH_ONLY:false, viewed_stake:1, HUD:table: 0x089d1ea0 (more...)}
dt = number: 0.0166752
http_resp = nil
(7) Lua method 'update' at Steamodded file 'src/ui.lua:86'
Local variables:
self = table: 0x08349618 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x08cab1a0, F_ENGLISH_ONLY:false, viewed_stake:1, HUD:table: 0x089d1ea0 (more...)}
dt = number: 0.0166752
(8) Lua field 'update' at file 'main.lua:999'
Local variables:
dt = number: 0.0166752
(9) Lua function '?' at file 'main.lua:938' (best guess)
(10) global C function 'xpcall'
(11) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 909 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])```
oop
you can send it as a file i think
guess cause I have nitro it won't let me
thats great nothing there is blaming your code
then what is it?
when you want to drink the card as juice
idk
redshell mentioned
bumping this
What i do in this situation is put print statements everywhere to find exactly where the value got lost and turned to nil
Print my debugging beloved
does anyone know why my achievement doesn't pop up visually? i can still hear it and i still get it it just doesnt visually show up when its granted
code:
SMODS.Achievement{
key = 'deathbypineapple',
hidden_name = false,
hidden_text = true,
bypass_all_unlocked = true,
earned = false,
unlocked = false,
reset_on_startup = true, -- uncomment to reset achievement. Should be a onetime thing and then the player goes "dont do that again"
unlock_condition = function(self, args)
return args.type == 'deathbypineapple'
end
}
SMODS.Joker{ -- Pineapple implementation. TODO: fix achievement
key = 'pineapple',
config = { extra = {
xmult = 3
}
},
pools = { ["Food"] = true },
rarity = 1,
cost = 2,
blueprint_compat = true,
eternal_compat = false,
perishable_compat = false,
loc_vars = function(self,info_queue,card)
return {vars = {card.ability.extra.xmult}}
end,
calculate = function(self, card, context)
if context.joker_main then
return {
xmult = card.ability.extra.xmult
}
elseif context.end_of_round then
G.STATE = G.STATES.GAME_OVER
G.STATE_COMPLETE = false
check_for_unlock({type = 'deathbypineapple'})
end
end
}
shell jumpscare
G.GAME.blind.config.blind.key hm...
Welp, guess for now it won't trigger hologram, idk
Looking at the smods documentations they need an atlas? So maybe it is there it's just invisible/no sprite
Try Ali's idea instead of mine tbh
where?
this one
it's just a function call instead of a return value
i've had it pop visually when i made it grant on startup
i doubt its that
besides jokers arent invisible with no atlas
Interesting
Achievements don't need any sort of atlas/sprites
Only other thing I can think of is maybe something going awry with the Loc_txt but I can really tell
I still think it's some weird state shenannigans
SMODS.Seal {
key = "Silver",
atlas = "BCU_centers",
pos = {x = 0, y = 5},
config = {extra = {DupeNum = 1, DupeDenom = 2, DupeAmount = 1}},
discovered = false,
prefix_config = {
key = {mod = false}
},
badge_colour = HEX('B1B1B1'),
shiny = true,
sound = { sound = 'gold_seal', per = 1.2, vol = 0.4 },
loc_vars = function(self, info_queue, card)
return {vars = {self.config.extra.DupeNum, self.config.extra.DupeDenom}}
end,
calculate = function(self, card, context)
if context.cardarea == G.play and context.main_scoring then
for i = 1, self.config.extra.DupeAmount do
local new_card = copy_card(card, nil, nil, G.playing_card)
new_card:set_seal(nil)
new_card:add_to_deck()
G.deck.config.card_limit = G.deck.config.card_limit + 1
table.insert(G.playing_cards, new_card)
G.hand:emplace(new_card)
new_card.states.visible = nil
G.E_MANAGER:add_event(Event({
func = function()
new_card:start_materialize()
G.GAME.blind:debuff_card(new_card)
G.hand:sort()
playing_card_joker_effects(new_card).
return true
end,
}))
end
end
end,
}```
Like this?
the text shows up fine with the achievement if i look at it after i get it (or before)
Mym
You said it worked just fine on startup?
What would the ideal/intended unlock look like for this
without the period and it takes a table of cards, not just the one, so just wrap new_card in {} for the function call
this is the ideal unlock (except i want to see it)
hold on let me show you the startup one
I'm not that good at reading code 😭
wait so where do i put it exactly?
Posting this again but i'm having issues with trying to make a joker retrigger another joker to the right but the retrigger never takes effect
your call should look like this
playing_card_joker_effects({new_card})
I know this question probably gets asked a ton, but how accessible would you guys say modding this game is? I know you can unpack the game's files which has me started on making textures, but I wanted to know how difficult of a task you guys find making jokers are
ok lemme try again
Once you get used to it it's very easy ngl
can anyone help me with this
Oh awesome. Is there documentation of where to get started or things to keep in mind, or is it just kinda look at code and try to parse things together?
Oh sick thank you
Hard at first but this community, looks at. This chat in particular makes it so much easier.
Accessible in terms of what you need? All you need is a laptop that can run Balatro. VScode is free and awesome
Pretty sure all of those things are in that thread lol
oh are they
Just confirmed it lol
Hologram is kicking my ass lol
I think this sums up learning to mod this game LOL
hologram got hands...
Try calling the function after your event
you know what's stupid that i should check
At least your card didn't fucking eat the files from your Balatro </3
Eat the files is crazy work
mmm yummy files
Check What the heck does Hologram does in-code
tastes like spaghetti
Don't call my code spaghetti!!!
I don't think it's a hologram issue, it's just a context issue since you're not getting it to trigger lol
yeah i meant thunks
does anyone know what this means?
wasnt really designed to be looked at ig
cant tell if its a stupid mistake of mine or if i installed something wrong
elseif context.playing_card_added and not self.getting_sliced then...
I have never seen this before 
joker tuah mult on that thang
scroll down
IGNORE MY MOD NAME 💔 💔 💔
alright
Or added to I suppose. Surprisingly my tendency to always make things easy and "modular" is from being a system and knowing someone else will look at it and try to code 😭
why the heck is it called hawk tuah Balatro
I found a website mentioned in the ultrakill mod chat about a website for making jokers. Is this a reliable way to get the blueprint of a joker started or is it more for reference? Sorry for all the questions
Did u accidentally make a global variable called atlas
what website
also why ultrakill of all places
Idk it's the ultrakill balatro mod thread
I think I know the one. Honestly it's better to just do it yourself for the experience
i dont think ive done that
hold on ill send the code
Or check your {} sometimes you accidentally put them where they aren't needed and send a table to something that doesn't need a table
Yeah that's the one. Standing by this opinion
Idk why this code doesn't retrigger jokers to the right without having another mod installed
(again ignore my poor attempt at naming my mod)
like the retrigger effect just doesn't work at all unless i had another mod loaded for some reason
G.GAME.blind.boss not context.blind.boss
I started with the Smodded example jokers mod thing. And asking a lot of questions!
where's the code that makes gold seal render differently than the others
whoops
Do you have the joker retrigger optional feature enabled
im just going off of what i can find from searches in this channel 💔
thanks though
in the source code
Smodded example jokers was moreso to to get the "skeleton" of a joker and then you add on what you want from there
Wait what?
What’s that?
Add this to your main file
SMODS.current_mod.optional_features = { retrigger_joker = true }
Ok i added it now i’ll see if it’ll work
I feel like this is some weird Fucked up version of House MD where we're all trying to find the weirdest diagnosis 😭
It works!!!
It's not weird because it works lol

😭😭
jimbo needs mouse bites to live
House, MD Joker -
Gives Jimbo a house to live in
House had a pet mouse for a couple of episodes
i had a look and its happening here in the talisman mod
I forgot what happened to it
is it meant to look like this or
good to know talisman is just as bad as cryptid
LOL
If Talisman is causing the crash completely on its own you might just have a bad install
nvrm found it in card.lua
Where'd you get your talisman??? From the shady man in the trench coat?
...you weren't supposed to know that
snorting my spectral cards
awesome it launches now
not sure why that was happening when it was launching FINE earlier
Dude I had a completely random crash happen with JenLib (aka polterworx dependency I think) for NO REASON. Didn't even change code in mine or JenLib. Restarted my computer. Completely fine.
Polterworx a tiny bit smelly imo
Yes but it has Saint Rain world in it and for that, I will die.
Yes but art theft is smelly
okay i have to go to bed gn yall
cya paradox
before i go heres a funny error i had a while back https://youtu.be/KlzObVHw_Bc
i literally had to make a youtube video just to post this
I don't fully understand the situation with that but I think they undid all the stolen art? Every thing seems credited when I've played jt
is there a good way to check/test if a joker i made is actually in the game or not
They did but it shouldn't have happened in the first place
Get DebugPlus
i see
thats a problem because... it wasnt there
SMODS.Atlas = {
key = "HawkTuahJokers",
path = "hawktuahjokers.png",
px = 71,
py = 95
}
SMODS.Joker = {
key = "testjoker",
loc_txt = {
name = "test joker",
text = {"test joker"}
},
config = {
extra = {
regularxmult = 1.25,
bossblindxmult = 1.75
}
},
loc_vars = function(self,info_queue,card)
return {vars = {card.ability.extra.regularxmult,card.ability.extra.bossblindxmult}}
end,
rarity = 3,
atlas = "HawkTuahJokers",
pos = {x = 0,y = 0},
cost = 7,
calculate = function(self,card,context)
if context.main_scoring and context.cardarea == G.play then
if context.other_card:is_face() then
if G.GAME.blind.boss then
return {
x_mult_mod = card.ability.extra.bossblindxmult,
message = "X1.75!"
}
else
return {
x_mult_mod = card.ability.extra.regularxmult,
message = "X1.25!"
}
end
end
end
end
}
do you mean like the json that makes sure its picked up by the mod loaders
yeah
i do
I've heard other things about it. I do agree that it shouldn't have happened but idk holding it against someone when they're trying their best to make up for it 🤷 but this isn't the time or the place for this so
ok then, is this joker code outside of your main lua file specified by that json?
wdym
So your json specifies a file as the "main file" correct?
It does, yeah
Is this joker code in that file or a different one?
I only have one lua file
hmmm ok
Did you remember to save the file?
And you're sure there's not a 151st joker?
weird
Is your mod enabled?
it is
Aight
wait actually
are mods compatible with lovely by default or do you have to add some extra stuff in
They are
Yeah this is weird
i have cryptid installed as well but it's disabled
if that would make any difference
Disabling it shouldn't make the difference
but it is good that you do have it disabled
really quick I'd highly recommend installing the Lua VSC extension in case you haven't. Could be something in syntax that's not coming up
I did that
absolutely, im completely stumped
If you don't mind could you shoot over the file so I could toy with it?
like the whole mod or just the lua file?
Whole thing actually. I wanna see if it boots for me
alright, give me a moment
here
btw thanks so much for all the help with this i realize im taking up a lot of your time
All good all good
ok that's weird
Dropping your mod into my environment made one of my mods' atlases come up wrong
so it might be your atlas that's the problem
huuuuuuh??? ?? 😭
my mod is evil and cursed
what might be the issue with the atlas
Oh my god I see it
what is it...
You're overriding SMODS.Atlas with this table 😭
One little equals sign causing all this havok lol
i need help asap this is happening to all my code idk what happened
again thanks so much
Same goes for the Joker btw
OKAY YES its in the game now
like what happened : (
CECIIIIIIL
LOL I FORGOT IT USED THE CECIL IMAGE
Undefined global SMODS.Lua Diagnostics.(undefined-globa
someone help please
SMODS isn't a recognized global variable because it isn't defined within your mod's scope. It will work just fine as is
but its pissing me off
?
Or you can hover over it and click quick fix and define as global variable
what do you mean ? sob
thats what i did
open your entire mods folder
If it's still showing then reopen vsc
Oh yeah btw this is also what was causing the error with Talisman earlier
I figured, yeah
annoyingly means i gotta reinstall
Boowomp
by the way is there like a mod that exists that lets you give yourself cards/jokers
That’s DebugPlus
Honestly your actual joker code looked solid, it was just that one semantic issue lol
So I think you’ll be fine
I mean I had to search like a maniac in this channel to get that together, "how to check if it's a boss blind" "how to check if you're scoring a face card" etc etc
Deceptively simple answers tbh
it's a lot to take in at once and annoyingly i think theres a lot in the github documentation it just doesnt go over
That is very true, SMODS docs are pretty outdated
Def check out #1349064230825103441 if you haven’t, tons and tons of resources expanding further on the subject there
Oh yeah I did have a look at that
Dig deeper as needed, I wish I had it when I started out lol
Multiple people in your system have an interest in coding? That's pretty cool! :o
Why is it that when the example walkie talkie joker is triggered, the joker doesn't move like jokers usually do when triggered?
Trying to make a Joker that permanently grants the player +1 discard when sold, kind of like a Recyclomancy voucher. Currently I have the following code:
calculate = function(self, card, context)
if not context.blueprint then
if context.selling_self then
G.GAME.round_resets.discards = G.GAME.round_resets.discards + card.ability.d_size
end
end
end
But it's only applying the ability while the Joker is held (so it behaves like Drunkard rn)
Anyone got any ideas?
Is it possible to make a challenge where only specific jokers are allowed as to banning specific jokers? I want to ban every joker in the game except one for this challenge so I don't want to have to type out every other joker
Where do I see the documentation of the context section of calculate?
oh wait I found it nvm
can I have a joker that every round has the ability of a randomly picked different joker? not like blueprit, cuz it doesn’t work on all of them, but like turning into a different joker every blind
You mean like any joker even ones that aren't present?
no, jokers you have only
so having it copies the config, calculate, remove_from_deck, etc and all of a random owned joker?
wether it is blueprintable or no?
That wouldn't work.
It still says not context.blueprint
And it wouldn't work properly if you don't set that.
quick question, got this check to find a joker although it doesn't seem to print anythhing at all, what have i done wrong?
local artofwar = nil
for _, j in ipairs(G.jokers.cards or {}) do
if j.effect and j.effect.config then
print(j.effect.config.key)
--artofwar = j
print("found")
--break
end
end
