#đŸ’»ăƒ»modding-dev

1 messages · Page 528 of 1

willow scroll
#

ok i made it work, but how would i go about properly removing the overlay when my card no longer has the enhancement?

copper thorn
#

bump + im stuck with smth i thought i knew how to do it, how do i make a jokers value a
-x$ ?

willow scroll
#

huh? if i set no_rank = true and replace_base_card = false on my enhancement, then in my hand the front will be hidden, but not when in my deck?

pastel kernel
#

Why do some lines have their own names instead of regular degular SMODS

#

Like for example Cryptid has “Cryptid.base_values = {}”

proven belfry
#

my pc is currently crying

pastel kernel
gray void
primal robin
proven belfry
proven belfry
gray void
#

So the extra joker voucher makes ot 9001

proven belfry
pastel kernel
#

It’s 1006

gray void
proven belfry
gray void
#

Or just plain +1 chip, each joker-

#

✋ egg đŸ€š

#

Absolute cineggma

proven belfry
gray void
proven belfry
#

unless you have good leveling

#

and are prepared

#

the plant is no longer asking

pastel kernel
proven belfry
pastel kernel
gray void
#

I keep forgetting to ask
Do i need to just put my mod in github, or i can just yeet it in anywhere publically accessible

proven belfry
#

but yea

pastel kernel
# proven belfry min ante = 32:

This joker + the other joker I made that retriggers the rightmost joker and gains an extra retrigger when a boss blind is defeated

gray void
#

Man, i have to use my old git acc

#

Well imma have to test if my jokers are blueprintable first still

proven belfry
pastel kernel
#

Hold on.

#

Let me screenshot something.

gray void
#

For each hand played

pastel kernel
proven belfry
gray void
#

And also destroys other copies of it

slim ferry
gray void
pastel kernel
proven belfry
#

YOU DONT HAVE TO DO THIS

gray void
#

The joker is just like a dlc for another joker

proven belfry
#

ah yes, a necessary addition

gray void
#

I want to make new editions, but i dunno how

pastel kernel
proven belfry
pastel kernel
#
remove_from_deck = function(self, card, from_debuff)
gray void
proven belfry
pastel kernel
#

negative e's?

proven belfry
proven belfry
hallow slate
spice wadi
hallow slate
#

I did but then I removed them, still getting an error

spice wadi
#

Weird

pastel kernel
#

Evil Deck: Creates a negative pointer at the start and end of each round

pearl jacinth
#

what is the game state 14 (G.STATES.SANDBOX) used for

hallow slate
# spice wadi Weird

Yeah idk what’s going on because I haven’t had this issue last time I updated everything on my Windows

#

Nor did I have issues on SteamOS

slim ferry
#

or at least it might as well be

willow scroll
#

how do i check if a card is flipped?

red flower
#

card.facing == "back"

willow scroll
#

thank you

pastel kernel
#

What do you think about the deck of absolute hate?

wind steppe
#

also wtf do you mean fantastic joker

pastel kernel
pastel kernel
wind steppe
#

this channel is for code help

pastel kernel
#

Oh

#

Actually I do need help with “A” code

proven belfry
#

how do I apply stake effects to decks (specifically 5x faster blind scaling for sake of balance)

pastel kernel
#

I’m making a mechanical card (new type of consumable) called Wishlist, I believe you know of it already.

slim ferry
proven belfry
proven belfry
slim ferry
#

i mean idk if theres a way to do like specifically 5 times faster so youd have to play around a bit and see what scaling values work

pastel kernel
proven belfry
slim ferry
proven belfry
pastel kernel
limber blaze
#

like hotfix from entropy for example

pastel kernel
#

This is the diagram

limber blaze
#

just makes the joker immune to being debuffed

wind steppe
pastel kernel
limber blaze
#

no it can get destroyed if it has hotfix

proven belfry
limber blaze
#

also like every "my mechanic is better and it makes yours not work" ever will be an arms race

wind steppe
#

yeah idk

pastel kernel
wind steppe
#

i hate to say this but your best bet is prob looking at cryptid rework tags

slim ferry
#

and also cryptid code card ui probably

pastel kernel
#

Balancing issues will be dealt with once I get to finishing the main job

slim ferry
#

shop pointer

#

ig

pastel kernel
proven belfry
wind steppe
#

no other mod would have something so exact

proven belfry
pastel kernel
#

I don’t know how some of pointer’s code works

slim ferry
# pastel kernel This is the diagram

is the sequence of cost multipliers supposed to be 1 > 2 > 4 > 8 because i cant think of any usual function that would go through 2, 4, and 16 and also constantly increase

pastel kernel
#

I haven’t studied a lot of lua, so idk what definition does or whatever the fuck

slim ferry
#

the first use is a 1x cost multiplier though

pastel kernel
#

Oh.

slim ferry
#

if im looking at the diagram correctly

#

and 1^2 = 1

pastel kernel
#

Ok then it is 1248

#

Sorry

slim ferry
#

i mean ^2 could work if you started at 2

pastel kernel
#

I’m thinking erratically, that’s not good for me

slim ferry
#

though it would make the card basically completely unusable after a while

wind steppe
#

thats probably a good thing

slim ferry
#

it would be funny to have a card costing naneinf in the shop though

pastel kernel
#

You can still buy it, but it’ll cost ya.

slim ferry
#

when are you having 1 quadrillion dollars 😭

pastel kernel
#

X2 gained interest per bought voucher.

#

If you tell me to nerf this joker, then what’s the point of “The Busted Buffoons Mod”?

hallow slate
pastel kernel
#

I didn’t make this mod to beat all other mods in an arms race

#

I made this mod because it’s fucking funny to see jokers give me funny numbers

pastel kernel
#

I also made this mod to add in Spinel.

#

Spinel is a joker that STOCKPILES XMULT ON EACH SCORED CARD

proven belfry
pastel kernel
#

So for this mod, Spinel is the Jolly Joker.

pastel kernel
#

It’s on par with Exotic.

proven belfry
#

so only one consumable makes it

#

soul_rate for said consumable is super low?

pastel kernel
#

Dream card is the only consumable I made.

proven belfry
pastel kernel
#

Spectral card

#

Summons a random fantastic joker

proven belfry
proven belfry
#

good movie

#

you should watch it

pastel kernel
#

No thanks

vast bough
#
SMODS.Enhancement {
    key = 'retrigger',
    pos = { x = 7, y = 0 },
    config = {
        extra = {
            retrigger_times = 1
        }
    },
    loc_txt = {
        name = 'retrigger!',
        text = {
        [1] = 'retrigger'
    }
    },
    atlas = 'CustomEnhancements',
    any_suit = false,
    replace_base_card = false,
    no_rank = false,
    no_suit = false,
    always_scores = false,
    unlocked = true,
    discovered = true,
    no_collection = false,
    calculate = function(self, card, context)
        if context.repetitions and card.should_retrigger then
            return { repetitions = card.ability.extra.retrigger_times }
        end
        if context.main_scoring and context.cardarea == G.play then
            card.should_retrigger = false
            card.should_retrigger = true
        end
    end
}

am i being stupid why is this not retriggering like it should, does enhancements not have the repetitions context

#

oh wait

#

bruh i typed repetitions instead of repetition

#

ignore that message

pastel kernel
#

How does Hotfix’s lua work?

#

From what I can see in the file, it just applies a sticker

wispy falcon
#

Do I need to learn GLSL for shaders in Balatro?

pastel kernel
#

from what i hear yes

wispy falcon
#

Woohoo... -_-

slim ferry
#

because the card actually does just apply the sticker

willow scroll
#

can i make a card count as multiple enhancements? (while not having the effects of both)

red flower
willow scroll
pastel kernel
slim ferry
#

yeah

#

everything has the same sprite size except for blinds, tags and stakes as far as i know

pastel kernel
#

Do I start with Deck #1 or Deck #5?

slim ferry
#

dude idfk its not my mod

#

do whatever you want

pastel kernel
#

Ok

#

Deck #5 it is

#

The Deck of Absolute Hate is in production

#

I should probably create a Dagger like joker

#

In case cursed jokers are present in the deck

candid elbow
#

Hello ummm

#

How can i check if a joker is present in your joker slots

wintry solar
#

SMODS.find_card('joker_key')

brittle yacht
#
    key = 'tylercon',
    set = 'Tarot',
    loc_txt = {
        name = 'Tyler',
        text = {
            'Enhances up to {C:attention}3{} selected cards into {C:attention}Glass Cards{}'
        }
    },
    atlas = 'tylercon',
    pos = { x = 0, y = 0 },
    cost = 6,
    unlocked = true,
    discovered = true,
    config = { max_highlighted = 3, mod_conv = 'm_glass' },

    loc_vars = function(self, info_queue, card)
        info_queue[#info_queue + 1] = G.P_CENTERS[card.ability.mod_conv]
        return { vars = { card.ability.max_highlighted, localize { type = 'name_text', set = 'Enhanced', key = card.ability.mod_conv } } }
    end,

    use = function(self, card, area, copier)
        if G.GAME.blind.config.blind.key == "silly_boss_tyler" then
            G.E_MANAGER:add_event(Event({
            trigger = 'after',
            delay = 0.4,
            func = function()
                play_sound('timpani')
                SMODS.add_card { key = "j_silly_tylerjok" }
                card:juice_up(0.3, 0.5)
                return true
            end
            }))
            delay(0.6)
        else
            G.E_MANAGER:add_event(Event({
            trigger = 'after',
            delay = 0.4,
            func = function()
                play_sound('tarot1')
                card:juice_up(0.3, 0.5)
                return true
            end
            }))
            for i = 1, #G.hand.highlighted do
                local percent = 1.15 - (i - 0.999) / (#G.hand.highlighted - 0.998) * 0.3
                G.E_MANAGER:add_event(Event({
                    trigger = 'after',
                    delay = 0.15,
                    func = function()
                           G.hand.highlighted[i]:flip()
                        play_sound('card1', percent)
                        G.hand.highlighted[i]:juice_up(0.3, 0.3)
                        return true
                    end
                }))
            end
            delay(0.2)
            for i = 1, #G.hand.highlighted do
                G.E_MANAGER:add_event(Event({
                    trigger = 'after',
                    delay = 0.1,
                    func = function()
                        G.hand.highlighted[i]:set_ability(G.P_CENTERS[card.ability.mod_conv])
                        return true
                    end
                }))
            end
            for i = 1, #G.hand.highlighted do
                local percent = 0.85 + (i - 0.999) / (#G.hand.highlighted - 0.998) * 0.3
                G.E_MANAGER:add_event(Event({
                    trigger = 'after',
                    delay = 0.15,
                    func = function()
                           G.hand.highlighted[i]:flip()
                        play_sound('tarot2', percent, 0.6)
                        G.hand.highlighted[i]:juice_up(0.3, 0.3)
                        return true
                    end
                }))
            end
            G.E_MANAGER:add_event(Event({
                trigger = 'after',
                delay = 0.2,
                func = function()
                    G.hand:unhighlight_all()
                return true
            end
            }))
            delay(0.5)
        end
    end,

    can_use = function(self, card)
        if G.GAME.blind.config.blind.key == "silly_boss_tyler" then
            return G.jokers and #G.jokers.cards < G.jokers.config.card_limit
        else
            return G.hand and #G.hand.highlighted > 0 and #G.hand.highlighted <= card.ability.max_highlighted
        end
    end
}```
still having issues with this, trying to make a consumable turn 3 cards glass, but when used in a specific boss blind, it spawns a joker instead
slim ferry
#

enhancement consumables are handled automatically im pretty sure so it probably is just ignoring the use function

#

id just put the variables in extra so it doesnt do that

slim ferry
#

the config variables

brittle yacht
#

the config extra?

slim ferry
#

yes

brittle yacht
#

ok!

#
    key = 'tylercon',
    set = 'Tarot',
    loc_txt = {
        name = 'Tyler',
        text = {
            'Enhances up to {C:attention}3{} selected cards into {C:attention}Glass Cards{}'
        }
    },
    atlas = 'tylercon',
    pos = { x = 0, y = 0 },
    cost = 6,
    unlocked = true,
    discovered = true,
    config = { extra = { max_highlighted = 3, mod_conv = 'm_glass' } },

    loc_vars = function(self, info_queue, card)
        info_queue[#info_queue + 1] = G.P_CENTERS[card.ability.mod_conv]
        return { vars = { card.ability.max_highlighted, localize { type = 'name_text', set = 'Enhanced', key = card.ability.mod_conv } } }
    end,

    use = function(self, card, area, copier)
        if G.GAME.blind.config.blind.key == "silly_boss_tyler" then
            G.E_MANAGER:add_event(Event({
            trigger = 'after',
            delay = 0.4,
            func = function()
                play_sound('timpani')
                SMODS.add_card { key = "j_silly_tylerjok" }
                card:juice_up(0.3, 0.5)
                return true
            end
            }))
            delay(0.6)
        end
    end,

    can_use = function(self, card)
        if G.GAME.blind.config.blind.key == "silly_boss_tyler" then
            return G.jokers and #G.jokers.cards < G.jokers.config.card_limit
        else
            return G.hand and #G.hand.highlighted > 0 and #G.hand.highlighted <= card.ability.max_highlighted
        end
    end
}```
#

would this work then

candid elbow
#

Does this return true

#

Or the position

slim ferry
candid elbow
#

I mean index

slim ferry
#

because itll like

brittle yacht
slim ferry
#

not automatically do the enhancements

candid elbow
#

w<

sturdy compass
sturdy compass
#

u got it

candid elbow
#

Yeyyyy

#

I was doing it in a loop and it didn’t work 😩

sturdy compass
#

It probably broke because without checking its contents with next(), it could be attempting to loop through an empty table

candid elbow
#

Yeah maybe

#

Thanks for the help though

#

:>

sturdy compass
#

Yeah of course

candid elbow
#

Can i check for the length of table ? Instead of next

sturdy compass
#

Yeah you could do that

candid elbow
#

Okay :>

#

Thankies again

sturdy compass
#

yuppers

willow scroll
brittle yacht
#

doesnt work just giving enhancements and doesnt do what its supposed to in the specific boss blind either

red flower
brittle yacht
# brittle yacht
    key = 'tylercon',
    set = 'Tarot',
    loc_txt = {
        name = 'Tyler',
        text = {
            'Enhances up to {C:attention}3{} selected cards into {C:attention}Glass Cards{}'
        }
    },
    atlas = 'tylercon',
    pos = { x = 0, y = 0 },
    cost = 6,
    unlocked = true,
    discovered = true,
    config = { extra = { max_highlighted = 3, mod_conv = 'm_glass' } },

    loc_vars = function(self, info_queue, card)
        info_queue[#info_queue + 1] = G.P_CENTERS[card.ability.extra.mod_conv]
        return { vars = { card.ability.extra.max_highlighted, localize { type = 'name_text', set = 'Enhanced', key = card.ability.extra.mod_conv } } }
    end,

    use = function(self, card, area, copier)
        if G.GAME.blind.config.blind.key == "silly_boss_tyler" then
            G.E_MANAGER:add_event(Event({
            trigger = 'after',
            delay = 0.4,
            func = function()
                play_sound('timpani')
                SMODS.add_card { key = "j_silly_tylerjok" }
                card:juice_up(0.3, 0.5)
                return true
            end
            }))
            delay(0.6)
        end
    end,

    can_use = function(self, card)
        if G.GAME.blind.config.blind.key == "silly_boss_tyler" then
            return G.jokers and #G.jokers.cards < G.jokers.config.card_limit
        else
            return G.hand and #G.hand.highlighted > 0 and #G.hand.highlighted <= card.ability.extra.max_highlighted
        end
    end
}```
slim ferry
#

thats a different card i think

brittle yacht
#

oh it is mb

slim ferry
#

😭

brittle yacht
#

fixed it

slim ferry
#

well first of all youre just missing the code for applying the enhancement

brittle yacht
#

oop

willow scroll
brittle yacht
#

whered it go 😭

#

i just had it 😭

slim ferry
#

oh no

#

bl_

#

so you should have bl_silly_boss_tyler instead in the check

willow scroll
# red flower oh then no idea

do you happen to know if context.check_enhancement is a seperate step in the scoring loop or smth? i tried restricting it to only context.cardrea = G.play but then the quantum enhancement doesnt apply at all

slim ferry
#

well it should work then i think

brittle yacht
# slim ferry well it should work then i think

so like this?

    key = 'tylercon',
    set = 'Tarot',
    loc_txt = {
        name = 'Tyler',
        text = {
            'Enhances up to {C:attention}3{} selected cards into {C:attention}Glass Cards{}'
        }
    },
    atlas = 'tylercon',
    pos = { x = 0, y = 0 },
    cost = 6,
    unlocked = true,
    discovered = true,
    config = { extra = { max_highlighted = 3, mod_conv = 'm_glass' } },

    loc_vars = function(self, info_queue, card)
        info_queue[#info_queue + 1] = G.P_CENTERS[card.ability.extra.mod_conv]
        return { vars = { card.ability.extra.max_highlighted, localize { type = 'name_text', set = 'Enhanced', key = card.ability.extra.mod_conv } } }
    end,

    use = function(self, card, area, copier)
        if G.GAME.blind.config.blind.key == "bl_silly_boss_tyler" then
            G.E_MANAGER:add_event(Event({
            trigger = 'after',
            delay = 0.4,
            func = function()
                play_sound('timpani')
                SMODS.add_card { key = "j_silly_tylerjok" }
                card:juice_up(0.3, 0.5)
                return true
            end
            }))
            delay(0.6)

        else

            G.E_MANAGER:add_event(Event({
            trigger = 'after',
            delay = 0.4,
            func = function()
                play_sound('tarot1')
                card:juice_up(0.3, 0.5)
                return true
            end
            }))
            for i = 1, #G.hand.highlighted do
                local percent = 1.15 - (i - 0.999) / (#G.hand.highlighted - 0.998) * 0.3
                G.E_MANAGER:add_event(Event({
                    trigger = 'after',
                    delay = 0.15,
                    func = function()
                        G.hand.highlighted[i]:flip()
                        play_sound('card1', percent)
                        G.hand.highlighted[i]:juice_up(0.3, 0.3)
                        return true
                    end
                }))
            end
            delay(0.2)
            for i = 1, #G.hand.highlighted do
                G.E_MANAGER:add_event(Event({
                    trigger = 'after',
                    delay = 0.1,
                    func = function()
                        G.hand.highlighted[i]:set_ability(G.P_CENTERS[card.ability.mod_conv])
                        return true
                    end
                }))
            end
            for i = 1, #G.hand.highlighted do
                local percent = 0.85 + (i - 0.999) / (#G.hand.highlighted - 0.998) * 0.3
                G.E_MANAGER:add_event(Event({
                    trigger = 'after',
                    delay = 0.15,
                    func = function()
                        G.hand.highlighted[i]:flip()
                        play_sound('tarot2', percent, 0.6)
                        G.hand.highlighted[i]:juice_up(0.3, 0.3)
                        return true
                    end
                }))
            end
            G.E_MANAGER:add_event(Event({
                trigger = 'after',
                delay = 0.2,
                func = function()
                    G.hand:unhighlight_all()
                    return true
                end
            }))
            delay(0.5)
        end
    end,

    can_use = function(self, card)
        if G.GAME.blind.config.blind.key == "bl_silly_boss_tyler" then
            return G.jokers and #G.jokers.cards < G.jokers.config.card_limit
        else
            return G.hand and #G.hand.highlighted > 0 and #G.hand.highlighted <= card.ability.extra.max_highlighted
        end
    end
}```
clear ocean
#

Thanks I'll look into it

slim ferry
red flower
brittle yacht
slim ferry
#

does it still crash if you use it in the boss?

brittle yacht
#

let me see

willow scroll
# red flower it's just called every time an enhancement is checked, it only has other_card

also, sorry one final question because this has been bugging me because idk if its a bug or not, could you tell me if setting has_rank to false should disable rendering of card.front like replace_base_card? because having a enahancement with has_rank = false, replace_base_card=false makes the card.front not render when drawn, but does make it render in the deck view

brittle yacht
red flower
brittle yacht
slim ferry
#

what is it

brittle yacht
#

card.ability.extra

#

forgot to do it again

slim ferry
#

😭

#

okay

brittle yacht
#

i think thats the problem at least

#

alright thanks for your help friend

gilded blaze
#

looks cool

#

but I recommend switching to localization file and utilizing loc_vars to change the description during Tyler Boss

lament agate
#

hey huy

#

do you have achievements in your mod?

proven belfry
#

could anyone help me figure out why the stake says "Applies ERROR" at the bottom + how to fix it?

gilded blaze
lament agate
gilded blaze
#

Cryptid isn't that confusing
stuff are categorized using the type field, everything else should belong to their respective object types

slim ferry
#

cryptids code is just really janky in a lot of places so its generally not a good reference imo

gilded blaze
lament agate
#

thanks alot huy

lament agate
#

@gilded blaze are args necessary?

gilded blaze
#

those are for when you call check_for_unlocks

#

you can take a look at vanilla args

#

or make your own

#

but overall unnecessary if you don't want to restrict the achievement in certain actions

lament agate
gilded blaze
#

call check_for_unlocks{type = 'your_type'} where necessary

lament agate
gilded blaze
#

vanilla source code

#

a lot of them are in card.lua

lament agate
#

alright

#

thanks alot

pure salmon
#

wait no i figured it out oops

gilded blaze
#

was it a wrong index spot in loc_vars

pure salmon
#

no i forgot to return vars entirely

#

stupid mistake

gilded blaze
#

ah yes

#

res.vars

#

but you plug a number instead

pure salmon
#

it's been a while since i've made jokers

gilded blaze
#

same

#

||all those Ortalab beta testing halted my progress||

#

glad to join at the right time
I can get both localization and collab to happen at once

clear ocean
gilded blaze
#

Phony

knotty orchid
#

Is there any smods function to add a joker to calculate_dollar_bonus

#

?

clear ocean
knotty orchid
#

didn't know about that function on jokers

#

all good dw

#

Well actually the UI seems to work strange

red flower
#

did you return 0

hallow slate
#

How would I have .toml files only operate with certain mods installed?

knotty orchid
red flower
#

weird

clear ocean
#

@red flower if i do the latter, do i still need to do an if check for every joker?

unkempt thicket
#

How can i mix textures?

clear ocean
wispy falcon
#

Okay, how do I use GLSL for shaders in Balatro?

red flower
hallow slate
wintry solar
wispy falcon
unkempt thicket
#

Specifically the suit/rank texture with its enhancement

wintry solar
clear ocean
red flower
#

yeah you don't need it

clear ocean
#
-- ...
loc_vars = function(self, info_queue, card)
        info_queue[#info_queue + 1] = G.P_CENTERS.m_lucky
        return { vars = { card.ability.extra.repetitions } }
    end,
    joker_display_def = function(JokerDisplay)
        return {
            
        }
    end,
    calculate = function(self, card, context)
-- ...
``` like this?
wintry solar
clear ocean
#

godspeed 🙏

red flower
#

also it's probably better if you post these to the jokerdisplay thread

clear ocean
#

got it i'll keep that in mind

#

i'll show the rest or ask for help in the thread

red flower
#

the 7 is funny

clear ocean
#

i mean it's techincally the truth

#

speaking about adding mod compatibility, are there any other notable mods i should make sure my mod is compatible with

red flower
#

talisman?

wispy falcon
red flower
#

other than that if you add decks cardsleeves is nice

wintry solar
clear ocean
wintry solar
#

It’s not hard

#

Just a pain

clear ocean
#

looking at their github, there doesn't seem to be documention

knotty orchid
#

If I try to dissolve a card from a new area it doesn't seem to work

#

do I have to config something?

clear ocean
#

so basically, when it comes to comparing numbers, to_big is the way

#

G.GAME.current_round.hands_left > 0 to G.GAME.current_round.hands_left > to_big(0)?

#

card.ability.extra.sDiscards > card.ability.extra.lDiscards to card.ability.extra.sDiscards > to_big(card.ability.extra.lDiscards)

red flower
#

not exactly, only when one of the numbers is a bignum

#

you need to convert the one that's not a bignum

#

or like it says in the tip you can just do both

clear ocean
#

what exactly is a bignum?

clear ocean
wispy falcon
#

I can't find the shaders guide... TwT

red flower
#

Talisman converts some game numbers to tables to allow them to go past the naneinf limit, that's a bignum

red flower
wintry solar
#

Which is probably more helpful to you right now

lime lion
#

Hey! Probably a really stupid question, first time attempting to make a mod for this game, and i'm a bit lost
I'm trying to make a custom joker, that, when a hand is played spawns in a second joker, that is also modded. I got the jokers set up, they both appear in the game, and the spawning works fine, when done with a joker already present in the game, like the basic joker; Issue is, when i try to replace the key, for the key of my modded joker, it just crashes the game (with the error, attempt to index local 'center' which is NIL)

Am i missing something? there isn't much docu so i'm not sure

--Works perfectly fine, creates a basic joker
local testJokerBase = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_joker')
testJokerBase:add_to_deck()
G.jokers:emplace(testJokerBase)

--Crashes the game, should add a custom joker that has the key "meow"
local testJokerCustom = create_card('Joker', G.jokers, nil, nil, nil, nil, 'meow')
testJokerCustom:add_to_deck()
G.jokers:emplace(testJokerCustom)
red flower
#

you need j_[your mod's prefix]_[key]
also use SMODS.add_card { key = "j_modprefix_key" } instead of those 3 lines

clear ocean
red flower
#

no idea

lime lion
clear ocean
wintry solar
#

This is why talisman is a bad mod 🙃

vernal path
#

Okay, alive again.
This works now, which is great, but for some reason it pauses for a few seconds after drawing the card.

[[patches]]
[patches.pattern]
target = "functions/state_events.lua"
pattern = "check_for_unlock({type = 'run_card_replays'})"
position = "before"
payload = '''
if SMODS.find_card("j_mode_mystery") then
    draw_card(G.deck, G.play, 100, 'up', nil, pseudorandom_element(G.deck.cards, "mystery_play"))
end
'''
match_indent = true```
#

and then continues scoring like normal, except it much more sped up

willow scroll
#

and it works? somehow??

#

just so i can have no base chips but also show the damn card.front lmfao

willow scroll
#

ok no that change was needed aswell 😭

#

god this is awful

knotty orchid
#
SMODS.PokerHand({
  key = "FullMansion",
  visible = true,
  chips = 220,
  mult = 22,
  l_chips = 40,
  l_mult = 4,
  example = {
    { "S_A", true },
    { "D_A", true },
    { "H_A", true },
    { "S_K", true },
    { "D_K", true },
    { "H_K", true },
  },
  evaluate = function(parts, hand)
    if #parts._3 == 2 then
      return SMODS.merge_lists(parts._3[1], parts._3[2])
    end
    return {}
  end,
  modify_display_text = function(self, cards, scoring_hand)
    return "FullMansion"
  end
}):register()

Any reason this is not working?

frigid birch
#

I have a problem where it tracks the mult, but the mult doesn't score, any way to fix this?

knotty orchid
#

It literally didn't do anything

#

anyway dont worry

spice wadi
knotty orchid
#

I fixed it

frigid birch
spice wadi
knotty orchid
#

Actually

#

It still doesn't work

#

at least now if I select the cards I can play the hand but only one three of a kind scores

frigid birch
knotty orchid
#
evaluate = function(parts, hand)
    if #parts._3 == 2 then
      print(parts._3)
      return parts._3
    end
    return {}
  end,```
spice wadi
#

idk what any of that means tbh

spice wadi
#

use VanillaRemade

frigid birch
#

you got it

willow scroll
#

quantum enhancements why are you like this why are you rendering card.front when it has an edition 😭

maiden phoenix
#

Does anyone know why using DrawStep creates this weird black border? (right card, around the card example area)

#

There's pixel space before someone says that

clear ocean
knotty orchid
#
evaluate = function(parts, hand)
    if #parts._3 == 2 then
      return SMODS.merge_lists(parts._3)
    end
    return {}
  end,```

Why does this only activate the first played card and not the rest?
wispy falcon
#

Is there a way to put a shader on cards when they have a specific Sticker, not an Edition?

frigid cargo
#

How do i destroy a specific joker? Im tryna use a for loop to find the [i] of the joker to be destroyed but i dont know how to destroy it specifically, how do i do that?

rotund sable
red flower
#

SMODS.destroy_cards(G.jokers.cards[i])

rotund sable
#

Or this

knotty orchid
rotund sable
#

Unless it's just the cards in the three of a kind

knotty orchid
#

I mean

#

I want all 6 cards to score (two three of a kind)

#

but all I get with that is the first card scored

rotund sable
spice wadi
#

return parts._all_pairs try that instead of the SMODS.merge_lists thing

rotund sable
#

Did you try printing stuff to the console

knotty orchid
#

Yeah

#

This is what smods.mergelist returns

red flower
#

return { SMODS.merge_lists(parts._3) }

knotty orchid
#

🙁

red flower
#

it expects a table of tables of cards

knotty orchid
#

I was missing the curlys

vernal path
#

n do you know why my patch like pauses before continuing scoring?

red flower
#

no

vernal path
#

argh

vast night
#

Hello there. I've been experiencing a crash with talisman with the variable G.GAME.dollars, where to_big() apparently dosent work and still returns a table. Does anyone know why?

red flower
#

to big makes it into a bignum which it already is

#

you want to_number

#

but what are you trying to do?

rotund sable
#

Or use to_big on the other part of the comparison

vast night
red flower
vast night
# red flower then do this

so i have this for example but it still crashes with talisman. am i understanding something wrongly?

        if context.setting_blind and not context.blueprint and
            to_big(G.GAME.dollars) > 0 then
            ease_dollars(-to_big(G.GAME.dollars))
            return {
                message = "All in!"
            }
        end
red flower
#

you want the 0 to be a bignum

vast night
#

ty

rotund sable
#

I hate talisman so much

#

It's such a pain to add the compatibility for it everywhere

languid sparrow
#

are there any guides or introductions to making your own balatro modding? I've been trying to learn about it by going through the code of some of the mods I downloaded but I'm getting a bit confused 🙈
I'm familiar with lua

wintry solar
#

We can stop the pain of talisman with one simple trick

vernal path
frigid cargo
rotund sable
subtle merlin
#

Quick question: can I make an object type pool of other object types?
-# (accidentally hit send earlier :3)

knotty orchid
#

How does localization work for planets?

slim ferry
#

the same as any other consumable, by name

#

goes into Planets in the localization tab

paper elbow
#

I'm surely doing this wrong, but I'm trying to add suits. I just copied from the Vanilla repo and modified the names to my suits. ( Going to make the art later. ) This does not work.


SMODS.Suit {
    key = 'Acorns',
    card_key = 'A',
    pos = { y = 2 },
    ui_pos = { x = 1, y = 1 },
    keep_base_colours = true,
    hc_colour = HEX('8B4202'),
    hc_colour = HEX('8B4202')
}

So what am I supposed to do? ( I read the SMODS doc concerning suits and ranks and insofar as I am correctly understanding those, this format of object is right, but it's not getting incorporated by the game. )

vernal path
#

well you have 2 definitions for high contrast, and having 2 table entries under the same name doesn't work. One of them probably should be lc_colour

frigid cargo
#
    calculate = function(self, card, context)
        underweardetection = 0 
        for i = 0, #G.jokers.cards do
            if G.jokers.cards[i] == "j_btct_Underwear" then
                underweardetection = underweardetection + 1
            end
        end
        if context.setting_blind and underweardetection < 4 and not context.blueprint then
            if pseudorandom('ShurikenUnderwear') < card.ability.extra.odds / card.ability.extra.oddsoutoff  then
                SMODS.add_card{key = 'j_btct_Underwear', edition = 'e_negative'}
            else
                for i = 0, #G.jokers.cards do
                    if G.jokers.cards[i] == "j_btct_Underwear" then
                        SMODS.destroy_cards(G.jokers.cards[i])
                    else
                        G.E_MANAGER:add_event(Event({
                            trigger = 'after',
                            delay = 0.3,
                            blockable = false,
                            func = function()
                                card:remove()
                                return true
                            end
                        }))
                    end
                end
            end
        else
            for i = 0, #G.jokers.cards do
                if G.jokers.cards[i] == "j_btct_Underwear" then
                    SMODS.destroy_cards(G.jokers.cards[i])
                end
            end
        end
    end
}

why does it just destroy the joker itself instead of the other joker?

paper elbow
#

I fixed that now, thanks. But that doesn't change that the suit changing function doesn't understand what it is.

faint yacht
wintry solar
#

Yes just check for the existence of the sticker in a drawstep

solar eagle
#

context.selling_self doesn't seem to be working for me? i have this check:
if context.selling_card and not context.selling_self and context.card.ability.set == "Joker" then
set up which should trigger if a joker is being sold, except if the joker is itself, but selling_self isn't being set in the context

proven belfry
#

what's the resolution for stake icon size and sticker size

red flower
solar eagle
#

Nice works

#

thanks

#

IT WAS A BUG

#

THANK GOD

unkempt thicket
#

How do i edit the transparency of the sprite a balatro shader is applied too?

short girder
#

Folks, does anyone know how to debuff a specific card in a table? I know I have to iterate through the table and use the value to get the specific card, but I'm unsure on how to apply the debuff only to it

short girder
#

Will try

solar eagle
#

i think i've found an issue with smods probability handling

#

oops all 6's are getting double counted i believe

red flower
red flower
#

it's for back compat

solar eagle
#

Making sure its not some strange handling in my mod code

#

i was doing some shenanigans to get some things to work before

red flower
#

can i see the code

frigid cargo
red flower
#

im assuming youre using G.GAME.probabilities.normal

solar eagle
#

Yes

red flower
#

you shouldnt

solar eagle
#

Glass cards are modded to use a separate numerator though since I need to adjust just their probability

#

(and i can't just use the default smods functions, because the patches to glass card break chance don't include an identifier...)

red flower
#

uhh can you explain what you want to do from the beginning and what the code is?

solar eagle
#

Two separate issues

#
  1. all my existing probability code that used to use pseudorandom("seed") < G.GAME.probabilities.normal / denominator has G.GAME.probabilities.normal be double doubled with an oops - so with one oops, normal is 4 instead of 2, and with two, it's 16 instead of 4
#
  1. previously I added a new base - G.GAME.probabilities.glass, which I adjusted to change the denominator for glass card break chance, and then patched the game to use G.GAME.probabilities.glass instead of G.GAME.probabilities.normal when checking if a glass card was going to break
red flower
#

Ok so 1 doesn't happen to me at all and 2 would be solved by just using the new probability stuff

unkempt thicket
#

Whats the var that checks if high contrast mode is on?

red flower
solar eagle
#

That's the seed

red flower
#

that's also the identifier

solar eagle
#

The identifier is variable 5, which isn't provided

red flower
#

it fallsback to the seed

#

also you could check the trigger object anyway

solar eagle
red flower
#

the double oops is weird tho

solar eagle
#

im making sure there arent old probability patches causing it

#

but they shouldn't be

red flower
solar eagle
#

i'm assuming i should be putting 1 instead of G.GAME.probabilities.normal for the numerator in the smods pseudorandom function calls though

red flower
#

yes

short girder
#

does anyone have a link to the documentation on the new probability functions (assuming they have one)

chrome widget
red flower
clear ocean
#

uh. wait, what actually happens if you remove a mod

red flower
#

it gets removed

#

:3

solar eagle
clear ocean
#

what happens to your profile

#

that is what i am asking sorry for clarifying

solar eagle
#

Stuff added by the mod doesn't show up any more

clear ocean
#

oh

solar eagle
#

If you readd the mod, data will persist

clear ocean
#

oh cool

#

thanks

short girder
#

this dude aint doin no nothin, dont know if i used the new function correctly

red flower
#

press_play and debuff_card dont happen at the same time

clear ocean
#

here's my readme so far!

red flower
#

also debuff card goes through each card already

#

you dont have to add the loop

#

that will make it so theres more probability to debuff everything

solar eagle
#

hmm

#

new probability functions do not adjust UI

#

that's not great

red flower
#

what do you mean

solar eagle
#

the joker in question sets the chance of glass cards to break to 0 in X

wintry solar
#

yes they do

solar eagle
#

however the UI still shows 1 in 4

wintry solar
#

then your code is wrong

red flower
#

it should update it

solar eagle
#

oh i forgot to run the new build.

#

im stupi

#

that's very convenient

wooden nexus
short girder
#

how do i change the recalc_debuff area to be in G.jokers.cards (assuming it's possible)

wind steppe
#
                local atl = G.ASSET_ATLAS['para_paradox_intro']
                local scale = 60
                G.PARA_PARADOX = G.PARA_PARADOX or Sprite(16,12,scale*atl.px/1000,scale*atl.py/1000, atl,{ x = 0, y = 0 })
                G.PARA_PARADOX.T.y = 3
                G.para_paradox_y = 0

why does this do nothing

flint fern
#

i am going to make each enhancement have its own scoring sound
how get scoring card and check enhancement and replace sound

wispy falcon
#

Can someone explain me SMODS.Drawstep? I don't really understand it

primal robin
#

Card have some drawsteps: shadow (self explanatory), back (red deck), center (joker), front (ace of spades)

#

In this drawsteps also applied shaders on specific conditions (for example voucher shader for front is it's voucher)

frigid cargo
#
-- JimathanAnimation
local btct = {ticks = (5)}
local upd = Game.update
local btct_Jimathan_dt = 0
function Game:update(dt)
    upd(self, dt)
    local Jimathanobj = G.P_CENTERS.j_btct_Jimathan
    btct_Jimathan_dt = btct_Jimathan_dt + dt
    if Jimathanobj and btct_Jimathan_dt > 0.1 then
            btct_Jimathan_dt = btct_Jimathan_dt - 0.1
            if Jimathanobj.pos.x > 3 then 
                Jimathanobj.pos.x = 0 
            else
                Jimathanobj.pos.x = Jimathanobj.pos.x + 1
            end
    end
    for k, v in pairs(G.I.CARD) do
        if v.children.joker and v.children.joker.atlas == G.ASSET_ATLAS["btct_JimathanAtlas"] then
            v.children.floating_sprite:set_sprite_pos({x = 0, y = 1})
        end
    end
end

i dont think im doing this right?
im tryna make the soul (not the background) animate, but it just wont. How do i fix this issue?

wispy falcon
snow basin
#

How can I setup a seperate modding folder/instance on MacOS? (I know you can copy & rename exe on windows)

wild escarp
#

Is there a better version of level_up_hand(card, hand)? The animation that it does for levelling up hands, especially multiple, is kind of weird.

short girder
#

getting an error regarding this boss blind and opening up the deck. it debuffs cards normally, but crashes when opening the deck. any ideas?

short girder
wild escarp
real night
faint yacht
wild escarp
wintry solar
#

SMODS.smart_level_up_hand is better to use

short girder
real night
wintry solar
#

no

faint yacht
#

...did you add it before the for loop?

wintry solar
#

SMODS.smart_level_up_hand(card, hand, instant, amount) is the signature

real night
#

what goes where

#

sorry im Shit at this

faint yacht
short girder
#

i did now and it worked okay thanks!!

short girder
#

now for the uhm

real night
#

im like

#

not really sure

wintry solar
#

I'm actually just updating how it works because it's a bit broken sometimes xD

real night
#

???

wild escarp
faint yacht
#

card is the card you'd want to juice up and such.

real night
#

so you just put card

#

damn

#

didn't actually know

real night
#

right

clear ocean
#

joker idea: draws planet card of poker hand if it is the final hand of the round

wintry solar
#

well if you want the animation you dont want it to be instant

wild escarp
faint yacht
clear ocean
# clear ocean joker idea: draws planet card of poker hand if it is the final hand of the round

thinking of having it based of Laika

Laika ( LY-kə; Russian: ЛáĐčĐșа, IPA: [ˈlajkə]; c. 1954 – 3 November 1957) was a Soviet space dog who was one of the first animals in space and the first to orbit the Earth. A stray mongrel from the streets of Moscow, she flew aboard the Sputnik 2 spacecraft, launched into low orbit on 3 November 1957. As the technology to re-enter the...

candid elbow
#

Windows 98 apparently 😭

clear ocean
#

bush hid the facts

faint yacht
#

...that's an XP thing-

candid elbow
clear ocean
#

should i make it negative or not and have the "must have room"

frigid cargo
clear ocean
#

yeah

#

thats what i thought too but just wanted a second opinion

#

not sure if it should be common or uncommon

frigid cargo
#

Uncommon prob
?

#

Im not sure

#

My friend is usually the one with ideas

#

@old epoch get over here

old epoch
#

It appears I have been summoned

#

I think either common or uncommon could work, as this is a blue seal that takes up a joker slot from my understanding

clear ocean
#

yeah basically was thinking like its somewhat similar to the acrobat where its like a close call joker so you can upgrade the poker hand

old epoch
#

Ah, okay

#

I say common if doing no negative, and uncommon if doing negative

clear ocean
#

no negative as i plan to keep it vanilla equse

old epoch
#

Alright, common seems better for it in my opinion in that case

clear ocean
clear ocean
#

already finished with laika now gotta do the art

#

and oh yeah uh not sure if i should make a joker display box for this one

candid elbow
short girder
#

Dusk+blue seal i think

clear ocean
#

dusk/arcobat+blue seal pretty much

short girder
#

Yeah

#

Sounds like a funny idea

#

Very balanced too

candid elbow
#

I don’t see any mult 😭

clear ocean
#

its the final hand part

candid elbow
#

Ohhh

#

Not last hand

#

I get it

clear ocean
candid elbow
#

Great idea ken

#

Btw

#

I love it

clear ocean
#

now im going to try drawing laika

#

still new to pixel art and just drawing animals properally

#

any guides for like front facing dogs/canines

candid elbow
#

Good luck (‱x‱)/

clear ocean
clear ocean
#

the ears kinda scare me

wispy falcon
#

Why does nothing happen when I play cards with this enhancement?

    key = "cracked_stone",
    path = "cracked_stone.png",
    px = 71,
    py = 95
})

SMODS.Enhancement{
    key = "cracked_stone",
    pos = { x = 0, y = 0 },
    config = { x_chips = 1.2 },
    atlas = 'cracked_stone',
    discovered = true,
    unlocked = true,
    replace_base_card = true,
    no_rank = true,
    no_suit = true,
    always_scores = true,

    calculate = function(self, card, context)
        return{
            x_chips = card.ability.x_chips
        }
    end,

    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.xchips }, key = self.key }
    end
}```
faint yacht
#

...remove the calculate bit entirely - x_chips in config should automatically be handled.

#

And your vars is pointing to .xchips, not .x_chips.

clear ocean
#

the ears drooped a bit

wispy falcon
faint yacht
#

Did you spawn fresh ones in?

clear ocean
#

which ear do you prefer

faint yacht
wispy falcon
#

By the way, is there a way to get that enhancement guaranteed on cards for testing?

wispy falcon
daring fern
clear ocean
#

what do you think

wispy falcon
wispy falcon
clear ocean
#

what do you think

wispy falcon
#

Looks really good

modern kindle
#

what da dog doin

clear ocean
#

not the best at pixel art

wispy falcon
#

Actually Balatro-like design

chrome widget
#

When I steal from Vanilla Remade 😈

solar eagle
#

what stores all possible poker hands?

modern kindle
#

When I STEAL 😈

clear ocean
daring fern
modern kindle
#

omg hi smt

clear ocean
chrome widget
#

Unfortunately I need to arbitrarily define places where the game defines a boss by blind.boss and blind:get_type() == 'Boss'

wispy falcon
#

How do I make it, so the Stone Card has a 1 in 4 chance to change into a different enhancement?

chrome widget
#

I use the latter for real bosses, and the former for extra bosses

modern kindle
#

so you just use the latter...?

#

lmao

chrome widget
#

for boss disabling effects like Chicot and Luchador, I use the former, since they can be used to disable extra bosses too

modern kindle
#

gotcha ic

#

i just saw you use latter twice

#

but no former

#

so was like well

chrome widget
#

that's typically called an error

modern kindle
#

prove it in court

sleek cliff
#

Hey paizanos, been a bit since I made a question on here

I'm trying to get this spectral to destroy one random joker from a set and then replace it with a joker from the same set

proven belfry
#

how do i wipe the save for a mod (lock/undiscover everything)

chrome widget
#

ugh I guess I need to use a regex patch

ocean sinew
proven belfry
#

seriously how do I wipe a save for a mod

sleek cliff
candid elbow
#

Inside the event

#

You can find references in any probability joker
Event and adding enhancement is in empress code

#

Vanilla remade

#

For random enhancement

#

Use enhancement poll

wispy falcon
#

You're overloading my brain with that much information at once xD

#

So what does half of this mean?

candid elbow
#

Uhhhhh

#

I don’t know how to explain better

#

😭😭

wispy falcon
#

What and how do I make an event?

daring fern
wispy falcon
candid elbow
#

For _,v in ipairs (G.play) do

#

—add enhancement to v here using enhancement poll

candid elbow
#

That just makes all cards stone

daring fern
candid elbow
#

Why doesn’t it work like G.hand

wispy falcon
candid elbow
#

đŸȘš

daring fern
candid elbow
# wispy falcon My bad

You can find how to use enhancement poll inside certificate code , tho it’s seal poll but they work the same

candid elbow
daring fern
candid elbow
#

Oh thanks

#

So whats inside G.hand ?

#

Other than cards

daring fern
clear ocean
candid elbow
#

Does than include the handsize

#

I assume

daring fern
modern kindle
#

hey smt do you know off the top of your noggin how id prevent the hand from being drawn in specific blind

ie no playing cards present

daring fern
modern kindle
#

perchance, that could work

candid elbow
#

I think you can draw cards elsewhere (off screen )

chrome widget
#

hmm, what is the purpose of the consumable buffer?

#

or buffers for other cardareas?

candid elbow
#

I think so it doesn’t go past the limit

#

If you’re adding multiple cards at a time

#

Like high priestess

#

Idk tho i’m new

short girder
#

i figured out what i wanted

#

sort of

#

still missing one small thing

clear ocean
short girder
#

this is the code currently

#

this code WORKS, it does debuff the jokers

#

but it also debuffs the deck, which i dont want

#

any ideas on how i could make it exclusive?

candid elbow
#

Maybe

#

Idk

short girder
#

nah

#

that completely stops everything from working

wispy falcon
#

Is that right so far?

    key = "cracked_stone",
    pos = { x = 0, y = 0 },
    config = { x_chips = 1.2, extra = { odds = 4 } },
    atlas = 'cracked_stone',
    discovered = true,
    unlocked = true,
    replace_base_card = true,
    no_rank = true,
    no_suit = true,
    always_scores = true,

    loc_vars = function(self, info_queue, card)
        local numerator, denominator = SMODS.get_probability_vars(card, 1, card.ability.extra.odds, 'cracked_stone')
        return { vars = { card.ability.x_chips, numerator, denominator }, key = self.key }
    end,

    calculate = function(self, card, context)
        if context.before and SMODS.pseudorandom_probability(card, 'cracked_stone', 1, card.ability.extra.odds) then
            for _,v in ipairs (G.play.cards) do 
                -- What goes in here now?
            end
        end
    end

}```
short girder
#

what does the cracked stone do

short girder
#

idk man it's really late i just wanna get this fixed

#

@daring fern hi somethingcom can you help me real quick thanks

wispy falcon
short girder
wispy falcon
#

Right now it's on 1.2 but I'm thinking about setting it higher

daring fern
short girder
#

gotcha

wispy falcon
daring fern
wispy falcon
clear ocean
#

i did promise that ash guy i will do this, what do you think would be a good trade off

wispy falcon
clear ocean
#

i was thinking either retriggering every card or do a xmult and or xchip bonus

clear ocean
#

like the evil dead movies he cut off his own hand and switched it for a chainsaw, which did remove daul weilding but a chainsaw (not only is awesome) could help with killing the undead

wispy falcon
# daring fern What is the issue?

Like I want to make it, so that Stone cards have a 1 in 4 chance to turn into a cracked_stone (my enhancement) but don't know how to

clear ocean
#

now the question is

#

how would i be able to do that

#

like is that even possible in smods

wispy falcon
clear ocean
#

i'll do that

#

would that still fit in the vanilla field?

wispy falcon
wispy falcon
clear ocean
#

im trying to keep it like vanilla equse

wispy falcon
#

Vanilla makes color in the description all the times. For discards, hands, hand size etc.

clear ocean
#

no no the concept itself 😅

#

would reducing your poker hand size be considered close to vanilla or not

frigid cargo
#

should be right?

#

seems fine to me imo

clear ocean
#

for the joker size that should probably be easy to do

old epoch
#

reduce hand size or cards selected?

clear ocean
#

cards selected

old epoch
#

ah

clear ocean
#

so without four fingers you can at most play four of a kind or two pair

#

but in some way an additional joker slot might be a worthwhile trade off

frigid cargo
wispy falcon
old epoch
#

i personally wouldn't call that vanilla-like, but that definition changes depending on who you ask. i just say add what you think feels right

frigid cargo
clear ocean
#

i think its fine?

clear ocean
frigid cargo
#

Or wait for someone better at coding than my stupid brain

old epoch
modern kindle
#

thats for playing cards

clear ocean
#

thanks 👍

#

godspeed

modern kindle
#

for hand size itself i do

frigid cargo
#

Hi dilly

modern kindle
#

in extra i have however many cards i want to increase in extra, and then in add and remove from deck increase/decrease

#

so youd do the opposite

clear ocean
#

so just do (1) and (-1)

modern kindle
#
    add_to_deck = function(self, card, from_debuff)
        local extra_cards = math.max(1, math.floor(self.config.extra))
        SMODS.change_play_limit(extra_cards)
        SMODS.change_discard_limit(extra_cards)
        if G.hand and G.hand.change_size then
            G.hand:change_size(extra_cards)
        end
    end,

ie this adds 1 hand size and play and discard limit

modern kindle
#

and for example this is my extra

    config = { extra = 1 },
#

so instead of adding youll be subtracting

clear ocean
#

it works thanks

modern kindle
#

awesome

wild escarp
#

could someone help me with making all suits count as every other suit? This smeared joker code is flying way over my head.

daring fern
wispy falcon
# wispy falcon bump

(I want to make it, so that a Stone Card has a 1 in 4 chance of turning into a Cracked Stone)

clear ocean
#

what do you think of this concept

wispy falcon
red flower
frigid cargo
#

Oh i see thanks

red flower
#

also it's hard to read on mobile but i think your logic is wrong, you're checking if all jokers are the one you want

#

so if any is not the joker will destroy itself

modern kindle
#

N ♡

red flower
#

hi dilly

#

gn dilly

modern kindle
#

Hi

#

Gn

clear ocean
#
-- Pareidolia
SMODS.Joker {
    key = "pareidolia",
    blueprint_compat = false,
    rarity = 2,
    cost = 5,
    pos = { x = 6, y = 3 },
}

local card_is_face_ref = Card.is_face
function Card:is_face(from_boss)
    return card_is_face_ref(self, from_boss) or (self:get_id() and next(SMODS.find_card("j_vremade_pareidolia")))
end
``` this is what the remade looks like for pareidolia
frigid cargo
#

Holy i said that so confusingly

clear ocean
#

is there a way to treat a card or rank as another?

red flower
frigid cargo
clear ocean
#

if you play a two pair (full house) it will treat the lower ranking pair as the higher ranking pair

#

so for example if you played a pair of eights and sixes, it will treat the pair of sixes as a pair of eights allowing you to use something like fibba

red flower
#

it's a bit janky but you can hook get_id

clear ocean
#

it might be out of scope which is okay i got some other ideas

#

i need to get some sleep so sorry if i end it here now tonight

solar eagle
#

what's the recommended way to change the xmult a glass card gives

wild escarp
#

Is there a way to check if a specific joker has been triggered?

solar eagle
#

Do what blueprint or brainstorm do

frosty rampart
#

context.other_joker will be equal to the whole joker card currently triggering when any joker triggers, you can check for if other_joker's key is the joker you're looking for

daring fern
subtle merlin
#

what context would i use for cards other than playing cards getting destroyed?

crystal perch
#

can someone help be figure out why balatro is crashing when i try to use my consumable on the selcted joker? right now i just care about it making a negative copy, the ethereal part doesn't matter

subtle merlin
crystal perch
#

yes i know it's coming from the use function thank you

faint yacht
#

copy_card(G.jokers.highlighted[i])

crystal perch
#

wait i see my mistake

solar eagle
# faint yacht ?

so there isn't a better way than just looping over every existing card to change it

#

is it x_mult or Xmult that matters (or is it both..)

faint yacht
#

Just iterate over the cards and change card.ability.Xmult to a desired value as that's the one displaying the change.

#

I just changed both.

solar eagle
#

so there is not a cleaner way to do it

#

Awesome

subtle merlin
subtle merlin
#

oki, ty!

solar eagle
#

that's exciting!

crystal perch
#

quick ask how do i clear a joker's eternal sticker

manic rune
manic rune
daring fern
sleek cliff
#

those aren't all the jokers in the set, just examples

manic rune
sleek cliff
#

how would I set up the can_use though

faint yacht
manic rune
#

its a function, check SMODS.Consumable

#

if you return true then it will be usable, else not

sleek cliff
#

So just set it
can_use = function(self, card) return true end?

versed swan
#

How do you go about resolving performance issues?

#

i.e. how to get started on such a task

sleek cliff
manic rune
#

even when u start a new run?

#

if so then can i see the code again đŸ€”

sleek cliff
manic rune
#

how hasnt it crashed

sleek cliff
#

beats me

manic rune
#

you are missing a , at the last end of use

sleek cliff
#

Its saying thats an unexpected symbol

manic rune
#

wha

#

how...

sleek cliff
#

Not a clue

manic rune
#

oh wait

#

your can_use is inside use

#

this is why indentation is important chat 3:

sleek cliff
#

Oh yeh

#

Ok, so it works now, but I need it to destroy a joker before adding one

modern kindle
#

Chat, never indent

frigid cargo
manic rune
#

add the "add joker" event in the event that destroys the joker, probably

#

hi dilly

modern kindle
#

Hi bepis

#

My sleep is mad ruined rn

manic rune
#

3:

#

fix it...

modern kindle
#

Sleeping from 5 am to 10 am then napping from 5 pm to like 8pm

manic rune
#

yeah that should work i think

-# fix your indentation pls

sleek cliff
#

-# maybe

manic rune
#

-# tf u mean maybe sob

modern kindle
#

No definitely do

old epoch
modern kindle
#

Vscode has an auto formater

manic rune
#

-# actually i do the exact same thing except for the latter part so

frigid cargo
old epoch
#

then dont reach 20

#

just stop

manic rune
modern kindle
frigid cargo
sleek cliff
#

And it does not destroy one

manic rune
#

oh

#

yeah, it uh, doesnt

#

card here is targeting the consumable

#

if you want it to destroy a random joker you want to find it with pseudorandom_element first

sleek cliff
#

Oki, now how do I do that, and how could I limit them to (currently) 7 jokers

manic rune
#

limit wat tho

sleek cliff
#

The joker selection

frigid cargo
#
SMODS.Rarity {
    key = "Elite",
    default_weight = 0.0067,
    badge_colour = HEX('f59827'),
    get_weight = function(self, weight, object_type)
        return weight
    end,
}

why does it just say error instead of Elite on the joker? (I have the stuff needed in en-us too)

manic rune
#

but also

local pool = {}
for _,v in ipairs(G.jokers.cards) do
   if (a flag or smt to filter out non-doctor who jokers or smt) then
      pool[#pool+1] = v
   end
end

local random_joker = pseudorandom_element(pool, pseudoseed("wa"))
plain apex
#

does anyone know how to change how often showdowns appear?

manic rune
#

im on bus rn so uh, gotta lay low for a bit (i dont want to throw up), sorri

sleek cliff
daring fern
sleek cliff
#

Should I set the flag to like one of the extra configs?

lament agate
#

they answered my prayers

stiff locust
#

how do I get the stats of the top 10 jokers you've used on your profile

modern kindle
gray void
#

Top 1 joker usage: Joker

subtle merlin
#

-# damn it i was hoping to do this hook myself to show i could do it myself
How can i get the key of a non-playing card using self?

subtle merlin
stiff locust
sleek cliff
#

doubt I got this right cause this also didn't work

modern kindle
stiff locust
#

G.PROFILES[G.SETTINGS.profile]['joker_usage'].j_splash is a valid table with count in it, but ``G.PROFILES[G.SETTINGS.profile]['joker_usage'].j_splash.count` isn't working

frigid cargo
stiff locust
#

the count value is the number of rounds completed with the card, which is what I need

#

for splash specifically

modern kindle
#

yea, so usage.wins

stiff locust
#

no not wins

#

the count value

modern kindle
#

the wins are the round value youve won with the card equipped, what are you trying to ask

stiff locust
#

but that's not true

modern kindle
#

i have not won almost 2k games with one card

stiff locust
#

I have won 4.7k rounds with splash

#

the count value says 4.7k and the wins value is far lower

#

i just don't know how to get to count

modern kindle
#

im afraid i dont know what youre asking for still

stat page only shows round wins and thats what i offered but idk anything else youre trying to get

#

the stat page even tells you its total completed rounds

stiff locust
#

yes and I want the value for the total completed rounds

modern kindle
#

so, you want the 2822 here, correct?
for an example of my top joker

stiff locust
#

yes

modern kindle
#

yea, is that not exactly what i said

#

usage

stiff locust
#

I had it print out the table and count is that value

#
 {
  order= 52,
  losses= table: 0x2b645200   {
     [2] = 1,
     [1] = 69,
   },
  riftraft_win_key= 2,
  losses_by_key= table: 0x2b645260   {
     stake_white= 69,
     stake_red= 1,
   },
  count= 4723,
  wins= table: 0x2b6453b0   {
     [1] = 42,
     [2] = 3,
     [3] = 14,
     [4] = 13,
     [5] = 2,
     [7] = 2,
     [8] = 4,
   },
  wins_by_key= table: 0x2b6452c0   {
     stake_green= 14,
     stake_white= 42,
     stake_red= 3,
     stake_gold= 4,
     stake_orange= 2,
     stake_blue= 2,
     stake_black= 13,
   },
}

but when I try to access that value, it returns errors

#

count isn't inside another table so it should just be G.PROFILES[G.SETTINGS.profile]['joker_usage'].j_splash.count