#💻・modding-dev

1 messages · Page 388 of 1

snow vale
#

can someone please fix this 😔

wind steppe
#

TLDR:
functions are variables and editable
oldfunctionthing = functionthing
functionthing = function(args)
do your hook thing
return oldfunctionthing(args)

wind steppe
snow vale
slow brook
daring fern
daring fern
snow vale
#

the is_Ace was pure guessing tbh

maiden phoenix
#

Maybe a mockup can help?

local cf = Card.func -- Save the existing function in a variable
function Card:func(x, y, z) -- Override the existing function
    --do stuff before the function
    cf(self, x, y, z) -- Call the original function from the save you made
    --do stuff after the function
end
snow vale
#

i dont even know that exists

daring fern
snow vale
#

o

#

then

#

how do i check if it's ace

maiden phoenix
#

card:get_id() == 14

snow vale
#

a

#

ok

#

ty

#

still unexpected symbol near for

#

is it the _

maiden phoenix
#

Can you show your full code?

snow vale
slow brook
maiden phoenix
snow vale
#

so then what's my error

maiden phoenix
#

Remove the ,

snow vale
#

e

slow brook
#

ok and if i want to check for both jokers and playing cards do i need to do 2 different hooks?

snow vale
#

vruu

lament sparrow
#

Does anyone know why this doesn't show the flavour text?

    id = "c_gaff_tapered",
    key = "tapered",
    set = "Tarot",
    pos = { 
        x = 0, y = 0 
    },
    loc_txt = {
        name = "Tapered",
        text = {
            "Enhances {C:attention}#1#{} selected",
            "card into a",
            "{C:attention}#2#",
        }
    },```
maiden phoenix
#

I'm not sure if it works on playing cards

maiden phoenix
# snow vale

Remove the break and move the end after the returned table

#

When you return something it stops the function entierly so break is useless

snow vale
#

oh

#

kk ty

spice wadi
#

im using the vanilla remade implementation for blueprint-style jokers and this crashes my game in the collection, which checks specifically should i use to prevent this

maiden phoenix
#

Check if G.jokers and G.jokers.cards exists

#

They don't if outside a run

snow vale
#

another thing, how do i do so it checks the entire played hand, not only the scored hand

maiden phoenix
#

Check for context.full_hand

snow vale
#

ok

maiden phoenix
#

Careful tho it counts debuffed cards too

snow vale
#

nah i just want it to check if there's any ace

maiden phoenix
#

Oh ok

slow brook
maiden phoenix
#

Oh If I were you I'd avoid doing hooks inside a SMODS object

#

Do it outside the joker object

lament sparrow
#

How do I add the explainer box on the left?

maiden phoenix
#

In your loc_vars function you can add into info_queue

#

For example

#

(don't add the "elseif if _c.name == blabla, just the info_queue part)

slow brook
#

or i dont need card

maiden phoenix
#

It's on any juice_up tho no?

slow brook
#

yeah

maiden phoenix
#

Hold on I'm gonna type my idea out

maiden phoenix
# slow brook yeah

You put this outside your joker object

local cju = Card.juice_up
function Card:juice_up(scale, rot_amount)
    SMODS.calculate_context({modprefix_juice_up = true})
    return cju(self, scale, rot_amount)
end

Then in your joker's calculate function you add

if context.modprefix_juice_up then...
#

Not sure if it's better to put the calculate_context before of after the original function call, it's up to you to experiment

lament sparrow
#
        name = "Tapered",
        text = {
            "Enhances {C:attention}#1#{} selected",
            "card into a",
            "{C:attention}#1#{} tapered card"
        info_queue[#info_queue + 1] = G.P_CENTERS[card.ability.mod_conv]
        }```
So, where do I add in info_queue? I want to explain what the tapered does to a card.
maiden phoenix
maiden phoenix
# slow brook

Try adding return nil, true at the end of your new context?

lament sparrow
hard mica
#

if anyone can find the solution to this problem then i would appreciate it alot

maiden phoenix
wind steppe
#

why doesn't my achievement text show up? (its just ERROR)
part of the localization file:

    misc = {
        achievement_descriptions = {para_deathbypineapple = 'Snack on some pineapple slices.'},
        achievement_names = {para_deathbypineapple = 'Best idea you\'ve ever had!'},
maiden phoenix
#

Try replacing self.config.extra by card.ability.extra?

maiden phoenix
lament sparrow
hard mica
maiden phoenix
lament sparrow
#

I'm planning to make another card modifier at some point. But, for now, I just want to add it into the enhancement section

maiden phoenix
wintry swallow
#

trying to make a new consumable type for my mod. how do i change the name of the set

maiden phoenix
wintry swallow
maiden phoenix
slow brook
# maiden phoenix Send your thing's full code and the override
local cju = Card.juice_up
function Card:juice_up(scale, rot_amount)
    SMODS.calculate_context({pvz_juice_up = true})
    return cju(self, scale, rot_amount)
end 

SMODS.Joker {
    key = 'spring_bean',
    rarity = 2,
    cost = 5,
    atlas = "Jokers",
    pos = {x=3,y=1},
    config = { extra = {  chips = 0, chips_gain = 10 } },
    unlocked = true,
    discovered = true,

    calculate = function (self, card, context)
            local bean = card.ability.extra.chips
            local gain = card.ability.extra.chips_gain
            if context.pvz_juice_up then
                bean = bean + gain
                return nil, true
            end
    end,

    on_plant_food_use = function(self,card)
    end,

    can_use_plantfood = function (self, card, context)
        return false
    end,
}
#

ignore the on_plant_food_use and can_use_plantfood

maiden phoenix
# wintry swallow no

In your SMODS.ConsumableType thing add

loc_txt = {
        name = 'Thing',
         collection = 'Thing Cards',
        undiscovered = {
            name = 'Not Discovered',
            text = {
                "Purchase or use",
                "this card in an",
                "unseeded run to",
                "learn what it does"
            },
        },
    },
maiden phoenix
slow brook
lament sparrow
#

This is fine, but I want a box on the left explaining what tapered does as an enhancement.

maiden phoenix
maiden phoenix
keen totem
#

is there a list of all the "card.ability.extra" vars you can have?

wind steppe
#

why isn't my achievement granting?
where it should be granting:

check_for_unlock({type = 'ach_para_deathbypineapple'})
lament sparrow
maiden phoenix
lament sparrow
#

Cause I haven't done that yet

maiden phoenix
#

Oh

#

Then yea ig

wind steppe
maiden phoenix
#

Godamnit discord

maiden phoenix
# slow brook

Try disabling your mod optional features just to test this out?

elfin stratus
#

i tried

#

i suck at drawing

#

and balancing

slow brook
maiden phoenix
#

Does your mod have optional features for retriggers or allowing new card area?

slow brook
#

pretty sure it doesn't

wind steppe
# elfin stratus i tried

does this mean that if the 1 in 2 chance hits its 50/50 between 2.75 and 0.75 or 1 in 2 chance to hit 2.75 otherwise 0.75

#

if its the latter reword it

elfin stratus
maiden phoenix
snow vale
#

how can i make so cards are considered wild cards (they dont transform into wild cards)

wind steppe
#

how do i relock an achievement

#

for testing purposes

snow vale
wind steppe
#

too slow

snow vale
#

wdym

spice wadi
snow vale
wind steppe
#

its a modded achievement

slow brook
snow vale
daring fern
snow vale
#

oh

#

so then how do i hook?

#

waikt

#

imma search docs

slow brook
wind steppe
maiden phoenix
#

@slow brook Try replacing the juice_up hook by this

local cju = Card.juice_up
function Card:juice_up(scale, rot_amount)
    if G.jokers and G.jokers.cards then
        SMODS.calculate_context({pvz_juice_up = true})
    end
    cju(self, scale, rot_amount)
end
elfin stratus
#

is this better?

snow vale
maiden phoenix
wind steppe
elfin stratus
#

now

#

how do i balance this

wind steppe
#

you don't

#

this is the new baron mime

snow vale
slow brook
tall jewel
#

Made something that may be helpful to some people WinkWink

#

these are like minecraft's extended tooltips

#

if anyone has anything theyd like for it, lemme know

#

(please im terrible with ideas)

elfin stratus
#

im gonna try the joker with blueprint + mime

maiden phoenix
#

Tho some jokers do trigger on wild card enhancement..

snow vale
#

i think

#

im gonna

#

just give it a diff use

elfin stratus
#

can i give myself vouchers with debug+?

snow vale
#

what use do i give to a crayon card

snow vale
#

(this card)

slow brook
tall jewel
maiden phoenix
snow vale
#

i love this idea tbh

elfin stratus
snow vale
#

how do i do so when i select a blind the joker deletes the leftmost consumable?

tall jewel
#

3

#

while in the collections menu

hybrid shadow
keen totem
#

do Xchips exist in the base game or do i have to custom code that

maiden phoenix
#

SMODS adds it

keen totem
#

nice

slow brook
hybrid shadow
daring fern
maiden phoenix
#

Ooh I get it

hybrid shadow
maiden phoenix
#

You're modifying the local value, not the card value

modern kindle
#

thats extra, just be in the shop and spawn the voucher the same way you do a joker

maiden phoenix
#

Try card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.chip_gain

slow brook
daring fern
snow vale
#

how do i do so when i select a blind the joker deletes the leftmost consumable?

hybrid shadow
modern kindle
#

if you are in shop and spawn a voucher the same way you do a joker it puts it in the shop for you

#

then just give yourself the 10 bucks to buy it

keen totem
#

its not the same as just typing chips instead of mult like i thought itd be

maiden phoenix
#
return {
  Xchips = value
}
#

Same as the vanilla stuff

maiden phoenix
hybrid shadow
elfin stratus
#

holy shit, i found the best joker naturally

red flower
#

x_chips and xchips work but Xchips doesn't

maiden phoenix
#

Actually all of those work

red flower
#

read it again

maiden phoenix
keen totem
maiden phoenix
keen totem
#

cause it wasnt before i removed _mod

maiden phoenix
#

Yea avoid using _mod values

keen totem
#

i mean

#

its useful if its actually meant to remove vanilla messages

red flower
slow brook
elfin stratus
#

now that i realize, wouldnt this be too broken?

#

it would always return x2.75 mult

maiden phoenix
hard mica
#

how can I add a for loop for each seal or card with seal randomize the seal value?

keen totem
slow brook
keen totem
#
    loc_vars = function(self,info_queue,card)
        return {vars = {card.ability.extra.Xchips, card.ability.extra.chips}}
    end,
    calculate = function(self,card,context)
        if context.joker_main then
            return {
                    card = card,
                    chips = card.ability.extra.chips,
                    Xchips = card.ability.extra.Xchips,
                }
        end
    end
}
#

why aint the xchip

#

did i forget to change it

#

im going insane

#

i changed it in the wrong place

slow brook
keen totem
#

multiple things work

maiden phoenix
red flower
#

i will pr this to smods if no one has and i didnt break anything

maiden phoenix
#

Isn't enhancement in preview hand already possible?

red flower
#

yeah i pr'd that

maiden phoenix
#

o

red flower
#

i mean the styling

maiden phoenix
#

What's the diff?

#

Oh ok

red flower
#

so it doesnt say {C:attention}text

maiden phoenix
#

That's cool

slow brook
snow vale
#

how can i make a scaling card?

red flower
#

you dont know what a moon is

maiden phoenix
maiden phoenix
slow brook
red flower
#

zebra grass with moon

maiden phoenix
#

Can't believe you had to actually do that

snow vale
maiden phoenix
slow brook
maiden phoenix
#

Grass with zebra colors

red flower
snow vale
#

does :destroy() exist?

red flower
slow brook
maiden phoenix
maiden phoenix
slow brook
maiden phoenix
#

Check if context.scale exists before comparing it

#

Not every juice_up has set param iirc

maiden phoenix
snow vale
#

ok

frigid blaze
#

Does anyone have a font for the legendary jokers?

slow brook
maiden phoenix
#

Show your calculate code again

slow brook
maiden phoenix
#

Maybe remove the return nil, true

analog spoke
slow brook
maiden phoenix
#

I think the chips of your joker is fetched before the juice_ups

#

So yea not much you can do

slow brook
maiden phoenix
#

The addition of chips*

slow brook
#

how do i make a consumable have a message where it is and not on the corner of the screen

pure salmon
#

the shader applies, but the "shine" present on edition cards (and the cryptid edition decks) doesn't

#

is cryptid using a different rendering on the edition decks? they sway and tilt when you hover over them, which isn't something that backs normally do

daring fern
keen totem
#

whats the G.GAME for mult?

#

cant you get mult through G.GAME?

pure salmon
daring fern
#

It's just mult

keen totem
#

ah

#

but theres a G.GAME for chips?

slow brook
#

where can i find a documentation about attention_text for consumables

daring fern
keen totem
#

is the chips just chips

wild escarp
#

What am I doing wrong here that it doesn't destroy cards?

calculate = function(self, card, context)
    if context.before then
        for k, v in ipairs(context.scoring_hand) do
            if v.seal or v.edition or next(SMODS.get_enhancements(v)) then 
                G.playing_card = (G.playing_card and G.playing_card + 1) or 1
                local copy_card = copy_card(v, nil, nil, G.playing_card)
                copy_card:add_to_deck()
                G.deck.config.card_limit = G.deck.config.card_limit + 1
                table.insert(G.playing_cards, copy_card)
                G.hand:emplace(copy_card)
                copy_card.states.visible = nil

                G.E_MANAGER:add_event(Event({
                    func = function()
                        copy_card:start_materialize()
                        return true
                    end
                }))
                if context.destroy_card and context.cardarea == G.play then 
                    return {
                        message = localize('k_copied_ex'),
                        colour = G.C.CHIPS,
                        func = function()
                            G.E_MANAGER:add_event(Event({
                                func = function()
                                    SMODS.calculate_context({ playing_card_added = true, cards = { copy_card } })
                                    return true
                                end
                            }))
                        end,
                        remove = true
                    }
                end 
            end
        end
    end
end
keen totem
daring fern
keen totem
#

what in the non conforming variable naming in this

daring fern
keen totem
#

so we have G.GAME.chips, hand_chips, mult

#

two of which are the same thing

#

and are differently named

slow brook
keen totem
#

and two of which are also the same thing

#

and are differently named

daring fern
keen totem
#

i get the differentiation

daring fern
keen totem
#

but making the thing for hand chips and mult the same wouldve made way more sense

slow brook
red flower
#

change used_tarot for card probably

slow brook
red flower
#

why is your third argument card

#

it's an area

slow brook
red flower
#

consumeable makes sense if you get confused, but card should be area there

#

but yeah put consumeable or whatever you have in the second argument in the place of used_tarot

slow brook
#

works now :D

keen totem
#

what does this mean

red flower
#

uninstall talisman

keen totem
#

i keep getting this after i changed a - to a +

red flower
#

whats the code

keen totem
red flower
#

you need to handle comparisons and stuff properly

keen totem
#

i do not have an 1837th line

#

none of my mods do

#

nor does the base game

red flower
#

no thats in the game's code

#

common_events line 1094

#

in your lovely/dump

#

but im not asking for that anyway, i want to see your code

keen totem
#
    loc_vars = function(self,info_queue,card)
        return {vars = {card.ability.extra.Xmult, card.ability.extra.mult}}
    end,
    calculate = function(self,card,context)
        if context.joker_main then
            local change = card.ability.extra.mult
            if to_big(mult+change) <= to_big(0) then
                change = 1-mult
                if to_big(change) > to_big(0) then
                    change = 0
                end
            end

            return {
                card = card,
                mult = change,
                Xmult = card.ability.extra.Xmult,
            }
        end
    end
}
#

to_big(mult+change)

keen totem
wind steppe
#

what condition would i use for my achievement such that it only triggers when you lose due to a specific joker? unlock_condition always being true grants it on startup

red flower
#

i dont think its necessary

keen totem
#

it didnt crash without the plus sign

red flower
#

thats not what i asked

keen totem
#

also the mult can be a talisman number too

#

so it kinda has to be a to_big

red flower
#

oh its global mult

#

what's the effect?

keen totem
#

negative + mult

#

-5 mult to be specific

#

and i dont want the total score going negative

#

so i make it go to 1 if its anywhere from 0 to 5

wind steppe
keen totem
#

or ever

wind steppe
#

pineapple allergies

#

siffrin found dead on ante 6

keen totem
#

fair enough

#

make death by banana

#

when you die while using a banana joker

wind steppe
#

banana peel joker

#

slippery

red flower
keen totem
#

its not big

#

its -5

red flower
#

1 - mult is a bignum

#

unless im reading it wrong

keen totem
#

any - mult is bignum?

#

really?

red flower
#

mult is a bignum with talisman

#

so, a table

keen totem
#

talisman handles all the compatibility minus comparisons tho right?

#

so mult+change would be fine

red flower
#

idk

#

ive seen it have problems with returns

#

because those do comparisons

wintry solar
#

I don't think talisman ever patched the code that handles the calculation so returning a bignum will crash

lapis night
#

anyone know the best way to change tarot values during runtime? Aka something like a joker that increases Hermit's max money

wind steppe
#

on creation of the joker loop through all consumables and modify the values of any hermits

limber blaze
#

values below -e308 just becomes -naneinf

#

but theres other strange things that happen

wind steppe
#

does anybody know how to trigger my achievement only at one specific time?

SMODS.Joker{ -- Pineapple implementation
    key = 'pineapple',
    config = { extra = {
        xmult = 3
    }
    },
    pools = { ["Food"] = true },
    rarity = 1,
    cost = 2,
    blueprint_compat = true,
    eternal_compat = false,
    perishable_compat = false,
    rental_compat = false,
    loc_vars = function(self,info_queue,card)
        return {vars = {card.ability.extra.xmult}}
    end,
    calculate = function(self, card, context)
        if context.joker_main then
            return {
                xmult = card.ability.extra.xmult
            }
        elseif context.end_of_round then
            G.STATE = G.STATES.GAME_OVER
            G.STATE_COMPLETE = false
            check_for_unlock({type = 'deathbypineapple'}) -- should trigger here and only here
        end
    end
}
-- Technically in different files. Doesn't really matter
SMODS.Achievement{
    key = 'deathbypineapple',
    hidden_name = false,
    hidden_text = true,
    bypass_all_unlocked = false,
    earned = false,
    unlocked = false,
    reset_on_startup = true,
    unlock_condition = function(self, args)
        return true
    end
}
limber blaze
#

alsoo im pretty sure you can return big stuff

#

depends what specifically youre providing a bignum too but for things like Xmult im pretty sure it works

#

i dont have anything that should natively return a bignum without modifications so idk how true this actually is but ive done a lot of stuff with value manipulation for things that definitely return mult and it worked fine

#

check_for_unlock should work here you need to test for the type in unlock_condition though

tall jewel
#

would it be possible to create a button (like the buy/use button) using a DrawStep?

keen totem
#

whats the reference to the table of jokers you have?

#

im gonna hope that its a G. something

daring fern
keen totem
#

but i havent found the docs for G. yet

keen totem
red flower
wintry solar
keen totem
#

ok

#

how do i get the name of a card

red flower
#

card.config.center.key gives you the key

#

unless you need the localized name

keen totem
#

no

#

this is code stuff, not player UI stuff

wind steppe
keen totem
#

im making a Yin Yang card, and it can only spawn if you have both

limber blaze
keen totem
#

should i make the Yin & Yang card destroy the actual cards of Yin and Yang when bought

limber blaze
#

you can atleast in lua 5.4 since i tried it just now

#

but idk how well that holds up

#

in 5.1

#

it will probably be janky if the big value is to_big(1) but like idk if it will crash

keen totem
#

when do i do stuff on a joker being bought?

#

is it just done or is it a calculate and a context?

daring fern
keen totem
#

like the joker itself, not just any joker

red flower
#

add_to_deck

red flower
#

we are deving

keen totem
#

is context.destroy_card for doing stuff when a card is destroyed or to destroy a card?

wintry solar
#

to destroy a card

#

context.remove_playing_cards is for when a card is destroyed

wind steppe
#

why doesn't my achievement pop up when it triggers?

SMODS.Joker{ -- Pineapple implementation
    key = 'pineapple',
    config = { extra = {
        xmult = 3
    }
    },
    pools = { ["Food"] = true },
    rarity = 1,
    cost = 2,
    blueprint_compat = true,
    eternal_compat = false,
    perishable_compat = false,
    rental_compat = false,
    loc_vars = function(self,info_queue,card)
        return {vars = {card.ability.extra.xmult}}
    end,
    calculate = function(self, card, context)
        if context.joker_main then
            return {
                xmult = card.ability.extra.xmult
            }
        elseif context.end_of_round then
            G.STATE = G.STATES.GAME_OVER
            G.STATE_COMPLETE = false
            check_for_unlock({type = 'deathbypineapple'}) -- should trigger here and only here
        end
    end
}
-- Technically in different files. Doesn't really matter
SMODS.Achievement{
    key = 'deathbypineapple',
    hidden_name = false,
    hidden_text = true,
    bypass_all_unlocked = false,
    earned = false,
    unlocked = false,
    reset_on_startup = true,
    unlock_condition = function(self, args)
        return args.type == 'deathbypineapple'
    end
}
wintry solar
modern kindle
red flower
modern kindle
#

Something sake with the moon
Da heck are those

red flower
modern kindle
#

Damn you could hold a whole suit in your hand and fan it out with ease

keen totem
#
for i,v in G.jokers.cards do
                if v.config.center.key == "Yin" then
                    if context.destroy_card then
                        
                        return true
                    end
                end
                if v.config.center.key == "Yang" then
                    
                end
            end

i got no clue here on what the syntax for destroying a card is

red flower
floral spindle
#

does anyone know where I could get all the letters/font for the legendary jokers?

wild escarp
#

They aren't all the same.

red flower
keen totem
floral spindle
#

it's just uppercase/lowercase

keen totem
wind steppe
#

you could copy it pixel by pixel ig

#

probably not the fastest way but i dunno if theres another

floral spindle
keen totem
#

and its different aint it

wild escarp
#

Look at the Es in perkeo

daring fern
keen totem
#
add_to_deck = function(self, card, from_debuff)
        if from_debuff == false then
            local hasDestroyedYin = false
            local hasDestroyedYang = false
            for i,v in ipairs(G.jokers.cards) do
                if v.config.center.key == "j_CGN_Yin" and not hasDestroyedYin then
                    v:start_dissolve()
                end
                if v.config.center.key == "j_CGN_Yang" and not hasDestroyedYang then
                    v:start_dissolve()
                end
            end
        end
    end,

is this right for destroying Yin and Yang jokers when I get a joker?

red flower
#

yeah

#

i dont know if from_debuff is strictly false tho

keen totem
#

does spawning it with DebugPlus not activate add_to_deck or what?

red flower
#

it should

keen totem
red flower
keen totem
#

ill print

#

but nil values are false

red flower
#

try if not from_debuff instead

red flower
#

not strictly false

keen totem
#

falsy

red flower
#

false-y

keen totem
#

oh

red flower
#

oh multiboxes work here????

#

thank you eremel

wintry solar
#

❤️

#

they need an empty one iirc to splits from teh chips fully

red flower
#

yeah i was about to test that

keen totem
keen totem
red flower
#

theyre cool i use them for my jokers

wintry solar
#

they have colour support too

keen totem
#

is X1.5 Chips (or Mult) for a $6 uncommon fair?

wind steppe
keen totem
#

yea

wind steppe
#

i'd say so

keen totem
#

and then if you find Yin & Yang, you get X2 Chips & Mult

#

but you need to be holding Yin and Yang in your jokers

wind steppe
#

feels a little weak for needing two other jokers

keen totem
#

yea

wind steppe
#

what do yin and yang do individually?

keen totem
#

X1.5

wind steppe
#

and is the x2 on top (so x3) or replaced

keen totem
#

replaced

#

and its X2 Chips AND X2 Mult

#

so X4

#

unless youre using ^ jokers from other mods

wind steppe
#

x2 chips on one and x2 mult on the other or x2 chips and x2 mult on both

keen totem
#

Yin has 1.5X chips, Yang has 1.5X mult, Yin & Yang has 2X chips & 2X mult

wind steppe
#

oh yin and yang together is one joker

#

thats balanced

keen totem
#

yes

#

should i make it so you also have to find Yin&Yang

#

or make it so you get it if you have both

wind steppe
#

definitely the latter

keen totem
#

unconditional X4 mult becomes ass once you have to find 3 seperate jokers for it

#

2? its fine because thats the condition

wind steppe
#

unconditional* x3 mult is in vanilla with 2 commons anyways and a bit of probability

keen totem
#

how do i make a joker impossible to find naturally, just inpool always returning false?

red flower
wind steppe
#

why doesn't my achievement show up when i get it? (i still hear the sound though)

SMODS.Joker{ -- Pineapple implementation
    key = 'pineapple',
    config = { extra = {
        xmult = 3
    }
    },
    pools = { ["Food"] = true },
    rarity = 1,
    cost = 2,
    blueprint_compat = true,
    eternal_compat = false,
    perishable_compat = false,
    rental_compat = false,
    loc_vars = function(self,info_queue,card)
        return {vars = {card.ability.extra.xmult}}
    end,
    calculate = function(self, card, context)
        if context.joker_main then
            return {
                xmult = card.ability.extra.xmult
            }
        elseif context.end_of_round then
            G.STATE = G.STATES.GAME_OVER
            G.STATE_COMPLETE = false
            check_for_unlock({type = 'deathbypineapple'}) -- should trigger here and only here
        end
    end
}
-- Technically in different files. Doesn't really matter
SMODS.Achievement{
    key = 'deathbypineapple',
    hidden_name = false,
    hidden_text = true,
    bypass_all_unlocked = false,
    earned = false,
    unlocked = false,
    reset_on_startup = true,
    unlock_condition = function(self, args)
        return args.type == 'deathbypineapple'
    end
}
keen totem
#

i do kinda hate spamming this channel with questions

#

but the SMODS docs arent done and are difficult to find anything in

#

(if it even HAS docs)

wind steppe
#

the whole point of the channel is to ask questions anyways

keen totem
#

so ima ask how to spawn cards

#

even tho its prob easy

keen totem
wind steppe
red flower
#

check SMODS.add_card in the docs :3

wind steppe
#

add_card takes the same parameters as create_card btw

keen totem
#

should i make Yin&Yang have no edition or let it do that

wind steppe
#

inherit higher-ranked edition from yin/yang respectively

keen totem
#

ooh thats a good idea

wind steppe
#

idk how you check which one's higher ranked though

keen totem
#

yea

#

random works

keen totem
#

eh ill just make it random

odd shadow
#

I FOUND OUT WHY MY MOD DIDNT WORK

#

I SPELT ASSETS WRONG

#

LMAOOOO

unreal cosmos
#

idea for card enhancement:
Waxed Lightly Weather Cut Copper Card
1 in 2 chance to add a random enhancement to an adjacent card. If not, destroy the card

keen totem
#

cause idk what the t means

#

is that supposed to be a tuple or a table or what?

wind steppe
#

example:

SMODS.create_card({set = "Food", area = G.pack_cards, skip_materialize = true, key_append = "does rng seeding matter that much?", stickers = {'para_negativesticker'}})

creates a random food joker with the negative sticker (note i added the negative sticker)

red flower
#

vanillaremade uses add_card if you need an example

wind steppe
#

add_card is prob better

keen totem
wind steppe
wind steppe
keen totem
#

but how do i do that

wind steppe
#

put in a string so it won't generate the same cards as other sources

#

eg. judgement does this so its not the same as the shop

keen totem
#

just use any string?

wind steppe
#

the specific string doesn't matter, i could put the bee movie script if i wanted

red flower
#

and also it allows you to check for it in in_pool

keen totem
wind steppe
#

no

keen totem
#

your achievement is clearly a ghost

#

why does:start_dissolve()not destroy the joker running the code for it

#

and how do i make it do that

#

wait

#

its not even running it

#

it makes a card, then when that card gets made, it should destroy the card that made the card

wintry solar
#

use SMODS.destroy_cards(card)

keen totem
#

its a joker btw

#

and it worked before it was making the card

#

so i think it has to do with it still needing to run code

unreal cosmos
#

Galvanized Steel Card
+$20 while held in hand, BUT X0.9 chips

keen totem
#

(even tho its just a bunch of ends)

wintry solar
#

use SMODS.destroy_cards(card)

wind steppe
wild escarp
#

How would I make this copy the cards twice?

calculate = function(self, card, context)
    if context.before then
        for k, v in ipairs(context.scoring_hand) do
            if v.seal or v.edition or next(SMODS.get_enhancements(v)) then
                card.ability.trigger = true
                G.playing_card = (G.playing_card and G.playing_card + 1) or 1
                local copy_card = copy_card(v, nil, nil, G.playing_card)
                copy_card:add_to_deck()
                G.deck.config.card_limit = G.deck.config.card_limit + 1
                table.insert(G.playing_cards, copy_card)
                G.hand:emplace(copy_card)
                copy_card.states.visible = nil

                G.E_MANAGER:add_event(Event({
                    func = function()
                        copy_card:start_materialize()
                        return true
                    end
                }))
            end
        end
    end
    if card.ability.trigger == true and context.destroy_card and context.cardarea == G.play and 
    (context.destroy_card.seal or context.destroy_card.edition or next(SMODS.get_enhancements(context.destroy_card))) then
        return {
            message = localize('k_copied_ex'),
            colour = G.C.CHIPS,
            func = function()
                G.E_MANAGER:add_event(Event({
                    func = function()
                        SMODS.calculate_context({ playing_card_added = true, cards = { copy_card } })
                        return true
                    end
                }))
            end,
            remove = true
        }
    end
end
keen totem
wintry solar
#

maybe it's not in the latest release?

keen totem
#

or has no doc

wind steppe
keen totem
#

but it should be on the utilities page

red flower
#

latest release is like 3 weeks old

keen totem
#

and its not

wind steppe
#

documentation is... lacking

keen totem
#

it should be on a page that DOES exist

tall jewel
#

very

faint yacht
#

Latest "release" is 0509c, whilst SMODS.destroy_cards was added by 0518a.

wild escarp
keen totem
#

i have 0330a

#

why is my steamodded so old

wind steppe
#

you should update steamodded NOW

keen totem
#

nahh

faint yacht
keen totem
#

i fixed it without your silly new steamodded

#

just like windows, i will never update it

red flower
keen totem
#

😦

#

fine

tall jewel
#

just run it twice

keen totem
#

what the hell

#

my game just closed

#

didnt even crash

wind steppe
#

balatro left work

#

done for the day

wild escarp
tall jewel
#

huh

#

just copy_card again

tall jewel
#

anyways im trying to either run a calculate function on a button/ui element press OR smods.calculate_effect (either work, I just want to display a message on a specific card (not the card with the button))

#

how would I go about doing that?

#

Cache the cards that need to be calculated and run it next frame or something?

lament sparrow
#

Does anyone have mods that I can check out that have not just consumables, but their enhancements?

tall jewel
#

cause nothing happens when i run it

wild escarp
#

Whatever you do, don't look at cryptid for a reference.

lament sparrow
tall jewel
#

it doesn't use smods anyways

wind steppe
odd shadow
#

im so close bro i need help

wind steppe
tall jewel
#

honestly id love to have an animation of the joker flying into the card used

#

that'd work too

#

(it's a harpy, and it eats playing cards for +mult)

lament sparrow
wind steppe
lament sparrow
#

yeah

#

I'm trying to create gaff consumables with their own card modifiers

odd shadow
red flower
wind steppe
#

it has a custom consumable type but none of those custom consumables apply enhancements

red flower
tall jewel
#

instead of turning them into stone cards im thinking of just debuffing them for like, 5 hands

hollow snow
#

guys i came here for help, if i need to get a keypress but only once, to set a keybind, what can i use for that? i can't use keypressed because it would override the game's keypressed for escape to menu

odd shadow
#

do i add a comma at line 26 or smth

wild escarp
red flower
hollow snow
odd shadow
#

ok

#

sorry for doing this again, but i cant find whats wrong

wild escarp
#

Can we see up to line 28?

hollow snow
#

i think you should provide better images

#

but the message implies you maybe forgot to close the config braces

odd shadow
tall jewel
#

dont use +mult

#

just mult

odd shadow
#

ok

wild escarp
#

Comma after the position as well.

hollow snow
#

remember everything in the same level will need a comma unless it's the last element

red flower
#

also please install the lua extension

rapid stag
#

...why does self.ability not exist in this context? cirLost

red flower
#

idk but i like your screenshots they look nice

wintry solar
rapid stag
wintry solar
#

No

#

You should add a card arg

rapid stag
#

and then do card.ability?

wintry solar
#

And then add self in the function call

rapid stag
#

so i pass self into the card arg and do card.ability? OkuuThink

wintry solar
#

Yes

wintry solar
limber lagoon
#

Hey, I'm trying to attempt to mod in something that plays "invisible" by Duran Duran whenever I get the invisible joker, and that it stops when it's not in my joker pile. I'm using the following code as an example:

SMODS.Sound({
vol = 0.6,
pitch = 1,
key = "music_flush_five",
path = "aoc.ogg",
select_music_track = function()
return (G.GAME and G.GAME.blind and (G.GAME.blind.config.blind.boss and G.GAME.blind.config.blind.boss.showdown)) and 2 or false
end,
})

rapid stag
# wild escarp bump

yes, enclose your card copying code in a loop that runs twice - then to take that into account for your card added calculate call, instead make a table that populates with those card copies as you create them in the loop and pass that as your card created table OkuuNODDERS

limber lagoon
#

Like the Get function

wild escarp
tall jewel
merry grove
#

can i ask a stupid question

wild escarp
#

Yep

merry grove
#

is there any way i can get a sound to stop playing after the blind is finished

limber lagoon
#

Can I ask a question about coding here?

last sentinel
#

Yes

limber lagoon
#

SMODS.Sound({
pitch = 1,
key = "music_Duran_Duran",
path = "music_Invisible.ogg",
sync = false,
select_music_track = function()
return next(find_joker("j_invisible"))
end,
})

#

Would j_invisible be correct for the invisible joker?

split saddle
red flower
limber lagoon
#

Ah thank you!

limber lagoon
red flower
limber lagoon
vale glen
#

You might want to return a number for music priority too, but dunno how that works exactly

wild escarp
#

Currently, if I have two of these jokers, only one applies eternal to the card on its right, how can I fix it?

calculate = function(self, card, context)
    if G.jokers and G.jokers.cards then
        local other_joker = nil
        local eternal_joker = nil
        for i = 1, #G.jokers.cards do
            if G.jokers.cards[i] == card then 
                eternal_joker = G.jokers.cards[i+1] 
                if eternal_joker then
                    eternal_joker:set_eternal(true)
                end
            end
            if G.jokers.cards[i] ~= eternal_joker then
                other_joker = G.jokers.cards[i]
                other_joker:set_eternal(nil)
            end
        end
    end
end
last sentinel
#

For a custom seal, what do i need to check in the calculation function to have the effect only apply once the card scores? I'm in context.main_scoring at the moment but the effect is triggering on all cards with the seal immidately upon play

split saddle
#

what do i pass onto it?

#

i'm guessing card, ???, false but idk

red flower
split saddle
#

or self, card, false

red flower
split saddle
#

debuff a joker from another joker

red flower
#

oh then dont use that thats for blinds

#

use this

split saddle
#

where is that in the wiki?

red flower
#

utility functions

last sentinel
split saddle
#

does calculate() run every frame?

#

as in, putting something there will assure it gets updated

vale glen
#

Using the update function might be better for that

split saddle
vale glen
#

vs_kotomi_shrug Never used it before, Axy doesn't usually run things every frame

#

What are you trying to do, anyways?

keen totem
#

how do i get hands and discards?

keen totem
split saddle
#

well, update a joker's effect every frame (who could've guessed)

#

specifically, when moving a joker from its position

keen totem
#

amount of frames passed since the function or game (cant remember which) booted up

vale glen
#

Ah, so each frame you'd check if the card's position changed, then do things

#

That makes sense

keen totem
split saddle
#

something to do with G.GAME.Hands or smth

#

let me check

vale glen
split saddle
split saddle
vale glen
crisp coral
#

there's a function in CardArea for moving cards between slots

#

but if it's moving to anywhere in the game field then good luck

elfin stratus
#

do you guys like this?

vale glen
# split saddle sorry but i didn't understand a thing you said 😅

Uhhh... The former table is the visual transform, the values the card takes if it's smoothly moving from one spot to another. The latter table is the actual transform, where it actually is in the code, while the visual card is smoothly moving to the desired position.

split saddle
#

no, i meant as in moving between slots

vale glen
#

Ouh

split saddle
#

this is what i want to do:

#

the joker disables all jokers to the left of it, so i want to know where is it, when and what to disable. disabling is already kinda sorted out.

vale glen
keen totem
#

(for anyone searching this)
how do i find hands left G.GAME.current_round.hands_left
how do i find discards left G.GAME.current_round.discards_left

vale glen
keen totem
#

yea

#

im making the greatest joker ever

vale glen
#

Good, now future searchers would know that too

keen totem
#

atp i should make it a rare with Xchips and mult

#

+2 mult is so ass

keen totem
#

what

split saddle
#

that's why i'm thunking doing it every frame

vale glen
#

Dunno, depends on when you want the joker to do that

split saddle
#

it's supposed to be an "active" effect

#

as in it is always happening

vale glen
#

After main scoring so the other cards can play once before they're debuffed, or maybe before and add a juice up to surprise users, or during main joker scoring so it could be optionally disabled by another joker

#

Or maybe just when added to deck, so it doesn't try to check jokers every frame

#

Or maybe check whenever that card changes position, and find that CardArea function someone else mentioned

split saddle
vale glen
#

Then you'll want to find that function in the cardarea Lua, and hook that

#

Dunno what it is though, because am on phone and don't have a lovely dump downloaded

split saddle
#

it's ok, i'm looking into it

#

thx

rugged helm
#

how do i check if the player is in a blind

split saddle
signal rose
carmine burrow
wild escarp
#

Anyone know why this plays the sound once for each card? I'd like it to play only once.

calculate = function(self, card, context)
    if context.joker_main then
        local toDestroy = 0
        for i = 1, #context.scoring_hand do
            if context.scoring_hand[i]:get_id() < 9 then
                toDestroy  = toDestroy + 1
            end
        end
        if toDestroy > 0 and not context.blueprint then
            card.ability.extra.chips = card.ability.extra.chips + (toDestroy * card.ability.extra.chip_gain)
        end
        return {
            chips = card.ability.extra.chips
        }
    end

    if context.destroy_card and context.cardarea == G.play and not context.blueprint then
        if context.destroy_card:get_id() < 9 then
            card.ability.extra.message = true
            return {
                remove = true
            }
        end
    end
    if not context.after and card.ability.extra.message == true then
        return { 
            G.E_MANAGER:add_event(Event({
                func = function()
                    card:juice_up(0.8, 0.8)
                    play_sound('slice1', 0.96 + math.random() * 0.08)
                    card.ability.extra.message = false
                    return true
                end
            }))
        }
    end
end
split saddle
#

if i remember correctly, there's a joker in Jen's Almanac that does something similar and only works on context.before for updating, so maybe what i want to do doesn't work

split saddle
carmine burrow
#

i assume that might be why jen's almanac does it on context.before

split saddle
#

sadge

carmine burrow
pulsar flower
vale glen
#

If both of them were imaginary, multiplying the two imaginaries might still work

#

Just remove the imaginary term

split saddle
#

what is the pointer to a card's edition?

keen totem
pulsar flower
#

long time no see

vale glen
#

Munyah?

#

We both have alb as a friend, no way

#

Wait how do you know Axy

split saddle
pulsar flower
#

you were in calldontwork for a while

keen totem
vale glen
#

Whaaaa, you know Jeff too

#

Ahhh

#

Things went badly there due to private reasons, so uh

wheat jewel
#

Does anyone have any tips on how to make all suits count as the same, i tried looking at smeared joker works but it seems to run a function dedicated towoards how smeared joker works

wheat jewel
#

all i know is that might be how the game will make clubs and spades for example be the same thing

#

idk what documentation to look at

#

within SMODS

wild escarp
#

Is there a way to check if G.jokers.cards is a specific joker?

vale glen
split saddle
signal rose
# wheat jewel will take a look now
    if ((card.base.suit == 'Hearts' or card.base.suit == 'Diamonds') and (suit == 'Hearts' or suit == 'Diamonds')) then
        return true
    elseif (card.base.suit == 'Spades' or card.base.suit == 'Clubs') and (suit == 'Spades' or suit == 'Clubs') then
        return true
    end
    return false
end```
wheat jewel
split saddle
#

maybe change the name of the function so that it doesn't override

wheat jewel
#

yeah most likely

#

hold on lemme try to cobble it together within my mod lua script

signal rose
#

at that point if it makes all suits equal it doesnt even need to check, it can just return true

split saddle
#

so like

function allsuits
  return true
end
#

nevermind, suitless cards are a thing

#

you still need to check if the card has a suit

signal rose
#

wll you'd be checking if the suit is one of the four suits, and then if the other suit is one of the four suits, and unless another mod is interfering, thats always gonna be true, so really it just turns into a stone check

wheat jewel
#

i did something like this

#

idk if making custom functions work like this

#

that is at the start of my mod code

#

should i remove the smods part

split saddle
#

yeah that's most likely good

split saddle
wheat jewel
#

aiiight

#

Tysm ^^

signal rose
#

i'd remove the smods but yeah that would work

vale glen
vale glen
signal rose
#

that just wouldn't tbh

vale glen
#

Time to workshop it some more then, whee

signal rose
#

if you want it to fully work with custom i assume
if ((card.base.suit) and (suit)) then
might work lol

#

just checks if there is a suit at all since you're making all of them equal

red flower
signal rose
#

actually yeah that bypasses the whole function fair enough

wintry swallow
#

how do i get all currently visible hands

red flower
#

loop through G.GAME.hands and check which one is visible

#

they have a G.GAME.hands[name].visible property

split saddle
#

why does the game crash when checking a base card's edition?!?!

#

how do i prevent it?

signal rose
#

whats the crash message

red flower
#

and whats the code

split saddle
#

attempt to index 'edition' (nil value)

red flower
#

if the joker doesnt have an edition then .edition is nil

split saddle
#

apparently base edition cards have 'nil' edition

split saddle
#

how do i prevent that?

red flower
#

add it to the check

signal rose
#

do an if check beforehand

split saddle
#

if joker.edition ?

red flower
#

if not G.jokers.cards[1].edition or not G.jokers.cards[1].edition.negative then

split saddle
#

doesn't that return false if the card is base?

red flower
#

no

split saddle
#

i want to return true

red flower
#

it returns true

signal rose
#

if there is no edition or if the edition is not negative then

split saddle
#

i'm confused wait

signal rose
#

what do you want the condition to be?

red flower
#

if G.jokers.cards[1].edition and not G.jokers.cards[1].edition.negative then would be the opposite

#

if thats what you want

split saddle
#

i'm having brainfart syndrome wait

#

logic is hard

vale glen
#

Maybe learning Karnaugh maps would help

red flower
#

i have never done a karnaugh map outside school

signal rose
#

anyone worked with create_text_input() before? ive been looking at this for like 2 days and at this point i feel like i have to have overlooked something simple

vale glen
#

True, but it helps for parsing if statements like these

split saddle
#

so in the case of a base edition, it would be
if not nil and not false
and nil is a falsy value? is this correct

split saddle
verbal hare
nova epoch
#

yo im makeing a mod for the first time and ive been following this vid https://www.youtube.com/watch?v=Zp-4U5TlbxY
im at the part where they show how to get the joker art to appear but its just not appearing for me, could anyone tell me why

    key = 'Jokers',
    path = 'Jokers.png',
    px = 71,
    py = 95
}

SMODS.Joker{
    key = 'gamexplain',
    loc_txt = {
        name = 'GAMEXPLAIN',
        text = {
            'When a pair of Kings or jacks is in a scored hand,',
            'gain a {X:mult,C:white}X#1#{} Mult'
        }
    },
    Atlas = 'Jokers',
    pos = {x = 0, y = 0}
}
manic rune
#

-# i just got up from bed :3

verbal hare
signal rose
# manic rune whats the issue?

trying to use it as basically config modification, code is this:

palette_mod = SMODS.current_mod
function create_UIBox_palette_main_menu_settings()
    local t = create_UIBox_generic_options ({ back_func = 'palette', contents = {
        {n = G.UIT.C, config = { align = 'cm', id = 'palette_main_menu_settings_id' }, nodes = {
            create_text_input({
                w = 3, max_length = 6, prompt_text = 'Enter Hex Code', ref_table = palette_mod.config, ref_value = 'test', id = 'palette_main_menu_input',
                callback = function()
                    sendInfoMessage("Ran")
                end
            })
        }}
    }})
    return t
end```
i feel like i have to have overlooked something overly simple atp
manic rune
#

whats the issue

red flower
manic rune
#

like, is there anything wrong?

vale glen
# split saddle what's that

It's a tool taught in introductory logic courses, that lists out all possibilities for a set of variables, then finds the simplest way to express it using Boolean algebra (if statements). It's not actually a good idea in actual code, but it helps to learn how to read Boolean algebra in general.

signal rose
# manic rune whats the issue

its changing the value temporarily, but on restart it just resets, not sure how to get it to actually save in the smods config since usually i dont use create_text_input

split saddle
red flower
#

basically

manic rune
#

oh, configs

#

i would suggest checking the keyboard controller mod on example mod

nova epoch
manic rune
#

it also uses text input to save configs

red flower
nova epoch
#

ok thx lemme see if this works

manic rune
#

mhm

signal rose
#

ill take a look now, thanks for the help :)

red flower
#

hi bepis

manic rune
#

hi N

#

i just woke up

red flower
#

good morning

manic rune
#

idk why its the exact time you pinged me too

#

so

#

sob

red flower
#

well im going to bed

#

so its a baton pass

manic rune
#

sob

#

yeah i will try helping everyone here, gn 👋

vale glen
#

Good luck xD

manic rune
#

good luck indeed

red flower
#

also everyone play joyousspring i just added koi koi

vale glen
#

Yay, joi koi

split saddle
#

attempt to index edition (nil)

vale glen
#

What does your code look like

manic rune
#

^

split saddle
#

it's just an if statement

#

if not G.jokers.cards[i].edition and not G.jokers.cards[i].edition.negative then
this is what N gave me

manic rune
#

it shouldnt crash there

red flower
#

thats not what i gave you

manic rune
#

wait

#

shouldnt it be or

#

not and

split saddle
#

i'm 15/10 confused i'm sorry

red flower
manic rune
#

nvm

split saddle
#

ok hold it for a second

manic rune
#

god let me wake up first, i think my brain is half loading rn

vale glen
#

Remove the first not in your code

red flower
#

do you want it to count base cards or not

split saddle
#

i want to pass for every card, except for negative cards. what is the correct solution

#

sorry for being kinda slow :(

red flower
split saddle
#

it finally didn't crash yay

#

thank you

nova epoch
#

just had to unlock it with debugs

verbal hare
#

can someone help me in dm with my code?

hardy viper
#

chat do i shill

signal rose
# manic rune mhm

thank you so much, that actually worked really well (i had been overcomplicating it a lot)

keen totem
#

how do i get a pseudorandom value?

keen totem
#

and is it possible to use the run seed?

red flower
#

it uses the run seed by default, that's the point of pseudorandom yes

keen totem
#

is "seed" the run seed or do i leave it blank to use the run seed?

red flower
#

but you give it an individual seed to have different rng sources

red flower
#

it uses both

split saddle
#

does the game not juice up debuffed cards?

keen totem
#

btw what do you use to check if a card is a certain suit?

manic rune
#

it should

keen totem
#

its just like :isSuit() right?

manic rune
#

:is_suit("Diamonds")

split saddle
manic rune
#

let me check

#

im pretty sure :juice_up works on all objects

split saddle
#

wait nevermind

#

i'm juicing the wrong thing

manic rune
#

sob

keen totem
#

to make my own probability local var (for text), would i do

update = function(self,card,dt)
  card.ability.extra.baseProb = G.GAME.probabilities.normal
end
manic rune
#

you dont need update

#

just return G.GAME.probabilities.normal or 1 in loc_vars

#

-# the or 1 is important because it can be nil

keen totem
#

cant that change

#

thats the entire point isnt it

manic rune
#

yes that will change

keen totem
#

that oops can affect it

manic rune
#

yes

#

you dont want that?

vale glen
#

Hm... Still wondering what part of the Card object stores the atlas for the card itself, like the visuals for 2 of Hearts and all that. Axy wants to adjust the visuals for playing cards when scored, but not their actual values or any enchancements or similar.

keen totem
wooden nexus
#

Posted this in the modding chat, need dev thoughts: is 50/50 chance of spectral and tarots good enough?

manic rune
#

no, its checking if G.GAME.probabilities.normal exists, if its not then it will be set as 1

wooden nexus
manic rune
#

actually, you might want some more nil checks

keen totem
# manic rune no, its checking if G.GAME.probabilities.normal exists, if its not then it will ...
config = { extra = {
        baseProb = G.GAME.probabilities.normal or 1,
        overallChance = 4,
        diamonds = 2,
        spades = 50,
        clubs = 7,
        heartsChance = 2,
        heartsMult = 1.5,
    }
    },
    loc_vars = function(self,info_queue,card)
        return {vars = {
            card.ability.extra.baseProb,
            card.ability.extra.overallChance,
            card.ability.extra.diamonds,
            card.ability.extra.spades,
            card.ability.extra.clubs,
            card.ability.extra.heartsChance,
            card.ability.extra.heartsMult,
        }}
    end,
#

is this right

manic rune
#

(G.GAME and G.GAME.probabilities and G.GAME.probabilities.normal) or 1

#

yes, return that in loc_vars vars

vale glen
#

Oh, because it's in loc vars, so those objects may not exist

#

Am curious at which point the first two might not exist

manic rune
#

outside of a run, checking collections there, i think

vale glen
#

Ah

split saddle
#

how does making custom blinds work? are there any resources (similar to this video that are easy to follow)?

manic rune
split saddle
#

i don't think the raw documentation is very easy to follow, imo

#

i guess i'll work with what i have

manic rune
#

it is, you will have to get used to it :p

split saddle
#

how do you even summon a blind for testing??

manic rune
#

debug plus

split saddle
#

i have it

manic rune
#

press 3 on the blind

split saddle
#

ok

lucid owl
#

why is my info_queue for a modded enhancement crashing the game 🥀

vale glen
#

Why are you passing in a table

#

...wait, can you display a card inside a card description

manic rune
#

yes

vale glen
#

Omg

split saddle
manic rune
#

use main_end

lucid owl
vale glen
#

:o

#

That's cool

#

Not sure what to use that for but

lucid owl
#

okay using G.P_CENTERS.m_fmod_raffle_card works

vale glen
#

Never thought of sending more than just styled text in there

lucid owl
#

the table is for specific stuff i realize, while the G.P_CENTERS method puts the description and everything it inherits

heady quail
#

Ok, weird question. Im working on a texture pack, and while working on the consumables ive been editing Tarots.png right? I can change the Tarot and Spectral cards just fine, but for some reason it isnt changing the planet cards?

#

Is there some kind of lua that I have to edit SPECIFICALLY just for the planets somehow?

#

Because as far as I can tell, the only place the textures exist in the files is Tarot.png

placid star
heady quail
#

I mean I'll check, but I cant imagine there is, no other texture has needed multiple commands to divy up sections of a single file?

nova epoch
#

yo me again so i understand to get the game to check what rank the card is but how do i get it to check hat hand it is

#

i need it to check for a pair of jacks or kings

split saddle
vale glen
vale glen
manic rune
#

while card refers to the instance the code is running on specifically?

keen totem
#

how broken do you think that all gems combined (Onyx Agate, Bloodstone, Rough Gem, and Arrowhead) but 1/4 chance to proc at all is?

#

cause it seems even right

manic rune
#

only bloodstone and rough gem really matter

keen totem
#

but think about it

#

wild cards

manic rune
#

yes but +chips and +mult dont matter as much

keen totem
#

i mean

#

if the + mult triggers first

#

you are getting some use compared to Xmult

manic rune
#

if you have enough hand levels then eh

keen totem
#

it needs an order to trigger in

manic rune
#

i still think only bloodstone and rough gem are the good effects

#

if you have like flush lv 30 then +mult wont even matter anymore