#💻・modding-dev

1 messages · Page 155 of 1

violet void
#

Because you didn’t add a rarity to the actual consumable it crashes

Consumables** don’t have rarities**

Im very confused

wintry solar
#

By default….
Adding a rarities to a consumable type tells smods that you are going to add a rarity value from your list to each consumable of that type

#

You didn’t do that which is why it was crashing

#

I don’t even see the need in your case, you only defined one rarity so it’s equivalent to not having them at all

violet void
#

In the future I'll add one alignment that should be more rare than the others

sick sparrow
#

this Virus.DOS.Techno card is completely safe, this is what happens if the card is used.
it's also mod-dependent, so if cryptid exists, it will be code card, otherwise spectral card.

maiden phoenix
violet void
#

If im using rarities in objecttype, then this is how I set rarity for singular consumable correct?

wintry solar
#

No

#

You set the key of the rarity you defined

maiden phoenix
violet void
#

or I can just jump on the black hole kind of rare...

wintry solar
frosty dock
violet void
#

But hold on, wouldnt that give the chance for the actual Soul/Black Hole to appear or are they strictly connected to Tarot/Planet packs

frosty dock
#

Also how come you're belittling autumn and instead assuming my docs are wrong? 💀

frosty dock
frosty dock
#

surprise, that's also in the docs

frosty dock
sharp gate
#

prob because of this

violet void
sharp gate
#

m?.autumn was being very... agressive

frosty dock
#

they literally told you the answer multiple times before that though?

violet void
#

"Just do X" isnt that helpful

frosty dock
#

there's nothing more to it though. you're declaring the consumable type have rarities, so the consumables of that type now need to have a rarity

violet void
#

Ok I see, so this can be used if you're actually using custom rarities and the key needs the key of the rarity not of the consumable

#

and then I give said rarity to the consumable

#

that makes a lot more sense now

wintry solar
#

It makes as much sense as when you were told hours ago too

violet void
#

It does for you since you made it 😞

#

it was a bit confusing for me

#

thanks for the patience though

wintry solar
#

I mean autumn explained it in exactly the same way yesterday when you asked, you just ignored them

maiden phoenix
#

Wasn't Flowwey the one who made it?

violet void
#

I didnt exactly ignore them

wintry solar
#

That’s not what happened but sure 🙃

violet void
#

Looking back now, they responded later after I went to sleep

#

didnt realise

#

we should all use reply pings 😆

crisp coral
#

i only use reply pings when it's necessary for me

random sleet
#

i never use reply pings nobody should pay attention to me

wintry solar
#

Replying pinging mid conversation is weird people should just have reading comprehension skills

sharp gate
#

I use reply pings if its only been 5 mins or less, otherwise I just wait for them to respond

violet void
#

it was an unfortunate situation, sorry autumn for assuming you had stopped replying

sharp gate
#

that ways i know they most likely are still paying attention

crisp coral
wintry solar
#

I should know better 😢

maiden phoenix
#

Reply pinging me is like russian roulette, I might get angry at you or not

violet void
#

Im sorry for the confusion

random sleet
#

but yea sorry i forgot that message was like way later oops time is not real

tight thistle
#

day 6 of attempting to figure out how to make this joker's text boxes work

#

thrilling

sick sparrow
#

how to change locale on runtime?

tight thistle
#

i really want to get this over with

sharp gate
#

hey, does anyone know how steammods keeps track of which mods are enabled/disaibled?

#

is there a file somewhere

frosty dock
#

(which prevents lovely patches of that mods being applied at the same time)

sharp gate
#

okay, so smods modifies that to enable/disaible them?

#

thanks

frosty dock
#

it creates/deletes such a file

wooden badge
violet void
# frosty dock there's nothing more to it though. you're declaring the consumable type have rar...

I have another question

I realise that making my card type a Consumable is incorrect for this use case, I made a new specific cardarea for it (referencing Bettma mod) where the cards in it cannot be selected
(I could just make it consumable but the fact these cards appear in the Consumables area in the collection looks wrong since you cant technically consume them)

-# Unless I can move the collection place somewhere else while still being Consumable but that looks non-standard

Much like how Grim adds its Skills in a different place entirely (in the OTHER category of the collection), but after checking its code it does so only with lovely patches

Im reading the docs but I dont think adding new card types is supported yet, should I go with lovely patches too or is there a different way

random sleet
#

you can absolutely add new card types in a more normal way

#

idk why grim decided to copy vanilla

#

you can define a new type of SMODS.Center (?) , look into how SMODS.Joker is implemented

#

the main issue is its not going to be a simple process and would likely benefit greatly from a more thorough understanding of balatro's workings

#

(as well as that of SMODS)

#

you will probably have to use lovely for something at some point tho, and its a verryyyyy powerful tool

violet void
#

might be more approachable

random sleet
#

yes exactly like that mhm

#

then you init them just like other smods things

#

except with whatever name you give it (like here, CardSleeves.Sleeve{...} is how youd set up a new one)

violet void
#

Tried something like this and it doesn't crash, but I probably need to figure out how to add the collection first

random sleet
#

this is beyond my knowledge, but i wish you luck 🫡

random sleet
#

i have successfully switched the joker stamps to be in the Other tab

violet void
#

It's no longer beyond your knowledge

random sleet
#

i mean like

#

most of the stamp code still isnt actually mine lol

#

fren updated it for me :3

violet void
#

made it too, hopefully it becomes standarlised eventually

coral fjord
#

ignore the text being grammatically wrong, why is it showing me nil instead of value? did I overlook something while setting up the joker?

    key = 'stonerjoker',
    loc_txt = {
        name = 'Stoner Joker',
        text = {
            "For every digit in Mult,",
            "{X:mult,C:white}#1#x {} Mult"
        }
    },
    config = { extra = { xmult = 30 } },
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.xmult } }
    end,
    rarity = 2,
    atlas = 'coulfuckeryjokers',
    pos = { x = 2, y = 0 },
    cost = 12,
    calculate = function(self, card, context)
        if context.joker_main then
            return {
                Xmult_mod = math.ceil(math.log10(mult)) * card.ability.extra.xmult,
                message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.Xmult } },
            }
        end
    end
}```
violet void
#

nvm

#

truly 0 reading comprehension

coral fjord
#

it's okay, everyone makes mistakes LOL

#

yeah.. :/

#

wait, I'll change all instances of xmult to mult in that..

#

nope, still broken

foggy carbon
maiden phoenix
#

It's case-sensitive

#

Yea what they said

coral fjord
#

yeah, I also fixed that bc I realised that myself 😭

#

this should work though, right???

#

xmult should be getting assigned a value

foggy carbon
#

yeah, I'm not seeing what's wrong

coral fjord
#

updated code btw

----- stoned mf
SMODS.Joker {
    key = 'stonerjoker',
    loc_txt = {
        name = 'Stoner Joker',
        text = {
            "For every digit in Mult,",
            "{X:mult,C:white}#1#x {} Mult"
        }
    },
    config = { extra = { xmult = 30 } },
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.xmult } }
    end,
    rarity = 2,
    atlas = 'coulfuckeryjokers',
    pos = { x = 0, y = 0 },
    cost = 7,
    calculate = function(self, card, context)
        if context.joker_main then
            return {
                Xmult_mod = math.ceil(math.log10(mult)) * card.ability.extra.xmult,
                message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.xmult } },
            }
        end
    end
}
wintry solar
#

What’s the issue?

coral fjord
coral fjord
#

xmult is nil

wintry solar
#

Remove and readd the joker

coral fjord
#

from scratch?

maiden phoenix
#

Oh yea it's not updated, did you restart Balatro?

coral fjord
foggy carbon
#

It's working perfectly fine for me. All I changed was pointing to my atlas because I didn't have yours

wintry solar
#

If you’ve modified the config you need to respawn the joker, it won’t update otherwise

foggy carbon
#

removing your code from mine because it's not in the scope of my mods lol

coral fjord
#

LOL

foggy carbon
#

I'm making jokers based on canonically-tiny ladies, not stoners

coral fjord
#

😭

maiden phoenix
#

Yea that joker crazy lol

foggy carbon
coral fjord
#

oh wait, that's wrong

#

it's supposed to be 10 LOL

#

actually, 5 seems best

#

this is supposed to be a troll pack after all, just for fun 😭

maiden phoenix
#

Oh go wild then

coral fjord
#

I hope atleast one person gets this reference...

spring lantern
#

still trying to figure out how to best do a blueprint type joker.. for some reason calling this func retriggers the other joker instead of just returning the calculation

spring lantern
coral fjord
#

REAL

foggy carbon
#

oh, yeah, earlier in this chat, you guys decided that my idea for Rapunzel was too weak to be a rare, but changing it to Xmult means it steps on Obelisk's toes? (I still don't understand how). So you guys suggested I decrease the mult and make it an uncommon.

This is making me consider the rarities of my other jokers.

coral fjord
#

totally an uncommon

#

hydrogen bomb's code is broken eitherway LOL

foggy carbon
#

these are my jokers so far. Rapunzel isn't yet fully programmed, and I do have one more planned.

#

Tink uses Ancient Joker type seeding, so you cannot pare your deck down to one suit and always get her

#

oh yeah, I should probably make Gadget a little slower to proc. That was just to speed up testing that the timer worked

spring lantern
#

thumbelina would go nuclear in a high card build

#

xmult + free deckfixing

#

:3

foggy carbon
#

during my testing run I found myself counterintuitively using Strength on aces to make more 2s

spring lantern
#

imagine that + perkeo cloning strengths for your 2's / turning the queens into kings

#

and a baron for good measu8re of course

spring lantern
opal spade
#

so how exactly does voucher calculate work? looking at the ownership over observatory it seems like the exact voucher card instances are saved somewhere after redemption - where does that happen?

hardy viper
opal spade
#

i think i should rephrase my question so it targets my issue directly
it seems like with the new calc the voucher instances are saved somewhere to be used for calcs later - where would i look for that in the code?

#

i need to add an exception bcos currently updating a mod that doesnt want its redeemed voucher to be stored like that

foggy carbon
spring lantern
#

ohh shit okay i see

opal spade
#

blueprint steals the return of calc functions for its effect ye

coral fjord
#

lets say I wanted to delete every joker

#
                    G.E_MANAGER:add_event(Event({
                        func = function()
                            play_sound('tarot1')
                            card.T.r = -0.2
                            card:juice_up(0.3, 0.4)
                            card.states.drag.is = true
                            card.children.center.pinch.x = true
                            G.E_MANAGER:add_event(Event({
                                trigger = 'after',
                                delay = 0.3,
                                blockable = false,
                                func = function()
                                    for k, v in ipairs(G.jokers.cards) do
                                        G.jokers:remove_card(v)
                                        v:remove()
                                        v = nil
                                    end
                                end
                            }))
                            return true
                        end
                    }))
                    return {
                        message = 'KABOOM!'
                    }
                else
                    return {
                        message = 'the clock is ticking...'
                    }
                end```
#

would something like this work?

foggy carbon
#

what does coughing baby do

coral fjord
#

Coughing Baby - create a coughing baby card in your deck everytime a hand is played, +1 mult for every coughing baby used in a hand

spring lantern
#

weird

solar eagle
#

which property stores hand size?

#

i know G.hand:change_size adjusts the size but i want to make sure you cant use this card if ur hand size is 1

#

oh nice

#

the print worked

#

G.hand.config.card_limit

atomic edge
#

are there any mods that create custom buttons? like use/sell for example

foggy carbon
#

Fusion Jokers

atomic edge
#

thanks

foggy carbon
#

how do I get the type of hand played? I know how to check for specific hand types next(context.poker_hands['type']) but I want to figure out how to know what hand was played in the first place

spring lantern
#

context.scoring_name

slow shoal
#

Hey there, I am new here. Any tips to create mod in Balatro?

atomic edge
atomic edge
#

there are also some examples on how to create jokers/consumables etc

slow shoal
#

Ok and is it useful to learn lua or something?

atomic edge
#

i didnt i just read other mods/games source code and try to understand it as i go

#

but im by no means whatsoever a good modder

#

so maybe other people can answer you better

slender island
#

guys i have a redacted jokers texture file and want to make a mod based on steammodded, how do i do it?

#

i mean what should i put in lua file so it will work?

atomic edge
#

you want to change the textures of all jokers or make a new one?

slender island
atomic edge
#

first you have to create an atlas (a png with the textures of all jokers) you can just take the source code one and place your desired textures over the ones you want to change

violet void
slender island
#

my english is not very well

atomic edge
#

SMODS.Atlas{key = "Joker", path = "path to your png", px = 71, py = 95, prefix_config = { key = false } }

#

just change the path

atomic edge
#

it was on the steammodded github i didnt try it myself but it should work

#

its their example

#

crash handler is saying i tried to call a nil value at engine/ui.lua [981] but there is nothing there, im trying to create a custom button for a consumable so i dont know why it would even call that function

wintry solar
#

Better to use malverk so it’s toggleable for textures

atomic edge
hardy viper
#

you're looking for Mods/lovely/dump/engine/ui.lua

atomic edge
#

i was absolutely in the wrong file

#

thank you so much

#

i was in the smods one

hardy viper
#

np

atomic edge
#

if i want to change a texture of a joker/consumable during the game based on conditions

#

do i just change the atlas or is there a more elegant solution

lavish dragon
#

I have been wanting to make a weather mod that basically adds like a custom "boss blind" effect to every blind with some unique interactions with jokers/tarots and being able to reroll/forecast the weather.

Are overhaul-ish changes like that not possible with lua scripting? Have tried to find a mod that does a similar thing but had no luck

solar eagle
#

this is probably more a lovely patch type of deal

faint yacht
violet void
#

is there anything here that would flip these cards

solar eagle
violet void
#

they keep flipping the other way when I open the collection somehow

wintry solar
#

show your area function too

tepid crow
faint yacht
#

Can I not make the "targeting area" of a Joker smaller (i.e. Half Joker, Wee Joker, Square Joker)?

wintry solar
#

you can

faint yacht
#

...assuming I don't need a different atlas for it, tell the function.

violet void
wintry solar
#

your card areas are of type 'deck'

#

you should look at collection code for standard objects instead

#

it's like 2 functions that you need, 1 for a general page, and 1 for if there are more than 1 page

#

you can find the smods ones in overrides.lua

tall wharf
faint yacht
wintry solar
#

I think it's something like that yeah, it got merged recently then you don't need to do set_ability shenanigans anymore

faint yacht
#

...well, the target area is smaller, but the Joker also is squimshed.

violet void
wintry solar
#

well yes, each object type has its own function

frosty dock
#

smods mostly standardizes collection UI except for blinds and tags, you can make use of that util

nocturne estuary
#

I'm trying to make a joker blueprint compatible, however doing this triggers the context.remove_playing_cards twice for some reason

calculate=function(self,card,context)
        if context.blueprint then
            return {
                card = card,
                message = '+' .. card.ability.extra.mult,
                mult_mod = card.ability.extra.mult,
                colour = G.C.MULT,
            }
        end
        if context.joker_main and card.ability.extra.mult > 0 then
            return {
                card = card,
                message = '+' .. card.ability.extra.mult,
                mult_mod = card.ability.extra.mult,
                colour = G.C.MULT,
            }
        end
        local multAdd = 0
        if context.remove_playing_cards and context.removed and #context.removed > 0 then
            for i= 1, #G.hand.highlighted do
                multAdd = multAdd + G.hand.highlighted[i].base.nominal
            end
            card.ability.extra.mult = card.ability.extra.mult + multAdd
            card_eval_status_text(card, 'mult', multAdd, nil, nil, {message = '+' .. multAdd})
        end
    end
frosty dock
normal crest
#

You have to manually add the blueprint behaviour

frosty dock
#

you just need to exclude it from contexts where it's unwanted

normal crest
faint yacht
wintry solar
#

might need the pixel_Size stuff too?

faint yacht
#

Matching the two to the actual resolution of the shrunken image in atlas makes it sag down.

display_size = { w = 69, h = 74 },
pixel_size = { w = 69, h = 74},
merry raven
#

God these two are the pinnacle of early 2000s designs

faint yacht
#

You're likely to be seeing him too.

wintry solar
#

unsure how to get it in the middle

faint yacht
#

Fixed by moving the actual image in atlas to match the top of other cards.

wintry solar
#

oh cool

faint yacht
#

Now for the function question of it... better to use Lovely patches or hook into is_suit for making Hearts and Spades count as one suit?

normal crest
#

Yes

#

Wait

#

Either way is fine

frosty dock
#

reminds me I've been meaning to work on suits and ranks

cerulean rose
normal crest
#

You might need to add extra checks in a hook

tall wharf
#

is this better

frosty dock
#

looks like a nice high contrast option

faint yacht
#

?

local issuitref = Card:is_suit

function Card:is_suit(suit, bypass_debuff, flush_calc)
    if flush_calc then
        if next(SMODS.find_card('j_toga_testhearty')) and (self.base.suit == 'Hearts' or self.base.suit == 'Spades') == (suit == 'Hearts' or suit == 'Spades') then
            return true
        end
        return Card:issuitref(suit, bypass_debuff, flush_calc)
    else
        if self.debuff and not bypass_debuff then return end
        if next(SMODS.find_card('j_toga_testhearty')) and (self.base.suit == 'Hearts' or self.base.suit == 'Spades') == (suit == 'Hearts' or suit == 'Spades') then
            return true
        end
        return Card:issuitref(suit, bypass_debuff, flush_calc)
    end
end
tall wharf
#

no low contrast :P

frosty dock
#

should be return issuitref(self, suit, bypass_debuff, flush_calc)

#

Also just so you're aware, this makes all cards that aren't hearts or spades also count as the same suit

faint yacht
#

next(SMODS.find_card('j_toga_testhearty')) isn't set up right?

frosty dock
#

no the find_card is good

#

I mean this is just smeared logic

#

which I should change to work better with modded suits too

ionic verge
#

how do i make C:legendary cycle through colors like the actual legendary text does

#

right now it just stays purple

faint yacht
#

C:edition or C:dark_edition?

faint yacht
ionic verge
frosty dock
#

if you just want it to be smeared but different groupings, leave as is

#

if it's supposed to be hearts and spades only, exchange == for and

faint yacht
#

...though, this with the Smeared Joker would make all suits count as one, technically. 😂

frosty dock
#

would it though

faint yacht
#

It does error out at redefining of the function, though. [SMODS _ "src/loader.lua"]:571: [SMODS TOGAPack "togastuff.lua"]:165: function arguments expected near 'function'

local issuitref = Card:is_suit -- 163

function Card:is_suit(suit, bypass_debuff, flush_calc) -- 165
    if flush_calc then
        if next(SMODS.find_card('j_toga_testhearty')) and (self.base.suit == 'Hearts' or self.base.suit == 'Spades') and (suit == 'Hearts' or suit == 'Spades') then
            return true
        end
        return issuitref(self, suit, bypass_debuff, flush_calc) -- 170
    else
        if self.debuff and not bypass_debuff then return end
        if next(SMODS.find_card('j_toga_testhearty')) and (self.base.suit == 'Hearts' or self.base.suit == 'Spades') and (suit == 'Hearts' or suit == 'Spades') then
            return true
        end
        return issuitref(self, suit, bypass_debuff, flush_calc)
    end
end
frosty dock
#

you can't use : like that

#

that's only for calling and defining functions, not for creating vars to refer to a function

#

local issuitref = Card.is_suit

faint yacht
#

Well, works... but it really only accepts up to 3 suits for a Flush. What do I change for it to work with Smeared Joker for all suits then?

frosty dock
#

you'd have to check manually if it exists

faint yacht
#

If both exist in hand, just return true?

frosty dock
#

I think what I'm planning for smods should cover such a case too and not be completely broken with modded suits

#

but for now that should do

faint yacht
#

?

if next(SMODS.find_card('j_toga_testhearty')) and next(SMODS.find_card('j_smeared')) then
  return true
end
#

...perhaps I'll wait-

frosty dock
#

I guess you should check for no_suit still

ionic verge
#

how do i check for end of boss blind

faint yacht
#

Check for G.GAME.blind.boss too.

tall wharf
#

thank god 🙏

hardy viper
#

vro got the alphabet

tall wharf
#

😭 not now

faint yacht
tall wharf
#

switching back and forth between TS and Lua is confusing

candid gazelle
#

guys I want to do a mod but i don't know how to make some effects

median orchid
#

is there a guide to making mods?

#

i know you can go into that one file and edit stuff but is there a way to make it update without restarting everything

#

also maybe a guide to find stuff in that one file

rough furnace
median orchid
#

also what language is this

rough furnace
#

Lua

median orchid
#

what language is that similar to

hardy viper
#

english

rough furnace
#

Lua is a stupid simple language if you have previous programming experience you'll probably be fine

wintry solar
#

Oh Wilson, is there an easy way to change which center is used when watching a shader without doing it in code?

rough furnace
#

Actually I had a snipprt to apply it to the collection

hardy viper
#

why not just all cards

rough furnace
#

Cause it's setting a jank edition and the game doesn't like that

#

I'm pretty sure loading into a run with watch shader active causes a crash

#

At the very least generating the shop does

last sentinel
#

question, how do i get a joker to have a rental sticker in a Challenge? doesnt seem to just be "rental = true" like eternal is seems like @wintry swallow you were dealing with this a few weeks ago?

atomic edge
#

i tried the other guys suggestion and i cant seem to get it working

#

is there an easy way to change a cards atlas/texture during a game under conditions

#

or are there any mods that do that whose code i can check?

zenith ridge
faint yacht
#

Jimbo Update is too, but because "conditions" are mentioned, that may be a bit more involved.

faint yacht
# faint yacht

Still unsure about why the Flush still occurs with a Stone Card.

rough furnace
#

iirc theres a method on card to update it's sprite

#

I belive card.children.center:set_sprite_pos({x = 6, y = 4}) (but with your pos) should work

faint yacht
#

...though, on that note, what of the soul_pos being updated?

atomic edge
#

one more question

#

is there a way to deselect a card

#

i have a consumable which when used changes its texture

#

but i want it to also deselect

faint yacht
#

G.jokers:unhighlight_all(), but you'll need to pass the right area.

atomic edge
#

do i pass the area in the ()?

faint yacht
#

Before the :.

atomic edge
#

or no

#

thanks

faint yacht
#

G.jokers is an area in the example.

atomic edge
#

it works

#

you are the goat

#

thanks

viral stream
#

got a question with a joker,
if i want to make a joker to destroy a random held consumable at the end of shop (basically the opposite of perkeo) how would i do that? new to modding so would like the help

tidal snow
atomic edge
#

im trying to add a custom sound and it keeps looking at resources/sounds

#

when i specified the path as assets/sounds

#

and then crashes

#
    key = 'gulp',
    path = 'assets/sounds/gulp.ogg'
}
sturdy compass
#

Show the code where you're playing the sound

atomic edge
#
        play_sound('gulp')
        card:juice_up(0.3, 0.5)
        card.ability.isFull = false
        card.children.center:set_sprite_pos({x = 1, y = 0})
    end```
rough furnace
#

I belive the path should just be gulp.ogg

atomic edge
#

i tried that and it did the same thing

sturdy compass
#

add '[prefix]_' to the key in play_sound()

rough furnace
#

oh yeah that would effect it too

atomic edge
#

my mod prefix right?

sturdy compass
#

yes

atomic edge
#

thanks

sturdy compass
#

np

atomic edge
#

it did the same thing

#

should i also add the same thing to the key?

sturdy compass
sturdy compass
atomic edge
#

wait i didnt to the other thing

#

lemme check

#

my god

#

you were right

sturdy compass
#

Also sorry for ping lmao

atomic edge
#

thanks both of you

#

noo

#

thanks for the ping

sturdy compass
#

Not you

atomic edge
#

and quick answers

rough furnace
atomic edge
#

oh

rough furnace
#

oh did you mean that to Ja

viral stream
sturdy compass
tidal snow
rough furnace
sturdy compass
#

eugh I'm not on my main system and I keep forgetting to turn off pings DEAD

rough furnace
#

also if you have access to the definition of the sound you can save it in a variable then reference sound.key

viral stream
viral stream
tidal snow
viral stream
#

ok got it thanks

primal robin
#

Did lovely just change loading order again?

rough furnace
#

:mayhaps:

#

which build are you on?

primal robin
#

When needed i'm switching between versions to make sure my mod works on all of them

mystic river
#

0.7.0 did
0.7.1 undoes some of that (specifically the inconvenient parts) but i don't recall if it reverted all of it

rough furnace
#

don't use 0.7.0 it's ordering is busted

#

0.7.1 has a new ordering system which is designed to replicate 0.6.0's windows behaviour but may have tiny differences (but shouldn't change across platforms or future versions now)

primal robin
#

Even when i'm not using 0.7, some players can. That's why i'm trying make mod work on all of them

rough furnace
#

specifically on 0.7.0 regex patches run after all pattenr patches of any priority

#

it was unlisted as latest version when made and hot patched in like less than a day

#

people should not be using 0.7.0

primal robin
#

Well, now another question. Why lovely loads files which they shouldn't?

tight thistle
#

back again trying to fix the speech box issue, ive tried doing this but cant seem to make an event that blocks the main queue

rough furnace
#

by default an event will block the main queue

primal robin
# rough furnace wdym?

In my mod I have 3 lua files. 2 needs to execute from lovely, and 1 only when Steamodded is present

#

But for some unknown reason third one executed without Steamodded

rough furnace
#

show lovely config

tight thistle
rough furnace
tight thistle
#

how am i supposed to close the conditional? end made it repeat every frame and lock up the game

rough furnace
tight thistle
#

ok let me try a different question

#

should the conditional be in an event or not? maybe thats why i cant not close it

rough furnace
#

In the event

rough furnace
wooden nexus
rough furnace
#

Though the 0.9.8 one

primal robin
#

Hm...

rough furnace
#

I avoided being loaded by old steam-modded versions buy just using json metadata

primal robin
#

I preffer backwards compatibility

rough furnace
#

I mean DebugPlus works with its vanilla behaviour with old steamofded versions

#

Just not integrations

primal robin
#

I'm trying to add settings tabs when Steamodded is present, so I mage a script which runs only with it to setup it

#

So it was a problem with Steamodded 0.9.8...

#

I guess my mod now compatible with it too

rough furnace
#

0.9.8 doenst have mod config anyways

primal robin
#

I'm doing it manually, not a problem

#

Thanks

rough furnace
#

You might be able to tell 0.9.8 to not load your file

tight thistle
rough furnace
#

I'd probably do a seperate event for the condition and calling my code

tight thistle
#

what do you mean?

rough furnace
#

Like one event for blocking one for dispatching your other events

tight thistle
#

so make another event in the same line as this one that acts as the kickoff for the line of speech bubble events?

tepid crow
#

here's mine (currently used is 0.7.1)

#

though tbf I have dropped support for 0.5.0-beta6

tall wharf
#

i still dont know how to use the info queue

weary jungle
#

where are shop cards generated?

hardy viper
#

beta6 is so old

hardy viper
weary jungle
#

how do i check if a card is a consumable

primal robin
#

card.ability.consumeable

weary jungle
#

i hate tunk

tepid crow
rough furnace
#

Ah yes what a consistent system

tepid crow
#

I think it was someone who hadn't played modded in a while tbf

rough furnace
#

To be fair beta6 was the latest build for 3 months

tall wharf
#

LET'S GO

weary jungle
#

is this patch valid

#

its not doing

viral stream
#

how would i go about making an edition that doubles all joker values so +4 -> +8 mult?

weary jungle
#

oversaturated cryptid?

viral stream
#

oh yeah true that exists

#

that

sudden pine
#

apologies if this has been asked before, but does anyone know if it's possible to make texture mods for other mods? i.e. six suit. i wanna make it so my own custom card textures can match with added suits (assuming that's possible and it's just as easy as making a bog-standard texture mod)

frosty dock
#

yeah sounds easy enough with deck skins

violet void
#

aure one question, since my new card type isnt handled, it doesnt use the different text for when it's locked and it doesnt use the locked sprite either

Where would I need to edit to handle this? Here?

tepid crow
#

should be able to do something like what I did for my sleeves?

#
function CardSleeves.Sleeve:generate_ui(info_queue, card, desc_nodes, specific_vars, full_UI_table)
    if not self:is_unlocked() then
        local target = {
            type = 'descriptions',
            key = self.class_prefix .. "_locked",
            set = self.set,
            nodes = desc_nodes,
            vars = specific_vars or {}
        }
        if self.locked_loc_vars and type(self.locked_loc_vars) == 'function' then
            local res = self:locked_loc_vars(info_queue, card) or {}
            target.key = res.key or target.key
            target.vars = res.vars or target.vars
        end
        localize(target)
    else
        return SMODS.Center.generate_ui(self, info_queue, card, desc_nodes, specific_vars, full_UI_table)
    end
end
violet void
#

wow I had missed that, ty

tepid crow
#

possibly similar idea for the locked Sprite (see create_sleeve_sprite in CardSleeves' code), but I'm not sure you're in charge of actually creating the Sprite obj?

#

I mean you should be able to replace it whenever you create a Card 🤔

random sleet
viral stream
#

i can't figure it out through cryptid 🙃 how do i make an edition that multiplies the joker's value?

sudden pine
clever steppe
tight thistle
#

question,
how do i handle this? i cant close the conditional without breaking something but i cant leave the function without an end

sudden pine
limpid flint
#

Is it possible to overwrite jokers' rarity?

tight thistle
#

that is the entire event

wintry solar
#

then you're missing an end and three brackets

tight thistle
#

that makes this happen

wintry solar
#

yes because you have a print statement there

tight thistle
#

yes that was to see what it was doing

wintry solar
#

so whats the problem then?

tight thistle
#

its supposed to do this?

clever steppe
# sudden pine oh my god you made a 3rd one? pog

hahah i think i have made 2 now so far, the first one is going in my mod (i did recolor it slightly though)

miku for all is a standard miku i made cuz a have had a handful of people ask to use my OG one but it's going in my personal mod! so i made a free miku lol

frosty dock
tight thistle
#

i was told to do this as a solution to let the joker's text boxes play uninterrupted

#

they do not do so

random sleet
#

you're interrupting them now

wintry solar
#

well how are we supposed to help you when you only show one event?

tight thistle
#

if you need to see more events, kindly let me know and ill show you

wintry solar
#

I mean you havent asked anythig other than how do I close this event

tight thistle
#

so tell me that you need to see more events, and ill show you

#

one second

#

its a bit messy so apologies in advance

wintry solar
#

whya re they still nested

tight thistle
#

i thought unnesting them would cause the strange issue where all card: effect triggers are somehow moved to the last event in line

wintry solar
#

did you look at the code wilson sent you before?

tight thistle
#

what code?

#

the one for the christmas jimbo?

wintry solar
#

yes

tight thistle
#

i did, but thats not a card: effect

#

i dont know what DT_jimbo is

wintry solar
#

yes it was?

#

the speech bubbles are a function of the card object, it doesn't matter what you name the variable that is your card

tight thistle
#

i did not know that

#

so what should i do then? rename all the card:s in the events?

wintry solar
#

just copy iwlson's code, change the DT_jimbo to card and then update the localisation stuff

tight thistle
#

localization?

wintry solar
#

the messages

tight thistle
#

oh, the ones that are supposed to play in the speech bubbles

wooden badge
#

is looping through G.I.CARD the way to edit cards in the shop? if so, can't quite tailor the referencing after I've set up the for loop. How can i access all the card's information with the dot referencing? like I can get the keyname with v.config.center_key but I want all the other info like what set it is and what sticker it has or whatever

sudden pine
tight thistle
#

but thank you either way

#

im going to keep trying different things

last sentinel
#

Anyone have a good example of how to execute something like the "Rich Get Richer" challange restriction? Trying to go off of the code for Plasma deck but i want my restriction to execute after the final chips x mult calculation, not before (like the Rich Get Richer challenge)

tight thistle
wintry solar
#

is that what wilsons looked like?

tight thistle
#

not quite, but i figured when i sent you the code earlier and you asked why they were nested that itd be better if they were unnested

sturdy compass
#

Does anyone know where these value are stored/created?

wintry solar
#

I dont know why you arent just using the code that you were sent as an example that works

normal crest
#

that's usually where all the ui stuff is

tight thistle
#

hold on, i should get a video

#

give me a minute

#

(ignore the cardsauce)

wintry solar
#

then you're not blocking the main queue properly

tight thistle
#

how do i block it properly?

lethal mural
#

is there a way to get current hand size as a variable

tight thistle
foggy carbon
lethal mural
#

ok cus uh

foggy carbon
#

context.full_hand is every card being played, as a table. adding # in the front gets the size of that table

lethal mural
#

so could i multiply it theoretically

foggy carbon
#

oh, no, I don't think that would work

lethal mural
#

damn

wooden badge
#

how do i access jokers that appear in the shop so I can change their characteristics, accounting fro rerolling and everything

#

G.I.CARD is something I've seen pop up but I can't seem to access their sets or editions or whatever through that?

dusk shoal
#

make a variable equal hand size x 1.5

#

and then add hand size an amount equal to the variable

lethal mural
#

yeah i was thinking that

#

so what like local hsizemod = #context.full_hand * 1.5 or something

viral stream
#

how would i make it so an edition on a joker retriggers the joker?

foggy carbon
#

now I'm wondering what happens if you put a red seal on a joker

maiden phoenix
#

Check if context.full_hand exists first

foggy carbon
#

well, also, I misunderstood their question. I assumed they wanted to increase the size of playable hands. But they want to increase the size of the held hand

lethal mural
#

this did nothing

#

what did i mess up here

#

x-x

sonic cedar
sturdy compass
#

Weird random thing I noticed, why does SMODS do this to Observatory?

sonic cedar
#

can someone tell me why the text doesn’t show up?

tepid crow
sturdy compass
#

lmaooooo

tepid crow
#

update steamodded and it'll be gone

sturdy compass
#

silly oversight

sonic cedar
last sentinel
#

ia context.blind_amount a thing? or is there a different way to get the chip value of the current blind?

#

im just getting crashes when i try that

tight thistle
foggy carbon
#

withi the shop, is there a way to know what the last played hand was?

lethal mural
#

how do i reset hand size when the joker is sold/destroyed

lethal mural
torn onyx
#

so, im on the hunt for the most amount of twos in the erratic deck and i made a mod to display the seed and two count

and it uh... well it somewhat works, it just enables most ui elements in the process

sharp blade
#

oh that's

#

truly beautiful

torn onyx
#

yeah

foggy carbon
#

looking at the dark mode UI in-game it looks really nice

lethal mural
#

why wont the hand size go back downnn

torn onyx
#

nevermind im very stupid

restive bronze
#

how do I make a joker's text have 2 different variables

lethal mural
#

#1# and #2# and so on

lethal mural
#

also yes multiplying hand size is in fact possible
#context.full_hand was a dead end
i snooped around in a bunch of balatro's code until i realized that its literally G.hand.config_card_limit

sonic cedar
charred halo
#

does anyone have a framework for creating a mod just to add a joker?

#

was looking to create something similar to oop's all sixes

rough furnace
sonic cedar
#

oh my god i’m actually just stupid tf is “context.joker.main” and “loc_text” 😭

hardy viper
#

attempt to index field "joker" (a nil value)

#

also it's loc_txt not loc_text

#

oh wait

#

that's what u were saying

#

god im slow

faint yacht
#

Where is the variable soul_pos modifiable under card.children?

sonic cedar
#

it’s ok thank you!!

modern kindle
#

hey fellas, in looking for the chips a player has scored during a blind where do i access that?

faint yacht
#

Tallied up or currently scored?

modern kindle
#

currently scored

#

as in the grand total across the blind

faint yacht
#

G.GAME.chips

modern kindle
#

oh duh, thanks

atomic edge
#

how do i check which card is the leftmost card?

#

because when i go G.hand.highlighted[1] it takes the card that i selected first and i want it to selec the leftmost one

faint yacht
#

G.hand.cards[1]

restive bronze
#

how could I get a consumeable's name from the key

atomic edge
#

wont that just take the first card of the hand regardless of wether its selected or not

#

maybe i phrased my question wrong

#

i want it to take the leftmost highlighted card

#

but

#

if i do G.hand.highlighted[1] it just takes the one i clicked first not the one that is leftmost

faint yacht
#

Intentional, I feel like. You'll probably have to iterate over the whole hand to find the "first" one.

#

Alternatively, however "Death" does it in code.

atomic edge
#

yea where can i find it

#

in which file are the tarots coded

#

coz i cant for the life of me find it

faint yacht
#

card.lua, line 1111.

restive bronze
torn onyx
#

also heres something thats probably going to piss people off

#

in globals.lua where the colors are defined, the hex codes use both upper case and lowercase

#

sometimes even in the same color

crisp coral
#

just a thunk moment

faint yacht
#

when the SMODS.has_no_rank(self) makes no difference-

atomic edge
#

what does the first joker do?

faint yacht
#

The intended effect is that Hearts and Spades count as same suit. With Smeared Joker, though, this is intended to make the base 4 suits count as all at once.

atomic edge
#

ohh nice

#

is the art ai generated?

faint yacht
#

AI is not involved in this. This is merely using the Hearts and Internet Spades icons from XP.

atomic edge
#

oh

#

was looking for a good pixel art generator coz im trash at drawing

hardy viper
#

do not

atomic edge
#

why?

hardy viper
#

because it's a very common moral boundary that you shouldn't use ai art (certainly not in public projects and oftentimes never at all) and a good portion of people here will denounce your mod because of it

gaunt thistle
#

yeah it's an easy way to speedrun people not wanting to use your stuff

hardy viper
#

it's also not allowed

#

according to the rules listed in #🎨・fan-art AI art in mods isn't allowed unless it's as a placeholder or as a joke

#

so you can make a mod with AI art you just can't post it here and nobody is gonna use it

faint yacht
#

I can see AI helping out in visualizing a concept, but not used in the final product.

atomic edge
#

oh didnt know it was taboo

gaunt thistle
#

yeah it's extremely taboo in spaces with legitimate creators

atomic edge
#

but why is it so hated? because it is too easy or what?

#

8

gaunt thistle
#

anyhow you're probably not as bad at drawing as you think. practice, it'll be a good skill to pick up :-)

#

for one it's because the creation of generative AI models involves stealing lots of art

random sleet
#

ai art is fundamentally based on the theft of millions of works

hardy viper
gaunt thistle
random sleet
#

the only downvoted thread

#

and theres a guy begging for money in a different one

#

to put that in perspective

hardy viper
atomic edge
#

hahhahaha

hardy viper
#

unless you're talking about skylines stuff

gaunt thistle
#

yeah I haven't seen that one either

faint yacht
#

I'm not an artist, but I've edited stuff together in "original" (at least I think, lol) ways for it to be unique.

hardy viper
#

because skyline actually needs that money to pay for the apple dev certificate to launch bmm

atomic edge
#

i thought ai just takes art/stuff that is published publicly and makes its on by using that

gaunt thistle
#

the dev cert isn't cheap for a passion project like bmm

random sleet
#

i dont care im not losing another penny to someone's stupid scheme

hardy viper
#

$99 a year to sign an application is crazy

atomic edge
#

but if i just google pixel art cars and take 5 of them and draw my own pixel art based on the 5 examples isnt that the same thing?

gaunt thistle
#

at the same time though certs are EXPENSIVE in general

rough furnace
#

I do think they have legit goals but I don't like giving money to something thats just a promise and I have no way to guarntee it will actually come back

hardy viper
#

donating to open source creators in need = falling for a "scheme"

crisp coral
#

i don't get why they don't launch it on windows first

hardy viper
#

he literally posted the receipts too 😭

hardy viper
#

main development is being done there

rough furnace
#

I mean you can launch mac apps without certs you just need to through a stupid process to go into settings and allow it

gaunt thistle
#

this is why everything should be a web app

hardy viper
#

if it works good then it gets ported to windows/linux, we as mod developers populate the index, then we publicly launch it and advertise it on smods/here

#

so is everything in a museum, go and take the paintings off the walls and see how they like it

gaunt thistle
#

comes down to other people making money off of your work

#

it's icky and unfair

hardy viper
#

again, google some articles

#

i can't articulate this stuff as well as some other people

#

we aren't arguing about ai here

gaunt thistle
#

yeah we're arguing about why lovely should be a web app

hardy viper
#

if you want to educate yourself on either side of the argument do it in your own time

hardy viper
#

jimbos got the junior cart

#

is the cart small or is jimbo big

gaunt thistle
#

jimbo got that big thang

random sleet
#

ali 🫵

crisp coral
#

its just perspective

hardy viper
#

there's normal sized human jimbo in the mobile trailer

gaunt thistle
#

ali 🫵

#

make more jimbocart

crisp coral
#

ali 🫵

hardy viper
#

i

#

don't get it

gaunt thistle
#

cg 🫵

random sleet
#

hee hee

gaunt thistle
#

doesn't get it

random sleet
#

hoo hoo

crisp coral
#

me neither i like pointing at people

hardy viper
#

king point king point what are u doing king point

faint yacht
crisp coral
#

imagine playing throne of lies

hardy viper
#

ck?

#

ck chat

gaunt thistle
#

tempt me 🫵

crisp coral
#
  • tos1 player
hardy viper
#

tol was peak

#

is peak?

random sleet
hardy viper
#

it's dead as fuck

#

i remember when the game had more than 30 players

#

good times

gaunt thistle
rough furnace
crisp coral
#

tos on top

random sleet
#

no i have to work actually

gaunt thistle
gaunt thistle
rough furnace
#

oh

gaunt thistle
#

jk jk enjoy your work

random sleet
#

i mean ill probably still chat LMAO

rough furnace
#

I mean I have other stuff to do I was just trying to tempt you

hardy viper
gaunt thistle
#

it's a simple fix

hardy viper
#

it had stuff you could not do in a large game like tos

#

and i loved that

crisp coral
#

too bad it's dead xp

gaunt thistle
#

tears of se kingdom?

random sleet
#

terms of serveice

hardy viper
#

damn!!!!!!!

crisp coral
#

damn!!!!!!!!!!!!!

gaunt thistle
#

do you ever feel like we're quarantined in here by the mods

random sleet
#

do you ever feel like the mods dont look here

rough furnace
#

maybe the mods are quarinteened in here by us?

crisp coral
#

this is like the most freedom we have wdym

rough furnace
random sleet
#

we are the ones who are truly free

faint yacht
#

...wait, I barely changed anything and now this no longer registers as a Flush anymore, lmao.

rough furnace
#

I like neevr spend any time outside the modding and #🎨・fan-art channels

random sleet
#

they're all locked out therre

crisp coral
#

Break the birdcage... and be free.

gaunt thistle
#

I don't think I've ever even looked at any of the non modding channels

#

I'm a man of focus

random sleet
#

i love arbitrary references

hardy viper
#

i look at the other channels sometimes

faint yacht
#

Nevermind.

hardy viper
#

there's more celeste players in game discussions than here so

crisp coral
#

fan-art has peak sometimes

#

(bpbs yuri)

rough furnace
random sleet
#

imagine a world where bdbs yuri is downloadable

hardy viper
#

imagine if jimbo got a low taper fade

#

is there fanart of that

crisp coral
#

imagine if hee hee hoo hoo

crisp coral
#

DAMN!!!!!!!!!!!!!!

small moon
#

What exactly is joker_buffer used for? I see it getting set a lot but I have no idea what its purpose is because it seems to be set to 0 every time immediately after

crisp coral
rough furnace
#

iirc it's used for knife and madness so other jokers know they can create

crisp coral
#

eg dagger and riffraff

hardy viper
crisp coral
#

ugly 15x15 child

gaunt thistle
#

smo smol

limpid flint
#

51121511121

lethal mural
#

i cant get xchip from talisman to work

#

i thought it was Xchip_mod

faint yacht
#

x_chips or xchips?

lethal mural
#

nope

faint yacht
#

Then something may be afoot.

lethal mural
faint yacht
#

In that case... assuming you're on latest versions of Talisman and SMODS...

x_chips = card.ability.extra.Xchip,
xchip_message = {message = localize{ type = "variable", key = "a_xchips", vars = { card.ability.extra.Xchip } }, colour = G.C.CHIPS, sound = "talisman_xchip"}
lethal mural
#

couldve sworn i tried x_chips and it didnt do anything either

#

ill try again

#

still nothing

faint yacht
#

Well, what versions of SMODS and Talisman are you using?

lethal mural
#

1325b for smods and latest for talisman

faint yacht
#

Latest release of Talisman or latest commit of 2.1.0-dev?

lethal mural
#

release

#

this does nothing idk why

faint yacht
#

Then try latest commits instead.

main jacinth
#

Hey y'all, quick question: How would you change the card color from white to black, I'm looking to mod in a deck texture that was designed to be white on black, and I know how to change the art, but is there a simple way of changing the card base color?

lethal mural
#

still nada

#

gonna try something

#

OK that fixed it

#

i had to move this outside of extra

#

flame fake out is funny

faint yacht
#

¯_(ツ)_/¯

lethal mural
#

it does say error though

#

i can fix it

gaunt thistle
#

loving that art

signal notch
#

I love to see people in the community coming up with unique balanced (ish) ideas rather than stuff that ends up breaking the game

lethal mural
#

the card in dungeons and degenerate gamblers that its based on halves all card values (queen of wonderland)
obviously it just being 0.5x chips would be a really shitty card, and 2x hand size would be like literally legendary material so i went with 1.5x

charred halo
#

did i brick something really bad here or is it something else thats causing my joker to not work

gaunt thistle
#

what is it doing vs what do you expect it to do?

charred halo
#

Nothing vs i expect it to cut all probabilties BY 10

#

like opposite of oops all 6's

heady quail
#

Hello actual mod devs. I'm pretty new to this scene, but I had a question I haven't been able to solve. Im trying to reskin the basic card suits and rename the relevant cards, and editing the textures and localization has been fine. But I cant seem to find where in the files the colors for the suit text is. I found the HEX codes in globals.lua, but changing those doesnt seem to change anything? Am I looking in the wrong place?

heady quail
#

Yup lol

normal crest
small moon
#

Does anyone know why card == self isn't working here:

calculate = function(self, card, context)
    if not context.game_over and not context.blueprint and not context.repetition and context.end_of_round then
        local cards_to_destroy = {}
        for i = 1, #G.jokers.cards do
            local curr_card = G.jokers.cards[i]
            if curr_card.ability.eternal or curr_card == self then
                cards_to_destroy[#cards_to_destroy+1] = curr_card
            end
        end
        for _, card in pairs(cards_to_destroy) do
            destroy(card, "82FF92", nil)
        end
    end
end

It's detecting everything but itself

normal crest
#

don't compare to self

heady quail
normal crest
#

use card instead

small moon
#

Oh my god I'm so dumb LOL
Thank you

normal crest
heady quail
#

Well as far as I can tell, there is no G.C.SUITS in globals.lua

#

Like theres these, but no changes were affected

native cargo
#

Should I look into the github repo for lovely to figure out how it works, or should I just download a bunch of mods that utilize it and see their use cases and figure it out that way? I'm attempting to mod in another type of "currency" we can call it and I figure that it's probably going to need to utilize lovely's patching in one or another to do so.

cedar stream
#

so i have a question, how much of a no no is using copying code and sprites and using it in your own mod without permision considered on a scale from 1 to 10

native cargo
#

Probably a good 9.5 without permission

#

Check if they have any type of Open Source license though and follow with that. Definitely should get permission if you're going to copy other peoples assets or code though.

normal crest
heady quail
#

Hmm, I tried that before, but I shall try again

#

Ty for the help!

rough furnace
#

for my mods follow the license

#

if its like a really short snippet I can give permission to use it without the license

cedar stream
#

but i mean say it was like 5 or more consumables, same exact code and art

normal crest
#

for any mod follow the license, if it has no license you should ask the owner for permission

cedar stream
#

thanks

heady quail
#

Ok, so if I change the hex codes here, it should change the suit colors correct? Because I changed them to match the new suits and im still on normal colors. Should I be doing something in functions/misc_functions.lua as well? Becuase I dont see any editable values in there

small moon
#

New question: Does anyone have any idea why this is triggering on all the held in hand cards as well as the joker, and duplicating and erroring for each (as seen in clip)

calculate = function(self, card, context)
    if not context.game_over and context.end_of_round then
        local reward = 0
        if pseudorandom('boingular_roulette') < 1 / (G.GAME.probabilities.normal * card.ability.extra.odds) then
            reward = -G.GAME.dollars
        else
            reward = card.ability.extra.reward
        end
        
        card:juice_up(0.3, 0.4)
        return {
            message = localize { type = "variable", key = "p_dollars", vars = { reward }},
            dollars = reward
        }
    end
end
#

I only want it to trigger once as the joker on round end

heady quail
#

By editing the values in the hex code

#

Heres the original codes

#

Heres my edited ones

normal crest
#

SO_2 is high contrast so make sure you have that enabled

heady quail
#

All in globals.lua

heady quail
normal crest
#

So I assume you're just modifying the game files directly? No lovely?

heady quail
#

Yes? I mean I just thought lovely was part of the mod loader, I didnt know it was a mod editor

#

I do have it set up as an actual mod, not just base game file editing

#

As in I do have smods and lovely set up for this

normal crest
#

And could you describe the process you're using to edit the game files

heady quail
#

Sure

#

So I have an actual mod setup in me roaming folder that all these changes have been saved in

normal crest
#

Oop right there it's the issue

heady quail
#

?

#

I thought since I've been able to change the sprites for the cards themselves, changing everything was pretty much on the table

#

Is it just not?

normal crest
#

Can you send your globals.lua file

heady quail
normal crest
#

and DestinyTexturePack.lua

heady quail
#

That I mostly just copied over from a texture-pack mod template I found

normal crest
#

Okay so, the entry file to your mod is DestinyTexturePack.lua

#

that means that the code in that file is run

#

No other files are loaded, and since you're not loading your globals.lua file from your entry file, globals.lua is not doing anything

#

Another thing, you shouldn't override everything the way you did

heady quail
#

I mean, I never edited any of the actual original game's files

#

Honestly, all I did for the entry lua was change the mod name and ID, the rest of that isnt my code

normal crest
#

Ah I see

heady quail
#

But if theres a better way to do so, I am very willing to change it

normal crest
#

Your entry file is marked as an entry because it has the steamodded header at the top, considering your sprites are changing that file is fine

#

The way to modify game code is using lovely patches, but I believe they are not necessary here

heady quail
#

Interesting, I never heard of those while I was researching

normal crest
# heady quail

within this function you should be able to modify the colors table directly, for example, by doing

G.C.SO_2 = {
   -- blah blah
}
heady quail
#

So just putting the G.C.SO_2 with the updated HEX codes right into the starter lua?

normal crest
#

yes, I believe that will work

#

are you familiar with lua, or is this your first time modding anything

heady quail
#

Fist time modding anything

#

Im familiar with bash and languages like that, but Ive never messed with game code before

normal crest
#

within the entry file in your mod you can run any kind of code you want, the entire file will be ran once balatro loads

#

generally you use this to interact with the steamodded API (which you do here by using SMODS)

heady quail
#

So the ONLY code changes whatsoever should be in the entry file?

normal crest
#

unless you manually load another file from within your entry, yes

heady quail
#

Interesting

normal crest
#

the entry is denoted by the steamodded header in your case

#

and you should not have multiple files with the header

heady quail
#

Changing that is going to take a lot more research then lol, since all my name changes were through changing the localization file

normal crest
tepid crow
# heady quail

this is also using a really old version of steamodded btw, this code might not even work right now

heady quail
#

Yeah I dont doubt that lol

#

I could find very little in terms of info on how to get started, so I kinda just grasped at whatever straws I could find

normal crest
tepid crow
#

yeah makes sense

heady quail
#

Especially considering my complete lack of lua coding knowledge

#

Wait

normal crest
#

if you're familiar with other languages you should be fine

heady quail
#

Thats what I used

#

Thats out of date?

normal crest
#

it's not

heady quail
#

Then I dont know how mines out of date then

normal crest
#

what version of steamodded shows on the top right while ingame

heady quail
tepid crow
normal crest
#

you're not outdated then

#

that's the latest version

heady quail
#

Plus maybe dabbling in some custom new cards once thats all figured out

#

Trying to learn new things I guess

tepid crow
#

alright give me 1 sec, I'll try and see if I can find you some example mods

normal crest
#

yeah the steamodded org has a repository with examples in github

heady quail
#

I tried looking through a six-suits mod I found as an example for changing the suits, but I had no Idea how to use that to change the existing suits

#

The reskins themselves have been fine for the most part

#

Renaming, respriting, Ive had no plroblems there

#

The text colors have been my only hangup as far as texture pack-ing goes

#

Im sure once I move on from that step and try (and if Im being honest probably fail) to learn now to create new jokers and such, ill need a lot more work on that stage

normal crest
#

DeckSkinTemplate is a template for adding skins to cards I believe

heady quail
#

I mean I can see how that would help in changing the sprite itself (if Im interpeting this correctly), but I dont really see how that helps with the text

normal crest
#

Yeah that's for changing sprites, which you should use instead of what you currently have

#

As for changing the colors you really should just be able to override them by adding the code I sent earlier within you entry file somewhere

heady quail
#

Ill admit, I dont really get the part about changing only specific suits, but doing it all within one image file?

#

Also yead I did that, I must have done it wrong though because it didnt make any changes

#

I did find the NegateTexturePack example, and that at least makes a bit more sense

tepid crow
# heady quail Playing Cards, Jokers, pretty much everything when I plan on being done

New playing card texture mods:

New joker texture mod (uses https://discord.com/channels/1116389027176787968/1300851004186820690 which I definitely recommend):

heady quail
#

I'll have to learn and figure out what all these keys are, but I'll try

heady quail
normal crest
heady quail
#

Oh ok wow, I had done that earlier but it actually changed this time

#

Thank you so much!

#

Sorry for making you essentially do all my work for me lol. I'll be honest I really have no idea whatsoever im doing

#

Though weirdly, it looks like I need to turn off and on high-contrast every time the game loads?

#

Welp, guess I'll have to start from scratch in this entry-lua-only way lol

normal crest
heady quail
#

Hm

normal crest
#

A better way would probably be hooking into the game function responsible for refreshing the sprites, but I assume you're unfamiliar with that concept too

heady quail
#

Yeah lol

#

Pretty much anything to do with modding or lua code whatsoever, just assume I know nothing

normal crest
#

here is a good example of what it implies

heady quail
#

Ok, Im starting to realize Im going to need, like, a 6-month cource on the code languange before I even START to think about touching this pack, I am extremely overwhelmed lol

normal crest
#

but yeah, if you do not know anything about lua you might want to get yourself familiarized with it, you need at least to understand the basics, considering you know bash you'll probably learn quickly

heady quail
#

I mean idk, my bash knowledge is not really helping me at all here

#

And its like, Im ok at rudementary bash

#

But thats about it

normal crest
#

Most languages have these concepts, variables, assignments, if statements, functions, loops

#

I am not personally very familiar with bash but I assume it has all of those as well

heady quail
#

I mean yeah, but I've barely even steppin into that realm myself after like, over a year of learning

#

Ive made, like, a single script and its EXTREMELY basic

normal crest
#

well don't let yourself get overwhelmed! it's not as hard as it might seem at the start, and there are many people here willing to help

heady quail
#

Most of my training was in basic file manipulation, directory traversal, stuff like that

#

Very little scripting

#

And thats AFTER an actual 6 months of professional training

#

Honestly, this is just kinda stressing me out lol. Im suppsoed to be trying to get better at stuff like this, since atm Im trying to get into a cybersecurity field. But idk, ive stagnated after getting my first cert and ive lost so much of what I knew, and Im not sure im able to learn a whole new language while trying to relearn my old one

#

I'll be honest, I from what I though I had seen, I had kinda ssumed it'd all be relatively simple lol

native cargo
#

Have you tried the book online?

heady quail
#

Sorry, not trying to vent

#

Not at all no, I've never even seen lua code before yesterday when I started all this

native cargo
#

I understand your frustration, it took me 3 days to get a new consumable slot showing up in game. I've been trying to learn off using other peoples source code and using the smods and the balatro source code itself to figure things out.

#

The book is good way to help familarize yourself with Lua stuff without going through a step by step tutorial

heady quail
#

I mean its not really frustration, its just stress about my own inadecuacies with coding in general, and I'll be honest, if this project is going to require learning a whole new coding language, I don't really know if I can justify that to myself. Im already EXTREMELY behind just keeping up with my current basic knowledge, and I got certified 6 months ago. Atm I need to focus on trying to get maybe more certs, because my attempts to get into the field have been entirely unsuccessful (And to be entirely honest, I probably havent been trying 50% as hard as I should).

Again, sorry for venting, I didnt mean to get into a whole tirade about this. If im being honest to myself, I probably should just give up on the project as a whole if this is what its going to require

silk dock
#

how would i start making a super simple balatro mod? any place i could read up on some basics? (i want to add exactly 1 feature, a 1,000,000 of Stars from a dream i had many years ago)

native cargo
#

Programming is all about failing forward. You're going to run into numerous problems until it finally works, you just need to make sure you learn from each mistake, that way you can grow.

native cargo
random sleet
#

you're always going to try at least 5 things that dont work on any project

random sleet
#

dont feel bad i did like 7 earlier

heady quail
#

Well yeah I get that, but idk. I guess it feels like this much of a step is a lot more than I should really do. If im going to put forth this much effort into coding, I should probably direct that at something that will finally let me get into a career.

I cant really justify to myself learning all of lua just for a silly little resprite

native cargo
#

Lua is extremely useful in every day fields. Think of it like this. You're learning lua to code a mod for a game, that maybe somewhere in the future you can use that skill to write some type of automation script or whatever for a Cybersecurity task. Python isn't the only scripting language out there.

heady quail
#

I mean I dont even know python lol

native cargo
#

Java is my main language, but I try to do anything to screw around in lua as much as I can because it's such a simple language that it deserves to be screwed around with.

random sleet
#

idk man just fiddle with shit lmao tamariPlush hee hee hoo hoo

native cargo
#

It took me 5 or 6 years of screwing around til I figured Balatro would be a good enough reason to finally give it a real decent attempt at trying to do something with it.

faint yacht
#

I personally started with a bastardized version of Lua. 🍞

heady quail
#

Oh no I get that, Im sure if I put my mind to it I could figure it out

native cargo
#

ComputerCraft is what got me to try it out.

heady quail
#

I just mean that I probably shouldnt

random sleet
#

i just mean hee hee hoo hoo

native cargo
#

Maybe put it aside for a little while, and come back to it later and see if you want to try again.

heady quail
#

Yeah, thats probably what its going to have to be. I honestly hate the way my brain operates. I have things that would make an actual practical impact on my life, since I dropped out of college due to covid and I've had so much help from others around me to try and figure things out. But as SOON as anything slightly distraction related turns its head, I completely lose interest in what I should be doing to gravitate there. I took a course in cybersecurity that ended a year ago, and I still ahvent even gotten CLOSE to getting into even any kind of entry level.

#

Wait shit, trauma dumping, sorry again. I'll just head out. You guys arent my personal therapists, yall didnt sign up for this lol

#

Thanks for the help with the stuff to this point at least 🙂

small moon
sturdy compass
#

Hey, anybody know how I could change config values on a card type? For example, I made some new extra values for Ankh and Hex, and I want this voucher to reduce it on redemption. Here's what I have right now, it doesn't crash but it doesn't work either lol

#

I'm not even sure of how possible it is but I thought it'd be worth a shake. I have a contingency plan in case it isn't

faint yacht
lucid owl
#

how would one have a joker debuff itself?

faint yacht
#

SMODS.debuff_card(card, debuff, source)

small moon
sharp blade
#

what the hell is that

#

that's horrendously cursed

normal crest
sturdy compass
#

Ah I see

#

Contingency it is then

native cargo
faint yacht
sturdy compass
#

I have discovered a life changing vsc extension holy hell

native cargo
#

Wait the region thing is an extension? I thought it was built in.

normal crest
#

it's built in