#💻・modding-dev

1 messages · Page 439 of 1

tight notch
#

im getting this error after making a shader for my edition. i used ionized.fs as a base and converted the rest from glsl. are there any other conversion steps i need?

viral ember
#

The shaders require a position and effect function

#

they don't have to do anything iirc

tall jewel
#

How would I limit the controller to only allow focus on an overlay's elements?

viral ember
#

I'm probably wrong tho

candid sleet
#

ignore the comments being wrong why does this apply the 0.25 to my score instead of scaled xmult?

tight notch
#

how would i add those? i know nothing about shaders so i just used a glsl gui and used find and replace for conversion

candid sleet
#

ah ok

#

thanks that worked but it's also applying the 0.25 xmult after the scaled

#

so now it's just doing scaled xmult like x1.75 and then x0.25

candid sleet
tight notch
#

i think i figured out how to add the position function but i still cant figure out the effect portion

daring fern
candid sleet
#

yeah that worked thanks

#

i wanted to add a food element to this where it self destructs after a certain number of rounds, as it's scaling after each round could i just code it so once xmult is over 3 xmult it SDs?

vague crest
#

bumping this now that i have a tall glass of dr pepper and a kinder mindset

tight notch
#

*position

#

here's the start of it

daring fern
vague crest
#

will do

wraith forge
#

can someone please help me add a custom sound effect to the game? i don't know where or how to register it.

daring fern
tight notch
#
SMODS.Sound {
  key = "key",
  path = "foobar.ogg"
}
wraith forge
#

ty

tight notch
#

make sure to put it in assets/sounds

wraith forge
viral ember
#

Like this right?

#

ofc it's not defined for the sake of laziness

viral ember
#

but this would theoretically retrigger a specific joker twice?

daring fern
viral ember
#

why?

daring fern
viral ember
#

oh

#

what should it be then?

tight notch
wild pine
#

im trying to make a custom hand thats just zero cards for an edge case with a boss blind, and it just isnt registering properly or something, how do you fix this?

#

also iterating through all the hands with for k,v in pairs(G.GAME.hands) do print(k) end doesnt show it in the list either

daring fern
wild pine
#

also when changing the return to be similar to cryptid's none hand return { hand and #hand == 0 and G.GAME.hands["star_nothing"].visible and {} or nil } it gives this instead

wild pine
faint yacht
#

G.handlist?

daring fern
wild pine
#

im not sure if hands need like an extra file for the game to load it properly or if its just like adding jokers in one file

wild pine
#

like in cryptid it has the key as cry_None

red flower
wild pine
#

in the main file, just like how im doing it with jokers

#

hands.lua is in libs

red flower
#

are the other files in libs loading properly

wild pine
#

its the only file in libs and console shows its loading properly yeah

hasty mist
#

what's the sound effect for when an ante increases?

red flower
wild pine
#

like inside pokerHand or just at the top

red flower
#

at the top

wild pine
#

ight

wraith forge
#

hey guys last thing for tonight, I don't know why the description of the card wont work in game. the texture shows up, but the description is an empty box

red flower
#

so it didn't load?

wild pine
#

i just put in the print 1 sec

#

yeah its doin it

daring fern
red flower
wraith forge
wild pine
#

ill try making it visible tho

#

oh wait what the hell

#

making it visible made it show up

vague crest
wild pine
red flower
#

i mean i can see that it exists there in the log

wild pine
#

yeah

#

still doesnt show up in here too

tight notch
#

getting this error when making a shader converted from glsl. what other conversion steps are there?

red flower
lament agate
#

i still need some help

red flower
#

with what

tight notch
#

wait i think it's because float is supposed to be number

wild pine
#

this is gonna be one hell of a rabbit hole to fix

lament agate
daring fern
lament agate
#
    loc_vars = function(self, info_queue, card)
        return { vars = { } }
    end,
    calculate = function(self, card, context)
        if context.after and context.poker_hands and context.poker_hands['Flush'] and #context.poker_hands['Flush'] > 0 then
            local flush_cards = context.poker_hands['Flush']
            local example_card = flush_cards[1]
            if example_card and example_card.base and example_card.base.suit then
                local flush_suit = example_card.base.suit
    
                for _, c in ipairs(G.hand.cards) do
                    if c and c.base then
                        c:set_suit(flush_suit)
                        c:juice_up(0.5, 0.5)
                    end
                end
    
                return {
                    message = "Shrimps are pretty rich.",
                    colour = G.C.SUITS[flush_suit]
                }
            end
        end
    end    
}
#

is this right

#

because this doesnt do anythin

#

g

daring fern
red flower
#

i like kero kero bonito

lament agate
#

hold on

lament agate
tight notch
#

nope, same error after changing all instances of float to number

red flower
lament agate
lament agate
#

i want to change the cards held in hand

#

suits

#

with the suits of the played flush

daring fern
lament agate
red flower
lament agate
daring fern
red flower
floral cobalt
# lament agate ?

where do you find information about G (i want to guess it read game information)

#

i''ve been searchin the git for 30 mins already

#

cant find shit

lament agate
#

thats not a yes or no question smth

floral cobalt
#

.-.

lament agate
#

hold on

#

i forgot where

floral cobalt
#

there must be some information somewhere

#

API

lament agate
#

i just woke up

floral cobalt
#

anything

floral cobalt
red flower
lament agate
#

that

#

UPDATE TH eDAMN WIKI

floral cobalt
#

🥀

lament agate
lament agate
#

it works!!

#

thank you

#

@daring fern @red flower you guys are my savior

tight notch
lament agate
#

i dont think anyone in here ever touches shaders

#

other than insolence guy or baker

tight notch
#

😭

lament agate
#

yeah you're DOOMED 🥀

tight notch
#

where do i find help on this bc i have not found a single helpful resource

#

i would assume someone would know considering you kinda need one for an edition

red flower
#

i just decided to not make editions

tight notch
#

i wouldn't make editions if i didnt think of a really funny joke for one and now im commited

wintry solar
#

I just took the code from a vanilla edition and then wrote what I wanted it to do instead using the stuff in there

#

it probably helped that I hadn't touched shader language stuff for over 10 years

tight notch
#

i just used the smods and love2d docs and converted from glsl

#

it says that it's just changing words but clearly it isn't

#

i have the effects converted but i dont know how to use them or just make it not crash

lament agate
#

you might wanna search it up yourself my fucking god its spinning for 3 minutes already

#

its something like

#

how to import shadertoy shaders into balatro tutorial or something

#

you can also ask the guy there

lament agate
#

he made like

#

20 editions or something

lament agate
#

discord is actually tweaking for me

#

everything runs fine

tight notch
#

the edition im making is pretty specific

#

i dont think i could find it on shadertoy, plus i already converted from glsl which is basically 1 to 1 with love2d's shaders

lament agate
feral tree
#

How do i get a joker to detect when it's been added to your hand? i wanna have a joker that creates a copy of itself whenever it's bought from the shop or summoned by another joker

tight notch
#

the issue is just the formatting of it

#

like the effect function is missing and i dont know how to make it

lament agate
#

he knows shaders

tight notch
#

alr

hasty mist
#

How do you set up mod settings?

#

I'm trying to make a simple toggle for experimental/unstable jokers

high sinew
hasty mist
#

in root?

#

actually i dont think it matters right

daring fern
lament agate
#

is context for when you start a new round a thing

lament agate
daring fern
lament agate
candid sleet
#

trying to make a +20 mult joker that destroys itself after 5 rerolls it is not destroying itself when it reaches 5 rerolls gg

lament agate
daring fern
lament agate
#

like

#

i want them to spawn in my hand

#

and immediately plays it

daring fern
lament agate
daring fern
lament agate
#

thanks

high sinew
#

Can you manipulate decks to have certain blinds? Imma look into it later curious if anyone knows or tried

lament agate
high sinew
daring fern
lament agate
#

damnit

tight notch
#

even after using the shadertoy guide it still crashes, i might give up on this

hasty mist
#

awesome

daring fern
#

It's "Ace" for aces.

high sinew
#

Jack for J Queen for Q King for K

lament agate
#

good to know

#

trying it out rn

high sinew
#

Arguments also same for change_base I think that’s the function name

high sinew
#

Yuh I just checked it is so if u ever wanna change cards use that unless it’s like strength I would suggestion modify rank

hasty mist
#

okay now what

daring fern
high sinew
# lament agate i seeee

Yea I would scour all the files like utility, game objects, and other broad stuff in SMODS it helps to see what it looks like and how it’s being used

#

Teaches you how to build any custom ones needed for mods if so

red flower
hasty mist
#

how do i actually check for config

daring fern
lament agate
red flower
#

"H" should also work

lament agate
#

H?

red flower
#

for hearts

tender blade
#

Hello, I am an actual dumbass, i've looked at some references but there's a lot of shenanigans going on, can someone point me to just changing the language files, i litterally just want to rename 3 planet cards

red flower
unborn bay
#

touhou balatro texture pack

final jewel
#

How are we supposed to get the rank of a highlighted card

wild escarp
#

Seems like quantum enhancements aren't working with cryptid installed for me, anyone have some insight?

tall jewel
#
definition = {
                n=G.UIT.ROOT, config = {align = "cl",colour = HEX("a58547"), minw = 2, emboss = 0.1, r=0.1, padding=0.1, button='your_collection_fishies'}, nodes={
                            {n=G.UIT.O, config={object = FishingMod.FishieButtonSprite}},
daring fern
final jewel
daring fern
wild escarp
#

I'd be willing to try.

tall jewel
#

nevermind I think i got it

daring fern
# wild escarp I'd be willing to try.
function SEALS.get_quantum_enhancements(card)
    if card.ability.soe_enhancements and #card.ability.soe_enhancements >= 2 then
        local quantumenhancements = copy_table(card.ability.soe_enhancements)
        for i, v in ipairs(quantumenhancements) do
            if v == card.config.center.key then
                table.remove(quantumenhancements, i)
                break
            end
        end
        return quantumenhancements
    end
    return {}
end

function SEALS.calculate_quantum_enhancements(card, effects, context)
    if card.debuff then return nil end
    context.soe_extra_enhancement = true
    local old_ability = copy_table(card.ability)
    local old_center = card.config.center
    local old_center_key = card.config.center_key
    local extra_enhancements_list = SEALS.get_quantum_enhancements(card)
    table.sort(extra_enhancements_list, function(a, b) return G.P_CENTERS[a].order < G.P_CENTERS[b].order end)
    for _, k in ipairs(extra_enhancements_list) do
        card:set_ability(G.P_CENTERS[k], nil, 'quantum', true)
        card.ability.extra_enhancement = k
        local eval = {enhancement = card:calculate_enhancement(context)}
        table.insert(effects, eval)
    end
    card.ability = old_ability
    card.config.center = old_center
    card.config.center_key = old_center_key
    context.soe_extra_enhancement = nil
end
``` I have these, you would need to change them around to suit your needs also you need to do some patching.
#
# SMODS.calculate_context()
[[patches]]
[patches.pattern]
target = '=[SMODS _ "src/utils.lua"]'
pattern = '''SMODS.calculate_quantum_enhancements(card, quantum_eval, context)'''
position = "after"
payload = '''
SEALS.calculate_quantum_enhancements(card, quantum_eval, context)
'''
match_indent = true
times = 1

# SMODS.calculate_context()
[[patches]]
[patches.pattern]
target = '=[SMODS _ "src/utils.lua"]'
pattern = '''SMODS.calculate_quantum_enhancements(card, effects, context)'''
position = "after"
payload = '''
SEALS.calculate_quantum_enhancements(card, effects, context)
'''
match_indent = true
times = 3

# SMODS.calculate_context()
[[patches]]
[patches.pattern]
target = '=[SMODS _ "src/utils.lua"]'
pattern = '''SMODS.calculate_quantum_enhancements(card, return_table, context)'''
position = "after"
payload = '''
SEALS.calculate_quantum_enhancements(card, return_table, context)
'''
match_indent = true
times = 1
#

It has many problems though.

lament agate
#

ignore the mult, but you can put play sound in here right?

daring fern
high sinew
lament agate
#

sound or play_sound

high sinew
#

Both prob work

lament agate
#

ill try both

high sinew
#

You can’t return play sound that is a function

#

LOL

#

removes when wrong

daring fern
#

You changed can to can't

high sinew
#

lol

high sinew
#

You just always are trying to prove me wrong so karma can be b

lament agate
#

shh

#

clam down

worthy stirrup
#

CLAM NOOOO

lament agate
#

its really clamplicated

#

on cod

worthy stirrup
#

He was like a brother to me

high sinew
#

Just stating the fax lol consistency shows key

wild escarp
#

No need to get so heated.

lament agate
#

instead of arguing

#

help me

worthy stirrup
#

Instead of arguing, let kill each other

lament agate
#

NO

umbral zodiac
#

isnt that just advanced arguing

worthy stirrup
#

No

#

Shut up, I’ll kill you /j

faint yacht
#

-# Undocumented SMODS.Booster parameter go brr.

daring fern
# lament agate

You are trying to do something related to score when mult doesn't exist.

umbral zodiac
#

oh come on if it was a bit higher jokers wouldnt cover it

lament agate
#

did i miss something in here

worthy stirrup
#

I think you got a bit too much mult

daring fern
lament agate
worthy stirrup
#

I mean, you can, the game just doesn’t like it.

umbral zodiac
lament agate
#

that sucks

lament agate
floral cobalt
lament agate
#

so like

worthy stirrup
#

It’s just a slight bit too much mult in the back /ref

lament agate
#

how do you apply the xmult then

#

i want it so that it puts the xmult AFTER scoring

worthy stirrup
#

After scoring? Like after adding the total up?

daring fern
lament agate
#

oh

lament agate
#

this joker draws and plays the ace of hearts right?

worthy stirrup
#

Yea

lament agate
#

like i want it to happen when it scores

#

or something like that

daring fern
floral cobalt
#

is there any way to read the final amount of chips and mult you get?

lament agate
#

that too

floral cobalt
#

i'm basicall making this

worthy stirrup
#

So after the cards are done scoring, you want the xmult, yes?

floral cobalt
#

but it saves the starting values

daring fern
worthy stirrup
#

Ah okay

#

if I remember correctly, it’s context.joker_main

lament agate
worthy stirrup
#

Seal guy, am I right or am I misremembering

worthy stirrup
floral cobalt
lament agate
#

here's the code

#
    calculate = function(self, card, context)
        if context.setting_blind and not context.blueprint then
            G.E_MANAGER:add_event(Event({
                delay = 0.2,
                func = function()
                    local _card = SMODS.add_card({
                        set = "Playing Card",
                        rank = "Ace",
                        suit = "Hearts"
                    })
                    G.hand:add_to_highlighted(_card)
                    G.FUNCS.play_cards_from_highlighted()
                    return true
                end
            }))
            return {
                sound = "mvan_snowgrave",
                xmult = 99999999999999999999999,
                message = "P R O C E E D.",
                colour = G.C.SUITS.Hearts
            }
        end
    end
}
worthy stirrup
#

You could also just, make another part of it

#

Add another if statement with the new context and move the return with the mult to that

#

And I think it should work

daring fern
floral cobalt
#

alr let me try

lament agate
umbral zodiac
#

yyyyyayy,,.,.,finall'e

lament agate
umbral zodiac
#

no xp bar but i would genuinely rather remake my mod from memory until its identical than make a working progress bar

worthy stirrup
umbral zodiac
lament agate
#

just the sound

floral cobalt
#

and the fac tthat it works scares me

worthy stirrup
#

Oh, I never done anything with sound so i cant help you, sorry

daring fern
wild escarp
#

How would I debuff a specific joker?

daring fern
midnight coyote
#
local get_joker_to_left = function(jokers,card)
    local index
    for i=1, #jokers do
        if jokers[i] == card then
            index = i - 1

        end

    end
    return index or 0
end

local get_joker_to_right = function(jokers,card)
    local index
    for i=1, #jokers do
        if jokers[i] == card then
            index = i + 1

        end

    end
    return index or 0
end

SMODS.Joker {
    key = 'rusty_razor',
    config = {extra = {mult = 3, odds = 15, base_mult = 1, curr_mult = to_big(0)}},
    loc_vars = function(self,info_queue,card)
        return {vars = {card.ability.extra.mult, (G.GAME.probabilities.normal or 1), card.ability.extra.odds,card.ability.extra.curr_mult}}
    end,
    rarity = 2,
    atlas = CHAR.G.jokeratlas.key,
    pos = { x = 67,y=0},
    calculate = function(self,card,context)
        if context.setting_blind then
            if pseudorandom('tetanus') < (G.GAME.probabilities.normal or 1) / card.ability.extra.odds then
                local victim = card
                if not victim then
                    return
                end -- Safety check

                victim.getting_sliced = true
                G.GAME.joker_buffer = G.GAME.joker_buffer - 1

                -- Store reference in local variable for closure
                local dissolve_target = victim
                SMODS.calculate_effect({message = localize("k_nope_ex")},card)
                G.E_MANAGER:add_event(Event({
                    trigger = "after",
                    delay = 2.5,
                    blockable = false,
                    func = function()
                        if dissolve_target and dissolve_target.start_dissolve then
                            dissolve_target:start_dissolve()
                        end
                        G.GAME.joker_buffer = 0
                        return true
                    end,
                }))
            else
                local diss_trg1
                local comb_sell = to_big(0)
                local diss_trg2
                local victim1 = G.jokers.cards[get_joker_to_left(G.jokers.cards,card)]
                local victim2 = G.jokers.cards[get_joker_to_right(G.jokers.cards,card)]
                if victim1 then

                    comb_sell = comb_sell + to_big(victim1.sell_cost)
                    diss_trg1 = victim1
                    G.GAME.joker_buffer = G.GAME.joker_buffer - 1
                    diss_trg1.getting_sliced = true
                end
                if victim2 then
                    comb_sell = comb_sell + to_big(victim2.sell_cost)
                    diss_trg2 = victim2
                    G.GAME.joker_buffer = G.GAME.joker_buffer - 1
                    diss_trg2.getting_sliced = true
                end
                G.E_MANAGER:add_event(Event({
                    trigger = "immediate",
                    blockable = false,
                    func = function()
                        if diss_trg1 and diss_trg1.start_dissolve then
                            diss_trg1:start_dissolve()
                        end
                        if diss_trg2  and diss_trg2.start_dissolve then
                            diss_trg2:start_dissolve()
                        end
                        G.GAME.joker_buffer = 0
                        return true
                    end,
                }))
                comb_sell = comb_sell * card.ability.extra.mult
                print(comb_sell)
                card.ability.extra.curr_mult = card.ability.extra.curr_mult + comb_sell
                return {
                    message = "+" .. comb_sell .. " Mult",
                    colour = G.C.RED
                }


            end

        end
        if context.joker_main then
            return {
                mult = card.ability.extra.curr_mult
            }
        end
    end
}
``` talisman crash, attempt to compare number with table
umbral zodiac
#

you are attempting to compare a number with a table it does not get simpler than that
go check on the line it tells you is the problem and just to_big() both sides of the comparison or something

midnight coyote
#

not helpful

#

iits in common_events.lua

umbral zodiac
#

then something youre doing is likely setting a bignum to a non bignum

midnight coyote
#

oh wait

#

could it be the return val

umbral zodiac
#

usually not

midnight coyote
#

no

#

curr_mult is a big

#

it crashes when i play a hand

umbral zodiac
#

strange

midnight coyote
#

and its a joker problem

#

cause i can play hands just fine without it

#

could it be when i multiple comb_sell by card.ability.extra.mult

#

let me try that

#

nope

#

here's crash log

#

im gonna disable partner

#

it may be partner

#

it was not partner

#

i dunno what im doing

daring fern
midnight coyote
#

common_events.lua:1083?

#
 if amt > 0 or amt < 0 then
        if extra and extra.instant then
            if extrafunc then extrafunc() end
            attention_text({
                text = text,
                scale = config.scale or 1, 
                hold = delay - 0.2,
                backdrop_colour = colour,
                align = card_aligned,
                major = card,
                offset = {x = 0, y = y_off}
            })
            play_sound(sound, 0.8+percent*0.2, volume)
            if not extra or not extra.no_juice then
                if card and card.juice_up then card:juice_up(0.6, 0.1) end
                G.ROOM.jiggle = G.ROOM.jiggle + 0.7
            end
        else

daring fern
midnight coyote
#

in card_eval_status_text

daring fern
#

There is probably a better way though.

midnight coyote
#

i’ll credit you

daring fern
wild escarp
#

What am I doing wrong here? Seems to be not working at all.

if G.jokers and G.jokers.cards then 
    for i = 2, #G.jokers do
        if G.jokers.cards[i].config.center.key == 'j_willatro_silvermirror' then
            local vampire = nil
            if vampire and G.jokers.cards[i-1].config.center.key == 'j_vampire' then
                vampire = G.jokers.cards[i-1]
            end
            if vampire and G.jokers.cards[i+1].config.center.key == 'j_vampire' then
                vampire = G.jokers.cards[i+1]
            end
            SMODS.debuff_card(vampire, true, "j_willatro_silvermirror")
        end
    end
end
primal robin
#

What is happening here

daring fern
midnight coyote
#

odd

#

i’ll just patch it myself then

#

if i figure it out some other way

#

then i’ll just do that

wild escarp
daring fern
tight notch
#

is there way to read up on check for unlock without looking at balatro source code?

tight notch
#

oh that sucks bc i cant see balatro source code

#

7z wont work for me on linux

daring fern
wild escarp
#

What does the source in SMODS.debuff_card do? Can I use it to specifically debuff or un-debuff only from one particular source?

vague crest
#

if i wanted to try and make an enhancement type also considered all suits would i specifically need to use quantum enhancements or is there a way besides having it also be considered a wild card

wild escarp
#

Sweet

glad wasp
#

is there any documentation for talisman?

#

for like compatability and stuff

daring fern
glad wasp
#

not even unofficially?

daring fern
lucid owl
#

...do repeat .. until loops work for jokers, etc? never seen anybody use it but that's a pretty nice lua feature that i haven't utilized (and could)

daring fern
lament agate
#

does it?

lucid owl
daring fern
lament agate
#

yeah

#

damnit

lament agate
daring fern
#

How could one increase all values on a card by 1?

sweet pelican
#

hello everybody, new to modding and I'm looking for a way to make this joker set your money to 10 at the end of the round, I've looked through the game files a bunch and I'm assuming I'm going to have to manipulate the G.GAME.dollars variable but I'm not sure how to go about this? any help would be super appreciated, this is the code I have so far (based on the example jokers I'm learning from)

zenith hedge
#

im horrible at modding what does this mean

daring fern
zenith hedge
#

alr

wind steppe
#

how would i check if a card has any enhancement?

daring fern
daring fern
zenith hedge
#

wdym return an event

daring fern
fierce frost
#

how can i make it return multiple messages?

zenith hedge
#

so do i remove the return part

tepid crow
daring fern
daring fern
tepid crow
fierce frost
#

ok

tepid crow
#

no promises on the timing of your text working out though 🤔

fierce frost
#

anyways, how can i crash the game

#

without the screen that explains why

tepid crow
#

why would you possibly want that

fierce frost
tepid crow
#

I'm wondering if you have any actual good reasons lol

fierce frost
#

none of them are good

tepid crow
#

more so that I can give you a better approach to do what you want to do

fierce frost
#

this joker is designed to put the 'joke' in joker

tepid crow
#

as in, cryptid's crash card?

fierce frost
tepid crow
#

disclaimer that I don't think it's very funny, but love.event.quit() might work

fierce frost
#

very cool

zenith hedge
#

how do i make the images for jokers with a different file than jokers.png

zenith hedge
#

how

daring fern
zenith hedge
#

dont know what i did wrong

fierce frost
#

is there a way that i could make it say something before crashing? without the return, it crashes, with, it doesnt

daring fern
zenith hedge
#

its a consumable

daring fern
zenith hedge
#

and it crashes as soon as it loads

#

the consumable

daring fern
fierce frost
zenith hedge
daring fern
zenith hedge
fierce frost
daring fern
fierce frost
#

damn

#

could you make an example?

lament agate
#

how do you detect a card that is stone enhanced?

daring fern
daring fern
lament agate
midnight coyote
#

how do i check the set of a consumable card

#

in the card object

daring fern
midnight coyote
#

like this?

daring fern
midnight coyote
#

okay great

wind steppe
#

how would i debuff duplicate jokers in a boss blind?

#

doesnt seem like boss blinds have config

feral tree
#

??? any help??

sonic cedar
#

dawg your memory

#

youre using too much memory

feral tree
#

Ah

sonic cedar
#

bumping this

chrome widget
#

Second NES game's ram conditions fulfilled

sonic cedar
#

what.

#

you did what.

midnight coyote
#

how would i grab all of the suits currently loaded

chrome widget
#

The other game is Donkey Kong. The thing I had to finish was doing certain checks on the NES emulator's ram to determine win/loss states for the joker

#

Last game to do this for is Dragon's Lair, though I'm having some issues with getting the NTSC version to boot, so I'm seeing if I can just use the PAL version instead and mess with framerate and audio refresh rate so it plays decent

sonic cedar
#
  1. My jaw did not leave the floor
#
  1. now make every sprite Balatro themed troll_4k
chrome widget
#

I've considered doing sprite editing for this!!! Donkey Kong I probably could easy, though the ability to do rom hacking is unfortunately dependent on what other tools people have made for things

#

One of the biggest issues with Dragon's Lair is that people haven't mapped out its RAM to any decent degree. For TMNT II, I found a half completed one full of errors and did some searching myself in a hex editor

#

So if I want to do sprite editing for TMNT and DL, I probably have to do some mapping myself to find out where sprite info is stored on the rom

sonic cedar
#

it’d be super awesome but also hell

wild escarp
#

Is this not correct for adding wheel of fortune to info_queue for a voucher description? It doesn't seem to be working.
info_queue[#info_queue + 1] = G.P_CENTERS.m_wheel_of_fortune

chrome widget
#

It's c_

rapid stag
#

remind me what the correct nesting structure for dynatext string is? is it

DynaText({[...] string = { { string = 'A' }, { string = 'B' } } })```,
```lua
DynaText({[...] string = { { { string = 'A' } }, { { string = 'B' } } } })``` or
```lua
DynaText({[...] string = { { { string = 'A' }, { string = 'B' } } } })```
fierce frost
#

why does the one on the left not increase the boss blind size but the right one does decrease boss blind size?

chrome widget
#

Blind:disable() recalculates the chips of the blind based on its original config values. It's how The Wall and Violet Vessel reset their chip values when disabled

fierce frost
rapid stag
#

...how would i go about replacing the rarity badge on a joker? cirThink

#

i know that cryptid (and i think also cardsauce?) replace their own mod badges by looking for the colour

worthy stirrup
fierce frost
#

i solved it; my best worse idea now works as intended wait nevermind it's not disabling the blind now

rapid stag
fierce frost
rapid stag
#

weird

fierce frost
#

so it'd just disable the blind as of now and skip over the multiplication of chips

hybrid shadow
#

is there a way for a consumable to affect the chips/mult given by level ups

fierce frost
gusty iron
#

is there any reason this isnt working? It should be retriggering all other jokers

calculate = function(self, card, context)
        
        if context.joker_main then
            if context.retrigger then
                
                return {
                    repetitions = 1,
                    card = retrigger_card
                }
            end
        end

        

        if context.retrigger_joker_check and not context.retrigger_joker and context.other_card ~= self then
            for _, joker in pairs(G.jokers.cards) do
            if context.other_card ~= self then
                if context.other_card.bptarget and context.other_card.bptarget ~= 0 then
                    return {
                        repetitions = 1,
                        card = joker
                    }
                else
                    return {
                        repetitions = 1
                    }
                end
            else
                
                return nil, true
            end
            end
        end
    end
hybrid shadow
#

ig i should also ask if its possible to change the number of level ups a planet gives

gusty iron
#

wait

#

i think i figured it out

fierce frost
#

ok wait can someone tell me why this works

sonic cedar
#

can someone tell me how to save a joker’s own key to a table within the joker?

thorn bough
#

My joker gains a random amount of mult when playing a hand. Anybody have any idea why?

merry raven
#

How do you make an enhancement trigger its bonuses when it stays in hand, similar to Steel Card
Waded through Balatro's source code for Steel Card and found nothing but configs and parameters instead of the actual functionality

subtle merlin
merry raven
#

Chips

#

hang on let me try something

sonic cedar
#

does h_chips work or no

thorn bough
# sonic cedar what’s happening here

That, somehow, increases the Emult value. Not the visible one, but the actual one. No, they are not the same. No, I haven't the slightest clue how they got seperated in the first place.

sonic cedar
#

what’s your loc txt

thorn bough
merry raven
sonic cedar
#

truth nuke

subtle merlin
#

I'm trying to have a joker remove cards scored with a certain enhancement but no matter what i try it always gives me this error no matter where i put return = { remove = true }

#

and i know it's only the return crashing it and nothing else bc it works without it

clear yoke
#

turns out the game crashes with just that mod

sonic cedar
clear yoke
#

pretend i never said anything

thorn bough
subtle merlin
fierce frost
#

do we think this is a fair effect for an uncommon (i will take literally any suggestions as to how to nerf this, this is way too strong)

rapid stag
#

yeah, disabling all boss blinds is incredibly strong. some mods even go out of their way to penalise boss blind disabling because of how strong it is conceptually.

#

you should also copy chicot's wording for that part of the ability, too

thorn furnace
#

Isn't doubling all blind requirements just plasma deck

fierce frost
fierce frost
#

i very briefly saw one of my other jokers and i just see this on my screen for like half a second

rapid stag
#

...where... where is the code that applies the rarity badge to a joker...?

hasty mist
#

What happened here??? it was JUST working??? i havent touched this code in days

hasty mist
subtle merlin
#

Oh it's UI, have fun with that

hasty mist
#

😭

subtle merlin
#

-# it's been an hour of the same fucking error im growing annoyed of this shit

hasty mist
#

oh my fucking god this makes zero sense

#

this code worked just fine twenty minutes ago

#

something this code is identical to how it works in cryptid's oil lamp

#

and also, again it worked twenty minutes ago

#

i have not even opened this file in days

subtle merlin
#

have you not touched anything in the code?

hasty mist
#

nothing

#

the file has not even been opened recently

#

like

subtle merlin
#

try restarting your computer and/or updating SMODS and Lovely, sometimes perfect code breaks for no reason at least in my experience

hasty mist
#

alright

manic rune
#

chicken jockey

manic rune
hasty mist
manic rune
#

can you show me the entire code

hasty mist
#

oh i think i fixed it

#

i reinstalled smods (i already had the latest commit, but doing this fixed it anyways)

manic rune
#

huh

#

first time seeing a syntax error from your mod fixed by reinstalling/updating smods

#

guess anything can happen at this poitn

hasty mist
#

cosmit bitflip /s

#

anyways, cryptid server is dead so

#

does anyone know how to banish a card?

daring fern
hasty mist
#

yeah, but the code for delete is so incredibly complicated i dont even know where to start with it

#

not the most simple thing ever

daring fern
#

I think this is the main part:

subtle merlin
formal parrot
#

Hello modding devs , i hope you have an amazing day today

brazen tusk
#

My pc is in a storage container rn so I cannot make my mod 😭

runic pecan
#

How many cookies should a cookie jar contain?
(asking this because 30 is a little too few)

cerulean bane
#

50? maybe 100 if you’re really hungry (or if you’re vv)

hasty mist
#

oh fuck i think it worked???

tall wharf
#

wh

hasty mist
#

holy shit me when a consumable actually works first try

rapid stag
daring fern
rapid stag
rapid stag
daring fern
hybrid shadow
daring fern
hybrid shadow
#

alr

hasty mist
#

how do you add a consumable category?

daring fern
lament agate
#

how do you detect a card being retriggered?

daring fern
runic pecan
lament agate
lament agate
runic pecan
merry raven
#

Does anybody know how to spawn sprites on the screen? Where would I start if I want to:

  • display sprites taken from an atlas
  • use conditionals that will change those sprites' textures
  • remove those sprites
  • consider them a "card" in order to use animations such as flip() and juice_up()
lament agate
hasty mist
#

this seems like a pretty easy crash to fix, wondering what i did wrong here

runic pecan
# lament agate so here's what I'm planning, a joker that gains certain mult or chips if there's...

Then I'd suggest if context.individual and context.cardarea == G.play then if context.other_card.scored then context.other_card.retriggered = true else context.other_card.scored = true end end if context.after then local no_retrigger = true for _,v in ipairs(context.scoring_hand) do v.scored = nil if v.retriggered then no_retrigger = false v.retriggered = nil end end if no_retrigger then [upgrade] end end

runic pecan
hasty mist
manic rune
#

why is consumeabletype key "anomalous", but in the consumable's set its "Anomalous"? 🤔

hasty mist
#

dw about that extra comma i already fixed it

manic rune
#

also, you might want to check if it needs mod prefix too, i forgot if it needs that

hasty mist
#

about what you mean

daring fern
manic rune
#

i see

hasty mist
#

oh i think i see

#

you were right

#

case issue

merry raven
#
if splinter_of_verity then
                -- Limit rank pool to face cards and Aces (11-13)
                local random_rank_index = math.random(11, 13)
                local new_rank = SMODS.Rank.obj_buffer[random_rank_index]
            else
                -- Normal randomization
                local random_rank_index = math.random(1, #SMODS.Rank.obj_buffer)
                local new_rank = SMODS.Rank.obj_buffer[random_rank_index]
            end

So I have made a card that randomizes its suit and rank every time you score it, and I have made a Joker that limits its pool of ranks to face cards and Aces
But how do I take into account into potential modded ranks? Is there even a way to detect face cards and Aces more modularly?

daring fern
merry raven
#

Is there documentation on pseudorandom somewhere

daring fern
#

If something is a vanilla function it is likely not documented.

merry raven
#

Oh it's a vanilla function?

#

Huh

hasty mist
#

so instead of math.random(1, #SMODS.Rank.obj_buffer) it would be pseudorandom("string", 1, #SMODS.Rank.obj_buffer)

#

Can decks not use ability?

daring fern
hasty mist
#

what should i do instead?

#

this is what im trying to do

hasty mist
merry raven
#

What's the difference between pseudorandom and pseudorandom_element?

hasty mist
#

i have no idea 😭

daring fern
daring fern
hasty mist
#

i just did this instead lmao

merry raven
daring fern
hasty mist
#

does it?

daring fern
hasty mist
#

well yeah

hasty mist
#

its only supposed to happen on the very first call

#

first time its called its set to true

#

then never gets called again

#

that is intended

daring fern
hasty mist
#

oh i see what you mean

#

that is troubling

#

ughhh

#

oh ik how to fix this

merry raven
# daring fern Yes.

Hmm don't think I'm doing it right, seems like it only returns numbers
I went from this
local selected_enhancement = void_enhancements[math.random(#void_enhancements)]
to this
local selected_enhancement = void_enhancements[pseudorandom_element(#void_enhancements, pseudoseed('void_enhancement'))]

daring fern
merry raven
#

Oh damn

stoic fulcrum
#

can context.other_joker be called upon doing something specific (ie, selling a card or starting blind) or does it only work after scoring?
(would also like an example if it is possible)

merry raven
unborn bay
hasty mist
#

ive figured it out

unborn bay
#

they have effect then effect.config which points to its config

hasty mist
#

i used a global variable instead

unborn bay
hasty mist
unborn bay
#

why not just put that in apply lmao

merry raven
#

Alright, thank you!

hasty mist
#

i realized the issue

hasty mist
#

and it does not work

unborn bay
#

just put it in an event then

hasty mist
#

i can try later

candid sleet
#

none of these are even printing the joker just does nothing oops. any suggestions? trying to convert played glass cards into base + polychrome

stoic fulcrum
burnt cairn
#

looking at the midas mask code, at for k, v in ipairs(context.scoring_hand) do what does k represent

merry raven
# daring fern `pseudorandom("seed", 1, 10)`

Alright hang on I'm trying to get the hang of using pseudorandom more

Is this correct, from
local random_joker = G.jokers.cards[math.random(1, #G.jokers.cards)]
to
local random_joker = pseudorandom_element(G.jokers.cards, pseudoseed('arc_joker'))

unborn bay
#

if you want an effect to depend on another joker use SMODS.find_card

merry raven
# daring fern Yes.

Do I need to specify a "1"? Like this example: pseudorandom("string", 1, #SMODS.Rank.obj_buffer)

unborn bay
burnt cairn
unborn bay
#

k is the index

merry raven
#

Gotcha

burnt cairn
#

ok cool 🫡 wasnt sure

merry raven
#

local random_joker = pseudorandom_element(G.jokers.cards, 1, pseudoseed('arc_joker'))
Seems about right

hasty mist
#

i dont think my operator calculations are entirely accurate

stoic fulcrum
daring fern
hasty mist
#

i only got a few million on a flush using pentation

merry raven
#

Sorry if I keep posting here, I need to really make sure that it's correct so I know what to change the hundreds of math.randoms in my code without agonizingly testing every single one of them

burnt cairn
#

im not using anything atm im just trying to understand the midas mask code

stoic fulcrum
#

(i feel like i've asked the "detect if a specific joker is sold/destroyed" question like 10 times and i haven't gotten a proper answer monkedies )

burnt cairn
simple helm
#

I don't have access to it rn

burnt cairn
#

specific joker

#

not any card nom

stoic fulcrum
stoic fulcrum
daring fern
hasty mist
#

ok there is something wrong here for sure, 85^^^^8 is definetely way larger than that

simple helm
hasty mist
#

i am so confused

subtle merlin
daring fern
stoic fulcrum
loud gorge
#

why does it create a lovelyignore?

simple helm
daring fern
daring fern
stoic fulcrum
#

SMODS.destroy_cards(card) specifically @daring fern
it does not work with trying to call for a joker, it just destroys the played hand

daring fern
#

SMODS.destroys also doesn't exist.

stoic fulcrum
#

fixed

stoic fulcrum
daring fern
stoic fulcrum
daring fern
#

context.destroy_card is for destroying playing cards.

merry raven
#

Are Aces always 13 when I use card:get_id(), regardless if there are modded ranks or not?

stoic fulcrum
# daring fern No.

then i'd have to use SMODS.destroy_cards(card)?
i'm assuming by adding context and hooking Card:remove()
or for the ceremonial dagger effect, i'd have to call getting_sliced?

misty gorge
#

Yeah I still don't know how to fix this

stoic fulcrum
#

then how do i call context for a specific joker being destroyed think2

stoic fulcrum
#

would i add this to calculate or have it separate? (like the four fingers function)

#

i'm gonna assume i just add it to the calculate, let's try

merry raven
#
local random_rank_index
            if splinter_of_verity then
                random_rank_index = math.random(11, 13)
            else
                random_rank_index = pseudorandom("dissected_rank", 1, #SMODS.Rank.obj_buffer)
            end

I know it's using math.random right now but there's another problem

I'm a bit confused on how I'm gonna go about using rank.face to force my rank-changing enhancement to use faces only and also lump in a way to include Aces too

stoic fulcrum
#

ok outside of calculate it is

daring fern
burnt cairn
#

am i reading this right

daring fern
merry raven
daring fern
merry raven
#

Oh the ids from get_id?

burnt cairn
#

so what's being made nil in this function then

daring fern
burnt cairn
#

i will assume i dont need to know what that is 🫡 thanks

#

im reading the rest of it correctly right

merry raven
#

Oh no wait it's literally just the key of the rank and not the id

daring fern
merry raven
# daring fern `SMODS.Ranks[key].face`

But I still don't understand what to put in the key field of SMODS.Ranks[key].face because I can't really account for every single mod now and in the future that has custom face ranks
What if people made more than the usual 3 face cards?

candid sleet
#

this isn't doing anything what am i missing here? (just trying to make them lose the glass for now, will try do the polychrome once i've got the first part)

daring fern
merry raven
#

Alright I'll take a look

burnt cairn
#

games crashing when i enter a blind nom
[SMODS GRATLATRO "main.lua"]:352: bad argument #1 to 'ipairs' (table expected, got nil)

#

im sure its something very silly im just missing

daring fern
burnt cairn
#

at the start of the hand before the cards are scored

#

ie the same as midas mask

daring fern
burnt cairn
#

so i was just missing a context goodvibes

#

easy

loud gorge
#

is there a way to retrigger the tutorial? I want to add a card that does that along with other multipliers, but with the tutorial not affecting gameplay.

loud gorge
paper zealot
# daring fern Yes.

I get that this is just a bit that you do when someone asks an open-ended yes-or-no question, but it's not super helpful

loud gorge
#

oh :/

candid sleet
#

ok when it goes to make the card polychrome it insteads overlaps a standard +4 mult joker sprite over the card and then it crashes?

paper zealot
#

You can try it with DebugPlus by running eval G.FUNCS.start_tutorial() in the console

loud gorge
loud gorge
#

thanks zawg

merry raven
#
...
local new_rank_key = pseudorandom_element(face_ranks, pseudoseed('dissected_rank'))
                local new_rank = SMODS.Ranks[new_rank_key]
                print("New Rank Key: " .. new_rank_key)
            else
                local new_rank_index = pseudorandom_element(SMODS.Rank.obj_buffer, pseudoseed('dissected_rank'))
                local new_rank = SMODS.Rank.obj_buffer[new_rank_index]
                print("New Rank Index: " .. new_rank_index)
            end

            local new_rank_id = [something to get the ID of new_rank]

How do I fetch the ID from a rank key? card:get_id() doesn't really work because there are no references to cards here

merry raven
# daring fern `SMODS.Ranks[key].id`

Unfortunately got an error
I did this: local new_rank_id = SMODS.Rank[new_rank].id, but it seemed like it couldn't capture the rank keys? It just did in the print messages I added before, but not in here?

merry raven
#

Oooooh

#

Still nothing, maybe I need to do tostring to add quotation marks to the key?

merry raven
# daring fern `SMODS.Ranks`

Yeah nah still doesn't work, even with or without tostring
With tostring: local new_rank_id = SMODS.Ranks[tostring(new_rank)].id
Without: local new_rank_id = SMODS.Ranks[new_rank].id

merry raven
# daring fern What is `new_rank` here?
local random_rank_index
            if splinter_of_verity then
                local face_ranks = {}
                for k, v in pairs(SMODS.Ranks) do
                    if v.face or k == "Ace" then
                        table.insert(face_ranks, k)
                    end
                end
                local new_rank_key = pseudorandom_element(face_ranks, pseudoseed('dissected_rank'))
                local new_rank = SMODS.Ranks[new_rank_key]
                print("New Rank Key: " .. new_rank_key)
            else
                local new_rank_index = pseudorandom_element(SMODS.Rank.obj_buffer, pseudoseed('dissected_rank'))
                local new_rank = SMODS.Rank.obj_buffer[new_rank_index]
                print("New Rank Index: " .. new_rank_index)
            end

new_rank is the rank key, and there are two cases, one for if the "Splinter of Verity" joker is present and one without

merry raven
#

"New Rank Index" is when it doesn't have Splinter of Verity, "New Rank Key" is when it does

#

Misleading print logs, I know, but they're still both keys

candid sleet
#

how would i make info queue include info for polychrome too? new to using info queue

snow vale
#

it's a challenge

loud gorge
#

like something like guarantee a joker in shop or something

candid sleet
#

i use the debugplus mod i think it's called

loud gorge
#

can u send a link to it

formal parrot
#

Google “debug plus balatro”

#

First github link

loud gorge
#

alrighty

formal parrot
#

Its the best tool for making mods

#

Lets you spawn jokers

#

Add money
Add joker slots
Change seal / edition / etc

#

You name it

#

[hold tab for information]

sand sandal
formal parrot
#

Code blocks

sand sandal
formal parrot
sand sandal
#

chat remember to use neovim to edit your code

formal parrot
#

Void

#

Like my lige

#

Life

sand sandal
#

my beloved

formal parrot
#

I use int

#

And return 0 like a mf

loud gorge
#

anddd it crashed

formal parrot
#

It will crash

#

A lot

#

99% of the time if you’re me

merry raven
# merry raven ``` local random_rank_index if splinter_of_verity then ...

@daring fern Never mind, I managed to fix it

if context.cardarea == G.play and context.main_scoring then
            local original_rank_id = card:get_id()
            
            local random_suit_index = pseudorandom_element(SMODS.Suit.obj_buffer, pseudoseed('dissected_suit'))
            local new_suit = SMODS.Suit.obj_buffer[random_suit_index]
            
            local new_rank_key
            if splinter_of_verity then
                local face_ranks = {}
                for k, v in pairs(SMODS.Ranks) do
                    if v.face or k == "Ace" then
                        table.insert(face_ranks, k)
                    end
                end
                new_rank_key = pseudorandom_element(face_ranks, pseudoseed('dissected_rank'))
            else
                local new_rank = pseudorandom_element(SMODS.Rank.obj_buffer, pseudoseed('dissected_rank'))
                new_rank_key = tostring(new_rank)
            end
            
            local new_rank_id = SMODS.Ranks[new_rank_key].id
            
            card:flip()
            SMODS.change_base(card, new_suit, new_rank_key)
formal parrot
#

Check your debug plus

loud gorge
#

i mean i just put the debug in the mods folder and it exploded

sand sandal
formal parrot
#

Make sure it’s not nested

#

(Folder inside of a folder )

loud gorge
#

it was

feral tree
#

Does Info_queue work on cards and can i have multiple?

formal parrot
formal parrot
#

Ofc

sand sandal
#

im based like that

formal parrot
#

Technically it works on enhanced cards

formal parrot
feral tree
formal parrot
#

I think you need an enhancement tho

sand sandal
formal parrot
#

RUST dev?

#

like the game rust

sand sandal
#

the language

formal parrot
#

Oh lmfao

#

My bad

#

Not familiar with rust

#

What is it mainly used for

sand sandal
# formal parrot My bad

thinking of making a simple balatro mod w/ rust but maybe ffi may incurs a lot of performance penalty

shell timber
#

would be quite silly

formal parrot
#

:P

#

Isn’t balatro coded in lua

#

How are you gonna do that :S

paper zealot
paper zealot
formal parrot
paper zealot
candid sleet
#

when using SMODS.add_card how do you prevent it adding a consumable while at max consumable slots used?

sand sandal
candid sleet
#

thanks

snow vale
#

how can i create a custom rule for a challenge?

formal parrot
#

restrictions={}

#

And rules={}

#

Just check the wiki

sand sandal
sand sandal
#

(iykyk)

snow vale
#

yeah, but, how do i create a functional one?

formal parrot
#

We already have a hsr one

sand sandal
formal parrot
#

In development

#

I believe thats hsr

#

No?

sand sandal
sand sandal
formal parrot
formal parrot
formal parrot
sand sandal
# formal parrot Interesting

concept edition:

  • oirginium card: x1.5 mult, destroyed after 3 turns, when destroyed, spread effect to nearby cards
formal parrot
#

That’s a really interesting concept

sand sandal
formal parrot
#

I never thought about this before

formal parrot
sand sandal
formal parrot
#

3 ?

sand sandal
formal parrot
#

Thats 3 more than genshin impact

#

Lmfao

sand sandal
formal parrot
gaunt thistle
sand sandal
#

🃏

#

civitas sankta

formal parrot
#

Can you tell me the story of the anime ?

paper zealot
formal parrot
#

I might watch it

sand sandal
subtle merlin
#

Arknights was mentioned

sand sandal
#

(too bad im shit at drawing)

crisp coral
#

arknights is mentioned

sand sandal
#

arknights has less sleeper agents than LC

formal parrot
crisp coral
#

oh cmon

subtle merlin
sand sandal
#

@subtle merlin did i described it accurately 😭

subtle merlin
#

Idfk I don't play for the story

formal parrot
#

70% of the game thrown out of the window

subtle merlin
#

I only know the lore of chapter 0, 1, and 14

formal parrot
#

Just put the fries in the bag

pastel kernel
#

how do you make legendary joker portraits

sand sandal
#

anyway here's some of my jokers idea:

  • Amiya [Rare]: gains 0.1x mult for each destroyed originium cards
  • DWDB-221E [Uncommon]: creates originium
pastel kernel
#

first the background, then the joker dude

sand sandal
subtle merlin
#

Summarized lore:

Prelude: You're a doctor!
0: Oooo, bad guys!
1: More bad guys!
2: Drone strikes
3: Drone strikes and GRASS!!
4-7: irrelevant
8: welcome to Hoth!
9-13: idk
14: S T A R E I N T O T H E F A C E O F G O D

subtle merlin
sand sandal
sand sandal
pastel kernel
subtle merlin
#

several people are typing

sand sandal
unborn bay
#

how many gacha game balatro mods out there

#

we got genshin we got blue archive

sand sandal
pastel kernel
unborn bay
#

has someone made a fate one yet

subtle merlin
sand sandal
sand sandal
subtle merlin
#

I need to stop going from Arknights to CRK to Arknights bc I miss a lot of lore stuff

#

Is Wis still broken?

sand sandal
loud gorge
#

why is the description not showing up?

                name = "Jimbo",
                text = {
                    {
                        "test",
                   
                    }
                },
            }
         },
        }, ```
subtle merlin
loud gorge
#

what does that mean

sand sandal
loud gorge
#

is that like another file i need to change?

subtle merlin
subtle merlin
loud gorge
#

okok

sand sandal
#

Balark

subtle merlin
subtle merlin
sand sandal
#

and wis

#

{C:flex}god{}

subtle merlin
sand sandal
candid sleet
#

how do i make this read the chances of it happening?

#

it should read 1 in 4 and the 1 in 4 is working fine i just dont know how to get it to read

sand sandal
subtle merlin
candid sleet
#

it needs to go up when you have oops all 6s though right?

sand sandal
#
loc_txt = {
        name = 'Gros Michel 2',
        text = {
            "{C:mult}+#1#{} Mult",
            "{C:green}#2# in #3#{} chance this",
            "card is destroyed",
            "at end of round"
        }
    },
candid sleet
#

ah thanks

subtle merlin
#

-# I'm still out here saying Siege is good like it's the fucking 3rd anniversary or smth x3

crisp coral
subtle merlin
sand sandal
#

I also plan some decks for arknights countries

crisp coral
#

5 is so many

sand sandal
#

or vouchers?

loud gorge
#

im still confused on how to add descriptions

subtle merlin
sand sandal
loud gorge
sand sandal
#

maam your ears are big as hell

subtle merlin
#

sigh I'm going to spend the next 2 and 1/2 months playing it constantly before burning myself out, aren't I?

unborn bay
#

this channel is becoming modding chat 2 with all this offtopic discussion

subtle merlin
#

Yea, sorry

subtle merlin
stoic fulcrum
#

i've managed to hook card.remove() but i've hit a bit of a snag
how would i make it detect that only a specific card/joker gets destroyed? the way it seems to work right now is that it triggers the upgrade when any joker is destroyed which is not what i want
if i try to add context.card.config.center.key to the calculate call or the card.remove() hook it crashes because either context is a nil value, or card is a nil value

sand sandal
subtle merlin
loud gorge
stoic fulcrum
#

i tried using SMODS.find_card but that makes it seem like the effect only works when the joker is present, which means the effect also triggers if the joker is present and a random unrelated joker is destroyed

#

adding context.card (or anything similar like other_card) to make context.card.config.center.key not crash just seems to break the function altogether

stoic fulcrum
#

why is this on balatro modding 😭

subtle merlin
subtle merlin
subtle merlin
loud gorge
tawdry oriole
#

how could i change the gamespeed after entering a boss blind?

candid sleet
#

is there a template anywhere for a blueprint joker? i tried just copying over the stuff from vanilla but i don't really understand it too well