#💻・modding-dev
1 messages · Page 134 of 1
...how I do prevent a tag that spawns booster packs doing its' own thing whilst an another one is being "opened" from a previous tag?
nvm not shipping with sleeves, i really shouldn't be trying to make art myself 
Do it
I had made the silliest temporary arts and people asked me to make it permanent 
y'all i think i overdid it a little
nvm
Zayum x7
yeah im def toning that down to x5
That’s way too good for a common
Just ship it and don't worry too hard about the art haha. I'm pretty sure someone is still using the placeholder sleeve art for one of their sleeves
it probably shouldnt reset so you eventually have to sell it
so it loses 0.25x mult each time you repeat the hand during the round?
i'll keep the middle as painted sleeve's, i can't come up with something better rn
doesn't look that terrible tbh
yeah it reduces the mult by 75% when you repeat the first poker hand
(reduction doesnt stack though)
oh so it goes from 7x to 1.75x after repeating the hand
*X5 to X0.25 after adjustments
basically if your first poker hand doesnt one shot you're fucked
wouldn't 75% of 5 be 1.25x rather than 0.25x?
i might have explained it wrong
X5 mult for the first poker hand
but when you repeat that hand it's X0.25 mult
so basically an acrobat on steroids at the start of a round
yeah
should probably be uncommon at least imo, for a common that's very powerful even at x5
maybe even rare
does something else need to be done before taking ownership of another mod's object?
{
rarity = 2
},
true
)```
doing this just makes the joker disappear
ok i think this is much better now
Watcha doin’ Isabella
X5 mult is a little too strong
its not common anymore at least
feels like cand(ace) shouldve done something with aces 🤔
i kinda wanted to give her a mechanic that would be a little bit faithful to the show
since candace tries to show her mom the boys' invention but it then disappears before she sees it
ty
do you have a thread?
candace has the endurance of sisyphus to continue each day tbh
i should probably make one
i might or might not have a cartoon to suggest
once i'm finished with my current mod i'll make a slay the spire themed mod (since i haven't seen any)
yeah it works
pov smods.calculate_repetitions doesn't support deck effects
No It works it just makes it disappear from the collection
new to modding with balatro, quick question; how do i properly create a new rarity?
a bit of searching led me to try
SMODS.Rarity {
key = 'prefix_test',
loc_txt = { name = 'Test' },
badge_colour = HEX('708b91'),
default_weight = 0,
pools = {},
get_weight = function(self, weight, object_type)
return weight
end
}
...
SMODS.Joker {
...
rarity = 'test'
}
which throws attempt to get length of local pool (a nil value)
follow up question; how would i do gradients in the rarity display (haven't tried anything with that yet - will search for that later)
well i kinda just threw myself at any crash or error i would get from launching the game till something worked
the rarity's key here shouldn't have the prefix, but the rarity string of the joker should
oh damn, thanks
yeah
works now!!
i have a bug, unaccounted for calculate context i think, my cards held in hand retrigger after winning the round, after the final scoring hand is aready played/calcuated, here is what it looks like in game.
Heres the lua code for these jokers, this ones for diamonds but all are identical besides suits``` SMODS.Joker {
key = 'vaingloriousjoker',
loc_txt = {
name = 'Vainglorious Joker',
text = {
"{X:red,C:white}1.5{} Mult for each",
"{C:diamonds}Diamond{} suit held in hand",
}
},
config = { extra = {
X_mult = 1.5,
suit = 'Diamonds',
}
},
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.x_mult } }
end,
rarity = 3,
atlas = 'SinfulJokers',
pos = { x = 0, y = 0 },
cost = 8,
unlocked = true,
discovered = true,
blueprint_compat = false,
eternal_compat = true,
perishable_compat = false,
calculate = function(self, card, context)
if context.individual and
context.cardarea == G.hand and
context.other_card:is_suit("Diamonds") then
return {
mult_mod = card.ability.extra.X_mult,
message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.X_mult } }
}
end
end
}```
what steamodded version
What's that empty context.
the bit tahts just a blank context is not currently running in game
sorry that was me runnign the wheels in my head earlier lemme fix that
updated it an hour ago so the latest i hope
1.0.0 alpha 1313f
what is the crash log
theres no crash just unintended features
ah ok
it doesnt impact gameplay at all i dont think, but it tirggers the held in card hands and adds it to the numbers left from the previous blinds winnign hand before moving on to the pay out screen and the sotre, it doesnt get rid of those numbers in the hcips and mult slots until the first card is selected next blind
You want context.cardarea == G.hand and context.main_scoring
so i was wondering if there was a timing context i should do rahter than jsut an area THANK YOU
what does 'contex.main_scoring' do exactly
It’s just the main scoring timing
Easier to reference than checking for not lots of things
the phase timing to trigger during the main scoring time rather than any other time
so it would be a way to trigger the same time as when wrathful or greedy joker triggers
if im understanding correctly
unfortunately its not the correct timing as now the cards dont activate at all
hmm
i think theres a specific timing for held in hand which is what i need
i will resume hunting through the smods wiki to see if i can find anyhting there
are you able to modify the score of a hand after its been calculated?
smods wiki is not updated to better-calc
darn
could be that something else is wrong, got me the code?
i might have a snippet of code that might help
its only triggering when a blue seal would be trigger, but doesnt affect the like? playable score since its only after a round ends
oooo
key = 'pridefuljoker',
loc_txt = {
name = 'Prideful Joker',
text = {
"{X:red,C:white}1.5{} Mult for each",
"{C:hearts}Hearts{} suit held in hand",
}
},
config = { extra = {
X_mult = 1.5,
suit = 'Hearts',
}
},
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.x_mult } }
end,
rarity = 3,
atlas = 'SinfulJokers',
pos = { x = 1, y = 0 },
cost = 8,
unlocked = true,
discovered = true,
blueprint_compat = false,
eternal_compat = true,
perishable_compat = false,
calculate = function(self, card, context)
if context.individual and
context.cardarea == G.hand and
context.main_scoring and
context.other_card:is_suit("Hearts") then
return {
mult_mod = card.ability.extra.X_mult,
message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.X_mult } }
}
end
end
}
anyone know how i can go about getting and using a random consumable without destroying it?
when is the joker supposed to do stuff?
oh this is a joker
when affects triggered in hand, liek shoot the moon or baron
to clarify i wasnt responding to your question oops
unless you knew that
sorry
no its ok dw
you still want context.individual for jokers
but not main_scoring
that's a playing card thing
but? i have that?, yeah we need the timing for held in hand
just remove the context.main_scoring part
if context.individual and
context.cardarea == G.hand and
context.other_card:is_suit("Hearts") then
okay so now its back to when it would trigger after the round?
thats what i had it as originally
i tried the main socring timing context but obvs taht didnt help
could this work for a enhancment that did something similar?
if context.individual and
context.cardarea == G.hand and
not context.end_of_round and
context.other_card:is_suit("Hearts") then
maybe? i havent messed aroudn with enhancements yet
depends on what you mean by something similar
for enhancements you'd want a context.main_scoring check
I am stuck in fixing enhancement code and keep recommending the wrong context 😂
can i see what you are doing, in a vc or something , cuz i made some enhancments mostly from scratch
double check ur x's are capitalized correctly that was the culprit for me earlier today
shhhh we dont need to talk about it
That looks to be it LOL
I’m not free right now, butyour code isn’t structured correctly in terms of loops
IT WORKS!
Anyone know how i can go about making a joker that activates a random held consumable without destroying it?
you might have to have it duplicate it? instead right before activating it
where is G.load_shop_booster defined? i can't seem to find it at all
So I looked online on how to make a modded joker and just never showed up, could a coder give me some advice?
this shows the structure for jokers
for abilities you can see this
https://github.com/Steamodded/examples/blob/master/Mods/ExampleJokersMod/ModdedVanilla.lua
Thank you.
are there any examples of mods anyone knows of that have booster packs of consumables where the consumables arent immediately used?
i wanna make a booster pack just select cards to add to consumables, or ideally both an option to select and select and use
Cryptid's Code cards.
thanks
couldnt you just check the way that buffon packs do it? then mess around some with that?
i was trying that but it seems like theres some fuckery with the game code where buttons are decided based on objecttype or something
betma vouchers adds something that allows you to take stuff from packs
anyone know how i can detect whenever money is gained? And how i can also set the money to a specific value?
thanks
and probabky the last check for the deck size
i got it from here
there's some more changes actually but you can figure it out
...still not sure how I can prevent multiple copies of the tag to interfere in with one another.
apply = function(self, tag, context)
local lock = tag.ID
if context.type == "immediate" then
G.CONTROLLER.locks[lock] = true
tag:yep('+', G.C.ORANGE,function()
local key = 'p_toga_togazipboosterpack'
local card = Card(G.play.T.x + G.play.T.w/2 - G.CARD_W*1.27/2,
G.play.T.y + G.play.T.h/2-G.CARD_H*1.27/2, G.CARD_W*1.27, G.CARD_H*1.27, G.P_CARDS.empty, G.P_CENTERS[key], {bypass_discovery_center = true, bypass_discovery_ui = true})
card.cost = 0
card.from_tag = true
G.FUNCS.use_card({config = {ref_table = card}})
card:start_materialize()
G.CONTROLLER.locks[lock] = nil
return true
end)
tag.triggered = true
return true
end
end,
what is the 3rd line in the provided code here trying to do?
Not sure myself, tbh. Was looking at Meteor Tag as example...
try replacing the == with ~= and see what that does, not saying it will fix it, but what it would do
...actually, I just was using the wrong "context" for this too, lmao.
cuz sometimes you got to break your code to fix it
Hi !
We have some bugs, the card need to just add 1 time 200 chips but we dont know why, it add 2 times a row 200 chips per hand. Someone can explain why ?
SMODS.Atlas{
key = 'Joker', --atlas key
path = 'Joker.png', --atlas' path in (yourMod)/assets/1x or (yourMod)/assets/2x
px = 71, --width of one card
py = 95 -- height of one card
}
SMODS.Joker{
key = 'La fraise', --joker key
loc_txt = { -- local text
name = 'Petite Michelle',
text = {
'{C:chips}+#1#{} Jetons',
'{C:green}#2# chance(s) sur #3#{} que cette',
'carte soit détruite',
'à la fin de la manche'
}
},
atlas = 'Joker',
pos = {x = 0, y = 0},
config = {extra = {
t_chips = 200,
odds = 6
}
},
loc_vars = function(self,info_queue,center)
return {vars = {center.ability.extra.t_chips,
G.GAME.probabilities.normal,
center.ability.extra.odds}}
end,
calculate = function(self,card,context)
if context.cardarea == G.jokers and not context.before and not context.after and context.poker_hands and next(context.poker_hands) then
return {
message = localize({ type = "variable", key = "a_chips", vars = { card.ability.extra.t_chips } }),
colour = G.C.BLUE,
chip_mod = card.ability.extra.t_chips,
}
end
end
}```
we?
just cause i worked with a friend ^^
ah
🥺
is it supposed to trigger on a certain poker hand?
no
just when u play an hand
we want to add 200 chips
we want to made a joker like the banana but with a strawberry just add 200 chips for each hand played
oh its not context.poker_hands
so this is gonna be used to disable the boss blind on the last hand, there shouldn't be anything wrong with that right?
if context.cardarea == G.play and context.individual and not context.blueprint and not context.repetition then
that should be the correct one^^
are you in like a vc or something?
ye do you want we come for explain us
yea, if you could invite me
to my amatuer eyes it looks like if the card area is the playing cards being played, something, not being duped by blueprint, and not a repetition of said playing card
How do I get the descriptions of editions to appear on a card (like wheel of fortune, or Ectoplasm)?
oh i think i know this one
i dont see why this shouldnt be working, any thoughts?
i dont see any missing bracket or comma
missind end
shit
thanks
does context.blind.boss not function? cus i see it being used in card.lua but it crashes when i parse it with my joker
for context this happened the moment the joker should have activated, and the if statement is line 299
not all contexts exist all the time
mhm
i dont think i saw a function for that in the documentation
G.GAME.blind.boss
how could i get the current amount of chips during a joker's calculate function?
not sure you can
you would need to patch or hook it
how would i go about doing that?
does this also work for stickers?
wdym
maybe?
like applying stickers?
I mean, I don't know, maybe track it globally
i'm trying to have the description of a sticker show in the info queue of a joker
or just pass it as a new context
oh wait
like
Eternal?
yes
i meant more about how would i hook the evaluate_play function
I mean, how one would hook anything else, but this is really work for a patch I'm pretty sure
G.playing_cards[i]:change_suit('Hearts')
What is the equivalent of the above for changing the value of the cards to all be 9s?
I'm assuming change_suit is something along the lines of change_value but I haven't found the correct code
can someone explain to me what ease_dollars() does
im moreso saying ive never done any hooking/patching before and would like to be pointed in the direction on how to go about doing that lol
it changes your dollars
local evalplayref = G.FUNCS.evaluate_play
function G.FUNCS.evaluate_play(e)
-- if stuff needs to happen before original code, put here.
evalplayref(e)
-- stuff that needs to happen after original code
end
stuff probably needs to be inside the original code
That, yeah, Lovely patches... 😅
I'm making a custom sticker that acts like some sort of timebomb, don't play it for one hand and it detonates
What contexts should I use to check that if the card with the sticker is in hand and any hand is played without it
Anyone know the dimensions for a Blind chip? I'll assume that it needs its own SMODS.Atlas.
The badge on my sticker says "ERROR" for some reason. Do I need to specify text for it, or should it be automatically using the sticker name?
Thanks
localization.misc.labels[sticker key]
or just put the label in yor loc_txt if you don't use a localization file
Maybe see how Steel cards work
Looking through the source code, most of them are just Steel Joker calculations, can't seem to find one that's focused on Steel Cards' calculations
i would say in the calculate function, check for card.area == G.hand and context.after imo
What's the difference between card.area and context.cardarea
card.area is the area of the card the sticker is attached to, context.cardarea i assume would be the area of the current context
since its a sticker i would use card.area but its up to you
I'll try it out
turns out theres so many things wrong with this anyway
cant use this fucking hell
has anyone figured out how to put buttons on different sides of the card at the same time
for a booster pack
Hello friends, im looking for pointers to start writing a mod, where would you guys tell me to start, plz ping with when answering
There's documentation over at https://github.com/Steamodded/smods/wiki and of course, you can ask for help here.
Yeah, look into that first
thanks i will be back with more questions when im done reading that
do i need to be on PC for it to be easier or mac will work fine?
There's also a repo for example mods
PC is easier but people have modded on mac
good i will go down the hard path and come back to pc if i struggle too much
I would not @_@
damn
i wish i could talk to someone who knows what they're doing with this
using this code from cryptid to do this
but i hate how it looks
i wanna add it on the side
Betmma made activatable cards
Can you copy the code that creates use buttons for consumeables
yeah
activatable cards? which mod of theirs adds that
change function?
Betmma's
Abilities
ah thanks
also maybe this helps
cr is "center right"
I believe
not surebmi
i know bm is bottom middle
there's also a horizontal offset
never seen the i there
Godspeed keku
If you come out on the other end with a win, you could put your mod up as an example on implementing custom USE buttons
Does the SMODS.Blind documentation work for ALPHA-1304a?
like Betmma's abilities
can you link me to said repo
I couldn't understand it
Because every time I try rendering my custom Blind, it keeps crashing.
they were moved here https://github.com/Steamodded/examples
thanks
And Cryptid's source code is a fuckin enigma
at least you can always ask math
i tried reading it to give me an idea of how to get started and couldnt figure out anything
talking about cryptid here
yeah try reading vanilla, the wiki, and the examples first
then maybe some simple mod like Cosmos
I mean you could go simpler with Fish but

i can explain what i want to do and maybe you'll be able to give me better pointers?
im trying to get a mod that just reads the game state and transmits it to a twitch extension
hmm this bettma abilities code isnt really showing me anything im actually looking for
where was this code from
cause i couldnt find it in abilities
so i can get the joker description and use them to overlay on mouse over on twitch
I feel like someone has tried doing something similar. It might be easier to ask @mellow sable if they know
the game state in general is in G.GAME
hmm ok
Also now that I think about it Fusion Jokers used to be a mod
I don't know anything about Twitch API, but there's a Discord RPC mod called "Distro" and a mod called TwitchBlinds that interacts with a streamer's Twitch chat
a bit outdated but it might help
both of those code resources would probably be pretty useful for what you're trying to do
...which function executes applying a random edition (even modded ones) to an already existing Joker?
thanks so much for the pointers, ill look on github to find the mods
some combination of set and poll edition presumably
main thing i wanted to see if i could figure out was if i could get buttons to show like this
https://i.imgur.com/WqbXq3E.png
Steamodded recreates both?
like buy from shop
try adding a second sell button
and a second use button
should be easy just copy-paste-patching vanilla code
nah the issue with that is if i add onto a use button thats on the bottom, its still on the bottom
then both are on the bottom
dont want that
that's what the sell button is for
i mean if i could add a side sell button to the buttons on the booster pack cards, and then edit it to not sell, i would do that, but i just tried to do that for like an hour
ui code is hard
Is there any reason why this should result in a blank name and description for a joker?
key = "schrade",
loc_text = {
name = "Schrade",
text = {
"Schradecorp CEO"
}
},
...
}
Did you try using Cryptid code or vanilla code
both
for one cryptid code does this
which isnt what i want
and vanilla i just cant figure it out
alright ill look into fusion
no not quite, this is still both buttons on one side of the card https://i.imgur.com/UoQZigS.png
yeah math do you know how i could achieve what i'm looking for here?
I wanna set up booster pack UI where use is the bottom button, and pull is on the right, like this https://i.imgur.com/dXtcTQd.png
@mellow sable
'tis for me? If so, that doesn't account for modded editions iirc.
might have been for me
Gonna be real I don’t really remember how I did it because it was a while ago
The PULL/USE UI was yoinked from Betmma mods
I also added a FLIP button for the Double Sided edition but that was a pain to implement and still a bit finicky
@weak brook I think the code I sent you is the code that controls the positions of the buttons
i almost had a thing going where i put the buttons on the side of the card by putting some big ass padding thing before it so it got pushed to the right but that ended up blocking clicking on that invisible padding
yeah it does but idk it still doesnt really address my main thing which is how can i get them to have two different alignments at once
If they're in your Consumeables are, the button is offset horizontally. Otherwise (in the shop) it's offset vertically (down).
that code like changes where the buy button is but thats both in different cardareas
But one button is always to the right
and the other is sometimes offset down
I think you can imagine both buttons behind the card, then offsetting one to the right and the other to the bottom
hm
that could work
just gotta go through a bunch of trial and error shit again with this ui code
i wanna also make sure that the position of either of these is not affected by if the other one is not present you know
ohh shit
malverk
i think you're onto something
i gotta check that ui
how do you make a rarity that doesn't appear in the shop?
I mean this code seems to handle both Jokers and Consumeables
and Jokers can't be used
so it should work
probably setting the weight to 0 or using in_pool idk
in the same ui block
I think it should always have both
But make one inactive
That's how Consumeables work
maaaybe you could figure out how to keep the button but make it invisible

oh yeah we could do that by making the color clear

I also wanted an UI similar to Malverk for DeckSkin management
at least for the Random DeckSkin option
oh yeah speaking of that
have you taken a look at my repo
i sent it to onesuchkeeper but i dont think they've done much with it after i explained it all to em
not yet sorry
ah its alright
Hey all, could somebody point me in the correct direction to learn more about setting up a config? It would be very simple with maybe 2 or 3 options. This is what I have so far, but not sure where to even start with building a config. #1328320443693662311 message
Anyone know the context for when a hand is played?
I'm trying to make this joker trigger when a hand is played, but it's currently going when a blind is entered
So what do I replace context.setting_blind with?
Do you want to do stuff before, during or after the cards score?
From what I can assume, though, context.before.
good job thats very cool progress
yeah space joker is before
and that sounds like the type of effect they're going for
I HAVE MADE THE LORD'S CARD
Cutaway Gag
Gives X15 Mult,
plays an episode of
Family Guy when entering blind.
(Episode is skippable after theme song)
the perfect joker to give streamers
that's awesome
are you streaming them or do you just have a gigabyte of family guy in the mod
https://discord.com/channels/1116389027176787968/1328206226064150631 could someone gimme feedback on the jokers ive posted here?
I only have the one episode rn
Hey all, I have been breaking my brain trying to learn this SMODS stuff, and I am struggling to even get a functionless joker to work. I could really use some direction. This is the entirety of my SchradeJoker.lua file. The joker shows up in the collection with the correct image, but it has no name and no description, and I have no idea why.
key = "SchradeJokerAtlas",
path = "Schrade.png",
px = 71,
py = 95
}
SMODS.Joker{
key = 'schrade',
loc_text = {
name = "Schradecorp CEO Schrade, esquire",
text = {
"After each hand, train",
"a played card for",
"Schradecorp"
}
},
rarity = 1,
atlas = 'SchradeJokerAtlas',
pos = { x = 0, y = 0 },
cost = 1,
discovered = true,
unlocked = true,
}```
how do you guys get the autocomplete to show up in you editor for something like the Game or SMODS?
wow, steamodder ignores mod's json and treats this mod as lovely
Which mod?
might be because of circular provides?
install luals and ensure the balatro source code and the steamodded code are both in your workspace
also look out for this pr https://github.com/Steamodded/smods/pull/399
and by install luals, it's a vscode extension called "lua" by sumnekk
it might be
i imagine you have it but regardless
by adding to work space do you mean move them to the same folder or just do Add folder to workspace work?
the two you just mentioned both work, there is a third that involves a file in the top folder of your workspace intended to "point" luals at the steamodded folder (idk any more because i just have my entire balatro folder in my workspace and I don't use autocomplete anyways)
how to put other mod's atlas to this mod?
as i fallback to joker when atlas fails to load, it appears as joker instead of correct atlas (will crash if didn't fallback (all users))
is this normal ?
I was really hoping that one wouldn't show up.
i know my if is not complete
as you can see it appears as incorrect card atlas
no, probably just use main steamodded until that PR is ready
the leftmost joker card is that atlas that i want to apply
oki, thanks 🙂
i was under the impression it was in a usable state but apparently not
idk why i assumed that it's a draft
mb
no worries
Weird part is it doesn't happen through Neovim but does with VSCode
Idk how or why cause nothing seems to indicate that defining a method means it's automatically required.
i was using nvim right before this and it wasnt super might go back if you tell me it works if i have a copy of everything in my folder
neovim should be fine or better for balatro honestly
im not sure though
not a vim user
if the luals definitions work better in neovim that's great
alright, i need help setting it up, step by step or more detailed explanation than the github thnig
cause right now on nvim it says undefined global smods
To be precise, creating or extending a class seems to make Lua Diagnostics think that all class methods must be defined within the object.
so weird...
yeah sure man whatever
what does the star 8 do
adding the .luarc.json worked
stars and suits are just two new suits
was trying to get them to work with smeared joker
it def didnt
considering even with smeared
clubs diamonds hearts and spades do not make a flush LOL
trying to make a legendary joker-esque rarity for my album jokers
they'll all have a gold frame :>
if context == G.hand and (not (context.repetition or context.end_of_round or context.first_hand_drawn)) then
end
How do you check the amount of cards in a played hand?
#G.play.cards
where G.play is the cardarea played cards go into, cards is the list of cards in G.play, and # is the length operator
so if i wanted a joker to trigger when a hand is 4 cards would i use it like this?
yep
np
do you think making the outfits more balatro related would be too much? like maybe the 4 sin suit jokers?
how to merge 4 jokers without overproducing? (it's automatic)
genuinely what
if there's 4 identical joker, it merges by deleting self and 3 others, then prevent others from doing so
no that would be dope
just make the outfits their colors
i was gonna say to make it the legendary jokers but theres 5 of them
also what all albums are you planning on doing out of curiosity?
every album ever tbh..
I don't really have a plan I'm just thinking of random albums
I have a suggestion
this would go so hard as a joker
(snowing - i could do whatever i wanted if i wanted)
Will you be adding this
already there
maybe
ねえ、ギャーギャー言っちゃって
テレビ朝日系木曜ドラマ『ドクターX~外科医・大門未知子~』主題歌
Streaming & Download▶︎https://ado.lnk.to/ashura-chanID
▼inst音源
https://piapro.jp/t/5n7S
Vo:Ado
https://twitter.com/ado1024imokenp
Music & Lyrics: Neru様
https://twitter.com/neru_sleep
Guitar:三矢禅晃様
https://twitter.com/Gibson_Mitsuya
Bass:キタニタツヤ様
https://twitter.com/TatsuyaKitani
Drums:ゆーまお(ヒト...
guess i ain't getting a response from that
I'll take that as a no
(i needed context.cardarea == G.hand and context.main_scoring oops)
been hearing this song a lot because of my GF XD
does anyonre know how to get the cards from the hand of the player?
g.hand.cards?
thanks
thats what raised fist uses i think
i love Ado
you know what
if that person doesn't make it i will
and actually while I'm there i might as well
a deck you can't play if you don't know Japanese
where can i find that? i seem to have clicked on all the files and i cant find where the effects for raised fist are applied
i think all the jokers and card effects are in card.lua
thanks
joker's done
now i just need to make a way to get it
You should make a thread for album suggestions, unless you aren't wanting a ton
how to put other mod's atlas to this mod?
I mean you can put suggestions in the post for the mod itself
SMODS.load_file("filename.lua")()
my bad, wasn't aware this actually existed lol. Theres a ton of mods in there
no, i meant other mod's atlas and not loadfile
yeah lol
oh oops atlas
Forgetting the second S in SMODS is such a rookie mistake of mine...
anyone can make that mistake
That's why I call it rookie
A moment everyone could have done once or twice on their path
Working on a custom sticker's effects and I want to make it so that it executes the rest of the code I defined in calculate when any other card is played except for the card with the sticker
I have this currently, but nothing really happens after I play a hand without the stickered card on it
if card.area == G.hand and context.after then
Any insights?
shouldnt it be context.cardarea == G.hand?
Anybody wanting to help me experiment with the new "breakthrough" we've made within Balatro?
I despise the fix for this since it forces the removal of comment denotating function params and returns but oh well.
We've made it to where you can play videos within Balatro
I guess @overload is just too scuffed
I'm trying to make it play a random one instead of a specific one
Anyone able to help with this?
This is going to be more complicated than the average Joker
apparently everyone is doing the select more than 5 cards thing custom hands so I'm not gonna do it anymore
like a random URL or a random one in the files
could you just use the same math that glass cards use when selecting a shatter sound effect file
Within files
heres the glass card code
G.E_MANAGER:add_event(Event({
blockable = false,
func = (function()
play_sound('glass'..math.random(1, 6), math.random()*0.2 + 0.9,0.5)
play_sound('generic1', math.random()*0.2 + 0.9,0.5)
return true end)
}))
could you use something like this?
where each sound file is named glass1.ogg, glass2.ogg etc up to 6
personally im not sure if the second math.random is for selecting a random one or setting like a random pitch
me trying to set atlas in a way that set_sprite does and got weird results
I'm not sure, give me a bit
make sure youre only increasing the numebr in increments of one and have the size set correctly for the atlus reference
so for the first thing in your atlus, x 0 y0 but the second would be x 1 y 0 and the one beneath the first would be x 0 y 1
it measures across the atlus png in a grid based on the size of the atlus keys
i think
made the sprite_set be ```lua
set_sprites = function(self, card, front)
card.children.center.atlas = G.ASSET_ATLAS["gerioc1_geriolish_1"]
card.children.center:set_sprite_pos(self.pos)
end,
it won't let me set correct atlas and i circumvented with this
sorry i have no idea what this is i cant help
can anyone help me? im trying to have a card enhancment that works like blueprint, right now its just using the effect of walkie talkie for testing. but it wont trigger when the condition is met (that being that its next to a 10 or 4)
calculate = function(self, card, context, effect)
if context.individual then
local other_card = nil
for i = 0, #context.scoring_hand do
if context.scoring_hand[i] == card then other_card = context.scoring_hand[i+1] end
end
if other_card ~= nil and other_card ~= card then
if context.other_card:get_id() == 10 or context.other_card:get_id() == 4 then
return {
chips = card.ability.extra.chips,
mult = card.ability.extra.mult,
card = context.other_card
}
end
end
end
end
ayyy i'm making one for Steely Dan - Can't buy a thrill
which mbdtf cover should i make
It's a busy album cover lol
wow lol
and with this i fixed the problem
by putting some extra code and valid mod atlas
All of them. But truly Power or Monster would be sick. While Hell of a Life would be easy and clean
The Abbey Road Joker is great :)
thanks! all of the jokers im making are albums lol
I might do one or two as a reference thing
You were asking for recommendations for Jokers the other day and I don't think I actually gave mine
ive been uh, adapting some art into jokers, myself. pretty fun.
Speaking in Tongues or Remain In Light, both by Talking Heads @nova finch
no
😭😭😭😭😭
wtf
pretty sure someone was doing a mtg mod
cool. im just reskinning vanilla jokers myself.
Had a quick, probably simple question. Brand new to both lua and modding Balatro, but have plenty of other programing experience.
If there is a variable created in the base game's game.lua file, what would the best way be to inject/replace it with my own version of that variable during runtime?
Like in this case, if I have the title_top variable, and I want to modify its W and H values, what might be the best way to go about doing that with Steamodded?
self.title_top = CardArea(
0, 0,
CAI.TITLE_TOP_W,CAI.TITLE_TOP_H,
{card_limit = 1, type = 'title'})
what if i make custom music for my special mechanic
im interested in how easy it would be to make a custom music mod. (im a music producer)
Shouldn't be too hard
adding wordle to balatro
im not a "modder" per se, tho. i can just barely read crash logs. but if all it requires is replacing the sound files in a templated mod someone already made... i'd be cookin.
i already have the necessary foundation in place to do it
I'll add wordle as boss blind
crazy. would you guess/spell the word with the different ranks in a hand representing letters?
you just spell out words
why the 💀
why did someone react east timor flag
because i assumed "tl" was thailand (it is not)
this is thai right
i tihnk you were talkin about it before
idk
brain broken
Timor-Leste
alright well i'm going to just throw my laptop out the window now
tho yes it's Thai
Is there an easy way to get least frequent rank in the deck? Or do I have to loop through the entire deck and keep track of it myself?
jut win the run
and i got killed by death card in shop
i turned an death card into literal lethal card
ok
actually what's the point if you just lose
SMODS.Sound({ vol = 0.3, key = "machine_garden_mote_spawn", path = "machine_garden_mote_spawn.wav" })
Importing a custom sound, does vol not work? I turned it down from 0.6 to 0.3 but it's still equally loud
if youre using play_sound you have to pass the volume as an argument
Like this?
play_sound(0.3, "fm_machine_garden_mote_spawn")
other way around i think
I feel like this is wrong, should ditch the for loop, and use if card:is_suit("Clubs") then instead.
are you checking if a clubs is played or if the calculated card is clubs
for every club held in hand
then that would be right, card would refer to the joker rather than the card played
sound question, i cant get these sounds to be recognized, i keep getting 'expected file' error
crashes when i try to play the sound
the files are here in my sounds folder
do sound keys have a letter like enhanced has m_?
Ok this should only ever flag when you point to SMODS and not the def files
What is the {C:} keyword for Club suit?
C:clubs
Should I change "become Glass" to "served Justice" in my joker's description?
jimbo 
im quite new to this whole modding thing, and i was thinking of making a quick messy deck skin
ive read everything carefully, and thought i did everything correctly but for some reason its using the Jack twice, as both the Jack and the Ace
why is this happening exactly? i could just be dumb lol
so back to this
I was wondering if destroy effects are kinda excluded? or ceremonial dagger would also count as having 2 effects
but nonetheless, would this card having mult make sense?
+1 Mult seems a bit low... my first thought was adding Mult equivalent to the rank of the card destroyed. Unless it's Stone, which could default to +4.
you could trigger it multiple times in a round technically, it makes for an easy scaling
this card is so close to being fully finished, but the burnt cards dont act like burnt cards when they are first made by the dragon. i think its because the cards are already stored as non enhanced but im not sure
Are you making the "burned" change in context.before?
yup its all in context.before
i know there are extra perameters for set_ability but im not sure what they are
Cool animation
oh wow did you actually turned that bug into a feature
Anyways, the entire scoring is calculated, then the animation plays. I imagine you do the card change in an Event so by that point it’s too late
In Cosmos, we used a trick to make cards with Editions gain the Editions but only display them a few moments later
So you’ll probably want something similar
Though in your case it should be easier since Midas Mask is similar and thus there’s built-in vanilla functionality for it
Yes thats something I encountered too and I hate it ç^ç
the workaround is not using events for scoring-changing effects which means the flip effect is instant
I wish there was a way to make it correctly timed like the unflip part
midas mask gets away with it because its a joker rather than a card im pretty sure
ive been trying to get something like this to happen but it makes the scored cards burnt too early. the unscored cards burn at the correct time
I explained how
As I said, you need to burn the cards early but hide it like Midas Mask
Or see how Cosmos does Spinagogue Champion
You shouldn’t need a patch for Enhancements but anyways
you did, but seeing a 6 score 9 chips doesn't look that good
But you reveal earlier
midas mask sets the ability like this, i copy the same thing and it only applies to the unscoring cards
What part did you copy
I made a custom context for it which happens right before the evaluate_play gets the poker hand played
If I give put flip_cards in a event then the cards change rank instantly before the flipping part is over
if I put the rank changing part in an event, then it happens after the scoring
What only applies to the unscoring cards?
The rank should probably be changed instantly but the flip should conclude before the cards are scored
the scoring cards instantly get set to burnt cards visually, and the unscoring cards burn at the correct time (although i have no idea if they would actually function since they dont score)
let me try with splash
While you’re at it try Midas Mask with Gold Ticket
i did, it works, probably because its a joker though
using the delay_sprites flag on st ability should solve these problems
According to them they did but it didn’t work
I'd need to see more of the code than the one line
Yeah I was going to say
It sounds like either they did something else wrong or they might need a patch for a similar bit different functionality
if context.before then
for k, v in pairs(context.scoring_hand) do
if v.ability.name ~= "m_imaginary_dragonCard" then
v:set_ability(G.P_CENTERS["m_imaginary_burntCard"], nil, true)
end
end
G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
card:juice_up(1.5, 1.5)
local fireParticles = {}
play_sound("imaginary_dragonFlame")
for i = 1, 4 do
fireParticles[i] = Particles(1, 1, 0, 0, {
timer = 0.015,
scale = 0.3 * i,
initialize = true,
lifespan = 1,
speed = 4 * i,
padding = -1,
attach = card,
colours = {G.C.WHITE, lighten(G.C.ORANGE, 0.4), lighten(G.C.RED, 0.2), lighten(G.C.YELLOW, 0.2)},
fill = true
})
end
for i = 1, #fireParticles do
fireParticles[i].fade_alpha = 0
fireParticles[i]:fade(0.3, 1)
end
return true
end, }))
for k, v in pairs(context.full_hand) do
if v.ability.name ~= "m_imaginary_dragonCard" then
local percent = 1.15 - (k - 0.999) / (#G.hand.cards - 0.998) * 0.3
G.E_MANAGER:add_event(Event({
trigger = "after",
delay = 0.05,
func = function()
v:flip()
play_sound("card1", percent)
v:juice_up(0.3, 0.3)
return true
end,
}))
local percent = 0.85 + (k - 0.999) / (#G.hand.cards - 0.998) * 0.3
G.E_MANAGER:add_event(Event({
trigger = "after",
delay = 0.05,
func = function()
v:flip()
v:set_ability(G.P_CENTERS["m_imaginary_burntCard"], nil, false)
play_sound("tarot2", percent)
v:juice_up(0.3, 0.3)
return true
end,
}))
end
end
delay (0.5)
end
if context.cardarea == G.play and context.main_scoring then
return { x_mult = card.ability.xMult }
end
-- if context.individual and context.cardarea == G.play and not context.repetition then
-- effect.x_mult = card.ability.xMult
-- end
end```
i set delay sprites to true but it still happens immediately, but im unsure what it does exactly
maybe i should just use set_sprites atp
hold on let me see how I implemented zodiacs
thread for when youre not speaking with 2 people at the same time
context.scoring_hand[i]:set_ability(G.P_CENTERS[effects[i]], nil, true)
local name = context.scoring_hand[i].ability.effect
context.scoring_hand[i].ability.effect = nil
G.E_MANAGER:add_event(Event({
trigger = 'before', delay = 0.2, func = function()
context.scoring_hand[i].ability.effect = name
context.scoring_hand[i]:juice_up()
return true
end}))
this is the code I have, though I don't remember why it's written this way 🤷♂️
it does the same thing it seems
it does some funny stuff with the .effect bit, perhaps try that?
i think it delays the sprite change by a tiny amount but i need it to be delayed by a lot. i may just try some set_sprite shenanigans
i copy pasted it in and it did the same thing as my old code
See if a patch similar to the one in Cosmos would help
spritin goin good
Stanced up jimbo
rolling eyes fall...
Is this a reference to something
the Yakuza series
a vague resemblance
hey folks, are there any conventions i should keep in mind to keep a mod i'm developing optimized? i saw some other mods have a certain structure like having each joker have its own lua file but i didn't know if there was any purpose to that besides keeping it organized for the person making the mod
just trying to avoid performance drops like i've seen elsewhere
do you guys vibe with this
maybe make it a rare since its pretty gimmicky
that's only for keeping it organized and doesn't impact performance
My recommendation is putting everything in the same file, and using comments to organize yourself
doesnt impact performance but itll be easier to search for stuff
I'd argue that's viable only for smaller mods
I like having everything in its own folder
having lots of files can impact performance on startup due to more file reads, but it's not really significant
oh...
whatever you like best. single files per object can get annoying to navigate, a good middle ground is a file per type of object
my recommendation is (which i shouldnt even be stating) is to have all your SMOD types ordered
so like its all the jokers without any other types inbetween then the atlases or whatever etc
-# idk if this makes sense but its here
would you say Pokermon's approach for Jokers is the optimal way
it puts like X jokers code per file
there's not a lot of "obvious" performance pitfalls that are important for most mod devs, other than maybe avoiding the use of update functions where possible
like I said it's not a decision of performance
you also said having lots ot files can affect it
If you comment your code nicely and space it well its not that horrible 😅
I also said it's not really significant
I guess, but if I can avoid it I'd prob do it
-# Im not to that point yet though
and it would just affect load times
I guess in terms of error log readability, single files for each object are the best option, but it can also be annoying to navigate
ye thats also true
initial load times isn't as much a concern as slowdown during game is for me, though i'll still keep that in mind
though it doesn't sound like there's much that can be done in that regard
should i use spreadsheats for atlases or just single image pngs for atlases
cuz me personally
the picture isnt readable for me
I use whatever vanilla uses is called personally, its not as complicated as I initially thought
i mean personally i prefer spritesheets over spreadsheets for these
true,,,
Im so glad I was bullied into using spritesheets
but then I had to crop to selected in order to use the website for jokers 🥹
I used a python script to do that for me
Basically the code just save each sprite as its own file from a spritesheet
Im not home so I dont have it available right now
Is this the right way to create a Moon tarot card?
it is a correct way, but not the recommended or easiest way
SMODS.add_card({ key = 'c_moon', area = G.consumeables })
no add_to_deck or emplace needed
Thank you!
What key should I add if I want it to be Negative?
edition = 'e_negative'
Does this function automatically check if there's enough room in consumable slot?
I dont believe so
Judging by how code cards in cryptid work (most of them dont need room to add stuff)
there's always room for a negative
but no
Pretty sure if the limit is exceeded by n+1 you can't add a negative card?
But yea if it's guaranteed negative don't check for that, doesn't really matter
perkeo doesn't care, at least
Perkeo owns this game 

this is what hell looks like (you cant get dry cards)
i'll just pull dry cards out of thin air ezpz
skull
perkeo probably doesn't check for room
it works this way for jokers, but i can't think of a way in vanilla to exceed the consumable limit for testing
DebugPlus my beloved
I hope it's fine to define an upgrade function for my jokers.
Ah crap, for got to reset scored_card. brb
you'd have to call that on self and not card and probably also pass card to change its value instead of the values on self
other than that, sure
Fixed.
so self:upgrade(card) ?
You know what, I'm not going to add an extra line of "Must have room" into the description just to hide it for half of the time. Overstocking it is.
Anyone know how to make this play a random file within a folder, rather than just one file?
pseudorandom_element(NFS.getDirectoryItems("thisDir"))
and thatll be a string containing the name of a file inside thisDir (e.g. episode4.ogv)
Which fits better for a Legendary-like?
this makes sense so far
where do I put it/do I replace anything
uh idk youre the one who wrote the code
I rewrote it from what MathIsFun rewrote from the Balatro demo
I barely touched it but I had the idea for the video playback before it was possible today
if we are following the base game philosophy, the first
the second one can be a voucher or something else to synergize with it
the former
the other one gets capped from consumable slots
the philanthropic perkeo image would fit here
What's the code for making a Standard Pack tag generate after a shop?
if context.leaving_shop ?
i think
I got that part from Perkeo 2, but I need to generate a tag.
context.ending_shop
my b
Anyone that's experienced able to help me real quick? Trying to create a table for my Joker to choose a random function from a specific list of functions.
I have several functions that work on their own if I tell it to do them, but I want it to trigger only one, but at random.
replace tag_double with tag_standard
So add_tag(Tag('tag_standard')) I guess
my parenthesis and brackets aren;t matching in color, but that shouldn't be an issue yeah?
I copied it as I see it
local func_index = math.random([Insert total number of your functions])
if func_index == 1 then
first_function()
elseif func_index == 2 then
second_function()
...
we making elseif towers with this one
fuck it why not I already got a huge function tower
Only add_tag(Tag('tag_standard')) is needed to do the trick.
Might as well put these in between
does Lua not have any switch case thing like Java?
how about
pseudorandom_element(my_functions, pseudoseed('my_joker'))()
I already have that though?
what does my_functions do?
where my_functions is the table that you put your functions in
can you pop into vc with me rq or nah
eh, sure
huh?
I mean the whole G.E.manager package can be replaced with a single line
Oh
So this should work?
its ok, i "learned" from picle
Which one looks better for the JokerDisplay?
Feel like the left one appeals more to me.
am i supposed to struggle this hard just to make a blind 😭
I'm not 100% if the SMODS.Blind documents are with the newest version or old-calc
better calc doesn't affect blinds
What does context.main_scoring do again
main scoring phase for playing cards
So is it only accounting for scored cards or does it also account for played but unscored cards
played but unscored cards don't get sent to any contexts
I see
M A K E O N E /j
like seriously what is this error for
SMODS.Blind{
key = "dies",
loc_txt = {
name = 'The Die',
text = {'hi'},
},
dollars = 0,
mult = 3.5,
atlas = 'die',
pos = { x = 0, y = 0 }
}
blinds need a boss_colour
technically yeah

You can make one using HEX(“FFFFFF”)
Just replace the Fs with your actual hex code
non-bosses would use a colour anyway
how do i make my consumable last longer after using it
Do you mean make a multiple use consumable?
Is it possible to make a sideways cardarea?
Keep on use function
like the consumable disolves before i can do things
pass the font / vs theme
before i can do juiceing up with it
m6x11plus
can be extracted from finding the resources folder in Balatro.exe via WinRAR.
got it
i want it to juice up 4 times, but when i use the consumable, it dissolves, not showing the juice ups
i want it to function like a planet card, where it stays on screen for a bit, then dissolves
is it unicode?
Probably, probably not, I don't know
is it the same as m6x11?
Mostly
@glass scaffold this was very useful thanks
welcome
how do i make the consumable stay on the screen and not auto dissolve?
Anyone want my new Joker?
we're no strangers to love
loses X1 if you let go
let go..?
Discard?
If you get Xmult from any other source, cancels the Xmult effect.
"You wouldn't get this from any other guy"
That's funny, but it does better than that
guys, whats the C: with yellow text?
yellow
death decided to kill you
nothing else?
alrighty
not for format I think
rickroll joker: disables all tarots/jokers that make a stat go up from appearing, all stats cant decrease (aka the point you buy this joker, all stats become base stats), joker cant be rearranged, joker cant be sold
only G.C.
loses X1 if you:
- give me up
- let me down
- run around
- desert me
- make me cry
- say goodbye
- tell a lie
- hurt me
basicly the one that balatro uses for "selected"
why the skull reactions guys
is this because i hooked use consumable? or am i dumb
C:yellow dont work, bwomp
C:money
i will use C:attention cuz its not money
thanks TGTM
you are welcome
you generally use attention for other things
probably only color the 3
preferrably only color the +12 and the 3
and that too yes
stop_use()
local amt = card.ability.extra.tagAmt
if TGTMConsumables.config.CursedRunes then
G.GAME.TGTMCurseChance = G.GAME.TGTMCurseChance + ((G.RuneCurse)/100)
amt = amt * 2
end
for i = 1, amt do
G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
local tag = Tag(get_next_tag_key("raidho"))
if tag.name == "Orbital Tag" then
local _poker_hands = {}
for k, v in pairs(G.GAME.hands) do
if v.visible then
_poker_hands[#_poker_hands + 1] = k
end
end
tag.ability.orbital_hand = pseudorandom_element(_poker_hands, pseudoseed("raidhoOrbital"))
end
if tag.name == "Boss Tag" then
i = i - 1
else
add_tag(tag)
end
return true end }))
card:juice_up(0.8,0.8)
delay(0.5)
end
return true end }))``` is this wrong?
the consumable dissolves before i can see the juice ups
what?
wdym
idk
I think the order in the collection
fair enough
all of my consumables are like order 16 and they are in the same spots in the collection?
i guess its then in order of your code if they the same
i dunno, i coppied it from YOU 😭
yeah its the order in the collection I checked
Ok we did it
although smods makes sure to group jokers by mod so you cant move it too much
what would I use to log events that are happening?
but at that point you can like change the order you import them
because you're not supposed to set it yourself
steamodded figures out the order itself based on mod load order
I remember it was on the wiki on some day
might be in SMODS.Center
point stands you don't need to use it
there is already a well-defined order and steamodded will enforce it
is there some context or function that I can use to calculate stuff after calc_dollar_bonus, right after the yellow "cashout" button is pressed?
do NOT do this ever
true == false
also when a blind is selected and a tag of pack is made, will it trigger in the blind or after?
trying to make a joker that considers all cards a specific suit, but cant quite find any examples
because there arent examples
the only thing i can think of is smeared joker
maximized (cryptid) would be a good example if I could find the code
you would just need to add a check for your joker in is_suit()
before everything else add
if #SMODS.find_card('j_prefix_name') > 0 then if suit == "your_suit" then return true end
probably
what was a way to get this on text?
hm
altho I'll be honest, idk what flush_calc is
hm
this doesnt make much sense to me tbh
what doesn't specifically
like this looks like this is checking if a card is of a specific suit rather than making all suits considered a single one
{X:red,C:white} X2 {}
jokers that react to suits use card:is_suit() afaik
yeah but this joker isnt REACTING to the suits, its changing the suits themselves
visually as well?
similar to smeared joker, but for any card
not visually, just in the sense that if you select 5 random cards, you are always gonna get a flush
thanks
so with your joker every card is wild
not exactly, im making all cards into a "Dragon" suit I already registered
as long as you hold that joker, all cards are considered "dragon" cards
whats the difference between dragon cards and wild cards
dragon is just an extra suit that will work with some of my cards
similar to fleurons in bunco
what does your joker do exactly
alrighty, got em all!
now i need to work to make em functional...
i love how i can collapse lines of code like these lol
honestly this just makes every card a wild card
unless you have a specific joker that reacts to Dragon suits
The mod will have some, yes
also not true, boss blinds that debuff other suits wont take effect here
that is true hmmm
unless they make boss blind that debuffs dragoon
well yea but like. a diamond with this joker wouldnt be debuffed by Goad (spade cards) but a wild card would
oke, now i need voucher, pack and deck template
What I DO know is that I have to apply the effect when its picked up, and remove it when its sold/destroyed
I believe this will work
return true
end```
still in is_suit
so if you call like
card:is_suit('Dragons') anywhere, and you have that joker, it always return true
you probably need to put it in both flush_calc and the other one, not sure about that though
this is like the third card I make ever and my inexperience isnt helping me at all lol
fourth actually
I assume you checked smeared's code
I havent found it yet
i feel like i'm really stupid here but what field contains the currently-played hand? like is it within context or
I'd suppose it'd be around card.lua, but I'm only finding references to it
like i want to get specifically the hand, not the cards within them
you should pass the balatro folder to visual studio so you can do global search
vouchers! yippie
This makes me truly feel like a dragon
NVM it's context.scoring_name
ah, you meant the hand type
i am once again asking for help
more or less 😭 i just did G.GAME.hands[context.scoring_name]
why it not work?
doesnt look like there's any actual code attached to it to me
also i dont think its possible
but #1324798014996353156 made multiple-use consumables
also name needs to go inside loc_txt
this one is not important for now as i just want to add it to game to see how it looks
is this in your main file?
right now the consumable on use:
2. add the first tag
3. dissolves !!!!
4. tries to juice up
5. adds the rest of the tags and tries to juice up```
yuh
i dont have more other than JSON for description thingy
but after adding it, it crashes game
what is the crash?
typo, its SMODS.Seal
facepalm
goddamit
i am so confused on this... how do i do tis
still crash
did you put name in loc_txt like I said
oh wait, i realized one bracket missing
ah.
also it was in example to not do that
so i dunno
its in the example to not put it OUTSIDE I believe
name outside of loc_txt is only for internal purposes
name and text dont go inside description