#💻・modding-dev

1 messages · Page 99 of 1

autumn coral
#

😭

wintry solar
#

I don't remember why I wrote this over using the games version though

tepid crow
#

there was a reason

autumn coral
#

bad news

#

it still does not work

#

i

wintry solar
#

I think it was that the base game didn't use ref_tables?

autumn coral
#

do i have to update something in the actual ui elements?

#

like write "callback" or something

wintry solar
#

yes

autumn coral
#

oh

#

that's why it doesn't work

#

is it just like callback="cycle_update"

wintry solar
#

mhmm

autumn coral
#

sorry i know i'm asking a lot, this mod i'm making is very complicated though

#

i do not make easy projects for myself, they aren't fun if they aren't challenging

#

this is probably like the 1st serious thing i've done in lua, minus some other mods from time to time in the past

thick panther
#

Xmult_mod is for the mult's multiplier. What is the chips equivelant?

autumn coral
#

Xchip_mod i think

#

i'm not even joking

#

oh my godddd it still isn't working

#

help me

wintry solar
#

you need a mod that adds xchip support

autumn coral
#

i am going to

#

explode

#

or do i need to reference G.FUNCS.cycle_update instead

wintry solar
#

you need current_option too

autumn coral
#

how does that even work 😭

#

what do i do for that

wintry solar
#

current_option = Wrenbind_config.IsaacVersion

autumn coral
#

ok thank yoyu

#

oh

#

now it says "attempt to perform arithmetic on field "current_option" a string value"

#

💀

#

let me guess, i can't use strings

#

no shockingly it doesn't matter because this thing is still broken

wintry solar
#

your config needs to be index based

autumn coral
#

wdym

#

like [1] = x, [2] = y?

wintry solar
#
return {
    ["IsaacSaveFileNum"] = 1,
    ["IsaacVersion"] = 1
}
#

like this

autumn coral
#

including all values?

wintry solar
#

and delete the config file the game has made in appdata/balatro/config

autumn coral
#

OH

#

wait that's 100% why it's broken i think

exotic hedge
#

😔

autumn coral
#

nope

#

sorz

#

i am ass at pixel art

#

it's a miracle i've made anything

thick panther
arctic lion
exotic hedge
autumn coral
#

dude i'm tired i'm going to eat dinner

arctic lion
exotic hedge
thick panther
#

Is s_chips the chips the base chips of a poker hand type?

exotic hedge
#

or should i darken the creases more

arctic lion
#

less is more in pixel art but it doesn't look outright papery yet so i'd go quite intense with it then remember to view it from afar

#

when you're zoomed in the details always look deceptive

exotic hedge
autumn coral
#

foooood yummy

#

oh my god

thick panther
#

How do you get the base chips from the scoring poker hand type?

autumn coral
#

i hate how i know immediately what this is the second i see it

arctic lion
#

almost there i'd say, maybe a touch more yellow/off-white

#

the card is too pristine white right now, you don't want too many details as the card is quite complex as is so colour might be your friend

exotic hedge
arctic lion
#

both

exotic hedge
#

alr bet

arctic lion
#

contrast on pure white compared to pure black is much harder to notice

#

it's called the simultaneous contrast effect

arctic lion
#

too green maybe make it a touch warmer

#

then use that base colour as a reference for your darker or lighter creases

exotic hedge
#

this one looks pretty good

arctic lion
#

yeah looks more papery now

exotic hedge
arctic lion
#

yeah you're on the right track, just make small tweaks as you see fit

#

pure white like that is pretty forgiving with light details in the background

#

as long as you don't overdo it and make it too busy you've got lots of leeway

exotic hedge
#

alright!

exotic hedge
fallen tendon
#

trying to make a consumable the rerolls another consumable, and it isnt doing anything for some reason

#

i have no clue what is going on here

#

it just refuses to acknowledge the fact that there are 2 higlighted consumables

#

use the balatro source code

#

ok managed to fix it i think

edgy reef
#

SMODS.create_card

sonic bone
#

how do i get the round score from G.GAME.blind? after ante scaling is applied

#

i can only find G.GAME.blind.chips in the source code but that didnt work for me, maybe the error is elsewhere

#

nvm i got it working, my mistake:)

#

thx for the help yall

autumn coral
#

wait is that not the repo name

#

oh

#

there u go

#

look at d20 and d4

#

the actual roll mechanics are in the "logic" key in dice.lua in jokers/dice.lua

#

ur looking at d20 tho

autumn coral
#

hmm

#

how do i get the current mult at the end of calculation for jokers as a joker

#

like i want to know what everything's mult is AND THEN do my calculation

#

it's going to multiply the mult by the mult

#

mult and chips actually

sonic bone
#

i did try checking for context.final_scoring_step = true, but it seems like that doesnt work for jokers, or at least not by itself

#

this is something i would like to know myself

autumn coral
#

hm

#

i was going to copy something from cryptid but couldn't figure it oput

sonic bone
#

minor mistake i think context.after does work for scoring jokers

autumn coral
#

it does

#

i found something from cryptid but oh

#

ohhh

#

oops

#

rip

#

i found something that might work

#

i think it's

#
if 
            context.cardarea == G.jokers
            and not context.before
            and not context.after
#

oops

#

i'll lyk tho i'm testing it rn

sonic bone
#

huh

autumn coral
#

oh no now it just doesn't load

#

lmfao

sonic bone
#

what would even be the difference between that and context.joker_main

autumn coral
#

shrugs

sonic bone
#

i guess we'll never know

autumn coral
#

i'm about to test it tho, i'll lyk

#

how do u get the current chips and score tho

#

chips+mult*

sonic bone
#

hand_chips and mult, both global vars

autumn coral
#

gotcha

#

is it just

#

G.hand_chips or is it just hand_chips

sonic bone
#

if you want to add the current score to that you do G.GAME.chips

autumn coral
#

gotcha

sonic bone
#

for both

#

i only hesitate to use context.after because according to steamodded docs that makes the joker activate after deck effects (such as plasma)

#

which isnt very nice

autumn coral
#

oh

#

hm

#

honestly in my case i don't really care

#

it triggers twice though

sonic bone
#

true in your case it wouldnt matter

#

?

autumn coral
#

the first 2 is before plasma

#

i'm not sure why it does this

sonic bone
#

whats your code?

autumn coral
#

if
context.cardarea == G.jokers
and not context.before
and not context.after
then
print(hand_chips)
print(mult)
return {
message = "^2"
}
end

#

literally this

#

one sec

sonic bone
#

its triggering for every time cardarea is == G.jokers

#

which in this case would be context.joker_main and context.after

autumn coral
#

no clue

sonic bone
#

wait not after

#

uhh

#

yeah ok no clue actually

autumn coral
#

i might've made it work though

#

we'll see

#

i made it work

#

oh that's not doing what i wanted it to do though

#

this is what that does yes

sonic bone
#

even still that should only trigger once unless cardarea isn't changed from G.jokers and the docs dont mention that

autumn coral
#

no i got it

#

it triggered twice, but i just set a global variable so i only listen once

sonic bone
#

ok very nice

autumn coral
#

so now, how would i change the mult and chips completely

#

would it literally be as simpel as hand_chips = hand_chips*hand_chips and such

#

theoretically my polyphemus is working now

#

i think it works

sonic bone
#

i would not have expected that to work

autumn coral
#

what can i say i'm good at programming

#

yeah no it actually works

#

15*15
4*4

#

i'm so good

#

anyway it is NOT doing eval text

#

💀

sonic bone
#

yeah i bet it doesnt look very pretty

autumn coral
#

no actually it's surprisingly decent

#

ok this REALLY does not want to do the eval text

#

sigh i have to use my custom eval function

#

oh my god

#

wait i'm so fuckign stupid

#

😭

#

i have disable scoring animations on in talisman

#

i did need my custom function though

#

since the thing it was doing was not related to scoring

#

I'M SO RFUCKING DUM B

#

😭

#

ok it works

sonic bone
#

very nice..

autumn coral
#

how could i change legendary jokers to show up in the shop with a like .025% weight?

#

or at least, how could i make my own custom rarity that does that lol

thick panther
autumn coral
#

i was trying with the cryptid codebase but it was NOT working

autumn coral
thick panther
autumn coral
#

that's not very helpful where do i evben run that

#

not saying ur not helpful just saying the docs suck

#

but everyone knew that already

thick panther
#

You put that in your SMODS.Joker like where you put calculate = function...

autumn coral
#

oh

#

gotcha

#

like this?

thick panther
#

I think so. Ive only used it to disable a non-legendary joker from showing up.

autumn coral
#

alr

#

honestly 0.025 is way too much

#

1/20 chance sounds a lot better to me

#

nah 1/15

#

does this work even if the rarity is 4

#

guess not

#

lemme try it at q3

#

that. did not work either

#

😅

#

oH

#

no that worked

thick panther
#

nice.

autumn coral
#

it's not consistent though...?

#

ughhh

#

i do know there's SMODS.Rarity though i just don't know how to use it

sonic bone
#

weak documentation aside i find steamodded to be quite intuitive

#

props to the creators

autumn coral
#

me too yeah

sonic bone
#

if an idiot like me can use it

autumn coral
#

oh alright ok sure why not

#

now we're showing up, are we?

#

u just said that

sonic bone
#

um

#

my internet died sorry abt that

thick panther
#

It seems like the documentation is kinda getting better each day? A few days ago, half of the pages were still for the outdated pre-1.0.0 alpha versions of steamodded.

sonic bone
#

yes it was updated just yesterday so i have huge respect for whos tending to it

#

hold on im curious about something, the docs say that the blueprint_compat argument is cosmetic, but by default nothing is compatible with blueprint unless coded to be, correct?

thick panther
#

By default, I think blueprint_compat is set to false.

sonic bone
#

ah ok, context.blueprint is for when its triggered via blueprint

#

i hadnt understood that for some reason

#

thank you very much

gritty valley
mellow plover
#

is there a mod template out there for a basic single joker addon?

#

something i can work with to change and play around with the code and mod

stiff locust
#

it's pretty old by this point but
most of this should still hold up

mellow plover
#

thanks

shell tangle
edgy reef
#

None to my knowledge

stiff locust
#

i heard someone say in passing that some things in the example mods don't work anymore, haven't tested anything myself so idk for sure

shell tangle
#

It was Gros Michel/Cavendish's end of round check getting triggered 6 times because of Retrigger API calling more contexts, it's been patched.

edgy reef
#

Other than retrigger API bugfixing I don't remember anything tied to jokers that would've broken these jokers.

shell tangle
#

Glad to hear it, mostly just double checking in case there was another obvious bug I've missed.

maiden phoenix
#

Wasnt there a glitch where the joker queue was off by 1 if you had SMOD?

edgy reef
#

Got fixed

#

It actually wasn't "off by one", it was reversed rarity math

maiden phoenix
#

Ah ok cool to know

tepid crow
#

(but yeah seed behaviour should be fixed now)

frosty dock
#

chat should i set up ko-fi?

tepid crow
#

You always can. What's it for?

frosty dock
#

ig just for support for whatever projects I've ended up being a part of here xd

tepid sky
#

whats ko-fi?

frosty dock
#

donation platform basically

tepid sky
#

ah okey

sonic bone
#

how can i destroy a card? joker or otherwise?

tepid crow
#

(though tbf, I have no personal experience with such things)

frosty dock
#

i mean i do have some of my own projects like black hole, but might be tricky for steamodded

tepid crow
#

Ah yeah personal projects will probably work better

frosty dock
#

I'm top contributor by far and do a lot of organizing and stuff, but I've never claimed it as my project

tepid crow
#

I know Jen set up a donation for his Almanac mod which seemed to be doing alright

frosty dock
#

it's not exclusively dedicated to almanac, i don't think?

#

well kinda

crisp coral
#

it's definitely personal but with almanac attached

tepid crow
#

Oh you're right, the ko-fi page is pretty general, but the discord channel implies it's mostly almanac + other balatro mods

crisp coral
#

maybe i should plaster my kofi on all of my mods balatrojoker

tepid crow
frosty dock
#

:jolly:

crisp coral
#

btw, any updates on the sound api looping delay issue?

frosty dock
#

the what

crisp coral
#

music has a considerable delay when looping

#

excluding vanilla music

violet void
#

Hello, I am adding support with JokerDisplay (this runs after my custom joker is added correctly with SMODS.Joker)

But I assume it's not added into G.P_CENTERS

How can I get its properties?

#

or should I just write "hearts" instead (altho it could be useful for future jokers that change suit)

frosty dock
violet void
tepid crow
#

j_my_enamored_joker

violet void
#

my_enamored_joker and j_my_enamored_joker dont work

tepid crow
#

that's a weird error

#

what does your code look like

#

because it seems like you're doing j_my_enamored_joker.index when you should probably be doing G.P_CENTERS["j_my_enamored_joker"].index

violet void
#

main

local utils = dofile(SMODS.current_mod.path .. "/MyJokers-utils.lua")

-- Create an atlas for cards to use
SMODS.Atlas {
    key = "MyJokers_atlas",
    path = "MyJokers.png",
    px = 71,
    py = 95
}

-- List all Joker files here
local joker_files = {
    "enamored_joker"
}

-- Load and register Jokers using the utility function
for _, filename in ipairs(joker_files) do
    local joker = utils.load_joker(filename)
    SMODS.Joker(joker)
end

if JokerDisplay then
    SMODS.load_file("JokerDisplay.lua")()
end```

Joker Display
```local jd_def = JokerDisplay.Definitions

jd_def["enamored_joker"] = {
    text = {
        { text = "+" },
        { ref_table = "card.joker_display_values", ref_value = "mult", retrigger_type = "mult" }
    },
    text_config = { colour = G.C.MULT },
    reminder_text = {
        { text = "(" },
        {
            ref_table = "card.joker_disp

lay_values",
            ref_value = "localized_text",
            colour = lighten(loc_colour(G.P_CENTERS["j_my_enamored_joker"].ability.extra.suit:lower()), 0.35)
        },
        { text = ")", colour = G.C.UI.TEXT_INACTIVE },
    },
    calc_function = function(card)
        local mult = 0
        local text, _, scoring_hand = JokerDisplay.evaluate_hand()
        if text ~= 'Unknown' then
            for _, scoring_card in pairs(scoring_hand) do
                if scoring_card:is_suit(card.ability.extra.suit) then
                    mult = mult +
                        card.ability.extra.s_mult *
                        JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand)
                end
            end
        end
        card.joker_display_values.mult = mult
        card.joker_display_values.localized_text = localize(card.ability.extra.suit, 'suits_plural')
    end
}
#

it should quite literally be the logic used for Lusty Joker

#

enamored_joker.lua

    key = "enamored_joker",
    loc_txt = {
        name = "Enamored Joker",
        text = {
            "Played cards with",
            "{C:hearts}#2#{} suit give",
            "{C:mult}+#1#{} Mult when scored",
        }
    },
    config = {
        extra = {
            s_mult = 5, 
            suit = 'Hearts'
        }
    },
    rarity = 2,
    pos = { x = 0, y = 0 },
    atlas = "MyJokers_atlas",
    cost = 7,
    unlocked = true,
    discovered = true,
    blueprint_compat = true,
    eternal_compat = true,
    soul_pos = nil,
    order = 3.1,

    loc_vars = function(self, info_queue, center)
        return {
            vars = {
                center.ability.extra.s_mult,
                center.ability.extra.suit,
            }
        }
    end,

    calculate = function (self, card, context)
        if context.individual and context.other_card:is_suit(card.ability.extra.suit) then
            return {
                mult = card.ability.extra.s_mult,
                card = card
            }
        end
    end
}```
tepid crow
#

🤔

tepid crow
violet void
#

Maybe my json is incorrect?

tepid crow
#

I'm not seeing how that's relevant unless I misunderstand the error
oh I did misunderstand, weird that Lua gives an error like that

violet void
#
    "id": "MyJokers",
    "name": "MyJokers",
    "display_name": "Personal Jokers",
    "author": ["Me"],
    "description": "Adds leveled up Jokers of existing ones",
    "prefix": "my",
    "main_file": "MyJokers.lua",
    "priority": 0,
    "badge_colour": "c7638f",
    "badge_text_colour": "",
    "version": "1.0.0",
    "dependencies": []
}```
crisp coral
#

you're taking the value from the center itself

#

which does not have ability

#

but rather config

tepid crow
#

yeah yeah Myst is right but it's not really relevant if "field 'j_my_enamored_joker' is nil"

crisp coral
violet void
#

yes it throws an error in G.P_CENTERS["j_my_enamored_joker"]

crisp coral
#

oh

tepid crow
#

honestly I'd just print the whole G.P_CENTERS at this point

violet void
violet void
tepid crow
#

then comment out the line that's making it crash

crisp coral
#

eg G.GAME.current_round.mail_card

violet void
violet void
#

we were speaking so I thought it was ok (there was a reason), sorry

violet void
placid frigate
#

is there a way to make the card2:start_dissolve() happened after the scoring of the Joker?

tepid crow
violet void
# tepid crow what line?

colour = lighten(loc_colour(G.P_CENTERS["j_my_enamored_joker"].config.extra.suit:lower()), 0.35)

tepid crow
#

yeah so comment that line out

violet void
#

I did and it doesn't crash anymore, yeah

tepid crow
#

and print out G.P_CENTERS so you can take a look at it

violet void
#

oh I see

tepid crow
#

you can use inspect(G.P_CENTERS) to stringify the first level

weary jungle
sonic bone
#

if i wanna use pseudorandom_element() to select a random joker, do i pass G.jokers to it? because that doesnt seem to be working for me

#

it's making pseudorandom_element() return weird values like -1 or false

shell timber
#

you'd want G.jokers.cards

sonic bone
#

fuck me i thought itd be something liek that

#

tysm

wintry solar
#

how do I target smods files with lovely now?

weary jungle
#

why is this not working

wintry solar
#

show your shader code

frosty dock
#

file structure got changed around, that's all

wintry solar
#

👍

weary jungle
#

i copied from ionized, is ionized not a good base

#

from the edition example

violet void
tepid crow
wintry solar
violet void
#

I inspected card when the joker is triggered

tepid crow
#

ah

weary jungle
#
    key = "Cursedshader",
    path = "Cursed.fs"
})```
wintry solar
wintry solar
violet void
#

its probably something to do with calling DisplayJoker before adding the joker

weary jungle
violet void
#

but I made sure they are ordered correctly

    local joker = utils.load_joker(filename)
    SMODS.Joker(joker)
end

if JokerDisplay then
    SMODS.load_file("JokerDisplay.lua")()
end```
weary jungle
#

let me try something

wintry solar
#

maybe the key too

weary jungle
#

i did that, same error

#

not the key one sec

#
    --0.75X mult
    key = "Cursed",
    shader = "cursedshaderpleasework",```just to be sure, this is how you add the shader?
#

yeah its not working

#

let me tell you, this shader sure is cursed

wintry solar
#

oh right yeah

#

the key needs to match the name of the shader in the shader file

weary jungle
#

let me try that

wintry solar
weary jungle
#

it worked1!!!!

#

but still

frosty dock
#

ugh

tepid crow
crisp coral
#

damn

weary jungle
#

genuine question

violet void
#

lets see

frosty dock
#

i thought it had worked at one point :v

wintry solar
#

maybe it's on a newer version than I have?

crisp coral
#

oh right it's borked with nested files doesn't it

weary jungle
#

am i being dumb?

wintry solar
#

in answer to question 2, the values are in two different files

weary jungle
#

ok, i wasnt being dumb awesome

frosty dock
#

just tried, also borked on my end

lament rapids
#

hey! im trying to make some balatro themed graphics for a tournament and was trying to see if any of y’all have the backgrounds in the game as a video/gif? I’ve found some pictures but not anything moving. asking y’all cus you’re the ones sifting through the game making swag mods

#

or if you don’t have it is there a way I can get ‘em?

weary jungle
#

this is NOT purple

teal estuary
#

😭

gritty valley
weary jungle
#

ok now its a bit better

#

still like not purple

gritty valley
#

Use less red

weary jungle
#

i got to tweak values

frosty dock
gritty valley
#

Pure Red + Pure Blue is what we call magenta, the more traditional purple uses less red

crisp coral
lament rapids
#

ah okay that’s very helpful. thank y’all so much <3

sonic bone
#

so with the steamodded implementation of create_card() i still need to emplace it, but do i also still need to add_to_deck()?

crisp coral
#

yes

sonic bone
#

fair enough

crisp coral
#

so it triggers effects that happen when it is added to your slots (including Negative!)

#

and other mods

rough furnace
sonic bone
gritty valley
#

Why is my tag not appearing :( SMODS.Tag { key = 'legendary', loc_txt = { name = 'Legendary Tag', text = {"Create {C:attention}a", "{C:legendary,E:1}Legendary{} Joker", "{C:inactive}(Must have room)"} }, min_ante = 12, atlas = 'T', pos = { x = 0, y = 0 }, config = {}, apply = function(self, tag, context) if context.type == "immediate" then local lock = self.ID G.CONTROLLER.locks[lock] = true self:yep('+', G.C.PURPLE, function() if G.jokers and #G.jokers.cards < G.jokers.config.card_limit then local card = create_card('Joker', G.jokers, true, nil, nil, nil, nil, 'legend') card:add_to_deck() G.jokers:emplace(card) end G.CONTROLLER.locks[lock] = nil return true end) self.triggered = true return true end end }

#

Wait nvm

#

For some reason it's working now

violet void
tepid crow
#

inspectDepth or tprint I believe

wintry solar
#

just do eval print(tostring(G.P_CENTERS['j_my_enamored_joker']))

violet void
#

the thing is it crashes when I do G.P_CENTERS['j_my_enamored_joker'] and I'm suspecting it has a different name

wintry solar
#

in the debugplus console it'll be fine

tepid crow
violet void
#

it auto-disappears sadly

nocturne garnet
gritty valley
#

What am I doing wrong why is my tag not applying?

SMODS.Tag {
    key = 'legendary',
    loc_txt = {
        name = 'Legendary Tag',
        text = {"Create a", "{C:legendary,E:1}Legendary{} Joker", "{C:inactive}(Must have room)"}
    },
    min_ante = 12,
    atlas = 'TAtlas',
    pos = {
        x = 0,
        y = 0
    },
    config = {
        type = "immediate"
    },
    apply = function(self, tag, context)
        print(context.type)
        if context.type == "immediate" then
            local lock = tag.ID
            G.CONTROLLER.locks[lock] = true
            tag:yep('+', G.C.PURPLE, function()
                if G.jokers and #G.jokers.cards < G.jokers.config.card_limit then
                    local card = create_card('Joker', G.jokers, true, nil, nil, nil, nil, 'legend')
                    card:add_to_deck()
                    G.jokers:emplace(card)
                end
                G.CONTROLLER.locks[lock] = nil
                return true
            end)
            tag.triggered = true
            return true
        end
    end
}```
#

Nvm figured it out

#

Docs are wrong

tepid crow
wintry solar
gritty valley
wintry solar
#

You’re not updated

gritty valley
#

But now I am getting a different issue

#

I'll get back to you

tepid crow
# gritty valley Docs are wrong
### Tag API
# Tag:apply_to_run()
[[patches]]
[patches.pattern]
target = "tag.lua"
pattern = "function Tag:apply_to_run(_context)"
position = 'after'
match_indent = true
payload = '''
    if self.triggered then return end
    local obj = SMODS.Tags[self.key]
    local res
    if obj and obj.apply and type(obj.apply) == 'function' then
        res = obj:apply(self, _context)
    end
    if res then return res end
'''

are you sure? 🤔 this was updated 20 hours ago

wintry solar
weary jungle
thick panther
weary jungle
#

jimbo where did you go

gritty valley
#

It's type field is nil

#

Which doesn't make sense

thick panther
#

Are you on Steamodded v1.0.0-alpha-1217b?

gritty valley
#

Thx for the help y'all

#

Idk why it wasn't being passed correctly before but I restarted and it worked so I'll take it

placid frigate
thick panther
#

Does anyone know how to remove a card from the hand? I can get a random card chosen with local dCard = pseudorandom_element(G.hand.cards, pseudoseed('mjoker')), but I cant get that card removed.

gritty valley
#

Do you want it to dissolve or be discarded

thick panther
#

Dissolved. Like not in the deck anymore

gritty valley
wintry solar
#

There’s some other stuff you need to do too though

weary jungle
thick panther
#

That works perfectly! Thank you. I didnt realize that process was called disolve

wintry solar
#

We should probably have a utility function for removing cards

nocturne garnet
weary jungle
#

how do i get the location of the pixel thats used

#

so i can gradein

#

is it tex.x?

gritty valley
thick panther
#

They are disappearing from the deck, so I think it does work?

gritty valley
#

If it works it works

nocturne garnet
tidal ice
#

do the tarot cards use a particular font that I can just import into paint.net

nocturne garnet
#

if so then you should use :remove() i think

#

if you dissolve it does some weird ghost shit

thick panther
tidal ice
#

oh true

rough furnace
#

remopve is all thats nessicaery to destroy a card (I use it for DebugPlus), but I'm not quite sure the process for disolving a card

tepid crow
gritty valley
#

Lemme check

rough furnace
#

yeah dissolve calls remove

gritty valley
fallen tendon
#

The new steamodded docs are so good

rough furnace
#

shoutout aure for those

fallen tendon
#

Just realized soooooo many things that there are much much easier ways of doing

placid frigate
#

so what's the difference between remove and dissolved?

rough furnace
#

remove just gets rid of the card. Dissolve does thefading effect then calls remove

placid frigate
weary jungle
#

AHHH!!!!

gritty valley
weary jungle
#

what did i do???

rough furnace
gritty valley
weary jungle
balmy stump
#

i wanna make a mod that lets you see future cards for this and the next blind, and what cards are linked to eachother.

fallen tendon
tepid crow
#

isn't it only particles? no shaders?

fallen tendon
#

Remove just completely thanos snaps the object from existence

fallen tendon
balmy stump
fallen tendon
#

Its best to use dissolve in most cases

rough furnace
placid frigate
weary jungle
#

is texture_coords normalized? if not, what are the dimensin

balmy stump
#

cool

balmy stump
fallen tendon
rough furnace
#

4

#

I think the recorded fps is fairly low

wintry solar
#

If it’s playing cards you’re dissolving you need to remove them from other tables too and call the calculate function

rough furnace
#

depends when you're removing them

faint yacht
#

Does in_pool also prevent spawns by consumables and what not?

rough furnace
#

but yeah in certain parts of calcuation removing them causes ghost cards

weary jungle
#

i am NOT getting shaders down

thick panther
tepid crow
rough furnace
#

I don't know ff the top of my head

weary jungle
#

what is hapen

tepid sky
thick panther
rough furnace
weary jungle
#

i just want it to fade to black at the edges

rough furnace
#

well you probably want too figure out if you'reo n the edge or not

#

first

tepid crow
balmy stump
rough furnace
thick panther
#

Is there a way to display a message without using this?

return {
  message = '...',
  colour = G.C.RED
}
rough furnace
#

but it does seem like a common bug that could be fixed

faint yacht
weary jungle
#

awesome

#

i love shaders

tepid sky
#

lol

thick panther
faint yacht
#

I've yet to use a localization file myself, so, can't really say much there. 😅

balmy stump
weary jungle
#

now if i move my joker over here it had a blue

balmy stump
#

just remove the explanations

weary jungle
#

this is so balls

placid frigate
weary jungle
#

shader

#

this is NOT what i want

thick panther
balmy stump
#

atleast it isnt crashing

placid frigate
weary jungle
#

its wierd

#

its coding

rough furnace
#

it's graphics coding

#

it can do a lot

#

like all editions are shaders

#

the disolve effect is a shader

#

the background is a shader

#

thunk is good with shaders

faint yacht
#

Think of the Minecraft's enchantment glow... also could count as a shader imo. 😂

placid frigate
balmy stump
#

how do i screw with ui

weary jungle
balmy stump
weary jungle
#

i am SO bad at shaders

violet void
weary jungle
#

is there a way to refresh shaders

#

like if i make a change to a shader, then i press M, it reinjects the shader?

#

this is so bad... and its not even working

placid frigate
#

for loc_vars = function(self, info_queue, card) and calculate = function(self,card,context) is the word function defining it as a function or is it the name (the name of this function being named function

balmy stump
#

does anyone have any mods that just alter the ui so i can use them as a reference. @EV3RYONE

faint yacht
#

Function.

placid frigate
#

so the first one

faint yacht
#

Ye.

violet void
fallen tendon
#

Shaders have nothing on regex tho

weary jungle
#

how do i darken a shader so that as you get closer to the edge it gets darker?

#

regex is life find and replace rigt?

weary jungle
#

i might just settle for purple

#

but i cqant

#

i need closeur

balmy stump
#

i felt the same way and eventually after changing a : to a . my code worked, took a extremely long time to figure out that was the problem

weary jungle
#

wrong image

balmy stump
#

lmfao

weary jungle
#

what is a swizzle??????

#

they just making things up now

balmy stump
#

tf is a swizzle

weary jungle
#

"ah yes the common swizzle bug" insane

tepid crow
tidal ice
#

I never thought an error message would make me laugh

violet void
gritty valley
tidal ice
#

ah

weary jungle
gritty valley
tidal ice
#

thats such a goofy name for an aspect of shaders

tepid crow
gritty valley
tidal ice
#

crazy

thick panther
#

Should I reword the description to say "held cards"? Also, should it give something positive in return? The deck its used in gives +5 hand size.

violet void
#

so I still dont get why third image crashes

gritty valley
thick panther
stiff locust
balmy stump
stiff locust
#

after each played hand, destroy a random card in hand

weary jungle
#

im going to change random values till i see anything working

rough furnace
stiff locust
#

also if it's

#

a random card in the hand you play that's played hand/played card

#

and a random card held in your hand and not played is held in hand/held cards

balmy stump
weary jungle
#

learning shaders:

thick panther
weary jungle
#

PURPLE?????

#

release me

stiff locust
stiff locust
balmy stump
# thick panther When you play a poker hand, the joker will destroy a random card held in your ha...

yeah this joker is pretty much utter dogshit. if you get it at the start of the run and play three hands each round you will loose 72 cards by ante 8, even if you only play 1 hand which blocks you from using most accumulating jokers, its 24, your probably going to have to use discards in order to remove any valuable card that you aren't willing to play, which gets rid of more options. this is more like a challenge deck effect than an actual joker.

#

although it gets rid of cards its just a huge pain to work around all the downsides

faint yacht
#

This is why the Joker is tied to a deck, as was mentioned above.

balmy stump
thick panther
thick panther
balmy stump
weary jungle
#

is uv the whole screen?

balmy stump
#

3 cards lost per round till ante 8 is 72 * 3 is 216 mult will make it decent enough to be worth considering early into a run, and considering all the gymnastics needed to get 20 extra cards it isnt too powerful either

#

considering the fact that this also is a deck thinning card it wouldnt make sense to give any more mult than this

violet void
#

main

local joker_files = {
    "enamored_joker"
}

for _, filename in ipairs(joker_files) do
    SMODS.Joker(utils.load_joker(filename))
end

if JokerDisplay then
    SMODS.load_file("JokerDisplay.lua")()
end```

JokerDisplay
```local jd_def = JokerDisplay.Definitions

jd_def["j_my_enamored_joker"] = {
    text = {
        { text = "+" },
        { ref_table = "card.joker_display_values", ref_value = "mult", retrigger_type = "mult" }
    },
    text_config = { colour = G.C.MULT },
    reminder_text = {
        { text = "(" },
        {
            ref_table = "card.joker_display_values",
            ref_value = "localized_text",
            colour = lighten(loc_colour(G.P_CENTERS["j_my_enamored_joker"].config.extra.suit:lower()), 0.35)
        },
        { text = ")", colour = G.C.UI.TEXT_INACTIVE },
    },
    calc_function = function(card)
        local mult = 0
        local text, _, scoring_hand = JokerDisplay.evaluate_hand()
        if text ~= 'Unknown' then
            for _, scoring_card in pairs(scoring_hand) do
                if scoring_card:is_suit(card.ability.extra.suit) then
                    mult = mult +
                        card.ability.extra.s_mult *
                        JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand)
                end
            end
        end
        card.joker_display_values.mult = mult
        card.joker_display_values.localized_text = localize(card.ability.extra.suit, 'suits_plural')
    end
}```

Is it possible that JokerDisplay is loaded before the Jokers are added with SMODS.Joker(joker)?
thick panther
balmy stump
#

i mean the name is gluttony id kind of expect that it would get stronger

weary jungle
#

ONCE I FIX THIS SHADER ITS OVER FOR YALL!!!!

placid frigate
#

how am I able to set up an event after my function of scoring cards

weary jungle
#

WAIT! this is good

#

im learnin

#

g

placid frigate
weary jungle
#

ok.. all the values are lik all wierd

balmy stump
frosty dock
#

Hand -> cards you're holding
Poker hand -> cards you're playing

balmy stump
#

also if your going to give the card +3 mult then nerf the hand size because its pretty much just a buffed painted deck with a weird playstyle atp

frosty dock
#

but the game itself likes to use "held in hand"

balmy stump
#

yeah

faint yacht
#

held could also be used for Jokers. You're holding them in a specific way, after all.

weary jungle
#

Im going to continue my shader struggle here

placid frigate
#

best of luck

weary jungle
#

i pulled out the desmos, its going down

balmy stump
#

how does "function G.UIDEF.view_deck(unplayed_only)" check if full deck or remaining deck is selected in the deck menu

tidal ice
#

I love making placeholder sprites sometimes

hardy viper
#

or just look through references

balmy stump
hardy viper
#

(to view_deck)

balmy stump
#

like look through uidef like im doing

hardy viper
weary jungle
#

i did the uv thing

wintry solar
split creek
#

How would you check the enhancement of a card in hand?

#

I've been trying to figure it out, but it appears to be different than for played cards

#

G.hand.cards[i].config.center_key == "m_steel"This is what I'm at currently

wintry solar
#

That looks fine

thick panther
#

Putting this here in case anyone wants the full pattern to the Cartomancer joker.

brittle stump
#

Hi is there any card drawing tutorial

#

I would love try my hand in it

thick panther
# brittle stump Hi is there any card drawing tutorial

I dont think so, but here are some guidelines to follow:

  • In your mod's dir, you need an assets directory with 1x and 2x directories inside
  • The base Joker sprite needs to be 71x95. That one goes in 1x
  • The joker in the 2x dir is just a scaled version of the 1x joker (142x190) for pixel smoothing.
  • The resolutions also account for the border (The card frame), so make sure you have that too.
  • To add the Jokers sprites to your Joker, you need to use SMODS.Atlas. I recommend looking at the Steamodded wiki (https://github.com/Steamopollys/Steamodded/wiki/SMODS.Atlas) or This post: #1307744498360520805 message
GitHub

A Balatro ModLoader. Contribute to Steamopollys/Steamodded development by creating an account on GitHub.

brittle stump
#

Is there like, any card templates

arctic lion
#

or any from the plethora of mods

thick panther
mystic river
#

there's #1224362333208444989, which i hope i linked properly because mobile discord doesn't make it easy if a thread is inactive

#

oh good that is correct

brittle stump
#

I see only #deleted-channel

mystic river
#

probably because you haven't loaded the thread or whatever
clicking it should still take you there

brittle stump
#

I don't really want to code tho, just make cards for other people to use

brittle stump
#

Can you ping me here

arctic lion
#

or make some for fun

#

but you still need to know the modding requirements

#

especially if you plan on getting them implemented

gaunt thistle
rough furnace
#

It shouldn't crash?

#

I've had a patch with invalid characters forever and it always just printed an error and kept on

gaunt thistle
#

It'll crash here if there's a path separator in the buffer name iirc

#

You're correct in that the actual file write is checked such that panics are handled

rough furnace
#

oooh

gaunt thistle
#

Yeah, that .parent() call will return =[SMODS _ "src/

rough furnace
#

based

gaunt thistle
#

Unfathomably

#

I would like to have some sort of pattern to detect if the buffer name is like =[SMODS _ "src/overrides.lua"] as it would make the dumps end up in a logical location

#

If they don't match that then we can sanitize and dump em to whatever

rough furnace
#

true

#

hold on

#

just rewrite this with rust

#

surely something won't change and break it later down the line

gaunt thistle
#

ez pz

#

makes sense

#

split by space, match against the first, grab the path at the end, resolve that down to a directory

rough furnace
#

yeah

gaunt thistle
#

Am I right in assuming that the underscore in =[SMODS _ "src/overrides.lua"] can be the mod id?

rough furnace
#

yeah

#

it's just what SMODS uses for it's internal files

gaunt thistle
#

Are there any limitations on what can and cannot be a mod id?

rough furnace
#

unsure

gaunt thistle
#

heard

rough furnace
#

and then make sure it's okay with ones that don't match, e.g. =hi =[] =[hi] =[john cena]

#

I think json values allow any arbitry characters as the id

#

header ones don't allow spaces and newlines

gaunt thistle
#

and just print out a warning

#

but we'll see how complicated it is

rough furnace
#

I think just filter out invalid characters and do a best effort based on the name

mystic river
rough furnace
#

like =hi = hi =[john cena] = john cena =[] = ???

#

and if theres dups cry about it

gaunt thistle
#

those are all actually valid paths

rough furnace
#

oh

gaunt thistle
#

apparently

#

=[SMODS _ "src/overrides.lua"] crashes ONLY because of the quotes

rough furnace
#

oh quotes ar invalid

gaunt thistle
#

thanks legacy windows

rough furnace
#

I love inheriting quirks from an operating system I don't even use

#

wine my beloved

gaunt thistle
#

=[COM _ "src/overrides.lua"]

#

actually that would be fine

rough furnace
#

I'm amking a buffer named just COM

gaunt thistle
#

omg 😊

rough furnace
#

also how will it work with weird named buffers (no = or @)

#

like DebugPlus Eval

gaunt thistle
#

we can implement a specific case for DebugPlus, but other cases would likely be ugly dumped into whatever the path sanitizes down to

#

in the same manner that =[OMGWTFBBQ ojdkawodaaw "odkwaopdkoawd.lua"] would

rough furnace
#

I mean no-one is going to patch DebugPlus eval

#

Just make sure it doesn't crashe

gaunt thistle
#

... for now

#

heard, will do

#

I'll make a test suite

rough furnace
#

Someone put a regex patch in their mod that matches return and replaces it with in buffers named DebugPlus Eval and then get popcorn and watch me debug a weird issue for a while

brittle stump
#

Honestly i kinda had idea of creating jokers based on pre existing card games

violet void
balmy stump
#

im really struggling with finding out how to work a ui, can someone point me in the right direction?

violet void
# rough furnace send crash

JokerDisplay doesn't have G.P_CENTERS with my new joker for some reason

But when I print it in the calculate function it doesnt crash

    key = "enamored_joker",
    loc_txt = {
        name = "Enamored Joker",
        text = {
            "Played cards with",
            "{C:hearts}#2#{} suit give",
            "{C:mult}+#1#{} Mult when scored",
        }
    },
    config = {
        extra = {
            s_mult = 5, 
            suit = 'Hearts'
        }
    },
    rarity = 2,
    pos = { x = 0, y = 0 },
    atlas = "MyJokers_atlas",
    cost = 7,
    unlocked = true,
    discovered = true,
    blueprint_compat = true,
    eternal_compat = true,
    soul_pos = nil,

    loc_vars = function(self, info_queue, center)
        return {
            vars = {
                center.ability.extra.s_mult,
                center.ability.extra.suit,
            }
        }
    end,

    calculate = function (self, card, context)
        if context.individual and context.other_card:is_suit(card.ability.extra.suit) then
            print(inspect(G.P_CENTERS["j_my_enamored_joker"].config.extra))
            -- local result = eval print(tostring(G.P_CENTERS['j_my_enamored_joker']))
            return {
                mult = card.ability.extra.s_mult,
                card = card
            }
        end
    end
}```
#

for context im trying to make the joker compatible with DisplayJoker
it's been really bugging me

tepid sky
#

how'd i go abouta having a seal removing it self? ._.

#

am trying with cryptids consumable but it doesn't seem to be working

weary jungle
#

WE ARE SO CLOSE!!!!

tepid sky
#

:O

violet void
thick panther
weary jungle
#

orple

#

oh yeah

#

just gotta tweak things

#

more purp

#

i need more

opaque jewel
#

someone has the same problem ? on lauch

Oops! The game crashed:
Syntax error: card.lua:961: '}' expected (to close '{' at line 957) near 'grim_bonus_mult'

Additional Context:
Balatro Version: 1.0.1m-FULL
Modded Version: 1.0.0~ALPHA-1217b-STEAMODDED
Love2D Version: 11.5.0
Lovely Version: 0.6.0

Stack Traceback

(3) C function 'function: 0x356ad378'
(4) global C function 'require'
(5) main chunk of file 'main.lua' at line 881
(6) global C function 'require'
(7) Love2D function at file 'boot.lua:323' (best guess)
Local variables:
c = table: 0x356aefe8 {identity:false, version:11.5, accelerometerjoystick:true, modules:table: 0x356af038 (more...)}
openedconsole = boolean: false
confok = boolean: true
conferr = nil
(8) global C function 'xpcall'
(9) Love2D function at file 'boot.lua:362' (best guess)
Local variables:
result = boolean: true
(10) global C function 'xpcall'
(11) Love2D function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '(Love2D Function)' (defined at line 355 of chunk [love "boot.lua"])
inerror = boolean: true
deferErrhand = Lua function '(Love2D Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(Love2D Function)' (defined at line 355 of chunk [love "boot.lua"])

weary jungle
#

we did it guys

#

thats pretty cursed if i say so

thick panther
#

How do you modify how many joker slots you start with in a deck?

brittle stump
sonic bone
#

theres a way i can make a joker trigger a message under a different joker right?

balmy stump
#

i need elp

wintry solar
#

what are you trying to make?

weary jungle
thick panther
#

Im trying to come up with deck ideas themed around the 7 Deadly Sins. So far, ive already got Greed, Lust, and Gluttony. What do you think works well? Im trying to make sure each deck is unique and each deck has pros and cons (Ex. In Greed Deck, you get a lot more money and start with a lot of money, but your money is tied direcly to your Xmult). Heres what I have so far. What are your thoughts?

-- Deck Ideas:
-- - Pride Deck: Start at ante 3. Pride Joker will randomly either half chips or -3 mult.
-- - Wrath Deck: Wrath Joker Adds/Subtracts mult or chips each played hand in the range of -20 to +20. Doesnt go below 0 chips or 1 mult
-- - Sloth Deck: Start with all hand types at level 5. Can only play 3 cards per hand.
-- - Envy Deck: Envy Joker Replaces the lowest card in your hand with the highest one
weary jungle
#

what does the pride deck give? does it just thrust you into ante 3??

thick panther
#

Pride is supposed to be real confident that it will win, something like "Im so confident that I will win, that I dont need to play the early game". Im thinking Pride and Sloth need better ideas, but im not sure what

edgy reef
#

Wait wha

frosty dock
#

well anyways time to write docs for SMODS.Stake and notice more inconsistencies we glossed over

autumn coral
#

time to make my jokers be able to select other ones (pain and suffering)

#

but first: time to make it check for which of all of the save files exist in the isaac directory

gaunt thistle
#

that sounds mildly painful

autumn coral
#

it is

fallen tendon
#

i have a feeling that this is not how you are supposed to use SMODS.poll_seal

wintry solar
#

you can use it like that

fallen tendon
#

this does not seem to be doing anything tho

#

anything wrong with where im using it?

wintry solar
#

oh

#

guaranteed

fallen tendon
#

spelling

#

the worst enemy of any programmer

#

even local thunk spelled consumable as consumeable through all the balatro code

violet void
fallen tendon
#

how do you detect when a certain sound is playing?

#

i need an event to specifically trigger when a sound finishes to get the correct effect

#

either that or a fixed delay

rough furnace
frosty dock
#

someone please remind me what unlocked_stake does and how i can make it not look jank af for docs

wintry solar
#

iirc its either the key for the stake it unlocks when you beat it or it doesn’t do anything

frosty dock
#

guessing that's close enough to the 'nothing' side of that

#

yeah it definitely doesn't do anything like unlocking stakes

frosty dock
fallen tendon
#

why did local thunk have to make it so hard to bypass the speed system

#

trying to get an event to trigger at a very precise time in relation to a sound playing

weary jungle
#
                        if v.ability.set == 'Joker' and ((v.ability.edition and v.ability.edition.key ~= "e_negative")) then
                            table.insert(NonNegativeJokers, v)
                            print(v.ability)
                        end
                    end```this isnt working
mental kiln
#

How can I change mods folder location

fallen tendon
#

is there a way to change where a consumable goes when being used? i want my consumables to stay where they are

autumn coral
#

what variable stores how many hands the player has currently

#

hm

#

i found it

#

hmmm

placid frigate
#

so after playing with my Joker (takes played hearts cards and dissolves them) and I'm left with these blank spots in my hand, what are they and how do I get rid of them?

#

also on final Ante so all my Jokers are fliped, I am only using base game Jokers and my modded one

frosty dock
#

that happens when you don't destroy cards the right way iirc

placid frigate
#

what is the right wat to

#

if card2:is_suit("Hearts") then ---increment Xmult value by adding increase to the Xmult value card.ability.extra.Xmult = card.ability.extra.Xmult + card.ability.extra.Xmult_mod G.E_MANAGER:add_event(Event({ func = function() ---destroy the card card2:start_dissolve() return true end })) end end

#

this is my code for disslove

#

or where can I find how to do it

frosty dock
#

where is that

placid frigate
#

in calculate

frosty dock
#

you should use context.destroying_card for this

placid frigate
#

do I put this with my other context

frosty dock
#

no, instead of it

#

take something like

if not context.blueprint and context.destroying_card and context.destroying_card:is_suit('Hearts') then
  card.ability.extra.Xmult = card.ability.extra.Xmult + card.ability.extra.Xmult_mod
  return true
end
if context.joker_main and ... then ... end
lavish sail
#

Would anyone be able to help me figure out why Talisman is causing my game to crash on load? I've got the most up to date versions of the game, Lovely, and Steamodded and I've tried removing all other mods and still the same issue. I am able to load with earlier versions of Talisman (versions before 2.0), I really would like to get Talisman working so I can have it for dependency with Dread Jokers mod. Thanks for any help anyone can provide!

frosty dock
lavish sail
placid frigate
lavish sail
frosty dock
frosty dock
fallen tendon
#

how do you get only the first character of a string?

#

need it for suit prefix making

placid frigate
frosty dock
fallen tendon
#

oh just found change_suit

frosty dock
#

SMODS.change_base:

lavish sail
frosty dock
#

it's just that I don't think I've ever seen this exact crash

#

have you confirmed it loads without talisman?

placid frigate
lavish sail
frosty dock
#

you don't put it anywhere

#

destroying_card takes care of that for you

placid frigate
#

does it still play the cards being destroyed after the the card scoring?

frosty dock
frosty dock
lavish sail
tepid crow
fallen tendon
#

what the hell

#

why is this error in cardarea

frosty dock
tepid crow
#

I've seen some thread issues on mac before

fallen tendon
#

this is the code that somehow led to that????

#

never even calls cardarea once

lavish sail
fallen tendon
#

is it somehow related to smods.change_base?

tepid crow
fallen tendon
#

no definitely isnt

#

time to bust out the debugging tools

tepid crow
#

I believe the previous 1.2.2 version has no such issues

#

And Math's aware of the issue

frosty dock
#

does macOS have a case sensitive filesystem?

lavish sail
tepid crow
#

Ah, sucks

frosty dock
#

it seems to run fine on my end (on windows) if I take out RoJ and the outdated version of reverie you have in there

tepid crow
#

Yeah people had no issues on windows, only apple

lavish sail
#

Ah darn, wish I still had my windows computer but it crapped out and the Mac was free from a friend. Glad it can run Balatro at all. I'll just have to wait until Math and company figure out a workaround somehow. Thanks guys for trying!

karmic kelp
#

Is there any documentation for making new booster packs? Or will I have to resort to scraping another mod?

tepid crow
# frosty dock no

Presumably one of the commits between 1.2.2 and 2.0.1 fucked something up but I do not have a mac to test so I really dont feel like taking the time to inspect it haha

frosty dock
#

hold on let me add it, shouldn't be too much work

tepid crow
#

Wasnt there a text file floating around for SMODS.Booster?
Or was that for a different object

rotund finch
#

I'm trying to put some custom decks together and I'm a bit lost. Looking at how other mod decks are put together and looking over the Steamodded wiki, I understand where the config information goes, but I can't find a full list of variables it can affect. I'm aware of a few basic variables like hand size and joker slots, but I can't find all that information in one place. Any help would be appreciated.

fallen tendon
#

LOL

#

I MANAGED TO MAKE MY BALATRO GAME INSTANTLY CLOSED

#

COPY TABLE IS FORBIDDEN

placid frigate
#

is this all from the wiki?

frosty dock
#

I'll still make my own version to make sure I double check everything for correctness

rotund finch
#

What's that?

karmic kelp
#

what's the "best" state check for verifying the player's not actively doing something else so they don't modify a card while a calculation is ongoing?
(for a consumable's can_use)

rotund finch
#

I've looked at that, but it wasn't all that clear to me

tepid crow
#

you mean how to unzip the exe into the source code?

half temple
#

with 7zip

#

it literally gives you an option in the right click menu in explorer to open up games exe as archive

rotund finch
#

No, I can open it fine, it's just that the config info doesn't look like it does with steamodded. I'm not seeing anything that's like hand_size = 4.

tepid crow
#

yeah they're formatted differently

#

this is e.g. the definition for painted deck @ game.lua:639

b_painted = {name = "Painted Deck", stake = 1, unlocked = false,order = 12, pos = {x=4,y=3}, set = "Back", config = {hand_size = 2, joker_slot = -1}, unlock_condition = {type = 'win_stake', stake=3}},
rotund finch
#

all I'm seeing is stuff like effect.config.joker_slot, but I don't see where the actual variables are being put in

wooden nexus
#

Who here has worked with shaders? I wanted to see if there's any way for me to make a shader but be able to preview it without having to go in and out of Balatro

tepid crow
#

then the Back:apply_to_run (at back.lua:174 like I mentioned before) takes those variables and actually applies them to the run

tepid crow
wooden nexus
#

watch file?

tepid crow
weary jungle
#

whats it doing?

#

you guys can laugh now

rotund finch
#

Okay, I think I see what the general variables are. I'll need to play around with it more but thanks for pointing me in the right direction.

wooden nexus
#

also, i'm having a weird crash

tepid crow
#

the point of the watch command is that you don't have to do that

wooden nexus
#

ooh i read it wrong

#

So I'm trying to make a custom title screen. I have 2 problems with it

#
  1. I can't load the one modded joker from Ortalab when I try to make the custom title screen
  2. Any legendary joker just... y'know
#

Is offcentered

#

loading Perkeo works but idk why ortalab's joker won't

frosty dock
wooden nexus
#

Weird. I tried loading caffeyne and it worked

#

But of course the off-centered/wrong sized sprite is bugging me

split creek
#

My tag causes the game to softlock (freeze?) when it tries to run

    object_type = "Tag",
    atlas = "mtg_tag",
    name = "mtg-bigmagictag",
    order = 26,
    pos = { x = 0, y = 0 },
    config = { type = "new_blind_choice" },
    key = "bigmagictag",
    min_ante = 2,
    loc_vars = function(self, info_queue)
        info_queue[#info_queue + 1] = { set = "Other", key = "p_mtg_magic_pack", specific_vars = { 1, 4 } }
        return { vars = {} }
    end,
    apply = function(tag, context)
        if context.type == "new_blind_choice" then
      print("TAG ME")
            tag:yep("+", G.C.SECONDARY_SET.Code, function()
                local key = "p_mtg_magic_pack_3"
                local card = Card(
                    G.play.T.x + G.play.T.w / 2 - G.CARD_W * 1.27 / 2,
                    G.play.T.y + G.play.T.h / 2 - G.CARD_H * 1.27 / 2,
                    G.CARD_W * 1.27,
                    G.CARD_H * 1.27,
                    G.P_CARDS.empty,
                    G.P_CENTERS[key],
                    { bypass_discovery_center = true, bypass_discovery_ui = true }
                )
                card.cost = 0
                card.from_tag = true
                G.FUNCS.use_card({ config = { ref_table = card } })
                card:start_materialize()
                return true
            end)
            tag.triggered = true
            return true
        end
    end,
  in_pool = function()
        return false
    end
}```
wooden nexus
#

what's it supposed to do?

#

@split creek

split creek
#

It opens a custom pack that I have implemented

#

It worked fine until I updated steamodded

wooden nexus
#
    key = 'TC_Tag',
    atlas = 'ShinkuTags',
    pos = {x = 0, y = 0},
    name = "Shinku_Tag Card",
    order = 1,
    min_ante = 2,
    loc_txt = {
        name = 'Tag^2',
        text = {
            'Gives a free',
            '{C:dark_edition} Mega Tag Card Pack'
        },
    },
    config = {type = "new_blind_choice"},
        apply = function(tag, context)
        if context.type == "new_blind_choice" then
            local lock = tag.ID
                    G.CONTROLLER.locks[lock] = true
            tag:yep('+', G.C.SECONDARY_SET.Spectral,function() 
                            local key = 'p_Shinku_tagpack_giga_'..(math.random(1,2))
                            local card = Card(G.play.T.x + G.play.T.w/2 - G.CARD_W*1.27/2,
                            G.play.T.y + G.play.T.h/2-G.CARD_H*1.27/2, G.CARD_W*1.27, G.CARD_H*1.27, G.P_CARDS.empty, G.P_CENTERS[key], {bypass_discovery_center = true, bypass_discovery_ui = true})
                            card.cost = 0
                            card.from_tag = true
                            G.FUNCS.use_card({config = {ref_table = card}})
                            card:start_materialize()
                            G.CONTROLLER.locks[lock] = nil
                            return true
                    end)
                    tag.triggered = true
                    return true
        end
    end,
    }```
#

Feel free to edit this one

karmic kelp
split creek
wooden nexus
#

strange

wooden nexus
#

I mean make yours out of my code

edgy reef
#

SMODS beta is coming together

split creek
#

same issue occurs

wooden nexus
#

Strange

#

It's literally the code of Standard pack but changed

split creek
#

What version of smods are you using?

wooden nexus
#

the one from days ago

split creek
#

I've no idea what's wrong since it doesn't crash, and I haven't changed anything since like a month ago

karmic kelp
#

Is there a way to forcibly open a booster pack from the collections menu, like DebugPlus lets you forcibly gain jokers/consumables?

tepid crow
split creek
#

There were some tag changes committed yesterday, maybe that's the issue?

edgy reef
#

Yes

tepid crow
karmic kelp
#

oh I need to specifically be in a shop? ok

#

yup that did it, thanks

split creek
#

Figured out the issue

#

@wooden nexus
apply = function(tag, context) becomes
apply = function(self, tag, context)

thick panther
#

Is there a way to essentially remove the interest cap at the end of the round?

elder vapor
#

set it to an absurd amount

thick panther
#

How would set it to something like 1e100?

fallen tendon
#

would this be a good effect?

fallen tendon
thick panther
#

Is the ["Joker"] part of the following code snippet on the SMODS.Rarity Steamodded wiki page where you put the name of your joker or it that just Joker? If the latter, how do you set a joker to this rarity?

{
    ["Joker"] = true, --uses self.default_rate when polled
    ["Joker"] = { rate = 0.7 },
}
edgy reef
#

This is for adding the rarity into an ObjectType (which "Joker" is created as one).

thick panther
edgy reef
#

You do rarity = "prefix_custom_rarity" in the joker's declaration like how you'd do for vanilla rarities.

supple topaz
#

is there a way to force the game to display the high resolution textures found in 2x through just the settings? I can't get decent enouogh looking low res textures, so I didn't know if I could just bypass that?

#

Nvm I might just be stupid

autumn coral
#

i know i'm 100% not going to find my answer here, how do i add a permanent child that is drawn on top of all layers on my joker card and can be configured to be different sprites

#

i don't even know why i'm asking because, to my knowledge, nobody has done this yet

thick panther
autumn coral
#

no

#

not like that at all

#

i need to draw on top of that layer

#

that layer already exists and it has its own separate movement that i cannot use

#

i already looked through cryptid but what they do isn't what i'm doing

#

i need to be able to change sprites

#

this is the spritesheet. i need these to be able to be drawn on top of the joker (on top of all layers) at any time using a function

#

again i don't know why i'm asking because i did my research and nobody has done this

#

but hey it never hurts

#

i'm just driving myself crazy looking through the base game trying to convince myself that i don't need to rewrite the entire Card:draw() function

#

actually this card:draw isn't even the right fucking function i don't think

#

💀

#

i mean i've looked through all of them

#

imma be real chief i have no fucking clue how shaders work but i'm like almost 100% sure that you can't

#

also bc i still want this to be compatible with existing ones

edgy reef
#

You can use a shader to draw a sprite

#

That's what the game does already ("dissolve" is a shader)

#

Also no you don't need to for this

#

Just do what SMODS.Sticker does.

#

Have a table with all the sprites for each level, then check for what level and draw them.

autumn coral
#

i did this and it doesn't work

#

unless if i need it to be a lovely patch

#

i'm not joking this is literally 1:1 to what i did

#

local charges = {
    ["6"]= 1,
    ["4"] = 2,
    ["2"]= 3,
    ["1"] = 4
}

local function draw_charge(card, hold, charge) 
    card.children.charge = Sprite(card.T.x, card.T.y, card.T.w, card.T.h, G.ASSET_ATLAS['wrenbind_charge'], {x=charge, y=charges[tostring(hold)]})
    card.children.charge.states.hover = card.states.hover
    card.children.charge.states.click = card.states.click
    card.children.charge.states.drag = card.states.drag
    card.children.charge.states.collide.can = false
    card.children.charge:set_role({major = card, role_type = 'Glued', draw_major = card})
    card.children.charge:draw()
    print("i should've drawn by now...")
end
#

i made a new layer to draw over and also had a lovely patch to draw in the main draw function that does the animation and everything as well

edgy reef
#

Thats... not what stickers do

autumn coral
#

i know it's not exactly what they do

edgy reef
#

Unless I'm missing something this is more overcomplicated that what it actually needs to do

#

Does this need to be interacted with?