#💻・modding-dev

1 messages · Page 475 of 1

urban wasp
#

don't put a period after brackets

#

so it should be

SMODS.Joker {
    key = "universal_joker",
    config = { extra = { h_mult = 1 } },
    rarity = 2,
    cost = 10,
    blueprint_compat = true,
    eternal_compat = true,
    pos = { x = 1, y = 0 },
    atlas = "placeholders",
    demicoloncompat = true,
    loc_vars = function(self, info_queue, card)
        return {
            vars = {
                number_format(card.ability.extra.h_mult),
            },
        }
    end,
    calculate = function(self, card, context)
        if context.before and context.cardarea == G.play or context.forcetrigger then
            return {
                G.GAME.hands[context.scoring_name]mult = G.GAME.hands[context.scoring_name]mult + card.ability.extra_h_mult
            }
        end
    end,
}
#

actually hold on

#

there's a few things odd here

#

one moment

#

okay @real night what's the intended effect here i'm quite confused

daring fern
#

Firstly, do if context.before or context.forcetrigger then, Secondly, move it out of the return.

urban wasp
#

or something?

daring fern
urban wasp
urban wasp
#

i think that's the example in smods docs/example mod or something

#

unsure

daring fern
urban wasp
#

that's true i mean we don't really know until poker answers

real night
urban wasp
#

alright then

real night
#

im kinda fucky with balatro modding

#

ive never been good with it

urban wasp
#

this is good then

SMODS.Joker {
    key = "universal_joker",
    config = { extra = { h_mult = 1 } },
    rarity = 2,
    cost = 10,
    blueprint_compat = true,
    eternal_compat = true,
    pos = { x = 1, y = 0 },
    atlas = "placeholders",
    demicoloncompat = true,
    loc_vars = function(self, info_queue, card)
        return { vars = { number_format(card.ability.extra.h_mult) } }
    end,
    calculate = function(self, card, context)
        if (context.before) or context.forcetrigger then
            G.GAME.hands[context.scoring_name].mult = G.GAME.hands[context.scoring_name].mult + card.ability.extra.h_mult
        end
    end
}
tranquil axle
#

question how do I use debug plus to give myself my custom spectral card to test?

urban wasp
#

hover over the card you want and click ctrl+3

#

or ctrl+c

daring fern
tranquil axle
#

oooh ty

urban wasp
#

i disabled that, but that's the default afaik

tranquil axle
#

pressing 3 for me worked

#

latest version

urban wasp
#

last time i updated, ctrl + 3 was the default configuration

tranquil axle
#

this is wrong but I might just leave it like this because it's funny

urban wasp
#

odd

daring fern
urban wasp
#

i swear

tranquil axle
#

hey question before this gets heated how do I tell balatro when I want my spectral card to be used?

#

which is whenever there's dealt cards

#

end result is create 1 copy of each card in hand

urban wasp
#

here i'll give an example

tranquil axle
#

ty

#

I started balatro modding all of 1 hour ago

urban wasp
#

for example, this just checks if you have enough joker slots for an item

can_use = function(self, card)
    return G.jokers and #G.jokers.cards < G.jokers.config.card_limit
end,
#

not entirely sure how it works but uhh it works

idle plaza
urban wasp
#

what did you want in specific though

urban wasp
#

when do you want it to not be able to be used

#

when there's no cards in hand?

tranquil axle
#

well it should just be able to be used whenever there's cards to duplicate

urban wasp
#

i'm having trouble thinking of a situation where that's not applicable to be honest

tranquil axle
#

like in the shop

#

or selecting a blind

#

no cards there

urban wasp
#

oh yeah that's fair

tranquil axle
#

okay I can now use it

#

but the code chatgpt gave me to duplicate the hand doesn't work (no shocker there)

daring fern
urban wasp
#

i didn't know it was so long ago 😭

tranquil axle
#
use = function(self, card, area)
        for i = 1, #G.hand.cards do
            G.E_MANAGER:add_event(Event({
                func = function()
                    copy_card(chosen_card, G.hand.cards[i])
                    return true
                end
            }))
        end
    end

okay got this, but that's cryptid replica code

frozen smelt
#

is there any sample code that includes probabilities?

tranquil axle
#

how do I simply duplicate the card?

tranquil axle
#

ooooohhh yeah ty

hidden sable
#

thought of an idea for a mod i could make that will be my first non base game mod: challenge blinds, every big blind will have an optional challenge blind which is basically a buffed up boss blind that if you beat you get crazy money but if you lose it basically just sends you to the regular boss blind with no cash, like skipping the blind but no tag

frozen smelt
tranquil axle
#

if you loose it should end run

#

*lose

idle plaza
#

Agreed. It'd be odd for the optional super-challenge to be less punishing than the normal Blind.

tranquil axle
#

okay with my 5 minutes of lua knowledge I have hopefully cobbled together some working code

#

it crashes again dangit

idle plaza
#

What's the current code and error?

tranquil axle
#

I think I got it

#

oh the error is extra in card.ability.extra.cards is nil

#
SMODS.Spectral {
    name = "shen-duplicate",
    key = "duplicate",
    pos = {
        x = 0,
        y = 1
    },
    cost = 10,
    atlas = "shen",
    can_use = function(self, card)
        return G.hand and #G.hand.cards > 0
    end,
    use = function(self, card, area)
        for i = 1, #G.hand.cards do
            G.E_MANAGER:add_event(Event({
                func = function()
                    local _first_dissolve = nil
                    local new_cards = {}
                    for i = 1, card.ability.extra.cards do
                        G.playing_card = (G.playing_card and G.playing_card + 1) or 1
                        local _card = copy_card(G.hand.cards[i], nil, nil, G.playing_card)
                        _card:add_to_deck()
                        G.deck.config.card_limit = G.deck.config.card_limit + 1
                        table.insert(G.playing_cards, _card)
                        G.hand:emplace(_card)
                        _card:start_materialize(nil, _first_dissolve)
                        _first_dissolve = true
                        new_cards[#new_cards + 1] = _card
                    end
                    SMODS.calculate_context({
                        playing_card_added = true,
                        cards = new_cards
                    })
                    return true
                end
            }))
        end
    end
}
#

oh wait that's easy

#

don't need that line

#

because it should only make 1 copy not x

idle plaza
#

Yep

tranquil axle
#

IT WORKS

frozen smelt
#

can someone help and explain what pseudorandom ness means in the context of some vanilla card

tranquil axle
#

yeeeeeehawww

frozen smelt
#

pseudorandom('vremade_gros_michel') for example

#

why does it have a string in it

#

and can that be called anything?

tranquil axle
#

with 4 runs of this card I now have this

idle plaza
# frozen smelt and can that be called anything?

I don't know the exact reason, but it's presumably just some factor in whatever wacky math it uses to do randomness. The String can indeed be anything, pretty much all of my pseudorandom strings are just character quotes.

tranquil axle
#

this is the worst I've ever broken the game

#

time to play this disaster

frozen smelt
#

its not based on anything specific?

#

is it just to use as reference

tranquil axle
#

oh wait this with perkeo......

#

welp I never said it would be balanced

#

okay question do I need to do anything else to make sure the spectral card appears in shop/packs or is it fine already?

tranquil axle
#

a riff-raff just made another riff-raff didn't know that was possible

hidden sable
#

or at least how to apply them

idle plaza
# frozen smelt so its just like giving the randomness a name

Not just a name. Rather, each character in the provided string is turned into a byte and filtered through math equations to create random outputs. (I just checked the code to be sure.)

The only exception is, if you just use 'seed', it'll use math.random() to create a random seed.

hidden sable
#

riff raff is uncommon right

frozen smelt
tranquil axle
#

no it's common

tranquil axle
#

just thought it would be an exception

frozen smelt
#

okay good

#

thank you

hidden sable
tranquil axle
#

uh in debug plus mod what keybind is it to delete a playing card in hand?

tranquil axle
#

went a little too overboard on my spectral card

hidden sable
#

R

#

R

#

R

#

R

#

mb gang

tranquil axle
#

neither works

#

its ctrl+t

#

no it's ctrl+r

#

100%

idle plaza
frozen smelt
#

i have a question and its oddly specific but it bugs me

tranquil axle
#

well I just spammed ctrl+r, and... good-bye save I didn't need you

#

that wasn't my run for the past 2 days

daring fern
tranquil axle
#

yup it's 100% gone

#

great

hidden sable
frozen smelt
#

say i was playing the crypid mods and my card's value was changed, it's description mentioned it being able to retrigger card "1 additional time", it the 1 were to change to a 2, i'm assuming it would then say "2 additional time" (not plural)

#

is that avoidable

#

very specific but just wondering

daring fern
#

Cryptid has a function for that.

frozen smelt
#

thats awesome

#

thank you

hidden sable
daring fern
hidden sable
#

only dissolve

daring fern
hidden sable
daring fern
hidden sable
#

what does it do

daring fern
#

It's used for booster packs.

hidden sable
idle plaza
#

Presumably it's for the opening animation.

frozen smelt
#

if i put pseudorandom('dl_sticky_odds') < G.GAME.probabilities.normal / card.ability.extra.odds would that work without having anything else?

#

because my probability code isn't working

#

hard to explain hold on

#
        if context.individual and context.cardarea == G.play and pseudorandom('dl_sticky_odds') < G.GAME.probabilities.normal / card.ability.extra.odds and context.repetition and context.cardarea == G.play then
            return { repetitions = 1 }
        end
    end,```
#

here

#

why wouldn't this work?

#

wait i might know this one

idle plaza
#

context.repetition doesn't need it.

frozen smelt
#

alright

#

i thought the issue was how i was calling everything at the same time as the probability check

#

might be easier to do the probability check then follow with everything else?

hidden sable
frozen smelt
#

just realising how much i did wrong

#

doing too much bruh

idle plaza
frozen smelt
#

i wrote cardarea twice

#

i need sleep bro

frozen smelt
#

well when it does release

daring fern
frozen smelt
#

true

frozen smelt
#

like steels

daring fern
frozen smelt
#

alright i'll test it out

#

would that not also affect jokers?

digital niche
#

anyone here that knows lua in general, where in balatro code or SMODS is the code that makes for example "{C:green}" work?

daring fern
digital niche
daring fern
digital niche
#

tyty

#

this is just the different colour you can use, no?

frozen smelt
#

in the context of wording, do scoring cards include steel cards for example

#

and played being the ones you take out of your hand

#

played also counting as scoring cards ofc

digital niche
#

i meant like, the {C:} and {X:} part isnt a lua thing, i meant where in the code it is set to work so it gives the colour to your text if it have the {C:} thing

idle plaza
digital niche
frozen smelt
#

how would i word it so it has a chance to retrigger played cards and card in hand?

#

is there not one word for both

daring fern
frozen smelt
#

would any card also work

#

retrigger any card 1 additional time

daring fern
idle plaza
#

Jokers and Consumables are cards too.

frozen smelt
#

oh yeah

#

i think specifying both would make more sense

frozen smelt
#

i don't know any vanilla card that uses the term playing cards in a reference like this

#

or modded even

#

(iirc)

daring fern
#

No.

frozen smelt
#

i'll just take your word for it, it makes sense i just haven't heard it used before

paper zealot
digital niche
#

i mean like, yk how you can use {C:attention} to make a text that yellow-orange colour? it isnt native from lua script, so somewhere in the code it is set that using it will give the colour to your text, i wanted to know where this is set

vague crest
#

where would i find where balatro actually adds these?

#

looking to create a few simple custom rules but idk what the formatting is

daring fern
sage crater
paper zealot
# digital niche i mean like, yk how you can use {C:attention} to make a text that yellow-orange ...

That's not really any more clear, but it definitely is in the lua. It's a fairly convoluted system - loc_parse_string breaks down the input strings into part tables based on the presence of { and } characters, then localize does further processing based on what those parts contain. If you search for part.control.C in misc_functions.lua you'll find what happens to any input text that contains a colour modifier like {C:attention}

frozen smelt
hidden sable
#
{
    vec2 uv = fragCoord / iResolution.xy;
    vec3 bg = texture(iChannel0, uv).rgb;

    float speed = 0.0059;
    float t = clamp(iTime * speed, 0.0, 1.0);

    float borderPx = 0.5;
    float thickness = borderPx / iResolution.y;

    float freq = 50.0;
    float flash = (sin(iTime * freq) * 0.025) + 0.5;

    vec3 col = bg;

    float borderPos = 1.0 - t;
    if (uv.y > borderPos) {
        float darkR = 1.0;
        float brightR = 0.9;
        col.r = mix(darkR, brightR, flash);
        col.g = bg.g * (1.0 - flash * 0.8);
        col.b = bg.b * (1.0 - flash * 0.8);
    }

    if (uv.y < borderPos + thickness && uv.y > borderPos - thickness) {
        col = vec3(1.0);
    }

    fragColor = vec4(col, 1.0);
}```
#

i dont know balal shaders

#

idk how to convert

digital niche
paper zealot
digital niche
hidden sable
#

i dont knwo what im doing 😭

paper zealot
digital niche
#

yeah but i just asked here because here people would probably know about balatro codes so i could ask where they do that stuff, otherwise i wouldnt ask here

paper zealot
#

The question is fine, it just needed more context 🙂

hidden sable
#

please i need shader help here i have no clue what im doing

sage crater
hidden sable
#

no SMODS.Shader??

#

😭

#

i really am alone

daring fern
serene granite
#

is there a vanilla remade for the booster packs? i cant seem to find it

serene granite
#

thankss

hidden sable
#

im tryna make an overlay

#

like the crt effect

#

this is what i tried

#

didnt work

#

as expected

daring fern
#

Did you not see the link?

hidden sable
#

oh mb gang

#

so how would i load it as an overlay

#

does it automatically load into G.SHADERS

#

😭

#

so sad

#

how can i

#

how can i do the thing

#

how can i get an smods reference to my shader

frozen smelt
#

how would i program a joker that gives mult if you've only played spades or/and clubs

hidden sable
#

something i can plug here

frozen smelt
#

kinda like blackboard

#

except played cards

daring fern
frozen smelt
#

im looking at it now

hidden sable
#

the vremade in question

frozen smelt
#

thank you

hidden sable
#

we love smods

frozen smelt
hidden sable
#

only shows if im holding the winodw

thorn furnace
#

What function causes this to get rendered

hidden sable
#

BRO THIS IS CONSISTENLY HAPPENING

#

LIKE IN A ROW

urban wasp
#

oops what

hidden sable
urban wasp
frozen smelt
#

not sure at all, i know cryptid jokers include something like that if you roumage around

daring fern
frozen smelt
#

yeah

#

also whats going on why isn't my sprite loading here

#

everything is identical to the others

hidden sable
urban wasp
urban wasp
frozen smelt
urban wasp
#

yea

hidden sable
frozen smelt
#

sizes are in the right places

#

142 x 190 in 2x

#

71 x 95 in 1x

#

anything out of the ordinary here?

#

WAIT

#

pos is off

urban wasp
#

yeah

frozen smelt
#

my bad guys

hidden sable
#

how dare you

#

that's it i'm finding your house

frozen smelt
#

please i need company

#

this is driving me insane

urban wasp
# daring fern Couldn't you use `Cryptid`s function for that?

nah it just never destroys itself

SMODS.Joker {
    key = "evil_riff_raff",
    name = "EVIL Riff-Raff",
    config = { extra = { cards = 2 } },
    rarity = "crp_abysmal",
    atlas = "crp_placeholder",
    pos = { x = 0, y = 0 },
    cost = 0,
    blueprint_compat = true,
    demicoloncompat = true,
    loc_vars = function(self, info_queue, card)
        return { vars = { lenient_bignum(card.ability.extra.cards) } }
    end,
    calculate = function(self, card, context)
        if context.setting_blind or context.forcetrigger then
            for i = 1, card.ability.extra.cards do
                if #G.jokers.cards < G.jokers.config.card_limit or context.forcetrigger then
                    SMODS.add_card({ set = "Joker", rarity = "cry_cursed" })
                end
            end
        end
        if #Cryptid.advanced_find_joker(nil, "cry_cursed", nil, nil, true) >= 10 then
            if not G.jokers.cards[i] == card and not G.jokers.cards[i].ability.eternal then
                G.jokers.cards[i]:start_dissolve()
                G.jokers.cards[i]:remove_from_deck()
            end
        end
    end,
    crp_credits = {
        idea = { "wilfredlam0418" },
        code = { "wilfredlam0418" }
    }
}
frozen smelt
#

how would you word an if statement to say "if all the scoring cards are clubs or spades"

urban wasp
#

or just
if all scored cards are spades and clubs

frozen smelt
#

how would a caveman put that in code

daring fern
urban wasp
#

ah right

hidden sable
#

AAAAAAAAA

urban wasp
#
SMODS.Joker {
    key = "evil_riff_raff",
    name = "EVIL Riff-Raff",
    config = { extra = { cards = 2 } },
    rarity = "crp_abysmal",
    atlas = "crp_placeholder",
    pos = { x = 0, y = 0 },
    cost = 0,
    blueprint_compat = true,
    demicoloncompat = true,
    loc_vars = function(self, info_queue, card)
        return { vars = { lenient_bignum(card.ability.extra.cards) } }
    end,
    calculate = function(self, card, context)
        if context.setting_blind or context.forcetrigger then
            for i = 1, card.ability.extra.cards do
                if #G.jokers.cards < G.jokers.config.card_limit or context.forcetrigger then
                    SMODS.add_card({ set = "Joker", rarity = "cry_cursed" })
                end
            end
        end
        if #Cryptid.advanced_find_joker(nil, "cry_cursed", nil, nil, true) >= 10 then
            card:start_dissolve()
            card:remove_from_deck()
        end
    end,
    crp_credits = {
        idea = { "wilfredlam0418" },
        code = { "wilfredlam0418" }
    }
}
serene granite
#

hey its my first time working with creating a voucher and i have an idea but im kind of struggling to find out how to impliment it

can someone push me in the right direction with some advice?

i want my voucher to make a specific consumable card spawn in your consumable slots, kind of like how hallucination works, when opening a specific booster pack type

does anyone know what that would look like or what i need to make it work, do i need to define the objectype?

daring fern
serene granite
#

but wouldnt that happen for every booster pack?

urban wasp
#

clutch

#

so this just hard-crashes the game now though

...
        if #Cryptid.advanced_find_joker(nil, "cry_cursed", nil, nil, true) >= 10 then
            card:start_dissolve()
            card:remove_from_deck()
        end
...
frozen smelt
#

if i use joker.card[joker.cards.size] would that be the last joker

#

that you have

#

out of all the ones you have

daring fern
serene granite
daring fern
frozen smelt
daring fern
serene granite
#

oh i never gave my booster pack a kind

urban wasp
daring fern
urban wasp
#

so just

...
    update = function(self, card)
        if #Cryptid.advanced_find_joker(nil, "cry_cursed", nil, nil, true) >= 10 then
            card:start_dissolve()
            card:remove_from_deck()
        end
    end,
...
serene granite
#

ok thanks for the help ima try to make it work

urban wasp
serene granite
#

it keeps saying attempt to index local center, nil value error, and im not sure why

#

hmmmm

#

more testing needed

hybrid shadow
#

is it possible for a consumable to have a calculate function instead of a use function

hybrid shadow
#

is there anything special i need to do or will it be okay just being formatted like that

daring fern
hybrid shadow
#

do the arguments stay the same? also side question but can they use context.joker_main

chrome widget
#

Yes

hybrid shadow
#

alr cool, coding this should be interesting then

serene granite
#

😭 this isnt working still im not sure what to do to make this work

#

it keeps saying the "center" of the consumable isnt being found correctly

#

is there a reason for this?

chrome widget
#

I'd need to see your code

thorn furnace
serene granite
#
    key = 'Chum',
    atlas = 'Extra',
    pos = { x = 2, y = 1 },

    loc_txt = {
        name = 'Chum',
        text = {
            "Opening a {C:attention}Go Fish{} pack",
            "adds a {C:attention}Bait{} consumable"
        }
    },

    calculate = function(self, card, context)
        if context.open_booster
            and context.card
            and context.card.config
            and context.card.config.center
            and context.card.config.center.kind == "Go Fish"
            and #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit then
            G.E_MANAGER:add_event(Event({
                trigger = 'after',
                delay = 0.0,
                func = function()
                    local bait_center = SMODS.find_center and SMODS.find_center('FishingRodConsumableType', 'c_AC_bait')
                    if bait_center then
                        local bait = create_card(bait_center)
                        bait:start_materialize()
                        G.consumeables:emplace_card(bait)
                 end
                    return true
                end
            }))

            return {

            }
        end
    end
}

#

ill delete after cuz its big

daring fern
serene granite
#

omg i knew it, i thought i was going crazy omg 😭 thanks

daring fern
#

Why didn't you use the code I gave you?

serene granite
#

i tried but it didnt work so i tried different approaches but it didnt work

daring fern
serene granite
#

but how to i get a specific card from that set, thats kind of my problem

daring fern
median veldt
#

the fact that it's written consumeables pisses me off so bad

#

and they cant fix it cuz that'd probably break like every mod ever

stiff quiver
#

is emult (^x) something that comes by default in smods?

rotund sable
serene granite
#

i finally got it to work thanks everyone !

sturdy compass
#

Was messing around with the new Probability stuff and came up with a method for tracking success and failure of probability checks. There might be a few weird timings with stuff like lucky cards but it works pretty well 👀

serene granite
#

does anyone have an example of a custom deck that changes the shops to only have jokers of a specific rarity, like the shop is full of rare jokers only ? if not does anyone have an idea of how that would look like

median veldt
#

will anything break if I make the key of my atlas just "Jokers"

median veldt
#

sweet

sturdy compass
#

All atlases you create are internally flagged as created by your mod so no need to worry about that Moneyup

pale holly
#

Hey so my joker has a little issue, it does work as intended but for the score requirement reduction, it still shows the base score, is there any way to fix that ?

    key = "sleepysybil",
        loc_txt= {
        name = 'Sleepytime',
        text = { "{C:attention}Halves{} the current blind's score requirement",
        "after {C:attention}#2#{} rounds",
        "{C:inactive}(Currently #1#/#2# rounds)"
        }
    },
    --atlas = 'Maidenregalia',
    pos = { x = 0, y = 0 },
    rarity = 2,
    cost = 5,
    pools = {["pseudoregamod"] = true},
    
    unlocked = true,
    discovered = false,
    blueprint_compat = false,
    eternal_compat = true,
    perishable_compat = true,
    
        config = { extra = { current_round = 0, total_rounds = 3, round_max = 8 } },
        loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.current_round, card.ability.extra.total_rounds,card.ability.extra.round_max } }
    end,

    calculate = function(self, card, context)
    
    if context.setting_blind then
    if card.ability.extra.current_round == card.ability.extra.total_rounds then
    G.GAME.blind.chips = G.GAME.blind.chips/2
    return {
    message = "Well rested !"
    }
    end
    end
    
if context.end_of_round and context.game_over == false and not context.blueprint then
if card.ability.extra.current_round == card.ability.extra.total_rounds and card.ability.extra.total_rounds ~= card.ability.extra.round_max then

        card.ability.extra.current_round = 0
        card.ability.extra.total_rounds = card.ability.extra.total_rounds + 1
    return {
        message = localize('k_reset') .. "..?"
    }

    elseif card.ability.extra.total_rounds == card.ability.extra.round_max then
        card.ability.extra.current_round = 0
        return {
            message = localize('k_reset')
        }

    else
        card.ability.extra.current_round = card.ability.extra.current_round + 1
    end
end
end
}```
#

For exemple if the base score requirement is 200, the ui will still show 200 even if it'll be actually 100

hidden sable
#

that's gonna take work to make happen, i would make it so when the blind is being set, do the halving

pale holly
#

it's already the case if context.setting_blind

daring fern
modern kindle
chrome widget
#

Ghchdhdhdhff

pale holly
chrome widget
#

I'm working more on Blinds (since I've added some new ones), and I've outlined almost all challenges I want for my mod

#

Still trying to work out the achievements which is mostly just flavor stuff. I want them to be different ranks but I'm having trouble coming up with suitably JoJoy achievement levels aside from that the highest level is "Heritage"

feral tree
#

Do you need a 2x for boss blind images?

chrome widget
#

Yes

median veldt
#

I'm a little confused about making a Rarity, how do I make a Joker rarity that doesn't appear in shops

daring fern
sturdy compass
median veldt
#

so like

#
SMODS.Rarity {
    key = 'cure',
    default_weight = 0.0
}
sturdy compass
#

yeah lol

median veldt
#

sweet

#

Also where does it go in the localisation table

#

considering the other rarities are under like
k_rare for example
would it be k_cure

#

Or my mod prefix somewhere

sturdy compass
#

I think the former is correct?

#

Try it and see what happens lol

median veldt
#

Also how do I give a joker that rank, do I just use its key

daring fern
median veldt
#

Yes I do lmao

daring fern
chrome widget
hidden sable
#

wawa cat?

median veldt
#

no

hidden sable
#

aw

median veldt
#

no matter what the rarity is

hidden sable
#

the solution is simple

#

idk it tho

median veldt
#

also how do i move my mod to the top of the list in the mod menu how are they ordered

median veldt
hidden sable
median veldt
teal ferry
#

thanks. i made a post

#

let me delete the message

median veldt
chrome widget
hidden sable
#

most mod managers do this

#

like mc resource pack

median veldt
#

see what i mean

daring fern
median veldt
#

Oh

#

That makes more sense okay

#

Can you help me fix the actual issue I'm having

#

Okay so it appears in the Collection and stuff if I don't have them in seperate Lua files loaded with assert(SMODS.load_file())

hidden sable
#

he can't keep getting away with this

median veldt
#

GRAAH why does this happen

#

I'm going to be adding a lot of jokers I can't have them all in one file

median veldt
#

Oh I'm. okay
I forgot to add an extra ()

#
assert(SMODS.load_file("test.lua")) -- bad
assert(SMODS.load_file("test.lua"))() -- good
vast night
#

another bump

please

median veldt
# hidden sable more detail

the joker wasn't showing up in the collection unless I put them all in the same file but that was because I was loading them wrong

gaunt thistle
gaunt thistle
#

for future reference this was the first result when I googled "read from file love2d" :p

hidden sable
hexed stump
#

Is there an easy way to exclude a consumable from the shop but not packs? I know in theory I could do it by feeding the pack a table of all the consumables of that kind, but there’s gotta be a better way

hollow crest
#

guys how do I listen for ingame events like when there's a new round

daring fern
hidden sable
#

unless you mean globally

#

in that case hook a context

hollow crest
hidden sable
hollow crest
hexed stump
# hidden sable soul maybe?

The slight problem here is that there’s 24 id want to exclude from the shop, and probably about 6-7 that I want in it

daring fern
hexed stump
#

Making ~30 total

hollow crest
hidden sable
#

or anything

hollow crest
#

nope

hidden sable
hollow crest
#

I wanna do it globally

hidden sable
#

@daring fern oh mr poly bridge

daring fern
hidden sable
#

teach them hooks

hexed stump
# hidden sable make them all soil

That doesn’t quite work if I want the whole set to appear in packs by default though does it? As soul replaces what originally would spawn I though

frozen smelt
#

whats the code to activate at the end of the round before you get interest

hollow crest
#

alright thanks

daring fern
frozen smelt
#

what is main.eval?

hexed stump
#

¯_(ツ)_/¯

#

I’ll see if I can’t fuck around with pools tomorrow

#

As that might be the solution

hollow crest
wintry solar
hollow crest
wintry solar
#

Are you familiar with lovely patches?

daring fern
hollow crest
frozen smelt
#

anyone know why my joker that should have art is a default joker card

#

this doesn't look like a penny to me

hidden sable
frozen smelt
#

you have it

#

i think

hidden sable
frozen smelt
#

is there a way to make custom sounds for cards

#

or is that far too complex

hidden sable
#

wdym

#

there's play_sound

frozen smelt
#

does it replace the sound?

hidden sable
#

oh

#

when you return your values

#

supply sound

frozen smelt
#

i see

hidden sable
#

but it has to have a custom message

#

ask steven mods why they made it like that

median veldt
#
SMODS.ConsumableType {
    key = 'Spell',
    loc_txt = {
         name = 'Spell', -- used on card type badges
         collection = 'Spells', -- label for the button to access the collection
         undiscovered = { -- description for undiscovered cards in the collection
             name = 'Not Discovered',
             text = { 'Purchase or use',
                     'this card in an',
                     'unseeded run to',
                     'learn what it does' },
         },
     },
    primary_colour = HEX('8f82d1'),
    secondary_colour = HEX('8f82d1')
}

I'm trying to move the loc_txt to a localization file
where on earth do i put the stuff
and where do i put descriptions for the cards under this type
mod prefix is shark

median veldt
#

??

hidden sable
#

i'm fuck

gaunt thistle
#

keep the shitposting in the chat channel haha

hidden sable
frozen smelt
#

does xmult_minus do anything at all

hidden sable
#

what

#

what is xmult minus

frozen smelt
#

oh yeah i forgot

#

based off of samplejimbos

hidden sable
#

🧮

frozen smelt
#

that'd be why

hidden sable
#

what is samplejimbos??

#

my humble nubby word you aren't making any sense!!!

modern kindle
#

Definitely do not use samplejimbos

hidden sable
#

actually wait it could be from the fact i haven't slept yet

frozen smelt
#

nubby?

hidden sable
#

yeah that's prolly it mb gang keep posting things i sssume to be true

#

and use vremade

modern kindle
#

The goat to use is remade yea

frozen smelt
#

nubby factoy

#

how is it 9am

#

for mne

hidden sable
#

pinning that on my wall of wall

median veldt
#

this is 1:1 the same code as vremade but with Tarot replaced with Spell

hidden sable
#

where the _1

median veldt
#

clearly not necessary

hidden sable
median veldt
#

why does that work?????????

hidden sable
#

did it work?

median veldt
#

Yes

median veldt
hidden sable
#

adding the _1 worked?

median veldt
#

yes.

#

i just Said that

hidden sable
#

sir rt just verifying

median veldt
#

ok

#

but like

hidden sable
#

because i'm about to summon the wizard

royal ridge
median veldt
#

sigh

#

thank you

hidden sable
# royal ridge

thank god you came in clutch i was just about to summon the wizard

royal ridge
#

what wizard

frozen smelt
#
        if context.end_of_round and context.main_eval and not context.blueprint then
            xmult = card.ability.extra.xmult_minus - card.ability.extra.xmult_minus_mod
        end```
#

i'm tired and stupid so

hidden sable
lament agate
#

is context.other_card a thing

frozen smelt
#

what did i do wrong

daring fern
hidden sable
#

it's impossible to be tired when there's work to do

frozen smelt
#

no like i am so tired and being tired makes me that way

hidden sable
#

stupid yes

frozen smelt
#

ah i see

#

thank you RatMilk balatro

hidden sable
#

what's the goal here

#

start goalposting

#

🥅

frozen smelt
lament agate
# daring fern Yes.

i was looking at Extra Credit for a joker that counts all played cards as Lucky Card if it has 7, but i dont think this is how it looks?

frozen smelt
#

NO

#

I WAS HERE FIRST

lament agate
daring fern
frozen smelt
#

wouldn't you just do if its high card then 2x

lament agate
hidden sable
royal ridge
#

it doesn't exist

daring fern
#

Then it wouldn't break also it wouldn't count for glass joker and similar.

hidden sable
frozen smelt
#

its x_mult

#

not xmult

#

right

daring fern
hidden sable
royal ridge
#

??

lament agate
hidden sable
#

no return need return go hot eat the food

daring fern
frozen smelt
#

relax

hidden sable
lament agate
hidden sable
royal ridge
#

you don't even need return

#

you're not returning anything if you're resetting xmult

hidden sable
royal ridge
#

except for maybe a message

daring fern
royal ridge
#

you need to target something

#

like card.ability.extra.xmult

#

or whatever the xmult value actually is

frozen smelt
#

is it not x_mult as well

royal ridge
#

what

#

it's whatever the joker is

frozen smelt
#

its x_mult

#

not xmult

royal ridge
#

what does the config look like

median veldt
frozen smelt
#

no i mean

#

i meant to use x_mult

#

thats why its not working

median veldt
#

assuming somewhere in dictionary but what about the key

median veldt
#

nevermind it's

b_prefix_consumable_cards
k_prefix_consumable
lament agate
royal ridge
#

oh ok gg

median veldt
#

mayybe not
i was just looking at vremade and another mod

royal ridge
median veldt
#

yea

royal ridge
#

hm

daring fern
# lament agate how to
SMODS.current_mod.optional_features = function()
    return {
        quantum_enhancements = true
    }
end
lament agate
#

i gotta find a mod that does this tho

#

@faint yacht does your mod have quantum enhancement?

frozen smelt
#
        return card.ability.extra.dollars
        x_mult = card.ability.extra.xmult_minus - card.ability.extra.xmult_minus_mod
    end,```
#

is this plausible

daring fern
lament agate
daring fern
lament agate
#

oh alright

#

brb

median veldt
#

this is the only thing definining the consumable type

daring fern
median veldt
#

?

daring fern
#

Because ObjectTypes and ConsumableTypes don't have mod prefixes.

median veldt
#

right here

daring fern
median veldt
#

Oh

daring fern
#

There is no mod prefix there.

#

It's just the key.

median veldt
#

I swear I tried that earlier and it didn't work

#

Whatever it works now thank you so much

frozen smelt
#

is message = localize('') the message under the card

#

i just wanna make sure so i dont mess anything up

hollow crest
#

guys how to check whether the game's currently in the main screen where you play cards or discard them?

#

G.STATES doesn't seem to have that

daring fern
hollow crest
#

ight thank you

median veldt
#

are there docs for the partner mod

maiden phoenix
#

I think they have a wiki section in their github not sure

#

Otherwise just read the code in the mod

merry frost
#

Is it possible to track what happens in the game after a consumable is used and apply changes to the game at that stage, such as when a blind is defeated? Would this require lovely patches?

feral tree
#

So do atlases for blinds have to be 32x32?

#

mines 158 x 158

median veldt
feral tree
#

Shows up in the collection

median veldt
#

idk what I'm doing with this mod lmao

feral tree
#

Shows up in the blind selection screen

#

but not when you're actually in it

maiden phoenix
#

which line it crashes at

median veldt
#

the first line

#

i just copied code from the partner mod itself
and yes i do have it enabled

#

in the mod there's this on like the first line

#

idk if I can like
get variables from the other mod like that

merry frost
daring fern
merry frost
#

I'm unfamiliar with the concept of hooking, could you give an example or link me to an article that contains that information?

median veldt
#

which makes sense but still annoying

daring fern
# merry frost I'm unfamiliar with the concept of hooking, could you give an example or link me...
Klei Entertainment Forums

In LUA, it is a very important concept to understand that everything is a variable and all variables may be edited in runtime. This includes functions. With modding other peoples' LUA files, like Klei's basegame code, you may find yourself wanting to run your code before or after the original fun...

feral tree
daring fern
hollow crest
merry frost
#
local blind_defeat_hook = Blind:defeat(silent)
function Blind:defeat(silent)
    return blind_defeat_hook(self, silent)
end

Would something like this be a start? Looking at this has me worried because self isn't defined, and neither is silent.

maiden phoenix
feral tree
# daring fern No.

any possible reason the blind image isn't showing up when i play it then?

median veldt
#

and self is the Blind

feral tree
merry frost
#

Are you saying that the problem is that I'm not getting the blind from G.GAME.round_resets.blind_states[blind_type] = blind then? Or is modifying the class OK?

median veldt
#

what?

#

there is no issue

daring fern
median veldt
#

?

#

oh did i miss context

merry frost
#

I am trying to hook into a blind's events

daring fern
median veldt
#

OH right

#

since you're not calling the function you're just getting the function itself

merry frost
#
local blind_defeat_hook = Blind.defeat
function Blind:defeat(silent)
    blind_defeat_hook(self, silent)
end

So this then?

#

I'm just being absolutely sure

median veldt
#

I believe so at least

#

It's been a week or so since I made a hook I have bad memory
Looks right to me tho

merry frost
#

Ok, then here's another conundrum. I'm creating consumables that hook into blinds, but when I set an arbitrary value using SMODS.Consumable { }, I get an error. To get around this, am I required to create a new hook for every consumable?

#

Here's an shortened example: SMODS.Consumable { can_use = ..., use = ..., blind_start = ..., blind_defeat = ... } (specifying blind_start or blind_defeat causes a crash)

hollow crest
feral tree
#

this was working, now it's not and i have no idea how please help

livid nimbus
daring fern
#

It's the same thing.

hollow crest
#

for some reason it doesn't work

hollow crest
merry frost
# daring fern Show the full code.
BlindStation.Case = SMODS.Consumable:extend {
    required_params = { 'key' },
    set = 'BlindStationCase',
    class_prefix = 'BlindStationCase',
    pools = { 'BlindStationCase' },
    atlas = 'BlindStationCaseDefault',
    pos = { y = 0, x = 0 },
    set_card_type_badge = function(self, card, badges)
        badges[#badges + 1] = create_badge(
            localize('k_BlindStation_Case'), HEX('b6b6ba'), G.C.WHITE, 1.2
        )
    end,
    unlocked = true,
    discovered = true,
    config = {
        allowed_blind_types = { 'Small', 'Big' },
        blind = 'bl_big'
    },
    loc_vars = function(self, info_queue, card)
        return {
            vars = { localize {
                type = 'name_text', key = self.config.blind, set = 'Blind'
            } }
        }
    end,
    can_use = function(self, card)
        local blind_type = BlindStation.FUNCS.get_next_blind_type(
            self.config.allowed_blind_types
        )
        return BlindStation.FUNCS.can_change_blind_type(blind_type)
    end,
    use = function(self, card, area, copier)
        play_sound('BlindStation_BlindStationCaseUse', math.random() * 0.01 + 1, 0.9)
        local blind_type = BlindStation.FUNCS.get_next_blind_type(
            self.config.allowed_blind_types
        )
        if blind_type == nil then
            error(
                'Blind type is unexpectedly nil from `can_use` to `use` method of case \'' .. self.key .. '\''
            )
        end
        BlindStation.FUNCS.set_blind(blind_type, self.config.blind)
    end,
    -- TODO: Implement (adding this function causes a crash)
    --[[ reward = function(self, card)
    end ]]
}

All BlindStation.FUNCS functions you see I have extensively tested and fully work

hidden sable
primal robin
hidden sable
#

yeah that thing

#

if i put a dependency in my json does the game actually scan for if you have that dependency

stiff quiver
#

i made a joker that works like mr bones but for when it saves the run for losing it says error, how can i fix this?

hidden sable
#

simon be typing

stiff quiver
daring fern
stiff quiver
#

oh that makes sense, thanks!

merry frost
#

I think I'm doing something wrong again. Trying to hook into an instance of a class is giving an IDE warning

midnight hornet
primal robin
#

Is this smth like TAS bot?

midnight hornet
#

no just a refinement and docs addition to balatrobot mod. I'm planning to use to develop new balatro bots. yeah like TAS bot: program that given the game environment takes action.

merry frost
#
BlindStation.FUNCS.create_game = function(game_table)
    local game_config = game_table.config
    game_config.extra = game_config.extra or {}
    game_config.extra.allowed_blind_types = game_config.extra.allowed_blind_types or {
        'Small', 'Big', 'Boss'
    }
    SMODS.Consumable {
        key = game_table.key,
        config = game_config,
        can_use = game_table.can_use or function(self, card)
            local blind_type = BlindStation.FUNCS.get_next_blind_type(
                self.config.extra.allowed_blind_types
            )
            return BlindStation.FUNCS.can_change_blind_type(blind_type)
        end,
        use = game_table.use or function(self, card, area, copier)
            play_sound('BlindStation_BSGameUse', math.random() * 0.01 + 1, 0.9)
            local blind_type = BlindStation.FUNCS.get_next_blind_type(
                self.config.allowed_blind_types
            )
            if blind_type == nil then
                error(
                    'Blind type is unexpectedly nil in `use` method of BSGame \'' .. self.key .. '\''
                )
            end
            local set_blind = BlindStation.FUNCS.set_blind(
                blind_type, self.config.extra.blind_key
            )

            local blind_set_hook = set_blind.set_blind
            function set_blind:set_blind(blind, reset, silent)
                blind_set_hook(self, blind, reset, silent)
                if game_table.post_set_blind then
                    game_table.post_set_blind(self, blind, reset, silent)
                end
            end
            --Crash: Attempt to call upvalue blind_set_hook
#

I knew something was going to break. Seems like I can't set hooks inside a use method? How do I get around this?

#

Or is it just that I need to store these variables somewhere rather than them only being local variables?

stiff quiver
daring fern
stiff quiver
#

thanks

feral tree
#

still cant figure out why tf this isn't working HELP

daring fern
tawdry oriole
#

is there a way to change the current atlas pos of a joker in its calculate function?

tawdry oriole
#

how would you do that then?

feral tree
daring fern
tawdry oriole
#

thanks!

daring fern
feral tree
#

do i put that in Calculate?

stiff quiver
#

outside thr joker

feral tree
#

ah

feral tree
stiff quiver
#

i think so

daring fern
stiff quiver
#

yeah

lament agate
#

whats the fix again for a joker that triggers for every cards held in hand

feral tree
#

context.main_eval?

lament agate
feral tree
#

Checks the joker and not the cards in hand

lament agate
feral tree
#

yes

lament agate
#

thanks doc

vast bough
#

does anybody know what the line of code is to balance chips and mult

#

i know its a single line but i forgor

daring fern
vast bough
summer furnace
#

how could I modify the Xmult config, while the joker does something?

stiff quiver
#

like, imagine i have a card with a seal, and i want from withing the seal's calculate change the position of the seal in the atlas

daring fern
stiff quiver
#

so something like G.shared_seals["modprefix_key"] = {x = x, y= y} ?

stiff quiver
#

what do i do with that then?

daring fern
stiff quiver
#

ok thanks

void sparrow
#

does anyone knows how to fix that? its my first mod sorry if its a dumb question

red flower
daring fern
summer furnace
#

so I am doing this but it crashes

#

oh wait nvm

#

I mistyped it lmao

#

oh it still crashes

daring fern
summer furnace
red flower
void sparrow
daring fern
void sparrow
#

key stays key or do i put my mod key?

#

nvm it worked thank you !!!

slim ferry
#

what general structure should the main mod file have? the steamodded docs dont have anything on it and every mod seems to do something entirely different

summer furnace
# daring fern Move it out of the return.

I did that, but it still crashes :/
Heres the config: config = {extra = {Xmult = 1}}
and heres the calculate function:

        boost = pseudorandom('FinusLSD', 1.45, 1.95)
        boost = boost - pseudorandom('SonstZuOpLMAO', 0.05, 0.15)
        card.ability.Xmult = boost,
        if context.joker_main then
            return {
                Xmult_mod = card.ability.extra.Xmult
                message = 'Geboosted!',
            }
        end
    end,```
daring fern
#

Also add the , to Xmult_mod = card.ability.extra.Xmult

summer furnace
#

now it works (hopefully) thanks!

lament agate
#

@daring fern which smods version that has the probabilities api?

lament agate
daring fern
lament agate
#

alright

summer furnace
# daring fern Remove the `,`

so it doesn't crash anymore but it doesn't add any multiplier

    key = 'smoboost',
    atlas = 'hdjoker',
    pos = {x=0, y=0},
    cost = 2,
    pools = {['HDJoker'] = true},
    config = {extra = {Xmult = 1}},

    unlocked = true,
    discovered = true,
    blueprint_compat = false,
    eternal_compat = true,
    perishable_compat = true,

    loc_txt = {
        name = 'Mario Odyssey Boost!',
        text = {
            'Booste deinen Multiplier',
            'zwischen 45% bis 80%'
        }
    },

    calculate = function(self, card, context)    
        if context.joker_main then
            boost = pseudorandom('FinusLSD', 1.45, 1.95)
            print(boost)
            boost = boost - pseudorandom('SonstZuOpLMAO', 0.05, 0.15)
            print(boost)
            card.ability.Xmult = boost
            return {
                Xmult_mod = card.ability.extra.Xmult,
                message = 'Geboosted!',
            }
        end
    end,

}```
daring fern
summer furnace
#

now it works thanks!

primal robin
#

@tall wharf are you interact with rotating UI stuff or cards by chance?

#

Not by shader

tall wharf
#

uh no

summer furnace
primal robin
#

Bummer

#

Because game apply rotating only on second frame lumaangry

wintry solar
floral narwhal
#

How can i change rank of a card as con?

languid canopy
#

hey guys how can i fix this ?

#

also it crashes the game when i play a hand (before i f ed up the joker even more)

bitter portal
#

so those numbers in your localization should be 1 and 2

#

not 5 and 0

#

they are the indexes in the return value of loc_vars

#

as for the crash i am not sure

idle plaza
#

Your config.extra is missing the gain you uee.

bitter portal
#

ooh yeah, that too

languid canopy
placid star
#

does anyone know where the greyed out sell buttons are held in ui_defs.lua?

idle plaza
crisp coral
#

look for can_sell

bitter portal
bitter portal
#

in this case it would be gain = 0

#

that is what you want

languid canopy
#

nevermind

#

what

#

uhhh coding moment

idle plaza
#

What's happening now?

bitter portal
#

make sure to not accidentally swap the localization vars lol

languid canopy
#

wait a sec

#

so this part is fixed

#

ima try to play a hand

#

lowkey hardest part of the game

#

very nice it doesn't crashes

#

well thanks you guys

tawdry oriole
#

is there a way to return a message with an event?

bitter portal
#

Is there some sort of global var i can check to see if the whole process of discarding cards and new cards being drawn has finished?

#

im trying to make the new cards come in only after some new cards were drawn

#

this almost works but since the time it takes for cards to finish drawing and discarding is dynamic, a value of 4 doesnt always work out

wooden nexus
shell timber
#

are you trying to make a new consumeable type?

bitter portal
#

i did figure it out though

idle plaza
bitter portal
#

ooh i just realised i messed up the materilze animation

#

it doesnt do it :(

red flower
bitter portal
tawdry oriole
#

thanks

wooden nexus
#

Not consumable

#

(It goes in Joker Slots)

#

II got it working thanks to someone else but idk how to get the collection to show up

bitter portal
#

is it in "other" already?

misty gorge
#

For some reason this dissolves the joker before scoring is started, even when I have it set to "context.after"

wooden nexus
#

(this is photoshopped but I wanna do something like this)

#

ALTERNATIVELY...

#

Move Seals over to Other

bitter portal
misty gorge
red flower
bitter portal
#

Is it possible to apply a shader to a Back?

wooden nexus
#

beta balatro did it

red flower
#

You probably need a DrawStep

#

I would look into how cryptid does it

thorn basin
#

I wanted to make a joker that would create a random joker that you previously sold or destroyed after a boss blind has been defeated.
The question is... how can I check for every joker sold or destroyed previously?
In the "(#G.jokers.cards + G.GAME.joker_buffer)" I think I gotta change the first term to something else but I'm not sure what.

thorn basin
daring fern
bitter portal
#

Why doesnt this edition work for jokers? It doesnt do any scoring when it's applied to a joker

daring fern
thorn basin
# daring fern Yes.

wait but how can I store the sold/destroyed jokers in an array?
And how do I make the array not limited but infinite since there's probably gonna a lot of destroyed/sold jokers?

daring fern
frosty rampart
thorn basin
idle plaza
real night
long sun
#

where do i put the code for credits, again?

#

(overall credits found next to the mod's config tab)

red flower
#

current_mod.extra_tabs

long sun
#

awesome, thanks :D

primal robin
long sun
#

oh that's not slime

#

tis part of an Art Fight attack i received!! (these other OCs aren't mine)

polar vale
#

guys i tried to install the cryptid mod but it shows this error what can i do??

bitter portal
pale holly
#
key = 'Sol Flush',
    loc_txt = {
    name = 'Sol Flush',
    description =  {"Five sol cards"
},},
mult = 3,
chips = 30,
l_mult = 3,
l_chips = 10,
visible = true,
example = {
        { 'H_Q', true, enhancement = 'm_cymbal_sol'},
        { 'H_J', true, enhancement = 'm_cymbal_sol' }, 
        { 'D_9', true, enhancement = 'm_cymbal_sol' }, 
        { 'H_6', true, enhancement = 'm_cymbal_sol' },
        { 'D_3', true, enhancement = 'm_cymbal_sol'} 
    },
    evaluate = function(parts, hand)
        return parts._sol_flush
    end
}```

Quick question but how do i make the poker hand work with my enhancements ? It's meant to react with 5 cards with that enhancement but it still treat it as a flush (because the enhancement is any suit)
pale holly
polar vale
#

just talisman is active

pale holly
#

maybe remove entirely the other mods folders just in case, maybe it can still mess up somewhat

polar vale
#

ok ill try

#

thank u btw

red flower
pale holly
red flower
#

no idea

pale holly
#

i'll try that first to see, but thanks

pale holly
#

ah, well not sure, i don't even really use cryptid, just said was seemed the most logical

pastel kernel
#

where's the creator of jokerforge

pale holly
#

maybe it's the smods version that is outdated

polar vale
hybrid shadow
pale holly
lament agate
#

whats the context for detecting Ante raise

hybrid shadow
thorn furnace
#

Two questions but I'll ask one at a time
The first one would be asking how I can make the "100" text centered inside the light grey bubble (like as though it just ignored the red bubble)
If I have them as separate nodes inside the grey bubble then it just places them next to each other

pale holly
frosty rampart
frosty rampart
#

yea that should be right

pale holly
# hybrid shadow np

well it DOES show itself on top of the flush but somewhat will still trigger itself as a flush, maybe the way my pokerhand is being made doesn't exactly match idk

tepid coral
#

Hello, I was trying to get this joker effect to work, but I can't figure out how to. The plan was to make the suit names get added to a table and then cards would have their suits compared against the ones already in the table

pale holly
bitter portal
lament agate
bitter portal
red flower
# lament agate bump

there isnt one, the best you can do with contexts is end_of_round + boss defeated
else you need to hook

pale holly
frosty rampart
bitter portal
#

ahh yeah that makes more sense 😭

hybrid shadow
lament agate
thorn furnace
pale holly
red flower
lament agate
#

tysmmmm

#

shoudl be good

hybrid shadow
long sun
#

oops! my UI is busted, can you see where the issue is? will grab a screenshot in a mo

pale holly
long sun
#

oh and. nvm i found it ;u;

thorn basin
long sun
#

sorry

hybrid shadow
pale holly
#

sure, i would have checked for pokerhands with enhancements on but i don't think i've found one yet

red flower
#

i have one that is five gold cards

#

(ignore the next(SMODS.find_card("j_joy_eld_angel")))

hybrid shadow
#

thats a bit simpler than what i did

pale holly
#

thanks both, i'll try to make this work now

thorn basin
#

(to at least add the sold/destroyed joker to the array)

polar vale
#

@pale holly thank u for your help i can play cryptid now. my files were outdated

red flower
#

replace modprefix with your mods prefix

thorn basin
#

aight

tepid coral
pale holly
tranquil axle
#

how is this only an epic joker

thorn furnace
#

have u seen the legendary jokers in cryptid CoroboPat

tranquil axle
#

oh my god

#

why am I ALWAYS in the wrong channel

#

this is the 3rd time

long sun
#

there we are!

thorn furnace
tepid coral
#

Ok, this is new

thorn furnace
#

did i typo

pale holly
red flower
#

:is_suit ?

long sun
primal terrace
#

Hi, is there a way to detect when a card is used in a booster pack?

I looked at "Domino" from Bunco and that has context.getting_booster_card, but I've heard nothing about it

tepid coral
thorn furnace
pale holly
# long sun ah, partly

ah i see, i know i've tried to maje a proper description but apparently using n/ to skip line doesn't work in that case

long sun
#

that's because it's \n

#

but also, you should use multiple rows of text instead of newlines

#

but also, i'm pretty sure you can do that with a table like { "row a", "row b" }

#

but also i don't know for sure so

pale holly
tepid coral
thorn furnace
pastel kernel
#

i need some help

primal terrace
pastel kernel
thorn basin
pastel kernel
thorn basin
red flower
#

you're missing the creating part

thorn basin
#

oh

pastel kernel
long sun
#

how do you draw a card from a card area into a different card area, again?

#

i'd like to draw from play into hand

pale holly
long sun
#

np!

thorn basin
red flower
long sun
#

awesome, will give that a try