#💻・modding-dev

1 messages · Page 171 of 1

dapper sun
#

why isn't my message appearing under the joker?

wintry solar
#

I found it

scarlet spire
#

oh?

#

OH its in buy and use, specifically...

#

love it

wintry solar
#

I'll fix this on the smods end I think

scarlet spire
#

thank you

#

until then, how would I patch this?

random sleet
#

eremel probably already fixed it four seconds ago

wintry solar
#

literally wait a couple of minutes for me to test it works properly and merge it

scarlet spire
#

thank you, will do

#

I have to sleep anyways its 3 am where I am

timid star
#

is there a way that simple custom enhancements are done, like basic +mult, xmult and other stuff

wintry solar
#

there we go

#

use context.area == G.whatever now

icy cobalt
#

am I able to recusively calculate a joker?

merry raven
#

Anyone got examples of booster packs offering enhancements

wintry solar
#

in what sense? playing cards with enhancements?

merry raven
#

Yep

#

Looked through the documentation but couldn't really figure out how to use create_card

wintry solar
#

need to use create_playing_card I think

merry raven
#

Ah

dapper sun
#

what do i need to change to make the message appear by the joker instead of the card?

wintry solar
#

message_card = card

dapper sun
#

ty i'll try it

manic rune
#

aint no way my laptop cant run balatro again 😭

#

bruhhh

#

gg

#

not the first time this happened so im not even surprised at this point

meager socket
#

download more RAM.meme

pulsar horizon
#

Lovely 0.6.0, wondering if a newer version might help lordmaHmm

manic rune
#

its really just my ram lol

#

had to close my opera for it to run again

#

my laptop is just not built to have aseprite, balatro, visual studio code + 2 tabs of file explorer opening at the same time

long sun
#

hiya! going back to what i was doing last night, what's the fix here?

pulsar horizon
manic rune
#

can you show me your code rq?

#

also, i think the "resources" folder should be named "assets" instead, not sure if it has any impact on the code execution itself

long sun
#

oh it is called that

manic rune
#

huh

long sun
#

so i have this:

SMODS.Sound({
    key = "fling",
    path = "bfdi_fling.ogg",
  replace = true
})```
manic rune
#

yeah i never tried adding sounds before so im just shooting blind here

long sun
#

and then this line should play the sound:
play_sound("fling", 1, 0.5)

manic rune
#

and i assume the "bfdi_fling.ogg" is in assets/sounds?

long sun
manic rune
#

im pretty confused honestly

#

try play_sound("bfdi_fling", 1, 0.5) to see if it works, i have no clue how sounds work currently 💀

long sun
#

OH IT WORKED

#

WHAT

#

THANK YOU

manic rune
#

wait fr? 😭

vocal verge
#

You need to have the mod prefix before the name
But it's not required on the file

long sun
#

oh i see!!

vocal verge
#

miku.ogg in folder
vcld_miku.ogg in code
With vcld being the prefix

#

For example

#

The game is otherwise looking not in the mod folder

manic rune
#

lowkey a coincidence his file just so happened to have his prefix in there too

#

💀

vocal verge
#

Yeah

long sun
#

right now, it considers Joker to be a contestant because i haven't made any contestant jokers yet :}

manic rune
#

is it me or the vid turns black at most parts

long sun
#

it's the video

#

that's what i meant by choppy footage

manic rune
#

oh lol

long sun
#

obs hates me, it seems =w=

manic rune
#

sometimes videos i watch do have that happen too (hardware issues, probably), so i gotta ask to make sure

vocal verge
#

Oh you're capturing display

#

Try setting it to just capture the balatro window

long sun
#

oh fair :D

#

i mean, you get the gist ^^

manic rune
#

is it possible to add another line in loc_vars.text? (through code)

manic rune
merry raven
#

How do I make it so that a booster pack only offers a select few enhanced playing cards?

long sun
#

hmm, encountered a bug in Speaker Box that i'd like to work around

#

how can i have an attribute on a joker, similar to Cryptid's Food Jokers?

manic rune
long sun
#

ah gotcha! will try

#

hey that worked! :D

#

thanks ^^

manic rune
#

np :D

long sun
#

ooookay problem, it threw this exception on Blackboard

#

extra wasn't null, but it also wasn't indexable

broken cliff
#

u can try printing it to see what it is

#

and printing the type of it with type()

long sun
#

oh, i know what it is

#

it's 3

#

okay lemme try adding one more condition

#

type(G.jokers.cards[i].ability.extra) == "table"

#

oh hey, that worked! :D

merry raven
#

I'm still not sure how to make my booster packs spawn Enhanced cards from a pool of my modded Enhancements

create_card = function(self, card, i)
        local rng = pseudorandom('void_pack')
        if rng > 0.9 then
            return {set = "Enhanced", area = G.pack_cards, skip_materialize = true, enhancement = "fm_transcendent"}
        else
            return {set = "Enhanced", area = G.pack_cards, skip_materialize = true, enhancement = "fm_overshield"}
        end
    end

This one gave me a crash message of attempt to index local 'center' (a nil value)

broken cliff
merry raven
#

I forgot and I couldn't really go back since I just fixed it lmao
I just forgot the enhancement prefix m at the enhancement parameter

broken cliff
#

oh

runic pecan
#

I suggest only run them when you need those numbers.
(Unless you're going to always need it, like displaying a in-game clock or something.)

broken cliff
#

^ it runs every second or smth

frosty dock
#

way worse

#

every frame

runic pecan
manic rune
broken cliff
#

bro is close to writing dostoevsky 🥀

manic rune
#

the fact i didnt even add the last two equipment slots and its already that long is kinda concerning

wintry solar
#

I think I have a more elegant way of doing multi text boxes

broken cliff
#

and i thought my 4 liner joker was

Big.

manic rune
#

this is what one of my jokers looks like rn, a whole wikipedia in here if i say so myself

runic pecan
frosty dock
#

i mean just making a Other description and passing it by set and key should work

manic rune
#

actually, should i just add another button under "Sell" which cycles through the equipment list and the joker's description?

broken cliff
manic rune
#

though again, i still dont know how to change loc_txt through code so idk

broken cliff
#

like 1 for description and other for effects?

royal ridge
#

that only calls on calculate and locvars

manic rune
#

just add whatever you want in calculate without a context

royal ridge
#

yeah but then you have to retype it in locvars

#

absolutely horrendous

#

i want my money back

manic rune
#

i thought it will change that too

royal ridge
#

idk if quantum enhancement lag is still a problem

merry raven
#
create_card = function(self, card, i)
        local rng = pseudorandom('void_pack')
        if rng > 0.9 then
            return {
                set = "Enhanced", 
                area = G.pack_cards, 
                skip_materialize = true,
                no_edition = false,
                enhancement = "m_fm_transcendent"
            }
        else
            local void_enhancements = {
                "m_fm_overshield",
                "m_fm_volatile",
                "m_fm_devour"
            }
            local selected_enhancement = void_enhancements[math.random(#void_enhancements)]
            
            return {
                set = "Enhanced", 
                area = G.pack_cards, 
                skip_materialize = true,
                no_edition = false,
                enhancement = selected_enhancement
            }
        end
    end

Well I managed to spawn my mod-specific Enhancements for my mod-specific booster, but for some reason they don't come with random Editions or Seals, anything I'm missing?

royal ridge
#

so you just call the function when displaying

manic rune
#

sometimes i wonder if i can somehow make all of those stats work in balatro context

#

💀

runic pecan
#

The fact that I can use os.date in lua means I can make a joker doing extra things during specific days like Christmas or New Year or someone's Birthday.

broken cliff
#

jolly jimbo actually being jolly

glad osprey
#

someone should make a mod where a joker can be eternal and perishable

broken cliff
#

that would be awful

#

eternal perishable AND rental joker however!

glad osprey
#

true...

#

and it still rentals after perishing

runic pecan
glad osprey
#

yes

icy cobalt
#

I tried to start_dissolve() some cards and they got shuffled away despite being destroyed

broken cliff
#

return remove = true

#

that will destroy the card

sullen fern
#

this is basic quantum knowledge

manic rune
#

whats advanced quantum knowledge

#

my good sir

broken cliff
#

"i cook krabber patters"

#

shutter up spongebib

manic rune
sullen fern
manic rune
#

we r graduating harvard with this one 🗣️

icy cobalt
#

Remove = true in the event or the return?

broken cliff
#

i graduated from mental institute

long sun
glad osprey
#

i think

broken cliff
icy cobalt
#

hmm doesn't appear to have worked

broken cliff
#

then in Event

manic rune
#

for an uncommon joker

broken cliff
manic rune
long sun
#

i did 😭

icy cobalt
#

Hmmm still doesn't work

broken cliff
#

bro got that 0.4% chance 🙏🏿

void pecan
#

how can I modify all probablilitys like dice?

broken cliff
#

0.004 CHANCE

manic rune
#

i keep getting blueprint/brainstorm for my first shop whenever im testing 💀

manic rune
#

you forgot to multiply that by 100

broken cliff
manic rune
#

^ i concur with the guy above me

#

oh fun fact

#

i played a 5 lucky cards hand once and got $20 four times in a row

#

my friend legit started beating me up for that

#

😭

void pecan
broken cliff
manic rune
#

lol

#

i didnt even have oops, all 6 joker

void pecan
broken cliff
#

it will point you to loc_var ig

manic rune
#

😭

#

saw him breaking a hand full of glass cards before

broken cliff
#

1/4^5

manic rune
#

about 0.1%

#

lol

broken cliff
#

0.09765625

manic rune
#

mhm, our luck is the polar opposite of each other

#

which is pretty funny

hardy viper
#

who is playing 5 glass cards tho

broken cliff
hardy viper
#

gotta be hella deep in endless

manic rune
hardy viper
broken cliff
#

five of a kind and like x10 mult

#

calm

hardy viper
#

better to play the minimum required to beat the blind

manic rune
#

fair point, but big score = happi

#

soo 🗣️

hardy viper
broken cliff
#

This guy Would not skip for a negative tag

#

Funbreaker

manic rune
#

truly

#

partypooper

void pecan
broken cliff
#

wait how to access the source code

#

🙏🏿

manic rune
#

💀

#

use 7-zip

#

and extract the game

void pecan
broken cliff
#

the exe file?

manic rune
#

yeah

broken cliff
#

oh alr

manic rune
#

shouldve been more specific, my bad

manic rune
void pecan
broken cliff
#

oh WTF IT WORKED

void pecan
#

Just tryna get started

manic rune
#

this?

broken cliff
#

this is truly magic

void pecan
manic rune
#

nah i get you 😭

void pecan
#

not familliar with lua

manic rune
#

uhh

#

its like

pulsar horizon
manic rune
#

local table = {
["mama"] = "yo"
}

for i,v in pairs(table) do
--i in this case is "mama"
end

broken cliff
#

didnt even know u can js

#

NONCHALANTLY EXTRACT ALL FILES

#

FROM AN EXE

#

atleast from a love(englne) game

pulsar horizon
#

Not all exes, yea

broken cliff
#

yh it wont work in other cases

void pecan
void pecan
broken cliff
#

🙏🏿

manic rune
#

true

#

😭

broken cliff
#

but more op

pulsar horizon
#

wouldn't that fuck up the table though

void pecan
broken cliff
#

yh it would

#

u woul dneed to Iterate

void pecan
manic rune
void pecan
#

safely would be go through the probabilities and set them to 100

But I aint doing allat

broken cliff
#

Oops! All Errors!

pulsar horizon
#

see you in 5 minutes when you can't fix game crashes kekw

manic rune
#

i remember seeing that from somewhere

broken cliff
#

if balatro crashes u get 1 million dollars from local thunk

#

confirmed

manic rune
#

he indeed confirmed in a talk tuah episode

hushed field
#

i hope i'm not interrupting, haha, but I've been bumping my head against this for an hour. Does calculate_joker also work if it's called on a card that isn't a joker, like a playing card with a custom enhancement?

manic rune
#

im pretty sure not

frosty dock
manic rune
#

💔

#

there goes my dream to win the jackpot in 1 try

#

bummers

frosty dock
#

Balatro trying to access (100).normal

manic rune
#

:(

#

i cant tell if thats :( or :[

tepid crow
#

:(

manic rune
#

]:

frosty dock
#

manic rune
#

what the fuck is that anime mouth, john smods 😭

frosty dock
#

i have no clue tbh

#

:b

manic rune
#

:x

frosty dock
#

manic rune
#

bro not again 😭

manic rune
manic rune
#

holy shit, i need a better pc

frosty dock
#

тοο вαδ

#

¯_(ツ)_/¯

manic rune
#

i feel like im the only person here with a pc whose ram is not sufficient to even run balatro 💀

frosty dock
#

how much u got

manic rune
#

8 gb ram

frosty dock
#

yikes

manic rune
#

surely aseprite cant eat that much ram

frosty dock
#

I mean Balatro will never use more than 2

manic rune
#

is it capped

frosty dock
#

it physically can't, at least in lua land

manic rune
#

huh

#

interesting

runic pecan
#

So it's technically capped?
As in, capped by technological sense.

manic rune
#

metamorphically capped

frosty dock
manic rune
#

wuh

#

i have no clue what happened but this lowkey looks cool

tepid crow
#

lol

hushed field
#

asesprite is also capped at 2, as far as i know

manic rune
#

probably my opera gx then, my bane of existence

dapper sun
#

i keep getting an error saying card:juice_up() isn't a thing even though i keep seeing things use it??

runic pecan
manic rune
#

should i be concerned if my jokers.lua is almost 2k lines now

broken cliff
#

how much Jokers in there

manic rune
#

this is probably enough to feed everyone in italy ngl

manic rune
#

💀

broken cliff
#

287 lines per jimbo

runic pecan
crisp coral
manic rune
#

dang

dapper sun
#

i copied a lot of my code from the example mod's gros michel copy

broken cliff
#

check if the card even Exist or smth or if its an table/array with cards

#

instead of cards themselves

runic pecan
dapper sun
wintry solar
#

what is this code trying to do

broken cliff
#

think when card is destroyed it eats it

dapper sun
#

yea

#

i forgor to include the line in the screenshot but

wintry solar
#

destroy the first hand if it's only 1 card?

dapper sun
#

yea like dna but it destroys the card after scoring

manic rune
broken cliff
#

probable

broken cliff
dapper sun
hardy viper
#

np++ has dark themes smh

manic rune
#

nah but honestly i used to code on visual studio (not code) so probably fine ❤️

dapper sun
#

i did get it all working but now i'm rewriting things trying to add juice

broken cliff
manic rune
wintry solar
#

this should work

if context.destroying_card and #context.full_hand == 1 and G.GAME.current_rounds.hands_played == 0 then
  card.ability.extra.Xmult = card.ability.extra.Xmult + card.ability.extra.gain
  return {
    remove = true,
    message = 'blablabla'
  }
end```
manic rune
#

just that i had visual studio installed on my pc

broken cliff
#

so, then why the visual Studio

manic rune
#

and thought "oh hey, i got vsc"

#

😭

wintry solar
#

don't know why you're trying to do it all manually

manic rune
#

so i started using it

dapper sun
manic rune
#

not even bothering to check its not even vsc to begin with

#

man

#

the reason why every single line in my file is misaligned actually 💀

#

had to manually space them out

wintry solar
#

what do yo want to juice?

broken cliff
#

the card

#

card:juice_up()

dapper sun
#

this was the code before i tried adding juice
-# (spoilered bc light mode)

hardy viper
#

visual studio kinda goated tbh..

wintry solar
#

in fact, just do message_card = card in the return table

dapper sun
manic rune
wintry solar
#

which card do you want to juice?

runic pecan
manic rune
dapper sun
#

only bc you made a big deal out of it before,, ,

crisp coral
broken cliff
#

i code in Microsoft Word

manic rune
crisp coral
#

your ass just copied that code inside word

manic rune
#

nah let him cook

manic rune
#

❤️

broken cliff
#

custom syntax highlighting

manic rune
#

make it authentic

dapper sun
wintry solar
long sun
#

what does this exception mean?

manic rune
broken cliff
crisp coral
dapper sun
wintry solar
#

at what timing?

long sun
#

makes sense, thanks! :D

#

it was an incorrect return

dapper sun
#

timing?

manic rune
#

oh dang

wintry solar
#

yeah, when do you want it to shake

dapper sun
#

as it destroys the card

manic rune
#

nah but rq, this surely cant be the only way to do this right 💀

broken cliff
#

"feetEffect"

manic rune
wintry solar
#

no event jank is going to make that work

runic pecan
broken cliff
#

can u technically put wait XDDDDDDDDDDDDDDDDDDDDDDDDDDD

pulsar horizon
manic rune
wintry solar
#

The event queue will go calculate which cards to destroy>evaluate effects returned by jokers here>destroy cards

#

in fact there's a step inbetween there still

pulsar horizon
runic pecan
#

What would the effect of the actual Exodia be in Balatro, though?

dapper sun
#

well, it only destroys a card when one's played in the first hand, like dna

pulsar horizon
long sun
#

this chunk of code is being run repeatedly, what am i missing?

if context.end_of_round and not context.blueprint and not context.repetition then
      card.ability.extra.current_mult = card.ability.extra.current_mult + card.ability.extra.mult_scale
      card.ability.extra.mult_scale = card.ability.extra.mult_scale + 1
      card_eval_status_text(context.blueprint_card or card, 'extra', nil, nil, nil, {message = localize('k_upgrade_ex')})
    end```
manic rune
#

❤️

manic rune
#

theres an exodia card which eats up pieces to increases its attack

runic pecan
manic rune
crisp coral
#

oh wait that's my mod

manic rune
#

brother this is NOT apoc bird 😭

manic rune
#

but

#

unfortunately, everything will crash if i do

#

(not even joking at this point, send help)

dreamy thunder
#

im trying to return hand_chips as chips given by a joker but it crashes when using talisman. How can i make it compatible with talisman?

dreamy thunder
#

1sec

#

it works fine without talisman

runic pecan
broken cliff
#

hm

#

try doing to_big(number)

dreamy thunder
#

where?

runic pecan
broken cliff
#

hand_chips = to_big(number) ig

#

i cant see ur code sadly

dreamy thunder
#

oh yh mb

manic rune
#

theoretically speaking, is this possible

#

oh wait nvm

#

it should be i

void pecan
manic rune
#

ok nvm not

#

refreshed my brain, realized that wont work

broken cliff
#

wait

#

could u technically

#

write code in roblox studio then port it to .lua balatro mod

broken cliff
#

better than microsoft word

#

better than notepad++

#

get a useless code and a bunch of error suggestions since ur doing smod.joker {} and not smod.joker = {}

manic rune
#

oh wait, it actually works

manic rune
#

i just have to reorganize everything again

#

sheesh

hardy viper
#

much different Lua version

manic rune
#

thats gonna save a lot of my time

hardy viper
#

something that would be syntactically correct in luau could fail on luajit

#

and vice versa

hushed field
#

screenshot's mostly just for some context. Trying to figure out a way for a joker to trigger the calculate function on enhancements. At least, in a somewhat simple way. I'm not really making headway in trying to think of alternative ways to do this in a way that's not going to result in me writing some truly terrible code

hardy viper
manic rune
#

that was my first crash, genuinely thought that worked 😭

hardy viper
#

i wish it did

broken cliff
#

wait += doesnt work?

hushed field
broken cliff
#

😭

runic pecan
manic rune
broken cliff
#

this is so sad

manic rune
#

a huge shame

#

💔

broken cliff
#

alexa turn on despasito

hardy viper
#

lua developers writing variable = variable + 1 instead of variable++

wintry solar
manic rune
hardy viper
#

so true

broken cliff
wintry solar
#

man I wish += was a thing in lua

broken cliff
#

and if u need another one js do it again bruh

#

rely on magic numbers not variables

hushed field
manic rune
wintry solar
broken cliff
fallen pelican
manic rune
#

idk

#

im bad at guessing contexts 💀

long sun
#

will try that :D

manic rune
#

(wait what is context.individual for again 🗣️)

broken cliff
wintry solar
# long sun (bump)

update your smods and use if context.end_of_round and context.main_eval

manic rune
#

oh damn

hushed field
dreamy thunder
wintry solar
#

can you show the enhancement calculate?

dreamy thunder
#

wifi crashed

runic pecan
broken cliff
#

afaik hand_chips is a bignum in talisman

hushed field
# wintry solar can you show the enhancement calculate?

was just grabbing it!

        print("TESTING - ")
        if (context.cardarea == G.play and not context.repetition) or context.sci_fi_upgrade then

            -- Sets values, as upgrade should happen after scoring
            card.ability.times_upgraded = card.ability.times_upgraded + 1
            card.ability.mult = card.ability.mult + card.ability.a_mult
            card.ability.bonus = card.ability.bonus + card.ability.a_chips

            card_eval_status_text(card, 'extra', nil, nil, nil,
              { message = localize('k_upgrade_ex'), colour = G.C.CHIPS })
        end
    end```
dreamy thunder
broken cliff
#

and bignum is a way of having numbers bigger than 1e308

broken cliff
#

is it a built-in function?

wintry solar
#

okay cool, just drop a SMODS.calculate_context({sci_fi_upgrade = true}) instead of the loops in if is_same then1

dreamy thunder
#

i used it as a way to store hand_chips

long sun
#

this happened after attempting to update SMODS

wintry solar
#

start a new run

long sun
#

fair ^^"

hushed field
long sun
#

oh uh. Talisman works, but i can't access my other mods

broken cliff
wintry solar
#

mod_chips is a vanilla function

dreamy thunder
broken cliff
#

does storedchips appear in the loc_vars?

#

bcuz it expects a string or a number not a bignum(a way to store huge numbers using tables)

dreamy thunder
#

yeah

xx in vanilla and xx.00 in talisman

broken cliff
dreamy thunder
#

i dunno how to get arround it though

broken cliff
#

talisman converts numbers into bignum's which are tables

dreamy thunder
#

well how would i fix the issue

long sun
#

found my problem ^^"

wintry solar
#

don't use talisman 🙃

dreamy thunder
#

oh well

#

no way to get arround it?

broken cliff
#

uhhhh

#

ig u can check the uhhh

#

talisman source code

#

to see how it converts the score

#

to a bignum/string that u can read

wintry solar
#

nah talisman has some functions to make the score readable

#

do you need talisman though?

broken cliff
#

so taht u can read the chips 🧠

dreamy thunder
wintry solar
#

I'm just trying to get mods not to require talisman

broken cliff
#

js dont get chips bigger than e308 🧠

long sun
#

hmm, now Train Station is broken

#
local igo = Game.init_game_object
function Game:init_game_object()
  local ret = igo(self)
  ret.current_round.train_station_card = { rank = 2 } 
  ret.current_round.fainfol_card = { suit = 'Spades' } 
  return ret
end

function SMODS.current_mod.reset_game_globals(run_start)
  G.GAME.current_round.fainfol_card = { suit = 'Spades' }
  local valid_cards = {}
  for i, j in ipairs(G.playing_cards) do
    if not SMODS.has_no_suit(j) then
        valid_cards[#valid_cards + 1] = j
    end
  end
  if valid_cards[1] then 
      local chosen_card = pseudorandom_element(valid_cards, pseudoseed('fainfol'..G.GAME.round_resets.ante))
      G.GAME.current_round.fainfol_card.suit = chosen_card.base.suit
  end
  if G.GAME.current_round.train_station_card.rank == 14 then
    G.GAME.current_round.train_station_card.rank = 2
    else
    G.GAME.current_round.train_station_card.rank = G.GAME.current_round.train_station_card.rank + 1
    end
end```
hushed field
wintry solar
#

what smods versiion are you running?

hushed field
#

1.0.0~ALPHA-1304a-STEAMODDED

runic pecan
#

We're already at like fourteen hundreds right now, iirc.

wintry solar
#

do yourself a favour and don't develop on oldcalc

cedar anvil
#

old calc sucks

hushed field
#

haha, damn, i don't even know how i'm so behind. I think I may have accidentally swapped the version out when switching between mods for developing and playing, haha

broken cliff
#

whats the difference between oldcalc and newcalc

the calc function?

wintry solar
#

almost everything to do with calculation

hushed field
#

i have no clue how I did that, haha, I'm quite impressed with myself there, honestly. The version that I got from the github page is definitely the most recent one. That's good to call out, though, I wouldn't have even considered being out of date because of that

wintry solar
#

anyway, that should work fine on newest versions

hushed field
#

just tried it, definitely does! thanks so much, haha

#

means I can finally properly use this guy, instead of just having him stare at me in tarot packs

vivid solstice
#

hey, im new to modding and im kind of lost, im unsure of what folders to add and how to order them, like a jokers and cosumables folder and a basic layout would be nice thx

ionic timber
#

any way to get the current scoring card without going in a loop ?

hardy viper
#

context.other_card

#

typically

ionic timber
#

well, it kind of does what I want it to do , but not quite;

#

I want to make it so that every scoring heart is turned into a wild card, but for feedback sake I want it to be only when the card score (when it scores the chips) but it just instantly turn every heart card into a wild card the moment I play them

#

and for some reason it always happen, even in a loop, I might just be stupid

maiden river
#

is there a way to make the use button not appear when you click on a card
I don't really have any reason for the use button for these cards specifically

#

also just noticed it's behind the other number lmao

cursive glade
#

On a joker, is it possible to get G.GAME fields outside of the calculate function? Like if I wanted to set the xmult based off of the number of times a specific hand is played instead of a basic increment? Or am I going about that wrong?

wintry solar
#

you can check how many times a hand has been played inside your calc function, yeah

runic pecan
#

Behold, my version of Exodia. (just background) (if you know, you know)

hushed field
#

ooh love that colour scheme

manic rune
runic pecan
manic rune
#

oof, the first and second backgrounds lowkey remind me of soft and wet & sticky fingers lol

cursive glade
#

How do I spawn vanilla jokers? SMODS.add_card() gives me a attempt to index local 'center' [a nil value] error

                SMODS.add_card({
                    set = "Joker",
                    key = "j_showman",
                    area = G.jokers,
                })
red flower
#

It's j_ring_master

cursive glade
#

ah

#

thanks

dapper sun
#

how do i stop a joker from appearing in the shop?

cursive glade
#

Should probably look at the code for Gros Michel and Cavendish for that

hardy viper
hardy viper
dapper sun
#

the center?

hidden timber
#

@hardy viper are you on Windows by any chance?

wintry solar
maiden river
#

@wintry solar after using the new select_card thing for packs, after picking the first card out of the pack, the other ones go back to saying use

hidden timber
hardy viper
wintry solar
hidden timber
hardy viper
#

yeah

hidden timber
#

Ahh hit me up when you're home and I'm gonna send you a copy

maiden river
#

that might be something on my end tho

#

the scuffed stuff is still there lmao

wintry solar
#

Oh definitely get rid of the scuffed stuff

worthy anchor
#

Does anyone have suggestions for good mods to look at for help with coding, mods that are more up to date? I keep trying to look at mods only to find out that the code on them hasn't been updated in forever and thus is only barely supported by steammodded

maiden river
#

the use thing still happens tho

maiden river
wintry solar
#

Yeah I think I know why the use button comes back, should be an easy fix

maiden river
#

huge

broken cliff
#

Oh he meant example mods

wintry solar
#

I would recommend ortalab but I am biased

#

Examplejokers still needs properly updating to new calc

maiden river
sullen fern
#

so, i shouldn’t be using oldcalc to develop mods?

maiden river
#

no, not really

sullen fern
#

i really wanted my mod to be able to work alongside cryptid

worthy anchor
#

i meant more mods to look at for examples

#

i keep going "maybe i should look at this mod that could be interesting" and then seeing whoopsthat mod was made for smod 9.8.7 or whatever

sullen fern
#

cryptid is one of the main reasons why i wanted to get into modding balala

manic rune
wintry solar
#

Then download the refactor branch of cryptid

sullen fern
manic rune
#

peak game

#

clearly better than balatro smh

maiden river
#

it's so funny that they called it "balala"

manic rune
#

fr

sullen fern
#

now i cant stop calling balatro balala

manic rune
broken cliff
#

balitro

manic rune
#

bulutro

dense vector
#

billtor

red flower
#

baltron

wintry solar
#

@maiden river fixed

maiden river
#

thanks

nova finch
#

trying to make a joker that upgrades for every 3 in hand.
this code just doesn't upgrade by any circumstance

#

anyone that can help?

maiden phoenix
#

Replace the card = self by card = card

broken cliff
#

jokir*

maiden phoenix
#

card in calculate refers to the joker

vague pendant
#

Is there an easy way to have a joker reset a value after a boss blind? only thing I'm finding on the SMODS.Wiki is counting to three when a blind is won and resetting then.

maiden phoenix
vague pendant
#

ykw I forget about that joker a lot :P

thanks!

nova finch
broken cliff
broken cliff
#

whats in the config table

#

of the joker

long sun
#

hi sorry again, my code isn't working again =w=

nova finch
long sun
#
if context.joker_main and card.ability.extra.current_mult > 0 then
      return {
        message = localize { type = 'variable', key = 'a_mult', vars = { card.ability.extra.current_mult } },
        mult_mod = card.ability.extra.current_mult
      }
    end

    if context.end_of_round and context.main_eval then
      card.ability.extra.hands_used = 0
      if card.ability.extra.hands_used == 1 then
      card.ability.extra.current_mult = card.ability.extra.current_mult + card.ability.extra.mult_scale
      card.ability.extra.mult_scale = card.ability.extra.mult_scale + 1
      card_eval_status_text(context.blueprint_card or card, 'extra', nil, nil, nil, {message = localize('k_upgrade_ex')})
      end
    end

    if context.cardarea == G.jokers and context.before and not card.getting_sliced then
      card.ability.extra.hands_used = card.ability.extra.hands_used + 1
      if card.ability.extra.hands_used == 2 then
        card.ability.extra.current_mult = 0
        card.ability.extra.mult_scale = 1
        play_sound("bfdi_snowball_no", 1, 0.25)
        return {
          message = localize('k_reset'),
          colour = G.C.RED
        }
      end
    end```
#

could someone be a dear and check over it for me please? ^^"

broken cliff
nova finch
broken cliff
#

i suggest you do
if context.individual and context.cardarea == G.play then
if context.other_card:get_id() == 3 then
card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.chip_gain

#

and add the debuff check ye

normal crest
wintry solar
long sun
#

oh true =w=

#

i meant for it to go on the end, lemme test and report :>

normal crest
normal crest
wintry solar
nova finch
#

just realized i forgot to change mult_mod

nova finch
wintry solar
#

oh

#

well then why are you checking if the 3s are in G.play?

long sun
#

okay it's working great, thanks!!

nova finch
normal crest
#

G.play is played cards, G.hand is what you want

cedar stream
#

also question for the modding community, if you ever decide to try and refer some code from MTJ could you @cedar stream if there is anything i could clarify better on? as i tend to refer people to look at the mods code and i dont want to make things more confusing for them

wintry solar
#

they're in G.hand

broken cliff
#

what is mtj

cedar stream
#

magic the gathering mod for balatro

#

the mod is called "Magic the Jokering"

broken cliff
#

they freezed the jimbo

broken cliff
prisma loom
#

what context is used for "when this card is played/discraded"?

wintry solar
#

whats the effect?

prisma loom
#

When this card is scored/discarded, draw 2 cards

#

(on top of regular 1 card draw for used card)

wintry solar
#

you just need to add the discard context then

teal cosmos
#

for balatro's artwork what's the pixel bit size? 32 or 64?

prisma loom
#

it did nothing before as well

#

no crashes at least

wintry solar
#

you don't have an extra table

#

so you're telling it to draw nil

prisma loom
#

or table is your deck?

wintry solar
#

what

#

card.ability.extra does not exist

prisma loom
#

oh right I forgot about that

#

I only added loc vars and put num of cards in it instead of config

#

my b

valid trench
#

does anyone know why this is happening?

#

needed to update lovely nvm

edgy mountain
#

can someone help me figure out whats wrong?
my pt_BR isnt being recognized and garlic_bread is displaying nothing

#

in en-us

#

the keys seem to be right too

frosty dock
edgy mountain
frosty dock
#

yeah

#

there should be file extensions

#

e.g. en-us.lua

edgy mountain
#

like, its implicit

#

so i missed it

graceful magnet
#

so starting with this as a base, how would I get the chip value and mult value of a played hand?

    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.chipStorage, card.ability.extra.multStorage } }
    end,
    calculate = function(self, card, context)
        if context.before and context.cardarea == G.play then 
            
        end
    end```
edgy mountain
graceful magnet
#

(also what file is the code for decks stored in? I'd like to take a look at Plasma)

dreamy thunder
#

how does one level up a poker hand ? i checked the games code too and i cant figure out

normal crest
cursive glade
#

How does a joker override a variable of another? Like how "Oops All 6's" can override the chances values of Space Joker and other probabilities? Or should I just look at the code for those?

normal crest
graceful magnet
cursive glade
normal crest
#

the rest of your code seems like it's not actually doing anything

normal crest
#

or rather

graceful magnet
normal crest
#

you can achieve the same effect by returning return { swap = true }

normal crest
#

keep in mind set_ability will be called when you open the collection outside of a run too

cursive glade
#

ah, makes sense. thanks

graceful magnet
normal crest
#

Maybe context.before is too early to swap

#

I am not sure

graceful magnet
#

well the message isn't popping up either

normal crest
#

Try removing the context.cardarea check

graceful magnet
#

that did it

normal crest
#

nice

graceful magnet
#

oop

#

but it reverts as soon as scoring cards starts

#

wow thanks OBS great frames

#

yeah as soon as it hits a scoring card the swap gets undone

normal crest
#

that's odd

#

that's why

#

"before" context happens before the actual mult and chips are set to the hand's amount

graceful magnet
#

ohhh

prisma loom
#

oh wait

rough furnace
#

I'm not too familar but I don't belive discard and main_scoring can be active at the same time

prisma loom
#

loc vars is wrong

graceful magnet
normal crest
#

you might have to make your own context for it

#

should be relatively easy if you know how to do lovely patches

graceful magnet
#

I barely know what I'm doing here egg, weird workaround time probably

wintry solar
#

yeah you'll need your own patch for that

prisma loom
#

Got this error now:

Oops! The game crashed:
game.lua:2733: bad argument #1 to 'push' (boolean, number, string, love type, or table expected)

Additional Context:
Balatro Version: 1.0.1n-FULL
Modded Version: 1.0.0~ALPHA-1404b-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.7.1
Platform: Windows
Steamodded Mods:
1: DebugPlus by WilsontheWolf [ID: DebugPlus, Version: 1.3.1, Uses Lovely]
2: Item Remover by elial1 [ID: ItemRemover, Priority: -1]
3: HD by Kars [ID: HandsomeDevils, Version: 1.0.0]
Lovely Mods:

Stack Traceback

(3) LÖVE function at file 'boot.lua:352' (best guess)
Local variables:
errhand = Lua function '(LÖVE Function)' (defined at line 553 of chunk [lovely debugplus.console "console.lua"])
handler = Lua function '(LÖVE Function)' (defined at line 553 of chunk [lovely debugplus.console "console.lua"])
(4) method C function 'push'
(5) Lua upvalue 'gameUpdateRef' at file 'game.lua:2733'
Local variables:
self = table: 0x3e576360 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x3ed34518 (more...)}
dt = number: 0.0060379
(6) Lua method 'update' at Steamodded file 'src/ui.lua:84'
Local variables:
self = table: 0x3e576360 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x3ed34518 (more...)}
dt = number: 0.0060379
(7) Lua field 'update' at file 'main.lua:996'
Local variables:
dt = number: 0.0060379
(8) Lua function '?' at file 'main.lua:935' (best guess)
(9) global C function 'xpcall'
(10) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 906 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])

normal crest
#

you should be able to target mult, hand_chips, modded = G.GAME.blind:modify_hand(G.play.cards, poker_hands, text, mult, hand_chips) that line, and put your context before that

scarlet spire
normal crest
# graceful magnet I barely know what I'm doing here <:egg:1185774071150018580>, weird workaround t...
[manifest]
version = "1.0.0"
dump_lua = true
priority = 0

[[patches]]
[patches.pattern]
target = "functions/state_events.lua"
pattern = "mult, hand_chips, modded = G.GAME.blind:modify_hand(G.play.cards, poker_hands, text, mult, hand_chips)"
position = "before"
match_indent = true
payload = "SMODS.calculate_context { after_before = true }"

this is how I'd do it, I just named it "after_before" cus I lack imagination, but feel free to change it

graceful magnet
normal crest
#

Mods/your mod name/lovely/<whatever>.toml

wintry solar
scarlet spire
#

hmm

#

what I currently have written makes it never trigger at all

#

even when using from a booster

#

context.consumeable.area == G.pack_cards just makes it work like it did before

#

context.area == G.pack_cards makes it never trigger as well

graceful magnet
normal crest
#

yep

graceful magnet
#

and then I can just, do context.afterbefore?

normal crest
#

context is equal to what is after SMODS.calculate_context there

#

so context is just { after_before = true }

#

and no other information

#

if you want smt else you'll have to add it

graceful magnet
#

yeah I mean putting it into the card, just

normal crest
#

yeah pretty mcuh

#

that will work

wintry solar
scarlet spire
#

I took most recent source, I can try again though? maybe something failed

wintry solar
#

what version?

scarlet spire
wintry solar
#

huh, should work fine

violet void
#

Hi I've made a button appear when a specific card is added to deck, but how would I go to remove it when that card is removed?

#
    add_to_deck = function(self, card, from_debuff)
        G.GAME.current_alignment = 'thief'

        G.GAME.extra_buttons = UIBox {
            definition = {
                n = G.UIT.ROOT,
                config = {
                    align = "cm",
                    minw = 1,
                    minh = 0.3,
                    padding = 0.15,
                    r = 0.1,
                    colour = G.C.CLEAR
                },
                nodes = {
                    {
                        n = G.UIT.C,
                        config = {
                            align = "tm",
                            minw = 2,
                            padding = 0.1,
                            r = 0.1,
                            hover = true,
                            colour = G.C.ALIGNMENT['cs_thief'],
                            shadow = true,
                            button = "cs_access_stack"
                        },
                        nodes = {
                            {
                                n = G.UIT.R,
                                config = { align = "bcm", padding = 0 },
                                nodes = {
                                    {
                                        n = G.UIT.T,
                                        config = {
                                            text = localize('b_cs_stack'),
                                            scale = 0.35,
                                            colour = G.C.UI.TEXT_LIGHT
                                        }
                                    }
                                }
                            },
                        }
                    },
                }
            },
            config = {
                align = "tr",
                offset = { x = -11, y = 0 },
                major = G.consumeables,
                bond = 'Weak'
            }
        }
    end,```
wintry solar
#

G.GAME.extra_buttons:remove() in remove_from_deck I would imagine

scarlet spire
#

hmm, print(context.consumeable.from_area) under context.using_consumeable prints a MASSIVE table? is this normal?

wintry solar
#

I really wish I knew what mod keeps messing with negative playing cards and hand size,

scarlet spire
#

ah

#

oh, right, hmm

wintry solar
#

can you show what your current code looks like?

scarlet spire
#

full joker or just the calculate function?

wintry solar
#

just the calcualte is fine

scarlet spire
wintry solar
#

I have no idea why that doesn't work

wicked spire
#

How do I check if the played hand contais the most played poker hand? I've seen next(context.poker_hands["Hand Name"] but can't figure out the rest

normal crest
glad osprey
#

how would i stop a card from being destroyed

#

specifically a playing card

#

like you use a hanged man on it and it doesnt get destroyed

wintry solar
hardy viper
# scarlet spire

is it possible G.pack_cards is just a table of the cards in the pack and the actual cardarea is something else?

wintry solar
#

this was definitely working earlier, why on earth is it broken now

#

oh what why is this patch missing now

#

okay it's fixed now

normal crest
scarlet spire
chrome prawn
#

update on this thing that I'm making
for some reason even thought I set the extra value to be 2 and only 2 the game is adding it to the "perma_bonus" value multiple times in a row and I can't find a way to stop it from happening

#

does anyone know how to fix this

graceful magnet
#

borrowing from Oops' code, tried subbing the v*2 it uses for doubling the probabilities with a v + 1 to just add 1, unfortunately, doesn't work, wasn't totally surprised but would there be a way to add a flat chance increase?

#

(I did fix the for loop end formatting, didn't have an effect

prisma loom
#

So ive tried to revision the code referencing cement seal by Minty but the seal itself still does nothing in game:

normal crest
rough furnace
#

(also this will interact weirdly with oops)

prisma loom
#

one if statement for each?

normal crest
#

or you can do if (context.main_scoring or context.discard) and context.cardarea == G.play

graceful magnet
rough furnace
#

yeah oops effect is done in add_to_deck (and remove_from_deck to undo). In calcualte it will just add anytime there is a joker calculation

prisma loom
#

is G.FUNCS.draw_card... is a custom thingy?

#

I copied it from Codex Arcanuum

rough furnace
wintry solar
rough furnace
#

or oops first > 2 this > 3 remove oops > 1.5 > remove this 0.5

graceful magnet
rough furnace
graceful magnet
#

ah no I mean, how do I replace calculate with add_to_deck

rough furnace
#

it's a different function you can do

prisma loom
graceful magnet
#

okay that's how to write it, right right

wintry solar
#

what does the crash say

prisma loom
#

one sec

wintry solar
#

whats line 13?

prisma loom
graceful magnet
rough furnace
graceful magnet
#

oh I should put the rounding step after the subtraction

wintry solar
#

readd your seal on a new run

prisma loom
#

even in collection

#

either when I hover over the card that has it applied

#

or in collection

normal crest
foggy carbon
#

it's not weird, it's just how the order works

#

it's probably why the base game doesn't have any that add to the probabilities

#

the math gets funky

normal crest
#

you'll probably have to patch oops all 6s

graceful magnet
#

grief, how would I go about that

wintry solar
marble flint
#

you could replace g.game.probabilities with something using metatables for maximum compatibility but that's Annoying As Heck

foggy carbon
wintry solar
#

pretty much

#

it's tied behind a voucher in ortalab

foggy carbon
#

fun

#

really looking forward to ortalab when fully featured. There's some really fun ideas already

chrome prawn
prisma loom
#

mb a new stake difficulty could force this mechanic each ante

#

that'd incetivise skipping blinds

wintry solar
prisma loom
sturdy compass
wintry solar
#

call and check are alternate small/big blinds in ortalab

graceful magnet
#

just discovered that probabilities can't go below 1 so I might actually just keep this effect as is

sturdy compass
#

oh boy I'm gonna have to figure out how to make a new card area soon. Does anyone know of any mods that have good examples of card area implementation?

graceful magnet
hardy viper
#

ive just learned that balamod is apparently still being developed

#

somehow

sturdy compass
#

damn lol

main mica
#

Trying to do a dynamic description background, like a {X:mult} that switches on/off using loc_vars, I've kinda hit a wall though and after looking at misc_functions I've come to the conclusion I need to make a nasty patch for this tiny thing... anyone got a quick solution?

violet void
marble flint
#

not super familiar with the specifics, though

main mica
#

Ah but V only does text color, not it's background

#

Could you still show me a template?

violet void
sturdy compass
exotic hedge
#

What's the mod that organizes jokers called so I don't have to deal with this 💀

marble flint
main mica
#

Oh, I see

maiden river
solar eagle
#

is there a way to tell a joker to fully re-render itself, or at least re-render the description?

nova finch
#

What is card.ability.loyalty_remaining? I was looking through invis joker's code (I'm trying to make a similar joker) and I'm trying to figure out what it means since it keeps crashing my game

elder vapor
marble flint
solar eagle
foggy carbon
main mica
chrome prawn
exotic hedge
sturdy compass
sturdy compass
main mica
#

OOPS wrong react, sorry! ;^^

quasi comet
#

im trying to add a consumeable to a challenge but it crashes with the error "attempt to index local 'center' (a nil value). im not sure what im doing wrong ?

red flower
#

maybe c_hanged_man?

quasi comet
#

oh! it works now, thanks :]

frozen iron
#

trying to make a stake mod, and I'm having some trouble. I cannot for the life of me get it to the state where it even boots the game 😭 isn't this (prefix config key false) supposed to keep it from checking mod assets for the atlas so that it should check the base game assets? I had to do digging through the discord to attempt to find info on this, the stuff listed on the api wiki is said to be outdated here on discord and I'm starting to feel like I'm going nuts trying to figure out what I'm missing lol

normal crest
#

you don't need to create atlas for the vanilla ones

#

they're the default on their respective objects iirc

#

so just specify a position

frozen iron
#

ok I think I understand maybe

nova finch
#

what's the best way to check for if a joker is destroyed? I wanna make a joker that upgrades when that happens

vague pendant
#

I keep running into an issue when I try to use SMODS.create_card() where it keeps throwing attempt to index local 'center' (a nil value)". Anyone know why / a fix?

it also gets thrown when I tried to start a custom challenge run with my new consumable (I use custom challenges for debugging)

normal crest
#

what's your code

#

where you called create_card

graceful magnet
#

what's the equivalent of this for glass?

or how would I change local card = Card(G.play.T.x + G.play.T.w/2, G.play.T.y, G.CARD_W, G.CARD_H, front, G.P_CENTERS.m_stone, {playing_card = G.playing_card}) (from Marble Joker) to create a Glass Card instead

normal crest
#

m_glass

graceful magnet
#

okay cool figured

nova finch
#

i would guess you would just change m_stone to m_glass

#

yeah

graceful magnet
#

I've spliced together Glass Joker and Marble Joker's code, hopefully this does what I expect??

graceful magnet
#

kk

#

okay that's

that's something!

glad osprey
#

mama mia whata i doa wrong

graceful magnet
normal crest
#

you don't want to reassign SMODS.Sticker

nova finch
glad osprey
#

ty

normal crest
#

there is no built in context for jokers being destroyed

normal crest
#

you'll have to make your own

#

this is how we did it on paperback

spring lantern
#

got a problem here, the card is properly being upgraded when i buy things but the upgrade message doesn't get displayed, could something be blocking it or did i mess something up?

chrome prawn
#

help

glad osprey
#

how might one disable a joker

jade acorn
chrome prawn
# chrome prawn

should have said this earlier but the game keeps saying that the value "extra" is nil for some reason

spring lantern
#

extra should be a table cos thats what the game expects

#

then you put your variable inside that table

#

at least in my experience thats the correct way of doing ot

chrome prawn
#

how do I do that

#

oh wait I know what you mean

glad osprey
#

instead of
extra = 2
do
extra = {2}

#

I think

spring lantern
#

no it should be extra = {var_name = 2}

glad osprey
#

o

spring lantern
#

then you access it thru card.edition.extra.var_name

spring lantern
#

tag me and i'll see it tomorrow

quasi comet
#

i wanted to add an "upgraded" message to my function but it seems that it removes the ability for it to trigger on each card ? (it was working fine before adding the message part)

#

essentially i want it to show "upgraded" for each time a card is destroyed and buffs the joker up;

wintry solar
#

replace the return with SMODS.calculate_effect({message = localize('k_upgrade_ex')}, card)

quasi comet
#

it works! thank you!

long sun
#

hihi, how do you subtract money as part of a joker ability?

wintry solar
#

return dollars = -X

long sun
#

gotcha, thanks :D

chrome prawn
glad osprey
#

what now 😔
(only happened when i looked at the sticker in the collection)

wintry solar
unkempt thicket
#

why does context.full_hand no longer work with context.discard? (im using calculate in a seal btw)

chrome prawn
nova finch
#

how do i check if a card has a specific seal on it when scored?

wintry solar
wintry solar
chrome prawn
wintry solar
#

in the loc vars too

#

oh wait nvm

#

I can't read

#

(:

#

can you send the entire edition code?

chrome prawn
wintry solar
wintry solar
glad osprey
wintry solar
glad osprey
#

guh

unkempt thicket
desert ore
#

ok I'm learning my first joker creation stuff, so after reading back some messages to see if some of my issues have been solved before, I've seen a lot of references to ModdedVanilla, is that defunct now? it's not in my smods-main folder

chrome prawn
#

which was the problem I was trying to fix in the first place so I'm essentially back at square one

frozen iron
#

i return once again with another conundrum, my fellow fools
why it no unlocked I set it to unlocked after white beaten I can't test it >:(
(also when I try to use galdur with it it crashes telling me atlas is a nil value so that's fun)

unkempt thicket
#

how can i make this add a repetition to the first card after it already scored?

chrome prawn
# wintry solar what do you mean?

so whenever you use a playing card with this edition on it it's suppose to give 2 extra chips similar to the hiker jokers effect

it works the way it's meant to but instead of giving 2 extra chips it gives 4 extra chips

nova finch
#

Trying to retrigger cards with gold seals. This code shows the again mesage but doesn't actually retrigger. Is there anyone that knows why?

chrome prawn
glad osprey
#

how would I debuff a card that has a sticker, then when a joker is sold it un-debuffs

last sentinel
#

I see ia lot of people on here saying theres no way to act on unscored cards, could one not just iterate through G.play.cards and context.scoring_hand to figure out which played cards dont score?

#

Not saying that thats wrong just wondering why you couldn't go about it that way

snow snow
#

has anyone made the deck ui show your cards in draw order instead of suit/rank? if not, does anyone know where to start?

vague pendant
normal crest
#

your key is missing the prefix

#

assuming it's a consumable it'd be

#

c_JTC_clue