#💻・modding-dev

1 messages · Page 544 of 1

solid mesa
#

oh

hybrid shadow
#

xchips is base smods

brittle tide
#

oh didnt know

#

well emult

solid mesa
hybrid shadow
solid mesa
hybrid shadow
#

dam

thick drift
#

wait, is it impossible to do emult in vanilla code? Haven't gotten to it in my project, but I have at least one joker I want to square mult

solid mesa
#

what emult was?

#

^mult?

thick drift
#

Yes

hybrid shadow
#

emult is ^mult

rancid kindle
#

Oh… I didn’t know talisman added Emult.

I just.. coded it myself for my mod, it’s not glowy like cryptid but-

solid mesa
#

yes you can
but it is still recommended to use talisman for these type of mods

thick drift
#

I guess it's good to know - one less problem for me to code

subtle merlin
#

Couldn't you just return xmult = mult or smth?

brittle tide
#

the emult joker of mine I tried to do for a while in vanilla before I realized that talisman just gave an ability for it

hybrid shadow
#

how would i make it so cards created with this sticker also properly give their effect

thick drift
#

@brittle tide If Talisman is required for your mod, I'd recommend setting it's priority lower than Talisman just to ensure Talisman is loaded first. Idk if it's guaranteed to load first with the way Steammodded works, but might help safeguard some issues down the line

red flower
#

i think it needs to be in the apply function

hybrid shadow
#

hold up lemme screenshot that then

solid mesa
thick drift
#

Iirc it's lower number gets loaded first, but let me double check real quick

red flower
#

correct

#

it doesn't really matter for talisman because it's a lovely mod

solid mesa
#

oh ty

red flower
hybrid shadow
red flower
#

ohh hmm

hybrid shadow
#

lemme grab a vid rq

red flower
#

it makes sense because the area is probably not the hand when it's created

#

maybe if you add an event it might work

hybrid shadow
#

where would i add the event

red flower
#
--pseudocode because im on phone and its 1 am
add_event{
    func = function()
        if card.area == G.hand and ....... then
        SMODS.change_play_limit(...)
        ...
        end
        return true
    end
}
hybrid shadow
#

actually im a bit curious if part of the issue is me not allowing the changing of the limits if the card already has the sticker when apply is run

#

but lets see if the add_event works

#

oh god i forgot to return true

subtle merlin
#

Question: I'm adding a card to a scoring hand without altering the hand type, and I want it to also score that hand. However, I can't seem to make it score no matter what I mess with. Is there a way to do this without making a new enhancement/edition/sticker/hook?

thick drift
#

You mean like DNA but into hand played?

subtle merlin
#

Not exactly, currently it's:

Hand played
Card added
Original hand scores, card doesn't

#

I want the card to score, as well

daring fern
thick drift
#

So it's not added to the same area as the scoring cards?

subtle merlin
#

Hold on a sec

#

Example of what happens and the code
-# (I already fixed the bug shown here, this is just the only video of it I have on hand)

#

Wait I may be stupid this doesn't show the issue

#

If that ace was a two it wouldn't have scored, but I would want it to score still

wheat jewel
#

This isn't working properly, i wanna retrigger cards with an edition but idk if i'm checking it correctly

#

would i use other_card?

hybrid shadow
subtle merlin
# wheat jewel

Can context.repetition and context.individual be true at the same time?

thick drift
daring fern
wheat jewel
daring fern
subtle merlin
#

before works for how i want the card to be added, but it means the card doesnt score. press_play makes it score but changes the hand type sometimes

heavy frigate
#

Is there a way to add a non-legendary joker to The Soul?

thick drift
#

you can reprogram it with SMODS.Consumable:take_ownership and creating a new use function with some probability to select from either a legendary or some other joker

heavy frigate
#

Oh, so a pain either way. Because i would preferable just have my joker be Legendary, but the game forces a set unlock condition on all legendary jokers.
And i guess dealing with a single function is way simpler than creating a patch.

thick drift
#

couldn't you just have the set unlock condition return true so that it's always unlocked?

heavy frigate
hybrid shadow
#

how would i have a card modify specifically wheel of fortune's probability?

placid star
#

im not sure how, but you'd need to look at the documentation for the function on SMODS

manic rune
#

(sorry i just woke up)

modern kindle
manic rune
#

:3 nah

umbral briar
#

I'm trying to make a joker get unlocked when you win a run with a specific joker, but I can't seem to figure it out. this is what my dumb little brain thought might work but it doesn't

    check_for_unlock = function(self, args)
        if args.type == 'win_custom' and G.jokers then
            if G.jokers == 'modprefix_joker' then
                return true
            end
        end
        return false
    end
heavy frigate
#

But that way the unlock condition wouldn't be dependent on winning a run to unlock, and would unlock if the relevant joker already had a win

umbral briar
#

I'll try that

slim ferry
#

Use SMODS.find_card instead to check for the joker

umbral briar
#

yippee! it works! thank you!

#

upon further inspection, it doesn't work. I'll have to try and tinker with it

slim ferry
#

I think you would have to do if next(SMODS.find_card("<key>")) maybe

bold sleet
#

Hi chat. Question: When does SMODS save your mod settings, and is there a way to make SMODS save your settings?

#

*i did some notepad testing on the settings.jkr file and it seems to be quite inconsistent on when it saves.

solid mesa
bold sleet
#

Because I got VSC occupied with actual debugging.

solid mesa
#

and VS?

#

oh no nvm

#

i thought VC

bold sleet
#

help

#

Tonsmith is breaking because it doesn't want to save the config

umbral briar
rotund sable
#

Multiply the numerator by 2

#

There could be some typos because I wrote this on mobile

bold sleet
#

Like, the mod's settings menu, or any page I add with extra tabs.

solid mesa
#

out of my hands

#

ask another person

bold sleet
#

uh... @manic rune idk, you are the UI guy joglawizardcuts

candid elbow
#

Psps

daring fern
manic rune
bold sleet
#

oh

#

please return to Tonsmith we still need that fucking search function joglawizardcuts

manic rune
#

wat

#

u can do it urself :3

placid star
manic rune
#

its just some simple string logic lmao

#

string.find and allat

bold sleet
#

dies

#

There aren't like, any soundpacks yet so uh...

#

We'll pretend search doesn't exist.

manic rune
#

a search function is nice to have though

bold sleet
manic rune
#

??

bold sleet
#

It ain't saving

manic rune
#

that doesnt do anything since you arent even saving into the config of the mod

bold sleet
#

i do not know how to use that

#

I just copied and pasted what you sent

#

and hoped for the best

manic rune
#

create a config.lua file

bold sleet
#

We already have one

candid elbow
#

We

bold sleet
#

I am not the only one working in Tonsmith.

manic rune
#

then you should be changing SMODS.current_mod.config["whatever"]

daring fern
#

How does one make is so Seals and Enhancements can naturally show up on non-playing cards and Editions can naturally show up on non-jokers and non-playing cards?

bold sleet
#

amazing, now it crashes because it can't find the table™

#

kill_me

solid mesa
wintry solar
#

current_mod only has a value during initial loading

manic rune
#

mm might want to change the timing of that code, then

wintry solar
#

assuming you have something like Tonsmith = SMODS.current_mod somewhere, you can just do SMODS.save_mod_config(Tonsmith) whenever you need it to save

#

not in update

manic rune
#

i wonder who would even do that in update lmao

subtle merlin
manic rune
# subtle merlin I may need a bit more explanation to understand how that'll fix it...
  1. change your context.before back to context.press_play lmao
  2. context.modify_scoring_hand will run through all the cards in G.play.cards with context.other_card preresenting each one, so adding a flag like
if context.press_play then
  local chosen_card = ...
  chosen_card.always_score = true
end

if context.modify_scoring_hand and context.other_card.always_score then
  return{
    add_to_hand = true
  }
end

will make it so the context checks what card is added, and will also make it scored

subtle merlin
#

Will this also make it so that if I play a 5, and an ace gets added to the scoring hand, both will score?
-# I'd check it instead of asking but I'm not at my computer and won't be for awhile so I thought I might as well ask instead of waiting to get back to my computer

cosmic egret
#

what would be a way to make a deck have the ability to only force my jokers into the pool because I wanna make it so no normal jokers spawn

red flower
cosmic egret
red flower
#

yes

ashen drift
#

💔

manic rune
#

you are adding cards before the poker hand evaluation, so A will be initially scoring first

cosmic egret
#

i just tried and realized i have no clue where to start😭

red flower
#

decks have an apply function, in that function iterate through G.P_CENTER_POOLS.Joker and check for not v.original_mod or v.original_mod.id ~= "your mod id". If that's true then you add v.key to the banned_keys table

subtle merlin
manic rune
#

there is

#

patch into the place i told you before

red flower
#

what do you need to patch?

manic rune
#

uhh adding a card into the scoring hand without changing the poker hand

#

and making it so the card can still score afterwards

red flower
#

you can maybe use the evaluate_poker_hand context instead

manic rune
#

🤔 that exists?

#

i added a new context here lol

red flower
manic rune
#

3:

#

damn it

subtle merlin
#

So much has been added to SMODS, I'm excited for the next release version

ashen drift
#

why does this code modify TNSMI.reference

daring fern
ashen drift
#

what??

daring fern
ashen drift
#

huh ok

#

thanks

red flower
#
a = {}
b = a
a == b -- true
#

because they're referencing the same table

ashen drift
red flower
#

no

#

{} == {} is false too

ashen drift
#

huh ok

red flower
#

tables are all different objects

ashen drift
#

ok copy table just closes the game for some reason

red flower
#

does TNSMI.reference have cards in it

ashen drift
#

yeah actually

red flower
#

try SMODS.shallow_copy

daring fern
ashen drift
#

alright

versed swan
#

Question for anyone familiar with the Operator API (latest SMODS dev), is it possible to make "independent values" that aren't affected by hand level ups nor reset every round/hand/etc.?

wispy falcon
#

How do I destroy a random Joker and replace it with a specific Joker?

manic rune
wispy falcon
#

Okay, gonna try that. Thank you :3

wispy falcon
#

What am i doing wrong?

        local replaceJoker = pseudorandom_element(G.jokers.cards, "replaceJoker")
        card:start_dissolve(replaceJoker)
        SMODS.add_card("j_cstorm_washed_card")
    end```
manic rune
#

yes

#

card doesnt exist

faint yacht
wispy falcon
manic rune
#

i actually thought about using that too but start_dissolve also gives the animation so idk (i havent used SMODS.destroy_cards that much)

red flower
#

destroy cards calls start dissolve but also does thing like getting sliced and the like

manic rune
red flower
#

and respects shattering

faint yacht
#

Handles shattering too.

wispy falcon
#

Should I use that instead then?

red flower
#

and in general it's just good to use smods utils so you get any support in the future

manic rune
#

true

red flower
wispy falcon
faint yacht
#

I've just returned from bureaucracy trippings... and I do have just one instance of :remove() being used instead of SMODS.destroy_cards for start of run with a deck.

red flower
#

ah i didnt notice it was a tag because it's missing the context

wispy falcon
#

Why is my tag not disappearing after it's activated?

red flower
#

you need to call tag:yep iirc

manic rune
#

gotta love the function name there

frosty rampart
#

yep 👍

wispy falcon
red flower
#

idk

wispy falcon
#

It doesn't crash without, so I guess not?

glass scaffold
#

Seems to be crashing every time the Yellow Enhancement is triggered. Anyone know what's going on?

red flower
#

talisman..

wispy falcon
#

Okay, how do I make it, so the tag is only able to spawn if G.jokers.cards isn't empty?

red flower
#

tags have in_pool but you could also sell all jokers before skipping

#

i would make it nope or not trigger if its empty

wispy falcon
#

Okay

fickle vale
#

Anyone know how to make a joker not appear in the shop?

red flower
fickle vale
#

Not spawn naturally

glass scaffold
red flower
#

idk if its fixed in other versions

glass scaffold
#

So lemme guess, I need to add:

if G.GAME.dollars <= to_big(5) then
    -- code
end```

in the calculate function?
red flower
#

no in this case the problem is the return

#

i think you need to use lenient_bignum

#

but idk how that works

wispy falcon
# red flower i would make it nope or not trigger if its empty

This crashes my game...

            local replaceJoker = pseudorandom_element(G.jokers.cards, "replaceJoker")
            SMODS.destroy_cards(replaceJoker)
            SMODS.add_card{key = "j_cstorm_washed_card"}
            tag:yep("Washed", G.C.BLUE)
            tag.triggered = true
        else
            tag:yep("NOPE", G.C.PURPLE)
            tag.triggered = true
        end```
red flower
#

what's the crash
also G.jokers.cards is never nil

wispy falcon
red flower
#

and also there's tag:nope haha

wispy falcon
#

Oh xD

red flower
#

do #G.jokers.cards > 0

wispy falcon
#

It works now, thank you. What does the # do before G.jokers.cards though?

red flower
#

length of the table

wispy falcon
#

Good to know

mystic river
#

is there a way to use vanilla atlases

red flower
mystic river
#

i'm making a mod that turns every vanilla joker into a deck
so i want the decks to use the vanilla joker art

red flower
#

I think if you add prefix_config = { atlas = false } and then use atlas = "Joker" it will work but I haven't tested

mystic river
#

aha
i forgot about prefix_config

#

... which calculate contexts get passed to a deck? i am unsurprised to learn that joker_main is not one of them (it's not a joker after all :v)

red flower
#

i think it's most of them, but decks use main_scoring instead of joker_main iirc

plain apex
#

currently making this what values in extra do y'all use for your scaling jokers currently checking for
extra.mult_add or extra.multadd or extra.mult_mod or extra.multmod or extra.xmult_add or extra.Xmult_add or extra.Xmult_mod or extra.x_mult_add or extra.x_mult_mod or extra.xmult_mod or extra.x_chips_add or extra.xchips_add or extra.x_chips_mod or extra.xchips_mod or extra.scaling

red flower
#

i dont have a consistent naming convention but i use x_gain too

#

and x_loss

plain apex
#

well if anyone else want their value added let me know i think that should cover most of them hopefully

slim ferry
#

You could also just use the calc_scaling stuff thats currently in smods beta, that seems like it would be much easier here

hushed field
#

yeah, that's probably the way to go

faint yacht
#

...should probably also utilize it myself. 😅

glass scaffold
#

So somehow this has just stopped applying the eternal sticker for some odd reason.

plain apex
frosty rampart
#

i'm sure it'll be documented when the next release happens
(which should be soon iirc)

#

i know "just wait" isn't a great answer but i'm not familiar with it either so if someone else wants to explain it pls go ahead

plain apex
#

well my next release is probably also soon so im either going with what i currently have or fixing that later lol

faint yacht
#
---@param card Card|table
---@param args? table|{ref_table: table, ref_value: string, scalar_value: string, scalar_table: table?, operation: string?}
---@return table? results
--- Tells Jokers that this card is scaling allowing for scaling detection
--- Can return scaling_value and scalar_value in results to change the scaling cards values
--- Args must contain `ref_table`, `ref_value`, and `scalar_value`. It may optionally contain `scalar_table`, used in place of `ref_table` for the `scalar_value`, and `operation` to designate the scaling operation, which defaults to `"+"`
function SMODS.scale_card(card, args) end

from https://github.com/Steamodded/smods/blob/a1804b42d51d94a98483d5332100a29790168643/lsp_def/utils.lua#L692

GitHub

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

plain apex
#

so what exactly would i do here to use that?

calculate = function(self, card, context)
        if (context.retrigger_joker_check 
            and not context.retrigger_joker 
            and context.other_card ~= self 
            and context.other_card.ability 
            and context.other_card.ability.extra) then
            local extra = context.other_card.ability.extra

            -- Only retrigger if Joker has one of these scaling fields
            if extra.mult_add or extra.multadd or extra.multgain or extra.mult_gain or extra.mult_mod or extra.multmod or extra.xmult_add or extra.Xmult_add or extra.Xmult_mod or extra.x_mult_add or extra.x_gain or extra.x_mult_mod or extra.xmult_mod or extra.x_chips_add or extra.xchips_add or extra.x_chips_mod or extra.xchips_mod or extra.scaling then
                if pseudorandom('Subscribe') < G.GAME.probabilities.normal/card.ability.extra.odds then

                    return {
                        message = localize('k_again_ex'),
                        colour = G.C.Mult,
                        repetitions = 1,
                        card = card,
                    }
                end
            end
        end
    end,
red flower
#

the reason i didnt propose it is because affecting scaling and detecting scaling jokers is very different

#

same when people try to detect probability jokers

#

speaking of which you should be using the new probability functions lol

plain apex
#

theres new ones?

plain apex
#

damn thats how i've done like every probability thing in my mod

red flower
#

i mean that was the old way yeah

hidden notch
frosty rampart
#

it's a tedious change but definitely worthwhile

plain apex
#

will the old way still work as intended or do i need to go through every probability based thing ever?

red flower
#

it will only work with oops or anything using the old system of modifying the global

#

it wont support mods using the new contexts

hidden notch
#

What would I need to add, so that this gets only executed once?
It currently triggers it's effects for every playing-card in the deck :')

if context.end_of_round and context.cardarea == G.deck then
    -- Some Code here
    return { message = localize('k_reset') }
end
plain apex
red flower
#

is context.main_eval on decks in smods release? hmm

hidden notch
#

We will see, but also thank you for the answer grannylaugh

red flower
#

if it's not in the latest release then do what Eric said

#

you might need to drop the context.cardarea

plain apex
#

did they change context.cardarea too?

red flower
#

no

hidden notch
hidden notch
plain apex
#

its fine

red flower
#

well it will work in a couple of days so i wont change it :3

hidden notch
#

Very fair lewxen_sparkle lewxen_Teary_Laugh

#

I was already planning a week of Bugfixing, guess I'll wait for the next release then EspeonBooo

stiff locust
#

it will just use the vanilla sheet

mystic river
#

yeah but i don't want the vanilla deck sheet

plain apex
stiff locust
mystic river
#

really? weird

stiff locust
#

I know this because I've accidentally done this on several occasions

#

:)

red flower
#

i dont think thats true

#

vanillaremade doesnt use an atlas an its the deck atlas

plain apex
red flower
#

i dont think anyone has used oldcalc since cryptid updated like 8 months ago

plain apex
#

yeah i dont either but i still have that option there in my config if somebody was for some reason lol

modern kindle
#

Im going to dev on old calc

red flower
#

use pre-lovely smods

modern kindle
#

Would you support my endeavors

void idol
#

I'm trying to make a malverk texture pack but i keep getting this error

#

can anyone help

red flower
plain apex
modern kindle
red flower
#

i never support old stuff because i dont have the time to maintain multiple systems

modern kindle
#

I usually dont change things until its broken

#

A rare exception was the probability changes which I changed same day

plain apex
#

cause new calc broke like almost everything i was doing and everyone was using it lol

wintry solar
#

The new calc transition is vastly blown out of proportion, it wasn’t even that bad. I think people just think it was bad because cryptid/pwx just didn’t switch over for literally months

frosty rampart
#

i think if you're using a 0.X version of anything you should expect shit to change in a way that requires you to change things on your end. even if it's 0.9.8

modern kindle
stiff locust
#

supporting a codebase that is 9 months outdated and counting is trying too hard to be quirky

modern kindle
#

Its called being retro :///

plain apex
#

man just wants to be so retro

frosty rampart
#

so retro (adds spy cryptid to my mod)

faint yacht
#

so retro

plain apex
#

so retro

red flower
#

retro is like windows 3.1

faint yacht
#

Vintage then?

stiff locust
#

type beat

faint yacht
#

'cause this would be.

plain apex
modern kindle
faint yacht
#

95, 98, ME / NT4, 2000, XP are retro then.

modern kindle
#

its weird because apparently the actual meaning of retro is not what ive used it as

#

cause apparently retro is new items just appearing old

#

where vintage is old and specific to the era

red flower
tired kestrel
faint yacht
#

...that's a bit too broad - FreeDOS still exists.

red flower
#

actually retro is like windows 7 now im just referencing that sanae meme

red flower
faint yacht
#

That'd be retro then.

plain apex
#

imagine if old windows came with balatro instead of solitare

frosty rampart
#

retro is when corporations pander to your specific childhood experiences /j

red flower
#

the xbox 360 is 20 years old

faint yacht
#

Now, FreeDOS on an a 8086...

red flower
#

i should get that DOS game pack for my mister

slim ferry
#

2020 was 50 years ago

frosty rampart
#

balatro is celebrating its 75th anniversary tomorrow

slim ferry
#

The ps5 is 500 years old

gilded blaze
#

I moved SKHDecks to that without redoing the test

wispy falcon
#

How would I change the sprite of something like jimball from cryptid does? Do I use update to switch the sprite to the next so it's animated?

red flower
#

yes

wispy falcon
#

And then with a loop that increases x and y when needed?

red flower
#

you wouldn't loop in update

#

you would just changes the values based on the time

floral narwhal
#

how can i debuff two suits in a blind?

red flower
# wispy falcon How?

update has a dt argument for time or use G.real_dt or G.TIMERS.REAL if you dont care about the game speed

wispy falcon
#

Okay, thanks :)

keen tiger
#

are balatro's translations considered proprietary like balatro's code?
im working on a project where im using a slightly patched translation set (hard to explain why) and im unsure if its okay to publically check them in to github

red flower
#

probably

#

vanillaremade uses them tho :3

fervent flume
#

i was trying to do a joker that retriggers enhanced cards but it is not working, can someone explain to me how to make it work?

red flower
#

instead of has_enhancement do next(SMODS.get_enhancements(context.other_card))

#

has_enhancement is for checking for a specific one

fervent flume
#

thanks it is working now

languid canopy
#

hello there, what is happening ? am i missing something ?

red flower
#

you posted everything except the actual definition of the consumable lol

languid canopy
#

like the code of it itself

#

wait

red flower
#

my guess is that the consumable type is either wrong or non existent

languid canopy
red flower
#

did you define a ConsumableType?

languid canopy
#

i may have not

#

howd i do that

languid canopy
#

smods.consumabletype ig

#

thx ill try that

crimson tapir
#

how do i make a texture pack with steam modded

languid canopy
#

is that a matter of skill issue ? the new consumable thingy works but now i dont know if the error is sm to do with localization or anything else

red flower
#

yeah its missing the localization

languid canopy
#

goes in dictionary ?

red flower
#

it goes in a couple of places i dont remember

languid canopy
#

oh alright

#

time to investigate

#

¯_(ツ)_/¯

red flower
#

just ctrl+f vremade_tarot on vanillaremade's loc file

robust marsh
#

hello, I'd like to know if there's a way to make a SMODS joker always be eternal?

languid canopy
#

thx

red flower
crimson tapir
#

how do i make my sm mod replace the already existing art of a joker

languid canopy
#

this is not the actual name tho, i forgot

robust marsh
crimson tapir
wintry solar
#

You mean DeckSkins?

crimson tapir
#

yeah but with jokers instead

wintry solar
#

Yes its called Malverk

crimson tapir
#

does it use code or is it another thing

thick drift
#

So I have tried making this bit of code that is meant to increment the xmult of a joker when a class of jokers is triggered. I currently have it to check the joker's key with a table of valid keys. This code worked when I used context.other_joker, but I when I switched it to context.post_trigger, my reference to the joker no longer worked and using context.other_card didn't help either. I've tried having a key_append value in context.other_ret, but that doesn't seem to work either. Any ideas on how else I can evaluate which joker just triggered?

hushed field
#

Context.other_card should still work in post_trigger

#

Oh, I see

#

Other_card

#

Can you show your code?

thick drift
#
            local potion = false
            for _, k in ipairs(POTIONS) do
                if context.other_ret.key_append and context.other_ret.key_append == k then -- this is my latest attempt, I previously used context.other_card.config.center_key
                    potion = true
                    break
                end
            end
            if potion then
                print('success 2')
                card.ability.extra.Xmult = card.ability.extra.Xmult + card.ability.extra.mult_mod
                return {
                    message = localize {
                        type = 'variable',
                        key = 'a_xmult',
                        vars = {card.ability.extra.mult_mod}
                    }
                }
            end
        end```
hushed field
#

What values does POTIONS contain, exactly?

thick drift
#

a list of key values for specific jokers

crimson tapir
# wintry solar You mean DeckSkins?

im trying to do this lua function SMODS.INIT.DecColors() local dec_mod = SMODS.findModByID("newcards") local sprite card = SMODS.Sprite:new("cards_1", dec_mod.path, "newcards.png",71,95,"asset_atli") sprite_card:register() end with jokers instead of the deck

wispy falcon
#

How do I use G.TIMERS.REAL in the update function to change the sprite?

wintry solar
crimson tapir
#

so does your thing use code to replace the jokers or is a seperate add on to balatro that manages texture packs

robust marsh
#

I'm having a bit of trouble.. I know that you can make a deck start with certain jokers but how exactly do I handle custom jokers (SMODS.Joker)?

frosty rampart
#

j_[mod prefix]_[joker key] is the template for the key of any joker in the game. vanilla jokers are just j_[joker key]. the mod prefix is whatever the author defined in the mod's metadata. of course make sure that the mod actually exists on the player's side if you're adding a joker from another mod

robust marsh
crimson tapir
# wintry solar Both

so can i use it in a normal mod file so i can do the joker art replacement and do other things in the mod

wintry solar
#

Yes

crimson tapir
#

ok does it require the add on part

wintry solar
#

Yes

crimson tapir
#

ok thank you

harsh warren
#

i need help lol

#

im triyng to make a joker that makes gold cards give 3+ dollars

thick drift
#

isn't that what they already do? when/how do you want it to trigger?

harsh warren
#

yeah but i want them to give another 3

#

like 6

#

in simpler word

#

retrigger

thick drift
#

I'd imagine the best approach would be to have it be a repetition effect through context.end_of_round and context.repetition and context.individual and using ease_dollars([var]) or whatever method the mime uses to retrigger effects after checking that the card's enhancement is gold

harsh warren
#

alr thx

wispy falcon
exotic hedge
#

Due to, ahem, recent events we've got a new rule for https://discord.com/channels/1116389027176787968/1209506360987877408 and https://discord.com/channels/1116389027176787968/1233186615086813277:

Discussions regarding the use of AI and AI tools is now strictly prohibited in these channels.

Given that nearly every mention of AI here tends to result in conflict, argument, and the inevitable mods ping, we've determined this is not a place the discussions surrounding this technology.

Furthermore, there is a zero tolerance policy for the discussion of training AI models or tools on Balatro, or Balatro mods. I'm not kidding, this is going to be ban on sight. Discussion of this, allusion to discussions of this, cute winks and nods to discussion of this will result in an immediate ban.

These items have lead to just an unnecessary amount of strife and drama amongst a substantial swath of the community, and so for everyone's sake those discussions are now over.

This rule does not expresss an opinion on the validity, utility, or usefulness of these technologies and is simply for the purpose of maintaining the smallest modicum of civility.

crimson tapir
#

can anyone tell why im getting this error lua AltTexture({ key = 'rrjokers', set = 'Joker', path = 'joker.png', loc_txt = { name = 'rrjokers', } }) TexturePack({ key = 'rrjokers', textures = {'rrjokers'}, loc_txt = { name = 'riffraff', text = {'A mod that replaces the joker textures with ones the size of the joker icons on the riff raff joker.'} } })

wispy falcon
crimson tapir
rotund sable
#

bump

slim ferry
#

me when im driving

rotund sable
wispy falcon
crimson tapir
#

oh ok

wispy falcon
rotund sable
#
update = function(self, card, dt)
    local FPS = 6
    local total_frames = 40
    if card.ability.extra.delay == 60 / FPS then
        card.ability.extra.x_pos = (card.ability.extra.x_pos + 1) % total_frames
        card.children.center:set_sprite_pos({x = card.ability.extra.x_pos, y = 0})
        card.ability.extra.delay = 0
    else
        card.ability.extra.delay = card.ability.extra.delay + 1
    end
end,
#

back then i didn't know G.TIMERS.REAL existed

#

so im not sure if a solution with that is better or not

wispy falcon
ocean sinew
#

like If game speed is higher the update speed runs faster????

#

I have some things coded which use timers so I wanted to know

wispy falcon
ocean sinew
#

ok thats good then

frosty rampart
# wispy falcon N told me that I could use `G.TIMERS.REAL` for that but I can't find anything ab...

consider that the update function is run once per frame, but that frequency tends to vary because the game runs at different framerates between systems and can even fluctuate mid-game
then consider that debugplus lets you use eval in the console to get the value of any variable in the game. like, for example, G.TIMERS.REAL. that way you can figure out exactly how that timer works and how to use it to track a consistent speed in your update function. like, for example, 1/60th of a second

ocean sinew
# red flower yes

If I wanted to track the actual time passed then I just do dt/G.TIMERS.REAL?

ocean sinew
red flower
#

no just G.real_dt

ocean sinew
#

how would I do something whenever 10 seconds passes though for example

frosty rampart
# wispy falcon Okay, what?

i'm trying to guide you to find the solution yourself. partly so that you can pick up on programming skills that are useful for balatro modding in general, and partly because i myself don't know what exactly G.TIMERS.REAL measures off the top of my head, and i have laundry to do so i don't want to boot up balatro and check at this moment

red flower
#

or save the starting time of G.TIMERS.REAL and check until the starting time + 10 is true

timid zinc
#

is there any way to have additional text for an object in only the infobox? i have an enhancement that adds additional chips when applied and it appears fine in the collection and on applied cards as in the 1st image but the infobox referencing it just has the first part

ocean sinew
red flower
#

no

#

real_dt s the deta time so it's the time since the last frame

#

it's not a timer

wispy falcon
ocean sinew
#

oh

#

so I would just add outside_variable with G.real_dt

red flower
wispy falcon
#

Okay

ocean sinew
#

like outside_variable=outside_variable+G.real_dt

red flower
#

i use drawstep because i share the sprite with multiple cards

red flower
ocean sinew
#

thanks

#

I was adding with the dt from the update function before

#

so some stuff in my mod that uses timers are probably incorrect

red flower
timid zinc
#

why didnt i think of that

#

thank you!

crimson tapir
#

can anyone tell why im getting this error lua AltTexture({ key = 'joker', set = 'Joker', path = 'Jokers.png', loc_txt = { name = 'jokers', } }) TexturePack({ key = 'joker', textures = {'jokers'}, loc_txt = { name = 'riffraff', text = {'A mod that replaces the joker textures with ones the size of the joker icons on the riff raff joker.'} } })

#

im useing malverk

frosty rampart
#

you need your mod prefix when you add textures to the texturepack
so i.e. the AltTexture just has key = 'rrjokers', but when you're defining the TexturePack it needs to be textures = { 'modprefix_rrjokers' }
the modprefix is the prefix you decided on when you made the metadata for this mod

crimson tapir
frosty rampart
#

when you're defining the TexturePack

crimson tapir
#

is there a way to make it automatically applied

wind steppe
#

is there a way to remove the mod badge from a joker i made

ocean sinew
#

set_badges

crimson tapir
#

does anyone know of an online tool i can resize the balatro textures to 2x without anti aliasing

ocean sinew
#

Idk of a online tool but u can use krita + nearest neighbor

slim ferry
ocean sinew
#

I FIGURED IT OUT

#

I FIGURED IT OUTTTTTTTTTTTTTTTTTTTTTTTTTTTTT

#

TOLD YALL IT WAS POSSIBLE

rotund sable
#

You just spam every channel saying that

#

And no one knows what you mean

bold sleet
#

"3 blocked messages"

#

If you know, congrats. If you don't, you can probably figure it out.

ocean sinew
rotund sable
ocean sinew
#

And this time It's with a ast parser

slim ferry
#

Because discord

bold sleet
#

amazing

glass scaffold
#

How do I increase the chances of Jokers from a specific mod appearing?
(Using SMODS.Voucher for this)

red flower
#

There's not really an easy way to change chances for specific cards yet

subtle merlin
red flower
#

ok we don't need to keep talking about this

ocean sinew
glass scaffold
red flower
#

yeah, reimplement the entire pool system. I have done it, I don't recommend it

#

just wait until smods adds a solution

robust marsh
#

I'm working on a joker that's exclusive to a single deck, how can I make it unable to appear in the normal joker pool (packs, shops, etc.)

red flower
#

If they're jokers from your mod you can also give them a custom rarity

robust marsh
#

ty

frosty rampart
#

more specifically, just make the function always return false (you can still manually create the joker regardless of in_pool)

robust marsh
#

yeah the deck naturally starts with said joker so my main concern was it appearing outside of it. Thank you both 👍

wind steppe
#

how would i remove the mod badge from a spectral card i made entirely?

royal badger
#

why does the game round up my xmult from 1.987 to 1.99 and can I change that?

royal badger
#

Im testing it with my own mod

bold sleet
#

Trust me, I tried math.pi and it only spit out 3.14

royal badger
bold sleet
#

I mean, in theory everything is changeable./

#

But I would not recommend you get into that.

red flower
#

i think the game actually uses the whole number

#

you would probably need to make them into strings to display it properly

timid zinc
#

marquee or no marquee

red flower
#

i hate marquee

timid zinc
#

i mean hey you can disable it for mod badges

wispy falcon
#

How do I change the colors of my message from my joker? message = "Something"

red flower
frosty rampart
#

you can use the colors listed in the Text Styling page on the wiki (the value, so e.g. "G.C.RED")

bold sleet
#

Or anything under G.C

royal badger
#

what did I do wrong that only one message from that 2 is shown?

wispy falcon
red flower
red flower
royal badger
royal badger
# red flower can i see the code
                    xmult_message = "X1.987",
                    -- remove_default_message = true,
                    xmult = card.ability.extra.fred,
                    chips_message = "+1987",
                    chips = card.ability.extra.chips
                }```
red flower
#

oh yeah i forgot it takes a table

#

xmult_message = { message = "X1.987", colour = G.C.MULT }

#

it's also chip_message sorry

royal badger
#

and also, is there a way to implement a video before the joker starts scoring? like the video plays and goes away on its own after it finished

red flower
#

everything is possible with the magic of computers

#

but i couldn't tell you how to do it haha

neat leaf
#

Is there a UI config for individual padding directions? I have padding = 0.05 but I want the left padding to be 0

red flower
neat leaf
#

hmm. I might be able to embed this G.UIT.C inside another G.UIT.C where the outer one has full padding but the inner one doesn't

solemn shuttle
#

this is a goofy question to ask but is there any way, like on the screen, you can position a created card/joker on the screen

say if i wanted it to show up at the top of the screen and glide into the joker slots or smth like that lmao

#

ive been thinking about doing smth with love.draw but im not sure if that would be the Method

neat leaf
#

yes, there's a way to do this

red flower
neat leaf
#

config.offset.x and config.offset.y, inside a UIBox with config.major = G.ROOM_ATTACH (I think)

#

this assumes you don't have a CardArea you're trying to leverage

#

if you have a CardArea, then use that (and I can't help here; my knowledge really only extends to how tags are drawn)

solemn shuttle
#

hmmm
-# i have very little experience with ui so i may have to look into that more 😭

solemn shuttle
#

would it be smth id add to like SMODS.add_card or should i use a different function

red flower
#

if you want the card to just come from out the screen the easiest way is to use add_card and first place it in G.discard which is what vanilla does

timid zinc
#

what does this mean? can i trigger a deck on normal contexts like a joker

red flower
#

yes

solemn shuttle
#

ty lol

brittle yacht
#

is there a limit to deafult_weight on a rarity?

#

i put 100 for it to be extremely common, and i never saw it rerolling 30 times.

royal badger
#

I tried to add a video but the game crashes everytime and says theres something wrong with the love.graphics.draw and I dont really know whats wrong with it. can somebody help?dead

daring fern
brittle yacht
daring fern
brittle yacht
# daring fern Code?
SMODS.Rarity {
    key = 'commoner',
    loc_txt = {
        name = 'Extremely Common',
    },
    badge_colour = G.C.UI.TEXT_INACTIVE,
    default_weight = 10
}```
#
SMODS.Atlas {
    key = 'debit',
    path = 'momcard.png',
    px = 71,
    py = 95
}

SMODS.Joker {
    key = 'debit',
    loc_txt = {
        name = "Debit Card",
        text = {
            'Go up to {C:red}-$0{} in debt'
        }
    },
    atlas = 'debit',
    pos = { x = 0, y = 0 },
    rarity = 'silly_commoner',
    cost = 1,
    unlocked = true,
    discovered = true,
    pools = { ['SillyPool'] = true, ['AllSillyPool'] = true, },
}```
daring fern
brittle yacht
daring fern
brittle yacht
#

but they are both 0 and 0.01

#

i guess

#

anyway

#

so just like

    key = 'commoner',
    loc_txt = {
        name = 'Extremely Common',
    },
    badge_colour = G.C.UI.TEXT_INACTIVE,
    default_weight = 100,
    pools = {Joker = true}
}```
brittle yacht
#

ight thanks

daring fern
royal badger
turbid maple
#

havent actually read what youre doing but you can hook functions instead of overwriting them

unkempt thicket
#

How can i fix this spriting problem on base tags as cards?

#

It works fine on modded tags but not base for some reason

turbid maple
# royal badger so I need to do what..?
local ref_to_original = love.something // store reference to the original function
function love.something(arg)
  ref_to_original(arg) // the original function is left intact and runs as expected
  do_what_you_want() // stuff you're tacking on top of it
end
proven pewter
#

Hey CelebiHello , im new to modding and coding in general and i don't know what the tutorial video use for coding 😅

royal badger
turbid maple
#

its a variable

#

you store a reference to the function you want to hook

royal badger
daring fern
turbid maple
# royal badger quick fun fact I dont really know what hooking is<:lurk:922273269950873600>
Klei Entertainment Forums

In LUA, it is a very important concept to understand that everything is a variable and all variables may be edited in runtime. This includes functions. With modding other peoples' LUA files, like Klei's basegame code, you may find yourself wanting to run your code before or after the original fun...

#

if you care what the orig function returned yeah sure

turbid maple
frosty rampart
turbid maple
#

people will get into religious wars about them all it matters is that it can edit text

frosty rampart
#

my real recommendation is to go in raw with plain old notepad, not having syntax highlighting builds character /j

turbid maple
frosty rampart
#

i'm running with neovide for now (essentially just a GUI wrapper around neovim) but yea, i think if i weren't indoctrinated into vim as a preteen i'd be a big fan of N++

mossy quest
#

i also use it to write json for minecraft datapacks lol

turbid maple
#

fellow vim fan...

frosty rampart
cursive gazelle
#

I should really make a tutorial on how to mod explaining also the code and guiding people

mental nacelle
#
      return { remove = true }
end```
this should remove the card right? (when placed in the calculate function of an enhancement)
cursive gazelle
#

I’ve been saying this since 2 weeks

restive nova
#

Hi! I'm on mac but I've tested and this bug also happened on pc. Whenever I go into the stakes menu, the game crashes. I asked on the paperback server but they told me the bug comes from bunco. Is there a way to fix it?

bold sleet
#

"Don't have Bunco, then"

#

... and probably report the bug over there

frosty rampart
#

(we did not say the bug comes from bunco for sure, and in fact during testing the game still crashed with bunco turned off)

bold sleet
#

then idk

#

You have good luck on that. I am going to go sleep. It's 3 am

restive nova
#

alright sorry for bothering you

grim tundra
#

if i may ask, what does modify internal value do?

#

like does it increases all values of a joker like increasing its mult or osmething

subtle merlin
red flower
#

me neither

#

it would be easier if you coud call the evaluate hand function inside it haha

subtle merlin
#

I'm now messing with SMODS.score_card, but it either crashes or does nothing (as per usual)

red flower
#

can you give me the code you have now so i can test

subtle merlin
#
SMODS.Back {
    key = "necromancy",
    loc_txt = {
        name = "Necromancy Deck",
        text = {
            "Immutable 1/4 chance to Ressurect",
            "a previously destroyed card"
        }
    },
    pos = { x = 0, y = 0 },
--[[     config = {
        extra = {
            destroyed_cards = {},
            selected_card = nil
        }
    }, ]]
    calculate = function(self, card, context)
        if context.before then
            local CArd = G.hand.cards[1]
            G.play:emplace(CArd)
            G.hand:remove_card(CArd)
            SMODS.score_card(CArd, context)
            return {add_to_hand = true}
        end
        if context.modify_scoring_hand and context.other_card == G.play.cards[1] then
            return {add_to_hand = true}
        end
    end
}

-# it being a deck just makes this harder, doesn't it

#

also the description is what's planned, but that's the easy part n rn im just trying to get the add to hand and score part to work

crystal perch
#

could you elaborate or provide an example of this? i'm not sure how to use sort_id and it's only ever referenced once in the SMODS github

daring fern
subtle merlin
#

oohh

chrome token
#

Any help and reason as to why this doesn't work?? Trying to add a Poker Hand and I just do not understand how it works because I keep getting this error...

daring fern
chrome token
#

i have poker hands that do this same thing and they work just fine

#

(and also, i don't think it should affect SMODS not being able to find it, since prefix_config is an optional parameter...)

#

just to show

#

"btti" is the mod prefix 🥲

#

...ok so. quite the embarrassing mistake. i was trying to check the Run Info on a saved run that didn't have that hand prior...

manic rune
red flower
manic rune
#

your code seems to uh re-evaluate the poker hand too?

red flower
#

yes

manic rune
#

i dont think its necessary since thats already done 🤔

red flower
#

when

sturdy compass
#

Anybody happen to know of any mods that have a text-entry config option?

manic rune
#

in G.FUNCS.evaluate_play, it runs the evaluate poker hand function with the hand that includes the new card already

#

since context.press_play adds to G.play before that

red flower
#

i thought the problem was that they didnt want to include the new card

#

only count it for scoring

manic rune
#

oh yeah

red flower
#

my code reevaluates the poker hand without that card

manic rune
#

mm i kinda just patched a context after the evaluate poker hand function to add to the scoring hand without counting it lol

red flower
#

maybe adding it directly to the scoring hand in context before also works

manic rune
#

mhm

#

🤔

red flower
#

i was assuming it didnt lol

#

let me test

manic rune
#

actually no it wont work

#

the timing of context.before is a bit too late

red flower
#

it does work

#

the animation is wrong tho

manic rune
#

yeah the animation is above there

red flower
#
calculate = function(self, card, context)
        if context.before then
            local CArd
            for _, pcard in ipairs(G.hand.cards) do
                if not pcard.highlighted then
                    CArd = pcard
                    break
                end
            end
            if CArd then
                G.play:emplace(CArd)
                G.hand:remove_card(CArd)
                table.insert(context.scoring_hand, CArd)
            end
        end
    end
#

the animation of my other method was also kinda wrong

#

what if i call highlight_card

manic rune
#

mmm

#

u could replicate that, that would work too

red flower
#

that works for the highlight yay

manic rune
#

highlight_card(CArd, (#context.scoring_hand+1-0.999)/5,'up') should work?

red flower
#

the problem is that the text is still below but that was true of my other method

manic rune
#

:3 wat text

red flower
#

let me record

manic rune
#

wth lol

#

thats weird

gusty iron
#

That looks interesting

manic rune
#

maybe its because of how cards are added to scoring hand is kinda different?

#

not sure

gusty iron
manic rune
#

adds another card to the scoring hand without changing the poker hand

gusty iron
#

Oh fire

crystal perch
#

like splash?

manic rune
#

not really?

#

it grabs a card from your hand, and shoves it into the scoring hand

crystal perch
#

so even if you select 5 you can get 6

manic rune
#

mhm

#

i have an effect that does that too, but it doesnt have the message at the bottom so thats weird

unkempt thicket
#

How can i fix this spriting problem on base tags as cards? It works fine on modded tags but not base for some reason

subtle merlin
#

-# what am i even looking at-

manic rune
#

seems like a position issue idk

subtle merlin
unkempt thicket
manic rune
#

the <100% potency one has it so the added card has to be a part of the scoring hand for it to count too

#

the >=100% potency one has the added cards always scored

manic rune
#

maybe you could check if its a vanilla atlas specifically and change the position idk :p

manic rune
# red flower

cant help but notice that the shadow is wrong too actually

#

lol

#

it might actually be the draw_card part :p

red flower
#

i tried that but it didnt fix the message

#

im close tho

manic rune
#

but what im kinda confused about is my code shouldnt touch the draw_card but it works normally

#

weird

#

imagine its somehow more convoluted on newer versions 😭

red flower
# subtle merlin it works well enough for my needs, ill start working on the easier part of it, t...

well enough is not good for me

calculate = function(self, back, context)
    if context.press_play then
        back.in_scoring = true
    end
    if context.evaluate_poker_hand and back.in_scoring and not back.necromanced then
        local CArd = G.hand.cards[1]
        if CArd then
            back.necromanced = true
            CArd.necromanced = true
            G.hand:remove_card(CArd)
            G.play:emplace(CArd)
            table.insert(context.scoring_hand, CArd)
        end
    end
    if context.modify_scoring_hand and context.in_scoring and context.other_card.necromanced then
        context.other_card.necromanced = nil
        return { add_to_hand = true }
    end
    if context.after then
        back.in_scoring = nil
        back.necromanced = nil
    end
end
#

evaluate_poker_hand should have an in_scoring value

manic rune
#

🤔 what does the in_scoring part do

red flower
#

evaluate_poker_hand is called every time you select a card

#

it's also called twice when playing a hand

#

one for debuff the other for actual scoring

manic rune
#

oh lol

crystal perch
#

anyone know how i could make an effect trigger when adding/removing a seal
such as giving +1 hand size when the seal is added and -1 when it's removed
i'm asking because on the docs seals don't have add_to_deck, remove_from_deck, or apply as methods

red flower
red flower
timid zinc
#

i dont know why it's 1 in 1

manic rune
#

why dont seals have things like apply, remove now that i think about it

#

🤔

#

is this a pr worthy opportunity chat

subtle merlin
red flower
crystal perch
#

what would adding card_limit entail

red flower
#

what you want

#

it works like negative

crystal perch
#

i see

#

the thing is my seals are on jokers lol

red flower
#

oh well thats a somethingcom thing then

#

i feel like that shouldve been clarified in the question tho haha

crystal perch
#

fair

manic rune
subtle merlin
manic rune
#

whats your effect idea again

#

asides from the scoring one

subtle merlin
#

1/4th chance to "resurrect" a random card that was destroyed this run
-# (resurrecting being creating that destroyed card and doing the scoring thing on it)

daring fern
manic rune
#

the difficult part would be modded modifiers though ngl

crystal perch
manic rune
#

checking for enhancements, editions and seals is easy enough, but you cant really account for modded modifications unless you add them on your end

manic rune
crystal perch
#

very cool

#

so like a util function

manic rune
#

that should theroetically add apply(self, card), and remove(self, card) to SMODS.Seal

manic rune
#

same lol

#

cant really figure out a good way to do that

red flower
#

wait no i misread lol

#

its 1 am i should sleep

subtle merlin
#

Tomorrow I'll add what somethingcom suggested and do some more messing around then call it there because I am not asking for more help with this
(I already feel bad asking this much help)

manic rune
red flower
#

i was wordleing

#

the word was hard

#

not actually the word hard because thats 4 letters

manic rune
#

3:

#

i should wordle

crystal perch
#

wordle was a bit of a doozy today

red flower
#

im still proud of this it came out good

#

now i need to do the art for the jokers

subtle merlin
crystal perch
manic rune
#

delta?

crystal perch
#

i 1:1 recreated the code into my hooks.lua file, which i know is properly loaded, and wrote the seal out as so

#

oh wait

#

fuck

#

i'm tired

manic rune
#

doesnt seem like its an issue with the hooks lol

crystal perch
#

i wrote h_size not hand_size

manic rune
#

lmao

crystal perch
#

yeah it works

#

very cool

manic rune
#

mm realized i need to account for more stuff

#

especially self.added_to_deck

crystal perch
#

for my purposes this works because you can only ever manually apply these seals

#

but for inclusion in smods yeah

manic rune
#

oh i see

#

yeah that should be fine, but if the card with the seal appears in shop or booster packs rn then the effect will still apply lol

manic rune
#

whats the code that adds the playing cards at the start of run? i figured it out

gusty iron
craggy chasm
#

got permission to port someone's card skins to SMOD DeckSkin, and it's.... not showing up??? the files are there, but the cards are designless???

does anyone know what i did wrong
i want all the card skins to be usable in one big mod

foggy ginkgo
#

Make sure the correct pixels are in the correct places

#

X1 is 71 to smth while X2 is 142

cursive gazelle
#

Good morning

#

Does anyone know how can i display cards in config page / other page

craggy chasm
cursive gazelle
#

It’s probably not a pixel size issue if it was you would’ve gotten the same result just one pixel off

foggy ginkgo
#

Depends on what size you are viewing

#

Tho idk I had this problem before so

cursive gazelle
#

Yes but it won’t display a white canvas

foggy ginkgo
#

Shrug

cursive gazelle
#

How’s the teto mod doing btw

foggy ginkgo
#

One more left

#

How's your mod going

cursive gazelle
#

not much progress has been made mainly just seu pai working on talisman 2.0 and me figuring out ui and shader stuff

foggy ginkgo
#

Fun fun

#

You got a thread of your mod or nah

cursive gazelle
#

Nope

#

Will have when 1.0 release

craggy chasm
cursive gazelle
foggy ginkgo
#

Don't yiu need to make all the suits in one image

cursive gazelle
#

You can work around it

foggy ginkgo
#

Oh right pos

#

You don't got that

craggy chasm
cursive gazelle
#

Both

craggy chasm
#

because the card layout i used worked on a single card suit mod

#

but this is adding
3 x balatroclub
1 x balatrodiamond
2 x balatroheart
3 x blatrospade

  • all their high contrast versions
cursive gazelle
#

This one adds x3 of all suits and their high contrast

craggy chasm
#

oh that'd work

cursive gazelle
#

It also has only face cards

#

You can change the assets and stuff

#

Credits to aikoyori

craggy chasm
#

oh yeah this works now ty

#

now to mess with it more

cursive gazelle
#

Good luck

long sun
#

how do i apply a shader to a deck?

cursive gazelle
long sun
#

ya

cursive gazelle
long sun
#

cheers :3

cursive gazelle
#

This also draws a png on top

#

Just get rid of the unnecessary stuff

cursive gazelle
cursive gazelle
solid mesa
#

oh that explain the lack of description

cursive gazelle
robust marsh
#

How can I make another booster pack slot appear in the shop within a custom deck? I know it's possible but I have no clue how to implement it

long sun
#

Balatro modder reads (challenge)

cursive gazelle
cursive gazelle
ripe jacinth
#

how do i do animated jokers

long sun
#

crossmod with Aura, mainly

#

you could implement your own system, like what Phanta does, but it's better to just use Aura

#

-# unless you need something more complicated

ripe jacinth
#

so basically make aura a dependency

long sun
#

maybe not a dependency

ripe jacinth
long sun
#

you could make them non-animated if it's not installed

ripe jacinth
long sun
#

ah yeah that's definitely doable with Aura

robust marsh
ripe jacinth
#

i am way too dumb to do this from scratch

#

or implement this

#

HOW DOES THIS WORK.

cursive gazelle
ripe jacinth
#

do i add the lua file to my mod

#

for it to work???

cursive gazelle
#

Copy the inside and tweak it

daring fern
# ripe jacinth do i add the lua file to my mod
local other_dt = 0
function Game:update(dt)
    local g = oldgameupdate(self, dt)
    if G.P_CENTERS.j_modprefix_key then
        other_dt = other_dt + dt
        if other_dt > 0.2 then
            other_dt = other_dt - 0.2
            local center = G.P_CENTERS.j_modprefix_key
            if center.pos.x == 5 and center.pos.y == 3 then --Last frame of animation
                center.pos.x = 0
                center.pos.y = 0
            elseif center.pos.x < 5 then --If it isnt the right most image
                center.pos.x = center.pos.x + 1
            elseif center.pos.y < 3 then --If it isnt the bottom most image
                center.pos.x = 0
                center.pos.y = center.pos.y + 1
            end
            for i, v in ipairs(G.I.CARD) do
                v.children.center:set_sprite_pos(center.pos)
            end
        end
    end
    return g
end
maiden phoenix
#

At this point you should ask a dev to make your mod, you're getting every answer spoonfed to you without trying to learn anything

long sun
#

ease up a little 😭

#

we've all been new to this before

maiden phoenix
#

No but like you havent seen their past messages

long sun
#

and you haven't seen mine :)

maiden phoenix
#

That wasnt directed to you?

ripe jacinth
#

i uh.. figured it out before seeing that message.

long sun
#

aware

ripe jacinth
#

and it didnt work

#

so fuck me. i give up then

#

im going back to html

ripe jacinth
#

sorry for being a little bit dumb and way too reliant on others

long sun
#

it's fine by me, don't worry

#

i'm assuming you're just starting modding balatro

#

-# if not, sorry for the assumption 😭

ripe jacinth
#

this is my very first mod, and im committing the crime of being too ambitious

long sun
#

ambition is good!

#

and lua is hard!

#

so don't worry

ripe jacinth
#

i should've taken the initiative to learn

#

but instead i fumbled with jokerforge and code editing like a fucking dumbass

daring fern
#

How would one draw a joker on a card, but it's the size of a seal, and in the position of a seal?

long sun
#

bahhh you're fine ^^;

slim ferry
#

Everything on everything tomorrow⁉️

long sun
#

seal jokers when

ripe jacinth
daring fern
long sun
#

the game crashes when trying to display Retired Deck — something about indexing a nil value, in sprite.lua

#

what did i do wrong this time :3

long sun
#

can i see??

long sun
#

oh sick!!!!

ripe jacinth
#

@long sun sdm was right

#

im not cut out for this

#

i cant even get a joker to animate

cursive gazelle
cursive gazelle
long sun
#

that is to be expected

cursive gazelle
#

Lumi took a look at the code and gave up

long sun
#

my advice is, if something crashes, the crash log is very important

ripe jacinth
#

looking through how aura does it

#

so far i still hate people who put all their code in one single .lua file

cursive gazelle
#

I think you better follow bepis’s instructions

daring fern
long sun
#

yup

glass scaffold
#

SMODS.Decks???

long sun
#

wait i

cursive gazelle
long sun
#

did i forget to remove my draw function

#

hold on, investigating

glass scaffold
long sun
#

-# the deck with that removed

cursive gazelle
glass scaffold
#

SMODS.DrawStep is for like animations or something like that

long sun
#

ya the thing is

#

that's what i'm trying to do :)

glass scaffold
long sun
#

i wanna add a shader to my deck

cursive gazelle
#

Sorry i’m on phone

long sun
#

allg!

cursive gazelle
#

Unable to help

daring fern
long sun
#

engine/sprite.lua:106: attempt to index a nil value

#

OH WHOOPS YEAH dkjfngkjdfngjkfd

#

sobbbbbb

#

it's not an edition

#

lemme try it without the e_ ^u^

cursive gazelle
#

Wait lol

#

Your shader keys should he prefix_shaderkey

#

LMFAO

long sun
#

sobsobsob

#

???? it's now saying it doesn't exist

#

the game really doesn't want me to do this particular thing :333

cursive gazelle
#

I’ve had this issue before

#

I forgot how i fixed it

daring fern
ripe jacinth
#

i figured out how to use bepis,,,

languid canopy
#

how do i make a pool that lists like, all food jokers ?

ripe jacinth
#

had to put it in main.lua

#

FUCK

#

ME

cursive gazelle
long sun
#

doesn't SMODS have a feature for Food Jokers now?

ripe jacinth
#

FUCK ME SIDEWAYS IN THE KITCHEN WITH HOW MUCH OF A FUCKING IDIOT SANDWICH I AM

#

GOD

cursive gazelle
ripe jacinth
#

CODE IS HARD

long sun
#

hey dude, stop self-depricating yourself 😭

cursive gazelle
long sun
#

mm, we're back to the shader not existing

#

nil value indexing and all that

wintry solar
cursive gazelle
long sun
#

i think so?

#

it's listed above it in the code

long sun
cursive gazelle
#

Are you sure theres no typo

long sun
#

i'm assuming the key is correct, as i get a special error if it's phanta_drilled or phanta_drilled_consistent