#⚙・modding-general

1 messages · Page 14 of 1

raven rover
#

basically an alternative opposite version to all of the jokers

#

idk if that entails consumables too

hardy brook
sacred oyster
#

So will the consumables like planet cards be mostly useless?

winter hearth
#

How the duck do I center this chips counter, i can't get it

#

the explaining for printf is so tough

#

Can someone explain?

rare shell
#

from the looks of it i think your chips are "centered" but the background of the text is centered relative to the entire width of the window itself

#

so maybe find a way of offsetting the background off to the side?

#

thats just my two cents

#

unless youre trying to center the chip text to the bg

winter hearth
#

nonono, the background image is not centered at all

#

it have only x, y with some scaling for different resolutions

rare shell
#

maybe fiddle with the x and y offsets then

winter hearth
#

im trying haha

#

Debugger can't show me the hitboxes((( that's sad

heavy flax
#

designed a few new jokers any ideas for what they should do
names are "suspicious joker" "photocopier" "minimalist joker" and "pastel joker"

#

im thinking photocopier will give +0.1 xmult per duplicate card in your deck

white scarab
#

Photocopier (Uncommon):
All hands in this round will be the same poker hand as first played hand of round

#

So if you play 5oak as your first hand then if you play high cards you’ll still get the base 5oak scoring

heavy flax
#

that seems more busted than an uncommon T~T

white scarab
#

It could also screw you over

heavy flax
#

true

white scarab
#

Since you can’t burn hands anymore

#

It’s probably similar in power to a weaker rare

heavy flax
#

but playing a high card as a 5oak with baron or steel cards

strong swift
heavy flax
#

tbf ig anything with baron is op

#

yea the more i think about it that does sound pretty unique

#

any ideas for the other ones?

strong swift
#

i kinda want pastel to buff red cards in some way

#

idk why

heavy flax
#

ooh

#

what about having it buff diamonds and clubs since theyre the lighter colors of the black and red cards

strong swift
#

i like that yeah

heavy flax
#

oh also

#

thoughts on my other joker

#

im planning on making it basically sacraficial dagger except instead of + 2x sell value mult +7x sell value chips

strong swift
#

a bit boring

heavy flax
#

true but it provides chip scaling to a degree that doesnt really exist in the game

strong swift
#

wee joker

white scarab
#

Bull

heavy flax
#

compare that to how many xmult jokers there are T~T

strong swift
#

you mean scaling?

heavy flax
#

yea

#

or honestly

#

all xmult jokers are scaling

strong swift
#

no

#

the "the ___" jokers arent

heavy flax
#

?

strong swift
#

the tribe, the duo, the trio, etc

#

blackboard

#

card sharp

#

ramen

heavy flax
#

yea

#

idk

#

im too tired for this shi T~T

#

any better ideas for the carnivorous plant card?

strong falcon
#

I need balance ideas, as soon as you add any mult joker this joker becomes way too overpowered

rare shell
#

adds 25% of the excess chips

#

or even something like 10%

strong falcon
#

That's a good one, thank you!

#

I think it might have to be 1% lmao

plush palm
#

Could also just cap it

#

Add excess chips (up to X) from last blind to the first hand of the current round

#

Even better could scale that with ante. So cap * ante

hardy brook
#

Cap it at 25% the blind score

#

Or X%

jagged moss
#

just to throw out an idea into the ether, something that would be neat is a mod to toggle or disable boss blinds before a run starts. that would let people avoid ones they dont like or make challenge runs where every bossblind is the mark or something

magic sandal
#

full house of downloads !

#

or would that be a flush house since theyre all black? THONK

pastel wolf
heavy flax
ocean torrent
#

That looks so cursed omg

heavy acorn
#

Jokonda?

pastel wolf
#

Joka lisa

heavy flax
#

ye old joker

gilded path
#

Hello all. Is there a mod out there that makes all cards in the shop negative jokers?

heavy flax
gilded path
#

Is that done in the game.lua file?

heavy flax
#

🤷‍♀️

exotic shadow
#

I mean with the save editor, you can increase the number of joker slots to a number so large, you can buy every joker you want

strong swift
gilded path
hexed surge
#

that's not suppost to happend

#

its worst

robust lily
#

pick a card

#

any card

hexed surge
#

i can't click its done

#

its not e

#

like 1.2054e12 its just big numbers that i can't click select

robust lily
#

weird floating point error

hexed surge
#

if you type ante scaling to -1 in save editor that happends

robust lily
#

maybe it only truncates positive values

ruby thorn
#

does using mods prevent getting unlocks?

exotic shadow
#

no it shouldn't

#

steamodded disables acheivments by default, but theres a mod to re-enable them

mild hull
#

why does the mod injector flag the windows trojan protector

strong swift
#

because it works the same way as a trojan, but instead of injecting something bad it injects steamodded

#

if it were a virus steamo would have been long banned by now

rigid jewel
#

People would've realized by now yea

mild hull
#

Yeah yeah, i'd just prefer to be cautious and ask before I end up in a bad spot

strong swift
#

i get it

ocean torrent
#

my balatro isnt opening its like loading 90% then closing ive tried uninstalling and remodding ive done it so many times i cant get it to work can someone help me?

mild hull
#

how do I stop windows from flagging it and preventing me from launching it

ocean torrent
#

is it saying its virus in a red window?

mild hull
#

its doing a series of things

ocean torrent
#

send ss

mild hull
#

???

errant basin
#

heyo, does anyone have a direct link to download steamodded? link I found set off virus protection

ocean torrent
mild hull
ocean torrent
#

wrong injecter

#

u downloaded rthe wrong exe

mild hull
#

dude, then why the fuck are there 3 named the same fucking thing

ocean torrent
#

download steammodded_ps_injecter.exe

#

it tells you wich one to download

#

btw

mild hull
ocean torrent
#

well

#

its not a virus

#

its trippin

mild hull
#

I'm glad we've gotten to where this convo started, which is "i know this isn't a virus, how do I download it without windows stopping me from launching it, and then deleting the exe"

ocean torrent
#

ill ask my computer friend

#

he knows

#

what windows do you use?

mild hull
#

10, the good one

ocean torrent
#

k

hexed surge
ocean torrent
round ore
#

how do i set up these mods

wanton rapids
exotic shadow
#

evil negative be like

manic jasper
#

I have lua code for the mod to set Unlucky Crow and Lucky Swallow to be compatible with blueprint/brainstorm and being eternal jokers, but in a challenge where they are supposed to be eternal, they can be sold and Blueprint claims it is incompatible with the jokers. Here's the code that initiates the modded jokers:

 --[[SMODS.Joker:new(
            name, slug,
            config,
            spritePos, loc_txt,
            rarity, cost, unlocked, discovered, blueprint_compat, eternal_compat
        )
        ]]
           --
        local jokers = {
            unlucky_crow = SMODS.Joker:new(
                "Unlucky Crow",
                "",
                {extra = {x_mult = 1 , x_mult_add = 0.1}},
                {},"",
                2, 6, true, true, true, true
            ),
            lucky_swallow = SMODS.Joker:new(
                "Lucky Swallow",
                "",
                {extra = {x_mult = 1 , x_mult_add = 0.1}},
                {},"",
                2, 6, true, true, true, true
            )
        }
#

any tips for making them eternal-compatible and blueprint-compatible?

exotic shadow
#

oh seals don't work

strong swift
#

even when both enhancers.png in separate mods are named different things and in different subfolders they still overlap weirdly and overwrite each other. is there any way around that or is that a steamodded thing?

#

like, the two mods specify different file names so thats not it

exotic shadow
crude yarrow
#

Anybody know if somebody has made a hotkeys/keyboard shortcuts mod yet? I did a cursory search but didn't turn up anything and want to make sure I haven't just missed it.
I'd have to be able to play with 2 hands to speed up some of the menial tasks of playing with hotkeys instead of having to use mouse for nearly everything.

exotic shadow
#

there was a mod that added a couple shortcuts iirc

crude yarrow
#

Ah cheers. This is almost exactly the kind of thing I was looking for.

grand geode
strong swift
#

ty

lean dune
ivory crow
#

How do you know if steammodded already work?

strong swift
#

it should have a "mods" button

ivory crow
#

It doesnt have it tho

strong swift
#

so it didnt work

ivory crow
#

it says this in some of the line

mental solar
#

in the feature read all of the mod description, check that first before reporting, might fix itself

ivory crow
#

Where do i even see the warnings?

#

Owh alright

mental solar
#

sorry, that was rude of me

ivory crow
#

nah all good you help me thanks for the reply!

mental solar
#

can someone help me understand why this effect don't work when i get my voucher?
first one is supposed to add two cards to every pack, and the other adds a pack to every shop.
note, the vouchers themselves are obtainable, game never crashes, the effect just doesn't work

wanton rapids
#

ms paint joker

mossy ledge
#

does using mods stop achievements?

wanton rapids
#

lipographic joker counterpart

spice wadi
#

Okay why is windows freaking out that Steammodded_injector is a virus? I cant install it

rigid jewel
#

Just click the underlined “run anyway”

#

Also I don’t think there’s a fix yet for this

#

Kinda just always will get a false positive due to how it works

grand geode
#

ughhhhhhhh might have to scrap the current blind effect because there is no good way to change the text of anything

#

i can only change jokers via a function that is also used by playing cards without any distinction

#

and only affecting playing cards would be far too weak

formal wing
#

Well you can literally tell the code to enable them again I believe

mossy ledge
#

sadly i dunno coding so i will look into the achievement mod first

#

thanks a lot actually

formal wing
#

Not a problem!

mossy ledge
#

NICE!

grand geode
mossy ledge
#

this is so awesome for me

formal wing
#

I may look into downloading mods myself but for now I'm a base game Andy. Mainly just waiting for safety tbh

mossy ledge
#

especially i play the game wanting to see A LOT OF Joker interactions but having a 10000 joker limit causes achievement to be closed

#

ah

#

also there is this chinese made game tweaking stuff

#

you might wanna check that out

#

essentially it changes the basic game stats so yeah,we gonna open the game file with a rar reader like 7z and replace stuff

#

but it's quite powerful

#

allows the change of many card data like the amount of joker slots added by negatives,number of upgrades done by each planet cards,even the beginning hands and discards can be easily changed

formal wing
#

Sounds like what cheat engine could potentially do

mossy ledge
#

yeah true

#

but it's already there so yeah,pretty convenient

#

never figured out how to use cheat engine to change game mechanics sadly

#

i'm gonna look into that a bit

round oar
#

i made a mod* that lets you select up to 6 cards to play rather than 5, and added these new hands to go with it

#

i would like to add planet cards for them, but i unfortunately cannot art at the moment

wanton rapids
#

two of a triple should be three pair

round oar
#

three pair is different

wanton rapids
#

oh wait i see

#

wait is three pair there?

round oar
#

yup, between three of a kind and straight

grand geode
#

you are clinically insane

round oar
#

i did this all in two hours, who's clinically insane now?

wanton rapids
#

now combine it with six suits

round oar
#

(still me but i get to brag about it)

#

wait would that add any new hand types?

wanton rapids
#

spectrumer

#

straight spectrumer

#

spectrum fuller house etc.

round oar
#

oh is spectrum 5 different suits

wanton rapids
#

yeah

round oar
#

yeah i think i'm good for now

#

now i need to make it an actual mod that people can download and play and stuff

grand geode
#

you're still clinically insane

round oar
#

i'm taking that as a compliment

mossy ledge
#

do we have enough stars with cool names to fit those hands even?

#

or maybe use constellations?

round oar
#

tbh i think we're good

mossy ledge
#

HOLY

#

Hope that they have a name instead of numbers and stuff

wary latch
#

tbh

#

most are just small rocks that are slightly bigger than the stuff in the rings

magic sandal
grand geode
#

locking them behind a joker is excessive

#

also one is a steamodded mod one is a balamod mod

alpine cosmos
magic sandal
#

10 card hands soontm?

strong swift
#

full duplex balatrojoker

delicate flax
#

hey, working on a mod to add a bunch of new tarot cards using center hook, but on disabling my mod two "ghost tarots" are left behind? they don't count towards collection number and don't have any text (see screen). on re-enabling i can figure out which ones they're supposed to be but the on_disable removeTarot call is literally the same for all four tarots implemented so far.

#

all the ids line up and everything but these ghost tarots are duplicated every time i disable and re-enable and i am losing my mind trying to figure out whats going on

grand geode
#

@stone brook center hook is your thing i think

hardy brook
#

Alright, time to ask. Should I give Beta versions of existing decks a custom back?

#

The custom Checkered deck if I do make one

finite cargo
#

where do you download balatro mods

strong swift
woeful finch
#

wonder if adding a version number to the deck back would be useful

#

along with custom back

hardy brook
#

And it seems like it's a positive to have custom back so i'll add it

woeful finch
#

k

late sorrel
#

Hey! Does Balatro have an api reference?

#

Like a modding scene or anything

cosmic shell
#

the game doesn't have an API per say, most mods are done by hooking into the game's existing functions or by modifying the game's global variables. Steamodded has some apis for basic stuff like creating jokers and sprites though I believe, you can look its example mods for that. Also, Balamod has support for custom api extensions, with ones existing for doing similar things as well.

late sorrel
#

Oh, I see

#

Is there any documentation on the games functions?

cosmic shell
#

not currently, but the game's executable can opened as a zip archive, allowing you to read the source code directly in the meantime.

late sorrel
#

Oh, ok

rigid jewel
#

This is the first time that I've seen one of my own jokers in the shop naturally

#

Sadly I still can't get it to work

#

😢

cosmic shell
round ore
#

So how do you set up mods

digital lily
#

check out the thread and linked github

digital lily
#

painted deck resprite

ocean torrent
#

W

empty brook
#

based actually

digital lily
#

had to use balatro colors so it isnt quite perfect

ocean torrent
#

Its a w

empty brook
#

you know, now that (to my knowledge) level 0 hands are essentially impossible to achieve, with the nerf to The Arm, i wonder if a deck that involves level 0 hands could be interesting...

digital lily
#

you'd need like 0.5x base blind size or smth

pastel wolf
#

Would be so free if it had 0.5x base blind

#

U get 1 planet card for your hand and its just like base game but easier

digital lily
#

you'd have just 1 hand boosted tho

#

the rest would still suck

#

and you might roll neptune mercury mars from a booster pack or smth

pastel wolf
#

Theres always more booster packs

#

All it takes is one

#

Not to mention if you happen to roll black hole :D

digital lily
#

speaking of black hole

#

it doesnt trigger any "number of planet cards used" jokers

#

even if you get it from a celestial pack

#

its so bullshit

pastel wolf
#

I think it counts as a spectral card

#

Soul probably doesn't trigger fortune teller

#

So in the game files it would be tagged as spectral, and those jokers would only act on cards tagged planet

empty brook
#

yeah black hole is a spectral lol

lean dune
#

it needs to be, for balancing reasons

#

imagine tarot/planet spawning jokers being able to spawn soul/black hole... and the fool could copy them, too

#

magic deck legendaries: buy find one, get two free

strong swift
empty brook
#

can random spectral things spawn black hole and soul?

#

i'd imagine they can but i've never seen it myself lol

empty brook
#

damn

#

perkeo can't perform a ritual to summon his 4 friends.....

rigid jewel
#

I will note that Black Hole would need changed to account for Observatory

#

(Assuming you want it to count as a planet card)

empty brook
#

i think counting black hole as a planet card has a really great description about it:

#

A Bad Idea

stone brook
#

also sry i dont read this chat very often, so if you do encounter an issue with center hook, dming me is your best option

#

or opening an issue on the github

round oar
thin pilot
#

been a while but I wanted to check in

#

has anyone modded anything to be able to disable jokers in the pool

#

I'm really losing steam after about 50 hours of fun because im so damn tired of seeing the same 10 middling common jokers over and over and over

#

if I could either mod some of the jokers off (I dont want to turn even most of them off, there's just about 10-15 im tired of), or allow more card slots to buy without the voucher that would be so much more fun lol

spice spear
#

they're spectral cards, and they appear in spectral packs, so they're in that pool, it just so happens that they also spawn in Arcana packs (for the soul) and Celestial packs (for Black Hole)

empty brook
#

oh shit--so Perkeo CAN perform a ritual to summon his 4 friends!!!!

spice spear
#

hypothetically yes

strong swift
spice spear
#

but for it to actually happen is EXTREMELY low odds

spice spear
strong swift
#

idk i feel like if it was possible it would have beendocumented by now

white scarab
#

Soul can only spawn in packs @strong swift @spice spear

strong swift
#

yeah thats what i was thinking

spice spear
#

huh, alright then

white scarab
#

This logic is probably why

#

Don’t want infinite legendary jokers

round oar
#

i’ve seen both black hole and soul in spectral packs before

white scarab
#

They can both spawn in packs… just not from any spectral generators or in the shop

proper stirrup
#

did someone put a holo charizard in the game yet

manic jasper
spice spear
proper stirrup
#

i need to make charizard card

dusky reef
#

hey guys, for those of you who make customized jokers, what software do you use to make the drawings? any recommendations?

spice spear
#

I use Aseprite, as do a lot of others

dusky reef
sullen shale
#

is there any sort of "best of" list to see what might be worth trying out?

spice spear
#

Make the 1x first, you can upscale when exporting

#

(because the 2x is literally just the 1x upscaled 100% with nearest neighbor)

dusky reef
empty brook
#

photopea is what i use, as it's free and in-browser

but aseprite is a much better option lol

#

photopea's essentially just photoshop: Browser Edition, so it's great for photoshop stuff! but not really pixel art

#

it's nice if you know photoshop and don't wanna learn a new program though

rare shell
#

back to the modding grind

thin pilot
strong swift
strong swift
opaque lagoon
#

Does it matter if I use Steamodded or Balamod? Or no big difference?

spice spear
#

some mods are only available on some modloaders, but there's an effort towards unifying them

opaque lagoon
#

ahhhh ok ok thanks!

rare shell
#

too high of a mult?

#

also reworded stanczyk

modern zodiac
#

I hate how you have to directly edit the straight- and pair-detection functions for this, complete incompatibility with any other mods touching it.

devout marsh
wanton rapids
#

8ball but worse question mark

modern zodiac
spice spear
modern zodiac
#

I disagree. It's like Torn Joker but you can discard 2 more cards. But you don't need to fish for pairs or high card, so the discards don't synergise with it.

spice spear
#

it's a common

modern zodiac
#

So's torn joker.

spice spear
#

torn joker has a downside to it, this is strictly beneficial

#

the joker for 3 of a kind gives +12 mult

modern zodiac
#

Torn joker doesn't have a downside. It won't trigger if you play 4/5 cards, but this won't trigger if you play three-of-a-kind (which torn joker will).

spice spear
#

I think you're wrong, but I'm not going to sit here and argue it with you

strong swift
#

25 dollars is a run-changing amount

spice spear
#

that should be like, 3 dollars

wanton rapids
#

hm

#

really?

spice spear
#

five would be pushing it

wanton rapids
#

ok

#

making it $5

spice spear
rare shell
strong swift
modern zodiac
#

When I had the same idea (apparently a common one) I made it $15

round oar
#

hey, can someone quickly test whether playing a flush house activates spare trousers?

rare shell
#

it does

round oar
#

ok, thanks

grand geode
brave saddle
#

Is it possible to treat card as different ranks and change the card draw order?

rare shell
#

Can someone help me with steamodded joker? I added joker but it uses default sprite instead of custom one for some reason. I can't find where should I indicate which sprite joker uses

wanton rapids
#

ho ho ho (this is too large)

rare shell
hard grove
rare shell
#

I know this yeah

#

I just got the sprite working, but I do not understand why

round oar
grand geode
#

because it's taking the sprite with position {x = 0, y = 0} in the file "Jokers.png"

modern zodiac
#

Slug defines it as j_[slug] in a couple of places (in adding sprites and .calculate, at least). And define sprite with that value to set the spritesheet, along with spritePos of 0/0 or whatever (used if you're putting multiple jokers on the same spritesheet)

grand geode
#

which is the base Joker

#

change Jokers.png to a png with only the joker sprite

rare shell
#

jokers.png is my own file

rare shell
grand geode
#

hm yea

#

maybe because the sprite size you're defining is 426x285?

#

should be 71x95

rare shell
#

71x95 is only one joker

#

I'm saying that code on screenshot works for me

#

it actually loads the correct sprite

#

but I was (and still is) confused a little about slug thing

grand geode
#

ohhhh okay

#

the slug is the shortened version of the joker object

#

the mod automatically adds "j_" in front of it

#

apologies for misunderstanding the question

rare shell
#

ohhhhhhhhhh

#

I guess I can't make multiple jokers (with different functionality) on the same sprite then?

#

because they all will relate to the same slug?

modern zodiac
#

You absolutely can. Duplicate the Sprite:new line but change the slug and it works.

#

Then you can change the spritePos x/y in its Joker:new to get different places on the spritesheet, or don't if you want to use the literal same sprite for the different jokers.

rare shell
#

Turns out x = 1 isn't one card to the right

modern zodiac
#

Wait, why does your Sprite:new line give height/width of 426/285?

#

That's what's used for x/y calculations, it should be 71/95 for a joker spritesheet.

rare shell
modern zodiac
#

Yeah, it's per sprite on the sheet, not the sheet's dimensions itself.

rare shell
#

when x = 0.5 it gets me voxel joker

#

without any cutoffs

modern zodiac
#

Because that's what you get when you start half-way through the spritesheet, I guess?

rare shell
#

yeah

modern zodiac
#

I suppose there's no hard rule about how to use it. You could set x to 1/6 to get the cassette I guess??

rare shell
#

The formula would be something like 1 / 6 * position in spritesheet - 1 I think? So yeah?

#

thank you again, saving my day

modern zodiac
#

Those do look really nice.

grand geode
#

it is best if you keep it at 71x95 and change the pos values to a whole number

rare shell
modern zodiac
#

You don't need to touch the spritesheet, just set the Sprite:new values to 71/95 and the coordinates to whole numbers.

#

Besides, 0.1 is still a scuffed number to a computer, since it's not very binary-compatible.

rare shell
#

am I doing this correctly? Just in case

#

seems to work correctly

modern zodiac
#

Yeah, that's the way I've done it. Easier to plug coordinates into, and no risk of floating-point error.

wanton rapids
#

what should this do

grand geode
#

+0.01 Mult for every pixel on the joker art that is not #FFFFFF

rare shell
#

+0.01 Mult for every pixel on the joker art that is #4f6367

strong falcon
#

Anyone know why this might cause a crash whenever a round finishes with a red seal left in hand?

local get_end_of_round_effectref = Card.get_end_of_round_effect
function Card:get_end_of_round_effect(context)
    get_end_of_round_effectref(self, context)
end
grand geode
#

Card:get_end_of_round_effect(context) arguments should be self, context

grand geode
#

mmm

#

sheug

#

shrug

alpine cosmos
wanton rapids
#

hmm

languid hearth
#

has this mod already released or wip?

rare shell
#

I just started making it today lol

languid hearth
#

love the aesthetic of it

#

beautiful work bro 🙏🏽

rare shell
#

ty!

languid hearth
past canyon
grand geode
wanton rapids
#

is the bottom right one a final boss blind?

grand geode
#

no totally not

#

nuh uh

sand thicket
#

id probably call it 'noir silence' or 'midnight' or the like as many bosses have nonstandard color names
pretty cool tho, i like the effect

grand geode
#

though- that'd be cool methinks

sand thicket
#

ooo I wasnt familiar ;o

grand geode
#

mm yea i'm gonna change it to Noir Silence

#

the 3 people that also play it can probably get the reference

torpid oxide
#

What do you guys think

heavy flax
#

is there a way to make my joker use 4 slots on the spritesheet(?)

#

i want that card to be a joker

dusk estuary
grand geode
#

i'll stick to noir for now

#

and for the insect

torpid oxide
#

Where is located the code of The Serpent boss ? Apparently it's not in blind.lua

grand geode
#

G.FUNCS.draw_from_deck_to_hand in functions\state_events.lua

torpid oxide
#

Ah thanks

heavy flax
torpid oxide
#

How can I add another descritption (like this description of the lucky card) ?

grand geode
#

teehee

heavy flax
empty brook
#

to my knowledge i'm not sure if anyone's even got legendary joker/hologram joker visual stuff working yet (As in, making a joker display 2 sprites, one of which is floating)--in my opinion, this seems like a much more difficult thing to do

#

so i doubt folks are ignoring you; more so a "we don't know (at least yet)" situation

white scarab
rare shell
#

what do you think about this effect? (I don't know all the effects in Balatro tbh, so maybe this or similar one already exists)

grand geode
#

-2 from Stuntman + -4 from blind

empty brook
#

the closest is like. Card Sharp? but that's for a hand type you've already played

heavy flax
#

effect concepts for racist joker?

#

its too late to turn back its already on the spritesheet

rare shell
strong swift
heavy flax
rare shell
#

hey so can we totally not

hardy brook
heavy flax
rare shell
#

so whats the joke

hardy brook
#

You can’t play any cards then

rare shell
#

is the joke that it's funny because its based off a historical racist empire that built itself off the backs of black and brown people

#

because i dont think thats a really good punchline

heavy flax
#

the joke is i put a confederate flag on the hat T~T

strong swift
#

just don't do that

empty brook
#

I LEAVE FOR FIVE MINUTES AND THERE'S RACISM NOW

rare shell
#

stop?

#

yeah, the flag of a historically racist empire that built itself off the backs of black and brown people?

strong swift
#

its easy

empty brook
#

yeah please don't????

hardy brook
rare shell
#

yeah, dont do that

hard grove
#

very much don't

empty brook
#

we get that it's a joke, but it's not a great one. it's very offensive and i would recommend not making this joker.

rare shell
#

theres people here who's had their ancestors slaughtered by people waving this flag

hardy brook
#

Ngl, fitting with the name “not John Wilkes Booth”, yknow, the guy who killed the president who ended the civil war and all

heavy flax
#

im confused do you think im defending the confederates because im not T~T

hardy brook
#

We’re just saying not to make a racist joker

heavy flax
strong swift
#

that doesn't matter. just dont use that imagery in fucking balatro

rare shell
#

listen, i dont think you personally support it, but you have to understand when you post things with this flag its like posting things with the nazi flag

sand thicket
#

man remember when ragebait used to Try
anyways no surprise this is the caliber of person that can't figure out how to resize an image lol

hardy brook
#

Could’ve been worse for the racist joker art

heavy flax
#

im not ragebaiting i didnt think it would be taken this seriously

#

honestly

#

im sorry

rare shell
#

going forward just learn that its a very sensitive flag

#

people pls stop

#

like

#

stop discussing

#

it's not going anywhere it just floods the chat

hardy brook
#

Surprised it only took a month for this to happen

heavy flax
hardy brook
#

But yeah uh…

#

Don’t do it again ok?

rare shell
#

i figured as such, just be careful in the future

hardy brook
#

Don’t be the fool and make something bad

rare shell
#

lest you become john wilkes booth for real

heavy flax
#

honestly i am a little confused i wanna make it clear that if anything i was calling out the flag as racist because people still dont seem to get that

empty brook
#

man

#

please stop this discussion at this point lmao

hardy brook
#

Okay enough about the flag

empty brook
#

absolutely

#

hey folks i'm making a J O K E R

heavy flax
#

kk was not the right letter choice oml T~T

rare shell
#

ill leave it at this but, just dont show the flag as racist, if you want people to know its racist, just dont use it

hardy brook
empty brook
#

which turns hearts into wild cards! does that sound fine as uncommon, or am i overestimating/underestimating

rare shell
empty brook
#

yes a jonkler!!

rare shell
#

a jank jonkler?

empty brook
#

unfortunately i'm not jank enough...... you out-jank me......

rare shell
#

hearts into wilds sounds like its in the same realm as smeared joker

empty brook
#

but anyways it's the effect for my new joker: "Joker (from Persona 5)"

strong swift
rare shell
#

where can I see the code from other cards to reference them?

#

you can open up balatro.exe with any zip program

#

which file exactly

#

it should be in the .exe's card.lua

#

that's where most of the coding for jokers are going to be

empty brook
#

Balatro.exe, and then the various .luas you'll see right there

#

i think joker stuff is in... card.lua or game.lua???

#

correct me if i'm wrong on that

rare shell
#

its card.lua

#

yep it's card.lua

#

ty!

#

np

#

if you need descriptions of jokers and to see how they format text you can look in localization/en-us

#

oh hey black

#

did you see my new legendary jonkler

empty brook
#

yes! i saw both that and the highcard/pair one

#

i really like both of them!

rare shell
#

i think i decided on takin the half measure and just making this 12 mult

empty brook
#

honestly i do feel like.

#

kind of weird about this one?

#

because isn't it just worse than Half Joker

rare shell
#

naw

#

you get to discard 2 cards with this that you dont get with half joker

empty brook
#

i guess alongside splash (or just playing more cards to discard them)

#

but half joker also works with three-of-a-kind, and it's giving more mult for high card/pair

#

actually

#

hang on, i have a BETTER critique

#

lemme get out my Handy Dandy Screenshot

#

isn't this just objectively better than jolly

#

in every single way

#

...wait nevermind

#

it doesn't say contains it says

rare shell
#

Is there a joker that knows that if you've played the same card before?

empty brook
#

look i'm smart. i swear.

rare shell
#

exactly pair and high pair

empty brook
#

yeah i realized that the instant i posted the screenshot

#

critique retracted

#

bando foolishness proven

dusky reef
#

hey guys, I've been reading the code lately, but how do we put our custom card back into the game without changing enhancer.png?

empty brook
#

card back as in like for decks?

dusky reef
#

yes

empty brook
#

to my knowledge decks rn still require you to change that

#

we have ways to get around it for stuff like jokers at least, but not decks yet

dusky reef
#

yeah but that makes every deck mod imcombatible I think

heavy flax
rare shell
#

ooooh yes ty

empty brook
#

we're early on in the modding stages for this game, so it's kinda just an issue we deal with

#

for me, what i've done is i make all my enhancers.png mods compatible with each other

dusky reef
#

hmmm

empty brook
#

so Dice Deck, Pact Deck, and Baba Decks all include the graphics for the others inside their enhancers.png edit ((well dice and pact don't include baba, as it would replace textures, but baba does include them)

rare shell
#

i still want to know how to implement the legendary joker soul sprites

empty brook
#

YEAH IT'S GENUINELY INSANE TO ME WE DON'T HAVE THAT YET

#

it's not a huge deal but MAN

#

i wanna see a FLOATING HEAD

dusky reef
#

might have to write an entirely new function for loading sprite... maybe it's worth doing

rare shell
#

well, jokers have a field for soul_pos

empty brook
rare shell
#

i mean id imagine you would have to point to the joker soul like you point to as the soul in question and then assign the soul_pos accordingly

#

oh, for deck backs

#

lmao

#

reading comprehension

empty brook
#

okay to be fair a function for soul joker boys would be great too

#

i wanna see fortuna and stancyzk floatin' at the function

dusky reef
#

so currently they are using x-y pairs where x is column index and y is row index right?

rare shell
#

i reformatted stancyzk too

empty brook
rare shell
#

also rip my pagliacci idea

#

turns out

#

pagliacci is in this game!

empty brook
rare shell
#

its literally canio's name

dusky reef
#

ok let's see what I can do rainbowcat

rare shell
empty brook
#

yeah!!! Canio's the Pagliacci guy!!!

empty brook
rare shell
#

admittedly no

#

would take me 2 seconds

empty brook
#

yeah exactly

#

a crash is worth the CONSISTENCY....!!!

rare shell
#

authentically polish,,,

empty brook
#

my polish friend would garrote me if i allowed inauthentic polish clowns in my general area

rare shell
empty brook
#

hell yes

rare shell
empty brook
#

the power of me BULLYING LYMAN asking you to try!!!!

rare shell
#

you know i just realized this game is already like localized

empty brook
#

ye

empty brook
# rare shell huh

hmm. in your case, you'd want card played this round, not this ante, right

rare shell
#

i mispelled his name

#

im dyin

empty brook
#

oh shit that's true, you did

#

sorry Lyman, officially a bad mod now

#

that's how the rules are

rare shell
#

its ok i got chewed out by my polish friend

empty brook
#

....i don't think card.ability.played_this_round would work, but part of me wonders if it does

#

actually wait, even if it did i dunno if that'd help you here

#

since you don't care about the specific cards being played, but the number of them, right

rare shell
#

number + type

empty brook
#

...WAIT

#

wait hold on. i think i might've misunderstood how your joker works

rare shell
#

like if you play spade 4 and then club 4 in different hand it won't count

empty brook
#

yes i think i did

rare shell
#

if you play spade 4 and then another spade 4 in different hand then it works

#

or maybe even in the same hand

empty brook
#

i thought it was this:
play a 5-card hand. this hand gets +0 mult, but now you have played 5 cards, so that's +3 for each
now, next hand gets +15 mult. play a 5-card hand, +3 for each
third hand gets +30 mult

#

now that i know your intention.... i think this joker's really weak actually lmao

rare shell
#

going for +30 mult then

#

🤪

empty brook
#

doesn't do anything in most decks before tarots (except for checkered deck), and +3 mult is definitely a pretty low amount. it will EVENTUALLY be able to pop off a lot though, so you probably don't want it to be too high considering it's just a common

rare shell
empty brook
#

trying to think of how i'd fix this wording to ease that confusion, and i'm struggling a bit lol. i definitely suggest including "of the same rank and suit" in there

#

yeah don't get me wrong, i understand the mechanic now

#

the wording of the joker just didn't make that clear

rare shell
#

did that image just in case

empty brook
#

i thought it was essentially a flat mult joker that like. scaled up as you went through hands

#

balance-wise, i do think i'd at least suggest it being +4, so it's equivalent to the other similar jokers (Smiley Face, Even Steven, Suit Jokers, etc.)

#

it probably should be higher but i dunno how much higher is the right choice lol

strong falcon
#

I have a joker that gives a bonus if the hand is exactly the same as the previous round, maybe you could use part of this Firch?

            -- Save previous cards
            if context.cardarea == G.play and not context.repetition then
                table.insert(self.ability.extra.current_cards, context.other_card.base.id)
            end

            -- Calculate chip score
            if context.scored_chips then
                self.ability.extra.chips = context.scored_chips
            end

            -- Apply chips if previous cards are the same as the current cards
            if SMODS.end_calculate_context(context) then
                if tables_equal(self.ability.extra.prev_cards, self.ability.extra.current_cards) then
                    self.ability.extra.prev_cards = tables_copy(self.ability.extra.current_cards)
                    self.ability.extra.current_cards = {}
                    return {
                        message = localize { type = 'variable', key = 'a_chips', vars = { self.ability.extra.chips } },
                        chip_mod = self.ability.extra.chips
                    }
                else
                    self.ability.extra.prev_cards = tables_copy(self.ability.extra.current_cards)
                    self.ability.extra.current_cards = {}
                end
            end
#

It basically saves each played card to a table, and then checks if this table is the same as the previous hands table

rare shell
#

I feel a little bit overwhelmed 😅

#

Do I understand correctly that hand-related joker abilities go into .calculate?

strong falcon
rare shell
#

I feel like I need some kind of small example, because steamodded's examplemod is not enough for me

#

at least how i have it implemented, generally speaking almost all your actual joker code is going to be under function Card:calculate_joker(context)

#

and then depending on what your joker does, they're going to be under specific contexts.

#

Also wait, isn't there a thing where I can connect vanilla game's files to use them as library?

#

not sure what you mean by that

#

I never modded in Lua before and I don't know how it works here, but I did some modding for Terraria and Duck Game (both are on c#), and you can connect tmodloader and dg's source code to Visual Studio so it will show game's functions and such stuff

#

ah, im not sure how one would do that but in theory you could extract all the lua files and implement that as a makeshift workshop

#

(i swear i didnt mean to end up recreating math homework a week later independantly of reading this)

strong falcon
rare shell
#

nope! I did set-up for the mod just today

#

i ought to set up a basic mult joker template

strong falcon
#

Ah okay, I'll give you a more simple example

#

For most basic jokers all your code will be in the .calculate function. In here you have access to the context variable, which goes about the current step that the calculation is in. An example would be context.discard which triggers whenever a card gets discarded, or context.end_of_round that triggers at the end of the round

#

If you want to do something after a hand has been played (like apply mult to the hand as a whole), you'd do it as follows:

        SMODS.Jokers.j_your_joker = function(self, context)
            -- Apply mult
            if SMODS.end_calculate_context(context) then
                 return {
                     message = localize {
                         type = 'variable',
                         key = 'a_mult',
                         vars = { self.ability.mult }
                     },
                     mult_mod = self.ability.mult,
                     card = self
                 }
            end
       end
#

Where message is the little message that shows up underneath the joker card, mult_mod is how much mult your joker will apply and card is the card that will do the shake animation whenever it gets triggered

#

Does that still make sense 🤔

rare shell
#

Yes, thank you very much! I think I need to try to tinker around it by myself to understand how things work

#

Is there an easy way to get myself a specific card?

#

(to debug)

#

Also, where can I find a list of contexts?

strong falcon
#

To get an individual card you could use context.individual and not context.repition, which triggers for every singular card that is inside the played hand (but not repeated). To access the other card, you would use context.other_card

rare shell
#

i can second that it gets a lot easier after you make a couple of jokers

#

mostly

strong falcon
#

And I don't think theres a specific list of contexts anywhere, I just recommend looking at what other mods use to get familiar with it

wanton rapids
rare shell
#

my work flow is usually thinking about what the closest joker to what i want to do is and look that up in the games good

#

I mean what do I do to acquire joker so I can test it?

#

its a good way of finding out what effects go under what contexts

#

youre going to want to install the debugmode mod

#

It is installed

#

Is there a hotkey for this?

#

assuming youre in debug mode

#

go to your collection

#

hover over the joker

#

and press 3

#

oh yeah that worked

#

ty

pseudo pasture
#

Can you use balamod and steamodded together?

rare shell
#

no guarantees that it works

hardy brook
pseudo pasture
#

Alright, just curious

rare shell
#

another legendary jonkler sprite done

#

thoughts about this ability?

empty brook
#

oh wow! that's quite good

#

kneejerk brain reaction is "maybe 3 levels since orbital is 3 and that's still really strong, despite being random"
but there's no real mathematic backing on that; just vibes

#

i like it, though!

rare shell
#

my only problem is figuring out how to upgrade multiple times

#

I'm fooling around with joker abilities, this makes the message about +mult appear correctly, but doesn't actually add any mult, why?

strong falcon
#

iirc

rare shell
#

now it works fine, ty!

#

gotta ask all the stupid questions so later this will be the easiest part of making an actual joker scholar

grand geode
#

so true

rare shell
#

how do I put variables from here to localization?

strong falcon
#

You mean so that they show up in the joker description?

rare shell
#

yep

#

I was copying something from vanilla jokers earlier but got things like +ERROR

#

I use that now but this doesn't seem correct

#

(this works tho)

strong falcon
#

Copy what lushmod does 😎 👍

#

The whole function from line 447

honest abyss
#

Hello I have a question for y'all, if I wanted to make a mod to change the names of stuff in the game, how would I go about that

rare shell
#

probably just edit the localization files

#

chat i have a conundrum

#

i wish to upgrade a hand multiple times and i have half solutions for both ends

#

so the way space joker does it is just this simple return return { card = self, level_up = true, message = localize('k_level_up_ex') }

#

but i cant seem to figure out how to properly have this happen 4 times

#

burnt joker however uses the level_up_hand function as seen here
level_up_hand(context.blueprint_card or self, text, nil, 1)

#

which, when using this method, i can choose to level it up more than once, but the buff doesn't apply for the hand thats played (like how space joker upgrades your hand as its being played, not afterwards)

#

so right now the snippet i have is elseif context.before then if self.ability.name == 'Feste' then level_up_hand(self, context.scoring_name, true, 4) return { card = self, message = localize('k_level_up_ex') } end

#

any suggestions to make it apply the mult/chip bonus properly here?

#

i think level_up_hand itself happens after the hand is calculated, which is why its used with burnt joker, as the planet cards all use the same function

#

and if thats the case is there a way i can use event manager to... not?

#

oh

#

nevermind

#

just had to make it not instant

#

thanks for being my rubber duck chat

#

🦆

digital lily
#

seance is no more yippee

rare shell
#

Is it possible to check if list contains something?

#

what are you trying to do?

#

I'm creating a list of cards, and I need to check if specific card is in that list

#

bonus question: is there like an initialize context? for jokers first appearance in your active slot

#

what i'd do is first delcare a local variable
local HasYourCard = false
iterate through the list in some type of for loop
have it set the local variable to true if it iterates on a card that matches your specific card
then at the end, check if HasYourCard is false, and if it is, return nil, and then the rest is your code that you want to have happen

rare shell
empty brook
#

this is really the more accurate version of the joker, because you always pick it up and then proceed to score 0 straight flushes for the rest of the run

rare shell
#

here's a not quite exact implementation, this instead checks if your hand is only sixes or gold cards, and if it isn't it returns false, but you can do some basic logic engineering here

                    local onlySixes = true
                    for k, v in ipairs(context.full_hand) do
                        onlySixes = onlySixes and (v:get_id() == 6 or v.ability.name == 'Gold Card')
                    end
                    if not onlySixes then
                        return nil
                    end
                    return {
                        message = localize { type = 'variable', key = 'a_xmult', vars = { self.ability.extra.x_mult } },
                        Xmult_mod = self.ability.extra.x_mult
                    }
                end```
#

what is the context for played cards?

strong falcon
#

Every played card individually is context.individual, the played cards as a whole is SMODS.end_calculate_context(context)

rare shell
#

for some reason context.individual somehow includes cards in hand?

strong falcon
#

oh oops

#

if context.individual and context.cardarea == G.play then

#

is the one youre looking for

rare shell
#

🫡

honest abyss
rare shell
#

in the balatro.exe in the localization folder

honest abyss
#

Thanks

rare shell
#

it'll be something like this

#

I hope that it doesn't overwrite itself emptying the list

strong falcon
#

Right now you're only adding the id of the card to the list, which is the same across suits. You'd probably want to do context.other_card.base.id .. context.other_card.base.suit

rare shell
#

fixed that

strong falcon
#

As for iterating over the played cards, it'd be

for k, v in pairs(self.ability.card_list) do
  if v == context.other_card.base.id .. context.other_card.base.suit then
     -- do something
  end
end
digital lily
#

wait hold on

rare shell
#

pairs has nothing to do with poker pairs, right? Is it to addres both id and suit?

digital lily
#

why is there two of them?

rare shell
digital lily
#

who added a second scholar while i wasnt looking

strong falcon
#

Has nothing to do with the game

digital lily
#

ok this one just looks cursed

strong swift
#

he didnt graduate 😔

rare shell
#

because at first I accidentaly added cards to the list and then did a loop to check if it's in the list (and it always gave me +10 mult), I fixed that by rearranging and it doesn't trigger mult at all now

#

I think the list checking is correct tho

#
SMODS.Jokers.j_oonga.calculate = function(self, context)
        self.ability.mult = 10;
        self.ability.card_list = {};
        
        if context.individual and context.cardarea == G.play then
            for k, v in pairs(self.ability.card_list) do
                if v == context.other_card.base.id .. context.other_card.base.suit then
                    return {
                        message = localize {
                            type = 'variable',
                            key = 'a_mult',
                            vars = { self.ability.mult }
                        },
                        mult = self.ability.mult,
                        card = self
                    }
                end
            end

            table.insert(self.ability.card_list, context.other_card.base.id .. context.other_card.base.suit)
        end
    end```
#

I suspect that self.ability.card_list = {}; is bad

strong falcon
#

You should initialize the list (and all other joker variables like mult) along with the joker before u do joker:register(). This is how i've defined mine

printerJoker = {
        ability_name = "MMC The Printer",
        slug = "mmc_printer",
        ability = { extra = { hand = {} } },
        rarity = 3,
        cost = 9,
        unlocked = true,
        discovered = true,
        blueprint_compat = false,
        eternal_compat = true
    }
#

And for registering I do this, instead of value you'd do the printerJoker in this case, but I have a big list instead

local joker = SMODS.Joker:new(value.ability_name, value.slug, value.ability, { x = 0, y = 0 }, locs[key],
                value.rarity, value.cost, value.unlocked, value.discovered, value.blueprint_compat, value.eternal_compat)
            joker:register()
rare shell
#

Is it the ability that lets me do this?

strong falcon
#

I think so yea

#

And to reset the hand at the end of the round, you'd use if context.end_of_round and not context.individual and not context.repetition then

rare shell
#

YAYY IT WORKED

digital lily
#

ancient joker's design is so cool

rare shell
#

it is weird that it tells that self.ability.card_list is a nil value, I initialize it right here

#

(I created new save/profile to test)

empty brook
# digital lily wait hold on

wait what the fuck. i thought you were doing a bit here but wasn't sure, then just checked in my jokers.png.... there's two scholars

digital lily
#

yeah what happened there

empty brook
#

maybe at one point localthunk had a diff joker there, and instead of having a blank space once it was removed, put scholar there to fill the space??? 🤷‍♀️

arctic heath
#

is there a list of mods or a modpack for steamodded?

rare shell
arctic heath
#

awesome thank you!

rare shell
#

damn lyman you got that x2 multiplier lmao

#

💥💥💥💥💥 I feel like I'm gonna explode

autumn yew
#

i.e. you want a key-value pair (dictionary) and have given it a value (array)

#

I guess this is the best place to ask. I was looking into how the polychrome (and holo) shaders worked, wanting to replicate them.
(Going to thread this as otherwise this message is going to be very tall and I don't want to be that disruptive.)

strong falcon
# rare shell

I'm not sure about why it says that it's empty, but you can initialize card_list as {} and it will work fine (that's what I do as well). You should also move the context.end_of_round outside of the if context.individual... area I think

#

If you wanna send your whole code file over I can take a look at it and see if I can find anything

rare shell
rare shell
autumn yew
rare shell
#

the error says it is nil tho

rare shell
autumn yew
strong falcon
#

I think I know whats wrong

#

The problem is that you're defining card_list in ability, when it should be defined in a subtable of ability called extra

#

I'm not entirely sure why it is that way, but I think you can only define mult in ability (and maybe chips), everything else goes in extra

#

So this works I believe @rare shell
ability = { mult = 10, extra = { card_list = { } } },

rare shell
#

let me check if that works, one sec

#

It does!!

#

🥳

#

I'm more surprised that it worked before for some reason

dusky reef
#

Might have been a weird question, but I just dug into SMOD's code and realized this:

#
        for _i, sprite in ipairs(SMODS.Sprites) do
            sendDebugMessage(sprite.name)
            sendDebugMessage(joker_obj.key)
            if sprite.name == joker_obj.key then
                joker_obj.atlas = sprite.name
            end
        end
#

so this is the only difference between loading joker and loading deck

#

why don't we have something like this for deck sprite

#

(i.e. card backs)

cosmic shell
#

As someone who's been looking into this kind of functionality for the past couple days for my own api, it's because it doesn't quite work the same way, leading to bugs in the deck selection screen due to the game relying on dynamically changing the sprite position when switching deck (and not resetting the card sprites). the way I've been looking at working around this is by appending backs to the existing atlas at runtime using love2d's canvas feature, in case anyone's interested.

dusky reef
cosmic shell
# dusky reef could you elaborate on that? I think I get that it doesn't work, probably becaus...

as far as I've gathered, the deck selection screen doesn't actually change the cards being displayed when switching deck options, instead just changing the sprite position (which is stored as a reference) creating the illusion that it's a different deck. The workaround I've devised is a bit of a hack where I just create a new enhancers atlas when the game starts which is the base game's Enhancers.png with any additionally provided sprite atlases glued to the bottom. (this does allow card backs defined in single files)

fickle elbow
#

how would you check the users deck to see if they have 2 more more of a certain card?

dusky reef
cosmic shell
dusky reef
heavy flax
#

Collectors Coin Joker

cosmic shell
dusky reef
cosmic shell
minor cypress
#

Hi all, is this acurate?

#

its virus total on steamodded

#

?

cosmic shell
#

that is expected, they're false positives. if you still don't want to run it you could look into using lovely to install it instead (a dll style injector), and I believe there's a tutorial for that in the modding forum.

autumn yew
#

The steammodded injector works by doing the same kinds of things that trojans do

magic sandal
#

i mean the virus scanners just call it a trojan because hypothetically it acts the same way even though its not malicious. the program injects itself into balatro the same way a trojan injects itself into your pc

#

but first of all the code is open source so whats happenening can be viewed by anyone, secondly if a trojan would end up posted on github with intent of hacking into peoples computers github takes the page down if need be

chrome ferry
#

Hey, trying to fiddle with the sound files on this game to customize a few of them personally, y'know the sound for the balancing done with the Plasma deck? Yeah, trying to dig through the files to find which sound uses it, but I can't find it, anyone know?

cosmic shell
#

looking at the code, it appears to be called "gong"

chrome ferry
copper silo
#

Sound effect mods are going to be fucking hellish

cosmic shell
sturdy light
#

Bonjour savez vous quand la date du patch pour la langue en français sur Nintendo switch sortira ? Merci pour votre réponse 😀

past tendon
#

no info yet as far as I know

#

I just realized my jokers never appear during a run lmao. They appear in the collection, I can spawn them using debug mode and they work fine but it looks like they can't be randomly generated.

spice spear
odd jewel
#

no mod to calculate points before playing a hand currently? just the external tools?

spice spear
spice spear
odd jewel
#

too bad, feels like a bit of an oversight with the game

#

like are you not supposed to know much your hand scores for

spice spear
#

yes!

#

it's seemingly an intentional part of the game design seeing as there's a lot of chance-based effects

odd jewel
#

yeah but you're left doing tedious math outside of those scenarios

spice spear
#

it's not actually all that bad in most cases and I rarely feel the need to actually calculate stuff

odd jewel
#

i'd say it's better to give your players options; if they want to know, let them check it

#

sucks to lose a run because you couldn't tell what was more valuable after 5-10 layers of chip addition and mulitplication

dense temple
#

Has anyone else had this problem? When using Better Mouse and Gamepad, when I scroll up to play hand, occasionally the cards sort of "re-sort" and the hand plays twice. This then results in each card I played getting doubled into my deck. Super weird issue that I have no clue what is causing it. Here's the mods I'm using currently:

white scarab
#

There was a bug during the demo that caused this issue. Likely it’s a bug in the mod that is causing you to play the hand twice, as the same effect happened

misty aurora
#

is there a debug mode mod I can download

#

to test stuff

stoic lance
#

I am curious about the game logs situation. Can gamestates be recreated exactly from the logs? I did some AI on spire logs, but was bottlenecked by their lossy/bad logging.

twin badger
#

Trying to get Steamodded to install for mac but whenever I try I end up getting this error message even though I have 7zz, I'm assuming there's some obvious thing I forgot to do bc I'm a dummy

twin badger
# wispy cape how did you install it

I followed the instructions on the Steamodded github, I'm pretty sure I installed all of the things correctly (python, pip3, Plocate, 7zip and python requests library)

past tendon
rare shell
#

Why does this happen?

round oar
#

replace +#1# with +1

rare shell
#

that'll just make it print "+1" tho?

round oar
#

what do you want it to do?

rare shell
#

Looking into other jokers from localization files, this #1# thing supposed to refer to first configured variable

#

so this

round oar
#

in your case the number looks like it doesn’t need to be a variable

rare shell
#

yeah it doesn't, but I want to figure this out still

round oar
#

ok i can’t help there

#

gl

past tendon
#

you need to add the joker in the function Card.generate_UIBox_ability_table()
like:

            loc_vars = {self.ability.extra.money_gain,self.ability.extra.money }
            customJoker = true```
In that case money_gain is #1# and money is #2#
rare shell
#

ohhh I did loc_vars but I didn't realize I was supposed to do it in different function

past tendon
#

My script is kinda outdated so there might me some easier way to do it now

rare shell
#

How is the function itself should be approached tho?

#

Like, what should I write to make it a function

#

because looking at other functions right now they look a bit different from that

#

structurally

rare shell
#

or should I do something like
Card.Jokers.j_myjoker.generate_UIBox_ability_table = function

tall seal
#

Is modding already here?

#

that's crazy

#

free infinite DLC's

rare shell
#

booster packs

tall seal
#

If anyone wants pixel art I'm down

#

hit me up

past tendon
#

code example from another joker pack

tall seal
#

are all the textures public?

rare shell
#

7zip/winrar/etc

tall seal
#

k

#

Found it

rare shell
#

Okay

#

Now it works

#

but only for my joker

#

and any other joker lost their descriptions

#

I think I know why

#

This solution feels kinda scuffed, but it works

#

I guess I can take everything from here and make my own function to save space?

#

Does Lua require ; symbol at the end of line?

#

It seems like it doesn't

real oxide
#

no shot balatro is made with python

grand geode
#

it isn't

#

it's made with Love2D, which uses Lua

rare shell
#

I think that was an /s

#

Oof

#

How do I put ability name in function so later it can be used as self.ability_name?

#

Maybe I can enter it as a string and later from self."ability_name" somehow turn that into self.ability_name?

mental solar
#

I keep trying to use values that are used in the game's code but they always appear nil, can someone help me figure out how to refer back to the game's functions?

heavy acorn
#

What does your code look like?

rare shell
#

how do I turn string like that into an actual table?

tall seal
#

I made something

#

Free to use texture

strong falcon
rare shell
#

yes XD

#

I made this function

#

loc_var is supposed to get config things

#

but I can't just pass something like self.ability.mult because self doesn't exist on the location of function

#

so I was thinking maybe I can pass that as a string

#

and then later turn it into an actual table

rare shell
#

loc_var is supposed something like ToTable(vars)

#

I tried load() but with no luck

strong falcon
#

I think generate_UIBox_ability_table takes self as an argument, but I'm not entirely sure

rare shell
#

Yes it takes

strong falcon
#

I could also just send you the function I use if you want

tall seal
#

👍

rare shell
#

Yes it takes, but I can't put self. where it doesn't exist

#

like here for example

#

This is where function is called

strong falcon
#

Does generate_UIBox not get called on it's own?

#

Like from within the game itself

rare shell
#

Hmm

grand geode
#

you can't pass variable names through a function, only the values

#

this is the case for most languages i think

strong falcon
#

Either way this is the function I use, if you just wanna copy that.

heavy acorn
#

yes instead of using Card:generate_UIBox_ability_table() use Card.generate_UIBox_ability_table(self)

heavy acorn
#

don't you need to reference self in your code?

rare shell
#

yes but I think it already gets self inside Card:generate_UIBox_ability_table() without mentioning it

#

My main thing that I don't want to deal with is having checks for joker type in different places of code

#

It's just for my own sanity; I see that other people in their mods have checks for the same jokers in entirely different places

strong falcon
#

I think as long as you inject into a base game function you're gonna need to check for your joker name

#

Not sure if there is a way to prevent that

#

But from my experience it hasn't been too bad 👍

rare shell
#

something from this hides card's rarity and editions