#💻・modding-dev

1 messages · Page 577 of 1

gusty compass
#

cus integrating your header in lua is depricated

vale grove
#

yeah the tutorial im following does that haha

gusty compass
#

its prob outdated

hearty mesa
vernal path
#

its definitely outdated

vale grove
#

its from 10 months ago so safe to say that it is yeah

carmine chasm
#

how would I get information of the main balatro game?

hearty mesa
#

wait nvm

gusty compass
vale grove
#

also i have no clue what a json is is it a txt file with .json at the end?

carmine chasm
#

the hanging chad

#

or other jokers

gusty compass
hearty mesa
gusty compass
#

you cant really refer to main jokers, but you can override them

#

you can create your own jokers tho

vale grove
#

so this works then?

gusty compass
#

yea ig

slim ferry
hearty mesa
#

you need to change the file extension

slim ferry
vernal path
#

same braincell

carmine chasm
vale grove
#

how does that work?

slim ferry
#

weergeven > weergeven > bestandsnaamextensies

carmine chasm
gusty compass
slim ferry
vernal path
# vale grove how does that work?

all files have a file extension, which tell the puter what kind of file it is. text files have .txt, json files have .json, photos might have .jpeg, etc

fiery bronze
#

what does other_card do?

slim ferry
#

context.other_card is the secondary card being evaluated in most scoring contexts

vernal path
fiery bronze
#

I have this so far for the function of the card, but I want to change it so it applies only to played sevens

slim ferry
vale grove
#

on windows 11

slim ferry
vernal path
fiery bronze
vale grove
#

or how

slim ferry
vernal path
slim ferry
#

thats the same effect

vernal path
slim ferry
#

also its context.cardarea without underscore

vernal path
#

ohfuck ur right

fiery bronze
carmine chasm
#

can I get a code example for getting G.P_CENTER_POOLS.Joker in my .lua file.

vernal path
slim ferry
#

it goes into the if statement, making if context.check_enhancement and context.other_card.base.value == "7" and context.other_card.area == G.play then (in this case, context.cardarea is identical to context.other_card.area so you can use that too)

vernal path
carmine chasm
#

which is just an extension on lua

fiery bronze
carmine chasm
#

but it's limited to a game engine

vernal path
carmine chasm
#

ok

vernal path
#

smods has a built in table printer, so you can try just printing stuff in-game, if your code environment gives you nothing

vale grove
vernal path
#

very

#

the only file extension that matters in a file is the last one

fiery bronze
#

ok so to make sure i'm understanding, this is one big and gate. I have no clue what check enhancement is, but it checks if it's true, then other_card.base.value checks for all current cards in the current hand/game area, and then the g.play one means it only passes as true for cards in the play area. Because it's an AND gate, all of these have to be true or it doesn't do anything.

vernal path
#

everything else is just the file name

vale grove
vernal path
willow scroll
#

how does one multibox for joker descriptions

slim ferry
vale grove
#

i say seem because it might be and im just not that smart

vernal path
vernal path
vale grove
slim ferry
#

omfg

#

turn on

#

file extensions in file explorer

#

grahhh

vale grove
slim ferry
vernal path
#

🥀

vale grove
#

not in dutch this time

#

listen man its my first time working like this

slim ferry
#

okay

vale grove
#

and normally i work in windows 10

#

🥀

vernal path
#

can you maybe just google it

#

google is here for you

#

it can answer anything about file explorer

#

and windows usually

vale grove
#

now i got it

#

sorry for waisting yalls time lol

vernal path
#

are schools not teaching how to google things anymore? i feel like people have forgotten how to be normal but maybe we're not teaching the young'ns how anymore

vale grove
slim ferry
#

😭

#

thats actually crazy

vale grove
#

no but in all seriousness i was already in this discord asking

vale grove
vernal path
#

literally google is 1 click away

vale grove
#

well yeah but if im already asking here someone might have the answer easily ready yk

#

and you guys did

#

i just didnt know where to look

vernal path
slim ferry
#

hearing people say "just ask ai" instead of "just google it" feels fucking insane lmao

vernal path
vale grove
vale grove
vernal path
#

although, to be fair, an ai tool could also answer that question

hearty mesa
#

hey uhh how on earth do i hook a context

vernal path
#

i think, lmao, its been a second

vernal path
#

SMODS.calculate_context({full_hand = G.play.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, final_scoring_step = true}) yes, state events
this is the function for final scoring step

carmine chasm
#

how would I make a config file for steammodded

slim ferry
#

read this

carmine chasm
#

ok

hearty mesa
vernal path
#

oh, yeah there you go

hearty mesa
vale grove
#

now that i think about it is there a more recent tutorial on how to get started? im getting an error upon launching that i feel like is just an outdated issue

vernal path
#

whats the error

red flower
vale grove
#

Failed to collect file data for Atlas (prefix)_Jokers

carmine chasm
#

what's wrong with this ``` for _, j in pairs(jokers) do
if j.name == "Hanging Chad" then
print("Found Hanging Chad! Overriding ability...")

    j.ability = function(card, context)
       
        if context and context.joker_main then
            local playerJokers = G.jokers.cards
            
            for idx = 1, 2, 3, 4, 5 do
                local target = playerJokers[idx]
                if target and target ~= card then
                    for i = 1, 3 do 
                        target:calculate_joker(context)
                    end
                end
            end
        end
    end

    break
end

end

hearty mesa
red flower
vernal path
hearty mesa
red flower
carmine chasm
#

it said got 'do' expected 'near' so should I do for _, j in pairs(jokers) near

slim ferry
steady smelt
#

what is context.individual? i feel dumb for not knowing this

vernal path
red flower
slim ferry
#

to the issue

carmine chasm
red flower
carmine chasm
#

I read the handbook a bit

slim ferry
#

for the in hand cards

vale grove
#

issue fixed itself lol

steady smelt
slim ferry
#

if that helps

red flower
#

it's called individual because it runs calculate for each individual card

steady smelt
#

hm ok

robust marsh
#

I don't think it's needed since i slotted my boss bar into the section where the total score should've been, the only issue is that the ui reverts back to normal when hopping into the menu and back in the blind

steady smelt
#

what do i need to check to change the effect of a joker when it's being copied by blueprint/brainstorm? or is there anything for that

#

i thought there was something but not seeing it

slim ferry
#

context.blueprint is true for when an effect is being copied by blueprint

#

so to prevent something from getting copied by blueprint you add and not context.blueprint to whatever check you already have

steady smelt
#

ty <3

slim ferry
#

thank you N for making vanillaremade

chrome widget
robust marsh
#

i can show you the code

frosty rampart
#

@lament agate i've gotten it to replace every joker's name with the name of another joker, in this case it always makes every joker have the name "Joker". obviously add an extra condition to that if statement if you want it to only happen sometimes
it'll be really complicated to do arbitrary text, so just add a fake joker to your localization with only a name, and it should do that name if you set args.key to the fake key in the localization (you shouldn't need to actually make a whole dummy joker for it, just the localization entry)

carmine chasm
#

it's saying [SMODS UnbalancedJokers "Main.lua"]:16: 'do' expected 'near'

slim ferry
#

the line definitely does not end with near

vale grove
#

when i hover over a joker i made i get "Attempt to index local 'center' [a nil value]" does anyone have a clue why?

carmine chasm
carmine chasm
#
if not jokers then
    error("Couldn't find Joker pool")
end

for _, j in pairs(jokers) do
    if j.name == "Hanging Chad" then
        print("Found Hanging Chad! Overriding ability...")

        
        j.ability = function(card, context)
           
            if context and context.joker_main then
                local playerJokers = G.jokers.cards
                
                for idx = 1, 2, 3, 4, 5 do
                    local target = playerJokers[idx]
                    if target and target ~= card then
                        for i = 1, 3 do 
                            target:calculate_joker(context)
                        end
                    end
                end
            end
        end

        break
    end
end
red flower
#

ah i ser

#

see

vale grove
# slim ferry show the code

loc_vars = function(self,info,queue,center)
return {vars = {center.abilty.extra.Xmult}}
end
}
this is the only thing using center so im assuming its this?

red flower
#

for idx = 1, 2, 3, 4, 5 is not valid lua

slim ferry
chrome widget
#

Additionally isn't G.P_CENTER_POOLS.Joker a list of keys and not tables?

vernal path
slim ferry
#

damn beat me to it

robust marsh
#

@chrome widget i fixed it

chrome widget
#

Oh!!!

#

That's amazing, great job

robust marsh
#
local ref_blind_load = Blind.load
function Blind:load(blindTable)
    local ret = ref_blind_load(self, blindTable)

    if self.config.blind.score_invisible and G.GAME.modifiers.hide_blind_score then
        set_blind_score_visible(false)
    end

    return ret
end

I removed the modifiers check

#

swag

chrome widget
#

Oh I wonder if that's bugged on my end too

robust marsh
#

it's possibly just a thing with how my blinds function

chrome widget
#

Basically it's just saying if the modifier for blind score was set on a previous save (since modifiers are also persisted separately), set the score visible to false again

#

If you happen to be doing anything else to modifiers it could interrupt it but idk

vale grove
willow scroll
#

my brain is leaving me how would i combine two joker descriptions using these

robust marsh
red flower
vale grove
slim ferry
#

just wait until you have to spell things wrong

#

consumeables 🥀

robust marsh
chrome widget
#

we caino-maxxing

unkempt thicket
#

I want to trigger an additional effect on Jokers and playing cards when they would have trigger but are instead debuffed, i tried context.individual and context.post_trigger but those don't seem to count debuffed cards.

robust marsh
slim ferry
#

selzer and gluttenous

vale grove
#

i made my first joker thats a W for today

slim ferry
#

true!

vale grove
#

not really a mod issue but assuming someone here has used debug plus, how do you spawn in a joker with that mod?

slim ferry
#

hover over in collection, then press 3 to get it

frosty rampart
#

hold tab to see the magic debugplus cheat sheet, which explains that keybind + nearly everything else you can do with it outside of the console

vale grove
#

ah thx yall

carmine chasm
#

I tried taking ownership and change it but the hanging chad still won't change ```
local function deepCopy(orig, seen)
if type(orig) ~= "table" then return orig end
seen = seen or {}
if seen[orig] then return seen[orig] end
local copy = {}
seen[orig] = copy
for k, v in pairs(orig) do
copy[deepCopy(k, seen)] = deepCopy(v, seen)
end
return setmetatable(copy, getmetatable(orig))
end

local pools = G.P_CENTER_POOLS
local pool = pools and pools.Joker
if not pool then error("Couldn't find Joker pool") end

local function resolveEntry(e)
if type(e) == "table" then
return e, nil
elseif type(e) == "string" then

    local def = (G.Jokers and G.Jokers[e]) or (G.JOKERS and G.JOKERS[e]) or (G.P_CENTER_POOLS and G.P_CENTER_POOLS.Defs and G.P_CENTER_POOLS.Defs[e])
    return def, e
end
return nil, nil

end

#
    local def, key = resolveEntry(entry)
    if def and (def.name == "Hanging Chad" or (type(entry)=="string" and entry:lower():match("hanging") )) then

        local owned = deepCopy(def)

        if key then
            pool[k] = owned
        else
            pool[k] = owned
        end

        owned.ability = function(card, context)
            if not (context and context.joker_main) then return end
            local playerJokers = (G.jokers and G.jokers.cards) or {}
            for idx = 1, 5 do
                local target = playerJokers[idx]
                if target and target ~= card and type(target.calculate_joker) == "function" then
                    for i = 1, 3 do
                        local ok, err = pcall(function() target:calculate_joker(context) end)
                        if not ok then
                            warn("retrigger error:", err)
                        end
                    end
                end
            end
        end

        print("Took ownership and replaced Hanging Chad at pool index:", k)
        break
    end
end```
slim ferry
#

you dont need allat

carmine chasm
#

why what do I need

slim ferry
#

its just

#
SMODS.Joker:take_ownership("hanging_chad", {
  --values to overwrite go in this table
  },
  false) --true if you want to remove your mod badge
carmine chasm
#

bruh

chrome widget
#

Keep in mind that the silent argument also does prevent the item from registering which mod the change came from as well (which has some niche uses to consider)

crystal perch
#

i want a sticker that shatters the card it's attached to after it scores, and i've tried a bunch of different permutations of calc funcs and they all either end up shattering it immediately and then still scoring it as normal, even though it's now gone, or shattering it immediately the next time i play it

this one just shatters it immediately:

calculate = function(self, card, context)
        if context.after then
            card:shatter()
        end

this one shatters it immediately the next time i play the card:

calculate = function(self, card, context)
        if context.after then
            card.ability.fragile_shatter = true
        end
        if context.destroy_card and context.cardarea == G.play and context.destroy_card == card and card.ability.fragile_shatter == true then
            card:shatter()
        end
    end
crystal perch
carmine chasm
#

I'm ass at modding I see because what's wrong ``` local jokers = G.P_CENTER_POOLS and G.P_CENTER_POOLS.Joker
if not jokers then
error("Couldn't find Joker pool")
end

SMODS.Joker:take_ownership("hanging_chad", {}, false)

for _, j in pairs(jokers) do
if j.name == "Hanging Chad" then
print("Found Hanging Chad! Overriding ability...")

    j.ability = function(card, context)
        if not (context and context.joker_main) then return end
        local playerJokers = G.jokers.cards

        for idx = 1, 2 do
            local target = playerJokers[idx]
            if target and target ~= card then
                for copyIndex = 1, 3 do
                    local clone = SMODS.deep_copy(target)
                    clone:calculate_joker(context)
                end
            end
        end
    end

    break
end

end

crystal perch
#

so like

'''lua
code goes here
'''
carmine chasm
#

like this lua code

slim ferry
#
like this
crystal perch
#

no like how i showed it

crystal perch
carmine chasm
#

makes hanging chad retrigger the first 2 cards played 3 times

red flower
#

ok then your code is nonsense im sorry lol

frosty rampart
#

you're still not taking ownership correctly

red flower
#

look at hanging chad in vanillaremade also

carmine chasm
frosty rampart
#

no they didn't

slim ferry
#

the what

frosty rampart
#

you didn't, tomato ignored the comment in your message

slim ferry
#

oh

carmine chasm
#

so I should do lua SMODS.Joker:take_ownership("hanging_chad", {j.ability}, false)

frosty rampart
#

no

carmine chasm
#

what should I do then

slim ferry
#

it would be ability = whatever

#

and also a center doesnt have ability

#

the values in the center are in config

red flower
#

i would start by making a joker that does what you want to do first so you understand the structure

#

then you can change hanging chad

crystal perch
#

you can just straight up copy hanging chad's code from the vanilla remade wiki

frosty rampart
#

once you're ready to make it edit hanging chad, look at the example of taking ownership on the smods documentation

crystal perch
red flower
crystal perch
#

i did

red flower
#

then hook SMODS.shatters

willow scroll
#

could i use an entire joker description as a loc_var?

slim ferry
#

no

#

joker descriptions are tables and the vars in loc_vars get tostringed afaik

red flower
#

i think there's description_text in localize or something like that

willow scroll
#

ignore the tables i was doing dumb stuff

maiden phoenix
red flower
#

i mean there's one for just the text
it's not what they need tho

red flower
maiden phoenix
#

Aw hell nah I'm out of here

willow scroll
#

:(

#

dont tell me i need to hook stuff

#

oh i could probably just directly modify card.ability_UIBox_table

#

via a jank card:hover hook if its updated every hover or maybe even inside the card surely :clueless:

red flower
#

jokers have a generate_ui function

willow scroll
red flower
#

also i dont use the generate_ui function anymore haha but because im trying to support crossmod

willow scroll
#

does generate_ui break crossmod?

red flower
#

but that function has the exact structure generate_ui would have

willow scroll
#

oh mb i just clicked the link i see

red flower
#

so i made it a patch instead

#

or hook i dont remember

#

but if it's just one card i would recommend generate_ui

maiden phoenix
#

I don't know how specifically your joker work tho so maybe it's not what you want

crystal perch
#

genuinely where in the code does SMODS define that glass cards should shatter i can't find it

maiden phoenix
willow scroll
frosty rampart
crystal perch
#

no i'm making a sticker that is supposed to shatter after scoring

#

i hooked SMODS.shatters() successfully tho so it works now

frosty rampart
#

ok glad it works

willow scroll
crystal perch
#

yknow hooks are way simpler than i originally thought

maiden phoenix
# willow scroll does this give me the description node

I found the lovely patch I used, but this requires your joker's desc to initially be a multibox one

# Add fusion ability to multibox
[[patches]]
[patches.pattern]
target = "functions/UI_definitions.lua"
pattern = "if AUT.info then"
position = "before"
payload = """
if card and card.ability and card.ability.srl_fusion then
    local _card = {ability = card.ability.srl_fusion.ability, config = card.ability.srl_fusion.config, bypass_lock = true}
    local fusion_ui = Card.generate_UIBox_ability_table(_card)
    multi_boxes[#multi_boxes+1] = desc_from_rows(fusion_ui.main)
end
"""
match_indent = true
#

(Don't forget to replace mod specific variable names 😅)

willow scroll
#

thank you!

#

ill use this as soon as i realize my method is unfeasible

crystal perch
#

oh also super old bump i still need help with

maiden phoenix
crystal perch
maiden phoenix
#

What happens if you remove CHAK_UTIL.open_booster_pack(card.ability.extra.booster)? Can you send a screenshot?

maiden phoenix
willow scroll
#

my desc is not an empty multi box which is why im fixing that rn lol

#

i could do it a bit more jank way thats easier but i want to do it a bit better, how do i force an empty multi_box with a description

maiden phoenix
#

That's what my lovely patch does, it adds onto the existing multibox

willow scroll
#

yes, and i was wondering if i could initialize an empty multibox inside a localization file

#

would you perhaps know

maiden phoenix
crystal perch
#

anyone know why this joker is crashing? the odd thing is that it did work but something broke it and i have no clue why

config = {
        extra = {
            copying = nil,
        },
    },
    loc_vars = function(self, info_queue, card)
        local copying = card.ability.extra.copying
        info_queue[#info_queue + 1] = G.P_CENTERS.e_negative
        info_queue[#info_queue+1] = {key = 'chak_ethereal', set = 'Other'}
        info_queue[#info_queue + 1] = G.P_CENTERS.copying
        return { vars = { copying and G.localization.descriptions.Joker[copying].name or "None" } }
    end,
    calculate = function(self,card,context)
        if context.joker_type_destroyed and context.cardarea == G.jokers and not context.blueprint then
            card.ability.extra.copying = context.card.config.center_key
            sendDebugMessage("copying:" .. context.card.config.center_key, "CHAK")
        end
        if context.ending_shop and card.ability.extra.copying ~= nil then
            if card.ability.extra.copying.config.center.rarity == "chak_Token" then
                local copied_joker = SMODS.add_card {
                    area = G.jokers,
                    key = card.ability.extra.copying
                }
                copied_joker:add_sticker('chak_ethereal', true)
            else
                local copied_joker = SMODS.add_card {
                    area = G.jokers,
                    key = card.ability.extra.copying
                }
                copied_joker:set_edition({negative = true})
                copied_joker:add_sticker('chak_ethereal', true)
            end
            return {
                message = "Copied!",
                colour = G.C.CHAK_ETHEREAL,
            }
        end
    end
#

this is the effect btw

'Upon exiting the shop, create',
'a {C:dark_edition}Negative{}, {C:chak_sticker_ethereal}Ethereal{} copy',
"of the last destroyed {C:attention}Joker",
"{C:inactive}(Currently: {C:attention}#1#{C:inactive})"
red flower
#

please don't save a card to the ability table

maiden phoenix
#

☝️

red flower
#

oh wait

#

you're saving the key but you later try to access it as if it was a card

#

or am i misreading

slim ferry
#

also copying is a string so like idk why youre trying to get copying.config

#

thats not gonna work

willow scroll
#

ah i see multi boxes is actually added after main

crystal perch
slim ferry
#

G.P_CENTERS[card.ability.extra.copying].rarity

crystal perch
#

that worked thank you balatroheart

feral tree
#

whats the code for removing a booster pack from a shop?

willow scroll
#

hooray i did it

maiden phoenix
#

N how come you can react to people? The option doesn't show for me

willow scroll
#

to be fair i still need to do stuff as im doing evil chicanery that is probably incorrect because im directly storing the jokers in ability.extra lmfao

willow scroll
red flower
#

i have the Steam role

maiden phoenix
maiden phoenix
maiden phoenix
#

You should look at Pinkprint from Ortalab since it's somewhat similar to what you're doing. I'm doing the same thing too but mine's unfinished and the code isn't public iirc.

willow scroll
#

noted, thank you

feral tree
#

how do i remove a booster pack from the shop? G.shop_booster.cards[1]:remove() doesnt work

willow scroll
#

ok wait i may be dumb i see there is a fake_card thing but how do i utilize it

crystal perch
#

to my knowledge fake_card is for ui stuff, like showing the seals in the seals collection tab

willow scroll
#

oh wait that

#

fair enough

pseudo furnace
#

How would you detect something like containing a pair but not a pair? The specific hand gets me

maiden phoenix
#

Pressing "R" using debugplus on packs in shop does remove them, and it uses :remove()

red flower
pseudo furnace
wintry solar
pseudo furnace
crystal perch
#

i know it's bad practice to store cards as joker abilities, so how would i store a playing card with all its modifiers (edition, seal, enhancement, other modded stuff, etc) to be able to create an exact copy of it later as a joker effect

slim ferry
#

its not bad practice, its just impossible without an entirely unique saving system

#

objects cannot be saved

red flower
#

i personally would create a copy of the card in a hidden cardarea

#

but i dont want to explain it so dont do that :3

crystal perch
#

💀

#

surely it can't be THAT hard......

red flower
#

once you understand cardareas they're very easy

#

i have a bunch for different things lol

willow scroll
#

which is a combination of two other jokers

crystal perch
#

so, in a nutshell,
make a new card area somewhere hidden
copy the card to it
then, when i want it, make a copy of that card

red flower
slim ferry
#

if you just want to store a reference of a card you can just store its sort order since thats unique per card, otherwise just save all the important information to a table in the joker

red flower
willow scroll
crystal perch
red flower
#

then yes

stiff locust
#

bump

crystal perch
#

time to learn card areas it seems

willow scroll
#

actually, how would i make sure that if card.ability values change i could capture that to save that in my joker?

slim ferry
#

at that point youre probably better off saving a reference to the card

#

i imagine

#

sort order is very useful for that

willow scroll
slim ferry
#

oh

#

its like

#

2 jokers merged

#

i see

willow scroll
#

this all works except that joker1 and 2 doesnt save and i really just want the easiest way to do that

red flower
#

an smods function to run calculation on a non existent joker would be cool

willow scroll
#

because idk how card save works yet and i dont know how custom card areas work yet

slim ferry
#

its like some king of

#

idk

willow scroll
#

(probably not)

maiden phoenix
#

This will require more work from the self references tho

red flower
#

yeah the problem is that some things want the original card and some things want the card that is scoring, in a normal calculate call those are the same but here it would be two different cards

willow scroll
#

i think ill save actually saving the cards for later because i am reading pinkprint and im not comprehending

#

i also have the problem of the jokers just floating there that ive conveniently been ignoring

red flower
#

you can fix both by doing the cardarea thing

willow scroll
#

noted

#

ill look into cardareas tomorrow

maiden phoenix
willow scroll
#

unless i could literally just make a new cardarea with minimal info and it suddenly exists

red flower
#

the biggest problem is effects that depend on the card being in G.jokers

red flower
willow scroll
#

yeah ive read the code partially, tangiably aware how that works i just dont know what "minimal info" is

red flower
slim ferry
willow scroll
#

oh my goodness thats surprisingly easy

vale grove
#

one thimg im curios about when it comes to making multiple jokers

#

How do i make multiple jokers with different pngs?

maiden phoenix
#

Atlas is usually a spritesheet, and each joker sprite is referenced by their pos values

vale grove
#

so if i add an image in the folder second and give the pos value x=1 y=1 then it takes the second image?

red flower
#

where

vale grove
red flower
#

yeah i know but it's funny lol

slim ferry
vale grove
slim ferry
#

i think so

#

its a bit of a confusing sentence

vale grove
#

but every file needs to have the same name right?

slim ferry
#

no

#

you cant have multiple files with the same name

vale grove
#

yeah thats what i was thinking

maiden phoenix
slim ferry
#

you just put multiple sprites in one image

vale grove
#

do i have one png with multiple sprites?

slim ferry
#

generally yeah

maiden phoenix
#

Yes

slim ferry
#

and then the pos value is for selecting the correct sprite from the image

vale grove
#

another thingy i have, currently i have one joker in SMODS.Joker{
}
so i make an additional one in the first SMODS.Joker{
}
or do i need to make another joker do i make SMODS.Joker2{
}

slim ferry
#

just do SMODS.Joker again

frosty rampart
#

the second joker is just an entirely separate SMODS.Joker { }

vale grove
#

okay got it

#

thx

#

okay so the second joker im trying to make is invinsible.
could it be that i have to work vertically instead of horizontally in the png

maiden phoenix
#

Can you show your spritesheet and the pos of your second joker?

vale grove
#

and these are the pos of joker 1 and 2

#

ignore the Xmult

#

im getting to that lol

slim ferry
vale grove
#

as in

#

yeah i get it

#

also what is this yin and yang lol

distant junco
#

other way around

maiden phoenix
#

Wow I'm tired

vale grove
#

one only tells the truth and one always lies ahh

slim ferry
#

x is position from the left starting at 0, y is position from the top starting at 0

vale grove
#

axis thingies

slim ferry
#

also MANGO!

vale grove
#

thx

distant junco
vale grove
slim ferry
#

😭

#

cinema

distant junco
#

absolute mustard

slim ferry
#

AHHHH

vale grove
#

also the first one is my friend but i didnt want to leak his face publically lol

#

okay wait new issue

distant junco
#

hello modding dev i have a joker that i want to make enhanced cards, but at the minute its only sometimes making enhanced cards. what can i do??

vale grove
#

why is it 2 pixels wide lol

#

could it be that i renderd the first image wrong?

distant junco
slim ferry
# vale grove

do you have a pixel_size on your joker? you should just remove that if its a normal sized sprite

vale grove
slim ferry
#

hmmm

#

what does the joker definition look like

vale grove
willow scroll
distant junco
# maiden phoenix Show the calculate func
if chrank == 1 or chrank == 2 then
                local king = SMODS.create_card { set = "Playing Card", rank = "King", area = G.discard }
                G.playing_card = (G.playing_card and G.playing_card + 1) or 1
                king.playing_card = G.playing_card
                table.insert(G.playing_cards, king)

                G.E_MANAGER:add_event(Event({
                    func = function()
                        king:start_materialize({ G.C.SECONDARY_SET.Enhanced })
                        G.play:emplace(king)
                        return true
                    end
                }))
                return {
                    message = 'Its a boy!',
                    func = function()
                        G.E_MANAGER:add_event(Event({
                            func = function()
                                G.deck.config.card_limit = G.deck.config.card_limit + 1
                                return true
                            end
                        }))
                        draw_card(G.play, G.deck, 90, 'up')
                        SMODS.calculate_context({ playing_card_added = true, cards = { king } })
                    end
                }
            end
willow scroll
#

ahem thank you very much

vale grove
slim ferry
#

yeah

#

hmmmmmmmmmm

vale grove
#

oh just realized another issue

#

mult not in capital

slim ferry
#

also interesting joker key scheme lol

#

i guess it doesnt really matter with loc_txt though

vale grove
#

its from the tutorial im following haha

maiden phoenix
vale grove
#

first time lua worker

maiden phoenix
#

What's chrank?

distant junco
maiden phoenix
#

ah

slim ferry
#

the C is for colour

#

not for Chips

vale grove
#

i just assumed that lol

willow scroll
#

10 trillion n' mentions in the credits.txt (im not biased wdym)

distant junco
gilded goblet
#

1 quintillion n' mentions when

slim ferry
willow scroll
maiden phoenix
gilded goblet
#

n' single handedly carrying the balatro modding community /j

maiden phoenix
gilded goblet
#

actually commendable effort by everyone i love yall

slim ferry
vale grove
#

why is my mango 3/2 pixels of another joker lol

gilded goblet
#

mango?... those who know...

vale grove
#

it gives 6 chips and 7 mult

distant junco
slim ferry
#

and set it to 71 by 95

vale grove
slim ferry
#

it shouldnt like

#

show in another sprite then

vale grove
gilded goblet
distant junco
#

mick dicks cocked up

slim ferry
willow scroll
vale grove
willow scroll
#

okay one more thing my brain is collapsing and the documentation aint entering how do i remove a card from existence again

distant junco
slim ferry
vale grove
slim ferry
#

just to be sure

vale grove
distant junco
#

card:remove() yeah

vale grove
#

i have 2 folders one in my documents the other in mods

slim ferry
#

😭

vale grove
#

i keep the one in documents to make changes to make sure i dont accidently screw up

gilded goblet
slim ferry
#

lol

vale grove
#

and i have paint.net auto save in the one in my documents

#

my own genius sometimes frightens me

slim ferry
#

though the two pixels showing tells me that the first joker sprite is 2 pixels wider than it should be

distant junco
distant junco
vale grove
slim ferry
#

yeah

vale grove
#

huh

#

now it does work

slim ferry
#

oh

#

lmao

vale grove
#

but still has like

#

1 pixel from the left joker

distant junco
#

yeah you need a one pixel gap

vale grove
#

i geuss that sjust paint blending

slim ferry
#

you dont need a gap

distant junco
#

oh

slim ferry
#

thats just common practice for cards

#

since they look more like cards then

distant junco
#

ohh i see

maiden phoenix
vale grove
#

first i want to get to around 20/40 functioning jokers

#

then ill do all the advanced styling

distant junco
#

but fair enough on tiredness

slim ferry
#

mango!!!!!!

vale grove
#

okay so one more on the mango

#

i currently have this (nvm was just a lower case thingy fixed)

#

but when i run the mod it says "main.lua"}:51 '}' excpted [to close '{' at line 49] near Mult'

#

mult = 7 is line 51 btw

tender ermine
#

How do I make an enhancement apply an enhancement to another card

solemn shuttle
#

say what function is the end of round effects tied too

like if i wanted to hook it to add a consistent end of round effect regardless, not just based around a joker or card

frosty rampart
#

no need to even hook anything, it's a calculate function that will always run regardless of what cards you have in any given game state

solemn shuttle
#

ooooh 👀
-# i gotta update my smods anyway so this is a good excuse LMAO

solemn shuttle
willow scroll
#

i need to fix up the merge logic a bit

#

so it actually looks nice

#

but otherwise functional hooray

true jasper
solemn shuttle
#

ok anyway ty lmao

willow scroll
# willow scroll clip

i was thinking (if possible) to make the texture half one joker half the other one

#

but im not good at advanced texture manipulation so uhh

true jasper
willow scroll
#

well this joker effect took me like help from 3 people + 5 hours so uhh

solemn shuttle
#

if i had to guess it would probably involve some shader nonsense

willow scroll
#

surely cant be that bad :clueless:

solemn shuttle
#

im no expert in the slightest in regards to shaders but

willow scroll
solemn shuttle
#

thats my thought

#

😭

#

i wouldnt know

solemn shuttle
#

i have ideas

frosty rampart
#

yea this update is really cooking

solemn shuttle
#

custom jimbo quips memon_devious

frosty rampart
#

i've got a mod taking advantage of the new scoring calculation stuff on the backburner, lemme pull up the funny video that's already getting old real quick

true jasper
frosty rampart
#

yea but looking at the code they're doing it kinda jank (not a knock on them ofc, but still)

crystal perch
#

so i've made a new cardarea and cards properly get sent and retrieved from it, but whenever i exit a run i get this crash

#

i assume it has something to do with it trying to calculate or save and tripping up along the way

solemn shuttle
crystal perch
# crystal perch so i've made a new cardarea and cards properly get sent and retrieved from it, b...

this is the code

# Attempt to add new card area
[[patches]]  #   CHAK
[patches.pattern]
target = '=[SMODS _ "src/utils.lua"]'
match_indent = true
position = 'before'
pattern = '''-- TARGET: add your own individual scoring targets'''
payload = '''
-- CHAK start
t[#t+1] = G.stj_cards
-- CHAK end
'''
[[patches]]  #   CHAK
[patches.pattern]
target = 'functions/common_events.lua'
match_indent = true
position = 'before'
pattern = '''elseif card.area == G.hand or card.area == G.deck then'''
payload = '''
    -- CHAK start
    elseif card.area == G.stj_cards then
    y_off = -0.05*G.CARD_H
    card_aligned = 'tm'
    -- CHAK end
'''
[[patches]]
[patches.pattern]
target = 'card.lua'
match_indent = true
position = 'after'
pattern = 'function Card:apply_to_run(center)'
payload = '''
    local card_to_save = self and copy_card(self) or Card(0, 0, G.CARD_W, G.CARD_H, G.P_CARDS.empty, center)
    card_to_save.VT.x, card_to_save.VT.y = G.stj_cards.T.x, G.stj_cards.T.y
    G.stj_cards:emplace(card_to_save)
    SMODS.enh_cache:clear()
'''
solemn shuttle
#

rest of game seems to work ok lol

red flower
crystal perch
#

patch where

wild escarp
#

Now that challenges are getting some love, with apply and calculate functions, how would I go about making a challenge start with one random card in deck?

red flower
#

it doesn't happen to me anymore without the patch tho so idk

crystal perch
#

did they maybe fix it in an update? i'm not on latest

red flower
# crystal perch patch where

there's a loop in get_card_areas that checks for area.cards
for some reason areas get their cards set to nil before they're destroyed

red flower
crystal perch
#

weird

red flower
#

i think i moved where i define my area or something

#

no idea

red flower
#

ah but that wouldn't work if it's random so yeah apply

solemn shuttle
red flower
solemn shuttle
#

i was about to check without other mods yeah hangon

red flower
#

just one line of the crash log doesn't help btw

solemn shuttle
#

-# oops

crystal perch
red flower
#

i hook start_run

crystal perch
#

i'll look into that then

solemn shuttle
#

-# you see i have not updated my other Mods in a while 😭

#

yeah i see the porblem nvm

#

yup that was it ok LOL

crystal perch
red flower
#

yeah

crystal perch
#

still crashed

brave onyx
#

Hello, I have a question. How do I make a pool have custom music? the pool is called “tyler”

    key = "tyler_music", 
    path = "tyler_music.ogg",
    pitch = 0.7,
    sync = true,
    select_music_track = function()
        return (G.pack_cards and G.pack_cards.cards and G.pack_cards.cards[1] and 
                G.pack_cards.cards[1].ability.set == "generic") and 10 or false
    end
})```
crystal perch
red flower
#

wait a second

#

that's a jokerdisplay crash

#

update your mods

crystal perch
#

the classic blunder...............

red flower
#

unless you mean consumable type

wary minnow
#

Hi

#

im new to this server

#

i came here to ask for help for a balatro mod im making

#

(mostly the coding part)

red flower
brave onyx
wary minnow
#

ok

brave onyx
red flower
#

but try that out

brave onyx
#

does not work

brave onyx
solemn shuttle
jolly shadow
#

yeah ^

solemn shuttle
#

ie music_tyler

#

also uh

#

is there a variable in game tha that lets you track you current run's round

#

like G.GAME.round_resets.ante but

#

Round

brave onyx
solemn shuttle
faint yacht
#

G.GAME.round

solemn shuttle
loud summit
#

how do you set a playing card to a specific rank

frosty rampart
loud summit
#

oj thx i was only looking in vanilla remade

#

hey so my game completely closes outright when i try to spawn my joker

#

like theres no crash log and nothing notable in the lovely log

#
    calculate = function(self, card, context)
        local trigger = context.force_trigger

        if context.before and context.cardarea == G.play then
            for _, playing_card in ipairs(context.scoring_hand) do
                if playing_card:get_id() == 14 then
                    trigger = true
                end
            end
        end

        local ace_hand = {}
        for _, playing_card in ipairs(G.deck.cards) do
            if playing_card:get_id() ~= 14 then ace_hand[#ace_hand + 1] = playing_card end
        end

        if not trigger or (#ace_hand < 1) then return end

        local c = psudorandom_element(ace_hand, "nflame_acpart")
        SMODS.change_base(c, nil, 14)
    end```
#

does anything stand out here

#

also how do i get the whole hand played instead of just the scoring hand

frosty rampart
#

assuming you mean to interact with cryptid demicolon stuff, i'm pretty sure it's context.forcetrigger without the underscore. but that doesn't seem like it'd cause a crash
you do have a typo in psudorandom_element (it should be pseudorandom_element), but i dunno if that'd be hard-crash-worthy either
that said, the loop through the deck and change_base call is happening outside of any context checks, so that's probably the main issue

loud summit
#

well

#

it shouldnt trigger

#

because of the early return in if not trigger or (#ace_hand < 1)

glass scaffold
#

Alright, tried to use Crustulum's approach (and some other things), but still getting nowhere. It needs to stay at $1 for good, but it keeps showing higher values before getting changed.

glass scaffold
#

this voucher is the last one I need to fix before it's all stabilized.

glass scaffold
daring fern
loud summit
#

i forgot pseudorandom_element returns an INDEX

#

its still crashign help

faint yacht
#

<@&1133519078540185692>

livid scroll
#

🔫

glass scaffold
#

Now how exactly do I check if a certain voucher is redeemed (modded voucher)?

loud summit
#

any idea HOW this can be nil??


        local c = ace_hand[pseudorandom_element(ace_hand, "nflame_acpart")]```
#

because its apparently nil

fathom star
#

Hey does anyone know if multiplayer balatro was fixed?

red flower
#

wdym fixed?

red flower
fathom star
#

Well I heard that multiplayer got bugged with balatros newer update and yo couldn’t play modded multiplayer anymore

red flower
#

that isn't true

fathom star
red flower
loud summit
#

yea i mean pseudorandom_element doesnt say if its element or index in vanillaremade

daring fern
green mica
#

Anyone know where in the code the game decides to finish the round and start a new one, like after you beat the boss blind? I've looked around quite a bit but I'm a bit lost.

I made a code that replaces the small and big blinds with blinds from a pool, but since the blinds I put there are still registered as a "boss blind" it still ends the round afterward.

frosty rampart
#

you mean ante, right?

round lion
#

how the hell are yall even setting up vs code for this

loud summit
#

oh

frosty rampart
green mica
glass scaffold
red flower
frosty rampart
# green mica Yeah yeah

ortalab uses small = {min = 1} instead of boss = {...} in the blind object definitions for their small/big blind variants, but i still need to dig through to see if they have any other special code to handle that or if smods can handle it by default

red flower
#

they do

#

eremel talked about porting it but it hasn't happened yet

frosty rampart
#

ah dang

green mica
#

I think I should be able to hook in here

frosty rampart
round lion
#

i do not think vanilla remade say anything about the entire bottom field being marked with "the field must be defined after the class"

#

like actually why is everything piss flavored on the workspace

red flower
#

what

#

also having a workspace with a bunch of warnings is normal in programming

green mica
#

Oh wait I have a wayyy better way to do this, I can just hook into Blind:get_type() instead

#

I didn't see that there lol

vapid flume
#

How do I make enhancements/seals not appear in boosters? I thought the weight would do it but it just keeps showing up.

loud summit
#

/j

loud summit
vapid flume
#

entirely brand new run, spawning in booster packs, theyre appearing despite me trying both weight 0 and weight -9999

loud summit
#

weird

vapid flume
#

am i doign something wrong here

faint yacht
#

...iirc the in_pool function has the args variable that can contain the "source" of where the check occurs.

vapid flume
faint yacht
#

args.source, specifically. Just need to print until you find what variable you need exactly.

frosty rampart
#

good chance you want to do this

in_pool = function(self, args)
  return args.source ~= 'sta'
end

(args.source usually seems to be the first three letters of the source, e.g. 'sho' for shop or 'buf' for buffoon pack. i'm not sure if 'sta' is correct but that's short for standard pack so it's worth a shot)

twilit tundra
#

thinking of actually getting back into working on my mod tomorrow

question: uh

how the heck do i implement this
how do i check for what hand types are currently visibly above and below a specific hand type (buffing secret hands you cant even play with your current deck would definitely be. un-ideal.)

#

like.
in the run info menu

#

alternatively could try and get this one to actually work properly instead of just being a visual thing

how the hell do you change what hand type a hand is

twilit tundra
#

but only while owning the joker

hybrid shadow
#

2 connected questions

  1. can i have a custom joker pool in SMODS.add_card's set param and 2) does that joker pool need the modprefix
glass scaffold
#

Ok, so my custom voucher works, but every redeem causes it to spawn a random Joker that can't be bought. It's just there.

Anyone know a fix?

#

(the code is a patched part of a function used by Illusion)

wary minnow
#

someone that have experience programing balatro mods could help me make one?, i have 0 experience programing in Lua but i have a ton of ideas and like 10 designed jokers.

modern turret
#

Im trying to add new music tracks to the game with my mod but i don't know how any ideas on what i could do to get it working? egg

hybrid shadow
winter flower
last sentinel
#

bump

daring fern
last sentinel
#

ah and juice_up that instead of card?

#

nvm, got it

modern turret
daring fern
lavish elm
#

hey can I build my mod in like one messy lua file or do I need a file for every type eg. jokers, tarots etc

hardy viper
#

both work

#

or really any file structure

#

whatever you're most comfortable doing, although if you're working in a group the more structured the better

lavish elm
#

how to add a new line using UIT because when I try to do \n creates a new line but doesn't go back to the left instead it stays where it is

lavish elm
#

I am trying to make my joker change probabilities with oops all sixes but I can't seem to get it working
loc_vars = function(self, info_queue, center)
info_queue[#1116390750314307698_queue+1] = G.P_CENTERS.e_negative
local oopses = 0
if G.jokers.cards then
for i = 1, #G.jokers.cards do
if G.jokers.cards[i].config.center.key == "j_oops" then
oopses = oopses + 1
end
end
end
main_start = {
{ n = G.UIT.T, config = { text = "Has a", colour = G.C.BLACK, scale = 0.32 } },
{ n = G.UIT.T, config = { text = string.format("%d in 10", 2^oopses), colour = G.C.BLACK, scale = 0.32 } },
{ n = G.UIT.T, config = { text = "to make a Joker Negative\n", colour = G.C.BLACK, scale = 0.32 }},
{ n = G.UIT.T, config = { text = "At the start of a round", colour = G.C.BLACK, scale = 0.32 }},
}
return {main_start}
end,

wintry solar
#

Let me grab the new calc notes, hold on

true jasper
#

How would I make an info queue that shows the interest cap

maiden phoenix
#

I don't know if the extra is necessary or not

#

Ok nvm it's not config with 'Other' it's 'vars' my bad

runic pecan
#

Does SMODS.calculate_effect have a parameter for message's appearing time length?

runic pecan
#

Thanks

#

Another question,
How do I make "gives you back twice the amount" shorter?

robust marsh
glass scaffold
crystal swift
#

does anyone have any methods at all

daring fern
crystal swift
#

make something

#

at any concieveable metric

#

i have no bones for my mod at all so i must be doing something completely wrong

maiden phoenix
#

I suppose you're trying to make a deck?

crystal swift
#

no just a mod in general

#

im focusing on making jokers first

maiden phoenix
#

Do you have lua knowledge?

crystal swift
#

no
which honestly on its own is a big sign im not cut out for this but hey im gonna at least try anyways

maiden phoenix
#

Everyone starts somewhere

#

I'll drop a few links that'll help you

runic pecan
#

The multiplier goes up by time

glass scaffold
runic pecan
crystal swift
carmine chasm
#

why does the game crash when I start it? this is the only code I have ```lua
SMODS.Atlas{
key = "Jokers",
path = "Jokers.png",
px = 71,
py = 95
}

SMODS.Joker{
key = "joker2",
loc_txt = {
name = "ahmed",
text = {
'gives',
'a {C:attention}Joker{}',
'{X:mult,C:white}x#1#{} Mult'
}
}
}

glass scaffold
carmine chasm
#

because there is no function yet

glass scaffold
#

Also, what error do you get when opening?

carmine chasm
#

wrong png name

glass scaffold
#

nvm. apparently I overdo it.

carmine chasm
#

it was Joker.png instead of Jokers.png

#

what could I do instead of math.random(1,3)?

pastel kernel
#

What is the context for “if played hand is most played poker hand”

glass scaffold
robust marsh
#
                local recipe_consumables = {}
                for _, c in pairs(G.P_CENTER_POOLS.Consumeables) do
                    table.insert(recipe_consumables, c.key)
                end

Can i make this only check for vanilla consumables

maiden phoenix
#

.

robust marsh
daring fern
glass scaffold
#

This isn't guaranteeing an edition or enhancement on all playing cards in shop. What am I doing wrong?

carmine chasm
#

why won't it add 100Xmult lua atlas = 'Joker', pos = {x = 0, y = 0}, config = { extra = { Xmult = 100 } }, loc_vars = function(self,info_queue,center) return {vars = {center.ability.extra.Xmult}} end, calculate = function(self,card,context) if context.Joker_main then return { card = card, Xmult_mod = card.ability.extra.Xmult, message = 'X' .. card.ability.extra.Xmult, colour = G.C.MULT } end

glass scaffold
carmine chasm
#

ok

carmine chasm
maiden phoenix
#

It's context.joker_main, it's case-sensitive

glass scaffold
maiden phoenix
#

Also you dont need message and colour

glass scaffold
carmine chasm
carmine chasm
glass scaffold
glass scaffold
carmine chasm
#

what is it supposed to do

#

the voucher?

#

I see

maiden phoenix
glass scaffold
# carmine chasm I see

Fair warning: This deals with hooking to already existing code in vanilla Balatro. This is even out of my skillset.

glass scaffold
maiden phoenix
#

This doesn't match your voucher's key

#

Should be v_WCCO_hallucination

glass scaffold
#

Let me make that and test it rq.

maiden phoenix
#

Unless that's something else different

glass scaffold
carmine chasm
# glass scaffold You can use this from 0711a to let it be influenced.

I read this and don't know how to add it to my code Lua atlas = 'Joker', pos = {x = 0, y = 0}, config = { extra = { Xmult = 100 } }, loc_vars = function(self,info_queue,center) return {vars = {center.ability.extra.Xmult}} end, calculate = function(self,card,context) if context.joker_main then return { card = card, Xmult_mod = card.ability.extra.Xmult, message = 'X' .. card.ability.extra.Xmult, colour = G.C.MULT } end

glass scaffold
carmine chasm
maiden phoenix
glass scaffold
#

nevermind, misread.

carmine chasm
#

I think

maiden phoenix
#

like key = 'my_joker'

carmine chasm
#

yes

#

it has that

#

key = 'Joker'

maiden phoenix
#

What if you just return this?

return {
  x_mult = card.abilty.extra.Xmult
}
carmine chasm
#

it's already returned return { card = card, Xmult_mod = card.ability.extra.Xmult, message = 'X' .. card.ability.extra.Xmult, colour = G.C.MULT }

maiden phoenix
#

Yea no but I mean what if you remove the extra stuff and just do x_mult

hearty mesa
carmine chasm
true jasper
maiden phoenix
hearty mesa
#

pretend i never existed okay byeee

carmine chasm
maiden phoenix
#

The message gets added automatically if you use default field names

maiden phoenix
#

mult, chips, dollars etc..

carmine chasm
#

I'm trying to make the Xmult a math.random(1,3)

frosty dock
#

you can just do x_mult and smods does the rest for you

#

there's no need to add the other stuff yourself

carmine chasm
frosty dock
#

what point

maiden phoenix
frosty dock
#

Just return { x_mult = <whatever xmult you want to apply> }

#

there's nothing else to it

carmine chasm
#

but then with Xmult instead of Mult

frosty dock
#

return { x_mult = pseudorandom('my_xmult_misprint', min, max) } then

carmine chasm
true jasper
carmine chasm
#

thanks

pastel kernel
carmine chasm
# true jasper Is right here

I checked it and tried this and now the game crashes the moment I hover my mouse over the joker do you know why? ```Lua
SMODS.Joker{
key = "joker2",
loc_txt = {
name = "ahmed",
text = {
"gives",
"a {C:attention}Joker{}",
"x{X:mult,C:white}#1#{} Mult"
}
},
atlas = "Joker",
pos = { x = 0, y = 0 },
config = { extra = { min = 0, max = 200, Xmult = 100 } },
loc_vars = function(self, info_queue, center)
local minv = (self.config and self.config.extra and self.config.extra.min) or 0
local maxv = (self.config and self.config.extra and self.config.extra.max) or 0
local r_mults = {}
for i = minv, maxv do
r_mults[#r_mults + 1] = tostring(i)
end

    local dyna_string = {
        { string = "gives a ", colour = G.C.UI.TEXT },
        { string = "Joker", colour = G.C.RED },
        " x",
        r_mults,
        " Mult"
    }
#
        local main_start = {
            {
                n = G.UIT.O,
                config = {
                    object = DynaText({
                        string = dyna_string,
                        colours = { G.C.WHITE },
                        pop_in_rate = 9999999,
                        silent = true,
                        random_element = false,
                        pop_delay = 0.5,
                        scale = 0.32,
                        min_cycle_time = 0.5
                    })
                }
            }
        }

        local currentX = (center and center.ability and center.ability.extra and center.ability.extra.Xmult) or self.config.extra.Xmult
        return { main_start = main_start, vars = { tostring(currentX) } }
    end,
    calculate = function(self, card, context)
        if context and context.joker_main then
            return {
                card = card,
                Xmult_mod = pseudorandom("my_xmult_misprint", 1, 100),
                message = "X" .. (card.ability and card.ability.extra and card.ability.extra.Xmult or tostring(self.config.extra.Xmult)),
                colour = G.C.MULT
            }
        end
        if context and context.setting_blind then
            local new_card = create_card("Joker", G.Jokers, nil, nil, nil, nil, "j_joker")
            new_card:add_to_deck()
            G.jokers:emplace(new_card)
        end
    end
}```
prisma loom
#

Can someone check if all good here, please? I'm very amateur at coding so I can't really tell

#

Tried making a simple effect but still struggling

daring fern
slim ferry
slim ferry
#

hello

carmine chasm
#

attempt to call a method 'gmatch' [a nil value]

carmine chasm
pastel kernel
#

what's gmatch

carmine chasm
slim ferry
#

send the entire crash log

#

not just

#

the error

carmine chasm
hearty mesa
#

trying to make a joker debuff itself for 1 hand, it debuffs itself (and sets card.ability.extra.debuff_from_borrowed_time to true when it does) but doesn't undebuff after

function SMODS.current_mod.calculate(self, context)
    if context.after and context.cardarea == G.jokers then
        local card_t = SMODS.find_card("j_lcb_t_corp_rodya", true)
        if card_t then
            for i, v in ipairs(card_t) do
                if v and v.ability and v.ability.extra and v.ability.extra.debuff_from_borrowed_time then
                    v.ability.extra.debuff_from_borrowed_time = false
                    v:set_debuff(false)
                end
            end
        end
    end
end
daring fern
pastel kernel
#

oh

floral marsh
#

hum heya how can I prevent a consumable's design from stretching to fit a normal card's size (I want it to be 21 by 21)

pastel kernel
#

Hmm

maiden phoenix
#

Either change your atlas to be 21x21, but it's the only small consumable, try adding a display_size

floral marsh
#

ima attempt the second strategy

#

it worked thank you

slim ferry
maiden phoenix
slim ferry
#

ok

glass scaffold
#

Is this basically saying Talisman's not playing nice or did I mess up?

rotund sable
#

Iirc

slim ferry
glass scaffold
#

Damn you, Talisman.

glass scaffold
wild berry
#

how can i get the current score accumulated during a blind

slim ferry
#

and if you havent yet put to_big = to_big or function(x) return x end at the top of your main file

#

so it works without talisman

glass scaffold
glass scaffold
daring fern
wild berry
#

kty

glass scaffold
#

Is there any way to make this $10 change to $5?

#

(Visually speaking, it works technically.)

glass scaffold
carmine chasm
#

why won't this work? if context.setting_blind then for i = 1, 10 do local new_card = create_card(joker2.config.self) new_card:add_to_deck() G.jokers:emplace(new_card) end end

red flower
carmine chasm
lethal spindle
#

Hi, does anyone have a list of blind requirements past ante 39 on White Stake so I can help balancing?

rotund sable
glass scaffold
slim ferry
glass scaffold
#

But I'll check that later on.

rotund sable
#

what's your current code?

glass scaffold
rotund sable
#

uhhhh, visual ig

#

or both

glass scaffold
#

Gimme a bit to get what I have

glass scaffold
#

2nd one has A LOT more to it

rotund sable
#

so you're trying to change the text on the reroll button?

#

let me see the game code

glass scaffold
#

Just where it says "10$" to 5.

glass scaffold
rotund sable
#

uhh generally all the game files

slim ferry
#

lovely/dump

glass scaffold
#

Thank you H'

rotund sable
#

ok so it's kinda hardcoded

slim ferry
#

why is it localize('$')

#

does that even change with language

#

i thought it was just the dollar symbol in every language

spice wadi
#

If only there was an injector that let you change lines of code, that'd be lovely

spice wadi
glass scaffold
keen atlas
ashen drift
#

localize("my buthoel")

rotund sable
ashen drift
#

why am i getting the nxkoo treatment

glass scaffold
spice wadi
spice wadi
spice wadi
#

Or basically any mod ever

ashen drift
#

i will have a lovely injection today

rotund sable
#

or vanillaremade wiki

ashen drift
#

inject me with lovely

ashen drift
#

discord reportably forgot how to count

#

wait FUCK this is modding dev

red flower
#

lmao

ashen drift
#

toodles

floral marsh
gusty iron
#

How would I make it so that you can't skip a blind?

floral marsh
#

similar question here how would I make it so that you cant skip a specific booster pack

#

nvm

#

another hook

#

:D..

wild berry
#

how can i make a joker retrigger other jokers

daring fern
wild berry
#

kkty

daring fern
#

Also you need to enable it.

unborn bay
gusty iron
#

I know cryptid already did something like this but...

evil.....

wild berry
ashen drift
#

😭