#💻・modding-dev

1 messages · Page 162 of 1

sturdy compass
#

I'm talking about the "Posted" functionality

naive notch
#

I did the art for my first terrain card. I decided to design it to look like a photo. Thoughts?

sturdy compass
#

I didn't wanna mention it 😭

naive notch
#

this is what it always looked like 100%

sturdy compass
naive notch
#

Looks really nice in-game!

cursive glade
#

Sorry, I'm new to modding balatro, so pardon my noob questions here.
I'm working on a joker that can destroy other jokers. I looked at the code for Madness to see how it does it, but when I try that same code to select another joker to destroy, on occasion it'll destroy itself even with the Eternal sticker applied.
I want it to only choose from the jokers currently active and never itself. If there's no other joker to destroy (either by eternal sticker, or some other protection, or it's the only joker), then it does nothing.

grand sage
#

hello I was wondering if anyone could tell me why its giving me an error? I would very much appreciate the help.

cursive glade
grand sage
#

and after I changed multiple other things like name of name of the folder i was getting the same error

spring osprey
#

hey, where in the default code does it calculate what the tarot cards do? i wanna make like an anti strength tarot card but i cant find the code to reference

cerulean rose
cursive glade
#

my mistake

lucid owl
#

what context could i use to make this run once the joker is "acquired"? like when it's bought, spawned, or really just added to the hand in any way. the idea is that it'll double blind amounts once when it's bought, but with the current context it doubles blinds every single round lol

lucid owl
spring osprey
#

and then not activate it again

lucid owl
spring osprey
#

prob in the extra config, idk im new here

lucid owl
#

i wasn't sure how to make it occur only once

#

it probably does have to do with a simple boolean but nothing was actually going into effect unfortunately

spring osprey
#

something like config = { extra = { activated = false } },

#

then once it runs set it to true

#

and bada bing bada boom

#

maybe im crazy but i think that would work

tall wharf
#

❤️

lucid owl
#

i tried that, for whatever reason it wasn working but maybe that's a skill issue on my part

tall wharf
random sleet
#

error!

tall wharf
random sleet
#

effect is 100% not the variable you want

#

it's probably key

#

(self.config.center.key)

#

(because it's not in ability because funny)

lucid owl
#

i think i'll either have to make a check from scratch, or if i'm lucky i just fucked up the syntax for the applied boolean when i tried it the first time

tall wharf
spring osprey
#

does anyone know were the default code for the tarot card is, or have a working example of one? im lost there only seems to be good documentation on adding jokers

random sleet
#

-# read my mod

tall wharf
#

-# i changed the thing

spring osprey
random sleet
#

yeah

#

sorry lol

spring osprey
#

kk wat ur mod

#

send the github

random sleet
# tall wharf

what are you actually doing here? like whats this fucntion

lucid owl
tall wharf
#

a hook to Card:generate_UIBox_ability_table()

grand sage
#

hello does anyone know why when I try to start the game it gives me this error (Im trying to make a custom joker) [SMODS _ "src/game_object.lua"]:363: Failed to collect file data for Atlas Mode_ModernFoods

naive notch
#

Ok making art was a fun break but its time to go back to the code trenches

wintry swallow
#

how do card references work? when do i lose the pointer?

tall wharf
#

works wonders

spring osprey
#

what do i use to set the id of a card?

#
        selected_card.base.id = selected_card:get_id() - 1
#

this isnt crashing me but its not working either

#
    use = function(self, card, area, copier)
        local selected_card = G.hand.highlighted[1]
        selected_card.id = selected_card:get_id() - 1
    end,``` i feel like im doing something wrong
lucid owl
cerulean rose
#

no

lucid owl
#

or wait, would that be card.add_to_deck

cerulean rose
#

its a separate function

lucid owl
#

ohhh

runic pecan
#

How do I access my mod config value?

tall wharf
runic pecan
#

So SMODS.current_mod.config['config name']?

tall wharf
#

config key i believe

#

do not count me on that i haven't touched anything related to config yet

faint yacht
#

SMODS.current_mod.config.farts also can work.

woeful tundra
#

ive been digging around and can t seem to find how people make consumeables be added to consumables instead of being used right away from booster packs

naive notch
#

How would I go about changing the sticker on my playing cards?

grand sage
#

im 90% sure the code for the joker is wrong somewhere does anyone know what might be cyuasing problems?

runic pecan
tall wharf
#

like i would check cascadingly

#

SMODS -> SMODS.current_mod -> SMODS.current_mod.config

runic pecan
#

I think it's because the patched code is inside the main game files so there's no "current_mod" to speak of.

grand sage
edgy reef
#

This is code outside of that

runic pecan
edgy reef
#

You need to check for SMODS.Mods[<mod id>].config

grand sage
runic pecan
tall wharf
sturdy compass
#

And more efficient

tall wharf
#

anyhow

#

more word puzzle in balatro when

grand sage
#

I was using the example mod on github as a base but ive been looking and following all the guides so i would garner a guess and say new calc

faint yacht
grand sage
#

yes

runic pecan
#

Good news: I've learned how to separate the text boxes.
Bad news: They are... a bit too separated.

naive notch
#

I'll fix the error later but I got a sticker in the game. It doesn't do anything yet but the text is there.

woeful tundra
#

I just feel like the card is trying to do too much lol

tall wharf
sturdy compass
#

TRUE LMAO

tall wharf
#

and also tailwindcss

crisp coral
tall wharf
#

nope

#

i should add that

crisp coral
#

:walcomebuck:

tall wharf
#

hmmmm'

#

maybe i can put this in the game

crisp coral
#

no.

#

the one on steam

#

because this lingo is literally wordle

tall wharf
#

nope

crisp coral
tall wharf
#

ok

#

i am adding trivia to the game

#

oh boy do you not like trivia

#

the capital city of Senegal is Dakar

tall wharf
#

please add the rounded background back

runic pecan
#

Yep, workin on it

tall wharf
#

time to patch the entire source code

primal robin
tall wharf
#

ok well then lemme write some trivia question as a test

sturdy compass
tall wharf
#

i bet you don't even know the capital city of

#

Namibia

#

(i just looked it up it is Windhoek)

runic pecan
tall wharf
sturdy compass
tall wharf
#

just a silly trivia blind

#

i think that could be fun

#

right???

sturdy compass
#

I wonder if there's a point where you start using external APIs or libraries to generate your blind puzzles lol

runic pecan
#

I think I'm gonna make a separate mod to handle multi_text_boxes

tall wharf
#

there has to be a point right

sturdy compass
#

Probably

tall wharf
#

just to make people download two mods

#

smfh

#

im joking some libraries are in fact useful

sturdy compass
#

the yung's api in question

tall wharf
#

terrablend

sturdy compass
#

eh, I've had my issues with terrablend lol

runic pecan
tall wharf
#

look i come from modding minecraft i had a bit of stigma for library mods

#

aka half the modpack consists of library mods

versed swan
random sleet
#

(i have my own library mod)

#

(but it's mostly so that ppl can utilize the mechanics i make in their own mods and not depend on the content)

#

(idk if anyone will but it's open as an option)

versed swan
#

I want to say that we should make like a single library for a bunch of convenient features that anyone can refer to, but I worry that it will just lead to this situation

there are 52 standard libraries
"let's make a singular library that everyone can reference to so we dont have so many libraries"
there are 53 standard libraries
tall wharf
#

i was gonna make cursed item as a library mod

#

where you can obtain fire as item

tall wharf
random sleet
#

guess what chat

tall wharf
#

in this case it is better they are incompatible

tall wharf
crisp coral
#

ODDITIES WOOOOO

tall wharf
#

i should add better art to my mod

#

i am terrible at art so i just look at things and draw

random sleet
#

inside you there are two wolves

tall wharf
#

anyhow

naive notch
#

I give up for now. I will go to sleep knowing the thing that beat me was stickers

tall wharf
#

btw the letters in my mod are not actually stickers

#

every playing card comes with one

crisp coral
#

imagine actually making stickers

tall wharf
#

true

crisp coral
#

(none of my card modifiers are smods objects

random sleet
#

ugh the stupid "save item from pack" code is broken again AUGHHHHH

naive notch
#

Im trying to make a new card modifier and was told stickers is the best way to do it

random sleet
#

is there a clean way to do this yet

sturdy compass
random sleet
#

narwhal horn

#

i've got zero idea what it does

sturdy compass
#

Potato potahto

random sleet
#

but it's there

tall wharf
sturdy compass
#

Narwhals are unicorns of the sea. Unicorn horn

naive notch
#

i can make the stickers fine but the problem is idk how to put them on my playing cards

runic pecan
#

So currently my main issue is to make them having different width...

runic pecan
#

Looks much better

woeful tundra
tall wharf
#

there we go

#

everything should be replaced correctly

tall wharf
woeful tundra
tall wharf
#

Depleted!

woeful tundra
#

NODDERS I struggle to get consumables to destroy themselves cleanly

tall wharf
#

it's fine

#

my game crashed without showing the crash screen

woeful tundra
violet void
#

Hi, is there a way to make a custom Booster guaranteed to appear in the first shop with smods?

woeful tundra
#
    name = "Hand of Midas",
    key = "ancient_Midas",
    set = "ancients",
    atlas = "leapfrog",
    cost = 4,
    destroyed = false,
    config = {extra = {remaining = 3, destroyed = false}},
    pos = {x = 6, y = 0},

    loc_txt = {
        name = "Hand of Midas",
        text ={
            "Turns the next {C:attention}#1#{} scored cards into {C:attention}Gold Cards{}",
        },
    },
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.remaining } }
    end,

    
        can_use = function(self,card)
            return(false)
        end,
        calculate = function(self, card, context)
            if context.individual and context.cardarea == G.play then
                if card.ability.extra.remaining >= 1 then
                    card.ability.extra.remaining = card.ability.extra.remaining - 1
                    context.other_card:set_ability(G.P_CENTERS.m_gold, nil, true)
                    return{
                        message = "Touched!",
                        card = context.other_card,
                        focus = card
                    }
                end
                if card.ability.extra.remaining <= 0 then
                    card:start_dissolve()
                    return{
                        focus = context.other_card,
                        card = context.other_card,
                        message = "Depleted!"
                    }
                end
            end
        end
    
}```
wintry solar
#

Just put the destruction in context.after

tall wharf
#

ye

wintry solar
#

Or

#

Put it in a function in the return if you want it to deplete after the third change

tall wharf
#

func = function()
dissolve?
end
?

wintry solar
#

It would need to be in an event, but yes

violet void
wintry solar
#

That’s not a smods feature afaik

violet void
#

lovely patching it is then 🔨

tall wharf
#

damn so first shop will have 2 forced packs

violet void
#

fair point, I might have to add one more slot in the first one

tall wharf
#

I'm really proud of myself for figuring out how to add UI elements

#

literally feels like CSS

night pagoda
#

I had a specific case for this, so all I had to do to fix this is to not close the old pack iirc

woeful tundra
#

ok, so I was making events sound harder in my head

lucid sun
#

this worked a treat thank you and john smods 😊

native cargo
#

Are Suits stuck in the pool? Or is there a way of taking a custom one out and only allowing them in certain decks? I've tried adding the in_pool = false in side the suit constructor(? I'm a java dev, don't really know what to call it), but it doesn't seem to make a difference.

frosty dock
#

the suit is available and in deck when it returns true or isn't a function

native cargo
#

okay, that makes sense. Thank you!

maiden phoenix
#

Thoughts on this held consumable? Too broken, too specific, too underwhelming?

worthy anchor
#

i want to generate a card from a small pool of jokers (like "any joker in my mod") but, when the joker is randomly added, still have it generate at normal rarities (i.e. still usually generate a common card and such). is this something that's easily doable with create_card and normal stuff and i just need to understand something i'm not currently understanding, or is this gonna be An Issue

random sleet
viral stream
#

how would i count for enhancements in the deck? like with steel joker, i tried to look for how steel/stone jokers is set up in src but it's specifically set for steel_tally/stone_tally so how else would i count for a modded enhancement

viral stream
maiden phoenix
#

stone_tally is counted in the update function

#

Example with stone joker

if self.ability.name == "Stone Joker" then 
            self.ability.stone_tally = 0
            for k, v in pairs(G.playing_cards) do
                if v.config.center == G.P_CENTERS.m_stone then self.ability.stone_tally = self.ability.stone_tally+1 end
            end
        end
maiden phoenix
viral stream
#

true it would be a fun run though

maiden phoenix
#

Who needs Cryptid rigged when you got infinite bread

random sleet
#

when you have like 4 bread

#

that keep expiring

maiden phoenix
#

When the bread turns solid after 1 picosecond 😔

random sleet
#

when the astro isn't

maiden phoenix
#

Me when the first card of scoring in a modded null card balatrojoker

random sleet
#

if it's aikoyori's letter deck it'll still upgrade the suit jimbo_spin

#

but i do check SMODS.has_no_suit so when they get on fixing that, it'll work properly lol

#

(and suit levels will stop applying to them also lol)

maiden phoenix
#

What if you made a suit level up specificaly for no suits? 🤔

random sleet
#

that is a nonsense statement

#

you cannot index an array at nil

woeful tundra
#

is there a way to check if someone has 2 or more cards in their hand selected, similar to how some of the tarot cards do

random sleet
#

is this for a consumable? there's config.max_highlighted that I think will take care of that for you

woeful tundra
#

yeah, it is, and thanks!

viral stream
maiden phoenix
#

I gave you the name of the function

viral stream
#

oml i was puttign update in calculate amazing 😭

#

ok ty

maiden phoenix
merry raven
#

What's the ability.set for Seals, Stickers and Editions, Enhancements is "Enhanced"

#

Oh it's just "Seal" and "Edition" respectively, not sure for Stickers

violet void
#

why didnt thunk use the config.card_limit 😭

wintry solar
#

card counting in update 😭

frosty dock
#

woo hardcoding

merry raven
#

No one is immune to "if it works it works"

viral stream
frosty dock
merry raven
#

Huh

#

I'm just like checking a card's modifiers

wintry solar
viral stream
#

ok got it to work perfectly thanks

woeful tundra
#

actually got more done than I thought id get working, granted most a simple

#

artwork is not my thing, so that will come later

violet void
#

relatable

vital rapids
#

Whats the real difference between an enhancement and an edition, like would there be a reason to pick one over the other?

#
Curse, like in gungeon, big blinds have a chance to be boss blinds, each point of curse gives x0.2 mult(min 1)
Max 9 increases chance of cards being cursed.
Cursed cards cannot be destroyed and score half their chip value
Cursed cards have a 1 in 10 chance of giving 10$ when scored

And which would best fit a mechanic like this

violet void
#

sounds like an enhancement

wintry solar
#

they're just different ways to modify a card, there's not really a difference in what they do

runic pecan
#

How do I make my config toggleable in-game?

vital rapids
#

I'll go with enhancement for this one

merry raven
#
G.E_MANAGER:add_event(Event({
                        trigger = 'after',
                        delay = 0.1,
                        func = function()
                            local new_rank = math.ceil(playCard.base.id / 2)
                            local suit_prefix = string.sub(playCard.base.suit, 1, 1)..'_'
                            local rank_suffix = new_rank < 10 and tostring(new_rank)
                                or new_rank == 10 and 'T'
                                or new_rank == 11 and 'J'
                                or new_rank == 12 and 'Q'
                                or new_rank == 13 and 'K'
                                or 'A'
             
                            G.playing_card = (G.playing_card and G.playing_card + 1) or 1
                            local new_card = copy_card(playCard, nil, nil, G.playing_card)
                            new_card:set_base(G.P_CARDS[suit_prefix..rank_suffix])
                            G.deck.config.card_limit = G.deck.config.card_limit + 1
             
                            for i = 1, 2 do
                                table.insert(G.playing_cards, new_card)
                                G.hand:emplace(new_card)
                                new_card.states.visible = nil
                                new_card:start_materialize()
                            end
                            return true
                        end
                    }))

Trying to make a Joker that divides a Pair into two clones for each card but with their ranks halved, but when the clones get made, some ghost cards get created, and the cloned cards have this particle stuck to them. If I played the cloned cards they just go back to my hand flipped.

Any insights?

woeful tundra
#

its midas touch 😛

manic rune
#

the midas touch's allegations going crazy

woeful tundra
viral stream
#

this one's more of just a general lua question but im making mods without knowing lua 😁

local function getMult(enhanceType)
    local enhanceCount = 0
    for k, v in pairs(G.playing_cards) do
        if v.config.center == enhanceType then enhanceCount = enhanceCount+1 end
    end
    return enhanceCount
end

could i not just pass center through enhancetype? as there's other jokers with similar effects based on x cards in deck for different enhancements just thought it would be better not to hard code the count for each one and just do something like this getMult(G.P_CENTERS.m_blr_wisp)

fresh igloo
#

hey every time i put the Deck builder mod into my modfolder it shows this when i start balatro
Bild
already did a fresh install and reinstalled smods and talisman
and lovley installed itself
oh and i put the versions.dll in the game directory of Balatro
i rly have no clue what else to do

frosty dock
#

there's a fork that should be updated

fresh igloo
#

i dont get it

#

why are there so many problems with the smod and its versions

frosty dock
#

that's not a problem with steamodded

#

that's just deck creator

fresh igloo
#

oh so the mod is just scuffed

#

should i install the old smod cal and retry

#

?

frosty dock
#

this isn't an old calc vs. new calc problem

#

deck creator is way older

fresh igloo
#

nope

frosty dock
fresh igloo
frosty dock
#

apparently you need this version? idk

fresh igloo
#

now it works

#

thank u so much

#

but how did u know/find the version i need

#

teach me sempai

frosty dock
#

i knew off the top of my head that the fork existed, i just didn't also check the thread at first to see that there's a different version posted there (which is ahead of the one on github)

fresh igloo
#

i rly dont understand what u mean be fork

#

and what threat do u mean spasifficly

frosty dock
#

a fork is just someone else's modified version of the original code

fresh igloo
#

ah now i get it

#

Thanks for the help ;3

ionic timber
#

what's the "correct way" to use probabilities (in a way that is compatible with "Oops all 6s" for instance)

random sleet
#

G.GAME.probabilities.normal

#

it's the "1" in "1 in X chance" effects that gets modified by oops

ionic timber
#

Alright, thanks a lot mate!

wintry solar
crisp coral
#

fucked up and evil

sick sparrow
#

if the rating isn't 19+, then mult x100

icy cobalt
#

If I want to set the reroll cost to 1 with a joker, how can I do that without impacting the reroll cost when the joker is sold?

ionic timber
#

what's the best way to delete a card in hand , (the hanged man style, with the animation that come with it) I can't find a way to use remove_card() , and remove() does work but without the animation

frosty dock
#

start_dissolve

ionic timber
#

is it the function that remove it or that plays the anim ? (like, should it be used with remove() or should it be used alone for the described purpose ?)

frosty dock
#

it does both

ionic timber
#

okay, just making sure ; thanks man , appreciate it

#

works like a charm , thanks again

old bane
#

is there a way to replace jimbo's sprite? i don't want him to appear in my shops but i keep on seeing him everywhere

cursive glade
#

What's the proper way to have a joker show a message? Like when it destroys a card, or adds to mult or something? card_eval_status_text keeps giving me an error

frosty dock
#

just return the message in your calculate function

viral stream
#

thought to myself 'oh why can't i find canio in the code?' 😭

random sleet
#

custom card layer,,,,,,,,

#

(no they're not stickers in disguise)

random sleet
#

card layer api when /j

wintry solar
#

It’s been something I’ve toyed with

royal ridge
hardy viper
#

everything is british

wintry solar
#

Not everything

#

Looking at you, consumeable

frosty dock
#

gluttenous_joker

hardy viper
random sleet
#

a lot of things are just wrong

royal ridge
#

to make it worse, it's referred to as parallax in other places

random sleet
#

arent there even some spots where consumable is used in vanilla code

royal ridge
#

negative_consumable apparently

random sleet
#

oh yeah for uh deck backs

#

consistency is for chumps hee hee hoo hoo

icy cobalt
#

Do we have a start of shop context?

random sleet
# random sleet custom card layer,,,,,,,,

me when i mod an entire card layer in in 3 hours because i thought it'd be funny
(still need to make them all have unique effects rn they're all just X3 Mult lul)

wintry solar
icy cobalt
wintry solar
#

It depends what your effect is

icy cobalt
#

I'm just looking to set the G.GAME.round_resets.temp_reroll_cost to zero when the shop starts

viral stream
#

making a joker that just gives 3$ every time a card is added or destroyed, it works normally but when using hanged man it only procs once from the 2 deleted cards how would i fix that

cursive glade
frosty dock
#

also very much possible as of better calc

random sleet
#
return {
  message = "Hee Hee!",
  extra = {
    message = "Hoo hoo!",
  },
}
#

this can be repeated ad infinitum

frosty dock
#

linked list mentioned?

random sleet
#

i'm not mentioning whatever the hell a linking list is and you can't make me

hardy viper
#

who up linking they list

random sleet
frosty dock
hardy viper
dreamy thunder
#

how to disable jokers in custom blinds?

prisma loom
#

Is this a proper way to make description for cards?

#

it seems like it doesnt work

#

mb I did something wrong with prefix/key?

#

need help

viral stream
#

nvm

prisma loom
#

ok :D

viral stream
#

that's in locale my bad

prisma loom
#

yeah

#

Basically what I understood is that its more cleaner to use a separate file for all descp instead of writing loc_txt for each joker/card in main.lua

#

and it has better functionality

viral stream
cursive glade
#

Random question. If Madness doesn't have any joker available to destroy that's active (eternal, to slice, etc.), why is it still gaining x0.5 per small/big blind? Is it destroying a joker in_pool?

wooden badge
#

in the text it is written as such

cursive glade
#

ah, makes sense

frosty dock
#

it doesn't need to destroy a joker to gain mult

#

madness is worded roughly as "gain mult and destroy a joker", whereas dagger is the other way around

#

the implicit rule is that only the former is a condition for the latter

wooden badge
#

implies that the second event is reliant on the first event

#

with dagger, if it can't complete destruction then there is no sell value to add if that makes sense

#

gaining .5 xmult can just happen

cursive glade
#

yeah, it's that and that gets it. I thought the effect worked something like "Destroys 1 Joker when Small/Big Blind selected. Gains x0.5 when a joker is destroyed". The way it's currently written makes more sense.

wooden badge
#

For your own effects that could be a gray area with this, something like 'Do A to do B' probably shows most concisely that B happening relies on A's completion

#

'Do A and do B' just means they both happen (or at least try and happen)

wooden badge
manic rune
#

now that i think about it

#

is there a way to turn balatro completely upside down lol

devout pewter
#

How would one go about learning how to code mods from the ground up?

manic rune
devout pewter
#

thanks

manic rune
#

np, feel free to post your problems here when you find yourself troubled too, there should be a lot of people willing to help you

old bane
#

i know this is like super late but how would i use this in the lua file? I wanna make something similar to 'The Wheel' but for a Joker, and I saw this, but idk how to use it >_<

zealous glen
#

To use the new context, you program just like for any other context

#

although I do recommend changing the name of the context

old bane
old bane
#

cause i dont wanna get it confused

mystic river
manic rune
#

luau and lua r pretty much identical so it didnt take long for me to actually make my first functional mod lol

viral stream
#

is setting a random joker's edition to negative just :set_edition('e_negative', true) ?
i've been trying to make one where when defeating a boss blind it has a 1 in 2 chance of giving negative to a random joker but idk what im doing wrong in making it

zealous glen
manic rune
#

card:[that]

viral stream
# manic rune card:[that]

do you know what i'm doing wrong in here? i thought i could just take the logic for madness and just make it negative instead of destroying the card

  if context.end_of_round and G.GAME.blind.boss and not context.blueprint then
    if pseudorandom('machina') < G.GAME.probabilities.normal / card.ability.extra.odds then
        local negativePool = {}
        for i = 1, #G.jokers.cards do
            if G.jokers.cards[i] ~= self and G.jokers.cards[i].eligible_editionless_jokers then negativePool[#negativePool+1] = G.jokers.cards[i] end
        end
        local negativePick = #negativePool > 0 and pseudorandom_element(negativePool, pseudoseed('machina')) or nil
        return {
            negativePick:set_edition('e_negative', true)
        }
manic rune
#

hm, wait a bit, let me try

cedar stream
#

if i want to define a suit in a different way would i do G.suits = or G.GAME.suits

prisma loom
#

What does 'collect repititions' mean?

#

can someone give an example?

random sleet
#

when the game is going to retrigger something, it figures out how many times it will retrigger it before it does anything else related to scoring that card

#

so it looks at all possible effects (jokers and seals by default) that can grant a playing card retriggers, and tallies them all up, then gets to scoring

prisma loom
random sleet
#

indicating the timing of the context, individual means "on a playing card"

prisma loom
#

oooh

#

that sounds a lot easier to digest

random sleet
#

no wait thats not right cards in hand get individual too dont they

prisma loom
#

it says it goes through all scoring cards and held in hand cards

random sleet
#

yeah that makes sense

prisma loom
#

basically 'scoring' or 'held in hand'

#

trigger

random sleet
#

you can check context.individual and context.cardarea == G.play for played cards, or context.individual and context.cardarea == G.hand for held in hand

#

if you want to narrow it down

prisma loom
#

thanks!

#

that makes sense

#

Can 'context.other_card = [CARD]' used for specific suits?

#

and if there are multiple, should it look like context.other_card = Spade, Diamond or I have to type out each individually

#

?

random sleet
#

so context.other_card (while we're talking about context.individual anyway) is going to be the playing card actually being scored

#

not the name of it or anything, the whole card object

#

you can check whatever values you want thereof, i believe there's a card:is_suit function?

cedar stream
#

yea there is

manic rune
#

here, i think the code should be like this

random sleet
#

so that would look like context.other_card:is_suit("Diamonds") or whichever

manic rune
#
if context.end_of_round and context.cardarea == G.jokers and G.GAME.blind.boss and not context.blueprint then
         local pool = {}
         for i,v in pairs(G.jokers.cards) do                                                          
            if not v:get_edition() and v ~= self then
               pool[#pool + 1] = v
            end
         end
         local randomJokerChosen = pool[math.random(1,#pool)]
         if randomJokerChosen then
            randomJokerChosen:set_edition('e_negative',true)
         end
      end
viral stream
#

i'll give that a try, thanks

prisma loom
random sleet
#

main_scoring is the context for when a playing card scores itself

#

it's used for enhancements and other card upgrade effects

prisma loom
#

so I cant use scoring_hand for this?

random sleet
#

context.scoring_hand isn't a timing context

#

it'll just have all the cards that are actively being scored (i.e. are part of the scoring hand)

#

there's two kinds of contexts

#

and it's annoying that there's not really much obvious difference

random sleet
#

but some are meant for timing and some are just ways to get information about things happening at the moment (i.e. context)

#

yep its an array

#

or table or whatever lua's calling them this month

manic rune
#

whats the difference between an array and a table

#

💀

random sleet
#

i'll tell you when you're older

manic rune
#

😭

#

whaaaaa

#

bros gatekeeping like this is the story between bees and birds bruv

random sleet
manic rune
#

oh, real quick

prisma loom
manic rune
#

whats the difference between "self" and "card"?

random sleet
#

all four letters

#

next question

manic rune
#

i had this assumption thinking "self" means the whatever is using the calculation, but turned out it was "card"

#

i havent figured out wtf is self yet 💀

dreamy thunder
random sleet
#

so you see, words in programming languages only mean things when they're told to

elder vapor
random sleet
#

if you're looking at base balatro code, or writing a function that's an extension of the Card object (or other vanilla objects) you'll likely use self more, since the notation object:function() is the same as object.function(self)

cedar stream
#

so how does card:is_suit work with custom suits

prisma loom
#

sounds logical

random sleet
#

but for smods code, you'll usually write functions with (self, card, ...) in the function definition

#

this is because the self here isn't a card

#

it's the center; the SMODS object you're defining

#

self is "this object"

worthy anchor
#

-scrolls up to see what I missed- she link on my list till I incorrect buzzer noise

random sleet
#

the tricky part is keeping track of what object "this" is

manic rune
#

hmmmmmmmmmmmmmmmmm

#

yeah, i think i understand it a little, thanks

prisma loom
#

that you shouldnt change

random sleet
prisma loom
#

so its a name, gotcha

random sleet
#

if you're working within a SMODS object, you probably don't want to change self

#

not because you can't, but because it probably means you're doing something wrong

manic rune
prisma loom
# random sleet context.scoring_hand isn't a timing context

So if I need to check if poker hand contains X, I use scoring_hand? Lets say I want Joker to check if poker hand contains a card of each suit, what do I type in? Should I add: context.scoring_hand and context.other_card:is_suit("Diamonds") and context.other_card:is_suit("Spades")... etc. ?

cedar stream
prisma loom
viral stream
manic rune
#

i just noticed that, sorry

viral stream
#

awesome thank you

manic rune
#

no probs :D

cedar stream
manic rune
# prisma loom there's not much here yet

just a small thing, but you dont really need to use "context.joker_main == true", you can just use "context.joker_main" and it means pretty much the same thing

naive notch
#

Does anyone know how you would write code to put a sticker on a playing card?

mortal arrow
#

Hi guys i wanted to try to make a mod but how do i do that ? I know nothing about balatro modding

cedar stream
#

stickers are read as abbilities if i remember correctly

random sleet
prisma loom
#

Are
context.other_card:is_suit("Diamonds")
and
card:is_suit("Diamonds")
the same thing?

random sleet
#

here card is your joker, so i imagine you probably dont want to do that

#

context.other_card would mean the playing card being scored if you were in context.individual, but this check appears to be in context.joker_main

#

where i forget if context.other_card even exists but if it does it's probably just your joker again

random sleet
#

context.scoring_hand has what you need; loop over it with ipairs or something idk

dreamy thunder
#

im trying this but cant figure out how to use it

prisma loom
dreamy thunder
manic rune
# dreamy thunder i meant to reply to this

mmm i never actually coded a blind before, let me try to make one with that function (probably will take a decent amount of time since im relatively new, dont have high expectations 💀)

#

hmmmm

#

@dreamy thunder how do you spawn a blind using debug menu?

dreamy thunder
#

using 3

manic rune
#

huh, thought it would be different, lemme try

dreamy thunder
#

i hate blinds

manic rune
#

its probably this tbh

#

but the problem here is

#

i dont know how to get a blind to function to begin with

#

so i cant even test it out

#

:sku

#

...like, what is this?

dreamy thunder
#

im just as confused as you are

cerulean rose
manic rune
#

oof

#

hmmmmmmm

#

the playing cards got debuffed too 💀

dreamy thunder
#

when i tried only playing cards got debuffed

#

not the jokers

#

😭** **

manic rune
#

alright sooo its actually this

#

the only thing left here is to figure out if theres a way to see whether "card" is a joker

#

uhhh

#

is there a way to do that?

frosty dock
#

card.ability.set == 'Joker'

manic rune
#

thanks

#

:D

#

@dreamy thunder it works now

dreamy thunder
#

thanks!

manic rune
#
recalc_debuff = function(self,card,from_blind)
      if card.ability.set == 'Joker' then return true end
   end
ionic verge
#

how hard would it be to combine hands and discards into one as an ability for a deck?

manic rune
#

something like, if you have no discard left then it will use your hand to discard, vice versa

prisma loom
#

can I use set_ability with scoring_hand?

#

how could I apply set ability to all scoring cards?

manic rune
#

i dont think so, no

storm kraken
manic rune
#

its just this

#

context.other_card:set_ability(G.P_CENTERS.m_wild,nil,true)

ionic verge
#

i v ipairs is so so so good

prisma loom
manic rune
#

huh

#

didnt know context.scoring_hand exist

#

💀

#

but uh, wait

prisma loom
#

I dont know either

#

I need to check if poker hand contains a card of each suit first

manic rune
#

mhm, got it

prisma loom
ionic timber
#

how to actually call smods.change_base() ? like, putting a str for a suit doesn't work so I guess it's a specific type but after looking for 30min I still don't know what to put instead

prisma loom
#

you send the right stuff

#

it works now

manic rune
#

oh lol

#

i never used context.scoring_hand so i was a bit worried context.other_card wouldnt work

#

so im kinda typing out your entire code here for me to try out first 💀

prisma loom
#

Midas Mask turns cards into gold before they start giving score

manic rune
#

oh

#

so you want it to turn into wild cards before scoring?

prisma loom
#

but my code makes it so that card becomes Wild right when it scores

prisma loom
#

for consisntency ig

manic rune
#

yeah, got it, let me try out smt

ionic verge
#

(and then everything that gives one or the other adds it to that one mixed counter)

cerulean rose
#

it would probably be best to keep them separate internally and then just add them for the hud

ionic verge
#

mhm

#

makes sense

ionic timber
# cerulean rose can you show the full code
elseif random_effect == 3 then
                -- Remplace des cartes
                local random_num = math.random(1, #G.hand.cards)
                local SuitChosen = PickRandomRank()
                local NumberChosen = PickRandomCard()
                for i = 1, random_num, 1 do
                    if #G.hand.cards > 0 then
                        local random_card = math.random(1, #G.hand.cards)
                        --G.hand.cards[random_card]:start_dissolve()
                        SMODS.change_base(G.hand.cards[random_card], SMODS.Suits[math.random(1, #SMODS.Ranks)], SMODS.Ranks[math.random(1, #SMODS.Ranks)])
                    end
                end
            
                return {
                    message = "CAr..Card ?replac.Z.?e "
                }

            end

I just don't really know how to get a table for every suits in the game , saw something similar to that in the code but it doesn't work unfortunately (also don't mind the message, it's intentional lmao)

naive notch
#

Im trying to put stickers on playing cards through a consumable but it crashes everytime

ionic verge
cerulean rose
ionic timber
#

it doesn't actually work , that's the thing

cerulean rose
#

also tables like SMODS.Suits aren't indexed numerically

manic rune
#

you want to change the "context.scoring_hand" in the first if statement to "context.before"

#

and it should work

#

ah, and change your "context.cardarea == G.play" to "context.cardarea == G.jokers" too

ionic timber
old bane
#

how would i make it so that a joker has a chance to flip cards over and keep them flipped over?

naive notch
#

like keep them flipped between rounds?

manic rune
cerulean rose
ionic timber
#

simply "local suits = { 'Hearts', 'Diamonds','Spades','Clubs'}" at the top of the file, and accessed it like suits[math.random( 1, #suits)]

old bane
naive notch
#

flip()

cerulean rose
naive notch
#

I did that on accident last night

prisma loom
#

now game crashes

naive notch
ionic timber
cerulean rose
manic rune
#

wha

#

thats odd, whats the error?

#

midas mask works under the same context too, so its weird how yours just crash

prisma loom
manic rune
#

oh, you gotta change the "context.other_card:set_ability(G.P_CENTERS.m_wild,nil,true)" part this time

frosty dock
manic rune
#

for i,v in ipairs(context.scoring_hand) do
v:set_ability(G.P_CENTERS.m_wild,nil,true)
end

#

replace it with that

ionic timber
manic rune
#

remove the "and context.individual" if it still crashes, though im (kinda?) sure it wont affect anything

cerulean rose
#

i say strength specifically because its easiest to ctrl-f

ionic timber
#

yeah I figured it would be easier to look into strength specifically

#

thanks for the help btw !

manic rune
#

nice :D

old bane
#

for the little tooltips on the side that say related cards (for example if a card creates a specific Tarot card it'll say what that Tarot card does) is that automatic or do we have to do that ourselves?

cerulean rose
#

you have to do it manually

#

info_queue[#info_queue+1] = YOUR_CENTER_HERE

#

within the loc_vars function

old bane
#

ah gotcha

open aspen
#

is there a template for creating joker cards

shell lagoon
open aspen
#

i swear there was a thread in this discord

shell lagoon
#

oh, i used the atlas from the example jokers for the sizing

shell lagoon
naive notch
#

Ok I give up on stickers for now, not enough people work with them so using them makes my life way harder. Im just gonna make these editions for now and once I have a better idea of how things work in lua I'll try and see if I can make stickers work again

prisma loom
#

Is this correct? (I want to implement custom sfx)

#

It doesn't seem to work tho :(

open aspen
#

had an idea for a joker

#

note the word joker on the edges

twilit cargo
shell lagoon
shell lagoon
#

what does it do?

open aspen
#

no idea yet

naive notch
#

x e mult

wintry solar
#

A little?

shell lagoon
#

okay a lot busted

#

i might nerf it at some point

#

it's only cards played not cards in hand but still, very unbalanced and that's the point

#

i've updated it to state that since i took that screenshot

prisma loom
#

unfortunately

ionic verge
#

how would i have a deck modify the starting deck like checkered and ancient do?

#

specifically i want it to do this

violet void
#

ok it was this

frosty dock
#

(self, args)

frosty dock
ionic verge
#

cool

violet void
cerulean rose
#

G.GAME.starting_deck_size = #G.playing_cards is important to make sure erosion works properly

dreamy thunder
#

what to use to edit the discard ammount?

wintry solar
#

<@&1133519078540185692>

dreamy thunder
#

oh well

frosty dock
mystic river
#

how do you destroy unscored cards? context.destroying_card doesn't seem to interact with them at all

dreamy thunder
wintry solar
#

nothing interacts with unscored cards

mystic river
#

well that's inconvenient :T

wintry solar
#

we could maybe add it as an optional feature

#

@frosty dock thoughts?

frosty dock
#

doesn't sound like it adds a lot of overhead

#

so long as it doesn't interfere with existing calculation, i don't think it'd need to be optional

#

but sounds nice to have in smods

frosty dock
wintry solar
frosty dock
#

fair. i assume you were referring to new skins that use hc and lc palette keys then?

ionic timber
wintry solar
#

yes

frosty dock
#

then I'll just make it a fallback i guess

#

the other case should cover it if it's not an elseif

wintry solar
#

though I'm not sure on the need to use hc and lc on custom skins

frosty dock
#

i mean it's bad to have them be magic values

naive notch
#

is it possible to make cards with multiple enhancements?

frosty dock
wintry solar
#

you could have modifiers do it too right?

#

<@&1133519078540185692>

karmic creek
wintry solar
#

2 in 15 mins!

naive notch
#

Originally I was gonna use stickers to function as a new enhancement without interfering with the original ones but I couldn't figure out how to actually get them onto my playing cards

cerulean rose
raw geyser
#

How would you destroy a card after playing but before scoring? Just remove it from scoring_hand and G.play.cards?

frosty dock
wintry solar
#

ewwwww

frosty dock
#

yeah it's terrible

hardy viper
open aspen
#

how does blueprint decide whats compatible

hardy viper
frosty dock
#

except that's just how it decides if it should display something as compatible

hardy viper
#

yeah thats what they asked

frosty dock
#

the actual compat happens in code

open aspen
frosty dock
wintry solar
#

I'll have a think

wintry solar
#

do we definitely want the toggle rather than a config value on the actual palette?

open aspen
#

ok

frosty dock
frosty dock
wintry solar
#

yeah that's what I mean, we could have a config that controls the lc/hc-ness of the unchanged cards

open aspen
wintry solar
#

like it you're using a hc skin, why would you ever want lc other cards

open aspen
#

like, it seems like 1 line to control all of that is a bit weird

#

what if i changed my card to copy the right most card just as an example

frosty dock
frosty dock
mystic river
#

blueprint_compat doesn't control "all of that", it just controls the part where blueprint says it's compatible
context.blueprint means "i am currently a blueprint copying this card", so you put not context.blueprint in your calculation function in appropriate places

wintry solar
#

I was thinking something like hc_others = true to toggle it

open aspen
#

ah

#

i realize what the miscommunicaton is

#

im making a card that has a function similar to blueprint

#

so this card should 1. be able to copy the effects of other cards similar to blueprint, and 2. not be able to copy blueprint or be copied by blueprint

#

i can do the first one

frosty dock
#

then you'd need to check if context.blueprint_card is a blueprint

open aspen
#

im just curious if i can make it so this card cant copy blueprint

#

ykw

#

i realized

#

this is so easy

frosty dock
#

or check if the card you're trying to copy is a blueprint^

open aspen
#

after saying that last part out loud

#

yea

frosty dock
#

whichever way

open aspen
#

wait i have a question

#

like in vanilla, if i took a blueprint and a brainstorm

#

and nothing else

#

and put the blueprint on the left

#

what happens

frosty dock
#

absolutely nothing

#

there's no effect to copy, and they stop looking after going too deep

open aspen
#

i ask because the card i was making is like blueprint but it copies a different card so in theory u could do the same situation with my card

frosty dock
#

too deep being however many jokers there are

open aspen
#

after a while

naive notch
#

So if I switch "m_gold" to "element_fire" it should apply my custume enhancement to the card, correct?

naive notch
#

ty

frosty dock
#

where modprefix is whatever your mod prefix is (duh)

prisma loom
#

@manic rune <3

naive notch
frosty dock
#

chat i think i messed up

raw geyser
#

Can you remove a card before scoring?

frosty dock
#

no

naive notch
#

Can a card be destoryed mid scoring?

frosty dock
#

no

raw geyser
#

Can a card be destroyed post scoring?

frosty dock
#

yes

raw geyser
#

We did it boys

frosty dock
#

we did it boys

wintry solar
#

what was the solution?

frosty dock
#

i ended up giving palettes an hc_default option

#

everything else seemed too convoluted and bad for api design

#

i think it's about ready now

naive notch
frosty dock
#

deck skins seem good to go. there's probably an issue or two hiding somewhere :cba:

#

do i say fuck it we ball 🤔

wintry solar
#

they seemed pretty much done when I tested the other day

hardy viper
#

ball it we fuck

glass scaffold
frosty dock
#

ball fuck we it

glass scaffold
#

it we ball fuck

frosty dock
#

we fuck it ball

gilded narwhal
#

ball, fuck it we

naive notch
#

ball we fuck it

frosty dock
#

bucket if wall

tender ermine
#

How would I check for a scored suit?

#

Like whats the function for that

manic rune
#

for instance, context.other_card:is_suit("Diamonds"), which checks if the card suit is diamonds

tender ermine
#

Gotcha

#

Thanks

manic rune
#

no probs

zealous glen
#

Does any mod add a single Booster pack?

manic rune
#

that one MASSIVE voucher mod does add a voucher booster pack

#

(i actually still cant remember the mod name, holy shit)

zealous glen
#

betmma's?

manic rune
#

i think so, yeah

zealous glen
#

I've never been able to understand Betmma's code v_v

manic rune
#

their code is complex? 💀

#

i never checked lol

zealous glen
manic rune
#

oof, so spaghetti code?

zealous glen
#

Maybe the rumours of Betmma's spaghetti are overstated

#

But that was my impression back then

manic rune
#

well at least it works, so we don't question it 😭

lucid owl
#

lol ai guy deleted

manic rune
#

what was that

#

💀

lucid owl
#

someone asked about the right ai model to use to generate joker functions

frosty dock
#

hell naw

lucid owl
#

i don't think i've ever seen any person use ai for a mod and have it actually work

runic pecan
#

How do I access hand level number?
I thought G.GAME.hands[hand_type].level was it but it's a table instead of a number if with Talisman for some reason.

foggy carbon
#

All numbers are tables with Talisman

#

it's how they get past the e308 limit - they store numbers as tables, with the first part being before the e and the second part being after the e

shell lagoon
#

i missed a return true and it made it loop infinitely apparently

foggy carbon
#

a couple days ago my brother suggested a joker idea, and I like the concept, but I don't know how I'd go about it. I could probably use context.before to change what a hand scores as, but how would I add cards to the scoring hand?

lucid owl
shell lagoon
#

cobblestone generator

#

now for the actual problem i'm trying to solve which caused that video

#

as far as i know, this should happen at the same time as the rest of the event, and i don't know what to change to make that happen

sturdy compass
#

Huh, that is a weird one. If I had to guess, maybe card_eval_status_text doesn't go odd during context.individual?

random sleet
#

you want to return a table with a message and a func that then creates your stone card

shell lagoon
#

ohh so should i not be using the event manager at all?

random sleet
#

you might need to queue an event from the func

sturdy compass
#

I didn't even know you could return a function. How 'bout that

random sleet
#

i'm not sure how the timing works out precisely, you'll have to tweak it, but i know this is the general form you want

shell lagoon
#

okay i'll try reformatting it like that, hopefully i can figure it out

wintry solar
#

you can leave the stone bit in the main part, just return the message

#

the reason its mistimed is card{_eval_status_text queues an event, so it gets pushed to the end of the queue

shell lagoon
#

is this what you mean?

#

i tested this and it doesn't display the message, i'll try putting the function in the return

shell lagoon
normal crest
#

keep your previous card_eval_status_text code but pass instant = true to it alongside colour and message

coral smelt
#

Hey yall, this may be dumb but is there some sort of template or something for reskinning jokers mods?

random sleet
#

the rest looks like your code program going apeshit

#

oh no i see

shell lagoon
random sleet
#

the Event is malformed now

shell lagoon
#

of course it was something simple loll

random sleet
#

but also go off if instant worked lol

terse hull
#

heya, is is possible to force a particular voucher to be in a shop via debug console or some such? need a specific one for testing

random sleet
#

debugplus spawns stuff with 3 from collection

shell lagoon
#

i just wanna say that i'm diving into balatro modding without learning lua first so uh. i'm just surprised that anything i'm doing is affecting the game in the first place

#

it's been really fun though

runic pecan
#

So I hooked up this function by using the highlighted part as pattern:

#

Should I use the whole function as pattern instead to be safer or this is good enough?
position is 'after' by the way.

normal crest
#

Do you want to add something before or after that

runic pecan
#

after

normal crest
#

then you don't need to use a lovely patch, you can use a hook

shell lagoon
terse hull
runic pecan
normal crest
#

lovely patches and hooks are different

runic pecan
#

OK

normal crest
#

let me find an example

#

you store a reference to the original function, then you replace it, making sure to make use of the reference previously saved in some part of the new function

runic pecan
#

So like,local LUH = level_up_hand function level_up_hand(card, hand, instant, amount) LUH(card, hand, instant, amount) for _,J in ipairs(G.jokers.cards) do J:calculate_joker({level_up_hand = hand, level_up_amount = amount}) end

normal crest
#

exactly

runic pecan
#

Where do I put this piece of code?

normal crest
#

Anywhere in your mod's code, as long as it runs

tender ermine
#

Balatro isn’t reviving the return messages, please help

#

They are in a calc function btw

normal crest
#

And what's the issue exactly?

spark tapir
#

Anyone knows how to mod pirated balatro?

#

I wanna try the Neato mod Roffle streamed earlier

#

Is it possible to mod pirated balatro?

jagged sun
#

you should genuinely be ashamed of yourself- it's one thing to pirate a triple a video game but a) this is an indie game by an independent developer who deserves every cent you give him and b) you're asking such a question IN HIS OWN SERVER. like do you realize how disrespectful that is? if you're gonna pirate don't do it so blatantly, you look like an ass for doing such

ionic verge
#

jesus christ maybe they just cant afford it

jagged sun
#

🤷

spark tapir
#

I know that and I plan on buying it. I don't have money rn. I'm just wondering if you can mod it

runic pecan
crisp coral
#

you're on your own for this

spark tapir
#

Ok thanks for answering

#

Last question

lucid owl
#

i know it's probably just a matter of order, but how do i keep the message from showing up twice? the joker functions entirely correctly otherwise

spark tapir
#

Is mobile balatro possible to mod? I bought mobile balatro. If not when will mobile balatro be moddable?

ionic verge
#

no unfortunately

#

sorry bud

spark tapir
#

Ok thanks

normal crest
tender ermine
# normal crest And what's the issue exactly?

The code that isn’t in the return’s selection runs fine, but everything inside of it doesn’t do anything. My code btw (can’t get discord on my computer, never worked for some reason. So sorry for bad image quality)

runic pecan
ionic verge
lucid owl
ionic verge
#

from what i saw earlier

normal crest
runic pecan
ionic verge
#

s'all good

tender ermine
ionic verge
#

when first created how is G.playing_cards ordered? is it sorted by rank or suit?

#

(i.e. is it 2-2-2-2-3-3-3-3-etc or 2-3-4-5-6-7-8-etc)

#

(im asking bc im making a deck)

lucid owl
ionic verge
#

wait does print() print to the debug log or what

tender ermine
lucid owl
ionic verge
#

cool

#

why is the apply function running multiple times seemingly?

#

(print(i) is just for debugging)

weak gate
#

can I increase the line limit in the Lovely console?

cerulean rose
#

is it possible to disable/hide the lovely console

cerulean rose
ionic verge
#

yeah i figured out that one

cerulean rose
ionic verge
#

yeah seemingly infinitely

#

like it just straight just doesnt stop

#

(this obviously happens when i actually start up with the deck)

cerulean rose
#

you forgot to return true in the event

random sleet
#

i am eliciting responses and thoughts and aggravations

ionic verge
#

fuuuuuuuuuuuuuuuck

#

danke

late shadow
#

how do u make a joker check if theres a specific word in the name of other jokers that u have ?

#

the main parts im having trouble with r getting it to actually check for the word,
and im not entirely sure which things let a joker check text/variable (etc) in other jokers in hand

ionic verge
#

whats a good way to randomize the suit of a card?

late shadow
#

ik theres other_jokers but im lowk tired and been doing this for like 5 hours

ionic verge
#

like G.playing_cards[i]:{whatfunctionhere}

late shadow
#

i think incorperating psuedorandom would be nice

#

psuedorandom makes it so that the same card can be gotten on a specific seed

random sleet
#

well i can tell you this gets a random suit and rank

ionic verge
#

true

late shadow
#

normal random would be random regardless of seed

ionic verge
random sleet
#

i believe in you

ionic verge
#

the goal is this but all random suits

normal crest
cursive glade
late shadow
#

u can use the ` bracket to make italics not work

normal crest
late shadow
#

like *dfsfsdfjk*

#

part of the issue im having is im not not sure like how to make it so that it can be from anytime a joker is added (like baseball card)

#

the joker is conceptually very similar to baseball card

cerulean rose
cursive glade
late shadow
#

dang yeah discord mobile is buns

cerulean rose
late shadow
#

the wording makes me think that playing_cards means like, your deck?

random sleet
late shadow
random sleet
#

G.playing_cards is your full deck

late shadow
random sleet
#

you didnt even notice? lol

cursive glade
#

You right. I'm tired too. Hang on...

late shadow
#

is there a specific name for the jokers area

random sleet
ionic verge
cerulean rose
#

use SMODS.find_card to search for a specific jokers

random sleet
late shadow
late shadow
#

so im kinda leading myself in circles 😭

weak gate
#

if this is my joker's key, how do I create this card with SMODS.create_joker?

late shadow
#

im new to modding sorry

cerulean rose
cerulean rose
cursive glade
late shadow
#

AH currentjoker

#

i think thats the single term i was missing somehow

cursive glade
#

currentJoker is just the variable name I gave the joker the for loop is currently looking at

late shadow
#

ohh

random sleet
late shadow
#

im stupid