#💻・modding-dev

1 messages · Page 567 of 1

feral tree
#

if i wanna set Card_Character to a different joker that isnt the default joker is that possible?

red flower
#

the ui

gilded goblet
#

but for now you could focus on making it not crash in the menu

clear ocean
robust depot
gilded goblet
#

cool cool, now what i'd recommend is getting out of that cfg system, you don't really need it

clear ocean
#

my best guess is that there is some sort of method i need to use to add the card or didn't set up the set correctly

robust depot
#

what was wrong with my code before? so i know for future reference

clear ocean
#

do i need to do this?

#

oh i see what i did wrong i think

robust depot
#

ummm i dont think this was intended

stark viper
#

trying to make a Joker that has two effects: one that gains flat mult if any of the cards in the scoring hand is a 3, 4, 2, or 8; and another that gives Xmult on the final hand of the round. However, this calculate function is doing neither of those things. hewp pwease?

gilded goblet
#

when you assign local cfg = card and card.ability and card.ability.extra you're basically telling lua to tell you if that's true or false, it's not really turning card or its other tables into a variable you could then use like cfg.odds

#

from my understanding

clear ocean
#

NO WAY THATS ALL IT WAS

robust depot
#

same with this

clear ocean
#

will work on the art and such later

gilded goblet
#

you are also hardcoding numerator as 1, while SMODS.get_probability_vars can already do that for you when you create two variables in one line: local numerator, denominator

clear ocean
#

since the great pyramid is the oldest world wonder i think its fitting it would be the default and since that it would be the fool of the set

winter flower
clear ocean
robust depot
#

like in the entire game

sonic cedar
#

do you want me to push what i have and you can look at it then

clear ocean
#

you probably accidentally hooked the probability to be set to 1 in 2

gilded goblet
robust depot
#

for every possible odd

#

lucky cards. wheel, etc

#

how in tarnation did this happen

gilded goblet
#

was it like that before or after this crash fix?

stark viper
winter flower
#

hold on let me

robust depot
#

Ok well it had something to do with the CFG

#

cause i went through and changed all them to card.ability.extra.X and it fixed it

winter flower
gilded goblet
winter flower
robust depot
#

yea im very confused too but hey it all worked out

stark viper
#

oh okay i knew there would be a vanilla joker that would help me out but i couldn't think of any until now (odd todd, fib, etc.)

#

i feel a little dumb lol

gilded goblet
#

completely up to you though

winter flower
stark viper
#

it's the first time i'm making one based on ranks

#

i just completely forgot vanilla remade exists

gilded goblet
#

very detailed

winter flower
#

i always have vremade on standby
just in case.

robust depot
#

its just when i have the joker

gilded goblet
robust depot
frosty rampart
#

remember back when i told you that you're using context.mod_probability wrong

#

you're still using it wrong

#

remove that whole if block

charred widget
#

Is it ok if I interject with some questions for my own coding?

#

or should i wait until y'all are done

robust depot
warm umbra
#

it was canio

frosty rampart
# robust depot ok so now what

oh
in your retrigger joker check, the pseudorandom call has the arguments in the wrong order
it should be SMODS.pseudorandom_probability(card, 'seed', 1, odds, 'Doofed')

winter flower
gilded goblet
#

also, in context.individual, replace that return with

return {
  Xmult = card.ability.extra.Xmult
}

it just looks cleaner + you could then change Xmult in the config table to 2, for example, if you wanted

#

the config table is really handy when you want hard set variables

stark viper
frosty rampart
#

context.other_card doesn't exist in context.before

umbral zodiac
#

another lily spotted

winter flower
#

also you don’t need to use extra = {} in the return

stark viper
winter flower
#

im pretty sure

winter flower
stark viper
umbral zodiac
#

thats ok and normal

frosty rampart
winter flower
umbral zodiac
#

you know what

#

new lily nickname now

stark viper
daring fern
#

frosty rampart
gilded goblet
#

ive heard good things

#

coding is fun though

charred widget
#

turn back now

gilded goblet
#

😭

#

only thing im excited for is the shader stuff

umbral zodiac
#

it is better to make a mod yourself badly than to make it with jokerforge and be unable to code yourself imo

frosty rampart
#

and if you're transitioning from jokerforge to coding, referencing generated jokerforge code probably leads to bad habits

charred widget
#

jokerforge is good if you want an easy way to outline your mod, and also maybe an easy way to manage the sprites, but on the code side it's unbearable

gilded goblet
charred widget
#

and that's coming from someone who can't code

gilded goblet
winter flower
umbral zodiac
#

jokerforge is not capable of the same nuance that a human programmer is capable of

#

it just combines blocks

gilded goblet
#

yeah

umbral zodiac
#

if the blocks go together weirdly its bad code

winter flower
#

i have an example of the blueprint code from jokerforge but i cant go on my pc rn

stark viper
gilded goblet
#

hell yeah

#

i like that mindset

umbral zodiac
charred widget
#

i'll admit that i'm part of the "use jokerforge > jesus christ this code is dogshit > coding on your own" pipeline

gilded goblet
#

glowup

winter flower
#

i started off on jokerforge
then eased out of it because of some more complicated jokers
now i’m making batshit insane jokers that aren’t unstable from shit code

umbral zodiac
#

back in my day (may 2025) jokerforge did not exist

charred widget
#

DAMN it's that recent?

gilded goblet
#

lmao

stark viper
#

yeah i'm pretty sure jokerforge dropped in like july lol

#

because i remember it was around the time i started coding my own mod

charred widget
#

i mustve caught it hella early

#

because when i started using it only jokers were available

winter flower
#

i think i was around before like
xchips were in jf

#

and when the code was really bad internally

charred widget
#

anyways i need some help coding

stark viper
#

let the good people of this server help you

charred widget
#

thank you quite much :>

gilded goblet
charred widget
#

if I wanted to count the amount of cards with a specific edition currently in my deck, how would i go about doing that?

glass scaffold
charred widget
#

wait

stark viper
frosty rampart
stark viper
#

vanillaremade has a wiki!!!!

#

this is news to me, chat

red flower
#

yes

glass scaffold
frosty rampart
red flower
gilded goblet
#

ty n'

winter flower
#

oh right i forgot about smth

#

yeah uh how do i make this work properly
(this doesn’t work and it crashes the game)

vocal helm
#

In context.open_booster, how can I tell if the booster I just purchased was from the shop (rather than a Tag)?

charred widget
#

i'm gonna keep it real if I want to learn ANYTHING im gonna need to get in a call with someone who knows what they're doing

#

or unless people keep answering my really small questions here

#

for some reason

daring fern
#

winter flower
#

i just throw stuff together and pray to god it works

charred widget
#

well i dont because if i keep doing that i'm just gonna dig myself into a deeper and deeper pit until someone shows me the ladder that was right behind me

vocal helm
# charred widget if I wanted to count the amount of cards with a specific edition currently in my...

Wouldn't it be something like
https://github.com/nh6574/VanillaRemade/wiki#how-do-i-get-if-a-card-has-a-specific-editionenhancementsealsticker

local edition_count = 0
for index, playing_card in ipairs(G.playing_cards) do
    -- check for foil
    if card.edition and card.edition.key == "e_foil" then
         edition_count = edition_count + 1
    end
end
GitHub

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

winter flower
#

if someone tells you there’s an easier solution after making a mistake, that’s fine
you learnt about something new

vocal helm
charred widget
#

anyways, I wanted to ask about something specific

#

zygarde here makes a Cell consumable when a full house is played. How can I make it so the consumable appears once the hand finishes scoring?

daring fern
vocal helm
#

oop, thanks for the catch

daring fern
#

rocky plaza
charred widget
gilded goblet
#

i think ive figured this out ken...

feral tree
#

whats the code for replacing the title ace of spades with a specific joker?

gilded goblet
#

im tired asf

feral tree
#

trying to add a joker to the main menu, not working

#

i keep getting attempt to index field jokers over and over

stark viper
#

yeah i've completely mutilated my calculate function at this point i have no idea what's happenign

versed swan
#

How do you get a ConsumableType's localized name?

daring fern
feral tree
daring fern
# feral tree

It's because you set the set to Joker and it tried to check for unlocks, which iterates over G.jokers.cards which doesn't exist.

stark viper
daring fern
maiden kindle
#

Yeah that wasn’t a good time to jump in. Sry! mr_bones

daring fern
daring fern
frosty rampart
#

yea what something gave you is right

stark viper
#

-# this is the part of the experience where I curse my god for making me autistic

stark viper
daring fern
frosty rampart
# stark viper okay

if you only want it to count scored cards, use context.scoring_hand instead of context.full_hand

stark viper
#

right right

feral tree
#

I AM GOING FUCKING CRAZY I SWEAR TO GOD

shut latch
#

how do i spawn a custom joker in my balatro run

#

i wanna test something rq

frosty rampart
#

use debugplus, hover over a joker in the collection, and press ctrl-3

frosty rampart
feral tree
daring fern
frosty rampart
#

i'm referencing entropy now, and it seems like using SMODS.create_card is just a no-go

feral tree
#

so what is?

frosty rampart
#

you'll want to do this

local newcard = Card(
  G.title_top.T.x,
  G.title_top.T.y,
  G.CARD_W,
  G.CARD_H,
  G.P_CARDS.empty,
  G.P_CENTERS.[card key goes here, no quote marks],
  { bypass_discovery_center = true }
)
#

so for example if you wanted the default joker to show up, you'd use G.P_CENTERS.j_joker in that second to last line

#

oh my god
entropy has a 1% chance to ||make the ace on the title screen freaky instead of solar||

daring fern
#

feral tree
#

it works!

#

is it possible to get rid of the ace of spades though?

dim rune
#

Hi guys, I would like my mod to have options when creating a save file, and I have no clue how to run code on save file creation, any ideas?

stark viper
#

is it just not possible for me to have two different effects like this?

#

(tbf the xmult is rather juiced, so i'm fine cutting it from the joker if that's the case)

daring fern
stark viper
#

fuck wait that's the older screenshot LMFAO

#

hold on

#

nope

#

this one should be it

daring fern
stark viper
#

oh mah lord

#

we're halfway there

#

now

#

how do I get the xmult to trigger only on the last played hand

daring fern
stark viper
#

would this be in the return function?

daring fern
stark viper
#

ahhhh okay this is all clicking now

#

i was trying to do nested if statements before and it just wasn't working

stark viper
stark viper
#

oh we gotttttt it

#

i levelled up today

dim rune
#

The more I'm trying to progress, the more I wonder "Why am I even trying to write a mod that doesn't just create jokers ?" sobs

versed swan
daring fern
versed swan
#

thank you

stark viper
daring fern
stark viper
#

oooo icic

versed swan
daring fern
versed swan
#

sneaky edit right there haha

#

it works, thank you

dim rune
#

Does anyone know how I could execute functions at a given moment? I'd prefer if it's when a save file is created but since I'm just testing rn it can be a keypress or anything, I just need to see if the problem is that my code is running on game start sobs

dreamy lodge
#

Erm, I thought you used "other_card:is_face" to check if a card was face but its not working and crashing..? It says other_card is a nill value? I confuse egg

frosty rampart
#

during destroy_card, context.destroy_card itself fills the role of context.other_card

dreamy lodge
#

oh so I would do context.destroy_card:is_face() then?

frosty rampart
#

yea

dreamy lodge
daring fern
dreamy lodge
daring fern
dreamy lodge
#

oh so do both context destory_card:is_face() AND it without the is_face?

#

I understand now

still crescent
#

my joker wont appear in the gaem

true jasper
vocal helm
#

is it possible for a Joker to inherit the effect of a different one when a round begins? Not in the sense of Blueprint where it just copies the effect, but i.e. the Joker randomly decides it's copying Gros Michel this turn

#

I'd imagine you could save the id of the joker in its loc_vars

#

or just call the calculate function of the chosen joker from the other

vocal helm
#

ah, perfect! thanks :>

vocal helm
robust marsh
#

how do i make a card juice up repeatedly while a certain condition is met?

daring fern
robust marsh
queen meadow
#

is there a better way to do this
so this gives X3 mult when the hand is striped in rank (ex. hand is played like 1,3,1,3 or 5,4,5,4,5)

#

it gives X3 mult on the last card instead because i have no idea how to apply it at the end of hand scoring and the last card applies X9 mult if it has a red seal 💀

daring fern
queen meadow
#

yeah but like i did that before and it didn't give the mult

daring fern
queen meadow
#

wait hold on i might be stupid

daring fern
#

Then it would work for hands of any size.

wheat jewel
#

I'm trying to make a joker to where changing the volume to a specific level earns you money, but it doesn't return when i do the comparison and printing the value of the volume doesn't print anything

vocal helm
# daring fern No, you just have to change `modprefix` to your mod prefix.

Sorta-probably-complicated follow-ups:

  • Is there a way to have it so that the Joker sprite doesn't change? What got copied over from the copied Joker's ability that changed this?
  • Given I've figured out how to use loc_vars to add a "(Currently <Joker>)" description, would it be possible to append the info box/description of the copied joker to the bottom as well?
daring fern
vocal helm
#
loc_vars = function(self, info_queue, card)
        local main_end = {
            {n = G.UIT.C, config = {align = "cm", padding = 0.0}, nodes = {
                {n = G.UIT.R, config = {align = "cm", padding = 0.0}, nodes = {
                        {n = G.UIT.T, config = {text = "(Currently ", colour = G.C.UI.TEXT_INACTIVE, scale = 0.32}},
                        {n = G.UIT.T, config = {text = localize { type = 'name_text', set = "Joker", key = card.ability.extra.copying_joker }, colour = G.C.FILTER, scale = 0.32}},
                        {n = G.UIT.T, config = {text = ")", colour = G.C.UI.TEXT_INACTIVE, scale = 0.32}}
                    },
                },
                }
            }
        }
        return { vars = { card.ability.extra.copying_joker }, main_end = main_end }
    end

alright; would I just info_queue[#info_queue + 1] = <joker description> at the end here?

daring fern
vocal helm
#

so I can constantly update this part
I don't think doing it in the normal translation files worked

#

(also not sure why it's 8 ball)

vocal helm
#

it does, but only to the key, I think

daring fern
#

return {vars = {card.ability.extra.copying_joker and localize({type = 'name_text', set = "Joker", key = card.ability.extra.copying_joker}) or 'Nothing'}} and having '{C:inactive}(Currently {C:attention}#1#{C:inactive}){}' would work.

vocal helm
#

ooh

#

Thanks, yeah, that does work!

vocal helm
daring fern
vocal helm
#

Oh! I thought that was the name of the original joker or something, haha. Thanks

daring fern
#

That tells it to not set the sprites.

vocal helm
#

ahh, it's not on the docs, I wouldn'tve known ^^;

#

the info_queue thing would be the last thing I need, what should I be adding there?

daring fern
vocal helm
#

thanks!

#

oh wow, it even shows up like a little tooltip, that's sweet

#

Thank you so much! that's it for tonight from me haha

lament agate
#

how do i change the Joker in the intro

daring fern
vast night
#

Hey three questions:

  1. What the heck is pinned? I've deactivated all mods and it's still here
  2. How do i define the localization of a sticker? There's nothing on the docs
  3. How do i define the stake sticker iin localization. the way it's formulated is a bit cnonfusing
vernal path
#

Pinned is a base "sticker" that is used in challenges

#

Sticker localization should have the name in misc.labels and description in descriptions.Other

vast night
vernal path
#

(misc = { labels = {)

#

no, there is no key for stickers

#

so its just modkey_stickername

vast night
vernal path
#

the cdag one

vast night
vernal path
#

i mean, no
you can put whatever the hell you want in localization
although you will not be able to access it in game unless you define the sticker

vast night
vernal path
#

i have no clue about that, look in vanillaremade

vast night
#

onee you win

daring fern
zenith agate
#

im crafing my jokers in Joker Forge, and i cannot find a way to destroy discarded card(s)

zenith agate
#

very well

robust marsh
plucky berry
#

guys I want to make a mod inspired by Neapolitan cards and culture, is anyone interested in the project?

red cradle
#

Why this work in joker code and didnt work in blind code, just copy the code from one of my joker

red flower
#

chip_text is not a number

wispy falcon
#

It even says that it is a string...

red cradle
#

but why it work in joker code

#

or I'm confusing something...

red flower
#

maybe sometimes it is set to a number and you haven't tested a case where it's not

red cradle
#

ok, just add tostring() and it work

red flower
#

weird

cyan lagoon
#

heya, anyone good with joker display?

gleaming crescent
#

How do I make my sticker not appear on a judgement-created joker?

north stone
#

if context.setting_blind and [BLIND TYPE IS BOSS] then
how would i do something like this

manic rune
cursive gazelle
#

😭

north stone
#

ty

cursive gazelle
#

Wait doesn’t judgment created cards not have stickers

north stone
manic rune
#

nop

#

idk what context.blind has rn though so you want to print it out and check lol

#

-# or wait until someone that knows about it answers idk

gleaming crescent
north stone
#

ty

#

is there a way i can see like the code for the vanilla jokers

cyan lagoon
#

lovely/dump/card.lua

cursive gazelle
cyan lagoon
#

or vanillaremade

cursive gazelle
#

You should read it

#

First

gleaming crescent
#

Do I really have to analyze it's source code?

cursive gazelle
#

I have no idea

gleaming crescent
#

Oh, it was simple

cursive gazelle
#

I thought they spawn without it

gleaming crescent
cursive gazelle
#

Ahh

#

Was it a sticker parameter?

north stone
#

if i wanted to make a 1 off consumable that isnt in any particular set how should i go about that

cursive gazelle
#

I think

daring fern
cursive gazelle
#

I know it had to be uppercase i’m just lazy

#

And no. e ?

red flower
cyan lagoon
#

like X:color

red flower
#

border_colour

cyan lagoon
#

and i need check the size of the full hand instead of the scoring

red flower
#

JokerDisplay.current_hand

#

this is all on the wiki :3

cyan lagoon
#

so i need to get the length of that?

red flower
#

yeah

cyan lagoon
#

thanks

round lion
#

is there any tools to help with atlas making or updating

robust marsh
#

You kinda just have to make the image yourself shrug

red flower
robust marsh
#

that's a nice tool

#

it's very useful

strong terrace
#

tried to make a joker that randomizes all mult given by jokers, but if i try it in game it doesn't work. did i missed something?

daring fern
north stone
#

how can i add custom consumable set to this menu?

robust marsh
#

i think it's Consumable in this instance

north stone
daring fern
north stone
# daring fern Code?
    key = 'slop_shit',
    default = 'c_slop_calling_card',
    primary_colour = G.C.SET.Tarot,
    secondary_colour = G.C.SECONDARY_SET.Tarot,
    collection_rows = {5, 6},
    shop_rate = 0
}```
red flower
robust marsh
#

ah

#

I see

#

no like

#

i meant the spelling

#

SMODS.ConsumableType

red flower
#

oh did i mispell it

#

funny

robust marsh
#

thunk effect

north stone
#

yeah

red flower
#

what happens if you eval G.P_CENTER_POOLS.slop_shit

daring fern
red flower
#

true

robust marsh
#

slop shit

red flower
north stone
# robust marsh slop shit

the mod is called slop and i wanted to create a random 1 off consumable item so i just made a type called random shit

north stone
north stone
red flower
#

open the console with /

north stone
#

ah ok

still crescent
#

still not appearing

red flower
manic rune
#

its path, not paths

#

and its atlas, not Atlas lmao

north stone
red flower
#

if you scroll up does yours appear

north stone
#

it doesnt seem toi be showing up

#

no

red flower
#

then its not registered

north stone
#

ohhh

red flower
#

check if the file is loaded correctly

north stone
#

how

still crescent
manic rune
#

and make sure you have a metadata file thats set up correctly too

red flower
still crescent
north stone
#

oh right

manic rune
#

a .json file in your mod folder

north stone
#

i dont think its loading

#

how do i load it

manic rune
#

assert(SMODS.load_file("file path in here"))() <-- if your code is not in the main file

north stone
#

ok thanks

manic rune
#

you could also set up an auto file loader in your main file if you dont really care about the order of files loading

north stone
#

ahh yes its all working now thank you

daring fern
#

robust marsh
#

how can you make a jiggle faster ponder

#

talking about juice_card_until

cursive gazelle
#

Play with values

robust marsh
#

hmm

cursive gazelle
#

Hmmmmm

spark owl
#

losing a bit of my mind

rocky osprey
#
        c_sp_j1407b = {
            name = "J1407b",
            text = {
        '(' .. tostring(G.GAME.hands["sp_plateau"].level) .. ') Level up', 
        '{C:attention}Plateau{}',
        '{C:blue}+25{} Chips and',
        '{C:red}+4{} Mult'
            }
        }

guys i'm trying to change the level text and the color also has to be dynamic too idk

violet oasis
#

Try changing it to "Tarot" for testing

#

Also

spark owl
#

oh

#

ok

violet oasis
#

you set your key for tags as "alt_tex_rhfull_rh_tags" but called it as "alt_tex_rhfull_rh_tag" at the bottom

#

it's missing the s

#

That's the cause of the crash, at least

still crescent
manic rune
#

remove the comments and see if its still red

#

but also, remove the dependencies

#

you dont need it

spark owl
#

okay

manic rune
#

conflicts too

#

and provides

spark owl
#

lets see

manic rune
#

remove dump_loc too

spark owl
#

okay yea no

#

wait

#

Oh yea i forgot

#

to change the name

red flower
spark owl
#

im fucking stupid

#

okay

#

NOW

#

surely

#

nope

#

TAGS AGAIN?

violet oasis
#

Post the code again

spark owl
#

i also probably have to edit the default LUA and rename the

#

no wait i dont have to rename the tarots

violet oasis
#

When I mentioned renaming it to Tarot, I meant just the set. You could have kept the key and filename the same

violet oasis
#

I assume you changed it to rh_tarot.png but didn't change the actual file name

spark owl
#

i did

#

it still crashed

#

im renaming it back to consumables

violet oasis
#

Do that and post the crash and code if it crashes again

spark owl
#

lets see\

#

crash

still crescent
#

like tis?

violet oasis
spark owl
#

I should not be doing this with an empty stomach

violet oasis
#

Comment the localization = true line for now, test without it

#

Once you can load in and it stops crashing, you can check the localization

spark owl
#

?

#

got it

violet oasis
#

On all of them

spark owl
#

Okay

#

Let’s see

#

it

#

works

#

oh my god

#

o

#

this looks really fucking goofy tho

#

wait

#

😭

#

ima be real

#

This looks so goofy to me

#

im not even that pissed

spark owl
#

uh

#

now what

#

@violet oasis

violet oasis
#

I'm at work rn so it might take a bit for me to answer

cursive gazelle
spark owl
cursive gazelle
#

Joker definition

#

I think you have the wrong px and py tho

spark owl
#

Oh

cursive gazelle
#

In the atlas

spark owl
#

I have to double it

cursive gazelle
#

Yes

#

Depending on what you have

spark owl
#

Since my dumbass drew in 2x

cursive gazelle
#

Yeah double it and try

spark owl
cursive gazelle
#

Is that double 71x95?

spark owl
#

No

cursive gazelle
#

Then why are you asking

spark owl
#

So I already doubled it

#

💔

cursive gazelle
#

What

violet oasis
#

You have to add the px and py parameters inside AltTexture with the new Joker size

spark owl
#

I made it 142x190
When it was originally 71x95 yea?

stiff locust
#

but you drew it in 2x so it was originally double size and you need to half it

violet oasis
#

No, you gotta keep it double

stiff locust
#

i'm very confused

tired otter
#

Hey um i know i asked this already but why does it show the highlighted thing?
My joker is meant to spawn ANY Joker, not just Jimbo

violet oasis
#

I think if you add px = 142 and py = 190 inside AltTexture, it should work

tired otter
spark owl
#

Wait a damn second

#

It’s…

rotund sable
spark owl
#

Why is my jokers

tired otter
spark owl
#

138x186

#

What

tired otter
#

i'm not good at coding :(

rotund sable
#

You specify it in loc_vars

tired otter
#

lemme check

#

is it somewhere around here??

manic rune
#

info_queue is literally right there...

rotund sable
tired otter
#

oh my god

#

i'm a cretin

#

holy FUCK

#

😭

robust marsh
tired otter
#

aight i fixed it :D

north stone
#

yo could anyone put this error into english pls 😭 it happens when i try to open the shop

#

i can send full error if anyone needs

#

it may be because i have shop rate set to 0 on a card

#

but how can i made it not appear

#

if thats the issue

manic rune
#

wtf is with this gap

shut latch
#

two questions:

  1. how do i let the shop spawn multiple copies of a joker from a certain rarity (think showman but for one rarity only)
  2. how do i destroy all copies of a single joker
manic rune
#

theres, no padding

daring fern
shut latch
wooden nexus
long sun
#

in G.FUNCS.discard_cards_from_highlighted, what tells the hand cardarea to draw to hand?

#

i'd like to patch that and change the number of cards drawn

red flower
#

there's a context for that

long sun
#

omgomgomg i should've asked for that first :D!!

#

there seems to be a context for almost anything now

#

what is it?

manic rune
red flower
#

check serpent in vanillaremade

long sun
#

👍 :D

cursive gazelle
#

What’s the mod that adds a clock that can be dragged ?

long sun
#

iirc

#

@red flower how can i check if the cards were drawn because of a discard, and how can i see how many cards were discarded?

daring fern
long sun
#

👍

hidden notch
#

I need a context.card_added but before the Card applies it's Abilities;
For Example if I add the Drunkard Joker,
I want to do something before Drunkard gives me +1 Discard...
I could patch some stuff in but I wanna ask for better Ideas first, so;
Any good Ideas? x3

cursive gazelle
#

Drunkard gives +1 discard immediately because it’s add_to_deck and not a calculate function

hidden notch
#

Yeah yeah I know, the Goal is a Context that goes before that lewxen_Noblewoman_Laugh

cursive gazelle
#

You can check for bought

slim ferry
#

context.set_ability is a thing now i think? idk what thats called on currently though

hidden notch
#

I tried that, thinking it would work but... Alas, doesn't work for bought Jokers, Spawned in Jokers or Jokers from Packs x3

cursive gazelle
#

Ah i see

#

I think you’d need to calculate it unless there’s something I don’t know about which can be the case

red flower
#

<@&1133519078540185692>

sturdy compass
#

<@&1133519078540185692>

gilded goblet
#

mr bearst

long sun
#

i keep trying to ping but it keeps giving me other members in the server 😭

slim ferry
red flower
#

just type @mods

long sun
#

oh i see

#

cheers ^u^

#

oh ya, why is this always drawing 2 cards?

daring fern
hidden notch
daring fern
red flower
long sun
#

ah

slim ferry
long sun
strong terrace
#

this error shows up when in the joker collection i go to the page where my jokers are. Why it does this?

long sun
#

i'll try setting the number of cards, instead of the cards themselves

slim ferry
#

what does the code look like

long sun
#

working! thanks!

strong terrace
slim ferry
#

do you have an atlas called Joker in your mod?

#

also youre supposed to replace modprefix with your actual mod prefix

frosty rampart
#

i wonder if there's a mod out there somewhere that has the actual prefix "modprefix"

slim ferry
#

also <card>.edition = "Polychrome" doesnt work, card.edition is a table

strong terrace
slim ferry
slim ferry
#

and doesnt answer my question

thorn basin
#

I tried to instance my blind in Balatro but this error message appears, does anyone know why?

daring fern
#

Also card doesn't exist.

thorn basin
daring fern
thorn basin
#

how can I fix this?

daring fern
hollow horizon
#

Hi! Why does my blind doesn't work as intended? It should destroy 1 random card after each played hand:

    name = "juzian",
    key = "juzian",
    atlas = "blinds_juzian",
    pos = { y = 0 },
    dollars = 10,
    mult = 2.5,
    boss = { min = 1 },
    boss_colour = HEX('5b8561'),

    calculate = function(self, context)
        if context.after then
            if G.play and #G.play.cards > 0 then
                local idx = pseudorandom("juzian", 1, #G.play.cards)
                local card = G.play.cards[idx]

                if card then
                    if card.ability.name == "Glass Card" then
                        card:shatter()
                        return {sound = 'misiek_niom'}
                    else
                        card:start_dissolve()
                        return {sound = 'misiek_niom'}
                    end
                end
            end
        end
    end,
}```
thorn basin
daring fern
thorn basin
real crown
#

Is there a way to force eternal sticker on lower stakes?
I've been sitting here for a while not understanding why the eternal sticker is not working for add_card(), but now I have a strong suspicion it's because the new deck I'm creating only has access to white stake for now

red flower
#

i think add_card always adds the sticker as long as the joker is compatible, how are you doing it

real crown
#

SMODS.add_card{set = "Joker", key = "j_princess", stickers = {"eternal"}, edition = "e_negative"}

#

And on the Joker I have:
eternal_compat = true,

red flower
#

hmmm try force_stickers = {"eternal"}?

#

does "j_princess" work also

#

because its missing the prefix

real crown
#

force_stickers still doesn't work
I do have a negative princess joker spawning

red flower
#

can i see the whole deck code

real crown
#

I only started modding very recently, so it most likely won't be pretty

  name = "Princess Deck",
  key  = "princess",
  pos  = {x = 0, y = 0},
  config = { princess = true},
  atlas = 'SlayThePrincess',

  loc_txt = {
    name = "Princess Deck",
    text = {
      "Start with {C:red}level 0{} {C:attention}poker hands{} and",
      "a {C:dark_edition}Negative{} {C:attention}Eternal{} {C:purple}The Princess{}."
    },
  },

  apply = function(self)
  G.E_MANAGER:add_event(Event({
    func = function()
        if G.jokers then
           SMODS.add_card{set = "Joker", key = "j_princess", force_stickers = {"eternal"}, edition = "e_negative"}
        end
      return true
    end
  }))

  for poker_hand_key, _ in pairs(G.GAME.hands) do
      SMODS.smart_level_up_hand(nil, poker_hand_key, true, -1)
    end
  end
}

------------JOKERS---------------------
SMODS.Joker{
  key = "princess",
  pool = "joker",
  blueprint_compat = true,
  rarity = 1,
  cost = 5,
  pos = { x = 1, y = 0 },
  eternal_compat = true,
  unlocked = true,
  discovered = true,
  atlas = 'SlayThePrincess',
  config = { extra = { mult = 0} },
  loc_txt = {
    name = "The Princess",
    text = { "{C:red}+1 Mult{} for each {C:attention}Queen{}",
             "in your {C:attention}full deck{}" }
  },
  in_pool = function(self, args)
    return args.source ~= 'stp'
  end,
  
  loc_vars = function(self, info_queue, card)
    return { vars = { card.ability.extra.mult } }
  end,
  
  calculate = function(self, card, context)
    if context.joker_main then
      local queens = 0
      for _, playing_card in ipairs(G.playing_cards or {}) do
        if playing_card:get_id() == 12 then queens = queens + 1 end
      end
      return { mult = queens}
    end
  end,
}```
daring fern
real crown
#

Thank you, that fixed it!

thorn basin
#

I even removed the card.base.rank but still the boss blind won't debuff the cards.
I don't get if there has to be something with the G.GAME.blind effect or something else...

wheat jewel
#

If i want to change a rank in chronological order without it being random, what do I change about this method?

jaunty sigil
#

chat, I just started modding. Just a simple Joker :D but nothing works 😭 I followed multiple tutorials. All of 'em saying the same things. But still doesnt work

the script in question:

--- STEAMODDED HEADER
--- MOD_NAME: YOU ARE AN IDIOT mod
--- MOD_ID: YOUAREANIDIOT
--- MOD_AUTHOR: [some cool guy]
--- MOD_DESCRIPTION: Adds the "You Are An Idiot" joker (inspired by the virus "you are an idiot").
--- PREFIX: xmpl

------------MOD CODE -------------------------

SMODS.Atlas{
key = 'jokers', -- atlas key
path = 'jokers.png', -- atlas' path
px = 71, -- width of one card
py = 95 -- height of one card
}
SMODS.Joker{
key = 'xmpl_idiot', -- joker key
loc_txt = { -- local text
name = 'You Are An Idiot!',
text = {
'When a Blind is selected,',
'creates a {C:negative}negative{} copy of this joker.',
'+10 {C:mult}Mult{} for each copy of this card'
},
unlock = {
'Be {C:gold}Funny{}'
}
},
atlas = 'jokers', -- atlas' key
rarity = 4, -- rarity: 1 = Common, 2 = Uncommon, 3 = Rare, 4 = Legendary
cost = 6, -- cost
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = false,
perishable_compat = false,
pos = {x = 0, y = 0},

_init = function(self)
    -- This event listener creates a new instance of the joker when a Blind is selected.
    self.s_select_blind_hook = function(blind)
        -- This checks to make sure the blind isn't a boss blind.
        if not blind.boss and G.jokers then
            -- Use a timer to add the card with a small delay.
            SMODS.Timer.create(0.1, function()
                local new_joker = G.jokers:add_card('xmpl_idiot', nil, nil, nil, {card_mod = 'k_negative'})
                if new_joker then
                     G.FUNCTIONS.play_sfx('xmpl.idiot_sound', 1)
                end
            end)
        end
    end
    G.E.SELECT_BLIND:add(self.s_select_blind_hook, self)

    -- This event listener handles the Mult bonus at the end of the hand.
    self.s_post_hand_hook = function(self, hand)
        local idiot_count = 0
        
        -- Count all regular copies of the joker
        if G.jokers and G.jokers.deck_jokers then
            for i, joker in ipairs(G.jokers.deck_jokers) do
                -- This check is more robust to ensure it's the correct joker
                if joker.base_name == 'xmpl_idiot' then
                    idiot_count = idiot_count + 1
                end
            end
        end
        
        -- Count all negative copies of the joker
        if G.jokers and G.jokers.negative_jokers then
            for i, joker in ipairs(G.jokers.negative_jokers) do
                 -- This check is more robust to ensure it's the correct joker
                if joker.base_name == 'xmpl_idiot' then
                    idiot_count = idiot_count + 1
                end
            end
        end

        -- Apply the mult bonus directly to the hand's score
        if idiot_count > 0 then
            hand.mult = hand.mult + (idiot_count * 10)
        end
    end
    G.E.POST_HAND:add(self.s_post_hand_hook, self)
end,

}


------------MOD CODE END----------------------

daring fern
pastel kernel
#

can i use this?

if context.other_card:is_suit("Spades") or context.other_card:is_suit("Hearts") then
pastel kernel
#

sorry, i meant to share this

#
if context.individual and context.cardarea == G.play then
            if context.other_card:is_suit("Spades") or context.other_card:is_suit("Hearts") then
jaunty sigil
jaunty sigil
#

so that was the problem all along? 😭

pastel kernel
jaunty sigil
#

with what should I replace it with? Sorry if I ask too many questions. Is that LUA isnt so easy 😭

jaunty sigil
daring fern
jaunty sigil
#

ah

ocean sinew
#

apply?

#

add_to_deck

daring fern
jaunty sigil
#

wait, then what should I use? :C

pastel kernel
#

Uhh

ocean sinew
#

if context.setting_blind

daring fern
ocean sinew
#

calculate = function(self,card,context)

#

if context.setting_blind then

wintry solar
jaunty sigil
pastel kernel
#

if you wanna make it give a negative copy of itself

jaunty sigil
#

like this?:
calculate = function(self,card,context)
if context.setting_blind then
-- This event listener creates a new instance of the joker when a Blind is selected.
self.s_select_blind_hook = function(blind)
-- This checks to make sure the blind isn't a boss blind.
if not blind.boss and G.jokers then
-- Use a timer to add the card with a small delay.
SMODS.Timer.create(0.1, function()
local new_joker = G.jokers:add_card('xmpl_idiot', nil, nil, nil, {card_mod = 'k_negative'})
if new_joker then
G.FUNCTIONS.play_sfx('xmpl.idiot_sound', 1)
end
end

pastel kernel
#

Use SMODS.add_card

jaunty sigil
wintry solar
#

Is this AI generated?

jaunty sigil
cursive gazelle
#

Self explanatory

pastel kernel
#

key = “j_yourmodprefix_yourjokerkey”, edition = “e_negative”

ocean sinew
wintry solar
#

Yes and AI doesn’t know anything at all about writing balatro mods

wintry solar
#

It does you more harm than it solves

ocean sinew
daring fern
ocean sinew
#

If you keep talking bt it you'll get in trouble

wintry solar
#

So much of your code is just things that don’t exist

pastel kernel
jaunty sigil
wintry solar
#

Like, AT ALL

pastel kernel
#

Try reading jokers with similar abilities

ocean sinew
#

they should though

#

so everyone knows that

jaunty sigil
ocean sinew
jaunty sigil
ocean sinew
#

the one that creates a tarot card

#

cartomancer

jaunty sigil
#

oooohh

wintry solar
pastel kernel
#

Cartomancer has setting blind context

jaunty sigil
wintry solar
#

And actually read the code to understand what they are doing

jaunty sigil
#

too many things T-T

pastel kernel
#

look

#

all you need to know is

wintry solar
#

Mindlessly copying stuff is a terrible way to learn how things work

pastel kernel
#

it's basically building blocks

jaunty sigil
pastel kernel
#

no

jaunty sigil
#

a

#

oh wait

#

i read it wrong

#

😭

pastel kernel
#

i mean there's jokerforge but that's kinda lame

#

look

#

if you know what pieces to fit in

#

then it's as easy as drawing

daring fern
tender pond
#

Hello

jaunty sigil
tender pond
#

Please give me deck ideas

jaunty sigil
#

so basically is just trying to understand 😭

#

imma try ig

pastel kernel
tender pond
#

give me deck ideas please

pastel kernel
#

try copying the most basic joker in the game: joker

pastel kernel
jaunty sigil
#

but, ig imma try to use the one someone suggested which is joker forge cause I think its easier cause I spent the entire day to try to make this mod 😭

tender pond
#

copy cavenid

pastel kernel
tender pond
#

oh

hollow horizon
#

Hi! Does anyone have an idea how to make blind destroy random card from played hand each time? I think I've tried everything and it doesn't want to work

tender pond
#

but copy cavendish

thorn basin
daring fern
thorn basin
#

aight

thorn basin
#

so it gives me error

daring fern
jaunty sigil
#

how do I make this work T-T (i cant find the + mult nor the create a negative copy when blind selected)

#

yes, I am trying joker forge cause I find it easy ig

thorn basin
#

it should get the id and then check if the cards of the full deck correspond to that id and then debuff them, right?

north stone
#

something in this code is causing an error can someone point it out to me pls it happens whenever i open the shop

SMODS.ConsumableType {
    key = 'slop_shit',
    default = 'c_slop_calling_card',
    primary_colour = G.C.SET.Tarot,
    secondary_colour = G.C.SECONDARY_SET.Tarot,
    collection_rows = {1, 1},
    shop_rate = 0,
}

SMODS.Atlas{
    key = "consumables",
    path = "consumables.png",
    px = 71,
    py = 95
}

SMODS.Consumable {
    key = 'calling_card',
    set = 'slop_shit',
    loc_txt = {
        name = "Calling Card",
        text = {
            "Disables current {C:attention}Boss Blind{}",
        }
    },
    atlas = "consumables",
    pos = { x = 0, y = 0 },
    use = function(self, card)
        print("Using Calling Card")
    end,
    can_use = function(self, card, context)
        return context.blind.boss
    end
}```
pastel kernel
tender pond
pastel kernel
tender pond
#

oh the deck

#

nope

pastel kernel
#

Bruhhhhhhh

pastel kernel
#

Hey guys, I forgot how to display “upgrade”

#

You know? For when a joker upgrades something?

daring fern
tender pond
#

I might use a default deck

#

erratic maybe

#

but change the colours to jimbo's

thorn basin
jaunty sigil
#

chat I need help :C

pastel kernel
jaunty sigil
#

so uhh. this is now the script but it still crashes the game T-T (i am going insane btw)

--- STEAMODDED HEADER
--- MOD_NAME: YOU ARE AN IDIOT mod
--- MOD_ID: YOUAREANIDIOT
--- MOD_AUTHOR: [some cool guy]
--- MOD_DESCRIPTION: Adds the "You Are An Idiot" joker (inspired by the virus "you are an idiot").
--- PREFIX: xmpl
----------------------------------------------
------------MOD CODE -------------------------


SMODS.Atlas{
    key = 'jokers', -- atlas key
    path = 'jokers.png', -- atlas' path
    px = 71, -- width of one card
    py = 95 -- height of one card
}
SMODS.Joker{ --You Are An Idiot!
    key = "youareanidiot",
    config = {
        extra = {
            mult = 10,
            eternal = 0,
            respect = 0
        }
    },
    loc_txt = {
        ['name'] = 'You Are An Idiot!',
        ['text'] = {
            [1] = 'Creates a {C:purple}Negative {}copy of its self.',
            [2] = '{X:red,C:white}+10 Mult{}',
            [3] = '{s:1.9}YOU ARE AN IDIOT!{}'
        },
        ['unlock'] = {
            [1] = 'Unlocked by default.'
        }
    },
    pos = {
        x = 0,
        y = 0
    },
    display_size = {
        w = 71 * 1, 
        h = 95 * 1
    },
    cost = 6,
    rarity = 3,
    blueprint_compat = true,
    eternal_compat = true,
    perishable_compat = true,
    unlocked = true,
    discovered = true,
    atlas = 'joker.png'
    pools = { ["modprefix_mycustom_jokers"] = true },

    calculate = function(self, card, context)
        if context.cardarea == G.jokers and context.joker_main  then
                return {
                    mult = card.ability.extra.mult
                }
        end
        if context.setting_blind  then
                return {
                    func = function()
                local available_jokers = {}
                for i, joker in ipairs(G.jokers.cards) do
                    table.insert(available_jokers, joker)
                end
                local target_joker = #available_jokers > 0 and pseudorandom_element(available_jokers, pseudoseed('copy_joker')) or nil
                
                if target_joker then
                    G.E_MANAGER:add_event(Event({
                        func = function()
                            local copied_joker = copy_card(target_joker, nil, nil, nil, target_joker.edition and target_joker.edition.negative)
                        copied_joker:set_edition("e_negative", true)
                            copied_joker:add_sticker('eternal', true)
                            copied_joker:add_to_deck()
                            G.jokers:emplace(copied_joker)
                            return true
                        end
                    }))
                    card_eval_status_text(context.blueprint_card or card, 'extra', nil, nil, nil, {message = localize('k_duplicated_ex'), colour = G.C.GREEN})
                end
                    return true
                end
                }
        end
    end
}
----------------------------------------------
------------MOD CODE END----------------------
tender pond
north stone
#

put that in a code block

jaunty sigil
jaunty sigil
vast night
#

you should switch to the new format

#

of meta

jaunty sigil
#

but how-

jaunty sigil
slim ferry
jaunty sigil
#

ooh but i dont have the thing

vast night
jaunty sigil
#

i have the italian keyboard

#

so it doesnt show the button

vast night
jaunty sigil
jaunty sigil
vast night
# jaunty sigil wdym?

in the new version you have a folder with mod.json like this

{
    "id": "reddit",
    "name": "Reddit Bonanza",
    "author": ["ItsGraphax", "mindoftony", "The_Neto06"],
    "description": "Adds loads of Joker concepts provided by redditors to Balatro",
    "prefix": "reddit",
    "main_file": "main.lua",
    "priority": 0,
    "badge_colour": "ff4b08",
    "badge_text_colour": "ffffff",
    "display_name": "Reddit Bonanza",
    "version": "1.3.23.1",
    "dependencies": [
        "Steamodded (>=1.0.0~BETA-0623b)",
        "Lovely (>=0.6)"
    ],
    "dump_loc": false
}

which loads main.lua

#

i feel like i'm missing something pretty obvious. can someone help me? I'm trying to flip the joker when the sticker is applied, and unflip it once removed

    apply = function(self, card, val)
        print(card.facing)
        if card.facing == 'front' and val then
            card:flip()
        end
        card.ability[self.key] = val
    end
pastel kernel
#

I should really make the sprite for my mod badge

#

Or mod log I guess

pastel kernel
# vast night ?

I already have a mod in the works but I haven’t made the logo/badge for it

tender pond
#

why do yuo have to do this to me

jaunty sigil
tender pond
#

I just wanted to play modded

#

i don't want to get good joker

red flower
# jaunty sigil

it shouid be atlas = 'jokers' instead of atlas = 'joker.png'

jaunty sigil
#

like this?

pastel kernel
#

jokers.png

#

For path

jaunty sigil
#

ooh oke

pastel kernel
#

the path is the directory of your sprite

#

What the joker looks like

red flower
jaunty sigil
pastel kernel
jaunty sigil
#

i had in mind to make even another one but not now

pastel kernel
#

then atlas is the key of SMODS.Atlas

red flower
jaunty sigil
#

this atlas?

tender pond
#

deck idea:
Rainbow deck:
All cards are polychrome

red flower
#

yes

tender pond
#

is this good idea

jaunty sigil
slim ferry
#

can i make local variables in my localization file if i want to reuse a single bit of text a bunch of times or will the game kill me if i do anything other than returning

red flower
#

you can

#

this is my localization file lol

pastel kernel
#

So the XMult upgrade message is instead emplaced into the cards, how do I make the XMult upgrade message stick to the joker

red flower
#

message_card = card?

ocean sinew
#
WeightedElement:new_process("create_card",function (t,args)
    local requires = t.requires or true
    print("creating card?")
    if requires then
    print("info:",inspect(t.info))
    local created_card = SMODS.create_card(t.info)
    local emplace_at = t.info.emplace_at
    emplace_at=loadstring("return "..emplace_at)()
    print("create passed?")
    emplace_at:emplace(created_card)
    print("emplaced?")
    created_card:add_to_deck()
    print("added?")
    end
end)
edition: e_negative
set: Tarot```

why this gives stack overflow? With Cryptid mod enabled
pastel kernel
#
 calculate = function(self, card, context)
        if context.individual and context.cardarea == G.play then
            if context.other_card:is_suit("Spades") or context.other_card:is_suit("Hearts") then
                card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.xmultmod
                return {
                message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.xmult } },
            }
            end
        end
        if context.joker_main then
        return {
            x_mult = card.ability.extra.xmult,
            sound = "busterb_explode"
        }
    end
#

this is what my code looks like

red flower
#

yeah add message_card = card to the return

jaunty sigil
#

i made a monster. it adds mults BASED on how many max slots D:

pastel kernel
#

message_card right under message?

ocean sinew
#

and only with Cryptid too

jaunty sigil
#

its the "You are an idiot!" virus thing, yk the reference?

vast night
tender pond
#

no I mean isn't that just stencil

red flower
vast night
#

mb

red flower
#

but it doesn't flip?

vast night
jaunty sigil
tender pond
#

jimbo deck white stake done

red flower
vast night
tender pond
#

guys can I have any deck ideas

vast night
tender pond
#

what

red flower
vast night
#

does it have to do with the card being unflipped while being revealed in the shop?

vast night
#

forgor the code block

red flower
#

the game unflips cards most of the time

tender pond
#

oh I got an idea:
Random deck:
All cards in this deck are randomised
Start with 5 random jokers

vast night
#

gtg again

red flower
north stone
#

how would i go about giving the player a custom consumable

#

like from a joker

tender pond
#

like perkeo?

#

oh nvm

#

like cartomancer?

north stone
#

ye

#

but not random

tender pond
#

<@&1133519078540185692>

north stone
#

what got deleted i didnt se

karmic creek
#

spam

tender pond
north stone
#

i just need it to give the player 1 specific custom consumable item

daring fern
north stone
#

thanks

jaunty sigil
north stone
obtuse silo
#

this does not destroy cards for some reason
i've tried with guaranteed odds

red flower
#

local variables are not saved betwen calculate calls

#

so in between context.before and context.after destroycards becomes empty again

rotund sable
#

Should work

#

Wait there was a buffer

daring fern
north stone
#

Tyyyy

obtuse silo
jaunty sigil
#

my joker is becoming a menace to society.

red flower
jaunty sigil
#

how can I make my joker more lethal to the round making it look like a good joker but it isnt?

rotund sable
#

Game design 🔥

jaunty sigil
#

should I make a tarrot that removes all of "you are an idiot" cards called "antivirus"? 😭

obtuse silo
red flower
#

then you check that in context.after

still cedar
#

How to make calculation for joker, which interacts with probability? For example, like joker "Opps al 6s"

daring scroll
#

Anyone know why this Legendary won't spawn from the Soul spectral card? I have 3 other Legendaries and they all spawn

-- Thunderlord
SMODS.Joker {
    key = 'thunderlord',
    loc_txt = {
        name = "Thunderlord",
        text = {
            "Gains {C:blue}+#1#{} Chips for every {C:enhanced}Enhancement{} in deck,",
            "{C:red}+#2#{} Mult for every {C:attention}Seal{} in deck,",
            "and {X:red,C:white}X#3#{} Mult for every {C:dark_edition}Edition{} in deck",
            "{C:inactive}(Currently{} {C:blue}+#4#{} {C:inactive}Chips,{} {C:red}+#5#{} {C:inactive}Mult, and{} {X:red,C:white}X#6#{} {C:inactive}Mult){}"
        }
    },
    blueprint_compat = true,
    perishable_compat = true,
    eternal_compat = true,
    rarity = 4,
    cost = 20,
    atlas = 'JokerPackOne',
    pos = { x = 1, y = 0 },
    soul_pos = { x = 1, y = 1 },
    config = {
        extra = {
            chips = 80,
            mult = 10,
            Xmult = 1
        }
    },
    loc_vars = function(self, info_queue, card)
        local enhance_count = 0
        local seal_count = 0
        local edition_count = 0
        if G.playing_cards then
            for _, playing_card in ipairs(G.playing_cards or {}) do
                if next(SMODS.get_enhancements(playing_card)) then
                    enhance_count = enhance_count + 1
                end
                if playing_card.seal ~= nil then
                    seal_count = seal_count + 1
                end
                if playing_card.edition ~= nil then
                    edition_count = edition_count + 1
                end
            end
        end
        return {
            vars = {
                card.ability.extra.chips,
                card.ability.extra.mult,
                card.ability.extra.Xmult,
                card.ability.extra.chips * enhance_count,
                card.ability.extra.mult * seal_count,
                1 + card.ability.extra.Xmult * edition_count
            }
        }
    end,
    calculate = function(self, card, context)
        if context.joker_main then
            local enhance_count = 0
            local seal_count = 0
            local edition_count = 0
            if G.playing_cards then
                for _, playing_card in ipairs(G.playing_cards or {}) do
                    if next(SMODS.get_enhancements(playing_card)) then
                        enhance_count = enhance_count + 1
                    end
                    if playing_card.seal ~= nil then
                        seal_count = seal_count + 1
                    end
                    if playing_card.edition ~= nil then
                        edition_count = edition_count + 1
                    end
                end
            end
            return {
                chips = card.ability.extra.chips * enhance_count,
                mult = card.ability.extra.mult * seal_count,
                Xmult = 1 + card.ability.extra.Xmult * edition_count
            }
        end
    end,
    in_pool = function(self, args)
        for _, playing_card in ipairs(G.playing_cards or {}) do
            if next(SMODS.get_enhancements(playing_card)) then
                return true
            end
            if playing_card.seal ~= nil then
                return true
            end
            if playing_card.edition ~= nil then
                return true
            end
        end
        return false
    end
}
robust marsh
#

Holding the boss reroll tag and going into the shop activates it too early and rerolls the small blind (this only works on the small blind, nowhere else). Any way to delay its activation? Idk if this is just an existing bug because you're not supposed to be holding this tag while in a shop in the first place.

daring fern
daring scroll
obtuse silo
#

this still doesn't destroy any cards even when i guarantee the odds

red flower
#

oh this is always false

daring fern
obtuse silo
#

apparently that reformat fixed it

#

but one more test should do it

#

YEP IT WORKS

slim ferry
#

does defining a can_use function override the automatic max_highlighted functionality?

hollow horizon
#

Hey hey hey,
How do I make the blind background a custom image instead of those default colorful swirls?

real crown
#

Is there a way to make Stone Cards considered Queens?
Closest I think is Pareidolia, but from a technical perspective that seems different, as there's just a bool for face cards, while ranks have an ID that's not registered because of stone cards

slim ferry
#

not currently

#

well actually

#

since stone cards dont have a base rank you probably could just hook card:get_id

#

but since the current function for checking ranks returns a number rather than there being smth like an is_rank function to hook its fairly limited what you can do in terms of quantum ranks

real crown
#

I see, thank you for the info! Then I'll think up something else

vocal helm
#

How would I make it so that a Joker's description changes based on whether or not the player currently has it in their Joker slots?
Ex. this is how it'd look in the collection/shop:

+1 Chips
(...?)

And this is how it'd look in your jokers:

+1 Chips and
the top card of your deck is a 2 of Spades
#

(if it's a loc_vars thing, I don't know how to do it; I have the functionality down though)

jolly shadow
vocal helm
#

thanks!

jolly shadow
#

🫡

round lion
#

calling G.FUNCS.quit would be funny

slim ferry
#

os.shutdown() :troll

cursive gazelle
#

os.remove(“/system32”)

rotund sable
#

love.system.vibrate() sounds fun but sadly it does nothing on pc

#

Currently this will only work on Android and iOS devices that have a built-in vibration motor.
😢

tight hull
#

Hi, whats the key for decks texture?

jolly shadow
#

does anyone know if its possible to force-select a card within a booster pack? like, a tarot card that you're forced to take

cursive gazelle
rotund sable
#

don't have a controller on me

cursive gazelle
slim ferry
#

os.execute :troll

jolly shadow
cursive gazelle
#

You can highlight

#

Idk how you would select tho

slim ferry
#

isnt highlighting and selecting the same

#

wdym

cursive gazelle
#

And highlighting it are different

slim ferry
#

well yeah but

#

if its force highlighted you might as well be forced to select it right

cursive gazelle
#

You can probably

vocal helm
cursive gazelle
#

Idk how

jolly shadow
#

If you need the color to change, look into the text styling wiki page

#

Has docs on variable colors

vocal helm
#

right, but the text itself might have different formatting
the (...) would be all gray, but if I'm doing Ace of Diamonds I'd like to have it be the "{C:attention}Ace{C:inactive} of {C:suit}Diamonds{}

vocal helm
cursive gazelle
#

“{C:attention} Ace of #2#”

#

Or whatever variable you have

rotund sable
#

nice quotes

cursive gazelle
#

God forbid you forget the `

jolly shadow
#

this is the caveman approach im sure theres a better way to do it but thats my first guess

vocal helm
#

true, lmao

#

all things considered I could also make a new table that replaces vars

red flower
#

if the description doesnt change much then you can just use a different description key

jolly shadow
#

that is the aforementioned better way to do it

#

loool

daring scroll
red flower
#

your joker is missing a key

jolly shadow
#

you didnt set the key of ur joker

daring scroll
#

riiiight

#

coding half of the time is finding out you misspelled "joker" as "woker"

red flower
#

the woker

jolly shadow
daring scroll