#đŸ’»ăƒ»modding-dev

1 messages · Page 233 of 1

latent portal
#

...as long as you don't return an area

#

also shoot

zealous glen
#

sometimes people see something SMODS did and people think thunk did it

#

*looks at Negative playing cards*

tall apex
#

or.,., the planets one

#

i think thats what its called

latent portal
#

i'm not sure actually

#

let me check

#

yeah it's just "Celestial"

#

make sure to put it in quotation marks so it counts as a string

tall apex
#

i'm making a nonconspicuous pack with nothing in it that just makes a shitty skeleton run gif past the screen and give you an acheavement that says "WHAT THE FUCK?? DID YOU SEE THAT??"

frosty dock
#

so much for hooking

local scie = SMODS.calculate_individual_effect -- save a reference to the original function
function SMODS.calculate_individual_effect(effect, scored_card, key, amount, from_edition)
  if key == 'my_key' and amount then
    -- do something. refer to the original function for what to do here
    return true -- the effect was calculated, so we return early
  end
  return scie(effect, scored_card, key, amount, from_edition) -- run the base function as normal
end
#

you'll also need to insert any keys you add into SMODS.calculation_keys

#

probably easiest to do by patching as to get an order that makes sense

#

you'd be looking to target some line within this

ivory coral
#

uhhh okay ive never done lovely patching before really so let me make sure im getting this right
the pattern is the original code im searching for and payload is the new code, position = after puts the new code right after the old code

tardy wind
#

its not going to patch the "old" code tho

#

unless you do position="at"

ivory coral
#

im thinking i just add a new if key == 'something' thing inside of SMODS.calculate_individual_effect

frosty dock
#

you can lovely patch that as well, but it doesn't have patch target comments

#

so it may break in the future if something changes in smods. that part is perfectly reasonable to do with a hook, so that's the safer bet

ivory coral
#

im not sure what that means?
what am i trying to patch here

glacial bloom
#

Just wanted to say that this is cool as hell

frosty dock
#

SMODS.calculate_individual_effect is fine to do with hooks

frosty dock
ivory coral
frosty dock
#

you need both

#

you need to add a key to SMODS.calculation_keys, and you need to hook SMODS.calculate_individual_effect

#

or patch it, but like i said that's too fragile

sullen fern
#

time to create suit jokers.

ivory coral
#

whats the difference and how do i hook instead of patch

frosty dock
#

a hook basically just inserts code before or after a function as well as its parameters and return values

#

patches add or change code anywhere

ivory coral
frosty dock
#

hooks are just lua code

#

they go in lua files

ivory coral
#

alright
so i add that hook in my mod's code and then make a patch to add the key

frosty dock
#

yep

sullen fern
#

so suit should just equal a suit i made

unkempt thicket
#

How can I make custom consumables appear in shop, like how spectral cards do when a certain trigger is true?

ivory coral
# frosty dock yep

does this look about right for the key patch? im pretty sure this would put 'my_key' right after SMODS.calculation_keys = { which is what i want

[[patches.pattern]]
target = "src/utils.lua"
match_indent = true
pattern = '''
SMODS.calculation_keys = {
'''
position = "after"
payload = '''
    'my_key',
'''```
frosty dock
ivory coral
frosty dock
sullen fern
frosty dock
#

e.g. if my joker applies xmult and flat mult, the flat mult happens first because it's earlier in the table

#

depending on the effects, that does or doesn't make a difference

ivory coral
frosty dock
#

yeah it's just visuals then

sullen fern
frosty dock
#

mine just grabs it directly from the saved definition of the suit

sullen fern
ivory coral
frosty dock
#

you can name it anything you want

ivory coral
frosty dock
#

acronyms of function names are common practice, but it can be anything really

#

ideally you shouldn't reuse variable names in the same scope, that's all

turbid maple
#

I like to copy the name verbatim and add an underscore at the front

hardy viper
#

surely thats not against luas convention of using underscore prefixed variables for system/internal variables

frosty dock
#

there isn't really a convention for that lmao

hardy viper
frosty dock
#

_ in locals often just means it's unused

turbid maple
#

if it breaks it breaks

ivory coral
#

hang on im looking at it now and now im not sure ive got the right thing
what does SMODS.calculate_individual_effect actually do like what is it

ivory coral
#

yeah i saw that but what does that mean
because at first here i was trying to just make a custom key parameter for localize but now i think ive done something else

sullen fern
#

I LOVE USING A LOCALIZATION LUA!!!!!!

ivory coral
#

also of course make sure your loc_txt is setup right

glad osprey
sullen fern
#

there we go

#

the suit name isn't colored but idrc

ivory coral
sullen fern
#

there's also these jokers tied to mechanics i have yet to impliment

#

the suit rarity system (the main 5 puyo colors + nuisance puyo are common, the other 3 are rare)

#

and two custom hands (puyo chain and puyo rainbow)

tall apex
#

im trying to make a boosterpack with nothing in it i dont understand what im missing :c

#

it loads the game fine but it tries to index a nil value when i try to discover it

formal parrot
#

Why the fuck do you want to make an empty boosterpack

crimson marlin
#

does anyone know how to make cycles in UI? this is all i have 💀
SMODS.current_mod.config_tab = function()
return {n = G.UIT.ROOT, config = {
r = 0.2, minw = 12, minh = 9, align = "tm", padding = 0.1, colour = G.C.BLACK
}, nodes = {
{n = G.UIT.C, config = {minw=6, minh=9, colour = G.C.MONEY, padding = 0.15, r = 0.1}, nodes = {
-- how tf do you add cycles :(

    }}

}}

end

formal parrot
formal parrot
#

Blank

tall apex
#

i made the limit 0 but idk what the other thing is

formal parrot
#

I think it’s how many you can choose out of how many idk man i’m dumb asf

#

I never codded a boosterpack

tall apex
#

i think its something else

formal parrot
#

Scam boosterpack

#

You can still skip it tho

unkempt thicket
#

How do you set the edition of a card to base/none?

#

nvm

formal parrot
#

Damn got it already?

gleaming zealot
tall apex
formal parrot
#

Then it does nothing that was

#

Way*

tall apex
#

thats not

#

the issue im having

formal parrot
#

Are you trying to scam ? Or what

#

Whats the idea you’re going for man 😭

tall apex
gleaming zealot
formal parrot
#

Good luck man

formal parrot
tall apex
gleaming zealot
formal parrot
formal parrot
#

!!!!!!!

gleaming zealot
formal parrot
#

Favorite track btw

tall apex
gleaming zealot
#

Foolish.

formal parrot
tall apex
#

-# dude my pronouns are they/she it's not that hard-

gleaming zealot
#

:3

formal parrot
#

Into fire is one of my fav

formal parrot
gleaming zealot
#

without sounding like a discord mod

formal parrot
#

My lady is cute right?

gleaming zealot
formal parrot
#

I DON’T WANNA OFFEND THEM

#

what if they thinks i’m a creep

#

Bro

gleaming zealot
formal parrot
#

I’m gonna

#

Alr anyways

#

Ultrakill

formal parrot
gleaming zealot
formal parrot
#

And p ranked p-2

gleaming zealot
formal parrot
#

Thats like virgin with extra step

formal parrot
#

Literally me

#

NEW UPDATE DROPPED

#

EXAMS

tall apex
formal parrot
#

CAN’T P RANK NEW LEVELS

#

I’M WASHED

gleaming zealot
formal parrot
tall apex
formal parrot
#

No shot

tall apex
formal parrot
#

It’s not

#

Calculator said no

unkempt thicket
#

How do you call SMODS.current_mod.set_debuff(card)?

tall apex
formal parrot
#

HOWWWWWW

tall apex
#

nmumbers

formal parrot
#

You see that

gleaming zealot
formal parrot
formal parrot
#

Am i a genius? Is english fake ?

#

ARE WE REAL CHAT ?

#

I hope teto ‘s real

formal parrot
#

MY EYES

#

ARE BURNING

#

AHHHHHH

tall apex
#

wimter

chrome widget
#

I'm struggling with the most effective way to translate sprites relative to a parent. The built in offsets in the draw_shader function are kind of... bizarre? And seemingly don't account for local rotation. The only time this is used in the base game is for the soul layers, all of which are exactly the same dimensions and have the same pivot point (in the direct center of the card)

tall apex
#

pivyot..,

#

i have no idea how to help unfortunately :c

chrome widget
#

So for example if you use the horizontal or vertical offsets, and an object like a sticker is moved from the origin, it's still going to rotate according to the top left of the card, even though the rotation should technically be inverted when something is across the horizontal or vertical axis

tall apex
#

hm

chrome widget
#

(problem I'm trying to solve is how to successfully move a sticker without changing the assets used, for the sake of vanilla compatibility)

#

Also yes hello! đŸ«”

tall apex
#

oh um im having a problem that you can problibly help with bcos your are smart

#

i zoned out

chrome widget
#

Yes? Maybe I can help?

tall apex
#

im making a booster pack, and the game opens okay, but when i go to discover it i get a crash with attempt to index a nil value

#

and i donut understnad

#

here is my bad code, im just trying anything to get it to work x-x

chrome widget
#

You should also show the crash log!!

tall apex
#

i thought maybe it HAS to have particles or somethin so i stealed some for later changeses

#

crasj lawg

chrome widget
#

I can armchair diagnose based on the line number

#

Okay so off the top of my head, card should never be nil when calling loc vars

#

So you don't need to nil check for it

tall apex
#

okie c:

hard flume
#

I have so many ideas, so little time

tall apex
#

do i need a create cardd argument at all? im trying to create an empty booster pack

#

same crash TwT

chrome widget
#

Okay, so my second idea:

#

It's probably because of how loc_txt is formatted

#

For most objects, you're required to have a name property and a text property

tall apex
#

ohhh

chrome widget
#

So my guess (without being at my computer) is that you need to wrap the text in a table, call it text, and add name = 'Something'

tall apex
#

yeah the loc text scared me i dont understand it

#

what are tables? that's ssomething i shouldd know

chrome widget
#

A table is the core data structure in Lua. Anytime you create something in braces {}, you're making a table

tall apex
#

OHHHHHHHHHHHHH

#

that makes a LOT of sense.

#

ty for helping me learn c:

chrome widget
#

So your loc_txt should be

    name = 'Skeletal Pack',
    text = {
        'amogus',
        'sussy'
    }
}```
tall apex
#

the name should actually be Celestial pack and the text is just filler c:

#

but that helps a lot!!

hard flume
#

Isn't there already a Celestial Pack?

tall apex
#

the whole point is im making a booster pack with no cards that just gives you an achievement and makes a shitty 3d skeleton run across the screen

tall apex
#

they'll never see it coming

hard flume
#

Oh that's silly silly

tall apex
hard flume
#

Silly :3 silly even

tall apex
#

me when someone says my mod isn't helpful, useful, or is wildly unbalanced

#

if you would consult the blahaj joker

hard flume
#

My mod isn't necessarily meant to be balanced either

tall apex
#

mine is actually striving to maintain some balance, but we get silly when we wanna

hard flume
#

I'm just adding whatever I want

tall apex
#

@chrome widget IT WORKED YOU ARE THE BEST

chrome widget
#

👍

chrome widget
#

I will dual wield my two blahaj

tall apex
gleaming zealot
#

yesh

tall apex
hard flume
chrome widget
#

That's fair, I also added women specifically so one of my jokers could flirt with them

#

I LOVE BLAHAJ

tall apex
#

isn't it the best joker

hard flume
#

I added Women specifically so I could make a bunch of Trans Jokers

gleaming zealot
#

:3

hard flume
#

Now I'm adding Yume Nikki Effects as Cards

chrome widget
#

I have three genders: women, trans women, and miscellanous

hard flume
#

I'm not sure what else after that tbh

#

But we'll get there when we get there

#

Here are all the cards for the Woman Suit btw

tall apex
#

ESTROGEN!!!!!!!!!!!!

chrome widget
#

Funny cause I don't even take oral estradiol anymore, but still, based

tall tangle
#

Okay now make a man suit

tall apex
#

im still trying to get on it tbh..,,

tall tangle
#

With literally nothing but negative effects

hard flume
#

Lmao. That's mean though

tall tangle
#

Yes

chrome widget
hard flume
#

:(

tall tangle
#

Because men suck

#

As a man

chrome widget
#

Giving hrt advice in the Balatro modding channel is funny

tall tangle
#

Like I'm fully aware that I'm ragging on myself here but men suck.

tall apex
tall tangle
#

Women are simple betterâ„ąïž

gleaming zealot
hard flume
#

What if I added this into the game

#

Cat Rank

#

I might in the future tbh. Depends if I can find a good use for it

gleaming zealot
#

I am female suit

hard flume
tall apex
#

can i remove my mod's tag from an object?

hard flume
#

Alright. I'm going to work on a couple Dream Cards for this booster.

#

Dream Cards add Effects, a new type of modifier, to your cards.

#

(Effects aren't made right now, but I'm looking at other mods to see how it's done)

chrome widget
hard flume
#

Do I make my mod's tag orange and green, like a Carrot, or do I keep it as periwinkle, my favorite color

#

My mods name is Carrot Field

tall apex
#

i set mine as my fav color combo red and gold

chrome widget
#

Orange and Green!

#

Mine is just a light pink because Cardsauce used the color for Stand/JoJo related content

tall apex
#

ok now i just have to do the hard part..,,

#

winter

#

how do i code a skeleton to run across the screen when you open this pack

chrome widget
#

Depends, what assets do you have?

tall apex
gleaming zealot
tall apex
steep bronze
#

People, what program do I use to program in Lua?

gleaming zealot
tall apex
#

based

#

i use visual studio but notepad works as much

chrome widget
tall apex
chrome widget
#

LMAO i actually have a joker in my mod right now that uses it

gleaming zealot
chrome widget
tall apex
gleaming zealot
#

i should eep school in less than 5 hours

tall apex
#

i wasn't joking btw i need to figure out how to make a gif run across the screen LMAO

chrome widget
#

Okay so the simplest option: ("simple" in quotes)

#

Creating a UI object node that's large enough to cover the screen, feeding in the gif

#

Using an AnimatedSprite as the object

steep bronze
tall apex
gleaming zealot
#

notepad++ is a lil more professional

#

vscode and especially jetbrains is overkill for lua

charred halo
#

what is the naming scheme for modded jokers (trying to make my joker create a copy of itself in this line, just cant figure out what itd be named) ''local new_card = create_card('Joker', G.jokers, nil,nil,nil,nil,'j_joker')''

tall apex
steep bronze
chrome widget
#

generally it's 'j_[mod prefix]_[supplied joker name]'

steep bronze
#

thanks

paper zealot
gleaming zealot
chrome widget
#

VSCode is kinda amazing

tall apex
chrome widget
#

Intellisense really is very helpful, I'd recommend it

gleaming zealot
gleaming zealot
tall apex
#

i genuinely started 4 days ago

gleaming zealot
tall apex
#

meowmeowmeow

gleaming zealot
#

should i eep

tall apex
#

yur

chrome widget
#

yes

tall apex
hard flume
#

why isnt obs recording balatro properly wtf

chrome widget
#

So like yeah, can it be applied to the current pack, yes. It's probably too intensive to like armchair it over discord messages though, sadge

tall apex
#

for now ill code the acheavo then

hard flume
tall apex
#

womem.,,,

hard flume
#

yep

#

what we think so far

gleaming zealot
tall apex
#

ok so how would i make an achievement check for if i've opened a specific pack

#

i can assume context stuff but i just wanna make sure

chrome widget
#

Far as I'm aware, you just call the function unlock_achievement([key])

tall apex
#

oh literally just the key?

chrome widget
#

Oh wait that's vanilla

tall apex
#

ctrl z

fresh fiber
#

Anyone know of any mods that add cards to a (played) hand after it has been "played" but before it has been scored?

I'm able to get the card to be added but the game doesn't score it or properly discard it (which prevents you from playing subsequent hands).

tall apex
#

this is what i have so far, everything besides reffering to the pack itself

chrome widget
#

Through smods, your achievement defintion should have an unlock_condition(self, args) function, and then you can call check_for_unlock() with a specific argument

tall apex
#

i need it to check for that specific pack

chrome widget
#

Well, what I would do is add a create_card(self, card, i) method to your skeletal pack, and then have it call check_for_unlock({ type = '[something]' })

#

Packs typically call create_card to create contents

tall apex
#

hmmmmmmmm okie

chrome widget
#

Alternatively, you can hook Card:open()

tall apex
#

hook?

tall apex
chrome widget
#

So, hooking is something you to do overwrite/change vanilla code. The vanilla function for opening booster packs is Card:open().

tall apex
#

oohhhhhh..,,,

scarlet spire
#

in a boss blind, this would debuff multiple ranks, right?

chrome widget
#

What's your mod prefix?

#

I believe you need to specify one

#

(this is @ Kawaii, sorry)

#

(multiple convo threads)

scarlet spire
#

ah okay

steep bronze
#

random question: does anyone know how to erase the white background in paint (I made the sprites in paint)

tepid crow
#

step 1 would probably be don't use paint ngl

tall apex
#

for doing spritework i would highly reccomend aseprite

hard flume
#

I use a copy of photoshop

tepid crow
#

I've heard good things about aseprite. Paint.net also works for the minimal amount of sprites editing I do

tall apex
scarlet spire
tall apex
chrome widget
#

So I'd just do something like this:

function Card:open()
    if self.config.center.key == 'p_cringe_skeletal_pack' then
        check_for_unlock({type = 'skeleton'})
    end

    return ref_card_open(self)
end```
#

You need to put this in a file for SMODS to load in main

tall apex
#

i have an acheavement lua file loaded by main

#

achievement

#

.., i can spell

tepid crow
scarlet spire
#

can you specify?

chrome widget
#

Actually you could probably just put that code in main

scarlet spire
#

i'm following smods.blind docs which have this parameter

chrome widget
#

And then you just check for args.type == 'skeleton' in your achievement's unlock condition and return true

tall apex
#

i like to organize and keep stuff seprate tbh

chrome widget
#

That's fair, so do I

paper zealot
scarlet spire
#

okay yeah I realized as soon as it didn't work that it was just creating different entries in one table

scarlet spire
#

wait i'm stupid it probably just has to be a table under value = ?
edit: nope, doesn't like tables

chrome widget
#

That said, I don't think the original function returns anything but nil

hard flume
#

I'm eepy but I want to program my Effect Cards :(

night juniper
#

is there some sort of a lua standardlib (for table operations) that's popular for Balatro modding / included as dev utils in something like steamodded? i wrote my first mod in pure lua first as .patch files then moved it to lovely, and now im looking to replace the table utilities i implemented by something more standard

paper zealot
hard flume
tall apex
#

god these bracket things are annoying .3.

tall wharf
#

:(

tall apex
#

why sad whujh

sonic cedar
#

guys is this proper formatting

tall wharf
sonic cedar
#

it's a custom color value, i'm asking about the size addition

sonic cedar
#

knew i wasnt crazy

tall wharf
sonic cedar
#

no im batshit insane

#

but now i get to pretend otherwise

tall apex
#

im going to bed but i shall work more tomoorooworr

#

gn modding dev balatro chat

tall wharf
#

me when i constantly work on my mod

tall apex
#

:((((((((

ivory coral
#

hey guys, never really done lovely patches before so forgive me if ive missed something obvious here but this code is giving me the lovely crash invalid type: map, expected a string at [[patches.pattern]], how do i fix it? it looks right to me

[[patches]]
[[patches.pattern]]
target = "src/utils.lua"
match_indent = true
pattern = '''
SMODS.calculation_keys = {
'''
position = "after"
payload = '''
    'test',
'''```
tall wharf
ivory coral
#

yes

#

src/utils.lua is in smods

tall wharf
#
[[patches]]
[patches.pattern]
target = '''=[SMODS _ "src/utils.lua"]'''
pattern = '''            card_eval_status_text(card, 'debuff')'''
position = "after"
payload = '''
SMODS.score_card(card, context)
'''
match_indent = true
ivory coral
#

oooh does it need some extra specificity

tall wharf
#

note the specific target

#

that's one of my patches

ivory coral
#

still giving me the same error

tall wharf
#

strange

ivory coral
#

on [[patches.pattern]]

tall wharf
#

oh

#

that one needs only one pair of square bracket

ivory coral
#

aaah crud

tall wharf
#

that line

ivory coral
#

yeah it works now
mustve misread it in the docs

#

tyvm

tall apex
#

Unrelated to gamedev but light has been frozen

#

Saw that on my way to bed so that’s interesting

full fable
#

Anyone know how do view balatros source code? Or atleast the jokers?

tall wharf
#

:3

tall wharf
full fable
#

...How?

tall wharf
#

you use 7zip

#

and you open Balatro.exe as archive

#

or are you on macos

full fable
#

Window

#

nvm got it thanks

buoyant shard
#

how can I change the price of items in the shop with a joker ability? I'm trying to find examples but I can't

scarlet spire
#

G.shop_jokers and G.shop_booster are card areas that contain all the cards in the shop except for the voucher, I forget what to do to change the prices directly but I know you can set card.ability.couponed to make said card free in the shop

#

so, G.shop_jokers[1].ability.couponed = true would set the first item in the jokers section of the shop to free, afaik

buoyant shard
#

Is their a way to access their price? I want to make everything half off

scarlet spire
#

you definitely can but i've never done it before

#

I think you can actually set G.GAME.discount_percent to change that?

solar eagle
#

is it possible to have a multiline joker name?

ionic verge
#

trying to look for answers for this again

tall wharf
#

color gone 😭

ionic verge
#

i did just slightly change it so imma test that

ionic verge
#

oh god it works

#

ok!!!!

buoyant shard
#

How do you create a specific joker?

tall wharf
#

SMODS.create_card{key = "j_joker"}

#

i think

buoyant shard
#

how do I specify a joker with that?

tall wharf
#

change j_joker to something else

#

i think

#

SMODS.create_card{key = "j_perkeo", set = "Joker"}

buoyant shard
#

whenever I leave shop

tall wharf
#

is this not correct f or the colour variable

unkempt thicket
#

How can I calculate an edition without a card having it?

red flower
tall wharf
#

😭

#

i copied from the base game

#

scaling i kinda don't care but the colours

unkempt thicket
red flower
scarlet spire
#

is it possible to debuff consumables? this boss blind code doesn't do anything

tall wharf
ionic verge
#

hey how does the get_flush function work?

#

im hoping to make a pokerhandpart thats a flush but six cards long

#

(or five with fingers)

#

dont tell me im going to have to mod this shit to take length

tall wharf
#

@red flower issue is talisman

modern kindle
# ionic verge oh god it works

can i ask what on earth you did to make that fuller house work
i have only been able to make it return either full house or 4oak and its been maddening

ionic verge
#
evaluate = function(parts,hand)
        if #parts._4 < 1 or #parts._3 < 1 or #parts._2 < 2 then return {} end
        return {SMODS.merge_lists(parts._4,parts._2)}
    end
ivory coral
#

hey chat, this may be an odd one here
ive got this hook into calculate_individual_effect and im trying to make it so that it increments the score gradually like it would with chips or mult but at the moment its just giving me this weird effect (see image) where the score all gets added instantly and it increments inside the hand name instead
is there a way to get this to work more properly?

function SMODS.calculate_individual_effect(effect, scored_card, key, amount, from_edition)
    if key == 'osquo_ext_rscore' and amount then
        G.GAME.chips = G.GAME.chips + amount
        update_hand_text({delay = 0}, {chip_total = G.GAME.chips})
        if not effect.remove_default_message then
            if from_edition then
                --currently not a thing so no need
            else
                card_eval_status_text(scored_card or effect.card or effect.focus, 'osquo_ext_rscore', amount, percent)
            end
        end
        return true -- the effect was calculated, so we return early
    end
    return _calculate_individual_effect(effect, scored_card, key, amount, from_edition) -- run the base function as normal
end```
ionic verge
#

hmm it appears i forgot how to do the code link thing

modern kindle
#

three of those dashes

#

you did 2

nova finch
#

this is probably a stupid question, but how do i check for if a certain joker is in the current set of jokers?

ionic verge
#

test

#

ok hmm

modern kindle
#
test```
#

like that

ionic verge
#

i was having a different problem than the block

modern kindle
#

o

ionic verge
#

edits werent working for some reason??

#

but i got it to work

modern kindle
#

ooo

turbid maple
#

dumb question what's the difference between putting stuff into G.GAME and G.GAME.current_round

stiff locust
#

uhh

modern kindle
# ionic verge but yeah this

thank you very much ive been losing my marbles on it, i had tried just merging 2 and 4 and it kept not doing what i wanted

stiff locust
#

anyone know why the console would be crashing before balatro opens

turbid maple
#

like unless there's something special that goes on with current_round I don't know why I should just shove my run-wide variables into G.GAME because I'm the one manually updating them in things like reset_game_globals anyway

stiff locust
#

the game was working like 20 minutes ago, then I coded a consumable, and now it refuses to open

latent portal
ionic verge
#

does anyone know how to define a six card long flush?

#

actually you know what

#

@frosty dock is it intentional that get_flush doesnt have a length input unlike how get_straight and get_X_same do?

#

cus i saw that smods modifies the vanilla get_straight to take the length of the straight, but not get_flush

#

specifically, min_length is what im refering to
get_flush is not modified to have that as well

stiff locust
#

flood?

#

water?

ionic verge
#

idk

#

would large flush sound better?

stiff locust
#

would you say it

#

splashes around

wintry arch
#

instead of a flush it's a saturate

scarlet spire
green plank
#

ok so idk if it's like this since i haven't seen it go off yet

modern kindle
# ionic verge does anyone know how to define a six card long flush?

i actually did this myself, but i probably did it in a needlessly extra way, im sure youll find a better way but i did it like this

  evaluate = function(parts, hand)
    if #hand < 6 then 
        return {} 
    end -- Ensure at least 6 cards are present

    local first_card = hand[1]
    local target_rank = first_card:get_id()
    local suit = nil

    -- Determine the suit using is_suit()
    if first_card:is_suit('Hearts') then suit = "Hearts" end
    if first_card:is_suit('Spades') then suit = "Spades" end
    if first_card:is_suit('Clubs') then suit = "Clubs" end
    if first_card:is_suit('Diamonds') then suit = "Diamonds" end

    local matching_cards = {}
    local same_suit = true

    for _, card in ipairs(hand) do
        -- Check if card matches both rank and suit
        if card:get_id() == target_rank and card:is_suit(suit) then
            table.insert(matching_cards, card)
        else
            same_suit = false  -- If any card differs, it's not a valid hand
            break
        end
    end

    if same_suit and #matching_cards == 6 then
        return { matching_cards }
    end

    return {}  -- Not a valid Flush Six
end
}
ionic verge
#

tbh imma just wait for a response from johnsmods before i work on this

modern kindle
#

that is very fair

#

just wanted to try and return the favor 😎

ionic verge
#

ye, thanks!

#

if i dont get somethin from him ill be using your code

modern kindle
#

not a problem at all!

tall wharf
modern kindle
#

u should add somethin called alphabet soup

tall wharf
modern kindle
#

youre a fantastic entity

tall wharf
ionic verge
#

what does voucher two do?

mint fossil
#

Hiya question, any way to disable achievements whilst my mod is being used?

tall wharf
tall wharf
#

generally a good idea to play modded stuff on a separate profile

mint fossil
tall wharf
#

go to mods and then go to config

paper zealot
mint fossil
#

Oh it's not even a mod thing, thanks

paper zealot
#

It's a Steamodded Thingℱ

gilded blaze
#

is there a way to remove edition from a card
I took a look at Card:set_edition() I'm confused 😭

plucky vortex
#

is modded on ios (this is a stupid question but
)

gilded blaze
#

there are only options to set to something other than no edition

unkempt thicket
#

If you set it to nil it removes it so card:set_edition(nil)

gilded blaze
#

yea that got me confused there I figured it out

#

thanks a lot oyes

sullen fern
tall wharf
#

amitie

#

wtf

sullen fern
#

evil puyomod be like

#

bejeweledmod

tall wharf
tall wharf
sullen fern
#

fuck.

tall wharf
#

evil aikoyori mods be like

unkempt thicket
#

How do you use quantum enhancements?

sullen fern
#

it would be really funny to make the virtues only appear when ortalab is being used

solar eagle
#

where's the code that determines if a glass card breaks or not?

#

ive looked but cant seem to find it

tall wharf
sullen fern
tall wharf
#

i had a revelation last night that ortalab is balatro in reverse literally

sullen fern
#

then again i’m probably not keeping the virtues

#

i do have the siivagunner arg balatro mod though

#

so everything’s good

#

i think i know how to impliment the suit rarity system

#

the rare suits like chu, teal, and sun can only be obtained through spectral cards

#

while common types can be obtained through tarot cards

#

i just need to figure out how to exclude specific suits from the deck

#

like, the suits will still exist, but they won't be in the deck by default

scarlet spire
turbid maple
hard flume
#

Okay so. I finally figured out what Effects would do. They'd be Run Modifiers that go in their own section, like Betmma's abilities/spells. You can only have one at a time, and they drastically change gameplay.

#

I'm really happy, cuz I've been struggling with coming up with a reasonable use for Effects for the past day, but didn't want to scrap another feature, like I did the Cat Rank

sullen fern
hard flume
unkempt thicket
#

I just deleted the other cards lol

sullen fern
#

not just a specific one

hard flume
#

Oh yeah that's also possible. Don't know how, though. You'd want to look at the SMODS guide

#

Fuck. Am I really going to work in an Area System into Balatro...? Yes, yes I am.

sullen fern
#

i want them to appear rarely in standard packs and also from specific spectral cards

#

which means that i have to exclude them from the main decks

rapid stag
#

is there a context for on joker creation?

chrome widget
#

There isn't a specific one, I had to make one myself

#

There's one for buying cards, but it doesn't account for Judgement/Wraith/Rif-Raff or Ankh/Invisible Joker

#

Similarly there's not a specific vanilla one for joker destroyed (via Hex/Ankh, Dagger/Madness), only card sold, so I also had to make one for that too

#

Contexts are context.joker_created with the new card passed into context.card, and context.joker_destroyed with the destroyed card passed into context.removed

rapid stag
#

huh.

okay, so how is fortune teller retroactive

sullen fern
chrome widget
#

Same for Throwback and blind skips

rapid stag
#

ah. i'm trying to make a joker that's basically throwback/fortune teller, but neptunes

chrome widget
#

Unfortunately you'll have to make a more specific tracker for that. I made one for a card that scales specifically with deck fixing consumables, but the tracker itself just records every consumable and number of times used in a table, so it could be used for whatever. Want it?

#

The only thing the game naturally records types of consumable usage for is the global profile tracker which isn't useful

rapid stag
#

cirThink would i not be able to just get the level of straight flush, though

chrome widget
#

No

rapid stag
#

oh right, there's instances where it can decrease

chrome widget
#

Plus Orbit Tags and Space Joker, just in vanilla

rapid stag
#

eh. i can just patch misc_functions to make it increment a neptune counter then

#

how would i be able to determine that it's neptune starting from card.config.center? card.config.center.key == 'c_neptune'?

chrome widget
#

Yeah

rapid stag
#

great, thanks

scarlet spire
#

can blinds hold values like the config tables? I need to track literally just a counter but it doesn't seem possible

#

the blind decreases hand size based on how many hands you've played, and I need to reverse that once you defeat/disable the blind

#

it'd be so useful if blinds were integrated with the calculate/context system, this is really hard to work with, it looks like I have to patch just to make a blind activate on discard

tall wharf
#

chat what about this one

sonic cedar
#

in my completely unbiased opinion this is what we call fire

tall wharf
#

i want to get creative with the game

sonic cedar
#

is this a teaser

tall wharf
#

"Vanilla-like"? what's that

#

i add whatever the fuck i want to

#

next joker is hibana

scarlet spire
#

oh that's a clever mechanic

tall wharf
#

as in

#

DECO27 Hibana

sonic cedar
#

it was not a teaser

tall wharf
sonic cedar
#

guys i wonder what the card’s gonna do

sullen fern
# tall wharf

you’ll paint your face with tears that won’t feel the same

now heart reinforce’s up to end this game

you better give up and throw your mp5 away

#

there are lots of things this card can do

sonic cedar
#

make it do nothing

scarlet spire
#

how do I force a blind loss? i've got a boss blind that can reduce hands remaining without you playing a hand, but it doesn't kill you when that happens

lost fern
#

Hey ummm Ive decided I am confused enough to actually ask the discord chat. The game is giving me an error for a section of code I have commented out (and subsequently saved) so what how do I fix this (Im trying to figure out editions so Im just testing how to make one, hence using glitched here) I am baffled by this how is this what what is happening why is it trying to run commented code

iron iron
#

i think maybe its context.before not working with my other shit

unkempt thicket
lost fern
#

Ok I actually tried deleting the code line and it still has the error what the heck

unkempt thicket
#

there is a uncommented } right there

lost fern
#

ohhhhhhhhhhhhhhh

#

wait no but I deleted the whole block and it still throws the same error

tall wharf
lost fern
#

ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

#

Ok Im stupid I figured it out

#

I changed the mod folder name and so visual studio stopped saving to the correct file

#

Completely unrelated issue to the actual code

strong jacinth
lost fern
#

Also I added the chips code to the edition but its not working so Imma go figure that out almost got it working

tall wharf
sturdy compass
#

Black goker

gleaming zealot
scarlet spire
tall wharf
sturdy compass
#

Oh fascinating

#

I didn’t even know it was possible to mess with the drawing order

tall wharf
#

did i steal this off someone

gleaming zealot
# tall wharf

mabe you should also give it -1 hand size

but maybe thats too weak

tall wharf
#

it's a rare

gleaming zealot
tall wharf
#

i just have this

#

@sturdy compass i am not that smart okay

sturdy compass
#

Whar

tall wharf
#

😭

#

i just pushed the code to github

sturdy compass
#

Unprompted 😭

sturdy compass
tall wharf
#

if u wanna have a look feel free

sturdy compass
#

So fucking true

tall wharf
#

we ball

sturdy compass
#

Ballin

tall wharf
#

unbalanced? probably

scarlet spire
lost fern
#

I am very unlucky, moment I post question I find the answers while searching

#

Also wiki is outdated, joker_main isnt in edition, its pre_joker and post_joker its just not noted to what I found that joker_main doesnt work on editions

tall wharf
#

@sullen fern

rapid stag
#

what if you wanted to test your joker

but localthunk said

versed swan
#

How do I detect if a Joker is moved around in the tray?

zealous glen
unkempt thicket
zealous glen
#

Also how are you choosing what to draw @tall wharf ?

tall wharf
#

wdym

zealous glen
# tall wharf wdym

Actually maybe it doesn’t matter in your case if you draw all Aces before you can draw non-Aces

#

Well it does matter a little bit

#

Because players can sell it mid-round

#

Do you draw the Aces from the top to bottom?

tall wharf
#

it affects on shuffle

zealous glen
#

Ah ok

#

Well

#

Not ok balatrojoker

#

Oh but it does stack all Aces at the top

#

So selling won’t change the shuffle

tall wharf
#

yeah

zealous glen
#

hmmm

tall wharf
#

you can reap the effect at that moment

zealous glen
#

But most people don’t realize that I think

versed swan
unkempt thicket
hushed field
tall wharf
#

i might as well shuffle once more when you sell the card

zealous glen
#

So either way I had to care about it, and reshuffling every time is too much

versed swan
hushed field
#

oh my bad, I'll have the name wrong

#

lm check the actual name

tall wharf
#

hi

hushed field
#

CardArea:set_ranks(), it's on the card area not on the card

tall wharf
#

actually what does set ranks do

hushed field
#

it snaps the position of cards in the card area

tall wharf
#

cryptic ahh name tbh

hushed field
#

took me some time to find it, that's for sure

random turret
#

any recommendations on where to start if someone wants to create their own balatro mod (mainly custom jokers)

tall wharf
#

ah

plush cove
random turret
#

alright

versed swan
versed swan
hushed field
versed swan
#

ah

zealous glen
#

I couldn’t find the thread

manic rune
#

oh :3

#

yeah, i saw that

but i think i added a few more stuff to my thread that they will probably need

fickle stag
#

hi all, i'm thinking of trying to code a neural network to play Balatro, any recommendations on how I can get the game's state? ie. cards in hand, in deck, current jokers, possible hands to play etc.

I'm not sure how the modding system in the game works or if I can access these kinds of stuff, any help is appreciated :D

manic rune
#

G.STATES

but thats likely not what you are looking for

#

G.play, G.hand, and G.jokers mean the playing hand, cards in hand, and jokers in your joker area respectively

hushed field
#

the source code is fully accessible! I'm not sure what approach you wanna take when it comes to a modding framework, whether you just want to read the gamestate of a vanilla game, or if you want it to interface with a mod that passes that info, because Steamodded does give you some different options when it comes to accessing info

zealous glen
fickle stag
fickle stag
zealous glen
hushed field
#

I've written theses about neural nets but I secretly understand jackshit about them, so I can't say too much, but that'd definitely be very possible. The game makes the current game state super accessible, and lua can call python functions incredibly easily, as far as I understand it. SMODS wiki will be a good help, and luckily all the code is open source. The main thing you'll wanna be able to check are which cards are in the card areas, after all, and that's not too difficult

fickle stag
#

i'm even more clueless about neural nets too HAHAHH i'm just trying to learn and thought making it play my favorite game would be cool :p

hushed field
#

It'll really depend on what info you wanna pass through to the nn, but the difficult part of your plan is making a nn, not making it interface with balatro, so that's definitely a good sign!

sudden pike
#

Is there some method already set up for converting a card id (that you get from card:get_id) to a playing card prefix (like K_H)? i'm about to make my own utility function for it but it feels like there should be an array or an existing method for that.

#

or shouldn't i be using create_playing_card()?

manic rune
#

...why the fuck is this not "number" 💔

plush cove
#

are you asking for solutions or criticizing code

manic rune
#

im threatening myself

#

i will quite literally throw myself off a bridge rn :3

#

its been inside the function to inflict status effects on playing cards

#

for the past few weeks

#

💔

#

i just recently noticed it

manic rune
#

you aint rizzing me up

gleaming zealot
#

i have a girlfriend so

manic rune
#

oh, good for you

plush cove
fickle stag
manic rune
#

:3

gleaming zealot
tall tangle
opal holly
manic rune
#

:3 you can also check #1349064230825103441, i made sure to gather everything a beginner will need in there

clear mason
#

where does one find a list with all the jokers?

#

like the atlas

manic rune
#

card.lua in balatro source code

#

but thats a very vague question, there is also the one file with all the jokers' keys

clear mason
#

No like the picture

#

image

manic rune
#

spritesheet?

clear mason
#

yeah

manic rune
opal holly
#

I've been checking out the code for NeatoJokers mod because its mostly a joker mod (with hatsune joku sounds), really like the organisation

clear mason
#

I see

manic rune
rapid stag
#

useful info in case anyone else needs it

gilded blaze
#

couldn't create a Jack on playing King and Queen 😭

fickle stag
#

is there any documentation on how the game seeds work? like how do shops, card drawing, rerolls work etc

manic rune
#

pseudorandom stuff

#

it works like math.random(), but remains the same if you replay the seed

fickle stag
#

i mean like how do people do seed science to find ante 1 soul etc

#

HAHAHHA

red flower
#

the game just passes a seed to math.random basically

fickle stag
#

wait it's in the game code right

red flower
#

yeah look for pseudorandom in functions/misc_functions

fickle stag
#

oooo okies

#

thanks <333

hushed arrow
#

what's a key, like for example key = "fours" in one of the example mods. Is it like something that you can use to reference?

red flower
#

it's basically the ID of the object that you're making

#

you have to use that id to reference it in other places

hushed arrow
mellow sable
zealous glen
zealous glen
fickle stag
#

oh cool

#

okay

#

!

gilded blaze
manic rune
#

is this a bit too simple

fickle stag
#

it's just normal lua?

hushed field
#

I'm not sure I can help you with that, I've never had to make them interact, I just know it's not too difficult! I'm sorry!

fickle stag
#

npnpnp thanks

clear mason
#

ok so uhh

#

how do I package this

iron iron
#

this joker turns 4s into an enhancement in my mod. currently it does nothing. is it context.before not being the right one or smth like that

#

wait i can copy midas mask

#

i may be stupid

turbid maple
#

you're iterating over G.play.cards with v as the variable but in the body you have context.other_card

gleaming zealot
plush cove
#

have you two done crime yet

iron iron
hushed arrow
#

does config = { extra = { chips = -100 } } work? can the extra chip accept negative numbers? because it works with mult = -100

faint yacht
iron iron
#

yeah thats what i thought

#

still aint working

red flower
#

don't use context.other_card

#

use v

iron iron
#

ughhh i am stupid...

#

yet another 98% moment

#

still nothing

frosty dock
#

context.before doesn't need an area check

iron iron
#

i dont know

frosty dock
#

you should remove that check

iron iron
#

yeah i just did

vast fractal
#

Help: since im new to modding, i'm trying to make a joker that will act as a plasma deck when it triggers but the chips part is not working (or the whole thing is broken) 😭

gilded blaze
zealous glen
#

Old video

vast fractal
zealous glen
wintry solar
#

maybe I should add a balanced return value

vast fractal
zealous glen
gilded blaze
#

I mean

wintry solar
#

when whatver card returns it triggers?

gilded blaze
#

just replace args with context

quartz ravine
# clear mason ok so uhh

How do you get it in the game? Well first save it with a one px margin on the left and right side, and put that in \assets\1x. Then you load it in your mod by adding an Asset line like this

clear mason
#

I got it working

#

just look at this absolute abomination

quartz ravine
#

Wow, this python resize script is awesome. Somehow when I try to do it by hand in Paint Dot net the image looks terrible

zealous glen
clear mason
zealous glen
#

So at the timing of Plasma Deck

#

Otherwise it’s imbalanced balatrojoker

wintry solar
#

no

#

it should apply whenever people want it to apply

zealous glen
#

Just create an event

#

And it works at the time the card triggers

#

No need to handle it automatically

#

But making it execute at the timing of Plasma Deck is harder

wintry solar
#

you just need to use the final_scoring_step context

#

being able to do return { balance = true } is much more beneficial to implement rather than locking it down

quartz ravine
#

Woot, this is looking pretty nice!

#

it's a riskier glass, I am really happy with how the shader turned out too

zealous glen
#

Maybe I can update Syzygy then balatrojoker

wintry solar
#

no

zealous glen
#

I meant new as in added by new calc

#

Because I had had to patch into Plasma Deck’s condition

#

For Syzygy

wintry solar
#

oh then probably yeah

dire palm
#

So, I'm working on making new challenges. How can I make it so flushes don't score during my challenge?

gleaming zealot
#

maybe

prisma loom
#

Is there a way to change the weights of Jokers of different rarities in the shop?

vast fractal
ionic verge
modern kindle
ionic verge
#

mhm

#

thanks for tellin

#

im also moving it to a poker hand part, so i can use it for six card flushes, and flush varients of all the other six card hands

gilded blaze
#

message did not return in eval
am I wrong somewhere

modern kindle
#

sick, works out then

maiden phoenix
gilded blaze
#

alr

#

you mean card_eval_status_text?

ionic verge
#

that could be intentional but personally i want fingers to also reduce six card flushes to only require five, so im modifying that on my end

modern kindle
ionic verge
#

if ya want ill send you the solution i come up with once im done

gilded blaze
modern kindle
gilded blaze
#

unless I'm doing it wrong

modern kindle
#

But absolutely send once you've messed with it if you don't mind

hard flume
#

Hihi. How do I go about organizing my jokers and other features into organized files?

hard flume
#

Yeah

ionic verge
#

add these to your main.lua file

#

create a modules folder

#

and put the files you want in that folder

#

(and make sure to name the files correctly in both main.lua and the modules folder)

tall wharf
#

in any case do you think the effect is a bit busted

maiden river
#

still doing localization stuff
how do you use the localize function again? there's only one example and it doesn't explain much 😭

maiden river
ionic verge
maiden river
#

erm

ionic verge
#

<@&1133519078540185692>

maiden river
#

get this guy

maiden river
#

thanks mods

ionic verge
maiden river
tall wharf
#

no

#

when you have to draw

#

you draw the prioritized ones first

ionic verge
# modern kindle But absolutely send once you've messed with it if you don't mind
func = function(hand)
        if SMODS.find_card('j_four_fingers') and #hand < 5 and #hand < 6 then 
            return {} 
        end -- Ensure at least 6 cards are present
    
        local suit1 = 0
        local suit2 = 0
        local suit3 = 0
        local suit4 = 0
    
        for i,v in ipairs(hand) do
            if v:is_suit('Hearts') then suit1 = suit1+1 end
            if v:is_suit('Spades') then suit2 = suit2+1 end
            if v:is_suit('Clubs') then suit3 = suit3+1 end
            if v:is_suit('Diamonds') then suit4 = suit4+1 end
        end

        local flood = {}

        if SMODS.find_card('j_four_fingers') and suit1 >= 5 or suit1 >= 6 then
            for i,v in ipairs(hand) do
                flood[#flood+1] = v:is_suit('Hearts') and v
            end
        end
        if SMODS.find_card('j_four_fingers') and suit2 >= 5 or suit2 >= 6 then
            for i,v in ipairs(hand) do
                flood[#flood+1] = v:is_suit('Spades') and v
            end
        end
        if SMODS.find_card('j_four_fingers') and suit3 >= 5 or suit3 >= 6 then
            for i,v in ipairs(hand) do
                flood[#flood+1] = v:is_suit('Clubs') and v
            end
        end
        if SMODS.find_card('j_four_fingers') and suit4 >= 5 or suit4 >= 6 then
            for i,v in ipairs(hand) do
                flood[#flood+1] = v:is_suit('Diamonds') and v
            end
        end
    
        return flood
    end
#

works with four fingers and wild cards just fine

maiden river
ionic verge
modern kindle
maiden river
ionic verge
#

though

#

ig i dont need that

#

can just check < 5

maiden river
#

what I'm saying is that it should be if SMODS.find_card('j_four_fingers') and #hand < 5 or #hand < 6 then

hard flume
#

Hi hi!!! Gonna work on my first lovely patch today to hopefully make custom modifiers work

ionic verge
#

that didnt work

maiden river
#

oh wait
did you try if (SMODS.find_card('j_four_fingers') and #hand < 5) or #hand < 6 then

ionic verge
#

no

#

i kinda presumed that didnt matter

maiden river
#

it does

ionic verge
#

yeah the same is true

#

i can use not statements though

#

to get the right effect

hard flume
#

But once I get those two things done, the core features of my mod will be done and I can work on adding whatever fits my mind

sullen fern
#

now i need to figure out how to exclude specific suits from all decks

maiden river
ionic verge
#

oh

maiden river
#

like how find_mod works

hard flume
ionic verge
#

yknow what

#

imma just check for hand being <5

tall wharf
#

@maiden river ok i recorded the video

ionic verge
# modern kindle Awesome, thanks I'm on my way into the city but once I'm back I'll grab it
SMODS.PokerHandPart {
    key = "flood",
    func = function(hand)
        if #hand < 5 then 
            return {} 
        end -- Ensure at least 5 (for four fingers) cards are present
    
        local suit1 = 0
        local suit2 = 0
        local suit3 = 0
        local suit4 = 0
    
        for i,v in ipairs(hand) do
            if v:is_suit('Hearts') then suit1 = suit1+1 end
            if v:is_suit('Spades') then suit2 = suit2+1 end
            if v:is_suit('Clubs') then suit3 = suit3+1 end
            if v:is_suit('Diamonds') then suit4 = suit4+1 end
        end

        local flood = {}

        if (next(SMODS.find_card('j_four_fingers')) and suit1 >= 5) or suit1 >= 6 then
            for i,v in ipairs(hand) do
                flood[#flood+1] = v:is_suit('Hearts') and v
            end
        end
        if (next(SMODS.find_card('j_four_fingers')) and suit2 >= 5) or suit2 >= 6 then
            for i,v in ipairs(hand) do
                flood[#flood+1] = v:is_suit('Spades') and v
            end
        end
        if (next(SMODS.find_card('j_four_fingers')) and suit3 >= 5) or suit3 >= 6 then
            for i,v in ipairs(hand) do
                flood[#flood+1] = v:is_suit('Clubs') and v
            end
        end
        if (next(SMODS.find_card('j_four_fingers')) and suit4 >= 5) or suit4 >= 6 then
            for i,v in ipairs(hand) do
                flood[#flood+1] = v:is_suit('Diamonds') and v
            end
        end
    
        return flood
    end
}

SMODS.PokerHand
{
    key = 'flood',
    chips = 35,
    mult = 5,
    visible = false,
    l_chips = 20,
    l_mult = 2,
    example =
    {
        {'S_2', true},
        {'S_6', true},
        {'S_9', true},
        {'S_J', true},
        {'S_K', true},
        {'S_A', true},
    },
    evaluate = function(parts,hand)
        return parts.sixf_flood
    end
}
maiden river
# tall wharf

okay yeah that's what I was saying
so all of the cards you have of that type are drawn first

ionic verge
#

ok heres the fixed version

bold sleet
#

hello and goodbye

maiden river
#

actually are there any mods that are completely able to be localized I can look at for reference?
the docs are lackin lmao

fickle stag
#

how do I see print logs in my mod?

#

am I even doing it correctly? i made a directory and moved it to Mods/ basically but I don't see any change unless I did a silly

maiden river
#

that should be right
if you don't have DebugPlus installed, you should install it; it shows you the logs ingame

red flower
fickle stag
#

uh nothing shows up in game

maiden river
maiden river
#

oh yeah I forgot that my mod is jokerdisplay compatible

fickle stag
#

okay something's def wrong the "mods" menu doesn't show up

#

hmm

#

i'm running the love thing directly

maiden river
#

is your smods folder nested

fickle stag
#

uh no

maiden river
#

huh
interesting

#

I'm not too familiar with mac tbh, but I'm assuming you followed the instructions
it's probably better to ask someone else tbh

tall wharf
#

hi

maiden river
#

hello

tall wharf
#

@fickle stag I'm sorry for going off topic but why are you in Thailand 😭

fickle stag
#

internship :D

tall wharf
#

ah

fickle stag
#

i have to do an AI project

#

so like

#

balatro

tall wharf
#

fair

#

I'm also in Thailand funnily enough

fickle stag
#

ooooo sick

#

what for :o

tall wharf
#

uh

#

I

#

live here

fickle stag
#

OH

#

cool !!!