#💻・modding-dev

1 messages · Page 412 of 1

red flower
#

yes

#

strange that should have worked

#

oh well if it works now

wintry solar
#

Is it being done on a new run?

#

It’s probably an instance of the joker with a different config

molten musk
#

when i hover over the pack in game it crashes, what did i do wrong?

red flower
#

what does the crash say
also do you have a TheSeals objecttype?

#

and G.C.JOY.NORMAL and stuff are colors from my mod lol

molten musk
#

so i delete everything unrealted

#

and that is your mod??

red flower
#

yes

red flower
molten musk
#

now that i look at the names, yeah its u haha

red flower
#

you can delete the ease_background_color function for now

molten musk
#

and what do u mean by objecttype?
thought kind is just name?

#

or is it for set?

#

btw is my localization for boosters correct?

red flower
#

i think it is

red flower
molten musk
red flower
#

for the set of create_card

molten musk
#

oh ok

#

so i need to make objecttype?

red flower
#

well it depends on what you want the booster to give

molten musk
#

i want it to give specific spectral cards

red flower
#

then yes

molten musk
#

this is from your mod

#

i change key and default?

red flower
#

oh uhh i wouldn't copy the objecttypes from my mod i do weird things there

#

and i dont use them :3

molten musk
#

no im just looking at it as an example

#

didnt copy anything ....yet

red flower
#

yeah you can put all the spectral keys directly in cards

molten musk
#

like this?
and now i add spectral keys?

molten musk
#

as is?

#

wish to help, but struggling as is

red flower
#

do the same thing you did in context.repetition but in context.individual

molten musk
#

do u by any chance know the keys for normal seal spectrals, "red,blue,gold,purple" their spectrals key

red flower
#

yes
and well, the return for xmult

molten musk
#

found them

#

but still crashing when i hover over booster pack

manic rune
#

change SMODS.individual to context.other_card

#

wait

#

nvm

#

nvm

#

wrong

#

remove .individual from SMODS.individual

red flower
#

lmao

molten musk
manic rune
#

i have no defense here so

#

:3

#

fuck

#

i am too, that makes us both

viral ember
#

hehehehe

red flower
molten musk
#

make it 3 braindead people

manic rune
#

thats a can of , not dr pepper

viral ember
#

yea yea

molten musk
#

that somehow worked

#

now i repeat 3 more times for 3 more boosters
shouldnt cause issues

coral flume
#

Trying to permanently upgrade cards held in hand and it doesnt seem to be working

viral ember
maiden phoenix
coral flume
#

cheers

molten musk
#

why does seals give 0/3
shouldnt it be 3/3?

viral ember
#

I have the same problem lol

molten musk
#

lol

#

is it fixable tho?

viral ember
#

not sure tbh

molten musk
#

well

#

have more important stuff to code tbh

#

fix it later

maiden phoenix
viral ember
#

which parts

#

show code?

maiden phoenix
#

You have two calculate function, so it triggers the last one

#

Put both context check into one calculate function

#

You have to remove those two things

#

Do you have a lua extension on vscode btw? i'm surprised it wasn't highlighted

viral ember
#

search lua

maiden phoenix
#

In VSCode, you have those 4 square symbol to get extension, you can type "lua" and get Sumneko's lua extension

coral flume
viral ember
#

you could have it return both xmult and repititions but sure

manic rune
#

can you

maiden phoenix
#

I think, not sure if there's one too many end or sum

maiden phoenix
#

Does checking for faces in context.after not work?

coral flume
#

probably does work, just didnt know it would

coral flume
manic rune
#

it doesnt, its just a bad practice to have bad indentation

coral flume
#

sorry I spose

coral flume
red flower
#

no

coral flume
#

okay wait, whats indentation

red flower
#

the tabs

#

but please use an auto formatter

manic rune
#

it not only helps you but other people as well when troubleshooting your code :3

#

-# also, remove card = self

#

you probably want to do, if my guess on your joker's functionality is right

return{
  message = localize('k_upgrade_ex'),
  colour = G.C.CHIPS,
  message_card = context.other_card
}
coral flume
#

Sorry, reall caught up on the indentation thing. what should I be doing instead of what I am currently

#

Like I often need help so if it helps make it easier to look at and read I wanna do the best I can

manic rune
#

well uh, a lot of things need to be fixed in your code

#

-# i dont even know where to begin actually

#

can you tell me what you want to do and i will write you an example of that rq

#

might be faster to do so instead

coral flume
#

When a face card is scored, cards below rank 7 held in hand permanently gain +1 chip.

manic rune
#

i see i see

#

give me a moment

maiden phoenix
#

shift+alt+f allows you to format your file

coral flume
#

Awesome I didnt know that

manic rune
#
calculate = function(self, card, context)
  if context.individual and context.cardarea == G.play then
    if context.other_card:is_face() then
      for _,v in ipairs(G.hand.cards) do
        if v:get_id() < 7 then
          SMODS.calculate_effect({message = localize("k_upgrade_ex"), colour = G.C.CHIPS}, v)
          v.ability.perma_bonus = (v.ability.perma_bonus or 0) + 1
        end
      end
    end
  end
#

maybe smt like that?

#

you overcomplicated it too much sob

maiden phoenix
manic rune
#

fair

coral flume
#

Sob as as in upset sounds or are you calling be an SoB

manic rune
#

its 😭 but i removed the :

#

-# whats a SoB

coral flume
#

Son of a

maiden phoenix
#

Son of a Bi I assume

manic rune
#

oh shit

#

ok i will stop saying sob then

#

😭

maiden phoenix
#

Smh bepis so rude

manic rune
#

IM SORRY

coral flume
#

I'll try to code ina sec just making coffee

#

The*

manic rune
#

yeah i understand, my advice for coding jokers is to dissect your effect into multiple parts so that you know what to do, like:

"When a face card is scored" -> needs context.individual and context.cardarea == G.play
"cards below rank 7 held in hand permanently gain +1 chip":
cards in hand -> you want to use G.hand.cards
below rank 7 -> use :get_id() < 7
permanently gain +1 chip -> perma_bonus stuff

#

i think its just muscle memory to remember what context you need for what effect though, so it will take time for you to get used to this

coral flume
manic rune
#

or

#

is this waffle's wip mod

#

i remember them saying they will work on smt like that a few weeks ago

daring fern
manic rune
#

holy shit

#

super impressive, wow

#

but for 200 bloodstones aint that too little X1.5 triggers 🤔

#

i would assume you didnt code in the calculate yet, but some cards give 2 X1.5 Mult, so

daring fern
zealous glen
#

Timing triggers are context checks

#

the rest isn't

daring fern
zealous glen
#

also e.g. if your effect has a beginning and an end, even if not explicitly stated, it might need two context checks

manic rune
#

🤔

daring fern
#

Chances seem to be broken sometimes for some reason.

#

How does one remove a joker without calling its remove_from_deck function?

normal crest
daring fern
#

Also, how does one check if 2 playing cards are the same?

normal crest
#

By being the same do you mean same rank, enhancements, seals, suit, and other stuff

normal crest
#

I don't think there's a vanilla function for that, you'd have to make your own

#

Maybe you can compare the centers, the base and other stuff like that

sturdy compass
#

Bump

#

(Good morning modding dev)

viral ember
#

I love juicing my cards 🤤

sturdy compass
#

Most original joke

viral ember
#

lol

snow vale
#

what do i put on SMODS.Consumeables to know that i sold that consumeable

daring fern
manic rune
#

this? (im assuming you are talking about SMODS.Consumable)

snow vale
#

with the {}

red flower
snow vale
#

i want it to create a joker card

#

when sold

#

an specific one

red flower
#

but what's making the joker

snow vale
#

wdym

daring fern
# snow vale wdym
if context.selling_self then
    SMODS.add_card({key = "j_modprefix_key"})
end
```?
red flower
#

something triggers when a consumable is sold to create a joker
what's that something?

#

if it's the consumable itself then use something's code

snow vale
#

wdym??

#

itself

red flower
#

ok then yeah

pale holly
#

Okay so i tried to make the use of pseudorandom in order to establish a 1/3 chance that my joker would trigger two additional times like a blue print, i think the problems comes from the code for the luck itself because it definitely shouldn't always trigger, i may have got the rest to work now but this part bugs me, i never used pseudorandom before, just math.random

    
local stupidblue = function(card, other_joker, context)
    if pseudorandom('cymbal_dprinter') < G.GAME.probabilities.normal / card.ability.extra.odds then
        local blue1 = SMODS.blueprint_effect(card, other_joker, context)
        local blue2 = SMODS.blueprint_effect(card, other_joker, context)

        return SMODS.merge_effects({blue1}, {blue2})
    end
    -- returns nil if condition fails
end```

I should also precise i also used the function SMODS.merge_effects that did in the end worked out for me to do both effects but i'm pretty sure i shouldn't be that 'lucky'
red flower
#

it always triggers?
where are you using the return from that function

normal crest
#

I don't think that's how you call merge_effects

pale holly
#

i'll just share the code of my joker to make it easier

normal crest
#

But that's a diff problem

snow vale
#

what key name has gros michel

red flower
normal crest
#

Why would it be 2 lists of 1 table each

#

🤔

red flower
#

i mean the nicer way would be {blue1, blue2} but it takes any number of arrays

normal crest
#

j_gros_michel

pale holly
#
    key = "dprinter",
        loc_txt= {
        name = 'Dream Printer',
        text = { "Copy the abbilities of the joker on the {C:attention}right",
        "{C:green}#1# in 3 Chances{} to trigger it 2 more times",
        "{C:inactive} (How can this exist ?)"
    },},
    atlas = 'dprinter',
    pos = { x = 0, y = 0 },
    rarity = 3,
    cost = 15,
    pools = {["pseudoregamod"] = true},
    
        unlocked = true,
    discovered = false,
    blueprint_compat = true,
    eternal_compat = true,
    perishable_compat = true,
    
    
    config = { extra = { odds = 1}},
    
    --return { vars = { center.ability.extra.mainodds, center.ability.extra.totalodds}  }
    
    
--create  the 'other_joker' vallue as well of adding the 1/3 chance, normally
    loc_vars = function(self, info_queue, card)
        if card.area and card.area == G.jokers then
            local other_joker
            for i = 1, #G.jokers.cards do
                if G.jokers.cards[i] == card and G.jokers.cards[i + 1] then
                    other_joker = G.jokers.cards[i + 1]
                end
            end
        end
            return { vars = { (G.GAME and G.GAME.probabilities.normal or 1), card.ability.extra.odds } }
    end,
--gotta re-add the function of before

    calculate = function(self, card, context)
        local other_joker
        for i = 1, #G.jokers.cards do
            if G.jokers.cards[i] == card and G.jokers.cards[i + 1] then
                other_joker = G.jokers.cards[i + 1]
            end
        end
        
    if other_joker then
        local defaultblue = SMODS.blueprint_effect(card, other_joker, context)
        local stupidblue_effect = stupidblue(card, other_joker, context)
        return SMODS.merge_effects({defaultblue}, {stupidblue_effect})
    end
end
}```

the code on itself work as it does a unique blueprint effect and then does the extra
ones i set but, it seems to do it no matter what
red flower
#

oh ok

#

odds = 1

#

so it's 1 in 1

pale holly
#

oh

#

i was thinking it was this variable you had to set

#

since 'oops all 6's' will change the value of the 1 in X chances i was thinking i had to set the odds for that one

#

i guess this make sense now, feel kinda dumb

#

But thanks a lot

red flower
#

or backwards

#

depending on how you interpret my stupid message

pale holly
#

Oh i see, wait so how i then set up the the text to dynamically change if the odds are increased with oops all 6s ?

sturdy compass
#

Bumperoony

red flower
pale holly
#

so no need to change my code outside of the odd then right ?

red flower
#

yeah it should work fine

normal crest
#

Idk why you have the other joker stuff in loc vars

pale holly
red flower
#

i would recommend keeping an eye out for when the function is merged so you dont override it lol

#

or change the name

normal crest
#

or maybe just copy how an UIBox_button is defined

pale holly
snow vale
#

how can i know if a gros michel (or a cavendish) got destroyed?

normal crest
#

So if it's already defined it won't override

pale holly
glass crown
#

whats the best way to set the enhancement of a card? for context, im making a joker that has a 1 in 5 chance when a card is scored to change the enhancement to a new enhancement i made

normal crest
#

idk what you have done tbh

pale holly
red flower
#

why are enhancements m
is that a cryptid reference

red flower
#

so you can do what srockw said or make it a local

#

it's not really a good idea to add things to the SMODS namespace

zealous glen
viral ember
#

is there a reason it stops jiggling when I play a hand?

unborn bay
#

set_ability is funny

normal crest
pale holly
red flower
#

yeah

normal crest
#

Without the SMODS.merge_effects part

red flower
#

but like this local mergeeffect = function(...)

normal crest
#

Or local function merge_effects(...)

#

either one works

pale holly
#

i think i got it, i'll try to do right away, i'm already thankfully my code works as it is

#

thanks again

daring fern
normal crest
#

I am cheering for you

glass crown
red flower
#

instead of card use the variable where the playing card is stored

#

like context.other_card but it depends on where youre using it

glass crown
#

(sorry for my terrible ineptitude at programming, but)
what would be the variable where the playing card is stored for this situation? (ignore how there's nothing before set_ability i just emptied it out for the sake of the screenshot)

red flower
#

context.other_card

normal crest
#

this code is on the higher end of quality in this channel

glass crown
#

its because im heavily referencing the code from VanillaRemade ackackack

red flower
#

:3

normal crest
#

that just means you're smart

#

And N is very happy now

manic rune
#

most people have their hands on VanillaRemade too and fail to comprehend anything in there

#

so yeah, id say you are smart too :3

glass crown
#

well thank you :3

viral ember
#

me spending 12+ hours nonstop adding random bullsh*t to Balatro

glass crown
#

i do feel a little dumb right now though because context.other_card:set_ability("m_votd_celestial") just causes a game crash so im clearly misunderstanding something or doing something wrong

normal crest
#

is votd your mod prefix

glass crown
#

yes

red flower
#

oh yeah you don't want to use context in an event, you want to save the card locally first

#

<@&1133519078540185692>

#

ty mods

normal crest
#

thank you moderators of this community

red flower
#

i was talking about balatro mods btw to not cause a misundertanding

sturdy compass
normal crest
#

me neither

#

just from what I vaguely remember reading from the smods wiki on ui

glass crown
#

gotta say it was really funny the first time i messed up the application of the enahncement and i just watched my joker turn into a celestial card lmao

pale holly
# red flower but like this `local mergeeffect = function(...)`

for some reason using local would crash saying merge_effect is a nil value, yet without the 'local' and just using function merge_effect(...), it does work, the function is also set at the bottom of my code, and i know that when i set stupidblue as a local, putting it before my joker code did made it work, is it just fine to keepfunction merge_effect(...), or local is must need ?

red flower
#

if you have it as a global it might also cause conflicts with another mod, the name is too generic

#

i would just put it at the top

pale holly
#

so just local function merge_effect and then put at top ?

red flower
#

yeah

pale holly
#

Sure thing then 👍 (could have come up with an originaly long name but yeah taking le easier path)

red flower
#

most of the time you can just use modprefix_name for most stuff

#

or make your own global table

sturdy compass
pale holly
#

I should probably think of that, the use of my mod prefix could prevent conflicts for global effect sets (if the prefix is long enough and original or anything else)

sturdy compass
#

Oh nvm it’s G.UIT.O

#

Still doesn’t change the fact idk how to make it do what I want it to do Emoti_Shrug

normal crest
#

Alongside G.UIT.O

#

is what I was thinking of

hidden onyx
#

yall please help me...(sry if this is unrelated)

normal crest
#

I'm not sure tho

limber aspen
#

What can be reason of this error?
-# Oops! The game crashed: functions/misc_functions.lua:1695: bad argument #1 to 'ipairs' (table expected, got string)
When I remove consumable code it doesn't appear (atlas and set are defined)
-# SMODS.Consumable{
-# key = 'c_gamba',
-# set = 'FunCards',
-# atlas = 'c_gamba',
-# pos = {x = 0, y = 0},
-# loc_txt = {
-# name = 'Gamba',
-# text = '{C:green}#1# in 2{}
-# chance to gain {C:money}#2#${}'},
-# config = {extra = {money = 10}},
-# unlocked = true,
-# discovered = true,
-# cost = 4,
-# loc_vars == function(self, -# info_queue, center)
-# return {vars = {G.GAME.probabilities.normal, center.ability.extra.money}}
-# end,
-# can_use = function(self, card)
-# return true
-# end,
-# use = function(self, card, area, copier)
-# if pseudorandom('c_gamba') < G.GAME.probabilities.normal/2 then
-# ease_dollars(10, true)
-# end
-# end
-# }
(Tabulation got removed by discord I don't know how to keep it sorry)

hardy viper
#

loc_txt.text needs to be a table of strings

stoic fulcrum
#

is there a way to modify the values given from editions? (foil, holo, poly)

daring fern
stoic fulcrum
#

yeah my bad

viral ember
#

is it possible to have the return "message" appear before the method finishes?

jagged forum
#

does anyone know how to help me with modding balatro in here having some trouble currently

viral ember
#

cause right now I have a message that appears 8 seconds after it was supposed to appear

limber aspen
red flower
viral ember
#

sad

hidden onyx
normal crest
viral ember
#

would make things a bit easier tho

red flower
#

the problem is that messages are always events

#

so they always get queued until animation timing

#

but i would need to see the code to tell you if thats the problem exactly

sturdy compass
normal crest
red flower
viral ember
#
calculate = function(self, card, context)
    local food_card = nil
    for i = 1, #G.jokers.cards do
        if G.jokers.cards[i] == card then
            food_card = G.jokers.cards[i + 1]
            break
        end
    end

    if food_card then
        local eval = function()
            return G.GAME.current_round.discards_used == 0 and not G.RESET_JIGGLES
        end
        juice_card_until(food_card, eval, true)
    end

    if context.setting_blind and (#G.jokers.cards + G.GAME.joker_buffer) < G.jokers.config.card_limit then
        card.ability.extra.food = card.ability.extra.food - 1
        play_sound('mvan_hunger', 1, 0.55)

        return {
            message = "Starving!",
            colour = G.C.RED,
        }
    end

    if context.after and food_card then
        play_sound('mvan_chomp', 1, 0.55)
        food_card:start_dissolve({ G.C.RED }, nil, 1.6)
        card.ability.extra.food = card.ability.extra.food + 1

        if card.ability.extra.food > 3 then
            G.STATE = G.STATES.GAME_OVER
            G.STATE_COMPLETE = false
            return {
                message = "Overfed!",
                colour = G.C.RED,
            }
        end

        return {
            message = "Devoured!",
        }
    end

    if card.ability.extra.food < 1 then
        local eval = function()
            return G.GAME.current_round.discards_used == 0 and not G.RESET_JIGGLES
        end
        juice_card_until(card, eval, true)

        if card.ability.extra.food < 0 then
            play_sound('mvan_ah', 1, 0.55)
            G.STATE = G.STATES.GAME_OVER
            G.STATE_COMPLETE = false
            return {
                message = "Starved!",
                colour = G.C.RED,
            }
        end
    end
end
normal crest
#

I'd love to help you but I'm not at my pc right now

sturdy compass
#

I’m aware of that at least. I just can never piece together how it all is supposed to make sense

red flower
viral ember
#

return {
message = "Devoured!",
}

sturdy compass
normal crest
#

I think to add an UI element to the screen you just call

local element = UIBox {
   definition = { ui stuff here }
}
red flower
# viral ember return { message = "Devoured!", }

try

if context.after and food_card then
    G.E_MANAGER:add_event(Event({
        func = (function()
            play_sound('mvan_chomp', 1, 0.55)
            food_card:start_dissolve({ G.C.RED }, nil, 1.6)
            card.ability.extra.food = card.ability.extra.food + 1
            return true
        end)
    }))
    if card.ability.extra.food > 3 then
        G.STATE = G.STATES.GAME_OVER
        G.STATE_COMPLETE = false
        return {
            message = "Overfed!",
            colour = G.C.RED,
        }
    end

    return {
        message = "Devoured!",
    }
end
viral ember
#

ok!

normal crest
#

Unless it's meant to be there forever

viral ember
#

It worked!

red flower
#

❤️

viral ember
#

now me and the creature can live out our days of devouring random jokers

#

I should make it blueprint compatible

hallow forge
#

what is too much?

viral ember
hallow forge
#

no i won't

viral ember
#

wanna bet?

#

It's over 3 yea

#

🤯

#

wanted to make it random but that seems cruel

#

too cruel

hallow forge
#

3!!! = 6!! = 2 * 4 * 6 = 48

viral ember
#

I'll make a pure RNG one later

red flower
viral ember
#

it was me actually

normal crest
#

6! is 720

#

So 720! would be a very big number

sturdy compass
#

Really quick lemme try to lay out what I’m trying to do with my inquiry:

Basically I’m rendering a new Love2D Sprite object on the Main Menu in basically the exact same way as the Balatro logo (as seen in this video). I want it to open my mod’s config menu when clicked. I found the function that does that, I just need to make it clickable

hallow forge
manic rune
hybrid shadow
#

btw i forgot to ask but

  1. what does return ret do here
  2. where would i put the math/message to upgrade my joker in here
manic rune
#

wait

#

it should be ret["xmult"] or ret.xmult

red flower
glass crown
#

okay so, asking a question that i know is probably complex, but how would i go about adding a new tab to the collections menu for a new consumable group?
also, expect to see me around here more often as i delve into trying to make my own complex consumable type lol

hybrid shadow
manic rune
#

SMODS.ConsumableType?

red flower
glass crown
#

,, im realizing now that i completely forgot to load the new lua file lmao

#

good that i discovered that now instead of later

sturdy compass
#

Looks very promising tho

red flower
#

thats what i do for jokerdisplay

#

and sprites seem to be movables too

manic rune
#

ret is basically running the function again, and contains everything the function should return, so you want to return ret again in cases when other pieces of code needs whatever is in ret, like:

function somethingHere()
  return "idk"
end

print(somethingHere())

local smtRef = somethingHere
function somethingHere()
  local ret = smtRef()
  print("wawa")
  --you didnt return ret here, so "idk" is completely gone now
end

local smtRef = somethingHere
function somethingHere()
  local ret = smtRef()
  print("wawa")
  return ret --"idk" is still properly returned, which is the correct hook
end

if you were to hook to somethingHere() without returning, then print(somethingHere()) wont have anything to print

as for your second question, in the if statement

daring fern
jagged forum
#

I’m wanting to try and run cryptid but I keep getting this

normal crest
#

I didn't know about it until now

daring fern
manic rune
jagged forum
#

ive put into the chat

daring fern
jagged forum
manic rune
jagged forum
#

i did

normal crest
# daring fern

What happens if you print card.area on one of those split cards

daring fern
normal crest
#

Damn, no idea then

viral ember
#

"Would you rather have-"

onyx sonnet
#

If you get the bacon balatro gets blacklisted from the steam store

#

no more games

viral ember
#

if you choose unlimited bacon but no more games it crashes

#

IT STARTS GIVING YOU INFINITE BACON JOKER CARDS AND CRASHES 💀

viral ember
#

I was thinking about like the minecraft error texture being an error joker

#

but it seems someone beat me to the punch

keen totem
#

would it be possible to get the amount of seconds since you played your hand?

viral ember
#

you could have a var that goes up every tick

keen totem
#

yea

#

and set it to zero when the hand is played

#

on that note

#

how do i get when you play the hand

normal crest
#

just in general? You can hook into calculate_context and listen for the usual contexts or maybe when the button is pressed

daring fern
keen totem
red flower
#

speaking of press_play, i need to do blinds for vanillaremade

daring fern
keen totem
#

how often do update functions run?

red flower
#

every frame

keen totem
#

is dt the time since the last frame?

red flower
#

yes

keen totem
#

so would doing card.ability.extra.seconds = card.ability.extra.seconds + dt in an update function make seconds be going up like actual time?

red flower
#

probably

keen totem
#

i think its affected by gamespeed

red flower
#

there's also G.TIMERS

manic rune
#

if it is then you can hook to love.update instead

keen totem
red flower
manic rune
#

id suggest trying Game.update first though

red flower
#

or G.real_dt

keen totem
#

i dont care about gamespeed affecting it

#

because thats way funnier

manic rune
#

its G.real_dt yeah

keen totem
red flower
#

i think so

viral ember
#

is there a way to have a custom crash screen?

daring fern
viral ember
#

so it would say goofy text instead of "something something nil value something something"

keen totem
#

wait actually

viral ember
#

wait really

keen totem
#

for it to be fair across gamespeeds

#

shouldnt it be affected by gamespeed?

#

4x does the actual scoring 4x faster, so the seconds should be 4x as much (to make it fair)

manic rune
#

if its connected to a negative effect and you want your players to absolutely suffer, why not

manic rune
#

i see

keen totem
#

its a joker that gains more XMult the longer it takes before it gets triggered

manic rune
#

whipping out nopeus then

keen totem
#

is there a way to stop XMult from being calculated until right before it actually adds it

#

currently its just giving XMult equal to the frame after you click play hand

wintry solar
#

Hello active mod developers (looking at N, something and bepis mainly here), do you think if I do some smods merges tonight we can get them tested before Friday/Saturday for a new release? I’d like to get rid of that deck view crash but feel a new release for just that is a bit of a waste of time

keen totem
#

its not a ❓ just because its not possible

#

its a reasonable thing to ask given its what my joker needs in order to work

red flower
viral ember
#

this is so peak

turbid maple
#

you mean you want to count the frames it takes until the joker's effects are actually displayed?

keen totem
#

but it acts as if its the frame after you click play hand

#

because joker_main calculates the effects values right then but doesnt display them until later

#

but i want it to use the time as if it was just then

wintry solar
keen totem
#

damn

manic rune
zealous glen
keen totem
#

something

#

on your soul you didnt just thinking that

red flower
#

do u like my blind names

manic rune
#

house

#

like

#

dr house?

red flower
#

yes

#

thats the reference

zealous glen
#

house

#

stuck

manic rune
#

1/6 to give player lupus

zealous glen
viral ember
#

That's what I call, a full house

#

I'm so tired I've been up for 20 hours

sturdy compass
viral ember
#

why can't we send gifs?

manic rune
#

stricter moderation

red flower
#

thunk doesnt like em

hardy viper
#

it's called evil oppression

#

evil i say ...

red flower
#

1984

viral ember
#

damn

#

I have a really good gif for this

normal crest
#

because they personally hate all of us :(

red flower
#

is it the long house gif where they parody an episode

keen totem
#

whats the context for after all cards fully score

#

and after the animations play too

#

something

#

i want to make it so the joker i am making

#

doesnt do something until after the hand visually ends

red flower
#

you would have to do an event in context.after probably

#

or context.hand_drawn

normal crest
#

hand_drawn apparently happens whenever you discard and draw new cards too

red flower
#

makes sense

sullen falcon
#

Why doesn’t tab work to open debug menu in brainstorm mode?

#

*mod

red flower
#

amazing

manic rune
#

small blind

red flower
#

how do non-boss blinds work with smods? do they just not show up?

oblique pond
#

no clue, only example I can think of is ortalab’s small blinds, that may help

red flower
#

yeah I will check if that does anything custom

#

i just don't want to implement small/big blind in vanilla remade if it's going to confuse people

#

ok yeah

viral ember
#

How do I add_card a custom Tarot?

#

I'm horribly confused by how this works

red flower
#

SMODS.add_card{key = "c_modprefix_key"}

viral ember
#

oh

#

jeez

#

thanks

#

ok now it doesn't randomly spawn 60 planet cards lol

#

(I say randomly even though I know why it happened)

glass crown
#

okay, so probably complex question: how would i go about making the name and description of a card (in this case, specifically a consumable) change? my new consumable type is supposed to have the name and description effectively hidden until you beat a round with it in your posession

wintry solar
glass crown
wintry solar
#

Makes sense

north swallow
#

guys how would i make a function that sets the mouse position to 0,0

red flower
#

is it necessary to set blind.triggered

#

i assume its for matador

north swallow
red flower
#

or not, that doesnt let you pass instant

red flower
glass crown
#

okay im going to sound very silly for this potentially, but i cannot find an example of someone using it so:
how do you localize the name and description for a card (specifically in this case a consumable)
i have my localization file with the name and description in it but uh for everything else ive been using loc_text so far which i know probably isnt best practice and i should probably learn how to do it properly now

glass crown
# red flower return a `key` to the new description in loc_vars

alright it finally clicked for me how localization actually works, but im still struggling to understand this part
im sorry to ask for this, but could someone write up a very quick and plain example as to what changing the localization like this would be like? i work best with examples
if not, you can just try to explain it to me more thoroughly and that'll probably work as well

pure salmon
#

hey n is there any plans to add blinds and tags to vanillaremade? not pinging you so if you don't see this whatever but it would be helpful

red flower
#

tags no unless someone else like Astra wants to add them

hushed field
pure salmon
#

wow oops! can't believe i missed that

upper juniper
#

greetings, tis i, i want to know if i can drop my code here to know if i messed somehing up

upper juniper
hushed field
upper juniper
#

(ripping another mod as always)

hushed field
#

It's quite hard to run code mentally

willow plinth
#

yeah ur computer likely won't explode if you just try it out, no matter how broken your code is

upper juniper
#

its to know if im doing stuff right to make it malverk compatible

red flower
red flower
willow plinth
# upper juniper

your mod likely won't get recognized since your metadata is misformatted

upper juniper
#

ah

#

how do i fix that

#

bc of the - ?

willow plinth
snow vale
upper juniper
#

okye

glass crown
midnight coyote
willow plinth
hushed field
midnight coyote
#

then modify that loc var

#

using the config section of whatever you’re localizing

daring fern
# snow vale any fix?

You are trying to add a joker that has the key of a table also you can't store cards in other cards.

red flower
snow vale
wintry solar
# upper juniper

If you just want a Malverk mod to change the images of, just use the hd one and change the sprite sheets to start with

snow vale
#

do i discard the idea

upper juniper
#

eg, my own mod

wintry solar
#

Then just copy the Malverk part into your own mod

upper juniper
#

i remove the smods [] thing ?

daring fern
upper juniper
glass crown
red flower
#

condition and "c_modprefix_new_tarot2" or condition2 and "c_modprefix_new_tarot3" or nil would be the logic

#

im pretty sure

glass crown
#

got it

snow vale
#

does any1 have an example for a blind script?

#

i wanna see how it should look

#

apart from docs

daring fern
snow vale
snow vale
#

k ty

daring fern
snow vale
#

also it simply wont spawn the joker, there are no crashes

glass crown
#

is there a way to check if you're currently looking at a card from the collection? my consumable type hides what it is on the first round of having it, but i dont want them to not be able to see it in the collection

red flower
#

to do list uses card.area and card.area.config.type == 'title'

#

for the collection

daring fern
snow vale
daring fern
snow vale
#

oh

daring fern
north swallow
#

does anyone know how to ease love.mouse.setX so it doesnt just teleport ur mouse there?

snow vale
#

IT WORKS TYSM!

#

also how can i make so if on max jokers it wont let me sell the consumable?

daring fern
snow vale
#

on where?

#

i mean

#

how do i hook?

daring fern
broken cliff
#

does smods:has_mod use mod id?

daring fern
broken cliff
#

find_mod*

daring fern
broken cliff
#

alr thx

gilded blaze
#

lmao

#

I'm so used to using (SMODS.Mods["mod_id"] or {}).can_load

glass crown
#

how would i get the graphic on a card to change? not a different atlas, just a different position on the atlas

daring fern
glass crown
proud depot
#

where do i put the mod prefix when playing a sound?

daring fern
proud depot
#

ah i see

tall jewel
#

How would I draw the buttons drawn on the bottom of the screen when using a controller?

#

I want to draw them on an arbitrary point

proud depot
#

how would I load the files of my mod if they were split up from the main script?

proud depot
#

Tysm

zealous glen
red flower
#

blinds dont use a cardarea

steep pond
#

Hey! I am also interested in this and found a C++ rewrite branch of immolate on his github page. It looks like the DLL used in brainstorm is probably based on that branch though that branch is definitely missing some things. I would be down to look into this with others and try to figure it out

red flower
#

blind calculate runs even when disabled?? tragic

steep pond
glass crown
#

does anyone have a good example of what booster pack code should look like? like from a mod or something that i can reference

vale glen
#

Isn't a booster pack just a card object with an open function

normal crest
#

There is an SMODS.Booster wiki page

paper zealot
#

I went down a similar rabbit hole when i wanted to recompile it as a dylib for Mac users, then gave up when i realised the source just wasn't available

red flower
glass crown
#

what do all the arguments on create_card do?

red flower
#

for the booster create_card?

#

or for regular create_card/SMODS.create_card

glass crown
#

the regular create_card

red flower
#

use this one

glass crown
wise terrace
#

hi, I can't figure out how to set up lsp to recognizing smods stuff, I'm on vscode btw

keen totem
#

are there any base game cards that do anything when you play a hand?

wise terrace
glass crown
#

upon opening my new booster pack and it being about to spawn cards, this crash occurs, and i dont really know where to start with this exactly so i thought id ask for help

red flower
#

it means the key or set returned in create card is wrong

glass crown
#

okay, fixed the set i think, but now im getting this crash
i wish i was better at this whole programming thing instead of mostly thriving off examples

red flower
#

can i see the code

glass crown
#
    key = 'signal_normal_1',
    atlas = 'votdboosters',
    pos = {x = 0, y = 4},
    group_key = "k_votd_signal_pack",
    cost = 4,
    weight = 999,
    kind = 'votd_Signal',
    select_card = G.consumeables,
    create_card = function(self, card, i)
        return {
            SMODS.create_card {
                set = 'k_votd_Signal',
                area = G.pack_cards,
                no_edition = true
            }
        }
    end
}```
apologies if it sucks
#

and dont mind the weight, thats just for testing

red flower
#

the key is probably votd_Signal

#

but id like to see the definition for the consumabletype/objecttype

glass crown
#

it wasn't working before so i tried adding the k, which made the crash different

    key = 'votd_Signal',
    default = 'c_votd_rozital_wormhole',
    primary_colour = HEX("74EDE7"),
    secondary_colour = HEX("45EFEC"),
    collection_rows = { 7, 7 }
}```
heres the consumable type
red flower
#

yeah try just 'votd_Signal'

#

you can also just return { set = 'votd_Signal', area = G.pack_cards, no_edition = true }

glass crown
#

okay, didnt crash that time, but now i have some new problems:

  1. i thought the function of select_card = G.consumeables, would make it so i could just take it into my consumeables slot, but it doesnt seem to be the case. these cards cant be used immediately, and need to be taken into the consumable slot somehow
  2. there were strange green particles floating around the cards for some reason? i have no clue what thats about
  3. it created three cards and i want it to create one. how can i go about making it only create one card?
digital sun
#

how do you get a joker to add mult when you press a certain key
this function can tell which key you press so i just need this function to somehow tell the joker to gain mult but idk how id do that

red flower
red flower
gusty iron
#
use = function(self, card, area)
local jokersyuh = {}
 for k, v in pairs(G.jokers.cards) do
    if v.ability.eternal or v.ability.perishable or v.ability.rental then
       table.insert(jokersyuh, v)
    end
local randomjoker = pseudorandom_element(jokersyuh, pseudoseed('YUH'))
randomjoker.ability.eternal = nil
randomjoker.ability.perishable = nil
randomjoker.ability.rental = nil
G.GAME.dollars = 0
end
 end,

can someone help me with this? its saying randomjoker is nil

solid mesa
#

hi chat, its better using smods or vanilla functions to code mods? I'm just starting out, so I want to know if it's a good idea to prioritize one over the other.

red flower
#

always smods over vanilla if possible

solid mesa
red flower
red flower
gusty iron
solid mesa
#

thx

sleek cliff
#

how would I have a joker sense if a certain enhancement has been played

gusty iron
#

yeah i just realized that

red flower
pure salmon
humble elk
#

im working on my first mod and going through the example jokers given by smods. in the calculate function for the sock and buskin remake theres a comment saying youd have to iterate over the hand to see more than 1 card at a time. How would i do this? Where can i see the structure of the context object so i dont have to ask every time?
Example code:

if context.cardarea == G.play and context.repetition and not context.repetition_only then
    -- context.other_card is something that's used when either context.individual or context.repetition is true
    -- It is each card 1 by 1, but in other cases, you'd need to iterate over the scoring hand to check which cards are there.
    if context.other_card:is_face() then
        return {
            message = 'Again!',
            repetitions = card.ability.extra.repetitions,
            -- The card the repetitions are applying to is context.other_card
            card = context.other_card
        }
    end
end```
pure salmon
pure salmon
humble elk
#

thank you both this is very helpful

glass crown
pure salmon
# humble elk thank you both this is very helpful

np, also vanillaremade is basically all i use for code referencing nowadays. if you know the basegame really well you can instantly track down any vanilla joker effect (or vanilla anything) with a simple ctrl+f

red flower
keen totem
#

how would i change the player's dollars without returning in a calculate

sleek cliff
#

ok, so how do I disable the joker, and re-enable it after a boss blind

keen totem
red flower
#

yes

keen totem
#

should i do the message before or after the ease_dollars

daring fern
keen totem
#

ye i am

#

how would i get 3 random poker hands that arent the same as any other one of themselves

gusty iron
#

what if i made a joker that made you play congregation

sturdy compass
sturdy compass
#

For reference, G.SPLASH_MAXIMUS_LOGO is a pure Love2D Sprite object, just like the main Balatro SPLASH_LOGO

wild escarp
#

How could I make a challenge deck start off with a different random card each run?

lone hedge
#

does anyone know where the vanilla jokers' code is?

#

i want to make some jokers that interact with them so i figured i'd start there

red flower
sage crater
#

not sure what's wrong, but the game crashed after a blind going into the shop

modest depot
#

Hi there! I don't know very much about programming and even less about Lua, and my searching has not been successful, so I thought I would ask here:

Does anyone know of a way to change the name of the suits in text? I'm making an Inscryption deck theme and I think it would be fun if, for example, The Sun said "Blood" instead of "Hearts" for the suit. Thanks!

keen totem
#

like make a new translation of english

#

thats just with that instead

urban wasp
keen totem
#

is that the GDP of lichtenstein

urban wasp
#

sure

#

don't question it

keen totem
#

i know the ref

modest depot
daring fern
urban wasp
#

because i don't have any banned cards

#

i just want to ban the ox

daring fern
urban wasp
#

yeah what about it

#

cryptid does that all the time in challenge.lua

#

am i not supposed to?

daring fern
urban wasp
#
...
        banned_cards = {
            { id = "c_cry_delete" },
        },
        banned_other = {},
    },
#

is this not the same?

daring fern
#

I'm referring to this:

keen totem
#

whats the context for getting into the shop

urban wasp
#

i mean ok

undone slate
#

good night :)
what's the opposite of the no_rank found in the stone card and can I have more than one at the same time?

undone slate
#

is it just rank?

daring fern
urban wasp
#

yeah weird, removing the brackets fixed my issue

keen totem
#

n are there tags in vremade?

red flower
#

no

keen totem
#

damn

#

cause i need one

red flower
#

tags, boosters and planets are missing

keen totem
#

how do i get the first card in shop and discount it

daring fern
keen totem
#

is that just jokers or is that anything in that area

#

how do i discount a card tho

daring fern
keen totem
#

like making it free

daring fern
keen totem
keen totem
#

it doesnt so

#

thats why im confused

daring fern
keen totem
#

no

#

just doesnt do anything

daring fern
keen totem
red flower
daring fern
keen totem
#

yea

red flower
#

try doing :set_cost() after

digital sun
red flower
#

but idk

keen totem
digital sun
red flower
keen totem
#

uh yea something

#

thats a question

#

good usage of the question mark

keen totem
red flower
#

because that's what tells set_cost to make it free

keen totem
#

what

red flower
#

read the set_cost function

sturdy compass
keen totem
#
G.shop_jokers.cards[1].ability.couponed = true
            G.shop_jokers.cards[1]:set_cost(0)

am i doing this?

red flower
#

set_cost doesn't take an argument

keen totem
#

yea see

#

thats stupid

#

so thats why i was confused

red flower
#

well you should try reading the function definition before trying it

(sorry if this sounds rude)

keen totem
#

its called :set_cost() so i assumed you use it to set the cost

#

it should be called :update_cost if thats what it does

red flower
#

idk complain to thunk not me

zealous glen
#

in this context

keen totem
#

its confusing tho

#

something

zealous glen
#

I don't think so

#

*shrugs*

keen totem
#

i swear on my soul

#

a thing called set cost

#

shouldnt set the cost?

red flower
#

i mean it does set the cost

zealous glen
#

It sets the cost to the updated cost right

humble elk
#

is there somewhere i can see the structure of a playing card object?

red flower
#

i agree that it can be confusing tho but idk balatro wasn't designed to be an API

keen totem
zealous glen
#

I think set cost makes more sense

digital sun
#

this function disables debugplus keybinds such as / for console and holding m for quick restart
how do i make it so it doesnt
i assume i have to add a blacklist or smth? idk

zealous glen
#

Since getter and setter methods are common

#

across programming languages

red flower
zealous glen
#

although this might not be strictly a setter method

keen totem
#

if im doing set i expect to be able to choose what to set it to

daring fern
keen totem
#

and if set is a normal thing, you shouldnt use it unless it does the normal thing

zealous glen
#

what normal thing

keen totem
#

setting a value based on an arg

humble elk
digital sun
keen totem
#

dont call it a normalized naming convention if its not apart of that convention that youre naming

red flower
#

i am going to PR smods for set_cost to take a value

humble elk
# red flower yeah

then i guess ill just ask, how can i get the SMODS.Rank of a card object? or better yet where to look this up myself

red flower
#

card.base.value iirc

#

most effects use card:get_id() tho

humble elk
#

id prefer the Rank object so i can access the next() method

red flower
#

SMODS.Ranks[card.base.value]? idk what you need it for

humble elk
#

okokok im misunderstanding the smods modules. thank you

sage crater
granite nymph
#

i have my jokers my blinds and my vouchers all in different files

#

how do i load them with the main.lua file

red flower
modern kindle
red flower
#

hi dilly

modern kindle
#

Hi N!

zealous glen
#

Hi dilly

modern kindle
#

I hope you fair well this day

#

Hi victin, I hope you are doing awesomely (or at least adequately)

granite nymph
#

im sorry im still trying to learn lua

vale glen
modern kindle
#

@granite nymph

granite nymph
sage crater
modern kindle
granite nymph
#

okay yeah this makes this like 1000x easier

modern kindle
#

What is in there is great to see how to do things in a proper way

zealous glen
red flower
zealous glen
#

I could be doing better :<

modern kindle
# zealous glen I am doing ok. How about you

Tired but I'm okay
My lady flew in today so ive been hanging with her
I didn't sleep well last night so I'm exhausted but can't fall asleep rn plus If I could I wouldn't want to cause it'd be too early

#

I hope you feel better soon and things work out :(

zealous glen
#

Except for the sleep

#

Which reminds me I should go to sleep

modern kindle
#

My sleep is always wack, I wish I had a more consistent ability to sleep

#

Also yes get some rest

#

Also I assume I could probably check for Back but what would be an ideal way to check for specific decks being played for blinds? I have a blind that requires a specific suit for it to count but if you play checkered for example its a 50% chance to be unwinnable
But i haven't seen what the backs are called to check which one is played

zealous glen
wild escarp
#

Man, I can't do anything with challenges. This sucks.

zealous glen
#

Read that in Bill's voice

modern kindle
zealous glen
modern kindle
#

Hmm thats a fair point, I only noticed it when I didn't change anything card wise in the deck and came across the issue

#

Would I just tally all suits present in the back then and whatever is returned can be a valid choice?

rapid stag
#

bump

modern kindle
#

Much obliged

granite nymph
#

my mod isnt wshowing up in the mod menu :(

zealous glen
real night
#

whys this crashing

modern kindle
#

Maybe yea, I figure if i can just launch through a tally in g.deck.cards should be good

frigid cargo
#

what is priority in the json file?

vale glen
# real night

Where is your not_jokers atlas, as defined in your SMODS.Joker object?

real night
vale glen
#

Mmh

#

Also, can't read the message.txt file on phone

#

Screenshot would be easier to read

real night
#

wait no nvm

#

i thought you meant i was missing something

real night
vale glen
#

Could you screenshot your error message please

frigid cargo
real night
#

and im wondering why it isnt Working.

frigid cargo
#

for priority?

#

oh sorry i ment for general

real night
#

oh

frigid cargo
#

im trying to make my own and im wondering what it is lol

vale glen
#

Uh, talking past each other here. Priority determines what order mods load in

#

Higher priority loads in first

frigid cargo
#

oh ok thanks

granite nymph
#

when i go in game my mod doesnt pop up in the menu

vale glen
#

Hm... Does it need a comma after Steamodded, in the dependencies list

#

Forgot the syntax for JSON files

granite nymph
#

maybe?

vale glen
#

Give it a try

granite nymph
#

nope still no luck

real night
vale glen
#

Not sure if that needs to be an array either

rare helm
#

Hey guys!
I tried to mod Balatro tonight, but it just doesn't want to work at all. Tried basically all troubleshooting advice available, even other people on the discord here couldn't help out.

Basically my issue is that no matter what I do, when I try to put the version.dll for lovely into my game directory, the game just refuses to launch. My Antivirus is off, its the correct size, I uninstalled the game and verified integrity 200 times, BMM is not installed etc etc.

Anyone willing to try to figure this out with me? I heard some other people had a similar issue already but also weren't able to fix it.

vale glen
vale glen
rare helm
vale glen
vale glen
# real night

Could you post your mod's JSON file, just for us to be sure that not is the correct prefix?

vale glen
#

Mod dependencies should be in an array using square brackets

proud depot
#

is there a function in smod that destroys a specific card?

vale glen
#

card:start_dissolve(), or something else?

red flower
proud depot
#

ok thx

vale glen
#

Ah right, new SMODS function

granite nymph
vale glen
#

Did it work now or

granite nymph
proud depot
#

lemme get it

red flower
#

update

proud depot
#

ok

#

Oh im using an old version thank you!

manic rune
#

disable each mod to see which stops the crash

cerulean bane
#

update your mods

manic rune
#

or that, yeah

real night
willow plinth
#

since smods is truncating the exact file path, i have no idea where this crash occurred...anyone has an idea?

red flower
#

search for chekhov

proud depot
#

Is there a good resource for the colors in balatro? I may be stupid but i can't find them in the smods api

#

By colors i mean C:MULT etc

red flower
vale glen
# real night

Ah, where is your localization file located, in your mods folder?

willow plinth
red flower
#

yeah

modest sphinx
#

hellow, i wanna create a mod that changes the image and text of an existing boss blind, can someone teach me on how to do it (i have 0 experience on modding)

real night
#

actually i already deleted it anyway

vale glen
#

Where localization is the folder path, relative to your mod

keen totem
modest sphinx
#

i dont understand anything that you said

#

like i said, i dont know anything of modding balatro

modest sphinx
#

okok

#

thank you very much

vale glen
#

For blind stuff, look at SMODS.Blind, but that's an eventual thing

keen totem
#

how do i get the current blind's requirement

viral ember
#

How would I make it hide the poker hand and name?

red flower
keen totem
#

also is it possible to get the chips that a hand is going to score

#

and if not, how do i get the current blue chips value

red flower
#

hand_chips

keen totem
#

is that chips before or after mult

viral ember
proud depot
#

How do i get the current jokers? G.Jokers isnt working

keen totem
#

G.jokers.cards

#

gets the actual cards in the jokers cardarea

rapid stag
#

bump

faint yacht
proud depot
#

Thanks

red flower
digital sun
#

how do i check if youre in a game or not

rapid stag
faint yacht
#

if G.GAME

red flower
#

im pretty sure G.GAME exists outside of a run

#

you need to check G.STAGE or something someone asked that yesterday

digital sun
faint yacht
#

Oh yeah, G.STAGE == G.STAGES.RUN...

#

I use it as G.STAGE == G.STAGES.RUN and not G.screenwipe to prevent add_to_deck & remove_from_deck from executing stuff when entering/exiting runs.

scenic loom
#

How do you detect when any card (consumables, jokers, or playing cards) are removed from the game? (whether that be by destroying, being sold, food joker running out,e tc)

normal crest
#

hook into Card:remove

scenic loom
viral ember
#

How would you hide a poker hand like the flipped cards do?

normal crest
#

also when you open the collection and close it, remove will be called on each card for example

normal crest
#

you probably want a more specific set of conditions

scenic loom
normal crest
#

with the hook that i sent yes it would

#

also when exiting the shop or rerolling I bet remove is called too

#

and many many more scenarios i imagine

digital sun
#

how do you have the description text update while youre hovering over it
because rn it only updates when you take your mouse off of it and put it back on it

normal crest
#

cus if not, the updating only when you hover over it again is normal

digital sun
#

oh yeahhh misprint does do that i forgort

red flower
#

if the values are static then do it in a dynatext like misprint, if not then use a ref_table in a G.UIT.T node

#

(or a dynatext also)

scenic loom
sage crater
#

what's the difference between name and display_name in the json file for a mod?

normal crest
#

idk how you'd handle playing cards tho

scenic loom
#

or whateveri ts called

#

that happens when a card is removed from deck

normal crest
#

that could work yeah, you'd have to test it out tho

normal crest
#

and when not specified it is the same as your mod's name

rapid stag
#

how do i get a floating sprite to constantly juice like the soul does?

normal crest
#

look in card.lua and search for "the soul" until you're in the card:draw function

#

seems to just apply some scale and rotation to it when drawing it

#

if that's what you were referring to

rapid stag
#

cirBlech it is. i didn't think we didn't have an easier way of doing it, though