#💻・modding-dev

1 messages · Page 134 of 1

tepid crow
#

you can

faint yacht
#

...how I do prevent a tag that spawns booster packs doing its' own thing whilst an another one is being "opened" from a previous tag?

frosty dock
#

nvm not shipping with sleeves, i really shouldn't be trying to make art myself skull

zealous glen
#

Do it

#

I had made the silliest temporary arts and people asked me to make it permanent jimbOrb

devout zenith
#

y'all i think i overdid it a little

violet void
#

nvm

winter thorn
devout zenith
#

yeah im def toning that down to x5

winter thorn
#

That’s way too good for a common

tepid crow
violet void
#

it probably shouldnt reset so you eventually have to sell it

haughty kiln
frosty dock
#

i'll keep the middle as painted sleeve's, i can't come up with something better rn

#

doesn't look that terrible tbh

devout zenith
#

yeah it reduces the mult by 75% when you repeat the first poker hand

#

(reduction doesnt stack though)

haughty kiln
devout zenith
#

*X5 to X0.25 after adjustments

#

basically if your first poker hand doesnt one shot you're fucked

haughty kiln
#

wouldn't 75% of 5 be 1.25x rather than 0.25x?

devout zenith
#

i might have explained it wrong

#

X5 mult for the first poker hand
but when you repeat that hand it's X0.25 mult

haughty kiln
#

so basically an acrobat on steroids at the start of a round

devout zenith
#

yeah

haughty kiln
#

should probably be uncommon at least imo, for a common that's very powerful even at x5

#

maybe even rare

devout zenith
#

maybe rare

#

thinking of setting it to rare

hushed briar
#

does something else need to be done before taking ownership of another mod's object?

    {
        rarity = 2
    },
    true
)```
doing this just makes the joker disappear
devout zenith
#

ok i think this is much better now

zealous glen
elder vapor
#

X5 mult is a little too strong

violet void
#

its not common anymore at least

devout zenith
violet void
#

feels like cand(ace) shouldve done something with aces 🤔

devout zenith
#

i kinda wanted to give her a mechanic that would be a little bit faithful to the show

violet void
#

yes thats better

#

also I like the sprites

devout zenith
#

since candace tries to show her mom the boys' invention but it then disappears before she sees it

#

ty

violet void
#

do you have a thread?

dull saddle
#

candace has the endurance of sisyphus to continue each day tbh

devout zenith
violet void
#

i might or might not have a cartoon to suggest

elder vapor
#

once i'm finished with my current mod i'll make a slay the spire themed mod (since i haven't seen any)

devout zenith
frosty dock
#

pov smods.calculate_repetitions doesn't support deck effects

lusty epoch
dusk garnet
#

new to modding with balatro, quick question; how do i properly create a new rarity?
a bit of searching led me to try

SMODS.Rarity {
    key = 'prefix_test',
    loc_txt = { name = 'Test' },
    badge_colour = HEX('708b91'),

    default_weight = 0,

    pools = {},

    get_weight = function(self, weight, object_type)
        return weight
    end
}

...


SMODS.Joker {
...
rarity = 'test'
}

which throws attempt to get length of local pool (a nil value)

follow up question; how would i do gradients in the rarity display (haven't tried anything with that yet - will search for that later)

cedar stream
frosty dock
dusk garnet
#

yeah

#

works now!!

dull saddle
#

i have a bug, unaccounted for calculate context i think, my cards held in hand retrigger after winning the round, after the final scoring hand is aready played/calcuated, here is what it looks like in game.

dull saddle
# dull saddle i have a bug, unaccounted for calculate context i think, my cards held in hand r...

Heres the lua code for these jokers, this ones for diamonds but all are identical besides suits``` SMODS.Joker {
key = 'vaingloriousjoker',
loc_txt = {
name = 'Vainglorious Joker',
text = {
"{X:red,C:white}1.5{} Mult for each",
"{C:diamonds}Diamond{} suit held in hand",
}
},
config = { extra = {
X_mult = 1.5,
suit = 'Diamonds',
}
},

loc_vars = function(self, info_queue, card)
  return { vars = { card.ability.extra.x_mult } }
end,
rarity = 3,
atlas = 'SinfulJokers',
pos = { x = 0, y = 0 },
cost = 8,
unlocked = true,
discovered = true,
blueprint_compat = false,
eternal_compat = true,
perishable_compat = false,
calculate = function(self, card, context)
  if context.individual and
  context.cardarea == G.hand and
  context.other_card:is_suit("Diamonds") then
    return {
      mult_mod = card.ability.extra.X_mult,
      message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.X_mult } }
    }
  end
end

}```

sturdy compass
#

What's that empty context.

dull saddle
#

the bit tahts just a blank context is not currently running in game

#

sorry that was me runnign the wheels in my head earlier lemme fix that

dull saddle
#

1.0.0 alpha 1313f

cedar stream
#

what is the crash log

dull saddle
#

theres no crash just unintended features

cedar stream
#

ah ok

dull saddle
#

it doesnt impact gameplay at all i dont think, but it tirggers the held in card hands and adds it to the numbers left from the previous blinds winnign hand before moving on to the pay out screen and the sotre, it doesnt get rid of those numbers in the hcips and mult slots until the first card is selected next blind

wintry solar
#

You want context.cardarea == G.hand and context.main_scoring

dull saddle
#

so i was wondering if there was a timing context i should do rahter than jsut an area THANK YOU

cedar stream
wintry solar
#

It’s just the main scoring timing

#

Easier to reference than checking for not lots of things

dull saddle
#

the phase timing to trigger during the main scoring time rather than any other time

cedar stream
#

so it would be a way to trigger the same time as when wrathful or greedy joker triggers

#

if im understanding correctly

dull saddle
#

unfortunately its not the correct timing as now the cards dont activate at all

#

hmm

#

i think theres a specific timing for held in hand which is what i need

#

i will resume hunting through the smods wiki to see if i can find anyhting there

glacial zinc
#

are you able to modify the score of a hand after its been calculated?

frosty dock
dull saddle
#

darn

frosty dock
#

could be that something else is wrong, got me the code?

cedar stream
dull saddle
dull saddle
# frosty dock could be that something else is wrong, got me the code?
    key = 'pridefuljoker',
    loc_txt = {
      name = 'Prideful Joker',
      text = {
        "{X:red,C:white}1.5{} Mult for each",
        "{C:hearts}Hearts{} suit held in hand",
      }
    },
    config = { extra = { 
      X_mult = 1.5,
      suit = 'Hearts',
    }
    },

    loc_vars = function(self, info_queue, card)
      return { vars = { card.ability.extra.x_mult } }
    end,
    rarity = 3,
    atlas = 'SinfulJokers',
    pos = { x = 1, y = 0 },
    cost = 8,
    unlocked = true,
    discovered = true,
    blueprint_compat = false,
    eternal_compat = true,
    perishable_compat = false,
    calculate = function(self, card, context)
      if context.individual and
      context.cardarea == G.hand and
      context.main_scoring and
      context.other_card:is_suit("Hearts") then
        return {
          mult_mod = card.ability.extra.X_mult,
          message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.X_mult } }
        }
      end
    end
  }
viscid bough
#

anyone know how i can go about getting and using a random consumable without destroying it?

cedar stream
#

when is the joker supposed to do stuff?

frosty dock
#

oh this is a joker

dull saddle
#

when affects triggered in hand, liek shoot the moon or baron

glacial zinc
#

unless you knew that

dull saddle
#

sorry

glacial zinc
#

no its ok dw

frosty dock
#

you still want context.individual for jokers

#

but not main_scoring

#

that's a playing card thing

dull saddle
#

but? i have that?, yeah we need the timing for held in hand

frosty dock
#

just remove the context.main_scoring part

#
    if context.individual and
      context.cardarea == G.hand and
      context.other_card:is_suit("Hearts") then
dull saddle
#

okay so now its back to when it would trigger after the round?

#

thats what i had it as originally

#

i tried the main socring timing context but obvs taht didnt help

cedar stream
frosty dock
dull saddle
#

thank you!

#

will try this out

dull saddle
frosty dock
#

for enhancements you'd want a context.main_scoring check

cedar stream
wintry solar
#

I am stuck in fixing enhancement code and keep recommending the wrong context 😂

cedar stream
dull saddle
# cedar stream

double check ur x's are capitalized correctly that was the culprit for me earlier today

cedar stream
sturdy compass
#

That looks to be it LOL

wintry solar
#

I’m not free right now, butyour code isn’t structured correctly in terms of loops

cedar stream
#

this isnt the part of code that i made

#

thats the one i made

viscid bough
#

Anyone know how i can go about making a joker that activates a random held consumable without destroying it?

dull saddle
#

you might have to have it duplicate it? instead right before activating it

pulsar flower
#

where is G.load_shop_booster defined? i can't seem to find it at all

wraith topaz
#

So I looked online on how to make a modded joker and just never showed up, could a coder give me some advice?

viscid bough
#

this shows the structure for jokers

wraith topaz
#

Thank you.

weak brook
#

are there any examples of mods anyone knows of that have booster packs of consumables where the consumables arent immediately used?

#

i wanna make a booster pack just select cards to add to consumables, or ideally both an option to select and select and use

faint yacht
#

Cryptid's Code cards.

weak brook
#

thanks

cedar stream
weak brook
#

i was trying that but it seems like theres some fuckery with the game code where buttons are decided based on objecttype or something

cedar stream
viscid bough
#

anyone know how i can detect whenever money is gained? And how i can also set the money to a specific value?

zealous glen
#

@ionic verge

#

You can ignore the vic contexts because I patched them in

ionic verge
#

thanks

zealous glen
#

and probabky the last check for the deck size

ionic verge
#

i got it from here

zealous glen
#

there's some more changes actually but you can figure it out

faint yacht
#

...still not sure how I can prevent multiple copies of the tag to interfere in with one another.

apply = function(self, tag, context)
    local lock = tag.ID
    if context.type == "immediate" then
        G.CONTROLLER.locks[lock] = true
        tag:yep('+', G.C.ORANGE,function() 
            local key = 'p_toga_togazipboosterpack'
            local card = Card(G.play.T.x + G.play.T.w/2 - G.CARD_W*1.27/2,
            G.play.T.y + G.play.T.h/2-G.CARD_H*1.27/2, G.CARD_W*1.27, G.CARD_H*1.27, G.P_CARDS.empty, G.P_CENTERS[key], {bypass_discovery_center = true, bypass_discovery_ui = true})
            card.cost = 0
            card.from_tag = true
            G.FUNCS.use_card({config = {ref_table = card}})
            card:start_materialize()
            G.CONTROLLER.locks[lock] = nil
            return true
        end)
        tag.triggered = true
        return true
    end
end,
cedar stream
faint yacht
#

Not sure myself, tbh. Was looking at Meteor Tag as example...

cedar stream
#

try replacing the == with ~= and see what that does, not saying it will fix it, but what it would do

faint yacht
#

...actually, I just was using the wrong "context" for this too, lmao.

cedar stream
#

cuz sometimes you got to break your code to fix it

solar tide
#

Hi !
We have some bugs, the card need to just add 1 time 200 chips but we dont know why, it add 2 times a row 200 chips per hand. Someone can explain why ?

SMODS.Atlas{
    key = 'Joker', --atlas key
    path = 'Joker.png', --atlas' path in (yourMod)/assets/1x or (yourMod)/assets/2x
    px = 71, --width of one card
    py = 95 -- height of one card
}
SMODS.Joker{
    key = 'La fraise', --joker key
    loc_txt = { -- local text
        name = 'Petite Michelle',
        text = {
          '{C:chips}+#1#{} Jetons',
          '{C:green}#2# chance(s) sur #3#{} que cette',
          'carte soit détruite',
          'à la fin de la manche'
        }
        },
        atlas = 'Joker',
        pos = {x = 0, y = 0},
        config = {extra = {
            t_chips = 200,
            odds = 6 
        }
    },
    loc_vars = function(self,info_queue,center)
        return {vars = {center.ability.extra.t_chips,
        G.GAME.probabilities.normal,
        center.ability.extra.odds}}
    end,
    calculate = function(self,card,context)
        if context.cardarea == G.jokers and not context.before and not context.after and context.poker_hands and next(context.poker_hands) then
            return {
                message = localize({ type = "variable", key = "a_chips", vars = { card.ability.extra.t_chips } }),
                colour = G.C.BLUE,
                chip_mod = card.ability.extra.t_chips,
            }
        end
    end
}```
solar tide
#

just cause i worked with a friend ^^

cedar stream
#

ah

solar tide
#

🥺

cedar stream
#

is it supposed to trigger on a certain poker hand?

solar tide
#

no

#

just when u play an hand

#

we want to add 200 chips

#

we want to made a joker like the banana but with a strawberry just add 200 chips for each hand played

cedar stream
#

oh its not context.poker_hands

ionic verge
#

so this is gonna be used to disable the boss blind on the last hand, there shouldn't be anything wrong with that right?

solar tide
#

what i need to put, bcs before put that, the card trigger a lot

#

like 7 or 8 times

cedar stream
#

if context.cardarea == G.play and context.individual and not context.blueprint and not context.repetition then

#

that should be the correct one^^

solar tide
#

we going try this

#

can u explain me

cedar stream
#

are you in like a vc or something?

solar tide
#

ye do you want we come for explain us

cedar stream
#

yea, if you could invite me

ionic verge
# solar tide we going try this

to my amatuer eyes it looks like if the card area is the playing cards being played, something, not being duped by blueprint, and not a repetition of said playing card

frozen patio
#

How do I get the descriptions of editions to appear on a card (like wheel of fortune, or Ectoplasm)?

ionic verge
#

oh i think i know this one

zealous glen
#

the same way with enhancements

#

add the key to the info_queue

ionic verge
#

i dont see why this shouldnt be working, any thoughts?
i dont see any missing bracket or comma

ionic verge
#

shit

#

thanks

#

does context.blind.boss not function? cus i see it being used in card.lua but it crashes when i parse it with my joker

#

for context this happened the moment the joker should have activated, and the if statement is line 299

zealous glen
ionic verge
#

mhm

zealous glen
#

but you can always try to find the current blind

#

hold on

ionic verge
#

i dont think i saw a function for that in the documentation

zealous glen
ionic verge
#

yknow, that makes sense actually

#

thanks

glacial zinc
#

how could i get the current amount of chips during a joker's calculate function?

zealous glen
#

not sure you can

glacial zinc
#

to clarify i mean chips as in the chip_mod

#

darn

zealous glen
#

you would need to patch or hook it

glacial zinc
#

how would i go about doing that?

frozen patio
cedar stream
zealous glen
cedar stream
#

like applying stickers?

zealous glen
frozen patio
#

i'm trying to have the description of a sticker show in the info queue of a joker

zealous glen
#

or just pass it as a new context

frozen patio
#

yes

glacial zinc
zealous glen
zealous glen
full kayak
#
G.playing_cards[i]:change_suit('Hearts')

What is the equivalent of the above for changing the value of the cards to all be 9s?
I'm assuming change_suit is something along the lines of change_value but I haven't found the correct code

viscid bough
#

can someone explain to me what ease_dollars() does

glacial zinc
zealous glen
faint yacht
zealous glen
faint yacht
#

That, yeah, Lovely patches... 😅

merry raven
#

I'm making a custom sticker that acts like some sort of timebomb, don't play it for one hand and it detonates
What contexts should I use to check that if the card with the sticker is in hand and any hand is played without it

glass scaffold
#

Anyone know the dimensions for a Blind chip? I'll assume that it needs its own SMODS.Atlas.

frozen patio
#

The badge on my sticker says "ERROR" for some reason. Do I need to specify text for it, or should it be automatically using the sticker name?

elder vapor
#

32x32

#

@glass scaffold

glass scaffold
elder vapor
#

or just put the label in yor loc_txt if you don't use a localization file

zealous glen
merry raven
#

Looking through the source code, most of them are just Steel Joker calculations, can't seem to find one that's focused on Steel Cards' calculations

elder vapor
merry raven
#

What's the difference between card.area and context.cardarea

elder vapor
#

card.area is the area of the card the sticker is attached to, context.cardarea i assume would be the area of the current context

#

since its a sticker i would use card.area but its up to you

merry raven
#

I'll try it out

weak brook
#

god i hate writing ui code

#

took forever for this to work

merry raven
#

Just as painstaking as using CSS

#

Thanks copilot

weak brook
#

cant use this fucking hell

#

has anyone figured out how to put buttons on different sides of the card at the same time

#

for a booster pack

dusk harness
#

Hello friends, im looking for pointers to start writing a mod, where would you guys tell me to start, plz ping with when answering

glass scaffold
merry raven
#

Yeah, look into that first

dusk harness
#

thanks i will be back with more questions when im done reading that

#

do i need to be on PC for it to be easier or mac will work fine?

zealous glen
#

PC is easier but people have modded on mac

dusk harness
#

good i will go down the hard path and come back to pc if i struggle too much

weak brook
#

hey victin

#

would you happen to know how to help me with my woes with card button ui

zealous glen
#

I would not @_@

weak brook
#

damn

#

i wish i could talk to someone who knows what they're doing with this

#

using this code from cryptid to do this

#

but i hate how it looks

#

i wanna add it on the side

zealous glen
#

Can you copy the code that creates use buttons for consumeables

arctic pawn
#

yeah

weak brook
#

activatable cards? which mod of theirs adds that

arctic pawn
#

change function?

zealous glen
weak brook
#

theres a few of those

zealous glen
#

Abilities

weak brook
#

ah thanks

zealous glen
#

cr is "center right"

#

I believe

#

not surebmi

weak brook
#

i know bm is bottom middle

zealous glen
#

there's also a horizontal offset

weak brook
#

never seen the i there

merry raven
#

Godspeed keku
If you come out on the other end with a win, you could put your mod up as an example on implementing custom USE buttons

zealous glen
#

every mod is an example

#

it's just some are harder to read

glass scaffold
#

Does the SMODS.Blind documentation work for ALPHA-1304a?

zealous glen
#

like Betmma's abilities

dusk harness
zealous glen
#

I couldn't understand it

glass scaffold
#

Because every time I try rendering my custom Blind, it keeps crashing.

zealous glen
dusk harness
#

thanks

merry raven
#

And Cryptid's source code is a fuckin enigma

zealous glen
#

at least you can always ask math

dusk harness
#

i tried reading it to give me an idea of how to get started and couldnt figure out anything

#

talking about cryptid here

zealous glen
#

yeah try reading vanilla, the wiki, and the examples first

#

then maybe some simple mod like Cosmos

#

I mean you could go simpler with Fish but

dusk harness
#

i can explain what i want to do and maybe you'll be able to give me better pointers?

im trying to get a mod that just reads the game state and transmits it to a twitch extension

weak brook
#

hmm this bettma abilities code isnt really showing me anything im actually looking for

weak brook
#

cause i couldnt find it in abilities

dusk harness
zealous glen
zealous glen
mellow sable
#

the game state in general is in G.GAME

weak brook
zealous glen
mellow sable
#

I don't know anything about Twitch API, but there's a Discord RPC mod called "Distro" and a mod called TwitchBlinds that interacts with a streamer's Twitch chat

zealous glen
#

a bit outdated but it might help

mellow sable
#

both of those code resources would probably be pretty useful for what you're trying to do

faint yacht
#

...which function executes applying a random edition (even modded ones) to an already existing Joker?

dusk harness
#

thanks so much for the pointers, ill look on github to find the mods

zealous glen
#

some combination of set and poll edition presumably

weak brook
zealous glen
#

Steamodded recreates both?

weak brook
#

like buy from shop

zealous glen
#

and a second use button

#

should be easy just copy-paste-patching vanilla code

weak brook
#

nah the issue with that is if i add onto a use button thats on the bottom, its still on the bottom

#

then both are on the bottom

#

dont want that

zealous glen
#

that's what the sell button is for

weak brook
#

i mean if i could add a side sell button to the buttons on the booster pack cards, and then edit it to not sell, i would do that, but i just tried to do that for like an hour

#

ui code is hard

onyx inlet
#

Is there any reason why this should result in a blank name and description for a joker?

    key = "schrade",
    loc_text = {
        name = "Schrade",
        text = {
            "Schradecorp CEO"
        }
    },
...
}
zealous glen
weak brook
#

both

#

for one cryptid code does this

#

which isnt what i want

#

and vanilla i just cant figure it out

zealous glen
#

hmmm

#

See if Fusion Jokers help

#

or again ask @mellow sable

weak brook
#

alright ill look into fusion

#

yeah math do you know how i could achieve what i'm looking for here?

#

@mellow sable

faint yacht
dusk harness
#

might have been for me

mellow sable
#

The PULL/USE UI was yoinked from Betmma mods

#

I also added a FLIP button for the Double Sided edition but that was a pain to implement and still a bit finicky

zealous glen
#

@weak brook I think the code I sent you is the code that controls the positions of the buttons

weak brook
#

i almost had a thing going where i put the buttons on the side of the card by putting some big ass padding thing before it so it got pushed to the right but that ended up blocking clicking on that invisible padding

weak brook
zealous glen
weak brook
#

that code like changes where the buy button is but thats both in different cardareas

zealous glen
#

But one button is always to the right

#

and the other is sometimes offset down

#

I think you can imagine both buttons behind the card, then offsetting one to the right and the other to the bottom

weak brook
#

hm

#

that could work

#

just gotta go through a bunch of trial and error shit again with this ui code

zealous glen
#

oh also

#

Malverk had some buttons

#

I had forgotten about it

weak brook
#

i wanna also make sure that the position of either of these is not affected by if the other one is not present you know

#

ohh shit

#

malverk

#

i think you're onto something

#

i gotta check that ui

nova finch
#

how do you make a rarity that doesn't appear in the shop?

zealous glen
#

and Jokers can't be used

#

so it should work

weak brook
#

no i mean like

#

two buttons

zealous glen
weak brook
#

in the same ui block

zealous glen
#

I think it should always have both

#

But make one inactive

#

That's how Consumeables work

#

maaaybe you could figure out how to keep the button but make it invisible

weak brook
#

oh yeah we could do that by making the color clear

weak brook
#

time to copy this

zealous glen
zealous glen
#

at least for the Random DeckSkin option

weak brook
#

oh yeah speaking of that

#

have you taken a look at my repo

#

i sent it to onesuchkeeper but i dont think they've done much with it after i explained it all to em

zealous glen
#

not yet sorry

weak brook
#

ah its alright

misty cape
#

Hey all, could somebody point me in the correct direction to learn more about setting up a config? It would be very simple with maybe 2 or 3 options. This is what I have so far, but not sure where to even start with building a config. #1328320443693662311 message

vagrant cedar
#

Anyone know the context for when a hand is played?

#

I'm trying to make this joker trigger when a hand is played, but it's currently going when a blind is entered

#

So what do I replace context.setting_blind with?

faint yacht
#

Do you want to do stuff before, during or after the cards score?

#

From what I can assume, though, context.before.

dusk harness
random sleet
#

yeah space joker is before

#

and that sounds like the type of effect they're going for

vagrant cedar
#

I HAVE MADE THE LORD'S CARD

#

Cutaway Gag
Gives X15 Mult,
plays an episode of
Family Guy when entering blind.
(Episode is skippable after theme song)

hardy viper
#

the perfect joker to give streamers

vagrant cedar
#

For anyone wondering if it works

hardy viper
#

that's awesome

#

are you streaming them or do you just have a gigabyte of family guy in the mod

winter thorn
vagrant cedar
onyx inlet
#

Hey all, I have been breaking my brain trying to learn this SMODS stuff, and I am struggling to even get a functionless joker to work. I could really use some direction. This is the entirety of my SchradeJoker.lua file. The joker shows up in the collection with the correct image, but it has no name and no description, and I have no idea why.

    key = "SchradeJokerAtlas",
    path = "Schrade.png",
    px = 71,
    py = 95
}

SMODS.Joker{
    key = 'schrade',
    loc_text = {
        name = "Schradecorp CEO Schrade, esquire",
        text = {
            "After each hand, train",
            "a played card for",
            "Schradecorp"
        }
    },
    rarity = 1,
    atlas = 'SchradeJokerAtlas',
    pos = { x = 0, y = 0 },
    cost = 1,
    discovered = true,
    unlocked = true,
}```
dusk harness
#

how do you guys get the autocomplete to show up in you editor for something like the Game or SMODS?

sick sparrow
#

wow, steamodder ignores mod's json and treats this mod as lovely

onyx inlet
#

Which mod?

sick sparrow
#

might be because of circular provides?

hardy viper
# dusk harness how do you guys get the autocomplete to show up in you editor for something like...

install luals and ensure the balatro source code and the steamodded code are both in your workspace
also look out for this pr https://github.com/Steamodded/smods/pull/399

GitHub

Currently, Steamodded is not written in a way that allows you to comfortably run Lua LSP. A massive majority of functions do not have any indications of what they do besides name along with lacking...

#

and by install luals, it's a vscode extension called "lua" by sumnekk

sick sparrow
#

it might be

hardy viper
#

i imagine you have it but regardless

dusk harness
hardy viper
#

the two you just mentioned both work, there is a third that involves a file in the top folder of your workspace intended to "point" luals at the steamodded folder (idk any more because i just have my entire balatro folder in my workspace and I don't use autocomplete anyways)

sick sparrow
#

how to put other mod's atlas to this mod?

#

as i fallback to joker when atlas fails to load, it appears as joker instead of correct atlas (will crash if didn't fallback (all users))

edgy reef
#

I was really hoping that one wouldn't show up.

dusk harness
#

i know my if is not complete

sick sparrow
#

as you can see it appears as incorrect card atlas

hardy viper
sick sparrow
#

the leftmost joker card is that atlas that i want to apply

dusk harness
hardy viper
#

i was under the impression it was in a usable state but apparently not

#

idk why i assumed that it's a draft

#

mb

dusk harness
#

no worries

edgy reef
#

Weird part is it doesn't happen through Neovim but does with VSCode

#

Idk how or why cause nothing seems to indicate that defining a method means it's automatically required.

dusk harness
#

i was using nvim right before this and it wasnt super might go back if you tell me it works if i have a copy of everything in my folder

hardy viper
#

neovim should be fine or better for balatro honestly

#

im not sure though

#

not a vim user

#

if the luals definitions work better in neovim that's great

dusk harness
#

alright, i need help setting it up, step by step or more detailed explanation than the github thnig

#

cause right now on nvim it says undefined global smods

edgy reef
# dusk harness is this normal ?

To be precise, creating or extending a class seems to make Lua Diagnostics think that all class methods must be defined within the object.

dark kite
#

yeah sure man whatever

dusk harness
#

what does the star 8 do

dusk harness
dark kite
#

stars and suits are just two new suits

#

was trying to get them to work with smeared joker

dusk harness
#

i dont think it worked, but who knows

#

maybe its not a bug its a feature

dark kite
#

it def didnt

#

considering even with smeared

#

clubs diamonds hearts and spades do not make a flush LOL

wind turtle
#

making the stupid shit nobody should

random sleet
#

(it also doesnt work)

nova finch
#

trying to make a legendary joker-esque rarity for my album jokers
they'll all have a gold frame :>

sick sparrow
# random sleet
if context == G.hand and (not (context.repetition or context.end_of_round or context.first_hand_drawn)) then
end
nova finch
#

How do you check the amount of cards in a played hand?

hardy viper
#

#G.play.cards

#

where G.play is the cardarea played cards go into, cards is the list of cards in G.play, and # is the length operator

nova finch
hardy viper
#

yep

nova finch
#

k

#

thanks!

hardy viper
#

np

dry merlin
sick sparrow
#

how to merge 4 jokers without overproducing? (it's automatic)

hardy viper
#

genuinely what

sick sparrow
#

if there's 4 identical joker, it merges by deleting self and 3 others, then prevent others from doing so

analog pilot
#

just make the outfits their colors

dry merlin
#

i was gonna say to make it the legendary jokers but theres 5 of them

analog pilot
hardy viper
#

every album ever tbh..

nova finch
analog pilot
#

I have a suggestion

dry merlin
#

dark side ez

#

instead of the rainbow make it the 4 suit colors

analog pilot
#

this would go so hard as a joker

#

(snowing - i could do whatever i wanted if i wanted)

tall wharf
nova finch
dry merlin
#

nice

#

thoughts on my suggestion with the suit colors?

nova finch
#

maybe

tall wharf
# tall wharf Will you be adding this
Ado

ねえ、ギャーギャー言っちゃって

テレビ朝日系木曜ドラマ『ドクターX~外科医・大門未知子~』主題歌
Streaming & Download▶︎https://ado.lnk.to/ashura-chanID

▼inst音源
https://piapro.jp/t/5n7S

Vo:Ado
https://twitter.com/ado1024imokenp

Music & Lyrics: Neru様
https://twitter.com/neru_sleep

Guitar:三矢禅晃様
https://twitter.com/Gibson_Mitsuya

Bass:キタニタツヤ様
https://twitter.com/TatsuyaKitani

Drums:ゆーまお(ヒト...

▶ Play video
#

guess i ain't getting a response from that

#

I'll take that as a no

random sleet
# random sleet

(i needed context.cardarea == G.hand and context.main_scoring oops)

dusk harness
#

does anyonre know how to get the cards from the hand of the player?

dry merlin
#

g.hand.cards?

dusk harness
#

thanks

dry merlin
#

thats what raised fist uses i think

dusk harness
#

oh i didnt think of looking at that, thats genius

#

thanks imma go check

tall wharf
#

you know what

#

if that person doesn't make it i will

#

and actually while I'm there i might as well

#

a deck you can't play if you don't know Japanese

dusk harness
dry merlin
#

i think all the jokers and card effects are in card.lua

nova finch
flat ridge
sick sparrow
#

how to put other mod's atlas to this mod?

dry merlin
flat ridge
sick sparrow
dry merlin
runic pecan
#

Forgetting the second S in SMODS is such a rookie mistake of mine...

tall wharf
runic pecan
#

That's why I call it rookie
A moment everyone could have done once or twice on their path

merry raven
#

Working on a custom sticker's effects and I want to make it so that it executes the rest of the code I defined in calculate when any other card is played except for the card with the sticker

I have this currently, but nothing really happens after I play a hand without the stickered card on it
if card.area == G.hand and context.after then

Any insights?

dry merlin
#

shouldnt it be context.cardarea == G.hand?

vagrant cedar
#

Anybody wanting to help me experiment with the new "breakthrough" we've made within Balatro?

edgy reef
vagrant cedar
edgy reef
#

I guess @overload is just too scuffed

vagrant cedar
#

I'm trying to make it play a random one instead of a specific one

#

Anyone able to help with this?

#

This is going to be more complicated than the average Joker

tall wharf
#

apparently everyone is doing the select more than 5 cards thing custom hands so I'm not gonna do it anymore

dry merlin
#

could you just use the same math that glass cards use when selecting a shatter sound effect file

vagrant cedar
#

Within files

dry merlin
#

heres the glass card code

    G.E_MANAGER:add_event(Event({
        blockable = false,
        func = (function()
                play_sound('glass'..math.random(1, 6), math.random()*0.2 + 0.9,0.5)
                play_sound('generic1', math.random()*0.2 + 0.9,0.5)
            return true end)
    }))

could you use something like this?

#

where each sound file is named glass1.ogg, glass2.ogg etc up to 6

#

personally im not sure if the second math.random is for selecting a random one or setting like a random pitch

sick sparrow
#

me trying to set atlas in a way that set_sprite does and got weird results

vagrant cedar
dull saddle
#

so for the first thing in your atlus, x 0 y0 but the second would be x 1 y 0 and the one beneath the first would be x 0 y 1

#

it measures across the atlus png in a grid based on the size of the atlus keys

#

i think

sick sparrow
#

made the sprite_set be ```lua
set_sprites = function(self, card, front)
card.children.center.atlas = G.ASSET_ATLAS["gerioc1_geriolish_1"]
card.children.center:set_sprite_pos(self.pos)
end,

#

it won't let me set correct atlas and i circumvented with this

dull saddle
#

sorry i have no idea what this is i cant help

dry merlin
#

can anyone help me? im trying to have a card enhancment that works like blueprint, right now its just using the effect of walkie talkie for testing. but it wont trigger when the condition is met (that being that its next to a 10 or 4)

  calculate = function(self, card, context, effect)
        if context.individual then
            local other_card = nil    
            for i = 0, #context.scoring_hand do
                if context.scoring_hand[i] == card then other_card = context.scoring_hand[i+1] end 
            end
            if other_card ~= nil and other_card ~= card then            
                if context.other_card:get_id() == 10 or context.other_card:get_id() == 4 then
                    return {
                    chips = card.ability.extra.chips,
                    mult = card.ability.extra.mult,
                    card = context.other_card
                    }
                end
            end
        end
    end
narrow pendant
narrow pendant
#

It's a busy album cover lol

nova finch
#

wow lol

sick sparrow
#

by putting some extra code and valid mod atlas

flat ridge
sick sparrow
#

this is case when steamodded dosen't cooperate

#

and had to use G.ASSET_ATLAS table

narrow pendant
nova finch
vagrant cedar
spice garden
#

ive been uh, adapting some art into jokers, myself. pretty fun.

vagrant cedar
tall wharf
#

😭😭😭😭😭

#

wtf

spice garden
#

lmao

#

not all are sussy. this one is from a MTG card

tall wharf
#

pretty sure someone was doing a mtg mod

spice garden
#

cool. im just reskinning vanilla jokers myself.

wary monolith
#

Had a quick, probably simple question. Brand new to both lua and modding Balatro, but have plenty of other programing experience.

If there is a variable created in the base game's game.lua file, what would the best way be to inject/replace it with my own version of that variable during runtime?

Like in this case, if I have the title_top variable, and I want to modify its W and H values, what might be the best way to go about doing that with Steamodded?

self.title_top = CardArea(
        0, 0,
        CAI.TITLE_TOP_W,CAI.TITLE_TOP_H,
        {card_limit = 1, type = 'title'})
tall wharf
#

what if i make custom music for my special mechanic

spice garden
#

im interested in how easy it would be to make a custom music mod. (im a music producer)

vagrant cedar
tall wharf
#

adding wordle to balatro

spice garden
# vagrant cedar Shouldn't be too hard

im not a "modder" per se, tho. i can just barely read crash logs. but if all it requires is replacing the sound files in a templated mod someone already made... i'd be cookin.

tall wharf
#

i already have the necessary foundation in place to do it

#

I'll add wordle as boss blind

spice garden
tall wharf
#

why the 💀

spice garden
#

idk

#

default npc reaction

tall wharf
#

why did someone react east timor flag

random sleet
#

because i assumed "tl" was thailand (it is not)

#

this is thai right

#

i tihnk you were talkin about it before

#

idk

#

brain broken

tall wharf
#

Timor-Leste

random sleet
#

alright well i'm going to just throw my laptop out the window now

tall wharf
#

tho yes it's Thai

sturdy compass
#

Is there an easy way to get least frequent rank in the deck? Or do I have to loop through the entire deck and keep track of it myself?

tall wharf
#

@spice garden

sick sparrow
vagrant cedar
#

Just sitting here watching Family Guy inside my Balatro

#

How's yall day

sick sparrow
rough furnace
#

jut win the run

sick sparrow
#

and i got killed by death card in shop

graceful quail
#

Anyone have any clue what the issue could be?

sick sparrow
#

i turned an death card into literal lethal card

tall wharf
#

ok

tall wharf
merry raven
#

SMODS.Sound({ vol = 0.3, key = "machine_garden_mote_spawn", path = "machine_garden_mote_spawn.wav" })

Importing a custom sound, does vol not work? I turned it down from 0.6 to 0.3 but it's still equally loud

wintry brook
#

if youre using play_sound you have to pass the volume as an argument

merry raven
#

Like this?
play_sound(0.3, "fm_machine_garden_mote_spawn")

wintry brook
#

other way around i think

runic pecan
#

I feel like this is wrong, should ditch the for loop, and use if card:is_suit("Clubs") then instead.

wintry brook
#

are you checking if a clubs is played or if the calculated card is clubs

runic pecan
#

for every club held in hand

wintry brook
#

then that would be right, card would refer to the joker rather than the card played

#

sound question, i cant get these sounds to be recognized, i keep getting 'expected file' error

#

crashes when i try to play the sound

#

the files are here in my sounds folder

#

do sound keys have a letter like enhanced has m_?

edgy reef
#

THE 0.9.8 API METHODS GOT SNUCK INTO THE DEFINITIONS?!

#

OH COME ON

edgy reef
# edgy reef 😭

Ok this should only ever flag when you point to SMODS and not the def files

runic pecan
#

What is the {C:} keyword for Club suit?

wintry brook
#

C:clubs

nocturne garnet
#

even nicer

runic pecan
#

Should I change "become Glass" to "served Justice" in my joker's description?

sick sparrow
#

jimbo balatrojoker

meager summit
#

im quite new to this whole modding thing, and i was thinking of making a quick messy deck skin
ive read everything carefully, and thought i did everything correctly but for some reason its using the Jack twice, as both the Jack and the Ace
why is this happening exactly? i could just be dumb lol

violet void
#

so back to this

I was wondering if destroy effects are kinda excluded? or ceremonial dagger would also count as having 2 effects

but nonetheless, would this card having mult make sense?

faint yacht
#

+1 Mult seems a bit low... my first thought was adding Mult equivalent to the rank of the card destroyed. Unless it's Stone, which could default to +4.

violet void
wintry brook
#

this card is so close to being fully finished, but the burnt cards dont act like burnt cards when they are first made by the dragon. i think its because the cards are already stored as non enhanced but im not sure

faint yacht
#

Are you making the "burned" change in context.before?

wintry brook
#

yup its all in context.before

#

i know there are extra perameters for set_ability but im not sure what they are

tall wharf
zealous glen
#

In Cosmos, we used a trick to make cards with Editions gain the Editions but only display them a few moments later

#

So you’ll probably want something similar

#

Though in your case it should be easier since Midas Mask is similar and thus there’s built-in vanilla functionality for it

violet void
wintry brook
#

midas mask gets away with it because its a joker rather than a card im pretty sure

wintry brook
zealous glen
#

Or see how Cosmos does Spinagogue Champion

#

You shouldn’t need a patch for Enhancements but anyways

violet void
zealous glen
wintry brook
wintry brook
violet void
# zealous glen But you reveal earlier

I made a custom context for it which happens right before the evaluate_play gets the poker hand played

If I give put flip_cards in a event then the cards change rank instantly before the flipping part is over

if I put the rank changing part in an event, then it happens after the scoring

zealous glen
zealous glen
wintry brook
#

let me try with splash

zealous glen
wintry brook
#

i did, it works, probably because its a joker though

wintry solar
#

using the delay_sprites flag on st ability should solve these problems

zealous glen
wintry solar
#

I'd need to see more of the code than the one line

zealous glen
#

Yeah I was going to say

#

It sounds like either they did something else wrong or they might need a patch for a similar bit different functionality

wintry brook
#
        if context.before then 
            for k, v in pairs(context.scoring_hand) do
                if v.ability.name ~= "m_imaginary_dragonCard" then
                    v:set_ability(G.P_CENTERS["m_imaginary_burntCard"], nil, true) 
                end
            end

            G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
                card:juice_up(1.5, 1.5)

                local fireParticles = {}

                play_sound("imaginary_dragonFlame")

                for i = 1, 4 do
                    fireParticles[i] = Particles(1, 1, 0, 0, {
                        timer = 0.015,
                        scale = 0.3 * i,
                        initialize = true,
                        lifespan = 1,
                        speed = 4 * i,
                        padding = -1,
                        attach = card,
                        colours = {G.C.WHITE, lighten(G.C.ORANGE, 0.4), lighten(G.C.RED, 0.2), lighten(G.C.YELLOW, 0.2)},
                        fill = true
                    })
                end
                for i = 1, #fireParticles do
                    fireParticles[i].fade_alpha = 0
                    fireParticles[i]:fade(0.3, 1)
                end
                
                return true
            end, }))

            for k, v in pairs(context.full_hand) do
                if v.ability.name ~= "m_imaginary_dragonCard" then

                    local percent = 1.15 - (k - 0.999) / (#G.hand.cards - 0.998) * 0.3
                    G.E_MANAGER:add_event(Event({
                        trigger = "after",
                        delay = 0.05,
                        func = function()    
                            v:flip()
                            play_sound("card1", percent)
                            v:juice_up(0.3, 0.3)
                            return true
                        end,
                    }))
                    local percent = 0.85 + (k - 0.999) / (#G.hand.cards - 0.998) * 0.3
                    G.E_MANAGER:add_event(Event({
                        trigger = "after",
                        delay = 0.05,
                        func = function()
                            v:flip()
                            v:set_ability(G.P_CENTERS["m_imaginary_burntCard"], nil, false) 
                            play_sound("tarot2", percent)
                            v:juice_up(0.3, 0.3)
                            return true
                        end,
                    }))
                end
            end

            delay (0.5)
        end

        if context.cardarea == G.play and context.main_scoring then
            return { x_mult = card.ability.xMult }
        end
        -- if context.individual and context.cardarea == G.play and not context.repetition then
        --     effect.x_mult = card.ability.xMult
        -- end
    end```
#

i set delay sprites to true but it still happens immediately, but im unsure what it does exactly

#

maybe i should just use set_sprites atp

wintry solar
#

hold on let me see how I implemented zodiacs

violet void
#

thread for when youre not speaking with 2 people at the same time

wintry solar
#
context.scoring_hand[i]:set_ability(G.P_CENTERS[effects[i]], nil, true)
                local name = context.scoring_hand[i].ability.effect
                context.scoring_hand[i].ability.effect = nil
                G.E_MANAGER:add_event(Event({
                    trigger = 'before', delay = 0.2, func = function()
                        context.scoring_hand[i].ability.effect = name
                        context.scoring_hand[i]:juice_up()
                        return true
                    end}))
#

this is the code I have, though I don't remember why it's written this way 🤷‍♂️

wintry brook
#

it does the same thing it seems

wintry solar
#

it does some funny stuff with the .effect bit, perhaps try that?

wintry brook
#

i think it delays the sprite change by a tiny amount but i need it to be delayed by a lot. i may just try some set_sprite shenanigans

wintry brook
zealous glen
wicked leaf
#

spritin goin good

merry raven
#

Stanced up jimbo

wicked leaf
#

rolling eyes fall...

zealous glen
wicked leaf
violet void
#

a vague resemblance

mellow prism
#

hey folks, are there any conventions i should keep in mind to keep a mod i'm developing optimized? i saw some other mods have a certain structure like having each joker have its own lua file but i didn't know if there was any purpose to that besides keeping it organized for the person making the mod

#

just trying to avoid performance drops like i've seen elsewhere

storm kraken
#

do you guys vibe with this

wicked leaf
frosty dock
wicked leaf
#

doesnt impact performance but itll be easier to search for stuff

frosty dock
violet void
#

I like having everything in its own folder

frosty dock
#

having lots of files can impact performance on startup due to more file reads, but it's not really significant

frosty dock
#

whatever you like best. single files per object can get annoying to navigate, a good middle ground is a file per type of object

storm kraken
#

my recommendation is (which i shouldnt even be stating) is to have all your SMOD types ordered
so like its all the jokers without any other types inbetween then the atlases or whatever etc
-# idk if this makes sense but its here

violet void
#

would you say Pokermon's approach for Jokers is the optimal way

it puts like X jokers code per file

frosty dock
#

there's not a lot of "obvious" performance pitfalls that are important for most mod devs, other than maybe avoiding the use of update functions where possible

frosty dock
violet void
#

you also said having lots ot files can affect it

maiden phoenix
frosty dock
violet void
#

I guess, but if I can avoid it I'd prob do it

-# Im not to that point yet though

frosty dock
#

and it would just affect load times

#

I guess in terms of error log readability, single files for each object are the best option, but it can also be annoying to navigate

violet void
#

ye thats also true

mellow prism
#

initial load times isn't as much a concern as slowdown during game is for me, though i'll still keep that in mind

#

though it doesn't sound like there's much that can be done in that regard

storm kraken
#

should i use spreadsheats for atlases or just single image pngs for atlases
cuz me personally

violet void
storm kraken
#

yeah thats the point

#

those are all atlases

violet void
#

I use whatever vanilla uses is called personally, its not as complicated as I initially thought

frosty dock
#

i mean personally i prefer spritesheets over spreadsheets for these

storm kraken
#

true,,,

maiden phoenix
#

Im so glad I was bullied into using spritesheets

violet void
#

but then I had to crop to selected in order to use the website for jokers 🥹

maiden phoenix
#

I used a python script to do that for me

violet void
#

ooh?

#

do say more

maiden phoenix
#

Basically the code just save each sprite as its own file from a spritesheet

#

Im not home so I dont have it available right now

runic pecan
#

Is this the right way to create a Moon tarot card?

frosty dock
#
SMODS.add_card({ key = 'c_moon', area = G.consumeables })

no add_to_deck or emplace needed

wicked leaf
#

now I just gotta make it work

runic pecan
frosty dock
runic pecan
#

Does this function automatically check if there's enough room in consumable slot?

wicked leaf
#

I dont believe so

#

Judging by how code cards in cryptid work (most of them dont need room to add stuff)

frosty dock
#

but no

maiden phoenix
#

But yea if it's guaranteed negative don't check for that, doesn't really matter

frosty dock
maiden phoenix
#

Perkeo owns this game balatrojoker

frosty dock
storm kraken
#

this is what hell looks like (you cant get dry cards)

frosty dock
#

i'll just pull dry cards out of thin air ezpz

storm kraken
#

skull

mystic river
maiden phoenix
#

DebugPlus my beloved

runic pecan
#

I hope it's fine to define an upgrade function for my jokers.

#

Ah crap, for got to reset scored_card. brb

frosty dock
#

other than that, sure

runic pecan
#

Fixed.

frosty dock
#

you're still calling it on card

#

which doesn't have your function, self does

runic pecan
#

so self:upgrade(card) ?

runic pecan
storm kraken
#

err uh aaa
how to i go about randomized values

#

nvm i figured it out

vagrant cedar
#

Anyone know how to make this play a random file within a folder, rather than just one file?

hardy viper
#

pseudorandom_element(NFS.getDirectoryItems("thisDir"))

#

and thatll be a string containing the name of a file inside thisDir (e.g. episode4.ogv)

runic pecan
#

Which fits better for a Legendary-like?

vagrant cedar
#

where do I put it/do I replace anything

hardy viper
#

uh idk youre the one who wrote the code

vagrant cedar
#

I barely touched it but I had the idea for the video playback before it was possible today

violet void
crisp coral
#

the other one gets capped from consumable slots

violet void
#

the philanthropic perkeo image would fit here

glass scaffold
#

What's the code for making a Standard Pack tag generate after a shop?

vagrant cedar
#

i think

glass scaffold
runic pecan
vagrant cedar
#

Anyone that's experienced able to help me real quick? Trying to create a table for my Joker to choose a random function from a specific list of functions.
I have several functions that work on their own if I tell it to do them, but I want it to trigger only one, but at random.

runic pecan
#

So add_tag(Tag('tag_standard')) I guess

glass scaffold
#

my parenthesis and brackets aren;t matching in color, but that shouldn't be an issue yeah?

#

I copied it as I see it

runic pecan
frosty dock
vagrant cedar
runic pecan
vagrant cedar
#

Might as well put these in between

glass scaffold
#

does Lua not have any switch case thing like Java?

frosty dock
#

how about

pseudorandom_element(my_functions, pseudoseed('my_joker'))()
glass scaffold
vagrant cedar
#

what does my_functions do?

frosty dock
#

where my_functions is the table that you put your functions in

vagrant cedar
frosty dock
#

eh, sure

weary jungle
#

how do i spawn a random tag?

#

is there a list of all tags?

glass scaffold
runic pecan
glass scaffold
weary jungle
glass scaffold
#

@runic pecan good shit

violet void
sick sparrow
runic pecan
storm kraken
#

am i supposed to struggle this hard just to make a blind 😭

glass scaffold
frosty dock
#

better calc doesn't affect blinds

merry raven
#

What does context.main_scoring do again

frosty dock
#

main scoring phase for playing cards

merry raven
#

So is it only accounting for scored cards or does it also account for played but unscored cards

wintry solar
#

played but unscored cards don't get sent to any contexts

merry raven
#

I see

fallen tendon
storm kraken
#
SMODS.Blind{
key = "dies",
loc_txt = {
        name = 'The Die',
        text = {'hi'},
          },
dollars = 0,
mult = 3.5,
atlas = 'die',
pos = { x = 0, y = 0 }
}
crisp coral
#

have uyou uh

#

have you made the atlas

frosty dock
#

blinds need a boss_colour

crisp coral
#

oh that's the color var

#

whoops

frosty dock
#

idkwhy tf it's optional

#

because non-bosses?

crisp coral
#

technically yeah

storm kraken
fallen tendon
#

You can make one using HEX(“FFFFFF”)

#

Just replace the Fs with your actual hex code

wintry solar
#

non-bosses would use a colour anyway

weary jungle
#

how do i make my consumable last longer after using it

maiden phoenix
#

Do you mean make a multiple use consumable?

fallen tendon
#

Is it possible to make a sideways cardarea?

fallen tendon
weary jungle
#

like the consumable disolves before i can do things

wicked leaf
weary jungle
glass scaffold
wicked leaf
#

got it

weary jungle
#

i want it to juice up 4 times, but when i use the consumable, it dissolves, not showing the juice ups

#

i want it to function like a planet card, where it stays on screen for a bit, then dissolves

glass scaffold
hidden timber
#

is it the same as m6x11?

glass scaffold
#

Mostly

hidden timber
#

@glass scaffold this was very useful thanks

glass scaffold
#

welcome

weary jungle
vagrant cedar
#

Anyone want my new Joker?

frosty dock
#

we're no strangers to love

violet void
#

loses X1 if you let go

frosty dock
#

let go..?

native shell
#

Discard?

potent swan
#

If you get Xmult from any other source, cancels the Xmult effect.
"You wouldn't get this from any other guy"

candid epoch
#

guys, whats the C: with yellow text?

violet void
#

yellow

sick sparrow
candid epoch
#

nothing else?
alrighty

violet void
#

not for format I think

rocky heron
#

rickroll joker: disables all tarots/jokers that make a stat go up from appearing, all stats cant decrease (aka the point you buy this joker, all stats become base stats), joker cant be rearranged, joker cant be sold

violet void
#

only G.C.

frosty dock
candid epoch
#

basicly the one that balatro uses for "selected"

violet void
weary jungle
rocky heron
#

no need to flinch

candid epoch
#

C:yellow dont work, bwomp

frosty dock
#

C:money

weary jungle
#

C:attention

#

?

frosty dock
#

that's not yellow

#

?

candid epoch
#

lemme check

#

both look the same to me

weary jungle
candid epoch
#

i will use C:attention cuz its not money

weary jungle
candid epoch
#

thanks TGTM

weary jungle
#

you are welcome

violet void
#

you generally use attention for other things

candid epoch
#

whats wrong with that?

violet void
#

probably only color the 3

crisp coral
#

preferrably only color the +12 and the 3

violet void
#

and that too yes

weary jungle
#
            stop_use()
            local amt = card.ability.extra.tagAmt

            if TGTMConsumables.config.CursedRunes then
                G.GAME.TGTMCurseChance = G.GAME.TGTMCurseChance + ((G.RuneCurse)/100)
                amt = amt * 2
            end
            
            for i = 1, amt do
                G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                    local tag = Tag(get_next_tag_key("raidho"))
                    if tag.name == "Orbital Tag" then
                        local _poker_hands = {}
                        for k, v in pairs(G.GAME.hands) do
                            if v.visible then
                                _poker_hands[#_poker_hands + 1] = k
                            end
                        end
                        tag.ability.orbital_hand = pseudorandom_element(_poker_hands, pseudoseed("raidhoOrbital"))
                    end
                    if tag.name == "Boss Tag" then
                        i = i - 1 
                    else
                        add_tag(tag)
                    end
                return true end }))          
                card:juice_up(0.8,0.8)          
                delay(0.5)
            end

        return true end }))``` is this wrong?
#

the consumable dissolves before i can see the juice ups

candid epoch
#

alrighty

#

also what is order?

weary jungle
#

what?

weary jungle
candid epoch
#

copied from template

weary jungle
#

idk

violet void
#

I think the order in the collection

candid epoch
#

fair enough

weary jungle
#

all of my consumables are like order 16 and they are in the same spots in the collection?

candid epoch
#

i guess its then in order of your code if they the same

weary jungle
#

its not even on the wiki

#

what is order????

candid epoch
#

i dunno, i coppied it from YOU 😭

violet void
#

yeah its the order in the collection I checked

weary jungle
#

Ok we did it

violet void
#

although smods makes sure to group jokers by mod so you cant move it too much

reef wave
#

what would I use to log events that are happening?

violet void
frosty dock
#

steamodded figures out the order itself based on mod load order

weary jungle
#

I remember it was on the wiki on some day

frosty dock
#

might be in SMODS.Center

#

point stands you don't need to use it

#

there is already a well-defined order and steamodded will enforce it

topaz sun
#

is there some context or function that I can use to calculate stuff after calc_dollar_bonus, right after the yellow "cashout" button is pressed?

storm kraken
#

do NOT do this ever

candid epoch
#

true == false

#

also when a blind is selected and a tag of pack is made, will it trigger in the blind or after?

wicked leaf
#

trying to make a joker that considers all cards a specific suit, but cant quite find any examples

candid epoch
#

because there arent examples
the only thing i can think of is smeared joker

wicked leaf
#

maximized (cryptid) would be a good example if I could find the code

violet void
#

before everything else add

if #SMODS.find_card('j_prefix_name') > 0 then if suit == "your_suit" then return true end

#

probably

candid epoch
#

what was a way to get this on text?

wicked leaf
#

hm

violet void
#

altho I'll be honest, idk what flush_calc is

wicked leaf
#

this doesnt make much sense to me tbh

violet void
#

what doesn't specifically

wicked leaf
#

like this looks like this is checking if a card is of a specific suit rather than making all suits considered a single one

crisp coral
violet void
wicked leaf
#

yeah but this joker isnt REACTING to the suits, its changing the suits themselves

violet void
#

visually as well?

wicked leaf
#

similar to smeared joker, but for any card

wicked leaf
candid epoch
violet void
wicked leaf
#

not exactly, im making all cards into a "Dragon" suit I already registered

#

as long as you hold that joker, all cards are considered "dragon" cards

violet void
#

whats the difference between dragon cards and wild cards

wicked leaf
#

dragon is just an extra suit that will work with some of my cards

#

similar to fleurons in bunco

violet void
#

what does your joker do exactly

candid epoch
#

alrighty, got em all!
now i need to work to make em functional...

wicked leaf
#

this is the one im tryna code

candid epoch
#

i love how i can collapse lines of code like these lol

violet void
#

unless you have a specific joker that reacts to Dragon suits

wicked leaf
wet sand
candid epoch
#

unless they make boss blind that debuffs dragoon

wet sand
#

well yea but like. a diamond with this joker wouldnt be debuffed by Goad (spade cards) but a wild card would

candid epoch
#

oke, now i need voucher, pack and deck template

wicked leaf
# wicked leaf

What I DO know is that I have to apply the effect when its picked up, and remove it when its sold/destroyed

violet void
#

still in is_suit

#

so if you call like

card:is_suit('Dragons') anywhere, and you have that joker, it always return true

wicked leaf
#

I see, I see

#

makes more sense now

violet void
#

you probably need to put it in both flush_calc and the other one, not sure about that though

wicked leaf
#

this is like the third card I make ever and my inexperience isnt helping me at all lol

#

fourth actually

violet void
#

I assume you checked smeared's code

wicked leaf
#

I havent found it yet

jagged sun
#

i feel like i'm really stupid here but what field contains the currently-played hand? like is it within context or

wicked leaf
#

I'd suppose it'd be around card.lua, but I'm only finding references to it

jagged sun
#

like i want to get specifically the hand, not the cards within them

violet void
candid epoch
#

vouchers! yippie

nocturne garnet
jagged sun
wicked leaf
weary jungle
jagged sun
candid epoch
#

why it not work?

wicked leaf
candid epoch
wicked leaf
candid epoch
violet void
weary jungle
#

right now the consumable on use:

2. add the first tag
3. dissolves !!!!
4. tries to juice up
5. adds the rest of the tags and tries to juice up```
candid epoch
#

but after adding it, it crashes game

weary jungle
#

what is the crash?

violet void
candid epoch
#

facepalm
goddamit

weary jungle
candid epoch
wicked leaf
candid epoch
#

oh wait, i realized one bracket missing

wicked leaf
#

ah.

candid epoch
wicked leaf
#

its in the example to not put it OUTSIDE I believe

#

name outside of loc_txt is only for internal purposes

candid epoch
#

almost...

#

the text dont appeared for some reason

violet void
#

name and text dont go inside description