#💻・modding-dev

1 messages · Page 274 of 1

rugged pier
#

in calculate yes?

tawny narwhal
#

yes

#

Yet again, goober moment

heady siren
dense adder
#

does anyone know how misprint has the changing effect?

rugged pier
# tawny narwhal yes

calculate = function(wtv goes here)
if context.joker_main then
mult = card.ability.extra.mult ^ card.ability.extra.mult

rugged pier
#

but i dont think thats an issue

#

it sounds well regardless

heady siren
rugged pier
rugged pier
rugged pier
tawny narwhal
#

IDK how ez/hard it may be

dense adder
#

thank you

heady siren
dense adder
#

clarification i meant on the description
the card.lua only has the code

#

yeah, dont know where the description is for cards in the main code

heady siren
#

The card.lua part has the description changing code

rugged pier
# tawny narwhal IDK how ez/hard it may be

shouldnt be too difficult, plus always good practice to use mods that are tried and tested for implementing base functionality than implementing it yourself. alternatively, you can just see how they implement it in talisman

heady siren
#

This is in the Card:generate_UIBox_ability_table function

#

It's not even part of localization, it's just brute forced into the code that makes the description text itself

tawny narwhal
#

I tried using this but it gave me an error

#

let me find the error again

narrow iron
#

what is G.GAME.consumable_buffer used for?

marble flint
#

It might be better to put a hook on get_flush(hand)? You can also use SMDOS.PokerHand:take_ownership(...) to modify the hands

narrow iron
heady siren
rain slate
#

is there a context for whenever a joker is added?

#

istg if smods does not provide this

heady siren
#

It's a function

#

add_to_deck(self, card, from_debuff)

rain slate
#

no but that's for

heady siren
#

Like calculate and update

rain slate
#

the joker itself no?

#

i want it to run whenever any joker is added

heady siren
#

Well yeah, what else do you want to check if a joker is added for?

rugged pier
rain slate
rugged pier
heady siren
#

It'd be context.card_added

#

Which doesn't include playing cards

rain slate
#

and that's a thing, just undocumented?

heady siren
#

It's at the very bottom

#

Literally the last one on the Calculate Functions page

tawny narwhal
#

OKay

#

It doesn't crash

rain slate
#

huh weird

daring fern
tawny narwhal
#

but it doesn't do anything to the mult

rain slate
#

doesn't show in intellisense for me

rugged pier
#

@rain slate

rain slate
#

yes I got the gist

native zinc
#

anyone know what arguments SMODS.change_base() takes

#

i got this error

tawny narwhal
#
    key = 'singular',
    loc_txt = {
        name = 'Singularity',
        text = {
            "Squares the Mult{}",
        }
    },
    config = { extra = { Xmult = mult } },
    rarity = 1, -- Rare rarity
    atlas = 'singularityatlas',
    pos = { x = 0, y = 0 },
    cost = 1, -- Adjust cost as needed
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.Xmult } }
    end,

    calculate = function(self, card, context)
        if context.joker_main then
            return {
                message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.Xmult } },
                Xmult_mod = card.ability.extra.Xmult
            }
        end
    end
}

This currently gives "Xnil mult"

stray warren
#

mult isn't defined in your extra table, you need to use a literal

rugged pier
#
text = {
            "Squares the Mult{}",
        }

whats happening here with the {}

daring fern
tawny narwhal
tawny narwhal
rugged pier
daring fern
heady siren
#

Speaking of, how do I change the sound of a mult trigger on an enhancement, since it just does it with the config?

bold gyro
#

I'm trying to move a played card to the hand, but for some reason it returns with both sides being the card back. What's causing this?

draw_card(G.play, G.hand, 100, 'up', false, v) --v = played card```
native zinc
#

...did modify_rank() change?

#

oh wait

#

im stupid

tall wharf
#

sorry guys

#

i was out for a bit

manic rune
#

hi aiko

tall wharf
manic rune
#

?????

#

actually???

rain slate
#

what's the way to check a card's rarity

heady siren
#

card.config.center.rarity

rain slate
#

ok so I have it correctly

#

so why isn't it doing shit I wonder

heady siren
#

Balatro

heady siren
#

Is there an equivalent to joker_main for enhancements?

rain slate
#

it's not actually doing anything no message no nothing so the context has to be wrong somehow

heady siren
#

That's what the documentation says

rain slate
#

yea

sturdy compass
heady siren
#

In here?

sturdy compass
#

Also I think context.post_trigger or smthn like that is the usual enhancement trigger context

heady siren
#

Ah, alrighty

sturdy compass
heady siren
#

I was looking for what context to use

sturdy compass
#

Ah

rain slate
#

just checking that this is the correct context, yes? if context.card_added and context.card.ability.set == "Joker" and context.card.config.center.rarity == 4

#

for when a legendary joker is added

heady siren
#

I've decided not to replace the sound but instead layer the sound

sturdy compass
rain slate
heady siren
#

context.post_trigger does not work

rain slate
#

I mean it probably gets called somewhere, but it doesn't go inside the if statement

tall wharf
manic rune
#

are you alright 😭

tall wharf
#

i checked on my family immediately

rain slate
#

there's actually no place that context.card_added ever gets called?

#

???

sturdy compass
rain slate
#

even without the = true there's 7 results and none with card_added, only playing_card_added

heady siren
sturdy compass
rain slate
#

it's the dumped lua with SMODS patches included

sturdy compass
#

Hmm

rain slate
#
  • also SMODS itself
manic rune
stray warren
#

It's in calculate_card_added.toml. It's a lovely patch

rain slate
heady siren
#

Wait, main_scoring does work, but it isn't actually adding the mult

sturdy compass
#

How up to date is your smods

rain slate
#

let me reinstall SMODS

#

I mean I only started modding like a week ago

#

so probably pretty up to date

sturdy compass
#

It updates constantly

rain slate
#

Add context for adding cards to the deck by @VictinZero in #560
catxddfacepalm ok

sturdy compass
#

Just realized that context will let me refactor a few cards YAHOOOOOOOOOOOOOOO

rain slate
#

latest update

heady siren
#

This is in calculate, it adds the mult, but about a quarter second later, and doesn't show the message or make the sound

#

It makes the fleshmult sound, but not the actual mult sound

#

Set blocking to false I guess?

#

Okay that fixed it

rain slate
#

fleshmult sounds spooky

sturdy compass
#

Big if true

heady siren
#

Let me test again

heady siren
# rain slate fleshmult sounds spooky

It's for the Flesh Joker which will slowly convert your entire deck into Flesh Cards, and it'll start infecting your other jokers too if your entire deck is already Flesh Cards

rain slate
#

so is flesh like

#

good

heady siren
#

It's good if you can keep it under control

manic rune
heady siren
#

Because your Flesh Cards slowly decay over time

manic rune
#

i got the cutscene thingy from lcorp to work on my mod :3
-# about 0:18 in

heady siren
#

Actual boss fight holy shit

manic rune
#

only phase 1's passives r finished so far though, but im happy with the visuals

rain slate
#

I forgot to return true at the end of an event and accidentally summoned a beehive from hell

narrow iron
#

how can i check whether a card is in a booster pack or in a consumable slot? like what its 'area' is

heady siren
#

Warning level 2's track better be included somewhere in the mod I swear to god

manic rune
#

-# maybe?

rain slate
manic rune
#

holy crap

#

😭

heady siren
manic rune
#

true...

manic rune
#

but i mean

rain slate
narrow iron
sturdy compass
#

I think this takes the cake as the most unhinged video I’ve ever seen here

rain slate
#

but also you can just base your code off of the Emperor code in that case: ```lua
if self.ability.name == 'The Emperor' or self.ability.name == 'The High Priestess' then
for i = 1, math.min((self.ability.consumeable.tarots or self.ability.consumeable.planets), G.consumeables.config.card_limit - #G.consumeables.cards) do
G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
if G.consumeables.config.card_limit > #G.consumeables.cards then
play_sound('timpani')
local card = create_card((self.ability.name == 'The Emperor' and 'Tarot') or (self.ability.name == 'The High Priestess' and 'Planet'), G.consumeables, nil, nil, nil, nil, nil, (self.ability.name == 'The Emperor' and 'emp') or (self.ability.name == 'The High Priestess' and 'pri'))
card:add_to_deck()
G.consumeables:emplace(card)
used_tarot:juice_up(0.3, 0.5)
end
return true end }))
end
delay(0.6)
end

manic rune
sturdy compass
#

I don’t think I’ve seen Donkey Kong what

narrow iron
heady siren
#

Boss blind effect: SO YOU HAVE CHOSEN DEATH

rain slate
#

boss blind effect: instantly ends your run if you select it

sturdy compass
#

Average aikoyori boss

rain slate
#

you'd better have bought the reroll voucher :)

rain slate
#

cuz it only increments when you get another legendary which is like, rare

manic rune
#

wait

#

@sturdy compass

rain slate
#

actually it's probably quite useless unless legendary cards are more common

#

hmm

#

maybe starts out at X5?

manic rune
#

thats true

#

Gurr is probably the worst legendary rn if u add it lol

rain slate
#

the abhorrent chicot:

manic rune
#

u need 2 legendaries to even get it working, and even then, x10 is not even that good

#

😭

sturdy compass
manic rune
#

truly

crimson dune
heady siren
manic rune
#

i mean, at least it can be used right when you got it

manic rune
#

= no happy

rain slate
#

number no go up therefore useless card

manic rune
heady siren
#

No boss blind that fucks my run
= yes happy

manic rune
#

i will also argue that disabling a core mechanic of the game

#

makes it pretty lame

heady siren
manic rune
#

yeah but no other legendaries make your game lamer

#

all of them contribute to the actual gameplay

#

chicot turns boss blind into colored big blind with more rewards

sturdy compass
#

Imo legendaries should be focal points of a build and you should do everything in your power to build around it. Chicot does not follow that

manic rune
#

its also why i hate chicot

i dont hate it because its weak, in fact, its strong, but it makes your game more boring

rain slate
#

I mean chicot kinda enables you to build your deck around something without having to fear everything you built crumbling down

heady siren
#

Sometimes you have a really cool run going and the game just goes no fuck you

crimson dune
rain slate
sturdy compass
heady siren
#

I like jokers that mitigate the RNG of the game that can easily fuck you, you can't deckfix your way out of never getting a reroll voucher or the level 1 reroll voucher not give you a good blind or the level 2 reroll voucher steal all your fucking money and not give you a good blind

rain slate
#

your pixel font is just way too small

manic rune
rain slate
manic rune
#

so there r not that many cases when you will waste too much money rerolling boss blinds

rain slate
heady siren
manic rune
#

i will actually argue its worse early game

rain slate
#

idk how to justify Gorr's status as a legendary

manic rune
#

you need actual e-con and scoring jokers

#

else you are immediately falling off in ante 12+

#

its only when you have your deck built, and your joker setup all set that chicot shines

heady siren
#

I've made a joker that draws one of your most abundant card ranks in hand from your deck on your last discard and one that draws one of your most abundant card suits in hand from your deck on last discard, just so you don't end up using all 2-4 discards trying to find the one card you need for a full house or flush and the game just goes no fuck you

manic rune
rain slate
# rain slate idk how to justify Gorr's status as a legendary

it's inspired by Gorr the God Butcher but

  1. legendaries are exceedingly rare so it's not much use until you get another one
  2. in this analogy the "gods" are the legendaries, but gorr isn't a god himself I think so he should really be rare however
  3. I feel like only legendaries should have like actual identities
manic rune
#

whats the point of chicot then

#

i mean, its definitely there to "save your run", but thats not the case when nothing is built

heady siren
# manic rune whats the point of chicot then

Chicot is good for people who haven't gotten absolutely cracked at the game (me, I suck) and can't usually oneshot boss blinds in one hand, and semi-regularly lose to The Needle

manic rune
#

you have a variety of options, since your deck is not full of the same cards

heady siren
#

You are good at the game, you do not need Chicot

#

I am not good at the game

#

We are not the same

manic rune
#

nah, its just rng hating u ❤️

#

but i really think rng from boss blinds is also one of balatro's biggest selling points, you never know what to expect and to keep your guard up after every ante, in case a threatening boss blind comes up

rain slate
heady siren
#

I legitimately feel like the game just hates me sometimes, I wanna deck fix and the game refuses to give me Hanged Mans, Trading Card, or Spectral packs

rain slate
#

but only while you have him

manic rune
#

chicot takes that away, you only need to keep up with the ante scaling this time

rain slate
manic rune
rain slate
#

but also you can just do that while you have him and then sell him once something better shows up

#

so Gorr is really just perkeo rolling simulator

heady siren
#

You can treat it like Showman, keep rerolling until you get the legendary you want, sell Gorr, and take the legendary, but also, it'd be really funny if when selling Gorr, it destroys all legendaries in shop, just to mess with people playing with the mod for the first time

rain slate
#

I think I will do that

#

and then it just plays the "Nope!"

#

peak cinema

heady siren
#

balatrojoker🤚

rain slate
#

lmaoo

#

anyway how would I do something like that

#

add legendaries to the shop pool

heady siren
rain slate
#

stone cards with ranks and suits

#

cool

heady siren
#

Placeholder

rain slate
#

aha

heady siren
#

They'll be made of flesh in the finished version

sturdy compass
sturdy compass
#

I have a challenge that revolves around it

willow void
#

hi, i keep getting this crash and was wondering if anyone could help me out? Oops! The game crashed:
[SMODS _ "src/utils.lua"]:1245: attempt to call method 'juice_up' (a nil value)

manic rune
#

whats the code

willow void
#

oh right

#

that would probably help LOL

heady siren
hexed heath
#

is there a way to check whether a card has any enhancement (mult card, etc)

willow void
# rain slate what does your code look like?
SMODS.Joker {
    key = 'alexandria',
    loc_txt = {
        name = 'Alexandria',
        text = {
            "{C:green}#1# in #2#{} chance for each",
            "scored face card to become{C:dark_edition} Negative{}"
        }
    },
    config = { extra = { odds = 3} },
    rarity = 4,
    atlas = 'Jokers',
    unlocked = true, 
    discovered = true, 
    blueprint_compat = true, 
    eternal_compat = true,
    perishable_compat = false,
    pos = { x = 1, y = 0 },
    soul_pos = { x = 1, y = 1 },
    cost = 20,
    loc_vars = function(self, info_queue, card)
        return { vars = { G.GAME.probabilities.normal , card.ability.extra.odds } }
    end,

    calculate = function(self, card, context)
        if context.scoring_hand then 
            if pseudorandom('alexandria') < G.GAME.probabilities.normal / card.ability.extra.odds then
                    local faces = {}
                    for k, v in ipairs(context.scoring_hand) do
                        if v:is_face() then 
                            faces[#faces+1] = v
                            v:set_edition(G.P_CENTERS.m_negative, nil, true)
                        end
                    end
                    if #faces > 0 then 
                        return {
                            message = localize('k_:3!'),
                            colour = G.C.MONEY,
                            card = self
                        }
                    end
                end
            end 
        end 
}
heady siren
#

card.config.center ~= G.P_CENTERS.c_base

rain slate
#

oh yeah any enhancement

heady siren
#

Well, now you have both interpretations

manic rune
rain slate
#

I think there's also

manic rune
#

what timing do you want?

rain slate
#

#SMODS.get_enhancements(card) > 0

manic rune
#

either context.before or context.after will work here

rain slate
#

for any enhancements

hexed heath
#

ah

#

thanks

willow void
manic rune
#

dunno, depends on the timing you want

rain slate
willow void
#

upon scoring

manic rune
#

ah i see

daring fern
#

How could one make it so you draw your most played hand when blind is selected?

manic rune
#

wait

heady siren
rain slate
#

I'd hope there's a better method out there

#

I will go scour the archives

#

(github pages of existing mods)

heady siren
#

It's mostly the same idea as rare tags, but it replaces a joker rather than just shoving in one

rain slate
#

I mean I don't wanna shove something in or anything

#

I just wanna add legendaries to the shop pool

manic rune
# willow void upon scoring
SMODS.Joker {
    key = 'alexandria',
    loc_txt = {
        name = 'Alexandria',
        text = {
            "{C:green}#1# in #2#{} chance for each",
            "scored face card to become{C:dark_edition} Negative{}"
        }
    },
    config = { extra = { odds = 3} },
    rarity = 4,
    atlas = 'Jokers',
    unlocked = true, 
    discovered = true, 
    blueprint_compat = true, 
    eternal_compat = true,
    perishable_compat = false,
    pos = { x = 1, y = 0 },
    soul_pos = { x = 1, y = 1 },
    cost = 20,
    loc_vars = function(self, info_queue, card)
        return { vars = { G.GAME.probabilities.normal , card.ability.extra.odds } }
    end,

    calculate = function(self, card, context)
          if context.individual and context.cardarea == G.play do
              if pseudorandom('alexandria') < G.GAME.probabilities.normal / card.ability.extra.odds then
                if context.other_card:is_face() then 
                  context.other_card:set_edition("e_negative", nil, true) 
                  return {
                            message = localize('k_:3!'),
                            colour = G.C.MONEY,
                            card = card
                   } 
                end
              end
          end
     end 
}
rain slate
#

with their respective weights or whatever

manic rune
#

god, the indentation is horrible

#

i wrote that on discord 💔

#

oh wait

#

the key for negative isnt m_neagtive, is it?

rain slate
#

it's e_negative

heady siren
#

neagtive

rain slate
#

cuz it's an edition 💔

manic rune
#

there, fixed :3

manic rune
narrow iron
#

ngl i have no idea how emperor even functions after reading through its implementation

daring fern
manic rune
#

i can probably break the code down for u

heady siren
manic rune
narrow iron
#

when its in a consumable slot and you use it, it still makes the right amount of tarots even though its currently taking one slot up, specifically in the case where you have 2 consumable slots

daring fern
willow void
manic rune
#

you could do smt like:

  • if first card about to be drawn has 3 other copies in the deck, prioritize them
  • have a pool for ranks which can do a 4oak
willow void
#

specifically unexpected character near the last }

manic rune
#

wha

#

oh yeah, i see whats wrong

#
if context.individual and context.cardarea == G.play then
            if pseudorandom('alexandria') < G.GAME.probabilities.normal / card.ability.extra.odds then
               if context.other_card:is_face() then 
                  context.other_card:set_edition("e_negative", nil, true) 
                  return {
                     message = localize('k_:3!'),
                     colour = G.C.MONEY,
                     card = card
                  } 
               end
            end
         end
#

here

#

sorry, its kinda inconvenient coding on discord lol

willow void
#

its ok you are fixing my code for me lol

#

hmm

#

unexpected symbol near "if" error message

manic rune
#

-# wtf

narrow iron
manic rune
#

are you

#

sure you copied it right

willow void
#

LOL
yes

manic rune
#

it doesnt seem like theres any error for me

#

😭

willow void
#

i just get an error every time i boot up the game

manic rune
#

show me your joker's full code rn

willow void
#

mkay

#
SMODS.Joker {
    key = 'alexandria',
    loc_txt = {
        name = 'Alexandria',
        text = {
            "{C:green}#1# in #2#{} chance for each",
            "scored face card to become{C:dark_edition} Negative{}"
        }
    },
    config = { extra = { odds = 3} },
    rarity = 4,
    atlas = 'Jokers',
    unlocked = true, 
    discovered = true, 
    blueprint_compat = true, 
    eternal_compat = true,
    perishable_compat = false,
    pos = { x = 1, y = 0 },
    soul_pos = { x = 1, y = 1 },
    cost = 20,
    loc_vars = function(self, info_queue, card)
        return { vars = { G.GAME.probabilities.normal , card.ability.extra.odds } }
    end,

    if context.individual and context.cardarea == G.play then
        if pseudorandom('alexandria') < G.GAME.probabilities.normal / card.ability.extra.odds then
           if context.other_card:is_face() then 
              context.other_card:set_edition("e_negative", nil, true) 
              return {
                 message = localize('k_:3!'),
                 colour = G.C.MONEY,
                 card = card
              } 
           end
        end
     end
}
manic rune
#

you

#

you forgot calculate

#

💔

willow void
#

FUCK

#

i copied over it

heady siren
#

B r u h

manic rune
#

😭

willow void
#

LOOK i had it there before and then i copied over yours

#

sorry LOL

manic rune
#

its fine its fine

willow void
#

another error?????

manic rune
#

-# :3

willow void
manic rune
#

gah

#

show me your joker's code again 💔

willow void
#
SMODS.Joker {
    key = 'alexandria',
    loc_txt = {
        name = 'Alexandria',
        text = {
            "{C:green}#1# in #2#{} chance for each",
            "scored face card to become{C:dark_edition} Negative{}"
        }
    },
    config = { extra = { odds = 3} },
    rarity = 4,
    atlas = 'Jokers',
    unlocked = true, 
    discovered = true, 
    blueprint_compat = true, 
    eternal_compat = true,
    perishable_compat = false,
    pos = { x = 1, y = 0 },
    soul_pos = { x = 1, y = 1 },
    cost = 20,
    loc_vars = function(self, info_queue, card)
        return { vars = { G.GAME.probabilities.normal , card.ability.extra.odds } }
    end,

    calculate = function(self, card, context)
    if context.individual and context.cardarea == G.play then
        if pseudorandom('alexandria') < G.GAME.probabilities.normal / card.ability.extra.odds then
           if context.other_card:is_face() then 
              context.other_card:set_edition("e_negative", nil, true) 
              return {
                 message = localize('k_:3!'),
                 colour = G.C.MONEY,
                 card = card
              } 
           end
        end
    end
}```
manic rune
#

you are missing an end

willow void
#

WHU

manic rune
willow void
#

i gotcha

#

im just confused as to how im so bad at copy pasting

#

also, the joker displays "ERROR" instead of my text

#

should i just have plain text in there instead of a function?

manic rune
#

the function is fine, i think having ":3" in there kinda fucks it up

willow void
#

daaaamn

#

lemme see

manic rune
#

change ur localization key to just text, maybe it will work

#

like

#

'k_ohmygawd'

narrow iron
#

thats just the key to the spot in the language file right?

#

it can still say ':3'

#

just have a different key

manic rune
#

☝️

#

it is not forbidden to silly

narrow iron
#

ol reliable divide by zero error

manic rune
#

0/0 for the funni

willow void
manic rune
#

did u change the key in your localization file

narrow iron
#

im printing a table and to make it only print once im just making it crash immediately afterwards

manic rune
#

you know

#

you can just use break or smt

narrow iron
#

its in the beginning of the can_use function

#

so it'll just be run repeatedly

manic rune
#

ah, icic

narrow iron
#

uhh

#

it didnt crash

#

what

willow void
manic rune
#

oh

#

i see

#

put message = ":3" instead then

willow void
#

sorry i am just a baby balatro modder (just born)

#

LOL

manic rune
#

i thought you had a localization file already

#

😭

willow void
#

no

manic rune
#

gah

#

yeah, do what i said above

#

and it should run now

willow void
#

it should and does!

narrow iron
manic rune
#

💔

narrow iron
#

i just need to know where the beginning of this table is

manic rune
#

wat r u tryin to achieve here

narrow iron
#

i want to see if i can figure out if a card is in the consumable slot with card.area in the can_use function

#

so i want to read the card.area table

#

so i need to know where it starts

manic rune
#

#G.consumeables.cards

narrow iron
#

nope

manic rune
#

which will print out how many cards there are in the consumeable area, no?

narrow iron
#

im basically making custom emperor

manic rune
#

ah ic

#
local cardInArea = nil
for _,v in ipairs(G.consumeables.cards) do
  if v == card then cardInArea = true break end
end
narrow iron
#

wouldnt that return true if i have a copy of the card in my consumable area?

manic rune
#

no

#

it needs to be the exact card you are selecting

narrow iron
#

the objects are still unique?

#

oh nice

#

thanks!

manic rune
#

if you want it to check for copies then you should check for their keys instead

native zinc
#

got this lad workin

manic rune
#

card.config.center.key

narrow iron
#

yea idc about copies

manic rune
#

mhm, just saying so that you know how to in the future :D

narrow iron
#

mainly just so it doesnt break when showman is there

narrow iron
manic rune
native zinc
#

...

#

it's a bit shift

#

lmao

#

it rounds down

#

(so it destroys aces)

narrow iron
#

may be worth putting that in the description

narrow iron
native zinc
#

i think it would be funny if i didn't

#

because it is what it says on the tin

#

1000 (8)
0100 (4)
0010 (2)

#

0001 (A)

#

0000 (uh ohj)

narrow iron
#

well i just meant abt it rounding down, the aces thing should be discovered not told

native zinc
#

bitshifts works by just ignoring the right digit and replacing the left digit with 0

#

so 0101 (5) -> 0010 (2)

#

i want to show this behaviour in the card art

#

so i think it's fineeee

heady siren
narrow iron
#

im so close to being done here, but for some reason its returning false while its in a booster pack

can_use = function(self, card)
  local cardInArea = nil
  for _,v in ipairs(G.consumeables.cards) do
    if v == card then cardInArea = true break end
  end
  if cardInArea then
    if #G.consumeables.cards + G.GAME.consumeable_buffer + self.config.extra.num_potions - 1 <= G.consumeables.config.card_limit then
      return true
    end
  else
    if #G.consumeables.cards + G.GAME.consumeable_buffer + self.config.extra.num_potions <= G.consumeables.config.card_limit then
      return true
    end
  end
  return false
end,
#

self.config.extra.num_potions is just the number of consumables its making

#

i never reset the consumable buffer, oops

#

no...?

#

for some reason the consumable buffer is equal to 3

#

and wont change

#

let me try a new run

#

yea that fixed it

heady siren
lethal ridge
#

@tall wharf

#

Are u okay

#

The eathquake

heady siren
#

In all discards and all hands

manic rune
#

how do i refer to this

#

for juice_up

#

and as a target for calculate_effect and allat

plain apex
#

something tells me i absolutely didn't do this right

rain slate
#

hold up

zealous glen
rain slate
#

SMODS.juice_up_blind()

zealous glen
#

or whatever the key was

rain slate
#

try that

zealous glen
#

but you don't need to do it manually

#

SMODS does it automatically AFAIK

manic rune
zealous glen
manic rune
#

what about a message

#

not return

#

gahgakd

rain slate
manic rune
#

god my brain is bring fried

rain slate
#
function SMODS.juice_up_blind()
    local ui_elem = G.HUD_blind:get_UIE_by_ID('HUD_blind_debuff')
    for _, v in ipairs(ui_elem.children) do
        v.children[1]:juice_up(0.3, 0)
    end
    G.GAME.blind:juice_up()
end
hexed heath
#

is there a calculate phase or a hook for when after the deck is shuffled?

heady siren
tall wharf
manic rune
#

this is what i wanted to figure out, and it seems G.GAME.blind is the answer, thanks everyone

#

-# power went out for 3s, so my wifi went down

#

oh and uh, this too :3

lethal ridge
tall wharf
#

i love how everyone on Twitter was mentioning how they thought they were just dizzy

lethal ridge
tall wharf
#

me too

manic rune
#

phase 2

rain slate
manic rune
#

because jokers in my mod have elements

#

:3

rain slate
#

are you making balatro rpg

manic rune
#

-# and equipments, status effects, buffs, debuffs and such

manic rune
manic rune
#

thats a close comparison

rain slate
#

even more gambling

#

i love it

tired skiff
#

how do i make it so that it also shows chips cause i dont know how to add the chips value and i also have thing to scale the chips

manic rune
#

i added gacha to hsr too

#

:3

#

like, you dont just get jokers from shop now

#

you need to roll for it

#

wait lemme show u

rain slate
#

now we just need to add gacha to balatro as well

manic rune
lyric blade
#

What the hell

#

That's actually crazy and I kinda love it

manic rune
#

-# this gotta be like the 5th time im flexing those in modding-dev now

tired skiff
#

hey belis

manic rune
#

hii

tired skiff
#

what does the X#1# mean?

#

im new to modding and im just trying to learn :3

manic rune
#

it takes the var corresponding to that order in loc_vars, and put it in there

heady siren
#

#1# is the first variable in the loc_vars table, it's inserted into the text

manic rune
#

im bad at explaining :3

heady siren
#

#2# would be the second one, #3# would the third one, etc...

tired skiff
#

so would this be #1

heady siren
#

And if you're wondering C: is for the text color, and X: is for the background color

heady siren
tired skiff
#

so for 2 would i do another return under the return

heady siren
#

No, you would add a second variable inside the vars table

zealous glen
heady siren
#

So if you wanted a #1#, #2#, and #3# variable, you'd put return {vars = {variable1 = thing, variable2 = thing, variable3 = thing}}

heady siren
#

Wait yeah I'm dumb

#

That's for config

tall wharf
#

I'm fine

heady siren
#

For loc_vars you just put in the variable name, and add card/center.ability.extra. before it

tired skiff
heady siren
#

No

tired skiff
#

i know im stupid im sorry :<

zealous glen
heady siren
#

You put the center.ability.extra.chips as a second variable inside the already existing vars table

tall wharf
#

everyone felt as if they were lightheaded

heady siren
#

So it'd be return {vars = {center.ability.extra.Xmult, center.ability.extra.chips}}

#

Also notice how it's underlined in red, because that's incorrect formatting

tired skiff
heady siren
#

No

tired skiff
#

oh comma

#

not more {}

heady siren
#

It's a table, every entry in the table is separated by a comma, not a completely separate set of curly brackets

tired skiff
#

ok

heady siren
#

The curly brackets make it a table

#

I honestly think it'd be a good idea for you to just read up on how lua works so you get the actual formatting / syntax of it down

tired skiff
#

look it took me 3 attempts but i think i got it

heady siren
tired skiff
#

close enough :3

heady siren
#

You also need to put chips = number into the same place as Xmult in the extra table right above loc_vars

tired skiff
#

i have

heady siren
#

Can you please send a screenshot of that, I am legitimately not convinced it will be accurate

tired skiff
#

:p

heady siren
#

Okay, strange indenting, but that will work

tired skiff
#

im so smort

#

😭

rain slate
#

fuck my stupid baka life

heady siren
#

Wait, take a screenshot of the area directly below that please

rain slate
#

how exactly am I supposed to make legendary jokers appear in shop

rain slate
#

I've tried so hard

#

😭

tired skiff
heady siren
rain slate
#

yeah that won't work

#

I mean I haven't tried it but I don't like it so I'm not doing it that way

heady siren
# tired skiff

Okay, that's working, good, for a split second I thought the loc_vars text was a closing square bracket

heady siren
native zinc
#

vanilla dictates legendary jokers only come from Soul so what i usually do is just make a consumable that spawns my legendaries

tired skiff
#

no somone taught me to end a function with a return

#

everytime i fail i learn and therfor evolve

rain slate
tired skiff
#

its a slow proscess but it works (sometimes)

heady siren
#

You end events with returns you end functions with end

tired skiff
#

and to be fair i have only been learning lua for about a total of 3hours

#

and a hour of that was during a math exam

heady siren
tired skiff
#

(i passed dw)

rain slate
rain slate
#

like they can appear but it's not a guarantee

native zinc
#

you might wanna make a custom rarity?

heady siren
#

If you don't wanna take any shortcuts at all and want to make it 100% the way you want it you might not get what you want

rain slate
#

like perkeo and shit

heady siren
# native zinc

Also that looks pretty damn cool, only issue I have is that it conflicts with the Balatro color scheme pretty badly and on a big part of the screen consistently

tired skiff
#

ahh it works

#

it says how many chips

#

im so smart

#

gotta be in the top 10 billion smartest people

#

🫡

rain slate
tired skiff
#

ehh i wouldnt go that far

manic rune
#

will my boss blind be fun to fight against i wonder

native zinc
heady siren
#

I'd make it lean more toward olive and darken the background color a bit

heady siren
tired skiff
#

once again i am back to ask more dumb questions

#

today i will be asking about colours

native zinc
#

whoaa...

tired skiff
#

so X:mult makes background red but what makes it blue :3

native zinc
#

here

tired skiff
#

<3 u

#

holy

heady siren
#

You can use blue or chips

native zinc
#

yeah

heady siren
#

The G.C colors are used for message backgrounds and visual effects

native zinc
#

so {C:chips}text here adlskjfhasldkjffhkja{}

heady siren
#

{} is used to reset to the default color

native zinc
#

its like open bracket close bracket

heady siren
#

Like, I feel like you can't make a bad looking negative card

#

Also, off-topic, but thank god lua actually tells you where the hell your code stops working
-# Most of the time

native zinc
#

yeah

#

line too!

#

less assaulty

#

(ignore the bottom right nightmare that one's atrocious on purpose [it is referencing a horrible ad])

heady siren
#

It still doesn't look that bad

native zinc
#

the violent magenta kinda pains me

rain slate
#

YEAH BUDDY

heady siren
#

I really like the flat colored minimally shaded object jokers

rain slate
#

ok so basically that works

native zinc
#

polychrome is interesting

native zinc
#

some of these negative suck imo

tired skiff
#

i cant figure out adding another colour so i think its time for bed and tomorow i will wake up and continue to slam my head against a wall

#

:3

rain slate
#

This is how I've added legendaries to the shop pool ```toml

Add Legendary to Joker ObjectType

[[patches]]
[patches.pattern]
target = '''=[SMODS _ "src/game_object.lua"]'''
pattern = '''
{ key = "Common" },
{ key = "Uncommon" },
{ key = "Rare" },
'''
position = "after"
payload = '''{ key = "Legendary" }, '''
match_indent = true
times = 1
lua
add_to_deck = function (self, card, from_debuff)
SMODS.ObjectTypes["Joker"].rarities[4].weight = 50 -- temp value just to see if it works
end,
remove_from_deck = function (self, card, from_debuff)
SMODS.ObjectTypes["Joker"].rarities[4].weight = 0
end

heady siren
#

Very nice, I have no idea what any of that means

rain slate
#

although technically this is wherever jokers go

#

so you could pull a perkeo from a judgment if you're really lucky

#

unless judgment has some restrictions I'm not aware of

heady siren
#

Also, balance question: I have a joker that destroys all cards played in first hand, but stores them inside the joker, and puts them into your hand all at once when you sell it, and they gain bonus chips while they're stored, is 10 extra chips per hand played while stored too much?

rain slate
#

I actually feel like it's kinda weak

heady siren
#

If you consume like, 5 hands worth of cards, 25 cards, the first 5 cards you stored would have +50 extra chips

tired skiff
#

if i am reading correct

#

cause if you have say 5 hands

#

2 blinds is all those cards +100 chips

heady siren
#

It adds 10 chips every time you play a hand, not just whenever you consume cards

tired skiff
#

i know

heady siren
#

I'm just clarifying

tired skiff
#

honestly i would call the joker the bank and have the amount of chips it adds equil to the rate of inflation

heady siren
#

I called it the Joker of Holding

tired skiff
#

or intrest rates

tired skiff
rain slate
#

oh I think I misinterpreted

#

permanent chips?

heady siren
#

I wanted to add an alternate method of getting to naneinf, because you could consume your entire deck, and then draw your entire deck at once

heady siren
slender bay
#

Trying to get it to destroy scored cards, and it does destroy them but also doesn't?

rain slate
heady siren
#

And put context.destroy_cards in the if statement

rain slate
#

mainly cuz it's chips and not mult, but also cuz you still gotta get through the blinds so consuming your entire deck isn't too viable

heady siren
#

If you've already turned the majority of your deck into like, steel red seal kings for Baron, you can start consuming them to prepare for naneinf

#

No Perkeo + Cryptid or Burgler + Serpent needed

#

Just the Joker of Holding

native zinc
#

oh hoh ho

hushed field
modern kindle
#

Good schmorning chat

hushed field
#

What's up Dillster

modern kindle
#

Ice my goat

native zinc
rain slate
#

what's the card area for shop cards?

native zinc
#

help

modern kindle
rain slate
# native zinc also

maybe ```lua
local playing_cards_created = {}

for i = 1, 30, 1 do
-- ...
playing_cards_created[#playing_cards_created + 1] = true
end

native zinc
#

wdy want to do

rain slate
#

and then put that in the return table

heady siren
native zinc
hushed field
native zinc
#

but DNA just does TRUE so...

hushed field
#

Have you implemented it yet?

gilded blaze
#

is this the correct way to init Talisman compat

manic rune
#

god

#

i think

modern kindle
#

Yea considering your deck let's you play all of 10 5 card hands the chip gain isn't really that great

manic rune
#

i mightve did some evil shenanigans for my boss blind

#

:3

modern kindle
#

Bepis!

manic rune
#

hi dillyyy

modern kindle
#

Hello :)

manic rune
#

it halves your score after everything is calculated

#

:3

heady siren
#

Oh boy

heady siren
manic rune
#

charging up

#

-# its still bad ngl

native zinc
manic rune
#

even when a card gives 500 chips every time its scored

#

its still bad ;sob

modern kindle
#

Give it xchips and now we're talkin

manic rune
#

fr

#

is this evil

modern kindle
#

Haven't watched yet but I'll say yea

manic rune
#

each card in hand has 50% to turn into glass (no steel kings for u)

modern kindle
#

Alright I've watched and what the heck

forest ivy
#

is there any website to download sprite from sheet

manic rune
#

AND destroy all glass cards in hand

#

:3

#

and this is not the last phase yet

#

hehe

#

i will give the player every played card back into the deck

#

at phase 3

#

-# that is if you still have any

rain slate
#

this is boutta be devious if it works

crisp coral
modern kindle
#

Myst hates the letter B confirmed

hushed field
#

Byst

manic rune
#

is this real chat

modern kindle
#

Is anything ever truly real

crisp coral
next timber
#

oh shit forgot to turn off ping my bad

native zinc
#

wow

crisp coral
#

wow

native zinc
#

man discord really needs to add a "default: no reply ping" option

manic rune
#

myst whenever they r pinged:

hushed field
modern kindle
#

I tapped the no ping button so hopefully it worked :)

crisp coral
#

it worked

#

good job STAR

manic rune
#

only phase 3 left

native zinc
#

yeah unfortunately it's not just the jokers that start with b

next timber
#

discord should really let users decide what the default is when other people try to ping them, would solve so many issues

manic rune
#

then im also pushing this one hell of a boss to my mod

modern kindle
#

Bepis when can I commission you to make me some blinds with a firm handshake

manic rune
crisp coral
#

i should have mod commissions frfr

modern kindle
#

Yea I know

#

Blind expander is so daunting for me as I told you

manic rune
#

i stiliatlsmtlmatilmom ;3;3;3;3

crisp coral
#

its basically "i made this and now i'm forcing this on you"

native zinc
spring lantern
#

how do i properly get the localized name of an enhancement? tried localize(key) but that returns ERROR

next timber
#

blind that summons itself forever until you score the exact amount of chips

manic rune
modern kindle
hushed field
#

I should break apart Kino and see if there's anything there that I can set up to be an API mod, because surely at this point I've accidentally set up some systems that are useful for others

hushed field
#

Maybe once I get the localization for quests working, I guess

modern kindle
#

Quests would be cool to implement

manic rune
#

would anyone want an API made for making RPG systems

native zinc
manic rune
#

🤔

crisp coral
native zinc
#

this is also true for the b in Cryptid

maiden river
#

Balatro: the way home

modern kindle
manic rune
#

n mentioned

next timber
#

i have decided that all the mods i was going to make seperately (save for Imaginarium because it's essentially gonna have to be a complete overhaul) are just gonna be crammed into the same mod

hushed field
# heady siren *abduction* mechanic?

Kino's got a mechanic in which certain jokers move cards to a separate card area and store those in the joker, and return the cards with an addition. There were some issues I kept running into when it came to visually having everything work, so unless you already solved it yourself, it might be a good thing as an example

crisp coral
#

the prerequisite is asking me

heady siren
#

I literally just have the cards stored in a table variable on the joker

hushed field
modern kindle
manic rune
#

actually

#

how do i check if a mod is installed

heady siren
spring lantern
#

what have i done

manic rune
#

maybe i should just port blindexpander's code over to my mod too

#

and put a bigass billboard in the main menu

#

crediting myst :3

heady siren
next timber
#

if anyone here has made a mod that adds more suits, how do you actually implement them? i dont mean how do you make them, i mean like. how do you make it so the player can actually get them, from a game design perspective

next timber
#

extra deck? overhaul every deck to include it?

crisp coral
#

add blindexpander as a provide for your mod probably idk

modern kindle
#

I assume you can make them unlock through beating some stakes or smth

manic rune
hushed field
#

but with smods handling card upgrades of any kind now, that's also less of a problem

manic rune
#

what i mean by this is like:

  • if blindexpander (the separate mod) and lcorp (THE mod) arent installed, dont load the file with blindexpander's code
  • else, loads
heady siren
crisp coral
hushed field
# heady siren If it exists in the card data, it gets stored

that's a very good point. I'm happy with the way I've set up abduction now, because it allows me to copy the abilities of jokers too, and do other weird things, but I think you've set up a smarter solution that is probably less work to set up without breaking everything, hahaha

spring lantern
tall wharf
#

we are feeling earthquake with this one

#

development resumes today when i feel less tired

heady siren
spring lantern
#

cos u make my earfquake

next timber
#

i might make a "Petrification" card or smth that converts every card of a random/selected suit to the modded Snakes suit

tall wharf
spring lantern
#

-# oh

modern kindle
#

hi aiko

tall wharf
#

-# being serious btw

spring lantern
#

-# mb gang

hushed field
tall wharf
#

-# at least I'm fine

spring lantern
#

-# ye glad ur safe c:

tall wharf
#

-# my family and friends seems fine

#

-# and yes i did check on them

hushed field
hushed field
next timber
#

also how do you guys deal with localisation? because right now i put in the loc_txt, let it generate the dump file, and then copy that over to the en-us file and remove the loc_txt lol

hushed field
#

I just write in the localization file directly

#

I've never used loc_txt, in that regard

spring lantern
#

what the fuck is this

rose dragon
manic rune
#

ui table

spring lantern
#

i know that much

crisp coral
#

uibox my beloathed

#

fucking hate ui

manic rune
#

^ the person who made blind btw

spring lantern
#

why did i get a uibox when trying to get the name of an enhancement

hushed field
# crisp coral fucking hate ui

i feel fundamental anxiety about the universe when one of the people I've categorized as 'real good at UI' says things like these, haha

manic rune
#

we are fucked if eremel ever says he hates ui

crisp coral
#

me? good at ui? never!!

spring lantern
crisp coral
#

aiko is good at css they should be also good at ui

manic rune
#

fr...

hushed field
#

Aiko's also in that category

hushed field
manic rune
#

what if i

zealous glen
manic rune
#

make it so it wipes out HALF of your deck

hushed field
#

I guess I'll see it as well once your mod's out there ot be played with, haha

zealous glen
#

Paperback does it too

hushed field
manic rune
#

2/3 of your deck it is

modern kindle
#

hi vic

zealous glen
#

Hello dilly

#

How are you?

crisp coral
#

but that makes the mod fresh

modern kindle
zealous glen
heady siren
zealous glen
modern kindle
#

i am sorry to hear this, i hope you feel grand soon

lament agate
#

is it unethical to hide mod badges

hushed field
zealous glen
#

thanks

zealous glen
tall wharf
zealous glen
#

it is illegal though, straight to clown jail with you

manic rune
#

:3

#

what blind

lament agate
modern kindle
#

yea

crisp coral
zealous glen
hushed field
#

hands up in the air and drop your honky horn

tall wharf
lament agate
crisp coral
humble girder
#

what

lament agate
#

what

modern kindle
#

what

zealous glen
tall wharf
manic rune
#

is the third effect necessary

#

what blind are you talking about aiko

lament agate
#

@manic rune i know how to mod joker in now

zealous glen
manic rune
crisp coral
#

the Gaslight is insane

tall wharf
tall wharf
hushed field
#

Today list for today is figuring out how the fuck I make a nice and dynamic localization method for randomly generated quests, or set up the system to make arbitrary pools for joker generation. I'm not sure I've solved either. Which one do I choose?

zealous glen
#

Gaslighting gatekeeping girlbossing

manic rune
#

:3

zealous glen
#

I don't understand what the score reduction does exactly

#

but it's the only negative part

manic rune
#

smt like this

crisp coral
manic rune
#

but it reduces score to 0 instead

tall wharf
#

have i been remembering wrong this whole time

manic rune
#

-# i think its pretty much a loss if you trigger that effect

zealous glen
#

I wonder if my mod is compatible with Blindexpander

crisp coral
#

for arbitary joker pools, make fuctions that are similar to get_current_pool() and hook it to call your custom function

tall wharf
#

myst hello!!!

crisp coral
#

hi aiko did you survive

zealous glen
#

Because I decided not to use it since I had already copied some functionality and added some on top

tall wharf
crisp coral
#

glad to hear

manic rune
#

hows the wifi in the afterlife aiko

zealous glen
#

myst and aiko talking look like a short person talking to a tall person

hushed field
tall wharf
#

they have alarmo

zealous glen
#

F

tall wharf
#

photo taken before the earthquake

native zinc
spring lantern
#

fucking finally

native zinc
#

ooh

hushed field
crisp coral
crisp coral
hushed field
#

thanks for the help btw, myst, it's appreciated ❤️

crisp coral
#

lobcorp does not, sorry

manic rune
heady siren
zealous glen
hushed field
zealous glen
#

also I use the quips localization table for Joker messages

heady siren
crisp coral
#

i think it might be just stitching two UIBox returns from localize into one generate_UI return

manic rune
#

i added autoline splicing to the sticker which shows debuffs/buffs in my mod

hushed field
zealous glen
manic rune
#

-# probably not what ur looking for tho

zealous glen
#

and I think it's exactly the same mechanic, minus other stats

hushed field
heady siren
#

I have no idea how to do shaders

hushed field
#

i completely forgot you can pass colours to them

crisp coral
#

@hushed field actually it might be easier than I thought

stark geode
zealous glen
#

A Joker that consumes

crisp coral
#

just pass nodes = table as an argument and it'll append the localization into the nodes table

manic rune
#

wtf is that art victin

#

💔

crisp coral
#

and you can return the nodes after adding a few localizes

humble girder
zealous glen
stark geode
humble girder
#

you either drop localization or make templates for each different quest you implement

heady siren
#

I also just added custom sounds for the joker

humble girder
#

i considered this very same problem with baliatro bonus objectives

heady siren
#

bag_noises.ogg

primal robin
#

Do patches like ```
[[patches]]
[patches.pattern]
target = '=[SMODS _ "src/game_object.lua"]'

midnight coyote
#

i can’t localize for shit so i just hope they can speak english

zealous glen
spring lantern
humble girder
manic rune
next timber
#

man representing a concept like "snake" in a 11x11 solid colour suit icon is kinda hard

humble girder
#

here is an example SMODS patch that i do and know works

## Calculate goals on individual playing card scoring.
[[patches]]
[patches.pattern]
target = '=[SMODS _ "src/utils.lua"]'
pattern = 'if next(effects) then'
position = 'before'
match_indent = true
payload = '''
if BALIATRO.feature_flags.loot then
    BALIATRO.calculate_goal_context(context)
end
'''
next timber
zealous glen
hushed field
# humble girder so, the thing you have to remember about this is that partial localization and a...

I'm fully aware, haha (not to brag but I have a degree in linguistics after all 😛 ) But my current approach is that I'm making a mod that is not being translated as of now, so it's mainly just about using the localizatin file because that's where I keep text, more so than actually allowing for localization to work. Systems like this need a whole in-between layer between the text and the code to account for grammatical structures if you're going for generated text that can be localized, and that's at the moment a step I'm not really keen on developing, haha

zealous glen
#

just hide a tiny clone of ice inside each copy of the mod so they can translate in real time

humble girder
#

you're not translating it, anyone playing it may contribute a localization and anything preventing proper translation will discourage that

shell timber
#

how random are the quests going to be?

humble girder
#

this is kind of why i'm saying, your quests won't be fully random, they're still probably going to follow a general structure (fixed set of goals), each goal can have its own full, normal localization template

#

then they can just localize{} into the same desc_nodes

#

what i'm saying is: building blocks can be treated as GameObjects that each can individually localize

#

and just build up from the bricks

hushed field
#

yeah, I know, I know. It's more so that I'm developing this mod with mostly myself in mind, rather than taking a professional and player-oriented approach. But you're fully right in that sense, of course. But having that voice that tells me to account for it be externalized by someone else is definitely a more convincing argument to actually set it up properly, so I'll do that instead

heady siren
#

So now my 3 rare jokers have custom sounds, and also an uncommon joker that has Wii Sports sounds, do you think custom sounds are too much for Balatro, or should I try to add as many as I can to make my jokers more unique?

shell timber
#

for a vanilla like mod, no

#

for a mod in general, sure

hushed field
#

Because it makes it quite obvious that I'm using that logic on my end just as an excuse not to have to make things that seem difficult 😛

hushed field
heady siren
#

I wanna have an in-between of vanilla and Cryptid, not quite as faithful to the original game, but also not completely batshit insane and off-model by default

zealous glen
hushed field
#

hahaha

humble girder
#

in hindsight i probably should've read the context but i got mildly triggered for a second, well done

zealous glen
spring lantern
#

epicly trolled

zealous glen