#⚙・modding-general

1 messages · Page 4 of 1

solemn maple
#

i can't wait for profile-specific modloader

proud wadi
#

I just renamed my modloaded .exe to balatro-modded.exe, it created its own folder in %appdata% separate from my main, unmodded game

kind night
#

close to getting a joker in but cant seem to get the localization text to load

proud wadi
#

check my gist above, or myst's rkey mod

solemn maple
proud wadi
rigid jewel
#

matelote also make a joker mod and the localization part of it is available

proud wadi
#

the problem is that it does technically touch the rest of the jokers

#

i'm currently not fully convinced that my jokers are showing up, so i'm setting the banned cards to almost all the jokers so I can try to reroll for my custom ones

carmine flare
#

do they show in collection?

proud wadi
#

yeah

#

but after over 100 rerolls in the shop, with them set to common, I didn't see them not a single time

#

yeah, they're 100% not showing up in the shop

#

I just banned everything except the primary joker and lusty/gluttonous/greedy/wrathful, picked those 5 up, and rolled the shop, which should give me any other valid joker but there's nothing it will give me but normal joker. Buffoon pack also has jokers.

#

so i'm missing something somewhere

carmine flare
#

i think you have to add them to their P_JOKER_RARITY_POOLS

#

i will test and let you know

proud wadi
#

Ahh, I just copied from the rkey mod, I didn't actually look at how they're selected

carmine flare
#

same lmao

#

this line in game.lua is what im going to replicate

if v.rarity and v.set == 'Joker' and not v.demo then table.insert(self.P_JOKER_RARITY_POOLS[v.rarity], v) end

proud wadi
#

ahh, makes sense. let me throw that in and see if it works (since i've already added basically every joker to the ban list)

#
  -- Add Jokers to center
  for k, v in pairs(vJokers) do
      v.key = k
      v.order = #G.P_CENTER_POOLS['Joker'] + 1
      G.P_CENTERS[k] = v
      table.insert(G.P_CENTER_POOLS['Joker'], v)
      table.insert(G.P_JOKER_RARITY_POOLS[v.rarity], v)
  end

worked for me

carmine flare
proud wadi
#

now I can actually copy the effects over

#

well, actually, now i can call it a night, i'm sick of looking at vscode

grand geode
#

ah icic

#

again i didn't test my mod very thoroughly

#

so this is good to know

pastel wolf
#

alright

#

lets see if i can make this wokrk

wicked plank
#

how do i mod balatro?

#

can anyone help

proud wadi
proud wadi
hybrid widget
proud wadi
#

yeah, i think i included a comment that says "you could do this for just your custom jokers but i'm lazy", don't be lazy and only reload the sprites for the custom jokers

rigid jewel
#

Ok I think I found a way to fix this

#

Might be able to finally get to making art

#

wait why is htr not scoring

#

Please code please leave me be let me have a functional joker

lunar fable
#

i need some help with the deck creator mod. wont shop ou in the mods list

#

nvm got it working

rigid jewel
#

OKAY FINALLY

#

I think I can say that this joker works

#

Time for the art

#

Note that it doesn't include the hand scoring part that people thought it had cause I still can't figure that out

carmine flare
#

why avoid overriding calculate_joker?

rigid jewel
#

So if someone mad their own custom joker it doesn't run the risk of incompatibility.

hushed furnace
#

i made half joker only count as 0.5 jokers for stencil and abstract, they both work correctly and stencil displays correctly but i can't get the text on abstract to match. any ideas on how to get the localization stuff to match the calculations in the card function?

pastel wolf
#

Alllright

carmine flare
pastel wolf
#

time to try fixing this ability'

#

I'm not sure how to reword this

#

i think its doing the whole suit check and set before activating the ability

carmine flare
#

what is the intended effect?

pastel wolf
#

Text is here

#

It needs to store the first scored card's suit, then on the next hand, check the suit, and if its different, trigger the ability

carmine flare
#

you probably need to check if you're in the hand after checking if the context is individual

#

if context.cardarea == G.hand then ...

#

wait G.play not G.hand

pastel wolf
#

if i'm in the hand?

#

uh

carmine flare
#

in the played cards

pastel wolf
#

its just the first card

carmine flare
#

i said hand meant played cards

pastel wolf
#

ah

carmine flare
#

in card.lua it goes

  if context.cardarea == G.play then
    ...
  end
end```
#

that might not be the fix but it might prevent a bug down the line

#

and then context.other_card is the card it's checking in the calculate_joker call, you could look at something like the idol code. check if the context.other_card equals the first played card then check if the suit is different than the suit saved in the joker's data

pastel wolf
#

do i need to throw context.scoring_hand in there at all?

#

Sorry i'm very new to this whole coding thing i'm pretty much trying to build it with context

carmine flare
#

since you're checking if the first scored card is a different suit, yeah

pastel wolf
#

oh of course cuz you're looking in the hand

#

would it look anything like

#

if context.scoring_hand > 0 and context.other_card ~= context.scoring_hand[1].suit then

carmine flare
#
  if context.other_card == context.scoring_hand[1] then
    if not context.other_card:is_suit(self.ability.extra.suit) then
      <do the mult>
    end
    self.ability.extra.suit = context.other_card.suit
  end
end```
#

that's my best guess of how it would work

#

context.other_card == context.scoring_hand[1] checks that we are looking at the first card in the scoring hand

pastel wolf
#

oh i had scoring hand in there twice

#

my brain didn't register that scoring_hand[1] was already looking at the scoring hand

carmine flare
#

that's my best guess at what the code would look like you can test and tweak it if it's not working

rigid jewel
#

Also you don't need to have all those if statements you can just check if they're all true.

#

Basically all the jokers ingame are handled in this manner

pastel wolf
#

which ones?

rigid jewel
#
    context.other_card == context.scoring_hand[1] 
    and not context.other_card:is_suit(self.ability.extra.suit) then
        <do mult>
    end
    self.ability.extra.suit = context.other_card.suit
end```
#

ugn doscord format

#

why

carmine flare
#

well you want to set the suit even if the watercolor effect is not triggered. that's why it's in the same block as the check that we're looking at the first card

rigid jewel
#

oh yeah

carmine flare
#

you could combine the ability name check and the first card check

rigid jewel
#

wait AHH

#

It is to late to code

#

damnit

#

At least the first two if statements can merge and the last one can stay

pastel wolf
#

is this end supposed to be down here?

#

or does that end it before the mult goes off?

hushed furnace
carmine flare
#

nice

pastel wolf
#

Cuz mult doesn't go off. Is there a way to check if the suit is being stored when the hand is played?

hushed furnace
#

it's still functionally the same just now it supports exceptions to its rules

carmine flare
# pastel wolf is this end supposed to be down here?
  if context.other_card == context.scoring_hand[1] then
    local last_suit = self.ability.extra.suit
    self.ability.extra.suit = context.other_card.suit
    if not context.other_card:is_suit(last_suit) then
      return ...
    end
  end
end```
#

i think that would help. the self.ability.extra.suit = context.other_card.suit has to come before the return or else it'll never happen. so you need to create a local variable to hold the value before you overwrite it

pastel wolf
#

Ah okay

carmine flare
#

also, you have an error on the line

if context.other_card = context.scoring_hand[1].suit then,

the equals sign needs to be a double equals and the .suit needs go get removed. it should be

if context.other_card == context.scoring_hand[1] then

pastel wolf
#

hmm

#

still doesn't do the mult

carmine flare
#

does it give a visual indication when the card triggered?

pastel wolf
#

it doesnt trigger

rare hill
carmine flare
#

if you look at the return in the idol code it looks like

    x_mult = self.ability.extra,
    colour = G.C.RED,
    card = self
}```

you could try copying that but with self.ability.extra.xmult
rare hill
pastel wolf
#

Except idol procs it on the card doesnt it?

#

not on the joker?

#

interestingly enough, idol doesn't function

#

No jokers seem to function

#

i may have a larger issue

#

maybe i put return calc_ref in the wrong spot

#

yeah, i moved it a bit and jokers seem to work now

carmine flare
# pastel wolf Except idol procs it on the card doesnt it?

yeah, if you put your code under elseif context.individual then ... it's going to be triggered on a card.

if you want it triggered on the joker you need to put it in the else condition of that big if...elseif...else statement in calculate_joker and then under if context.cardarea == G.jokers and then in the else statement of the if statement there.

this introduces some other issues, one I ran into is that the context.scored_hand value isn't set in that block. it gets a little technical.

pastel wolf
#

arg

carmine flare
#

go down to the end of calculate_joker there's a card called "The Buffer", it checks if there's a 5 in the played hand, not the scored hand

#

i am still not sure if it's possible to get only the scored cards in that context

pastel wolf
#

this one here

carmine flare
#

yeah, it just loops through the played hand and increments a counter when it sees a 5

#

then adds +15 mult if the 5 count is >=1

pastel wolf
#

i see

carmine flare
#

the issue is played_hand is not scored_hand and idk how to work around that yet

pastel wolf
#

local value 'fives' is 0, if in context.full_hand is a 5, set local 'fives' to 1

#

if fives is 1 do mult

#

i see

#

so context.full_hand is played hand not scored hand

carmine flare
#

yeah, so the 5 doesn't have to score

pastel wolf
#

hmmmn

carmine flare
#

let me test this cause the more i look at the code the more i think scored_hand should be assigned

pastel wolf
#

I'm not sure it is

#

i'm not sure there's a joker that procs like this

grand geode
#

the closest i can think of is Photograph

pastel wolf
#

That's still individual though

grand geode
#

oh wait

pastel wolf
#

i thought walkie talkie

grand geode
#

Midas Mask goes through full hand

pastel wolf
#

but that applies it to the card not the joker

carmine flare
#

ok scoring_hand is set idk what i was doing earlier

grand geode
#

oh on the joker

pastel wolf
#

So i just need to move it from individual to joker

#

i guess?

#

but it still doesn't seem to proc

#

even on the card

grand geode
#

something's wrong...

pastel wolf
#

oop

#

I'm confused again

#

lmao

carmine flare
#

anyone know how the debug messages work

pastel wolf
#

Also what inside the return at the end specifies how much mult the card gets

hushed furnace
carmine flare
#
    local last_suit = self.ability.extra.suit

    self.ability.extra.suit = context.scoring_hand[1].suit
    
    if last_suit ~= nil then
      if context.scoring_hand[1]:is_suit(last_suit) then
        return {
            message = localize{type='variable',key='a_xmult',vars={self.ability.extra.Xmult}},
            Xmult_mod = self.ability.extra.Xmult
        }
      end
    end
end

anyway this was my attempt at making the watercolor joker to work but i couldn't get it working

grand geode
pastel wolf
#

I've picked the worst first joker to try mod apparently

grand geode
#

all messages sent via sendDebugMessage() will appear in that window

carmine flare
#

tyvm

grand geode
#

it's basically print() but clearly you can't print to a console here

hushed furnace
#

is this right?

carmine flare
#

i guess it should be not is_suit(last_suit)

hushed furnace
#

that's the only part that stands out to me

grand geode
#

okay now that i'm done with my thing can someone recap what we're trying to do

pastel wolf
#

i wish i could contribute more to this

carmine flare
#

i was just trying to help itsmythie with a joker

hushed furnace
#

i've been working on some small, mostly QoL stuff, here's what i've implemented so far:

  • Madness gains the multiplier of another Madness if it eats it
  • Half Joker counts as half of a joker for Abstract Joker and Joker Stencil
  • Voucher Tag, Handy Tag, and Garbage Tag don't appear before ante 3
  • Boss Tag doesn't appear before ante 2
  • Burnt Joker and Sixth Sense shake when active
  • Dusk and Acrobat shake when active
    if anyone has some similar ideas i'd love to hear. took a lot of these from suggestions
grand geode
#

can you send your .lua file over

manic jasper
pastel wolf
#

Sure. i was trying to understand how make it a joker ability and not an individual, but im not quite wrapping my head around it

#

i've also got the wrong mult ability in there

carmine flare
#

i figured something out

#

when you get the context.scoring_hand[1].suit it should be context.scoring_hand[1].base.suit

#
    local last_suit = self.ability.extra.suit

    self.ability.extra.suit = context.scoring_hand[1].base.suit
    
    if last_suit ~= nil then
      sendDebugMessage(self.ability.extra.suit)
      sendDebugMessage(last_suit)
      if not context.scoring_hand[1]:is_suit(last_suit) then
        return {
            message = localize{type='variable',key='a_xmult',vars={self.ability.extra.Xmult}},
            Xmult_mod = self.ability.extra.Xmult
        }
      end
    end
end```

this triggers for me. not sure how if it works with wild cards though.
#

also i spelled watercolor the american way in my code so watch out for that

pastel wolf
#

That's fine i can see that

#

does the start of this look wrong?

carmine flare
#

yeah that elseif context.individual should just be an if

pastel wolf
#

oop, now i need another end

carmine flare
#

if you look at the code on github i shared earlier i included all the if...elseif statements from the balatro source to prevent any unintended contexts reaching the final else statement. my game was crashing before i added that

pastel wolf
#

this is what i just got

carmine flare
#

like i have all the elseifs but they do nothing

#

this may help prevent that

pastel wolf
#

what, adding all the elseifs?

carmine flare
#

yeah

#

essentially you just want to avoid a calculate_joker call that wouldn't make it to the else statement in the official game from making it there in your code

#

cause they all have different contexts and some may not have all the variables you rely on defined. like scoring_hand

sudden shell
#

all of those empty cases can't have any effect, regardless of context

carmine flare
#

not sure what you mean

grand geode
#

yeah i think in this case all the elseifs are needed

woven sonnet
carmine flare
#

if calculate_joker gets called with end_of_round set to true but you don't have that case defined it'll fall through to the else statement. and all the jokers get evaluated at the end of round. so it's gonna call the joker ability but the end of round context wont have a scoring_hand

#

you could also check that all your context variables are defined/not nil i assume. i've never used lua so i don't know the specifics

pastel wolf
#

hmm

#

doesn't want to trigger still, i might've put the elseif wall in wrong though

grand geode
#

i believe this is the context for Flower Pot which should have the same conditions as Watercolo(u)r Joker
{cardarea = G.hand, full_hand = G.play.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands}

#

so yes all the elseifs are required

pastel wolf
#

how do i pull up the debug messages?

pastel wolf
#

run as in

#

uhhh windows+r run?

#

or different run lmoa

#

at the risk of seeming like a bigger idiot

grand geode
#

.. do you have Python installed?

pastel wolf
#

.py

#

its been a long day

grand geode
#

ahh

#

install python eyah

pastel wolf
#

mmm

#

i'm drowning in all this coding stuff ahaha

grand geode
#

you will need to install the latest version of Python to be able to run the .py script that opens the debug window

pastel wolf
#

yup, i got python

grand geode
#

yea you can now run that script and it will open the tk window

pastel wolf
#

man i'm so not a coder

grand geode
#

:p

pastel wolf
#

maybe someone can see why this doesnt trigger, cuz i sure cant

grand geode
#

context.individual should be elseif

pastel wolf
#

killed itself when playing a second suit

#

i'm sorry, does that say an issue in line 135?

#

thats the xmult return

grand geode
#

define the Xmult in the extra field at the top

pastel wolf
#

uh

#

my ass does not understand demconfused

little wharf
#

idk anything about modding for this game but the error suggests that in the return message string "message" you are trying to pass a nil value, and when it tries to concat (combine) the strings to become one message, it crashes

grand geode
little wharf
#

meaning some variable following the message = is nil

grand geode
#

have Xmult = some value in the extra table

pastel wolf
#

oh this one up here?

grand geode
#

mhm

pastel wolf
#

ah i getcha

#

thanks

#

i was wondering where the number for the bonus came from

#

makes sense

#

i've put this in and it has the same issue

grand geode
#

suit doesn't exist either

pastel wolf
#

it doesnt?

#

ah shit

#

oh man do i have to define suits like seeing double does

#

which suit doesn't exist? i'm confused

#

cuz it's mentioned in other cards

grand geode
#

oh nono

#

just put suit in the extra

pastel wolf
#

oh

#

oh

#

cuz it says self.ability.extra is suit

#

i get what you mean

#

dammit same ccrash

#

does suit need to = something

grand geode
#

just put like "None"

pastel wolf
#

Huzzah

#

the effect works

#

thank you everyone

#

fuckin carried my ass there

#

One thing left to do for that card

#

and that's to fix the description so it displays the suit

#

i have an error

#

it does not trigger in order with other jokers

#

it just goes first

mental solar
#

this is some code that's from a deck example, i'm trying to edit it so aces are glass, not all cards, though i don't know how to do that, could i have some help? 😅

#

if more info is needed i can give it, though i don't know what information is needed to understand the problem. this is not my code.

little wharf
#

you probably are interested in the for loop, that loops thru every card and sets it ability to glass

#

you want to make a check if the card rank is ace then set it to glass

#

instead of every card

#

look at other code examples that check/modify rank to see how you might determine the rank of the card

pastel wolf
#

Is there something i have to plug into my code to make it wait for other jokers before playing?

#

Cuz even if the card is on the rightmost it still plays first

grand geode
#

no clue

pastel wolf
#

Maybe its because it's individual?

#

Ah idk

#

The effect works

#

Accomplishment enough for now

#

I should probably test it with wild cards too

#

Thanks a bunch for your help myst

past tendon
#

Isn't watercolor joker supposed to work like photograph (photograph procs when card is scored, before any other normal joker) ? If that's not the intended effect, I think the xmult shouldn't be applied in context.individual

pastel wolf
#

Its supposed to work like card sharp

#

Or any of the normal xmult cards

#

The order the family etc

#

I'll work out what its supposed to be tomorrow

reef finch
#

if one wished to get into modding, what would be a noob's guide to modding

#

or like first steps to take

grand geode
#

the game is still new so there aren't many resources to get started with modding yet

#

if you had prior experience with a programming language then lua os pretty easy all things considered, you can check the source code or existing mods to see how lua works

reef finch
#

thanks

vernal urchin
#

imo lua is so much harder than other conventional languages, its a mess getting to understand someones elses code

grand geode
#

oh really

#

lua to me is just worse python

lean dune
#

I doubt that's really about the language itself, more so your style and what you're used to reading

#

array indices starting at 1 is mad tho

vernal urchin
#

thts not that bad

#

everything being a table is very annoying tho, basically no static typing at all

#

comparing python and lua python is def cleaner, even tho they both serve simmiliar purposes

lean dune
vernal urchin
#

true ig

patent spruce
#

im 1 hour new to modding 🙆‍♂️ i have no idea what im doing

grand geode
#

SOB

#

WHAT IS THIS

karmic lynx
patent spruce
#

this deck will be so fucked up to play

#

i imagine this snowballs very well in late game but it will kind of force you to change strategy mid early game

#

thats the first come that come up to my mind for a basic to code deck

#

right now its not entirely functional i need to figure out the inner workings a bit more

#

but its coming fast 💪 💪 💪

karmic lynx
#

It’s a pretty unique idea

#

I would try my hand at making some stuff myself but I have zero experience with Lua

patent spruce
#

me too :x im just making shit up

grand geode
#

i think this one wouldn't be too bad to setup tbh

patent spruce
#

Commiting to the bit has lead me to places I wouldn't even go with a gun

patent spruce
hardy brook
patent spruce
#

perhaps

hardy brook
#

Downside: You’re losing the 2x mult per card.

Upside: You get more joker slots thanks to “Oops All 6s” not being there

#

And it’s breaking bad

grand geode
#

the discard gimmick can be gamebreaking

patent spruce
#

it can go insane yeah

hardy brook
#

Btw, 0 cards left in deck = Instant game over

#

Like many tcgs

rare hill
# proud wadi Real hero behavior here!

yeah, as soon as the PR goes through it should Just Work - in the meantime if you want to copy the code within my PR there shouldn't be any issues from it being duplicated

proud wadi
#

just recalling set_sprites in set_ability is working for now, but it's good to know that it shouldn't be necessary once the PR goes through

rare hill
#

yeah, in effect the PR is doing a similar thing, just in a less janky position

#

(wrapping around set_sprites where the issue lies rather than set_ability)

rare hill
#

no discussion of debugging the source code.
looking at the combination of this and the collection menu with annoyance

hushed furnace
#

collection is bugged?

muted vault
#

if it is a "this code isn't optimal" kind of thing, I wouldn't say that qualifies

rare hill
#

aha

white scarab
rare hill
#

because yeah, what I found is stuff like the tarot collection using math.floor instead of math.ceil, and spectral cards going off of the number of tarot cards you have instead of the number of spectral

#

(and also math.floor for spectral)

grand geode
#

i still have no clue what counts as debugging source code

rare hill
#

it doesn't matter for the vanilla game because the number of cards is always set, but it instantly pops up once you start adding tarot or spectral cards

muted vault
rare hill
#

math.floor prevents there from being a new tarot page until there are 11 new tarot cards or more

muted vault
rare hill
#

and, again, the number of pages for spectral cards is based on the number of tarot cards you have, in a way that is DEFINITELY not intentional

grand geode
#

ic

rare hill
#

because it uses 9 instead of 11, when 9 is meant for spectral and 11 is meant for tarot, based on the rest of the code

muted vault
#

I would say find a practical way to reproduce this, and if you can do so without using code as an example, it is fair game to post to bug-reports. fwiw I have seen people comment about "bugs in the code" that weren't actually bugs.

Not saying you aren't correct, but put yourself in thunk's shoes. Repro it in the game and I think you can bubble it up to bug-reports

rare hill
#

So if it's not possible in vanilla I can't report it?

#

because it strictly cannot affect vanilla because the number of cards in the collection is static

#

it'll only affect thunk if they try to add more cards, which they may or may not

muted vault
#

Ah I see, yeah, I would say keep this in your back pocket in case more cards are added in the future where you can repro in vanilla, and/or create a fix for this for people playing modded and post about it in the #1209506514763522108 channel

#

I would give thunk the benifit of the doubt that they would address this if/when more cards were added to the base game

rare hill
#

yeah, I'll be making a fix mod, it's just gonna be really destructive coding which I don't like to do

lean dune
#

right, that thing...

#

same thing for planets applies

#

except it's just not paginated at all

#

adding 4 planet cards it would show 12/16 with exclam, but you can't get to the last 4 cards

rare hill
#

yeah, same with enhancements and seals as well, but that's at least more understandable since base game only needs one page

#

I'm mainly frustrated by the fact that I can't report the typos, because they are typos from copying and pasting code

lean dune
#

i ended up changing planets to 8 per page in six suits because I didn't want the second page to be that empty

#

so long as this isn't fixed, I guess it'd be better to have a fix mod instead of each mod that needs it destructively making that change

rare hill
#

the thing with spectral and tarot means that the number of spectral card pages LITERALLY depends on the number of tarot cards

#

yeah, that's what I'm working on rn

lean dune
#

yeah that's silly

#

literal copy/paste error

rare hill
#

probably going to just put it all in one function that gets called by all the menus rather than the copy/paste job that it's currently set up as (and no hard feelings about it being a lot of copying/pasting, but uhh yeah I'mma make a nicer version for myself)

lean dune
spice spear
#

absolutely cursed thought but has anyone made a new hand type

lean dune
#

still potenially unbalanced though

spice spear
#

ah yep you did basically exactly my idea

hushed furnace
spice spear
#

actually I wonder if that would be a 5 of a kind

lean dune
#

lol no

#

5 stones is just high card in base game

spice spear
#

damn

lean dune
#

as stones specifically have no rank and suit

spice spear
#

woulda been funny if it was a 5 of a kind (the kind is Nothingness)

compact iris
#

id love to see a 5 rocks hand with the related planet being asteroid belt

hushed furnace
#

how'd you know?

#

well, it was going to be kuiper belt

compact iris
#

search my history ive said it before, months ago haha

#

been in the back of my mind since

hushed furnace
#

not surprised other people have thought about it lol

compact iris
#

kuiper belt makes more sense as it has a proper name

little wharf
compact iris
#

if someone feels like implementing a whole system, there was talk about a "subhand" system months ago

spice spear
#

@rare hill (half joking)

compact iris
#

which would change the way planets work, making some of them more broad and adding more specific ones for nicknamed hands

#

like jupiter would have a significantly reduced effect but buff all flush related hands

spice spear
#

subhands could be moons...

compact iris
#

yeah you could do a flush moon that is w eaker but buffs all flush related hands

#

same with straights, pairs, etc

rare hill
lean dune
compact iris
#

oh yeah its an entirely new system

spice spear
#

other way around, the planets are the blanket buff, the moons are the subhand specific buffs

compact iris
#

ah gotcha

rare hill
#

although not really "hard", just needs some messing around to see how destructive it needs to be

compact iris
#

but yeah implmenting subhands in the right way could negate the issues of adding new hands

lean dune
compact iris
#

which then allows adding potentially dozens of nicknamed hands that could all score differently

rare hill
hushed furnace
rare hill
#

oh wait, actually, I just realized that subhands are a different thing than I thought you were talking about

lean dune
compact iris
#

oh also if anyone wants more ideas, id love a pack of planet cards that are more generic than single hand, somewhere between black hole & planets

#

ive made the suggestion to localthunk a few times over the time ive been here

rare hill
#

I was thinking a system for stuff like the "includes a 3 pair" jokers, but if it's just a "hyperspecific hand" that should be totally fine to just wrap the functions and do

little wharf
compact iris
#

well the idea is you change the way the whole poker hand leveling system works so its more generic, and less targeted

rare hill
compact iris
#

which then allows you to add more specific hand types that dont get screwed by needing a hyperspecific planet card

lean dune
#

i thought this would go hard on the hand calc, but that's the easy part here

#

more so the way hands are managed and the planet system

compact iris
#

like a planet that specifically benefits nicknamed hands with low cards, like wheel (12345 straight) or one that benefits high value cards (royal flush)

rare hill
compact iris
#

im sure it is, just sorta stream of consciousness remembering all the suggestions ive made lol

lean dune
#

it would just require splitting the hands

#

and probably making levels from the base hand carry over to the subhand

hushed furnace
#

or maybe a card that buffs named subhands in general would be cool

lean dune
#

imagine seance "if played hand is a royal flush"

compact iris
#

and that buff would be stacked on top of the actual hand it pulls from

lean dune
#

if you count my mod in, also royal spectrum

#

but eh

hushed furnace
#

or even a joker

#

xmult if you play a named hand or something

lean dune
#

adding hand nicknames isn't out of the question, it's just a thing of whether you'd need to pass additional information to be able to check the displayed hand name against the actual hand name

#

no wait that doesn't work

#

because loc

rare hill
#

just add a "subhand" variable

#

almost everything is passed by table, I doubt this is an exception

lean dune
#

yeah we can probably pass that somewhere in an args table

#

shouldn't bee too big a deal

rare hill
#

Looks like the generic implementation idea's gonna work out

rare hill
#

ok, joker and tarot collection menus are reimplemented

#

gonna take a break to fix tarot sprites because that's what's bugging me now [edit: oh. That was a typo on my fix specifically in the mod. It's working now, and the PR had it fixed anyway]

#

oh god generate_card_ui is gonna need a full recode (within a mod) at some point, since there's no clean way to hook into it

#

at this point Steamodded's gonna have a ton and a half of extra stuff just to make things work smoothly

spice spear
#

are you gonna ship of theseus the entire game gepsi

rare hill
#

Possibly, given enough time and incentive

near ridge
#

if I may ask, how difficult is it to mod Balatro currently?

I kinda wanna try making a small mod, but the size of the mods (and the fact they're all just one file) kinda scares me lol

hushed furnace
#

i've just been directly modding the source and it's pretty easy with knowledge of programming in general

past tendon
#

Depends on what you want to do.
Reskinning is pretty easy. Creating new decks/jokers is harder and you'll need to spend time learning how the original code works

near ridge
#

ah alrighty, I wanna try creating new stuff so I might have to spend some time learning the codebase yea

rare hill
#

I have some code that's gonna make adding jokers a LOT easier

near ridge
#

Oooo can't wait for that then

rare hill
#

I'm just trying to finish up the actual mod part first, because it has a few fun ideas I've been asked to make

rare hill
hushed furnace
#

i'm going to swap these on my client

#

this is from the scoring function, +mult on cards in hand triggers after xmult. idk if this is intentional but i'm not a fan

#

common_events.lua, around line 830

#

shouldn't need anything more than swapping the order of those

#

yeah you probably can, i just haven't bothered to figure out the modloader api since the source is so simple and i'm mostly modding for myself 😅

#

otherwise i'd post a patch myself

hushed furnace
#

can you add enhancements to cards in example hands (in the hands table)?

lean dune
uneven ravine
#

what do i need to add here to add a specific joker to that deck?

hushed furnace
lean dune
hushed furnace
#

thank you

past tendon
#

I have a small unresolved issue that's been puzzling me.

I'm trying to implement a joker that mostly works like erosion, meaning it depends on the number of cards in your deck. The scoring part works well, the joker works as intended during gameplay. Generating the description is a bit harder though, when I look at the joker description through the collection in the main menu, game crashes because G.playing_cards does not exist. I mean, it kinda makes sense because I haven't started a run so I don't have any deck yet.

However, when I look at the original generate_UIBox_ability_table function, erosion uses :
elseif self.ability.name == 'Erosion' then loc_vars = {self.ability.extra, math.max(0,self.ability.extra*(G.playing_cards and (G.GAME.starting_deck_size - #G.playing_cards) or 0)), G.GAME.starting_deck_size}
It clearly uses G.playing_cards, and checking erosion description through the main menu does not crash the game. I'm not sure what happens here

little wharf
#

It looks like it checks if G.playing_cards exists, and if it does then it takes starting size minus playing cards, but if it doesn't, then it sends 0

past tendon
#

oh so that's why it uses or 0 , I was so confused on this part. That means evaluating G.playing_cards does not actually crash the game but trying to display it does.

#

I feel so stupid lmao

little wharf
#

I've never coded anything in LUA, so I mean you can take it with a grain of salt, all my familiarility is in other languages.... but just from using that knowledge, it's what it -looks- like it's doing to me.

past tendon
#

yeah it makes sense

little wharf
#

That way it can display a value if g.playing_cards doesn't exist (you don't have a deck yet) or if it does exist it displays based on the deck's count.

#

Checking the deck's count when it doesn't exist -can- cause a crash because you're trying to access a nil (or null) value.

#

But checking if it exists at all, doesn't crash it, because you're only looking to see if it is there or not.

past tendon
#

Problem solved, thanks 👍

proud wadi
#

yeah, there's a lot of really clever bits that use the "something and (do thing with it) or value", G.playing_cards is nil, so it doesn't evaluate the and and jumps to the or

little wharf
#

Something ternary operators in other languages are great for

rigid jewel
#

I was confused as to how the logic is evaluated here

proud wadi
#

nil is falsy

pastel wolf
#

all my homies hate nil

exotic shadow
#

null is annoying can confirm

#

as a js dev

candid patrol
#

Is anyone working on mods for the switch version?

molten igloo
#

console modding is not allowed

#

modding rules, rule 4

orchid bear
#

what

#

modding rules?

molten igloo
#

check pinned

tacit mountain
orchid bear
#

oh

#

weird

candid patrol
#

My mistake. Will repost my question in general.

#

And on unrelated note. How do you see pinned messages on mobile? Haven't been able to do so since they changed it.

muted vault
molten igloo
muted vault
#

with that said, thunk laid out the rules, so no discussing modding on anything except PC, please

candid patrol
candid patrol
molten igloo
molten igloo
muted vault
candid patrol
#

Or statement by thunk.

molten igloo
candid patrol
#

Kay. Makes sense. I can see that.

sand thicket
#

Has anybody managed to make a modded Seal yet? ;0

viscid spear
#

hey chat, newb question here, but where would i find the image files for the different cards in the game? i have a super simple idea for just replacing some textures i wanna try out

sand thicket
#

Open the exe as a zip , should explain itself from there , there's a texture folder

rare hill
viscid spear
#

didnt know that was possible

#

okay now i just need to find the heritage for the future tarot cards lol

hidden tapir
#

Quick question, is there a readily accessible list in JSON, CSV, etc. with the different assets like jokers that displays cost, rarity, description etc?

viscid spear
#

wow this looks like shit but w/e proof of concept

hidden tapir
white scarab
#

it's in game.lua iirc

white scarab
viscid spear
#

aight will try

hidden tapir
#

just need to cobble them together into what i'm looking for

molten igloo
white scarab
#

that part should have what you want

hidden tapir
#

it literally just worked for me with 7zip, right click the exe, extract to balatro/

white scarab
#

init_item_prototypes() in game.lua:215

hidden tapir
#

yup, i think i'll knock together something repeatable because i suspect things will get tuned with time

#

i don't know the first thing about lua but i'm pretty decent with grep and sed 🙃

viscid spear
white scarab
#

what will happen?

#

I predict Jimbo will spawn

exotic shadow
#

legendary jimbo

#

that a dup or a freeze

white scarab
#

interesting, it appears to pull random ones

#

let me try it without spawning the legendaries in with debug

exotic shadow
#

I could probably spawn a bunch of soul's

#

or I guess you probably can with debug

white scarab
#

yep

#

ok I was right

#

I guess debug mode spawning bypasses white whale check

exotic shadow
#

yeah

hushed furnace
#

jimbo secret legendary confirmed

exotic shadow
#

in one of the demos (maybe both) once the shop ran out of jokers to make it just froze the game

#

now it just spawns a normal joker

#

good fallback

white scarab
#

there are fallbacks for pretty much everything now

exotic shadow
#

yeah

#

iirc planet is pluto, tarot is fool, voucher is blank

pastel wolf
#

hushed furnace
#

spectral is incantation

viscid spear
#

i decided to actually try and make a custom sprite for one

hushed furnace
#

oooh

livid yacht
hushed furnace
#

i wasnt sure it'd be able to translate to balatro's resolution

#

from the scan

viscid spear
hardy brook
#

I had an interesting idea

#

What if i imported 6KT to Balatro while i’m working Hanafuda

#

I have the full version

orchid bear
#

since all the other fallbacks are the most basic in that group

#

like pluto for high card

#

fool is pretty obvious since its tarot 0

#

and the base joker cause

#

its the base joker

#

but spectrals dont really have a basic one

spice spear
#

which one is incantation again?

orchid bear
spice spear
#

it's because it's number cards

#

adding number cards is the most basic thing the spectrals do

orchid bear
#

true

#

honestly i would think immolate is even more basic

hushed furnace
#

immolate could end your run

orchid bear
#

wait yeah

#

eh yea i guess i get it

white scarab
#

Immolate is really busted

strong swift
white scarab
#

both Immolates

sand thicket
#

umm its cuz it starts with I . that means 1 . duh ||/j||

white scarab
#

The one thing I hope with that is people don’t use it to backseat streamers in endless

sand thicket
#

I'd say its probably the most tame / reasonable, it can kinda happen in any scenario too

white scarab
#

“Oh, you should open this spectral pack, the first one in ante 11 has soul!”

#

Or “you should buy this bad joker so the redraw gives you Blueprint in two antes!”

rigid jewel
#

I still remember that gold ghost deck loss w/ Baron where two immolates were available in spectral packs and both drew all my kings.

carmine flare
#

i'm trying to make a joker that adds +25 chips for every ace in hand. Turns out the spot in the code that checks all the cards in hand only supports adding mult, multiplying mult, and adding money

#

i think i'd have to fully override G.FUNCS.evaluate_play

spice spear
#

that's wack

#

but tbf that's the only kind of effect that was intended for the game so someone's going to have to make a mod for that

rare hill
#

you can do it manually

#

check the jokers in shampack

#

oh, wait, in hand

#

I'll have to take a look at that, that's an interesting one

spice spear
#

yeah it's why I nudged you about this one

carmine flare
#

in hand is the issue

tacit mountain
#

I'm gonna send a Nightly build with the Joker API in a matter of minutes

#

And I will need some testing

rare hill
#

oh?

spice spear
#

I should probably like, play with mods

#

so I'll DL that and play ShamPack along with it

tacit mountain
#

Because I don't know if it cover everything needed or not

#

And I assume not

hidden tapir
#

back coding in windows because Balatro and i forgot how comparatively finicky it can be. not a bug i'm looking for help with, just having a moan

tacit mountain
carmine flare
hidden tapir
#
def main():
    print("wtf?")
    return 1
> python wtf.py
Process finished with exit code 0
spice spear
#

probably not

carmine flare
#

you can put anything in the table when you return it. issue is it doesn't know to look for what you added

tacit mountain
carmine flare
#

i put the full evaluate_play func in a new lua file and added the chips handing from the played card code to the in hand code and it works fine

#

obviously not ideal but it does work

tacit mountain
sand thicket
#

Thanks for your hard work Steamo 🙏

carmine flare
#

i am adding my joker function in context.individiual, context.cardarea == G.hand

#

but adding chips to the return table in that block does nothign because in evaluate_play the effects handling never checks for chips

#
for ii = 1, #effects do
    --if this effect came from a joker
    if effects[ii].card then
        ...
    end
    
    --If hold mult added, do hold mult add event and add the mult to the total
    
    --If dollars added, add dollars to total
    if effects[ii].dollars then 
        ...
    end

    if effects[ii].h_mult then
        ...
    end

    if effects[ii].x_mult then
        ...
    end

    ---------------------------------------
    --- NEW CODE TO SUPPORT CHIP EFFECT ---
    ---------------------------------------

    --If chips added, do chip add event and add the chips to the total
    if effects[ii].chips then 
        mod_percent = true
        hand_chips = mod_chips(hand_chips + effects[ii].chips)
        update_hand_text({delay = 0}, {chips = hand_chips})
        card_eval_status_text(G.hand.cards[i], 'chips', effects[ii].chips, percent)
    end

    --------------------
    --- END NEW CODE ---
    --------------------

    if effects[ii].message then
        ...
    end
end```
#

that's what im adding to the evaluate_play function

tacit mountain
#

That's odd

#

It do it in G.play

#

But not in G.hand

carmine flare
#

yep

#

i copied my addition from G.play lol

#

it's not a thing that happens in the base game so im not that surprised

exotic shadow
carmine flare
#

reserved parking adds money

exotic shadow
#

oh yeah

#

huh thats odd

hushed furnace
# hushed furnace

while you're rewriting the function you should consider swapping these

carmine flare
#

what function is that in

hushed furnace
#

scoring

#

card_eval_status_text

carmine flare
#

that doesn't actually effect the scoring result, that function gets called by evaluate_play and just shows the text for what's happening

hushed furnace
#

yeah, looks like their orders are different

carmine flare
#

if you look in evaluate_play for calculating the played cards it goes chips -> mult -> x_mult

#

i guess my chips handling should go first in my code to match G.play

hushed furnace
#

yeah

#

so does that mean the displayed calculations will be wrong?

pastel wolf
#

Whats the opposite of context.individual btw? If i want my joker to proc in order at the end of the hand playing

#

Cuz atm it procs when the first card scores

tacit mountain
#

Example mod

pastel wolf
#

Wait which one?

tacit mountain
pastel wolf
#

Ah si

#

I'll have a peep when im home, thanks steamo

#

Legend

proud wadi
#

Does anyone have a semi-reasonable grasp on the events? I'm trying to clean up some of my code, and what I need is to wait for Card:start_materialize to finish, so I can set the card back to .state.hover.can = false. I've tried just using add_event as is (assuming that it would queue them and call my second event when the first finished) but no such luck.

pastel wolf
#

@carmine flare thanks for all your help last night btw

#

I managed to get it triggering, just triggering at the wrong time

carmine flare
#

np

pastel wolf
#

I'll sort that out and test it with smeared and wildcard when im home

#

Switch it from context.individual

limpid briar
#

This is probably a silly question coming from a non-modder, but is it possible to recreate the backgrounds of the game in any software so I could make my own with the shaders in Balatro? Or would I need extensive dev-type knowledge.

proud wadi
rare hill
#

because replacing the base joker atlas means you can only have one joker mod at a time

tacit mountain
#

Not to be production ready or anything

rare hill
#

ah, so only to test the parts such as calculate_joker?

tacit mountain
#

Yep

#

And so I can know what is missing and if the global design is working or not

rare hill
#

That makes sense. I do want to point out a second direction for possibility, which is making functions that add Any type of card/item (such as what I do in ShamPack), mainly because with how this api looks right now it's what I'd probably keep using even with a finalized version of your api

#

but that's more preference than anything

#

thankfully the way it works isn't destructive at all

tacit mountain
#

And avoid over referencing/overriding the source code with it

rare hill
#

yes, and your api does that better, but I was referencing how it's one set of functions for jokers, tarot cards, enhancements, etc

#

I also personally prefer the way sprites are handled for mine from an api standpoint, but I understand that multiple atlases aren't preferred for efficiency

tacit mountain
#

Generic "Cards" functions will come later, or maybe I will just make it more flexible I don't know

rare hill
#

instead of messing around with the position of the sprite on the sprite atlas you just tell it what sprite you want and it loads the files for you

#

I need to look to see if love2d has atlas stitching, but if it does that can be used as a way to simplify the whole process while limiting the number of atlases needed

#

but yeah, I think my tl;dr is that it seems like a good api for getting people into modding the game, but I personally don't think it's generic enough for what it might want to be expanded into in the future and that it could abstract away a little bit more of the busywork

tacit mountain
#

That's the plan for custom sprite

#

To use whatever Sprite you want, atlas or not

#

If you look at the previous Sprite API that what @white scarab and I were doing

#

But I have to put priorities sadly

pastel wolf
#

So you've made it so this Joker api works with steamodded

tacit mountain
#

The Joker API is part of steamodded, the Example mod (or JAPI) is simply there to demonstrate a basic usage

pastel wolf
#

i see

#

Good work

leaden trench
#

is there any way to make a mod that uses different deck art for the challenge deck? should i just unzip the game, switch the art around in the png, and zip it back up again, or would that mess everything up?

pastel wolf
#

you need to grab the 1x png file of the decks

#

replace the one you want with yours

#

and then export that in both 1x and 2x

leaden trench
#

yeah i know how to do the art bit i just don't know if i'd be able to run it as a game in steam again

pastel wolf
#

why wouldnt you be able to

leaden trench
#

idk i just wanna be super sure catsob

pastel wolf
#

i've switched art around in the files a few times

#

no issues

leaden trench
#

okay cool thank you ❤️

pastel wolf
#

:)

proud wadi
#

ayy, i've rewritten the basics for my seer/oracle joker effect, i've got it tied to having the joker, now i just have to fix it so it goes away when you aren't in a run, and actually shows correctly if you continue a run

hardy brook
#

Messing around with ranks

#

It won't be Infinite chips, but something like 100 chips

pastel wolf
#

am i understanding this right?

#

probably not cuz it doesnt seem to update the joker

rare hill
#

don't have the {} around all the inputs

pastel wolf
#

oh i can just true, true, true

rare hill
#

ye

pastel wolf
#

does the JokerAPI just use the base jokers.png

rare hill
#

yeah, for now, it's WIP

pastel wolf
#

ah okay

rare hill
#

more for testing than product currently I think

pastel wolf
#

Ah si

#

i'm not sure what context i need to use to make this work properly

#

none of the jokers in card.lua seem to have a context unless they activate in a different way

twin river
#

I'm starting to learn how to mod games, starting with Balatro. Anyone have advice on how to debug your code?

pastel wolf
#

join the club

mint carbon
#

is it possible to perma just unlock all the decks/stakes in the normal game with mods? or would it have to run on its seperate version forever and not in the actual game if it was updated or files verified

#

no way to get the game to think its been completed and have them agree its actually unlocked

pastel wolf
#

Ah i'm lost again, i think context.scoring_hand[1].base.suit is falling through or something

#

that's the line i have issue with

exotic shadow
#

funny selecting

proud wadi
pastel wolf
#

Or if i take it back to what it was with the wall of elseifs

#

it will trigger the joker before any chips or anything

#

i think i need like, end_calculate_context or something

#

no

rare hill
#

if you run it from console you can just use lua's print()

exotic shadow
#

printing is like the simplest method of debugging in any language

pastel wolf
#

I'm not sure what's causing it to do this

#

trying it without the effect in there to see what happens

#

Now it triggers 3 times

#

but only 1 real time

leaden trench
pastel wolf
#

use 7zip to open the exe archive

#

and just swap the pngs around

leaden trench
#

ohh okay i must have just . not been pushin the right buttons i think i got it

#

you're the best catjump

#

yaaaay thank you

pastel wolf
#

you're welcome

#

:)

leaden trench
#

not sure im a fan of the lil bits that peek out so i might just get rid of those

pastel wolf
#

Ayy

#

I got it to work

exotic shadow
#

Why does the save file let me do this????

pastel wolf
#

Anyone know if the UIbox override involves colours?

#

I think i may need a hand on the uibox stuff, trying to get it to specify the suit that its on

exotic shadow
#

game is silly

pastel wolf
#

HAh

#

YES

#

i'm so good

#

Also whoever wrote the uibox override you deserve head

#

Now i just need to work out how to add the colour of the suit that it currently is

grand geode
patent spruce
#

YIPPIE

exotic shadow
#

unmodded game btw

unique elbow
#

How do you have so many jokers?

grand geode
#

if you mod your save does that doesn't count as unmodded

#

smh

unique elbow
#

How are there celestial packs where your jokers go.

exotic shadow
#

shanagnigans

unique elbow
#

Wdym

#

Like mods actually

#

Mods

exotic shadow
#

well the game is unmodded but I modified the save file

grand geode
#

you can put any card (joker, playing, booster, voucher, consumable) in any area

unique elbow
#

If you mod your save file.

#

?

grand geode
#

yes

unique elbow
#

Oh

pastel wolf
#

Hey Myst is there anything particular i have to do to make jokers work correctly with blueprint?

#

ohhh i know why it doesnt work with blueprint

#

blueprint sets the last_suit when it triggers, and then the joker checks and sees the last_suit as current suit and then doesn't trigger

mystic yew
#

Hi not really modding but I have a question is there a way to only view the background in the game the spinning circle is just so hypnotizing i love looking at it would love to put it in wallpaper engine

hushed furnace
#

is this anything

past tendon
pastel wolf
#

Been putting more in

hushed furnace
#

love the receipt texture

pastel wolf
#

Thank you, its one that i'm most proud of

hushed furnace
#

turned out really well

pastel wolf
#

it looks pretty cool negative

hushed furnace
#

yeah that's sick

pastel wolf
#

i've just been putting the art, names and rough descriptions in

magic sandal
#

modding chat what yall think about this idea?

pastel wolf
#

i'll work on the abilities later

grand geode
#

wait i read that as 1 not -1

magic sandal
#

i mean its somewhat dependant on rng but i see it as more of a challenge

#

challenge version of plasma

grand geode
#

so like gold stake?

#

and less joker slot

magic sandal
#

somewhat

#

i cant imagine trying to do this with gold stake ontop of everything already on

pastel wolf
foggy crag
#

We need a Joker with w 1000 yard stare

#

• Scored cards in your first poker hand get a rank up.

#

smth like that

pastel wolf
#

the 1000 chip stare

#

Interesting that gold is still gold when negative

pastel wolf
#

1000 card stare

lean dune
# magic sandal modding chat what yall think about this idea?

balacing is more powerful the later it happens though. Say you have 100x3000 after all jokers (Xmult X2 X3 X5), balancing will turn that into 1550x1550 or about 2.4 million. Balancing 100X100 does nothing, then the Xmult will up that to 100x3000 all the same, like no balancing happened at all

magic sandal
#

I mean I just thought about it making chips jokers more viable with xmult joker

#

If you have like 200x15 and a xmult joker it won't help you as much

#

Might have to rethink this idea

forest creek
#

hello , how can i download the mods ?

grave panther
#

hi all - we have refreshed the modding forum rules and i would urge you all to take a look

#

additionally - because we can only have one pinned post - i am happy to put additional critical resources inside the pinned post for easy access. if there are a couple things that are foundational to the work of the folks in this channel please come up with a short list and i will incorporate those there

#

i've included the starter guide linked above already

#

I have no issue with OSS licensing and our server rules exist on top of that.

hardy brook
# hardy brook

So i just realized this is gonna be a larger task than i thought

#

I thought i had every card

#

I definitely do not

#

They came out with half suits, something called “Dozenal”

#

They have french rankings, they got whole different sets of cards under the name

#

There K6T, iRB, ovalia, etc

tacit mountain
#

Hello! Little reminder that you can still test the Preview of the JokerAPI there: #⚙・modding-general message

If you do think this is not covering enough possibilities and/or this is not practical, please let me know.

hardy brook
#

Okay so i may not have to worry about dozenal

#

It’s the same deck just in base 12 instead of base 10

little wharf
tacit mountain
little wharf
#

That is not what that means by any common definition.

rare hill
#

For the forum rules I would personally appreciate a more detailed description than "don't debug source code". It's broad to the point where while it could mean just "don't bug the dev about bugs", it could also mean "don't make mods that fix issues", which would be much worse, and I'd rather not have to assume and possibly get burned on the line being interpreted differently than I think

#

And yeah, no, open source means free to redistribute and reuse

little wharf
#

If it is supposed to mean that your source code be available and accessible for viewing, I understand that; but if I am confused about it, so many others will be too.

tacit mountain
rare hill
#

also I'd much rather people feel free to just Use my code rather than worrying that they're not "allowed to" and having to track me down to ask

little wharf
#

I fully understand having source accessible for viewing to ensure that no malicious code is being distributed through the Discord, it makes sense that you would require that the code be viewable. I only asked the question because #6 implies expressly permission for #5.

tacit mountain
rare hill
#

fair, I guess

tacit mountain
#

I think it does the trick? That's what they are doing in other modding community as far as I know.

tacit mountain
woeful finch
#

“may” means “could” in this context i think

#

not 100% confident tho

compact iris
#

"may" in this case basically means "can" yeah

grave panther
#

the may in the definition above is permissive - the intention is that code be available for viewing for the safety of other users

compact iris
#

its still good practice to denote that you are okay with code being redistributed

#

even if open source 100% meant you are allowed - its still nice to make sure the original creator is okay with it

grave panther
#

i can come back and do a clarifying pass on the rules - i'm not opposed

as to the question about "do not debug" - that has been effectively verbatim in the pinned channel rules for a while. for now can we just use our best judgment please.

we don't want to be overly prescriptive, we do just want to avoid issues and promote safe practices

rare hill
#

I know that's how it's been in the channel rules, I was just requesting because the rules were being overhauled in the first place - fair enough, though.

grave panther
rotund galleon
#

is there reasoning behind the no debugging rule that is public

#

I'm curious

little wharf
grave panther
#

(I am not a particularly technical person and am doing the best I can)

little wharf
#

That should clear up any confusion. I do greatly appreciate it.

grave panther
#

i appreciate your feedback and clarifying suggestion as well - thank you

rare hill
#

👍

white scarab
grave panther
white scarab
#

ty

gilded hornet
#

is there a modding guide somewhere

gilded hornet
#

oh i meant more in the sense of authoring mods

jovial escarp
#

here are some templates for making your own colored deck
to replace these textures in the game you'll need to rename Balatro.exe to Balatro.zip and replace the /resources/textures/1x/8BitDeck.png and /resources/textures/2x/8BitDeck.png files with yours
note that you will have to make another copy of your image and upscale it with No interpolation to 2x for the second one
go nuts

jaunty lion
jovial escarp
#

yeah

#

i did it on linux with peazip

#

you can use 7zip as peazip is just a shell for 7zip

jaunty lion
#

is it doable on windows

jovial escarp
#

yeah

#

it's the exact same process

#

i was pleasantly surprised since this is the first game in a long while on which this trick works

#

usually only old games store their assets like this

jaunty lion
#

i feel like i shouldn't be scared to do this but i've never tried changing a file extension so i kind of am lmao

jovial escarp
#

you can always delete the file and have steam check for file integrity

#

it'll redownload it but your save data will not be lost

#

save data is stored in appdata

jaunty lion
#

i'll create a backup just in case

jovial escarp
#

let me get you the 2x deck too

#

here

#

you can test it out with these 2

#

first one goes into 1x folder second into 2x

jaunty lion
#

what's the difference between 1x and 2x

#

is it just the colors

jovial escarp
#

the game will use either 1x or 2x textures depending on the resolution of the game

jaunty lion
#

ah

jovial escarp
#

not sure what triggers the behavior

#

best to replace both to be safe

#

i wish there was a simple mod to swap assets out on the fly but im not going to go out of my way to learn lua for it

exotic dagger
#

i know they don't exist in the normal game so i'm a bit curious
if modded in, do negative playing cards actually work? and if yes, how do they work

jaunty lion
#

but yeah changing the extension from .exe to .zip worked perfectly fine

#

which suprises me

jaunty lion
#

oh wait

#

negative as in adds a slot

exotic dagger
#

i meant edition, not negative numbers

jaunty lion
#

mb

jovial escarp
#

i dont think they exist but id imagine theyd just not count towards hand size

exotic dagger
#

why would you want negative chips anyways

jovial escarp
#

if localthunk added that specific behavior in

#

not sure what the code looks like so i can't say

#

it could be in there by default by way of how the code is organized

exotic dagger
#

it does make sense if it would work the same way as jokers/consumables

jovial escarp
#

i dont think consumables have editions

exotic dagger
#

by effectively adding 1 to the total number of slots

jovial escarp
#

a negative tarot would be interesting though

exotic dagger
jaunty lion
#

doesn't one of the legendary jokers add negative to consumables

jovial escarp
#

i havent played the game too much

#

im a casual player

#

bought the game two days ago

exotic dagger
#

fair

#

you wanna know or wanna find out yourself

jovial escarp
#

i just hit the unlock all button on my profile

#

i dont mind

exotic dagger
#

ah

exotic dagger
#

it's called perkeo

jovial escarp
#

so That's what that does

exotic dagger
#

although it's not fully accurate

#

what it actually does is make a negative copy of one of your held consumables

#

so, for example, you're holding the fool and trigger perkeo? now you got a fool and a negative fool

#

also works with planets and spectrals

jovial escarp
jaunty lion
#

oh i haven't tried it yet hang on

molten igloo
#

was trying to just make ugly textures but instead made somthing cool and made the background more chill for motion sickness

jovial escarp
#

looks pretty alright

#

although im not a fan of the inverted face cards

molten igloo
#

ye was not trying to make anything cool, hell was trying to do the opposite

jaunty lion
jovial escarp
#

winrar

woven rock
#

winrar in 2024?

jovial escarp
#

winrar is okay but i still recommend 7zip

jaunty lion
#

yeah let me get that rq

jovial escarp
#

it's small it's fast it's free it'll never bug you

woven rock
#

and it'll work on balatro.exe

jovial escarp
#

i'd remove the images first and add them later to be safe

#

i think you can direct replace but i was trying to walk around any corruption

jaunty lion
#

i tried replacing the files in 7-zip and it didn't work

#

it just redownloaded the game when i tried launching it

jovial escarp
#

whattt

#

ok we really need like an easier depack-repack tool then

#

if you want i can slide you mine

#

or apply any changes you need made

jaunty lion
#

ok i tried just running the application instead of launching it from steam and that worked

tacit mountain
#

Remember to close the game before updating the SFX archive

jaunty lion
#

of course

jovial escarp
#

definitely

#

since you're here steamo

tacit mountain
#

And only 7zip can, Winrar can open it but is not capable of editing without breaking it

jovial escarp
#

are there any plans for a simple texture loader mod yet

jaunty lion
#

wow! i didn't realize winrar sucked

tacit mountain
jovial escarp
#

when i use windows i still use winrar

woven rock
#

if winrar is so amazing, why isn't it open-source

jovial escarp
#

it's the nostalgia and making rar archives for me

woven rock
jovial escarp
jaunty lion
#

i guess i did something wrong the first time because now i can launch it from steam with the changes just fine

tacit mountain
jovial escarp
#

it's easy enough to understand

tacit mountain
woven rock
#

fair

wet river
#

Quick question, modding the thing I want to do isn't going to be hard. I really just need the variable that retrieves the current maximum hand score for the run. Wondering if anyone can just hand me that info.

jaunty lion
#

i don't think it calculates the final score for a hand until you actually play it

wet river
#

Yeah, after is fine.

jaunty lion
#

oh i see what you mean now

tacit mountain
twin river
wet river
#

Yeah that.

tacit mountain
#

You migth find what you need

twin river
#

I was looking at this yesterday, I'm not at my pc rn so I can't check what it's specifically called but it's one of the UI handlers for the game over screen

wet river
#

I'm not a big Lua guy, and was hoping to avoid too much searching 😅

wet river
tacit mountain
past tendon
#

I think it's inside G.GAME.round_scores

#

haven't checked though

wet river
#

I can give it a shot. Thanks.

jaunty lion
#

i was looking through the files and apparently more than half of the entire game's filesize is from the font it uses for some non-english languages

spice spear
#

that tracks honestly

near ridge
#

how do I fix this error? I'm trying to use the Steamodded modloader but I keep getting this error

tacit mountain
near ridge
#

the .exe

tacit mountain
near ridge
#

0.7.0-PRE

#

I'll try the official release then

#

I'm getting the same issue

tacit mountain
#

I know why, old on a moment

near ridge
#

is there a specific 7zip version I need?

tacit mountain
#

A changed a link

tacit mountain
jaunty lion
#

i decided to make my own colors