#💻・modding-dev

1 messages · Page 468 of 1

vast night
#

its so sad that im too blind to see this

#

idk 😭. i just know it exists in the source code

summer furnace
#

bruh 😭

vast night
#

elsewise hook into win_game() and add lose_game() right after

summer furnace
#

it says that lose_game() is a nil value

median veldt
#

how do I get a random joker and modify it

summer furnace
tranquil gull
#

this exists already but something something two cakes

vast night
near bay
#

how do i check how many suits of cards there are in a deck?

formal parrot
#

@red flower any idea

timid parrot
#

I’ve written code before that rigged the deck shuffle to put certain cards at the bottom for a boss blind. It involved some code injection tho

small tartan
#

Ok it kinda works now, how to resize the Ace slightly?

timid parrot
red flower
formal parrot
#

Fuck

near bay
timid parrot
#

Oh that would just be a basic for loop

#

With a counter

#

Checking if the card is the right suit or not

lean breach
#

.

#

mods ban this guy

near bay
#

and how do i code that

median veldt
#

what's wrong?
i just took code from vremade gros michel and wheel of fortune

median veldt
red flower
#

update

pure salmon
#

Balatro in Toki Pona real

#

what's joker in toki pona

placid star
#

is it possible to see what is in the event queue at any moment?

daring fern
#

red flower
small tartan
#

Guys Sorry if i ask again but i can't find anything, how to resize the Ace in the main title

leaden hollow
#

hey all, idk if this is the right chat for this but can I post a sprite for one of my jokers i'm making and get feedback on it?

proud depot
#

Is there any good resource on the UI for balatro?

red flower
urban wasp
#

why does this not have the background of the color shown?

return {
    message = "X" .. number_format(lenient_bignum(card.ability.extra.Xchipsmult)) .. " Chips and Mult",
    sound = "xchips",
    Xchip_mod = lenient_bignum(card.ability.extra.Xchipsmult),
    Xmult_mod = lenient_bignum(card.ability.extra.Xchipsmult),
    colour = { 0.8, 0.45, 0.85, 1 }, -- plasma deck colors
}
#

it just displays as blue

fallow breach
#

how do you get odds to dynamically display in the description?

#

i'm looking at this example and it goes #2# in #3# even though the odds are listed as 6, and there's no 3rd thing in the config

daring fern
fallow breach
#

oh okay i get it now

#

thx

ruby moon
split cairn
#
    calculate = function(self, card, context)
        if context.end_of_round and context.game_over == false and context.main_eval and not context.blueprint then
            if pseudorandom('broken_galaxy') < G.GAME.probabilities.normal / card.ability.extra.odds then
                G.E_MANAGER:add_event(Event({ func = function()
                    SMODS.add_card{ set = 'Voucher', key = 'v_dlx_warp_glyph' }
                    return true
                end }))
                return { message = 'SWOOOOSH!' }
            end
        end

how do i make this add the voucher to the vouchers and not the joker slots?

daring fern
red flower
urban wasp
#

oh i see

#

it worked!!

#

oh my god thank you i've been trying to figure this out for so long 😭

#

n w
-# sob

red flower
#

i was actually worried it was a recent change i PR'd :3

placid star
#

does this clear/stop events?

static dagger
#

How would I run code when a card's id is changed (ie, with Death)? In particular I am trying to apply XMult based on Queens added to the deck and I want deathing them to trigger an increase as well as just context.playing_card_added.

placid star
daring fern
placid star
daring fern
static dagger
placid star
placid star
#

so this should kill you given that lug is an empty table and G.GAME.luggage_card == nil, in this case it does yet i dont die

vague crest
#

hello chat i come with a strange issue because ive been making jokers without really caring about the weird bugs they have and now that im getting closer to release i should probably fix them 🤭

so what's going on is i have a joker which retriggers the jokers to the left and right once every 4 hands, like loyalty card. however, from my understanding if the jokers arent the same context, whether the left one triggers or not, the right one never will.

proud depot
#

Im getting an error for the ui test I made? Does anyone know why its happening?

vague crest
oblique pond
#

this hook crashes with this error, can't figure out why it's being so wacky

daring fern
vague crest
#

i forget which one is the term for blueprint copying but i am thinking explicitly what blueprint does

red flower
oblique pond
#

thanks

vague crest
ocean goblet
#

trying to figure out what exactly is causing this whenever i try to view the deck and, while it may probably just me being stupid, i can't figure out where in the stacktrace this is coming from

#

from a few cursory searches i can tell it probably has something to do with transforms but i am not really sure

toxic flicker
#

my mod aint showing up on the list

ocean goblet
#

this text file contains the whole of the error. i disabled my mod and it still occurs

frigid cargo
#

Can someone explain pseudorandom and how to use it when trying to get a 1 in 2 chance for something and 1 in 10 chance for something else

red flower
# frigid cargo Can someone explain pseudorandom and how to use it when trying to get a 1 in 2 c...

if pseudorandom("seed") < G.GAME.probabilities.normal / odds then

pseudorandom gives you a decimal number from 0 to 1 and you're checking if it's lower than 1/odds (without oops). If the odds are 1 in 2 then it checks if it's lower than 1/2 or 0.5.

Note: With the new probability API next smods update the if statement would be if SMODS.pseudorandom_probability(card, 'seed', 1, odds) then but it does the same under the hood.

scenic steeple
#

sooooo, if I wanted this to set hands to 1, how would I start with that (I'm more used to C# & C++ not lua help I beg)

frigid cargo
#
if context.main_scoring and context.cardarea == G.play then
            if pseudorandom('GamblerAtHeart') < G.GAME.probabilities.normal / card.ability.extra.xmult_odds then
                return {
                    xmult = card.ability.extra.xmult
                }
            end
            if pseudorandom('GamblerAtHeart') < G.GAME.probabilities.normal / card.ability.extra.dollars_odds then
                return {
                    dollars = card.ability.extra.dollars
                }
            end
        end

why doesnt it proc?

daring fern
daring fern
scenic steeple
frigid cargo
toxic flicker
#

yall how do i make G.GAME.blind.mult = mult * G.GAME.blind.mult but without error xd

daring fern
toxic flicker
red flower
daring fern
toxic flicker
toxic flicker
toxic flicker
#

the print worked tho

normal crest
#

that's updating the value and not the text

red flower
toxic flicker
#

oh u gotta update the text after? xd

#

it works thx guys

languid canopy
#

uhh what am i doing wrong ?

red flower
frigid cargo
#
if pseudorandom('GamblerAtHeart') < G.GAME.probabilities.normal / card.ability.extra.xmult_odds then
                return {
                    xmult = card.ability.extra.xmult
                }
            end
            if pseudorandom('GamblerAtHeart') < G.GAME.probabilities.normal / card.ability.extra.dollars_odds then
                return {
                    dollars = card.ability.extra.dollars
                }
            end

how can i do it so this only happens on 7s, i cant use context.other_card cause it says its a nil valie

red flower
languid canopy
#

oopsie

frigid cargo
#

context.cardarea == G.play

red flower
#

you need a more strict context check

#

if you want it to trigger for every 7 then context.individual and context.cardarea == G.play and context.other_card:get_id() == 7

#
  • what you have
languid canopy
#

works, thx, but now it doesn't seems to want to get the texture i setted it to

languid canopy
#

i hate to ask for help but im a straight up noobie at lua so...

red flower
#

can i see the code

languid canopy
#

sure, witch , loc, main, this blind ?

red flower
#

the blind + the atlas

languid canopy
#

ok nvm

#

i forgot the atlas for the blind in the main file

#

mb

vast bough
#

hey guys, can anyone explain why this is leaving the infamous ghost cards, i tried to find good references on how to do this sorta thing but i feel like im missing a line somewhere that actually tells the game to get rid of the cards. is there a better way to do this?

  if context.individual and context.cardarea == G.play and not context.blueprint then
                local target_card = context.other_card
                G.E_MANAGER:add_event(Event({
                    trigger = 'after',
                    delay = 0.2,
                    func = function()
                        target_card:start_dissolve()
                        return true
                    end
                }))
                return {
                    remove = true,
                    message = "Destroyed!"
                }
        end
red flower
#

yes, don't destroy playing* cards during scoring using start_dissolve()

#

use context.destroy_card

median veldt
#

is this any amount of overpowered
if so, how could I nerf it

vast bough
#

thank u

languid canopy
median veldt
#

end of ante? what would the context even be for that

languid canopy
#

goated deltarune ref

red flower
#

doesnt entirely work with mods that add more bosses per ante but eh

languid canopy
#

what's the key for atlas blind ?

median veldt
red flower
languid canopy
#

john balatro is unhappy with my code apparently (i assumed it was a key problem)

red flower
#

that's a syntax error

#

youre missing a comma after the first 32

languid canopy
#

screw myself

#

everytime

#

those comma

red flower
#

also blind sprites need to have the animation atlas field

languid canopy
#

right

#

uhh

#

what are them tho

red flower
vague crest
#

been running into an issue with this joker where it's creating Weird cards at the end of the round (one for each time it's used, several if there are multiple copies of bulldozer) these cards are permanently face down (i tried flipping them over via tarot cards and theyre actually face down on both sides LOL) or alternatively theyre sometimes just unselectable and invisible, does anyone have any insight for whats going on here 🙏

languid canopy
oblique pond
#

how would i disable this boss blind?

red flower
vague crest
#

whats the function for unhighlighting one specific card?

red flower
#

card:highlight(false)

vague crest
#

it still does function but the messed up cards are still being added 💔

oblique pond
#

nvm, figured it out (had to manually blacklist boss disable effect jokers)

vague crest
#

assuming what you were asking is just this

red flower
vague crest
#

oh is that an issue ok

red flower
#

i mean it's going to work but it doesnt do anything and it can lead to errors

vague crest
#

🤭 gotcha

languid canopy
red flower
red flower
languid canopy
#

i have absolutely no idea how and where i have to put atlas_table = 'ANIMATION_ATLAS'

red flower
#

in SMODS.Atlas

languid canopy
red flower
#

yes

#

youre missing a comma

frigid cargo
#
if context.cardarea == G.play and context.individual and context.other_card:get_id() == 7 then
            if pseudorandom('GamblerAtHeart') < G.GAME.probabilities.normal / card.ability.extra.xmult_odds then
                return {
                    xmult = card.ability.extra.xmult
                }
            end
            if pseudorandom('GamblerAtHeart') < G.GAME.probabilities.normal / card.ability.extra.dollars_odds then
                return {
                    dollars = card.ability.extra.dollars
                }
            end
        end

whenever 7s are played the code works, but if i get multiple oops then it just procs xmult even though i want it to be able to proc both

languid canopy
languid canopy
#

we good

#

put the comma and launched, nothing happend, normal ?

red flower
#

did it work

languid canopy
#

nuh uh

#

all i can see is a small blind

red flower
#

can i see how the code looks now

#

and the blind

languid canopy
#

sure

red flower
languid canopy
#

it also got a special BlindChips.png in the assets x1 and x2

vast night
#

Hi! How do i add text wrappint to an G.UIT.T UI Object? (If possible make it just two lines)

red flower
languid canopy
#

no shot i forgot it

vast night
#

ill do it manually then

#

is there another way to make both always the same size?

red flower
#

maxw?

vast night
red flower
#

it works as in it is a valid key but idk if it does the same

vast night
#

ill just separate name and description

languid canopy
#

do i need to put the frames/sec too ?

red flower
#

yes i think

languid canopy
#

uhhhh right

red flower
languid canopy
red flower
#

i think so, check the docs

languid canopy
#

it is

vast night
#

Also another question: How the literal frick should I use G.UIT.O to render a card, just like jokers do, with soul_pos support?
I've checked the wiki, but It's very vague

- object: set the object to render.
  This is a literal game object, like CardArea.
- role: set the relationship of the object to the UI.
  Its value is a table containing at least: {role_type = [TYPE]} where type is either "Major", "Minor", or "Glued".
  You probably don't need to use this.

Edit: Does this mean i need to put in the Card Object from Balatro? How could i use that

tight hull
#

Hello, another quick question. If im making an Malverk compatible texture pack do I need to define every card texture that im going to change or can I define just the sprite sheet (if I change for example every tarot card)?

languid canopy
#

but now the blind is just drifting away from its place

ocean goblet
vast night
ocean goblet
#

entropy, then, got it

vast night
red flower
vast bough
#

did some more looking up, is there really not an easier way to destroy scored cards than to make 4 different contexts and keep track of an array for them

#

surely theres a sneaky little function or something that just does it lol

red flower
#

why 4 different contexts

vast bough
#

before, after, individual scoring, destroying

red flower
#

what's the effect you want

vast bough
#

destroy scored card

#

in individual

red flower
#

why in individual

vague crest
#

how would i check if a scored card is enhanced? specifically like, just any enhancement that isnt None

vast bough
red flower
vague crest
#

sick ok ty

red flower
#

it's a different context

languid canopy
vast bough
# red flower it's a different context

yeah i get that, the way i was thinking of doing it is. before context: initialise the array. individual: add other card to the array. destroy: destroy cards in the array. after: clean up the array

#

unless you can reference the currently scored card in the destroy context

red flower
#

yes you can

wintry solar
#

that's exactly what that context does

red flower
#

context.destroy_card and context.destroy_card:is_face() for example

vast bough
vast bough
red flower
#

anyway im dealing with a shader problem rn i hate shaders

#

does anyone know where the SMODS.Center draw function is called in the code

vast night
red flower
#

i probably do it in mine let me check

vast night
red flower
#

you can make a card object without defining an area

#

i think for x and y you can just give it 0,0 and then put it where you want and it does it automatically

red flower
#

damn it's a drawstep draw order issue

#

i need to add a drawstep to vanillaremade..

vast night
primal robin
#

Core class for jokers, consumables, vouchers, etc

red flower
vast night
red flower
#

no idea, you probably need to extend from it or something

wintry solar
#

<@&1133519078540185692>

crisp elbow
#

Brother 😭 who’s tryna run rugpulls in the anti gambling game server

crisp elbow
#

Guy posted some crypto shit

#

got deleted

#

MrBreast was here

vast night
vast night
primal robin
#

Can someone show me rq how mutibox tooltip definition for cards looks like?

red flower
primal robin
#

ok

#

array of arrays

red flower
#

yeah

primal robin
#

Oh yeah, perfect

#

Basically API for TheFamily is done

red flower
#

amazing

vast night
primal robin
#

I'd like to make some practice examples how to use what I made, but I need to do some work

#

So I'll describe API and then just let others do stuff

#

(who cares lol)

red flower
#

ill play with it as soon as i can

#

i have like a dozen things that could be tabs

plucky zenith
wintry solar
#

those tabs are sick sleepy

red flower
plucky zenith
#

Hmmm, I restarted the app a few times in the process, but I do think I keep re-loading the last played hand. Let me try

red flower
#

btw is there a way i can delete samplejimbos from the internet

plucky zenith
#

@red flower Thank you - that took care of it. I should have tried that earlier facepalm

#

I assume samplejimbos is a bad example then - any better coded (but still fairly comprehensible for someone learning) examples I could look to?

red flower
plucky zenith
#

Thank you for the better/more-current examples - I'll work from those 🙂

scenic steeple
#

alright so maybe there is a website or something that can helpme but I'm trying to make a joker give ^2 Mult (I've already got the downside made to not be op so yip) but I just can't figure this out, help please someone

red flower
#

do you have talisman

scenic steeple
#

yes

vast bough
#

this is my beautiful solution to destroying cards, does anybody know what the method is for destroying cards specifically on scored, instead of waiting until the hand is done to destroy them or is it too much effort for what its worth

 calculate = function(self, card, context)
        if context.destroy_card and context.destroy_card.should_destroy and not context.blueprint then
            return true
        end
        if context.individual and context.cardarea == G.play and not context.blueprint then
            context.other_card.should_destroy = false
                context.other_card.should_destroy = true
                return {
                    message = "Destroyed!"
                }
        end
    end
red flower
red flower
vast bough
red flower
#

also, while it's the same return { remove = true } is nicer than return true

vast bough
late garnet
daring fern
late garnet
#

ah thx

scarlet herald
#

What do I need to look into to change suit text colors with my mod? Just overriding suits_plural in the localization makes this mess

vast night
#

hi again: how can i remove the popup or add custom text to it, even if it's from another set or has another name/id?

late garnet
tight notch
#

how would edit the weight of a booster in a voucher?

vast night
rotund sable
scarlet herald
vast night
# vast night ignore the textures

bump & why does it not recognize my atlas?

SMODS.Atlas {
    key = 'fates',
    px = 63,
    py = 93,
    path = 'fates.png'
}

local function fate_card_center(fate)
    local ret = G.P_CENTERS['j_triboulet']
    ret.set = 'Fates'
    ret.name = fate.name
    ret.atlas = 'fates'
    ret.pos = { x = 0, y = 0 }
    ret.soul_pos = { x = 1, y = 0  }
    ret.config = {}
    return ret
end
daring fern
vast night
#

do you also have an answer for the prev question?

daring fern
red flower
#

card.no_ui = true

vast night
# red flower card.no_ui = true

k. it would be awesome tho if i would be able to define the text. any hints. also again tysm N' and somethingcom for helping so often <3

red flower
#

i dont really know how youre displaying the card

vast night
vast night
tight notch
#

yeah thats what i want to change

dark quartz
#

Switching the files for the cards is as simple as just going into the code and just putting a different png in there right?

vast night
tight notch
#

ik but how do i change it

vast night
red flower
#

if you remove that i think it's going to display triboulets text

red flower
rotund sable
#

do i just put it into the directory of my mod?

red flower
#

i think it needs to be at the top of your workspace folder

#

also you need to change the paths to the correct ones

tight notch
red flower
#

you might need to patch get_pack

chrome widget
#

Do you have to do something specific to set sprites for a joker on load? I'm trying to load this joker with sprites for a specific center other than the Joker's own and it just kinda..... uses the default?

tight notch
#

ah ok nvm

chrome widget
#
    if card_table.ability.bootlegged_key then
        reduced_set_ability(card, G.P_CENTERS[card_table.ability.bootlegged_key])
        card.ability.bootlegged_key = card_table.ability.bootlegged_key
    end
end```
#

and at the end of that function it does this:

card.config.center.pos = center.pos
sendDebugMessage('setting sprites for '..center.key)
card:set_sprites(center)
card:set_cost()
card.config.center.pos = old_pos```
tight hull
#

Is Malverk unable to change this texture? I havent seen a key for it and even though I put the entire sprite sheet and not single jokers bcs of that and the texture still remains the default.

red flower
chrome widget
#

After the set_sprites call?

red flower
#

before

#

i think

chrome widget
#

Same result. All the properties are the given center, but not the sprites?

serene granite
#

hey so i am trying to make a modded joker thats almost exactly like blueprint but it works only for uncommon jokers, but i am not sure how to do the check, i am using the vanilla modded jokers for help but yeah.. any advice?

vague crest
#

trying to make a joker that checks if hand Doesnt contain a certain suit but im thinking this has to be the wrong way to check because it's just always returning true

chrome widget
#

Oh wait I see

#

It's because it calls set sprites again at the end of the base load call

#

Using whatever the center's current atlas is

#

Hm

red flower
#

you could try changing card.children.center.atlas

tight notch
#

how could i make a voucher that makes certain jokers give xmult

serene granite
# red flower what do you have rn

i kinda of just have the code from the vanilla blueprint, and i am trying to use the code from baseball card to kind of detect uncommon jokers

tight notch
#

or check for a pool in other_joker

red flower
#

that should work in vouchers

red flower
#

if other_joker.config.center.rarity == 2

tight notch
#

so how would i use that to check for a certain pool

#

like would it be .center.pools.poolkey

serene granite
#

ohh ok, i just have to put that before the calculate part right

red flower
#

replace pool_key with your pools key yeah

red flower
serene granite
#

oh ok

scarlet herald
red flower
#

well, first of all if you have an smods INIT you're using really old syntax

scarlet herald
red flower
#

i would try to do that, sometimes that syntax causes errors
i think you need to change the color in function Game:start_up() by hooking or replace G.C.S0_1.Clubs and G.C.S0_2.Clubs

scarlet herald
red flower
scarlet herald
# red flower oh if you're making a texture pack for playing cards you can just use this btw h...

Oh, appreciated - tho I'm trying to do jokers as well and potentially other little assets around the game, so I think sticking with the way I'm going is probably best (if i understand the limitations of that tool correctly)?

Tho now that you point it out, I'm starting to wonder if my rendering issues are actually a result of the default deck skin in SMOD pushing its color via that module - maybe I should try also making my own Deck Skin file to push the color that way?

red flower
#

for other things you should look into Malverk

#

but yeah if you want to stick to what you're doing you can try making a DeckSkin just to change the color

tight notch
#

how do I make my mod not crash with talisman?

hasty mist
#

Trying to create a negative mega spectral pack in the consumables slot, whats wrong here?

unborn bay
#

why are you emplacing the card

#

add_card already does that

hasty mist
#

should i not

#

oh

red flower
#

you can also add edition = 'e_negative' to add_card

hasty mist
#

i see

unborn bay
#

wait its a booster

#

uhhh

red flower
#

oh and you need to do area = G.consumebales

unborn bay
#

add area = G.consumables

#

what n said

red flower
#

not what i said that has a typo

unborn bay
#

through really this isn't gonna make it work properly anyway

red flower
#

it's also going to spawn a million boosters

unborn bay
#

in the actually using it department

hasty mist
#

hm

#

time to copy entropy again

#

if i can decipher ruby's rocket science code

unborn bay
#

1 morbillion lovely patches

#

you'll also have to account for it being run during a blind

hasty mist
#

damn you cryptid

red flower
#

i wanted to add a util function to open a booster like a tag to smods

#

but it's wonky during a blind so i dont want to think about it

unborn bay
#

yeah the "in-blind" stuff would be finicky

hasty mist
#

ill just ask ruby

#

later

unborn bay
#

thats why i didn't make gacha and mind available to use in blinds

hasty mist
#

first though i need to figure out why the fuck cryptid is breaking things

#

whatever this is

red flower
#

when is it not

#

i think this is a recent change actually

#

do you have both cryptid and smods updated

hasty mist
#

i dont think i was on latest commit for smods

#

trying that now

#

ok still getting that crash

#

and i updated cryptid yesterday so

sturdy compass
#

Speaking of Cryptid, does anyone happen to know why my planet cards cause crashes with Cryptid installed? I'm almost positive it's their problem but they haven't given me an answer lol
This is the line given by someone who reported it:
[SMODS Cryptid "lib/gameset.lua"]:822: attempt to index local 'card' (a nil value)

#

I've tried investigating the line myself and came up empty handed

#

The code for the cards aren't anything special either

red flower
#

get_type_colour(self, card)

#

idk if that's how it's used in vanilla but that's what cryptid wants

granite nymph
#

wrong channel :P

limber blaze
#

but i dont remember if i did 500 patches to fix it or not

#

because i did it all ages ago

hasty mist
#

fuck

#

that is concerning

#

i might have to scrap

limber blaze
#

you should just try doing it anyway and if it doesnt work then i did 500 patches

#

but i literally dont remember

#

define was made really early on

hasty mist
#

yeah

#

literally all in trying to do is put a booster pack in the consumable slot catsob

#

and actually be able to open it

granite nymph
#

we got berdly AND noelle??

hasty mist
#

watch what happens when i run a line of code I don't know

glass scaffold
#

How do I summon a card with a custom rarity with SMODS.add_card?

red flower
#

SMODS.add_card{set = "Joker", rarity = "modprefix_key"}

glass scaffold
limber blaze
#

iirc

#

i dont remember how much of that was custom

#

but it was some

red flower
sturdy compass
red flower
#

you put the joker key instead of the rarity key

glass scaffold
#

I need it to summon a specific Joker

red flower
#

well that wasn't clear from your question lol it seemed like you wanted to spawn a joker of a certain rarity not a specific card

anyway SMODS.add_card{ key = "j_modprefix_key"}

ocean goblet
#

is there a visual studio extension for steamodded?

placid star
hard flume
#

Have custom modifier types been made possible yet or am i going to have to figure out how to do that myself?

red flower
#

i dont think so

hard flume
#

Damm

#

Guess I'll just wait cuz I dont think I can do it myself

hasty mist
#

modifier types?

#

wdym

hard flume
#

Like. Categories of modifiers

vague crest
#

I referenced castle pretty heavily but im not sure if is_suit works with this context

spice wadi
cedar pendant
#

If anyone here is good at modding cards and doing sprites I have a proposition if you help me make like some cards and stuff for a mod i will pay you with steam games or nitro so DM me 💀 (i have litterally no modding experience and i am too stupid to learn)

The mod itself is gonna be unbalanced chaos because I think that would be comedic egg

An example of a card

Im Jeong Dae (Player 100): If you have $100 gain +100 mult for each card played 1 in 100 chance to be impaled with a metal pipe and die

chilly flax
#

i'm trying to rebalance the vanilla hands for sixty suits, why is flush appearing below 5oak here?

modern kindle
#

doesnt it list them by values?
5oak is worth more than flush

#

i could just be wrong but that was my understanding

red flower
#

yes

chilly flax
#

huh, i thought it was just the order you put them in

#

thanks

vague crest
hasty mist
#

why is this happening im so confused

#

i cant use smods.add_card at all

spice wadi
spice wadi
vague crest
#

ohhhh wait i see

pale rampart
#

question: how do i make a blind disable more than 1 rank?

#

question may be pretty dumb but im new to modding

hasty mist
#

just trying to open a booster pack

#

code mostly copied from ethereal tag in vanillaremade

#

i got the exact same crash earlier while trying to do something completely different

spice wadi
#

It's only been a few minutes, please be patient
Not everyone can answer or has seen every question

spice wadi
hasty mist
#

cant, my mod depends on cryptid

spice wadi
pale rampart
spice wadi
short girder
#

how would i be able to reference hand size inside a config extra table?

spice wadi
# pale rampart like that i'm sorry sorry

Ah alright
Yeah no worries, I hope you get an answer that helps
I'm guessing learning about how boss blinds work and how cards are debuffed in general would be useful

pale rampart
spice wadi
short girder
#

no! i wanna set a variable to be the hand size

red flower
spice wadi
hasty mist
chrome widget
#

Hmm, how can I force a card to draw above a specific cardarea

short girder
spice wadi
short girder
#

oh okay then!!

vague crest
red flower
#

local variables are not kept between calculate calls

chrome widget
#

Okay wait, the question here is "how to ensure cards draw below specific other cards"

#

Hmmmmm

vague crest
#

would i want to just have this be a main variable then?

normal crest
#

put the variable in your joker's config

vague crest
#

gotcha gotcha

#

ok got it working 🙏 dont know how i confused myself like this im thinkin i need more sleepy

#

sleep

#

thank you all

cedar pendant
#

If anyone here is good at modding cards and doing sprites I have a proposition if you help me make like some cards and stuff for a mod i will pay you with steam games or nitro so DM me 💀 (i have litterally no modding experience and i am too stupid to learn)

The mod itself is gonna be unbalanced chaos because I think that would be comedic egg

An example of a card

Im Jeong Dae (Player 100): If you have $100 gain +100 mult for each card played 1 in 100 chance to be impaled with a metal pipe and die

sour garden
#
                if icard:get_id() == card.ability.extra.currentrank then```
why does this code result in the error "attempt to index local 'c' (a number value)"
short girder
#

how do i reference the hand size in loc_vars while avoiding this error

sturdy compass
#

Check if G.hand exists first

#

If it does then carry out what you're doing, if not then rely on a fallback value

red flower
sour garden
daring fern
#

sturdy compass
granite nymph
#

can someone tell me how to fix the text at the bottom

granite nymph
#

DUDE

#

oh yerah

#

i already asked this

#

nvm

pale rampart
# granite nymph

unrelated but what do those stud texture cards do (i believe they are different from the normal ones)

granite nymph
#

as you could guess ti is not working

red flower
granite nymph
red flower
#

ok, but that's not what i asked lol

short girder
hasty mist
#

i think this is somehow depleting my consumable slots

sturdy compass
granite nymph
#

where do i define my localization text?

lament agate
#

can you actually register a keybind in a code?

red flower
red flower
lament agate
#

i want so that whenever this got triggered

#

it presses it

granite nymph
#

i have that but its not working

red flower
#

well if you dont show me the code i cant do anything

red flower
short girder
red flower
#

if G.hand then

sturdy compass
#

Yeah

granite nymph
daring fern
lament agate
# red flower wdym

i want it so that if this joker got triggered, it presses the player's key (for example, Esc)

#

is that possible?

red flower
#

you would probably have to call one of the controller functions

#

doesnt sound hard but i couldn't tell you which one rn

lament agate
lament agate
granite nymph
red flower
lament agate
#

oh

#

fuck

#

alright then

#

thanks

hasty mist
#

is there a way to conditionally change a joker's description

red flower
hasty mist
#

for example if a specific mod is detected use one description and if not use a different one

red flower
hasty mist
#

i tried and it did not work out very well

daring fern
hasty mist
lament agate
daring fern
red flower
hasty mist
#

fuck i dont use localization yet

lament agate
#

mood

red flower
#

you can just make one for just this

granite nymph
#

thanks

short girder
#

thanks for the help anyways :]

granite nymph
#

how do i make message = localize('som ething'), a custom text

#

like perse, how would i make ti say "hi" insteadf of $10 or whatever

daring fern
#

In Localization > misc > dictionary

granite nymph
#

can i do that without a localization fire

short girder
#

what variable checks for how many cards you are currently holding in hand?

wild escarp
#

Where is the amount of currently owned consumables stored?

pale rampart
red flower
faint leaf
#

im getting this error, and ive been trying to troubleshoot for too long!!!! idk what im doing!!!

hard flume
#

Hmm... Do ranks and suits have a calculate function? Or something similar? I know its like. Very niche that they'd actually need one, so im not expecting them to have it. Im just curious

hard flume
#

Aw man. Worth a shot. I thought maybe they'd have one that is currently uncodumented

short girder
#

is there an unlock type for cards held in hand? if no, how would i approach making a card unlock given the amount of cards held in hand?

granite nymph
#

does the "key = 'a_mult'" in messages matter?

granite nymph
#

and if it does waht are the options for those

hasty mist
#

attempting this horrible idea yet again, why dont the pool change functions here work?

granite nymph
#

why is everything in dictionary

daring fern
hasty mist
#

the number is the rarity

#

im trying to remove the joker from the uncommon rarity pool and add it to the common rarity pool

daring fern
hasty mist
#

ah

vocal bramble
#

I'm working on a blueprint-like card that copies the jokers to the left and right of it, but funneling both the blueprint effects through SMODS.merge_effects() doesn't seem to be working. It's only returning the effects of ret1 instead of both ret1 and ret2

hasty mist
#

it worked for a bit but then ran into this

granite nymph
#

it wont add 10 chips when scored

daring fern
hasty mist
#

this is everything so far

daring fern
hasty mist
#

wdym

daring fern
granite nymph
hasty mist
granite nymph
#

also im sorry for asking here so much

daring fern
hasty mist
#

alright

granite nymph
hasty mist
#

I'm still getting this crash after like 5-10 rerolls

daring fern
hasty mist
#

its supposed to be setting card.ability.extra.current to the key of a random joker, then targeting that joker, and changing its rarity to common

hasty mist
#

oh i see

#

i did not catch that

short girder
granite nymph
hasty mist
#

oh awesome it works

granite nymph
#

currently the played hand function plus the sound dont work

hasty mist
#

massively shortened the code

granite nymph
#

i want to sleeeeeeeep

hasty mist
#

now, my current challenge is to keep track of each modified joker's original rarity, and set every joker back to their original rarity when a new game is started in a Game.start_run hook, which i already have here, How would i incorporate this into the joker's code?

granite nymph
#

please

short girder
#

does anyone know the variable for the starting hand size?

granite nymph
#

theres no one helpful online right now unfortunetly

tall wharf
#

you only returned the message

#

if you just want chips

#

the message is not needed

pure salmon
granite nymph
lament agate
#
calculate = function(self, card, context)
        if context.first_hand_drawn then
            local eval = function() 
                return G.GAME.current_round.hands_played == 0 and not G.RESET_JIGGLES 
            end
            juice_card_until(card, eval, true)

            if #context.full_hand > 0 then
                G.E_MANAGER:add_event(Event({
                    func = function()
                        for _, original_card in ipairs(context.full_hand) do
                            local copy_card = copy_card(original_card, nil, nil, G.playing_card)
                            copy_card:add_to_deck()
                            G.deck.config.card_limit = G.deck.config.card_limit + 1
                            table.insert(G.playing_cards, copy_card)
                            G.hand:emplace(copy_card)
                            copy_card.states.visible = nil
                            
                            copy_card:start_materialize()
                        end
                        return true
                    end
                }))
                
                return {
                    message = localize('k_copied_ex'),
                    colour = G.C.PURPLE,
                    card = card
                }
            end
        end

        if context.entering_shop then
            return {
                func = function()
                    G.CONTROLLER:key_press_update("escape", true)
                    G.CONTROLLER:key_press_update("escape", false)
                    
                    G.E_MANAGER:add_event(Event({
                        trigger = 'after',
                        delay = 0.1,
                        func = function() return true end
                    }))
                end
            }
        end
    end,
}
#

did i do something wrong

daring fern
tall wharf
lament agate
tall wharf
#

you don't need the message

daring fern
#

Also it's context.starting_shop

lament agate
tall wharf
#

you just return the chips value you want to add

#

like

#

return {
chips = 5019839193
}

daring fern
short girder
pure salmon
#

YOUR WELCOME

granite nymph
tall wharf
#

so

#

you want to add it

#

before scoring

#

i'd say use before to add numbers

#

also i'd say create a separate ability table but if it works it works

lament agate
hasty mist
#

attempting to somehow restore modified rarities here back to their defaults when a new run is started, how would i accomplish that?

#

currently they stay as the modified rarities until you close your game

#

my idea would be to somehow add each modified joker to a table, storing their original rarities, calling that table when a new run is started, and changing each joker in the table to match their original rarities

#

but that is way beyond my expertise

granite nymph
tall wharf
#

also just for cleanliness you should format the code so it's a bit easier to read

granite nymph
granite nymph
daring fern
granite nymph
#

IT WORKS

#

nevermind why are the extra chips there

#

why are tyhey there??

thorn furnace
#

How would I go about adding a button next to the Discard button

brittle tide
#

this code only works for scored cards does anyone know how to make it work for every played card

granite nymph
#

WHY IS IT THER
E

#

bnm ghjyvtu6j7

daring fern
brittle tide
vocal bramble
granite nymph
#

its 12:12 am and im not going to sleep until tis done

granite nymph
daring fern
granite nymph
#

replacing bonus with extra>

daring fern
vocal bramble
#

I think they mean instead of config = { your_vars } it'd be config = { extra = { your_vars } }

tepid crow
vocal bramble
#

(and then you'd be calling card.ability.extra.your_var instead of card.ability.your_var)

granite nymph
daring fern
vocal bramble
granite nymph
hasty mist
#

how do you get the current amout of money you have

daring fern
hasty mist
#

tyty

#

how do i track the amount of money spent in a run?

daring fern
granite nymph
daring fern
granite nymph
#

:'(

daring fern
granite nymph
daring fern
feral tree
#

How would i get a joker to detect when a card is bought and duplicate it? know context.buying_card is the key but not sure how to set SMODS.add_card to add the newly bought card

daring fern
granite nymph
daring fern
granite nymph
feral tree
daring fern
#

Thirdly, you use copy_card to copy the card.

feral tree
#

thanks

weak mulch
#

yall what do i use to make my first mod

vocal bramble
rapid stag
tepid crow
daring fern
#

hasty mist
#

how would i go about adding a joker and it's rarity together in a table?

fallow breach
#

trying to make a card like this

#

i should be able to combine parts of swashbuckler and gift card to make it work but i cannot figure it out

daring fern
fallow breach
#

doesn't context.selling_card also account for consumables as well

fallow breach
#

what do i need to have in config and under loc_vars?

feral tree
daring fern
daring fern
feral tree
#

thanks

fallow breach
daring fern
fallow breach
#

oh yeaah

#

i had copied from another joker so i left it under calc_dollar_bonus

#

my bad 😅

#

sweet it works thanks man

fallow breach
#

another question, how would i set a pool flag that involves me just owning a specific joker

#

for example, if i have a joker that i only want to appear while i own this other joker

daring fern
fallow breach
#

i assume the mod key (in the atlas) and the joker key goes in for "j_modprefix_key"

daring fern
umbral zodiac
#

is there a way to check if another mod is installed on mod load if that mod has a higher priority

umbral zodiac
#

how

daring fern
umbral zodiac
#

oh right lmao i was overcomplicating it

hasty mist
sturdy compass
#

Quite relatable

formal quest
#

I'm making a Joker called Gambler's Fallacy that doubles listed probabilities every time one fails. I have no idea for the art though. Anyone have ideas on what I could make for it?

umbral zodiac
#

oa6 dice but splitting in half multiple times into smaller dice Maybe I Dont Know

formal quest
#

I like the idea

hasty mist
#

How would i modify this line of code to also include and associate the joker's rarity to it's key in the table?

#

can i do G.GAME.modified_rarities[card.ability.extra.current, G.P_CENTERS[card.ability.extra.current].rarity] = true?

daring heron
#

how hard is it to create a custom challange?

#

it's a pretty simple one, i just want the player to start with an ethernal pinned joker

flat mist
#

If some body is willing to make a new mod pack I have ideas with really cool mechanics (I don't know to code).

#

I have almost 20 written ideas for joker and 7 spectral cards

daring heron
#

first time creating a custom challange, it's not crashing, but it wont show up either

tall wharf
#

:3

#

are you sure the file is loaded

daring heron
#

i think so

#

looking at cryptid for reference but the code there looks way different

flat mist
#

These are the ideas

#

If anyone interested please contact I just wanted to play with these joker.

daring heron
#

why isnt it showing up?

#

i'm just confused now

hasty mist
#

what is wrong here?

#

i initialized the table, why wont it add to it

royal ridge
hasty mist
royal ridge
#

line of code there is trying to index it

#

like the first table exists

#

but the second table does not

hasty mist
#

oh i see

#

im trying to nest tables

royal ridge
#

ye

hasty mist
#

so i need to initialize both individually?

royal ridge
#

seems like it

#

shame lua doesn't just create those tables by itself, but there's probably a good reason to

hasty mist
#

yeah

#

oh my fucking god

#

so

#

is it possible to automatically initialize every table inside a certain table

#

because

#

im trying to be able to iterate through the table when reopening a run after exiting and reentering the whole game

#

and obviously i cant manually initialize every single subtable

royal ridge
#

is card.ability.extra.current a string

hasty mist
#

yeah

royal ridge
#
local table = G.GAME.modified_rarities
for k, v in pairs(table) do
  local center = G.P_CENTERS[k]
  local rarity = center.rarity
  SMODS.remove_pool(G.P_JOKER_RARITY_POOLS[rarity], center.key)
  SMODS.insert_pool(G.P_JOKER_RARITY_POOLS[1], center, true)
end
#

i honestly don't know exactly what the original code is doing but i think this is more sensible considering the structure?

hasty mist
#

since without any of the table and game.start_run stuff, each joker's rarity just reverts back to the original if you close and reopen the game

#

this is beginning to be my most complicated joker 😭

royal ridge
#

ok yeah based on the logic i'm seeing, that code probably works

hasty mist
#

i also need to make it revert each joker back to its original rarity when a new run is started, but that comes later

#

okay it does not seem to be working

royal ridge
#

i assume new run would just be the reverse logic with the saved rarity

hasty mist
#

no crash, but it's not applying common when continuing a run

crisp coral
#

#1 for loop hater
looks inside
for loop

royal ridge
hasty mist
crisp coral
#

can you check if args.savetext gets nil'd in the original func

lament agate
#
calculate = function(self, card, context)
        if type(context) ~= "table" then return nil end
        if context.first_hand_drawn then
            local eval = function() 
                return G.GAME.current_round.hands_played == 0 and not G.RESET_JIGGLES 
            end
            juice_card_until(card, eval, true)

            if context.full_hand > 0 then
                G.E_MANAGER:add_event(Event({
                    func = function()
                        for _, original_card in ipairs(context.full_hand) do
                            local copy_card = copy_card(original_card, nil, nil, G.playing_card)
                            copy_card:add_to_deck()
                            G.deck.config.card_limit = G.deck.config.card_limit + 1
                            table.insert(G.playing_cards, copy_card)
                            G.hand:emplace(copy_card)
                            copy_card.states.visible = nil
                            
                            copy_card:start_materialize()
                        end
                        return true
                    end
                }))
                
                return {
                    message = localize('k_copied_ex'),
                    colour = G.C.PURPLE,
                    card = card
                }
            end
        end

        if context.starting_shop and G.CONTROLLER then
            return {
                func = function()
                    if G.CONTROLLER.key_press_update then
                        G.CONTROLLER:key_press_update("escape", true)
                        G.CONTROLLER:key_press_update("escape", false)
                    end
                end
            }
        end
    end,
}
#

why does the game keep saying

#

that the context

#

is a boolean

royal ridge
hasty mist
royal ridge
#

i keep forgetting repeat exists

royal ridge
#

like the og code

hasty mist
#

oh i see

#

i overlooked that

#

YES okay it works

#

oh my god

#

thank you

royal ridge
#

honestly there could have probably been a function to avoid typing it twice but it's only twice

#

three times is too much

#

gg

hasty mist
#

yeah

crisp coral
#

thrice because you revert it

#

so gg

hasty mist
#

alright now i need to reset everything back to normal on run start

#

im assuming i wont be able to read from that table anymore

#

since its a new run

#

no that would be too easy

#

so of course i couldnt

royal ridge
#

oh right that's a small problem

hasty mist
#

friend of mine wrote this a while ago for a more primitive version of the joker idea

#

one issue though

#

i understand none of it

#

it also doesnt work

royal ridge
#

missing savetext check

hasty mist
#

because it doesnt use smods.remove_pool and smods.insert_pool

#

but i wouldnt even know how to rewrite it to work for that

#

i want to rewrite it from scratch but i wouldnt even know where to start

royal ridge
#

i mean like

#

i believe you just save the modified rarity to G.P_CENTERS[key].old_rarity

#

instead of the G.GAME table

#

since you don't even use it there

crisp coral
#

this doesn't work because centers get wiped on reload

royal ridge
#

uh

#

if it reloads then the rarities are fine already

hasty mist
#

yeah

crisp coral
#

oh is it for resetting

hasty mist
#

i already wrote the logic for old runs

crisp coral
#

yeah it would work

hasty mist
#

so like

#

just this = true or

#

do i need something extra

crisp coral
#

= rarity

hasty mist
#

well this is back in the joker code, not the hook

royal ridge
#
G.GAME.modified_rarities[card.ability.extra.current][G.P_CENTERS[card.ability.extra.current].rarity] = true

into

G.GAME.modified_rarities[card.ability.extra.current] = 1
G.P_CENTERS[card.ability.extra.current].old_rarity = G.P_CENTERS[card.ability.extra.current].rarity
hasty mist
#

huh

#

wouldnt this mess up the run reentry code

royal ridge
#

i don't believe so?

#

nothing even checks for the specific rarity being true, only for the table

hasty mist
#

alright does this look alright

royal ridge
#

yeah i suppose

hasty mist
#

okayy thank you

#

now

#

i need to figure out the gsr hook logic

royal ridge
#

then wherever you want to, you just loop through g.p_centers and set rarities back to normal

midnight hornet
#

when developing a mod I frequently restart balatro app. But then I'd like to jump back automatically to the game I was playing skipping the intro animation and the press of the play button. is there a way to achieve that?

languid canopy
#

hi, what's the context for selling a consumable and using a consumable ?

hasty mist
#

how would i make this use the smods functions for table removal and adding

frigid cargo
#

im not very smart but why does tarot merchant have 2.4 rate in vremade? i understand its to make the weight 9.6, but why 9.6 and not 8? doesnt the voucher make the tarot card appear 2x more often?

molten musk
#

morning guys

frigid cargo
#

morning

molten musk
#

took a rest from coding for 2 days

#

now im back

frigid cargo
#

real

molten musk
#

coding everyday is tiring after all

frigid cargo
#

lol REAL

flat mist
#

If some body is willing to make a new mod pack I have ideas with really cool mechanics (I don't know to code).I have almost 20 written ideas for joker and 7 spectral cards

royal ridge
#

check for if not args.savetext or you can put it in an else in the other hook

#

then just do what you did to set rarity to common but in reverse

#
local center = G.P_CENTERS[k]
local rarity = center.rarity
local old_rarity = center.old_rarity
SMODS.remove_pool(G.P_JOKER_RARITY_POOLS[rarity], center.key)
SMODS.insert_pool(G.P_JOKER_RARITY_POOLS[old_rarity], center, true)
G.P_CENTERS[k].rarity = old_rarity
G.P_CENTERS[k].old_rarity = nil
hasty mist
#

<@&1133519078540185692>

royal ridge
#

this could totally be a function but whatever

hasty mist
#

alright so

hasty mist
#

loop and check

royal ridge
#

yes

#

uh

#

remove that center definition and replace that last line with center.rarity = old_rarity

#

didn't realise loop already did it

#

also that old_rarity check doesn't have an underscore

hasty mist
#

oh yeah

#

alrighty

royal ridge
#

um

hasty mist
#

oh

#

fuck

#

forgot one

#

two

#

once fixing those two underscores, is everything good now

royal ridge
#

no i meant add underscores since the original definition presumably uses one

#

unless that was changed

hasty mist
#

it does not

royal ridge
#

alr

lament agate
#

crash said that its trying to get the length of the full_hand

#

any ydea

royal ridge
#

what context is that triggering in

molten musk
#

so i want to add seals to a table from the deck, which succeeded, now i wanted to choose a random seal from that deck which is not working

royal ridge
#

that is a local table

#

save it to the card

#

so like

card.found_seal = {}
local found_seal = card.found_seal
#

but in reality you'd probably want to do that in the calculate anyway

#

doing it in loc_vars is incredibly strange

molten musk
#

trust me, i have no fucking clue what im doing lol
just going with whatever i think best lol

#

my very first time doing lua
my very first time modding a game

lament agate
royal ridge
#

ok but which context is that triggering in

#

lol

lament agate
royal ridge
#

context.first_hand_drawn does not have context.full_hand

lament agate
#

what should i do then

#

this acts like DNA but for all played cards

royal ridge
#

uhhh

#

that entire code is running on first hand drawn

royal ridge
#

add a separate check for context.before

#

that's where dna runs

#

keep the juice stuff in first hand drawn though

lament agate
#

so ill just replace the full_hand

#

?

#
if context.before and context.main_eval and G.GAME.current_round.hands_played == 0 and #context.full_hand == 1 then
royal ridge
#

idk what main eval is but that's the check dna uses, yeah

#

i assume you wanna have that because steamodded moment

lament agate
#

fixed

#

thanks

#

well now it doesnt copy the card

#

the crash is gone tho

royal ridge
#

what does it look like

lament agate
#

the code?

royal ridge
#

ye

lament agate
#
calculate = function(self, card, context)
        if context.first_hand_drawn then
            local eval = function() 
                return G.GAME.current_round.hands_played == 0 and not G.RESET_JIGGLES 
            end
            juice_card_until(card, eval, true)

            if context.before and context.main_eval and G.GAME.current_round.hands_played == 0 and #context.full_hand == 1 then
                G.E_MANAGER:add_event(Event({
                    func = function()
                        for _, original_card in ipairs(context.full_hand) do
                            local copy_card = copy_card(original_card, nil, nil, G.playing_card)
                            copy_card:add_to_deck()
                            G.deck.config.card_limit = G.deck.config.card_limit + 1
                            table.insert(G.playing_cards, copy_card)
                            G.hand:emplace(copy_card)
                            copy_card.states.visible = nil
                            
                            copy_card:start_materialize()
                        end
                        return true
                    end
                }))
                
                return {
                    message = localize('k_copied_ex'),
                    colour = G.C.PURPLE,
                    card = card
                }
            end
        end

        if context.starting_shop and G.CONTROLLER then
            return {
                func = function()
                    G.CONTROLLER:key_press_update("escape", true)
                    G.CONTROLLER:key_press_update("escape", false)
                    
                    G.E_MANAGER:add_event(Event({
                        trigger = 'after',
                        delay = 0.1,
                        func = function() return true end
                    }))
                end
            }
        end
    end,
}
#

here

royal ridge
#

you kept #context.full_hand == 1 lol

lament agate
#

i thought i needed them

#

so i just remove it?

royal ridge
#

yeah

#

makes it only trigger when full hand has 1 card

lament agate
royal ridge
#

wait

#

it's still in context.first_hand_drawn my guy

#

get it out 😭

lament agate
#

whuh

#

oh my god

royal ridge
#

also the only thing that should be in the event is the materialise

scenic elm
#

Hi y'all. I'm trying to wrap my head around when i need to use the talisman to_big() method and when i don't need to use it. Are there any general rule of thumbs for when to use it?

molten musk
#

i made it choose but it does that whenever i do any action

royal ridge
#

from what i remember basic number comparisons are fine, but dollars, poker hand levels, some other thing i forgot, those need to be wrapped

lament agate
# royal ridge also the only thing that should be in the event is the materialise
calculate = function(self, card, context)
        if context.before and context.main_eval and G.GAME.current_round.hands_played == 0 then
                func = function()
                    for _, original_card in ipairs(context.full_hand) do
                        local copy_card = copy_card(original_card, nil, nil, G.playing_card)
                        copy_card:add_to_deck()
                        G.deck.config.card_limit = G.deck.config.card_limit + 1
                        table.insert(G.playing_cards, copy_card)
                        G.hand:emplace(copy_card)
                        copy_card.states.visible = nil
                G.E_MANAGER:add_event(Event({
                            copy_card:start_materialize()
                        end
                        return true
                    end
                }))
                
                if context.first_hand_drawn then
                    local eval = function() 
                        return G.GAME.current_round.hands_played == 0 and not G.RESET_JIGGLES 
                    end
                    juice_card_until(card, eval, true)
                end
                return {
                    message = localize('k_copied_ex'),
                    colour = G.C.PURPLE,
                    card = card
                }
            end
        end
#

cool?

royal ridge
#

those are separate contexts 😭

#

keep them separate

molten musk
#

and for some reason if i do if context. ... then context doesnt define

royal ridge
#

oh and the event is weird

lament agate
royal ridge
molten musk
#

ok ^^

spice wadi
#

Those are the arguments for loc_vars

royal ridge
molten musk
#

it was loc_vars at first