#💻・modding-dev

1 messages · Page 590 of 1

red flower
#

remove the key line in loc_vars

unkempt bronze
#

it's pseudocode, to be filled in by actual code later on

red flower
#

it's good but pretty limited

unkempt bronze
#

Like, the joker has a button. You click on it, and it makes a booster pack with the joker it's selling inside

#

That opens after the Small Blind shop right before the Big Blind

#

I chose to make it a tag for ease of implementation

unkempt bronze
hazy cosmos
real crown
minor magnet
#

how the hell do you do ui

#

going insane

haughty cargo
#

you find something you like and just trial and error it into what you want it to look like,

#

I want to be able to inspect the tables for the jokers so I can find where the joker info is, such as the xmult so it can be returned by my mod

#

it limits me to 5

slim ferry
#

Use ctrl c instead of 3 for spawning that goes over the limit

#

Or just do like eval G.jokers:change_size(100) or smth idfk

haughty cargo
#

oh yeah forgot I could eval stuff

red flower
red flower
lusty eagle
#

So, I’m doing another themed jokers like last time with Cynthoni’s Lvstlove, but now I wanna do it with their EP, SMOKE IT TO THE BUTT

#

“+15 Mult for the next 10 rounds” or something like that

#

Aaand I need to figure that out… shit

analog spoke
#

how would I make a joker which added a specific booster to each shop?
like, a mega arcana pack or something?

I think all I need to know here is the context and the actual function to add the booster in dsfsbndfs

maiden phoenix
analog spoke
#

thank you <3
will come back with how it works out dsfnskdfn

analog spoke
maiden phoenix
#

Your function parameter has to be a string

#

Also pseudorandom stuff is done a little differently nowadays

analog spoke
#

oh 😭 well, uhm, I don't have the new smods yet so... hopefully that's fine?... I should really update that lol sdfnjksdnfksd

maiden phoenix
#

If you got latest release it should be enough

analog spoke
#

hmmm, ok, I'll try switching it up real quick I guess dsnfjk

analog spoke
maiden phoenix
#

Right, this should be card.ability.extra.odds

analog spoke
#

ahhh ok

#

the thing I copied from must've made the var for arch but I never copied that part over lol sdfnjksdnfjk

#

thank you, I'll try this!

maiden phoenix
#

Actually again it's different due to the new SMODS proba stuff, check Cavendish again and its loc_vars function

quick prairie
#

is it just allow_duplicates = false, to make sure more than one of the jokers cant normally spawn unless you have showman?

maiden phoenix
#

Yes, but it should be false by default iirc, not sure

quick prairie
#

im not sure either because i had several copies pop in anyway, so i assume it's necessary

maiden phoenix
#

Ah, then yes, it's for a pool right?

analog spoke
maiden phoenix
analog spoke
#

ahhh thank you

quick prairie
#

i gave myself 1 million dollars and rolled 80 times to see if a second one spawned in

red flower
#

how did you spawn it in the first place

quick prairie
#

ah see i thought that might also be the issue, but then when the third one popped up i figured something must be wierd. (as in i just grabbed it from collection the first time)

granite jay
#
if context.card and context.cardarea == G.jokers then
            if SMODS.pseudorandom_probability(card, 'spotscast', 1, card.ability.extra.odds) then
                local ret = SMODS.blueprint_effect(card, context.card, context)
                if ret then
                    ret.colour = G.C.RED
                end
                return ret
            end
        end

Ok so about the joker that copies every joker, I decided that it would be better to give it a 1 in 2 chance to copy a joker when they trigger.

#

but it no work, any ideas?

red flower
#

else then the other only explanation is that you're making an consumable type or object type or rarity wrong

#

and getting the default

red flower
#

also that will just copy one joker

quick prairie
#

i hope

red flower
#

i mean if that's not the case then something else is wrong because that's how it should work

granite jay
red flower
#

that's not how blueprint effects work

granite jay
#

This isn't like blueprint.

red flower
#

also it would still be wrong because it's context.post_trigger

granite jay
#

It works like Seltzer but for jokers.

#

And it copies the joker's effect instead of triggering it again

red flower
#

If you're using SMODS.blueprint_effect then it's a blueprint-like effect

#

if you want to retrigger use the retrigger api

granite jay
#

Yeah I want to use the blueprint effect, not retrigger api

red flower
#

Ok, then that's not how blueprint works

#

even if your particular effect is different the mechanics of it are the same

#

it needs to check all contexts and you need to combine all the joker's effects in one return table if you want to copy multiple jokers per context

granite jay
#

I'm not trying to remake Blueprint???

#

Ah ok

red flower
#

I recommend searching SMODS.merge_effects on github

#

some mods have similar things

pseudo sun
#

can someone help me with making an edition shader? Im trying to make a "Enchantment" shader (basically the Minecraft enchantment glint) for the enchantment edition for my mod. But im not sure how to work with .fs

#

smth like this but for the jokers

#

heres the glint img if needed

chrome widget
#

What's the most direct way that SMODS sorts ranks in ascending value order?

crimson tapir
#

how do i make a new rarity

jolly shadow
#

my friend did a shader like that at one point ^ should be usable

pseudo sun
jolly shadow
#

I'm not sure, never worked with shaders myself, just figured this is helpful because it's glsl

pseudo sun
crimson tapir
#

what is wrong with this code lua -- Album Rarity SMODS.Rarity.add( "Album", { name = "Album", rate = 0, color = "242424" } )

#

its saying attempt to call 'add' a nil value

plucky berry
#

i think you just need SMODS.Rarity

#

without .add

#

SMODS.Rarity {
name = "Album",
rate = 0,
color = "242424"
}

crimson tapir
plucky berry
#

did you remove the "Album" too near Rarity

crimson tapir
plucky berry
#

check your parentesis'

#

i suggest you use visual studio code instaed of a text editor, so you can see this basic errors beforehand

plucky berry
#

have you got the lua extention?

crimson tapir
#

yes

jolly shadow
#

its not parenthesis

#

its brackets

#

{}

plucky berry
#

was about to say that

crimson tapir
#

on name or color or both

jolly shadow
#
SMODS.Rarity {
  key = "Album",
  weight = 0,
  color = HEX("242424")
}
#

mb

crimson thistle
#

gonna paste this here from a reddit post i made since i was told to consult here.

jolly shadow
crimson thistle
#

i see thanks

outer jungle
#

i have an econ joker that resets after a boss blind is there any way to make it so the reset comes after the cash out?

crimson tapir
#

if i make a new rarity how do i make a joker that rarity if it doesnt have a number

jolly shadow
jolly shadow
#

i think?

#

something like that

crimson tapir
jolly shadow
#

yeah

jolly shadow
#

so like rarity = "prefix_rarity"

crimson tapir
#

thx

crimson tapir
#

does anyone know why im getting the error attempt to insert object "j_nlsmd_SITM" into an empty pool ```lua
-- Album Rarity
SMODS.Rarity {
key = "Album",
weight = 0,
color = HEX("242424")
}

-- Stuck In The Middle
SMODS.Joker{
key = 'SITM',
blueprint_compat = true,
rarity = "Album",
cost = 15,
loc_txt = {
name = 'Stuck In The Middle',
text = {
'insert description here'
}
},
atlas = 'placeholder',
pos = {x = 0, y = 0}
}```

daring fern
crimson tapir
daring fern
crimson tapir
daring fern
crimson tapir
crimson tapir
chrome widget
#

Winter mod coming out soon woot

wind steppe
#

how do i get the position of a tag in G.ASSET_ATLAS.tags?

granite jay
#

What's the best way to convert this to a string for use in vars rather than main_start or main_end?

gaunt folio
#

"Balance"

#

this IS a nightmare for UI

jolly shadow
#

😭

gaunt folio
#

if i was truly insane id add perma_repetitions but this is insane enough

charred widget
#

Hello friends. I'm here to make some changes to one of my jokers.

#

Koraidon here applies red seals to played wild cards. However, since wild cards are hard to come by, I've decided I want to buff him.

#

I want the first hand of each round to turn into wild cards with red seals

#

How would I modify the code to do that?

red flower
granite jay
#

DAMMIT

red flower
#

what do you want to do

granite jay
#

I can't figure out how to do the backdrop for xMult cos I want to make a joker that's essentially an Xmult Misprint

red flower
#

you just wrap that G.UIT.O node in a G.UIT.C node

#

I recommend looking at localize in the base game code, it has this setup

charred widget
#

Alright so I tried tweaking it by myself

#

and it doesn't crash the game on loading

#

but when it's about to score a card, it drops this crash log

sturdy compass
#

Is there a wild edition?

#

@charred widget

charred widget
sturdy compass
#

😭

charred widget
#

me when i get two rather similar terms mixed up (how clumsy of me)

charred widget
#

Alright now I'm having a different problem

#

I put in some more code that should make Koraidon give 2x mult for every wild card played, but it's not working as intended

#

knowing me, it's probably because of some syntax mistake or I just implemented it into the code wrong

rocky plaza
charred widget
#

oh right

#

well it's just not applying the mult

rocky plaza
# charred widget oh right

instead of SMODS.get_enhancements(context.other_card)["m_wild"] == true
do
SMODS.has_enhancement(context.other_card, "m_wild")

charred widget
#

aight i'll see how it works

unkempt bronze
#

Any idea how to code to look for unique chip totals? My current best idea is write-in tables to store every single one in order and have the joker compare the current to those before/

rocky plaza
#

this is strange

unkempt bronze
#

what is?

rocky plaza
rocky plaza
gusty iron
charred widget
unkempt bronze
rocky plaza
#

im not seeing anything else weird

gusty iron
gusty iron
#

xmult does

rocky plaza
#

huh
jokerforge stuff uses Xmult for some reason

unkempt bronze
charred widget
unkempt bronze
gusty iron
charred widget
#

i don't think the case matters

#

isn't it a local value?

unkempt bronze
gusty iron
#

I think i see the issue

unkempt bronze
#

to Esz?

gusty iron
#

Yeah

#

Try Xmult_mod

unkempt bronze
# gusty iron Yeah
SMODS.Joker {
    key = "scorigami",
    blueprint_compat = true,
    perishable_compat = false,
    rarity = 2,
    cost = 6,
    pos = { x = ??, y = ?? },
    config = { extra = { chips = 0, chip_mod = 14 } },
    loc_vars = function(self, info_queue, card)
        local xiferp_unique_chip = (compare to every entry in xiferp_scorigami_table)
        return { vars = { card.ability.extra.chip_mod, localize(xiferp_scorigami_table), card.ability.extra.chips } }
        if context.(post_hand) then
            xiferp_unique_chip
            if does not match then
                add chip_total_value to xiferp_scorigami_table
            end,
        end,
    end,
    calculate = function(self, card, context)
        if context.before and not context.blueprint then
            card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.chip_mod
            return {
                message = localize('k_upgrade_ex'),
                colour = G.C.CHIPS
            }
        end
        if context.joker_main then
            return {
                chips = card.ability.extra.chips
            }
        end
    end
}

set table xiferp_scorigami_table
xiferp_scorigami_table: {}```
#

current joker pseudocode

#

(mostly based on Castle)

charred widget
gusty iron
#

Huh

rocky plaza
#

😭

#

maybe a wonky if statement elsewhere???

unkempt bronze
gusty iron
#

Have it print card.ability.extra.Xmult

#

See if that's the issue

charred widget
#

and still not multing

rocky plaza
#

did it print a number

#

or nil

charred widget
#

wait

gusty iron
#

What did it print

charred widget
#

it's nil

gusty iron
#

OKAY

rocky plaza
#

ah that would be why

gusty iron
#

Now try replacing card with self

#

Should work like a charm

rocky plaza
#

nononono
self is a prototype of the card object

gusty iron
#

Huh

-# swear ive done that before to fix it

charred widget
gusty iron
charred widget
gusty iron
#

In terms of the return table, yes

#

But were talking about a variable

#

Variables are case sensitive

charred widget
gusty iron
charred widget
#

yeah

#

ok sure

daring fern
gusty iron
rocky plaza
#

yeah never use self

gusty iron
#

The evil self trick i used doesnt work in this context ig 😔

rocky plaza
#

prototype objects are a consequence of recreating classes with tables in lua

unkempt bronze
gusty iron
#

What i think is happening is card is targetting other_card for some reason??

charred widget
#

why would it do that?

#

is it stupid?

gusty iron
#

Honestly atp id say just hardcode the value until you can find a fix

charred widget
#

so how would i go about doing that

#

surely it wouldn't just be Xmult = 2 right

gusty iron
#

In the return table replace card.ability.extra.Xmult with whatever it should be

charred widget
#

it can't be that easy

gusty iron
#

It is :P

#

Or it should be

#

-# hopefully

rocky plaza
#

ideally you'd use the extra value
but since thats breaking
hardcoding the value is kind of our only hope

charred widget
rocky plaza
#

did you try it
and did it work

gusty iron
#

Theres several pros and cons to doing this:

Pros:

  • Gets the joker to actually function

Cons:

  • Loses compat with decks like misprint deck
  • Is a bit more tedious to change
charred widget
gusty iron
#

Yeah

charred widget
#

finally my boi koraidon is cooperating with me

gusty iron
#

Your formatting is a biiiitttt off, but its readable

#

My main issue is change 2x to X2 in the description

unkempt bronze
granite jay
#

Want some credit in my mod or?

#

How do you change the curvature of the circle here? I tried using r but that didn't work.

faint yacht
#

r = 0.1 is default value of "roundness" of corners.

charred widget
#

CODE RED

#

CODE RED

#

THE WORST HAS COME TO PASS

#

ARCEUS CREATES TWO ULTRA NECROZMAS

granite jay
#

OH SO GETTING RID OF R JUST MAKES IT A FUCKIN SQUARE YET WHEN I SET R TO SOMETHING IT DOES THIS?! EVEN WHEN I SET R TO 0.1?!

unkempt bronze
river grail
#

bruh

unkempt bronze
#

yeah...Imma stop

granite jay
#

Doesn’t work iirc, honestly I’m fine with sharp corners, I’m done with this fuckin thing.

keen atlas
#

r is meant to be a boolean actually, but used as a number in vanilla

#

you can try using res

gusty iron
#

i first added my english teacher, now its my math teacher's turn

#

(it starts off as ^)

unkempt bronze
#

Does anyone know how to make a joker write to a table?

unkempt bronze
#

How does a joker write a new value into a table?

loud summit
#

just set it

#

if you write to a key that doesnt exist it just creates it

#

you do know how tables in lua work right

unkempt bronze
unkempt bronze
#

(so no)

loud summit
#

oh

#

so you can access an element in two ways

#

table.key1

#

or table["key1"]

#

the first one looks nicer, especially for nested tables

#

but the second one lets you access a key based on a variable namw

#

you can also mix and match them

#

like card.ability.extra.whatever[key]

#

(which gets card.ability.extra.whatever.(the string that key is set to))

gusty iron
#

i remember when i learned nested tables...

faint yacht
#

card.ability.extra.amogus.farts.lol = card['ability']['extra']['amogus']['farts'].lol

unkempt bronze
#

Ah. Got it. One more question: how do I read the base chips of a hand?

#

Like, after the last scored card but before the cards held.

faint yacht
#

hand_chips is the global... you may need to check for if the currently scored card is the last scoring card.

#

Otherwise, for just the total chips of just the hand along, G.GAME.hands[hand].chips, where hand is the string of said hand, be it 'Flush' or w/e.

unkempt bronze
#

I was about to ask if tables must have the mod prefix, and I thought of course they should!

#

Would xiferp_scorigami_table be a valid table name?

faint yacht
#

Unless specified to, modprefixes aren't needed.

#

Some of my global tables that are accessible everywhere are attached to SMODS.current_mod, which is referenced as togabalatro as my mod initializes - for example, togabalatro.chipmultopswap is a global table.

#

But, otherwise, you're free to just

scorigami_table = {}

and not much else to define it.

unkempt bronze
#

alrighty then, thank you!

#

One true final question, how do I compare one thing against all of a table?

real crown
#

How do I check if a hand is present? As in, there are drawn cards in the hand.
I want to add cards to the hand, but if it's not present, then to the deck, as of now if there are no cards in the hand, the card just gets added to the hand anyway and it looks goofy in the shop.

maiden phoenix
umbral zodiac
#

or maybe just next(G.hand.cards)
technically the same but next is cooler

real crown
umbral zodiac
#

if theres nothing in G.hand.cards itll return nil and nil is falsey
and if there is something itll return it and anything else is truthy

unkempt bronze
#
    set[key] = true
end
function checkForKey(key)
  if setDoesNotContain(scorigami_table, key) then
    table.insert(scorigami_table, key)
end```

This should turn my table into a set, yes?
#

And then search it for the key, yea?

willow scroll
#

I must fix this immediately

vocal helm
#

This is probably a really strange question, but given that the cards in Balatro kinda wiggle in a faux 3D rotation motion, what are the "fake" x/y/z rotations given to the cards? I need to find their normals.

umbral zodiac
#

it may do you good to look into some shader's code

vocal helm
#

that's what i'm doin

umbral zodiac
#

i know that there's this variable passed to shaders

vocal helm
#

right

umbral zodiac
#

i love the dissolve shader

vocal helm
#

so anyway, 3d joker

umbral zodiac
#

oh god

willow scroll
#

My brain saw Peter Griffin in that 😭

#

Good art

true jasper
vocal helm
#

(it doesn't use a 3D model it's just faking it with shaders)

willow scroll
#

Wow that joke is mid

lusty eagle
#

how does one make the joker go away after a certain amount of rounds?

chrome widget
#

Bizarre, im getting some crash with cardsleeves when the game calls for a save

#

Specifically with one of my modded sleeves....

#

Ugh. Crashes only when using the sleeve with the associated deck,

unkempt bronze
#
         if context.round_eval and setDoesNotContain(scorigami_table, xiferp_unique_chip) then
             table.insert(scorigami_table, xiferp_unique_chip)
         end```
help
#

what do I replace setDoesNotContain with?

maiden phoenix
hidden notch
#

How do I apply a Stake to my Challenge?
I can set G.GAME.stake = 8 in the apply, but that doesn't actually apply any of the Stake-Changes

daring fern
hidden notch
daring fern
hidden notch
#

Doesn't do anything... Nvm. ->

#

Ah, .. Wait, Do I have to apply all of them seperatly?

daring fern
#

No, just call SMODS.setup_stake(8)

hidden notch
#

-# Oh thank god-
Thank you FlowireBigLove

daring fern
daring fern
lusty eagle
lusty eagle
#

I’m still a beginner at this

frosty dock
red flower
granite jay
#

r = 0.05? Will try that

long sun
#

i'd like to add a sprite on top of the logo on the main menu

#

can i do this with a DrawStep, or is there another way?

#

i'd just change the title screen sprite but i want Ghost to appear on it even if a different mod also changed it

red flower
long sun
#

awesome ^u^

hidden notch
lusty eagle
willow scroll
#

i remember there being some github repo with some example shaders, which one is that?

willow scroll
rotund sable
willow scroll
#

but i also am currently experiencing a major case of the genior so i might just be :clueless:

#

its a seperate repo

#

kurwa

rotund sable
lament agate
#

is there any documentation for calc_dollar_bonus(self, card)

tepid crow
lament agate
#

<@&1133519078540185692>

#

begone

tepid crow
#

thanks mods

grand violet
#

gone be

#

thanks Header

lament agate
#

ass dead

#

thanks egg

thorn basin
#

I tried to make a consumable that gives a random enahncement from an ObjectType pool but for some reason the game gives me error, is there something I'm still missing?

tepid crow
#

that's a weird spot to put the pseudorandom, is that what it's crashing on?

real crown
#

How can I shuffle the card back into the deck when I don't have a hand? It does it trivially when a hand exists, but if I have shop open, it just adds it back, but it seems to be in the discard pile and is only shuffled back into the deck after next round end

tepid crow
# thorn basin yup

I'm assuming your intent is a suit-changing tarot that randomly picks 1 of 2 suits to convert the cards to after(?) the player uses it

thorn basin
tepid crow
#

Oh, I thought mod_conv was only for suits

#

I do see now that is also for enhancements

#

neat

tepid crow
thorn basin
#

yes

tepid crow
#

then what are you trying to show in loc_vars?

#

a constantly changing text for each enhancement?

thorn basin
thorn basin
tepid crow
#

or more specifically, why card.ability.mod_conv is set using pseudorandom

thorn basin
#

That is my fault, I need to remove it

#

yet I wanna know how can I make mod_conv get a random enhancement from a pool

tepid crow
#

you can then use pseudorandom_element on the pool and pool key

#

see e.g. get_next_tag_key in the basegame source code functions/common_events.lua:1914

#

Unless there's something built into smods that automatically does all that for you (I couldn't find it)

#

and obviously make sure to do all of that in the use method of your consumable, not in the config

thorn basin
#

aight

slim ferry
thorn basin
#

I'm missing something but I'm not sure what exactly is

thorn basin
slim ferry
#

No it should be a table of enhancement keys

unkempt bronze
long sun
#

i've made a couple patches to add a new sprite to the main menu

#

however, it's not appearing on the title screen

red flower
loud summit
long sun
#

[not a card]

#

it should look like this

#

the Ghost in the corner is her own sprite

loud summit
#

Ww

#

aww

long sun
#

^u^ hehe

loud summit
#

-# unfortunately it wouldb probably be overriden by ortalab 😔

long sun
#

well that's the thing

#

i considered having the Phanta logo with her baked in

#

but i thought it'd be cuter for her to remain if something overrides the title

loud summit
#

oh ye

#

weell look at how aiko and mkt do it maybe

#

er wait no just mkt

long sun
#

what's that short for?

loud summit
#

milkys mod i forgot what its called

long sun
#

this seems to be what i'm doing

loud summit
#

tttthen try to find a difference ig

#

because theirs works

long sun
#

can i see what it looks like?

loud summit
#

iuh cant rn sorry :(

long sun
#

ah allg

#

mm, lemme see what this is doing differently

loud summit
#

ok i found someoen elses lol

long sun
#

ah grand :D

loud summit
#

also ig maximus does it too

real crown
#

How can I shuffle the newly added card into the deck?
As of now it gets added to the full deck list, but only gets actually added after the end of next round, when the cards are shuffled in

loud summit
#

why are you adding to the table dieectly

#

use SMODS.add_card

real crown
#

I do it based on how I see the implementation in VanillaRemade, so I figured that was the way to add it

loud summit
#

i mean create_card

real crown
#

Doesn't create_card generate from a set? I need a saved card to be added to the deck

pearl jacinth
#

how to press the select button before blinds with code

loud summit
#

see pins

loud summit
wind steppe
#

yeah emplace

loud summit
#

oh

wind steppe
real crown
#

So I'm guessing G.deck:emplace(c) then?

wind steppe
#

its intended behavior

loud summit
#

uhh yea ig so

wind steppe
loud summit
#

just dont directly write to the table

#

it skips over stuff like add to hand contexts

#

and vanillaremade is wrong in this case

#

i think

wind steppe
real crown
# wind steppe yeah but then it doesn't go into your hand

I need it to go into my hand only if my hand is present, but go to my deck when getting a card while in shop without a hand, the hand part was done, only issue was that it didn't get shuffled in, but I'll try deck emplace then

loud summit
wind steppe
loud summit
#

oh

#

wait uhh

#

only emplace once per card

#

its ok to insert it into the playing_cards table because its already emplaced into hand

#

i guess

real crown
loud summit
#

then have it emplace into deck in an else statement

real crown
#

Yeah that's the plan

#

Without the table insert it seems to not increase the deck size

lusty eagle
#

what can i do next?

real crown
#

Thank you so much @loud summit and @wind steppe, it's working now with deck emplace!

chrome widget
tepid crow
#

what's the crash log?

queen crescent
#

now i wonder if i can make a blind have priority over jokers

its for suspense

chrome widget
#

(on mobile right now) It basically says that the first argument to the channel:push() method used for saving on the Save manager channel isn't a valid type

#

But it was pointing to a line in Game.lua somewhere in the 2900s (probably offset some compared to other mods due to my patches) where it was clearly passing a table, which is a valid type

queen crescent
ashen drift
#

where would i even begin to add a sprite here

chrome widget
#

I can get the proper crash log once I get out of bed but it's not super helpful IMO

lusty eagle
#

I feel like I’m interrupting…

ashen drift
#

nvm i can figure something out

loud summit
ashen drift
#

No

lusty eagle
ashen drift
#

i could just copy code for that LMAO

#

though actually wait

tepid crow
queen crescent
#

man i want the blind to destroy chicot

chrome widget
#

That's why I'm confused, cause nothing I do uses the save manager wither

loud summit
chrome widget
#

It's clearly some weird interaction with my own content, because it's specifically one of my sleeves when used alongside its deck counterpart, and no other situation

loud summit
chrome widget
#

And no crashes otherwise

ashen drift
#

No

loud summit
#

what

ashen drift
#

i think that draws the sprite in front of the balatro one

#

not what i want

loud summit
#

oh

#

maybe sprites can define a z layer?

lusty eagle
#

... you guys aren't any help sometimes... honestly

queen crescent
ashen drift
#

ill go and figure something myself

tepid crow
loud summit
obtuse wraith
ashen drift
#

i could probably just render the sprite before the balatro text

queen crescent
ashen drift
loud summit
loud summit
#

and what about playing cards that disable blinds, like mine :(

ashen drift
#

fuck luchador

#

you can just hook to check if chicot is present and the boss blind is your boss blind i think

queen crescent
#
  if context.setting_blind then
    func = function()
     G.jokers:remove_card(card)
     card:remove()
     card = chicot
     return true;
    end
``` idk you tell me
loud summit
queen crescent
#

i put the card = to always target chicot

ashen drift
#

idk im not familliar with blinds just a thought :)

loud summit
#

SMODS.destroy_card(SMODS.find_card("j_chicot").next) might work

lusty eagle
#

hello?

loud summit
#

is it .next or .next()?

queen crescent
ashen drift
#

next(the thing)

#

iirc

loud summit
#

lol, im sure the smods wiki has something

ashen drift
#

next is a function

loud summit
lusty eagle
queen crescent
loud summit
#

... hang on what was the function again

queen crescent
#

the original code?

loud summit
#

.destroy_cards

#

of course it has an s for some reason

loud summit
lusty eagle
tepid crow
lusty eagle
#

yeah

#

since SMOKE IT TO THE BUTT is related to smoking, i'm thinking of the next 10 rounds

tepid crow
#

check the VanillaRemade code for those jokers

loud summit
queen crescent
#

both chicot and the blind activated at the same time lo

loud summit
lusty eagle
loud summit
#

iits a variable

#

you can name it whatever you want

#

as long as youre consistent with it

#

a self-defined var*

lusty eagle
loud summit
#

send code

queen crescent
loud summit
#

event

queen crescent
#

im talking an SMODS.<thing>

loud summit
#

?

queen crescent
#

basically is there an inverse to SMODS.destroy_cards

loud summit
#

SMODS.create_card?

queen crescent
lusty eagle
#
    key = 'smokeit', --joker key
    loc_txt = { -- local text
        name = 'SMOKE IT TO THE BUTT',
        text = {
          '{C:mult}+15{} Mult for',
          'the next {C:attention}10{} rounds.',
        },
    },
    atlas = 'Jokers', --atlas' key
    rarity = 1, --rarity: 1 = Common, 2 = Uncommon, 3 = Rare, 4 = Legendary
    --soul_pos = { x = 0, y = 0 },
    cost = 3, --cost
    unlocked = true, --where it is unlocked or not: if true, 
    discovered = true, --whether or not it starts discovered
    blueprint_compat = true, --can it be blueprinted/brainstormed/other
    eternal_compat = true, --can it be eternal
    perishable_compat = false, --can it be perishable
    pos = {x = 0, y = 0}, --position in atlas, starts at 0, scales by the atlas' card size (px and py): {x = 1, y = 0} would mean the sprite is 71 pixels to the right
     config = { extra = { mult = 15, total_rounds = 10 } },
     calculate = function(self, card, context)
        if context.end_of_round and context.game_over == false and context.main_eval and not context.blueprint then
            if card.ability.rounds - card.ability.rounds_loss <= 0 then
                SMODS.destroy_cards(card, nil, nil, true)
            else
                -- See note about SMODS Scaling Manipulation on the wiki
                card.ability.rounds = card.ability.rounds - card.ability.extra.rounds_loss
                return {
                    message = localize { type = 'variable', key = 'a_rounds_minus', vars = { card.ability.extra.rounds_loss } },
                    colour = G.C.MULT
                }
            end
        end
        if context.joker_main then
            return {
                mult = card.ability.rounds
            }
        end
    end
}
#

@loud summit

loud summit
lusty eagle
#

oh

#

_>

real crown
#

Nevermind the adding card is not perfectly fixed, when drawing the deck emplaced card, it's invisible. If I also start materializing it, it won't be invisible, but it'll be in my non-existing hand

lusty eagle
loud summit
#

change the word

lusty eagle
#

to total_rounds?

loud summit
#

yes

lusty eagle
#

it also didn't output the mult, should be easy to fix

#

or not, since i tried to copy the code from jimbo

#

i'm that lazy, huh

loud summit
lusty eagle
#

I’m gonna try it

#

Before I do the art lmao

lusty eagle
slim ferry
#

card.ability.extra.mult

lusty eagle
#

SHIT

#

i'm a moron for forgetting that

loud summit
#

ih yea

#

oh yea

real crown
slim ferry
#

_ _

#

teehee

lusty eagle
#

And it crashed

slim ferry
#

did you misspell extra

#

by any chance

#

oh no you also need to have card.ability.extra.total_rounds

lusty eagle
#

OMFG WHAT IS WRONG WITH ME

slim ferry
#

being new to coding i imagine

#

happens to everyone lmao

lusty eagle
#

I’m still a beginner

wind steppe
#

lusty eagle
#

And I forgot to put a value to “total_rounds_lost”…

slim ferry
#

you could also just put 1 there

#

since i dont imagine you would be changing by how much the round count decrements

lusty eagle
#

IT STILL CRASHED THOUGH I PUT A FUCKING VALUE ON IT

slim ferry
#

sned log

lusty eagle
#

never mind, i just needed to start a new run

#

the only thing i need to do is the joker art and i'll be finished

#

oh yeah, i forgot to show how many rounds the joker has got left

#

how can i show how many rounds does the joker have left?

slim ferry
chrome widget
#

Well, I'll do codesnap versions of these too

#

But what specifically it's crashing on is the block that saves every ten seconds in game.lua

slim ferry
#

yes

#

thats for on the actual joker

lusty eagle
#
        -- all keys in this return table are optional
        return {
            vars = {
                card.ability.extra.total_rounds
                },
            },
``` ? something like that?
slim ferry
#

yeah

#

and then #1# in the description will be replaced with the round count

lusty eagle
slim ferry
#

huh

#

code?

lusty eagle
# slim ferry code?
    key = 'smokeit', --joker key
    loc_txt = { -- local text
        name = 'SMOKE IT TO THE BUTT',
        text = {
          '{C:mult}+15{} Mult for',
          'the next {C:attention}#1#{} rounds.',
        },
    },
    atlas = 'Jokers', --atlas' key
    rarity = 1, --rarity: 1 = Common, 2 = Uncommon, 3 = Rare, 4 = Legendary
    --soul_pos = { x = 0, y = 0 },
    cost = 3, --cost
    unlocked = true, --where it is unlocked or not: if true, 
    discovered = true, --whether or not it starts discovered
    blueprint_compat = true, --can it be blueprinted/brainstormed/other
    eternal_compat = true, --can it be eternal
    perishable_compat = false, --can it be perishable
    pos = {x = 0, y = 0}, --position in atlas, starts at 0, scales by the atlas' card size (px and py): {x = 1, y = 0} would mean the sprite is 71 pixels to the right
     config = { extra = { mult = 15, total_rounds = 10, total_rounds_loss = 1 } },
     calculate = function(self, card, context)
        if context.end_of_round and context.game_over == false and context.main_eval and not context.blueprint then
            if card.ability.extra.total_rounds - card.ability.extra.total_rounds_loss <= 0 then
                SMODS.destroy_cards(card, nil, nil, true)
            else
                -- See note about SMODS Scaling Manipulation on the wiki
                card.ability.extra.total_rounds = card.ability.extra.total_rounds - card.ability.extra.total_rounds_loss
            end
        end
        loc_vars = function(self, info_queue, card)
        -- all keys in this return table are optional
        return {
            vars = {
                card.ability.extra.total_rounds
                }
            }
        end
        if context.joker_main then
            return {
                mult = card.ability.extra.mult
            }
        end
    end
}
queen crescent
#

what the hell do you mean

loud summit
#

also add .next() since it returns a list

slim ferry
#

no..

queen crescent
slim ferry
#

you would, though not in this case

#

since here youre using the full table of cards

slim ferry
#

you need to have loc_vars

#

not in your calculate

#

its a seperate thing

#

in the joker

queen crescent
lusty eagle
red flower
queen crescent
red flower
#

it's not

#

also post the full crashlog pls

thorn basin
#

ok so I just tried to mod Balatro on another computer but for some reason when I open it it gets stuck in a pitch black screen with another window with various inputs.
is there a way to stop making it endlessly loading?

chrome widget
#

Does your setup have multiple monitors?

thorn basin
#

....no?

thorn basin
chrome widget
#

Damn, then it's not the thing ive encountered

thorn basin
#

yes

ashen drift
#

thats normal just wait for a while until the game loads

#

or my pc is just really slow

thorn basin
#

aight

wild pine
#

working on a card that cycles its description when i press a key, but it only updates after moving my mouse off and back on, is there a way to force reload the cards text?

loud summit
#

maybe dynatext

#

try looking at like misprint in vanillaremade?

#

seems like you need a main_start function in the return for loc_vars

red river
#

how can i permanently debuff a joker without it clearing its debuff?

#

setting joker.debuff to true seems to reset it when blind is started/finished

slim ferry
#

<joker>.perma_debuff = true

red river
#

i tried that but it doesn't seem to do anything

slim ferry
#

it wont change until debuffs are recalculated

thorn basin
slim ferry
#

so you also need to set debuff and/or recalculate debuffs on the card

lusty eagle
#

there we go

queen crescent
#

-# apparently showing just the crash and the responsible code is not enough

red river
slim ferry
#

actually

#

wait hold on

#

okay i think i just hallucinated card.perma_debuff since i cant find anything about it

#

but you could create your own version of it by debuffing all cards with a certain flag with a mod calculate

red river
#

how... do i do that? what are flags? what is a mod calculate?
-# sorry if that's a lot

loud summit
lusty eagle
slim ferry
queen crescent
frosty rampart
loud summit
queen crescent
#

candycane you're knowledgable

#

im trying to destroy a modded joker but crashes with a nil 'ability' when trying

loud summit
red river
frosty rampart
#

there fixed

slim ferry
#

IM

#

AHH

#

BHSFHJUARJUIWHBUIQE

queen crescent
queen crescent
#

this is the responsible piece of code

jolly shadow
#

I think you should check if the find_card returns anything first and then destroy accordingly

queen crescent
#

there is a joker with that key

jolly shadow
#

I know but you don't always have that card in ur jokers

#

so it's best to check first then destroy

slim ferry
#

also

#

you still have it in the return

#

which is not where it should be

queen crescent
#

it must be in a return {}

slim ferry
#

no

#

it does not

#

its just a function

loud summit
#

oh wait dont put a comma

thorn basin
queen crescent
#

same ordeal

loud summit
#

ok hm

#

might seem a bit stupid but

#

for _, c in SMODS.find_card do
SMODS.destroy_cards(c)
end

queen crescent
#

huh

cards returns nil

red river
faint yacht
#
local chicots = SMODS.find_card("j_chicot") -- check if we got any.
if next(chicots) then SMODS.destroy_cards(chicots) end -- if we got any, kill. :)
slim ferry
red river
#

oooh

glass scaffold
#

This worked back when I had 0711a, but it's not applying the eternal in 0827c. Anyone know a fix?

red river
#

it... still doesn't work!

red river
#

if it's any help, the code that should apply debuff is a joker that debuffs a card to its right. the code i use is placed in loc_vars function

    if card.area and card.area == G.jokers then
      local other_joker = nil
      for i = 1, #G.jokers.cards do
        if G.jokers.cards[i] == card then other_joker = G.jokers.cards[i + 1] end
      end
      if other_joker == nil and card.ability.extra.currently_debuffed ~= nil then
        card.ability.extra.currently_debuffed.debuff = false
        -- SMODS.recalc_debuff(card.ability.extra.currently_debuffed)
        card.ability.extra.currently_debuffed.ability.joker_services_chosen = nil
        card.ability.extra.currently_debuffed = nil
      elseif other_joker ~= nil and other_joker ~= card.ability.extra.currently_debuffed then
        if card.ability.extra.currently_debuffed ~= nil then
          card.ability.extra.currently_debuffed.debuff = false
          -- SMODS.recalc_debuff(card.ability.extra.currently_debuffed)
          card.ability.extra.currently_debuffed.ability.joker_services_chosen = nil
          card.ability.extra.currently_debuffed = nil
        end
        other_joker.debuff = true
        -- SMODS.recalc_debuff(other_joker)
        other_joker.ability.joker_services_chosen = true
        card.ability.extra.currently_debuffed = other_joker
      elseif other_joker ~= nil and other_joker ~= card.ability.extra.currently_debuffed and card.ability.extra.currently_debuffed.debuff == false then
        other_joker.debuff = true
        -- SMODS.recalc_debuff(other_joker)
        other_joker.ability.joker_services_chosen = true
      end
      return {
        vars = { card.ability.extra.currently_debuffed }
      }
    end
  end```
slim ferry
#

uh

#

why is it in loc_vars

#

lmao

red river
#

i don't know a better way to make a joker trigger when it's moved

slim ferry
#

also you should be setting joker_services_chosen on other_joker

red river
#

i guess i can just put it in calculate without giving any context, but that doesn't work consistently

#

so other_joker.joker_services_chosen instead of other_joker.ability.joker_services_chosen?

slim ferry
#

actually

#

you could just do this in a calculate directly without any of the extra stuff i think

#

because of context.debuff_card

#

it would just be delayed until blind select ig

queen crescent
red river
#

i... think i tried that, and it still cleared somehow. i'll give it another try, hold on...

#

yeah... it does clear when i select a blind

red river
#

at this point it's probably some error in my code

#

thanks for all the help! i'll continue workin on this thing on my own for now

#

i... made the game immediately close itself upon hovering my mouse on a joker pareidolia

stoic void
#

This no work :(

errant arrow
#

Where would I start on making a deck?

loud summit
#

smods wiki

real crown
#

How can I make an enhancement render above the rank and symbols on the card? Preferably even above editions
Someone suggested DrawStep a few weeks ago, but I couldn't figure out how to make that work

frosty rampart
#

reference the Sleeved enhancement in the latest beta of Paperback, it does exactly that

real crown
#

Thank you!

queen crescent
loud summit
long sun
#

oooo nice :3

loud summit
#

ya

real crown
frosty rampart
#

in the latest beta

#

the github has a separate beta branch

real crown
#

Ah found it, thank you!!
I was trying to look for beta, but didn't know it was on another branch

quiet pivot
#

How do i find the seed of the run, using script

hardy viper
#

G.GAME.seed

#

pretty sure

quiet pivot
#

alright thanks

prisma loom
#

Folks, can someone explain why my text get "squished" here?

#

for comparison

#

Or am I crazy?

daring fern
quiet pivot
#

ok thank's, i'll try that then

gusty compass
#

would you guys happen to know how i could move back antes via ease_ante, since the game seems to self destruct (no error log) when i have it as ease_ante(-1) in order to go back antes, referenced to the vanilla backtracking vouchers

daring fern
#

queen crescent
gusty compass
next timber
#

why does this stupid shader system not have dot products. why did it need its own shader language

gusty compass
#

f# is designed for shaders im pretty sure

next timber
#

if someone has a love2d shader that can change the hue of a pixel i will like actually pay you to have it please im so tired of shaders

jolly shadow
#

wishing i knew how to shaders so i could get that bag 😎😔

gusty compass
#

you could just steal the balatro vanilla shaders 🤑

#

take the holo and tweak it a bit idk

prisma loom
#

Folks, what's the Ace's id?

#

1 or 14?

jolly shadow
#

14

prisma loom
#

kk

gusty compass
#

14

prisma loom
#

thanks!

jolly shadow
#

all in a days work for eddy rob

queen crescent
#

oh my god bruh just work

next timber
#

ok turns out the polychrome shader has HSL/RGB conversion functions

#

which makes this. super easy actually

#

its Blue time

queen crescent
#

😭 im crashing out

daring fern
queen crescent
#

getting rid of these two lines makes the code run normally

#

im sure its these lines that cause it (i just want to destroy a modded joker 😭

granite jay
#

How do I make a joker check if cards have a specific edition?

queen crescent
queen crescent
#

i just want to destroy a modded joker but the code is just not letting me 😭

granite jay
#
                SMODS.destroy_cards(card, nil, nil, true)
                return {
                    message = localize('k_drank_ex'),
                    colour = G.C.FILTER
                }
            else```
#

Here's this from Seltzer's code

#

from vremade

#

should help

queen crescent
#

im trying to do it here

unkempt bronze
#

Say, does anyone know how to check for commonality of suits in the full deck?

gusty compass
#

commonality?

#

like which one is more common?

unkempt bronze
#

yeah

#

I'm making a joker for Szymii, and they wanted their card to retrigger every card of the second most common suit

gusty compass
#

i think it is possible for you to run a loop through every card in the full hand, where you can get the suit there and count it perhaps

#

like a for loop with i as the index, going through context.full_hand[i].base.suit?

unkempt bronze
#

Shouldn't it be like a lookup stat? Organize the suits by card total, ignore the first, and buff the second.

#

Feel like that should be easier than looping through every card

gusty compass
#

you could, but i personally think you could count the suits and pick the second most significant one

queen crescent
gusty compass
#

the counting or the second significant one?

unkempt bronze
#

both parts.

#

and how would add it into a joker? just hook it on?

gusty compass
#

maybe through calculate = function(self, card, context)

queen crescent
gusty compass
#

i could try create a joker like the one you are trying to make, maybe i can make something work

gaunt thistle
gusty compass
#

yes hello

gusty compass
#

alr give me a second

unkempt bronze
#

(I'll give you proper credit and a joker for that effort!)

queen crescent
unkempt bronze
queen crescent
queen crescent
#

???????

unkempt bronze
#

Look, idk how you would, but I imagine you could rather easily

queen crescent
#

j_gj_fireicerealjokerlol is a valid joker key, i try to destroy it through that but it gives an ability crash

unkempt bronze
#

Hmm, maybe something like SMODS.destroy_cards {SMODS.find_card("j_luchador) = false}?

#

pardon my bad coding

frosty rampart
#

i genuinely don't know what's going on with the crash but i don't think that would fix it

frosty rampart
#

i assume gj is your mod prefix

queen crescent
#

yes
and its a valid key

unkempt bronze
frosty rampart
gusty compass
#

go ahead

#

also my code is a little messy so you might want to modify it a little

#

sorry about that

unkempt bronze
#
    key = "szymii",
    blueprint_compat = true,
    rarity = 1,
    cost = 4,
    pos = { x = 1, y = 1 },
    config = { extra = { repetitions = 1 } },
    loc_vars = function(self, info_queue, card)
        local second.most.common = 
        return { vars = { card.ability.extra.repetitions }, {suit = [second most common]} }
    end,
    calculate = function(self, card, context)
        if context.repetition and context.cardarea == G.play and context.other_card == context.card.ability.extra.suit then
            return {
                repetitions = card.ability.extra.repetitions
            }
        end
    end
}```
gusty compass
#

you dont mind it a bit messy

queen crescent
#

and yeah gj is the prefix

unkempt bronze
gusty compass
#

alr

#

ill see what i can cook up

unkempt bronze
#

Might if I make a joker of you for my mod?

gusty compass
#

yea sure

unkempt bronze
#

anything specific you want for it?

queen crescent
granite jay
#

How do I make a joker check if a playing card has an edition on it?
I wanna make a joker that retriggers cards with editions.

frosty rampart
queen crescent
frosty rampart
#

ok so that's at least getting a table back, that's expected if you don't have any of that joker
try eval SMODS.destroy_cards(SMODS.find_card("j_gj_fireicerealjokerlol")) then

queen crescent
#

ability nil!!!!

frosty rampart
#

how in the world
the crash is because it's trying to check if a card (that doesn't exist) has eternal

granite jay
queen crescent
wintry solar
frosty rampart
#

yea

#

yes

keen atlas
#

does lovely support multiline patches.pattern

queen crescent
frosty rampart
#

@queen crescent test the same command with one of the jokers existing now

queen crescent
#

when i press select it crashes?!

unkempt bronze
#

Does anyone know how to lookup the counts of the suits in the deck?

frosty rampart
frosty rampart
#

what are they

#

(aside from debugplus too)

queen crescent
#

(i need localpoolfix btw, the mod has a similar problem back when pwx had that pool problem)

frosty rampart
#

ok try with just your mod + debugplus + localpoolfix (+ talisman if that's a requirement)

gusty compass
unkempt bronze
queen crescent
gusty compass
#

and uh, i could probably be an econ joker that gives $4 if the first scored card is a diamond?

frosty rampart
queen crescent
#

ability crash on blind select, code seems to run fine outside

frosty rampart
#

send another copy of that utils.lua file

wintry solar
#

This is probably because you’re trying to destroy an empty table

frosty rampart
#

(it changed since you turned off a bunch of mods)

queen crescent
frosty rampart
#

actually @queen crescent add the check for when you're destroying chicot and luchador too

gusty compass
queen crescent
frosty rampart
#

you need the check for when you don't have any chicots or luchadors

#

so that it doesn't try to destroy an empty table

queen crescent
#

chicot and luchador destroy themselves just fine 😭

unkempt bronze
frosty rampart
#

this is for behavior when you already don't have any chicots or luchadors

gusty compass
#

kk

frosty rampart
#

they're destroyed fine but they are crashing when you try to destroy them but you don't have any

queen crescent
wind steppe
#

for a voucher's requires: is the table "you need all of these vouchers to get this one" or "you need at least one of these vouchers to get this one"

frosty rampart
queen crescent
#

i just did

#

hence the gray ability crash screen

frosty rampart
#

this is entirely without the code to destroy a modded joker?

queen crescent
#

oh, no, the code is there

#

i highlighted the line responsible for the crash

frosty rampart
#

to be crystal clear
is it crashing when:

  • you just have the code to destroy chicot and luchador, not the modded joker
  • you enter the blind without either of those jokers
    yes or no
frosty rampart
#

no those are the two requirements i laid out for a single test case

#

make both of the bullet points true and then report back if it crashes

queen crescent
frosty rampart
#

?????? i need you to test both cases at the same time BECAUSE IT'S A SINGLE TEST CASE
i need to see if it crashes when you try to destroy vanilla chicots and luchadors but you don't have any chicots or luchadors

#

and i want the modded joker part out of the equation to prove that it's an issue with those lines and not the modded joker line

queen crescent
misty oyster
#

can i have some help with a crash im having with "lovely" here? if thats okay i need a bit of help with it

frosty rampart
wintry solar
queen crescent
misty oyster
frosty rampart
frosty rampart
wintry solar
#

it does

frosty rampart
#

ah i see latest commit updated the check

#

cool

queen crescent
#

so do i update

wintry solar
#

oh maybe thats not in release yet

frosty rampart
#

yea it's not yet

gusty compass
#

where can i check the entire deck as a list, since im not sure if context.full_hand accounts for the entire deck

frosty rampart
#

just check if next(SMODS.find_card("joker key")) before attempting to destroy any cards

queen crescent
#

it crashes without the 'then's

frosty rampart
#

yes that should be correct

queen crescent
frosty rampart
#

are you sure you're saving the file

queen crescent
#

yes hello???? i always press ctrl + s when i test something

real crown
#

Is there a way to preserve card.GUID between quitting and loading?
It seems the card is losing ownership when the game is closed and then the save is loaded

queen crescent
#

it boots up fine if there aren't any jokers

frosty rampart
#

oh wait i can't read

#

you still have to do SMODS.destroy_cards(SMODS.find_card("joker key"))

#

same crash different reason

gusty compass
unkempt bronze
#

@gusty compass

gusty compass
#

👍

gusty compass
#

alr

queen crescent
#

im testing hold on

#

it just destroyed gj_fireicerealjokerlol

unkempt bronze
queen crescent
gusty compass
#

im debugging my bit rn

next timber
#

would running SMODS.find_card every frame cause a significant amount of slowing or should i be fine

gilded goblet
queen crescent
#

ITS GOOD

lean urchin
#

Yeah

#

600 x 32 = that

queen crescent
queen crescent
#

yes

hearty crane
gusty compass
#

Kill luchador

hearty crane
gusty compass
#

Or debuff it

queen crescent
slim ferry
#

why dont you just

#

prevent it from being disabled

#

by hooking Blind:disable()

hearty crane
slim ferry
#

that seems easier than just manually destroying boss disablers

slim ferry
#

okay but now it gets cheesed by any other mod

#

that has boss disabling

queen crescent
#

doesnt say anything about jokers

slim ferry
hearty crane
wind steppe
#

why isnt this code only getting vouchers that you can currently obtain or vouchers that need the voucher key

                for k, v in pairs(G.P_CENTERS) do
                    if string.sub(k, 1, 2) == "v_"  and v.requires then
                        local is_voucher_obtainable = true
                        for _, vv in ipairs(v.requires) do
                            if vv ~= key then
                                local is_voucher_matching = false
                                for kk, _ in pairs(G.GAME.used_vouchers) do
                                    if kk == vv then
                                        is_voucher_matching = true
                                        break
                                    end
                                end
                                if not is_voucher_matching then is_voucher_obtainable = false end
                            end
                        end
                        if is_voucher_obtainable then
                            valid2[#valid2 + 1] = k
                        end
                    end
                end
slim ferry
slim ferry
#

what if a mod takes ownership of a boss disabling joker

queen crescent
slim ferry
#

that

#

how does that change anything tho]

#

youre still destroying only 3 specific jokers

queen crescent
slim ferry
#

yeah you would have to actually check what joker it is for that

#

and also make the cardarea == G.jokers

queen crescent
#

i didnt paste in anything yet