#⚙・modding-general

1 messages · Page 12 of 1

prisma wharf
#

Figured it out. if any one else has this problem, the transparent pixels need to also have the color values of black.

manic jasper
wet river
#

Do you have programming experience?

manic jasper
wanton rapids
#

you can look at the source code for other mods

#

and also inspect the game's source code by opening it with winrar

wanton rapids
#

the number may need tweaking

manic jasper
#

Trying to make Unlucky crow's ability triggers to increase its xmult (wheel of fortune doesn't trigger, cards with a chance of destroying themselves (currently only glass cards) are destroyed)

if self.ability.set == "Joker" and not self.debuff then
                if context.cards_destroyed then
                    if self.ability.name == 'Unlucky Crow' and not context.blueprint then
                        --if glass card destroyes itself, counts as a chance of destruction card being destroyed
                        local glasses = 0
                        for k, v in ipairs(context.glass_shattered) do
                            if v.shattered then
                                glasses = glasses + 1
                            end
                        end
                        if glasses > 0 then
                            G.E_MANAGER:add_event(Event({
                                func = function()
                            G.E_MANAGER:add_event(Event({
                                func = function()
                                    self.ability.x_mult = self.ability.x_mult + self.ability.extra*glasses
                                  return true
                                end
                              }))
                            card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize{type = 'variable', key = 'a_xmult', vars = {self.ability.x_mult + self.ability.extra*glasses}}})
                            return true
                        end
                    end
                elseif context.using_consumeable then
                    if self.ability.name == 'Unlucky Crow' and not context.blueprint 
                        local bad_luck = 0
                        --if hanged man is used on glass cards, counts as a chance of destruction card being destroyed
                        if context.consumeable.ability.name == 'The Hanged Man'  then
                            for k, val in ipairs(G.hand.highlighted) do
                                if val.ability.name == 'Unlucky Crow' then bad_luck = bad_luck + 1 end
                            end
                        end
                        --if wheel of fotrune is used, check if its ability failed ("Nope")
                        if context.consumeable.ability.name == 'The Wheel of Fortune' then
                            if 
                        end
                        if bad_luck > 0 then
                            self.ability.x_mult = self.ability.x_mult + self.ability.extra*bad_luck
                            G.E_MANAGER:add_event(Event({
                                func = function() card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize{type='variable',key='a_xmult',vars={self.ability.x_mult}}}); return true
                                end}))
                        end
                return
                end
            end
wet river
#

You probably want to piggyback off of the use_consumable, and do the wheel of fortune logic, as you see here. This will be different results.

cosmic shell
#

yeah, if it's just affecting the mechanics of other things in the game you probably want to modify the code where those things are done, using next(find_joker('Unlucky Crow')) to check if the player has the joker (see get_straight in functions/misc_functions.lua for an example of that with shortcut and 4 fingers)

wanton rapids
#

but won't that have a different result to the actual roll?

wet river
#

Which one? Mine? No.

#

Oh maybe

#

You right

hardy brook
#

Since we're talking about code problems

wanton rapids
#

what is "most_used_hand_level"?

#

also which line is which

#

also is this for that one cut deck

hardy brook
hardy brook
#

this is for Braided Deck

wanton rapids
#

is most_used_hand_level a number?

#

because that seems to be the error

hardy brook
#

I'm trying to figure out exactly what went wrong when porting the code

wanton rapids
#

can you send the definition of the deck

hardy brook
#

oh wait

#

I might be a dumb dumb

#

I had most_used_hand_level = true

wanton rapids
#

yeah that would do it

hardy brook
#

when writing the deck itself

#

maybe if i put it to 3 it'll work

#

I know the game loads, i just need to load into the thing

#

maybe figure out how exactly to show which hand is the most used hand

wanton rapids
#

it's shown in the profile stats

hardy brook
#

Yeah, but i mean when selecting braided deck

#

This is from a screenshot from old YT videos

#

good news though

wanton rapids
#

oh you can probably do something with localisation arguments

#

the (#1#) things in the other decks

hardy brook
#

The only problem with trying to convert the text of the card is that it's a different format altogether

#

I could try porting it just to see what happens

grand geode
#

EBTNBTNAWBAWBJBTHKAWBHWTTW

#

FUCKING FINALLY

#

WE COOKING IN THIS HOUSEHOLD

fervent owl
grand geode
#

ABBTHBAWJTHWBAWBTJHBTAW

hardy brook
#

I'm archiving every version so that info's helpful

fervent owl
#

can't you just dig through all older game versions

hardy brook
#

I mean I can get some of them through SteamDB + steam console, but not every older version

fervent owl
#

yea thats what I meant

hardy brook
#

Furthest back you can go is 0.8.6b

#

I can't get anything before that, meaning I have to use videos for stuff like 0.8.3

fervent owl
#

I see

hardy brook
#

unless something like the holy grail of Balatro comes in

fervent owl
#

thunk does not use git so I doubt that lmao

hardy brook
#

exactly

#

at least my WIPs

manic jasper
grand geode
#

guh steam notif

#

need to fix it subtracting on discard

fickle elbow
#

I know how to code, but I don't know where to go or what to do to start modding can anyone help me with that?

robust lily
#

Open the game exe in 7zip

#

extract everything to a folder

#

now you have a base

mental solar
#

Could someone help me make the sun?
I'm making celestial cards similar to back hole but not as strong/requires more set up
The effects of interested:
Stars: three random upgrades then one random down grade
Sun: enhances up to 2 selected cards into gravitated cards. When this card is picked from a pack, instead add it to your consumables.

Gravitated: levels up the hand it's scored in (can't be repeated) then the card is destroyed

cosmic shell
#

I feel like if something affects playing cards it should be a tarot or spectral card, hacking it into a planet card just feels weird

mental solar
#

In my mind i feel it could work because it increases the levels (also because there are so many more planets than tarot cards)

#

The celestial packs feel very dry

zinc harbor
#

new joker just dropped

#

Motörhead

#

im thinking something like shoot the moon but for each ace of spades in hand

polar schooner
#

is there any quick crash course or template for adding a new card [a spectral card in particular] with steamodded

manic jasper
#

I'm trying to add a mod that I'm making to the game but am getting a crash report. I am trying to debug what's wrong and put the lua code below.

exotic shadow
#

i think theres a missing , on line 19

#

not too familar with lua syntax

rare shell
#

was just a missing comma yeah, the error log will usually point you to where it broke from the code

robust lily
#

Would be cool if you could hijack jimmys speech bubble to animate an active joker or consumable card

manic jasper
exotic shadow
#

well its better than the program guessing what you meant, and doing stuff wrong, and then you figuring why its not behaving as expected

manic jasper
#

How do I make my custom joker a non-nil value? do I need to initialize/insert it into a table?

dry axle
dry axle
#

Even if I don't put a mod into the folder it still won't load so I'm wondering what's up

ocean torrent
#

Where can i find the code for the main jokers

vale canopy
#

Someone really just said again, huh 😭
(my steammodded isn't working now and I need to reinstall it, meaning I have to mess with all the virus protector stuff again)

#

WE'RE BACK 🙏

rigid jewel
#

This is what the game adds j_ to.

#

Also looks like the joker isn't registered but I'm not sure if that line of code is still needed

manic jasper
ocean torrent
rigid jewel
#

Although it's hard to know

#

Try extra = {x_mult = 1, extra = 0.1} and have all the references to those vars have extra at the start (like self.ability.extra.x_mult)

wet swallow
#

I kinda wanna make a mod but i have 0 experience scripting in lua and just like

#

modding in general

#

what im saying is i think a modding guide somewhere would be nice

dry axle
#

Can someone please help me with the steammodded thing. I just redownloaded it and did all the steps again and it still doesn't work for some reason.

ocean torrent
dry axle
#

I just gives me the loading bar and before fully loading just closes

#

it'll load like halfway

ocean torrent
#

Just uninstall from steam it reinstall it and mod it again

#

Make sure no red text in terminal thing

dry axle
#

I've reinstalled it all already. What terminal exactly?

ocean torrent
#

The stem mod exe when you open it

#

That thingy

manic jasper
#

I'm new to the Balatro modding community, so I'm not sure how to make sure these lines of code don't cause the description text of the "Unlucky Crow" joker to display "xERROR"

dry axle
#

Any stuff that popped up I just pressed "run anyway" on

ocean torrent
#

Yeah

#

It's good

ocean torrent
manic jasper
ocean torrent
#

"{X:mult,C:white}X1{}"

#

Should be a bold red X1

#

Type whatever before or after

manic jasper
#

I'd want the "x1 mult" to update when its mult increases, though...

ocean torrent
#

Well idk then im new to lua

dry axle
ocean torrent
#

It works as a read though

strong falcon
#

Thats where youre supposed to initialize the local variables that get used for localization

manic jasper
#

it looks like this:

function Card.generate_UIBox_ability_table(self)
        local card_type, hide_desc = self.ability.set or "None", nil
        local loc_vars = nil
        local main_start, main_end = nil, nil
        local no_badge = nil

        if self.config.center.unlocked == false and not self.bypass_lock then    -- For everyting that is locked
        elseif card_type == 'Undiscovered' and not self.bypass_discovery_ui then -- Any Joker or tarot/planet/voucher that is not yet discovered
        elseif self.debuff then
        elseif card_type == 'Default' or card_type == 'Enhanced' then
        elseif self.ability.set == 'Joker' then
            local customJoker = false

            if self.ability.name == 'Unlucky Crow' then
                loc_vars = {self.ability.config.x_mult, self.ability.config.extra}
                customJoker = true
            end
            if customJoker then
                    local badges = {}
                    if (card_type ~= 'Locked' and card_type ~= 'Undiscovered' and card_type ~= 'Default') or self.debuff then
                        badges.card_type = card_type
                    end
                    if self.ability.set == 'Joker' and self.bypass_discovery_ui and (not no_badge) then
                        badges.force_rarity = true
                    end
                    if self.edition then
                        if self.edition.type == 'negative' and self.ability.consumeable then
                            badges[#badges + 1] = 'negative_consumable'
                        else
                            badges[#badges + 1] = (self.edition.type == 'holo' and 'holographic' or self.edition.type)
                        end
                    end
                    if self.seal then
                        badges[#badges + 1] = string.lower(self.seal) .. '_seal'
                    end
                    if self.ability.eternal then
                        badges[#badges + 1] = 'eternal'
                    end
                    if self.pinned then
                        badges[#badges + 1] = 'pinned_left'
                    end

                    if self.sticker then
                        loc_vars = loc_vars or {};
                        loc_vars.sticker = self.sticker
                    end

                    local center = self.config.center
                    return generate_card_ui(center, nil, loc_vars, card_type, badges, hide_desc, main_start, main_end)
                end
            end
            return generate_UIBox_ability_tableref(self)
        end
    end
strong falcon
#

What about your localization

cultistJoker = {
        name = "Cultist",
        text = {
            "{X:mult,C:white}X#2#{} Mult per hand played",
            "Resets every round",
            "{C:inactive}(Currently {X:mult,C:white}X#1#{C:inactive} Mult)"
        }
    }

And your joker definition

cultistJoker = {
        ability_name = "Cultist",
        slug = "mmc_cultist",
        ability = { extra = { Xmult = 1, Xmult_add = 1 } },
        sprite = { x = 8, y = 10 },
        rarity = 3,
        cost = 8,
        unlocked = true,
        discovered = true,
        blueprint_compat = true,
        eternal_compat = true
    }
#
elseif self.ability.name == 'Cultist' then
            loc_vars = { self.ability.extra.Xmult, self.ability.extra.Xmult_add }
        else

This is my uibox function for reference, where the first one is #1# and the second one is #2#

dapper helm
#

quick question, is it possible to load both balamod and steamodded mods at once yet?

ocean torrent
#

I mean i cant load forge and fabric at the same time so im assuming no

grand geode
#

technically yes

#

zero guarantees it's gonna work

manic jasper
#

It took me so long but I finally found and fixed the bug in my code. I forgot to end the functions in the correct spots and the function Card.generate_UIBox_ability_table(self) was inside the function SMODS.INIT.BirdJokers().

indigo estuary
#

Can I still progress up antes with the rebalance mod and stuff

manic jasper
#

Testing Unlucky Crow's functionality, I haven't coded in the Wheel of fortune interaction yet (It should gain x0.1 mult if wheel of fortune Displays "NOPE")...

flat phoenix
#

How to INSTALL MOD

sonic pollen
#

download that modloader according to the modloader's instructions

#

then put the mod in your modloader folder

#

Can anyone point me to wherever in the code base the Blind scores-to-beat are stored? Can't find them anywhere

wanton rapids
#

if you grep for get_blind_amount you should find it

hardy brook
#

Just thought

#

Imagine you get the 1/200 on Murphy’s law to destroy all glass cards and you have Glass Joker

sonic pollen
#

Glass Joker + Unlucky Crow is funny together

hardy brook
#

What’s unlucky crow?

sonic pollen
hardy brook
#

I love we’re just coming up with mod combos

sonic pollen
#

Mult scaling whenever Wheel of Fortune Fails, or whenever a "chance to destroy" triggers

wanton rapids
#

how many modded jokers are there so far?

manic jasper
#

I found a strange quirk when trying to mod functionality for Unlucky Crow + Wheel of Fortune. sometimes Unlucky Crow triggers when a wheel of fortune succeeds (it also can fail to trigger when wheel says nope)...

wanton rapids
hardy brook
wanton rapids
#

if so, that does a second, unrelated roll for the wheel of fortune check

#

which looks like the exact behaviour that's occuring here

manic jasper
# wanton rapids are you using this snippet?

I'm using something close enough...

... 
else if context.consumeable.ability.name == 'The Wheel of Fortune' then
  --to be implemented
  if pseudorandom('wheel_of_fortune') >= G.GAME.probabilities.normal/context.consumeable.ability.extra then
    bad_luck = bad_luck + 1
  end
end
...```
grand geode
#

yeah that rerolls wheel

#

meaning wheel results and your joker will be different

spice spear
#

Apologies for the ping but what to you is the most notable "Steve" moment or something you think would be great to reference for his art? I was thinking immediately after he puts on The Big Stetson, or the part where he Naruto runs down the highway

manic jasper
#

No using that saying “fifth glyph” bruh…

round oar
#

having issues with center hook. i've added one joker (op joker) and it works completely fine, but when i do the exact same thing again for another joker it appears in game but just doesn't trigger. any idea what i'm doing wrong?

#
local mod_name = "Cheesy Jokers"
local mod_version = "1.0"
local mod_author = "ilikecheese"
local patched = false

-- A joker that basically just wins you the game. Just 
-- for me to figure out how to add jokers in general

local function overpoweredJokerEffect(card, context)
    if card.ability.name == "Overpowered Joker" and context.after and context.cardarea == G.play then
        return {
            Xmult = card.ability.Xmult,
            card = card
        }
    end
end

local function aaaEffect(card, context)
    if card.ability.name == "AAA" and context.after and context.cardarea == G.play then
        return {
            mult = card.ability.mult,
            card = card
        }
    end
end

local function addNewJokers()
    -- Overpowered Joker
    centerHook.addJoker(
        self,
        "j_overpowered_joker",
        "Overpowered Joker",
        overpoweredJokerEffect,
        nil, true, true, 1, nil, nil,
        {Xmult = 999},
        {"{X:mult,C:white} X999 {} Mult"},
        1, true, true, nil, nil, nil, true)
    -- AAA
    centerHook.addJoker(
        self,
        "j_aaa",
        "AAA",
        aaaEffect,
        nil, true, true, 1, nil, nil,
        {mult = 10},
        {"{C:mult}+10{} Mult"},
        1, true, true, nil, nil, nil, true)
end

local function addNewBadge()
    local file_name = "functions/UI_definitions.lua"
    local fun_name = "G.UIDEF.card_h_popup"
    local to_replace = "local badges = {}"
    local replacement = [[
    local badges = {}
    if AUT.card_type == 'Joker' and card.ability.name == "Overpowered Joker" then
        badges[#badges + 1] = create_badge(" Cheesy Jokers ", G.C.GOLD)
    end
    ]]

    inject(file_name, fun_name, to_replace, replacement)
end

table.insert(mods,
{
    mod_id = mod_id,
    name = mod_name,
    version = mod_version,
    author = mod_author,
    enabled = true,
    on_enable = function()
        addNewJokers()
        addNewBadge()
    end
})```
placid coral
#

does anyone know which mod makes fps display on top left? I want to disable that

ocean torrent
#

thats the uh

#

the one

#

debug menu

placid coral
#

i didnt add that

#

it started to show up when I added green-seal and jellymod

#

any ideas?

placid coral
#

is there no way to disable debug menu?

wanton rapids
#

better name would be appreciated

grand geode
#

IT'S BEAUTIFUL

wanton rapids
#

nice

hollow jasper
#

we do a little bit of trolling

#

The first time I tried to do this I messed up, and accidentally set the SHOP max_jokers to 100

#

Which messed up a bunch of stuff, haha.

hollow jasper
wanton rapids
#

currently have it as magnifying glass

grand geode
#

Expansion Box

hollow jasper
#

yessss

wanton rapids
#

expansion pack

hollow jasper
#

i like tht

wanton rapids
#

great idea

hollow jasper
#

that's a great idea, yeah

grand geode
#

might release One Blind™️ for testing purposes

empty brook
# spice spear Apologies for the ping but what to you is the most notable "Steve" moment or som...

for me it would definitely be him doing the naruto run with the giant sword, yeah. i'm not sure how easily that would translate to art for Balatro, though. maybe it could be him like, sort of surfing on the truck afterwards?

or, alternatively, it might be interesting to show him playing cards with "Michael" (you know, the elk), since that's the only time in the show that playing cards are referenced--and as you might know, Balatro happens to be a game which uses those

if all else fails, i think that using the Big Stetson could work alright--i think i would prefer when they're transformed into magic kettlebells though, myself, as i think that sounds a lot more distinct art-wise, instead of essentially being "Cowboy Joker"

hardy brook
alpine cosmos
#

Workshop Joker, maybe?

wanton rapids
#

i like expansion pack

runic dagger
#

How would one convert the Steamodded mod into a Balamod mod? I don't really want to publish a mod, that requires to install a launcher which .exe is giving false positive antivirus check. I have a mod ready and working with Steamodded, but would like to change it to make a support for Balamod

grand geode
#

complete rewrite

#

well not complete but 75% of the code needs to be rewritten into balamod format

runic dagger
#

Well, the code is basically just 30 strings. But I'm not familiar with Balamod's format

cosmic shell
#

the basics are that instead having a header mods are objects that you insert into a table called mods , and instead of overriding functions you inject into them using the provided functions: inject (find and replace), injectHead and injectTail

runic dagger
digital bison
#

hello. ive installed a few mods/modpacks that include new decks and jokers. the problem is, the quality of all deck textures and even normal jokers seems to be lowered significantly. why?

wanton rapids
#

what mods do you have installed?

digital bison
#

alright, i think i found it. it was JellyMod pack. the image inside the folder 2x is the png with the arts (textures) for new cards, but the person incorrectly upscaled the image. if you upscale it in photoshop, u gotta change the resampling to "nearest neighbor (hard edges)" that makes it much better.

paper notch
#

i just want to be absolutely sure: is the mod loader a virus?

rare shell
#

it would not be on github otherwise

#

those tend to get quickly taken down by github

ocean torrent
#

Where do i see like the main code and descriptions for the vanila jokers

rare shell
#

open up the balatro.exe with an unzipping program of your choice like 7-zip

#

code for most jokers are going to be in card.lua while descriptions are going to be in localizations/en-us

ocean torrent
#

Is it really card lua

#

Because theres no description for the jokers

#

And like it doesnt seem correct yk

ocean torrent
wanton rapids
#

localisations is where all of the text is stored

rare shell
#

localizations just means the descriptions for a given language

#

en-us being us english

ocean torrent
#

Thanks 🙏

#

Thats too funny

wanton rapids
manic jasper
#

I'd like to inject code into this part of card.lua using an external .lua file:

...
if self.ability.name == 'The Wheel of Fortune' or self.ability.name == 'Ectoplasm' or self.ability.name == 'Hex' then
        local temp_pool =   (self.ability.name == 'The Wheel of Fortune' and self.eligible_strength_jokers) or 
                            ((self.ability.name == 'Ectoplasm' or self.ability.name == 'Hex') and self.eligible_editionless_jokers) or {}
        if self.ability.name == 'Ectoplasm' or self.ability.name == 'Hex' or pseudorandom('wheel_of_fortune') < G.GAME.probabilities.normal/self.ability.extra then 
            G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
                local over = false
                local eligible_card = pseudorandom_element(temp_pool, pseudoseed(
                    (self.ability.name == 'The Wheel of Fortune' and 'wheel_of_fortune') or 
                    (self.ability.name == 'Ectoplasm' and 'ectoplasm') or
                    (self.ability.name == 'Hex' and 'hex')
                ))
                local edition = nil
                if self.ability.name == 'Ectoplasm' then
                    edition = {negative = true}
                elseif self.ability.name == 'Hex' then
                    edition = {polychrome = true}
                elseif self.ability.name == 'The Wheel of Fortune' then
                    edition = poll_edition('wheel_of_fortune', nil, true, true)
                end
                eligible_card:set_edition(edition, true)
                if self.ability.name == 'The Wheel of Fortune' or self.ability.name == 'Ectoplasm' or self.ability.name == 'Hex' then check_for_unlock({type = 'have_edition'}) end
                if self.ability.name == 'Hex' then 
                    local _first_dissolve = nil
                    for k, v in pairs(G.jokers.cards) do
                        if v ~= eligible_card and (not v.ability.eternal) then v:start_dissolve(nil, _first_dissolve);_first_dissolve = true end
                    end
                end
                if self.ability.name == 'Ectoplasm' then 
                    G.GAME.ecto_minus = G.GAME.ecto_minus or 1
                    G.hand:change_size(-G.GAME.ecto_minus)
                    G.GAME.ecto_minus = G.GAME.ecto_minus + 1
                end
                used_tarot:juice_up(0.3, 0.5)
            return true end }))
        else
            G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
                attention_text({
                    text = localize('k_nope_ex'),
                    scale = 1.3, 
                    hold = 1.4,
                    major = used_tarot,
                    backdrop_colour = G.C.SECONDARY_SET.Tarot,
                    align = (G.STATE == G.STATES.TAROT_PACK or G.STATE == G.STATES.SPECTRAL_PACK) and 'tm' or 'cm',
                    offset = {x = 0, y = (G.STATE == G.STATES.TAROT_PACK or G.STATE == G.STATES.SPECTRAL_PACK) and -0.2 or 0},
                    silent = true
                    })
                    G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.06*G.SETTINGS.GAMESPEED, blockable = false, blocking = false, func = function()
                        play_sound('tarot2', 0.76, 0.4);return true end}))
                    play_sound('tarot2', 1, 0.4)
                    used_tarot:juice_up(0.3, 0.5)
            return true end }))
        end
...

How should I go about doing so?

wanton rapids
#

it is time to go where nobody has gone before

grand geode
wanton rapids
#

clicking on the small blind freezes the game

#

here we are

mental solar
upper granite
#

Any tutorials on coding Jokers into the game? Tried looking in the discussion board and came up short 😅

mental solar
#

Look at the example mods and other people's code, that's the best way to learn if you don't want to any kind of coding crash course

grand geode
#

i am working on a guide for modding! and two other balatro projects and several non-balatro projects and midterms

#

i'll try to at least finalize adding jokers in the next few days

upper granite
#

Good point ;P
I might still need a crash course on Lua, but that's more of a general problem lol

grand geode
#

but for now yeah look at other people's code

upper granite
#

My only modding/coding knowledge is some relatively baby stuff in GML xD
Otherwise I'm an art boy lol

mental solar
#

From my experience Lua is one of the easier languages, but it still took me a long time to learn (and I'm still not good lol)

grand geode
#

lua is like python if it was on crack

upper granite
mental solar
#

Because you can extract the game's .exe, it's easy to rearrange the code to make stuff, but I have immense respect for people who make custom code.

upper granite
#

That's validdddddddddddd

#

Idk what's in the realm of possibility, but ik a few Jokers I can reference for some of the ideas I have in mind lol

mental solar
#

Also, welcome to the community @upper granite, it's always nice to see new people, especially in the modding channels

upper granite
#

Thanks! ^^
Had a lot of fun with the game, so I figured I might as well join the community Discord

mental solar
#

There's a lot you can do with minimal knowledge, like texture packs, edit effects of existing things and especially make custom decks! I've found those are the simplest and jokers are slightly more advanced (slightly I mean very slight)

grand geode
#

i've never done a custom deck actually lol

#

but a custom challenge isn't too far off a custom deck

mental solar
#

Oh, that's good to know :)

upper granite
#

That makes sense!
I get the vibe that the code might be a bit more difficult to navigate than what I'm used to, but it's WAY less work than making a whole fighting game character lol

#

Especially the art side obv - modding Rivals is like 80% art and 20% code

rare shell
#

as long as you have fundamentals and patience you'll be good

#

and of course, mystjokers.lua open at all times

upper granite
#

Yeye!

upper granite
grand geode
#

yeaaa the characters have like 300 different attack frames

#

here you aren't gonna make 300 different jokers

mental solar
#

(or are you?)

thick rivet
#

The code is a bit difficult to navigate, especially when you don't know where to look at

#

(or are we ?)

upper granite
wanton rapids
#

5d joker art btw

upper granite
#

Mostly attacks, but also the smaller stuff like idles, walks/runs, dodges, etc

grand geode
rare shell
#

take it as someone who failed his java classes way back yonder and knows barely jack about lua (i do know python though)
i used to mod slay the spire, which while agonizing, the games structured in a way that as long as you can string together building blocks from the games code you can accomplish a lot of the simpler things from frankensteining it from other places of code.
balatro is the same way (except having to wait 5 years to compile and test and run) and imo pretty straight forward

#

the only constant is you will spend 8 hours figuring out why your code doesnt work and its because you forgot to put a , somewhere

upper granite
#

Actually y'know what might be a fun challenge? Trying to make a Joker for every base game Rivals character (there's 18 of them)

grand geode
#

i already had experience patching an unity game with bepinex so this wasn't much more difficult

upper granite
#

20 if you count the 2 coming in the sequel

rare shell
#

absa joker wins you the game immediately

upper granite
#

LMAO

mental solar
#

@upper granite did you make art for the turnip boy games?

upper granite
rare shell
#

aaaaaa

grand geode
#

o shit?

rare shell
#

youre a king

#

🫡

upper granite
#

tysm aaaaaaaaaa

mental solar
#

🫡

grand geode
#

i've heard of turnip boy and that's it lol

thick rivet
#

🫡

wanton rapids
#

oh i should play that more

upper granite
#

Actually funny thing-
After making a thing for social media of Turnip Boy in a bunch of different art styles, someone recommended Balatro and I made this lol

mental solar
#

That is so cute!

upper granite
#

Thank youuuuuu :D

mental solar
#

he got da cash

upper granite
#

Also the effect I had in mind is basically just Vampire, but you gain $2 for every card you remove enhancements from

#

Kinda like he's shaking the cards down for their money lol

rare shell
#

all it does is disable the orange stake effect (he's evading pack tax)

upper granite
#

LOL

mental solar
#

I'm imagining the effects more related to robbing the shop, a random thing in every initial shop is free (because robbing)

grand geode
#

LMAO

upper granite
#

That could work too! There's a lot you can do with cards that evade taxes/commit crimes

#

Hell, the first thing I posted here was an idea for a C.E.O card that's just a better, but slightly riskier version of Egg

rare shell
#

that would be kind of swag ngl

#

randomly make a shop item 0

upper granite
#

-$1 per hand played, but also gains $2-3 sell value (depends on what's more balanced)

mental solar
rare shell
#

joker that immediately sends you to hell

wanton rapids
#

maybe it could convert all discards to $6 like burglar

upper granite
wanton rapids
#

oh wait delayed gratification

upper granite
#

Stereotypical big greedy boss vibes

mental solar
#

And the name tag on the desk is a big fat "joker"

upper granite
upper granite
mental solar
#

Ohhhh, that's good :)

upper granite
#

Maybe if these ideas work well in practice.. kinda thought the Suggestions channel would be more for server suggestions, but it seems like you can suggest cards... 👀

ocean torrent
#

Why are there multiple chunks of code like 500 lines apart for the same joker

#

Which one is real 😭

grand geode
#

ohwait

upper granite
#

And if it's pog, recommend it for the base game ;P

#

It's all silly food for thought - I should probably actually make something before I get too ahead of myself tho xD

grand geode
#

:p

mental solar
#

I'm sure there are people who are willing to help :)

rare shell
#

not sure on the mult number here

spice spear
#

do you see what I'm cooking

#

it's totally in character for steve to do this too

empty brook
#

OH THAT'S FANTASTIC

mossy ledge
#

hi guys can you help me with this error log?my game crashed when i tried to buy a card pack

rigid jewel
#

There's a field called extra_gacha_pulls HUH

#

Also what mods do you have installed?

#

I believe this is referring to an error in a mod file

lean dune
#

yeah that's an error in some mod

spice spear
#

I think that has to do with the polydactyly joker in someone's mod

wispy agate
#

Is there a place here I can just find a list of mods?

cosmic shell
wispy agate
#

dope, thanks

#

I'm back because apparently a lot of mod downloads link here

woven sonnet
hallow turtle
#

i've been looking in the game's code for a while with no luck, how do I make a joker give each card scored a 1.5x mult effect (like ancient joker)? I'm using the centerhook api. right now it almost works except each card gives 1x mult. I eventually want to make this only trigger for stone cards too.
..
local function jokerEffect(card, context)
if card.ability.name == 'The Rock' and context.individual and context.cardarea == G.play then
return {
x_mult = card.ability.x_mult,
card = card
}
end
end
..
{x_mult = 1.5}, --config
{"Played stone cards", "gain {X:mult,C:white}X1.5{} Mult"}, --description text
..

misty condor
#

hi, i'm having a bug with some mod that's switching the images for pretty much everything, jokers, packs, arcana, celestial... so it shows the image of something but the description of another joker or pack

#

with all these mods installed, any idea which one(s) could be causing it?

#

or maybe it's two mods interfering with each other

heavy flax
#

How do mods work with achievements?

heavy flax
misty condor
#

yea might try that, was asking in case it was a known bug with some mod

heavy flax
#

Idk i just found out they even have mods approximately...

#

10 minutes ago

hardy brook
manic jasper
#

Modded in Lucky Swallow (gains xmult when wheel of fortune or cards with listed probabilities to give buffs successfully trigger) , wheel of fortune still independently rolls for Unlucky Crow and Lucky Swallow...

spice spear
#

if it does, that means it failed, and if it doesn't, that means it succeeded

south gazelle
#

Hey all, is there a way of getting crash logs that are more telling? Just crashed after adding a couple of mods so I wanted to see which it was to delete, but all I am given is functions/misc_functions.lua:1602: attempt to index a nil value
Any information would be great ty

shy ibex
#

Is there a video showing how to add mods to Balatro?

exotic shadow
manic jasper
# exotic shadow how do you check if the wheel works or not again?

I'm using this (and it’s inverse) as a placeholder for now...

... 
else if context.consumeable.ability.name == 'The Wheel of Fortune' then
  --to be implemented
  if pseudorandom('wheel_of_fortune') >= G.GAME.probabilities.normal/context.consumeable.ability.extra then
    bad_luck = bad_luck + 1
  end
end
...```
exotic shadow
#

right so I think the pseudorandom rerolls the randomness

#

let me find its implemtnation

#
function pseudorandom(seed, min, max)
  if type(seed) == 'string' then seed = pseudoseed(seed) end
  math.randomseed(seed)
  if min and max then return math.random(min, max)
  else return math.random() end
end
function pseudoseed(key)
  if key == 'seed' then return math.random() end
  
  if not G.GAME.pseudorandom[key] then 
    G.GAME.pseudorandom[key] = pseudohash(key..(G.GAME.pseudorandom.seed or ''))
  end

  G.GAME.pseudorandom[key] = math.abs(tonumber(string.format("%.13f", (2.134453429141+G.GAME.pseudorandom[key]*1.72431234)%1)))
  return (G.GAME.pseudorandom[key] + (G.GAME.pseudorandom.hashed_seed or 0))/2
end```
#

so you should be able to reimplement pseudoseed without assigning and then reimplement pseudorandom using that new pseudoseed

#

I think

#

or maybe you can just hyjack where the game calls the wheel and have it tell you the result

cosmic shell
#

what I'd do is just insert a boolean flag change into use_consumable depending on whether or not wheel hits, and then reference that in calculate joker. but I use balamod where it's not as challenging as it is in steamodded atm.

exotic shadow
#

yeah I would probably just like in card.lua, add something where the arrows are for the check

#

either set a bool or just call some fucntion to let your things know

cosmic shell
#

the upper half also triggers for ecto and hex, so you'd maybe need to add an extra check but yeah basically that.

safe laurel
#

Hello everyone. Is it normal that when you try to download tools for installing mods, a virus warning appears?

exotic shadow
#

yes

#

the mod tools modify the game's exe which some virus's also might do

strong swift
strong falcon
#

Does anyone know if it's possible to return multiple messages? I'm trying to implement a joker that gives chips, mult and Xmult all in the same hand as follows

            if SMODS.end_calculate_context(context) then
                return {
                    mult_mod = self.ability.extra.mult,
                    chip_mod = self.ability.extra.chips,
                    Xmult_mod = self.ability.extra.Xmult,
                    card = self
                }
            end
golden rain
#

does modding stop you from unlocks?

white scarab
#

yes, but you can disable that

bronze fern
#

I've been looking through them all and I feel like it'd be much more convenient to allow mods to label which system they use on the thread

wanton rapids
#

burnt joker + seltzer?

strong swift
wanton rapids
#

yeah i changed it to 4

grand geode
broken patrol
#

how can i get some mods?

ocean torrent
ocean torrent
tacit mountain
#

9ioooooooooooooooooo888888888888

grand geode
#

i agree

pastel wolf
#

Wholeheartedly

young perch
#

deckseer.lua stopped working for some reason? :/

wet river
grand geode
grave panther
heavy flax
#

What are the pixel art dimensions for the cards

wanton rapids
#

71x95 with a 1 pixel transparent border included

heavy flax
#

So 73x97?

grand geode
#

69x93

heavy flax
#

Ohhh okay

#

Thankies

wanton rapids
#

the sprite file is 71x95

heavy flax
#

I understand now

grand geode
#

and it's 71x95 in the spritesheet

#

the game also renders it as 71x95 ingame so it'd be preferrable to stick to that size

heavy flax
#

Thank you

wanton rapids
#

you are allowed to go into the transparent border if you want

grave panther
#

if there are other modding threads that should go into the second post under the rules - feel free to ping me folks

grand geode
#

i'll ping you once i finish my guide

#

oh yeah while you're still here - can you add a few tags like Jokers, Decks, etc. for easier sorting?

#

i'm reluctant to ping again but @grave panther

grave panther
grand geode
#

mhm

grave panther
#

okay - added "jokers" "decks" and "UI" - if there's other obvious ones lmk. "cheats" maybe?

grand geode
#

Challenges, Blinds, Mechanics, Texture, Localization?

#

Requests (this is a bit popular for some reason), Guide and Misc for ones that are none of those

grave panther
#

seems like that's pretty broad - tags aren't required at the moment to post there presumably people want to be sortable

grand geode
#

looks good i think, thank you!

manic jasper
# exotic shadow ```lua function pseudorandom(seed, min, max) if type(seed) == 'string' then se...

Trying to implement this, but no luck so far... I'm implementing it like this:

local wheel_seed = pseudoseed('wheel_of_fortune')
                if context.consumeable.ability.name == 'The Wheel of Fortune' then
                    --Work in progress, right now counts a probability independent from The Wheel of Fortune 
                    local good_luck = 0
                    if pseudorandom(wheel_seed) < G.GAME.probabilities.normal/context.consumeable.ability.extra then
                        good_luck = good_luck + 1
                    end
                    if good_luck > 0 then
                        self.ability.extra.x_mult = self.ability.extra.x_mult + self.ability.extra.x_mult_add*good_luck
                        G.E_MANAGER:add_event(Event({
                            func = function() card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize{type='variable',key='a_xmult',vars={self.ability.extra.x_mult}}}); return true
                            end}))
                    end
                    return
                end

any tips?

pale breach
#

Anyone know if there might be a way to have my joker increase play hand size to 6 cards?

empty brook
#

oh i think james actually did do a legendary joker which does that

heavy flax
#

im so confused how do i even install a mod T~T

#

nvm

upper granite
#

Is there an exact name for the effect where a single hand beats the blind and the scoreboard goes on fire?

grand geode
#

try looking for "flame"

#

unlimited flexibility

upper granite
# grand geode try looking for "flame"

I'll see what I can find!
Dunno where exactly to look, but "flame" is the name of the shader being used for the effect (I think), so whatever activates that shader is the key

heavy acorn
#

sneak peek of what I'm working on right now! StS inspired Neow (or Jimbo, I guess) starting blessings!

#

Any suggestion of what to implement? I was thinking of stuff like start with a common mul joker, common chips joker, +10 gold, etc

grand geode
#

oh shit neow

heavy acorn
#

I've also made this cute card but no idea how to change Jimbo's sprite lol so that's a WIP

grand geode
#

you can maybe take a look at my YippeeGameOver - that replaces the texture of specifically the jimbo on the win screen

#

anyways

#

Start with Double Tag
+1 Hand for Ante 1
uhhhhh

upper granite
#

I think I found where it's being controlled, but I'm also realizing that I can't read Lua for the life of me rn 😂

#

Art boy GML-pilled brain going brrr rn

#

Btw the reason I was looking for it was cuz I had an idea in mind for a card that gives money when a hand is flaming

torpid oxide
#

Anyone knows where theses messages are going ? (the ones sent by The Egg and Gift Card at the end of the round)

heavy acorn
grand geode
#

neow :)

#

beloved

wanton rapids
#

what would "whiteboard" do

#

x5 mult if you have no cards in hand?

#

or x2 mult per card in hand below 3

upper granite
#

x3 mult if no Spades/Clubs are in hand maybe?

#

Like an opposite of Chalkboard

wanton rapids
#

that's be more like redboard

#

(the original is blackboard)

upper granite
#

Ah my b lol

empty brook
wanton rapids
#

oh that's true

#

where's the jimbo deck

empty brook
#

i've been considering doing a jimbo deck at some point but i have genuinely no idea what to make it mechanically

#

though i've got some concepts for how the texture could look at least lmao

wanton rapids
#

gros michel deck
start with gros michel

empty brook
#

after each blind, 1 out of 4 chance your entire deck is destroyed

heavy acorn
#

monka

spice spear
wanton rapids
empty brook
#

actually that could be interesting if it's just like, after you play a card or something, 1 out of 4 chance to do it. makes a deck that's shrinking forever, which could be neat if there's any amount of control over it, like only for high cards or something...

empty brook
empty brook
#

i hate that challenge

#

if i did a tierlist of challenges i would put that one on the bottom because it's so boring to me lmao

#

i was so excited when i saw it, because i saw double negative oops! and was like, "Oh hell yeah! So you can get way better odds, but your whole deck will constantly break. I wonder how you can get around it"

wanton rapids
empty brook
#

and then i looked at the restrictions and how basically every other random thing is banned :)

#

this is the True Origin Story of the Dice Deck

empty brook
grand geode
#

the restrictions are Vampire and every enhancement cards

empty brook
#

okay maybe it was just no lucky cards which annoyed me then lmao

#

which makes sense in the context of the challenge but it was still enough of a reason for me to go "i will make a deck so i can use funny boosted odds lucky cards"

#

i don't claim to be rational; just ambitious

rare shell
#

Where can I find all game's sprites?

empty brook
#

you can open up balatro.exe with a program like 7-zip, and it should be in resources -> textures

rare shell
#

huge, thank you!

empty brook
#

yw!

upper granite
rare shell
empty brook
rare shell
#

(unless they weren't there yesterday lol)

empty brook
#

Balatro itself is not on the spriter's resource rn

upper granite
#

I thought that's how I found them, but I could be dead wrong and just forgot 😅

#

Probably am

heavy acorn
rare shell
#

They need to dump em to spriter's resource imo, just in case

empty brook
#

yeah someone probably should do that? it's not source code so i don't thiiink localthunk would have an issue with that

but personally i'm gonna be cautious and not do it myself lol

#

i would rather not be shoved into a Soul card for all eternity

upper granite
#

Valid lol

rare shell
#

I'm not sure if I should ask it here, (it still relates to modding/creating new cards?), but is there an established palette or list of common colors? I know that some cards do not follow palette, but it'd be nice to have reference colors

empty brook
#

like, outside of the colors of the 4 suits?

rare shell
#

I know that someone (one of the devs?) mentioned something about black color being isn't black and common joker colors exist

#

joker colors specifically I think

upper granite
#

Afaik a lot of Jokers have a specific outline color, but the colors used beyond that are up to you?

spice spear
rare shell
upper granite
#

Omg I feel kinda dumb for forgetting that now lmfao

spice spear
#

I literally just open jokers.png and colorpick off of it for my jokers

#

the game has a full enough palette that I can improvise wherever necessary

upper granite
wanton rapids
#

i have not taken colour pallettes into consideration. oops

#

at least it doesn't actually matter

upper granite
#

Gotta wonder what that base palette actually looks like

empty brook
#

oh i had no idea about that message. that's really good info to keep in mind

spice spear
#

yeah for mods you could def just ignore it (like I am with the rules for the legendary jokers for ShamPack) but I'm a stickler for keeping things looing as close to base as is possible

rare shell
#

not having a palette is much better than having a palette that isn't always respected (like in TBOI)

#

it just makes things easier

spice spear
#

isaac's spritework is all over the place anyway

#

(looking at you, AB+)

upper granite
#

I like both working in palettes and not tbh?

empty brook
#

some might say that describes the game as a whole

upper granite
#

No palette is more freeing, but I'm also a firm believer in limitations breeding creativity

empty brook
#

i'm glad there's a palette, honestly. i think when i did the stuntman for balatro re;shuffled i might have done some color-picking for some parts, just out of habit?

however i could also be wrong lmao

empty brook
#

and if they don't want to, they don't have to

upper granite
#

^

empty brook
#

Localthunk isn't going to beat them up with hammers for going against it

upper granite
#

Turnip Boy's whole palette is just Zughy-32 + pure white, and that was pretty fun to work around!

rare shell
#

don't get me wrong, I love having a palette, but when game does a palette and then refuses to use it sometimes, it makes me cringe

grand geode
#

my blinds really can't use palette colors since i asked for colors from a different server lol

upper granite
#

Some of us broke it in a couple places, but I tried sticking as close to it as possible lol

empty brook
#

yeah tboi makes me cringe too, don't worry

wanton rapids
#

how would you interpret this wording?

grand geode
#

and all my jokers follow them except Polydactyly i think

spice spear
empty brook
#

yeah i'm gonna be real not mario: i have no idea what the hell this is saying

wanton rapids
#

ok

grand geode
#

i think it's like

#

2 cards in hand = 2x
1 card = 4x
0 cards = 8x?

wanton rapids
#

that is correct

#

better wording would be appreciated

grand geode
#

be afraid

upper granite
#

I might change the effect altogether cuz x8 mult on an Uncommon sounds crazy lol

wanton rapids
#

you do have to have 5 hand size

#

which is a very steep drawback

spice spear
#

stunt jonkler

grand geode
upper granite
#

Me personally, I'd just make it a 2x/3x if your hand has 3 or less cards after playing

wanton rapids
#

x2 mult for each card below 3 cards in hand?

upper granite
wanton rapids
#

hm

upper granite
#

Then x4 for 2, x2 for 1

wanton rapids
#

that is true

spice spear
upper granite
#

I'm struggling to think of how to word this too tbh 😅

#

"Gain 2^x multiplier the closer your hand size is to 0 after playing, starting at 3"?

#

If anyone knows how to simplify that, be my guest xD

wanton rapids
#

i'm fine with doing 246

wanton rapids
#

x2 mult for each empty hand space after 3 cards?

grand geode
#

nicheish

spice spear
#

they're meant to be interesting, not good

grand geode
#

not fun

#

lma

upper granite
spice spear
#

typo'd

#

lmao

wanton rapids
#

yeah i like that wording

upper granite
#

I might make it Rare, just cuz multipliers are really valuable like that

frozen horizon
#

random ideas

upper granite
#

Even if you need to commit to a lower hand size for it

frozen horizon
#

also would you mind if i tried my hand at a sprite for that

wanton rapids
#

if you want

oak jolt
#

Hello everybody.

Just a quick question, idk if this is the right place to do it. How hard would be to change the "skin" (texture, model, vector... whatever is called) from a single card?

Imagine i want to change the Ace of hearts for a Toyota Corolla picture. Is as simple as change the "base card" and the glass, golden, multi... will change automatically, or i need to replace it once per "type"?

woven sonnet
#

wasn't someone making a hanafuda mod

upper granite
empty brook
oak jolt
empty brook
#

like there's a sprite for just the Ace of Hearts, in... 8BitDeck.png, i think?

oak jolt
#

i'm a bit bored at work and i was thinking in make a spanish deck mod

empty brook
#

and then that is put on a card, on Enhancers.png

upper granite
#

I'm still learning how to mod the game myself, so your guess is as good as mine 😅
Sounds like a simple texture swap tho, and that's how I'd figure you do something like that

woven sonnet
#

for example, here's an edit I made for personal use

oak jolt
#

i see

empty brook
#

yeah it's pretty simple stuff

oak jolt
#

it seems pretty simple

frozen horizon
#

im interested in this too cause i wanted to resprite red card to look like this album

empty brook
#

Red Card the Joker?

frozen horizon
#

yea

empty brook
#

that'd be in Jokers.png then, which is one image file containing All The Jokers

wanton rapids
#

are compatible deck backs a thing yet for steamodded btw

upper granite
empty brook
#

i know right now there are some mods which can do joker images without changing others, for new ones

frozen horizon
#

huh

empty brook
#

but i dunno if that works for like. texture swapping pre-existing jokers

hardy brook
upper granite
#

Idk if there's a way to make the background different for just a specific card (without it messing up other enhancements)

empty brook
hardy brook
frozen horizon
empty brook
#

if you want it to just be on like, the Ace of Hearts or w/e, you could put the "background" on the same layer

frozen horizon
#

the player can have little an infinite. as a treat

upper granite
empty brook
#

yeah if you want it on every single ace of hearts then that should be fine. just edit the Ace of Hearts image itself

#

i'm working on-and-off on a texture mod for cards that will also feature backgrounds, and that's how i plan on doing it

upper granite
#

Realizing I kinda interpreted that the wrong way and assumed it was adding some non-transparent background to the card 😅

hardy brook
empty brook
#

oh no. the sanctity of a challenge, RUINED.....

hardy brook
#

If you somehow get it, pop off lol

empty brook
#

really i should have more stake in this considering my dice deck exists, meaning some people just play that + get one oops

#

but also i don't really like.... care balance-wise how other people's mods interact with my own?
if you're installing multiple mods then like

#

That's On You

frozen horizon
#

i only got 6 of em unlocked i guess i should probably play the game more before getting into homebrew

hardy brook
empty brook
# frozen horizon fuck nvm

i'm gonna be real: if folks want to play challenges and keep them balanced, they are probably not installing gameplay-changing mods

#

i think that kind of defeats the point of it

frozen horizon
#

its not like shit like that doesnt exist in vanilla either

empty brook
#

so i think they're not really super worth considering when it comes to stuff like this

frozen horizon
#

swashbuckler in omlette is just a free win

empty brook
#

hahhaahhaa....

#

yeah who would like

hardy brook
#

I’ve been recreating challenges from the old suggestions

empty brook
#

be so STUPID as to lose that challenge with swashbuckler....

#

they'd be so DUMB and FOOLISH

#

and NEVER named BLACKBANDO....

frozen horizon
#

you play like ass man

#

🚬

empty brook
#

played, past tense lmao

#

i haven't tried the challenge again in a while but it was one of my early gameplay moments

#

when i was but a wee gal, much worse at the game....

#

when gold stake was just a glimmer in my eye....

frozen horizon
#

i need to get a gold steak unlocked

#

shits been getting easy on me

empty brook
#

gold stake is really good at raising your resting heart rate

spice spear
#

the second one is WAY down the road, Gepsi is burnt out on making Balatro mods for now so they're likely going to be touching up one of our previous projects (which I shall not be discussing here, self promo and all that)

empty brook
#

entirely understandable!

#

for me i'm like.
not good at coding????? so i think it's in my best interest to just worry about if my mods Work At All

spice spear
#

and I too really want to return to that project because like

#

holy fuck making that was SO FUN

empty brook
#

and try my best to keep my own stuff compatible with my own stuff (hence why dice deck and pact deck got the texture update)

south gazelle
#

I think I wanna try making a mod here. Been too long since I've modded a game.

upper granite
#

Best of luck to ya!

spice spear
#

it's open, and you can just create a joker that seems like it'd be fun to implement

south gazelle
#

Thanks for the suggestion

hardy brook
#

Time to sift through

grand geode
#

mmmmmm i want to make two more blinds and a showdown before i release my mod

#

but spriting hard

grand geode
#

ante 8 bosses are showdowns

hardy brook
#

Ah

#

So I’m a showdown then. (Since i’m Crimson Heart in reshuffled)

grand geode
#

get beaten up by the power of chips

empty brook
#

is showdown a real in-game term for them???

grand geode
#

yes

wanton rapids
grand geode
#

search showdown = true in game.lua

empty brook
#

LIME????

wanton rapids
#

gros michel background is lime

empty brook
#

i suppose that's true

manic jasper
empty brook
#

i would've expected you'd just use michel's background for the deck back though

upper granite
#

Plus Yellow deck is taken lol

wanton rapids
#

oh that is true

empty brook
#

or even made it like a brown banana or something lol

upper granite
#

Banana deck

empty brook
#

er, like, covered in the spots i mean

grand geode
empty brook
#

oh sorry i got completely distracted by limes

hardy brook
#

Also xmult for Chips

empty brook
#

anyways, glad to know there's an official term for them! i'd just been calling them "big bosses" until now lol

#

something something the ultimate showdown of ultimate destiny

upper granite
empty brook
#

yeah that's more what i expected

#

maybe not necessarily with the Generic Basic Back™️ though

upper granite
#

This was like a 2-minute edit, but ye

grand geode
upper granite
#

Yea LMAO

wanton rapids
#

yeah i'll do gros michel back tmr

empty brook
#

personally i do think that using gros michel's background on the joker would look nice

upper granite
#

Also making the yellow deck color the Gros Michael yellow

empty brook
#

i did that for dice deck but with oops! all 6s and i really like how it looks

#

genuinely been considering doing more just because i think it's like. fun

upper granite
#

Btw while all this was happening, I had the silly idea of making a bunch of Jokers themed around Rivals of Aether (cuz I love the game lol)

#

Just finished concepting how each one might work

empty brook
#

dungeons of aether could be an interesting tie-in if you do anything like that

#

i think they put the protag of that in rivals 2 iirc

upper granite
#

I did make Fleet into a card, so-

#

Btw her gimmick is basically re-triggering the next 6 tarot cards, cuz that's kinda what she's gonna do in Rivals 2 with her gimmick

heavy flax
#

would it be possible to make a joker that increases the rank of each card in the first hand of the round

upper granite
#

Don't see why not - just depends on if you know how to code that in/where to find the rank up code in the game files

upper granite
#

You and me bothhhhhhh lol

#

Lua does not compute in my smol art brain xD

heavy flax
#

i have nearly 0 coding experience

grand geode
#

not having coding experience is roughhhhh

heavy flax
grand geode
#

i wish you luck though

hardy brook
#

I’m gonna try and make xChips

upper granite
heavy flax
#

i dont even know where to start learning how to mod this game so im just gonna do the art and concepts first and get them to display over someone else's work by changing the png T~T

empty brook
#

at the moment my own coding experience with this game is like. knowing how to do lua stuff from years ago, and i haven't touched it in over 5 years lol

#

so a big part of the process has been re-learning stuff lmao

#

people here have been incredibly helpful though!

oak jolt
#

in which language is programmed?

empty brook
#

Lua, using the Love2D engine

oak jolt
#

never heard

rare shell
grand geode
#

tripping

rare shell
grand geode
#

p8 is different

rare shell
#

i feel like i recognize that font

grand geode
#

have you heard of this little game called rhythm doct-

rare shell
#

ah thats why

#

minor question

#
                        message = localize{type='variable',key='a_mult',vars={self.ability.mult}},
                        mult_mod = self.ability.mult + self.ability.extra.mult
                    }```
am i stupid or something
#

everything about my joker works just fine

#

EXCEPT

#

the message for the mult shows up as +0 mult (but it still applies the mult normally, its literally just this visual bug)

grand geode
#

vars should be self.ability.mult + self.ability.extra.mult

#

i think ?

rare shell
#

okay i think i just had it formatted wrong

#

swapped it to just self.ability.extra.mult and it was just fine

ivory crow
#

im confuse if i want to download balamod where is the balamod exe?

#

i dont have the exe

rare shell
#

it injects your balatro.exe

ivory crow
#

Any idea or link where to download balamod:

manic jasper
#

I want to inject code into this part of the card.lua internal file to add a flag for wheel of fortune triggering where --insert flag here is. I also would need to use an external file and prefer to use SteamModded to do so.

if self.ability.name == 'The Wheel of Fortune' or self.ability.name == 'Ectoplasm' or self.ability.name == 'Hex' then
      local temp_pool =   (self.ability.name == 'The Wheel of Fortune' and self.eligible_strength_jokers) or 
                          ((self.ability.name == 'Ectoplasm' or self.ability.name == 'Hex') and self.eligible_editionless_jokers) or {}
      if self.ability.name == 'Ectoplasm' or self.ability.name == 'Hex' or pseudorandom('wheel_of_fortune') < G.GAME.probabilities.normal/self.ability.extra then 
          G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
              local over = false
              local eligible_card = pseudorandom_element(temp_pool, pseudoseed(
                  (self.ability.name == 'The Wheel of Fortune' and 'wheel_of_fortune') or 
                  (self.ability.name == 'Ectoplasm' and 'ectoplasm') or
                  (self.ability.name == 'Hex' and 'hex')
              ))
              local edition = nil
              if self.ability.name == 'Ectoplasm' then
                  edition = {negative = true}
              elseif self.ability.name == 'Hex' then
                  edition = {polychrome = true}
              elseif self.ability.name == 'The Wheel of Fortune' then
                  edition = poll_edition('wheel_of_fortune', nil, true, true)
              end
              eligible_card:set_edition(edition, true)
              if self.ability.name == 'The Wheel of Fortune' or self.ability.name == 'Ectoplasm' or self.ability.name == 'Hex' then check_for_unlock({type = 'have_edition'}) end
              if self.ability.name == 'Hex' then 
                  local _first_dissolve = nil
                  for k, v in pairs(G.jokers.cards) do
                      if v ~= eligible_card and (not v.ability.eternal) then v:start_dissolve(nil, _first_dissolve);_first_dissolve = true end
                  end
              end
              if self.ability.name == 'Ectoplasm' then 
                  G.GAME.ecto_minus = G.GAME.ecto_minus or 1
                  G.hand:change_size(-G.GAME.ecto_minus)
                  G.GAME.ecto_minus = G.GAME.ecto_minus + 1
              end
              used_tarot:juice_up(0.3, 0.5)
          return true end }))
        --insert flag here
      else
          G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
              attention_text({
                  text = localize('k_nope_ex'),
                  scale = 1.3, 
                  hold = 1.4,
                  major = used_tarot,
                  backdrop_colour = G.C.SECONDARY_SET.Tarot,
                  align = (G.STATE == G.STATES.TAROT_PACK or G.STATE == G.STATES.SPECTRAL_PACK) and 'tm' or 'cm',
                  offset = {x = 0, y = (G.STATE == G.STATES.TAROT_PACK or G.STATE == G.STATES.SPECTRAL_PACK) and -0.2 or 0},
                  silent = true
                  })
                  G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.06*G.SETTINGS.GAMESPEED, blockable = false, blocking = false, func = function()
                      play_sound('tarot2', 0.76, 0.4);return true end}))
                  play_sound('tarot2', 1, 0.4)
                  used_tarot:juice_up(0.3, 0.5)
          return true end }))
      end
      delay(0.6)
  --insert flag here
  end
ivory crow
#

Where to find the balamod?

grand geode
ivory crow
#

Any idea how to instal balamod?

#

@grand geode any idea? i see you are the mod dev in balamod

upper granite
#

Does it not say in the Balamod page?

ivory crow
#

The balamod github page doesnt have balamod exe

#

but the people in the balamod discord have the exe

#

i feel very dumb rn XD

#

this guy in history have this

#

i dont see any exe in the github

grand geode
#

go to the Releases page on the right

ivory crow
#

okay thanks

#

got it now hehe

grand geode
#

also i just make mods i don't work on Balamod itself

manic jasper
#

I redid the entire function and tested wheel of fortune, but Lucky Swallow is not at x1.2 mult despite the 6 wheel of fortune attempts giving two enhancments...

rare shell
#

how are you checking for a listed probability paying out out of curiousity?

grand geode
#

manacle... 2!

#

actually yeah i think this is just Manacle but harder LMAO

rare shell
#

+2 hand size after each hand played?

#

that way it feels more like the serpent

grand geode
#

that makes it so that after burning two hands it's a benefit

rare shell
#

yeah

grand geode
#

which is. meh

#

probably

rare shell
#

i mean its like certain builds with serpent

#

tbh serpent is much more likely to just screw up your run than it is to benefit compared to playing 2 hands

grand geode
#

unlike serpent you kinda don't need a specific build to gain a benefit here

rare shell
#

but while it is a benefit after 2 turns, it still requires you to burn 2 hands and makes your initial discards really bad

#

which i suppose serpent does too

grand geode
#

the design i wanna go here is burning hands early and saving discards for after hand size has increased

empty brook
#

honestly i don't think i've had a single time in my life where serpent was hard to deal with

#

every time i've seen that boss it's like "oh excellent, a free win"

rare shell
#

id be lying if i said the same

#

but it is one of the less frustrating boss blinds

grand geode
#

i interpret Serpent as "only discard 3"

rare shell
#

me looking at my hand of 4 random number cards

rare shell
grand geode
#

The Water hhh

rare shell
#

the high tide

grand geode
#

clearly i should make it Play only 1 Blind at x6 chips req

#

1 Hand

#

not 1 blind fuck

empty brook
#

i interpret serpent as "i burn every single discard to have a gigantic 16 card hand, taking zero risks and being rewarded immensely for it"

grand geode
#

serpent is piss easy

empty brook
#

because why wouldn't you just discard 1 card at a time, only removing the worst cards in your hand

#

i genuinely think Serpent is easier than Small Blind lmao

#

it's a boss blind which just kind of buffs you

rare shell
#

serpent sucks in endless

#

sometimes

empty brook
#

even if your deck wants to play 5-card hands it's like

rare shell
#

thats where i find myself getting messed up by serpent

empty brook
#

you can usually just use up your discards on 1-by-1 cards you don't want

#

to get a giant hand, never having to take 50/50s

#

"Do i discard the diamonds i have a lot of, or the hearts ih ave a lot of? since i have 3 of each in hand and need a flush of either"

#

serpent: "neither!"

grand geode
#

oh there's really no reason to discard more than 1 card is there

empty brook
#

"enjoy them both"

#

yeah

#

the only possible reason would be if you don't want to kill it early, like if you're trying to grind out supernova or something

rare shell
#

when you put it like that

empty brook
#

but otherwise you should p much always use every single discard immediately and for 1 card at a time

#

Serpent buffs you lmao

#

ESPECIALLY if you have steel cards

rare shell
#

ive got it

empty brook
#

but yeah overall Serpent just helps you lol

empty brook
#

i think if you're playing a deck with only 1 hand (Golden Needle challenge, maybe a black deck theoretically) it might hurt

#

since you would draw less than discarding 5 cards

#

but even then i doubt it

rare shell
#

how awful would this be

#

"Divide your chips by your remaining hands."

empty brook
hardy brook
#

Oh

#

Damn

hardy brook
empty brook
#

oh, i see!

grand geode
#

yeah

#

if not for the fact that Flint is strictly harder

#

wait no that says chips not Base Chips

rare shell
#

aye

#

i should have specified final chips tbh

rare shell
grand geode
#

different problem, the amount of chips you score in a hand is a local var in a different function

#

so i cannot read it during hand evaluation

rare shell
#

ill check that black agains what ive been using

grand geode
rare shell
#

is this going to be a certified hell like that one joker you have that calculates end score

#

huh, weird that campfire is darker

#

i can understand why though, helps make the flames pop out more

grand geode
#

well technically here i can just hardcore the blind into the evaluate function

#

hardmode

#

wtf

#

hardcode

rare shell
#

still weird

#

i think this is a game you can have a little bit of artistic liberty when it comes to joker design

#

looking at you lumpytouch

grand geode
#

shoutouts to lumpy touch lmaooooo

rare shell
#

castle also has a darker black

grand geode
#

can't believe they are involved in balatro

rare shell
#

i know right

#

dude is 25% of my style inspo lmao

grand geode
#

ig the exceptions to the palette are the full art cards

rare shell
upper granite
grand geode
#

yea check game credits

rare shell
#

they did the art broke boy joker

rare shell
#

(i literally forgot his name everyone of my friends just affectionally refers to tarot generator lad as broke boy joker)

grand geode
#

Vagabond

rare shell
#

yeah, broke boy

spice spear
grand geode
#

wowwww

rare shell
#

lucky

grand geode
#

quite

rare shell
#

there are two constants in my mod's art style, bald jokers and space backgrounds

spice spear
#

tfw you break the white border rule /j

#

looks sick btw

rare shell
#

what is this white border rule

#

pls explain

rare shell
#

its times like this i wish i could favorite and bookmark discord posts

upper granite
#

Fr fr

rare shell
#

I feel like inconsistency is key to consistency in this artstyle
it is consistent as long as everything is inconsistent, sounds crazy

#

just idk

#

look at food cards

spice spear
#

tbh if you're going to break the rules, save it for legendaries

upper granite
#

At least it’s pinned, if anything

rare shell
#

why popcorn has darker outline and ramen doesn't?

#

ive just been copying jimbo as base for literally everything

spice spear
#

lmao

#

a blank jonkler for your troubles

#

a blonkler, if you will

rare shell
#

i just need to fix the borders of all my jokers

upper granite
#

Woe, blank joker be upon ye

rare shell
#

all of them Harold

spice spear
#

LMAO

rare shell
#

why this joker has the same outline color as jokers with white border, but has green border?

#

because its a flash card

#

not a playing card

empty brook
#

i have a really consistent artstyle for my jokers, currently: i plan out the art and then don't draw them

#

i'd say it works pretty well

upper granite
#

TRUE

spice spear
#

LOL

empty brook
#

see, i WILL do the art once the mechanics are done!! therefore it's not my lack of art skills, but my lack of CODING skills!

#

take THAT!!!

spice spear
#

most of mine are dumb references (Steve, Vince Joker, the upcoming Frozen Joker) and others are just Edits (Slothful & Prideful joker)

empty brook
#

i do actually need to get off my ass and do the 5 jokers i've had planned for a while. i have 2 of them done, only need to finish 3 more

#

but also sometimes i look at code and am reminded why it is that i went into writing instead

rare shell
#

Is it weird for me to start with art, then do implementing?

upper granite
#

I might honestly wanna ask if someone else can/would be down to code stuff, and then I can make art from there

spice spear
#

nope

empty brook
#

i think you should do it in whatever order you prefer

rare shell
#

nope

empty brook
#

but i've done too many creative projects where i do it in that order, and it sucks when it's like

rare shell
#

i have such a hard time following tutorials because they give me an asset pack and i want to stop coding just to make my own assets

spice spear
empty brook
#

"Wow, I just literally cannot handle the mechanical part of this, so the art is either going unused or is being applied to a vastly different mechanical concept"

rare shell
#

SO true bestie

upper granite
empty brook
#

of course, that's mostly been for tabletop design, so that's usually more an issue of "it's not fun" rather than "it doesn't work at all"

programming is great because instead of not having fun because it's bad, i get to not have fun because Balatro.exe has crashed. Sending a crash report...

upper granite
rare shell
#

ok adding the border makes this feel much more authentic

upper granite
#

Thank goodness I have the art skills to back up being an ideas guy lmao

rare shell
#

thank you for enlightening me dank

spice spear
#

np np

empty brook
#

oh yeah, that's CLEAN

#

so clean it almost makes me forget the fact you put jace the mind sculptor in this game....

rare shell
rare shell
#

if its any consolation his buggy code gives me a headache just like the real card

empty brook
#

this is the only time in my life i will be happy to hear code is being frustrating

rare shell
empty brook
#

however i do hope you're able to get it working how you want to soon enough!

spice spear
#

thinking about making a "Jonkler" legendary that simply does x4 mult and is just a poor redrawing of the normal joker

rare shell
#

the ultimate Jank Jonkler

empty brook
#

oh man, you want BAD ART? let me tell you: i've got that in SPADES

rare shell
#

also i know we're talking about not breaking the rules and all that but

#

i mean

#

its literally expanded art

#

i think thats a pass

empty brook
#

expanded art joker breaking the rules does make more sense, yeah

rare shell
#

its like them borderless cards in mtg

#

realizing now im gonna have to redo the art for the old man joker since hes using way too many shades of super darker colors

#

the hubris of knowledge

empty brook
#

the best part about doing art for big sets of things: realizing you messed something up and you have to go back and redo all of them

#

i have done like 100+ cards for fanmade content of a board game, and someone pointed out to me there's an error on all of them

and honestly i'm just putting off fixing it lmao

#

balatro coding is scary but it's less scary than that

spice spear
#

The Horrors

rare shell
#

we back to swagging

#

also the star system in question

#

not sure if should be common or not, feelin like it could be

molten igloo
#

its really underpowered for an uncommon

#

cuz its just another type of superposition that has 2 limiting factors to it

#

its just this ones sometimes easier

rare shell
#

very good comparison

heavy flax
#

would it be possible to make a joker that retriggers depending on the amount of cards not in your hand

rare shell
#

ah, should specify its exactly 3 cards

#

well i think its insinuated

molten igloo
#

i infered that

#

ye

heavy flax
molten igloo
#

i feel like it would be cool if it was fill your consumables with planets

rare shell
#

tweaked nuclear joker to have "true joker black"™️

molten igloo
#

that would be deserving of a uncomon and would make sense with what the card is

molten igloo
#

as u could fill 3 slots at once if u had magic ball

heavy flax
upper granite
#

the jonkler

heavy flax
#

MOVE HIS NECK THINGY

#

it obscures the red dingly thingy in a very uncomfortable way T~T

upper granite
#

What was worse before is that it has a drop shadow behind it to give the legendary card effect, so uh...

#

Yea I did not intend that, good catch

wispy agate
#

Something kinda weird is going on and I don't know why. Sometimes some mods have special art for their jokers, and it shows up, but sometimes the special art just.... doesn't know up, and I also can't find it in the files

#

but sometimes I can?

#

It's weird

#

sometimes cards that have custom art show up with said art, but sometimes they're completely invisible instead

#

is there some fix to this????

empty brook
#

if they're completely invisible, that likely means you have multiple mods on at once, which change the same image

#

for instance, the backs of decks are all found in the Enhancers.png file--so unless a deck is either using a back already found in there, or they're made compatible by the mod maker, they can make that issue

wispy agate
#

Hmmmm

empty brook
#

for jokers i believe at this point you don't NEED to change the jokers.png file to have custom art for it? but there's probably some mods which still do

wispy agate
#

I know, some mods have them each as their own assets

#

and sometimes those show up!

#

But sometimes they just don't

spice spear
#

ShamPack does some shenanigans to make the textures load-- I think Golden Epsilon wrote his own API for it

rare shell
#

how did it take me this long to realize i just literally coded one of multi's jokers

wispy agate
#

And one thing I found with the JankJonklers thing. It actually has art for some jokers, and descriptions for it in the files, but they just don't show up

rare shell
#

huh?

spice spear
#

they're probably not properly added to the pools

rare shell
#

oh, yeah

wispy agate
#

.... oh

rare shell
#

yeah i have a lot of sitting assets in my github

#

:y

#

if its not listed on the github.io page its not implemented

upper granite
#

Has anyone made an Inscryption card as a Joker yet?

wispy agate
#

There's also the Sentai Joker, which your mod says is there, but isn't in the game

#

Same with the pawn joker

#

don't show up in game

upper granite
rare shell
#

ah i dont think i updated the release for it yet, i just pushed out the update for it

empty brook
wispy agate
#

lmao

upper granite
#

Lmao

rare shell
#

ill be pushing out an update and release today

wispy agate
#

ah, ok

upper granite
#

I had a thought, but it might be, like, WAY too much lol

rare shell
#

debating on removing minimalist joker since MultiJokers has the same thing

empty brook
#

if i were to make an inscryption joker i'd probably make it involve destroying jokers