#💻・modding-dev

1 messages · Page 23 of 1

shell timber
#

oh that looks cool

royal ether
#

i think if the top ones looked more '3d' it would look way better, but it already looks really nice as is

#

like if the pattern changes when it goes from front face to inside face

golden lake
#

btw here's how it looks like with transparency (not final)

royal ether
#

yea i understand xdd

#

its nice tho

#

are red & blue the main colours of homestuck

golden lake
#

no

#

i made it red and blue because balatro

royal ether
#

oh true

golden lake
#

main color of homestuck is green

royal ether
#

i was thinking "damn red & blue just like balatro no way"

maiden phoenix
#

Idk what you use but wouldn't it be better if this bit was behind the R?

golden lake
#

it was that before

zealous glen
#

I thought it was an intentional change lol

maiden phoenix
#

Uhm do you code in 0.9.8 or 1.0.0? If you code in 0.9.8 I'd recommend seeing how Codex Arcanum

maiden phoenix
maiden phoenix
zealous glen
#

I had checked uhhh Autumn Circus

#

But for some reason when I wrote it it didn’t work

#

But require worked so

zealous glen
maiden phoenix
#

Maybe you had the wrong path or something

golden lake
#

fixed layering

wintry solar
#

Looks neato, I feel the ace is sticking out a bit too far and personally would push it in a bit more but I can understand if it’s where the O should be

golden lake
#

chat am i just. making a website at this point

wild gyro
#

yes

royal ridge
#

SMODS.Sprite({key = "j_ccc_jokers", path = "j_ccc_jokers.png", px = 71, py = 95, atlas = "asset_atlas"}):register()
am i stupid or does this just not work anymore in recent smod 1.0.0 commits

#

(path is fine for sure, and i'm using j_ccc_jokers as key)

crisp coral
#

does not work

#

remove register

royal ridge
#

tysm

remote shell
#

how do i make a boss blind

#

actually i think i can just poke around in existing blind mods

#

i have no idea whats going on

remote shell
#

i havent even seen a tutorial for even starting to make a mod

slow ocean
storm pike
storm pike
wintry solar
#

why won't this inject? 😭

frosty dock
#

try with double quotes instead of multiline ones for the pattern

#

otherwise check you're giving it all of the line

wintry solar
#

nope, still doesn't work

#

I just get Applied 0 patches to card.lua in the console

#

huh, if I change it to the next line and before it works

frosty dock
#

jank alert

#

which lovely version are you running?

toxic crystal
wintry solar
#

0.5.0 beta 2

toxic crystal
#

"if self.edition or self.seal" should be enough

wintry solar
toxic crystal
wintry solar
#

can I use just the start of a line to get it to inject on the next line?

toxic crystal
#

oh good point

wintry solar
#

also I did have outdated reference files -_-

toxic crystal
#

idk actually

wintry solar
#

it's working now

#

thanks

gaunt thistle
#

the pattern patch operates on entire lines

#

at least iirc I may be dumb

toxic crystal
#

i'm gonna check then gimme a sec

gaunt thistle
#

idk I can ask the guy who made it if you want

wintry solar
#

I'll just test it

#

well removing half the string stopped it injecting so I'm guessing not

gaunt thistle
#

you need to match the entire line

#

with the pattern patch

wintry solar
#

can I match just the end?

gaunt thistle
#

with no whitespace either before or after

wintry solar
#

or does it parse by entire lines?

gaunt thistle
#

nope, has to be the entire line

wintry solar
#

cool cool

gaunt thistle
#

before with insert your payload before the matched line, after will insert after, at will replace the line

wintry solar
#

can you pattern match an entire block?

gaunt thistle
#

nope, you need to use the regex patch for that

worldly sapphire
#

is there a way i can create a check to see if i sold a joker?

mellow crag
#

hi guys

#

im tired

#

what have you been up to?

remote coral
worldly sapphire
#

how do create a check for a joker to make it knows when i sell another joker?

leaden belfry
#

the game will let every joker know by call joker:calculate({selling_card=true,card=card}), you just need react on it

#

you can search campfire in card.lua for an example

maiden veldt
#

is there a way for me to change what hex code the game calls for when running stuff like C:red and C:attention

frosty dock
#

there's a function loc_colour that defines the values you can use this way, when and if you want to add new ones. For existing ones, you just need to change the corresponding colors in G.C

#

So for {C:red}, you would want to change G.C.RED

maiden veldt
#

would G.C.RED be in globals.lua?

frosty dock
#

you should just be able to access it in your mod's code

maiden veldt
#

thanks, i'll try and figure it out

worldly sapphire
#

just need a way to make it activate when i play a hand

wintry solar
#

hmmmmmm

leaden belfry
#

if context.cardarea == G.jokers then

#

you can search this in source for example of what to do.

zealous glen
#

I made a spreadsheet to keep track of ideas for a mod

manic nest
#

Yo victin can’t send code cuz im at work but do you have any idea why id be getting this error @zealous glen

#

Been looking over it and I just can’t figure it out

worldly sapphire
#

i played a card after i upgraded the joker and i got this

zealous glen
worldly sapphire
# zealous glen Syntax error
        if context.selling_card and (context.card.ability.set and context.card.ability.set == 'Joker') and (context.card ~= self) then
        card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_upgrade_ex')});
        self.ability.mult = self.ability.mult + self.ability.extra
        end
       return {
        message = localize('k_mult_ex'),
                colour = G.C.RED,
                card = self,
                mult_mod = self.ability.mult
       }
    end```
#

this is how the code is

zealous glen
#

are you sure you want the return outside the if?

frosty dock
#

; does nothing iirc

zealous glen
#

(as in, delete the ;)

zealous glen
manic nest
frosty dock
#

it's only useful for putting multiple statements in one line

zealous glen
#

by thunk even

frosty dock
#

but no "practical" use

zealous glen
frosty dock
#

(I don't consider minifying practical)

worldly sapphire
zealous glen
worldly sapphire
#

like, i want the joker to get upgraded by selling jokers, then when i play a card it applies the mult to the counter

zealous glen
#

You don't need the return for that

#

You'll probably need a return to make it apply the mult, but not for that

worldly sapphire
#

let me send the code

manic nest
#

This is the code I posted yesterday I changed local_def to loc_Testcard and fixed the sprite issue I had at least I think I did but then it brought up the main.Lua error

worldly sapphire
#
SMODS.Jokers.j_sharpener.calculate = function(self, context)
        if context.selling_card and (context.card.ability.set and context.card.ability.set == 'Joker') and (context.card ~= self) then
        card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_upgrade_ex')})
        self.ability.mult = self.ability.mult + self.ability.extra
        end
       return {
        message = localize('k_mult_ex'),
                colour = G.C.RED,
                card = self,
                mult_mod = self.ability.mult
       }
    end```
#

this is the version with the code you replied to me

zealous glen
#

Try writing
```lua
YOUR CODE HERE
```

#

@manic nest

zealous glen
worldly sapphire
#

do i just delete the {} part?

worldly sapphire
manic nest
#

Ah I see

#

And just put that from the top of the code to the bottom?

worldly sapphire
#

ok the joker works

#

now i need to make it give the mult

zealous glen
zealous glen
worldly sapphire
#

probably another if?

#

do i add the context in here?

#

or do i create a if before or after?

thorn bough
#

can you no longer directly add the the game localization tables in staemodded 1.0.0?

frosty dock
#

you can define a function SMODS.current_mod.process_loc_text() and have your logic for adding localization not bound to a specific object in there, and it will get re-injected when necessary

thorn bough
#

i see, Thanks!

frosty dock
#

np^

thorn bough
#

now to deal with the next issue, jimbo infection

frosty dock
#

jimbofection

#

ah yes

#

if I can be of any help, individual files for each sprite is discouraged, so these are no longer recognized by the API

#

if you want your own atlas, you have to specify it

thorn bough
#

is there no easy way to keep them separate?

frosty dock
#

you can still create each atlas and pass its key all the same

worldly sapphire
zealous glen
#

though I'm still in 0.9.8

worldly sapphire
maiden phoenix
frosty dock
#

yeah you just shove that in SMODS.current_mod.process_loc_text

maiden phoenix
#

Ok 👍

random sleet
#

anything you change in G.localization needs to be in a process_loc_text somewhere

frosty dock
#

it's quite simply needed to have any chance of supporting localization at all

random sleet
#

either on a game object or the whole mod

zealous glen
# worldly sapphire idk what to do

The game calls the function calculate_joker at specific moments. You don't know when the function is called a priori, so you need to find out while the function is executing and program accordingly. For example, think of the Jokers you've already coded and think of every time their calculate function is called and they have nothing to do.

frosty dock
#

just to clarify, the reason why it doesn't work at all in 1.0 versus only after a language change is that with the current timing of mod loading, the reference that G.localization holds at load time falls out of use during injection, since set_language needs an additional call to be able to load modded languages right away

maiden phoenix
#

Do I need to call the function for each line?

frosty dock
#

terms are being mixed up here

#

there's two things

#

SMODS.process_loc_text is a helper function that handles registering the loc text for the currently selected language if supported

maiden phoenix
#

I'm looking at the function itself and I'm a bit confused 😅

frosty dock
#

you don't need to use this function if you don't plan to support more than one language

wintry solar
#
function poll_edition(_key, _mod, _no_neg, _guaranteed, _options)
    _mod = _mod or 1
    local edition_poll = pseudorandom(pseudoseed(_key or 'edition_generic'))
    if _guaranteed then
        if edition_poll > 1 - 0.003*25 and not _no_neg then -- > 0.925
            return {negative = true}
        elseif edition_poll > 1 - 0.006*25 then -- > 0.85
            return {polychrome = true}
        elseif edition_poll > 1 - 0.02*25 then -- > 0.5
            return {holo = true}
        elseif edition_poll > 1 - 0.04*25 then -- > 0
            return {foil = true}
        end
    else
        if edition_poll > 1 - 0.003*_mod and not _no_neg then
            return {negative = true}
        elseif edition_poll > 1 - 0.006*G.GAME.edition_rate*_mod then
            return {polychrome = true}
        elseif edition_poll > 1 - 0.02*G.GAME.edition_rate*_mod then
            return {holo = true}
        elseif edition_poll > 1 - 0.04*G.GAME.edition_rate*_mod then
            return {foil = true}
        end
    end
    return nil
end

how is best to let people define their own weights for random edition chance?

frosty dock
#

then, there's a process_loc_text function you can define on your mod object

#

this function will get called on each injection

wintry solar
#

just let people input a float to the edition creation?

zealous glen
#

Or you can convert from this method to weights

frosty dock
#

seems reasonable, I would just be concerned with making sure it doesn't screw with vanilla RNG if nothing else is loaded

zealous glen
#

But preserving vanilla RNG seems tough if you convert it to weights? maybe?

#

I guess only if you mess with the order

wintry solar
#

yeah I plan on coding it so it'll iterate through in order of probability

maiden phoenix
frosty dock
zealous glen
frosty dock
#

I'm talking about the object that holds information on your mod

zealous glen
#

You might want a rare effect but for it not to override Negative

maiden phoenix
zealous glen
#

Using weights makes the order irrelevant, I think I'm partial to that implementation

wintry solar
#

is there a base effect that can add ANY edition?

#

oh I suppose just the shop spawn

zealous glen
#

Also packs

frosty dock
maiden phoenix
#

Man why am I overcomplicating things...

frosty dock
#

sorry if I made that sound more complicated

maiden phoenix
#

Not it's my fault

#

Thanks for the help as always 👍

frosty dock
#

no it's tough when there are no docs, I really need to get on them

random sleet
maiden phoenix
#

It's my own decision to start updating my mod to v1.0.0 without ressources so I can only blame myself 😅

frosty dock
random sleet
#

oh is it? 😅

frosty dock
#

SMODS.process_loc_text parses language information, using that should be enough in most cases

wintry solar
#

so current weights would be 1:2:6.6:13.3 (negative:poly:holo:foil)?

frosty dock
#

while on the topic, why not drop an explanation of this here...

  • we first need to find the target loc text. If provided a table, check if an index for the current language exists, else use default or en-us keys if present. If provided a string or the previous check didn't succeed, use the loc_txt directly
  • optionally, if loc_txt is still a table and a key is supplied, index by that key. this exists to allow languages to be top-level keys and not have to be repeated for each entry
  • at this point, if we end up with an empty table or something that is neither a string or a table, do nothing. else copy the target to the ref table
wintry solar
#

wait no, it'd be 3:3:14:20:960 (N:P:H:F:Base)

#

but then poly is 6 is it cant be negative

#

right?

zealous glen
maiden phoenix
#

I was wondering Aure, since calculate and friends are all inside the SMODS.Joker table, is it valid to use self as the first parameter instead of card as a good writing convention?

zealous glen
#

Which should be approximately equivalent to testing if the sampled value x is such that x > 1 - (w1 + … + wi) / (total_weight)

#

minus rounding errors

#

Sorry, let me fix that to make it equal to vanilla

#

There

#

That might be a bit tricky to check since IIRC different operating systems round differently

wintry solar
#

should I code in base card weight as 960?

zealous glen
wintry solar
#

I'm just thinking of making it so you can choose which editions are included in the random selection, but would that screw up the weights?

#

so if I selected base, foil and holo, they'd be out of 996

#

although I guess the ratio of 20/996 and 960/996 is the same as 20/1000 and 960/1000

zealous glen
zealous glen
wintry solar
#

yeah I can make it so you can adjust the base edition weights

#
local available_editions = _options or {'negative', 'polychrome', 'holo', 'foil'}
    local total_weight = 0
    for _,v in ipairs(available_editions) do
        total_weight = total_weight + edition_weights[v]
    end
    ```
#

this should get the total weight from the selected editions I think

zealous glen
#

Also maybe have the total weight start at 960 but allow it to be customizeable?

wintry solar
#

I'll implement customising base weights afterwards

#

what's the use of the math.max?

worldly sapphire
#

i really don't know what to do

zealous glen
zealous glen
#

Or the return correctly

wintry solar
#

but why would you have a negative weight?

zealous glen
worldly sapphire
# zealous glen Or the `return` correctly
SMODS.Jokers.j_sharpener.calculate = function(self, context)
        if context.selling_card and (context.card.ability.set and context.card.ability.set == 'Joker') and (context.card ~= self) then
        card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_upgrade_ex')})
        self.ability.mult = self.ability.mult + self.ability.extra
end
end```
#

this is how it is

#

i don't know what to do

wintry solar
#

wouldn't they just adjust the _mod value though?

#

which is multiplicative rather than additive

zealous glen
worldly sapphire
#

but, i need to make it give the mult when i play

#

:/

zealous glen
zealous glen
worldly sapphire
#

do i just need to put a return?

wintry solar
#

I guess, they still shouldn't be negative though

zealous glen
#

Again you need to check if the context is appropriate to execute what you want it to do, which is to grant a mult bonus

worldly sapphire
#

so if i do: if context.ability.mult then

zealous glen
#

I don't think that context exists, so it would never be true. It'd probably just crash because context.ability doesn't exist

worldly sapphire
#

context.mult?

zealous glen
#

No

#

I think the context would be the same as Stuntman, so maybe try that

#

Or failing that, Supernova

#

@fathom raven This is for 0.9.8, which is the latest release, but 1.0 is in alpha

worldly sapphire
#

i think i need context.other_card (I'm actually lost, i'm not joking)

worldly sapphire
zealous glen
zealous glen
#

Supernova is also just out-of-frame; after Stuntman there's Matador then Supernova

maiden phoenix
#

If you want to do something at the end of a played hand (like all the examples above) you can also use SMODS.end_calculate_context(context) as a cond

random sleet
#

(in smods 1.0, it patches vanilla jokers to use that same function also)

zealous glen
# fathom raven Thank you!

By the way, if I didn't mention it, it's missing the assets, so you'll need to add some to make sure it works

#

YourModFolder/assets/1x and YourModFolder/assets/2x for normal and double size art

worldly sapphire
#

i can't ☹️

#

i'm gonna stop for now

wintry solar
#

@zealous glen does this look like it matches base functionality to you?

function poll_edition(_key, _mod, _no_neg, _guaranteed, _options)
    local _modifier = 1
    local edition_rate = 1
    local edition_poll = pseudorandom(pseudoseed(_key or 'edition_generic'))
    local available_editions = {}
    if _options then
        available_editions = _options
    elseif _no_neg then
        available_editions = base_editions_no_neg
    else
        available_editions = base_editions
    end

    local total_weight = 0
    for _,v in ipairs(available_editions) do
        total_weight = total_weight + edition_weights[v]
    end
    
    if not _guaranteed then
        edition_rate = G.GAME.edition_rate
        _modifier = _mod or 1
        total_weight = total_weight*edition_rate*_modifier + edition_weights["base"]
    end
    
    local weight_i = 0
    for _,v in ipairs(available_editions) do
        weight_i = weight_i + edition_weights[v]*edition_rate*_modifier
        if edition_poll > 1 - (weight_i)/total_weight*edition_rate*_modifier then
            return {[v] = true}
        end
    end
    return nil
end
mellow sable
#

the best way to test is to compare a seed with The Soul tbh

#

I think it looks pretty good

wintry solar
#

The Soul won't access this function

#

but good shout, I can use Aura instead

#

seems to match

random sleet
wintry solar
#

oh right

#

yeah matches with a seed too

mellow sable
#

I mean both ways work

maiden phoenix
#

Well finally ported all of SDM_0's Stuff to SMODS 1.0.0, tomorrow I'm gonna try almost everything too see if everything works properly

zealous glen
wintry solar
#

can also change base game weightings

zealous glen
wintry solar
#

I ended up lowering the alpha value where it's over the top of darker parts of the card so it wasn't jsut drawing all over the top

#

it still looks cursed on certain jokers but it'll do for now

#

I need to work out how to get the mod badge on the cards and then I think I'll work on automatically adding tags to spawn jokers in the shop

zealous glen
wintry solar
#

I'll take a look at Tag API tomorrow and see what I think

#

is it in 0.9.8 or just 1.0?

unkempt thicket
#

i think just 1.0

edgy reef
#

It wasn't added until 1.0 yea

maiden phoenix
#

Nice figured out the modicon too, maybe I won't make it look like a tag if I'm not lazy

unkempt thicket
#

how does atlases work i think im doing it wrong(with 1.0 steamodded)

maiden phoenix
#

Pretty sure individual sprite doesn't work on 1.0 now

#

That or maybe you should try using SMODS.Sprite? I don't recognize the syntax you use

hollow marsh
#

I'm looking to make a mod and I need the input to be put into a hex value. How would I go about this? This is what I have atm

#

left image is the value I am trying to edit

solemn coral
#

Is there an easy way to make multiple consumables with a similar effect?

I'm trying to make an array of 8 consumables that each apply a different enhancement, and I'd like to have the enhancement as a string inside the consumable and be able to just use that instead of having to copy-paste the entire effect code only to change a single value.

royal ether
#

i think theres a way to do it, called like mod_conv or something. try looking at what the vanilla enhancement consumables do

#

like tower, magician, etc

#

specifically, look at their config parameter in game.lua

solemn coral
#

I see how they do it that way, I just don't know how to get it to work in Steammodded

#

The way I've been doing it is assigning a function SMODS.Tarots.c_disc_mult.use(card, area, copier) for each of my consumables, replacing c_disc_mult with whaever the new consumable is, and I'm wondering if there's a way to make that one function apply to eight different consumables

random sleet
#

save the function to a variable var, then set SMODS.Tarots.<card>.use = var

#

although yeah you can just use mod_conv in config to have vanilla functionality take place

solemn coral
#

Aha, that looks like it's working! Thank you!

hoary sand
#

how are sprites set up in 1.0?

mellow sable
#

i did the thing

neon elbow
#

Trying to make my joker sprites look better. Any feedback? (Name: Tungsten Joker, Effect: -1 hand size, in 3 rounds, this breaks and creates The Soul)

remote shell
#

that better be rare as all getout

#

and expensive

#

love the sprite tho it's funny

neon elbow
#

A rare joker and $10 -> 3 rounds down a joker slot and a hand size -> gets Chicot. I think its fine but im willing to hear otherwise

remote shell
#

i'd bump it up to 12 because here's the thing right

#

if it goes into your consumables slots

#

the soul i mean

#

then uh

#

perkeo could dupe it

#

over and over

neon elbow
#

I mean perkeo already breaks everything in half by existing

remote shell
#

i'd say just have it pop into a legendary joker, bypassing the soul entirely for that reason

#

rare joker, 12 big ones, -1 hand size, 3 rounds

#

that should be an appropriate cost for a legend

neon elbow
#

Hmm, i thought about the perkeo synergy but never really considered the wider implications

remote shell
#

showman
get perkeo
perkeo perkeo

#

cascading perkeos

neon elbow
#

i restart my runs until i get atleast 17 perkeos, anything else is a dead run tbh

remote shell
#

if you dont have 26 triboulets are you even playing balatro

neon elbow
#

30 chicots -> The Manacle -> 29 permanent hand size -> naneinf

remote shell
#

57 canios -> pareidolia -> immolate

neon elbow
#

456 Jimbos -> Lose ante 10

remote shell
#

74 vampires -> only scale one for the entire run -> die

neon elbow
#

I feel we've veered off topic here

remote shell
#

undoubtedly

#

back to your jonkler

#

which i do love the concept of

manic nest
#

ok welp im back on it

#

``function SMODS.INIT.Alizatest()
local loc_Testcard = {
Testcard = {
name = 'Testcard',
text = {'test'}
}

 }

 local Testcard = SMODS.Joker:new(
     "Testcard",
     "Testcard",
     {extra = {x_mult = 10}},
     {x = 0, y = 0},
loc_Testcard,
     2,
     1,
     true,
     true,
     false,
     true,
     nil
 )
 Testcard:register()
local sprite = SMODS.Sprite:new("j_Testcard", SMODS.findModByID("ALIZATEST").path, "Alizatest.png", 71, 95, "asset_atli"):register()



  -----ok im gonna calcuate this now and pray it dosent break ok cool go 

  SMODS.Jokers.j_Testcard.calculate = function(self, context)
      if SMODS.end_calculate_context(context) then
       if (context.scoring_name == 'Full House') then 
           return {
               message = localize {type='variable',key='a_xmult',vars={self.ability.extra.x_mult}},
               Xmult_mod = self.ability.extra.x_mult
           } 
    end 
  end

end``

#

trying to find out what is wrong

#

same eror r

#

ive done lots of tweaking still cant figure out

#

is anything like painfully obviously messed up

#

error im still getting is main.lua:1351: bad argument #1 to ipairs [table expected, got nil]

mellow crag
#

goooood morning

edgy reef
#

mornin

mellow crag
#

what is everyone up to?

edgy reef
#

Game development

#

Which is unfortunately not Balatro modding 😢

narrow pollen
#

(i would totally put the stone tooltip there, but it's not working.)

gilded blaze
#

stone card (rank 50)

hallow forge
#

Strength the Stone Card

#

rank 51

narrow pollen
#

i don't know. i genuinely don't know.

#

ah, it's probably because T: only works for decks for

#

some reason

mellow crag
#

BTW @frosty dock how do I check if a card is in the collection or not?

azure wraith
#

that's a common? it seems pretty strong
or is that just for testing purposes

remote shell
#

does anyone have like a step by step tutorial on how to make a mod, even a template or dummy mod would do

crisp coral
narrow pollen
#

(pretty sure i remembered to click "OFF" that time)

azure wraith
#

i mean it sounds fun to build into

narrow pollen
#

yeah, and all it does for score is allow you to make better hands with stones

#

like, that's good, don't get me wrong

azure wraith
#

getting easy-ish access to 5oaks sounds nice

narrow pollen
#

assuming you get like

#

marble joker or a bunch of towers

azure wraith
#

standard packs always feel like they're drowning in stone to me, too

narrow pollen
#

ah yeah, i forget standard packs can give that

azure wraith
#

i mean its not clear how it plays out to me, exactly

narrow pollen
#

it's a really good stone support joker

azure wraith
#

both tower and death let you create stone cards which means you are filling up your deck for 5oak a bit less than 2x as fast

narrow pollen
#

but only really good if you have a way to get stones

#

death is already the kind of 5oak

azure wraith
#

yeah but i felt like it was worth mentioning

#

you're not reliant on pulling just one tarot

narrow pollen
#

yeah, it's not hard to get stones

azure wraith
#

ofc you start with 0 stone

narrow pollen
#

but it's also not always possible to get stones

azure wraith
#

i think another thing that makes it a bit less appealing is that stones already give you a ton of chips which is often the primary motivation in using high scoring hands

narrow pollen
#

i got it working!

mellow crag
#

does anyone know if it's possible to change the texture of one joker without changing the texture of another joker of the same kind?

random sleet
#

make sure you set enhancement_gate bulbaSip

random sleet
random sleet
# narrow pollen set what now?

on the joker, enhancement_gate is how e.g. Lucky Cat and Glass Joker only appear when you have the matching card enhancements

random sleet
#

and card.children.floating_sprite for soul_pos cards, if that's your goal

mellow crag
#

could you help me with something?

frosty dock
mellow crag
#

cause i want to change its loc_txt accordingly

#

(also, there's an issue with the loc_txt method in consumables, you cannot access the data inside card.ability with it)

#

so you can't really make it dynamic

frosty dock
#

card.area == G.your_collection probably

frosty dock
mellow crag
frosty dock
#

self, info_queue, card

#

can't just be card, info_queue because the card might not exist

mellow crag
#

ohhhhhhhhhhhhhhhhhhhhhhh

random sleet
mellow crag
#

that explains a lot

random sleet
#

what is it

frosty dock
#

I did only add that recently though when implementing nonconsumables

random sleet
#

i love nonconsumables

frosty dock
#

all I wanted was a card that shatters after using 5 times, and I needed the card to display state

random sleet
#

it is interesting that that was not standard functionality but ig i understand why

#

nothing uses it

#

aure would you be mad at me if i made like three coremods needed for thac to have full functionality lmao

frosty dock
#

it's not something I approve of, but don't expect me to be mad over any kind of mods you put out there

random sleet
#

i jest

#

tbf one would be oddityapi which like, has a justifiable reason for being separate

hallow forge
#

nevermind.

random sleet
#

same with another one but that ones a seeeeeecret ;)

frosty dock
#

xd

random sleet
#

and then like one to add mechanics and frameworky stuff to use between my mods bc im cringe

frosty dock
#

btw seal jank should be gone, but I haven't tested anything with putting them on jokers

random sleet
#

(literally because im bad at github)

#

oh sick i definitely keep getting distracto

frosty dock
#

hm... I did still wanna add some way to make stickers mutually exclusive thunk

random sleet
frosty dock
#

bites

random sleet
#

i mean ill make the mod and if someone smarter than me wants to merge shit from it into smods then go ahead lul

#

i just know how to make the funny joker poker do funny things idk what this github sorcery is

royal ether
#

you have to iterate thru G.your_collection to check if a card is in collection

#

G.your_collection is a list of collection card areas

mellow crag
#

yeah i ahve it

#

now i have one more issue...

#

the use button is at the bottom of my consumable

#

and i have no idea why

#

it might be a cardarea issue

#

but i dont think so

#

wtf

random sleet
#

did u try the thing i said tho

mellow crag
#

yes

#

it's a joker type cardarea now

random sleet
#

dang

#

idk then sorry man

mellow crag
#

oh

#

that fixed it

#

XD

mellow crag
#

also I noticed that if you use the "gain 2 <something> card" you always get 2 different cards

#

is it possible to change it so it could give you the same two cards?

#

like, it's probgably a pseudorandom_element thing

frosty dock
#

something something get_current_pool

mellow crag
random sleet
#

you can probably look for where it says next(find_joker("j_showman")) or whatever right

random sleet
#

yeah but showman relates to what you're talking about

#

i think?

mellow crag
#

i checked it

#

it works correctly

#

that is such a weird issueXD

random sleet
#

youll need to inject something in that function so it doesnt omit cards you already own i think

mellow crag
#

the get_current_pool doesnt do that

random sleet
#

uhhhhh it doesnt? if it checks showman it definitely does, cuz thats what showman Does

mellow crag
#

okay i was wrong

maiden phoenix
shell timber
#

ok i might actually start porting morefluff to 1.0 now

mellow crag
maiden phoenix
#

better chikin

#

Idk if I should keep it looking like a tag or make a proper icon

mellow crag
mellow crag
#

Things are progressing smoothly

maiden phoenix
#

Oh neat

random sleet
mellow crag
random sleet
#

me when i pollute my pack pool

mellow crag
#

XD

mellow crag
random sleet
#

uhhhh

mellow crag
#

XD jk jk

random sleet
#

like for starters im at work and secondly thac is a MESS rn

spice scroll
mellow crag
#

I still need to think of some crops for the other "card groups"

random sleet
#

peas for odd

#

three peas in a pod

mellow crag
#

oh peas is a good one

zealous glen
#

Sunflower for Fibonacci?

crisp coral
#

pvz2 in balatro...

#

or uh. pvzh

shell timber
#

cherries for twos is an obvious one

mellow crag
#

true

shell timber
#

what are the current ones?

#

roses / clovers for hearts and clubs feel right

mellow crag
#

Hearts - Beetroot
Clubs - Cauliflower
Diamonds - ?
Spades - ?
Face - Pumpkin
Numbered - Grape
Even - Cherry
Odd - Pea
Ace - ?
Stone - ?

shell timber
#

carrots could work for spades because they're kinda pointy

mellow crag
#

and potatoes for spades? (spuds)

shell timber
#

hm

maiden phoenix
#

Iirc Apple was suggested for Ace?

wintry solar
#

What about spades being a literal spade that counts down to breaking?

mellow crag
random sleet
#

im a spade that counts down to breaking down

shell timber
#

hm, i feel roses / strawberries fit more for hearts

mellow crag
#

more than beetroot?

shell timber
#

hm

random sleet
#

flowers arent what hes going for i feel like

shell timber
#

fair enough

mellow crag
#

im more going for generic crops

#

though... if someone wants to add a crop that works with color cards...

#

adding a tulip can be fun

frosty dock
#

maybe I'll figure out mod settings first

shell timber
#

will steamodded 1.0 have a pack api?

wintry solar
#

Like you’re using the spade rather than growing a plant

#

Although I might be misremembering the initial idea of crops

mellow crag
wintry solar
#

Yes then a spade wouldn’t work

shell timber
#

will the cards have multiple sprites as they grow?

mellow crag
shell timber
#

nice

mellow crag
#

actually, i have pumpkin fully implemented

#

let me take a picture of it real quick

wintry solar
#

Perhaps there could be a tool that enhances the bonuses for X rounds

mellow crag
#

i was thinking about adding a "gardening tools" consumable type

shell timber
#

sunflower for fibonnaci would be fun

mellow crag
#

with stuff like a watering can to make them grow faster

wintry solar
#

That would be neat

shell timber
#

coffee bean gives all cards a 1 in 4 chance to retrigger (or so)

wintry solar
#

I was imagining it as for example fertiliser giving double chip values for 3 turns or something like that

mellow crag
#

that can also be fun

shell timber
#

a chilli could upgrade all hands maybe

#

although that's kinda different to the other cards

frosty dock
#

if lovely 0.5 gets a stable release soon, I could see it as a 1.1 feature

wintry solar
#

It’s cool for api’s to use lovely injection right?

frosty dock
#

I try to use lovely injection as much as possible, yeah

#

I don't bother if the function is more being replaced than modified

wintry solar
#

Good, that’s how I’ve been working for editions

shell timber
#

and this is in their own cardarea?

mellow crag
#

yes

#

you just need to enter the garden

shell timber
#

i feel having fewer card slots could encourage committing to specific crops instead of just taking all of them that you find

random sleet
#

federrrrrrr how do crops work again

wintry solar
#

What is this wizardry

random sleet
#

i forgor

shell timber
#

what's pumpkin's current effect?

mellow crag
mellow crag
random sleet
#

they last indefinitely once growed up?

mellow crag
#

yes

random sleet
#

interesting

#

so its an opportunity cost thing

crisp coral
#

cookie clicker garden minigame

random sleet
#

have to hold it X rounds then its good

random sleet
wintry solar
#

And they stack too?

mellow crag
random sleet
#

will they always act as if showman exists

mellow crag
#

yes

random sleet
#

like you can naturally get multiples

#

banger

mellow crag
#

i sure do like playing +110 chip kings

random sleet
#

banger mod certified 💯 hot 🔥 🔥 mod of the year +10000000 social credit points

worldly sapphire
#
SMODS.Jokers.j_sharpener.calculate = function(self, context)
        if context.selling_card and (context.card.ability.set and context.card.ability.set == 'Joker') and (context.card ~= self) then
        card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_upgrade_ex')})
        self.ability.mult = self.ability.mult + self.ability.extra
        end
end

SMODS.end_calculate_context(context)
    if context.before then
        if context.other_card then
        if self.ability.name == 'Sharpener' then
            return {
                message = localize{type='variable',key='a_mult',vars={self.ability.extra.mult}},
                mult_mod = self.ability.extra.mult
            }
        end
        end
    end```
#

i'm actually starting to become a joker myself

#

i can't stop laughing because of my low intelligent brain

gusty depot
#

wahey, we have a prof.jkr parser

#

I probably need to dig into the source to work out what the following fields are:

  • planetariumUsed, tarotReadingUsed - I imagine these are cracking the relevant packs? but then there's not an equivalent field for cracking joker packs...
maiden phoenix
worldly sapphire
#
SMODS.Jokers.j_sharpener.calculate = function(self, context)
        if context.selling_card and (context.card.ability.set and context.card.ability.set == 'Joker') and (context.card ~= self) then
        card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_upgrade_ex')})
        self.ability.mult = self.ability.mult + self.ability.extra
        end
        if SMODS.end_calculate_context(context) then
            return {
                message = localize{type='variable',key='a_mult',vars={self.ability.mult}},
                mult_mod = self.ability.mult,
            }
    end
end```
#

this is working

#

but when i play a card with 0 mult

#

it says 0 mult

#

lol

#

its activating the mult even if it is like 0

#

i can probably make it recognize the upgrade context?

zealous glen
frosty dock
gusty depot
#

aha, thank you!

frosty dock
#

it's well possible they're just obsolete, or used for some sort of stat tracking

gusty depot
#

I think you're correct in the old demo thing

worldly sapphire
olive shoal
shell timber
#

either really

mellow crag
#

@shell timber what do you think about having a tulip that decreases the round count it takes for color cards to recharge?

gusty depot
#

I figured here was for technical stuff and chat was for general stuff

shell timber
#

oh maybe

#

that seems interesting

mellow crag
#

but that's further in scope

worldly sapphire
zealous glen
austere schooner
#

is there a template for a simple mod that adds a joker/consumable lying around or do i just have to start from scratch

frosty dock
#

what steamodded version?

zealous glen
#

It’s just missing the assets

worldly sapphire
#

this is how this code is working

SMODS.Jokers.j_sharpener.calculate = function(self, context)
        if context.selling_card and (context.card.ability.set and context.card.ability.set == 'Joker') and (context.card ~= self) then
        card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_upgrade_ex')})
        self.ability.mult = self.ability.mult + self.ability.extra
        end
        if SMODS.end_calculate_context(context) then
            if context.scoring_hand then
            return {
                message = localize{type='variable',key='a_mult',vars={self.ability.mult}},
                mult_mod = self.ability.mult,
                card = self,
            }
        end
    end
end```
#

i just want a way to make this guy recognize he has a mult

#

bro be like +0 Mult fool

crisp coral
#

put the return into if self.ability.mult > 0

worldly sapphire
#

oh my god

#

it worked

zealous glen
#

The output should evaluate the Mult is nonzero by itself

#

So I think the return has a key too many

random sleet
#

i think it only checks if it exists not if its nonsero

zealous glen
# zealous glen

I can’t check it right now, but from this screenshot I’m guessing the vars key is superfluous

#

Since Stuntman returns chip_mod

worldly sapphire
#

tbh, i think i'm gonna nerf the sharpener

#

its gonna give +5 mult instead

strong plume
#

Isn't that still better than the dagger?

odd dock
#

depends but usually yes

frosty dock
#

yeah because you can dump more money into it faster

#

dagger is only one per round, whereas with this you can buy-sell like for campfire

worldly sapphire
#

and its permanent

odd dock
#

man dagger should be buffed ngl

zealous glen
#

I made a Joker that gains +10 Chips or +1 Mult be Joker you get

odd dock
#

the once per round really does hinder the dagger so much

zealous glen
#

Not exactly the same trigger but it seems close enough

crisp coral
#

@frosty dock viewing the deck during The Plant crashes the game

#

yes it is an smods issue

#

at least i'm 90% sure it is

frosty dock
#

weird one, I'll have a look

worldly sapphire
#

is there a way to put that Gold card message in one of my jokers?

zealous glen
worldly sapphire
#

now that he has this

#

i need to make him work

maiden phoenix
#

I should add those too cuz I never thought of doing so 🤔

worldly sapphire
#

the sharpener now have a nice color

frosty dock
#

how do you set these colors?

worldly sapphire
#

i just put the {C:purple} before the name

#

and poof

#

it works

frosty dock
#

oh pog, I didn't think that worked on names as well

worldly sapphire
#

well, now you know pog

#

the only thing that doesn't work is the X:mult one

frosty dock
#

I mostly wanted to know if it's something I should support on the Steamodded side of things

#

it's neat that it just works™️

worldly sapphire
#

yes

#

it just works™️

thorn bough
#

Has anyone figured out dynamic sprite loading in SMODS 1.0.0? trying to create an atlas for each sprite is proving to be quit a bit more complicated than i expected.

maiden phoenix
#

Just use a spritesheet

thorn bough
#

i am heavly against a spritesheet as it makes git integration harder, and requires needless hardcoding of pos values.

frosty dock
#

hardcoding of pos values doesn't seem any worse than hard coding atlas names

thorn bough
#

i'm not

#

my intention is to automatically set atlas names by image name and center name, so they just have to be named the same thing.

frosty dock
#

I recognize this as bad practice, which is why this is no longer officially supported from 1.0 onward. With automatic mod prefix integration, it would then be required to reference a mod prefix on each sprite registration

thorn bough
#

Why is it bad practice though?

frosty dock
#

it introduces a bunch of overhead

#

and hardcoding mod prefixes isn't something I want

mellow sable
#

break_infinity progress update

frosty dock
#

pog

zealous glen
worldly sapphire
#

yeah it works fine

zealous glen
crisp coral
worldly sapphire
#

yes

#

crosscode supremacy

worldly sapphire
frosty dock
worldly sapphire
#

other languages support?

frosty dock
#

1.0 is meant to have localization in mind

#

so uh, I don't think I can have the mods UI be english only

worldly sapphire
#

one question about 1.0. its gonna have a way to disable mods without having to remove it from the folder?

frosty dock
#

I'm on it

zealous glen
worldly sapphire
#

yeah, i will update to 1.0 when it gets out of the alpha

frosty dock
#

it's gonna require reloading the game for pretty much anything that has side effects that aren't easily reversible

#

the bottleneck here is mostly preventing lovely from injecting disabled mods

worldly sapphire
#

i'm already familiar with reloading the game. (especially with crosscode)

frosty dock
#

this is very "graceful"

#

hmmmmm

gaunt thistle
worldly sapphire
#

i like the options called ERROR, ERROR and ERROR

gaunt thistle
#

at the same time though it gets the point across

frosty dock
#

for context, I used an empty default so mods that add languages can include these dictionary items in their loc files

#

maybe that's not the best idea

gaunt thistle
#

also are you getting regex debug prints in the console?

frosty dock
#

unchanged

worldly sapphire
#

one question. its possible to make the X:mult appear in names?

#

like the background

#

red background with the white letters

zealous glen
gaunt thistle
zealous glen
#

if it doesn't work outright you might need to hook or inject to make it work

worldly sapphire
#

i already tested btw

gaunt thistle
worldly sapphire
#

it just doesn't show nothing. it just appears the regular name

#

and if it has spaces, the X:mult will remove it

frosty dock
worldly sapphire
frosty dock
#

uh that looks about right...

edgy reef
#

wtf

#

Are those actual duplicates of the mods or did the stack trace mess up

frosty dock
#

i pretty much tried to reload a bunch of files and then call G:start_up() again

#

the game sort of launched itself, but still keeping a bunch of stuff from the original

#

not sure why it'd be in triplicate, but here I am

#

still getting the same error, but the mod dupes are gone

zealous glen
frosty dock
#

back to this nonsense huh

#

i guess calling start_up is unnecessary

frosty dock
#

there we go

shell timber
#

peak mod NOT installed

frosty dock
#

true

narrow pollen
maiden veldt
#

is there a way to change the colour variables in the shaders folder? for example, turning the foil edition red.

hollow marsh
rough furnace
wintry solar
frosty dock
#

:l

wintry solar
#

I have no idea why this has happened

#

without the tooltip the text is fine

#

but with it, it vanishes

frosty dock
#

0.9.8 jank

#

try with a loc_def function on the spectral that just returns {}

#

1.0 with lovely swiftly avoids such problems

wintry solar
#

is it worth just building the API in 1.0?

#

rather than building and then porting?

wintry solar
frosty dock
#

for bugs like this one? yeah, it might well be

#

depends on if you wanna deal with the absence of documentation and potentially some more breaking changes

wintry solar
#

hmmm

#

I'm not sure what else to add right now outside of alternate effects which I think would be smoother with lovely

#

should I add taking ownership of base editions?

frosty dock
#

either you already register them to begin with and use your API as the only system (this is what I do for suits and ranks), or your API exists alongside other code for vanilla objects, then taking ownership requires more work

wintry solar
#

right yeah that makes sense

#

I think preregistering them will work better in this case

#

and just to check, when I do SMODS.Editions[self.slug] = self in register, it adds the meta table that's set up in new?

maiden veldt
near ivy
wooden nexus
mellow crag
#

Goood morning

#

How is everyone?

wooden nexus
#

Yo what's good Edward Elric? (Y'know... Alchemy)

mellow crag
#

I’m good

wooden nexus
#

I guess it's morning now (since it's midnight)

#

Designing base Vegeta's Base Joker art

random sleet
#

omg feder hiiii

mellow crag
random sleet
#

is the harvest looking good this day

mellow crag
#

Yes it does!

random sleet
#

thats nice

rough furnace
unkempt thicket
mellow crag
#

went well?

unkempt thicket
mellow crag
#

oh XD

wild gyro
#

hi feder

mellow crag
#

hiiii

tawny perch
mellow crag
#

that's really cool

tawny perch
mellow crag
#

oh

#

i studied a bit of arabic

tawny perch
#

though both the batch above and below me got french and japanese which i kinda wanted

tawny perch
random sleet
olive shoal
#

accidentally made several copies of cards that i can just drag around and do nothing else with

mellow crag
random sleet
#

thats what happens when you dont :remove() things and just let em idle around forever

#

but also aesthetic✨

mellow crag
#

same thing happens with text (not the draggable part)

edgy reef
#

Next April fools mod should have this happen to any base game effect that creates cards.

#

xdd

crisp coral
#

graveyard eating good tonight

random sleet
#

next april fools mod should turn the game into spider solitaire

olive shoal
#

true

remote coral
olive shoal
#

yeah that was my first thought too lol

ionic isle
#

mod where your deck does the solitaire thing when you win a run (real)

mellow crag
#

i just had a wacky idea for a new hand

#

Solitaire Straight - a straight, but each card is of a different color than the two cards before and after it

#

so
H9, C8, D7, C6, H5 is a solitaire straight

remote coral
#

Does …Cn, Sn… work?

n is just whatever number

#

Or does it recognise as red and black suits

mellow crag
#

it does recognize suit colors

#

like how in solitaire you have to have different suit colors on each other

remote coral
#

So spectrum, but able to be done with 4 colours and with no strict requirement of having all the suits

mellow crag
#

i mean, not really?

#

it's just a straight with changing colors

remote coral
#

Different colours than the two before just so checkered deck gets shafted

mellow crag
#

nah checkered deck is best with solitaire straight

#

caues you can do it with just 2 suits

#

one black and one red

remote coral
#

Oh wait I misread

I thought it’s looked at {H9, C8} [D7] {C6, H5}

mellow crag
#

this is a solitaire straight

#

or straight solitaire

#

i am not sure

ionic isle
#

the existence of solitare straight implies stuff like solitare house and solitare five

mellow crag
#

the reason solitaire straight is the only one is since this is a valid solitaire play technically

#

you cant have 5 cards of the same rank one after another when playing solitaire

ionic isle
#

then why specify it as a straight?

mellow crag
#

i should just call it solitaire?

#

i am not sure whether i will give it a new poker hand, or a new joker for my (planned, not sure if i will make it) "card games joker collection" mod

random sleet
#

if you dont make solitaire straight i will 👀

#

are all crops going to be +10 chips?

mellow crag
random sleet
#

shit i still need to peek how aure does spectrums in 1.0 actually

random sleet
mellow crag
#

XD

random sleet
#

i actually feel so stupid not knowing how to make cards score in 1.0 hand api

#

like genuinely i cant crack it

#

i can make the hand be playable but cards wont scote

random sleet
#

and given that thac actually will be adding suits soon...

mellow crag
random sleet
#

yeah lol

mellow crag
#

which?

random sleet
#

i showed Minor Arcana a while ago rember

mellow crag
#

oh that was for thac?

random sleet
#

thac is my content mod

shell timber
#

fusion jam when btw

random sleet
#

if its not a whole project based on something else it goes in thac

#

like Emojiokers and Balatro of Isaac are separate

mellow crag
random sleet
#

me when i have to add jokers to thac: programming

#

(for the suits!!!)

#

yeah thac on my end has like 8 modules now its nuts

#

moreconsumables, basicoddities, jokerstamps, suits, blinds, tags, enhancements (still pending updates from enhanceapi orz), pokerhands

#

oh and decks

sly forge
#

hey, I see lots of modders are active. How are people doing with Steamodded 1.0? What's good, what's bad, anything particularly painful or confusing?

olive shoal
#

steamodded 1.0 is so much more convenient to use imo

#

setting stuff up is a breeze now that i can just put it all in a table initilizating it

#
  • its generally a lot cleaner to use too
sly forge
#

sounds great!

mellow crag
#

it also includes some very popular apis and implementations that you had to do by hand beforehand

#

which helps a ton

sly forge
#

ok, I'm actually asking for API Design best practices! yeah I specialize in that, maybe

#

really hope Steamodded 1.0 releases soon. I'm so impatient, I'm contributing to it myself

random sleet
#

it is pretty cool other than all the parts that didnt work that i had to wait for fixes and now have to wait to try out i hate capitalism

#

(work work work x.x)

#

tablecalls are based tho

#

i actually was the one to suggest it, as memory serve

#

i do find the new poker hand api confusing

#

to the point where im just kinda in waiting mode til i can get a working example

mellow crag
#

speaking of documentation... there is none for the new seal API

random sleet
#

there is none for like anything lul

narrow pollen
night meteor
#

Anybody here know if there's any documentation about making my own jokers, or reskining jokers that are already in game?

royal ridge
night meteor
#

ah, did some digging and found something from- yeah! Sorry I had to ask that. just didn't know if someone had made a guide saying how to do it.

royal ridge
#

yeah dw about it 👍

narrow pollen
# night meteor ah, did some digging and found something from- yeah! Sorry I had to ask that. ju...

okay, just gonna give you a quick tutorial on how to edit existing Jokers for steamodded 1.0, because it's something i already know:
1.) Initialize a variable for the existing Joker to this: -> SMODS.Joker:take_ownership("j_[key]",{set = "Joker",name = [name], key= "j_[key]", loc_txt = [loc_text]})

  • j_[key] is the joker's key that always starts with j_ in the vanilla game ("j_sly", "j_jolly", etc)
  • name is a string detailing the joker's display name.
  • loc_txt is a table of strings, detailing the joker's description.
    2.) Use this line to simulataneously initialize and register a sprite: -> SMODS.Sprite{key = "j_[key]", path = "j_[key].png", px = 71, py = 95, atlas = "ASSET_ATLAS"}:register()
    3.) Use the following format, replacing j with the name you used for the variable you initialized in Step 1.
    j.lc_atlas = j.key
    j.hc_atlas = j.key
    j:register()
random sleet
#

you dont have to put in like name and key in the table part

#

<@&1133519078540185692>

royal ridge
#

🤯

narrow pollen
#

🪝🐟

random sleet
#

itll default to what the joker has normally

grand violet
#

🔫

narrow pollen
#

i mean, fair?

livid scroll
#

To quick for me

quaint saddle
#

And me!

grand violet
#

I declare it now

#

all spammers have Perishable

royal ridge
grand violet
#

they will last at most 5 minutes before being permanently debuffed

narrow pollen
#

i typically change the loc_text for every joker i edit, soooooooooooo

random sleet
short surge
#

we might be eternal?

narrow pollen
#

wait, do you?

random sleet
#

for example in emojiokers i take ownership of a lot of jokers to add yes_pool_flags to them

grand violet
#

Only local and the playstack crew have Eternal

short surge
#

fair

narrow pollen
#

that doesn't feel right, given that sometimes you're going to want to do things with your jokers before you register them

#

you know, initialize their variables based on a table

random sleet
#

just put it in the table then?

#

but yeah :register() is called as part of the constructor now

#

if you really need to modify them after that for whatever reason you can still use SMODS.Jokers

#

but i cant think of a single thing that you'd want to do in between having a joker object and registering it anyway

#

bear in mind that you can literally put any values you want into the table that you pass to the constructor

#

(or to take_ownership, functionally the same)

night meteor
random sleet
#

you can use 7zip to open Balatro.exe

night meteor
#

i... can? huh

random sleet
#

game.lua has a function Game:init_game_objects with a mammoth of a list of everything in the game with most of its information

zealous glen
#

Maybe en_us.lua is easier since you can search by Joker name or text too

random sleet
#

it is moderately annoying to use but it is functional enough

zealous glen
#

And it's formatted as slug = {name, text}

narrow pollen
#

and for the second part: local whatever = is the name definition.

random sleet
#

you can search by name in game.lua

#

cards have "name" fields

narrow pollen
#

yeah, either or works

#

but sometimes the names are different in the internals

#

mostly ones with extended characters, like Séance

royal ridge
#

tried a bunch of stuff but this doesn't seem to be working...? is there any way to see what the edition is requesting for its label

narrow pollen
#

oh, apparently

#

you're not allowed to edit that outside of a process_loc_text function

zealous glen
#

That's 1.0, no?

random sleet
#

yeah in 1.0 you need process_loc_text

zealous glen
#

You should be able to edit the localization dictionary directly in 0.9.8

random sleet
#

otherwise smods doesnt mess with localization stuff so you can just do that

zealous glen
#

I say should because I have issues with it sometimes

#

In 0.9.8, this is the whole code of Fish mod

--- STEAMODDED HEADER
--- MOD_NAME: Fish
--- MOD_ID: Fish
--- MOD_AUTHOR: [Victin]
--- MOD_DESCRIPTION: Changes Flush Fives into Fish (Five of a Flush)

----------------------------------------------
------------MOD CODE -------------------------

function SMODS.INIT.Fish()
    G.localization.misc.poker_hands['Flush Five'] = "Fish"
    
    sendDebugMessage("Loaded Fish")
end

----------------------------------------------
------------MOD CODE END----------------------
night meteor
#

alright, I got the card I want to do, now time to parse what all of this means heh

golden lake
zealous glen
#

I'm not fish but pretty much

night meteor
random sleet
#

writing a description is for nerds

night meteor
#

oh, ignore that last bit after the code end, I was just copy and pasting the card I was wnating to do

royal ridge
narrow pollen
#

kinda close

royal ridge
#

sorry to keep using this channel as a stupidity dump

random sleet
#

that is what it is normally

night meteor
#

If you want to DM me to keep it cleaner, I don't mind

golden lake
zealous glen
#

Best I can do is become Aradia

golden lake
#

i cast the fish morph spell on you

#

fish

narrow pollen
#

1.) 1.0 doesn't have any init coding. so replace function with local FatLuckyCat =

night meteor
#

Done

narrow pollen
#

2.) remove the loc_txt = [loc_text] bit entirely, that's only if you're going to change the description

zealous glen
narrow pollen
#

other than that, i think that will run fine

random sleet
random sleet
night meteor
#

So this should work here? and yes, I have an assets file set up, with both 1x and 2x in there, [though 1x doesn't have an image yet]

Does it matter if the image is one card or not?

#

didn't seem to work

narrow pollen
#

oh, the name part can also be removed

#

and set has to be "Joker"

#

if that doesn't work, then i have a backup plan

night meteor
#

Still nothing

#

But yeah, all I'm wanting to do with this is just replace the Lucky cat with a different png, as I'm sure your seeing me try.

golden lake
night meteor
#

@narrow pollen [if you didn't see the fail, sorry for the ping if you have seen it]

narrow pollen
#
--- MOD_NAME: Fat Lucky Cat Reskin
--- MOD_ID: FLCR
--- MOD_AUTHOR: Flint-Code
--- MOD_DESCRIPTION: Reskin of the Lucky Cat

----------------------------------------------
------------MOD CODE -------------------------
    SMODS.Sprite{key = "j_FatLuckyCat", path = "j_FatLuckyCat.png", px = 71, py = 95, atlas = "ASSET_ATLAS"}:register();
    SMODS.Joker:take_ownership("j_lucky_cat",{set = "Joker", key= "j_FatLuckyCat", hc_atlas= "j_FatLuckyCat", lc_atlas= "j_FatLuckyCat"})
----------------------------------------------
------------MOD CODE END----------------------```
maybe try this?
#

all this is showing is that i'm going to need to rewrite my own joker initialization code

night meteor
#

also, does the image have to be a set size?

narrow pollen
#

yes

#

default joker size is 71 x 95

night meteor
#

.......oh uh

frosty dock
narrow pollen
#

yeah, that's fair

night meteor
#

give me a sec, shrinking the image then. lol

narrow pollen
#

i didn't know whether lc/hc was necessary

narrow pollen
#

2x should be double that

#

142 x 190

night meteor
#

THat may have been in issue, yeah one sec let me fix this then do that code up top

frosty dock
narrow pollen
#

that's fair!

#
--- MOD_NAME: Fat Lucky Cat Reskin
--- MOD_ID: FLCR
--- MOD_AUTHOR: Flint-Code
--- MOD_DESCRIPTION: Reskin of the Lucky Cat

----------------------------------------------
------------MOD CODE -------------------------
    SMODS.Sprite{key = "j_FatLuckyCat", path = "j_FatLuckyCat.png", px = 71, py = 95, atlas = "ASSET_ATLAS"}:register();
    SMODS.Joker:take_ownership("j_lucky_cat",{set = "Joker", key= "j_FatLuckyCat", atlas= "j_FatLuckyCat"})
----------------------------------------------
------------MOD CODE END----------------------```
#

then that should work, @night meteor

night meteor
#

oh thanks! sorry, was solving a new issue that gimp was Inverting the colors of the card for some reason ...but I've soved it now

#

Resized, added the code in, lets see if this works

#

STill nothing.

#

and I have the correct sizes under each of the assets 1x and 2x folders now.

#

Also the mod is not showing up in the mods list, if it would show up there

#

and also as you can see up top, i am on .9.8

narrow pollen
#

ohhhhhhhhhhhhhhhhhhhhhhhh

#

then i am the exact wrong person to listen to haha

night meteor
#

oh, did I... faceplant

narrow pollen
#

save that code, though

night meteor
#

HAH. thanks, yeah I have it saved

narrow pollen
#

you could literally download the alpha from the github rn if you wanted

#

and use that

night meteor
#

...the alpha?

narrow pollen
#

that's what people mean by 1.0

#

it is currently in alpha

frosty dock
#

btw author needs to be in brackets like --- MOD_AUTHOR: [Author], your code would get ignored over it lmao

night meteor
#

ah

frosty dock
#

that's the only reason it doesn't error

night meteor
#

where's the alpha on the github for steamodded?

#

also I guess this is what happens when you run aplha code on .9.8?

#

[all I changed was putting my name in brackets

#

[er, Author name]

narrow pollen
night meteor
#

alright, got the zip and... ah, I see it's just the git up set of stuff.

#

reading up on the Lovely injector

#

Still this error, failing to get the field sprite it seems

random sleet
night meteor
#

[and yes, I did verifiy before launching wiht the version.dll in there]

random sleet
#

do you have:

  • the version.dll file in the folder with Balatro.exe
  • steamodded's files all in their own folder in your Mods directory
night meteor
#

Yes and yes

#

left, the Balatro exe folder. right the Balatro/mods folder in appdata

random sleet
#

i do not see Steamodded

night meteor
#

aaaah, one se

#

Now there it is, with the un ziped contents of the github

random sleet
#

banger

night meteor
#

We in boys