#💻・modding-dev

1 messages · Page 519 of 1

manic rune
#

do it outside calculate

rocky plaza
#

remember, hooks are global and can be accessed anywhere

fallow breach
#

but it doesn't it like it when local variables are defined outside of a function or something

#

oh nbm

#

nvm

#

it has to be outside of the smods bracket

rocky plaza
#

need to do it outside of everything

keen sleet
#

why is the joker activating twice? it's only supposed to activate once after a boss blind is defeated, but I see nothing out of the ordinary

calculate = function(self, card, context)
    if context.end_of_round and (not context.blueprint) and G.GAME.last_blind.boss then
        local jokers_to_create = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer))
        if jokers_to_create <= 0 then return end
        G.GAME.joker_buffer = G.GAME.joker_buffer + jokers_to_create

        G.E_MANAGER:add_event(Event({
            func = function()
                local card = create_card("Joker", G.jokers, nil, nil, nil, nil, pseudorandom_element(card.ability.extra.jokers, pseudoseed('chef_joker')), "chf")
                card:add_to_deck()
                G.jokers:emplace(card)
                card:start_materialize()
                G.GAME.joker_buffer = 0
                return true
            end
        }))
        card_eval_status_text(card, 'extra', nil, nil, nil, {message = "Bon appetit!"})
    end
end
rocky plaza
manic rune
#

add context.main_eval to context.end_of_round

#

yeah

keen sleet
#

thank you! this was driving me crazy

#

what exactly is the difference with context.main_eval vs without

rocky plaza
#

so if context.end_of_round and not context.blueprint and context.main_eval

fallow breach
rocky plaza
keen sleet
#

good to know

red flower
#

it's because end_of_round is also called with individual and repetition

keen sleet
#

got it got it

frigid cargo
#
    ease_background_colour = function(self)
        ease_colour(G.C.DYN_UI.MAIN, HEX("cc3b49"))
    end,
    create_card = function(self, card, i)
        return { set = "Shape", area = G.pack_cards, skip_materialize = true, soulable = false, key_append = "btct_ShapePack" }
    end,

    in_pool = function() return true end
}

How can i make the background color correct?

wild escarp
#

Could someone help me with this function? I'd like jokers to shake when a particular consumable is owned, kinda like invisible joker. I'll add more parameters, just want the basics working first.

local SMODS_calculate_context_ref = SMODS.calculate_context
function SMODS.calculate_context(context, return_table)
    if G.jokers and SMODS.find_card('c_willatro_boost') then
        for i = 1, #G.jokers do
            local eval = function(card)
                return not card.REMOVED
            end
            juice_card_until(G.jokers[i], eval, true)
        end
    end
    return SMODS_calculate_context_ref(context, return_table)
end
daring fern
#

Also it's G.jokers.cards

wild escarp
#

idk where else I'd put it, and changing it to G.jokers.cards didn't make it work.

daring fern
solemn shuttle
#

remind me again how the path system works within the lua code

say i wanted to refer to image [a variable for X image file] in folder custom

would it be Wash.path .. "custom/" .. image

-# Wash being my mod thing too btw lol

#

or am i missing smth here

rocky plaza
#

i think if Wash.path is referring to ur mod directory then ur fine

solemn shuttle
#

oh wait i think i know what i did wrong

rough furnace
rocky plaza
solemn shuttle
#

yeah
i forgot to

#

define it LOL 😭

daring fern
#

It's SMODS.current_mod.path

rocky plaza
#

oh right

#

not at my laptop so i dont quite remember the way to get the mod path

#

fixed it

daring fern
spare elk
#

interesting reaction but what am i even doing wrong

rocky plaza
daring fern
spare elk
#

put what in a function? sorry if this is really dumb i havent coded in a while

rough furnace
#

card.ability.eternal is not a valid key

#

(you can just put eternal = true in your config and it will be put in the ability when created)

#

((i think))

spare elk
#

o

#

whoops

solemn shuttle
#

you could probably do smth like card:set_eternal(true) if nothing else id reckon tho youve probably have to attach it to other stuff like add_to_deck

#

-# or self:etc i forget which would work best for the consumables, depends on if IT or the card it affects is eternal

spare elk
#

something like this?

rough furnace
#

no

spare elk
#

sorry i'm trying my best but this is still confusing

hallow slate
#

How do i do custom loc_vars with planet consumables?

wild escarp
#

Anyone know why this makes the joker only shake once? I want it to continue shaking like invisible joker.

local oldaddtodeck = Card.add_to_deck
function Card:add_to_deck()
    if self.ability.name == 'Boost' then
        for i = 1, #G.jokers.cards do
            local eval = function(card)
                return not card.REMOVED
            end
            juice_card_until(G.jokers.cards[i], eval, true)
        end
    end
    return oldaddtodeck(self)
end
daring fern
wild escarp
#

Will that actually change anything though?

daring fern
#

It wont break when other cards with the name of Boost are added to deck.

chrome widget
azure laurel
#

in the github there is no information about how to code them

chrome widget
azure laurel
#

WHY THEY DIDNT CALL "DECK" TO THE PAGE

#

thanks for the info btw

rough furnace
#

because thats what they are called internally

buoyant thorn
#

how do i check if a specific voucher is being used?
I've been trying to make a deck for the past three days but i still haven't managed to find a context.voucher_use or anything similar
please help 🥺

rough furnace
#

the deck in code referes ussually to your cards, where as the back is what effects you have

rough furnace
chrome widget
#

No yeah they're referred to as "backs" in the game. For the purpose of organization in my mod, I have all my folders and stuff refer to them as decks and then my loading helper function just does this to call the SMODS API
if item_type == 'Deck' then smods_item = 'Back' end

buoyant thorn
#

OH

misty radish
#

How would I make a Joker that spawns a random Joker and then destructs itself? By a random Joker, I mean literally any Joker in the collection.

wild escarp
#

How do I make this stop? The jokers continue shaking after selling or using the consumable.

add_to_deck = function(self, card, from_debuff)
    for i = 1, #G.jokers.cards do
        local eval = function(card)
            return not card.REMOVED
        end
        juice_card_until(G.jokers.cards[i], eval, true)
    end
end
daring fern
azure laurel
daring fern
azure laurel
wild escarp
#

It's context.selling_self and that doesn't cover using it.

azure laurel
azure laurel
buoyant thorn
#

lol same

#

still trying to figure out how to actually tell when a specific voucher gets bought

#

making great progress though

wild escarp
daring fern
wild escarp
#

Ah, that makes sense

azure laurel
daring fern
azure laurel
daring fern
chrome widget
#

No, the reason for it is to not declare the same name as the card passed into the add_to_deck function

azure laurel
#

local eval = function what is it use apart from the card shaking thing?

azure laurel
#

so why is there?

daring fern
azure laurel
#

can i use it for other things?

wild escarp
#

It's just declaring a local function for the purpose of the card shaking, it does nothing on its own.

azure laurel
#

another code question, how i can modify the talk jimbo (things like the sprite or the dialogue or the sounds)? like cryptid with the jolly joker

final jewel
#

Is there something similar to this like that doesnt exist

daring fern
final jewel
#

ok thx

wild escarp
#

Is there a way to just give a booster pack a table of joker keys to choose from?

short girder
#

hey folksies!! so this bit isnt working (ive already sent this before but it still aint workin unfortunately). any ideas?

short girder
#

well, it aint doing anything.

#

i redeemed it once in a run and whenever i used tickets again, i got no money at all

daring fern
short girder
waxen halo
#

balatro modding ate my dog

dont become one

that is all

keen sleet
#

is there a way to get both the card being sold and the joker itself in the same context? I'm trying to make a joker that gains mult equal to the card's sell value but I don't have a reference to both the joker and sold card at the same time since card is only ever one or the other

daring fern
keen sleet
daring fern
#

card is always the joker.

#

Unless you overwrite it.

keen sleet
#

got it. card vs context.card was totally confusing me

waxen halo
keen sleet
#

that makes it so much clearer thanks

short girder
daring fern
short girder
#

oh, so i can just remove the set

#

sweet

#

doesnt that interfere with SMODS.add_card() though

short girder
#

oh nice

daring fern
#

You set the set in NotVanilla.Tickets so it sets that for you.

red flower
#

why are you extending consumables anyway

#

instead of making a consumabletype

daring fern
red flower
#

makes sense

#

it's still weird to make a consumable group where all of them use the same use but i can see it

old epoch
#

How would I detect how many rounds its been?

short girder
#

speaking of which

#

okay i made it so NotVanilla.Tickets = SMODS.ConsumableType{} however

daring fern
short girder
#

oh, okay

short girder
daring fern
short girder
#

oh, after

#

let me put it before

#

nothing changed

#

hold on

#

might be something to do with the replace thing i did

#

oh it was

#

sweet

#

thanks Somethingcom515

#

youre a real one

#

alright i can now ship the update! :]

frosty rampart
short girder
frosty rampart
#

maybe i should go set up dice as an SMODS.Consumable:extend now that i think about it
(i just made each consumable's use function call a single helper function and do nothing else, but it'd probably be a little cleaner to do the extend instead)

waxen halo
#

how does one make zee mod god this is tricky

why luaaaaaaaaaa 😢 🤚✋ nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope nope

frosty rampart
#

practice makes better :)

waxen halo
#

heres a good question... how would you make a card that adds like 2 mult every round you dont play hearts? 💔

mystic river
#

something something

if context.individual and context.other_card:is_suit("Hearts") then
 card.ability.extra.mult = 0
 return {
  message = localize("k_reset_ex")
 }
end

something something

if context.joker_main then
 return {
  mult = card.ability.extra.mult
 }
end

something something

if context.end_of_round and context.other_card == card then
 card.ability.extra.mult = card.ability.extra.mult + 2
 return { message = localize("k_upgrade_ex") }
end
#

i typed all that from memory so some of it might need double-checking against actual documents

mystic river
#

i believe that's G.GAME.rounds

daring fern
old epoch
#

Thanks

dreamy kindle
#

is there a conceivable way to override another mod's atlas with your own cus i cant figure it out

old epoch
#

I'm trying to have a joker detect if a foil joker is present, but I don't think its detecting properly. Could anyone help?

if context.joker then
            if context.other_card.edition and context.other_card.edition.type == "foil" then
                return {
                    mult = card.ability.extra.mult,
                    play_sound = ('btct_MichaelKaboom'),
                    G.E_MANAGER:add_event(Event({
                            trigger = 'after',
                            delay = 0.3,
                            blockable = false,
                            func = function()
                                card:remove()
                                return true
                            end
                }))
                }
            end
waxen halo
#

now balatro hates my .json.

how are those usually made?

frosty rampart
waxen halo
#

ahh

damn brackets

#

wait how did it work before?

#

not gonna question...

old epoch
#

Oh, that explains it. Thanks!

dreamy kindle
daring fern
dreamy kindle
#

it didnt work

#

SMODS.Atlas({key = 'bunco_jokers', path = 'Jokers/Jokers.png', px = 71, py = 95}) - original mod's code
SMODS.Atlas({key = 'bunc_bunco_jokers', path = 'Bunco Repainted/Jokers.png', raw_key = true, px = 71, py = 95}) - mine
is there something i'm typing wrong ?

#

(to clarify it didn't crash it just didn't apply the change)

daring fern
dreamy kindle
#

ohhhh right

#

hadnt considered that

#

that didnt change anything

manic rune
#

why is it crashin....

daring fern
manic rune
#

one sec

old epoch
#

I'm trying to make it to where when my joker detects a played foil card it self destructs, which works properly, but if the played hand doesn't have a foil card, it crashes the game with the below error:

Oops! The game crashed:
main.lua:3651: [SMODS Batrocities "items/jokers.lua"]:1383: attempt to index field 'edition' (a nil value)

Additional Context:
Balatro Version: 1.0.1o-FULL
Modded Version: 1.0.0~BETA-0615a-STEAMODDED

Here's my code:

elseif context.individual and context.cardarea == G.play and context.other_card.edition.foil == true then
                return {
                    message = 'NOOO, MICHAEL!!!',
                    play_sound('btct_MichaelKaboom'),
                    G.E_MANAGER:add_event(Event({
                            trigger = 'after',
                            delay = 0.3,
                            blockable = false,
                            func = function()
                                card:remove()
                                return true
                            end
                }))
                }
            end
frosty rampart
#

add and context.other_card.edition before the and context.other_card.edition.foil check, you need to check that edition itself exists on the card (if there's no edition it doesn't exist)

old epoch
#

Oh, okay. Thank you!

manic rune
waxen halo
#

ignore the author, thats my steam name. i still made it.

daring fern
# manic rune

SMODS.blueprint_effect calls Card:calculate_joker() which is the function you're hooking.

dreamy kindle
# dreamy kindle that didnt change anything

did what the debug menu told me to do and did take_ownership
SMODS.Atlas:take_ownership('bunc_bunco_jokers', {path = 'Bunco Repainted/Jokers.png'}, true)
and it gave me this error

daring fern
daring fern
manic rune
#

would it make sense for me to copy this and use the hook instead of calculate_joker

dreamy kindle
daring fern
manic rune
daring fern
manic rune
#

still stack overflow

#

oof

#

the crash log didnt copy...

daring fern
# manic rune

Have you tried removing recursive_check and just running it once?

manic rune
#

it shouldnt affect anything, but i will check later, thanks (i got classes to go rn)

foggy ginkgo
#

How do I make a joker a custom rarity and a legendary

daring fern
#

And rarity = 4

foggy ginkgo
#

Yum

#

Cause I made a Teto rarity but I also made a Teto Legendary

#

I want to have a pool of tetos but have that legendary come from a soul and not a shop or pack

lyric blade
#

Any Idea where I can check how SMODS.calculate_repetitions work?
There is not wiki for it as good as I know, but where can I look up the code of it?

daring fern
lyric blade
#

Oh wow! Thanks :D

naive narwhal
#

how would one make a custom deck? my dumb idea is “Chessed Deck” where it’s just checkered deck but with Clubs and Diamonds instead of hearts and spades

oak meadow
#
    key = "checkered",
    pos = { x = 1, y = 3 },
    unlocked = false,
    apply = function(self, back)
        G.E_MANAGER:add_event(Event({
            func = function()
                for k, v in pairs(G.playing_cards) do
                    if v.base.suit == 'Clubs' then
                        v:change_suit('Spades')
                    end
                    if v.base.suit == 'Diamonds' then
                        v:change_suit('Hearts')
                    end
                end
                return true
            end
        }))
    end,
    locked_loc_vars = function(self, info_queue, back)
        local other_name = localize('k_unknown')
        if G.P_CENTERS['b_black'].unlocked then
            other_name = localize { type = 'name_text', set = 'Back', key = 'b_black' }
        end

        return { vars = { other_name } }
    end,
    check_for_unlock = function(self, args)
        return args.type == 'win_deck' and get_deck_win_stake('b_black') > 1
    end
}```
idk how much this helps but here's the vanilla remade code for it
#

(checkered deck)

#

im assumign you could just swap the suits to make it like this

    key = "chessed",
    pos = { x = 1, y = 3 },
    unlocked = false,
    apply = function(self, back)
        G.E_MANAGER:add_event(Event({
            func = function()
                for k, v in pairs(G.playing_cards) do
                    if v.base.suit == 'Spades' then
                        v:change_suit('Clubs')
                    end
                    if v.base.suit == 'Hearts' then
                        v:change_suit('Diamonds')
                    end
                end
                return true
            end
        }))
    end,
    locked_loc_vars = function(self, info_queue, back)
        local other_name = localize('k_unknown')
        if G.P_CENTERS['b_black'].unlocked then
            other_name = localize { type = 'name_text', set = 'Back', key = 'b_black' }
        end

        return { vars = { other_name } }
    end,
    check_for_unlock = function(self, args)
        return args.type == 'win_deck' and get_deck_win_stake('b_black') > 1
    end
}```
manic rune
#

it was indeed the case

#

im sorry for doubting you somethingcom

#

sob

maiden phoenix
#

Somethingcom, red x mark react this person

manic rune
#

i think i can easily fix this though, just, not use calculate for increasing mult gain and stuff

maiden phoenix
#

Bet you wish that operator pr was implemented

manic rune
#

true

daring fern
manic rune
#

.

#

OHHHHHHHHHHHHHHHHHHHHh

#

oh yeah i see it now

#

thanks

distant junco
#

testing changing the rank of cards with this code but its currently doing a boatload of nothing

distant junco
#

i dont think so

#

ill give it a shot tho

spice wadi
#

Have you put a print in there to check if anything there is actually triggering

manic rune
#

oh nevermind its Queen, hm

daring fern
#

It would be context.other_card

spice wadi
#

Oh yeah
In the change base function
I'm very observant /s

manic rune
#

same

distant junco
distant junco
daring fern
lament agate
#

how do you add tooltips for tags

#
info_queue[#info_queue + 1] = G.P_CENTERS.tag_negative
#

?

rotund sable
#

I did it like this

info_queue[#info_queue + 1] = { key = 'tag_EF_small_plant_pack_tag', set = 'Tag' }
#

Idk maybe both work

lament agate
#

fuck me

rotund sable
#

Can't you test it

lament agate
#

oh fair

#

fair fair

#

god

rotund sable
#

Be at least somewhat independent of modding dev

lament agate
#

im independent alright

#

actually i have no idea what that word is

#

besides decolonization

lament agate
#

thanks

lament agate
#

is G. customizable?

#

looking at this code, i wanted to give a joker a long message like this joker

red flower
#

yeah, you don't need to save it to G tho unless you need to reference it in other places

#

just save it in a local

rotund sable
unborn bay
#

all tag centers are in G.P_TAGS

lament agate
lament agate
lament agate
red flower
#

instead of G.beemoviescript = ...
you do local beemoviescript = ... before the joker code

lament agate
#

its saved in here

#

so i just do local inside of the loc?

red flower
#

no, it needs to be in the same file
if it's in another file it does need to be saved to a global table but I would recommend you use Tangents or something if you have one

#

but it doesn't need to be saved to localization

#

and it's actually weird that it is lol

lament agate
manic rune
#

you cant expect a first-timer to know how we usually do stuff

lament agate
manic rune
#

asides from the naming, yes

unborn bay
#

NO!!!! /j

lament agate
#

D:

maiden phoenix
#

Why don't you put it in your global mod variable?

lament agate
#

im deleting tagnets

maiden phoenix
#

(If you have one)

manic rune
#

magnets??

lament agate
#

i forgot which thats the problem

lament agate
maiden phoenix
#

bru

rotund sable
maiden phoenix
#

Yea why do you assume you have multiple ones

lament agate
maiden phoenix
#

Prediction: "I'M NEW"

lament agate
#

IM NEW

unborn bay
#

nxkoo....

lament agate
#

oh wait

#

ohhh

#

i figured it out now

#

thanks

rotund sable
#

My init of a global table looks like this

local function EF_table_init()
  return {
    vars = {
      jokers = { grapevine = {}, },
      minigames = { minesweeper = {}, parlor = {} }
    },
    FUNCS = { UIDEF = {}, UI = {}, minesweeper = {},},
  }
end
EF = EF_table_init()
#

Don't ask me why it's a function

lament agate
#

mine's a mess

maiden phoenix
#

At least you somewhat use your variable unlike a certain someone

red flower
#

all my things are directly in the global table, i cant be bothered to remember if something is in funcs or utils or whatnot

lament agate
#

this is why single file mod wins

red flower
#

hmm

maiden phoenix
lament agate
#

DAMN

rotund sable
lament agate
#

N' if i were you, i wouldnt take that

red flower
#

it's true

maiden phoenix
#

I didn't mean to be rude 😭

#

I do the same thing anyway

#

N have you ever checked Siralim Balatro's code?

lament agate
#

we're all messy eater

#

spaghetti code

red flower
lament agate
#

is there xmult_mod

#

or am i crazy

#

dont ask me why i use _mod

maiden phoenix
red flower
#

if you need to change the message there are proper ways to do that

red flower
#

xmult_message

cursive gazelle
#

This takes a table

#

Btw

#

xmult_messgae={“message”,color},

lament agate
#

is this a table

#

cant show the whole thing

cursive gazelle
#

I have so many questions

lament agate
#

lets not

#

do it rn

#

shh

red flower
cursive gazelle
#

Thanks N

lament agate
#

wait a second

#

if i use

#

G

#

how would i pick

#

the message

cursive gazelle
#

G.C.RED

lament agate
#

no no like

cursive gazelle
#

Like what

lament agate
#

nevermind

#

i figured it out

#

wait so like

#

i dont need G.nxkoo_dies?

keen atlas
lament agate
#

ill fix it later

spice wadi
lament agate
cursive gazelle
lament agate
#

something

#

EITHER WAY I NEED HELP

#

it crashes

cursive gazelle
#

Idk what you want to accomplish

spice wadi
#

its for MUSTAAAARD i presume

#

well

#

i hope

cursive gazelle
#

Like

#

Kendrick

#

What does Kendrick have to do with balatro

spice wadi
#

what does anything have to do with balatro

cursive gazelle
#

Honestly that’s a good point

cursive gazelle
#

[i’ve been waiting inline for the past 5 minutes] to buy a figurine

cursive gazelle
#

Why’s it not synced with the audio

lament agate
spice wadi
lament agate
#

ken

#

dih 🥀

spice wadi
lament agate
#

i want to show this as the xmult message

#

and here's the code

cursive gazelle
#

Xmult message only returns once i believe

lament agate
#

thats why i use xmult_mod

#

do i replace #G.

#

with nxkoo_dies

#

the global one

cursive gazelle
#

What does nxkoo_dies contain

cursive gazelle
gilded blaze
#

bee joker jumpscare

lament agate
lament agate
#

hold on

#

god i have to install the mod again

cursive gazelle
#

Check github

#

Search for bee

#

Or something

gilded blaze
#

😭

#

yahimod is so unhinged

#

I watched Murphy suffer with it

cursive gazelle
#

I think that’s the inspiration of nxkoo

lament agate
#

same code from yahimod

#

btw

red flower
#

what's the issue

cursive gazelle
lament agate
#

it doesnt show up the message

red flower
#

it doesn't crash?

lament agate
#

you jinxed it

red flower
#

do you load the file with the text

lament agate
#

the what

red flower
#

the file that has the G.whatever

lament agate
#

G.nxkoo_dies

#
        if context.joker_main then
            for i = 1, #G.nxkoo_dies do
                card.ability.extra.xmult = 3
                G.E_MANAGER:add_event(Event({
                    trigger = 'immediate',
                    blocking = false,
                    delay = 0,
                    func = function()  
                        card_eval_status_text(card,'extra',nil,nil,nil,{message = G.theworldcrispiestfries[i]})
                        return true
                    end,
                    }))
            end
            return {xmult_mod = card.ability.extra.mult}
        end
manic rune
#

what N' meant is, did you load the file that has G.nxkoo_dies

#

it has to be loaded else that doesnt exist

red flower
#

it's the fries one

manic rune
#

shouldnt it be G.nxkoo_dies.theworldcrispiestfries?

lament agate
#

OH

red flower
#

do u think i know what tangents organization structure is

lament agate
#

LMAO

manic rune
#

same, im just assuming though

manic rune
#

and i would fucking crash out if its not G.nxkoo_dies

#

😭

lament agate
manic rune
#

GOOD

lament agate
#

IM NOT THAT BAD

manic rune
#

you do seem like the kind of person to make like 10 global tables for no reason 😭

lament agate
manic rune
#

what.

lament agate
#

what

manic rune
red flower
lament agate
#

oh

#

right

manic rune
#

nxkoo you fell off in my heart 🥀

lament agate
#

god

#

fuck me sideways

#

IM NEW

lament agate
red flower
#

im emu otori

cursive gazelle
#

Wonderhoy reference out of the blue

lament agate
#

oh now its not giving me the mult

manic rune
#

whats the code

lament agate
#

hold on

manic rune
#

also its xmult_mod so there wont be a message to tell when it gives xmult

lament agate
#

so what do

#
    calculate = function(self, card, context)
        if context.joker_main then
            for i = 1, #G.nxkoo_dies.theworldcrispiestfries do
                card.ability.extra.xmult = 3
                G.E_MANAGER:add_event(Event({
                    trigger = 'immediate',
                    blocking = false,
                    delay = 0,
                    func = function()  
                        card_eval_status_text(card,'extra',nil,nil,nil,{message = G.nxkoo_dies.theworldcrispiestfries[i]})
                        return true
                    end,
                    }))
            end
            return {xmult_mod = card.ability.extra.mult}
        end
    end
manic rune
#

if you are asking about the message then use xmult instead

manic rune
lament agate
manic rune
#

yes

lament agate
#

trust the process

lament agate
#

nevermind

#

im dumb

manic rune
#

nxkoo found dead in the alleyway yesterday

lament agate
#

D:

pastel kernel
#

How do I make a joker that multiplies the values of the joker to the right? I’m looking to make one that looks for certain values within a joker, then multiplies them by a certain amount. (also yes, this is in the joker code too)

#

It also ignores any values within “immutable” or whatever.

cursive gazelle
#

bepis can help

#

i think he did something similar with stacked

pastel kernel
#

I don’t think they’re active

faint yacht
#

I "had" a Joker that multiplied all values on a given Joker, save for ones that have .immutable attribute, but then I changed it.

faint yacht
#

iirc I did write most of it manually, if not all of it.

pastel kernel
#

Like it doesn’t use the cryptid’s own code?

faint yacht
#

Don't think so, despite Cryptid being the idea for it back then.

pastel kernel
#

damn

#

i wish i knew how to do that

faint yacht
pastel kernel
#

ok so i'm not nerdy enough to completely understand this joker

faint yacht
#

...that's fair, and I'm not exactly in any mental capacity to explain things currently. 😅

manic rune
#

im doing my english practice test rn but uh

#
function table.modify(table1, modifications, exclude, from) --Changes all the values of a table.
    local ret = table.clone(table1)
    
    for i,v in pairs(ret) do
        if not table.contains(exclude or {}, i) and not (type(v) == "number" and v == 0) and not (type(from) == "string" and from == "immutable") and not (tostring(from) == "ability" and type(i) == "string" and (string.find(string.lower(string.gsub(i,"_","")), "xmult") or string.find(string.lower(string.gsub(i,"_","")), "xchip")) and (v == 1 or v == 0)) then
            if type(v) == "table" then
                ret[i] = table.modify(v, modifications, exclude, i)
            elseif type(v) == "number" then
                ret[i] = ((v + (modifications["add"] or 0)) * (modifications["multiply"] or 1)) ^ (modifications["exponential"] or 1)
            end
        end
    end
    return ret
end

BalatroSR.modify_ability = function(card, modifications, exclude_add) --My version of a function that changes Jokers' ability table. :3
    local exclude = table.add({"order"}, exclude_add)
    local modified_ability = table.modify(card.ability, modifications or {}, exclude, "ability")
    card.ability = modified_ability
    return modified_ability
end
#

this is what i do

#

oh, im missing a few functions

#
function table.clone(table) --Clones a table.
    local ret = {}
    for i,v in pairs(table) do
        ret[i] = (type(v) == "table" and table.clone(v)) or v
    end
    return ret
end

function table.add(table1, table2, all_add) --Adds/replaces all the value of table2 to table1. 
    if not table1 or not table2 then return table1 or table2 end
    local ret = table.clone(table1)

    if all_add then
       for i,v in pairs(table2) do
            if not ret[i] then
                ret[i] = v
            else
                if type(v) == "number" and type(ret[i]) == "number" then
                    ret[i] = ret[i] + v
                elseif type(v) == "table" and type(ret[i]) == "table" then
                    ret[i] = table.add(ret[i], v, all_add)
                else
                    ret[i] = v
                end 
            end
        end
    else
        for _,v in ipairs(table2) do
            ret[#ret+1] = v
        end
    end

    return ret
end
#

table.add isnt as menacing as you think, its just adding stuff to a table

pastel kernel
#

So what's the requirements for a joker to be able to modify any value of a selected joker?

manic rune
#

ao

#

what

#

though do note you also want to exclude some stuff

pastel kernel
#

that's why "immutable" is a category

manic rune
#

mhm, which my function should already account for shrug

#

my test will end about an hour later, if you are still free by that time then i would be happy to help

#

sorri

pastel kernel
#

it's ok

proven belfry
#

hey uhh im trying to make a deck spawn jokers but it keeps crashing, any fixes?

manic rune
#

you need an event

#

go smods documentation and search for event manager if you dont know how to make one

#

kdsma'

pastel kernel
#

either i wanna make my own code or i can snatch from an existing source.

#

otherwise, scratch the whole idea altogether and move on without any value manipulation jokers.

pastel kernel
#

If I wanna make my own code, that would require me to read through the entire lua documentation AND the entire steamodded api documentation. And I have ADHD so I will be spending maybe a year or two, without doing anything at all.

If I wanna snatch from an existing source, I would probably be called out for plagiarism.

distant junco
#

//nvm it just decided to work lmao

spice wadi
pastel kernel
distant junco
#

i second this, ive only been using lua for about 2 weeks and its the easiest bit of programming i have ever done in my life

spice wadi
distant junco
#

i dont even know what a CSS is

rotund sable
#

If not this channel I would probably quit

#

So yk

red flower
#

the hard part is the balatro quirks

pastel kernel
distant junco
#

yeah

manic rune
#

i would say lua is pretty straightforward once you understand its shenanigans

distant junco
#

once you get the hang of it you can fly through it. i made like 20 jokers in a couple of days

manic rune
#

food jokers shouldnt be too hard, unless you are digging into more complex mechanics that would need to interact somewhat with the base game code more

spice wadi
manic rune
#

also, i think paya has a joker you are looking for?

distant junco
#

ah

manic rune
#

it multplies all values of adjacent jokers by twice

spice wadi
manic rune
#

ive unfortunately heard both bad and good things about jokerforge

#

:3

pastel kernel
#

Like Gemini

#

Dongtong

distant junco
#

i tried it and it was too limiting

pastel kernel
#

Whatever the fuck y’all made

red flower
#

with all of this said, value manipulation is kinda hard tho

#

like you can just copy what someone else made but understanding it as a beginner is a bit more complicated

spice wadi
#

^^^ sounds simple but messing with values across jokers is a bit tricky I can imagine

manic rune
#

value manipulation is very much prone to unintended bugs too

#

;3 thats why i made a function to do that but never used

red flower
#

this is why i try to not touch jokers that are not from my mod
if you stick to being self contained everything is easy

manic rune
#

anyways i got an essay and a graph left, i will see yall later

red flower
#

go study

pastel kernel
#

So I should drop value manipulation altogether?

distant junco
#

what do you want the joker to do?

red flower
#

im just giving you information for you to make informed decisions, it's your choice

pastel kernel
distant junco
#

okay that would be pretty tough

#

its possible, but it will be a challenge

spice wadi
#

The more consistent and less buggy you want it to be, the more effort and time you'll have to spend on making and testing it

hushed field
# pastel kernel It’s simple really, all I really want is to make a “value manipulation” joker, n...

Paya's definitely has the most straight forward implementation, but yeah, the reason it's hard to set up has to do with crossmod compatibility. Though, even with vanilla jokers, you'll have to hardcode in the exceptions. The issue you'll have is that the way balatro's set up means that values aren't separated by changable or unchangable, nor by internal vs player facing, so you need to choose an approach to deal with those

#

The issue is also that value manipulation in that method is based on copying and storing values, which has quite some overhead, and means you need to ensure your code's set up to deal with it, because it's very easy to get a stack overflow that way

pastel kernel
#

Mayhem really likes it’s Planet Cards.

#

Ok then I guess i’m sticking to uhh… I guess make the specific joker a cross-mod joker

#

Where it only shows up when cryptid is installed.

hushed field
#

I'm planning on making my own value manipulation system an API mod at some point, but it's got the classic issue of needing mods to put in quite some effort to be properly compatible

faint yacht
hushed field
#

Yeah, same reason mine's only compatible with my own jokers, haha

pastel kernel
#

Imagine the api only works with vanilla and mods that have the api

faint yacht
pastel kernel
#

Any other mods with their own value manipulation are left untouched.

hushed field
rocky plaza
#

yo why is my editor showing a type error

pastel kernel
#

Unless it’s like cryptid and entropy, where they have specifications.

rocky plaza
#

this is indeed how to apply enhancements correct?

pastel kernel
#

Um

hushed field
#

yeah, that should work. It probably does not recognize that string as a proper key

red flower
normal crest
#

spoiler: there is no problem, ide doesn't know

hushed field
red flower
rocky plaza
#

yeah

red flower
#

it seems to not have the smods changes to the function

pastel kernel
#

I wanna be able to do it with yahimod at some point.

dreamy thunder
#

BURN talisman

manic rune
#

i agree

#

anyways im free now, is there anything you want to ask firsttry

pastel kernel
manic rune
#

i see, though i do wonder if eremel would even merge it 🤔

pastel kernel
#

I plan to make a voucher for making fantastic jokers show up in the shop.

#

I believe it’s weight manipulation that gets it done.

modern kindle
#

Good schmorning chat

chrome widget
#

Morning dilly

modern kindle
#

How are you winter

chrome widget
#

Bowlin

#

I've been voracious this week

manic rune
#

hi dilly

#

have you fixed your sleep schedule yet

modern kindle
#

2 or 3 qm

#

Am

manic rune
#

well thats decent enough lol

modern kindle
#

Ive been lazy lately and haven't touched my mod

#

Pretty bad of me

wintry solar
#

Hello everyone

modern kindle
#

Hi eremel

red flower
#

hi dilly

lament quarry
#

Hello, is it possible to change the name of the regular suits through modding? I made a custom set of cards and right now, the suits don’t match the artworks so it’s confusing

modern kindle
manic rune
#

hi eremel

#

-# i didnt spot him in the chat somehow

modern kindle
#

I hope one day you will spot me

split sleet
#

Got a technical question, what is the best way to refer to a custom rank in a joker. c.getID is what normal jokers do, but they don't work for customs.

 loc_vars = function(self, info_queue, card)
        return {vars = {}}
    end,

    calculate = function(self, card, context)
        if context.pre_discard and not context.blueprint then
            if ((function()
    local rankCount = 0
    for i, c in ipairs(context.full_hand) do
        **if c.base.value == "rfCAV_Tradesmen" then**
            rankCount = rankCount + 1
        end
    end

It's just the bolded part I need help with. When you discard the tradesmen then you should proceed.

manic rune
wintry solar
pastel kernel
#

“Creates a random consumable for each unscoring card”
Balanced as a fantastic joker or nah?

modern kindle
manic rune
#

naw

modern kindle
#

Lmao

manic rune
#

i would probably take that if i were still playing hsr 😭

modern kindle
#

The mod works shes just messy

#

My patch line count is straight up diabolical

manic rune
#

stacked doesnt use a patch file yet

#

pretty proud of it :3

modern kindle
#

patch lines..........

manic rune
#

hooks do NOT exist in his head whatsoever..............

modern kindle
#

i use like

#

6 hooks or something

manic rune
#

do you believe in pirates dilly

modern kindle
#

yar har

pastel kernel
#

Is e_dollars a valid value 😭

manic rune
#

i dont think so

modern kindle
#

i have to figure out either how id turn some stuff into hooks or if someone at some point would be nice enough to get rid of my patches that can be hooks

proven belfry
#

how do I make a consumable that does /4 chip requirement and -1 hand size only for the round

spice wadi
modern kindle
#

i know what theyre for, im just inept

spice wadi
spice wadi
chrome widget
#

That said I'm gonna need to add this same credit to Galdur unless it already has some framework for it, since lots of people use Galdur

proven belfry
#

also how do I make a joker that guarantees that my custom consumable with soul_rate spawns in all booster packs that could contain it

modern kindle
#

text

chrome widget
#

To what specifically?

#

Like the title that says artist?

modern kindle
#

like the artist credits themselves

#

so if the artist credit is thewintercomet

thewintercomet is a gradient smeele

wintry solar
#

That’s cool but I wouldn’t put that in galdur like that

chrome widget
#

I mean I gotta add support for it

#

I'm probably the only person who doesn't use it

wintry solar
#

I just think it looks a bit wonky like that

modern kindle
wintry solar
#

Though I dislike the general rounded bubble aesthetic the game provides as a whole

chrome widget
#

I don't mind it much. I tried to make the bubble edges less round though I was having issues

#

Regardless I'll probs just end up basically doing the same thing, thinning the description box if present and adding the credit underneath

#

........

#

I think I just realized that, if multi boxes are supported for this, I might not have needed to do this at all

#

Fuck it we ball

#

The benefit of the added node is the added title, whereas multi boxes would require a more standard organization and just saying "Deck art by [name]" without any additional formatting

#

And it would also run into the same minimum height problem I think, since I forced the text to be really short

red flower
#

yeah it looks better with the title

chrome widget
#

Hmmm yeah I'll stick with it. Ill probably test to see what happens if you use multi boxes though

modern kindle
#

holy schmoly guys my orbs are waiting

manic rune
#

dont play with your orbs dilly

manic rune
#

i dunno how to do that, sorry

modern kindle
frigid cargo
modern kindle
#

they beckon me........

frigid cargo
#

Resist the urge dilly

#

This isnt you

modern kindle
#

but what if it was always meant to be me.......

frigid cargo
#

DILLY NOOOOO

vestal magnet
#

if i want to make a joker with an animated texture do i do the same thing boss blind textures do

red flower
#

no

#

you need to do it manually in an update function

#

i would recommend looking how other mods do it

wintry solar
#

For now

red flower
#

are you merging that aure pr

manic rune
#

:3 i remember giving nxkoo the function to have animation triggers

modern kindle
#

thunderedge had a pretty good bit of assistance provided for a variation i also use now

buoyant shard
#

what's the trigger for the start of the round?

manic rune
#

context.setting_blind?

rocky plaza
#

specifically misc/util.lua

modern kindle
#

hey youre the fellow i complimented moments ago

rocky plaza
#

should work for jokers and consumables

#

and anything that isnt compatible with an animated atlas

manic rune
#

thunderedge can you work for my mod

#

:3

#

i need some ui help....

rocky plaza
manic rune
#

sob

modern kindle
#

the secret to ui is to not do it

chrome widget
#

@modern kindle I've got your 240 finally btw

modern kindle
#

dont say sike rn

buoyant shard
#

How do you use create_card() to create a negative joker?

manic rune
#

dont

#

use SMODS.add_card instead

modern kindle
#

more like SMODS.mid_card

red flower
manic rune
#

and also, `SMODS.add_card()

#

nevermind

chrome widget
#

FUCK NO I MISCOUNTED ITS A 238

modern kindle
#

winter im going to sell you.

#

its over.

#

its too late.

red flower
modern kindle
#

im selling winter

manic rune
#

+$4

buoyant shard
manic rune
#

add key = "your joker key"

chrome widget
#

Sorry I thought with the spare tally it was 248 after the tenth

modern kindle
#

how could you miss 2 points

#

what do i pay you for

buoyant shard
#

thanks gang

wintry solar
modern kindle
#

how long is your todo list

wintry solar
#

Uhhh

chrome widget
modern kindle
manic rune
#

eremel working on ortalab, smods new documentation and managing prs at the same time:

wintry solar
#

You say that with the confidence that I’m working on documentation

modern kindle
#

nobody needs documentation anyway if you think about it

rocky plaza
modern kindle
#

thats what im sayin

chrome widget
#

I'm still up to help with documentation Eremel 😔 what isn't being handled by Gauntlet and co anyway

distant junco
#

how do i add a card to the deck

#

nvm its easy af

wintry solar
#

what is gauntlet and co

chrome widget
#

Gauntlet appears to be a contributor to the wiki and co are other people I've seen do documentation PRa

buoyant shard
#

This is my attempt at making the second card retrigger by altering the code for hanging chad:

            if (context.other_card == context.scoring_hand[2]) then
                return {
                    message = "So Charming!",
                    repetitions = self.ability.extra,
                    card = self
                }
            end
        end

It keeps crashing, and I'm sure there's a way better way you guys know of

wintry solar
#

oh flowwey

manic rune
#

and just, dont use self :3

#

replace self with card

wintry solar
#

I mean, feel free to write stuff Winter, I just don't have the time nor motivation to review wiki PRs

manic rune
#

if you are copying effects from vanilla jokers then id recommend doing so from vanillaremade instead

manic rune
gusty iron
#

trying to make a face card skin, but this keeps happening, any help?

manic rune
#

thats very vague

#

-# or i have never tried doing that before so i cant tell anything

gusty iron
#

the line of code that seems to be breaking is

           if v.config.card_key ~= suit_data.card_key..'_'..SMODS.Ranks[d_ranks[i]].card_key then
chrome widget
wintry solar
#

ye

distant junco
rotund sable
#

{ vs (

manic rune
#

holy flashbang

red flower
#

SMODS.add_card { set = "Playing Card", rank = "King" }

chrome widget
distant junco
#

ohh ok on the smods docs it doesnt show the {} it has ()

red flower
#

SMODS.add_card({ set = "Playing Card", rank = "King" }) works too

#

but the argument is a table

distant junco
#

got it

#

is there a way i can make it do an animation when the card is created like marble joker?

red flower
#

yes

#

check marble joker

#

:3

chrome widget
#

@modern kindle are you happy now

distant junco
red flower
#

:3

ocean sinew
#

how to do shaders theres no doc on Steamodded wiki

red flower
#

i simplified it for vanillaremade too

modern kindle
modern kindle
ocean sinew
#

examples repo?

gusty iron
distant junco
#

??

red flower
#

no

#

its the entire thing

#

all of this

modern kindle
ocean sinew
#

where I find those

#

oh I found

#

this is a shader

#

Where I can actually learn about making shaders?

#

are these open gl shaders?

#

oh its open gl shaders

#

I'mma read documentation about it

vernal path
#

Should I do a lovely patch or hook a function to make booster packs have 0 options when I have a certain joker?

ocean sinew
#

or lovely patches whatever u wanna do

#

I just find lovely patches weird

vernal path
#

i was asking those who have a clue

ocean sinew
#

I have a clue

vernal path
#

then why did you respond by saying nothing

ocean sinew
#

Because it literally doesn't matter

distant junco
ocean sinew
#

Just stop wasting ur time and do whatever u find best

azure laurel
#

hey, how can i make a joker to debuff certain cards?

chrome widget
#

And yeah Love2D shaders are GLSL shaders with a slightly outdated version of the language by default and some strange aliasing for certain functions

#

It's like version 1.2 or smth?

#

You can force it to use GLSL 3 with a preprocessor directive while I had to do for a couple of mine, but supposedly it's not recommended for device support

ocean sinew
#

I was reading the latest version 💀

gusty iron
rocky plaza
red flower
gusty iron
distant junco
azure laurel
azure laurel
rocky plaza
red flower
gusty iron
# rocky plaza huh, can i see where u are trying to use the atlas then
for _, s in ipairs(suits) do
    SMODS.DeckSkin{
        key = s.key,
        suit = s.suit,

        loc_txt = {
            name = "Gooberlands",
            text = "Goobering my lands!!"
        },

        palettes = {
            {
                key = "hc",
                ranks = {"Jack", "Queen", "King"},       -- only skin these
                display_ranks = {"Jack", "Queen", "King"},
                atlas = "GooberlandsSkin",
                pos_style = {
                    fallback_style = "deck",   -- i think this is how you do it???
                    Jack = { atlas = "GooberlandsSkin", pos = {x = 0, y = s.row} },
                    Queen = { atlas = "GooberlandsSkin", pos = {x = 1, y = s.row} },
                    King = { atlas = "GooberlandsSkin", pos = {x = 2, y = s.row} },
                },
            }
        },

        colour = s.colour,
        hc_default = true,
    }
end
azure laurel
red flower
#

to debuff

gusty iron
azure laurel
# red flower to debuff

like this?
calculate = function(self, card, context)
if context.joker_main then
if context.other_card:get_id() == 14 or
context.other_card:get_id() == 6 then
return {
debuff = true
}
end
end
end
}

rocky plaza
#

so "mod_prefix_GooberlandsSkin"

red flower
azure laurel
#

ok ill try

gusty iron
#

Okay that worked but uh...

#

I LOVE table: 0x0699d968

distant junco
#

beta males want to sit on the adults table

ALPHA males want to sit on the 0x0699d968 table

rocky plaza
#

in loc_txt

#

i think

rocky plaza
tender pond
#

how to get mods

distant junco
azure laurel
distant junco
# red flower can i see
local chrank = pseudorandom('rabbits', 1, 1)
            if chrank == 1 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
rocky plaza
tender pond
#

but i don't know how to add them

red flower
distant junco
red flower
#

does it need to be in after

distant junco
distant junco
#

where should it be

red flower
#

you can do it in context.drawing_cards

#

the problem is that the animation relies on G.play being empty

distant junco
#

ahh ok

rocky plaza
tender pond
#

i want to add mods

red flower
#

this channel is for mod development

distant junco
#

can i make return messages show up for longer?

#

they are so quick

gusty iron
rocky plaza
gusty iron
#

i have it both in deckskin and in palettes

rocky plaza
gusty iron
#

yeah

#

i added it

#

heres my new code

#
for _, s in ipairs(suits) do
    SMODS.DeckSkin{
        key = s.key,
        suit = s.suit,

        loc_txt = {
            label = "Gooberlands",
            name = "Gooberlands"
        },

        palettes = {
            {
                key = "hc",
                ranks = {"Jack", "Queen", "King"},       -- only skin these
    loc_txt = {
            label = "Gooberlands",
            name = "Gooberlands"
        },
                display_ranks = {"Jack", "Queen", "King"},
                atlas = "JCJ_GooberlandsSkin",
                pos_style = {
                    fallback_style = "deck",   -- i think this is how you do it???
                    Jack = { atlas = "JCJ_GooberlandsSkin", pos = {x = 0, y = s.row} },
                    Queen = { atlas = "JCJ_GooberlandsSkin", pos = {x = 1, y = s.row} },
                    King = { atlas = "JCJ_GooberlandsSkin", pos = {x = 2, y = s.row} },
                },
        
            }
        },

        colour = s.colour,
        hc_default = true,
    }
end
rocky plaza
#

havent messed with deck skins myself so i dont have any personal experience with fixing deck skins

gusty iron
#

is there any way to keep these as high contrast?

rocky plaza
# vestal magnet anks

i should probably document my anim code more clearly if more people are going to reference it lol

gusty iron
rocky plaza
#

also that screenshot is of high contrast cards

gusty iron
#

WHY ARENT THEY BLUEEEE

rotund sable
#

No high contrast?

gusty iron
#

yeah i have high contrast turned on, but they're still the lc colors

chrome widget
#

I had this issue some time ago

#

I feel like it might have something to do with a settings mismatch if you mess with the front sprite setting code?

#

Because I edited something, fixed it, and then changed the original code back and it was fixed

#

So it wasn't actually my code that was the issue apparently

gusty iron
#

this is using deckskin

agile path
#

hey chat, i decided to attempt to make stuff myself

#

is there anything i need to know

red flower
#

lua

#

but seriously, check the pinned post in modding-chat

distant junco
gusty iron
#

learn how to organize things so that your main lua file doesnt have over 5K lines

distant junco
#

wow 5k lines must be a lot. im barely scraping 2k and im not the best at optimising

rocky plaza
# agile path is there anything i need to know
GitHub

Contribute to nh6574/VanillaRemade development by creating an account on GitHub.

GitHub

A Balatro Modding Framework. Contribute to Steamodded/smods development by creating an account on GitHub.

azure laurel
#

theres is an error with my code, the cards that this joker suppose to give Xmult 1.5 are not working

distant junco
#

goes for everyone actually lol

distant junco
#

thank you

rocky plaza
distant junco
#

feel free!!

rocky plaza
rocky plaza
#

so return xmult = value_here

red flower
#

Xmult works

agile path
red flower
rocky plaza
azure laurel
gusty iron
#

finally got this working

rocky plaza
red flower
distant junco
gusty iron
#

BUT WHY IS IT STILL LC

gusty iron
red flower
azure laurel
dreamy kindle
azure laurel
# red flower can you paste it here

calculate = function(self, card, context)
if context.debuff_card then
if context.debuff_card:get_id() == 14 then
return {
debuff = true
}
end
if context.individual and context.cardarea == G.play then
if context.other_card:is_face() then
return {
Xmult = card.ability.extra.Xmult
}
end
end
end
end

red flower
dreamy kindle
#

i’m not using marvel

#

marvel

#

malverk

#

god damn

red flower
#

you probably should

red flower
agile path
#

so, let's pretend i never worked with lua before, do i have any chance at all?

sturdy compass
#

For sure

red flower
#

did you work with any other language

gusty iron
rocky plaza
agile path
#

i have, but the coding we did was ass

#

they never really teached us shit

red flower
#

lua is pretty easy to get into, its a good beginner language

azure laurel
sturdy compass
#

As long as you have some basic knowledge of how code is structured you should be fine

agile path
sturdy compass
#

Lua is a good beginner language as N said, and SMODS has become a pretty friendly API to use as well

rocky plaza
red flower
dreamy kindle
rocky plaza
#

again, its just getting used to lua's syntax and how it marks if blocks and functions

red flower
azure laurel
agile path
sturdy compass
#

Then yeah you'll be fine!

#

Also you are more than welcome to come here to ask for support if you get stuck

agile path
#

i think it was eclipse what we used?

dreamy kindle
agile path
sturdy compass
#

Trust me, it's very hard to do that

gusty iron
rocky plaza
agile path
#

i must ask, i see this word a lot: hash
what is that?

sturdy compass
#

hashing isn't really something that needs to be worried about when it comes to Balatro modding

agile path
#

we did tables, but again, i'd have to refresh my memory on it

rocky plaza
agile path
#

correct

#

so if you pull say, a
It gives a value of 1 yes?

rocky plaza
#

so if we do t = {a = 1, b = 2}
then with lua syntax we will get 1 when accessing t.a

rocky plaza
agile path
#

the t would stand for table, yes?

chrome widget
#

Yeah hashing isn't some advanced level thing. Lua tables are hashmaps by default. Most lower level and non-scripting languages have to implement them in some specific structure, but Lua's front-facing script is just built on them in general

sturdy compass
rocky plaza
red flower
#

<@&1133519078540185692>

rocky plaza
#

<@&1133519078540185692> ban

agile path
#

oop

rocky plaza
#

wtf

agile path
#

i want to learn coding, not gooning
get tf out

sturdy compass
#

simply incredible show of intelligence

polar tulip
#

Bots be botting

sturdy compass
#

thanks mods

exotic hedge
agile path
rocky plaza
polar tulip
agile path
#

i'm already a pro at one of them

chrome widget
#

🤝

agile path
rocky plaza
rocky plaza
agile path
#

got it, i'll look into it

red flower
agile path
sturdy compass
chrome widget
#

Yeah non strictly-typed variables are kind of a jump when you're used to strongly-typed languages. I got frustrated at them a lot at the start because they can unfortunately hide a lot of errors

agile path
#

(you'd be surprised, whenever we asked basic questions, we'd get made fun of by our teachers)

rocky plaza
agile path
#

yeah, not fun

agile path
rocky plaza
#

btw local is just another way of saying to the progam "hey, i'm not accessible globally from other functions"

split saddle
#

what do you pass into info_queue to display gold seals?

primal robin