#💻・modding-dev

1 messages · Page 137 of 1

faint yacht
#

Try return #G.playing_cards > 0 and #G.playing_cards*2 directly?

nova finch
#

just replace everything in calc_dollar_bonus with that? because if that's what you mean that didn't seem to work

#

it's the same crash mesage

faint yacht
#

Weird then for sure.

onyx inlet
#

Is the state of the deck available at money calculation time?

#

I’m just wondering if you might have to have your joker check the number of remaining cards at the end of each hand and then use that number at money time.

sick sparrow
#

nah, i put variant to same thing

    add_to_deck = function(self, card, from_debuff)
        if (not from_debuff) and math.random() >= 2/5 then
            card.ability.extra.variant = tostring(math.random(1,#bamtris_variants))
        end
    end,
    loc_vars = function(self, info_queue, card)
        info_queue[#info_queue + 1] = { key = "j_gerioc2_monomino", set = "Joker", vars = {} }
        if card.ability.extra.variant and bamtris_variants[tonumber(card.ability.extra.variant)] then
            info_queue[#info_queue + 1] = { key = bamtris_variants[tonumber(card.ability.extra.variant)][1], set = "Bamtris_Variant", vars = {} }
        end
        return { vars = { card.ability.extra.remain, localize{type="name_text", key = "j_gerioc2_monomino", set = "Joker"} } }
    end,
    update = function(self, card, dt)
        if card.ability.extra.variant and bamtris_variants[tonumber(card.ability.extra.variant)] then
            card.children.center.atlas = G.ASSET_ATLAS[bamtris_variants[tonumber(card.ability.extra.variant)][2]]
            card.children.center:set_sprite_pos(bamtris_variants[tonumber(card.ability.extra.variant)][3])
        end
        card.ability.extra.remain = math.floor(card.ability.extra.remain+0.5) --for the case where the number isn't integer
    end,
proper relic
#

I'm being stupid, where is base chips and mult stored when a hand is first played?

misty cape
#

so do you mean that I coud use cards_1 as the Neon key instead? or what other keys would I use? Sorry I'm still learning the basics lol. Still can't even get the options in my config to stay toggled on when i reload let alone making the option work lol. unless they just wont stay toggled if the code doesn't work...

faint yacht
nova finch
proper relic
ionic verge
#

Michael jackson song

nova finch
ionic verge
#

right, thanks

sick sparrow
#

and those variants are independant of balatro seeds, they are completely random

tight thistle
#

hello, i have a question, how do i loop a played hand to check for something? i was told to do so by someone in order to get my joker's effect working

misty cape
#

I also know that Balustro for example changes the Jokers right away, but there is also a toggleable option for using the NSFW Jokers that is applied through the config. However, combing through every lua in the mod, I can't find where it tells the game to use the "base" Balustro Jokers. I found the code for switching to the nsfw ones(BalustroJokers2.png) in the ui.lua but no mention of the BalustroJokers.png throughout the lua files. So not sure at all how that is implemented or I would use that for mine.

onyx inlet
hushed briar
#

how might i check the current score and score requirements of a blind, or otherwise check if a hand did not beat the blind?

ionic verge
#

would this loop through all jokers in your joker slots?

proper relic
#

Is it possible to see what a hands base values would have been when a hand is discarded?

sick sparrow
#

how to add cardarea to ui?

nova finch
#

how do i make a joker work like baseball card? i have something that sorata works but it also triggers when any joker of the rarity triggers instead of just triggering after everything is scored

vagrant cedar
faint yacht
#

Didn't I mention the Simplified Joker yesterday?

if context.other_joker and context.other_joker.config.center.rarity == 1 and context.other_joker.ability.set == "Joker" then
proper relic
vagrant cedar
nova finch
faint yacht
nova finch
vagrant cedar
nova finch
vagrant cedar
#

mine just give chips depending on the year they came out

#

But they play the music

nova finch
#

all of my jokers have unique actions

faint yacht
nova finch
#

i found something strange though

#

it only happens when it's set to a custom rarity

#

as soon as i switch it back to one of the vanilla rarities it works completely fine

misty cape
#

Any ideas as to why options in my config won't stay on after reloading?

glacial zinc
sick sparrow
#

how to create custom_collection_tabs?

ionic verge
#

when v gets assigned to a thing in G.jokers.cards, what gets assigned? the name? something else?

runic pecan
merry raven
#

engine/sprite.lua:109: Shader uniform 'voronoi' does not exist.
A common error is to define but not use the variable.

Did I somehow import my shader incorrectly? I'm still getting this error, even with or without adding my mod's prefix to my SMODS.Edition's shader

I imported voronoi.lua in main with assert(SMODS.load_file("data/editions/voronoi.lua"))()

ionic verge
runic pecan
ionic verge
#

cool

flat ridge
#

Does anyone have any idea on how to localize a language through steamodded or lovely?

ionic verge
#

i think i need to store the whole joker object, if i were to do that, would this if statement be able to call its name? (presuming i is the index of any joker in the array)

#

or would i put .name before [i]

#

so .name after the [i]?

#

cool

versed swan
#

What is the context for entering the shop? Or (how) can a Joker detect when you enter the shop?

ancient ore
#

what do wrong

ancient ore
runic pecan
versed swan
#

ooh, okay, thank you

ancient ore
#

wait pause is "is_ace" not it

ionic verge
#

is there a way to tell if a joker is incompatible with blueprint? like a way to check if it is?

#

how about i say what my joker does

runic pecan
ancient ore
#

If you mean in practice, i think you gotta just spawn both jokers and hope it doesnt crash

ionic verge
#

chooses a random joker each round, and copies it
cannot choose itself, brainstorm/blueprint, or any blueprint incompatible joker

#

so i need to find a way to find those incompatible jokers

ancient ore
#

Ohh

#

The Balatro Wiki has a list im pretty sure

#

dang thats more than I thought

ionic verge
#

well i want to work with other joker mods

ancient ore
#

Ohh true

flat ridge
ionic verge
#

yeah i was gonna look into it

#

i just wanted the full problem stated

ancient ore
#

He was humoring my useless information

ionic verge
#

in case that answer would change if the whole problem was known

#

so can i call this like yadayada.jokerStorage[].blueprint_compat and itll tell me if its true or false?

#

like could i do this?

#

wait

#

like this?

runic pecan
#

Instead of bool_var == false,
why not not bool_var?

ionic verge
#

wasnt sure at first if or statements would mess that up

#

but thinking about it it shouldnt

#

i can only presume this works just fine?

flat ridge
ionic verge
#

blueprint leads to ambiguity

#

say you have two blueprints and they copy two different things

#

how do you know which joker my guy is copying?

#

and yeah brainstorm is fine, doesnt need to be there

flat ridge
#

why does that matter to the player?

ionic verge
#

just feels more fitting

ionic verge
#

by hovering over its desc

flat ridge
#

ah, gotcha. I figured it worked like blueprint where it calcs once you play hand

ionic verge
#

it sets it at the start of round

proper relic
#

I just wanted to show off the abomination of a solution I found to my issue. "If it works it works"

flat ridge
#

oh your using joker storage, I missed that

ionic verge
#

that way it can trigger with just about every relevant joker it can, including perkeo because it wont reset until the next round start

#

this is all happening during context.setting_blind

#

also quick sanity check, would a 'copy random joker each round' work as an uncommon, or should just cheap rare be better?

ancient ore
versed swan
faint yacht
ionic verge
runic pecan
ancient ore
#

my fault

#

how do you format code on discord

faint yacht
#

```lua
code

ancient ore
#
        if context.discard and not context.other_card.debuff and context.other_card:is_face() then
            return {
                dollars = card.ability.extra.money,
                colour = G.C.MONEY,
                card = card
            }
        end
    end,```
#

A

flat ridge
#

yeah that

ancient ore
#

Thanks

runic pecan
ionic verge
#

before i bury myself, inputting nil into this if statement wont cause a crash, right?

#

or any problems for that matter

ancient ore
#

what is it asking for inside those parentheses

ionic verge
#

can i check for nil like 'if variable == nil' ?

runic pecan
#

maybe
I've never tried that

flat ridge
#

Im pretty sure not would be easier

near laurel
#

uhhh is this the channel to throw crash reports? I'm having issues with cryptid

ionic verge
#

like variable not nil?

flat ridge
#

not variable, but thats banking on the existence

#

it depends on your use case

ionic verge
runic pecan
near laurel
#

oh i see

ionic verge
#

oh yeah it does, right

runic pecan
ionic verge
#

what im trying to do is remove any incompatible jokers in my list by replacing them with the joker in front of them (and then that joker in front of them, etc until it hits the end of the array) but thatll introduce a nil value at the end when something gets replaced, so im wondering if things will break when it reads a nil value

ancient ore
#

what am i supposed to be putting in those parentheses

#

Like generally not specifically here

#

Teach me to fish

orchid thunder
#

Anyone know why this is crashing im trying t9 help this person

runic pecan
flat ridge
ionic verge
#

card.lua?

flat ridge
ionic verge
#

is this it?

flat ridge
#

yes

ionic verge
#

so its checking for...
if the blueprint card is greater than the length of G.jokers.cards (i.e. jokers in posession) plus one? aint that a little too late?

flat ridge
#

well you have to change blueprint to your context

ionic verge
#

or is it checking if the target of the blueprint

flat ridge
#

so youre checking the next card in the index, +1 every loop

#

this checks if the +1 puts you outside the index

#

if so then dont do anything

ionic verge
#

mhm

#

adding this i think should work

#

if i is greater than the length of the array, skip the whole rest of the if statement, preventing any of the other guys trying to read nil

runic pecan
#

I've been coding for this joker for the past two days yet still not getting the visual and effect I want.
I'm leaning to compromise by changing the pick & paint mechanic to a form that is easier to code.
Any suggestions?
("copy one and then paste on the other" part must stay)

runic pecan
ionic verge
#

ye

#

the current mess

runic pecan
ionic verge
#

because it can shrink

#

but to my knowledge the for loop's size wont shrink with it

runic pecan
#

Can I see your joker's config?

ionic verge
#

(this loop will have the array shrink by moving all indexes [i] and rightward to the left one, eventually causing the last one to get replaced with nil)

runic pecan
#

Is jokerStorage... the jokers in the joker slot?

glacial zinc
#

for some reason none of my variables in config are applying when i try to add an edition? to clarify im using talisman but even with it disabled it still doesnt work

queen crescent
ionic verge
#

(or would cause ambiguity problems)

runic pecan
ionic verge
#

and then ill use a random number to select one of the remaining ones to get rerolled

ionic verge
#

like thats required

#

i dont want the guy im making to choose a joker that doesnt do anything when copied

#

so i need to make a culled list for it to choose from

runic pecan
#

just local copied_joker = {} while not copied_joker.blueprint_compat do [randomly choose another i] copied_joker = G.jokers[i] end

ionic verge
#

and presumably also not [the other guys ive stated]

#

blueprint for ambiguity reasons, mimic joker (the joker im coding) for looping reasons, and brainstorm just because it feels fitting not being able to be copied

ionic verge
#

also is it ...this to do the code blocks?...

#

no

runic pecan
ionic verge
#

oh

queen crescent
ionic verge
#

that
is kinda easy huh

versed swan
# versed swan oh, i guess i should be asking how to detect loading of items in shop

I just went ahead and injected a custom Joker context that is sent to Jokers after the shop loads its Jokers, vouchers, and booster packs (function Game:update_shop(dt)):

#Add new Joker context: tiwmig_load_shop, primarily used by Generic Brand Joker
[[patches]]
[patches.pattern]
target = "game.lua"
pattern = '''
                                end

                                G.CONTROLLER:snap_to({node = G.shop:get_UIE_by_ID('next_round_button')})
'''
position = "before"
payload = '''
for i = 1, #G.jokers.cards do
    G.jokers.cards[i]:calculate_joker({tiwmig_load_shop = true})
end
'''
match_indent = true
ionic verge
#

cus if so nice

versed swan
ionic verge
#

nice

versed swan
#

it specifically has to be 30% or the joke won't work

runic pecan
# ionic verge that is kinda easy huh

There's one time I looked into the math.random_integer() source code in python, and it basically does:

  1. how many digits in binary is the given cap?
  2. generate as many random 0 or 1 as the digits from step 1
  3. if the number from step 2 is bigger than cap, back to step 2, else return the generated number
ionic verge
#

i presume that pseudorandom() creates a float between 0 and 1?

#

ok

versed swan
ionic verge
#

niiice

runic pecan
versed swan
#

I was just kidding, the joke is that it's been reported a couple of times now that No Name products are around 30% cheaper than branded versions of the same products

#

(No Name is a Canadian generic brand)

queen crescent
# orchid thunder

already tried the following:

  • get rid of the pools local, game references it anyway
  • assign the joker to a preset rarity (common in this case), boots up fine (desired effect is to use the custom rarity)
ionic verge
#

so this will...
create a nil value in copied_joker
send that to the while loop
select a random jonkler
if that jonkler isnt bluecompat, do it again, repeat until yes?

#

whats with the empty array anyways?

runic pecan
ionic verge
#

fair

#

does it need to be empty?

#

i guess thats the part im hung up on

runic pecan
ionic verge
#

mhm

#

if its empty will .blueprint_compat just return false?

runic pecan
ionic verge
#

sending it into the loop?

ionic verge
#

cus it starts at index 1, right?

#

aint that the lua thing?

runic pecan
ionic verge
#

im confused
im trying to make the random number not roll zero, which it can if i divide that random number without adding one

#

if it chooses a number between zero and one, then gets multiplied by # jokers, it can be between 0 and # jokers -1

runic pecan
#

Then *(#G.jokers + 1) would be wrong.
My bad.

ionic verge
#

s'all good

misty cape
runic pecan
ionic verge
runic pecan
ionic verge
#

thanks

runic pecan
#

It's G.jokers.cards, not just G.jokers

random sleet
#

#G.jokers.cards not #G.joker.cards

#

copied_joker should also look at G.jokers.cards[random_index]

ionic verge
#

im tired im gonna finish this tommorow

#

good night yall

random sleet
#

gn!

ionic verge
#

thanks so much for the help

faint yacht
#

math.random isn't really recommended, as I've been told-

wispy rose
#

hey! i currently have my mod folder setup like this. i cannot seem to get this mod working, and couldnt get card sleeves either. do i have the setup done incorrectly?

limpid flint
runic pecan
#

Where do I look up the hexcode for the suits?
nvm, found it.

wispy rose
#

any idea on how to resolve this? it also happens to JokerSellValue. I tried placing js_utils (the API) in the mod folders and the main directory, but im still getting this error

stray warren
#

What version of Steamodded are you on? It looks old based on this log file

wispy rose
#

it may be. i just got r2modman to install it correctly, then moved it over to my base %appdata% files so it just launches when i open from steam

#

im on 0.9.8

shell timber
#

r2modman/thunderstore's version is really out of date

stray warren
#

Yeah, I think r2modman downloads from the releaees

wispy rose
stray warren
#

You need to get it from the green CODE Button on the main repo

wispy rose
#

this version correct?

stray warren
#

Yup

wispy rose
#

yay

#

ill try the mods again

#

looks good

#

ty!!!

candid epoch
#

oke, so 1/8 consumables done
all i need to know now is how to make:
cards gain perma chips/mult/xmult
cards getting coppied/destroyed

plain wyvern
#

Can you have a modded suit only ever have certain ranks?

civic totem
#

ok so half way through the tutorial I had the random thought of trying to change the card sprites, but I'm not sure how to find where the sprites are stored (I assume in the exe), is there any good resources to look at for editing card sprites?

candid epoch
frosty dock
civic totem
#

thank you!

violet void
#

Would you guys consider this too broken? (1 in 5 originally)

civic totem
#

no

candid epoch
#

not too broken
but i dunno why you need the grey lines

civic totem
#

remove the limit (don't actually take my advice I just beat tutorial)

crisp coral
candid epoch
violet void
#

I accept rarity suggestions too its fine

crisp coral
#

even not considering rarity this is. 3 retrigs a bit over 50% of the time

violet void
#

50% of the time?

candid epoch
#

4 in 5 is 80% of the time

crisp coral
#

oh wait you have two dice

#

LMAO

violet void
#

Yes sorry ç-ç

candid epoch
#

oh yeah, then it would be 2 in 5

crisp coral
#

if so 1 in 5 is fine imo

candid epoch
#

40%

candid epoch
violet void
#

I don't understand which grey lines you're referring to at all

candid epoch
#

the {C:inactive}

#

luck altering jokers affect first retrigger only

violet void
#

If you have 2 dice it would give 3 retriggers too consistently

candid epoch
#

well, you dont need to have it
i think its obvious it would only alter its probability to triggering

violet void
#

Only the first 1 in 5 will be altered, the second and third retrigger will remain 1 in 5 regardless

candid epoch
#

also, where is anything about
highlighted:
in steammodded wiki?

violet void
#

Check Hiker's code

#

for this

cards gain perma chips/mult/xmult

candid epoch
#

oke, i got the destroying card code, so i have 2/8 consumables done

#

do i need all this shit? 😭

#

how do you "add to hand"

zealous glen
candid epoch
zealous glen
#

Not without work anyways

zealous glen
#

The rest don’t

candid epoch
#

so... my mod is a failure?

zealous glen
#

I don’t know what that means

#

I’m just saying it needs work to make it function

#

Elial and Autumn have their own implementation of it

tall wharf
#

i think there's a function called emplace

zealous glen
#

I was talking to Lars to add to Steamodded

zealous glen
candid epoch
#

so xmult and mult cant be bonus added to a card?

#

guess i have to rethink my mod

tall wharf
#

i mean

#

no one is stopping you from adding custom bonuses

candid epoch
#

if i knew how

#

its my first mod that isnt a texture pack

violet void
#

If you really wanted to, anyways

violet void
candid epoch
#

if i had logic in my brain first lmao

zealous glen
#

I was just saying you can’t just look at Hiker and do it for Mult and xMult

zealous glen
#

the people yearn for the mult hiker

violet void
tepid crow
long sun
#

thoughts on this ability?
Goldor (Legendary): Played Gold cards each give X3 Mult when scored

#

i'm unsure about the number, because it's more inconsistent to get a deck of Gold cards than it is to get a deck of Kings

violet void
long sun
#

is that positive or negative? :D

violet void
#

Depends if you're aiming for a balanced mod

long sun
#

i am aiming for that

#

thinking over it, i'm gonna change it to X2

#

ooh maybe i could also give $1, to make making Gold cards slightly easier :D

violet void
#

I feel thats better too, Midas Mask turns face cards into gold and with Pareidolia you can abuse it a lot, but that's 2 specific cards so...

long sun
#

fair!

runic pecan
long sun
#

it is a legendary, though

runic pecan
#

touche

long sun
#

1.75?

night pagoda
#

Is it possible to have enhancement score after the effect of the seal? Using context.cardarea == G.play and context.main_scoring and not context.repetition, but noticed that the red seal happens after my custom effect happens, and wondering if it's possible to time it differently

haughty kiln
# long sun 1.75?

I think x2 or x2.5 is fine. Compare it to Triboulet; I think it's much easier to fill your deck with face cards rather than gold cards, so 2-2.5x mult isn't too crazy imo

runic pecan
long sun
#

quick code question! how would i go about returning both Xmult and money? (i'm guessing with events, though i'm unclear on how)

if context.individual and context.cardarea = G.play and context.other_card.ability.name == 'Gold Card' then
        G.GAME.dollar_buffer = (G.GAME.dollar_buffer or 0) + self.ability.extra
        G.E_MANAGER:add_event(Event({func = (function() G.GAME.dollar_buffer = 0; return true end)}))
        return {
            dollars = self.ability.extra,
            card = self
        }
    
        return {
            x_mult = self.ability.extra,
            colour = G.C.RED,
            card = self
        }
        
    end```
#

also ignore the broken code in the returns ^^

runic pecan
#

I'd suggest

    dollars = self.ability.extra.dollars,
    x_mult = self.ability.extra.xmult,
    colour = G.C.RED,
    card = self
}```
haughty kiln
#

anybody got any recommendations for lua learning resources in order to create balatro mods?

long sun
#

ah kay, thanks! :D

runic pecan
runic pecan
haughty kiln
#

I didn't know if there were any guides tailored toward balatro (I haven't found any). I have some basic knowledge of C/C++ and Python. Perhaps there is a more general lua guide that I can use to better understand the syntax?

faint yacht
haughty kiln
#

Thanks all! ❤️

zealous glen
#

Check the Your First Joker(? Mod?) part

#

do any mods use the quantum Enhancement tech already

night pagoda
#

Is there a context for retriggers? context.repetition seems to be always false even after red seal

long sun
#

had another idea!
Famalia (Legendary): When Blind is selected, create a copy of The Familiar (Must have room)

haughty kiln
long sun
#

mhm, that card :D

#

since it creates the card when the Blind is selected, it lets you forge a Five of a Kind or similar

haughty kiln
#

maybe it could create a small spectral pack on blind select?

long sun
#

myeh, then it's not The Familiar ^^

night pagoda
long sun
#

butttt, maybe something to do with face cards?

#

ooh idea

haughty kiln
wintry solar
#

Should be context.repetition

night pagoda
#

always false here

#

even after red seal

long sun
#

All played face cards become Polychrome when played and scored

#

which now strikes me as a worse Trib

zealous glen
#

Isn't repetition before and separate from main_scoring?

long sun
#

unless Paradolia?

violet void
haughty kiln
#

jinx

long sun
#

aha, great minds think alike :}

wintry solar
#

Yeah, main scoring is different to repetition

long sun
#

i'll have a think about it in my next lecture

#

cheerio!

night pagoda
#

Anything I can do here?

zealous glen
#

Not check for main_scoring?

wintry solar
#

What are you trying to do?

zealous glen
#

I don't think there's a way to tell a scoring was due to repetition it if it was natural

night pagoda
#

I have an enhancement that adds it's own retriggers (using manual card evaluation), but I don't want it to be retriggered by the red seal

zealous glen
#

I'd have thought that retriggers don't retrigger retriggers

wintry solar
#

They don’t

violet void
wintry solar
#

Without seeing how firch is applying the repetitions it’s hard to recommend something

night pagoda
#

the retrigger doesn't happen on the same card that is triggered so I use that

#

this is basically piece of another code modified to work as a function

wintry solar
#

So you want the enhancement to rescore another card but not add multiple rescores?

night pagoda
#

The enhancement needs to rescore some cards but always do it fixed amount of times, without being affected by the external retriggers

wintry solar
#

Can’t you just remove the repetition calculations in your rescore function then?

night pagoda
#

If I rescore the card it still should be retriggered by the red seal, it's just it shouldn't apply it's enhancement effect anymore

wintry solar
#

Oh right I get it

night pagoda
wintry solar
#

Set a flag the first time it scores and check for the flags presence

#

Then reset the flag in end of round

night pagoda
#

For the card? I pass an additional context for if the enhancement scored already and check for that

#

Or you mean to the card itself?

sick sparrow
#

Enhancement is just a center in disguise

#

so, anyone made a joker 4 of hearts?

quick patrol
#

So I’m trying to make the mult hiker and I have the effect functional (as in each card is gaining its appropriate amount of mult and maintaining that across iterations) but how do you change the playing card tooltip to show the extra mult? Like I don’t even know where that’s initialized at in the base game code to start so much as tinkering with.

frosty dock
night pagoda
#

awesome! Will it be possible to pass additional contexts?

worthy stirrup
#

How do i play a hand, i see G.play but im sure thats most likely not all thats needed

sick sparrow
#

so look at my hands, what do you see?

frosty dock
sick sparrow
#

so you can put enhancements into G.Jokers or G.Consumeables

worthy stirrup
#

i feel like im doing it wrong

night pagoda
night pagoda
long sun
#

how does this ability sound?
Famalia (Legendary): When Blind is selected, add a King with a Purple Seal to your hand

zealous glen
frosty dock
frosty dock
zealous glen
#

Does it do the entire evaluate_play sequence or just the scoring part?

frosty dock
#

it just scores each card in the scoring hand or card area with the given context

#

which amounts to some debuff checks in the G.play case as well as calling score_card on each card

dusk garnet
#

asking this again

#

can't seem to figure it out

sick sparrow
frosty dock
frosty dock
dusk garnet
#

so would i then insert a calculation after this code

for i = 1, #G.GAME.tags do
                                            G.GAME.tags[i]:apply_to_run({type = 'shop_final_pass'})
                                        end
runic pecan
sick sparrow
dusk garnet
frosty dock
frosty dock
dusk garnet
sick sparrow
candid epoch
#

man... why i cant think of a good concept for a mod

dusk garnet
#

ahh i foudn it

#

searched through smods for it

#

it's a regex match unfortunately but it'll do for now ig

candid epoch
#

guys, you got any ideas what i can try to make for a mod?

violet void
#

Not sure about legendary-like tho

long sun
#

fair ^^

#

ooh to fit with the vibe, what if they have editions?

violet void
#

Although maybe it is already good enough, eventually you end up with lots of kings and cool tarots

weary jungle
#

auto poly glass generator

#

🔥

long sun
#

fair! okay, i'll test it as it is now, and let you know how i feel

weary jungle
#

i have to do localizations now

#

like 20 things

#

ugh

sand oasis
#

Anyone know where the code for The Tower tarot is stored? I'm not finding it anywhere

#

someone said tarots were handled in card.lua but searching for "tower" nets me nothing

merry raven
#

How do you guys do round-changing messages like this Joker here?

weary jungle
#

localization

long sun
#

can't find this elsewhere, but how do i create a card with an edition?

weary jungle
#

probably create_card

weary jungle
#
"this is a #1#"

in the joker
loc_vars = function(self, info_queue, card)
    return {vars = {variable that changes}}
end,
night pagoda
#

Is it possible to apply enhancement effects after retriggers caused by the red seal (or after every other effect individual card could have)? I tried putting enhancement evaluation for my enhancement after the seal evaluation in the eval_card(), but it seems like retriggers still happen after the enhancement effect

sand oasis
upper fern
#

Would anyone happen to have an example of how to use calculate_effect in practice?

candid epoch
sand oasis
#

whoops!

candid epoch
#

6 months old atleast

sand oasis
#

YOWZA

candid epoch
#

i learned that the hardway

#

while trying to make seal consumable

crisp coral
#

examplejokers isn't that outdated

#

it's just not updated for bettercalc yet

#

you might be referring to the documentation?

candid epoch
#

nah, examples

merry raven
#

What's the context for checking what hand type is played?

#

is it next(context.poker_hands["Hand Type"]))?

candid epoch
#

bump for @crisp coral

weary jungle
merry raven
#

Nope I just dug through the source code more, it indeed is context.poker_hands

(next(context.poker_hands['Two Pair'])

candid epoch
#

TGTM, you one of people that helped me most of the mod
do you have ideas what to make? cuz potions kinda failed

crisp coral
candid epoch
#

ah, mb then

runic pecan
#

[Asking for help]
Just found out a patch I made awhile ago is, in fact, not working at all.

#

It's meant to replace this

weary jungle
candid epoch
#

how do some people make custom slot in cards?
(like someone made gemstone slots)

candid epoch
weary jungle
#

its a learning experience

candid epoch
#

atleast i done the destroying card consumable without needing help ironicly

weary jungle
#

This a good learning experience for patches!! Everyone loves patches!!!

wicked leaf
#

new suit of playing cards for my mod

candid epoch
#

i dont know how to even do patches, and i am scared to try

candid epoch
wicked leaf
#

yep

violet void
candid epoch
#

i dont know
i am scared of hours of learning just to make one thing

violet void
#

Fair enough

runic pecan
candid epoch
runic pecan
quick patrol
violet void
#

So you have a lot of liberty

elder vapor
#

in a few lovely patches

candid epoch
#

whats the thing about x_mult and h_x_mult?

crisp coral
#

latter triggers in hand

elder vapor
#

x mult (when played)
h x mult (when held)

#

h_x_mult is what steel card uses

violet void
elder vapor
#

p_dollars is played dollars

#

like gold seal

candid epoch
#

and how you specify normal mult and multiplayer mult?

elder vapor
#

x_mult and mult iirc

#

perma mult isn't in the game but it can be added by a few lovely patches

candid epoch
#

could i... um... "borrow" that patch?

long sun
#

okay so i've tested Famalia as it is, and it's too weak

#

so i'd like to give the new kings editions

#

i'm using this line to create my cards:
local _card = create_playing_card({front = G.P_CARDS[_suit..'_K'], center = G.P_CENTERS.c_base}, G.hand, nil, nil, {G.C.SECONDARY_SET.Enhanced})

#

but, how do i add editions?

crisp coral
#

card:set_edition('edition_key')

elder vapor
# candid epoch could i... um... "borrow" that patch?
[manifest]
version = "1.0.0"
dump_lua = true
priority = 1

# Add permanent boosts
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = 'perma_bonus = self.ability and self.ability.perma_bonus or 0,'
position = "after"
payload = '''
perma_mult = self.ability and self.ability.perma_mult or 0,
'''
match_indent = true

# Fix mult
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = "return self.ability.mult"
position = "at"
payload = "return self.ability.mult + (self.ability.perma_mult or 0)"
match_indent = true
candid epoch
#

oke, so how do i apply this to the mod?

elder vapor
#

either create a lovely.toml file in your mod directory or make a .toml file inside YourMod/lovely

long sun
#

ah, cheers :D

candid epoch
#

like dis?

long sun
#

what are the edition keys?

elder vapor
#

if you want to apply the perma mult do card.ability.perma_mult = (card.ability.perma_mult or 0) + mod

elder vapor
#

for displaying the perma mult in a ui... idk lol

candid epoch
#

i think i can use the mod for hidden values

elder vapor
#

true

candid epoch
#

so this theoricly will work?

crisp coral
#

three million config variables be upon ye

wintry solar
#

Learn to count myst thats only 9 🙃

crisp coral
#

98% of balatro devs can't count

frosty dock
#

I'm the other 3%

elder vapor
frosty dock
#

and yes that's a rounding error

elder vapor
#

oh i noticed you're applying the mult to card and not _card

#

or highlighted

#

whichever one you're using

candid epoch
#

its a consumable, so what to do?

elder vapor
#

everything looks right

#

just apply the mult to the highlighted card

candid epoch
#

and also, how to make highlighted 2 or less but not 0?

crisp coral
frosty dock
#

no u

candid epoch
elder vapor
elder vapor
#

also you don't need the highlighted local var since _card is the exact same thing

candid epoch
#

oke so it works
but the hidden card display mod doesnt

weary jungle
candid epoch
elder vapor
#

perma_chips

tepid crow
wintry solar
#

Are you still implementing it lars?

tepid crow
#

yeah me and victin were discussing what bonusses we wanted and what order we would apply them in

#

this is what we settled on

For jokers: Chips, Mult, xMult, end of round Dollars
For playing cards: Chips, Mult, xMult, Dollars, on held Chips, on held Mult, on held xMult, and end of round Dollars

For jokers perma-bonusses work in the order:
perma-chips -> perma-mult -> foil/holo -> joker_main -> perma-xmult -> polychrome

For playing cards perma-bonusses work in the order:
when scored: base effect + perma-bonusses -> enhancements -> seals -> editions
when held: perma-bonusses -> steel card -> [etc]

candid epoch
elder vapor
#

(also still asking for base xchips compat so i don't have to require talisman 🙏)

candid epoch
#

i love how at 8.12.2024 it been called useless
but now at 16.1.2025 its said that it kinda be awesome

tepid crow
candid epoch
#

it dont work, it only scores the base

#

_card.ability.perma_chips = (_card.ability.perma_chips or 0) + 12

zealous glen
candid epoch
#

i also have no clue why card value displays dont work for me

tepid crow
zealous glen
candid epoch
#

oh @elder vapor, the thingy you gave me has nothing about chips

weary jungle
#

perma chips are in base game

#

right

tepid crow
#

yea

tepid crow
#

oop

candid epoch
#

oop

#

oke now it works

#

now i need to figure out why card value display dont work

wintry solar
tepid crow
#

should be yeah

candid epoch
#

can a basic card have floating thingy like soul spectral card or legendary joker?

zealous glen
#

ish

tepid crow
#

probably, but you might need to put some work in yourself

candid epoch
zealous glen
#

technically every playing card does

#

except Stone

vagrant cedar
#

Is there something I can change to this to make the UIBox happen when scoring starts? Not after scoring, but directly as scoring starts

#

Instead of when entering a blind

#

Would it just be changing if context.setting_blind to if context.before ?

weary jungle
#

i have done localization hopefully probably

storm kraken
#

does anybody have any idea how to make music only play when you have a specific joker? (or with any conditional at this point)

candid epoch
#

people make specific music play on specific boss blinds

vagrant cedar
storm kraken
#

cryptid is cryptid

#

😭

vagrant cedar
#

Jimball is a little confusing but I just made some yesterday

#

So yes

#

I got you

zealous glen
#

some jimballs made by buddy

crisp coral
#

next(SMODS.find_card(key)) in your select_music_track

vagrant cedar
# storm kraken doesnt work

SMODS.Sound({
key = "music_1",
path = "1.ogg",
sync = false,
pitch = 1,
select_music_track = function()
return next(SMODS.find_card("j_MUSC_davidbyrne")) and 1.57e308
end,
})

#

Change MUSC to your prefix found in the json file, and the path to your filename

#

Make sure to change davidbyrne to the key of your specific Joker

#

That should work

storm kraken
#

i shall pay you nothing but my absolute gratitude

vagrant cedar
#

You put that after the Joker, not in it

storm kraken
#

it works yay

vagrant cedar
#

the 1.57e308 is how important it is to play first

weary jungle
#

oh yeah i forgot about colors

vagrant cedar
#

So if you have other jokers doing the same thing change their number at the end to change the order

crisp coral
#

mfw i am fighting against a boss blind with some epic theme and i pick up a jimball midblind

vagrant cedar
#

My music Jokers are better 😎

#

They play the full album of my top 4 albums

wicked leaf
#

can I somehow make a suit have only 3 ranks?

candid epoch
#

@elder vapor, how did you done new slots for stuff? (the gemstone thingy)

elder vapor
#

stickers

frosty dock
#

hey y'all where should card eval text for G.discard display? rn it's fully off the screen because... well, that's where the discard area is

elder vapor
#

they don't interfere with any other card modifier

weary jungle
#

we keeping it bare in here 🙏

frosty dock
#

it's kinda funny just having the screenshake without the message appearing

worthy stirrup
#

How do i play a hand, i see G.play but im sure thats most likely not all thats needed

weary jungle
wild patrol
#

how can I get this to say +2 Slots

elder vapor
#

i was gonna say under the disard button but that could look weird

zealous glen
candid epoch
#

and vice versa?

vagrant cedar
wild patrol
#

Joker

vagrant cedar
#

Also does it actually do it already

candid epoch
vagrant cedar
#

You just want the text to change?

#

@wild patrol

wild patrol
#

Yeah

#

I got the ability to work

elder vapor
wild patrol
#

I just can't figure this out

frosty dock
candid epoch
#

they dont?

elder vapor
#

which is why i use them

vagrant cedar
candid epoch
#

how the fu-

weary jungle
#

it was supposed to be 5$ per 20%

wild patrol
elder vapor
#

(vanilla can have eternal/perishale rental jokers)

zealous glen
wild patrol
#

far as I know

vagrant cedar
zealous glen
#

Maybe make it an invisible card where the deck and play area intersect?

candid epoch
elder vapor
#

but i had to code it so you can't have multiple gem slots lol

candid epoch
#

cuz per 20 looks like score

weary jungle
#

i forgot

zealous glen
#

you trace a line vertically from the deck

#

and one horizontally from the play area

#

and put it there

candid epoch
#

also, is there a way to make custom stone card?
(no suit or rank but has an effect)

frosty dock
#

hm that's not a bad idea

weary jungle
#

i might be ready to ship this off!!

candid epoch
#

that way i could do GemSteel cards

frosty dock
#

doesn't need an invisible card though

#

I can just align it above G.deck and use a vertical offset

wintry solar
#

Do ones on the deck display above the deck?

frosty dock
#

yes

worthy stirrup
#

How do i make it so I can forcefully play a hand with the code

wintry solar
#

Is there room below the deck in that case?

weary jungle
#

im so excited!! let me play a run with this

frosty dock
#

I don't think so ?

candid epoch
#

if people make suits for cards... is it possible to make null cards?
(rank exists but suit wont count to any flush or other stuff)

weary jungle
#

no_suit enhancement?

candid epoch
#

like, it can still be enchanted with other stuff

#

just as a suit for fun

frosty dock
#

you can hook Card:is_suit and have it return false for that suit (unless wild card or whatever)

elder vapor
#

could always hook the Card:is_suit function and return false

#

oh

wintry solar
#

I wonder if it would be worth displaying the discard area for this

elder vapor
elder vapor
candid epoch
#

i just will need to learn how

worthy stirrup
#

please, what code is ran when the Play Hand button is pressed

rapid trail
#

New to modding, I'm having difficulty finding where to start (even within the documentation) on creating a new joker. Specifically,

  1. Where do I place the new joker?
  2. How do I define the joker?
  3. How do I define the effects?
wintry solar
#

Let me find a ss to show how I see it

zealous glen
#

or the Steamodded override

zealous glen
weary jungle
#

hoopefully this isnt from me...

rapid trail
worthy stirrup
#

I would think evalute play would just find its score without truly playing it but idk tbh lol

rapid trail
#

Ah apologies, I foudn the example mods. That helps. Cheers!

wintry solar
#

Excuse terribly drawn image but I imagine like a randomly rotated pile of cards down here

#

It could go off the screen if needed

weary jungle
#

does this not work?

zealous glen
#

not on Steamodded anyways

#

What are those Zodiacs on the corner anyways

#

oh Ortalab temporary effectss?

worthy stirrup
#

Okay, how can i check if a hand has anything selected

zealous glen
#

at which moment

worthy stirrup
#

when a keybind is pressed

weary jungle
#

#G.hand.highlighted ~= 0 probably

worthy stirrup
#

as it crashes when nothing is selected and the player asks to discard somethign

elder vapor
ionic verge
#

does anyone know what version of lua balatro runs off of

zealous glen
ionic verge
#

because im trying to do floor division and its not liking that, and i know its a lua 5.3 feature

zealous glen
#

I know it's a version before they added Euclidean/floor division

ionic verge
#

damn

worthy stirrup
#

Should this code work or am i failing to check something or overlooking something

SMODS.Keybind{
  key = 'PlayCards',
  key_pressed = '-',

    action = function(self)
        if G.hand and #G.hand.highlighted ~= 0 and G.hand.discards_left ~= 0 then
        G.hand:discard_cards_from_highlighted()
    end
  end
}
candid epoch
#

what ya guys think?

ionic verge
zealous glen
ionic verge
elder vapor
ionic verge
#

thanks

wintry solar
worthy stirrup
ionic verge
#

so this should work for cutting of the decimal right?

ionic verge
#

cool thanks

zealous glen
ionic verge
#

is math avaliable to me?

#

wasnt sure

zealous glen
#

ye

#

you can see thunk uses it

elder vapor
#

gonna start work on an sts themed mod and try to add relics furiyippie

ionic verge
#

ok cool

#

so variable = math.floor(variable)?

candid epoch
#

actually, i think this looks better

zealous glen
#

I think that's a bit too busy

candid epoch
#

so i should go back to old one?

zealous glen
#

You can try something in-between

ionic verge
#

can while functions only take one condition or something?

tall wharf
#

@ionic verge

ionic verge
#

huh

#

what is it

tall wharf
#

you forgot logical operator

#

💀

ionic verge
#

...
gdi

tall wharf
#

The Graphics Device Interface (GDI) is a legacy component of Microsoft Windows responsible for representing graphical objects and transmitting them to output devices such as monitors and printers. It was superseded by DirectDraw API and later Direct2D API. Windows apps use Windows API to interact with GDI, for such tasks as drawing lines and cur...

zealous glen
#

they forgor

tall wharf
#

kirby and the forgor 💀 land

zealous glen
#

and here we are

zealous glen
candid epoch
ionic verge
#

game freeze
thats a first

zealous glen
#

when the Event doesn't return true

ionic verge
#

found out why

zealous glen
#

was it an Event

ionic verge
#

nope still freezes

ionic verge
wild patrol
#

I can not for the life of me to get the 4 to change to a 2 lmao

#

or get the multi to say slots

elder vapor
#

whats that one mod that adds a new card area

ionic verge
#

ok so
i am trying to select a random blueprint compatible (and also not a copy joker for a couple different reasons) joker at the start of a round, it however gets stuck in an infinite loop when i select blind

#

im trying to figure out why

candid epoch
#

i just got an idea for texture pack

zealous glen
zealous glen
#

so I'd build the list and select from it

ionic verge
#

i.e. use G.jokers?

zealous glen
#

no

#

are you selecting from the Jokers the player has?

ionic verge
#

yes

#

wait g.jokers.card right?

#

or whatever the fuck it is at this point

zealous glen
#

then iterate over G.jokers.cards to build a table with the Blueprint compatible Jokers

ionic verge
#

ok time to rewrite all my code for this again

#

gdi

tepid crow
#

anyone know why my lovely says this when the dump implies this steamodded patch succeeded? (all other mods except steamodded disabled)
WARN - [♥] Regex '(?<indent>[\\t ]*)if G\\.F_NO_ACHIEVEMENTS then return end\\n[\\s\\S][\\s\\S]{16}--\\|LOCAL SETTINGS FILE' on target 'functions/common_events.lua' resulted in no matches

tepid crow
zealous glen
ionic verge
#

got it

#

so like pseudorandom_element(my array)?

zealous glen
#

I don't remember

ionic verge
#

thanks

tepid crow
#

go to functions/misc_functions.lua:253 and you can see the function

ionic verge
#

thanks

#

i should probably just keep this lua file on hand lol

dry merlin
#

how do i add a description to a challenge with smods.challenge?

candid epoch
weary jungle
candid epoch
#

the empty space will be used to be able to tell what enchatment it has

tepid crow
#

challenges don't really have a description afaik

candid epoch
#

or i could do like this for better enchantment view

#

what you guys think? first one or second one design?

dry merlin
tepid crow
#

the custom rules?

zealous glen
#

I'm not sure any is clear

#

maybe try overlaying existing Enhancements

dry merlin
candid epoch
#

thats not the point of texture pack

dry merlin
candid epoch
#

plus, i cant overlay enchantments, they are BELOW the rank and suit

weary jungle
#

return G.hand and ((#G.hand.highlighted <= (TGTMConsumables.config.CursedRunes and card.ability.extra.CardAmt * 2) or card.ability.extra.CardAmt) and (#G.hand.highlighted ~= 0)) this is erroring, says its comparing boolean to number.

dry merlin
# dry merlin yes

i dont exactly mean how to add custom rules, i mean how to add text to the custom rules section

weary jungle
#

this is peak coding

tepid crow
dry merlin
#

i see now, it accepts challenge IDs and those IDs are what store the text

#

thanks

ionic verge
#

i think it works :]

weary jungle
#

im not sure why im erroring here, it seems like a smods issue but im not sure

#

is it due to new-calc

#

its probably because of new-calc

violet void
#

Try checking lovely dump

weary jungle
#

eits an error in steammodded

#

yeah its new calc

#

:(

ionic verge
#

ok how to i make a joker actually copy another joker once i have it's target

weary jungle
#

like duplicate?

ionic verge
#

i saw something about other_joker but do i need to assign it or something?

weary jungle
#

do a create_card

candid epoch
#

guys, any ideas for face cards?

ionic verge
weary jungle
#

look at blueprint

ionic verge
#

yeah i did, but i dont know if im missing steps

#

like i see this, but do i need to set up other_joker or something?

violet void
ionic verge
#

like all angles

violet void
#

Is it good?

ionic verge
#

very

#

$20 on steam or free on github with the caveat that you have to build it yourself

violet void
#

I went from GIMP to PixiEditor and now Aseprite, nice
-# Rip my layers...

ionic verge
violet void
#

Idk haven't made a blueprint-like joker yet

#

Cryptid has one you can check, possibly

ionic verge
#

mhm

candid epoch
#

could also do that ig

violet void
# candid epoch

It looks too similar to Ace imo, I would remove the middle gem

#

and add something else

wicked leaf
#

Heated card enhancement

candid epoch
#

then give the proposition thats steel/gem releated

wicked leaf
#

Givrs you a x2 mult, then unenhances itself

wicked leaf
#

how will it look with modded suits though

candid epoch
wicked leaf
#

yeah, but, are these like

#

enhancements?

candid epoch
#

nuh
just suits

wicked leaf
#

ah

candid epoch
#

i will show you later how they look like enchanted

candid epoch
ionic verge
#

theres like idk how many joker files in here

vagrant cedar
#

hey all

#

I've been trying to help @wild patrol

#

I got the Joker to work on my end

#

But he's still having trouble

violet void
ionic verge
#

its more like
which of these files is he in

vagrant cedar
violet void
#

Or it would be confusing if you refer to them as "face cards" without a face

weary jungle
#

because its a random joker

wild patrol
#

I tried downgrading the steammodded didn't work either

#

so not compatibilty issue

#

is there more to lovely than just the .dll file?

ionic verge
#

i found it

wicked leaf
#

where can I find the code for vanilla cards?

#

trying to find them in the exe but its very confusing

ionic verge
#

ok i dont know what the hell im doing

#

what the hell does this mean

sand oasis
vagrant cedar
#

it even says the version in his crash

sand oasis
#

wow - oh wow, oops

vagrant cedar
#

yeah I'm lost

wintry solar
#

It doesn’t say the lovely version

maiden river
#

yeah I was about to say

candid epoch
#

texture pack is a texture pack, i gonna do what i want lmao

violet void
vagrant cedar
#

it said 15.0 or something

#

LÖVE Version: 11.5.0

maiden river
#

that's love, not love_ly_

vagrant cedar
#

oh

#

so his lovely isn't working

maiden river
#

he probably didn't download lovely at all

vagrant cedar
#

When I asked if he had lovely he said "the version.dll thing? yeah"

maiden river
#

oh okay

vagrant cedar
#

He also said he got it fixed by changing his lua? Idk

wild patrol
#

it was the lua script

#

The extra message data at the bottom was crashing the game

#

calling for something that didn't exist no more

vagrant cedar
#

makes sense

candid epoch
wild patrol
#

Should mention on linux through proton so lol

#

thought maybe would have been proton for a second

ionic verge
#

what does this line mean

wild patrol
#

guess this is a good start for adding a yugioh card pack lol

#

guess now i need to learn how to add multiple cards in one script lol

vagrant cedar
#

you just put the next joker under it

#

don't change the atlas

wild patrol
#

ahh

vagrant cedar
#

I have some good examples of random stuff you can do

wild patrol
#

It works tested it

#

Can't go past 11 jokers cards with 3

vagrant cedar
#

Nice

wild patrol
#

selling them removes the slots

#

but lets u keep the extra cards

vagrant cedar
#

These are my 2 favorite that I've made

wild patrol
#

but u can't reuse those slots when selling extra cards

cerulean rose
#

world's biggest file download

vagrant cedar
wild patrol
#

I wonder if it would be possible to code the 5 pieces of exodia into balatro lmao

#

instant win condition on bosses

#

or are we just restricted to what can be done in the vanilla game just with some minor tweaks to values

hardy viper
#

no restrictions

versed swan
#

Code injection can do crazy shit

wild patrol
#

If anyone is smart enough to code a script a that can trigger an auto win with 5 cards in the joker slot

#

I could easily slide in the exodia part of it

cerulean rose
#

i already did this lol

wild patrol
#

can I steal barrow ur code

cerulean rose
#

sure

wild patrol
#

nice

#

thanks

cerulean rose
wild patrol
#

i'll 100% credit not gonna take it and not give credit

ionic verge
#

does anyone know how to make a blueprint like joker actually copy things?

#

im at the point of copying other people's code not knowing what it does

cerulean rose
#

prolly just find the joker to its right and call its calculate function

ionic verge
#

and its still not working

#

hmm

cerulean rose
#

but remember to set context.blueprint

ionic verge
#

noted

#

for context im making a joker that copies a random compatible joker each round

#

but thats still important, the context thing

cerulean rose
#

joker centers have a blueprint_compat entry

ionic verge
#

ive got the 'select random joker' down

#

yeah

ionic verge
wild patrol
#

I just hope the injector gets fixed to where it doens't get flagged as malware

cerulean rose
#

i dont think thats really fixable as the way it works is fundamentally the same as a trojan virus

wild patrol
#

The leathal company injector works nearly identically so I don't see why it couldn't

cerulean rose
wild patrol
#

just a matter of getting the signature whitelisted

ionic verge
#

how do i put the fact this is context.blueprint through this?

cerulean rose
#

before calling the calculate function do context.blueprint = true

ionic verge
#

got it

#

then disable after?

#

or what

#

will it do that automagically?

wild patrol
#

main reason having to keep the injector seperad from my main pc is I don't wanna risk any chance of a game injector flagging my tf2 games and vacing me lmao

#

I know sounds paranoid but I never wanna risk my steam account lol

cerulean rose
ionic verge
#

huh

wild patrol
ionic verge
#

ok

wild patrol
#

is it possible to have a modded save an an unmodded save?

#

I don't want the steam cloud save i got get corrupted by mods

storm kraken
#

besides that idk

ionic verge
#

alright
i really dont know what to do at this point
i think other_joker isnt actually being assigned to anything, or to a nil value, which is causing the joker to not actually copy anything

#

so presumably my way of making a list of compatible jokers isnt working

nocturne garnet
#

it wont save

ionic verge
#

oh

#

so... set it up in config?

nocturne garnet
ionic verge
#

nope