#💻・modding-dev

1 messages · Page 612 of 1

fluid steppe
#

oh.

#

they're not objects parented to the joker are they

red flower
#

no

fluid steppe
#

fuck

willow scroll
#

is there a context for entering the blind select screen

red flower
#

no but there's one for exiting the shop which might be the same

willow scroll
#

since i literally do not get how to get it to not reset after clicking the cash out button at the end of round screen

willow scroll
red flower
#

check for the state maybe

#

i think it's G.STATES.BLIND_SELECT or something like that

willow scroll
#

yeah thatd work

#

evil hook where i modify what happens when you click the cash out button :clueless:

fluid steppe
#

maxbo-ism

gusty compass
#

Can I bump an issue that seems to be some sort of conflict between my mod and the multiplayer mod?

primal robin
#

yes

gusty compass
#

Alr one sec

slim ferry
#

im pretty sure thats a fantoms preview issue

#

which comes baked into multiplayer

gusty compass
#

I'll give that a test

primal robin
#

Yes it is

gusty compass
#

Since the issue seems to be apparent when my mod comes into play

primal robin
#

It's incompatibility with latest smods and MP preview

gusty compass
#

Oh

#

Well that would be a nice patch later in the future

#

Yea it works but now I might just fix the phantom edition spawning from my deck effect

daring fern
#

willow scroll
#

ts pmo 🥀

clear ocean
#
check_for_unlock = function(self, args)
  return args.type == 'win_deck' and get_deck_win_stake('b_checkered') > 1
end

is there a reason why it isnt unlocking?

daring fern
clear ocean
#

I could do that in a moment doing some excersing with the wiifit

final jewel
willow scroll
final jewel
#

yeah probably

#

But im trying to switch my upgrade check to the card itself so people can implement them by easily

feral tree
#

is it possible to have a enhancement detect if it returns to the deck?

vale zinc
#

Red Card kicks in when the player skips a Booster Pack. Is there any way to tell what kind of Booster Pack is being skipped?

daring fern
daring fern
vale zinc
willow scroll
#

i have no idea where in the code the change back to normal is coming from

wintry swallow
#

is there a way to force a specific boss blind order in a challenge deck besides just banning unwanted blinds? for example, making the manacle always the ante 1 boss, the wall always the ante 2 boss, psychic ante 3, etc.

wind steppe
#

yes

#

hold on let me get the code

wind steppe
# wintry swallow is there a way to force a specific boss blind order in a challenge deck besides ...
        G.GAME.perscribed_bosses = {}
        G.GAME.perscribed_bosses[1] = 'bl_fish'
        G.GAME.perscribed_bosses[2] = 'bl_flint'
        G.GAME.perscribed_bosses[3] = 'bl_house'
        G.GAME.perscribed_bosses[4] = 'bl_wall'
        G.GAME.perscribed_bosses[5] = 'bl_serpent'
        G.GAME.perscribed_bosses[6] = 'bl_psychic'
        G.GAME.perscribed_bosses[7] = 'bl_final_heart'

essentially set G.GAME.perscribed_bosses (not typo) to a table containing each ante's boss

slim ferry
#

utdr code spotted

#

i love the deck that stops you from rerolling prescribed bosses for some reason

lime pendant
#

are yall aware of any mods that handle music in smart ways? (changing tracks at certain times, overriding vanilla music behavior, properly looped tracks etc)

The base steammodded implementation is barebones at best

final jewel
#

I just want to add that to the vanilla seal 😭

red flower
obsidian spear
slim ferry
#

whats even wrong with select_music_track

#

i dont see whats so barebones about it

red flower
#

hotpot has a ton of music tracks

#

lobcorp is the only one i know that extends music functionality to sync lyrics

fluid steppe
#

dk why eternals not modified

#

but it should be fine

#

ittl look a lil jank but ehhh

daring fern
clear ocean
final jewel
lime pendant
fluid steppe
#

does this

#

just like w/ eternal

#

ideally the entirety of the stickers' displays would be rotated 90°

red flower
#

are you sending the rotation to draw_shader

fluid steppe
#

yea

#

wait no

#

no im not

fluid steppe
#

doesnt work on anything but perishable and rental afaict

red flower
#

maybe eternal is drawn somewhere else?

fluid steppe
#

yea and all modded stickers

final jewel
#

Whyyyyyyy 😭
When I select a card with no seal it crash the game but if I select a card with a seal and one with no seal it doesnt crash

fluid steppe
#

READ THE CRASHLONG

#

WHICH ONE'S LINE 122

#

ah shit caps lock

final jewel
#

if G.P_SEALS[selected_card:get_seal()].giga_data.seal_upgrade then

#

its this line but I dont understand

fluid steppe
#

giga_data might not exist sometimes

#

do if G.P_SEALS[selected_card:get_seal()].giga_data and G.P_SEALS[selected_card:get_seal()].giga_data.seal_upgrade

willow scroll
fluid steppe
#

ohh true

willow scroll
#

and then indexing on the nil value

final jewel
#

oh so I add a condition like if G.P_SEALS[selected_card:get_seal()].giga_data

willow scroll
#

because thing[nil] doesnt exist

fluid steppe
#

ok do uh

#

if selected_card:get_seal() and G.P_SEALS[selected_card:get_seal()].giga_data.seal_upgrade

final jewel
#

ok

turbid solstice
#

Am I cooking (I know it doesn't exactly follow tarot card "rules"

fluid steppe
#

you know what?

#

make its number negative

#

-I

final jewel
# fluid steppe ok do uh
if selected_card:get_seal() and G.P_SEALS[selected_card:get_seal()].giga_data and 
G.P_SEALS[selected_card:get_seal()].giga_data.seal_upgrade then

Thats the full condition btw

turbid solstice
#

final !

normal crest
#

woof

civic solstice
#

its time for hell again

#

my shit still dont work lol

vale zinc
#

May anyone tell me why active_message returns "nil"?

config = {
    extra = {
        odds = 4,
        ready_to_sell = false,
        active_message = localize {
            type = 'variable',
            key = 'k_lapsems_when_ready',
            vars = {
                localize('k_active_ex')
            }
        }
    }
}
red flower
#

i think localization is not loaded at that point

#

even if it was it wouldn't work when changing languages

vale zinc
#

When does localization kick in?

red flower
#

after the game finishes loading but that's not important here
you want to localize at the point you want to use the text, not before

civic solstice
#

why isnt the code transfering properly to the trib ingame im so confused

#

i dont think i did anything wrong

civic solstice
red flower
#

is it just acting like vanilla or something else

civic solstice
#

i want the trib to be modified so instead of just kings and queens it uses jacks as well and before you say to use the is_face() thing i tried that it just broke trib entirely

vale zinc
civic solstice
red flower
civic solstice
#

it acts like normal

#

kings and queens work fine just not the jacks

red flower
#

do you have debugplus

civic solstice
#

yeah'

red flower
#

yeah no idea take_ownership is evil

civic solstice
#

okay im probably gonna scrap all the joker modifications i was gonna do

#

if take_ownership doesnt wanna work

#

i do have these ideas as well but like how do i code the majority of this LOL

vale zinc
civic solstice
#

awesome

#

mines actually based off of agent 47

vale zinc
#

Mine's gonna be some unassuming guy holding up a pistol, à la Juggler/Drunkard.

frosty rampart
vale zinc
frosty rampart
#

that's fair too

civic solstice
#

dyslexia makes shit hard LOL

#

i tried making the jokermancy thing in jokerforge its time to painstakingly figure out how to make it not crash just to display the card ingame

#

oh dear god i am so fucked

#

okay i have the custom pool and an if statement that tracks when a joker is sold

#

i assume i have to get the joker key and add it to the pool

rocky plaza
rocky plaza
#

if true 🔥

civic solstice
#

im tryna learn via the lua website but im dyslexic and can barely read any of it lmao

willow scroll
civic solstice
#

^

rocky plaza
civic solstice
rocky plaza
#

oh

#

hmmm

civic solstice
#

even then im not very adept at scratch so

rocky plaza
#

ok

#

so your joker will need a config field

#

if it doesnt have one already

civic solstice
#

it does

rocky plaza
#

because we need to track which jokers have been sold

#

config = {extra = {sold_joker_keys = {}}}

#

the {} basically tells lua that the data is stored in the form of
key: value

rocky plaza
civic solstice
#

loops yes lists not as much

#

but i have a relative idea of how lists work

rocky plaza
civic solstice
#

okay yeah

rocky plaza
#

and so u can access a particular item

#

by using list[2]

#

to get the 2nd item

#

in the case of lua
lists start counting at 1

#

other languages count from 0 for lists

civic solstice
#

mhm

vale zinc
#

You can also use 'em like dictionaries in Python.

config = {
    extra = {
        odds = 4,
        ready_to_sell = false,
    }
}

card.ability.extra.odds -- returns "4"
#

That's pulled from my Orange Juice I showed earlier.

rocky plaza
# civic solstice mhm

in lua
the expression {}
indicates an empty table
which can act as either a list or a hashmap (which is not what we need right now, though lua lists act as hashmaps under the hood)

civic solstice
#

sounds ab right

rocky plaza
civic solstice
#

ya

rocky plaza
#

to access a joker's config values you would check
card.ability.extra

civic solstice
rocky plaza
#

okok

#

so if we set config = {extra = {sold_joker_keys = {}}}
as our initial config table
then card.ability.extra.sold_joker_keys
will initially be an empty table

civic solstice
#

i have this if statement

#

that hopefully will track when a joker is sold

#

i think

rocky plaza
civic solstice
#

ah

rocky plaza
#

the relevant one is context.selling_card

civic solstice
#

okay gotchu gotchu

rocky plaza
# civic solstice okay gotchu gotchu

so inside the calculate function

if context.selling_card and context.card.ability.set == "Joker" and not context.selling_self and not context.blueprint then
    -- the code inside here will only trigger if a Joker that is not this Joker is sold (provided this effect is not being triggered because of a Blueprint-like effect
end
civic solstice
#

alright

rocky plaza
#

hopefully im not being too overwhelming

civic solstice
#

no its chill

#

i actually like how youre explaining what everything means here

obsidian spear
#
            local jokers_to_create = math.min(card.ability.extra.cards, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer))
            G.GAME.joker_buffer = G.GAME.joker_buffer + jokers_to_create
            G.E_MANAGER:add_event(Event({
                func = function()
                    for _ = 1, jokers_to_create do
                        SMODS.add_card {
                            set = "Bitter",
                            key_append = 'NxkooBreeder'
                        }
                        -- card:add_to_deck()   -- these two are probably not needed, not the issue tho
                        -- G.jokers:emplace(card)
                        G.GAME.joker_buffer = 0
                    end
                    return true
                end
            }))

why does this cause the crash bad argument #1 to 'ipairs'
theres no ipairs

and the issue is not that the mod prefix isnt in set isnt the issue since I've tried both

theres also a bunch of different jokers in the set so thats also not a problem

#

is this another moment where i've looked over smth

rocky plaza
#

like the trace

obsidian spear
#

dont ask about the key_append 🥰

willow scroll
obsidian spear
#

ill check if the crash is different with the prefix in set

obsidian spear
willow scroll
#

NOT THE HORSE

obsidian spear
#

horse'd

rocky plaza
willow scroll
#

💥

obsidian spear
rocky plaza
obsidian spear
#

istg do i need some SMODS.objectpool or smth

rocky plaza
obsidian spear
#

fml

#

i prolly should of looked harder

rocky plaza
#

read this

obsidian spear
#

i do have another issue thats similar i think

#

lemme get the code

#

nvm

#

i just forgot to finish the code

#

how do i get the center_pool for every consumable

rocky plaza
obsidian spear
#

where is this in vremade?

rocky plaza
rocky plaza
#

vremade is a gift given by god to humanity

obsidian spear
#

god being N'

#

my brain is mush i may need extra help implementing

rocky plaza
obsidian spear
#

no with finding if its consumable

#

wait

#

no yes

#

no wait

#

getting all cards that are consumable

rocky plaza
obsidian spear
#

yes

rocky plaza
#

i see

obsidian spear
#

specially 2

#

but doesnt matter

#

heres the entire calculate function

    calculate = function(self, card, context)
        if context.end_of_round then
            -- main if statement
            for _=1, card.ability.extra.cards  do
                -- card will look like {card = key, negative = boolean}
                if #G.consumeables.cards + G.GAME.consumeable_buffer >= G.consumeables.config.card_limit then
                    -- check for space
                    goto continue
                end
                
                local other_card = SMODS.create_card({ key = pseudorandom_element(G.P_CENTER_POOLS[""], "glitchkatcard").key, area = G.consumeables })
                other_card:set_edition("e_polychrome")

                -- so we can skip the card incase
                ::continue::
            end
        end
    end```
rocky plaza
#

hold on im testing something

obsidian spear
#

alr

#

take your time

rocky plaza
obsidian spear
#

i got other bugs i can fix in the mean time

rocky plaza
#

checking if something here is relevant

obsidian spear
#

yea

#

i just sent it

#

lololo

rocky plaza
#

and if i think it works how it works

red flower
obsidian spear
#

thank you thunder edgeee

obsidian spear
obsidian spear
red flower
#

i am shigure ui

obsidian spear
#

🙏

red flower
#

set = "Consumables"

obsidian spear
#

right

rocky plaza
#

oh i think its the misspelled version for the set

obsidian spear
#

bit more than usual

#

should of only created 4 since i have bitter copying him

#

thats a bit odd

#

could be bitter shenanigans

rocky plaza
obsidian spear
#

yea i accidentally used create_card

rocky plaza
#

also wtf are u doing with goto

#

i understand what is going on

#

but why

obsidian spear
#

wdym goto

civic solstice
#

this is a funny idea for a legendary joker dont yall think

obsidian spear
#

skipping

#

ig i could make it return

#

wait

#

no

#

its a loop

#

i have to skipp to the end

obsidian spear
#

but its not that much mult

#

since it wont be retriggered as much as photograph or baron can

civic solstice
#

and that wastumok would be one of those

obsidian spear
#

well its not that good though...

#

but if you think its right then its good

civic solstice
#

i can buff it

obsidian spear
#

true

rocky plaza
obsidian spear
#

you'd need to buff it through different means

rocky plaza
#

because context.end_of_round is called multiple times

obsidian spear
#

ohhhhhhhh

#

okay ty again thunnderrrrr

civic solstice
obsidian spear
#

yea thats about right

rocky plaza
#

context.main_eval ensures that end of round effects only trigger once

obsidian spear
#

okay cool

#

ill remember that i hope

rocky plaza
#

in other words what do yall think about this sticker

obsidian spear
#

hmmm

#

yea

#

its hard to use but in a good way

#

makes you use hands you probably wont use if you're getting rid of cards that are in that hand

rocky plaza
obsidian spear
#

yesssssss

rocky plaza
#

i wish people capitalized on this more

#

they dont have to strictly be negative

obsidian spear
#

i think i forgot a return

#

just maybe

#

its also all jimbo

rocky plaza
obsidian spear
#

no idea

rocky plaza
obsidian spear
#
local other_card = SMODS.add_card({ set = "Consumeables", area = G.consumeables })
                        other_card:set_edition("e_polychrome")```
rocky plaza
#

unless this is a different thing

obsidian spear
#

uhm

#

cuz of variable?

rocky plaza
#

no...

obsidian spear
#

uhm

rocky plaza
#

are they actually jimbos

obsidian spear
#

lemme just add the return

rocky plaza
#

i know that sometimes people use the default jimbo sprite as placeholder sprite

obsidian spear
#

that uhm

#

main_eval btw

#

oh i see

#

but that doesnt bhelp

#

should move this

obsidian spear
#

better so it doesnt accidentally create more than should be possible

#

but doesnt make sense on the multiple

rocky plaza
# obsidian spear main_eval btw
calculate = function(self, card, context)
    if context.end_of_round and context.main_eval then
        for i = 1, math.min(card.ability.extra.cards, G.consumeables.config.card_limit - #G.consumeables.cards - G.GAME.consumeable_buffer) do
            -- create cards here
        end
    end
end
#

try this???

obsidian spear
#

oh problem

#

its waiting for there to be room for jokers ithink

#

bro 😭

rocky plaza
#

bruh

obsidian spear
#

could you join cold beans so i can show you?

rocky plaza
obsidian spear
#
    calculate = function(self, card, context)
        if context.main_eval then
            -- main if statement
            G.GAME.joker_buffer = G.GAME.joker_buffer + card.ability.extra.cards
            for _=1, card.ability.extra.cards  do
                -- card will look like {card = key, negative = boolean}
                if #G.consumeables.cards + G.GAME.consumeable_buffer >= G.consumeables.config.card_limit then
                    -- check for space
                    goto continue
                end

                G.E_MANAGER:add_event(Event({
                    func = function()
                        local other_card = SMODS.add_card({ set = "Consumeables", area = G.consumeables })
                        other_card:set_edition("e_polychrome")
                        G.GAME.joker_buffer = G.GAME.joker_buffer - 1
                        return true
                    end
                }))

                -- so we can skip the card incase
                ::continue::
            end
        end
    end
vale zinc
#

Wait, what's the ::continue:: used for? I've never seen anything like that in Lua!

still isle
obsidian spear
#

cat :3

still isle
#

ilovecars

obsidian spear
#

it just skips to the next thingy

#

thats same name

#

its used in alot of coding langs

red flower
#

using goto instead of not is crazy

rocky plaza
obsidian spear
rocky plaza
#

theres a better way to do this without goto

#

surely

still isle
civic solstice
vale zinc
#

Does Cliphtonyke function like Splash?

civic solstice
#

yes and no?

#

like you can play any and all cards you have in your hand like you dont have to worry about the selection limit

#

but it wont give a splash effect if you use it

#

so like

#

if you play a hearts flush and you have 2 spades in there the spades wont trigger

#

but the other hearts do

obsidian spear
#
    calculate = function(self, card, context)
        if context.main_eval then
            -- main if statement
            G.GAME.joker_buffer = G.GAME.joker_buffer + card.ability.extra.cards
            for _=1, card.ability.extra.cards  do
                -- card will look like {card = key, negative = boolean}
                if #G.consumeables.cards + G.GAME.consumeable_buffer <= G.consumeables.config.card_limit then
                    G.E_MANAGER:add_event(Event({
                        func = function()
                            local other_card = SMODS.add_card({ set = "Consumeables", area = G.consumeables })
                            other_card:set_edition("e_polychrome")
                            G.GAME.joker_buffer = G.GAME.joker_buffer - 1
                            return true
                        end
                    }))
                end

                -- so we can skip the card incase
                -- ::continue::
            end
        end
    end
obsidian spear
soft pier
#

Mega stupid idea

obsidian spear
#

bitter mod

obsidian spear
soft pier
#

Wild cards have the effects of every enhancement, edition, and seal

#

(Minus negative)

still isle
obsidian spear
#

bitter mod

still isle
#

link pls :3

obsidian spear
#

its buggy

#

i will tho

still isle
#

if buggy its oke :)

obsidian spear
still isle
#

thank woo

civic solstice
#

what do we think

#

also any other ideas for pnostia i have none LOL

civic solstice
obsidian spear
#

<@&1133519078540185692>

terse merlin
#

<@&1133519078540185692>

gray void
obsidian spear
gray void
#

I mean

#

Nope to the images

#

Immolate such images

obsidian spear
#

real

#

we should flood the images away with random dev questions

obsidian spear
#

I mean i've used them but like how do they work

gray void
obsidian spear
#

dev questions idiot

gray void
#

Okay okay

ashen drift
#

why is "attempt to index local 'center' (a nil value)" popping up when i use card:set_ability to enhance a card

wind steppe
#

let's for loop

obsidian spear
#

lets for loop?

#

for

ashen drift
#

4 loops

gray void
#

4 for loops made of of fours for looping the four 4s

obsidian spear
#

for for for for

ashen drift
#
                    if not result_area.cards[1] then crrd = SMODS.create_card { set = "Base", enhancement = resultenhancement, rank = resultrank, area = result_area } 
                    G.playing_card = (G.playing_card and G.playing_card + 1) or 1
                    table.insert(G.playing_cards, crrd)  
                    G.result:emplace(crrd) else 
                        crrd = result_area.cards[1] 
                        crrd:set_ability(resultenhancement)
                    end
#

this is the snippet of code causing it specifically

obsidian spear
#

its a bug with smods i think

#

n' told be one time

#

or was it eremel

#

lemme get it

ashen drift
#

that sucks

obsidian spear
#

cant find

#

just like set it outside of create card

#

also you should use add_card instead so you can remove table insert and emplace

ashen drift
#

ill just try to put the actual center as the arguement

#

okay it completely breaks drawing hands for no reason

obsidian spear
#

odd

#

well now I have a balala question, how do I set the seal, edition and enhancement of a chosen playing card

ashen drift
#

im doing```lua
crrd:set_ability(G.P_CENTERS[resultenhancement])

obsidian spear
#

uuh

#

again i dunno im also needing to set enhancement

ashen drift
#

and the game shits itself

#

i think the not drawing cards was caused by something else which is weird

#

okay i checked the dump and im more confused now

#

supposedly its crashing at line 281, which is ```lua

if center.name == "Half Joker" and (center.discovered or self.bypass_discovery_center) then 
    H = H/1.7
    self.T.h = H
#

but previous code also indexes the center

#

so its just breaking here for no reason

#

isnt that how you get them

obsidian spear
#

then do

j_modprefix_jokerkey

ashen drift
#

oh nevermind i troubleshotted it

#

yeah i was looking at the wrong thing LOL

obsidian spear
#

lolll

ashen drift
#

card:set_seal("seal_key"), card:set_ability("enhancement_key"), card:set_edition("edition_key")

obsidian spear
#

tyyy ampll,e

obsidian spear
#
calculate = function(self, card, context)
        if context.playing_card_added then
            print(context.cards)
            for _, other_card in pairs(context.cards) do
                SMODS.change_base(other_card, pseudorandom_element{SMODS.Suits}, pseudorandom_element{SMODS.Ranks})
                other_card:set_seal(pseudorandom_element{G.P_CENTER_POOLS.Seal})
                other_card:set_edition(pseudorandom_element{G.P_CENTER_POOLS.Edition})
                other_card:set_ability(pseudorandom_element{G.P_CENTER_POOLS.Enhanced})
            end
        end
    end

why does this crash?

obsidian spear
#

thats from lovely or smods

#

not my mod

#

@lucid owl ?

lucid owl
obsidian spear
#

i've checked through them and a majority is from tangents, aiko or from my own hooks

#

okay well its the seal's fault ig

#

oh

#

its cause i didnt add .key

#

new crash log Thumbs

#

this isnt right...

#

that line is for half joker

lucid owl
#

actually insane to test your mod with aiko and tangents installed

obsidian spear
#

and aiko cuz i forgot to change it

lucid owl
obsidian spear
#

uuh

lucid owl
#

like are you checking vanilla source or the card.lua found in the lovely dump

obsidian spear
#

lovely dump

#

@lucid owl is it alright for me to ping reply?

lucid owl
#

yea

obsidian spear
#

ight

lucid owl
#

send the full file

#

that's crashing

obsidian spear
#

you mean the joker?

lucid owl
#

cause i'm not sure what you're really trying to do and your stack trace is a bit fucked up

lucid owl
#

unless you have everything in one file

#

ig just send the section if so

obsidian spear
#
SMODS.Joker {
    key = "yandev",
    
    loc_txt = {
        name = "Yandare Dev",
        text = {"Added playing cards have everything {C:,E:1}randomized"}
    },
    pronouns = "he_him",

    blueprint_compat = false,
    config = { extra = {} },
    loc_vars = function(self, info_queue, card)
        return { vars = {}}
    end,

    atlas = 'JokeJokersAtlas',
    pos = { x = 4, y = 0 },

    rarity = "Bitters_baddev",
    cost = 6,
    pools = {["BitterPool"] = true},

    calculate = function(self, card, context)
        if context.playing_card_added then
            print(context.cards)
            for _, other_card in pairs(context.cards) do
                SMODS.change_base(other_card, pseudorandom_element{SMODS.Suits}, pseudorandom_element{SMODS.Ranks})
                other_card:set_seal(pseudorandom_element{G.P_CENTER_POOLS.Seal}.key)
                other_card:set_edition(pseudorandom_element{G.P_CENTER_POOLS.Edition}.key)
                other_card:set_ability(pseudorandom_element{G.P_CENTER_POOLS.Enhanced}.key)
            end
        end
    end
}```

all on same file
lucid owl
#

probably separate your files eventually

obsidian spear
lucid owl
#

not by rarity

#

by individual joker

obsidian spear
#

thats a lotta files

lucid owl
#

nxkoo shouldn't have separated by rarity

lucid owl
obsidian spear
#

also the amount of jokers dont really matter since they take up 2 lines atleast

#

using ctrl-k -> ctrl-0 will collapse everything

lucid owl
#

how many hooks do you have on those functions

obsidian spear
#

which functions?

#

i have like 4 or so hooks

lucid owl
#

you could always try changing to a for i = 1, #context.cards do loop

lucid owl
obsidian spear
#

none

#

also the for loop isnt the problem

#

-# im pretty sure

lucid owl
#

oh, you'll probably want to use SMODS.poll_seal, poll_edition, etc

#

you may be setting variables incorrectly

lucid owl
obsidian spear
#

so how would I implement? instead of pseudorandomelement I'd do poll seal or smth?

lucid owl
#

separating into individual files makes things much easier to parse

obsidian spear
#

i want it to be completely random

#

not caring about weight

lucid owl
lucid owl
#

a bit weird

obsidian spear
#

which is why i have it be fully random

#

i guess i could just use poll

#

mmmm

#

if we cant find a way to fix it then i will

lucid owl
#

you never really gave detail on that aside from the vague starting crash message

obsidian spear
daring fern
# obsidian spear which is why i have it be fully random
if context.playing_card_added then
    for k, v in pairs(context.cards) do
        SMODS.change_base(v, pseudorandom_element(SMODS.Suits, 'seed').key, pseudorandom_element(SMODS.Ranks, 'seed').key)
        v:set_seal(pseudorandom_element(G.P_SEALS, 'seed').key)
        v:set_edition(pseudorandom_element(G.P_CENTER_POOLS.Edition, 'seed').key)
        v:set_ability(pseudorandom_element(G.P_CENTER_POOLS.Enhanced, 'seed').key)
    end
end
obsidian spear
#

omg

#

is it missing the seed

#

holy shit.

#

istg

#

okay okay it didnt matter

lucid owl
obsidian spear
#

it did have .key?

lucid owl
#

not suit and ranks

obsidian spear
#

ah

#

ill check

obsidian spear
#

nah nothing changed

#
    calculate = function(self, card, context)
        if context.playing_card_added then
            print(context.cards)
            for _, other_card in pairs(context.cards) do
                SMODS.change_base(other_card, pseudorandom_element{SMODS.Suits}.key, pseudorandom_element{SMODS.Ranks}.key)

                other_card:set_seal(pseudorandom_element{G.P_CENTER_POOLS.Seal}.key, 'yandev_s')
                other_card:set_edition(pseudorandom_element{G.P_CENTER_POOLS.Edition}.key, 'yandev_e')
                other_card:set_ability(pseudorandom_element{G.P_CENTER_POOLS.Enhanced}.key, 'yandev_a')
            end
        end
    end

current code

obsidian spear
#

a

lucid owl
#

i'm less familiar with math and its seed stuff

obsidian spear
#
    calculate = function(self, card, context)
        if context.playing_card_added then
            print(context.cards)
            for _, other_card in pairs(context.cards) do
                SMODS.change_base(other_card, pseudorandom_element{SMODS.Suits, 'yandev_suit'}.key, pseudorandom_element{SMODS.Ranks, 'yandev_rank'}.key)

                other_card:set_seal(pseudorandom_element{G.P_CENTER_POOLS.Seal, 'yandev_s'}.key)
                other_card:set_edition(pseudorandom_element{G.P_CENTER_POOLS.Edition, 'yandev_e'}.key)
                other_card:set_ability(pseudorandom_element{G.P_CENTER_POOLS.Enhanced, 'yandev_a'}.key)
            end
        end
    end

added the stuff, still no work

#

wait

#

the {}

#

okay it works

#

god damn that took far longer than it shouldve

vale zinc
#

For accomplishing something after cards in hand finish scoring but before Jokers begin scoring, would a patch be the easiest way to do it?

prisma loom
#

Folks, how do I make my custom rank to NOT have any suit or rank?

#

and make it so it's not a part of all decks by default

daring fern
daring fern
prisma loom
#

or to hooks.lua?

daring fern
prisma loom
latent perch
# prisma loom like this?

a hook is a redefinition of a function to include your own logic;

local function_ref = function_name
function function_name()
    local ret = function_ref()
    # your logic here
    return ret
end
#

so what you need is;

#
local smods_hnr_ref = SMODS.has_no_rank
function SMODS.has_no_rank(card)
  local ret = smods_hnr_ref(card)
  if card.base.rank == "your_rank_key" then
    ret = true
  end
  return ret
end
#

and the same for SMODS.has_no_suit

prisma loom
#

ic ic

#

on it👌

latent perch
#

not card.base.rank

daring fern
prisma loom
latent perch
#

oh wait no because stone cards

#

right

latent perch
# prisma loom 👌

replace if card.base.rank == "your_rank_key" then with the above card:get_id() == SMODS.Ranks['modprefix_key'].id

latent perch
#

if card:get_id() == SMODS.Ranks['modprefix_key'].id then that is ofc

slim ferry
#

Wouldnt that stack overflow

prisma loom
#

my games crashes

slim ferry
#

Because Card:get_id() calls SMODS.has_no_rank too

prisma loom
#

as well

slim ferry
#

Yeah thats kinda what i expected

prisma loom
prisma loom
#

instead of default +chips

#

Also it seems like it still doesnt ignore suits

#

I did smth wrong?

slim ferry
#

The display is not removed by has_no_suit

#

In the name

prisma loom
slim ferry
#

Handled in Card:generate_loc_vars

daring fern
slim ferry
#

I think

prisma loom
daring fern
daring fern
slim ferry
daring fern
prisma loom
#

in the lua file of the custom rank itself?

daring fern
daring fern
prisma loom
#

Got it right?

daring fern
prisma loom
#

also local ret got grey'ed out

#

do I need to return ret?

daring fern
prisma loom
#

I think I messed up returns

wintry swallow
#

is this overpowered ?

prisma loom
#

wording is wierd

wintry swallow
#

no, lose 1$

#

if its a high card

prisma loom
wintry swallow
#

ok

#

but u think it needs a nerf or its good?

prisma loom
#

and decide

#

I think it's alr for uncommon ig

wintry swallow
#

i will change the text and play some runs with

daring fern
# prisma loom

It should be function Card:get_chip_x_mult(context) and it should be self not card also move the 1.5 out of the table.

prisma loom
#

Im totally lost

wintry solar
#

what are you trying to do?

prisma loom
#

with no rank or suit

#

(basically a new rank)

prisma loom
#

It is a token created by a Joker

#

(added to your deck)

#

in SMODS.Rank there are no settings for no rank/no suit so it got complicated

wintry solar
#
local chip_x_mult_ref = Card.get_chip_x_mult
function Card:get_chip_x_mult(context)
  if self.base.id == SMODS.Ranks['hnds_creepycard'].id then
    return SMODS.Ranks['hnds_creepycard'].config.xmult
  end
  return chip_x_mult_ref(self, context)
end

and then put config = {xmult = 1.5} in your Rank definition

#

though you should probably just be using an enhancement for this, no?

slim ferry
#

Its supposed to be able to be enhanced too

prisma loom
#

yeah

#

it's a playing card

prisma loom
#

Or you meant quantum enhancements?

#

the ones that can be on card without taking ehn slot

#

iirc

wintry solar
#

I don't

prisma loom
wintry solar
#

regardless, the code I sent should work

wintry solar
#

try adding nominal = 0

prisma loom
prisma loom
#

or nominal = 0 is all I can use?

wintry solar
#

I don't think you can customise it

#

I've never worked with Ranks though

prisma loom
#

ic ic, thanks a lot regardless!balatroheart

latent perch
#
# generate_card_ui() patch '[rank] of [suits]' -> '? of [suits]'
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = '''localize{type = 'other', key = 'playing_card', set = 'Other', nodes = full_UI_table.name, vars = {localize(specific_vars.value, 'ranks'), localize(specific_vars.suit, 'suits_plural'), colours = {specific_vars.colour}}}'''
position = "at"
payload = '''localize{type = 'other', key = 'playing_card', set = 'Other', nodes = full_UI_table.name, vars = {((card.seal == 'uni_shattered' and '?') or localize(specific_vars.value, 'ranks')), localize(specific_vars.suit, 'suits_plural'), colours = {specific_vars.colour}}}'''
match_indent = true
#

This patch makes it so that a card with a certain seal displays '? of [suit]' instead of the rank

latent perch
#

adjusting it like so should make it work for suits;

# generate_card_ui() patch '[rank] of [suits]' -> '? of [suits]'
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = '''localize{type = 'other', key = 'playing_card', set = 'Other', nodes = full_UI_table.name, vars = {localize(specific_vars.value, 'ranks'), localize(specific_vars.suit, 'suits_plural'), colours = {specific_vars.colour}}}'''
position = "at"
payload = '''localize{type = 'other', key = 'playing_card', set = 'Other', nodes = full_UI_table.name, vars = {localize(specific_vars.value, 'ranks', (card.base.value == "your_rank_key" and "?" or localize(specific_vars.suit, 'suits_plural')), colours = {specific_vars.colour}}}'''
match_indent = true
#

<@&1133519078540185692>

#

thanks <3

latent perch
#

if you want just the rank name I'll have to dig a little deeper..

wintry solar
#

but that's a very destructive patch

prisma loom
latent perch
#

you might be able to hook generate_card_ui() instead

#

and set specific_vars.suit

wintry solar
#

ultimately, this specific effect sort of needs a new SMODS.PlayingCard class

latent perch
#

alternatively, you could add a check before this line

localize{type = 'other', key = 'playing_card', set = 'Other', nodes = full_UI_table.name, vars = {localize(specific_vars.value, 'ranks'), localize(specific_vars.suit, 'suits_plural'), colours = {specific_vars.colour}}}
#

like;

#
if card.base.value == "your_rank_key" then
  localize{..., nodes = full_UI_table.name, vars = {localize(specific_vars.value, 'ranks'), "", colours = {specific_vars.colour}}}
else
  localize{type = 'other', key = 'playing_card', set = 'Other', nodes = full_UI_table.name, vars = {localize(specific_vars.value, 'ranks'), localize(specific_vars.suit, 'suits_plural'), colours = {specific_vars.colour}}}
end
#

and have the upper localize point to a localization entry that mimics the playing card one

slim ferry
latent perch
#

just without the "of"

wintry solar
#

no eris, it's not a thing that exists

slim ferry
#

Ohhh

#

Like that

prisma loom
#

I feel like the latter should include rank settings

#

and have more options on top

slim ferry
#

Since every rank+suit combination has an entry in G.P_CARDS

#

Afaik

wintry solar
#

because nobody has made it

#

where as custom suits and ranks are much more likely to be wanted

vernal seal
#

hello again, another question that i want to ask:
how can i make the text color change with the custom value?

prisma loom
#

instead of just being one or the other

#

I hope this makes sense

slim ferry
#

Is how it works

#

Iirc

vernal seal
slim ferry
#

returned colours should be in a colours table in vars

wintry solar
#

and nobody has ever really needed an implementation of specific playing cards that aren't just suit + rank

prisma loom
#

make it into enhancement?

wintry solar
#

you either revise your aim so that it functions as an enhancement, or your program all the stuff you need yourself

#

but at this moment in time, the SMODS api can't really do what you're trying to do for you

prisma loom
#

never thought Id come across smth smods can't handle huh

wintry solar
#

there are lots of things smods can't do

#

it's far from being a complete api for modding

prisma loom
#

for Balala modding that is

wintry solar
#

a lot of people want quantum ranks but that is inherently scuffed imo

prisma loom
prisma loom
#

in terms of making hands

prisma loom
#

or at least it'll be hard to track

slim ferry
#

And it would be B:1 since its the first colour

#

<@&1133519078540185692>

wintry solar
#

<@&1133519078540185692>

slim ferry
#

Oh my god bruh

vernal seal
stoic void
#

how did i miss that when i was sitting right here

slim ferry
finite crow
#

how do i change the jimbo that pops up at the end of the run to a different joker sprite (more specifically one from my mod)

#

if that’s even possible

red flower
zealous glen
zealous glen
prisma loom
#

Its more about actually understanding what options you have at a given moment

#

Could be confusing

wintry solar
#

Quantum ranks absolutely is not a priority over other features

zealous glen
zealous glen
#

Unless you think Wild Cards are confusing

zealous glen
#

I’m totally unbiased balatrojoker

prisma loom
wintry solar
#

Those also aren’t widely requested features, they’re just things victin wants

prisma loom
#

Opposed to 13 ranks + face cards definitions

zealous glen
#

I don’t think it would be harder to understand if there were 60 suits

zealous glen
#

Or are trying to

#

The latter I only mentioned because Winter said she was going to try and implement it for a Credits page, and I realized a Grid would address 2 other features that have been brought up

#

Automatic Sticker placement and automatic CardArea positioning

prisma loom
zealous glen
#

So while by itself it’s not a requested feature it’s a

prisma loom
#

Whos resposible for adding new smods features?

#

John?

zealous glen
#

How do you call it in English

#

A stone that kills two birds

prisma loom
#

Awwww

zealous glen
#

🫵

tall wharf
#

me

prisma loom
#

its me tfym

zealous glen
#

resident chat GPT apikoyori

tall wharf
zealous glen
#

I added 2 banger features to SMODS

#

which got removed

prisma loom
#

I contributed nothing
but no bugs as well😎

zealous glen
#

Now they’re eating the cards

prisma loom
#

fool it seems I was a fool [Creates a copy of the last used tarot or planet card] all along

slim ferry
#

Creates a copy of the last used tarot or planet card

prisma loom
slim ferry
#

The wonders of open source software

#

Anyone can contribut

#

E

prisma loom
#

E indeed

wintry solar
finite crow
#

therian

zealous glen
#

Also my contributions didn’t get removed

#

I was making a joke

finite crow
#

i do know it's possible to change sprites like that because i already have the jimbo on the bootup screen changed to a custom joker i just wanna know what path i need to change the one at the end of the run

wintry solar
#

Change the quips that already exist

finite crow
#

i. still need to know the pathing to do that monknervous

#

wait hang on i might already

#

but i might not

#

I GOT IT

#

...almost

works flawlessly on *most of the win quips, but only the text works for some win quips and all the lose quips

#

ehhhh whatever i'll just do custom text instead of having a custom sprite too this is too much of a headache

red flower
#

i think you can take ownership of the jimboquips

lavish elm
#

local _card = SMODS.create_card {set = "Base", rank = tostring(random_rank), suit = random_suit, seal = random_seal, enhancement = random_enhancement, edition = random_edition, area = G.deck}
why this not work
I am doing this inside the apply function of my deck

red flower
#

what doesnt work

lavish elm
#

it creates a random card instead of the assigned rank and suit and it also places them in the free roam way

red flower
#

for the first problem how are you getting the rank and suit
for the second change create_card to add_card

lavish elm
red flower
#

for the random rank 11, 12, 13 and 14 wont work, it needs to be the rank key

#

what smods version do you have

lavish elm
#

latest version

red flower
#

hmm idk why the suit doesnt work then

#

can i see the whole code

lavish elm
#

ok but I will have to send it in a .txt file bc me have no nitro

red flower
#

ok

lavish elm
#

ok so when the math.random hit a non face card rank it worked

red flower
#

yeah you need to change that to the keys, also in that code pseudorandom_element is missing the seed

lavish elm
red flower
#

you shouldn't use math.random because the same seeds will produce different results

#

lol i mixed it up

#

pseudorandom should do the same thing here

lavish elm
red flower
#

ok but you want the same seed to always be the same

lavish elm
#

when I used pseudorandom it always hit jack of clubs

red flower
#

you probably need to use pseudorandom inside the event

#

you would need to use pseudorandom_element anyway to get the rank keys

lavish elm
#

So does rank kays work with card:get_id()

red flower
#

no

red flower
vale grove
#

iam making a joker that gives x0.25 mult if your hand played isnt the same as the last one

        if context.before and not context.blueprint and G.GAME.last_hand_played then

how do i make the correct context check?

slim ferry
#

context.initial_scoring_step and G.GAME.last_hand_played ~= context.scoring_name

vale grove
slim ferry
#

fuck

umbral spire
vale grove
# slim ferry fuck
    calculate = function(self, card, context)
      if  context.initial_scoring_step and G.GAME.last_hand_played ~= context.scoring_name then
            card.ability.extra.Xmult = card.ability.extra.Xmult + card.ability.extra.Xmult_mod
        end
        if context.joker_main then
          return {
            Xmult = card.ability.extra.Xmult
        }
        end

    end

this is the full func btw

daring fern
umbral spire
red flower
daring fern
umbral spire
#

Ah alr

vale grove
red flower
vale grove
red flower
vale grove
#
    calculate = function(self, card, context)
        card.ability.extra.last_hand_played = G.GAME.last_hand_played
        if context.press_play and card.ability.extra.last_hand_played then
            return {
                
            }
        end
    end

because from what i understand this is the start of what im supposed to do

#

but how do i do card.ability.extra.last_hand_played == true ?

umbral spire
#

how do i clear all or a specific tag?

daring fern
red flower
# vale grove i must admit im a little confused on how to actually implement this
calculate = function(self, card, context)
    if context.press_play then
        card.ability.extra.last_hand_played = G.GAME.last_hand_played
    end
    if context.joker_main then
        if card.ability.extra.last_hand_played ~= context.scoring_name then
            card.ability.extra.Xmult = card.ability.extra.Xmult + card.ability.extra.Xmult_mod
        end
        return {
            Xmult = card.ability.extra.Xmult
        }
    end
end
umbral spire
#

is there any way to see every G. variable?

#

or is documentated anywhere?

slim ferry
umbral spire
#

but not all G.GAME.current_round stuff

#

thats what i want to see specifically

#

also what exactly is G.GAME.played_hands is it the amount of played hands or like the blue number near discards?

slim ferry
#

its the total in the run i thin

#

used for run stats

red flower
slim ferry
#

or just

umbral spire
slim ferry
#

type in G.GAME.current_round. in vscode

#

and see what comes up

#

also what are you even looking for

red flower
umbral spire
umbral spire
umbral spire
slim ferry
#

and see what comes up

umbral spire
slim ferry
#

like

red flower
slim ferry
red flower
#

i still recommend this

viscid talon
#

hello modding dev i need help with a custom deck

#

ive been making a ghost deck clone called "holy deck" that functions identically, except it uses sephirots

#

in order to unlock it, you need to beat ghost deck

#

here is the code

#
    key = 'holy_deck',
    pos = { x = 1, y = 0 },
    config = {{ sephirot_rate = 2, consumables = { 'c_hatchet_kether' } } },
    loc_txt = {
        name = 'Holy Deck',
        text = {
            [1] = '{C:green}Sephirot{} cards may appear in the',
            [2] = 'shop, start with a {C:green}Kether{} card'
        },
    },
    unlocked = false,
    atlas = 'CustomDecks',
    loc_vars = function(self, info_queue, back)
        return { vars = { self.config.sephirot_rate, self.config.consumables[4] } }
    end,
    locked_loc_vars = function(self, info_queue, back)
        local other_name = localize('k_unknown')
        if G.P_CENTERS['b_ghost'].unlocked then
            other_name = localize { type = 'name_text', set = 'Back', key = 'b_ghost' }
        end

        return { vars = { other_name } }
    end,
    check_for_unlock = function(self, args)
        return args.type == 'win_deck' and get_deck_win_stake('b_ghost') and true
    end
}```
#

it comes with an error on line15, saying i was indexing a null value

red flower
#

you have one extra set of {} in config

viscid talon
#

wait where

red flower
#

it should be config = { sephirot_rate = 2, consumables = { 'c_hatchet_kether' } },

viscid talon
#

oo oke

red flower
#

also sephirot_rate wont work in the config like the vanilla ones do, you need to use an apply function

viscid talon
#

orgh true

#

ok, ive taken a look at vanillaremade and applied it

vale grove
viscid talon
#

uh oh, new error

red flower
red flower
vale grove
red flower
#

you need to localize it but yes

vale grove
#

alright thank you 🙂

viscid talon
#

wuh how

#

SHUT UUUUUUPPPPP

#

BURGULAR ATTACK

vale grove
#

<@&1133519078540185692>

vale grove
#

go my jimbos

viscid talon
#
    key = 'holy_deck',
    pos = { x = 1, y = 0 },
    config = { sephirot_rate = 2, consumables = { 'c_hatchet_kether' }  },
    loc_txt = {
        name = 'Holy Deck',
        text = {
            [1] = '{C:green}Sephirot{} cards may appear in the',
            [2] = 'shop, start with a {C:green}Kether{} card'
        },
    },
    unlocked = false,
    atlas = 'CustomDecks',

    apply = function(self, back)
        -- Apply the spectral rate
        G.GAME.sephirot_rate = self.config.extra.sephirot_rate

        -- Apply the consumables
        delay(0.4)
        G.E_MANAGER:add_event(Event({
            func = function()
                for k, v in ipairs(self.config.extra.consumables) do
                    SMODS.add_card({ key = v })
                end
                return true
            end
        }))
    end,

    loc_vars = function(self, info_queue, back)
        return { vars = { self.config.sephirot_rate, self.config.consumables[1] } }
    end,
    locked_loc_vars = function(self, info_queue, back)
        local other_name = localize('k_unknown')
        if G.P_CENTERS['b_ghost'].unlocked then
            other_name = localize { type = 'name_text', set = 'Back', key = 'b_ghost' }
        end

        return { vars = { other_name } }
    end,
    check_for_unlock = function(self, args)
        return args.type == 'win_deck' and get_deck_win_stake('b_ghost') and true
    end
}```
#

hhmm

exotic hedge
#

💔

slim ferry
viscid talon
#

yes

viscid talon
#

i think i know the issue

#

o

#

sephirot_rate isnt defined anywhere

#

so it has no idea what sephirot rate is

red flower
#

it is

viscid talon
#

:o

#

how

slim ferry
#

it does that automatically for consumable types

viscid talon
#

hmmm,

#

ok so

#

ive redone the code

#

now it creates 2 kethers instead of just 1

#

and sephirot cards still dont appear in the store

red flower
#

remove the apply the consumables part

vale grove
viscid talon
#

hmmm, unexpected symbol =

#

locked_loc_vars = function(self, info_queue, back)

#
    key = 'holy_deck',
    pos = { x = 1, y = 0 },
    config = { sephirot_rate = 2, consumables = { 'c_hatchet_kether' }  },
    loc_txt = {
        name = 'Holy Deck',
        text = {
            [1] = '{C:green}Sephirot{} cards may appear in the',
            [2] = 'shop, start with a {C:green}Kether{} card'
        },
    },
    unlocked = false,
    atlas = 'CustomDecks',

    apply = function(self, back)
        -- Apply the spectral rate
        G.GAME.sephirot_rate = self.config.sephirot_rate
    
    loc_vars = function(self, info_queue, back)
        return { vars = { self.config.sephirot_rate, self.config.consumables[1] } }
    end,
    locked_loc_vars = function(self, info_queue, back)
        local other_name = localize('k_unknown')
        if G.P_CENTERS['b_ghost'].unlocked then
            other_name = localize { type = 'name_text', set = 'Back', key = 'b_ghost' }
        end

        return { vars = { other_name } }
    end,
    check_for_unlock = function(self, args)
        return args.type == 'win_deck' and get_deck_win_stake('b_ghost') and true
    end
}```

what am i even doing
viscid talon
#

lemme add an end,

#

oke now it launches

red flower
#

you're missing an end,

viscid talon
#

it works!!!!

red flower
#

oh oops i was scrolled too high lol

viscid talon
vale grove
# red flower whats the code
            text = {
                "If your hand played isn't the same as last played hand",
                'gain {C:mult}1{} Mult, if you don\'t lose it all',
                'last played hand is {C:attention}#3#{}',
                '{C:inactive}(Currently,{C:mult}+#1#{}{C:inactive)){}'
            }
        },
        atlas = 'Jokers',
        pos = { x = 4, y = 1 },
        config = { extra = {
            mult = 0,
            mult_mod = 1
        } },
        loc_vars = function(self, info_queue, card)
            return { vars = { card.ability.extra.mult, card.ability.extra.mult_mod, localize(G.GAME.last_hand_played, 'poker_hands')  } }
        end,
calculate = function(self, card, context)
                local reset = true

    if context.press_play then
        card.ability.extra.last_hand_played = G.GAME.last_hand_played
    end
    
    
    
    if context.joker_main then
        if card.ability.extra.last_hand_played ~= context.scoring_name then
            card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.mult_mod
        end
        return {
            mult = card.ability.extra.mult
        }
    end
end
}

this is is obviously with the faulty localize

viscid talon
#

thank youuu

red flower
vale grove
red flower
#

in localize

vale grove
#

no

#

lemme see

vale grove
#

previously it would crash my game if i hoverd over it so its an improvement XD

viscid talon
#

how do i add text here saying smth along the lines of "beat ghost deck to unlock this deck"

#

nvm it somehow unlocks after winning a run on any deck LMAO 😭

vale grove
rigid solar
#

Im having issues loading a sticker, specifically the tooltip and badge
I've added its name in misc.labels and a description in descriptions.Other, yet it doesn't display either the tooltip or the badge when hovered over, does anyone have an idea as to why?

vale grove
red flower
#

possible yes, no idea how sorry

vale grove
rigid solar
#

Ok new problem
I used this to define that my sticker can only be applied on jokers, and yet hum
what am i doing wrong here

#

is it because the rate is 1? i just set it to 1 to test
edit: no it's not that

rigid solar
red flower
#

should apply is overriding all the defaults

rigid solar
#

oh

#

if i have should_apply then it doesn't read sets?

red flower
#

yeah

rigid solar
#

kinda weird but ok, i already found a workaround anyway

red flower
#

you need to call the original as well

crystal perch
#

is there a way i can get specifically the new cards drawn after discarding in a list?

#

i know i can just scan the whole hand before and after discarding but i want to know if there's a better way

slim ferry
#

set a flag in context.discard

#

and then check in context.hand_drawn

#

for the drawn cards

crystal perch
#

like give a flag to all the cards in hand when you discard, when heck for the cards without the flag in hand_drawn?

slim ferry
#

put a flag on the joker

#

to check if the draw came from a discard

umbral zodiac
#

@broken rivet it still crashes w/ this and im so clueless

#

its only modifying p_centers 🥀

broken rivet
#

try commenting out the entire hook

umbral zodiac
#

i did

#

it didnt crash without the hook

broken rivet
#

ok what the fuck

#

did the commit before that do anything weird

umbral zodiac
#

ok it appears modifying the function at all is causing it to crash Lol

#

im going to do some debauchery and see what happens #brb

#

also sorry but i am going to kill valk_censored_loc_vars because i really dont think anybody is going to use it and it just kinda adds to the lack of clarity anyway

broken rivet
#

fair

#

it's fairly niche anyway

#

i feel like the other half shouldn't break anything though

umbral zodiac
#

also im going to obliterate pseudorandom because its visual anyway

broken rivet
#

also fair

#

i really should've just used math.random

#

but pseudorandom_element was convenient

umbral zodiac
#

fair

crystal perch
#

use pseudorandom

#

otherwise it won't be consistent throughout seeds

umbral zodiac
#

i know

tired otter
#

tried testing my jokerforge mod but apparently one of my jokers crashes the game??
Went into the code and found this, any ideas?

broken rivet
#

this doesn't have to be

umbral zodiac
#

this is a purely visual thing

#

it only changes text to a random thing between two options to obfuscate it

umbral zodiac
umbral zodiac
keen atlas
#

🤷‍♂️

umbral zodiac
#

oh

#

i know

#

lol, lmao

#

it doesnt check if [x].loc_vars exists before setting it to the new function

#

probably being copied over when you start a run when it shouldnt even exist

broken rivet
#

also adding itself to a deck

umbral zodiac
#

might as well add it to decks rather thanadding to everything but decks

#

as long as it safely adds to decks

broken rivet
#

i guess though decks normally don't have editions

umbral zodiac
#

ya its just like

#

might as well not have an extra check since it supposedly wont hurt

broken rivet
#

maybe if like parakmi does something weird

tired otter
umbral zodiac
#

do i just quit modding now this is such a sinful line

keen atlas
umbral zodiac
#

idk if it even works

broken rivet
#

it's funny though

tired otter
umbral zodiac
#

yay it doesnt crash now

#

at the cost of the worlds ugliest line

keen atlas
#

oh

#

jf-generated code