#💻・modding-dev

1 messages · Page 116 of 1

tall wharf
#

😭

merry raven
#

Here you go

tall wharf
#

pixel art is not easy 😭

random sleet
#

eyah i know thats why i dont do it

merry raven
#

Can you give suggestions on where I should patch into, directly into function Card:shatter(), or a function or anything that just simply calls shatter(), or somewhere else

I also may want to do card:start_dissolve because of its more subtle destruction sound and a different animation (I plan to have my ice enhancement use shatter and fire enhancement use start_dissolve)

tall wharf
#

i did it

valid forge
#

tweaked it a bit to improve contrast

tall wharf
#

hold on what's with the gray borders or is that just discord mobile being funny

valid forge
#

when making my first proper deck that isn't just a test (wanted to make it look nice at least as I'm using it in the meantime) I'll definitely lean on a much lighter pink, so that purple isn't forced down into being way too dark

valid forge
#

I imagine it's probably something DSL related since the number cards especially are literally just recolours from the base set

#

the KQJ are of course taken from the collabs, albeit with different palettes

tall wharf
#

actually what did you use to recolour

valid forge
#

but even the num cards have this weird bloom around them

#

pdn

tall wharf
#

ah

valid forge
#

anti aliasing hasn't been on at all

#

nothing should be wrong here

tall wharf
#

is this 2x

valid forge
#

these are 2x yeah

livid tapir
#

has anyone thought of making a YOMIHustle balatro mod
like a joker mod themed around yomih

valid forge
#

not quite sure if I need to be redoing them entirely at the larger size though; base card set doesn't

livid tapir
valid forge
#

go for it

livid tapir
#

i feel like it would be cool (given im obsessed with both yomih and balatro)

earnest creek
#

how do I check for suits held in hand? the steamodded example mods don't go over shoot the moon or baron

tall wharf
#

i might make a plus version of the vocaloid mod I'm making

livid tapir
tall wharf
#

where it adds more content than just reskinning face cards

livid tapir
#

yessss

valid forge
#

what are the other suits you're planning actually?

#

I imagine miku is clubs

frosty dock
#

-# it's not compiled

split copper
#

kek

random sleet
livid tapir
#

oh
then how do yall get the code?

split copper
#

code store, they only sell soup for some reason

frosty dock
#

you just extract the executable with something like 7zip

livid tapir
#

yea thats what i mean

earnest creek
#

why are you buying code at thee soup store?

valid forge
valid forge
tall wharf
valid forge
#

you buy clothes at Soup

#

ooh go on

frosty dock
valid forge
#

just tell me all twelve lmao

tall wharf
frosty dock
#

they're seliing code at the grocery store these days

valid forge
#

oh hell yeah

livid tapir
#

omg im prob gonna do another all nighter
AAAA WHY CANT I SLEEP

valid forge
#

kagamines diamonds?

tall wharf
livid tapir
#

its too late to sleep now its 6:35 am 😭

split copper
valid forge
#

meiko queen of spades ,,,

tall wharf
#

one side is rin and the other is len

valid forge
tall wharf
#

that is what i was imagining

valid forge
#

two in one combo deal

tall wharf
#

diamonds were crammed as hell

livid tapir
random sleet
split copper
livid tapir
#

lolol

tall wharf
#

i don't want to just include vocaloid

valid forge
#

valid

tall wharf
#

i mean the mod name is vocalatro and all

valid forge
#

gotta get the whole vsynth group in

tall wharf
#

might not be able to fix everything

split copper
#

john vlatro

valid forge
#

if I were better at pixel art I'd be making a pjsk deck

crisp coral
valid forge
#

only sad thing about a pjsk deck would be, well, one group has to miss out, and one member from each group also has to

glossy stone
crisp coral
#

know more

#

know better

glossy stone
crisp coral
#

SOB

split copper
#

the last lua thing I did was 10 years ago in gmod, time to relearn it!

pretty neat you can just extract this stuff though

glossy stone
# crisp coral SOB

myst yknow what after i get the herta im gonna make more art so i can release original sound for real 1000% this time

crisp coral
#

real

glossy stone
#

it's not dead i have just been doing everything BUT it

valid forge
#

wxs and vbs have to get spots but it'd make me sad to have to drop one wxs member

crisp coral
#

make an hsr mod so you stop procrastinating

livid tapir
#

tomorrow imma extract the exe bc theres some cards that arent in examplemods

wintry solar
glossy stone
tall wharf
#

@glossy stone what would you say if i were to make a plus edition of the mod I'm working on to add content

crisp coral
#

what if i. reimplement decor guide

split copper
#

with the length of the game's code, I wonder if its under 120k tokens

crisp coral
#

tokens?

split copper
#

for AI

#

casually put the entirety of the game's code into context

crisp coral
#

blegh

split copper
#

there are actual good uses that isnt the blatant art garbage

#

for instance you can automatically segment out useful notes and then have people fill in manually

nocturne garnet
#

hello chat

#

why is this guy talking about ai

crisp coral
#

why do you have a gif for everything sob

nocturne garnet
livid tapir
#

yea thatd be cool, just getting notes for manual use

glossy stone
#

i am a bit silly

tall wharf
#

tho every AI isn't generative AI

split copper
tall wharf
#

every time someone says AI people would think about genAI

split copper
#

but if you are interested in documenting all of it, that would be cool

glossy stone
glossy stone
split copper
tall wharf
nocturne garnet
tall wharf
#

and also high contrast

tall wharf
valid forge
#

@glossy stone

#

realistically emu should be on queen (bc of the cover) but it's funnier with her on king

glossy stone
valid forge
#

toya just makes sense as a jack

valid forge
#

both would also work for jack tbf

tall wharf
#

thanks mizuki

glossy stone
#

^ real

tall wharf
#

mmmmmmm

valid forge
#

tbf the mizuruian group is peak but it's making it harder to make other sets lmao

crisp coral
#

i actually don't have much pjsk knowledge LOL

valid forge
#

like akinene would work so well with an

royal ridge
#

there's a couple things like that in the code

split copper
#

I mean for what its worth you can just point those out and we could probably figure that easier manually

valid forge
#

emu my beloved ❤️

crisp coral
#

wondahoi

valid forge
#

the silliest to ever do it

#

I might do a pokémon deck skin at some point too

split copper
valid forge
#

masq would probably be queen of spades in that

#

TRUE

tall wharf
#

(i think i might have turned modding dev into pjsk chat)

valid forge
#

masquerain my beloved

valid forge
#

it's just that someone's gonna get left out 💔

tall wharf
#

💔

crisp coral
#

kid named six suits

valid forge
#

18/20

tall wharf
#

😭

crisp coral
#

fuck

valid forge
#

the one answer I can think of

#

ten suits

crisp coral
#

kid named 60 suits

valid forge
#

and include all the mikus

tall wharf
#

ok

#

which one should i do first heads for spades tails for diamonds

#

diamonnds

crisp coral
#

xela mentioned

glossy stone
tall wharf
#

oh i forgot to make a high contrast version whoops

glossy stone
#

behold

valid forge
#

SAKI

#

friend sized

glossy stone
valid forge
#

anyway a pjsk deck skin would go hard

#

we'd have to commit to making it ten suits or something though lmao

#

Happy cards already use a heart symbol so we'd just carry Hearts over, so we'd have four regular card suits and four pjsk ones

#

Heart (red), Spade (black), Club (teal), Diamond (yellow), Cute/Penta (pink), Pure/Sprout (green), Mysterious/Moon (purple), Cool/Hexa (blue)

crisp coral
#

why dont u also change aces

#

ehy restrict to only faces

valid forge
#

we'd still have to miss characters

tall wharf
#

i think i preserved the integrity better than the clubs

crisp coral
#

tetoeeeeee

valid forge
#

ooh

tall wharf
#

maybe i should fix this

#

verdict

#

yeah

nocturne garnet
tall wharf
#

awesome ui

crisp coral
#

peak ui

tall wharf
#

what the green box doing

nocturne garnet
#

glop

nocturne garnet
valid forge
#

fire

tall wharf
#

glop

valid forge
#

glop

tall wharf
#

🔥

earnest creek
#

glop

spring lantern
#

thoughts

valid forge
spring lantern
tall wharf
spring lantern
#

hi

tall wharf
#

in fact i remember you

spring lantern
#

🔥

tall wharf
#

i think

#

nvmm stupid

#

I'm stupid

spring lantern
#

myeh

#

i mean kind of

tall wharf
#

brain no worky

spring lantern
#

rip brain :(

tall wharf
#

😭

#

could synergize with hack if you manipulate deck

#

maybe

spring lantern
#

mayhaps

#

if you have an all 2-5 deck

#

idk how viable that is

tall wharf
#

I'm not good enough to say lmao

rough furnace
valid forge
#

just discard anything above 2-5 that you're not playing

#

it's definitely a bit awkward, but it's a pretty unique idea

random sleet
#

lowest card

#

just hold a 2 it's always active

valid forge
#

oh lowest card

#

might be a bit too strong then lmao

#

could make it highest card in hand or shrink the options down from 2-5 to just 2

#

it'd be sorta like Baron, giving you xmult for holding a card, but it only goes off once

random sleet
#

and during joker calc, so it synergizes better with flat mult jokers

valid forge
#

ye

#

it's kinda like an inverse hack? but they reward the same thing (keeping your 2s around)

#

just one rewards you for playing it, and one rewards you for holding it

oak wigeon
#

Would tackling this as my first game to mod be too much for a beginner or will I be able to be just fine

rough furnace
#

Balatro Moding is fairly simple on the scale of modding games

random sleet
#

dont gain nothin in life by putzin around about it

oak wigeon
#

just was wondering, that’s all, I’m barely getting a grasp on where to start

random sleet
#

oh i just say weird things you'll be fine

rough furnace
spring lantern
#

still coming up with more jimbo ideas

rough furnace
#

Jimbo shuffle seems busted

spring lantern
#

yea just changed it to up to rare only but it still might be a bit much

random sleet
#

cap of rare and chance to destroy itself is probably fine

rough furnace
#

Yeah or on sell effect

spring lantern
#

hmmm sell effect might be cool too

#

i think i'll do a different jimbo with a sell effect tho

#

ima just slap a 1 in 10 chance to self destruct after each round

#

or something like that

random sleet
#

i just meant chance to hit itself with its effect

spring lantern
#

ohh that's kinda fire

tall wharf
spring lantern
#

FR

rough furnace
#

Are the jimboree effects mutually exclusive?

spring lantern
#

yea the idea is it just iterates through the hand before scoring and applies stuff individually

rough furnace
#

Oh the chance is for each card

spring lantern
#

i just noticed the wording is confusing lol

#

changed it to each card instead of any cards

tall wharf
#

chance time

spring lantern
#

when you play all glass cards and you get hit with that nope so your hand becomes shit

merry raven
#
calculate = function(self, card, context, effect)
        if context.cardarea == G.play and not context.repetition then
            for i, playedCard in ipairs(context.scoring_hand) do
                if playedCard == card then
                    local leftCard = context.scoring_hand[i-1]
                    if leftCard.base.suit == card.base.suit then
                        leftCard.config.center = G.P_CENTERS.m_fm_slow
                        card_eval_status_text(leftCard, 'extra', nil, nil, nil, {
                            message = "Slowed!",
                            sound = "fm_slow",
                            colour = G.C.BLUE
                        })
                    end
                end
            end
        end
    end

Need some help here, I'm making a Freeze enhancement that if a card to the left of the Freeze card has a matching suit, it will become Slowed. However, when it does get Slowed, its texture won't change, but in the deck it did.

On top of that, if I do actually play that Slowed card the next time it appears, then the textures pop up

#

Seems like the timing was off, but I don't know how to rearrange it

tall wharf
#

❤️

#

can't wait to finish diamonds and spades

random sleet
#

diamonds should have an abundance of choices

tall wharf
#

too many

#

in fact that's why i moved rei to hearts

granite plover
#

How do I add an effect to a custom joker (the in-game effect, not the text)?

spring lantern
#

programming time baby

delicate summit
granite plover
rough furnace
granite plover
#

I have to mention too that the most lua I've written is a Roblox script that changes one color💀

spring lantern
#

LOL fair

tall wharf
#

😭

spring lantern
#

so when you're creating the joker object you gotta add a function like this

calculate = function(self, card, context)
(do stuff)

#

that's where the magic happens

#

say you wanna recreate the default joker

#

first you have to check if we're in the joker calculation stage of calculating a hand

#

so you do
if context.joker_main then

#

and from there it's gonna ask you to give it a value to add to mult or whatever you're trying to do

#

in the case of a basic jimbo it would be just this

#

mult_mod is the +4 you apply (in this case it uses the stuff specified in the joker's config)

#

and the message looks convoluted but it's just telling the game to do a basic +mult effect

granite plover
#

How do i check for cards (for example, +3 mult for every face card)?

wintry solar
spring lantern
#

then you need to check if the game is going through the hand

#

in that case i think it would be if context.cardarea == G.play

#

card areas are basically different containers for cards so like your hand, jokers, consumables etc

#

and then you also have a value called context.other_hand that gives you a reference to the card that is being scored

merry raven
spring lantern
#

i think that's the better method

#

anyway you use context.other_card to check if it's a face card and apply mult if true

#

like i said the ExampleJokersMod explains all this in its code decently well

granite plover
#

I'll read it again, thanks for the help!

#

What's the #1# used in line 29 of the ExampleJokers?

spring lantern
#

there should be a loc_vars function that gives that text a variable to show

#

so that's just saying to put the first value in that spot

#

in this case it's the mult applied by jimbo

stiff locust
#

as already said #1# is the first, #2# is the second, etc

#

you can put as many of those as you want

#

this is usually variables like a scaling joker's mult

granite plover
#

Cool to know, that's definitemy useful

stiff locust
#

but even stagnant variables tend to use these too

spring lantern
#

yea for the sake of not having to change a number multiple times

stiff locust
#

if you use them for every variable you can, it'll work with Cryptid's Oversaturated and Glitched editions and Misprint Deck

spring lantern
#

it's also used in stuff like odds since all 6s exists

stiff locust
#

yeah

#

the example jokers mod has probabilities on it check that

#

and the #1# values can still be text formatted

granite plover
#

Thanks for letting me know

stiff locust
#

always remember

#

this game is open source modding

#

if you wanna do something, and someone else already did it, go check their code

#

and then borrow it

#

and for legal reasons, by borrow it, i mean completely rewrite it from scratch

#

because otherwise that would technically break a rule

#

oh i might be breaking a rule by saying that isn't that accusing? that rule makes no sense to me-

crisp coral
#

you can accuse people in mods' dms

split copper
spring lantern
stiff locust
#

is there a way to check if a value doesn't exist

#

and no value = nil did not work

night pagoda
#

if value then?

stiff locust
#

that checks if it does exist

#

i need to check if it doesn't exist

night pagoda
#

if not value then

stiff locust
#

oh my god i'm so dumb

#

if this shit crashes again i'm gonna be very annoyed

#

yeah it fucking crashed again

#

I literally just need to check if there is an edition or not

frosty dock
#

then why are you trying to index it

#

see if the edition exists first

stiff locust
#

i'm not

frosty dock
#

then show the code maybe?

stiff locust
#

it's crashing on the line
if value.config.center.key == "j_splash" and not value.edition.key then

frosty dock
#

yeah see

#

you're not checking if the edition exists

stiff locust
#

i'm trying to check if it doesn't exist

frosty dock
#

not (value.edition or {}).key

split copper
#

key is under edition

frosty dock
#

optional chaining in lua is cursed

#

you can also do something like not value.edition or not value.edition.key but gosh that's long

#

and imagine doing that for like

stiff locust
#

yeah key is the name of the edition I originally wanted to check if it was negative or not

#

but I should make it not override edition

frosty dock
#

not card or not card.config or not card.config.center or not card.config.center.config or not card.config.center.config.extra

rough furnace
#

not (value.edition and value.edition.key)

frosty dock
#

not ((((card or {}).config or {}).center or {}).config or {}).extra

wintry solar
#

You can just do not value.edition in that check anyway

frosty dock
#

both of these are obnoxious but wtf

#

lua is such a great language

rough furnace
#

to be fair js had this same issue for quite a while

split copper
#

people love javascript too

rough furnace
#

to be fair I think you should be able to assume if you have a card it has a config and center value

frosty dock
#

?.

rough furnace
#

thats relativly nww

frosty dock
#

ik

frosty dock
stiff locust
#

okay well that worked

#

now I can test that lovely patch I made like yesterday iit doesn't work

rough furnace
#

Also how cursed would it be to have a tab that doesn't actually render anything but instead opens a new menu

stiff locust
#

the cashout screen now displays

nothing in relation to the joker's end of round cash

#

but it's still there.

stiff locust
#

yeah so my cashout issue is still unresolved

#

the patch simply removed the text from cashout

rough furnace
#

specifically I want to have multiple tabs for DebugPlus's config

#

and I can do that fine with smods

#

but for the games built in settings

#

This menu is already tabful

#

So I'm thinking what if the DebugPlus tab just opened a new menu with all it's tabs

wintry solar
#

yeha that makes sense

granite plover
#

How do I make a joker remove cards from your hand?

spring lantern
#

hold on what was the context for doing stuff when a blind is selected

crisp coral
#

selecting_blind

#

i think

rough furnace
#

whats the best way to run code after all mods are loaded/the game is ready

spring lantern
#

oh my god i typed blind_selected i' stupif

#

okay it's not selecting_blind it seems

#

fuc

weary jungle
#

how do i modulus in a shader? im trying %but it isnt working

spring lantern
#

okay it's setting_blind

crisp coral
#

oop

#

lmao

weary jungle
#

i hatte shater

hardy viper
#

possibly modf

#

im not sure

#

ah nevermind

#

its fmod

#

oh wait

#

is that not it either

#

i frogot what a math is

#

okay nvm

#

yeah

weary jungle
#

its just mod()

earnest creek
#

what is the context for checking cards in hand?

granite plover
#

How do I make a Joker remove cards from my hand after a hand is played?

spring lantern
#

as in destroy the cards?

granite plover
#

Just discarding them

weary jungle
#

check the hook

#

or whatever the boss blind that discards cards

#

is

granite plover
hardy viper
hardy viper
weary jungle
earnest creek
#

oh my god thank you so much

weary jungle
#

but its probably lik

#
G.FUNCS.discard_cards_from_highlighted(nil, true)```
#

just guessing

granite plover
weary jungle
#

dont worry about that part

#

i thing im messing something up here

#

thats the atlas right

hardy viper
#

guh

#

bros got the entire spritesheet

weary jungle
#

yes that is deffinitly a spritesheet

#

how do i do thi

#

vec2 screen_coordsgood = vec2(mod(screen_coords.x / 1000, image_details.x), mod(screen_coords.y / 1000, image_details.y));

#

i think im moding the wrong things

#

i dont think my mod is moding at all

stiff locust
#

what are you trying to do???

crisp coral
#

shader moment

nocturne garnet
spring lantern
#

he is done

#

my first 5 jimbos have been created

bold sleet
#

Hello, I come here this time to ask if someone could solve for me this very specific issue:
I have made an enhancement that scapes its mult based on how many cards with that enhancement are in your entire deck. The description works and updates as expected, but when the cards score, the mult that is applied lags behind one played hand. For example. In your first hand you have 1 card with this enhancement and as such it grants you +5 mult. In your second hand, you manage to create 2 extra cards with this same enhancement, granting you +15 mult (+5 for each card), but when the hand is played it only grants +5 mult. Finally, in your third hand you have the same amount of cards with this enhancement, that when played each score +15 mult as it should.

#

please help

earnest creek
#

How do I properly check for suits held in hand? Because

        local suit = context.individual:get_suit()
        if suit == "Hearts" or suit == "Diamonds" then
            return {
                mult = self.config.extra.mult,
                card = context.individual
            }```

gives this error:

Oops! The game crashed:
main.lua:3826: [SMODS RDJ "RandomJokerDice.lua"]:133: attempt to index field 'individual' (a boolean value)
bold sleet
#

Ah, I see...

#

context.individual refers to the context and not the other card.

#

It throws an error because a boolean doesn't have any other function/list/whatever inside it, only it's value.

#

You are trying to access this inner list/function/whatever, which doesn't exist.

bold sleet
#

further explain

stiff locust
bold sleet
#

*So far the only thing I have ever made are jokes

#

So idk how enhancements really work.

wintry solar
#

they work almost entirely the samme

#

I don't know why you would assume otherwise and try and do everything in loc_vars, a function you should already have known about from working with jokers

stiff locust
#

except enhancements don't have card destruction outside shatter iirc?

bold sleet
#

if debug_mode then
  SMODS.Enhancement({
    key = 'fire',
    config = {
      mult = 0,
      extra = {
        b_mult = 5,
        c_mult = 1,
      }
    },
    loc_vars = function (self)
      return {
        vars = { self.config.mult , self.config.extra.b_mult , self.config.extra.c_mult},
      }
    end,
    calculate = function (self, card, context, effect)
      self.config.extra.c_mult = 0
      self.config.b_mult = 5
        for k, v in pairs(G.playing_cards) do
          if v.config.center == G.P_CENTERS.m_sbc_fire then 
            self.config.extra.c_mult = self.config.extra.c_mult + 1
          end
        end
      self.config.mult = self.config.extra.b_mult * self.config.extra.c_mult
      print("mult | ",self.config.mult)
    end
  })
end

is this fine?

#

idk

wintry solar
#

eenhancement calculation is a bit scuffed in that it doesn't have every context and you can't return from it

#

-# for now

bold sleet
#

-# soon™️

stiff locust
wintry solar
#

you're also using the prototype object

bold sleet
#

wat

wintry solar
#

you should be using card.

bold sleet
wintry solar
#

self.

bold sleet
#

7 beats me

#

there is already a 'card' bs idk

stiff locust
#

yes there's a self and a card don't change those in the function parameters

bold sleet
#

btw, it now doesn't work at all.

#

It just keeps the mult value at zero

#
if debug_mode then
  SMODS.Enhancement({
    key = 'fire',
    config = {
      mult = 0,
      extra = {
        b_mult = 5,
        c_mult = 1,
      }
    },
    loc_vars = function (self)
      return {
        vars = { self.config.mult , self.config.extra.b_mult , self.config.extra.c_mult},
      }
    end,
    calculate = function (self, card, context, effect)
      self.config.extra.c_mult = 0
      self.config.extra.b_mult = 5
        for k, v in pairs(G.playing_cards) do
          if v.config.center == G.P_CENTERS.m_sbc_fire then 
            self.config.extra.c_mult = self.config.extra.c_mult + 1
          end
        end
      self.config.mult = self.config.extra.b_mult * self.config.extra.c_mult
    end
  })
end

idk

hearty mesa
#

is there a way to modify a card when it is drawn to the hand

stiff locust
#

so yeah it makes sense that it isn't doing anything

bold sleet
#

guess context.individual?

#

I need to update it any time the player hovers over the card and when played, probably,.

wintry solar
#

you haven't replaced any of the self.s...

bold sleet
#

with card.?

#

idk what every parameter does

wintry solar
#

yes

bold sleet
#

ok

wintry solar
#

self refers to the prototype object that is used to create new objects, card refers to the actual object you're working on

earnest creek
wintry solar
#

loc_vars should be function(self, info_queue, card)

bold sleet
#

Hold on a sec.

#

Best I got is this for you.

#

probably you should just do context.other_card:get_suit

bold sleet
wintry solar
#

@bold sleet to make it do stuff right now though, you have to manipulate the effects table appropriately

bold sleet
#

if debug_mode then
  SMODS.Enhancement({
    key = 'fire',
    config = {
      mult = 0,
      extra = {
        b_mult = 5,
        c_mult = 1,
      }
    },
    loc_vars = function (self, info_queue, card)
      return {
        vars = { self.config.mult , self.config.extra.b_mult , self.config.extra.c_mult},
      }
    end,
    calculate = function (self, card, context, effect)
      if context.individual then
        card.config.extra.c_mult = 0
        card.config.extra.b_mult = 5
          for k, v in pairs(G.playing_cards) do
            if v.config.center == G.P_CENTERS.m_sbc_fire then 
              card.config.extra.c_mult = card.config.extra.c_mult + 1
            end
          end
        card.config.mult = card.config.extra.b_mult * card.config.extra.c_mult
      end
    end
  })
end

(if you want modify it and send it back, please)

earnest creek
wintry solar
#

oh right, it's card.ability not card.config

earnest creek
#

ok

weary jungle
#

im trying to do the unmoving plain

bold sleet
frosty dock
# bold sleet this thing simply does not work at all.
if debug_mode then
  SMODS.Enhancement({
    key = 'fire',
    config = {
      mult = 0,
      extra = {
        b_mult = 5,
        c_mult = 1,
      }
    },
    loc_vars = function (self, info_queue, card)
      return {
-        vars = { self.config.mult , self.config.extra.b_mult , self.config.extra.c_mult},
+        vars = { card.ability.mult, card.ability.extra.b_mult, card.ability.extra.c_mult},
      }
    end,
    calculate = function (self, card, context, effect)
      if context.individual then
-        card.config.extra.c_mult = 0
-        card.config.extra.b_mult = 5
+        card.ability.extra.c_mult = 0
+        card.ability.extra.b_mult = 5
          for k, v in pairs(G.playing_cards) do
            if v.config.center == G.P_CENTERS.m_sbc_fire then 
-              card.config.extra.c_mult = card.config.extra.c_mult + 1
+              card.ability.extra.c_mult = card.ability.extra.c_mult + 1
            end
          end
-         card.config.mult = card.config.extra.b_mult * card.config.extra.c_mult
+         card.ability.mult = card.ability.extra.b_mult * card.ability.extra.c_mult
      end
    end
  })
end
violet void
#

should I decrease the cap

earnest creek
wintry solar
#

I mean it still won't do anything

frosty dock
#

oh lmao i glossed over that

wintry solar
#

but making it do something is an easy line

#

I am loathed to teach people this convoluted method though

bold sleet
#

Eh, fair enough.

violet void
bold sleet
wintry solar
#

yes but it's a dumb way of doing it that's in the process of being rewritten

#

and it wont work when the changes are done

weary jungle
#

why are we gray mode

#

why is the jimbo there??

#
    screen_coordsgood = screen_coordsgood + image_details.xy;
    // printf(screen_coords.x);
    // screen_coords = mod(screen_coords, image_details);

    vec4 tex = Texel(texture, screen_coordsgood);``` why is my color getting removwd
crisp coral
#

-# bettercalc 2 done when

wintry solar
#

-# when I can work out this silly post trigger timing

rough furnace
#

What a useful function name

weary jungle
#

i think it should be icup

rough furnace
#

how do you spell that

crisp coral
#

i dont understand that can you spell it out for me

frosty dock
#

i don't get it either, can anyone please spell it

weary jungle
#

oh ok!

#

ill spell it out right now!

#

i cee u pee!

#

oh no...

crisp coral
#

Mods, Sacrificial Dagger this user

rough furnace
weary jungle
#
    screen_coordsgood = screen_coordsgood + vec2(mod(texture_coords.x, 71.0), mod(texture_coords.y, 95.0));
    vec4 tex = Texel(texture, screen_coordsgood);```im not getting any color and i dont know whats wrong
stiff locust
#

alright chat how do I destroy jokers

weary jungle
#

like remove

stiff locust
#

like get rid of them

#

make them go away

#

yeah that

weary jungle
#

probably look at sacrifical dagger

violet void
#

:start_dissolve()

stiff locust
#

you mean ceremonial dagger

zealous glen
weary jungle
#

unmoving plaid

zealous glen
#

Recently I made Chowder

stiff locust
#

alright figured it out

zealous glen
#

Here

stiff locust
#

now how do I check for a sticker

#

I should check for eternal before destroying

#

or does it do that for me

#

either way I need to check the sticker

crisp coral
#

it does not do that

zealous glen
#

How are you trying to make the plaid?

stiff locust
#

okay well then I really need to check for sticker

#

how to

zealous glen
#

A texture or directly in the shader?

weary jungle
#

in the shader

stiff locust
#

oh c dagger checks it

#

oh that's convenient

zealous glen
#

Okay then, you can just draw on top of the texture

weary jungle
#

problem, im bad

#

at shaders

thorny adder
#

Hi Marie

stiff locust
#

hi mag

tall wharf
#

oh fuck it's new day already

deft flame
#

can i ask for an help here?

sturdy compass
#

Going to bump this really quick. tl;dr despite patch looking good, vanilla functionality is still being retained with no signs of the newly patched code being run (no console messages)

sturdy compass
deft flame
#

im playing the cryptid mod and it crash every time i play an hand, any help?

#

in the modding chat no one answer 🥲

sturdy compass
#

You’d probably find more help in the Cryptid discord than here

spring lantern
#

how should i go about applying a random enhancement to a playing card?

#

to make sure it's compatible with other mods that is

weary jungle
#

poll_enhancement? i think

#

dont take my word

sturdy compass
#

Probably SMODS.poll_enhancement

frosty dock
spring lantern
#

aight thanks

frosty dock
#

-# I'm aware the original doesn't do this for consumables but why shouldn't it

weary jungle
#

G.GAME.starting_params.ante_scaling = G.GAME.starting_params.ante_scaling + card.ability.extra.BlindIncrease this isnt updating the current blind, how do i fix this

#

it updates the future blinds, but not the blind that you are in

tall wharf
#

i should learn how to make custom jokers one day

sturdy compass
#

If you have some coding knowledge it’s not too bad to pick up

tall wharf
#

i had a very unfinished love2d project

tall wharf
#

but yes i have some small coding knowledge

night pagoda
#

Can I take ownership of something during runtime?
and if yes, can I revoke taking ownership?

tall wharf
#

actually

frosty dock
tall wharf
#

example steamodded code

frosty dock
#

taking ownership only ever changes the prototype, so even then it wouldn't affect existing cards

night pagoda
#

I have a config that takes ownership to inject some custom behaviors, and it's quite annoying that it requires restart in order to apply, so wanted to make it not require restart

frosty dock
#

you can just take ownership always and bypass the channge if the config is off

night pagoda
#

hmm, that might work, thanks!

stiff locust
#

if card.ability.extra.counter >= 5 and context.game_over and G.GAME.chips/G.GAME.blind.chips >= 0.25 then
this line is crashing "Attempt to compare number with table" ??
counter is a number and it is 5 right now, strange though because this is exactly how mr bones does this check

crisp coral
#

Talisman moment

stiff locust
#

oh ffs

#

is it a talisman thing

wintry solar
crisp coral
#

yeah, wrap 0.25 in to_big

stiff locust
#

oh is it that easy

#

i'm going to make a check for talisman first though because if possible i'd like to avoid it being a dependency

crisp coral
#

then add this

to_big = to_big or function(num)
    return num
end
stiff locust
#

.

#

that's way easier actually huh

#

well thanks

crisp coral
#

yw

frosty dock
wintry solar
#

Will take another look when my kid is in bed in ~an hour

normal crest
#

Wdym

stiff locust
#

does start.dissolve() have any required arguments

weary jungle
#

probably not

crisp coral
crisp coral
deft flame
# normal crest Wdym

how do i update it? just take off the old one from the folder and stick the new one in?

stiff locust
#

oh you know what it's fucking doing

stiff locust
#

that stupid end of round triggering like 8 times shit

crisp coral
#

lovely

wintry solar
hardy viper
#

oh i didnt know you had another coming congrats

stiff locust
#

is there a way i can get the end of round context to only trigger one time

#

i've been indirectly solving the problem by disabling the code after the first trigger

crisp coral
#

if context.end_of_round and not context.repetition and not context.individual then

hardy viper
weary jungle
#
        local kyeeee = ""
        if not TGTMConsumables.config.CursedRunes then
            kyeeee = "SturdyGlass"
        else
            kyeeee = "SturdierGlass"
        end
        print(kyeeee)
        info_queue[#info_queue + 1] = {
            key = kyeeee, 
            set = 'Enhancement',
            config = {extra = 1}
        }
...``` this isnt working
frosty dock
#

another thought, should we skip again messages on empty evals?

weary jungle
#

man

wintry solar
#

Oh there’s some bad logic on the pushed version, it must be my local branch that is fixed

deft flame
frosty dock
#

oh alright, don't mind me then

normal crest
weary jungle
#

ok now its nil in nil chance

stiff locust
#

that's an issue on sturdy glass' end

weary jungle
#

my own issue ok

#

what do i fix

stiff locust
#

show sturdy glass code

weary jungle
#

the sturdy glass shows the right chances

stiff locust
#

okay but show the code

weary jungle
#
    --glass
    key = "SturdyGlass",
    atlas = "Tatatro",
    pos = {x = 5, y = 2},
    unlocked = true,
    discovered = true,
    loc_txt = {
        name = "Sturdy Glass",
        text = {"{X:mult,C:white}X2{} Mult", "#1# in #2# chance to not give {X:mult,C:white}X2{} Mult"}
    },
    loc_vars = function(self, info_queue, card)
        return {vars = {G.GAME.probabilities.normal, "5"}}
    end,
    config = {
        x_mult = 2
    },
    calculate = function(self, card, context, effect)
        if context.cardarea == G.play and not context.repetition then
            if pseudorandom(pseudoseed("SturdyGlassDebf")) < G.GAME.probabilities.normal/4 then
                effect.x_mult = 1
            else
                effect.x_mult = 2
            end
        end
    end

}```
#

i also dont know wht i didnt use en_us

#

this is really bad

stiff locust
#

using separate localization might solve it? idk, but you should make the X2 mult a loc_vars too

weary jungle
#

im gonna fix this

stiff locust
#

it works for my 2 other end of round effects but idk whats up with this one

crisp coral
#

whats the crash and the code

stiff locust
#

[SMODS Tsunami "Tsunami.lua"]:1957: attempt to call method 'start_dissolve' (a nil value)

#

line 1957 is value:start.dissolve()

#

and it's in a for loop where value is Splash

crisp coral
#

is value a card object

stiff locust
#

yes

#

it looks for splash and destroys them

#

and it does destroy the splashes before crashing

crisp coral
#

can you show the whole loop

stiff locust
#

killflag was supposed to solve the multi trigger but it's not working

hardy viper
#

forgot prefix for the keys

stiff locust
#

what

hardy viper
#

mod prefix

stiff locust
#

splash isn't a modded joker

hardy viper
#

dont u take ownership of it

stiff locust
#

i was going to, but it crashed when i tried to do that

rough furnace
#

taking ownership shouldn't change it's id?

stiff locust
#

i still want to do that, but not right now

rough furnace
#

otherwise wouldn't it break find_card?

stiff locust
#

this is in context.game_over and not context.individual and not context.repetition

normal crest
#

i'm not sure why that would be happening, but iirc the game always uses start_dissolve in an event, so you can try that i guess

stiff locust
#

okay

#

wait.

#

oh my god

#

this is actually nothing to do with the crash.

#

I copied the save code from Mr.Bones, which kills itself after activating its effect.

#

It's crashing because of self:start.dissolve() in there

crisp coral
#

peak

stiff locust
#

well fuck

cyan dune
#

Hey, is there a way to use... like, a dependency variable on SMODS.DeckSuit? I want the atlas to change based on whether or not Bunco is installed (you know, with the whole Enhanced Contrast thingy)

hardy viper
#

for whether or not bunco is installed you can check local buncoLoaded = SMODS.Mods.Bunco SMODS.Mods.Bunco.can_load

#

can_load*

spring lantern
#

i think i'm stupid guys i can't figure out how to apply an enhancement to a playing card 🥲

rough furnace
#

there should be an and between those

cyan dune
#

Great, I'll try it out!

spring lantern
#

so im using poll_enhancement to get a random enhancement how do i hook that up to set_base

#

my god i feel useless rn

rough furnace
#

oh looks like I was wrong

spring lantern
#

oh so it's setability

rough furnace
#

yeah i recalled incorredctly

wintry solar
#

card:set_ability(G.P_CENTERS[poll_enhancement()])

spring lantern
#

ohh thank you

#

i was getting all sorts of confused with all the centers and abilities and like why is this so convoluted help-

nova finch
#

how would i detect the played cards in a hand's suit? I'm trying to make a joker that triggers when a flush is a certain suit but right now it only detects flushes in general

spring lantern
#

check the suit of a random scoring hand i guess

rough furnace
#

center is basically a blueprint for a card

spring lantern
#

or wait it could be a wild

rough furnace
#

and defines it's ability

spring lantern
#

oh my god i forgot to add return true in an event and the game started tweaking and crashed LOL

cyan dune
# cyan dune Great, I'll try it out!

Okay, I'm getting an 'unexpected symbol near "if"' error. This is my first time making an if statement in Lua... is something wrong here?

buncoLoaded = SMODS.Mods.Bunco and SMODS.Mods.Bunco.can_load

SMODS.Atlas{ key = 'FoLKSpades', path = 'FoLKSpades.png', px = 71, py = 95 }
SMODS.Atlas{ key = 'FoLKSpadesHC', path = 'FoLKSpadesHC.png', px = 71, py = 95 }
SMODS.Atlas{ key = 'FoLKSpadesEC', path = 'FoLKSpadesEC.png', px = 71, py = 95 }

SMODS.DeckSkin{
    key = "FoLKSpades",
    suit = "Spades",
        ranks = { "Jack", "Queen", "King" },
    lc_atlas = 'FoLKSpades',
    if buncoLoaded == true then
        hc_atlas = 'FoLKSpadesEC'
    else
        hc_atlas = 'FoLKSpadesHC'
    end,
    loc_txt = "Friends of LK",
    posStyle = 'collab'
}```
spring lantern
#

why does poll_enhancement return nil sometimes

#

i set guaranteed to true

#

OH NO

#

i set "guaranted" to true

#

good fucking job

tepid crow
spring lantern
#

and it STILL does nil

tepid crow
cyan dune
#

Alrighty

stiff locust
#

is there a way to change the "Saved by Mr. Bones" text

#

for a modded joker doing the same effect save

rough furnace
#

lovely

stiff locust
#

.

cyan dune
#

oh wait... did I forget the local?

tepid crow
#

not sure why that would be

rough furnace
stiff locust
#

can the lovely patch pattern argument search across 2 lines

hardy viper
#

yeah

stiff locust
#

okay great

nova finch
frosty dock
#

wdym by a flush being a certain suit?

#

does any one card in the scoring hand being that suit suffice?

cyan dune
frosty dock
#

does it have to be a common suit between all scored cards?

nova finch
earnest creek
#

how I pick a random joker in the joker tray that is not the joker itself?

frosty dock
nova finch
#

how do I check for each card though

#

that's what ive been trying to figure out

frosty dock
#
local hearts = true
for _, v in ipairs(context.scoring_hand) do
  hearts = hearts and v:is_suit('Hearts')
  if not hearts then break end
end
nova finch
#

ill give this a try

#

wait

#

where do i put it

pine moss
#

You can get a list of highlighted cards using this, G.hand.highlighted, is there a similar way to get a list of every scoring card?

frosty dock
frosty dock
#

if that's not available, you have to recalculate it

weary jungle
#

how do i pass loc vars into info queue

nova finch
earnest creek
nova finch
#

i know that

spring lantern
#

my new joker as per a friend's request

earnest creek
#

spoge

nova finch
tepid crow
#

you need to check the context

nova finch
#

what would i check

normal crest
nova finch
#

ok

#

i have no idea what any of this means

fresh swallow
#

Hay, I am curious, Does a template for making modded jokers exist? I am new to the moding scene

wintry swallow
#

how to add custom localisation strings? i need a custom challenge rule

earnest creek
#

in Steamodded format

#

goes over pretty much every game mechanic, except held in hand cards

radiant halo
# nova finch i have no idea what any of this means

whenever calculate_joker is called, an argument called context is passed into it which contains, well, the context of the call. the joker then checks if the context is the correct for it to execute and if it is, executes. e.g. if it is called with the context selling_self itll execute and give the double tag

#

here are all the contexts (i believe)

nova finch
#

thank you

earnest creek
radiant halo
#

like, red cards code is in skipping_booster, throwback is in skipping_blind

open bone
#

Hey, sorry to bother, I'm trying to do something that I THINK should be simple, but I'm somehow not having any luck.

I'm just trying to have a joker that activates its' effect (like +3 mult or what have you) only if the Scoring Hand has a King and a Queen in it (so they need to count), and I THINK I got it partially working, but I'm not getting the benefits it should give?

Whenever it procs, the joker has a little yellow particle effect show up, which shows it does register the fact the scoring hand has a king and queen, but for some reason It's not actually giving me the mult bonus. I'm probably missing something obvious, but I can't figure it out Agony

fresh swallow
radiant halo
# nova finch thank you

theres also a context specific to steamodded, joker_main, putting your code in there will execute it during the time jokers add their mult and chips

pine moss
#

How can I make an information tab like the stone card here?

#

Wait ignore I found it

nova finch
radiant halo
nova finch
#

if the played hand only contains hearts (so a flush of hearts), it triggers

radiant halo
#

yes but like, does it add mult? chips? if you properly set it up you would return the vars stored in config and a message to display

nova finch
#

its x3 mult

#

i know what to put in the return jusrt not where to put it

normal crest
radiant halo
nova finch
#

ok

#

thank you!

radiant halo
#

np

open bone
normal crest
#

yeah, you also don't have to do == true on booleans, you can just if king and queen then

open bone
#

Oh good to know

spring lantern
#

i'm adding a random enhancement to a card when it gets played but it only works visually when calculating the hand, is there a way i can fix this?

wintry solar
#

show code

spring lantern
#

i feel like i'm doing something wrong

#

the message doesnt even show up

wintry solar
#

because you have it in an event, it'll change after the score calculations are done

spring lantern
#

oh crap

wintry solar
#

I believe if you do it outside the event with delay_sprites set to true (third arg iirc) it'll animate correctly

spring lantern
#

okie thx i'll try that

radiant halo
wintry solar
#

no you cant do that

#

any event would be put at the end of the queue

radiant halo
#

rip

#

i should really learn how E_MANAGER works

rough furnace
radiant halo
#

yooooo ty

tepid crow
radiant halo
#

oh true lol

#

i mean i mostly just havent gotten around to learning it yet

violet void
#

can judgement tarot create eternal jokers?

hardy viper
#

nope

#

however it can generate editioned jokers

granite plover
#

How do I translate my mods (make it so the description changes depending on the language)?

normal crest
granite plover
#

Thanks!

raven sparrow
#

Hello everyone. I've never coded before, but I'm having a lot of fun on Balatro lately and I wanted to try and make a Joker myself. I followed a tutorial read the examples in steamodded (thanks to the person who suggested that earlier to someone) and now it's working, but it's not doing what I want it to do. I know what probably needs to be changed, but I have no clue on how to do so.

leaden coral
#

anyone has a good tutorial on how to start modding balatro?

raven sparrow
granite plover
#

What's the if to identify non-scoring cards?

radiant halo
#

wait

#

actually just try local new_card = create_playing_card() maybe

livid tapir
#

hehe

#

helo

radiant halo
#

and remove the g.jokers:emplace

#

you dont wanna put it in the joker area

fallen tendon
#

im pretty stumped on this

#

how do you make a joker give a booster pack ore cards and choices?

#

a specific booster pack

livid tapir
#

i swear why is SMODS wiki always missing specifically the stuff i want to see

tepid crow
fallen tendon
#

my m key keeps acting funny

livid tapir
tepid crow
fallen tendon
#

it contains joker in there

frosty dock
#

which Jokers are a subclass of, so it's contained

radiant halo
tepid crow
livid tapir
#

ah ok thx

frosty dock
#

might need to be reorganized into actual subpages

radiant halo
#

not sure how to do it with smods

fallen tendon
tepid crow
#

honestly probably would work better yeah

radiant halo
#

ahh

#

hmm

#

im not sure, i havent looked at adding booster packs yet sorry

livid tapir
#

i wonder why SMODS.Joker never even mentions calculate

radiant halo
#

if you just want to edit the base values i feel like that should be easy? making a joker to change it mid-run would be harder though

frosty dock
#

tbf this is poorly organized

livid tapir
#

it really is 😭

#

a 4 yr old could organize it better

tepid crow
#

lmao alright

radiant halo
livid tapir
#

LOL

raven sparrow
radiant halo
#

are you still calling add_to_deck()?

raven sparrow
#

yep

livid tapir
#

add_to_deck(new_card)?

frosty dock
radiant halo
#

no it should be new_card:add_to_deck()

livid tapir
#

oh ok

radiant halo
#

its a function of card

frosty dock
#

that won't magically place the card in your deck, it just calls on-add effects

raven sparrow
radiant halo
frosty dock
#

lol no

radiant halo
#

wait

#

yea dont

#

do that

frosty dock
#

you just need to give create_playing_card an area to emplace to

#

it's the second argument

#
local new_card = create_playing_card(nil, G.hand)
G.GAME.blind:debuff_card(new_card)
G.hand:sort()
radiant halo
#

i think he wants G.deck? but yeah

frosty dock
#

i took that from certificate, adapt as needed

zealous glen
#

What's a good function to hook at the start of a run?

raven sparrow
nocturne garnet
#

chat, how would one try to make an observatory-like joker

stray warren
nocturne garnet
#

or im trippin

livid tapir
nocturne garnet
livid tapir
#

what

#

💀

nocturne garnet
#

😭

leaden coral
zealous glen
#

Since it also needs to save per run

zealous glen
livid tapir
#

inside of steamodded theres a folder with the name smth about example mods

orchid thunder
#

how can i make smods.eval_this work with blueprint

#

when i blueprint a card with it it just does the text on the original card

frosty dock
#

context.blueprint_card or card

orchid thunder
#

ok thanks

#

also is there a reson why this cant be retriggerd

spring lantern
#

new joker has been created

nova finch
#

progress is going swimmingly

spring lantern
#

flower boy joker goes crazy

nova finch
#

lol

violet void
nova finch
radiant halo
nova finch
radiant halo
#

hell yea

zealous glen
#

weezer

nova finch
#

weezer

zealous glen
#

as foretold

livid tapir
nova finch
livid tapir
#

we need goblin joker

nova finch
#

maybe

#

ill think about it

radiant halo
cinder elk
nova finch
cinder elk
#

what does it

#

do

nova finch
#

still need to code it in though

radiant halo
#

you gonna resize the joker hitbox?

#

like for square joker

nova finch
#

i didn't even know you could do that

pine moss
#

This helped me debug why the mult tag was black instead of white, thank you

livid tapir
radiant halo
#

i mean, thats what like, square joker and half and photograph do

#

they why, when they're flipped, they retain their size

livid tapir
#

i didnt even know you could

radiant halo
#

idk if smods has functionality for that but you could prob lua inject it

grim lynx
#

anybody know why im getting this everytime i go play a hand?

#

i just recently modded this game for the first time so i dont have much mods installed yet and when i went to test it out i get this

livid tapir
#

weird that it didnt show what mods are installed, it normally has an extra context part of the crash log

grim lynx
#

at first it was for mikas mod collection but i uninstalled it and still get this

violet void
#

do you have talisman and divvy's history
-# if you do, disable Talisman

grim lynx
#

i dont have any mod installed, i just installed the steam mod injector for the game to get it setup for mods and whenever i tested a playthrough i just get that

violet void
#

you installed SMODS and lovely right

livid tapir
#

bc SMODS needs lovely to function

grim lynx
#

ill check and see

#

i installed lovely and im still getting it

livid tapir
#

bc

#

look at steamoddeds readme

#

or wait no

#

ok lemme

violet void
# grim lynx

did you add the .dll file in the game directory

livid tapir
# grim lynx

"If you previously installed Steamodded without Lovely, you must first remove that installation by verifying your game files on Steam: Library > Balatro > Properties > Installed Files > Verify integrity of game files."

grim lynx
#

ok ill do that

livid tapir
#

then you install lovely FIRST before steamodded

#

thats the guide to installing steamodded, itll tell every step

nova finch
livid tapir
#

btw how do i use remove_from_deck in jokers? i cant find it on the SMODS wiki

#

its either not there or just another one of those stupid organization problems

#

OH I FOUND IT SRY

#

NVM

tidal steppe
#
      local prime = {1,2,3,5,7}
      print(context.other_card.rank, prime[context.other_card.rank])
      if prime[context.other_card.rank] then

how do i get the cards rank? this is just returning rank=1 and so prime=true for everything

grim lynx
#

ok so the problem i was facing was i did not put the steamodded main folder in the mods folder

#

now its working

livid tapir
#

nice

violet void
tidal steppe
#

i just tried that actually and it was returning nil

livid tapir
violet void
#

isnt start_dissolve enough to delete jokers?

livid tapir
#

oh no im trying to do something when the joker is removed

violet void
#

oh ok

livid tapir
#

according to people (and the wiki) thats the purpose of remove_from_deck

tidal steppe
#

gotta say, the entire enviroment is pretty confusing. i am struggling. remove_from_deck sounds like the action, instead its the trigger

#

first i learnt that 'start_disolve' is the method to remove

livid tapir
tidal steppe
#

agreed

#

my modding journey might not last long if i cant make some progress

livid tapir
#

like shouldnt the center methods according to specific centers be included IN THAT CENTER'S SECTION?

tidal steppe
#

the docs say what elements are needed but dont explain what they are or do

livid tapir
#

like imma bout to rewrite the wiki just so i can read the thing /j

violet void
tidal steppe
#

mood

nova finch
#

how would I make a joker trigger when a hand is played but before it's scored like midas mask?

violet void
nova finch
livid tapir
tidal steppe
#

ya

livid tapir
#

they dont want us to mod balatro 💀

violet void
#

it would benefit from showing usage examples

livid tapir
#

yea

tidal steppe
#

also be nice to have page for object outlining all fields and methods
eg>

Playing Card

fields:
.rank
explanation
.suit
blablabla

also also
the whole config, return values stuff is bewieldering. why do we need multiple alternately named references to a single constant that we cant directly use?

fresh swallow
#

Hay, I am newer to modding and I was wondering if I could get some help with something. I want my joker to play a sound effect when triggered. If someone could push me in the right direction that would be great