#💻・modding-dev

1 messages · Page 460 of 1

scarlet imp
#

Most college students in the US graduate in 8 semesters

drowsy heath
#

we do it in terms which are normally like 6 - 8 weeks i think idrk

drowsy heath
unkempt thicket
#

I got to apply to a collage still 😅

scarlet imp
scarlet imp
drowsy heath
#

this is just a hobby i do mechanics

#

i have an SEG diploma in motorvehicle so i have the qulification to work on cars and motorbikes

scarlet imp
# drowsy heath this is just a hobby i do mechanics

that makes sense. Jobs like Mechanics, Welding, etc are what we call "trades" in the US and students typically take around 1-2 years in trade school if they go. 4 years/8 semesters is more typical of a Bachelor's Degree (academic field), which is what I'm doing

unkempt thicket
#

I know a lot regarding code, though its not what i want as a job. I'd like to be a electronical engineer, but in case i'm unable to i did take many classes in different subjects as backups.

drowsy heath
#

i was either going to do 1 of 3 things which were erm very different geology music or mechanics

#

in the end mechanics was my best option

#

but i do have my main hobby of being pc smart if its pc physical or software wise i know a fair bit

scarlet imp
#

I decided to do Computer Science because after self-teaching myself JavaScript (mostly for Minecraft too lol) I realized I really like coding and working on projects. I started modding Balatro this summer because I missed having a coding project to work on, and this filled that for me perfectly, especially since I love Balala

unkempt thicket
#

I enjoy coding because you can make pretty much anything with it, and i quite like making things.

drowsy heath
#

balatro became too much of an addiction for me, i was bored and saw it on my phone played a little then i havnt stopped in over 5 months

sturdy compass
#

Hey I'm trying to draw a shader on a card's soul sprite if it has a shader attached to it, but this is no good. Any ideas?

drowsy heath
#

clearly everyone has the balatro virus from day 1

scarlet imp
drowsy heath
scarlet imp
#

I would also probably be addicted to Balatro if I didn't have this game

drowsy heath
#

i love boi

unkempt thicket
#

I only have like 300 hrs on tbol

lament agate
#

both lua

scarlet imp
lament agate
#

you'd be a demigod at modding balatro if you modded tboi and roblox before

drowsy heath
#

im starting on balala and moving to roblox later

scarlet imp
unkempt thicket
#

I made some pretty cool stuff on balatro but balatro's the first game i've published mods for.

#

I'm also surprising good at balatros UI

drowsy heath
#

imagine all the top like 5 balatro mod devs came together to make a mega mega mod, complete rehaul

#

would be epic

scarlet imp
#

that's pretty muchy what SMODS is, a modding APi

#

worked on by alot of the Cryptid devs I'm pretty sure

unkempt thicket
#

I wonder who is considered the top five, personally I'm working on five mods two I'm the only dev.

drowsy heath
#

wait so other people work on ur mods with u

scarlet imp
unkempt thicket
#

Yea, AIJ and Balatro inscribed

drowsy heath
#

oh damn i have me myelf and i and i know nothing coz i only descovered how to code lua 6 days ago

unkempt thicket
#

I felt that for well over half a year

drowsy heath
#

i am going big

unkempt thicket
#

I made 30 jokers in a day for AIJ before.

drowsy heath
#

WHAT

#

how

unkempt thicket
#

Beat my record of 22

scarlet imp
#

I'm making 11 Jokers today lol

drowsy heath
#

i mean first day i made 15

scarlet imp
#

oh no... he's here

drowsy heath
#

that was my cap of most per day

red flower
#

i think my record is like 20

drowsy heath
#

whos here

frigid cargo
#

how do i make it so whenever i open a booster pack it doesnt say error in the bottom?

unkempt thicket
#

Went from 150 to 200 in like four days

drowsy heath
#

HOW MANY JOKERS ARE IN YOUR MOD

scarlet imp
#

jokes btw

unkempt thicket
#

There's 200 in AIJ though i joined a little later in development

drowsy heath
#

i have 1 artist working for me they would cry if i said i wanted 200 jokers

#

and the guy in charge of joker ideas

#

he would cry

scarlet imp
#

My plan for the TBoI mod is to add a Joker for every item in Isaac, which is over 600. Planning on doing it all myself over the course of <indeterminate amount of time>

drowsy heath
#

then having to code all 200 i would die

unkempt thicket
drowsy heath
#

DAYUMMM

red flower
#

that's crazy

drowsy heath
#

yeah my artist is erm new to digital art....

frigid cargo
scarlet imp
#

where do you guys find artists? I'm looking for people to help me with the art for my mod

calm kiln
#

how would i code a joker to let me win the game if i put in the konami code

drowsy heath
#

my group of 3, the ideas the coder and the artist all have no idea what we are doing

red flower
unkempt thicket
#

I work on the art for my personal mods

#

I only do code for AIJ and Inscribed

#

Both for Familiar and Sigil

drowsy heath
runic pecan
#

Does Pareidolia affect Familiar's rank pool?
As in, does having Pareidolia make Familiar possible to add cards with ranks other than JQK?

drowsy heath
#

hold on let me show u

serene granite
#

is there a way to make a joker detect if its in the boss blind to change the amount it scores that blind?

drowsy heath
#

like that

unkempt thicket
# drowsy heath

You remove the pixel corners, also usually the art size is 71x95

scarlet imp
serene granite
#

ohhh thank you so much you two

scarlet imp
#

whatever behavior you want it to have for bosses only, put it here

drowsy heath
lament agate
#

whats the res

#

for vouchers

unkempt thicket
#

It's the same as other cards just centered

#

Like tarots

lament agate
#

71 x 95?

#

thanks

unkempt thicket
calm kiln
#

how do i go about triggering jokers on keyboard presses and triggering enhancements on mouse clicks

lament agate
#

how do you redeem a voucher using debugplus

daring fern
lament agate
daring fern
lament agate
#

damnit

iron burrow
#

I am not great at reading these logs. There seems to be a lot of missing data from the line numbers and function calls '?'. Is there a way to trace this back to the execution of injected code?

scenic vapor
#

its my first time modding, where can i find balatro mods? (looking for cryptid and pokermon)

scarlet imp
#

look for lines that say "at file" or "at line" and look into them. Usually there's a lot so it will take time, but that's always the first place I look

scarlet imp
scenic vapor
#

ok, i found the cryptid mod, how do i install it?

drowsy heath
scenic vapor
#

thank you!

scarlet imp
#

like I said, never installed any other mods personally. It probably is easier but since I like having control I just downloaded them all using git clone

unkempt thicket
flat mist
#

Hy guys I was wondering is there any anime inspired balatro mod

drowsy heath
scarlet imp
#

bro is always here

unkempt thicket
drowsy heath
#

yk what we need, a channel where people who dont know how to code can request jokers or features for mods for devs to take inspo

#

bcoz i make jokers so slow bcoz i dont have ideas

iron burrow
unkempt thicket
#

That holds me back occasionally as well

drowsy heath
plush depot
#

anyone help?

drowsy heath
#

you need talisman

unkempt thicket
#

Probably why i was fast at coding for AIJ, theres just a bunch of ideas and art

drowsy heath
plush depot
drowsy heath
plush depot
drowsy heath
#

is it the version needed for cryptid

plush depot
#

only cryptid and talisman are enabled right now

plush depot
daring fern
glass scaffold
unkempt thicket
plush depot
daring fern
unkempt thicket
#

Nevernamed is fast and good at art

drowsy heath
#

wait so u have art for jokers that dont have ideas

unkempt thicket
#

Have you seen AIJ?

drowsy heath
#

no...

glass scaffold
drowsy heath
#

how do u have art for jokers that dont exist tho where was the ideas for the art

plush depot
#

work now

drowsy heath
#

oh

glass scaffold
scarlet imp
#

I like doing art first bc I can't stand looking at placeholder cards

unkempt thicket
#

The prior tends to be what most of the mods i work on do

drowsy heath
#

i mean i dont mind it, it was better than the blank white i had and my artist has only just yesterday replied to my lasr request for like 4 jokers they havnt even started

scarlet imp
#
local stone_card = SMODS.create_card({
    set = "Base",
    enhancement = "m_stone",
    seal = SMODS.poll_seal({ "Gold", "Red", "Blue", "Purple" }),
    area = G.discard
})

trying to create a stone card with a random seal, but the seal isn't getting added, any ideas?

lament agate
#

does someone have

#

the blind template

daring fern
lament agate
#

actually

#

i think modding resrouce has it

lament agate
#

yeah

lament agate
#

is force_update a thing?

daring fern
lament agate
scarlet imp
#

how would I permanently change a card? I want to have a Joker that permanently adds $1 of sell value to Planet cards when you do something, but idk how I'd change planet cards like that for the rest of the run

frigid cargo
#

whenever i add a booster pack or voucher it is WIDE, do i have to use sprite sheets to not make this happen?

scarlet imp
scarlet imp
#
local set_cost_ref = Card.set_cost()
function Card:set_cost()
    set_cost_ref()
    if self.ability.name == "Jupiter" and BI.EXTRAS.jupiter_extra_value > 0 then
        self.sell_value = self.sell_value + BI.EXTRAS.jupiter_extra_value
    end
end
#

I keep crashing on launch now

#

nvm fixed it lol

scenic vapor
#

it happens whenever i try to click on a card in my hand

#

this is like 5 antes into a run, i don't know what changed

#

am i supposed to put this in a different channel?

lament agate
glass scaffold
#

Is there a way that Github Copilot just learned how to give +3 mult per card with a custom enhancement?

lament agate
lucid owl
lament agate
#

shh

#

dont speak ill

lucid owl
#

the function is local

#

and also you're calling it before creation? not sure about that

lament agate
#

so what do i do

lucid owl
#

you should approach this through a patch

glass scaffold
lament agate
lucid owl
# lament agate how

so i would create a global function somewhere, for example throwing it in your main file, that does essentially the same thing as the function you have up there

daring fern
lucid owl
#

since idol card changes every round, that'll get what you want done

glass scaffold
lucid owl
#

i would specifically do a patch

daring fern
lament agate
glass scaffold
lucid owl
lucid owl
lucid owl
lament agate
lucid owl
#

oops wrong one

#

this function calls from all ranks in deck, though you can easily use the function you did beforehand

#

it generates a random rank and sets it to a variable in G.GAME.current_round, and can be easily extended to suits

#

but setting it to a variable in G.GAME.current_round is how idol does it, which this copies from

glass scaffold
lucid owl
#

you need quotation marks around your enhancement keys

#

otherwise, the game just thinks they're variables

#

...also, referencing card makes the game think you're referencing the current object, which i assume is a joker?

glass scaffold
daring fern
scarlet imp
#

if its a Joker, try to avoid using card for any local variables, since card refers to the Joker itself

glass scaffold
lucid owl
# glass scaffold Yes, this code is for a Joker

if you're looking to give +3 mult if a card has a custom enhancement, do something like

if context.individual and context.cardarea == G.play then
  if (SMODS.has_enhancement(context.other_card, "m_modprefix_key")) --other enhancements go here, follow structure from before ofc
    return {
      mult = 3
    }
  end
end
#

i would recomment against using copilot for jokers

#

it has zero clue what it's doing

#

it basically got everything wrong

scarlet imp
#

is it possible for me to change the type of hand manually? I want a Joker that makes every hand a straight, regardless of what cards are played

scarlet imp
daring fern
scarlet imp
#
local evaluate_poker_hand_ref = evaluate_poker_hand
function evaluate_poker_hand(hand)
    local results = evaluate_poker_hand_ref(hand)
    if (next(SMODS.find_card("j_tboi_saturnus"))) then
        results.top = results["Straight"]
    end
    return results
end

tried this, but I think I'm missing something

umbral zodiac
#

if i add a new entry to G.C can i use it in localization color tags or do i need to add something else

formal parrot
#

Good morning silly goobers

scarlet imp
shell timber
scarlet imp
twin jolt
#

Hey everyone, novice balatro modder here.

I made a thread asking for challenge ideas and I instantly got one that seems pretty difficult.

Not to add another person in need of help to this discussion, however, I need help with creating a custom challenge rule that skips the shop after cash out and a custom challenge rule that makes the shop appear after skipping a blind.

My theory on how I'd do this? I would make it so when you cash out it instantly triggers the "next round button" before the shop comes up and I would add onto the function that adds the skip tag to make it bring up the shop.

The problem, I have no clue how to do any of that as custom rules are proving to be quite complex.

daring fern
scarlet imp
#

I want it to make EVERY hand a Straight, but it seems to only make every hand that's lower in the handlist into a Straight

lapis night
#

are there ways to remove boss blinds from the boss blind pool for a run?

#

like during the course of a run

twin jolt
# daring fern For the second one try looking at `Home Delivery` from `Ortalab`

Alright, I checked the ability and it looks like what I need.
I went to this page https://github.com/Eremel/Ortalab/blob/master/objects/coupons.lua and found it...
The only problem is... where is the code that actually does the thing it says it does? I've found this but I don't know if it's what I need...

GitHub

Ortalab Demo 3.2. Contribute to Eremel/Ortalab development by creating an account on GitHub.

daring fern
scarlet imp
#
local evaluate_poker_hand_ref = evaluate_poker_hand
function evaluate_poker_hand(hand)
    local results = evaluate_poker_hand_ref(hand)
    if (next(SMODS.find_card("j_tboi_saturnus"))) then
        if not results["Straight"][1] then
            for _, v in ipairs(G.handlist) do
                if results[v][1] then
                    results["Straight"] = results[v]
                    break
                end
            end
        end
    end
    return results
end
twin jolt
scarlet imp
#

I added

for _, v in ipairs(G.handlist) do
  results[v] = results["Straight"]
end

to try to fix it, but it makes every hand into a Flush Five for some reason

daring fern
twin jolt
lapis night
formal parrot
#

Yes

#

The smods wiki

lapis night
#

rad

formal parrot
#

But you’ll have to read

lapis night
#

well ive been doing lots of that lol

#

im appreciative of the smods wiki and ive been using it lots, but ive had a hard time finding the bits of info that i need

formal parrot
#

You can find 90% of stuff you’re looking for there

#

Also don’t let me catch you talking shit about the wiki

lapis night
#

lmaooooooo

scarlet imp
#

facts

lapis night
#

i will say what i feel :3

lament agate
#

trying to make my description works like misprint

#

but whenever i hover over the card, it just shows up for a millisecond before disappearing permanently

#

heko

#

help

formal parrot
#

If you want it to spit random bullshit you can use pseudorandom

lament agate
#

here's the code

formal parrot
#

You’re doing some mad bullshit 😭🫡

#

Show me , bro

lament agate
#

im NOT doing some mad bullshit

#

@formal parrot just in case you were bleeding out

formal parrot
#

Bro

#

My eyes are bleeding

#

Wtf is this

lament agate
#

YOU SAID SEND THE CODE

static dagger
#

Hey all, is there a way for me to make a joker take up multiple slots?

formal parrot
#
Return {vars={t[math.random(#t)]}}```
#

Idk wtf is you doing gng 💔

lament agate
formal parrot
#

And also the suit

formal parrot
#

THINK MARK THINK

static dagger
formal parrot
#

I honestly forgot 😭 lemme think

shell timber
#

you have to dynatext

formal parrot
#

You’re gonna use

shell timber
#

im sorry for your loss

formal parrot
#

Add_to_deck

calm kiln
#

how would i go about causing cards to be counted as held in hand when played

formal parrot
#

Text*

formal parrot
#

I think

formal parrot
#

Miss fluff said you have to use dynatext

lament agate
#

for god's sale

scarlet imp
#

All my homies hate Dynatext

formal parrot
shell timber
#

that won't update in real time

lament agate
#

@shell timber how do YOU use dynatext

formal parrot
#

#t is the size of the table

shell timber
#

i dont use dynatext

lament agate
#

ghhhhh

#

i9u8ygfhbml;casokpi98uy7gujhbdnq

#

balatro why

formal parrot
#

Balatro balatrez

scarlet imp
#

why would Jimbo do this?

static dagger
#

Hey all, can someone explain to me how to make a joker take up multiple slots?

static dagger
open tapir
#

soz idk

scarlet imp
#

maybe it just needs to work like the opposite of the Negative edition, where it instead lowers the amount of slots that the cardarea has

#

but I feel like that might cause problems if you find it as a negative card itself

static dagger
#

Hmm

#

I'll look into it, thank you

scarlet imp
#

is there a Joker out there that does this already that you're taking inspiration from?

lament agate
#

@formal parrot @shell timber figured it out

shell timber
#

congratulations

twin jolt
# daring fern `lovely/coupons.toml`

so... problem, I have no clue what .toml is, how to make it work, and how to make this function.

While this solution could work with enough effort... it looks like it's more complicated then copy, paste, and modify.

lament agate
shell timber
#

well that's a good start

azure valley
#

How can I change the card that the "Again!" text appears under when I do a repetition?

static dagger
#

At least for joker repititions

shell timber
#

you would want localize("k_again_ex") instead of the string

#

oh wait change, nvm

azure valley
rapid stag
#

does using set_ability to turn a joker into another joker not change its cost?

azure valley
#

if I do card = self I also crash the game trying to juice_up a nil.

shell timber
#

card = card?

azure valley
#

excellent, now stupid question, is there a way to do this and output a sequence of cards? Or will this require a lovely patch?

shell timber
#

can you elaborate on what that would do

azure valley
#

Like, I want to do 2 repetitions, the first highlighting card A, and the second highlighting card B

#

(neither of which is the joker)

manic rune
#

is this repeating a playing card

azure valley
manic rune
#

if so, just do checks for context.other_card

azure valley
#

The gist of the joker is that an enhanced card is retriggered once for every copy of the tarot that creates it exists in the consumeables.

#

So I'd like to highlight the tarot card that is doing the retriggering, rather than the joker.

#

I have everything else working now. Just lacking the highlight.

manic rune
#

i see

#

one sec

frigid cargo
#
calculate = function(self, card, context)
    if context.joker_main then
        local shapecount = 0
    for i = 1, #G.jokers.cards do
        if G.jokers.cards[i].config.center.pools and G.jokers.cards[i].config.center.pools.Shape then
            shapecount = shapecount + 1
        end
    end
        card.ability.extra.xmult = (((shapecount * card.ability.extra.xmult_gain)/10)+1)
        xmult = card.ability.extra.xmult
    elseif context.setting_blind then
    local e_real = math.random(1,10) -- randomizer for consumeable
        if e_real <= 4 and ((#G.consumeables.cards + G.GAME.consumeable_buffer) < G.consumeables.config.card_limit) then
        G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
        G.E_MANAGER:add_event(Event({
                    func = (function()
                        SMODS.add_card {
                            set = 'Planet',
                        }
                        G.GAME.consumeable_buffer = 0
                        return true
                    end)
        }))
        elseif e_real > 4 and e_real <= 8 and ((#G.consumeables.cards + G.GAME.consumeable_buffer) < G.consumeables.config.card_limit) then 
        G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
        G.E_MANAGER:add_event(Event({
                    func = (function()
                        SMODS.add_card {
                            set = 'Tarot',
                        }
                        G.GAME.consumeable_buffer = 0
                        return true
                    end)
        }))
        elseif e_real > 8 and e_real <= 10 and ((#G.consumeables.cards + G.GAME.consumeable_buffer) < G.consumeables.config.card_limit) then
        G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
        G.E_MANAGER:add_event(Event({
                    func = (function()
                        SMODS.add_card {
                            set = 'Spectral',
                        }
                        G.GAME.consumeable_buffer = 0
                        return true
                    end)
        }))
    end
end
end
}

can anyone help me? hes not multing itsad

lament agate
#

do i really need the nil check for the jokers card?

faint yacht
#

As this is loc_vars... yeah.

manic rune
#
if context.repetition and context.cardarea == G.play then
  local retrigs = 0
  for _,v in ipairs(G.consumeables.cards) do
    if v.ability and v.ability.mod_conv then
      if SMODS.has_enhancement(context.other_card, v.ability.mod_conv) then
        retrigs = retrigs + 1
      end
    end
  end
  if retrigs > 0 then
    repeat{ 
      repetitions = retrigs
    }
  end
end
lament agate
#

shii

manic rune
#

this is what i would do 🤔

azure valley
# manic rune ```lua if context.repetition and context.cardarea == G.play then local retrigs...
  calculate = function(self, card, context)                                                                                                                          
      if context.cardarea == G.play and context.repetition and not context.repetition_only then
          local reps = 0                                                        
          for i = 1, #G.consumeables.cards do                                   
              local tarot_enh = G.consumeables.cards[i].config.center.config.mod_conv
              for enh, _ in pairs(SMODS.get_enhancements(context.other_card)) do
                  if tarot_enh == enh then                                      
                      reps = reps + 1                                           
                  end                                                           
              end                                                               
          end                                                                   
                                                                                
          if reps > 0 then                                                      
              return {                                                          
                message = localize('k_again_ex'),                               
                repetitions = reps,                                             
                card = card                                                     
              }                                                                 
          end                                                                   
      end
#

^ @manic rune that's what I've done above.

#

which is probably not the most... clean... implementation so far

manic rune
#

mm it does look like it works, whats the issue here

azure valley
#

So what I have has card = card in the return table, which cases the Joker to be highlighted and say "again", i.e. be subject to a bounce, but I'd like the tarot cards to do that.

feral tree
#

can you make it so a joker gives itself an eternal sticker when added to deck?

azure valley
#

(if there is)

manic rune
#
        if reps > 0 then                                                      
              return {                                                          
                message = localize('k_again_ex'),                               
                repetitions = reps,                                             
                card = card,
                func = function()
                  --save all the consumables in a table, and do v:juice_up() in here, probably?
                end,                                               
              }                                                                 
          end  
azure valley
manic rune
#

dunno what timing you want, so it will have to be either outside the return or inside

azure valley
#

thanks, I'll see if I can make this work

serene granite
#

is there a way for a joker to detect when a specific suit is destroyed, i want to make a joker that scaled when spade cards are destroyed

manic rune
serene granite
#

ohh thanks for the info!!

normal crest
#

thank you bep is

chrome widget
#

Okay have completed my initial draft for a scaling context for SMODS. That was fun

frigid cargo
#

whenever i add a booster pack or voucher it is WIDE, do i have to use sprite sheets to not make this happen?

snow vale
#

what's happening?

static dagger
#

I'm trying to make a face cards only deck but it is consistently making the deck into this, how might I fix this?

Here's my apply function:

    apply = function(self, back)
        G.E_MANAGER:add_event(Event({
            func = function()
                for _, card in ipairs(G.playing_cards) do
                    if not card:is_face() then
                        card:remove()
                    end
                end
                return true
            end
        }))
    end,
gaunt prawn
#

Good morning

#

can anyone help me?

static dagger
#

I think that depends

gaunt prawn
#

first time playing

snow vale
#

wtf

gaunt prawn
#

no mods, everything updated

#

tried reinstalling

snow vale
#

return {}return {}

static dagger
#

verify the files on steam maybe?

gaunt prawn
#

i tried that aswell

sour garden
#

do you just have lovely or do you have steammodded as well

gaunt prawn
#

i created a bug report

#

i don't have neither

snow vale
#

ru playing vanilla

gaunt prawn
#

yep

#

first time i repeat

snow vale
#

cuz this is modding dev

gaunt prawn
#

i know

#

but you are the only for the moment to even awnser

snow vale
#

wait lemme go check the game's files

gaunt prawn
#

all dlls for me

snow vale
#

the error is here

#

no idea what could it be

azure valley
gaunt prawn
#

and how do i fix it?

azure valley
# snow vale the error is here

that's not the same code as what is reported in the error backtrace from @gaunt prawn, which suggests to me that something has happened with his files.

azure valley
#

@gaunt prawn you'll probably want to backup and reinstall everything

gaunt prawn
#

i did that as well

snow vale
#

these are the functions that give error

#

and no, you wont be able to edit em so

#

show us your balatro file

gaunt prawn
snow vale
#

hmm

#

steam?

gaunt prawn
#

yep

#

veryfied

snow vale
#

i mean

#

show us

gaunt prawn
#

reinstalled

snow vale
#

weird

primal robin
#

Probably need to delete ssave file

gaunt prawn
#

did that as well

#

but ill retry

#

i only have this

#

in the carpet 1

#

somehow

#

deleting it now worked

#

thanks a lot for listening

snow vale
#

wait what?

gaunt prawn
#

it fixxed now somehow

#

doing the same thing i did like 5 times already

snow vale
#

oh

gaunt prawn
#

thank you a lot man

snow vale
#

yeah it was your save file

gaunt prawn
#

enjoy your day

snow vale
#

thank handy

#

i didnt do anything that could help

gaunt prawn
#

listening

#

that was enough

#

😄

snow vale
#

well np then

snow vale
mild grove
#

I need help fixing this function


function = TiredLink_add_random_tag

static dagger
#

try this:

#
function TiredLink_add_random_tag()

    if tag.name == "Orbital Tag" then

        local _poker_hands = {}

        for k, v in pairs(G.GAME.hands) do

            if v.visible then

                _poker_hands[#_poker_hands + 1] = k

            end

        end

        tag.ability.orbital_hand = pseudorandom_element(_poker_hands, "TiredLink_orbital")

    end

    add_tag(tag)

end
mild grove
#

ty

hasty mist
#

is there a way to define a poker hand using an enhancement? (for example, if a hand contains at least one of a certain enhancement, apply the poker hand)

#

<@&1133519078540185692>

#

mods seize him

mild grove
#

this is 100% a scam

sour garden
#

is there an easy way to index the cards in the consumable slots? i'm trying to count the amount of tarot cards held in consumable slots, but i can only count the total amount
every time i try to do something like "if context.consumeable.ability.set == "Tarot"" it tells me i'm indexing a nil value

snow vale
#

wow thanks mods

grand violet
snow vale
#

just look at his messages sent

mild grove
grand violet
snow vale
#

how can i make a deck that's unlocked whenever i have an amount of jokers with the white sticker?

hasty mist
#

alright, step one, i'm trying to do ui shenanigans, specifically making each individual card clickable somehow

#

some help to get me in the right direction would be appreciated

#

specifically the goal is that when any card is clicked, to bring up a menu of actions to perform on that card

floral narwhal
hasty mist
#

could you elaborate

floral narwhal
#

like ctrl +q/w/e for changing seal/enh/edition

hasty mist
#

yeah i was planning on referencing that

#

but thats not my main roadblock here

floral narwhal
#

this is everything i can offer idk anything about ui

#

whats this problem?

formal parrot
floral narwhal
#

i made new ranks (half-ranks) and i wanna make smiley face for them

formal parrot
#

No idea about custom ranks

tawdry oriole
#

is there a global to know what deck is currently in use?

formal parrot
tawdry oriole
formal parrot
#

I think there’s a name for deck

formal parrot
#

To start with

tawdry oriole
#

yeah

formal parrot
#

Yeah

#

😭😭😭

tawdry oriole
#

i mean i figured i could but i was thinking perhaps i could do something else cause i got NO clue on how to add the suit to the deck when starting 😭

formal parrot
#

In vanilla remade

tawdry oriole
#

oh my god right

formal parrot
#

Should be the same

tawdry oriole
#

it changes the suits

formal parrot
#

I think there’s an example in smods wini

#

Wiki

#

For ranks

tawdry oriole
#

i'll check it out

lament agate
#

how do you use dynatext for badges

formal parrot
#

Go figure

subtle merlin
#

How do i create a specific card?

formal parrot
#

This is how i do it

#

You can also use add_card

subtle merlin
#

What if i wanted it to be a specific joker?

formal parrot
#

Key=

subtle merlin
#

ah, ty!

formal parrot
#

This is the add_card

#

Is simpler because it saves you the emplace and add to deck

subtle merlin
formal parrot
#

Reading the wiki explains the wiki 😭

subtle merlin
formal parrot
#

I wonder who’s the smods cat

gaunt thistle
#

aure's kitty cat

vast bough
#

it is important to use _mod on non individual scoring contexts or is it just best practices

formal parrot
#

I don’t think it’s necessary

#

I didn’t understand what you wish to do can you explain better ?

lament agate
#

im coding a blind rn

#

what does this mean

#

tf is an order

tawdry oriole
#

min is the minimum ante at which it appears, max is the max ante at which it appears, atlas is the sprite of the blind and idk about order

#

maybe the order in collection?

lament agate
#

oh

#

what about their atlas

#

i saw their atlas have some

#

multiple blinds

#

in one row

#

does it do that automatically?

feral cove
tawdry oriole
feral cove
#

oh

tawdry oriole
#

is there an equivalent of this variable (in SMODS.Back's apply function) for ranks?

maiden scroll
#

Ah yes a perfectly balanced joker

#

Let's combine this mod with cryptid

subtle merlin
maiden scroll
#

Oh I only get a little rip of the card

subtle merlin
#

That raises more questions than answers-

maiden scroll
#

So you see the very little bit of corner on it yeah that's all I get it still works the same way though

flat mist
#

hello i am new here can someone tell me where to start making a balatro mods

#

i have many cool ideas

zealous glen
flat mist
#

how to find

#

i am new to discord too

zealous glen
#

Top right corner has a pin icon

#

next to the search bar

flat mist
#

ok i find it thanks

molten musk
#

hi folks

#

quick question

#

can i check seals types and counts in deck?

#

like can i read that?

crisp coral
#

you have to loop through all cards in G.deck.cards (or G.playing_cards if you're counting in hand and discarded too)

molten musk
#

i see

#

thx

lament agate
#

ive been getting error about the blinds im making

#

heres the atlas code

#

atlas_table = ANIMATION_ATLAS,
pos = { x = 0, y = 21 },
frames = 21,
atlas = "southamerica",
order = 21,

molten musk
#

screen shot the whole code with line nums

molten musk
#

show me line 11

#

it says your proplem is in line 11

lament agate
red flower
red flower
lament agate
red flower
#

the animation atlas stuff goes there

lament agate
#

oh?

#

like

#

atlas table?

#

or all of them

#

frames and order

red flower
#

idk what frames and order are

tawdry oriole
#

would set_seal work here?

red flower
#

frames also goes there

red flower
lament agate
red flower
lament agate
red flower
#

show new code

tawdry oriole
#

instead of "southamerica"

lament agate
lament agate
placid star
#

ik this doesnt work, but does it look about right for making a card show up in a jokers description?

tawdry oriole
#

thats odd

red flower
lament agate
tawdry oriole
# lament agate

make sure the folders for different sizes are called "1x" and "2x"

red flower
#

animation atlas has to be a string

lament agate
lament agate
red flower
#

"ANIMATION_ATLAS"

#

yes

lament agate
#

oh now it doesnt show up

red flower
#

try y = 0

#

in the blind pos

lament agate
#

ty

unborn bay
#

nxkoo

#

nxkoo blew up Malaysia

molten musk
#

Malaysia as in country? or other referance

red flower
#

i wish people would tell me bugs with vanillaremade directly instead of having to egosearch 😭

echo aurora
#

"if triggered once destroy but if triggered multiple times gives money"
Is this possible to code?

lament agate
gilded blaze
feral cove
#

does anyone here mind explaining how rng works in steamodded?

it's some pseudorandom thing that I cannot for the life of me understand so I keep using math.random instead

gilded blaze
#

pseudorandom('string_seed') ensures the probability roll is consistent when replayed via seeded

#

that's how rng works in vanilla

echo aurora
feral cove
gilded blaze
#

if pseudorandom('string_seed') < G.GAME.probabilities.normal / card.ability.your_value then body end

feral cove
#

and the 'string_seed' part I noticed some stuff use a different string in there

#

ah

gilded blaze
#

yea, just put an identifier string, unique to your object to set the probability roll inside its own queue

feral cove
#

so basically I don't need to care about the string in pseudorandom, I can put my unique object in there and always use g.game.probabilities.normal

#

am I understanding that correctly

gilded blaze
#

the string in pseudorandom ensures your object gets the probability roll in its own queue

#

how is that not important

#

but yea, that's the probability starter pack

gilded blaze
#

we don't talk about smods' new probability logic

flat mist
#

i have ideas for many anime inspired jokers

midnight coyote
#

how do i see what hand a planet card is supposed to level up in code

#

preferably as a string

midnight coyote
#

(G.GAME.probabilities.normal or 1)

gilded blaze
#

I've never encountered a crash with attempt to index field 'probabilities' (a nil value)

#

¯_(ツ)_/¯

midnight coyote
#

the value doesn’t always exist

#

i’ve had problems with it quite often

#

so i just do it to be safe

gilded blaze
#

lol

midnight coyote
#

it’s like 7 extra characters, it can’t hurt

gilded blaze
#

that's already included in Game:init_game_object()
I could not find a case where it wouldn't exist

gilded blaze
#

that's loc_vars thing

midnight coyote
#

but again, i’m just paranoid and do it to be safe

#

:b

#

the less chance of a crash the happier i am

gilded blaze
#

dw I feel you
I used to put (G.GAME and G.GAME.alice_multiplifer or 1) anywhere applicable

#

the only way to crash I can think of would be some fools accidentally overriding Game:init_game_object() instead of hooking

midnight coyote
#

ah

midnight coyote
#

when i can, i never let a crash be left unfixed before i get off

#

if the game's crashing ill always try to fix it before relaxing

gilded blaze
#

also me

feral cove
#

how does take ownership work

can I just put cost = 9 and it will immediately change the cost of the object I took ownership of

tawdry oriole
#

is there a way to know if a variable was used?

gilded blaze
midnight coyote
#
SMODS.Joker:take_ownership('smiley',
        {
            loc_vars = function(self,info_queue,card)
                info_queue[#info_queue+1] = {set = "Other",key = "char_txt_ochint_smiley"}
            end,

            calculate = function(self, card, context)
                if context.remove_playing_cards and not context.blueprint then
                    for _, removed_card in ipairs(context.removed) do
                        if removed_card:is_face() then

                            card.ability.ext_ovr.faces_destroyed = card.ability.ext_ovr.faces_destroyed + 1
                        end

                    end
                    if card.ability.ext_ovr.faces_destroyed >= 10 then
                        CHAR.FUNC.overclock_proc(card,'j_charcuterie_ferocious_grin')





                    end


                end

            end,
            add_to_deck = function(self,card,from_debuff)
                card.ability.ext_ovr = {}
                card.ability.ext_ovr.faces_destroyed = 0
            end


        },
        true


)
#

here's one ive just done

manic rune
#

variable??

midnight coyote
tawdry oriole
feral cove
midnight coyote
#

so you can add to whatever the base game does

#

you can also overwrite returns

unborn bay
tawdry oriole
midnight coyote
#

like this usage of take_ownership

#

just adds an extra calculation condition

unborn bay
#

i guess you can try and make a metatable that checks for __index but that means it'll also trigger on loc vars

tawdry oriole
#

yeah that wouldn't work quite well

#

i got an idea

red flower
#

i mean

#

isn't that what the new probability stuff is for?

gilded blaze
#

can we use hooks in take_ownership tho

#

just wondering

red flower
#

im pretty sure you can hook the functions in it by having a reference to the original function in the center
this wont work with like calculate and stuff with vanilla jokers tho

gilded blaze
#

figures

local hook = G.P_CENTERS.j_modprefix_key.calculate
SMODS.Joker:take_ownership("modprefix_key",{
calculate = function(self, card, context)
    local old_ret = hook(self, card, context)
    local ret -- put return stuff here
    local full_ret = SMODS.merge_effects({old_ret or {}, ret or {}})
    return full_ret
end
})
red flower
#

yeah that should work i think

#

you might need to use merge_effects for the returns

manic rune
#

dont forget to return the hook btw 🤔

#

also, did you also make SMODS.merge_effects N'

red flower
#

yes

manic rune
#

why am i not surprised

primal robin
#

At least someone should make them trash

red flower
#

i hate matador

#

just found out some blinds set triggered to true but dont trigger it because of a bug

lament agate
#

how do you mess with player's option

#

especially game volume

#

or music

red flower
#

<@&1133519078540185692>

lament agate
#

but N

#

i need vbucks

#

to buy miku

naive reef
gilded blaze
#

huh

lament agate
#

taking away my free opportunity..

gilded blaze
#

what happened

#

why is a mod summoned

lament agate
#

bots

gilded blaze
#

I see

naive reef
lament agate
gilded blaze
lament agate
#

if anything happens, its your fault

crisp coral
gilded blaze
lament agate
#

shh

lament agate
#

how do you

#

know if a player has turned on the high contrast color

gilded blaze
#

||G.SETTINGS.colourblind_option
after modifying that, call G.FUNCS.refresh_contrast_mode||

manic rune
tawdry oriole
#

how would you add a card to the shop (to the likes of the rare tag & uncommon tag)?

manic rune
#

🤔

lament agate
red flower
tawdry oriole
#

it is for a tag

red flower
#

im in the middle of adding them to vanillaremade :3

-- Uncommon Tag
SMODS.Tag {
    key = "uncommon",
    pos = { x = 0, y = 0 },
    apply = function(self, tag, context)
        if context.type == 'store_joker_create' then
            local card = SMODS.create_card {
                set = "Joker",
                rarity = "Uncommon",
                area = context.area,
                key_append = "vremade_uta"
            }
            create_shop_card_ui(card, 'Joker', context.area)
            card.states.visible = false
            tag:yep('+', G.C.GREEN, function()
                card:start_materialize()
                card.ability.couponed = true
                card:set_cost()
                return true
            end)
            tag.triggered = true
            return card
        end
    end
}
tawdry oriole
#

i was looking thru vanillaremade to see if you've added them

#

thank you 🙏

feral cove
red flower
#

i copied this from my other mod but havent tested it yet tho

lament agate
#

1 or 2

gilded blaze
#

1

#

but it's a toggle

#

G.SETTINGS.colourblind_option is a boolean

final goblet
#

hi modding dev!

#

what color was used for ranks and retriggers?

#

i keep forgetting

formal parrot
paper elbow
#

@kindred warren Here's my starting bit exported from JokerForge


SMODS.Joker{ --Banana Man Test
    name = "Banana Man Test",
    key = "bananamantest",
    config = {
        extra = {
        }
    },
    loc_txt = {
        ['name'] = 'Banana Man Test',
        ['text'] = {
            [1] = 'Spawns a {C:red}Negative{} Banana to the left',
            [2] = 'of this Joker when you play a hand with',
            [3] = '{C:red}five{} face cards.'
        }
    },
    pos = {
        x = 0,
        y = 0
    },
    cost = 6,
    rarity = 3,
    blueprint_compat = false,
    eternal_compat = true,
    unlocked = true,
    discovered = true,
    atlas = 'CustomJokers',

    loc_vars = function(self, info_queue, card)
        return {vars = {}}
    end,

    calculate = function(self, card, context)
        -- Main scoring time for jokers
        if context.cardarea == G.jokers and context.joker_main then
            if (function()
    local rankCount = 0
    for i, c in ipairs(context.scoring_hand) do
        if c:is_face() then
            rankCount = rankCount + 1
        end
    end
    
    return rankCount == 5
end)() then
            end
        end
    end
}

Currently it doesn't have any actual effect, but the condition is playing a hand with five face cards.

native zinc
final goblet
#

for both or...?

native zinc
#

yeah

kindred warren
#

But also you should just do a check for rankCount

paper elbow
#

This is purely template code, so you'll have to explain why I should/shouldn't do things, please.

kindred warren
#

SMODS does not take return. Remember you are inside a calculate function definition

paper elbow
#

I just started with SMODS, so things may not be obvious to me yet.

kindred warren
#

SMODS is waiting for a proper return that it understands

#

For example, lua if rankCount == 5 then return { Xmult = 2 } end

paper elbow
#

Also, JokerForge doesn't support the "Negative" text effect, so that's a simle thing.

kindred warren
#

That colour is G.C.DARK_EDITION.

#

Or do you want it in your text?

paper elbow
kindred warren
#

Oh, I see

paper elbow
kindred warren
#

{C:dark_edition}Text here

#

Simply replace your C:red

paper elbow
#

Thanks, that's what I assumed when you said the thing before, but I wasn't sure.

#

Yes

formal parrot
#

Also s for size and it’s lowercase

kindred warren
mild grove
kindred warren
#

I also recommend putting your atlas and pos next to each other.

#

Edited for proper coloring

#

Also do you mean Gros Michel?

native zinc
#

sequitur is not british

#

got em folks

formal parrot
#

Trial and error will get you there useful resources

vanilla remade , featuring the whole game remade with smods ⬇️

https://github.com/nh6574/VanillaRemade

the smods wiki⬇️

https://github.com/Steamodded/Wiki

the smods mod examples ⬇️

https://github.com/Steamodded/examples

GitHub

Contribute to nh6574/VanillaRemade development by creating an account on GitHub.

GitHub

Contribute to Steamodded/Wiki development by creating an account on GitHub.

GitHub

Steamodded example mods. Contribute to Steamodded/examples development by creating an account on GitHub.

midnight coyote
#

how do i see the current amount satellite is giving

paper elbow
# kindred warren Also do you mean Gros Michel?

Not specifically. The effect I want to do is this (using pseudo-code):

if `player_has_joker('gros_michel') then
  if rand(20) > 0 then
     add_joker_to_left('cavendish','negative')
  else
     add_joker_to_left('gros_michel','negative')
else
  add_joker_to_left('gros_michel','negative')
formal parrot
lament agate
#

thats lime you fat fuck

kindred warren
formal parrot
midnight coyote
#

ugh

formal parrot
native zinc
red flower
kindred warren
#

Concur with those two

#

Don't

formal parrot
#

😭😭

paper elbow
#

lol

#

Yeah, it'd no longer be seeded if you did that, right?

red flower
#

yeah

formal parrot
#

Yeah

kindred warren
#

Yes

native zinc
#

can confirm

red flower
#

you can use it for non-gameplay related things maybe

native zinc
#

yeah like small effects

#

like idk sounds

midnight coyote
#

i have to calculate it myself

#

wonderful

red flower
#

coders when they see a single for loop

midnight coyote
red flower
#

at least it doesnt do it in update

midnight coyote
#

fair

manic rune
#

coders when they see while loops

wind steppe
#

how would i check how many tier 1 vouchers ive redeemed?

#

(fuck cryptid compat btw idc about tier 3s possibly being counted as t1s)

midnight coyote
#

blocking code pmo

final goblet
red flower
wind steppe
final goblet
wind steppe
#

feels fine if thats a boolean

red flower
wind steppe
manic rune
#

vanilla vouchers have this in their config if they are tier 2

wind steppe
#

oh ty

red flower
#

you could consider any voucher that doesnt require another one a tier 1 basically

kindred warren
red flower
placid star
#

how does copy_card work? i have this: copy_card(G.deck.cards[1], new_card) and when i try to emplace new_card, my game crashes

manic rune
#

you can actually use that same logic to exclude tier 2 vouchers that have tier 3 upgrades too

paper elbow
#

Also using 'seed' passes the current run's seed?

kindred warren
#

Pseudorandom is fine. Just plug in a seed

manic rune
#

like, tier 3 vouchers also have requires im guessing, so u might want to do a loop on that until it reaches a voucher with no requires

kindred warren
formal parrot
#

Use “car simulator 101” as a seed

kindred warren
#

Thank the SMODS gods

midnight coyote
#

yay woohoo

formal parrot
#

Me when i have to calculate something

red flower
#

speaking of math.random

wtf

#

im guessing its because it just changes the sprite

paper elbow
#

Or is it a float?

kindred warren
#

Correct me if I'm wrong chat

red flower
#

thats correct

#

also you need the seed

kindred warren
#

Yea

paper elbow
red flower
#

and also that won't take oops all 6s into account

paper elbow
kindred warren
#

The seed can be any string

paper elbow
kindred warren
#

Typically you feed in your joker name

paper elbow
kindred warren
#

pseudorandom() handles it for you

red flower
#

that seed is like a secondary seed

kindred warren
#

Dont need it

red flower
#

so you dont interfere with the randomness of other cards

paper elbow
#

So it doesn't matter what string I actually use for the first argument?

kindred warren
#

Nope

wind steppe
#

as long as its unique yeah

red flower
#

It does, it should be unique to the effect for the most part

wind steppe
#

you could put the entire bee movie script in if you wanted to

kindred warren
#

Don't actually that would be slow

wind steppe
#

but you could

red flower
#

Most of the time is better to use the card's key

paper elbow
#

Strange, but I see. Now then, what if I want it to interfere with the randomness of other cards?

red flower
wind steppe
#

how do i check if a purchased card is a voucher in context.buying_card

wind steppe
red flower
native zinc
#

that's basically the only reason you would do this

#

¯_(ツ)_/¯

tawdry oriole
wind steppe
native zinc
#

yup

kindred warren
#

I love new SMODS content

tawdry oriole
wind steppe
red flower
wind steppe
#

no more G.GAME.probabilities.normal

red flower
tawdry oriole
#

ohh so its some sort of an upgrade from what we currently have

red flower
#

yeah it lets mods manipulate probabilities easier

tawdry oriole
#

G.GAME.probabilities.normal will remain usable though right? to avoid incompatibilities with older mods still using it

red flower
#

yes but it will be incompatible with any of the new contexts

tawdry oriole
#

alright

wind steppe
#

not next(SMODS.Vouchers[context.card].requires or {}) doesn't work to check for t1 vouchers

#

game crash

kindred warren
red flower
#

oh maybe SMODS.Vouchers doesnt exist

paper elbow
kindred warren
#

You do need to check if there is room

#

That's why all the jokers have (Must have room)

paper elbow
kindred warren
#

I suppose not

wind steppe
#

you can tell the game doesnt do that automatically because cryptid's ://SPAGHETTI does not check for room

wind steppe
#

negative invisible allows you to go over joker slots

red flower
wind steppe
#

and if you do that you cant buy negatives

paper elbow
#

Is there a way to add a card at a specific index? I want to make sure that the banana spawns to the left of the joker.

kindred warren
#

Not really

#

Someone else might know

#

Unless you do weird duct tape code ...

red flower
#

it's a bit complicated but you need to sort G.jokers.cards

#

unless you want to pin the joker there

#

thats a lot more complicated

paper elbow
#

No pinning, just insert at a position. What data structure is G.jokers.cards?

red flower
#

it's an array of cards

paper elbow
#

That's what I thought. Hang on, reading Lua docs.

kindred warren
#

Dangerous!

wind steppe
#

this does not count t1 vouchers already purchased, how would i do that?

        local vouchers = 0
        for _, v in ipairs(G.GAME.used_vouchers) do
            if not next(v.config.center.requires or {}) then
                vouchers = vouchers + 1
            end
        end
paper elbow
daring fern
kindred warren
red flower
wind steppe
native zinc
#

ipairs

paper elbow
red flower
red flower
wind steppe
red flower
#

yeah

wind steppe
daring fern
red flower
#
        local vouchers = 0
        for k, _ in pairs(G.GAME.used_vouchers) do
            if not next(G.P_CENTERS[k].requires or {}) then
                vouchers = vouchers + 1
            end
        end
native zinc
#

hey what func do i have to hook when game ends

daring fern
native zinc
daring fern
frigid perch
#

Hi, so I'm used to retexturing with Malverk and replacing Joker Textures that way, I'm wondering if there's a way to add a sound to when a specific joker appears/is bought?

gilded blaze
#

take_ownership and add add_to_deck field

#

since you're doing it on vanilla, make sure to include that joker's add_to_deck behavior

manic rune
#

just hook to their existing add_to_deck function

gilded blaze
#

oh, that works too

#

yea I forgor that's an option as well 💀

gleaming yew
#

what cards change to random rank and suit?

manic rune
#

oh but i think you can hook inside take_ownership, so thats maybe fine 🤔

#

just dont override anything lol

gilded blaze
gleaming yew
gilded blaze
#

hooking a function in take_ownership should only be applied to modded jokers

daring fern
gleaming yew
#

Yeah, those

manic rune
#

🤔 you cant take ownership a vanilla joker? i thought you can just call a dummy function like G.P_CENTERS["smtsmt"].add_to_deck = G.P_CENTERS["smtsmt"].add_to_deck or function() end

#

but i never tried doing that before, only with vanilla consumables, so

gilded blaze
red flower
#

they mean the center doesnt have an add_to_deck so you wont get the behavior by doing that

gilded blaze
#

Card:add_to_deck doesn't use a series of elseif
I have no idea if overriding a vanilla joker's add_to_deck would remove their vanilla behavior

red flower
#

yeah no idea

distant rock
#

I keep getting this error with several different jokers that activate upon being destroyed or destroy themselves. Why?

red flower
#

some card is self somewhere

#

post code

distant rock
#

is it not supposed to be self?

red flower
#

no

#

it needs to be card

distant rock
#

oh, thanks

gilded blaze
#

self refers to the declaration table itself, not card object

#

this is the main difference between vanilla objects and modded ones

regal bridge
#

can i do this

wintry solar
#

No

regal bridge
#

what if i assigned the return of caluclate = function to 'var' and did
mult = var

wintry solar
#

No

regal bridge
gilded blaze
#

you mean play count?
or total score?

regal bridge
#

finisher blind starts at 1.5x score, increases by 1.25x off base for every hand played in the ante

gilded blaze
#

there are more stuff you need to do than just calculate

regal bridge
#

well then what do i need to do

stiff quiver
#

card.seal gives the key of the seal right

formal parrot
#

Don’t use the wrong card

#

Please

stiff quiver
#

is there a thing that checks if it has a seal in general

formal parrot
#

Card.seal

#

If card.seal then

stiff quiver
#

oh

#

i feel stupid for asking this then lol

formal parrot
#

Card reference the joker

#

If you’re going thro played cards

#

You’d use v.seal

#

Depends on the variable you’re using in the For loop

stiff quiver
#

yeah i know, i just said card cause it makes more sense to say that in my head

formal parrot
#

Hey

#

Just a heads up >w<

obtuse silo
#

is there a way to check a joker's edition?

red flower
#

joker.edition.key

#

or rather joker.edition and joker.edition.key == "key"

obtuse silo
#

so the first one checks if the joker has an edition
the second checks for a specific edition?

manic rune
#

yup

#

joker.edition is nil when the joker doesnt have an edition

#

so its there to make sure that it doesnt crash on joker.edition.key