#💻・modding-dev

1 messages · Page 573 of 1

slim ferry
#

LMAOO

#

why is there a , true) there

#

double closing brackets smh

red flower
slim ferry
#

well yeah but

#

theres two closing brackets

#

lmao

charred widget
#

what would the local key be?

red flower
#

oh i thought this got fixed in smods lol

red flower
#

obviously there are two

#

or it would crash

slim ferry
#

no like

idle plaza
slim ferry
#

i guess

#

fair

rigid solar
charred widget
#

oh i was making that way too complicated

rigid solar
#

yup

charred widget
#

i thought it had to be like (right.config.center.key == "j_legendar_solgaleo" and "j_legendar_duskmanenecrozma") or "j_legendar_dawnwingsnecrozma"

winter flower
#

is there an easier way to do this

charred widget
#

and like more of that

#

ok i got a crash

#

and if the solution is to add another end on the same indent i will crash tf out

idle plaza
#

Code and error?

red flower
charred widget
#

IM SO FUCKING MAD

winter flower
#

ah

slim ferry
#

if so i get your frustration

#

i love indentation

rigid solar
#

who doesnt

slim ferry
#

stop doing lua
if statements were not meant to be given "then" and "end"

#

🔥

#

fuck i havent done python in way too long

charred widget
slim ferry
#

i forget other differences

#

oh god C#

charred widget
#

it may have been C+ though

slim ferry
#

fuck 1 indexing

#

i hate 1 indexing

charred widget
#

or it might have been java

#

i don't really remember

rigid solar
#

i mean it makes more sense

slim ferry
#

its more annoying code wise though

idle plaza
rigid solar
#

an array of length 2 having [1] and [2] is so much more intuitive

#

instead of [0] and [1] balatrojoker

slim ferry
#

its like 1 thing to learn

charred widget
#

ok so the game no longer crashed but it prioritizes fusing into Dusk Mane or Dawn Wings instead of Ultra form

rigid solar
#

whats your code

slim ferry
#

put the ultra check before the other two checks

#

i imagine

charred widget
rigid solar
#

yeah that's what i said in the code

#

that's what the elseif at the end meant 😭

#

"elseif left blablabla the code your already have" 😭

slim ferry
#

i mean as long as it works in the end yk

#

the process is just the learning experience

#

or smth idk

rigid solar
#

yeah ig not everyone studies computer science like i've been doing for 4 years now

slim ferry
#

maybe the real code was the friends we made along the way

idle plaza
#

Any mistake you make now is a mistake you're less likely to make in the future.

slim ferry
charred widget
#

❌ ❌ ❌ ❌ ❌ ❌ ❌

#

I WILL CONTINUE TO MAKE THAT MISTAKE REGARDLESS

slim ferry
#

lmao

idle plaza
#

If you say so.

rigid solar
#

im probably missing some

slim ferry
#

why the fuck did you have to do assembly thats like torture

rigid solar
#

i did it for 1 semester

#

so it's kinda fine

idle plaza
charred widget
#

imma keep it tall i had no interest in coding until i wanted to start modding games

#

i always thought i was too stupid to learn a coding language

rigid solar
#

arduino is the first thing i coded (except freaking scratch i guess)

#

in highschool

slim ferry
#

i definitely always wanted to like. do smth coding related but like i never actually started anything lmfao

#

and now i make balatro mods

rigid solar
#

i wanna make games in the future
i don't think i took the perfect studies for that but i could've taken much worse

bleak cave
#

Try v4.1 released just today. I tried to fix Talisman and SMODS compatibility over the last few days.
No guarantees that it won't crash randomly, though.

dusk wadi
charred widget
#

ok this next thing i want to work on will be VASTLY easier

#

for me and everyone else

bleak cave
charred widget
#

Now I want to work on the Hoenn trio

#

and the three of them transform through consumables

#

how would i make it so i can use a specific consumable ONLY on a specific joker?

frosty rampart
#

make the consumable's can_use function only return true if you're highlighting only one joker, and that highlighted card is the joker you want to be able to use it on

charred widget
dapper sun
#

i found out why it wasn't working 😭

#

...the specific enhanced card i was using was from before i reworked its effect, so it didn't have an odds value

#

i have the stupid 🙏

shy sequoia
#

Can somebody help me with my mod? It won't pop up in the mod section! Here's the zip

slim ferry
#

can you show the metadata file

cursive gazelle
#

The .json file

idle plaza
#
    can_use = function(self, card)
        return #G.jokers.highlighted == 1 and G.jokers.highlighted[1] == "j_modprefix_key"
    end,

As part of the Consumable's code.

frosty rampart
#

but yes

idle plaza
#

Fixed

cursive gazelle
#

They’re in joker slots

idle plaza
#

Already pointed out

cursive gazelle
#

Fire code tho

frosty rampart
#

hi s

cursive gazelle
#

That reminds me of the time eris tried to set suit to a rank

#

Hello meta

#

How are you in this fine day

#

Oh hell nah who’s M

robust marsh
#

how would i check if a card is being scored and not just played, i feel slow as hell right now

robust marsh
cursive gazelle
#

😭😭

#

This city doesn’t fit for all of us

robust marsh
#

m

frosty rampart
frosty rampart
cursive gazelle
robust marsh
#

dop e

frosty rampart
#

or uh yea scoring_cards

#

no wait yea it is scoring_hand

cursive gazelle
#

I don’t remember actually

#

Lol

shy sequoia
cursive gazelle
#

I haven’t coded any jokers

#

Maybe 5

#

When i started

cursive gazelle
rigid solar
#

but yeah scoring_hand can work too depending on what you want to do

idle plaza
# cursive gazelle Send the .json file content please

This is from their whole mod upload.

{
  "id": "my_joker_pack",
  "name": "My Joker Pack",
  "description": "Adds custom jokers including Giygas and Example.",
  "version": "0.1.2",
  "authors": ["YourName"],
  "priority": 0
}
cursive gazelle
#

Mhm you can work with individual too

cursive gazelle
#

There’s no main file

frosty rampart
cursive gazelle
#

Meta please link the smods mod example

frosty rampart
cursive gazelle
#

Thanks meta

robust marsh
#

meta, mmetadata haha get it i need some sleep

idle plaza
#

mmmmmmetadata

cursive gazelle
#

Which is a character i pretty much hate because my and my friends like to do some couch gaming on Fridays and we play some combat games , some of those games is rivals of aether which has a mod that adds metaknight which is such a broken character that my friend likes to spam

robust marsh
# cursive gazelle Context.scoring_cards[i]==card
 if context.before then
            if G.GAME.current_round.tdec_beast_card and G.GAME.current_round.tdec_beast_card.id then
                for _, card in ipairs(G.play.cards) do
                    if card:get_id() == G.GAME.current_round.tdec_beast_card.id then

ngl not sure how i'd apply it in this instance since i'm already just iterating over the played cards

idle plaza
robust marsh
#

nope i dont

frosty rampart
robust marsh
#

ii will do that then

cursive gazelle
dapper sun
#

how do i check if you have a certain joker?

cursive gazelle
cursive gazelle
dapper sun
#

ty

frosty rampart
cursive gazelle
#

It returns a table

wispy falcon
cursive gazelle
#

I’m reading about tarot cards

robust marsh
#

while im still awake id like to ask again just in case if anyone knows how blinds like psychic and the mouth display their text which tells you that the hand wont score

frosty rampart
cursive gazelle
#

I have no idea , but there’s a library for making advanced blinds

#

Made by myst

#

You may wanna check it out

robust marsh
#

u got the link?

frosty rampart
#

vanillaremade is also probably a pretty good resource (unless you mean you want to have that text effect come from something other than a blind)

#

oh no never mind it's not helpful

robust marsh
#

i checked vremade

wispy falcon
dapper sun
#

does anyone know why my hook isn't working?

idle plaza
dapper sun
#

ah ok

frosty rampart
cursive gazelle
#

Myst is very talented so i’m very confident this is going to be useful

frosty rampart
wispy falcon
rigid solar
wispy falcon
#

Okay, what do the following calculation keys do?

  • p_dollars
  • h_dollars,
  • swap
  • effect
  • remove
  • func
  • extra
  • modify
idle plaza
# dapper sun still nothing

Because of the :, you don't need the self in specifically the function line. Unsure if that's the only issue but worth trying to fix first.

wispy falcon
daring fern
faint yacht
#

p_dollars / h_dollars are scored/held in hand dollars respectively. swap literally swaps the two values around. remove is for context.destroy_card to destroy card. func executes a function. extra contains an additional table of effects.

dapper sun
daring fern
#

You have to patch generate_card_ui

dapper sun
#

ok

wispy falcon
dapper sun
#

where can i find that? it's not in card.lua

daring fern
dapper sun
#

ty

#

oh dear

#

why are all the vanilla loc_vars hardcoded like this 😭

slim ferry
#

Because vanilla is. Wierd

idle plaza
#

Meet LocalThunk, God of Programming.

dapper sun
#

if it works it works ig

#

now how do i patch/hook this?

dapper sun
wispy falcon
dapper sun
#

can i use a hook or do i need to use lovely

daring fern
# dapper sun now how do i patch/hook this?
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = 'for _, v in ipairs(info_queue) do'
position = "before"
payload = '''
if conditions then
    info_queue[#info_queue+1] = info_queue
end
'''
match_indent = true
candid prism
#

i know damn well this is wrong somewhere idk

daring fern
slim ferry
candid prism
#

i see

idle plaza
candid prism
daring fern
idle plaza
slim ferry
#

For the thing i said

idle plaza
dapper sun
#

okay so i did this and now hovering over a steel/slime card just crashes the game

#

no error screen or anything, it just closes

slim ferry
#

Because it loops infinitely

#

They keep adding each others tooltip

dapper sun
#

oh-

#

how do i fix that

daring fern
dapper sun
#

ty

#

now that i know how to patch in custom info queue stuff, i can actually use this info to add the last thing i wanted to add to my upgrade mechanic

#

which is an info_queue preview of the upgraded joker

#

and the upgrade requirements

robust marsh
#

I'M SO CLOSE

dapper sun
#

what happened to that photo

#

and why's it not taking up a slot

robust marsh
#

lebron

#

nvm i fuckef up

#

: (

idle plaza
#

rip

wispy falcon
frosty rampart
#

i don't think you need to do anything else, at least if you borrowed everything from forgery properly

wispy falcon
#

I did but it doesn't work =/

frosty rampart
#

is it doubling the chips/xchips/mult/xmult at least?

wispy falcon
#

Yes

#

That it did before already

frosty rampart
#

send the whole joker code

#

including all the auxiliary functions and stuff

robust marsh
#
    calculate = function(self, blind, context)
        if G.GAME.blind.config.blind.key == "bl_tdec_beast" then
            if G.GAME.current_round.tdec_beast_card then
            self.boss_warning_text = UIBox {
                definition =
                { n = G.UIT.ROOT, config = { align = 'cm', colour = G.C.CLEAR, padding = 0.2 }, nodes = {
                    { n = G.UIT.R, config = { align = 'cm', maxw = 1 }, nodes = {
                        { n = G.UIT.O, config = { object = DynaText({ scale = 0.7, string = "Selected Rank: " .. G.GAME.current_round.tdec_beast_card.rank, maxw = 9, colours = { G.C.WHITE }, float = true, shadow = true, silent = true, pop_in = 0, pop_in_rate = 6 }) } },
                    } },
                } },
                config = {
                    align = 'cm',
                    offset = { x = 0, y = -3.1 },
                    major = G.play,
                }
            }
        end
    end

This seems to be working, but the issue is the fact that the text never gets updated droidcry

#

it just stacks

wispy falcon
frosty rampart
#

I'm heading out to eat dinner rn but I'll take a look soon

robust marsh
#

have a nic meal

wispy falcon
idle plaza
wispy falcon
#

Wait, it just gave double dollars while copying business card

daring fern
wispy falcon
frosty rampart
#

oh right
faceless joker just calls ease_dollars directly instead of returning dollars

#

you just have to deal with it

wispy falcon
#

Oh, okay

#

That would've been good to know earlier. But hey, it seems to work

#

Thank y'all :D

#

Only thing that I don't know is how to double retriggers

daring fern
winter flower
dapper sun
#

where can i find more documentation on info_queue stuff?

dapper sun
#

_ _

#

i said more documentation

winter flower
#

oh

#

im dyslexic asf holy

dapper sun
#

bc i was looking at functions/common_events and it turns out u can feed a lot more into it than just a G.P_CENTERS thingy into it

robust marsh
dapper sun
#

hold on i have an idea

#

i'll actually look at one of those g.p_centers thingies

cursive gazelle
pseudo furnace
#

Is there a way to destroy cards after the first hand is drawn (like killing off a specific rank or something?)

cursive gazelle
#

Use the same context certificate uses

#

And destroy cards from G.hand

pseudo furnace
#

Interesting! I'll go check it out

wispy falcon
#

Are there any Jokers in the game that my consumable can even use the doubling of numerator and denominator for?

robust marsh
cursive gazelle
#

Progress was made today

#

I’m proud

robust marsh
wispy falcon
#

Why are there 100+ base events in the queue though...?

robust marsh
#

the boss phase system is holding back a lot of things

robust marsh
umbral zodiac
#

whats the difference between the effect table and the key/amount parameters in smods.calculate_individual_effect
other than the fact that the effect table can probably have more than 1(?)

candid prism
#

why is it not the retrigger

idle plaza
umbral zodiac
#

erm u spelled repetitions wrong
-# but you misspelled it everywhere so it's probably fine

candid prism
#

I KEEP DOING THIS

frosty rampart
idle plaza
umbral zodiac
#

"consumeable" ahh

umbral zodiac
robust marsh
#

after i wake up im probably gonna add "boss armor" if the hand straight up just nukes the blind. Normally this would be pretty weird to have in balatro but I do want this to be a proper final boss blind

candid prism
#

i cant fucking spell kill me now <3

umbral zodiac
dapper sun
#

does anyone know what things i need to put in the table to make it not crash? ...or if it's possible to use an existing G.P_CENTERS thingy but change a few values without it changing the original

red flower
#

my mod has some jokers that scale based on nominator and denominator

wispy falcon
red flower
umbral zodiac
#

one cavendillion banan

dapper sun
red flower
frosty rampart
# red flower cavendish :3

he's modifying the return value of numerator or denominator, so it's stuff that interacts with mod_probability

wispy falcon
dapper sun
red flower
#

look at the lovely/dump

#

not the vanilla code

dapper sun
#

oh ok

#

how do i do that

candid prism
red flower
dapper sun
#

ty

#

it needs a config

#

lemme try adding an empty config table

#

it works yippee

round lion
#

whats wrong

umbral zodiac
#

youre still trying to index it at first before checking if Kino exists

candid prism
round lion
#

oh so now i cant even run a if statement without it crashing.

wispy falcon
#

Why are so many people using Notepad++ 😭

round lion
#

my c drive can NOT afford a IDE

frosty rampart
wispy falcon
red flower
frosty rampart
#

incredible

round lion
#

i thinkt he glasses arent working anymore

robust marsh
#

Hi guys I'm going to sleep very soon but I really want to ask because I'm curious is it possible to make it so your hand score doesn't get added to the total under a certain condition?

#

If yes I might have an idea for my boss blind

pseudo furnace
red flower
robust marsh
cursive gazelle
red flower
#

i wrote it backwards

#

lol

robust marsh
#

alrighty

#

no worries

umbral zodiac
#

what purpose does skip serve in here? i would assume its to skip an animation(?) but like it is also used as a number so i am a little confused

candid prism
#

im so done w this damn joker <3

umbral zodiac
idle plaza
candid prism
umbral zodiac
#

you still misspelled repetition

#

context.repitition

idle plaza
umbral zodiac
#

i know

idle plaza
#

It is repetition

umbral zodiac
#

i am pointing it out

#

lyre did context.repitition

idle plaza
#

Ah I see

frosty rampart
#

also you just need context.repetition i think, don't and it with context.individual

candid prism
#

oh my god
i am going to dagger myself

candid prism
umbral zodiac
#

i dont think u need context.individual but i think the cardarea check you may need

frosty rampart
#

yea just the cardarea check

candid prism
#

i cant fucking spell ig

cursive gazelle
#

its spelled 'instagram'

wintry solar
umbral zodiac
#

so i should make the exponent compatible with skip too?

dapper sun
# dapper sun

i've given it a not-so-empty config table and it's still giving nil values

wintry solar
#

I wouldn't touch the modify functions to do that effect I don't think

umbral zodiac
#

what would you recommend then

dapper sun
#

oh i see the vars table

wintry solar
#

calc individual effect

umbral zodiac
#

doesnt calc individual effect just

#

run the scoring_parameter stuff [if applicable]
which then also runs modify

wintry solar
#

yes but other stuff runs modify that I wouldn't have thought your effect should adjust

umbral zodiac
#

oh i see

#

alright

dapper sun
wintry solar
#

like the base values from the hand type for example

umbral zodiac
#

interesting that those use modify

wintry solar
#

why wouldnt they

#

they modify the values of the chips and mult

umbral zodiac
#

oh wait nvm i misunderstood

#

for some reason i thought u meant like

#

setting the base hand stats

#

not modifying chips with them

wintry solar
#

oh no I mean the base stuff you get from playing a flush say

umbral zodiac
#

ye

wintry solar
#

or like, the base chips from a playing card (thought you might want to adjust that, I don't know your efefct)

umbral zodiac
#

my effect is for 2 challenges [and the buffs you get on a specific deck for beating them] where all chips and mult effects are just weaker

#

but the base hand stats are probably not something i want to change

wintry solar
#

yeah calc individual then I would think

umbral zodiac
#

in calc individual is the effect table just for visuals

wintry solar
#

mostly yeah

umbral zodiac
#

oki cool

primal robin
#

You know what? In comparision to others, my mods sucks

#

(in terms of code)

foggy ginkgo
#

My mod sucks 🙌

lament agate
#

hi

frosty rampart
dapper sun
#

surely there's an easier way to make an info_queue thingy with custom config values

fallow urchin
#

I'm trying to intercept the blue seal creation making cards negative (allowing more blue seals) but blue seals are always ending after creating 2 planet cards, even though the consumable buffer increases in between the seals

any ideas on how to intercept that properly?

fallow urchin
red flower
#

also you provide want context.main_eval in your check too

dapper sun
#

i've tried everything and it's still using nil values in the info_queue

winter flower
loud summit
#

how do you make a multi layer joekr

#

like the legendaries

frosty rampart
#

add soul_pos = { x = #, y = # }

#

if you want more than base and soul layer, you need a custom drawstep. reference cryptid

hybrid shadow
#

double checking here but is the get_id() for queens == 12?

loud summit
#

is that the offset from the main joker

frosty rampart
loud summit
#

ah ok

#

so you add that to the joker itself

frosty rampart
#

yes, just like the regular pos attribute

charred widget
#

I'm having a little trouble figuring something out. I want to make it so this consumable creates a joker and destroys the one it's used on

loud summit
frosty rampart
charred widget
#

i see

#

sike!!!! i dont

frosty rampart
#

in your destroy_cards call
it should be SMODS.destroy_cards(G.jokers.highlighted[1]) (i don't think you need the extra trues)

#

anyway i think you also need to add set = "Joker", to your add_card call

loud summit
#

is there a context for right after the score is multiplied but before it gets tallied

timid zinc
#

for some reason Card:remove_from_deck gets called whenever jokers get rerolled or you leave the shop with jokers on it how do i make it for only when a joker gets sold/destroyed from your slots (i am hooking this function)

#

wait actually

#

i know this one nevermind

#

i need to check self.added_to_deck

loud summit
frosty rampart
#

show the new code you have

charred widget
frosty rampart
#

inside the {}

charred widget
#

oh

wild escarp
#

Anyone know why spawning jokers from this object type in a booster pack keeps spawning default jokers? It seems to spawn all the jokers I added to it, but it also just throws in the default joker quite often. There's 13 jokers in it, so the pool shouldn't be exhausted, right?

SMODS.ObjectType {
  key = "willatro_organ_set",
  rarities = {
      { key = "willatro_Organ", rate = "0.003" },
      { key = "willatro_organ", rate = "1" },
  },
}
frosty rampart
#

default joker means it's spawning the default card for the objecttype, possibly because you already have all the cards from that pool. first i'd recommend setting a default card (just a default = 'full card key goes here' in the objecttype itself), but if it's spawning the default joker even when you have other cards from the pool that could've spawned, that probably isn't going to actually fix the root cause

charred widget
#

now i'm just getting a syntax error. Can you help me find where it is?

frosty rampart
#

post the code again and the error

charred widget
frosty rampart
#

you need a comma after the end tied to your use function (i.e. the end right before the can_use function)

charred widget
#

gives the same error

frosty rampart
#

then you probably put the comma in the wrong place, hang on

charred widget
#

right before can_use, right?

frosty rampart
#

put the comma after the end i circled in green

charred widget
#

yeah that's where i put it

frosty rampart
#

then either you didn't save the file or it's not the same error

wild escarp
charred widget
frosty rampart
#

no it is the same error
are you sure you saved the file
if you did, just post the code again lmao

charred widget
#

yes i saved the file

loud summit
#

how do you set the current hands score in context.final_scoring_step

charred widget
frosty rampart
#

i meant replace the entire line with SMODS.destroy_cards(G.jokers.highlighted[1])

loud summit
red flower
#

i dont think there's a step for that

loud summit
#

oh

red flower
#

the score literally adds the hand score immediately

loud summit
#

hm

#

so do you think a good compromise would be adding to G.GAME.chips in a joker_main step?

charred widget
frosty rampart
#

no

frosty rampart
loud summit
#

adds to score directly

red flower
loud summit
#

i added it to main for now ill see if that works

red flower
#

i think if you use an event in final_scoring_step it should be before the hand is added but im not sure

#

visually at least

loud summit
#

ok new problem

loud summit
#

its visually added but it gets reset to what it would've been

#

after the actual hand is tallied

frosty rampart
loud summit
#

ok it seems like what toga does is just visually ease to it then set it immidietly after

frosty rampart
#

given the error it really feels like you didn't. post the code

charred widget
frosty rampart
#

hm, weird

charred widget
#

actually i think i misunderstood you earlier

#

you told me to delete the second pair of parentheses in that line

#

and i had already replaced the line with SMODS.destroy_cards(G.jokers.highlighted[1])

#

but you probably meant the (card, true, true)

frosty rampart
#

yea that's what i meant

charred widget
#

ok

charred widget
frosty rampart
#

idk at this point. the last code you posted looks the most correct, i'm not sure why it was giving the error it was

charred widget
#

can we get N to peer review it

red flower
#

no

charred widget
#

aw :/

loud summit
#

so if i return a func in a joker calculate call when exactly is it called?

red flower
red flower
loud summit
#

what

red flower
#

if you return dollars, mult and func then dollars and mult are done first and then func

loud summit
#

so would it be after or before a manually added event in joker_main

charred widget
#

could it be something with the use = function(self, card, area, copier)?

red flower
loud summit
#

ok good

#

so im using a function to ease the ANIMATION for G.GAME.chips

#

but returning a function to SET it because it seems to be overriden by scoring?

red flower
#

that makes sense

loud summit
#

OK ITS NOT WORKING :(

hybrid shadow
#

how would i go about changing the sound used by an effect (xmult for example) for a specific joker

loud summit
#

the score is still set instantly to the new value once the calculating screen is over

#

should i fire two events, one to ease the score and one to set it?

red flower
red flower
loud summit
hybrid shadow
loud summit
#
        if context.joker_main or context.force_trigger then
            G.E_MANAGER:add_event(Event({
                func = function()
                    card:juice_up(0.5, 0.5)
                    return true
                end
            }))

            G.E_MANAGER:add_event(Event({
                trigger = 'ease',
                blockable = true,
                ref_table = G.GAME,
                ref_value = 'chips',
                ease_to = G.GAME.chips + card.ability.extra.score,
                delay = 1,
                func = (function(t) return math.floor(t) end)
            }))

            return {
                   message = "you cant say its only a half",
                   message_card = card,
                   func = (function(t) G.GAME.chips = G.GAME.chips + card.ability.extra.score end),
            }
        end```
red flower
loud summit
#

a second event?

red flower
hybrid shadow
#

oh ok

red flower
#

idk tho i would have to test this stuff to see what the timings are lol

loud summit
#

yea

#

idk why the ease call just gets overriden by the scoring tally :(

charred widget
frosty rampart
#

hell yea

loud summit
#

does the order of add_event calls matter?

hybrid shadow
red flower
#

xchip_message i think

hybrid shadow
#

ok my mistake was keeping the s then

#

alr it kinda works

#

how do i fix the color

charred widget
red flower
red flower
loud summit
#

ok so i assume evaluate_play_final_scoring is called AFTER all the jokers calculate funcs have been called right

feral tree
#

how do i make a joker pinned?

#

card.ability.pinned = true aint working

hybrid shadow
#

thank you N

loud summit
#

ok so im going to do something verfy stupid

#

what if i had a context at context.before to visually reset the chip score to what it was after i set it manually in the calculate without using the event queue

#

AA WAIT I THINK I GOT IT WORKING

umbral zodiac
#

im really tired rn so i may be stupid but what am i doing wrong

daring fern
umbral zodiac
#

oh sorry my bad

#

i kinda thought itd show the custom rule
unless i am wrong and i have to do something else as well

daring fern
umbral zodiac
#

oh bruh

#

thank you

charred widget
#

so I was working on trying to get Dawn Wings Necrozma to fuse with Solgaleo and I almost got it to work, but when i went to end the shop, i got this crash

#

here's the code

frigid glade
#

does balatro mod manager work for downloading your steam modded for making mods

loud summit
#
            return {
                   message = "you cant say its only a half",
                   message_card = card,
                   func = function()
                            G.E_MANAGER:add_event(Event({
                                        trigger = 'ease',
                                        blockable = true,
                                        ref_table = G.GAME,
                                        ref_value = 'chips',
                                        ease_to = G.GAME.chips + card.ability.extra.score,
                                        delay = 1,
                                        func = (function(t) return math.floor(t) end)
                            }))
                   end
            }``` this is probabyl insanely jank
#

but screw it if it WORKS

#

it dOESNTT

#

RAHH

wild escarp
#

How could I make it so that jokers just don't appear in the shop? I simply returned false in in_pool, but that seems to prevent me from manipulating the rates when I try to spawn them in with a booster pack.

rocky plaza
# charred widget

yo in the place where u check left.config.center.key
if it is equal to "j_legendar_solgaleo" then the or statement will return true
and you cant add a joker with key = true
same for right
to fix this add 'and "j_legendar_solgaleo' inside the parentheses to the right of left.config.center.key == "j_legendar_solgaleo"
so the line would be
local key = (left.config.center.key == "j_legendar_solgaleo" and "j_legendar_solgaleo") or "j_legendar_ultranecrozma"
because for instance
if left.config.center.key is in fact equal to "j_legendar_solgaleo" then the and statement will return the second value (in this case "j_legendar_solgaleo")
and once that evaluates since a string is always truthy the or statement will just return "j_legendar_solgaleo" so the key will always be a string

#

and if its not equal then the and statement will evaluate as false and the or statement will then return the value of the second piece of the or
so "j_legendar_ultranecrozma"

#

@charred widget

charred widget
#

so would i do the same thing for the right?

rocky plaza
#

yes

charred widget
#

cool ty :3

#

ok one problem

#

now it's making it spawn Solgaleo instead of Ultra Necrozma

rocky plaza
#

so inside the statement right will always reference a joker with the key "j_legendar_solgaleo"

#

oh

#

hmmmm.

#

ahhhhh

rocky plaza
#

correct?

charred widget
#

yes

#

because we're working with Dawn Wings Necrozma

rocky plaza
#

you dont need the local key variable

charred widget
#

oh

rocky plaza
#

just put in key = "j_legendar_ultranecrozma" in SMODS.add_card

#

since you already know the right/left joker is Solgaleo

#

you can spawn the card

charred widget
daring fern
#

rocky plaza
charred widget
#

nobody knows how to fix it

rocky plaza
#
SMODS.Consumable {
    key = 'blueorb',
    set = 'item',
    pos = { x = 0, y = 0 },
    loc_txt = {
        name = 'Blue Orb',
        text = {
        [1] = 'Use this {C:attention}Item{} on {C:blue}Kyogre{}',
        [2] = 'to undergo {C:attention}Primal Reversion{}'
    }
    },
    cost = 10,
    unlocked = true,
    discovered = true,
    hidden = false,
    can_repeat_soul = false,
    atlas = 'CustomConsumables',
    soul_pos = {
        x = 1,
        y = 0
    },
    use = function(self, card, area, copier)
        G.E_MANAGER:add_event(Event({
            func = function()
                SMODS.add_card {set = "Joker", key = "j_legendar_primalkyogre"}
                SMODS.destroy_cards(G.jokers.highlighted[1])
                return true
            end
        }))
    end,
    can_use = function(self, card)
        return G.jokers.highlighted == 1 and G.jokers.highlighted[1] == "j_legendar_kyogre"
    end
}
#

fixed it

charred widget
#

:0

rocky plaza
#

extra end lmao

#

try it and see if it loads

loud summit
#

ok now my game is crashing in an explosive way? ``` calculate = function(self, card, context)

    if context.end_of_round then
        card.ability.extra.score = card.ability.extra.score + (G.GAME.chips / 2)
    end

    if card.ability.extra.score <= 0 then return end

    if context.joker_main or context.force_trigger then

        G.E_MANAGER:add_event(Event({
            func = function()
                card:juice_up(0.5, 0.5)

                return true
            end,
        }))

        -- G.GAME.chips = G.GAME.chips + card.ability.extra.score

        return {
               message = "you cant say its only a half",
               message_card = card,
               func = (function() G,GAME.chips = G.GAME.chips + card.ability.extra.score end),
        }
    end
end,```
loud summit
#

while calc

daring fern
daring fern
#

You're setting G to G.GAME.chips + card.ability.extra.score

charred widget
#

so thank you and everyone else for your help

rocky plaza
loud summit
#

the devious typo lmao

charred widget
#

the game is stable, it's not crashing

#

but i cannot use the blue orb on kyogre

rocky plaza
# charred widget nope
return G.jokers.highlighted == 1 and G.jokers.highlighted[1] == "j_legendar_kyogre"

G.jokers.highlighted is a table, itll never equal 1

rocky plaza
#
SMODS.Consumable {
    key = 'blueorb',
    set = 'item',
    pos = { x = 0, y = 0 },
    loc_txt = {
        name = 'Blue Orb',
        text = {
        [1] = 'Use this {C:attention}Item{} on {C:blue}Kyogre{}',
        [2] = 'to undergo {C:attention}Primal Reversion{}'
    }
    },
    cost = 10,
    unlocked = true,
    discovered = true,
    hidden = false,
    can_repeat_soul = false,
    atlas = 'CustomConsumables',
    soul_pos = {
        x = 1,
        y = 0
    },
    use = function(self, card, area, copier)
        G.E_MANAGER:add_event(Event({
            func = function()
                SMODS.add_card {set = "Joker", key = "j_legendar_primalkyogre"}
                SMODS.destroy_cards(G.jokers.highlighted[1])
                return true
            end
        }))
    end,
    can_use = function(self, card)
        return #G.jokers.highlighted == 1 and G.jokers.highlighted[1] == "j_legendar_kyogre"
    end
}

this should be correct

#

i think

charred widget
#

still not workin

rocky plaza
#

im dum i forgot something

#

you need to check the key of the highlighted joker

frosty rampart
rocky plaza
#

yeah this should be correct now lmao

can_use = function(self, card)
        return #G.jokers.highlighted == 1 and G.jokers.highlighted[1].config.center.key == "j_legendar_kyogre"
    end
charred widget
#

alright let's see

#

i got bad news chief

frosty rampart
rocky plaza
#

ahjhhh

#

i did it right earlier

#

but copied it from the temp file from when i fixed the syntax error

#

nighttime programming moment

charred widget
#

ladies, gentlemen and others

#

we got em

rocky plaza
#

it worked?

charred widget
#

yes

wild escarp
frosty rampart
#

yayyyy
glad to have helped at least a little bit

daring fern
#

charred widget
#

now i can probably just copy and paste it to Rayquaza and Groudon and do some tweaks for their transformations too

daring fern
rocky plaza
#

so whats the context for this
and what do you need to draw the sprite for
i think i might know something about it but it depends

daring fern
loud summit
#

like the spectral kind?

rocky plaza
#

since you can insert Sprite objects

#

but I think there would need to be some offsets or something which im not too familiar with

#

since the seals arent drawn at the center of the card

charred widget
#

the Hoenn trio can now transform!!!!! yay

loud summit
daring fern
frosty rampart
#

sorry to butt in, much simpler UI question: is there a UIBox or something that's exactly the entire screen? i want to be able to draw some text in the top left corner of the screen regardless of menu transitions/whatever

rocky plaza
daring fern
feral tree
#

is there a way to get rid of badges for stickers? trying to get rid of it on a joker because it's designed around pinned and eternal and their badges feel cluttering everytime i hover over it

loud summit
#

context.before is ran before calculations start right

desert ore
#

yes, otherwise things like ride the bus wouldn't give you the +1 that hand

loud summit
#

is there a context that fires right before the calculate screen

#

actually yk what scREW THIS

#

i give up

#

im reworking this joker to instead give its chips on drawing a hand

daring fern
loud summit
#

ah thx

vocal helm
#

How would I move the cards held in hand back into the deck (not discards?)

lofty elm
#

chat what is this second paramater for and is it arbitrary?

pseudorandom_element(_poker_hands, 'vremade_to_do')
vocal helm
#

it's the random seed for the RNG call

lofty elm
#

cool, that was kinda my guess but wanted to check

#

so yes arbitary? i just pick smt

idle plaza
#

Yes arbitrary

lofty elm
#

coolio thx

vocal helm
daring fern
vocal helm
#

huh, was trying to reference a Prism joker and that showed up.
I'll keep looking then, seems like the draw_card() function might be what I'm looking for

daring fern
vocal helm
#

ahh, makes sense.

vocal helm
#

TIL G.FUNCS.draw_from_hand_to_deck()

faint urchin
#

How do I put a hashtag character into my joker's name? I tried doing \# which did not work

cursive gazelle
faint urchin
#

that just makes the name not appear

turbid tiger
#

Hello everyone, I do not know what I am doing. Do I use r2modmanager for this or should I get steammodded and lovely in roaming's folder instead of the mod manager's folder?

cursive gazelle
manic rune
robust marsh
#

How would I create a non interactable slider? I'd like to know if there's a mod that does something similar to that at least

robust marsh
#

or crt, for example

cursive gazelle
#

Ah i see

#

Check the ui stuff in smods

robust marsh
#

oki

cursive gazelle
#

Or other mods config tab

robust marsh
#

do you know a mod with that in their config? I actually don't have any that contain it

keen atlas
#

hi, i wanted to make my editor show a warning when i call an async function from sync function. tried using ---@async attr but it doesnt help, any ideas?

--- @async
--- assume this function is in coroutine
function f() end

--- assume this function is not in coroutine
function g()
    f() --- how can i make this show warning????
end
robust marsh
#

holy hell sliders are evil

robust marsh
cursive gazelle
#

You’ll have to create it or find a plugin

#

Or something

pseudo furnace
robust marsh
#

If i do manage to make this work this will be so cool

cursive gazelle
#

When you return the function ends

pseudo furnace
#

How do I destroy multiple cards then?

cursive gazelle
#

Check the code of ankh to see how to remove multiple cards at once

pseudo furnace
#

Immolate?

cursive gazelle
#

Same thing i believe

#

They have the same behavior

robust marsh
#

oh my days

cursive gazelle
#

Fill the args lol

robust marsh
#

i thought i did..

robust marsh
#

yeah i have no clue what im doing

cursive gazelle
#

Here’s your savior

#

Frost we need medical assistance

keen atlas
#

wut

robust marsh
#

i know absolutely nothing about the UI retard

cursive gazelle
cursive gazelle
# keen atlas wut

Mint is trying to make a slider like the sound one for their config or something

keen atlas
keen atlas
robust marsh
cursive gazelle
robust marsh
# keen atlas have you shared your ui code
                    G.hp_ui = UIBox {
                        { n = G.UIT.ROOT, config = { align = "cm", padding = 0.05, colour = G.C.CLEAR }, nodes = {
                            create_slider({label = "The Beast", scale = 0.5, label_scale = 0.5, ref_table = , ref_value = " ", w = 3, min = 0.1, max = 8, step = 0.1, decimal_places = 1, colour = G.C.BLUE}),
                        } }
                    }
                end

I removed ref table and ref value here since I have no idea how to work with that. The premise is It just needs to appear at the start of a boss blind (i can't use context.setting_blind since it's a part of a phase) and act as a health bar

#

i think i got the part which spawns it under that condition

#

but the bar itself is uh

#

yea

keen atlas
#

UIBox { definition = ...

robust marsh
keen atlas
#

iirc the ref table is the table the value will go to

#
local my_config = {}
local ui = UIBox {
    definition = {
        n = G.UIT.ROOT,
        config = { align = "cm", padding = 0.05, colour = G.C.CLEAR },
        nodes = {
            create_slider({
                label = "The Beast",
                scale = 0.5,
                label_scale = 0.5,
                ref_table = my_config,
                ref_value = 'beast_config', -- this will change the 'beast_config' value in your table
                w = 3,
                min = 0.1,
                max = 8,
                step = 0.1,
                decimal_places = 1,
                colour = G.C.BLUE
            }),
        }
    },
    config = {}
}

you can access it later with my_config.beast_config

#

i might get this wrong

#

youll need to provide the initial value for my_config.beast_config

robust marsh
#

thank you for the help btw

#

@keen atlas you are amazing gemmytroll

#

now i need to figure out how to make it so you can't interact with it

dapper sun
#

how would i make an info_queue entry with custom config values

daring fern
dapper sun
#

ah

robust marsh
#

uhh is there a way to make a slider just update on its own

dapper sun
#

if i add a config table tho it just has nil for all the listed values

pseudo furnace
#

What mistake am I missing 😅

daring fern
dapper sun
#

local ability = copy_table(cfg)

#

i've gone through this stuff last night

dapper sun
daring fern
daring fern
dapper sun
#

as i've said multiple times now, this is what happens if i add the config table

#

notice how vars isn't doing anything

frosty dock
#

normally you should just provide the info_queue entry as the center table of the thing you want displayed

#

otherwise if you really need to pass vars from here instead of the object itself (which you shouldn't need to), it's specific_vars

robust marsh
#

how would I hide the score requirement? Or even the entire area that contains the score requirement

daring fern
robust marsh
#

ty

dapper sun
#

...

#

specific_vars doesn't work either

#

fml

robust marsh
#

Mmm, this is weird. Does anyone know if I can make a value determine the slider's position instead of the slider position determining a value.

copper thorn
#

it's been a long time since i've been here gosh, anyaway i gor problem, this appeared while checking on my new deck cards (there's no end missing i just couldn't screenshot the whole thing) how could this happen ?

#

nvm i fixed it

#

and btw i have a custom suit, how could i block it on all decks ?

daring fern
copper thorn
#

thx

robust marsh
#

I'll have to think some more..

#

I'm definitely not good with UI at all which is making this much slower than it should be

daring fern
#

dapper sun
#

from what i've gathered

#

info_queue works VERY differently internally with modded jokers

#

compared to vanilla ones

#

with vanilla jokers you just need key, name, config, and set = "Joker"

#

but that doesn't work with modded jokers for some reason

#

is this a SMODS bug, maybe?

daring fern
dapper sun
#

ah

#

okay

#

so how do i feed the custom config table into loc_vars

primal terrace
#

I wanna do some bug fixing

#

This Joker is meant to retrigger a Lucky Card once only if it successfully triggers

But if the Lucky Card procs when a different Joker is retriggering it, then the Derpy does not retrigger it

#

Need to figure out how to calculate all of the Lucky Card procs before the Joker retriggers the card itself

red flower
#

I don't think that's possible

#

you would probably need to patch where it calculates retriggers to add more after a lucky card procs or something like that

primal terrace
#

Wow

molten musk
#

hi

#

how do i make a jojer give money at end of round

#

like before shop

primal terrace
#

You can refer to how vanilla Jokers like Golden Joker use calc_dollar_bonus

molten musk
#

thx

daring fern
primal terrace
#

How is it different?

daring fern
primal terrace
#

I also have a few Jokers that give different amounts of Mult depending on the rank of the highest scored card

If the highest card is an Ace, it gives +11, which is correct

But if there is also a face card scored, it gives +10, as if the face card has the higher rank

#

For the code, I just adapted from Raised Fist and worked backwards

daring fern
#

Also Raised Fist sets temp_Mult to the nominal, not temp_ID

#

Also you should be using SMODS.has_no_rank

loud summit
#

how do you make a scored card gain XMult

daring fern
loud summit
#

thx

cursive gazelle
dapper sun
#

?

#

i'm talking about info_queue stuff

loud summit
#

will the game error if i try to call draw_card on a deleted card?

turbid tiger
#

Hello. Is it possible to make a joker affect specifically cards with enhancements on them? Like Vampire.

dapper sun
#

of course

loud summit
turbid tiger
#

Oh right, Vanilla Remade. I should have seen this, I was only looking at Example Jokers. Thanks.

daring fern
loud summit
#

ok how should i store cards from deck to draw later

#

and how do i check theyre still valid to draw

molten musk
#

what is this error about?

hushed field
hushed field
molten musk
#

oh

#

i see

loud summit
hushed field
#

idk what kind of object you made, but localization for things like seals and stickers can be a bit weird when you first set them up, because you need to add a dictionary entry for the label specifically

hushed field
loud summit
#

yea

#

how would i also make it persist between reloads?

dapper sun
molten musk
hushed field
loud summit
hushed field
#

It does become a bit more annoying if you want to specifically ensure that the card knows which joker marked them if there's multiple copies of the same joker, though

#

Yup

loud summit
#

ok

hushed field
loud summit
#

hopefully it doesnt get too messy setting that on half the deck lol

hushed field
#

It shouldn't, I do something like that for a boss blind that debuffs half the cards each hand, and that has been working without error so far, haha

loud summit
#

oke ^^

daring fern
hushed field
#

Though I'm currently trying to figure out how I solve the same issue for card areas, which I've not figured out yet

hushed field
# molten musk seals

I'd check the localization file in the source code and control f Gold Seal to see an example! But in your localization file, labels are set in misc.labels

loud summit
loud summit
#

im confused

hushed field
#

I'd trust Somethingcom over me

#

I'm quite good at missing reload-related bugs

loud summit
#

oh

daring fern
hushed field
#

the other thing to do is to have jokers generate an ID

#

and mark that, so cards can find their reference again

loud summit
hushed field
daring fern
loud summit
#

and its ok to set it directly without messing with its config table?

primal terrace
loud summit
daring fern
loud summit
#

ok

primal terrace
#

Bookmark for future reference

red flower
#

i still have no idea if that's the right solution

primal terrace
#

Wow! I have no idea what I'm looking at

loud summit
#

is it bad form to call "delay" like this

            if context.first_hand_drawn and (#card.ability.immutable.drawcard > 0) then
                for _, c in pairs(G.deck.cards) do
                    if c.ability.nflame_tjdraw then
                        draw_card(G.deck, G.hand, nil, "up", true, c)
                        delay(0.5)
                    end
                end
            end```
hushed field
#

I'm not sure how the base game handles it timing, as far as game speed goes, but in my experience using delay's most likely just going to annoy a player due to animation speeds being slow

loud summit
#

ok so is removing the delay ok

dapper sun
#

i'm going insane what am i missing??

rotund sable
#

Wtf discord mobile

dapper sun
#

swipe right and left

molten musk
dapper sun
#

discord mobile has been held together with duct tape for years and it's been peeling more and more

hushed field
#

and the seal's code?

molten musk
#

one sec

hushed field
molten musk
dapper sun
#

it is

#

but i want to show different values than the default ones

#

since this is for an upgrade system i'm making, which has the ability to carry/overwrite over certain values

hushed field
molten musk
#

nah, tried both capital and small

rotund sable
#

The prefix should match tho

#

Seals_Blank

#

modprefix_key

molten musk
#

did that

rotund sable
#

key:lower()

molten musk
#

hmm

#

gonna try again then

hushed field
#

I'm checking how seals are set up for Kino

#

but I don't see anything in that code specifically that should make a difference

molten musk
#

and im looking at vremade, nothing special there too

#

dont know where the problem is

#

the mod is done tho, just the text issues

hushed field
#

My only thing is that I think there might be some issues in the code that don't properly take care of capitalization, so it gets confused

#

don't know what else it'd be

molten musk
#

i mean idc tbh, its just label, doesnt effect anything

turbid tiger
#

This isn't working as I expected, and as much as I would like to figure it out myself again, I'm running out of time for today.
So, I'm trying to create a Joker which has a 1 in 2 chance to retrigger cards with enhancements, and I've kind of mashed together code from a bunch of different cards to try and do it, bloodstone, vampire, cavendish. I've never coded in lua, so, that definitely has something to do with my struggling right now.

#
    key = 'rewindjoker',
    loc_txt = {
        name = 'Rewind Joker',
        text = {

        }
    },
    rarity = 3,
    cost = 10,
    atlas = 'Jokers',
    pos = { x = 0, y = 0 },
    blueprint_compat = true,
    perishable_compat = true,
    eternal_compat = true,
    config = { extra = { repetitions = 1, odds = 2 } },
    loc_vars = function(self, info_queue, card)
        local numerator, denominator = SMODS.get_probability_vars(card, 1, card.ability.extra.odds)
        return { vars = { numerator, denominator, card.ability.extra.odds } }
    end,
calculate = function(self, card, context)
    if context.individual and context.cardarea == G.play and context.repetition and not scored_card.debuff and not context.repetition_only and SMODS.pseudorandom_probability(card, 1, card.ability.extra.odds) then
        if next(SMODS.get_enhancements(scored_card)) then
            return {
                message = "Rewind!",
                repeitions = card.ability.extra.repetitions
            }
            end
        end
    end
}
daring fern
maiden phoenix
gilded blaze
#

this is all you need

maiden phoenix
gilded blaze
#

💀

#

I copy-pasted from the original snippet above tho

maiden phoenix
#

Oh lmao sorry

turbid tiger
#

Interesting.

#

Well, thanks for the help everyone, I appreciate it. I'm honestly just surprised I made it this far without asking for help until now.

gilded blaze
#

looking at how vanilla jokers work is also a way of learning

maiden phoenix
#

Yea getting the jist of it so far without help is impressive

turbid tiger
#

Yes. I've just been staring at Joker code for the past three hours or so? I've also been searching up issues that other people might have had to go through as well.

gilded blaze
turbid tiger
maiden phoenix
turbid tiger
#

Alright so, I tried it out - It doesn't seem to retrigger.

#

I mean it plays the card without crashing now, so it's definitely a step up.

gilded blaze
#

Ik it because I have a similar seal

maiden phoenix
#

Did you put the probability to 1 to 1 to test it out?

gilded blaze
#

Ig this alone explains everything

turbid tiger
#

and a bunch of chads.

maiden phoenix
#

oh

turbid tiger
#

That's way smarter, though. I probably should have done that.

red flower
#

i changed blue seal recently does that work correctly

gilded blaze
red flower
#

yes

gilded blaze
#

alr then

turbid tiger
red flower
#

new as in new in that code not new in smods at least

gilded blaze
#

oh I see

red flower
#

it's just not documented 🤷

gilded blaze
#

wtf

#

oh well

#

if my hook to Card:get_end_of_round_effect still works, why not leave it be

#

nvm I take it back

#

better coding practice to change it right away

dapper sun
hushed field
#

Oh, sorry, I must've read over your reply!

#

So why do you want the values to be different from the joker that is being referenced?

dapper sun
#

as it's meant to be a preview for an upgrade system i'm implementing, which also has the ability to have modified config values to the default

#

hold on lemme record an example rq

hushed field
#

Ah, so the values in the info_queue would be dependant on the Sophie joker's values?

dapper sun
#

yes

#

but also kinda no

primal terrace
dapper sun
hushed field
#

I don't know how I'd suggest setting up the info_queue directly, besides just using a dummy one, so at best I could suggest a work around

dapper sun
#

that's why i'm having a problem 😭

red flower
#

are those values you want in the config global?

dapper sun
#

oh yea

red flower
#

you could check card.fake_card in the other card's loc_vars and make it use those globals when it's in an info_queue

robust marsh
#

N i have a question

red flower
#

hi

dapper sun
#

well

robust marsh
#

ello, i uhh wanted to ask is there a way to turn a slider into a bar that would act as a display for data instead of something that sets said data.

dapper sun
#

i already make a proper context table with the modified entries in the patch

#

i just need to use thoes modified values in the loc_vars

#

and no matter what i put in the info queue entry i can't get it to be used

red flower
dapper sun
#

i think they mean that they want a slider to also read the value instead of just writing it

hushed field
#

the localization functionality has a loooot of hardcoded stuff, so there's a lot of things going on that make you think you might be able to change certain values, but it not working that way

red flower
#

oh i never used sliders

robust marsh
#

ah..

dapper sun
#

i've seen smods documentation suggest duck typing

#

i've tried doing that but am still struggling

hushed field
#

In this case, at least as a temporary solve, I'd use a dummy entry that just copies the display and displays what you need the value to be

red flower
dapper sun
#

ah ok

#

card.fake_card?

red flower
#

that's set when smods creates a fake card to get the config values for the info_queue

dapper sun
#

ah

#

so what do i do with that?

red flower
#

if it's a fake card return the globals as vars

dapper sun
#

i think you've misunderstood what my problem is

#

or i've misunderstood what you're telling me 😭

red flower
#

the problem is that you want the tooltip for your card to show custom values instead of the default ones?

dapper sun
#

i want it to show custom values instead of nil

red flower
#

well, it's nil because you are passing the key and set instead of the center