#⚙・modding-general

1 messages · Page 30 of 1

alpine cosmos
#

no prob!

exotic tulip
#

how about the jokers?

#

like, the jokers on a legendary card for example?

alpine cosmos
#

wdym?

sleek granite
#

they're 71x95 as well, technically, but just centered within that space

exotic tulip
#

what are the general dimensions for each as well?

sleek granite
#

if you have your image editor set to a 71*95 grid you should see that everything lines up in that grid

#

exceptions for the jokers with code making them smaller (wee, photograph, half iirc)

exotic tulip
#

got it

#

I'm also using Asesprite, so is there anyway I could find the color palette LocalThunk used?

alpine cosmos
#

oh uhhh

#

i couldnt find the exact palette

sleek granite
#

hey that thread i made :)

alpine cosmos
#

yeah :D

exotic tulip
exotic tulip
alpine cosmos
sleek granite
#

i dont know if its a hard-and-fast palette

alpine cosmos
#

i dont think hes ever mentioned it?

sleek granite
#

just that a lot of colors are reused

alpine cosmos
#

but yeah it's more like there are colors that show up mostly everywhere

#

you dont need to abide by it specifically
but they're there for reference

sleek granite
#

and nothing's darker than the Balatro Black (which is a rather muted dark grey)

alpine cosmos
#

mhm

exotic tulip
#

thank you all so much! I'll share my results with you the first chance I get.

sleek granite
#

planets, tarot, and spectrals have more limited palettes, though with planets it's also rather lenient due to the planets themselves

alpine cosmos
#

i have found that planets typically only have 4-5 unique colors

runic dagger
#

Mod idea (or even a suggestion for official build): Each time when a Spectral card destroys the joker, make next encountered joker in the shop free.

fickle elbow
#

yes

sleek granite
#

thats incredible

fickle elbow
#

i just found out smeared joker works with ink and color suits

sleek granite
#

wait does smeared joker work with ALL modded suits like that then?

alpine cosmos
#

i feel like thats a custom interaction coded in

woeful finch
#

doubt it

fickle elbow
#

idk but it makes my modded jokers with smeared joker work for both suits

woeful finch
#

probably a custom interaction like luna said i dunno

fickle elbow
woeful finch
#

hmm weird

alpine cosmos
#

a

#

o h

tired ibex
#

smeared is weird on modded suits

alpine cosmos
#

hehe

#

weird smeared

tired ibex
#

like for some reason for six suits the stars and moons work with spades and clubs but not hearts and diamonds only

alpine cosmos
#

oh hm

#

looking into the smeared joker's code

#

it seems like

fickle elbow
#

ink and color are the only two smeared together, i checked. So it techanlly works as intended for my mod, which is cool

alpine cosmos
#

it makes it so that hearts and diamonds are the same

#

but not anything else?

fickle elbow
#

well clubs and spades, and hearts and diamonds

#

so card works correctly

#

but for some reason compatable with my mod

alpine cosmos
#

weird

fickle elbow
#

but cool

#

now i don't have to worry about adding that later 🙂

alpine cosmos
#

maybe it only searches for red suits, and then if it isnt, it's a black suit?

fickle elbow
#

idk, but it works so i wont question it or it wont. thats just how code works

alpine cosmos
#

fair

#

speaking of code working

#

its not

#

aaaa

fickle elbow
#

i spent all of last weekend fixing bugs. its... code

alpine cosmos
#

yep

fickle elbow
#

from 10 pm of friday to 10:30 of sunday

alpine cosmos
#

i honestly just cant wrap my head around how lua for loops work

fickle elbow
#

my mod is the first time i used lua

alpine cosmos
#

same here

lost solar
#

i hate lua for loops

#

its like java but worse

alpine cosmos
#

im used to it being so clearly defined as

for(int i = 0; i < 5; i++){}
#

but

#

lua??

#
for k, v in ipairs(context.glass_shattered) do
fickle elbow
#

for k, v in pairs(t) do
t2[k] = v
end

alpine cosmos
#

what is this

#

why are there no brackets

lost solar
#

it doesnt specify the increment at the end too which is annoying

alpine cosmos
#

why is it do and end

alpine cosmos
#

anyways please help me

lost solar
#

i think the error is with what youre looping over

alpine cosmos
#

i know whats going wrong since the game crashes when glass breaks but i dont know what to do about it

lost solar
#

what is it that youre trying to code

fickle elbow
#

idk, i feel like the difference between the coding programs i use is a very small difference, mainly syntax wise so i find it easy to figure out.

alpine cosmos
lost solar
#

hmmm ok that shouldnt be bad

alpine cosmos
#

i tried copying the caino code but i dont know whats going wrong

fickle elbow
#

i tend to reveiw the source code

alpine cosmos
#

should i send the whole file?

lost solar
#

im not really sure why the caino code doesnt work

#

im willing to bet that looping over ipairs(context.glass_shattered) is whats messing it up tho

alpine cosmos
#

you're probably right

#

it's a complete copy of

for k, v in ipairs(context.glass_shattered) do
    if v:is_face() then
        faces = faces + 1
    end
end
#

just without the whole check for face thing

lost solar
#

yeah

#

but when ive personally tried messing with ipairs, it also errored me

alpine cosmos
#

huh

lost solar
#

so i just coded stuff without it

alpine cosmos
#

thats, fair

wanton rapids
#

what's the full code for this joker?

lost solar
#

i think glass_shattered is just a list you can iterate over without ipairs?

fickle elbow
#

i use this to dissolve cards if it'll help for i = #G.playing_cards, 1, -1 do
-- Remove odd cards
if not is_Ink(G.playing_cards[i]) and not is_Color(G.playing_cards[i]) then
G.playing_cards[i]:start_dissolve(nil, true)
end
end

alpine cosmos
#

the entire calculate code or the whole thing?

wanton rapids
#

entire calculate

alpine cosmos
#
    SMODS.Jokers.j_deathly.calculate = function(self,context)
        if SMODS.end_calculate_context(context) then
            return {
                message = localize {
                    type = 'variable',
                    key = 'a_chips',
                    vars = {self.ability.extra.current_chips}
                },
                chip_mod = self.ability.extra.current_chips,
                card = self
            }
        end
        if context.cards_destroyed then
            local value = 0
                for k, v in ipairs(context.glass_shattered) do
                    value = value + v.getID()
                end
            self.ability.extra.current_chips = self.ability.extra.current_chips + value*2
            return {
                message = localize('k_upgrade_ex'),
                card = self,
                colour = G.C.CHIPS,
                delay = 0.45
            }
        end
        if context.cards_removed then
            local value = 0
                for k, v in ipairs(context.removed) do
                    value = value + v.getID()
                end
            self.ability.extra.current_chips = self.ability.extra.current_chips + value*2
            return {
                message = localize('k_upgrade_ex'),
                card = self,
                colour = G.C.CHIPS,
                delay = 0.45
            }
        end
    end
lost solar
#

you should try it, but thats what it seems like to me

wanton rapids
#

oh it's not v.getID it's v:get_id()

alpine cosmos
#

oh.

lost solar
#

oh damn

#

its always the little things

alpine cosmos
#

yeahh

wanton rapids
#

oh and that would cause extra.current_chips to not be a number which causes that error i think

fickle elbow
#

i would help more, but I think I've procrastinated enough today.

alpine cosmos
#

ohhhhhhh i see

#

thats

#

completely fair

lost solar
#

does that fix it?

alpine cosmos
#

just tried it and

#

somewhat!

#

it

#

still crashed

#

but it didnt crash at the exact same time

wanton rapids
#

a different error is progress

alpine cosmos
#

its still the same error message,,,,

wanton rapids
#

ah

#

should there be () around the table in your first call to localise

alpine cosmos
#

i think so?

wanton rapids
#

the one in end_calculate_context

alpine cosmos
#

oh

#

i dont think so

wanton rapids
#

oh wait what?

alpine cosmos
#

the other code ive looked at had {} instead of ()

wanton rapids
#

lua is weird

alpine cosmos
#

seems like {} is for when there's more than one element?

alpine cosmos
wanton rapids
#

see what happens if you change card=self to colour = G.C.CHIPS

#

in that call

#

also you should probably limit the range that get_id can return

#

since stone cards go from -100000 to 100

#

and jacks, queens, kings, and aces return 11, 12, 13, and 4 respectively

alpine cosmos
#

oh wait fr?

#

huh,

#

okok sure sure

wanton rapids
#

try v.base.nominal instead

alpine cosmos
wanton rapids
#

ohh wait

#

add and not context.blueprint to the two destroy card if checks

#

that probably won't fix it but it should be there

alpine cosmos
#

fair

#

i also just noticed that this has been happening while the joker that im debugging is
not in my joker slots

wanton rapids
#

oh?

#

what

alpine cosmos
#

which is a whole different thing

wanton rapids
#

what was in there?

exotic tulip
#

alright, thanks for helping me guys

#

here's an aesprite color palette I made with your help

alpine cosmos
#

the two other two custom jokers i made

wanton rapids
#

what's the code for them?

alpine cosmos
#

which are both working fine

#

one sec

#
    SMODS.Jokers.j_techno.calculate = function(self,context)
        if context.end_of_round then
            self.ability.mult = self.ability.extra.base_mult
            return {
                message = localize{type='variable',key='a_mult',vars={8}}
            }
        elseif SMODS.end_calculate_context(context) then
            return {
                message = localize{type='variable',key='a_mult',vars={self.ability.mult}},
                mult_mod = self.ability.mult
            }
        end
        if context.after then
            self.ability.mult = self.ability.mult + self.ability.extra.mult_mod
            return {
                message = localize{type='variable',key='a_mult',vars={self.ability.mult}},
            }
        end
    end

    SMODS.Jokers.j_beast.calculate = function(self,context)
        if SMODS.end_calculate_context(context) then
            return {
                message = localize {
                    type = 'variable',
                    key = 'a_chips',
                    vars = {self.ability.extra.current_chips}
                },
                chip_mod = self.ability.extra.current_chips,
                card = self
            }
        end
        if context.discard then
            if G.GAME.current_round.discards_used <= 0 and #context.full_hand == 1 then
                self.ability.extra.current_chips = self.ability.extra.current_chips + self.ability.extra.chip_mod
                return {
                    message = localize('k_upgrade_ex'),
                    card = self,
                    colour = G.C.CHIPS,
                    delay = 0.45,
                    remove = true
                }
            end
        end
    end
#

neither of them contain for loops

wanton rapids
#

the error is in the game's code, not yours

alpine cosmos
#

oh

exotic tulip
alpine cosmos
#

actually?

alpine cosmos
exotic tulip
#

It's based on Rob's work, and I simply (painstakingly) copied over the colors to Aesprite using coolors color picker

#

I'll add it to the thread

alpine cosmos
#

radical

wanton rapids
#

change techno's if context.end_of_round then to if context.end_of_round and not context.individual and not context.blueprint?

alpine cosmos
#

sdjdh still nothing :(

wanton rapids
#

rip

#

im gonna brb

alpine cosmos
#

oh okok

#

sure sure!

wanton rapids
#

wait

#

what version of steamodded are you on

alpine cosmos
#

the latest one?

wanton rapids
#

which one?

alpine cosmos
#

wait one sec

#

0.9.5

wanton rapids
#

ah ok

alpine cosmos
#

also yeah it does seem to be happening with the techno joker now that im looking more into

#

trapped in a paradigm on god 😔

#

I FIXED IT

#

I DELETED ONE LINE OF CODE AND ITS FIXED

#

WOOO

#

okay apparently

#

context.end_of_round doesn't need a return

#

or

#

something?

#

wait no

#

yeah wait yeah??

#

that is

#

bizarre

#

it crashes when i try to give a return statement

#

that is strange

wanton rapids
#

weird

alpine cosmos
#

well
guess im just gonna have to do this without the whole 'reset' message flavor thing

wanton rapids
#

ohh wait

rare shell
#

waiting

sleek granite
#

well? we're waiting....

cunning silo
#

Also waiting

wanton rapids
#

oops

alpine cosmos
#

waitingg

cunning silo
#

Im taking a vacation today, so I will have a lot of work done on Codex!

alpine cosmos
#

oooooh nice!

#

make sure to take plenty of rest though!

cunning silo
#

XD no worries

fickle elbow
#

i reworked the smeared joker to work with my suit in a better way.

regal flint
#

Hey guys I'm trying to mod balatro with the injector but this is too sketchy...

#

This is the newest version... is it gonna be ok?..

sleek granite
#

generally recommended to use Lovely instead of the injector

#

it gets flagged as a trojan because it works the same way as one

regal flint
#

how do I execute lovely then? Is it the same way as the injector?

#

dragging balatro into it?

sleek granite
#

nah you put a dll in the same folder as balatro.exe

#

see here for full instructions

#

(there's also at least one mod to my knowledge that only works fully in a lovely+steamodded install, that being the Risk of Jesters mod, since lovely's capabilities can be used by other mods as well.)

jade lava
#

is there a mod that allows you to spawn tarots/jokers/whatever at will?

grand geode
#

debug mode

jade lava
#

ty ty

cunning silo
#

2 new jokers: Breaking Bozo (guess the reference XD), and Essence of Comedy!

fallow bramble
#

Sick

regal flint
magic sandal
cunning silo
#

XD

cunning silo
#

JIMBO

#

I am the one who mults

vestal crag
#

I feel like there's not enough money jokers/consumables in mods.

#

Hm.

#

Scrapper Joker (Rare):
Removes enhancements from cards when played and gives $1. Gains +1 dollar per enhancement removed.

#

(Yes, this is a Midas synergy.)

#

Actually, I'll throw that in suggestions.

fickle elbow
#

how do you add editions?

haughty hinge
#

even though this is seeded holy shit i did it

lean dune
#

holy retrigger

sleek granite
#

am i stupid or whats modded here

haughty hinge
#

extreme deck

#

1 hand 1 discard

sleek granite
#

oh neat

haughty hinge
#

im gonna try gold stake on this wish me luck

lean dune
#

oh no

sleek granite
#

wait does that mean 0 discards

haughty hinge
#

yup

lean dune
#

💀

wanton rapids
#

does burglar give you 4 hands?

haughty hinge
#

idk

fallow bramble
#

@rare shell Did you got legendary joker sprite working?

iron onyx
#

is there any documentation on all the formatting options one has in card descriptions?

sleek granite
#

you could check the en-us localization file, but no easy list afaik

fallow bramble
#

Yooo sick, do you use a spritesheet or individual, does the method change depending on that?

abstract verge
#

hey, am I able to get some help with some trouble shooting please? Every time I go to launch balatro after placing the .LUA files of JellyMod and Mika's mod into the mod folder of Balatro the game loads and then just closes, completely disappearing without saying anything like an error or anything. Only one mod has worked before and that is the extra joker slots mod. I have tried placing the entire (still compressed cause I don't know how to decompress it) JellyMod file into the mod folder but then it just says that there are no detected mods. Anyone know how to fix this?

lean dune
#

try removing JellyMod

iron onyx
#

so... absolutely no one understands why hologram's sprite is broken if you "replace" the entire joker sprite table, even if the pixels are identical...?

lean dune
#

also yeah if it's still zipped the loader can't parse it

lean dune
#

at least I don't

iron onyx
#

god this game's code is weird

lean dune
iron onyx
#

all right, time to figure out how to make my jokers point to custom sprites instead ig... if that's even possible with steamodded

wanton rapids
#

it is

lean dune
#

yep it is

iron onyx
#

i guess it involves overriding Card:draw(layer)?

lean dune
lean dune
wanton rapids
#

yeah that function's built in to the modloader

#

would be kind of rubbish if it wasn't

lean dune
#

the loader also checks if any atlas matches the joker's slug and uses that if it does

iron onyx
#

oh, so i... didn't need to start with the vanilla jokers at all?

sleek granite
#

do what i do and just check six suits' code haha

lean dune
#

valid haha

#

it's what I've been using for testing, so that's a good place to look for examples lmao

abstract verge
lean dune
sleek granite
#

figured thats why The Fool? is in there

lean dune
#

also I just thought that's funny

abstract verge
rare shell
#

my legendary jokers use a spritesheet

#

i just have the soul next to the background in the sprite is all

#

example

wanton rapids
#

same with mine but the face is below the base

rare shell
#

horizontal gang

wanton rapids
#

you can pick which is where

rare shell
#

probably go vertical though

wanton rapids
#

it doesn't matter

lean dune
#

diagonal gang

rare shell
#

it saves you fiddling if we use the website template graaaah

sleek granite
#

me when soul_pos = { x = 41, y = 68 }

lean dune
#

oh no

rare shell
#

thats me on most days

#

unfortunately today is a soul_pos = { x = -1, y = 32 } type of day

lean dune
#

ah yes

sleek granite
#

yeah ive been there

rare shell
#

happens to everyone

sleek granite
#

as long as its not a soul_pos = { x = 0.7, y = 0.3 } day

iron onyx
#

ooooooooooooooooh baby, that feels good.

#

buuuuuuuuuuuuut that's definitely an issue, no?

#

because it seems like i'm not the only one who's had an issue with hologram breaking when other cards change

#

oh well, i guess you can work around that by only changing the sprites you want to change

lean dune
#

yeah we're not exactly sure what's up with it though

iron onyx
#

if you want to change card sprites other than hologram

#

actually, it probably has something to do with that scan line

#

yeah, that's probably exactly the problem

lean dune
#

hm?

green spire
#

I'm setting up lovely + steamodded for my balatro. following the directions, everything setup fine. but when i opened balatro and changed between my profile and my wife's, it merged our collections. i.e., her collection was updated to nearly complete the way mine is despite only having collected around half. i made backups before modding, so no harm done. is this a known issue? is there a way around this?

iron onyx
# lean dune hm?

just watch hologram's sprite long enough, it's hard to explain

green spire
#

it happened with the lovely method and when directly patching the exe

lean dune
#

oh the effect?

tacit mountain
lean dune
#

iirc it fixes itself once you restart the game

lean dune
#

that's because of a rather sloppy way of making sure added game object persist a profile change

#

I'll try to improve on it

tacit mountain
green spire
tacit mountain
#

I may also add an auto backup for profiles to ensure there is no bad surprise

tropic mason
#

anyone know which mod this joker is from?

#

if it even is fro ma mod

#

t causes my game to hardcrash when i hover over it

tacit mountain
#

What is the crash error ?

tropic mason
#

idunno it ust hardcrashes

#

or does it keep a log somewhere

tacit mountain
tacit mountain
sleek granite
tropic mason
#

yeah even having the like CMD window open

#

its gone so fast i cant read if it even says anything of importance

lean dune
#

but I think it'll work fine if I just make it re-inject stuff instead of loading the old pools

tropic mason
#

just checking all the asset folders

#

to see which mdo it is

#

seems to be betma

sleek granite
#

is this a ligma

tropic mason
#

no

#

should i troubleshoot a bit further or just delete and move on

#

tried reinstalling, still broke

#

assuming the mod is depricated

fallow bramble
rare shell
#

im going to scream

#

sure, let me get the snips

#

modified initialization code

-- thank you mika for this code!!!
local function init_joker(joker, no_sprite)
    no_sprite = no_sprite or false

    local joker = SMODS.Joker:new(
        joker.ability_name,
        joker.slug,
        joker.ability,
        { x = 0, y = 0 },
        joker.loc,
        joker.rarity,
        joker.cost,
        joker.unlocked,
        joker.discovered,
        joker.blueprint_compat,
        joker.eternal_compat,
        joker.effect,
        joker.atlas,
        joker.soul_pos
    )
    joker:register()
    if not no_sprite then
        local sprite = SMODS.Sprite:new(
            joker.slug,
            SMODS.findModByID("JankJonklersMod").path,
            joker.slug .. ".png",
            71,
            95,
            "asset_atli"
        )
        sprite:register()
    end
end
#

then just declare the soul_pos in your joker

sleek granite
#

mobile user jumpscare

rare shell
#
        local fortuno = {
            loc = {
                name = "Fortuno",
                text = {
                    "For each {C:attention}numbered card{} scored",
                    "in your first hand each round,",
                    "destroy it and gain {C:attention}$3{}"
                }
            },
            ability_name = "Fortuno",
            slug = "fortuno",
            ability = {
                extra = {
                    dollars = 3,
                    trash_list = {}
                },
            },
            rarity = 4,
            cost = 20,
            unlocked = true,
            discovered = true,
            blueprint_compat = false,
            eternal_compat = true,
            soul_pos = { x = 1, y = 0 } -- the good stuff
        }```
#

mobile jumpscare 2

sleek granite
#

help I've been flashbanged by lua

fallow bramble
#

Oh I just need to add a soul_pos line, got it

#

Thanks a lot 👍

lean dune
#

order in all things

sleek granite
#

is that saved to the profile?

lean dune
#

I'm mainly concerned with it not crashing

#

which seems fine now

rare shell
#

you dropped this

#

👑

lean dune
#

xd

alpine cosmos
#

yeah!!! thanks for all you've been doing!!

#

(also is it okay if i ask for help with an issue that came up

wanton rapids
#

of course

lean dune
#

'course

alpine cosmos
#

okay i wanted to bring up uhh

#

hold on

#

so it seems like the game crashes whenever i try to do a return in context.end_of_round?

#

like

lean dune
#

uhh, what does the crash message say?

alpine cosmos
#

one second ill see if i can find the ss

#

here

#

sjdhsh im not sure if im just doing it wrong

#

but when i have code like this

        if context.end_of_round and not context.individual and not context.blueprint then
            self.ability.mult = 8
            return {
                message = localize('k_reset')
            }
        end
#

thats what crashes

#

wait

lean dune
#

that uh

#

looks wrong

#

I'm not sure that makes sense

alpine cosmos
#

looks wrong as in i did something wrong or the game did something wrong

wanton rapids
#

oh for what you're trying to do

lean dune
#

doesn't exactly look like it's your fault

alpine cosmos
#

oh

wanton rapids
#

one moment

alpine cosmos
#

hm

wanton rapids
#

wait try and add and not context.repetition to the ifs

sleek granite
#

yes aure the GOAT for being so helpful with apis

lean dune
#

gotta credit @cunning silo as well for these, I just revised them and added some features

alpine cosmos
#

did it

wanton rapids
#

yeah alr

alpine cosmos
#

SJHSDJH well then

#

thank you

wanton rapids
#

np

lean dune
#

phh calculate_joker contexts are weird

wanton rapids
#

i should make a chart for that

cunning silo
lean dune
#

xD I view it as putting the pieces together

alpine cosmos
#

you are a god amongst men

#

/lh

lean dune
#

ty :3

sleek granite
#

me, watchung from yhe sidelines tamariPlush
yall doin great work

#

clearly i should learn to github so i can implement consumable api :calculate functions

cunning silo
#

do we know if the last hand played is saved somewhere?

drowsy urchin
#

idk i know someone made a joker that uses what was played last hand so i think it might be saved somewhere

drowsy urchin
lean dune
cunning silo
lean dune
#

uh wait for 0.9.6

cunning silo
#

XD

#

im trying to find the play hand func

grand geode
#

actually calculate_joker does work for consumables

sleek granite
grand geode
#

for Observatory voucher

lean dune
sleek granite
#

oh no you pinged myst

grand geode
#

ic

lean dune
grand geode
cunning silo
lean dune
#

too bad

sleek granite
#

every time i wake up my mods get delayed by one day /hj

grand geode
#

mood

sleek granite
#

(ill sit down and learn how to use github one day hhhhhhhh)

cunning silo
#

okay apperantly i placed it in the wrong place XD

sleek granite
#

whether that day will be before or after i put 100 things in my mod is another question

#

i might figure out a custom consumable type first even lol

rare shell
#

wait a minute

#

i didnt work on my mod at all today

#

youtube musiic stunlocked me by refusing to show me anything that wasn't dad rock or the songs ive heard play 20 times in the last 6 hours

#

i guess its not true because i nearly deleted all of my (newer) art files before i got them on the github

grand geode
#

great now mystjokers is fucking up saving runs somehow

#

ugh

lean dune
#

huh

sacred summit
#

my mods all have individual folders but some of my decks still have invisible card backs, not a big deal, but if anyone knows a fix that would be lit ty!

grand geode
#

no clue what is going on with this either considering InscrybedJokers works properly

oblique berry
#

Has anyone done a "every blind is a boss" mod yet? Or is working on that? Could be wild to play.

grand geode
oblique berry
#

😮

lean dune
#

xD

grand geode
#

just disable every other effect but

#

it has a chance to randomize small/big blinds into any boss blind

#

actual bosses are unaffected

oblique berry
#

Is there a way to make that chance 100%? Lol

grand geode
#

yes! it's configurable

oblique berry
#

I was thinking about doing a "what if every blind was a boss" kinda run so this is perfect

grand geode
#

due to how i coded it, the blinds can also turn into small/big blind but that shouldn't be too much of an issue

#

actually i can just quickly modify it to completely ignore small/big in the randomized boss pool lmao

oblique berry
#

If it's more work I can play as is. Just was curious if it existed or not. I'm checking out some more mods on stream tonight and was curious if smth like this existed yet.

#

Once again the balatro mod community knocked it outta the park!

grand geode
#

it should be a quick modification! just gimme a sec

#

like i can do this and force everything into Verdant Leaf lmao

rare shell
#

Is it possible to remove suit?

wanton rapids
#

like the mild cards from shampack?

rare shell
#

?

wanton rapids
#

an enhancement that removes suit

rare shell
#

no I meant completely remove a suit

oblique berry
rare shell
#

like the opposite of what steamodded's SMODS.Card:new_suit() does

wanton rapids
#

probably not

stone brook
#

i think it might be doable actually

wanton rapids
#

it'd require a lot of modification

#

but it'd be doable i think

stone brook
#

i dont think itd need that much

tacit mountain
#

You can just remove it from deck and every possible transformation/pack pool

#

And that's it

stone brook
#

right? if you remove all the playing cards in P_CARDS, it shouldnt show up in packs, then you just gotta remove everything that interacts with that suit

#

yea

tacit mountain
#

I mean, it's not a one liner but still pretty easy to do imo

grand geode
# grand geode

you should put joker_randomization_chance at 100 too :3

fickle elbow
#

how do you add an edition?

hardy brook
grand geode
#

yea

wanton rapids
#

i have it as monospace comic sans

stone brook
hardy brook
#

Welp, i’m gonna put the balatro font as mine

grand geode
#

i use RDLatinFont - the one used in Rhythm Doctor

fickle elbow
stone brook
rare shell
grand geode
#

so like, hide specific suits in the view deck ui???

rare shell
#

okay okay

grand geode
#

xy problem moment

rare shell
#

so my idea is suits that aren't given at the start at the game but you can acquire them with any other normal means

#

tarots/boosters/etc

#

I can register them on the fly, so that means I also need to remove them on the fly if I started a new run or there's no more cards of that suit

#

that's why I want to remove em

grand geode
#

wow should've explained sooner

rare shell
#

yes sorry!

#

my bad

grand geode
#

in Game:start_run, you can iterate through the deck and remove the unwanted playing cards

rare shell
#

that will still make them registered tho

stone brook
#

you can probably change the deck ui function to have an if statement around when it generates suits

rare shell
#

means that they will appear during menu transitions, ui, etc

and I don't want that to happen

tacit mountain
#

Never touched this part before

grand geode
#

that's tough

stone brook
#

i mean, you could probably just look at the add suit function and just make your own remove suit function that just sets everything to nil

rare shell
#

yep I found the function but I don't understand what's happening with the list there

stone brook
#

unfortunately i am very inexperienced with the ui and steamodded so cant help ya there o7

#

glgl

rare shell
#

I think this is it?

grand geode
#

i am also inexperienced with anything ui related :p

tacit mountain
#

I don't want to have anything to do with UI anymore

rare shell
#

there's nothing ui related here I think, ui happens sometime later?

tacit mountain
#

It was a nightmare when the code was still obfuscated

rare shell
#

this list is just for suit registering if I understood it correctly

#

well I'll try tinkering around

grand geode
#

good luck!

fickle elbow
#

So, is it known on how to add a new edition to the game?

rare shell
#

I have underdeveloped custom edition, it has no badge but it is separate from other editions and can have it's own shader and effect

lean dune
#

removing suits/ranks shouldn't be too big a deal

#

I'll add API functions for it

rare shell
#

legendary

grand geode
#

aure doing god's work as always

lean dune
#

you do need the cards to exist in G.P_CARDS if you want to convert anything to them though, so keep that in mind

fickle elbow
lean dune
#

(and yes, this would allow you to straight up delete base game suits, though that probably causes issues)

rare shell
lean dune
#

alright I'll probably go for one function that just wipes the suit data entirely, and also methods for just creating/deleting the cards in G.P_CARDS

rare shell
#

when registering the suit, it also creates color for localization, yes?

lean dune
#

yeah

rare shell
#

Will it wipe it too?

lean dune
#

do you need it to?

rare shell
#

nah XD

#

just to be sure

#

wait I probably need to create it beforehand anyway

#

before registering

lean dune
#

you can register a suit but no cards for it btw

fallow bramble
#

Just wondering, will the bottom of the steamodded wiki be completed soon?

lean dune
#

when I get to work on it, it will

fallow bramble
#

Nice

rare shell
lean dune
#

yeah I see

#

Anyway wiping the suit data should cause issues if any cards of that suit are present in the deck (at the very least, the view deck UI will crash the game), so there's a case for just removing the entries of G.P_CARDS

fickle elbow
rare shell
fickle elbow
rare shell
#

that's my path, but you can do any path to shader

fickle elbow
lean dune
#

I deadass read that as filesystem file 💀

#

I should know better

wanton rapids
#

same

rare shell
fickle elbow
grand geode
#

LMAO

rare shell
#

it's under the same relative directory I think

grand geode
#

i could see why that would say filesystem

lean dune
#

lol

normal rune
#

Does anyone have the files of the images of the cards? I looked on Spriters resource and didn’t find anything

rare shell
#

7zip or winrar

#

and all the sprites will be here

normal rune
#

I don’t have the steam version, I got it on switch

rare shell
#

oh

alpine cosmos
#

oh

#

one sec

#

wait

rare shell
#

well, I don't know if I can share them

alpine cosmos
#

are we allowed to distribute this

#

yeah

#

hm

normal rune
#

If not that’s ok

alpine cosmos
#

well

#

what are you using them for?

rare shell
#

honestly it's a shame the sprites aren't on spriters resource

normal rune
alpine cosmos
rare shell
#

that was the first place I checked when I looked for sprites

alpine cosmos
#

i think the wiki has the cards, though they're all individual

wanton rapids
normal rune
#

Oh it does

#

Perfect thanks

rare shell
#

How do I add new colors to localization?

lean dune
rare shell
#

🫡

lean dune
#

(playing card api does this for suit colors, that's how I know)

#

I wrapped it in this, not sure if it's needed

rare shell
lean dune
#

yeah that function is where this thingy gets set to begin with, so prob won't work without that

hardy brook
sleek granite
#

Oops! Something

lean dune
#

Oops! All Errors!

hardy brook
#

Hey Aure, is it possible to make multiple buttons to choose between A, B, or C?

lean dune
#

I think I've tried before but didn't get very far

#

the game exclusively uses option cycles in cases like that

hardy brook
#

Well you wanna try again for Ortalab?

#

We’re gonna have options to use Balatro Only Content, Ortalab only content, or both.

lean dune
#

and why not use an option cycle?

hardy brook
#

Idk what that is lol

lean dune
#

these thingys with a left arrow and a right arrow button, like the stake selector

hardy brook
#

Oh

#

Then yeah that works

lean dune
chilly kestrel
#

How does one apply shaders to a deck back? Like what the foil/holo/poly decks from the beta were doing, they had the respective edition effects on the deck rather than being part of the texture.

rare shell
#

no idea

#

but it happens once in a while

stable rivet
#

Hello all! I'd love to look into modding this game a bit and am curious if there's some like basic "tutorial" somewhere about the things specific to balatro to get started that would help me to just sort of understand the basic structures used.

sleek granite
#

unfortunately there's no real documentation for a lot of things yet so the best bet is generally to just read the source code (open balatro.exe in 7zip) or other mods (i personally defer to Six Suits and Mika's Mod Collection often)

stable rivet
#

I figured it's all so fresh that it's not likely been standardized or anything yet. Is there a regular place to find existing mods? Sorry if this is somewhere I'm not seeing

rare shell
stable rivet
#

Thanks!

sleek granite
#

Soon™️ we might have r2modman/thunderstore going

#

but thats been in-waiting for a good while now so dont hold your breath

stable rivet
#

Lol noted. Anything to just kinda let me tinker around with stuff is the start I'm looking for haha.

raven rover
#

there should be a mod where if i skip for a foil/holo/poly tag it CANNOT go on one of the two common four of a kind jokers

#

it feels like those two bastards steal my tag 80% of the time

sleek granite
#

hm, now you've got me curious how tags work

raven rover
#

i jest but the tag system is definetly underutilized, i saw a mod of a "tag pack" where you can open and get 1 of 2 to use immediately

#

more skip jokers ! more tags :D

sleek granite
#

ok but "EditionTagQoL" could still be a funny mod

#

and i am incredibly motivated by humor

orchid vault
#

so true

sleek granite
#

oh Wow Tags Are Not Easy To Modify

raven rover
#

just make it so like

#

four of a kind jokers and seance cant get it

#

best mod ez

lean dune
sleek granite
#

actually i think it's fine i just got flashbanged by boilerplate code

lean dune
#

/hj even if that's gonna be on my to-do list, it's gonna be pushed back for a good while

sleek granite
#

honestly i kinda forgot Tags even are like.... a game object???

sleek granite
#

sometimes this game's code is so unserious

lean dune
#

what even is that

#

and where

sleek granite
#

uhh looks like it has to do with applying tags

lean dune
#

(ignore the fact I can just look it up myself)

sleek granite
#

check out Tag:apply_to_run

cunning silo
raven rover
cunning silo
tacit crest
cunning silo
#

like, how does it look>

sleek granite
#

alright now to do like 70 runs so i can see if this worked

sleek granite
#

edition tag blacklist

#

i set it to every common joker to test with so here's hoping the game shows me an edition tag ever

cunning silo
#

there's a challenge for that i think

sleek granite
#

i could probably cheat one in

cunning silo
#

that's impressive

#

did you add your own gamestate, or modify another gamestate with a special config depending on pack?

tacit crest
#

I added a new state for this one yeah

sleek granite
#

it worked!!!

#

holo tag skipped the ice cream to hit the pants instead

cunning silo
cunning silo
sleek granite
#

.... now i have to learn how to github, right, my mortal nemesis

raven rover
#

That's awesome

raven rover
#

that was insanely fast

tacit crest
cunning silo
#

my code is not better Xd

sleek granite
rare shell
lean dune
calm glacier
lean dune
sleek granite
#

i relese smth woooo

cunning silo
sleek granite
#

now hell can freeze over and cows can fly oh no

rare shell
sleek granite
#

bonus blinds tamariPlush

rare shell
#

yep

sleek granite
#

me when i skip a small blind to open a blind pack

raven rover
#

Add enough blinds and we just get slay the spire map

sleek granite
#

i definitely left the default blacklist as every common joker tho

#

whatever it works lol

raven rover
#

honestly just all the food jokers and the four of a kind ones are what id pick

#

if i ever learn to mod i wanna make one that will inherit Gros Michel's edition if it expires on Cavendish

#

so if its foil or poly the cavendish will be too

sleek granite
#

but what if it's holo

raven rover
#

.... holo too.

#

i know huge buff

sleek granite
#

(i'm joking lol)

raven rover
unkempt geyser
#

holo cavendish isn't bad
+30 mult

restive forge
#

But what if it's negative?

#

/j

rare shell
#

Is replacing badge for tarot supposed to be different from planet consumables?

sleek granite
#

should be the same method, are you having trouble?

#

you'd want to have SMODS.Tarots[your_tarot_slug].set_badges set to a function

rare shell
#

it's just weird that wiki tells 'Tarots' for everything but that function

sleek granite
#

there's a wiki?

rare shell
sleek granite
#

oh, i think it's just Planets for that one since that's probably the most prominent use-case for it

rare shell
#

okay what am I doing wrong

#

my slug is sky

sleek granite
#

ohhhh you need to return badges at the end im pretty sure

lean dune
#

I think I removed the part where you need to do that

sleek granite
#

for example

lean dune
#

but not sure if it's on 0.9.5

#

I didn't test changing the name via nodes jank, it might not work

#

but it should

rare shell
#

doesn't work with return either

#

slug just in case

lean dune
#

then try overwriting the badge instead

supple junco
#

it looks like there's several threads in #1155557846805643434 regarding twitch integrations, but has anyone started working on a mod to do that? just asking since it doesnt seem like those suggestions have gotten traction (or should i make a thread in #1209506514763522108)

lean dune
#

DynaText might not like its string being changed

rare shell
lean dune
#

badges[1] = create_badge(...)

rare shell
#

yep now it works

#

thanks!

lean dune
#

alright I'll remove that part from the wiki then

lean dune
cunning silo
#

oh wow, some of my alchemical cards are negative...
I wonder how that happened...
(2 new vouchers)

lean dune
#

oh lmao

#

nice

rare shell
sleek granite
#

when you spend money in this game id like to imagine this is kinda what they look like

lean dune
#

it crashes if undiscovered either way in 0.9.5

#

but I have a fix ready

rare shell
#

nice

sleek granite
#

0.9.6 Soon™️

lean dune
#

i guess so

sleek granite
#

😆 no rush i just find it funny

rare shell
#

finally

lean dune
#

neat

sleek granite
#

casually incredible art btw

raven rover
#

what the flip is a flueron and a halberd

#

i love vanilla styled balatro art

some folks can almost create spitting images

mystic drum
#

has anyone made a mod for zodiac signs?

sleek granite
#

i think like two or three people are working on a mod that includes them lol

supple junco
#

i cant be trusted to not make it homestuck

raven rover
mystic drum
raven rover
#

forgib me if wrong

rare shell
# raven rover what the flip is a flueron and a halberd

The idea behind Fleurons and Halberds:

Those are exotic suits. They aren't given at the start of the game, yet can be acquired by rarily appearing in booster packs or rare tarots (like these "Tarots?")

It is challenging to get enough of them, yet you will be able to do some overpowered poker hands with them (like spectrum from sixsuits, but rebalanced for this)

mystic drum
#

do they have a different chip worth or just the same as the number

rare shell
#

Don't see the reason why they should have higher chip value

mystic drum
#

i like the design of the symbols

raven rover
#

i like the idea of rare suits. i hope to see jokers that give +8 for the special suits or that give those special flushes super big upsides

rare shell
#

These suits are just my take on sixsuits mod honestly

#

I just wanted to see what am I able to come up with that isn't just "new suits given at the start of the game"

#

and also make them more in-line with original suits (design-wise)

sleek granite
#

halberb

rare shell
#

halberb

raven rover
#

hope to see a high contrast option too. i use that often when i play at ||3-5am||

rare shell
#

will do that, although I'll also need to replace some vanilla sprites for that

sleek granite
#

i use the high contrast option just all the time

#

it's prettier

#

why would you need to replace vanilla sprites?

rare shell
#

and I really want to keep red on fleurons

#

I was talking about the color inconsistencies earlier here I think

#

one sec

#

here

#

I made hearts pink instead of pink and red

#

suit color itself is unchanged; only joker and HC sprites will be changed in the future

sleek granite
#

i see bulbaSip

dapper helm
sleek granite
#

the heck is a loteria

dapper helm
#

spanish bingo card thing

raven rover
#

its gonna be so fkin cool when its done

#

definitive mod i can feel it

rare shell
# lean dune neat

Aure don't execute me but knowing that removing the suit will not remove the localization makes me able to register then immediately remove the suit to generate localization scholar

hardy brook
#

I know nothing about Zodiacs

#

I need caught up, been busy with other projects that i need to catch up

random silo
#

They basically work like, next x hand played, do y

hardy brook
#

I see

#

Sounds cool

sleek granite
#

adding a new consumable type is going great tamariPlush

lean dune
#

oh great

sleek granite
#

i fully believe this is my own fault i just wanted to see if anyone had any input

lean dune
#

with consumeable = true and an atlas name, the sprite api should set it up for you

#

make sure to misspell it

sleek granite
#

doesn't seem to be the case :/

lean dune
#

what do the center objects you're registering look like?

cobalt wedge
#

Is there a good Balatro-modding tutorial?

lean dune
#

Tutorial? not really, not yet

sleek granite
lean dune
astral glade
lean dune
#

other than that, look at the game's code (just decompress the executable with 7-zip) and look at what us other modders have done

sleek granite
#

oh that'd probably be helpful yeah
if not with this issue then probably for something else later ^^"
(you should totes finish it tho your mod looks cooooool)

lean dune
#

the sprite api checks for the presence of one for whatever reason

#

maybe it would catch something it otherwise shouldn't it if didn't

sleek granite
#

oh that gets set in my "injectOddities" function because i based this on tarot api

#

and injectOddities hooks off of injectTarots ^^"

#

me, modding the modloader

#

unless that's why this doesn't work LOL

lean dune
#

lmao

#

I guess that works?

#

the fact it still says consumeable or true in the tarot api is kinda funny

#

like you might say "this tarot isn't consumable" and the loader just goes nope

sleek granite
#

tamariPlush yeah

lean dune
#

i wanted to remove that parameter completely but that would be a breaking change

#

unlike freq on planets, which I didn't realize was useless hfublwyq-

rare shell
sleek granite
rare shell
#

why tf the video has quality of UFO recording tho

lean dune
sleek granite
#

true

lean dune
#

that would also ease support for custom consumable types

sleek granite
#

oh well hey there

fallow bramble
#

Too op

sleek granite
#

im honestly surprised it didnt crash because i didnt specify the badge color? seems like there's a fallback

lean dune
#

the mod badge color? yeah that's optional

sleek granite
#

no the one for Oddity

chilly kestrel
lean dune
#

yeah maybe there's a fallback there too

sleek granite
rigid jewel
#

in Blind.lua there is a function called "stay_flipped" that is specific to blinds that have face-down cards

chilly kestrel
sleek granite
#

oh hummm

rigid jewel
#

Implies that they already start face down and this function determines whether to keep them flipped or not

sleek granite
#

i'm not sure what is needed to draw a shader on something, since... im not sure how shaders work in this engine at all lol

chilly kestrel
sleek granite
#

self.children.back doesnt work?

chilly kestrel
#

it probably will, but I need to find the proper spot for it too

sleek granite
#

right. from what i can tell self.children.back refers to the deck-based card back

#

it appears to be what the deck api sets, and looks similar to how other sprites are set, so i'd think it'd just work

chilly kestrel
sleek granite
#

sorry, that's in scope on cards

#

so it'd be something you'd want to do in Card:draw()

#

my apologies for the confusion, i should have clarified scopes

chilly kestrel
sleek granite
#

i mean it looks like the deck just iterates through its cards calling :draw() on each of them?

#

lines 321-329 in cardarea.lua

#

btw the fact i can sell this for $1 or use it for $1 is funny to me (i have dumb humor)

chilly kestrel
chilly kestrel
sleek granite
#

but if you destroy a jollar you can't redeem it

boreal ibex
#

if destroyed, you go to jail because vandalism of currency is a crime

sleek granite
rare shell
#

sneaky

sleek granite
#

it doesn't work any different from a normal 2 of spades tho

white scarab
#

2 of Jimbos

sleek granite
#

2 of spades enhanced to be Jimbo

atomic eagle
#

yo im new to balatro and modding and was wondering if anyone knew how balatro actually does random stuff based on its seeds?

#

is it a hidden algo that the dev keeps secret or is it known?

cobalt wedge
#

Hope there will be a step-by-step "how to make your first Joker" tutorial someday

sleek granite
#

all the randomness in the game has to do with the pseudorandom function or one of its wrappers

atomic eagle
#

so the function is known but the algo isnt?

sleek granite
#

not by me lol

atomic eagle
#

i see, thank you for the info though

cobalt wedge
#

Oh, challenges look EASY to mod

sleek granite
#

you could probably find out how the pseudorandom works in the source code, im just too dummy to understand it :)

ripe crane
atomic eagle
#

o is the games source code accessible?

#

i didnt know

atomic eagle
#

i wanted to see if i could replicate it to speedrun certain things

#

do you think that would be possible?

dapper helm
atomic eagle
#

sorry i am new to modding and the only experience i have seen is when function headers are extracted and you dont actually get the source code

#

i didnt think you could just reverse engineer it

sleek granite
#

yeah the exe can be opened in 7zip

atomic eagle
#

wtf

dapper helm
chilly kestrel
sleek granite
#

hm, im not sure i follow. i havent done anything with decks yet myself so idk lol

chilly kestrel
#

i think cards:draw is another function in CardArea that does something i'm unclear on, rather than the :draw from Card that actually draws card graphics, but i am having trouble following it myself too

rare shell
#

I think :draw is for acquiring cards into the cardarea

#

ah wait no

atomic eagle
rare shell
#

it's not

exotic shadow
#

7z can open a lot of exe's but balatro just happens to have a lot of stuff you can get from it

cobalt wedge
#

I think I'll make a Challenge mod first, seems the easiest of the things I want to do

woeful finch
#

probably cuz how love2d works

#

dunno

exotic shadow
#

yeah love2d the exe is the engine and you just bundle a zip file into it and it loads it

atomic eagle
#

i like the simplicity

lean dune
#

yeah it's a quirk of love2d... I think it's amazing

chilly kestrel
iron onyx
#

well that's weird

#

i'm trying to edit the mult scaling on saturn, and uh

lean dune
#

you don't need to edit Saturn, you need to edit the hand type Straight

iron onyx
#

G.GAME.hands.Straight.l_mult = 3
produces this error

#

when called in INIT

lean dune
#

yeah that's the wrong timing

iron onyx
#

ah, gotcha

lean dune
#

hold on just a min

iron onyx
#

that's what i figured; knowing what method would be the right timing so it shows up in the collection on boot should be all i need

lean dune
#
    local init_game_object_ref = Game.init_game_object
    function Game:init_game_object()
        local t = init_game_object_ref(self)
        t.hands['Straight'].l_mult = 3
        return t
    end
#

that context has worked fine for my spectrum hands

cobalt wedge
#

oops I broked it.

sleek granite
#

relatable

cobalt wedge
#

{

tepid sentinel
#

greetings

sleek granite
#

salutation

atomic eagle
#

does anyone know where these kinda functions are kept?

#

theres a few for loading the various packs but i cant find them

chilly kestrel
sleek granite
lean dune
#

so you're looking for CardArea:load()

#

which is at cardarea.lua:632

lean dune
#

also that's just high priestess

sleek granite
#

i figured it out

#

my Oddity code was re-adding it to other game objects erroneously

#

and yes that's just high priestess

lean dune
#

oh lol

#

once a consumable type API exists, we can have a shared badge function i guess

sleek granite
#

one can hope

atomic eagle
dapper helm
#

aure is it ok to ping you for stuff?

lean dune
#

yeah i don't mind

dapper helm
#

well rn since you're here i can just ask: are unlock conditions in the plans for mod api stuff? or are they already possible?

#

ah you answered in the other chat lmao

lean dune
#

xd

#

but yeah I'll have a look at that eventually

dapper helm
#

nice, i think bunco will probably also want unlock conditions

lean dune
#

anyway just because the API doesn't support it, that doesn't mean it's not possible

shell bolt
#

what is this glitched score wr

sleek granite
#

well this is something

dapper helm
lean dune
neat dome
sleek granite
#

upgrades most played hand

shell bolt
#

how does that work for observatory lol

lean dune
neat dome
lean dune
#

it was far from perfect tbh, didn't quite have the polyglass technology

sleek granite
lean dune
void vapor
#

thought about an enhancement that could be neat
a tarot that gives Split:
card counts as it's original rank and the rank below/above it

#

not something I'd want in the main game but gives flexibility to straights

cobalt wedge
#

oops, I did something wrong...

void vapor
#

yes

#

peak gaming

lean dune
#

any full house with a gap of 2 between the ranks would be a straight house with that tech lmao

dapper helm
#

gonna prioritize full houses like how 4oak trumps flushes

past tendon
#

Sometimes I miss the old demos

lean dune
#

no we need straight houses

#

also straight flush houses

cobalt wedge
#

I edited the Challenges file, but forgot to edit anything else

lean dune
#

straight spectrum flush houses? (make it stop, split cards can't be wild)

dapper helm
lean dune
#

defo not a base game thing, it's too cursed

hardy brook
#

Is there a way for me to make custom text colors?

dapper helm
#

imagine multi rank cards with 6 card hands

hardy brook
#

how easy?

lean dune
#

very

#

I sent it somewhere up here, let me grab it

hardy brook
#

Epic, thanks

lean dune
#

this is what the suit API uses

sleek granite
#

(joker is +4 mult while held)

lean dune
#

G.ARGS.LOC_COLOURS['key'] = HEX('ABCDEF') means you can use {C:key}text{} in loc text and it will be that color

lean dune
sleek granite
#

negative nil

lean dune
#

-nil

#

(error: tried to perform arithmetic on nil (a nil value))

cobalt wedge
hardy brook
cobalt wedge
lean dune