#šŸ’»ćƒ»modding-dev

1 messages Ā· Page 81 of 1

opal spade
#

because smods assumes you're trying to use an atlas you've registered so it already does all the prefix work for you unless you specifically tell it not to

silent pawn
#

oh i see

brisk rose
#

is there an smods.suit or is black magic required for custom suits?

edgy reef
#

There is

#

No documentation yet though so it's basically black magic

brisk rose
wintry solar
#

there are plenty of suit mods to steal code from though

brisk rose
brisk rose
#

oh that actually looks really easy

wooden nexus
#

Trying to remove all vanilla content from card pools

#

At least... obtainable from shop/pack wise

maiden phoenix
#

Thought failsafe options will show up

brisk rose
#

just patch the failsafes /hj

wintry solar
#

god, why did I decide to allow soul sprites to be added to any card T_T

autumn berry
#

how do I set the debug info level so sendDebugMessage actually shows in the prompt?

tepid crow
#

mod button -> (steamodded) config

autumn berry
#

ohh I've been looking for some kind of flag in the scropt, that works thanks

wooden nexus
#

Idk what's wrongf

tepid crow
#

you should probably check how SDM did it? that way you won't need to enter each banned key

brisk rose
wooden nexus
tepid crow
#

it's on their github

#

1 sec

limpid wing
#

So, i need help, someone can show me a example of take the ownership of a vanilla joker please

#

Im very noob on that things

wintry solar
brisk rose
#

ah I see

wintry solar
#

and it's not letting me add soul sprites to those texture selectors

#

the actual functionality in game works fine I think

limpid wing
limpid wing
#

And change that entire texture

wooden nexus
hardy viper
limpid wing
hardy viper
#

sure

#

discord still compressed it

#

original zip is over 40 MB

#

hm

#

meh still plenty of quality

#

its like 10000 pixels wide so unless you compress it to hell and back itll still look alright widegladeline2

limpid wing
hardy viper
#

oh

#

lol

limpid wing
#

Because windows do these things with the size o the files

hardy viper
#

kinda goofy of windows

limpid wing
#

Example, the 8gb usb drive, but you put it your computer and is 7.4gb

tepid crow
tepid crow
#

could possibly be some kind of prefix shenanigans

hardy viper
tepid crow
#

might be fixed by renaming the stakes to start with your mod prefix?

wooden nexus
#

HAHA

tepid crow
#

that worked???

#

wow the stake prefixes are broken

wintry solar
#

... what did you change it to?

wooden nexus
#

well prefix_key

tepid crow
#

I guess changing the above_stake to include the mod prefix would've also worked

wintry solar
#

OH

tepid crow
#

game_object:523 should probably have a mod prefix attempt though

wintry solar
#

I understand why the ortalab one's are different now

narrow pollen
#

...anyone have a clue as to why putting a get_straight(hand) function in my mod's lua file doesn't override it like it used to? still getting used to steamodded 1012b

#

or whatever the current version is

brisk rose
#

The ones that are 1024^2 bytes are actually technically mebibytes

#

True megabytes are 1000000 bytes

brisk rose
limpid wing
#

i will check it myself

hardy viper
tepid crow
#

"fixed" is relative

#

you could argue both are correct

tepid crow
#

I don't recall SMODS' overrides loading later or anything

narrow pollen
#
local get_straight_ref = get_straight
function get_straight(hand)
  local base = get_straight_ref(hand)
  local results = {}
  local can_loop = next(find_joker('Superposition'))
  local target = next(find_joker('Four Fingers')) and 4 or 5
  local can_skip = next(find_joker('Shortcut'))
  local skipped = false
  if can_loop then
    sendDebugMessage("Superposition detected.")
  end
  if can_skip then
    sendDebugMessage("Shortcut detected.")
  end

  if not(can_loop) or #hand < target then
    return base
  else
    sendDebugMessage("Method needed.")
    return base
  end
end```
wintry solar
#

you've got debug messages turned on, right?

#

I turned my brain on 🄳

limpid wing
tidal ice
#

for future reference, where can I find documentation about modding this game, and possible other tools that may help me

tepid sky
# wooden nexus

ngl, i like the idea of reusing blinds characteristics, @tepid crow guess what i am about to suggest ;)

brisk rose
hybrid iris
#

i wonder if its like,
possible to use lovely to patch the code of other mods

frosty dock
#

yes actually

#

you can target =[SMODS modid "filename.lua"]

hybrid iris
#

oh woah

#

coolio

tepid sky
#

ty!

autumn berry
#

did the way steamodded handles mod config reciently change? my settings aren't loading all the sudden. It should just save your SMODS.current_mod.config table right?

hardy viper
#

also just check steamodded commits if you want to know whether something changed

autumn berry
#

just a bunch of bools

hardy viper
#

must either be something wrong with your writing to the table or a weird steamodded change idk

#

doesn't seem like there have been any config affecting smods changes recently

wooden nexus
#

Okay having trouble getting Vanilla only to work

lime trench
tidal ice
#

I was already planning on an AR card so yeah

vague island
#

whats wrong with my code (Trying to give x2 mult for each "j_fnj_gerald" you own when scoring a king)

#

calculate = function(self, card, context)
if context.setting_blind and not (context.blueprint_card or self).getting_sliced then
local geraldcount = 0
for i = 1, #G.jokers.cards do
if
G.jokers.cards[i].ability.name == "Gerald"
then
geraldcount = geraldcount + 1
end
end
if geraldcount > 18 then
geraldcount = 18
elseif not geraldcount then
geraldcount = 0
end
end
if context.individual then
if context.other_card:get_id() == 13 then
if geraldcount then
for i = 1, geraldcount do
message = '._.'
Xmult_mod = card.ability.extra.Xmult
end
end
end
end
end,
}

wintry solar
#

can you send the j_fnj_gerald object?

regal shoal
tepid sky
#

got me comfused in 13 seconds

shell timber
#

oh yeah i remember that

wooden nexus
wooden nexus
#

Alright, so I'm trying to make Balatro Only as a stake.

#

I'm using Ortalab only as a base and well... I can't get it to just have base editions

#

So far it works for playing cards

wintry solar
#

editions don't respect pools at the moment

wooden nexus
#

Oh that's all?

wooden nexus
wintry solar
#

I don't think blinds do either

wooden nexus
#

alright, I'm gonna check to see if the Loteria bug still occurs

vague island
# wintry solar can you send the `j_fnj_gerald` object?

SMODS.Joker {
key = 'gerald',
loc_txt = {
name = 'Gerald',
text = {
'Does something...',
'{C:inactive,s:0.7,E:1}Uhh... who is this?{}'
}
},
pos = { x = 0, y = 0 },
cost = 3,
rarity = 1,
set_card_type_badge = gerald,
unlocked = true,
discovered = true,
blueprint_compat = false,
eternal_compat = true,
perishable_compat = false,
atlas = 'atlasgerald',
calculate = function(self, card, context)
if context.joker_main then
card_eval_status_text(card, 'extra', nil, nil, nil, {message = '._.', colour = G.C.CHIPS})
end
end
}

wintry solar
#

yeah thought so, you're checking for something that doesnt exist

vague island
#

?

#

wdym

tepid crow
#

try using codeblocks btw

#

```lua
function ...
```

turns into

function ...
wintry solar
vague island
#

how should i fix this?

wintry solar
#

use SMODS.find_card

#

like I said the other day

vague island
#

i still dont understand that

#

how would i integrate the table into the code?

vague island
tepid crow
vague island
#

oh ok

#

makes sense

#

lol im dumb

tepid crow
#

the table itself is just a list of owned jokers/consumables found that match the search

vague island
#

weird

#

it isnt working still

#

wait hold on

#

nope

#

it borked

#

whats wrong with my code (Trying to give x2 mult for each "j_fnj_gerald" you own when scoring a king)
calculate = function(self, card, context)
if context.setting_blind and not (context.blueprint_card or self).getting_sliced then
local geralds = SMODS.find_card(j_fnj_gerald)
local geraldcount = #geralds
end
if context.individual then
if context.other_card:get_id() == 13 then
if geraldcount then
for i = 1, geraldcount do
message = '._.'
Xmult_mod = card.ability.extra.Xmult
end
end
end
end
end,
}

frosty dock
#

can you please use codeblocks

#

the key j_fnj_gerald needs to be in quotes, else you're referring to a variable named that (which doesn't exist)

vague island
tepid crow
#

my brother in christ not for your normal messages, for your code

vague island
#

i kno

#

just having fun with it nbd

tidal ice
#

honestly looking at this code makes it seem like making jokers isnt too hard

#

best thing is I have some experience with lua

#

big win

teal estuary
#

curious: can you make a joker "gain" retriggers, like how they can gain mult or chips?

nocturne garnet
#

spooky

crisp coral
frosty dock
#

I'm too tired to go through explaining everything though

vague island
#

oh

#

okie dokie

leaden prairie
#

where can i find mods?

tidal ice
hybrid iris
#

for some odd reason my mod icon is loading for mods other than itself

spare elk
#

that's... odd

brisk rose
#

I remember zen did the same thing

brisk rose
hybrid iris
#

oh huh

limpid wing
hybrid iris
#

its, just this

hybrid iris
#

ohh okay yeah that was the issue sjdhskdjh

limpid wing
hybrid iris
#

,,,well, yeah, thats, essentially the same thing kjdfhsksdfjh

#

no worries though!

hybrid iris
#

the issue was apparently just the SMODS.init thing

hybrid iris
timid parrot
#

how do I test my custom-made boss blinds?

brisk rose
#

@frosty dock Why isn't there just a full skeleton header to copy? Ofc I'll just grab one from some other mod, it'd just be convientent to have it there on the wiki

brisk rose
timid parrot
#

thank you

brisk rose
#

np :3

edgy reef
#

At for why it’s not like that rn

#

Updating that part of the doc to be a skeleton w/ comment is likely better regardless of legacy or other format though.

#

Wait json doesn’t have comma syntax

brisk rose
#

also tbh the install guide should be a different page than any of the coding doc

#

I always forget it's on the same page

brisk rose
#

"alpha"

edgy reef
#

It’s in the mod index PR if you want to take a look at it.

crisp coral
#

will we have 1.0.0 beta before gta6

edgy reef
brisk rose
#

I don't mind at all personally, it just confuses newbies

#

lol

languid mirage
stiff locust
#

how do you destroy a card again

wintry solar
#

card:start_dissolve()

stiff locust
#

thanks

#

if i use card:get_id() on a face card does it return J/Q/K or 11/12/13

#

i think it's the latter but just to be sure

wintry solar
#

šŸ¤” which one is preferable here?

maiden phoenix
#

Menu bloat strikes once more

#

Id go with left

crisp coral
#

left

limpid flint
#

Why not just texture

crisp coral
#

i don't have to make "remove-textures-from-options" do i

limpid flint
#

Deck skins are textures too?

crisp coral
#

completely different ui so i think it's fine to be separate

limpid flint
#

But I think ppl are going to be confused

maiden phoenix
#

Remove-options-from-options

crisp coral
#

disagree

maiden phoenix
#

They literally installed the mod and it has a diff color

limpid flint
#

As in why don't they just all in "textures"

stiff locust
#

near means within 1 line right

#

in the context of an error message

#

also is there a way I can check the stake sticker for a specific joker

wintry solar
#

Because I cba reimplementing the deck skins stuff into my nice new shiny ui when the current one works fine

brisk rose
stiff locust
#

/halfjoker

cursive ocean
#

Is there a way to generate lovely patches from something like a diff? Or do you have to write them manually? And how would you load a patch in your mod?

stiff locust
#

you put the patch in that file

gaunt thistle
#

it would be nice to just support diffs but they get complicated when you want to apply them out of order

stiff locust
cursive ocean
#

Sweet, thanks imma give it a go

#

holy crap it works

#

well. almost

#

I think what I'm trying to do might conflict with other patches. Since the line given in the error doesn't seem to make sense for what the error actually says

stiff locust
#

go to the mods folder and find the lovely folder

#

and you can find the lua files that were patched, they get dumped after a crash

#

the error lines should line up with these lua files

cursive ocean
#

sweet

stiff locust
#

you can also find every crash log in there

#

the dump is only the most recent crash iirc

cursive ocean
#

Thanks šŸ˜„ At least I see what's going wrong now

stiff locust
#

yeah that's a good thing

#

i wish I knew where my error was

#

there's one more { than } in my code

#

and I don't know where it is and the code won't tell me where it is

#

and it crashes

#

so

cursive ocean
#

thanks for da help

slender egret
#

Ok so this might be weird but a friend of mine who is also my comp sci tutor just gave me an assignment to mod balatro. Is there anything I should know before I start to tackle the impossible?

tepid sky
stiff locust
#

it's actually pretty easy if you have any coding knowledge especially if you learn it properly

#

I jumped straight into the deep end and I'm getting functional content out

slender egret
slender egret
#

I have some programming knowledge in Java and Python but nothing too crazy

tepid sky
#

(Still have none but that don't matter)

stiff locust
#

you have to be very very careful with the placement of your ends

#

the lack of required indentation and the specific end placements is the stuff that gets me all the time

stiff locust
slender egret
#

Alr- sounds good

stiff locust
#

also one more thing

#

since balatro modding is open source

hardy viper
#

$5 ill make the mod for you /j

stiff locust
#

if you see a mod that does something you wanna do

#

go look at the code

#

go borrow their code

slender egret
hardy viper
#

thats a bargain fr

stiff locust
#

also what are you gonna mod

#

did they say anything specific or was it open ended

slender egret
#

Well they said to just change the names of the hands and if possible to code in the scoring to show before the hand is played

#

The second one was just one of his complaints with the game lol

stiff locust
#

that first one is pretty easy

slender egret
#

Yeah it’s just changing some text in the files

#

The second is tougher

tepid sky
#

2nd one already is a mod for right?

stiff locust
slender egret
#

Lovely patch?

hardy viper
#

because it lets you do that iirc

stiff locust
#

or that, yeah

#

lovely patches are pretty easy

tepid sky
#

if you know how šŸ¤·ā€ā™‚ļø

#

but thats with everything

stiff locust
#

it's not hard to figure out

wintry solar
#

you can't lovely patch loc files

stiff locust
#

oh you can't

#

?

wintry solar
#

not unless it changed recently

stiff locust
#

i see

#

i guess you'd use the steamodded method then

slender egret
#

lol he said I should do it through melonlpader

hardy viper
#

wait

#

melonloader is

stiff locust
#

okay but steamodded is better

hardy viper
#

unity

#

huh

#

balatro is NOT a unity game

slender egret
#

I KNOW

hardy viper
#

😭

stiff locust
#

what the hell

royal ridge
#

i'm not sure how to feel on required indentation
on one hand it is so dumb, i hate whitespace being important
on the other hand it's like, why am i hating it, i'll indent it properly anyway

slender egret
stiff locust
#

it's very easy to argue with him in this case

wintry solar
#

he sounds like he doesn't know what he's talking about in this case

slender egret
#

I know I just told him that it’s on lua

stiff locust
#

the engine is called love2d right

slender egret
#

But he’s working rn so 🤷

wintry solar
stiff locust
#

love2d ~= unity

#

oh yeah the symbol for not equals is ~= and not != and it annoys me

slender egret
#

Ok so what I need to do is download steammodder

#

And just get started

wintry solar
#

just got the eternal. rental and perishable stickers to go I think

brisk rose
#

also, my mod's name is too long, lol

limpid wing
slender egret
#

I’m sending this to my boyfriend

brisk rose
#

hehehe

#

Obviously not meant derogatorily. I mean the "Gay" in my name isn't just for show

limpid wing
#

Balacord Playing Car

brisk rose
#

I should just wite it in text speak

#

Pr Rcoon's Frtne

#

*giggles*

limpid wing
#

Or racoon's fortune

brisk rose
#

Well that kinda loses the wordplay

brisk rose
wintry solar
#

I thought we'd made it so it didn't cut off

#

maybe that got lost in a dead branch somewhere along the way

brisk rose
#

No Laughing Matter works? which feels almost as long

#

well I guess I only have 2 letters cut off

#

so that scans

#

I'd love to do Poor Coon's Fortune, but that specific abbreviation of raccoon has unescapable unfortunate connotations in most contexts.

brisk rose
#

Can't see any reason for them in the actual images

maiden phoenix
#

Is there a vanilla or SMODS function to copy an Object item?

cursive ocean
brisk rose
#

I had hit reply to you about something different and forgot to clear it

#

but thanks :3

cursive ocean
#

šŸ˜„

slender egret
#

hey I cant find the mods folder in my balatro game directory

brisk rose
silent pawn
#

Users/Appdata/Roaming/Balatro/Mods

#

i think

brisk rose
#

yeah I think in Windows the %appdata% is a shortcut there

silent pawn
#

yea %appdata% for roaming

brisk rose
#

been a while wince I've used the old winders

silent pawn
#

what do you use arch or smt

#

id use linux but games support is so bad

slender egret
#

yeah I dont see appdata anywhere

#

the folder is blank when I open it

brisk rose
brisk rose
tepid crow
#

press win+r and type %appdata%

slender egret
#

yeah I got it

#

didnt realize its hidden by default

silent pawn
#

its a setting somewhere on file explorer

#

oh you got it nvm

brisk rose
#

not like linux doesn't

#

I'm just so used to never actually hiding hidden files

silent pawn
#

what is the point of hidden files if you can just still see them

brisk rose
#

to protect the user from themselves, lol

silent pawn
#

true

#

yea i guess its like a dont touch unless you know what you are doing thing

brisk rose
#

it's just easier on linux. to hide a file or folder. just name it starting with '.'

#

and to show hidden stuff it's just a right click checkbox in the file manager

#

my modpack is technically in a hidden folder, lol

#

all 3 of these are just in "/home/[me]/.steam/steam/steamapps/compatdata/2379780/pfx/drive_c/users/steamuser/AppData/Roaming/Balatro"

#

but I have them bookmarked for obvious reasons

slender egret
#

ah

#

well I have it downloaded now, time to start

brisk rose
brisk rose
brisk rose
#

So, for the suits part of my mod, I kinda wanna have 3 options (besides off). One is they aren't in the base deck, but are in pool for standard packs and card-spawning spectrals, one is they replace the vanillia suits totallly in pool and in the deck, and one is where they coexist with the vanillia suits in an unwiedly 8 suit system (they'll be 4 of them even though only 2 are made so far). The last of which seems to be the default. How do I make the other 2 options?

slender egret
#

ok so, first thing imma do is just make a custom challenge. that shouldnt be too hard... right?

slender egret
brisk rose
#

well smods.suit exists, so I don't have to go quite so nuclear

#

and for the last one where it doesn't spawn in deck, but does in standard packs and stuff, that's basically what bunco does

#

it's only the example of replacing the standard suits in decks I don't really have an example for

slender egret
#

unless im stupid and that doesnt work

hardy viper
#

how 2 make madeline not look demonic

brisk rose
#

it'd be weird if jokers for hearts worked on ringtails in one mode but not another, for instance

slender egret
#

basically make the suit, then update the vanilla suit to be equal to the new one

#

so that either way you can have it

brisk rose
#

well 2 of the 4 suits are made and showing the default behavior of being added to decks. So instead of 4 13 card suits they have 6. I guess kinda what you're saying is to find how it loads those sets for the decks, and replace it with my suits, while also making sure they don't load as seperate suits

#

which was kinda also what I was thinking

slender egret
#

pretty much

wintry solar
#

look at my lovely list of things left to do on textures

brisk rose
#

To continue what I accidentally put here:
#1300294374575308983 message

So, I presume there's a standard deck generating function that adds all the suits? Because when I add the suits normally they seem to add on top of the standard ones, even in modded decks

brisk rose
wintry solar
#

I would assume so, though I haven’t done any work with suits

brisk rose
frosty dock
#

written and rewritten, actually

brisk rose
#

(makes sense, lol)

frosty dock
#

the second argument may be a table with an initial_deck field set, indicating the call is for generating a starting deck

#

just with this, you get the following behavior that can be configured for each suit:

  • false always [never appear]
  • false on initial_deck, true otherwise [in pool for standard packs etc., but not added to starting deck]
  • true on initial_deck, false otherwise [not in pool for standard packs etc., but added to starting deck (idk what this would be useful for)]
  • true always [always able to appear]
spare elk
#

or clowneline?

frosty dock
#

to exclude vanilla suits instead of your suits, just swap the functions around basically

#

you might take ownership of vanilla suits to set their in_pool to always return false, then they don't appear at all and you can do with your other suits as you please

brisk rose
#

what letter prefixes the keys for suits?

#

or are they just bare for vanillia suits?

molten ice
brisk rose
#

I think I understand the rest of it pretty well

tepid crow
frosty dock
molten ice
frosty dock
#

i think i just never reviewed that? I have to assume there's a reason for it to have been done this way but it might have been by mistake

brisk rose
#

guess it's a vanillia or steamodded table

molten ice
#

from a quick looks it's a part of the lovely patch injected by steamodded

frosty dock
#

nevermind, standard packs just don't respect the pool

brisk rose
slender egret
#

what to do about table index = nil?

molten ice
# frosty dock nevermind, standard packs just don't respect the pool

the function does seems to get called and is respected I think
It's a part of pseudorandom_element function (functions/misc_functions.lua) and it does work accordingly to the return value bc I ended up workaround it by making it checks for game-specific global flags instead that sets to false at the beginning of the game, but flips to true afterwards at some point
(the second line is just inspect(args))

brisk rose
#

They're not in standard packs or spawning at all now

molten ice
#

probably the same problem as I had with ranks earlier, actually.
I just modify bunco exotic suit in_pool function to check with prints and it seems like initial_deck was true in the standard pack as well, so even theirs would never spawn in the standard packs at all

brisk rose
#

Pretty sure I've seen them there?

#

weird

molten ice
#

could have been recent steammodded change?
I do remember buying exotic suits from shops as well, but apparently I tried it just now and shop playing cards from Magic Trick vouchers also triggers initial_deck = true as well

brisk rose
#

not a huge deal as the mode without them in initial deck is kinda an afterthought anyway

#

but not ideal

molten ice
#

I could test some theory rn, but if it works am I allowed to make pull request to the steammodded repo and/or at least report what happened here?

wintry solar
#

Yeah you can make a PR if you fix it šŸ‘

molten ice
#

thank you very much šŸ‘
I'm on it

brisk rose
#

would it be possible/not totally batshit, to use lua string matching to exclude jokers which mention the original suits in their description when playing without them?

slender egret
tepid crow
#

I think he's asking if he should, not how

brisk rose
#

indeed

tepid crow
#

anyway sounds like more of a usecase for the tag list

brisk rose
#

Keep in mind a blacklist is untennable with 1300 jokers

slender egret
#

hm, alr

brisk rose
#

nor would it make sense to rely on something that mod makers need to implement

brisk rose
#

worst case the game hangs for a couple seconds as it's iterating over all the jokers

#

nbd

tepid crow
brisk rose
#

ignore the mismatching UI display, lol

tepid crow
#

you mean in the bottom left?

brisk rose
#

yeah and it's also why the buttons are off the screen I think

molten ice
tepid crow
brisk rose
#

or even if they were all one one line (they would fit juding from the line above)

tepid crow
#

yeah cardsleeves is the mod that puts those first 4 suits on the same line

brisk rose
#

well if it did it for the next 4 we'd be all good :P

#

though I'd still want them gone probably. They're literally unobtainable with this setup

tepid crow
#

yeah I can do that if you want

brisk rose
#

yeah that'd be cool :3

frosty dock
#

tbf the UI should be changed to exclude suits that are both absent and not currently obtainable

brisk rose
#

yeah that'd be very useful

#

tbh bunco exotics don't show up there

#

so it must only be the vanillia suits that always show up

tepid crow
#

unobtainable suits are hard to quantify though

#

wouldn't it only be decks that start with that specific suit?

brisk rose
#

I mean all decks start with all initial_deck suits, unless otherwise configured

frosty dock
brisk rose
#

yeah makes sense

molten ice
#

bunco's suit has hidden = true property and iirc that's read by the deck preview UI so you could probably take ownership of the vanilla suit and adds them, but if you managed to zero out the suit, it would disappear from the HUD as well

wintry solar
#

Would it check for the existence of them in your deck first?

brisk rose
#

yeah I can just add that

wintry solar
#

I could see a situation where people create a suit that can only be accessed from consumables

brisk rose
#

I already took ownership to remove them from the pool

molten ice
#

I noticed that when I had to completely rewrite deck preview UI for my own mod to support it but for rank lol
(ended up really messy though so I don't think I can release it by itself for public)

frosty dock
#

right, hidden exists, I actually forgot

#

i guess we can hide if no cards of that suit are present and either hidden is set or in_pool is returning false

brisk rose
frosty dock
#

I'll still add that, hidden keeps its current functionality

#

oh also

tepid crow
#

wouldn't only using hidden allow for more control?

frosty dock
#

should steamodded use the 4-wide tally boxes by default if there's more than the base 4 suits?

brisk rose
frosty dock
brisk rose
#

so i don't think it matters

tidal ice
frosty dock
#

it shouldn't hide while in deck either way

brisk rose
tidal ice
#

Amazing

brisk rose
#

part of my StupidSuits

tepid crow
brisk rose
brisk rose
tepid crow
#

if someone wants the suit indicator to show

brisk rose
#

I guess control to clutter

tepid crow
#

setting hidden=false won't always make it show, which is confusing

brisk rose
#

but I guess that's just fine

brisk rose
#

and for aesthetics I can see wanting it

tepid crow
frosty dock
tepid crow
#

agreed

brisk rose
#

my ass reminding people my shitty suits exist even if they aren't using them (as long as they have that part of the mod enabled)

frosty dock
#

not too keen on altering vanilla UI when nothing's changed by mods about it, so I'd rather keep 4 suits on two rows

brisk rose
#

also maybe fix mod badge truncation

frosty dock
#

5/6 suits also look better if balanced, so I might account for that

tepid crow
brisk rose
tepid crow
#

DISPLAY_NAME

brisk rose
#

oh lol

tepid crow
#

I doubt it'll fix any truncation, but you can at least set some sort of acronym

#

if that's not good enough you can ask aura why it truncates (I'm assuming it's a font size issue)

brisk rose
#

nah same thing

lucid umbra
brisk rose
lucid umbra
#

ah

brisk rose
#

they will be real extra suits

lucid umbra
#

any mod you'd reccomend with extra suits otherwise?

brisk rose
#

and there'll be 4 of them

lucid umbra
#

i played a long time ago with a old version of the game

#

with the 60 suit mod

brisk rose
brisk rose
lucid umbra
#

i know that

#

but i need a uptodate version and cant find it

#

-_-

brisk rose
#

SixSuits is updated

#

download the code, not the release

lucid umbra
#

thank you

tidal ice
#

wait quick question would I be able to actually make card skins for entire suits (without altering jokers and other things), because I wanna be able to do that rather than make new suits

brisk rose
tidal ice
#

yeah

brisk rose
tidal ice
#

oki doki, pretty cool

wintry solar
tepid crow
#

coonie says it still truncates

brisk rose
#

Yeah it showed up the same

tepid eagle
#

add another badge underneath the mod name one that says "ne" /j

brisk rose
#

Lmao

timid parrot
#

I was asking about this earlier, but what are good ways to test stuff that require RNG to find in a normal run? (jokers, blinds, consumables, etc.)

brisk rose
#

You can bring up the collection with the esc menu and hover over things and press 3 to spawn them

timid parrot
#

thanks

wintry solar
#

anyone up for proof reading some docs and doing some preliminary texture testing?

timid parrot
#

yeah maybe, what for?

tepid crow
#

sure, I have a bit of time

wintry solar
#

wilson where has the dog gone

rough furnace
#

he's taking a break

#

don't worry about it

timid parrot
#

is there a way to log something to the console for debugging purposes?

mossy lake
#

I had a question about mod development, i want to make simple integer changes to the game to experiment with a balance change mod . how reasonable/simple would this be ?

tepid crow
timid parrot
#

thanks

#

yep that helped me find my problem

rough furnace
#

Also DebugPlus lets you see console in game which is fairly convient

timid parrot
#

how does the game store the player's current jokers?

#

oh it's G.jokers.cards not G.jokers isn't it

rough furnace
#

yeah

#

G.jokers is the area and it stores more stuff than just the jokers itsel

#

like the max size,

timid parrot
#

makes sense

#

thanks

#

and now I have a version of the Joke that punishes you in a way that isn't intentionally unbalanced

rough furnace
#

does this respect eternal compatability?

timid parrot
#

yes

rough furnace
#

nice

timid parrot
#

yeah I just tested it with a mixture of jokers that should and should not be able to become eternal

wooden nexus
#

(at least the suits)

plain wyvern
wooden nexus
#

What the

plain wyvern
#

big issue of a mod im working on

wooden nexus
#

I did not comprehend that at first lol

plain wyvern
#

so basically

  • the blind has its own deck
  • what you're supposed to score is your hand's score minus the blind's score (but due to me not understanding the way events are laid out you end up with some bullshit like this)
  • the blind picks random cards from its deck atm lmao
  • unrelated but i have cryptid installed
#

and i have grown severely angered at the way score is calculated guiguidisintegrates

plain wyvern
#

this is normal trust me (it isn't defluenceur)

hybrid iris
#

wait you said test

#

whatever im down for tasting and testing

silent pawn
timid parrot
# mellow sable The Half-Joke

well the joke's on me because now I'm trying to make it display the actual score that you need to exceed for the effect to trigger but idk how to access the variable for how many chips you need to beat the blind

mellow sable
#

It’s calculated based on a few variables

#

I forgot exactly which because it’s been a while since I coded Blinds, but it’s the variable for the base ante score times the multiple of the base the blind has

#

could also use G.GAME.blind.chips if you’re in the blind

timid parrot
#

is it get_blind_amount(G.GAME.round_resets.ante)?

#

for the base?

#

ok I feel like I'm doing something wrong

        loc_vars = function (self)

            self.vars = {""..(get_blind_amount(G.GAME.round_resets.ante) * self.mult * G.GAME.starting_params.ante_scaling * 1.5)}
            return self.vars
        end,
primal robin
#

You should return { vars: { ... } } in this function

timid parrot
#

strange

#

cuz it's working for my collection_loc_vars

        collection_loc_vars = function (self)
            self.vars = {"{3X Base}"}
            return self.vars
        end,
timid parrot
#

thanks

vague island
#

yall know what i'm doing wrong? (Im trying to make this joker give 2x mult per "j_fnj_gerald" when scoring a king

    calculate = function(self, card, context)
        if context.setting_blind and not (context.blueprint_card or self).getting_sliced then
            local geralds = SMODS.find_card("j_fnj_gerald")
                local geraldcount = #geralds
            end
        if context.individual then
            if context.other_card:get_id() == 13 then
                if geraldcount then
                    for i = 1, geraldcount do
                        message = '._.'
                        Xmult_mod = card.ability.extra.Xmult
                    end
                end     
            end
        end
    end,
}
#

bruh

#

BRO WHY ARE CODEBLOCKS NOT WORKING

#

RAHHH

#

bro

brisk rose
vague island
#

oh ok

#

b r u h

#

wait no im dumb

#

noper

tepid crow
#

are you like... escaping the backticks?

brisk rose
#

yall know what i'm doing wrong? (Im trying to make this joker give 2x mult per "j_fnj_gerald" when scoring a king

 lua
    calculate = function(self, card, context)
        if context.setting_blind and not (context.blueprint_card or self).getting_sliced then
            local geralds = SMODS.find_card("j_fnj_gerald")
                local geraldcount = #geralds
            end
        if context.individual then
            if context.other_card:get_id() == 13 then
                if geraldcount then
                    for i = 1, geraldcount do
                        message = '._.'
                        Xmult_mod = card.ability.extra.Xmult
                    end
                end     
            end
        end
    end,
}
brisk rose
#

It's weird

tepid crow
#

yall know what i'm doing wrong? (Im trying to make this joker give 2x mult per "jfnj_gerald" when scoring a king

    calculate = function(self, card, context)
        if context.setting_blind and not (context.blueprint_card or self).getting_sliced then
            local geralds = SMODS.find_card("j_fnj_gerald")
                local geraldcount = #geralds
            end
        if context.individual then
            if context.other_card:get_id() == 13 then
                if geraldcount then
                    for i = 1, geraldcount do
                        message = '..'
                        Xmult_mod = card.ability.extra.Xmult
                    end
                end
            end
        end
    end,
}
brisk rose
#

What did you do different?

tepid crow
#

literally copy-pasted your message

brisk rose
#

Huh, maybe a mobile bug? Idk if Average is on mobile too atm

#
Test code block
#

No that works

#

Stupid discord

mellow sable
#

lol

#

oh I think I saw the issue

#

it's using the underscores as text formatting, overriding the code block

#

silly discord

tepid crow
#

underscore formatting shouldn't cross
multiple
lines

#

oh

#

it does

#

šŸ¤”

#

discord preview is a liar

mellow sable
#

Code block should take precedence

#

But it doesn’t

tepid crow
#

_```lua_
code block should also take precedence yes
```

turns into

```lua
code block should also take precedence yes

#

OH

brisk rose
#

Idk why it just worked to copy my message, lmfao

tepid crow
#

your message already had the italics applied so I couldn't copy them, I think

#

or it's a mobile thing idk

brisk rose
#

Lmao weird

spare elk
#

is there a way to make --- MOD_DESCRIPTION have multiple lines

brisk rose
#

I guess stylistic line breaks aren't accounted for

spare elk
#

i mean yeah that makes sense but i mean
doing
something
like
this

#

oh

#

shame

#

i guess with enough spaces it'd roll over?

brisk rose
#

That's a bit messy but it should

#

Dues just putting "/n" not work?

tepid crow
#

it's usually \n

spare elk
#

oh i don't know coding jargon maybe it does

brisk rose
#

Yes, mobile brainfart

brisk rose
spare elk
#

the excessive spaces don't work anyway

#

doesn't work, it just says "bunch of stupid stuff \n Credits: \n Miser [...]"

#

doesn't actually line break

tepid crow
#

yeah I think I tested it myself too before, it doesn't work

spare elk
#

unfortunance

nocturne garnet
spare elk
#

oooh

#

funky

timid parrot
#

that's a neat idea

#

kinda like the hook, but harder unless you need those cards to make hands in which case it's marginally easier

timid parrot
#

Anyone know of any good tutorials for writing my own injections? I have I feeling I’m gonna need to do that sooner or later

rough furnace
#

with lovely?

timid parrot
#

Yeah

rough furnace
crisp coral
rough furnace
rough furnace
#

I seem to have gotten the game stuck

#

oh hmm

#

my watcher might be implemented wrong

stiff locust
#

how does balatro refer to the remaining number of hands

rough furnace
#

G.GAME.current_round.hands_left

#

(the api will not look like this when done)

#

I'm eepy now but will work on this more later

timid parrot
#

the agony of forgetting a parameter when redefining a function and wondering where the hell nil came from

brisk rose
#

#1298894429159166043 message
Anyone who's interested in my suit mod, and wants to vote on default handling of the new suits, there's a poll here

#

y'all do know this isn't Bunco and these will all be options, including just turning the suits off, right?\

#

:P

#

In any case, I'll respect this poll, however it turns out. It very well may have different defaults when part of my mod pack though, lol. Because that last option's one I'd personally never use

brisk rose
#

it'd be really nice if someone has the basic set of suit jokers already in smods 1.0 format (any sinful and all the stone/gems) because I'm pulling a flounder for my mod and will be reusing those 4 times over, lol

lucid sun
#

sorry i need another set of eyes on this, getting unexpected symbol near '}' on line 265 and cant figure out why šŸ¤·ā€ā™‚ļø

brisk rose
lucid sun
#

yep, lmao. thank you

brisk rose
#

no worries, very easy to miss stuff like that

brisk rose
#

@wintry solar I'm right in thinking this is an odd stylistic/workflow choice, right? (context is unported 0.98 mod)

wintry solar
#

yeah that's what 0.9.8 code tended to be like

brisk rose
#

really with the seperation like that? Guess I got lucky with DeFused, lol

#

Fusion was written 'normally'

wintry solar
#

it was so you could iterate over a set of them and only need one call of SMODS.Joker, this one doesn't seem to do that though

brisk rose
#

I know some people still use this style, and it has its benefits, it's just hard to work with for a total amatuuer who didn't write it and prefers a doifferent style

wintry solar
#

cryptid uses this style still

#

I'm not keen on it

brisk rose
brisk rose
#

wait I can read those commit names

#

Malverk it is? I presume that's also Icelandic

#

Yeah 'Painting'

#

Fitting name

#

@wintry solar are you Icelandic, or just a fan of the language?

wintry solar
#

neither, I was just looking for interesting translations of magic to start with 🤣

#

turns out icelandic has some interesting sounding words

brisk rose
#

ah lol makes sense

wintry solar
#

I think it's nearly ready to release, just making up a few examples

brisk rose
#

and yeah it's unsprising the closest living relative of the language of the vikings is rather poetic and magical sounding

brisk rose
#

and very awesome

#

I'll probably finally use texture packs now, lol

wintry solar
#

it's in the modding channel somewhere

#

I'm waiting for permission to use it as an example šŸ¤ž

brisk rose
#

besides the self.ability.name part, which I'm pretty sure isn't needed as the calculate function can just be in the joker definition, what, if anything needs to be changed for this for 1.0?

narrow pollen
#

and define card in between self and context

#

yes, even put card = card

brisk rose
# narrow pollen yes, even put `card = card`

So for "Danger Stick" the version of this joker for my Ringtails suit, it'd be like this?

calculate = function(self, card, context)
    if context.cardarea == G.play and not context.repetition and context.other_card:is_suit("Ringtails") then 
        return {
            chips = card.ability.extra.chips,
            card = card
                     }        
        end
 end
narrow pollen
#

yep!

brisk rose
#

yeah, these won't be too hard to port at all :3

#

thank you

narrow pollen
#

yeah, i have

#

absolutely no idea how to use the new self variable

#

doing it this way works. i don't question it.

cursive ocean
#

When using find_joker or find_card, does the returned joker know if it's affected by blueprint?

maiden phoenix
#

I dont think they account for bp

cursive ocean
#

i might be on a wild goose chase anyway. im modifying the lucky cards odds with a joker. got it working, including multiple copies amplyfing the effect, via a patch, but don't know how i would account for blueprint

#

a previous attempt was modyfing the game probability itself and then resetting it after calculate was done, but multiple copies made the probability balloon over time

wintry solar
#

I’d imagine stuff like that generally isn’t blueprint compatible

cursive ocean
#

that's fair

wintry solar
#

You could definitely do it by modifying the value in your function though

#

Just need to increase in context.before and decrease in context.after

cursive ocean
#

yea it worked for one, saving the previous probability and resetting after. but when a second copy was present, the second reset didnt set it back to the original probablity; it was reset to what the previous card modified the probability to be

#
calculate = function(self, card, context)
    if context.before and context.cardarea == G.jokers and not context.blueprint then
      print("Hello fixed odds")
      local allAreLucky = true
  
      for _, scoringCard in ipairs(context.scoring_hand) do
         print(scoringCard.debuffed)
         if scoringCard.ability.name ~= 'Lucky Card' then
            allAreLucky = false
         end
      end
  
      if allAreLucky then
        self.ability.extra.triggered = true
        card_eval_status_text(card, "extra", nil, nil, nil, {
          message = "More likely!"
        })
  
        for k, v in pairs(G.GAME.probabilities) do -- this is what oops all sixes does
          G.GAME.probabilities[k] = v * self.ability.extra.increaseOddsTimes
          print(k .. " is now " .. G.GAME.probabilities[k])
        end

        allAreLucky = false 
      end -- end all are lucky
    elseif context.after and self.ability.extra.triggered then -- clean up after trigger to not inflate all probabilities forever
      for k, v in pairs(G.GAME.probabilities) do -- reset probabilities
      -- something is fucked if theres another instance of this jimbo
      print("RESET PROBS")
       G.GAME.probabilities[k] = v / self.ability.extra.increaseOddsTimes
       print(k, " after is ", G.GAME.probabilities[k])
      end
      self.ability.extra.triggered = false -- reset state
    end -- end if context 
  end -- end calculate 

was the original code

#

now it's this mess

[[patches]]
[patches.pattern]
target = 'card.lua'
match_indent = true
pattern = """
if self.ability.p_dollars > 0 then
    if self.ability.effect == "Lucky Card" then 
        if pseudorandom('lucky_money') < G.GAME.probabilities.normal/15 then
            self.lucky_trigger = true
            ret = ret +  self.ability.p_dollars
        end
    else 
        ret = ret + self.ability.p_dollars
    end
end
"""
position = 'at'
payload = """
if self.ability.p_dollars > 0 then
    if self.ability.effect == "Lucky Card" then
        local prob = 15
        if next(find_joker('j_dogmod_fixed_odds')) then
            prob = prob / (#find_joker('j_dogmod_fixed_odds') * 2)
        end 
        print("probabilities", prob)
        if pseudorandom('lucky_money') < G.GAME.probabilities.normal/prob then
            self.lucky_trigger = true
            ret = ret +  self.ability.p_dollars
        end
    else 
        ret = ret + self.ability.p_dollars
    end
end
"""
stiff locust
#

i have encountered a very annoying problem

#

this code returns nil at ipairs(G.play.cards) which doesn't make any sense to me because i have other jokers under the same contexts that do not return nil at this point

#

I don't understand why this one specifically returns nil

cursive ocean
#

It's an underscore in the pic, not a . ?

stiff locust
#

oh my fucking god

#

you're right it's an underscore

cursive ocean
#

easy to get blinded staring at something like that

stiff locust
#

yeah

wintry solar
#

How are you changing it?

brisk rose
#

that totally isn't just 2 open source emojis and some random bullshit

wintry solar
#

How are you changing it?

#

Internet is very spotty here, but I’m assuming you are either adding or multiplying the existing value, so in the after just do the inverse operation instead

narrow pollen
#

you know something, @cursive ocean?

#

i did that exact thing in my personal mod

#

with one-armed bandit

#

feel free to take a look in my code for that! ^^

cursive ocean
#

could you link it? @narrow pollen

narrow pollen
cursive ocean
#

Interesting

cursive ocean
#

But if I don't care about blueprint, the patch approach should work the same, and won't conflict with any existing functionality. All done in place without modifying any global variables, which seems a bit cleaner

wintry solar
#

can you send the calculate function you had? that should 100% work

cursive ocean
wintry solar
cursive ocean
#

Theee resetting? With an "after" trigger?

wintry solar
#

ye

cursive ocean
#

ima try it out

#

No dice, with this code

calculate = function(self, card, context)
    if context.before and context.cardarea == G.jokers and not context.blueprint then
      local allAreLucky = true
  
      for _, scoringCard in ipairs(context.scoring_hand) do
         print(scoringCard.debuffed)
         if scoringCard.ability.name ~= 'Lucky Card' then
            allAreLucky = false
         end
      end
  
      if allAreLucky then
        print("All scoring cards are lucky")
        self.ability.extra.triggered = true
        card_eval_status_text(card, "extra", nil, nil, nil, {
          message = "More likely!"
        })
  
        for k, v in pairs(G.GAME.probabilities) do -- this is what oops all sixes does
          G.GAME.probabilities[k] = v * self.ability.extra.increaseOddsTimes
          print(k .. " is now " .. G.GAME.probabilities[k])
        end

        allAreLucky = false
      end -- end all are lucky
    elseif context.after and self.ability.extra.triggered then -- clean up after trigger to not inflate all probabilities forever
      print("reset probabilities")
      G.E_MANAGER:add_event(Event({
        trigger = 'after',
        delay = 0.3,
        func = function ()
          for k, v in pairs(G.GAME.probabilities) do -- reset probabilities
             G.GAME.probabilities[k] = v / self.ability.extra.increaseOddsTimes
             print(k .. " after is " .. G.GAME.probabilities[k])
            end
            return true
        end
      }))
      
      self.ability.extra.triggered = false -- reset state
    end -- end if context 
  end -- end calculate 
#

The result for one instance is

INFO - [G] All scoring cards are lucky
INFO - [G] normal is now 2
INFO - [G] reset probabilities
INFO - [G] normal after is 1

but for two instances

INFO - [G] All scoring cards are lucky
INFO - [G] normal is now 2
INFO - [G] All scoring cards are lucky
INFO - [G] normal is now 4
INFO - [G] reset probabilities
INFO - [G] normal after is 2

So it seems like the after is only visited once hmm

#

Something with the triggered flag?

wintry solar
#

oh

#

self should be card

#

self refers to the center object, which is shared across all cards, card refers to the actual card object

cursive ocean
#

ooo

#

yaaay

wintry solar
#

you don't need the event anymore either

cursive ocean
#

Even better

wintry solar
#

here we go!

rough furnace
#

If I wanted to modify the loc_txt of a joker (or well probably any center) on the fly, how would I go about doing that? I tried doing this

G.P_CENTERS.j_jam_buckleswasher.loc_txt.name = "late for dinner"
G.P_CENTERS.j_jam_buckleswasher.loc_txt.name_parsed = nil
G.P_CENTERS.j_jam_buckleswasher:process_loc_text()
``` but it crashes when hovering over the card
#

this process doesn't seem to remake the name_parsed

#

I also am not sure where this is created

#

tried grepping balatro and SMODS for _parsed but no luck

tepid crow
#

here's what I used to do at some point, but it's very clunky

local function reinit_localization(sleeve_center)
    -- only reparses the description text
    local set, key = sleeve_center.set, sleeve_center.key
    G.localization.descriptions[set][key] = sleeve_center.loc_txt
    local center = G.localization.descriptions[set][key]
    center.text_parsed = {}
    for _, line in ipairs(center.text or {}) do
        center.text_parsed[#center.text_parsed+1] = loc_parse_string(line)
    end
end
frosty dock
#

using key on loc_vars is probably better if it's not too dynamic, but it should be more consistent to just have it reparse everything unless that's too slow

rough furnace
#

Thanks I'll take a look. It can be a little slow, but preferably not slower than a second. I want to be able to make live updates to a joker so it's not super dynamic but it'll likely be run a handful of times per session

opal spade
#

you can just manually parse the the entries you're editing

frosty dock
lime trench
#

Hey did the new update change anything to how scoring calculations are done?

#

Bc I swear my code was working fine, but now it doesn't add the chip and the mult to the score

brisk rose
#

Is there a way to make wild cards only count as suits that are in_pool?

#

I mean it's obviously possible. Anything is. I just mean preferably without a lovely patch or me wanting to bang my head against a wall

rough furnace
#

You probably need a lovely patch

brisk rose
#

I presume one way would be to take_ownership of wild cards and rewrite their calculate function? Or are they hard coded enough where that'd be a pain?

edgy reef
#

in_pool was only added to places that generate things so the likely answer is no.

#

Wild card enhancement already operates manually for anything that isn’t handled with is_suit so take_ownership wouldn’t do much for this.

#

Either that or it was moved to any_suit which iirc doesn’t care for suit in_pool.

brisk rose
#

The more I think of it, the less it seems nessacary. With bunco or something installed all wild card flushes would be spectrums either way

#

And i plan to exclude jokers that effect vanilla suits when only mine are loaded and vice-versa

#

Wait... false

#

Dammit

#

Forgot you needed 5 suits for a spectrum

#

Though I also wasn't really planning to try to exclude the bunco suits?

#

So it shooould still behave pretty much as expected?

#

#1298894429159166043 message

Nearing the last chance to vote on default handling for the new suits in
#1298894429159166043
Note that all of these options will still be in the mod, this is just for default handling. Also note that at first all content will be related to the new suits

timid parrot
#

how do I store unique global state for a blind in a way that'll be saved? (i.e. I need the boss blind to do something exactly once and only when a condition is met)

rough furnace
#

like per run global or per boss instance global?

timid parrot
#

per boss instance

#

the boss ability for context

rough furnace
#

I belive you can just store objects on the blind object

timid parrot
#

so just self.spent = true or something like that?

rough furnace
#

try it and see

timid parrot
#

yep that worked. thank you

#

now to make sure this blind works with every single poker hand

tepid eagle
#

me when my drawn high card gets discarded 😨

rough furnace
#

me when my drawn high card gets discarded balatrojoker (I have burnt joker)

timid parrot
#

time for the 4oak test

#

it uh

#

didn't do anything

brisk rose
#

I presume you drew into a 4oak?

timid parrot
#

yeah

#

some further testing will be needed to figure out what went wrong

#

okay I found out what went wrong by the lack of debug statements

#

idk why self.spent is already true but it is

brisk rose
timid parrot
#

I didn't

#

anyway just gonna write a set_blind method that sets it to nil rq

brisk rose
timid parrot
#

well it... worked

#

but for some reason it discarded a 5oak instead of a 4oak

#

that's gonna be a pain to bugfix

lusty oracle
#

How can I start creating a mod for Balatro?

brisk rose
languid mirage
vagrant moth
#

I want to auto-Foil this card, using this code, some of it nabbed from Cryptid, but the auto-foiling doesn't work.

#

I also got this error while looking at the Collection with the cards inside

#

503 corresponds to a copy of "return { vars = { card.ability.extra.counter } }" for another edition.

#

Apparently I copied literally none of Meteor's auto-foiling code

vagrant moth
#

I narrowed it down to this code in Cryptid.

-- Literally just for the Overlay cards
function create_card(_type, area, legendary, _rarity, skip_materialize, soulable, forced_key, key_append)
    local card = Card(
        area and (area.T.x + area.T.w / 2) or 0,
        area and area.T.y or 0,
        G.CARD_W * (center and center.set == "Booster" and 1.27 or 1),
        G.CARD_H * (center and center.set == "Booster" and 1.27 or 1),
        front,
        center,
        {
            bypass_discovery_center = area == G.shop_jokers
                or area == G.pack_cards
                or area == G.shop_vouchers
                or (G.shop_demo and area == G.shop_demo)
                or area == G.jokers
                or area == G.consumeables,
            bypass_discovery_ui = area == G.shop_jokers
                or area == G.pack_cards
                or area == G.shop_vouchers
                or (G.shop_demo and area == G.shop_demo),
            discover = area == G.jokers or area == G.consumeables,
            bypass_back = G.GAME.selected_back.pos,
        }
    )
    if card.ability.name == "MASS_foilOverlay" then
        card:set_edition("e_foil", true)
    end
    if card.ability.name == "MASS_holographicOverlay" then
        card:set_edition("e_holo", true)
    end
    if card.ability.name == "MASS_polychromeOverlay" then
        card:set_edition("e_polychrome", true)
    end
    if card.ability.name == "MASS_negativeOverlay" then
        card:set_edition("e_negative", true)
    end
    return card
end```
#

But it still doesn't work

#

What do?

stiff locust
#

how does balatro refer to the number of remaining hands

brisk rose
brisk rose
stiff locust
#

what

#

oh I missed that

brisk rose
#

yeah thought you must've lol. It's easy to do when you aren't @'d

sick ferry
#

how to spawn specific joker with the create_card

brisk rose
lusty epoch
sick ferry
#

how to find key?

#

oh wait

#

nvm i got it

sick ferry
#

wait where do i put the key?

#

local card = create_card('Joker', G.jokers.rock, rock, 0, rock, rock, rock, 'rock')

brisk rose
sick ferry
#

wait how do i use that

brisk rose
# sick ferry wait how do i use that

Seems to be one of the many undocumented steamodded functions (unless I just missed it on the wiki)

Here's how it's defined in the code itself, if you can make any sense of it

#

Someone told me how it worked once, lemme see if I can find it

sick ferry
#

ok thanks

brisk rose
#

Apparently it's this simple

#

Also this is the format for keys, not what you were doing

#

I haven't heard of 'rock' so I presume it's from a mod, so would have a prefix. That's what "mc" is in the example

sick ferry
#

ahh ok

edgy reef
#

SMODS.create_card is functionally the same as create_card but since it’s a table instead of a regular function call you don’t need to specify everything.

frosty dock
#

thinking about steamodded's indexing functionality again... if we're going with an external launcher/updater that's surely post beta

#

so maybe we just merge what's there now of the index branch (for metadata files and a UI change that doesn't really belong there) and figure out the rest later?

edgy reef
#

If we think it’s best yea

frosty dock
#

also the PR has been open for 2 months, I don't really need it to diverge any further from main

edgy reef
#

Getting back into pretty bad PR backlog again.

#

At least the simpler bug fix changes got merged

frosty dock
#

we're feature freezing

brisk rose
#

lmfao, horrible timing for me to reiterate my feature request

#

but yay, finally beta

tepid crow
#

(oops sorry for the tag)

frosty dock
#

nws

crisp coral
#

šŸŽ‰ beta

plain wyvern
#

heck yeah

edgy reef
#

Rarity API is no longer in prison

#

Wait this birthed a 3 AM mod idea: this Issac mod but in Balatro whenever there’s a soul card.

maiden phoenix
edgy reef
#

Left draft last month

maiden phoenix
brisk rose
edgy reef
#

Idk maybe make the soul card’s gem grow arms

frosty dock
edgy reef
#

Whoops

#

I should probably just make that a global since it’s used in a few places whenever string vanilla rarities need accounted for

brisk rose
frosty dock
#

can't spot any other issues so I'll just merge, surely nothing will go wrong

crisp coral
#

surely

frosty dock
#

that leaves (besides stales) the deck skin PR being still in review and the tag list draft

wintry solar
#

Aure on a mad one spamming me with emails

frosty dock
#

lmao sorry

vagrant moth
#

Update: Selling function works, but the "apply edition to this card everywhere" thing does not. Will tinker further.

tepid crow
vagrant moth
#

it's not, don't worry

#

Code so far.
Purpose: These cards are supposed to have their respective editions EVERYWHERE, or at least, when you get them. Does not seem to work.

brisk rose
#

though idk why it isn't still working

tepid crow
#

^

#

and you should try printing the current name šŸ™ƒ

frosty dock
vagrant moth
#

...but how do I hook into set_ability?

brisk rose
vagrant moth
#

šŸ‘

brisk rose
#

could easily be mistaken though

frosty dock
#

but yeah, you just put the function on the joker object

vagrant moth
#

Probably not like this, then/

#

What new function am I supposed to add?

brisk rose
vagrant moth
#

šŸ‘

frosty dock
wintry solar
#

what are you trying to do?

frosty dock
#

set_ability = function(self,card) card:set_edition('e_foil',true) end,

vagrant moth
#

IT WORKS

brisk rose
vagrant moth
#

code for one of the cards

wintry solar
#

please stop with this horrible edition syntax

brisk rose
wintry solar
#

card:set_edition('e_polychrome', true)

frosty dock
brisk rose
#

ah very fair

limpid wing
#

I ask here because the smart people is here... Balatro mobile have a memory leak (buffer overflow???) Because is the only game i have what in a random moment GETS EXTREMLY laggy, and the game works bad, the motion, the movement, the animations work bads

#

And only happens with balatro

#

Other games work fine

primal robin
#

Even PC version have memory leak, most likely in shop

regal shoal
#

Hello everybody !
I don't understand, I have my lovely.toml at the root of my Mod folder : "../Mods/MyMod/lovely.toml" and it doesn't seems to be read when booting :/

wintry solar
#

does it have the header?

regal shoal
#

It does

#
[manifest]
version = "1.0.0"
dump_lua = true
priority = 0
#

And if you're talking about the mod:

--- STEAMODDED HEADER
--- MOD_NAME: MJST.LIB
--- MOD_ID: mjst_lib
--- MOD_AUTHOR: [MJST]
--- MOD_DESCRIPTION: MJST LIB
--- BADGE_COLOUR: F0AC14
--- PREFIX: mjst_lib
--- VERSION: 1.1.3
--- DISPLAY_NAME: MJST's LIB
--- PRIORITY: -100
#

Am I missing something ?

stiff locust
royal seal
wintry solar
#

why does it have name rather than key?

frosty dock
#

also why that font and not something for suitable for code?

wintry solar
#

also I find it an interesting choice generating a table assigned to a value rather than just a SMODS.Joker{table}

mellow sable
#

Change it to Comic Mono

brisk rose
#

wym by the font thing?

#

I just see a normal sans serif font in the screenshot

mellow sable
#

It’s not monospaced

mellow sable
brisk rose
#

oh fair enough i guess, I thought it might just be that

wintry solar
brisk rose
mellow sable
#

Looks like it used a config loading system like Cryptid, so local variable checks out

brisk rose
#

yeah, just not my style. trivial to change though ofc

#

for me I mean

#

however, what's less trivial for me is bulding it? there's just source and project files in the repo that I see

#

ofc I don't expect a deb or appimage, but an exe should still work in wine

royal seal
#

and yeah, I kind of just finished it and put it on Github, I'll see about making it easy to install

brisk rose
frosty dock
#

alright that's all non-stale/non-draft PRs taken care of

hardy viper
#

"blue_compat"

frosty dock
#

oh right, that leaves docs

wintry solar
#

do we address the little inconsistencies that crop up as we write docs?

#

like some objects using rate and some using weight?

frosty dock
#

those are definitely to be fixed

brisk rose
frosty dock
#

but we do have to be careful about what's actually the same concept. SMODS.Sticker's rate is a fixed chance on each shop item, which isn't how weights operate