#💻・modding-dev

1 messages · Page 375 of 1

vast fractal
#

how to do talisman compat stuff uogh

midnight coyote
#

got that too

hybrid shadow
rustic swallow
#

how would i make two pairs be considered full houses?
with a hook

midnight coyote
#

had to make a new save

daring fern
midnight coyote
#

i hate everything

#

if i had a jimbo plushie at this very moment i would hang him on my door

daring fern
scarlet thorn
#

Basil's issue was creating a new hand requires you to make a new save, or else it crashes.

vast fractal
daring fern
sullen fern
#

how the fuck do you solve this

#

balatro-kai is now shoving this in my face whenever i try to launch it

midnight coyote
#

here's some ideas ive been doing for jokers

vast fractal
sullen fern
vast fractal
#

im going insane

digital sun
#

how do you destroy cards

#

cards held in hand i mean

daring fern
digital sun
wintry arch
#

is there a context for cards drawn after opening a booster pack?

#

context.open_booster doesn't seem to work

daring fern
shut crater
#

Why do the cool joker effects take the longest to make

#

I spent like all day on one joker

unborn bay
#

as in to_big(1) < to_big(0) lmao

daring fern
#

return = context.destroy_card == G.hand.cards[destroycard]?

#

Also context.destroy_card does not happen during joker main.

wintry arch
#

i've made a "mystery" enhancement that hides a card's suit and rank until it's drawn, and i've got it removing itself when drawn during a blind but it's still there when you open a tarot pack or spectral pack and i need this to not be the case.

is there an easy way to do this?

timid star
cyan lagoon
#

why this crashes?

#

crashes when it tries to add the enhancement

daring fern
cyan lagoon
#

nope

brazen tusk
#

try nil instead of false

#

context.other_card:set_ability(G.P_CENTERS["m_wild"], nil, true)
smth like this

cyan lagoon
wheat pulsar
#

Hey can i put to vanilla jokers pools?
for example cavendish, gross michel, etc in a food pool?

daring fern
#

Or you could just put the key in cards of the object type?

brisk rose
hasty mist
#

asking again what the issue here is

brisk rose
hasty mist
#

no idea

brisk rose
#

like "X" and then the chip value all as one strong?

#

what are you trying to return i should ask

hasty mist
#

this is how the joker code looks

hasty mist
brisk rose
#

just try putting shit in parentehses ngl

unborn bay
#

not card.ability.extra.chips

brisk rose
#

I don't really know how this shit works, but concatination might not be concatonating

brisk rose
unborn bay
#

yeah you ofc cannot concatenate a nil value :V

hasty mist
#

huh

brisk rose
#

but they might not have used it

hasty mist
#

so do i have to move chips from extra to the root of the config?

brisk rose
#

I see card.ability.extra.chups existing

#

are you syre they just don't need parentheses?

hasty mist
#

i am not sure of anything 😭

brisk rose
#

I meant haya

brisk rose
hasty mist
#

yeah

brisk rose
hasty mist
#

this is probably the most complicated joker ive coded yet

#

or one of the mostr

hasty mist
#

except nil should be 100

brisk rose
#

tbh I've coded 0 kokers, all my experience has been fucking with the graphics code

hasty mist
#

basically

brisk rose
#

which is... its own beast

hasty mist
#

chips scale

#

when it reaches X100, it increases the operator and resets to 1

#

so, it would become ^1

#

reach 100 again and it becomes ^^1

#

etc

brisk rose
hasty mist
#

i dont think i understand

brisk rose
hasty mist
#

"arrows" is the operator

brisk rose
#

I just mean you don't need to use the in-built lua formatting when the game has loc vars for that, and you can switch it in the logic with normall loops and if statements and whatnot. The arrows are like any other text i presume

#

unicode is unicode, just need to escape them or smth

#

or do the arrows not use unocde characters in the font?

hasty mist
#

it might be late or i might be stupid but i have no idea what you're trying to say 😭

brisk rose
#

same tho. i might be being stupid

hasty mist
#

wait what the fuck

#

i think i fixed it

#

????

faint harbor
#

sorry if this is the wrong place and sorry to interrupt your chat but im trying to add a new challenge and the game recognizes it but its locked. how do i make it unlocked

hasty mist
#

alright i think i coded the effect properly

#

but

hasty mist
#

why does it still say nil?

brisk rose
hasty mist
#

its long so let me know if i need to zoom in the screenshot a bit

daring fern
hasty mist
#

#4# is in config and loc_vars

#

also, happens when the operator is supposed to increase

daring fern
hasty mist
#

ah i see

hasty mist
#

this is supposed to detect if the chips reach or go above 100, increase the operator, and reset it to 1

brisk rose
#

there are 3

hasty mist
#

yeah that's my bad

brisk rose
#

which is required in this cazse i know

#

probably missing some to_big's

hasty mist
#

alr

#

now i need to figure out where

brisk rose
# daring fern

also is the 'message' how you send values to loc vars? As I said I'm new, sorry

#

@daring fern I just don't see themdefining it anywhere?

brisk rose
#

so I was wendering if it was in built

brisk rose
hasty mist
#

holy shit it works now

faint harbor
# brisk rose

what does this mean? i'm very new to modding balatro and lua as a whole

hasty mist
#

okay one more issue

#

it is giving mult instead of chips

#

for some inexplicable reason

#

OH

#

i know why

icy oak
#

how do i generate a random joker while respecting their rarities

daring fern
icy oak
#

i dont know, ill try that

faint harbor
wintry arch
#

hey yall,
i'm making an enhancement that's supposed to remove itself when the card is drawn to hand. i've got it working for drawing cards during a blind, but i'm not sure how to go about making it do the same thing when it's drawn for a tarot/spectral booster pack. the "open_booster" context seems to be useless

daring fern
#

if G.booster_pack and not G.booster_pack.REMOVED and SMODS.OPENED_BOOSTER?

wintry arch
#

w here would that be applicable. in the context check function?

#

i can try that there, sure

daring fern
wintry arch
#

huh! seems to work so far

#

i think that works, thank you!

shell timber
#

oh is this for the erratic deck testing

analog spoke
maiden phoenix
#

github issues

analog spoke
#

mhh, I'll look into it, thank you

red flower
# analog spoke

a txt file that you edit occasionally and says stuff like "check the thing that makes the jokers bad"

ripe thicket
#

im new to modding and I'm looking through the example jokers mod on the steammodded github
what's the purpose for this?

manic rune
#

text in the joker's description

ripe thicket
#

ohhh ok

maiden phoenix
manic rune
#

{C:mult} changes the color of the text, #1# has it so the text in there changes dynamically depending on a variable's value

ripe thicket
maiden phoenix
#

Oh then yea it's for object descriptions

cyan lagoon
#

anyone knows the key of a gluttonous joker?

hasty mist
#

i think gluttonous is misspelled as "gluttenous"

#

cant remember if its gluttenous or gluttenous_joker though

wintry solar
vast fractal
wintry arch
cyan lagoon
wintry solar
wintry arch
#

hmm, well the other solution i got seems to be working for now but the thing im doing might break it, i'll consider that if i need to change it cuz that looks more stable

cyan lagoon
hasty mist
#

mhm!

manic rune
#

do i use if context.other_consumeable then... to go through all held consumables for effects

#

just to be sure :p

shell timber
#

yes

maiden phoenix
#

It works the same as how you'd use context.other_joker

manic rune
#

icic, thanks

dull sage
#

Question, you get a cards seal by doing card.seal, easy enough

Why is it to get the enhancment it's SMODS.get_enhancements()? kek

manic rune
#

because of quantum enhancements

#

you usually use SMODS.has_enhancement instead btw

hexed heath
daring fern
manic rune
#

idk, it was there when i first started modding lol

#

might need to ask the ogs around here :p

wraith kiln
#

errr can anyone help me with some smod stuff

#

i want there to be a 1 in 3 chance to turn playing cards into bonus cards but im not really sure how the pseudorandom function works and i cant find any documentation on it

daring fern
wraith kiln
#

have been kind of frankenstying code from diff jokers togheter

#

to learn

daring fern
wraith kiln
#

i was guessing calculate effect was the function blueprint would look for

daring fern
wraith kiln
#

what about the pseudorandomness though

#

should it work now?

#

nope

#

i might just be very super duper lucky but it hits on every card

#

nope set the pseudorandom to 100000 and it still hits every card

#

unless im like the luckiest person alive

daring fern
wraith kiln
#

cause i've looked at the vanilla revamped code for 8 ball

#

and all it gives is a string

daring fern
wraith kiln
#

i mean like

daring fern
#

You change the odds?

wraith kiln
#

oh my god im so stupid

wraith kiln
#

wait but

#

aren't the odds what the oops all 6's changes

#

like the 1 in "1 in 3 chance"

daring fern
wraith kiln
#

oh okay

tired kestrel
#

How do you detect the held cards?

daring fern
tired kestrel
#

also is there such as "is_stone"?

daring fern
wraith kiln
#

randomness still dosent work and im not really sure of what to do atp

wintry solar
#

No your return table is just wrong

wraith kiln
#

like whats the issue

wintry solar
#

The set ability shouldn’t be in it, message shouldn’t be in its own table

wraith kiln
#

where should the set ability be then

wintry solar
#

Before the return

wraith kiln
#

oh okay so return runs regardless if the chance hit or not

#

?

wintry solar
#

No

wraith kiln
#

then what is it for

#

sorry im not that experienced in lua

wintry solar
#

Have you read the calculation guide?

wraith kiln
#

is it in like the api

wintry solar
wraith kiln
#

ah i see thanks :-)

tired kestrel
#

someohw it's not detecting the cards if the cards haven't played and of course it's meant to convert stone cards to their original state.

tired kestrel
# daring fern Code?
SMODS.Joker{
    key = 'stonebreaker', 
    loc_txt = {
        ['en-us'] = {
            name = "Stonebreaker", 
            text = {
                "Convert held Stone cards",
                "into a random Enchancement"
            }
        }
    },
    atlas = 'Jokers',
    pos = { x = 1, y = 0 },
    config = {
        extra = {
            -- No additional properties required for now
        }
    },
    rarity = 2,
    cost = 4,
    calculate = function(self, card, context)
        if context.cardarea == G.hand then
            for k, v in ipairs(context.other_card) do
                if SMODS.has_enhancement(card, "m_stone") then 
                    return {
                        m_stone = false
                    }
                end
            end
        end
    end
}
#

I had thought about trying to see if I can like make a custom card that I thought that is about unconverting the card into stone

wintry solar
#

Oh god where to start

#

You can’t use ipairs on a singular card

#

Returning an enhancement value as false does absolutely nothing

#

You’re checking if the joker is a stone card

#

Your context check isn’t tight enough

tired kestrel
daring fern
wintry solar
tired kestrel
#

also

#

I need to try to see if

#

I can get the stone card to turn into a base card then try to reincoperate

#

like I need to know the variables of like each enchancement

#

or give a random enchancement

#

sorry if it sounds confusing.

daring fern
native zinc
#

turn held in hand stone cards into a random enhancement

#

which yeah is what somethingcom's code does

tired kestrel
native zinc
#

can confirm

tired kestrel
#

did know someone already did that.

#

but yeah.

#

let me test it out first.

daring fern
native zinc
#

just pseudorandom the global list of enhancements and put it in

wintry solar
#

Just use poll enhancement

#

That’s what it’s for

tired kestrel
#

it didn't actually get the hand deck to like turn the stone card into a playing card

tired kestrel
# tired kestrel Something I tried your code and apperently this happened:

not sure why if I did it right but this ia the code I had so far:

SMODS.Joker{
    key = 'stonebreaker', 
    loc_txt = {
        ['en-us'] = {
            name = "Stonebreaker", 
            text = {
                "Convert held Stone cards",
                "into a random Enchancement"
            }
        }
    },
    atlas = 'Jokers',
    pos = { x = 1, y = 0 },
    config = {
        extra = {
            -- No additional properties required for now
        }
    },
    rarity = 2,
    cost = 4,
    calculate = function(self, card, context)
        if context.individual and context.cardarea == G.hand then
            if SMODS.has_enhancement(context.other_card, "m_stone") then 
                context.other_card:set_ability(G.P_CENTERS.c_base)
            end
        end
    end
}
#

also sorry for the confusions.

daring fern
#

Try keeping them in your hand.

tired kestrel
#

let me check

#

yup the removal did work just somehow it didn't trigger upon starting the round.

#

or starting the blind

#

but I have an idea

native zinc
#

upon starting the round is a different context

tired kestrel
#

also hwo does poll work?

#

or poll enchancement work?

native zinc
#

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

tired kestrel
#

ah.

#

well I got an error but now I'm wondering how can I randomize the enhancement?

native zinc
#

it's polling the list of enhancement

#

s

tired kestrel
#

alright but right now it crashed:

daring fern
#

Also you need to do SMODS.poll_enhancement({guaranteed = true})

tired kestrel
#

alright I see now

#

Now it works!

cursive sentinel
#

is it possible to still call shatter/destroy stuff despite blocking destroy through a patch?

cursive sentinel
#

wdym?

#

i basically did a destroyed = nil patch if my joker is there

#

in addition to a hook

daring fern
cursive sentinel
#

wdym by conditions?

daring heron
#

tryna make a custom card skin, would this work?

daring fern
cursive sentinel
cursive sentinel
#

im not sure to follow; my issue is that cards that are shattered when played but prevented to be destroyed dont call caino stacking, adding conditions to the destroy = nil will just disable the destruction prevention? or am i getting it wrong?

#

im not sure to get the logic

daring fern
cursive sentinel
#

yes, and it is

#

except for shattered glass

#

this is the only exception for now and i have no clue why

cursive sentinel
daring heron
#

does anyone know why this doesnt work?

cursive sentinel
#

but if i play a 6 with 6th sense and pareidolia or if i play shattering glass cards, wont call

#

its like my patch stops the call at all and my hook doesnt

daring heron
#

i honestly have no idea what i need to do with these 2

next timber
#

setting pos_style to collab makes it assume your atlas only contains face cards, i believe

daring heron
#

oh

next timber
#

been a while since i made a deckskin but i think thats how it works

daring heron
#

yeah mb

next timber
#

you want 'suit' i think

#

no

daring heron
#

so would this work?

--- STEAMODDED HEADER
--- MOD_NAME: Fancy Suits
--- MOD_ID: fancysuits
--- MOD_AUTHOR: [CebeeDrawz]
--- MOD_DESCRIPTION: Y e s
--- PREFIX: fancysuits

SMODS.Atlas {
    key = 'FancySuits',
    path = 'FancySuits_lc.png',
    px = 71,
    py = 95
}

SMODS.DeckSkin{
    key = "DeckSkin_lc",
    suit = "Hearts", --???
    loc_txt = "default",
    palettes = {
        ranks =  "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King",
        display_ranks =  "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King",
        atlas = FancySuits,
        pos_style = 'suit', --???
    },
    colour = "f03464",
}
next timber
#

what does your atlas look like

#

if all the suits are in one file youll want 'deck'

daring heron
#

aand what do i put here?

next timber
#

thats still correct i think

daring heron
#

(and it also still crashes)

next timber
#

ah

daring heron
#

hm?

next timber
#

idk whats going on there

daring heron
#

oh

#

wait i might have it

next timber
#

oh the pallette needs a key

daring heron
#

nvm 😔

#

yeah i tried

#

this still wont work

next timber
#

try just lc?

daring heron
#

welp..

#
--- STEAMODDED HEADER
--- MOD_NAME: Fancy Suits
--- MOD_ID: fancysuits
--- MOD_AUTHOR: [CebeeDrawz]
--- MOD_DESCRIPTION: Y e s
--- PREFIX: fancysuits

SMODS.Atlas {
    key = 'FancySuits',
    path = 'FancySuits_lc.png',
    px = 71,
    py = 95
}

SMODS.DeckSkin{
    key = 'DeckSkin',
    suit = 'Hearts',
    loc_txt = 'default',
    palettes = {
        key = 'lc',
        ranks =  '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King',
        display_ranks =  'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King',
        atlas = 'FancySuits',
        pos_style = 'deck',
    },
    colour = 'f03464',
}
misty gorge
#

I wanna make sure I don't somehow end up pissing people off that way

next timber
misty gorge
#

Okie, cool

daring heron
#

might be something with the palette, but cant find what

next timber
#

its having an issue with "3" somewhere

daring heron
#

the ranks?

next timber
#

yes

wraith kiln
#

how do i get the cards in hand?

daring fern
next timber
#

oh wait what the hell put those in tables

#

thats the issue,

wraith kiln
next timber
#

you havent wrapped the ranks in tables

#

lmao

daring heron
#

huh?

#

like this?

next timber
#

yes and for display_ranks too

#

its interpreting

ranks =  '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King',

as

ranks = '2',
'3',
'4',
'5',
...

if that makes sense. it thinks 3 is a key without a value

daring heron
#

ohh

next timber
#

unless theres any inner lua workings i dont know about that makes this fine. but i cant imagine so

daring heron
#

okay well it doesnt crash anymore

#

but theyre not there either

next timber
#

take the numbers out of quotes still

#

they should be numbers not strings

daring heron
#

oh ok

wraith kiln
next timber
#

and put the colour in a HEX('...') maybe

#

idk if it changes anyting but its in my code

#

so worth a shot

wraith kiln
#

*delete_card(=)

daring heron
#

the jack king and queen too?

#

or should those be in quotes

next timber
#

no those arent numbers

daring fern
wraith kiln
next timber
#

also if you want every single rank to be shown on the skin select menu (that's what display_ranks is for btw) then display_ranks should be identical to ranks

wraith kiln
#

whats the method to destroy cards then

daring heron
#
--- STEAMODDED HEADER
--- MOD_NAME: Fancy Suits
--- MOD_ID: fancysuits
--- MOD_AUTHOR: [CebeeDrawz]
--- MOD_DESCRIPTION: Y e s
--- PREFIX: fancysuits

SMODS.Atlas {
    key = 'FancySuits',
    path = 'FancySuits_lc.png',
    px = 71,
    py = 95
}

SMODS.DeckSkin{
    key = 'DeckSkin',
    suit = 'Hearts',
    loc_txt = 'default',
    palettes = {
        key = 'lc',
        ranks = {
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            'Jack',
            'Queen',
            'King'
        },
        display_ranks = {
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            'Jack',
            'Queen',
            'King'
        },
        atlas = 'FancySuits',
        pos_style = 'deck',
        colour = ('f03464'),
        suit_icon = {
            atlas = 'FancySuits',
            pos = 0
        }
    },

}

so like this?

#

they still dont show up

next timber
#

yep

#

ah

#

hm

daring heron
#

is a suit icon neccesary?

spice wadi
daring heron
#

i use a chainsaw

next timber
#

ok heres my full code for one of my deckskins knock your socks off

SMODS.DeckSkin {
    key = "mlp_spades",
    suit = "Spades",
    palettes = {
        {
            key = 'lc',
            ranks = {2,3,4,5,6,7,8,9,10,"Jack","Queen","King","Ace"},
            display_ranks = {"King","Queen","Jack"},
            atlas = "mlpgim_mlp_suits_atlas",
            pos_style = "deck",
            colour = HEX("3C4368"),
            suit_icon = {
                atlas = "mlpgim_base_suit_icon_atlas",
                pos = 0
            }
        },
        {
            key = 'lc_con',
            ranks = {2,3,4,5,6,7,8,9,10,"Jack","Queen","King","Ace"},
            display_ranks = {"King","Queen","Jack"},
            atlas = "mlpgim_mlp_suits_2_atlas",
            pos_style = "deck",
            colour = HEX("3C4368"),
            suit_icon = {
                atlas = "mlpgim_base_suit_icon_atlas",
                pos = 0
            }
        }
    },
    loc_txt = "My Little Pony"
}
wraith kiln
daring heron
#

hm?

next timber
#

wait yeah what filetype is this??

daring heron
#

yeah if you put swift after code in discord it color codes it

next timber
#

it

#

also does that for lua

daring heron
#

oh

next timber
#

and every large programming language

tired kestrel
daring heron
#

i mean it does it by default for me

daring heron
next timber
#

ok

#

so its not a swift file

#

good

#

lol

#

you arent

#

you arent prefixing your atlas id

daring heron
#

hm?

next timber
#

what is your atlas name

#

and your mod prefix

daring heron
#

'FancySuits' and fancysuits

next timber
#

so in the atlas argument for the deckskin you should be putting 'fancysuits_FancySuits'

wraith kiln
daring heron
#

shows up now but still breaks when i try to select it

next timber
#

what does your code look like now

daring heron
#
--- STEAMODDED HEADER
--- MOD_NAME: Fancy Suits
--- MOD_ID: fancysuits
--- MOD_AUTHOR: [CebeeDrawz]
--- MOD_DESCRIPTION: Y e s
--- PREFIX: fancysuits

SMODS.Atlas {
    key = 'FancySuits',
    path = 'FancySuits_lc.png',
    px = 71,
    py = 95
}

SMODS.DeckSkin{
    key = 'DeckSkin',
    suit = 'Spades',
    loc_txt = 'default',
    palettes = {
        key = 'lc',
        ranks = {
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            'Jack',
            'Queen',
            'King'
        },
        display_ranks = {
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            'Jack',
            'Queen',
            'King'
        },
        atlas = 'fancysuits_FancySuits',
        pos_style = 'deck',
        colour = ('f03464'),
        suit_icon = {
            atlas = 'fancysuits_FancySuits',
            pos = 0
        }
    },

}
tired kestrel
#

I'll try that and see

spice wadi
#

This might be a dumb question but doesn't malverk have an easier method of implementing skins or did I misunderstand what that mod is for

next timber
#

try wrapping everything in palletes in a second table

#

idfk

#

im copying this into my own code to compare them side by side

daring heron
#

same

wraith kiln
daring heron
#

wait it works 🔥

next timber
#

lets goo

spice wadi
# daring fern No.

Does it not work for playing cards then? I don't know exactly what malverk can change which is why I was asking

daring heron
#

only for spades tho, should i copy this for every suit?

next timber
#

yes

daring heron
#

can it only display 3 cards at a time?

next timber
#

dunno, should display every card you put in display_ranks but im not entirely sure ont hat

daring heron
#

yeah it crashed when i tried but i just needed to put 'rank' instead of just rank

#

strangely it does only show up for the ace tho

#

i think

next timber
#

i can help you no further

daring heron
#

fair

next timber
#

how come removing the tag ui element moves the dark background to be behind the 'or' instead of the skip button?

#

hang on i think i got it

#

its an issue with a different part of code

daring heron
#

found it

next timber
#

👍

daring heron
next timber
#

i fixed it but at what cost. it looks kinda uggy now

#

ive removed the background again bbut that bug was indicative of a slightly larger issue thats fixed now

daring heron
#

how could i add compatability for the bunco suits?

wintry solar
next timber
#

in rascal the reason for skipping can be to avoid getting ganged up on by a full room of black suit face cards

#

(rascal is a different game entirely wearing a balatro shaped trenchcoat)

wintry solar
#

I see

wintry solar
hard mica
#

which joker gave chips based on how many cards you got in your deck?

brisk rose
#

Yes, I've been using chatgpt for the ffmpeg part of this, well strmm originally wrote it, but Istring replacement and filter workflows and a million different flags spread acrorss a novel-length manpage hurt my head, so I happily let the dumb computer whi thinks it can think hand;e that part when I thought it could do with tweaking, lol.

#

lol, how dare I even mention generative ai

gaunt thistle
#

the ffmpeg manpage is pretty scary

#

but nice work :-)

#

idk as long as you're honest about it's usage then it's fine. it's a big spectrum in terms of what's ok and what's less ok.

#

I've used chatgpt to make regex queries haha

#

it's not amazing at it but it gives me enough to expand upon

daring heron
#

how would i add a high contrast mode for my deck?

gaunt thistle
#

so I feel like using it to set ffmpeg flags is not an outrageous thing to do

brisk rose
#

yeah, it tends to be good at string processing to an extent, like it never messed up the lua string format stuff here

#

which was already in place by strmnn

daring heron
#

tried just duplicating the code but that adds a new deck skin lol

#

nvm i think i know

brisk rose
#

To make it clear, the actual mod code wasn't touched by ai, besides me asking it some troybleshooting quesgtions as I wrote

#

it doesn't understand balatro and i do

#

lmdao

#

I spent hours combing through every file in the source, the dumps, and thew smods source

#

days even

gaunt thistle
#

yeah, that's pretty appropriate

#

it's not something that I would ever personally do but like, it's not a crime or anything

#

it's not like you're creating AI slop

wintry solar
#

AI is a reasonably useful programming tool

gaunt thistle
#

@next timber the spectrum exists and we as an industry need to figure out our relationship with it, unfortunately.

I rarely ever use genai both because it sucks the fun out of my work and because my wife is a creative impacted by it, but it's here to stay.

spice wadi
native zinc
#

just say LLM or something to ward off the weird ai slop people

#

somehow this works

#

i don't know why

misty gorge
tired kestrel
gaunt thistle
#

I wish that genai died an expensive death but it's here to stay

#

sucks but whatever

spice wadi
gaunt thistle
#

yeah. as a natural language search engine it's pretty great, but don't rely on it any more than to inform you of options. It's terrible at technicals.

#

But it also should never be a crutch for your ability to formulate research.

brisk rose
tall wharf
brisk rose
#

I just wanted to edit the already made ffmpeg commands to do what I wanted

gaunt thistle
#

Yeah it's not a ridiculous use case

brisk rose
hard mica
#

anyone know how i can check how many playing cards i got in my deck?

brisk rose
#

especially with the boomeraning

#

(it's simulated mouse movement i'm using)

tall wharf
#

i think it looks a bit stiff

spice wadi
#

I do know that
I use it sparingly as I'd rather learn it properly, but it's good for when I need an ultra specific solution
Like I had to override pseudorandom and pull the arguments from the function calling it, the documentation fried my brain so I had ChatGPT mockup part of it and explain it in depth to me
Then I wrote everything else myself

#

It would've been a lot more work just for one joker and for code that I'll probably never have to use again

gaunt thistle
#

Yeah

hard needle
#

is there a context for when a planet card is used?

gaunt thistle
#

I mean I feel like that's reasonable

#

The issue is when you have people generating entire blocks of code with it, not questioning the output, not learning anything, and then hammering this forum for help when it breaks.

brisk rose
hard needle
#

oh wai

spice wadi
hard needle
#

nevermind i forgot constellation exis

zealous glen
#

I’ve used ChatGPT to figure out how something in a library worked because I knew it was possible but I couldn’t find an example of someone doing it

#

After I had the example I could replicate it but I was also able to find a reference (the book explaining the library by the people who made it)

#

I’m not sure the book had an explicit example for what I wanted, but it was a good reference for other stuff

cursive sentinel
#

when calling next(SMODS.find_card('j_prefix_joker)) in another joker's calculate, can i change j_prefix_joker's c.a.e? if so, how?

zealous glen
#

c.a.e?

cursive sentinel
#

card.ability.extra

zealous glen
#

You can change any table any time anywhere in Lua

brisk rose
cursive sentinel
zealous glen
cursive sentinel
#

like is it other_card? context.other_joker? or some thing of the sort?

#

like for example if i wanted to get its position

zealous glen
#

SMODS.find_card returns you a list of all cards it found

cursive sentinel
zealous glen
#

Basically it checks if the table is not empty

hard mica
#

does anyone know how i can check for how many cards i got in my deck?

cursive sentinel
#

mh okay, sadge

zealous glen
#

Why

cursive sentinel
zealous glen
#

Why sadge

#

You have the cards you’re trying to find

#

Just use them

cursive sentinel
zealous glen
#

What do you mean

cursive sentinel
#

how do i call its position for example

zealous glen
#

How do you call a card’s position?

cursive sentinel
#

the specific card

#

do i loop over until i find == then use [i] ?

wintry solar
#

Save the table of cards and then access them

zealous glen
#

You want the index in the CardArea that corresponds to it

cursive sentinel
#

i think? for example, it is not the case but, if i had a joker that made that "oops all 6 instead triple probabilities"

zealous glen
cursive sentinel
#

okok

#

thank you

zealous glen
#

But do you need the index

#

Or do you need the card

#

What are you using the index for

cursive sentinel
#

got a bad interaction with a joker and want to manually hard code it, it's a card destruction prevention that sometimes does sometimes doesn't proc caino (doesnt proc when cards destroyed are played ones) so wanted to manually call 'when this joker's context's called, increase caino's stuff'

wintry solar
#

You’re just not destroying cards correctly then

zealous glen
cursive sentinel
#

yes probably but i'm not good enough to improve it by myself so im doing what i can

brisk rose
#

@tall wharf yeah I'll definitely say that's a bit more natural looking

#

the pause actually makes sense when it's a sin wave, lol

zealous glen
#

I had a similar one but it wasn’t as shiny

brisk rose
tall wharf
#

can u try with noire shader

brisk rose
tall wharf
#

my mod

brisk rose
#

oh yeah I'll just have to dl it real qucik

tall wharf
#

here

hard mica
#

trying to make it so it gives +5 mult for every card in your deck but not sure how to do it lmao

brisk rose
cursive sentinel
#

no need for a for

#

and the return in the for stops it i think?

tall wharf
#

it's literally called noire so

cursive sentinel
#

so probably

if context.joker_main then
  return{
    mult = card.ability.extra.Plusmult * #G.playing_cards
  }
end
#

and i think instead of mod_mult it would be just mult

wintry solar
#

Yeah mod_mult isn’t a thing

brisk rose
# tall wharf yes

just to give you an idea of how this thing is currently used, Though strmnn is rewriting the interface and outputted website entirely

#

@tall wharf

hard mica
cursive sentinel
# wintry solar You’re just not destroying cards correctly then

in case, i've re-used jen's almanac's stuff of diplopia (only for playing cards) as a hook, and did an additional patch (jen's stuff does make caino proc but stopped the game from working (not crash) when breaking cards played (like glass or sixth sense), and the patch was to prevent the game stop working but doesnt proc caino on the cards that it fixes)

brisk rose
hard mica
#

how can i change the mod icon?

cursive sentinel
#

that i don't know 😔

#

apparently there's this (go a bit up the conv)

wintry solar
brisk rose
#

so it's not an error in my reproducing the drawing routines

#

yay

cursive sentinel
wintry solar
#

As in, wait a day or so and use the smods function rather than whatever jank you’re currently doing

tall wharf
brisk rose
cursive sentinel
brisk rose
#

well I mostly used smods version of Card:draw and copied it all anyway with some tweaks, but it took me a long time to figure out how to do that

brisk rose
#

oh actualloy it's normal? it just looks off

#

I think it's a low res thing tbh

tall wharf
#

yeah 😭

brisk rose
#

not enough pixels

#

though ngl I am glad cards are actually rendered, including shader at 71x95

#

because then the exporter works as expected, lol

#

or maybe they aren't?

#

either way it's fine

cyan lagoon
#

how do i scale the card like photo or half joker?

brisk rose
#

do you have another shader on top?

brisk rose
tall wharf
#

maybe it does actually

brisk rose
#

unfortunately I don't think that type of thing can be auto-detected, so it's a limitation of the current approach

#

unless you added it an an smods.drawstep, then i can probably just drop it in

#

if it's set up right

nova eagle
#

does anybody know if its possible to cancel out chicots effect?

#

like with another joker?

zealous glen
nova eagle
#

re-enable the boss blind

#

this is the joker i plan on adding

zealous glen
nova eagle
#

well this joker would just be made irrelevant if you had chicot, thats why i want to know if its possible to make this joker negate chicot, and keep all boss blinds active

zealous glen
#

This Jokers gives Blinds Boss Blind abilities

#

Chicot disables Boss Blind abilities

#

That’s called synergy

red flower
#

you could hook Blind:disable
but yeah i agree with victin, chicot is a legendary for a reason

nova eagle
#

if you say so...

nova eagle
#

i'll give that a try

red flower
zealous glen
red flower
#

it would prevent it

zealous glen
#

Undoing the disability is between hard to impossible IMO

#

Maybe you could set the Blind again, but it’s hard to tell if there would be secondary consequences

zealous glen
red flower
#

i made some boss negation cards because of the yugioh negate thing and they make the game so boring

#

i am going to make aiko-like boss blinds to compensate

cyan lagoon
#

i found some way, but it doesn't work the way i want it

zealous glen
#

It turns all Bosses into The Rock (except Showdown Boss Blinds)

zealous glen
#

So it’s Chicotn’t

red flower
#

chican't

zealous glen
red flower
#

no

zealous glen
distant junco
#

are there any guides or anything on getting to grips with balatro modding

red flower
distant junco
#

thanks

dark roost
#

How do you bind functions to events that don't have a built in smods context?
I see a lot about hooks but i can't for the life of me find the documentation on how to use them and looking at some example code didn't help either (I promise i tried man)

red flower
#

other than that it depends on what you want to do

dark roost
#

it's for tracking money earned and lost, but I'll go look at that tutorial first

slender island
#

how do i make jokers in another file in items folder?

red flower
manic rune
#

surely theres no mod that would alter money by directly changing money instead of using ease_dollars

red flower
#

i mean there probably is

manic rune
#

surely not

#

:3

daring fern
#

How does one make an enhancement that is just the base enhancement but with an edition on it?

manic rune
#

😭

red flower
modern kindle
#

Good schmorning chat

manic rune
#

good afternoon dilly

modern kindle
#

How is the bepis

red flower
#

the bepis is not

hard mica
#

how can i check if scored hands has 5 cards

manic rune
red flower
#

don't do context.scoring_hand without a proper context alongside it

hard mica
#

lemme try

red flower
#

context.scoring_hand is a property of many contexts

#

this will run many times

hard mica
#

then waht do i use

red flower
red flower
#

yes

hard mica
#

pog

manic rune
#

turned out

#

this doesnt remove all the cards inside it, a

#

what approach should i go with to remove both the cardarea and all the objects inside it

red flower
#

if you remove a cardarea it should remove all the cards

manic rune
#

weird

red flower
#

i had the opposite problem actually where i didnt want it to do that

manic rune
#

i get a lot of lag after spamming the inventory button to open and close it rapidly

#

and the lag seems to increase faster when there r more cards in the delete areas

#

so im p sure its from the cards not deleting properly

#

🤔

wintry solar
#

How are you creating the cards

manic rune
#

:3
-# this code was taken from how joyousspring created cards in their mod introduction btw

wintry solar
#

You need to remove the old back sprite

manic rune
#

oh

#

mm how would i do that

#

go through the cardareas, card.back:remove()?

wintry solar
#

card.children.back:remove()

manic rune
#

a yeah, i meant card.children.back

#

thanks

wintry solar
#

I think that should solve it

manic rune
#

this worked, tks :3

wintry solar
#

Oh dont do it there

#

Do it where you create the cards

manic rune
#

oh

wintry solar
#

Doing it there does nothing 😂

manic rune
#

i

#

it doesnt??

#

i couldve swore the framerate issue is fixed now sob

wintry solar
#

No, the remove on the area will clean up the cards properly, the problem is that when you create the card it has a back sprite by default and when you overwrite it it doesn’t get deleted, it just stays in memory

manic rune
#

mm so do i put card.children.back:remove() here instead?

#

underneath the emplace line

#

wait nvm

#

underneath local card, right?

hard mica
#

how can i make one of these and add it to my joker? since this jokers idea is from a friend

#

<@&1133519078540185692>

#

smite him

grand violet
#

So many gun

hard mica
#

thanks egg

broken cliff
manic rune
#

wuh

#

oh hi smell, its been a while since i last saw you around here 🤔

karmic creek
#

stolen valor

hard mica
manic rune
grand violet
broken cliff
manic rune
#

ah lol

broken cliff
#

I got exams and scripting commission's to do

karmic creek
#

STOLEN VALOR

grand violet
#

I CLICKED THE BUTTON

manic rune
#

while ur gone i managed to make 2 semi-complete mods :p

broken cliff
#

I would still prob roam balatro mods related servers to occasionally bring out unofficial hot fixes for bugs I encountered or the bugs sm1 else encountered

manic rune
#

oh thats actually really cool

runic frigate
#

how do i code a changing description of a joker, like popcorn,

hard mica
broken cliff
red flower
#

remove the localize call or add it to a localization file

faint yacht
#

If you need to just display the "Idea: Boyaka", omit the localize, ye.

broken cliff
#

Then add "{#1}" (Pls correct me) to description

manic rune
broken cliff
maiden phoenix
manic rune
#

we went from humans watching chickens fight to chickens watching humans fight

plain apex
#

what do i have to change to change the selectable amount on the vanilla tarot cards this is setting the number but then i can still only select the normal amount
card.ability.max_highlighted = card.ability.max_highlighted + card.ability.extra.cards

broken cliff
manic rune
#

i

#

chicken jockey

broken cliff
#

You could perhaps call them

#

You beat me to it

manic rune
#

:3

manic rune
#

card.ability.max_highlighted is only used for loc_vars im p sure

#

-# i know because my mod changes tarots' max highlight too, its dumb

plain apex
#

epic

dark roost
hard mica
#

How can I lock a jokers position until the round ends then it randomizes it's position then it locks again repeat

analog spoke
#

ok, back at this today, lmao, how would one make a passive "-reroll cost" edition?

broken cliff
#

passive as in

#

you get it into your deck and it has -2 reroll cost?

broken cliff
# analog spoke

G.GAME.round_resets.reroll_cost = G.GAME.round_resets.reroll_cost - (amount u need to subtract)

analog spoke
broken cliff
#

alr then that line of code should work

#

when it gets out of the hand uhh i think you would add instead

wintry solar
#

I hate this

#

it's so ugly

analog spoke
wintry solar
#

oh on_apply is mistimed

#

I didn't fix that yet

analog spoke
#

ahh, right

analog spoke
wintry solar
#

yeah it's me

analog spoke
#

lol, okey, haha

orchid thunder
#

is there a list ingamer for all suits/modded suits

prime sorrel
#

Help, why is it saying nil

#
        text = {                                             --description text. each line is a new line, try to keep to 5 lines.            
           "When a card is {C:mult}destroyed{}",
            "Add the card back to your deck with {C:chips}+#1#{} Chips and {C:mult}+#3#{} Mult",
            "and grow this joker by {C:chips}+#2#{} Chips and {C:mult}+#4#{} Mult",
            "{C:inactive}(Currently {C:chips}+#1#{C:inactive} Chips and {C:mult}+#3#{C:inactive} Mult)"
        },
        config = { extra = { chips = 0, chip_mod = 20, mult = 0, mult_mod = 5} },
analog spoke
prime sorrel
#

New to modding, I dont actually see it

#
        loc_def = function(self)                              --defines variables to use in the UI. you can use #1# for example to show the chips variable
            return {self.ability.extra.chips, self.ability.extra.chip_mod}
        end
#

This?

#

would it be self.ability.extra.mult, self.ability.extra.mult_mod?

#

yep thats it

analog spoke
prime sorrel
#

ty ty

analog spoke
#

np!

prime sorrel
#

Also is the wording alright? It feels a bit wordy

analog spoke
prime sorrel
#

neat

analog spoke
prime sorrel
#

lol

#

Maybe toss the last line because the second line kinda covers it or vice versa

wintry solar
#

loc_def?

manic rune
#

defense sob

tall wharf
#

is there a better way than this

wild zinc
#

Is there a way to make my Joker increment xyz per skipped blind? I was able to make it trigger on blind skipped, but not for each blind skipped in the run, like Throwback

tall wharf
#

i want to update the blind hud but this call is very unoptimized and lags the game like shit

prime sorrel
wintry solar
#

where did you get it from

prime sorrel
prime sorrel
wintry solar
#

can you link it please

prime sorrel
#

Uhh

#

one sec

#

In the description of this video @wintry solar

manic rune
#

oh is that a new modding tutorial

wintry solar
#

oh my god please do not use that

manic rune
#

wtf is loc def

#

sob

wintry solar
#

that code is literally over 12 months out of date

prime sorrel
#

hm lol, what do you suggest I use

wintry solar
#

this and N's vanilla jokers

#

and then the general smods wiki

bleak coral
#

Anyone know how to make something like imgui w/ mods?

analog spoke
prime sorrel
#

also also

          if self.debuff then return nil end               --if joker is debuffed return nil
            if context.destroy_card then 
                if not context.blueprint then 
                        self.ability.extra.chips = self.ability.extra.chips + self.ability.extra.chip_mod 
                        return {
                            extra = {focus = self, message = localize('k_upgrade_ex')},
                            card = self,
                            colour = G.C.CHIPS
                        }

                end
            end

I want the joker to upgrade itself when a card is destroyed, but it doesnt do that

#

It actually just upgrades itself like 5 timeswhen a card is played

manic rune
#

save to G.GAME

hearty mesa
#

oh woops

manic rune
#

wait i didjt reply

hearty mesa
#

accidentally deleted it

manic rune
#

oh lol

#

yeah, that was towards you

hearty mesa
#

thx

manic rune
#

a lot of things here are wrong/outdated

prime sorrel
#

Okay, what tutorial do you suggest?

manic rune
#

-# change every "center" you see in that video to "card" btw

prime sorrel
#

Even still, Im looking for the specific, heres the code for the trading card:

-- Trading Card
SMODS.Joker {
    key = "trading",
    blueprint_compat = false,
    rarity = 2,
    cost = 6,
    pos = { x = 9, y = 14 },
    config = { extra = { dollars = 3 } },
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.dollars } }
    end,
    calculate = function(self, card, context)
        if context.first_hand_drawn then
            local eval = function() return G.GAME.current_round.discards_used == 0 and not G.RESET_JIGGLES end
            juice_card_until(card, eval, true)
        end
        if context.discard and not context.blueprint and
            G.GAME.current_round.discards_used <= 0 and #context.full_hand == 1 then
            return {
                dollars = card.ability.extra.dollars,
                remove = true
            }
        end
    end
}
#

But it just checks for discards and gives the money

#

there is a context.destroy_card but im not sre how its used

#

Oh I know I can look at the legendary joker

#

Canio

manic rune
#

yeah, id suggest checking there

prime sorrel
#

context.remove_playing_card apparently is the right context

#

I wonder what destroy_card is for then

#

yess it works

manic rune
prime sorrel
#

@manic rune You wouldnt know how to get the data of the destroyed card would you?

#
        if context.remove_playing_cards and not context.blueprint then
            local face_cards = 0
            for _, removed_card in ipairs(context.removed) do
                if removed_card:is_face() then face_cards = face_cards + 1 end
            end
#

I found this in canio but it just checks if the card is a face card or not

manic rune
#

context.removed is a table of all the destroyed cards

#

use for loop to go through it and do stuff in there

prime sorrel
#

okay

bleak coral
#

How do you make a UI mod? Looking for preferrably something that can be moved around like a window.

prime sorrel
#
                    for _, removed_card in ipairs(context.removed) do
                        if removed_card:is_() then found = true end
                        if found then break;
                    end
``` what would I put in is_x()?
split saddle
#

hello it's me again
does the game track jokers obtained this run? if not how do you do that?

prime sorrel
#

well, more like this

                    local found = 0
                    local card_id = 0;
                    for i, removed_card in ipairs(context.removed) do
                        if removed_card:is_() then found = true card_id = i end
                        if found then break;
                    end
next timber
#

what actually are G.TILE_W and G.TILE_H?

#

ok actually more important question, how do you hide the card count/limit of a cardarea?

cyan lagoon
#

why does this not reduce with removed/sold?

#

i'm trying to add a extra choice to booster packs

next timber
#

remove_from_deck not remove_to_deck

cyan lagoon
#

facepalm

prime sorrel
#

Okay so I got this far

#
axolotl_joker = {
    name = "Axolotl Joker",
    text = {
        "When a card is {C:mult}destroyed{},",
        "Return it to the deck with {C:chips}+#1#{} Chips, {C:mult}+#3#{} Mult.",
        "This Joker gains {C:chips}+#2#{} Chips, {C:mult}+#4#{} Mult.",
        "{C:inactive}(Currently {C:chips}+#1#{C:inactive}, {C:mult}+#3#{C:inactive})"
    },
    config = { extra = { chips = 0, chip_mod = 20, mult = 0, mult_mod = 5 } },
    pos = { x = 0, y = 0 },
    rarity = 3,
    cost = 8,
    blueprint_compat = false,
    eternal_compat = true,
    unlocked = true,
    discovered = true,

    calculate = function(self, context)
        if self.debuff then return nil end
        if context.remove_playing_cards and context.removed then
            for _, removed_card in ipairs(context.removed) do
                local card_clone = copy_card(removed_card, nil, nil, G.playing_card or 1)
                if card_clone then
                    card_clone:add_to_deck()
                    G.deck.config.card_limit = G.deck.config.card_limit + 1

                    -- Axolotl Joker upgrades itself
                    self.ability.extra.chips = self.ability.extra.chips + self.ability.extra.chip_mod
                    self.ability.extra.mult = self.ability.extra.mult + self.ability.extra.mult_mod

                    shakecard(self)

                    return {
                        message = localize('k_upgrade_ex'),
                        colour = G.C.CHIPS,
                        card = self
                    }
                end
            end
        end

        if context.joker_main and context.cardarea == G.jokers then
            return {
                chips = self.ability.extra.chips,
                mult = self.ability.extra.mult,
                colour = G.C.CHIPS
            }
        end
    end,

    loc_def = function(self)
        return {
            self.ability.extra.chips,
            self.ability.extra.chip_mod,
            self.ability.extra.mult,
            self.ability.extra.mult_mod
        }
    end
#

But when I destroy a card it kida

#

Stays on the screen

#

I can drag it around

#

but I cant play it

#

Whats going on?

shut crater
#

What's the goal?

prime sorrel
#

Add the card back into the deck when a card is destroyed

shut crater
#

Mmm there might be a helper function I'm forgetting, I know how to do it with vanilla code. Gimme a sec

prime sorrel
#

no rush

#

Lol it stays after the round and I can make multiple

shut crater
#

Yeah I don't think there's a better way to do what you're doing. After you copy the card you need to emplace it into a cardarea. Do you want it drawn to hand or put into the discard pile or put directly into the deck?

prime sorrel
#

We can just place it directly in the hand

#

or literally whatevers easiest

shut crater
#

Actually the answer to that probably depends on where it's destroyed huh

#

Like during a blind vs in the shop

prime sorrel
#

yeah

#

I want it to apply to both

shut crater
#

Well you'll need to context check probably

marble flint
shut crater
#

But regardless choose the cardarea you want the card to go (G.hand, G.deck, etc) and call :emplace() passing in the card

#

(this is from memory, I am on mobile)

marble flint
#

It would also be possible to make an immediate mode wrapper around the game's UI but I don't wanna be the person to do that

prime sorrel
#
                    copy_card:add_to_deck()
                    G.deck.config.card_limit = G.deck.config.card_limit + 1
                    table.insert(G.playing_cards, copy_card)
                    G.hand:emplace(copy_card)
                    copy_card.states.visible = nil

Like this? (Copied directly from DNA Code)

shut crater
#

It calls SMODS.create_card and then does like two lines of code, those two lines are what you need to do

prime sorrel
faint yacht
#

-# If you are making playing cards, SMODS.create_card is not what is needed.

wind steppe
#

does anyone know how tags remove the blind select screen when booster packs are opened?

shut crater
#

(though maybe there's a better way overall)

wind steppe
# wind steppe does anyone know how tags remove the blind select screen when booster packs are ...

right now i have this (should open a pack when the shop after the boss blind is exited)

    calculate = function(self,card,context)
        if context.end_of_round and G.GAME.blind.boss then
            card.ability.extra.active = true
        elseif context.ending_shop and card.ability.extra.active then
            local booster = SMODS.create_card({set = "Booster", key = "p_para_foodpack"})
            G.FUNCS.use_card({ config = { ref_table = booster } })
        end
    end

but the blind select goes over the cards in the pack

hybrid shadow
#

two random questions

  1. what's the cardarea for the unscoring part of the played hand?
  2. what's the #context for the number of scoring/unscoring cards?
digital sun
#

how do you destroy a random card in hand with a joker?
ive gotten the game to detect which card im talking about but im not sure how to destroy it

red flower
prime sorrel
#

All I had to do was

#
                    card_clone:add_to_deck()
                    G.deck.config.card_limit = G.deck.config.card_limit + 1
                    G.hand:emplace(card_clone)
#

And it worked

hybrid shadow
next timber
split saddle
#

hello it's me again
does the game track jokers obtained this run? if not how do you do that?

prime sorrel
#

the game does track that, not sure how tho

split saddle
#

looking @ cryptid source code, it tracks sold jokers this run

wind steppe
#

wouldn't be in base steammodded

split saddle
#

oh ok

wind steppe
#

does anyone know how tags remove the blind select screen when booster packs are opened?

split saddle
#

let me see if i can find how do they do that

#

so that i can maybe try to do it myself?

hybrid shadow
hybrid shadow
red flower
sullen fern
#

i know this sounds stupid but how do i have a joker only appear when cryptid is installed

hybrid shadow
red flower
hard needle
#

What if you could destroy the blind

#

No more eternal poker

wind steppe
#

does anyone know how tags remove the blind select screen when booster packs are opened?

split saddle
#

found the thing i'm looking for, but idk how does this work and i got a few questions
there's card:sell_card() in the source code. does this override or append to the code there?
will it work the same if i write this in my mod's main.lua ?
at the end of this function, it calls sell_card_stuff(self), what does it do here?

#

jokers_sold is initted earlier in the file

wind steppe
hard needle
#

G.GAME.hands["Full House"].played would give me the amount of times full house was played the whole run right

hybrid shadow
red flower
hybrid shadow
red flower
#

cryptid is so big that I actually wouldn't trust that no other mod accidentally creates a Cryptid table

digital sun
#

Gah i wish the wiki told you about this kinda stuff

red flower
wind steppe
#

how would i open a booster pack at the end of the shop without the blind select screen going over it?

split saddle
split saddle
wind steppe
#

so i'd need to make a tag for that

hybrid shadow
split saddle
#

maybe it will come in handy later

hybrid shadow
# wind steppe yes

does your code to summon the booster pack in the first place work with a different context?

digital sun
red flower
wind steppe
digital sun
#

Is there another wiki besides the smods one or am i just dumb and didnt see it

wind steppe
#

but it DOES summon the pack with ending_shop

#

the blind select just goes over it

red flower
wind steppe
#
    calculate = function(self,card,context)
        if context.end_of_round and G.GAME.blind.boss then
            card.ability.extra.active = true
        elseif context.ending_shop and card.ability.extra.active then
            local booster = SMODS.create_card({set = "Booster", key = "p_para_foodpack"})
            G.FUNCS.use_card({ config = { ref_table = booster } })
            card.ability.extra.active = false
        end
    end
digital sun
next timber
hybrid shadow
wind steppe
#

and cryptid is a mess

hybrid shadow
#

like it makes the menu and everything show up manually

wind steppe
#

apparently fortnite balatro has booster tags so im going to look through their code

split saddle
#

what is the property of a card that states if it's a joker?

wind steppe
#

update: fortnite balatro looks to be programmed the same way as cryptid (badly)

red flower
cyan lagoon
#

how do i make this target consumables (so it's compatible with something like code cards in cryptid)?

red flower
cyan lagoon
#

tried

#

or wait

#

goddamnit

#

thunk and his misspellings

wind steppe
#

does anyone know a mod other than cryptid or fortnite balatro that has a booster pack tag?

red flower
#

you can search on the modded wiki maybe

hard mica
#

How can I lock a jokers position until the round ends then it randomizes it's position then it locks again repeat

wintry solar
split saddle
#

nice, i don't know what this means and i don't know what caused it :/

wind steppe
split saddle
#

i'm not using pool

wind steppe
#

balatro rhythm heaven save me

split saddle
#

how the hell do you even debug this?

#

this is way above my paygrade

wind steppe
#

idk

#

this doesn't seem to be a modded error?

#

i've played with these mods before and it hasn't crashed on startup

red flower
wind steppe
wind steppe
#

that being said cryptid is coded horribly

split saddle
glad osprey
#

how do people transfer sprites from aseprite so easily

split saddle
#

wait i'm stupid

#

i wrote rarity = 0 which is not right

#

🤦

analog spoke
#

sorry, didn't mean to make that an @ lol

wintry solar
#

if it doesn't, please let me know

wind steppe
#

does anyone know how i could make a joker that opens a booster pack at the end of the shop (after boss blind is defeated)

#

currently i just have

    config = {extra = {active = false}},
    calculate = function(self,card,context)
        if context.end_of_round and G.GAME.blind.boss then
            card.ability.extra.active = true
        elseif context.ending_shop and card.ability.extra.active then
            local booster = SMODS.create_card({set = "Booster", key = "p_para_foodpack"})
            G.FUNCS.use_card({ config = { ref_table = booster } })
            card.ability.extra.active = false
        end
    end
#

but when the pack opens the blind select screen goes over it

glad osprey
#

maybe make a tag for the booster pack instead

wind steppe
#

steammodded documentation is wholly unhelpful on doing that and i've never made a tag