#💻・modding-dev

1 messages · Page 341 of 1

crystal perch
#

speaking of lovely patches is there a way to change a joker's default shader without patching?

#

i've looked and that's the only answer i've gotten is to just patch it

unborn bay
#

drawstep

#

maybe

heady siren
#

I just wanna know how to recolor sprites ;~;

brisk rose
crystal perch
#

not an edition

marble flint
#

tbf sometimes a patch is more compatible than a hook in a particularly fragile spot

crystal perch
#

a default shader like hologram

brisk rose
#

oh brain

crystal perch
#

or invis

brisk rose
#

yeah I know what you mean

#

brainfard

#

a null edition with the same properties as the base edition would be a hacky way

#

but there's likely much better

crystal perch
#

yeah but that'd make an entry in the collection as well

#

also why do that when patch

brisk rose
#

that I know

red flower
#

i think a drawstep can do the same thing as a null edition

brisk rose
#

but for sll I know that's a patch

brisk rose
red flower
#

or i think you can overwrite smods drawsteps, idk if they do one for the vanilla jokers

edgy reef
#

You wouldn't need to override for this.

brisk rose
#

keep in mind that even Blueprint mod uses very few lovely patches for all the magic it does

#

and I don't think they're related to core functionality

#

and it was made before drawstep iirc?

edgy reef
#

If it doesn't need to be in a specific order you can just hook after Card:draw.

red flower
#

balatro should be a text based game i hate graphics

edgy reef
#

Balatro on a terminal interface would be fire.

red flower
#

it would actually

brisk rose
#

but the gameplay loop would suck in actual text

#

imo

brisk rose
gaunt thistle
#

somewhat related to the conversation

brisk rose
gaunt thistle
#

I plan on using that mod to automate lovely regression testing (at some point)

brisk rose
#

(I'm obsessed with Bash being an actual programming language for some reason)

gaunt thistle
heady siren
#

Balashtro

gaunt thistle
#

Bashatro

heady siren
#

Balalash

brisk rose
vocal cedar
#

whos good at decks here

red flower
#

im good at dragon link

vocal cedar
#

like if i wanted to make a deck start with a a blueprint

vocal cedar
red flower
vocal cedar
#

apply = function()
G.E_MANAGER:add_event(Event({
func = function()

        end
    }))
end
#

in here yeah

red flower
#

yeah

vocal cedar
#

ok

#

if i wanted it to be an iridescent blueprint

#

tho for example

red flower
#

key="j_blueprint", edition="editionkey"

vocal cedar
#

amazing thank you

gaunt thistle
#

do y'all have any complaints about lovely? bad workflows, bad patch logic, etc.

#

complaints are appreciated because it keeps the ego down

#

(and it also gives the next release more direction)

vocal cedar
#

oh hello john lovely himself

gusty iron
#

how do i check what vouchers the players have?

red flower
#

I don't think I'm enough of a power user to have complaints
other than mac patches not working properly:p

gusty iron
#

is that the creator of lovely.

gaunt thistle
#

it's done though and will be included in the next release

vocal cedar
#

keeps you fresh

#

awake

marble flint
#

The documentation is real bad, especially for advanced features

vocal cedar
#

yeah

gaunt thistle
#

agreed

vocal cedar
#

to put it lightly

gusty iron
#

i dont know if you can add table.find but if you could that would be amazing

vocal cedar
#

i guess

#

TABLE FIND WOULD BE INANE

#

YEAH

#

oh i would kiss you

gaunt thistle
#

it's not even real documentation haha, just a "look at what you can do"

red flower
#

who wants to code: 🙋‍♂️🙋‍♂️🙋‍♂️
who wants to write docs:

gaunt thistle
#

but then the readme is outdated haha

vocal cedar
gaunt thistle
willow plinth
gaunt thistle
#

yeeeeeeeeeeah I want to do a proper documentation pass when I'm done with our move

gusty iron
gaunt thistle
red flower
gaunt thistle
#

it's a bit awkward since we need to ascertain if a payload is a path so we can raise an appropriate error if the file can't be found

gusty iron
gaunt thistle
#

🤢

#

.... json

#

nah jk why json tho

marble flint
#

The semantics on count could be better; sometimes I'd like to specify a min and max instead, or perhaps not run a patch at all if the count is wrong.

#

Also it would be nice to be able to programmatically inspect which patches were applied

vocal cedar
#

and immediatly blue screened balatro?

red flower
#

return true for the event to end

vocal cedar
vocal cedar
#

right right

gusty iron
#

and whats the key for both clearance sale and liquidation?

brisk rose
willow plinth
rapid stag
#

i have a funny mod idea: cards that were unable to spawn (for example, if you're full on consumables and use a high priestess), they instead spawn in the background and taunt you for the remainder of the run

gaunt thistle
rapid stag
#

how is it scary 😭

gaunt thistle
#

err I'm not sure. people have been playing around with using Lovely and other games but I haven't heard anything in a while. Maybe Mari0?

red flower
#

i love mari0

vocal cedar
#

@red flower works perfectly thanks for the quick help

gaunt thistle
red flower
#

thank you i have never made a deck before

gaunt thistle
red flower
brisk rose
vocal cedar
gusty iron
rapid stag
gusty iron
gaunt thistle
#

ah yeah, I'm planning on reimplementing nativefs entirely within lovely

#

native code

#

it's the only way we can reliably get gamepass support to work

willow plinth
brisk rose
red flower
willow plinth
#

@gaunt thistle one more wild suggestion (in case this isn't possible yet): multiple targets or patterns/regexes for targets to patch multiple files at once

gusty iron
gaunt thistle
#

but it's not a bad idea

#

if people are interested in having target regex then I'll implement it, otherwise it'll remain low prior

gaunt thistle
#

probably at least

willow plinth
#

fuse is macos, right?

gaunt thistle
#

and a proper path string type would be nice too

gusty iron
#

gg implimented clearance sale + liquidation with aqua stake (this is liquidation, 50% -> 25%)

marble flint
#

oh yeah, i did want a negative lookbehind at one point which i had to implement in a really dumb way

#

lookaround in general would be very nice

gusty iron
#

heres all of the current stakes

brisk rose
#

I mean... probably not? MacOS is just weird

willow plinth
#

rust regex i guess?

gaunt thistle
#

iirc the rust regex engine that we're using doesn't have negative lookbehinds

#

but it's been a while since I've looked at it

willow plinth
#

yeah, the rust crate doesn't support it

#

...but it lacks several features that are not known how to implement efficiently. This includes, but is not limited to, look-around and backreferences...

gaunt thistle
#

it's specifically the regex-cursor crate

#

lookbehinds would definitely slow things down though

edgy reef
#

lookbehinds?

gaunt thistle
#

whatever the word is

willow plinth
willow plinth
# edgy reef lookbehinds?

with lookbehinds you can check if something is before your match, but not include it in your match...same with lookaheads and the negative versions

verbal hare
#

I'm trying to make a pirate joker but something that looks even more pirate than the one in the game, I want to make it like a legendary joker and that his power has to do with the player's economy. Do you think it's a good sprite? It's the first one I make and I would like feedback to improve it 😄

vocal cedar
#

help me out here chat

#

is it e_glass

#

what is it lol

willow plinth
rapid stag
vocal cedar
vocal cedar
verbal hare
#

hat some less pointy and more teeths

vocal cedar
#

I LIKE THAT

ancient plinth
#

How do I track rounds? Like Invisible Joker

red flower
#

I just increment a counter in end_of_round

willow plinth
# verbal hare

nice, but what i meant with the hat is that could be like rounded inwards instead of straight edges, but maybe that's just me

#

but i also like the shading there

celest timber
#

does anybody know why when i try to loop over G.hand.cards i get nil values?

red flower
#

where are you trying to loop

#

maybe G.hand doesn't have any cards at that point

celest timber
#

i call G.hand just after checkin context.hand_drawn

red flower
#

that's weird

#

can i see the code

celest timber
#
if context.hand_drawn then
  for _, v in ipairs(G.hand.cards) do
    available_ranks[v.get_id()] = available_ranks[v.get_id()] + 1
end
hard flume
#

In order to place cards in my custom card area, I'd have to hook card:emplace right?

celest timber
celest timber
#

oh wait

#

thats true

willow plinth
red flower
#

why i think that makes sense

willow plinth
#

i know i'm a lua noob and it probably makes sense but i've seen several places where . and : are okay and here it's suddenly not?

celest timber
#

yeah that worked

#

tysm!

ancient plinth
#

How do I make the rainbow text typically used for editions?

red flower
ancient plinth
#

I know how the color command works also

red flower
#

like the changing color?

#

or do you want to know the specific one used for editions?

sonic cedar
#

looked at how diet cola triggers on sell and now i have something like this

red flower
ancient plinth
red flower
#

dark_edition is used for editions in all text iirc

brisk rose
red flower
#

damn i copied the lovely dump to my phone but not the loc files

ancient plinth
#

What is the difference between the two?

red flower
verbal hare
# verbal hare

if someone want the sprite, dm me. i dont know much of coding so i cant put it in game lmao

brisk rose
stark geode
rapid stag
near coral
verbal hare
#

i wouldn't mind

#

i don't know too much about coding so if someone wants to put it in a mod i would like it

verbal hare
red flower
near coral
stark geode
#

it does that every time it is used a seciond time

brisk rose
red flower
#

maybe it's not deleting the voucher properly the first time so that's why it crashes when it tries to do so the second time

brisk rose
#

but yeah people are good about giving credit and asking before using art typically, and if not then they get held accountable

#

in my experience

stark geode
willow plinth
#

me with another contexts question: what happens if another joker or thing retriggers my jokers? basically, i need to initialize some variables and with your guys help i did that in context.before && context.main_eval, but i also want to reset them for the next time, which should be straight forward with context.after or something - but i feel like that only works if the joker is only triggered once, right?

#

i know there is context.other_joker but i feel like that's something different

verbal hare
#

someone knows how to make a legendary joker? maybe could help me or code the joker 😄

red flower
#

I think main_eval should cover retrigger but if not I think the explicit check is context.retrigger/context.retrigger_joker

willow plinth
#

"are called with again" what

red flower
#

i hope the new calculation docs eremel is working on are better lol

willow plinth
#

but thanks for pointing out retrigger, i'll look how other mods are using it

red flower
#

I have never tested my mod with retriggers enabled so everything might be broken for not checking properly lol

willow plinth
#

oh star rail does something smart, they just reset the values right before initializing them, that might not solve the problem but is still less convoluted than using context.after

rough furnace
willow plinth
rough furnace
#

Wdym context loop?

willow plinth
# rough furnace Wdym context loop?

the main scoring loop

first its before, then main_scoring, and so on until after...when a joker retriggers, will it go through all those stages again?

rough furnace
#

I'm not sure exactly but I think any retirggers are just called again right after the first time

willow plinth
rough furnace
#

Idk

willow plinth
#

sorry my questions are garbage

rough furnace
#

Try it and see

willow plinth
#

yeah

ancient plinth
#

The text still isn't the rainbow color for some reason

rough furnace
#

That's not correct

ancient plinth
#

How do I do it then?

rough furnace
#

Should be {C:DARK_EDITION}

#

iirc

red flower
#

lowercase i think

rough furnace
#

Actually the dark_edition part is probably lowercase

#

Also you don't need two {{ (I didn't even know the game was okay with that)

cobalt arrow
#

Hey guys, can someone help me with a mod dev problem??

#

i'm kinda new into this

brisk rose
#

people are just gonna say 'don't ask to ask'

#

so go on

cobalt arrow
#

oh so

#

I'm making a mod for my friend who introduce me Balatro

#

as a thanks for the new addiction

#

basically it's a joker of him, who is a combination of Scholar + Gluttonous

#

When a Clubs card is scored, you gain +24 Multi and +69 Chips

#

however

native zinc
#

context.individual, is_suit()

celest timber
#

is there a way to kill previous attention_texts ?

native zinc
#

? like the message?

celest timber
#

yeah

native zinc
#

chips_mod

#

mult_mod

#

message = "whatever you wanna change the message to"

cobalt arrow
#

yes, that part i got it

#

I couldn't make two messages appear one after the other after triggering

#

like +69 Chips and then +24 Mult

native zinc
#

return {
chips = 69,
extra = {mult = 24}
}

#

that should do the order iirc

#

what are you having trouble with, exactly? detecting suits or returning?

#

if they're not scoring on the cards then use context.individual

cobalt arrow
#

only the messages

native zinc
#

oh right comma too

cobalt arrow
native zinc
#

no just return normally

#

no message, chips and mult will automatically give the messages

cobalt arrow
#

ohh

native zinc
#

if you want to change the messages they auto give then you use message = 'Custom Ding'

#

otherwise just ignore it

cobalt arrow
#

wait

#

no message played

native zinc
#

are you using chips_mod instead of chips?

cobalt arrow
#

yes

native zinc
#

don't

cobalt arrow
#

ok

#

only chips?

native zinc
#

chips_mod means no message

#

chips -> yes message

cobalt arrow
#

ohhhh

#

livin and learnin

#

BROOO I GOT IT

#

thank you very much!

stark geode
#

anyone know how ican change the values of jokers by x1.5

#

as far as i can tell i look in card.ability

#

or in some cases card.ability.extra

#

but ik some of the jokers are hard coded

chrome widget
#

Is there any way to, within the individual context, cause returned extra chips to be summed with the base chips in the same way they are for bonus cards?

#

Rather than pinged separately?

unkempt thicket
chrome widget
#

Same!!

chrome widget
#

You basically just have to iterate recursively through the card's config/ability table

#

Ill send it:

stark geode
#

i was already thinking about making a function lol

chrome widget
#
--- If no parameters but a table are provided, the function returns a deep copy of all non-object values
--- @param table table A table to modify.
--- @param mod number | nil A modifier value (such as 0.5 or 2). Default is 1
--- @param reset_table table | nil Table to reset directly comparable values from based on comparator
--- @param compare string | nil A comparator to determine when to reset ('pos', 'neg', or 'dif', default is 'neg')
--- @return table # A modified copy of the given table
function RecursiveTableMod(table, mod, reset_table, compare)
    local val_type = type(table)
    local mod_copy = nil
    if val_type ~= 'table' then
        -- modify number values
        if val_type == 'number' and (not reset_table or type(reset_table) == 'number') then
            -- default value
            mod_copy = table * (mod or 1)

            if not compare then
                compare = 'neg'
            end

            -- reset if a reset table is provided
            if reset_table and ((compare == 'neg' and table < reset_table)
            or (compare == 'pos' and table > reset_table)
            or (compare == 'dif' and table ~= reset_table)) then 
                mod_copy = reset_table
            end

            return mod_copy
        end

        -- weird scenarios with a table mismatch
        return table
    end

    -- recursive to arbitrary depth
    mod_copy = {}
    for k, v in next, table, nil do
        if (k == 'order' and type(v) == 'number') or (type(v) == 'table' and v.is and (v:is(Card) or v:is(Cardarea))) then
            -- don't copy certain values
            mod_copy[k] = v
        else
            if mod and mod ~= 1 and type(v) == 'number' and (k == 'x_mult' or k == 'Xmult' or k == 'x_chips' or k == 'Xchips') then
                if v == 1 then
                    mod_copy[k] = math.max(0, RecursiveTableMod(0, mod, reset_table and reset_table[k] or nil, compare))
                else
                    mod_copy[k] = math.max(0, RecursiveTableMod(v - 1, mod, reset_table and reset_table[k] or nil, compare))
                end
            else 
                mod_copy[k] = RecursiveTableMod(v, mod, reset_table and reset_table[k] or nil, compare)
            end
            
        end
    end

    return mod_copy
end```
exotic sluice
#

Can’t figure it out. Does someone here do commissions for mods??

cobalt arrow
unkempt thicket
#

Mine is very configurable, you can choose the exact operation you want to do, the table you want to iterate over, vars to exclude (at certain vaules and in general), vars to only go over if contains certain letters, and rounding.

chrome widget
#

This has a bit of extra functionality I originally added for something I did with Dilly, but just call it, give it a numerical mod, it'll multipy all values on a table given to it (like card.ability or card.ability.extra)

#

And yeah sure

stark geode
#

I might just make my own acutally

#

becuase what i need is wayy to specific

chrome widget
#

How so?

celest timber
#

im gonna leave learning dynatext for tomorrow cause my brain hurts

stark geode
# chrome widget How so?

Main Channel (Rare) - 1 in 25 chance to multiply a value in all owned Jokers by x1.5 when playing a hand. (Wait, he has a main channel?) [see below for explanation]

chrome widget
#

avoiding chances is gonna be really difficult, because not every vanilla joker mathematically implements them the same way

stark geode
#

yeah

#

especially with oops

unkempt thicket
stark geode
#

id rather make my own

chrome widget
#

But almost all of that besides changing the localization stuff is easy

stark geode
#

like dagger

sonic cedar
#

does anyone know how to make a joker play a sound when it is being sold? this doesn't work

crystal perch
#

bump! any help is greatly appreciated

sonic cedar
stark geode
#

.

chrome widget
crystal perch
crystal perch
#

that's a completely separate thing

chrome widget
#

In the context of the SMODS calculate function, self refers to the center, not the card instance

crystal perch
#

yeah changing self to card just doesn't crash the game

#

the juice still doesn't work

stark geode
#

the function is_suit() might not exist

crystal perch
#

it does ive used it before

#

to be clear: the joker works, it is just the juice up that isnt

chrome widget
#

It's highly likely that there's an ambiguous reference between the local v variable inside the eval function and the one used by the ipairs iteration

#

Name it something else

crystal perch
#

the naming convention isn't the issue, it doesnt work no matter what you name it

chrome widget
#

Can you explan what the joker is intended to do?

crystal perch
#

i just want the joker to juice up while a spade is in hand

#

the joker's ability works

#

it is just the juice that crashes it

stark geode
stark geode
#

I've had my own issues with it

willow plinth
#

i want to post the glorbshit gif so badly because my jokers are not getting retriggered 😭 😭

chrome widget
#

So like... the main issue with it is that you're giving a bunch of unique juice_until evaluations for each individual spade, and the condition is asking to wait until that specific card is no longer a spade. It doesn't replace the existing evaluations with the state of your current hand, it just adds atop them

willow plinth
#

so apparently jokers with SMODS.calculate_effect aren't getting retriggered? 😭

stark geode
chrome widget
#

Yeah

#

Because unless you change the suit of one of those cards, those juice_until evaluations will never change, and they'll conflict with each other

#

And if one of those cards is destroyed, the reference to the card also breaks

stark geode
#

Then putting the juice until in the main calculate function and not the if

stark geode
#

I'll consider it

tepid crow
#

you can also return nil, true if you don't want an effect but do want to indicate the joker triggered

willow plinth
sonic cedar
#

does selling a joker trigger its remove_from_deck?

rough furnace
#

Yes

sonic cedar
#

does that mean i can have it play a sound through there or no

rough furnace
#

Probably yeah

sonic cedar
#

sickkk

#

wait would i use playsound or return sound

#

wait no returning ssound if for calculate disregard me

verbal hare
#

if my joker soul is in the second row and first column what would be the pose? im kinda slow lmaoao

faint yacht
#

Such start from 0.

brisk rose
#

Can someone help me figure out what went wrong with my get_current_pool?

#

This is the crash I get. It tries to make a playing card with a seal on it and does this instead

#

The crash log also has my mod list

high sinew
edgy reef
#

And since seals have no default it just rolls with Joker

subtle hawk
#

How do I move cards from one area to another? Like from G.hand to G.deck by using a card

brisk rose
#

yes, for well over 12 hours I haven't restarted the run

#

just left it there for testing

#

@unkempt thicket (also why are there 2 of you? are you one of those peeps that has a mobile and desktop account seperately?)

faint yacht
brisk rose
verbal hare
#

can someone help me with my code in dm?

sudden cave
#

Anyone know how to load new image files/assets using lovely? (not steamodded)

I'm trying to do love.filesystem.read(texture_path) in an injected function but I don't think the image file is actually contained within the patch so it can't find it

wild escarp
#

Making a joker that gains X1 mult if played hand is pair of aces, built it based off of superposition and runner, but I get an error when selecting a card saying poker_hands is a nil value, anyone want to point out my stupidity?

    local aces = 0
    --always score
    if context.joker_main then
      return{
        Xmult_mod = card.ability.extra.Xmult,
        message = localize { type = 'variable', key = 'a_mult', vars = { card.ability.extra.Xmult } }
      }
    end
    --check for aces in hand
    for i = 1, #context.scoring_hand do
      if context.scoring_hand[i]:get_id() == 14 then aces = aces + 1
    end
    end
    --check for pair and aces and upgrade joker
    if aces >= 1 and next(context.poker_hands['Pair']) and context.before and not context.brainstorm then
      card.ability.extra.Xmult = card.ability.extra.Xmult + card.ability.extra.Xmult_gain
      return{
        message = "Upgraded!",
        colour = G.C.MULT,
        card = card
      }
    end
  end```
brisk rose
#

actualy, it's not too let, lemme test something

sonic cedar
#

Does anyone know how unlock conditions work? I want to start giving my jokers some

brisk rose
#

they're really fighting over than patch space

brisk rose
#

I made that change to my modpack folder, not my mods folder

high sinew
#

my game crashes trying to spawn in my card

#

anyone know why?

#

my key is just their name so would it be no "c_ mills_ "

brisk rose
#

whoops

#

I mean probably an interaction still, but not with all-in-jest

willow plinth
#

this happens when trying to retrigger my joker with another random joker

#

specifically with Blue Yourself from Neato Jokers

#

but also happened with another retrigger joker from toga

hollow birch
#

what is the proper way to set debuffs? it seems theres like at least three different ways to do it, and I wanna know which is the suggested way

verbal hare
#

i need help, my legendary joker only use one pos, i put soul pos but it doesnt load the joker, when i delete the soul pos my joker appears

hollow birch
#

rn i'm just calling card:set_debuff(true) and marking a variable so it knows that I debuffed it, and then disable it manually later if it is debuffed and has that variable, but that would prevent other mechanics from debuffing it as well while its already debuffed, so theres likely a better way

uneven halo
#

Hey modding chat I dont even know if this will get anywhere but following the convo on #🍌・thunk-chat , I see a ton of people like jiggle ideas and stuff, how easy is it to grab the function to make existing jokers jiggle? Might check out if I make a fidget mod or something

#

like, its ungodly how many "Hey couldnt this joker jiggle when X situation happens?" Thunk got in the last 5 minutes so I figure there ought to be a little nieche to carve out with mods that just enhance how tactile the game feels and are more for fidgeting

manic rune
#

:juice_up()

subtle hawk
#

So I'm putting cards held in hand into deck, the problem is that if a card is highlightened it stays highlightened. And when I try to unhighlight_all it just crashes 😭

unborn bay
#

cards refers to the array of cards in the area, not the cardarea itself

#

you're looking for G.deck:unhighlight_all() here

hollow birch
#

nvm i got it

subtle hawk
chrome widget
#

For the 'removing_playing_cards' context, is there a way to have the behaviors from the return table occur after the relevant cards are destroyed rather than before?

#

Or would I have to make a unique context for that?

lucid owl
#

i patched SMODS.create_card (see bottom) in order to replace one card with another upon card creation, but when i do so it does... this. the card is created as intended (soully on the right), but then the original card is just loosely there. what's the problem with my patch?

#

(also, those particles around the card are permanently there for... some reason)

subtle hawk
willow plinth
faint yacht
#

🫠

lucid owl
subtle hawk
#

Does anyone know why do these get darkened?

lucid owl
subtle hawk
#

Damn it

#

Thanks

willow plinth
flat sorrel
#

why is the key "Red" in my joker pool (and crashing the game because there's no center for it) I'm gonna cry

manic rune
#

question, whats this

shell timber
#

id assume that's for hologram etc.

manic rune
#

hm

#

i see

#

what do i need to do to give the card an edition and a seal too?

#

i tried reading the function's code but i barely understood anything im gonna be honest

subtle hawk
#

Why are there two colors assigned to a consumable type? I thought badges are one-colored

manic rune
#

-# what do "front" and "center" mean 😭

daring fern
manic rune
#

mm i will try,one sec

#

doesnt seem to be it

#

oh wait

#

was i supposed to patch here?

#

uh

#

how do i direct the target to this

#

never tried patching smods before

faint yacht
manic rune
#

thanks

#

that didnt work

daring fern
manic rune
#

mm nope

#

is there a mod that patches smods?

#

im probably doing something wrong here

daring fern
manic rune
#

.

#

oh

#

i might be dumb :3

subtle hawk
#

Confused on how to spawn a card from a modded set with SMODS.add_card

#

Or SMODS.create_card

manic rune
#

that works now

subtle hawk
subtle hawk
daring fern
subtle hawk
#

Not much more

manic rune
#

balatro 1999??

sturdy compass
#

that is an odd looking key

subtle hawk
manic rune
#

fire

subtle hawk
#

Like with a vanilla type i think it would be like t_b1999_mel1 (?)

sturdy compass
#

There is no vanilla thing that has a key like that

subtle hawk
#

Uhhh

#

I'm brainfarting

manic rune
#

what does "tune_" mean

#

is this a joker or a consumable?

subtle hawk
#

That's a consumable

sturdy compass
#

what is your mod id and card's key

manic rune
#

you want to do c_(mod_prefix)_(key) then

shut crater
sturdy compass
#

It's a little in your face imo

manic rune
#

it sounds off, but i cant exactly tell whats the issue

#

😭

shut crater
#

I agree

#

trying to figure it out

manic rune
#

holy fuck, two polychromes in a row???

#

😭

#

istg its only when im testing

subtle hawk
manic rune
#

dont worry, i had a lot of brainfarts today too, i feel bad for people helping me 😭

subtle hawk
#

fr

dapper sun
#

how do i let another card/joker know when this enhancement creates a card?

kind moat
manic rune
#

a skill tree mod that saves for the entire profile

#

currently im working on a section that buffs spectral cards, gold seal and purple seal

karmic arch
#

If spectral didn't have negative effects, then these would be the best cards

daring fern
dapper sun
#

ty

manic rune
#

oh damn Aura's selection cap is hard-coded

#

💀

#

thats uh, concerning

kind moat
manic rune
#

its easy

#

but

#

im mostly concerned about the fact i cant change its description by changing a var like tarot cards

#

so i would have to override the card's localization, which i kinda tried to avoid

#

thats annoying

unborn bay
#

one

kind moat
# manic rune 😭

I see how do other cards handle it? Because they're dynamic it's not handled in the "text" table?

manic rune
#

they have something like #1# instead of 1, which changes depending on a variable

kind moat
#

I had an idea to create a balatro mod around the binding of isaac but its already been done... so now i gotta think of another idea... 😄

kind moat
haughty wraith
#

How do I create my own mod?

kind moat
#

@haughty wraith

manic rune
kind moat
#

Yeah looks weird but uhh idk a better way to link it

#

Ahh there we go

#

@haughty wraith

haughty wraith
#

Thanks a lot

#

❤️💕💖

kind moat
kind moat
kind moat
#

Nice! How did you fix it?

manic rune
#

made my own localization for the card :p

#

its sadly the only way to fix this, and mods which add new localization to Aura too will probably override my changes

#

making it back to "1 selected card" again, but it shouldnt change anything gameplay-wise, so

eager pendant
#

How do you give a Joker when you have another Joker in your hand?

kind moat
#

Joker in your hand?

#

You need to give more context if you're already talking about a custom part of your mod

eager pendant
brisk rose
#

they want to be given ready to use code

#

and don't seem to understand attempts to help them

kind moat
vocal cedar
#

finishing touches on da tag

native zinc
#

so specific

#

x1.7

kind moat
vocal cedar
eager pendant
kind moat
vocal cedar
#

you might be correct as hell

kind moat
#

I also think you've gone one level too deep on the bottom side aswell pepe_think

#

Your shape

#

Original

#

@vocal cedar

eager pendant
#

I tried it like this, it doesn't work

daring fern
dapper sun
eager pendant
dapper sun
#

this isn't doing it

#

(putting it at the start of the card's actual behaviour

tall wharf
#

everyone is adding xchips 😭

daring fern
daring fern
dapper sun
#

ok

#

the lucky card code seemed to be putting it on self

daring fern
#

self is actually the card over there.

dapper sun
#

ok

#

i'll remember that for the future

exotic totem
#

I'm new to Lua and struggling a bit with my first joker. Could anyone point me in the right direction in terms of counting cards of a specific rank in the scoring hand?

if context.individual and context.cardarea then 
                local cardarea = G.play
                
                local count = 0
                for _,card in pairs(cardarea) do
                    if card:get_id() == 7 then 
                        count = count + 1
                    end
                end
exotic totem
#

Ah, thank you

eager pendant
daring fern
reef belfry
#

how would you go around flipping the played cards one at a time and only flip them face up if all the cards are flipped down for a short amount of time

eager pendant
eager pendant
#

??

runic pecan
#

Sometimes I forget which node should be G.UIT.R and which node should be G.UIT.C, and then something like this will happen:

dapper sun
#

how do i make a planet card?

eager pendant
#

Someone tell me already how to do a check on the jokers in the hand and if they are there then give another joker

kind moat
vocal cedar
#

You basically make a consumable and then specefy it as a planet

dapper sun
#

i figured it out dw

vocal cedar
#

ok nice

reef belfry
#

cards that get enhanced during context.before dont score their enhancements?

runic pecan
#

How do I stack them vertically?

eager pendant
runic pecan
reef belfry
#

well this is an oddity

#

maybe im just doing something wrong

manic rune
#

you need to do G.UIT.C -> G.UIT.R -> G.UIT.C

#

or something 🤔

runic pecan
crisp coral
#

yeah it wouldnt make sense to double uit.c

runic pecan
reef belfry
#

it also doesnt trigger golden ticket

manic rune
#

are those all handled in context.before?

reef belfry
#

yeah

runic pecan
manic rune
#

weird

reef belfry
#

is that the problem?

runic pecan
reef belfry
#

oh

vocal cedar
#

is there a good wiki reference for all the hidden configs for random shit?

like here for example

max_highlighted is a predefined variable that you set for specrals or tarots right,

but i dont really see its documentation anywhere

#

i feel like i just keep seeing stuff like this all throughout smods

daring fern
vocal cedar
#

so max highlighted is a vanilla thing

#

huh okay

#

makes enough sense

formal parrot
#

GOD DAMN THE FUCKING SUN

manic rune
#

anyone remembers from the top of their head how to check if a card has an enhancement or not?

daring fern
manic rune
#

thank

coral flume
#

Any Idea how I'd change the chances of just lucky cards

daring heron
#

Wait how do i add credits to my mod

#

Like as a tab

daring heron
red flower
#

I would recommend just having them in the localization file rather than making the UI manually

daring heron
#

I mean, is there not a built in credits tab in the balatro mods section?

red flower
#

the SMODS one?

#

that one is harder to edit because it's for smods credits not for individual mods

daring heron
#

No the individual mods one

red flower
#

no, you need to add it yourself

daring heron
#

Damn 😔

#

How do i do that?

red flower
#

you can have them in the mod description if you don't want a different tab

red flower
daring heron
#

Oh mb

cursive sentinel
#

ive seen repeated jokers appear in my shop / on creation despite no showman being present, is it a known bug or would my mod be causing this?

#

(was trying to see if polls and enhancement gates were working)

cursive sentinel
#

i spawned all jokers manually and turned them negative with debugplus, not creating showman, and then spawned jokers through judgement

red flower
#

wdym by manually?

cursive sentinel
#

pressing 3, then ctrl Q

daring fern
cursive sentinel
#

erg

#

although ive seen it also in game

#

w/o debug plus on

red flower
#

there are some vanilla bugs related to that but i don't think that's related to your issue

cursive sentinel
#

how could i test if my poll false and enhancement gates are working well?

red flower
#

eval SMODS.add_card{key="joker_key"} in the dp console

cursive sentinel
#

thx!

#

if it spawns, it means it doesn't work?

red flower
#

oh no, that will always spawn. I understand what you mean now
I don't think there's an easy way to test if something doesn't spawn properly

#

you can try banning all other items with the Banner mod?

cursive sentinel
#

what is it?

dapper sun
#

how do i set chips/mult, instead of adding to/multiplying it?

daring fern
dapper sun
#

ty

wintry solar
#

You’d need to update the text too, so I think it would be cleaner to use chip_mod in your return (or remove_default_message = true) and have a custom message

dapper sun
#

it's still adding

#

instead of setting

wintry solar
#

Yeah add the difference

dapper sun
#

how do i get the amount of chips/mult?

daring fern
dapper sun
#

do i add G.GAME. before that, or-

#

i said get not set

daring fern
daring fern
dapper sun
#

ah ok

#

i see

willow plinth
#

is this joker any good? (chances are independent)

posting this here again cuz i'm shadowbanned in #⚙・modding-general

dapper sun
#

shadowbanned?

willow plinth
#

i'm joking but 90% just ignore me and it's aiko memes i don't understand lol

dapper sun
#

ah ok

#

i'm no expert on balancing but

#

i do love the rotating polyhedrons you've made

willow plinth
#

haha thanks

willow plinth
#

i somehow think constantly it's a net negative joker but i don't think it is unless you have a weird other joker or consumables that caps hands or something

#

why am i making a mod based on multiple rolls when i'm too stupid to understand independent probabilities 😭

vocal cedar
#

drew this from scratch... does server deem it at least bearable?

#

i have touched pixel art

#

exatly one time before this

#

and it was to make a different spectral card lol

#

Graveyard: Convert your entire hand into Stone Cards, then apply Iridescent to a random playing card, or Joker

#

i gotta know how many times bro has emoted

cursive sentinel
#

iridescent is your x2 chips edition right?

vocal cedar
#

yep

#

polychrome has hex

#

this has this

karmic arch
#

Somethingcom thinks a lot

vocal cedar
#

he does lol

vocal cedar
#

i might just make it 100% joker tbh

cursive sentinel
#

the art's maybe a bit hard to read, also it seem the lower pixel line of the drawing inside hasn't he white border

vocal cedar
#

and then leave the irid to a card for a lucky aura or standard pull

rapid stag
#

i like the idea of a graveyard spectral card, but i'd just make it destroy a bunch of cards and give 1 extra pemanent discard

daring fern
vocal cedar
#

might improve vis

cursive sentinel
#

like aura is like 50% foil 35% holo and 15% poly iirc

vocal cedar
#

cause death dna cryptid and boom

cursive sentinel
vocal cedar
daring fern
#

If there was a reverse splash joker where all cards are unscored, is there a situation where that would be useful?

cursive sentinel
vocal cedar
daring fern
vocal cedar
#

i dont think that would be usefull unless your going for the cryptid green seal thing no?

#

there we are

#

lets see lets see

cursive sentinel
#

Question for a joker i'm working on, which set hands to 1, the thing i use G.GAME.current_round.hands_left but it doesnt seem to take into acc the added hands from burglar; since it's only done though ease_hands_played

#

anyone would know some kind of a solution?

rapid stag
# vocal cedar i feel like irid cards are significantly stronger than irid jokers

well the thing is, editions on jokers are reliable because they'll always be there, but that means the joker edition can't be anything else (unless you either sell it or otherwise have some other way of removing it)

editions on cards have the advantage of not taking up an edition on a joker but not being reliable as you have to have it in your hand to use it. it's not useful if it's never drawn. imo the rough equivalence for applying an edition randomly across the choice of either the joker or hand cardareas would be 1 random joker or 2 random cards in hand

#

OR

#

...the edition is stronger on the card than on the joker cirThink

#

that's an interesting idea. having a condition where editions on cards are twice the value as they would be on a joker

#

now you've got me ideating

vocal cedar
vocal cedar
vocal cedar
vocal cedar
# rapid stag now you've got me ideating

Negative Playing cards act COMPLETELY different from their joker cousins
Besides giving you +1 hand size when drawn, they ALWAYS score (like if splash joker was here) and have a 1 in 2 chance to retrigger

#

Also, Death, Cryptid, and DNA cannot copy the negative

#

only the seals and enhancements of the card

rapid stag
#

maybe not the retrigger

vocal cedar
#

so this discourages you from just making a brillion negative red seal kings

#

maybe now, havent played with wm that much yest

#

not*

rapid stag
#

yeah, other than the retrigger part, with the caveat that you just can't replicate negative playing cards in any way, that feels surprisingly balanced

vocal cedar
#

currently him and standard packs are the only way to get the negatives in your hand

#

when you could copy the edition with death and cryptid shit got really stupid really fast cause mime and baron would actually start drooling over those negatives with gold and steel

#

it was either that, or nerf mime and baron to not be able to work with negative kings, and negative steel and golds respectively

rapid stag
#

i see. see, i have plans for joker functionality that makes specific cards negative. and this is a specific form of a forms-based joker which changes forms based on the first played hand, like cardsauce's slay the spire joker, but based on hand type rather than first card suit, this being straight flush

vocal cedar
#

and i liked the "cant copy negative enditions over on playing cards"

vocal cedar
#

be super carefull with negative playing cards

#

they

rapid stag
#

yeah

vocal cedar
#

have NO downside lol

rapid stag
#

they're weird

vocal cedar
#

literally breaks the game as an idea.

#

bc there is no downside to drawing them

rapid stag
#

i think your idea gels really well with what i want to do

vocal cedar
#

you can clog tf outta your deck with them and its fine

vocal cedar
rapid stag
#

yeah, i just think they should be hard to get

vocal cedar
#

or better yet when i do the lovely patch ill send you my code

#

give me the day

#

basically

Negative Playing cards always score
Negative playing cards when Copied, or Deathed, do not transfer the negative edition to the copies

#

ill have that done by tonight probs lol

vocal cedar
cursive sentinel
#

perhaps making colors of the front and back a bit more different, either in values or in hue

#

but does look more readable

rapid stag
#

i think the biggest reason why i like this idea for negative playing cards is that it brings their acquisition closer to how negative jokers are, at least in vanilla - like every ability that duplicates a joker never allows it to create another negative joker

#

if that makes sense

vocal cedar
#

ankh and invis

#

they no likey

#

negative has always been the super odd "ooh shiny" ass edition

#

bc its just so different from the other vanilla editions

#

literally does jack shit for scoring

#

but so good

#

bc jorker slot

#

@daring fern this you?

#

last question, if you have a localization file in your mod folder how do you tell the game to use it instead of the base games localization

#

like i have an edited copy of en.loc in my mod older

rapid stag
#

that's determined by file structure and naming

vocal cedar
#

that does the "mr fantsastic" lol

#

oh i cant just completly overwrite the normal one?

cursive sentinel
vocal cedar
#

so

#

you want it to overwrite burgular?

cursive sentinel
#

i can drop the code if it helps

cursive sentinel
vocal cedar
#

im still trying to figure out whats the problem lol

#

oh okay

#

hmm

cursive sentinel
#

like if right to burglar, would reduce its hands created

#

if left, not

vocal cedar
#

so needle by the way is POORLY coded by thunk, keep this in mind

#

basically

#

needle doesnt set hands to 1

cursive sentinel
#

yes i know

#

i've read it

vocal cedar
#

it SUBTRACTS OR ADDS HANDS to one

#

yeah lol

#

SO

cursive sentinel
#

same for burglar

vocal cedar
#

its gonna be a nightmare anyway

rapid stag
# vocal cedar oh i cant just completly overwrite the normal one?

there are other options such as SMODS.process_loc_text() but this is the usually easiest, most reliable and most mod-compatible way to consistently get exactly what you want

basically has to be */localizations/[the localisation name].lua
and the filename has to be either default.lua or the name of an existing localisation language (either in vanilla or one you add such as via SMODS.Language()), such as en-US.lua

cursive sentinel
#
if context.setting_blind and not context.blueprint then
            local lost = G.GAME.current_round.hands_left - 1
            print(lost)
            G.E_MANAGER:add_event(Event({func = function()
                ease_hands_played(-lost)
                card.ability.extra.xmult = card.ability.extra.xmult + (card.ability.extra.xmultmod * lost)
                card_eval_status_text(card, 'extra', nil, nil, nil, {message = 'All in!'})
            return true end }))
        end

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

        if context.end_of_round then
            card.ability.extra.xmult = 1
        end```
rapid stag
vocal cedar
vocal cedar
#

first of all cool ass idea lol

#

second of all thats going to be a nightmare to code with the vouchers the way you have it i think

cursive sentinel
#

😔

vocal cedar
#

let me move this into my vscode rq

vocal cedar
rapid stag
cursive sentinel
#

vouchers or troubadour goes on the variable i modify though so no issue

#

it's rly just needle and burglar

vocal cedar
#

oh good

#

hmm

vocal cedar
#

and also perhaps your atlas

rapid stag
#

so your localisation file only needs to include changes or additions you want to make and it will process them accordingly

woeful stratus
#

ease_hands_played already does

brisk rose
#

though from skipping the convo, it likely has a lot of practical balanving advantages in this case

cursive sentinel
rapid stag
cursive sentinel
#

i havent been coding for long so im not rly familiar with what structure or method or else is for

woeful stratus
#

i didn't know burglar did it that way, but looking sat the code you are right

#

what does this do rn if u have burglar?

woeful stratus
cursive sentinel
#

it sets hands to 1, then burglar takes effect

#

thus, easing 3 additional hands up to 4

woeful stratus
#

put lost inside the event

cursive sentinel
#

and for needle, on red deck for instance, it eases me -3 hands down to -2 hands

#

ok

#

trying lost in event

woeful stratus
#

yeah, because you are calculating the amount of hands to lose before the event takes place

cursive sentinel
#

ahhh

#

yeah events are delayed

#

ok will try

vocal cedar
#

ugh

#

thank you john smods

rapid stag
#

yep

cursive sentinel
#

its like burglar will always take effect after my joker for some reason

worthy stirrup
#

How do I define what the blueprint joker does to my own?

vocal cedar
#

blueprint is coded to just "turn into" the joker its copying

#

so

#

you dont really gotta do anything

cursive sentinel
vocal cedar
#

unless you SPECIFICALLY need it to not copy (like a scaling joker)

woeful stratus
#

so it's delayed two times

vocal cedar
cursive sentinel
cursive sentinel
#

like adding a delay to my owns calculation

vocal cedar
#

thats UGLLYY but it should work perhaps

vocal cedar
worthy stirrup
#

It says I need to define it?

vocal cedar
#

you dont need to

#

i promise

woeful stratus
cursive sentinel
#

ok will look into it

woeful stratus
#

but you can delay them i think

worthy stirrup
#

No offense, I’m gonna trust the documentation before you

vocal cedar
daring fern
vocal cedar
#

why do i even bother

woeful stratus
#

otherwise it's automatic

vocal cedar
# worthy stirrup No offense, I’m gonna trust the documentation before you

dude

documentation is misleading,

like i literally just said, blueprint and brainstorm copy your jokers code to a t

if you dont WANT them to you have to define your jokers behavior

say you make a gros michel joker, if blueprint was copying it exatly, then your blueprint might literally go extinct, so we do a blueprint context override to make it so blueprint only copies the +15 mult

#

oh look other people are also saying its automatic

#

which is achived with a statement kinda like

daring fern
#

No.

vocal cedar
#

nope hold on

#

false info

woeful stratus
#

the documentation is a bit misleading

unborn bay
#

python coded

brisk rose
#

For some reason

vocal cedar
#

wait yeah

#

its context.blueprint hello

daring fern
vocal cedar
daring fern
#

It's not context.blueprint if you want to disable it, elsewise it is nothing.

brisk rose
worthy stirrup
#

War has broken out in the modding dev

vocal cedar
#

no you can use context.blueprint to help you define the functions

vocal cedar
woeful stratus
worthy stirrup
brisk rose
vocal cedar
brisk rose
cursive sentinel
# woeful stratus but you can delay them i think
G.E_MANAGER:add_event(Event({
                trigger = 'after',
                delay = 0.4,
                func = function()
                local lost = G.GAME.current_round.hands_left - 1
                print(lost)
                ease_hands_played(-lost)
                card.ability.extra.xmult = card.ability.extra.xmult + (card.ability.extra.xmultmod * lost)
                card_eval_status_text(card, 'extra', nil, nil, nil, {message = 'All in!'})
            return true end }))```
vocal cedar
#

you can see i check to make sure its not context.blueprint and then do the "do i kill the banana"

cursive sentinel
#

the delay doesnt seem to change

unborn bay
#

why is there war in modding dev

cursive sentinel
#

i guess burglar always worked on needle bcs the execution of blind must be before the one of jokers on setting_blind, but the interaction joker - joker is weird

glad osprey
vocal cedar
#

ther is NO WAR in modding dev

#

i cant post gifs

worthy stirrup
#

Now I have become death… destroyer of modding dev.

vocal cedar
#

trying to post the 1984

vocal cedar
glad osprey
vocal cedar
brisk rose
#

So skepticism is warranted

unborn bay
#

ok so general pointers about blueprint

  • blueprint_compat is for the VISUAL INDICATOR for blueprintable cards. thunk coded it like that, so smods will make it stay like that
  • context.blueprint is a boolean that returns true IF the card is being copied BY a blueprint. to make a card not be copied in any way shape or form you could add a not statement
worthy stirrup
#

Well, the documentation said otherwise, so why would I believe you

brisk rose
sturdy compass
worthy stirrup
#

I’m aware, but like, I think the documentation would be somewhat correct

glad osprey
brisk rose
glad osprey
#

fuck

worthy stirrup
red flower
#

the documentation is correct, just ambiguous

vocal cedar
brisk rose
vocal cedar
#

JKLFAJFAK;JL F;JLHF

worthy stirrup
woeful stratus
#

yeah, it's 100% correct

sturdy compass
#

I came at a bad time I think 😭

vocal cedar
rapid stag
#

i don't know how this isn't clear

vocal cedar
worthy stirrup
#

It says I need to define it, I was asking how to define it

red flower
#

this is the 4th documentation discussion i have seen this week

brisk rose
vocal cedar
#

and it looks like its saying we gotta define it

brisk rose
#

That it was off by default

worthy stirrup
#

And I was told it does it by it self

sturdy compass
#

Who said that

#

Cuz that is wrong

glad osprey
worthy stirrup
#

Mrfreese

vocal cedar
#

:3

#

hai

sturdy compass
#

Bruh

glad osprey
#

BE
HAV
IOR

vocal cedar
brisk rose
vocal cedar
#

i did

#

i did say that

worthy stirrup
#

Your honor, you wasn’t even there

vocal cedar
#

for THE LAST TIME

glad osprey
#

its literally using the exact same calculare

brisk rose
red flower
#

the problem here is what you consider as defining behavior
blueprint copies by default, the behavior comes from you defining when it shouldn't copy

brisk rose
#

This was for the class

rapid stag
#

ahhh i see the issue cirDerp

#

yeah, that could definitely be worded better

worthy stirrup
quartz ravine
vocal cedar
#

Blueprint is coded in the game to DEEP COPY THE JOKER ITS LOOKING AT
if a joker is being copied by blueprint context.blueprint = TRUE so you can put da IF statements in so your BLUEPRINT doesnt EXPLODE or DIE

red flower
#

don't be mean lol

vocal cedar
quartz ravine
#

I just got here! I guess folks have been having some spirited discussion?

sturdy compass
#

This is a yelling match now

red flower
#

it seems

vocal cedar
sturdy compass
#

:(

worthy stirrup
glad osprey
#

literally thats it

red flower
#

what about brainstorm

ancient sun
#

listen folks violence is never the answer

glad osprey
#

that uses the exact same system

worthy stirrup
sturdy compass
#

Same deal