#💻・modding-dev

1 messages · Page 186 of 1

tepid crow
#

(e.g. x=100 is always right side of the screen)

#

Idk though, never looked very far into balatro's coordinate system

#

But T is almost certainly what you need

wintry solar
#

From memory, though I haven’t done much with it for a while, it’s based off the card width and height

whole hornet
#

so i know the rules say no debugging allowed

#

is there a modding discord where i can get help?

plush cove
whole hornet
#

ah

#

dope

#

wait

#

i need to figure out how to format it

#

'

plush cove
#

```

#

at the beginning and end

whole hornet
#
--- MOD_NAME: Nomads Super Cool Amazing Balatro Mod
--- MOD_ID: NSCABM
--- MOD_AUTHOR: [Nomad_00]
--- MOD_DESCRIPTION: 
--- PREFIX: nscabm
----------------------------------------------
------------MOD CODE -------------------------


SMODS.Atlas({
    key = "Jokers",
    path = "Bullseye_joker.png",
    px = 71, 
    py = 95
})

SMODS.Joker({
    key = "Joker2",
    loc_txt = {
        name = "Bullseye",
        text = {
          "If round score is exactly the amount needed,",
          "Creates 2 random {C;(blue)}spectral{} cards"
    }
     }
})


------------MOD CODE END ------------------------- ```
#

perfect thank you

#

so im just trying to test to see if i can get my card to show in the joker list

#

but it throws up an error

#

i have smod sloader and lovely installed as well as the multiplayer mod

#

i have experience with code before but not lua, so newish territory, any help would be greatly appreciated

bitter gazelle
#

send the error log pls

frosty dock
#

you don't have an atlas set so it'll show up as jimbo

#

and your loc_txt is formatted incorrectly

#

you have {C;(blue)} but need {C:blue}

whole hornet
#

I did fix a lot of it

#

One sec I'm in bed rn

#

Let me find what I have so far

#
--- STEAMODDED HEADER
--- MOD_NAME: Nomads Super Cool Amazing Balatro Mod
--- MOD_ID: NSCABM
--- MOD_AUTHOR: [Nomad_00]
--- MOD_DESCRIPTION: 
--- PREFIX: nscabm
----------------------------------------------
------------MOD 
  
local achievement_atlas = {
    object_type = "Atlas",
    key = "bullseye",
    path = "bullseye_joker.png",
    px = 71,
    py = 95,
}
SMODS.Joker({
    key = "bullseye",
    loc_txt = {
        name = "Bullseye",
        text = {
          "If round score is exactly the amount needed,",
          "Creates 2 random {C:(blue)}spectral{} cards"
    } },
    atlas = "Jokers",
    pos = {x = 0, y = 0}
   })


------------MOD CODE END -------------------------```
#

And here is the new error code

#

So now boots into the game

#

But when I go to the joker list, it crashes when I load it.

wintry solar
#

Your atlas key doesn’t match

whole hornet
#

I just noticed lol

#

But the code i executed did have matching atlas

#

There i changed it

frosty dock
#

you still have C:(blue)

whole hornet
#

Oh

#

Ill see if that works when I wake up

wintry solar
#

You also aren’t creating an atlas in this code

whole hornet
#

Darn

#

I was getting help from someone else and they told me to do it this way

#

It should be the smods.Atlas

#

Which i had right the first time?

wintry solar
#

Yes

prisma loom
#

whats the context for when you buy a joker?

#

so I could lets say set its cost to X

iron iron
#

for some reason the joker doesnt wiggle when the card scores, what's the reason?

crisp coral
#

because the affected card is other_card

frosty dock
#

remove card = context.other_card

iron iron
#

ok

#

that didnt work, still no joker wiggle

hushed field
#

If I want a consumable that does something different depending on whether we're currently in a round, what should I check? I know .shop is an option, but I'm not sure if that's also counting the blind selection screen

prisma loom
#

Is there a way to add a delay to sound q?

hushed field
frosty dock
#

I suggest you just put your play_sound call in a delayed event

prisma loom
#

like that?

#

oh ig delay should be abover it

onyx sonnet
#

Does anyone know if it would be possible to somehow modify the rank of a card to make it succeed at checks that compare it's ID to different IDs?
I want to make a joker that makes all face cards count as other face cards but it doesn't seem like there's much of a way to handle IDs like that

iron iron
maiden river
#

does anyone know how to give exactly one of something after the boss blind is defeated (ex. anaglyph gives one double tag)

wintry solar
maiden river
#

it's all about the juice 🗣️

limpid halo
#

🧃

tall tangle
#

JOOS

prisma loom
#

So I want my joker to give a Pop up notification before cards start scoring but for some reason it happens at the very end. What should I change here?

wintry solar
#

What context are you using?

prisma loom
wintry solar
#

well that's why, joker_main happens after the cards score

stiff locust
#

use context.before instead

minor magnet
#

chat what do we think of this

hushed field
#

<@&1133519078540185692>

grand violet
#

Remember kids, free robux isnt' real

hushed field
shell timber
hushed field
#

hmm, I'm trying to find the right spot to inject some code to allow a tag to retrigger playing cards, but I'm not entirely sure where that'd be best done. A lot of the calculate functions and proper contexts are dynamically set up, so it's a bit of a struggle to parse everything

prisma loom
#

So here's a small thing idk how to change, I want my Joker to start dissolve when it reaches $0 but it starts doing that only after it goes negative in $

hushed field
prisma loom
#

if its equal to 0 it doesnt dissolve

prisma loom
#

even with <= 0

#

whats the issue then?

wintry solar
#

wdym?

prisma loom
minor magnet
#

any idea on how to shorten this description?

wintry solar
#

show the full code

#

it'll be a logic error

prisma loom
# wintry solar show the full code
 SMODS.Joker {
    key = 'coffee_break',
    atlas = 'Jokers',
    pos = { x = 3, y = 2 },
    rarity = 1,
    cost = 5,
    unlocked = true,
    discovered = true,
    blueprint_compat = false,
    eternal_compat = false,
    perishable_compat = true,
    config =
    { extra = {
        money = 5,
        coffee_rounds = 0,
        target = 2,
        money_loss = 1
    }
    },
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.target, card.ability.extra.coffee_rounds, card.ability.extra.money, card.ability.extra.money_loss } }
    end,
    calculate = function(self, card, context)
        if context.after then
            if card.ability.extra.money - card.ability.extra.money_loss <= 0 then
                G.E_MANAGER:add_event(Event({
                    func = function()
                        card:start_dissolve({G.C.GOLD})
                        return true
                    end
                }))
                return {
                    message = localize('k_hnds_coffee'),
                    colour = G.C.CHIPS
                }
            else
                for _, played_card in pairs(context.full_hand) do
                    card.ability.extra.money = card.ability.extra.money - card.ability.extra.money_loss
                    SMODS.calculate_effect({
                        message = '-$1',
                        colour = G.C.RED,
                        message_card = card,
                    }, played_card)
                end
            end
        end
        if context.end_of_round and context.main_eval then
            card.ability.extra.coffee_rounds = card.ability.extra.coffee_rounds + 1
            if card.ability.extra.coffee_rounds == card.ability.extra.target then
                card.ability.extra.active = true
                local eval = function() return card.ability.extra.active end
                juice_card_until(card, eval, true)
            end
            return {
                message = card.ability.extra.active and localize('k_active_ex') or
                    card.ability.extra.coffee_rounds .. '/' .. card.ability.extra.target,
                colour = G.C.FILTER
            }
        end
        if context.selling_self and card.ability.extra.active then
            return {
                dollars = card.ability.extra.money
            }
        end
    end,
    add_to_deck = function(self, card, from_debuff)
        --card:set_cost()
    end
}
wintry solar
#

pls with syntax highlighting

prisma loom
wintry solar
#

put lua after the triple tick

prisma loom
#

oh wow

#

cool feature

wintry solar
#

you do your reduction and dissolving in the same if statement so they can never both happen

minor magnet
prisma loom
#

separate event?

wintry solar
#

I'd probably reduce in before and destroy in after

maiden phoenix
#

Not that it changes a lot mechanic-wise

hushed field
minor magnet
#

okk

hushed field
#

Trying to understand the code in the dump, and apparently I'd just hit delete on half a line and was trying to parse nonsense 😢

prisma loom
stoic sedge
#

Heya folks, making a kinda silly card idea, and needing a bit of help.
Currently, the "Repeated!" popup happens on the playing cards, but I would like it to happen on the Joker itself like Seltzer does. Probably just have the wrong context, but I'm a little unsure what to do, any help is appreciated!

calculate = function(self, card, context)
  card.ability.extra.repetitions = #G.jokers.cards
  if context.repetition and context.cardarea == G.play then
      if context.other_card:get_id() ~= 0 then
          return {
              message = "Repeated!",
              repetitions = card.ability.extra.repetitions,
              card = context.other_card
          }
      end
   end
end
wintry solar
#

remove the card = line and add message_card = card

merry raven
#

Ooo hey how did you manage to make the card effects apply after scoring, the timing for my mod is way out of wack

opal spade
merry raven
#

It's uh very long

stoic sedge
#

gotta love modding weeee

merry raven
#

Ah

#

Can you show it haha

limpid halo
merry raven
#

Cheers

manic rune
wintry solar
limpid halo
#

You’re right, downloaden 0.9.8 right now

stoic sedge
#

oop wait yeah just realize it's out of date

#

my 2 braincells missed that lmfao

manic rune
#

hey, at least thats 1 more than me

#

❤️

edgy mountain
#

can someone tell me roughly how i would do this?
i wanted to make it so discarded cards have a chance to be instantly played?
i know bunco has something similar, but it is on an enhancement while mine would be cards in general

minor furnace
stoic sedge
# stoic sedge It now crashes on scoring .-.

Huh, actually it seems the crash was caused by Talisman being activated, as even after updating it was still crashing. Turning off Talisman fixed it (forgor I had it on in the first place lol)

manic rune
#

talisman code is lowkey funky lol

stoic sedge
#

Yeah it definetly seems to be lmao

#

anyways, works like a charm now, thanks

#

guess it was just Talisman doing funky shenanagins lol

hushed field
#

My brain is mush but managed to get retrigger tags working!

limpid halo
#

heck yeah

opal spade
#

bcos thats how hook (the boss) does its discards - it uses the player's discard button but w/o taking away a discard

stoic sedge
#

oh god that sounds so funky but i guess if it works

limpid halo
#

that's really funny tbh

opal spade
opal spade
limpid halo
#

out here making side pots

#

💀

hushed field
#

Do tags always disappear upon giving a return value?

#

nevermind, I was being mindless and testing code by spawning in an entirely different object

south folio
#

How do I make a gain money function again?

wintry solar
#

from a calculate function?

south folio
#

I think?

wintry solar
#

return { dollars = amount }

south folio
#

oh, is dollars a function?

stiff locust
#

is anyone here familiar with nuclear fusion

#

i need help with a joker meltdown

#

ohhhhhhhh wait

#

i think i get it

#

context.individual and context.cardarea == G.play doesn't do the same thing as it used to

#

how do I make that trigger once in new calc instead of a thousand million times

frosty dock
#

no that check should work fine

stiff locust
#

.

frosty dock
#

are you sure that's what you have?

stiff locust
#

yeah i'm sure that's what i have

frosty dock
#

can i see the code

stiff locust
#
SMODS.Joker {
    key = "magical_waterfall",
    name = "Magical Waterfall",
    atlas = "Tsunami",
    rarity = "fusion",
    unlocked = true,
    discovered = true,
    blueprint_compat = true,
    eternal_compat = false,
    pos = { x = 2, y = 2 },
    cost = 16,
    config = { extra = { base_mult = 10, increase = 1, decrease = 0.25 } },
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.base_mult, card.ability.extra.increase, card.ability.extra.decrease * 100, card.ability.extra.base_mult / (G.GAME.unused_discards or 1) } }
    end,
    calculate = function(self, card, context)
        if context.individual and context.cardarea == G.play then
            if card_is_splashed(context.other_card) == true then
                card.ability.extra.base_mult = card.ability.extra.base_mult + card.ability.extra.increase
                card_eval_status_text(card, 'extra', nil, nil, nil,
                    { message = localize('k_upgrade_ex'), colour = G.C.MULT })
            end
        end
        if context.joker_main then
            if G.GAME.unused_discards < 4 then
                local tempmult = card.ability.extra.base_mult * (card.ability.extra.decrease * G.GAME.unused_discards)
                return {
                    mult_mod = tempmult,
                    card = card
                }
            end
        else
            return {
                message = localize('k_nope_ex'),
                card = card
            }
        end
    end
}
frosty dock
#

really

stiff locust
#

really what

#

what did I do

frosty dock
#

your last else block

#

that's if not context.joker_main

stiff locust
#

oh.

#

oh that's supposed to be

#

oh my god

#

end placements man

#

they still get me

frosty dock
#

Also use mult instead of mult_mod

stoic sedge
#

just to check before I do a stupid:
If I want to add a bit of randomness to a joker, does balatro/steamodded have it's own random function or should I just use math.random

stiff locust
#

math.random is probably fine

frosty dock
#

you should use pseudorandom('your_seed_here')

#

that ensures that your randomness is consistent with game seeds

stoic sedge
#

gotcha

#

cause i'm trying to make a thing that would adjust the rank of a card by either adding or removing a specific amount (so a 10 could become a Joker or a 9, etc etc)

#

and I was wanting it to be a bit random

frosty dock
#

a joker?

stoic sedge
#

JACK

frosty dock
#

lmao

stoic sedge
#

Why did I say joker

#

Jonklers on the mind

frosty dock
stoic sedge
#

they are in my head

frosty dock
#

you've become a jonkler

stoic sedge
#

Guess I am a clown after all \s

limpid halo
#

joker deck when

stoic sedge
#

Oops all jokers

manic rune
#

am i hooking correctly?

#

currently basing on an example from a mod rn

wintry solar
#

no

manic rune
#

huh

#

im looking at this rn, if its not how im supposed to do it then how? 😭

wintry solar
#

what are you trying to do?

tepid crow
manic rune
#

basically, i want to make it so that at end of round, a function will be run which go through some stuff in your deck and change some of the stuff in their card.ability

but currently, it only works when i have the jokers with that function in their calculation, so i want to make it so that it runs without the need of a joker

wintry solar
#

I wouldn't recommend hooking calc_context to do that

manic rune
#

hmm, how else would i do that then?

wintry solar
#

if you want it to go through all your deck probably somewhere between the round ending and the reward screen I would think

iron socket
#

Would someone be able to explain the pseudorandom probabilities to me? I'd like to make a tarot that on use has a 1/4 chance to do one thing, and a 1/8 to do another. Taking a look at some jokers and effects that have probability I'm just confused. What exactly does the ('space') part do here? Do I have to create some sort of custom seed that has a 1/8 probability?

                        return {
                            card = self,
                            level_up = true,
                            message = localize('k_level_up_ex')
                        }
                    end```
hushed field
manic rune
tepid crow
#

Also so that space joker's randomness doesnt impact say wheel of fortune

iron socket
#

Okay, so I can just put whatever in there and it won't matter? As long as it always calls the same thing?

manic rune
#

but i will try my best, thanks 🧙‍♂️

hushed field
tepid crow
iron socket
#

Hmmm okay that makes things a bit less confusing lol. And where does it actually get the probability value from? How would I format that in SMODS?

hushed field
tepid crow
manic rune
#

hmmmmmm, i will check both of those, thanks once again :D

#

oh hey, its probably this one

wintry solar
#

function end_round() it's this one that you probably want

tepid crow
manic rune
iron socket
#

I'm very new to modding 😅

hushed field
#

Speaking of hooks, I've added some additional tag contexts so tags can upgrade playing cards and retrigger them. The retrigger works entirely fine, but the upgrade hook is a bit clunky. It hooks onto score_card, but ideally I'd have the tag give it's bonus chips basically in the same loop as jokers do, so that it works on retriggers too. But eval_cards creates its dict locally, so it's not really possible to hook it, I think. Do I just have to bite the bullet and inject in SMODS or am I missing an obvious solution?

zealous glen
#

Or add a new CardArea to the calculation step with auxiliary Jokers

hushed field
tepid crow
manic rune
#

...wait, what do i call to hook to this?

iron socket
hushed field
manic rune
#

i dont think this is correct lol

iron socket
manic rune
#

oops, all 6s affects G.GAME.probabilities.normal btw, thats why you can see the odds go from 1/4 to 2/4

iron socket
#

Thanks for your help guys, really appreciate it

#

Everyone here is so helpful and nice

tepid crow
hushed field
#

I felt an inherent kindred connection between Ice and Penguins, honestly

manic rune
tepid crow
#

They indeed did

#

You can ignore that stuff before the : or . then

#

But you have a () in your function "reference"

#

Making it no longer a reference, but a call (and thus saving the result)

wintry solar
#

other than that it looks good though

manic rune
#

ohhh, i see, i just noticed that, thanks yall 💀🙏

#

oh wait, im missing something

stoic sedge
#

Okay I might be an idiot but I was trying to make a joker effect cards at the end of the scoring and it wasn't firing at all, so I did a good ol print text and got this. This seems... odd, unless I am missing something?

#

the second one just, doesn't seem to fire?

wintry solar
#

there isn't anything in G.play at the after step

stoic sedge
#

Ah
yeah okay that... that makes sense

#

ah I think I figured it out now

vocal verge
#

how can i mod this as a skin for lucky cat

stiff locust
#

i just need to do a quick sanity check

#

did context.destroying_card get changed in new calc

languid mirage
stiff locust
#

that's bad practice graagh

#

do it with malverk the texture pack manager

#

i might be getting the name wrong

languid mirage
#

🐧

stoic sedge
#

...it's a bit confused but it has the right spirit

#

The card does actually change and score as it should, the graphic just changes weirdly while the cards are still scoring so it does... that lmfao

modern kindle
#

It's doing it's best

stiff locust
#

but before the scoring animation plays

stoic sedge
#

yeah I guess that's two different things so it causes a bit of funkyness

stiff locust
#

if you put the rank changes in an event and enable blockable = true it should wait until after the scoring animation

#

to change the ranks

neat plover
#

can someone tell me why the hell its still trying to attempting to REACH A FRICKING NIL VALUE

stoic sedge
rain latch
#

i am still not sure why its doing this wth

#

brain broked

tepid crow
#

Lol

#

They're floating a bit high above the card

rain latch
#

i know its cuz of the soul_pos but even changing the pos of the card isnt moving it around the sheet

#

im just not sure why theyre showing multiple cards when the card size is the 71x95

neat plover
#

its probably a comma

timid oyster
#

Hi! I'm currentely trying to translate Balatro and can't seem to be able to find the "Choose your next Blind" text anywhere in the en-us.lua file. Does anyone know how to change it?

hushed field
timid oyster
#

Thank you!

neat plover
#

you need 7zip

vocal verge
#

i have 7zip

#

yeah

sturdy compass
rain latch
neat plover
languid mirage
#

to end with .zip

#

or something

stiff locust
#

maybe

stoic sedge
#

lemmie try

broken cliff
#

and click on Balatro Idk\

#

might work

stoic sedge
neat plover
#

wait

#

before i answer

#

just look at the thing that smods tells me

vocal verge
#

is there a texture loader for mac os?

#

or nah

neat plover
#

what the actual fuck do you want me to do with that

stiff locust
#

SMODS paperback is the mod name

#

:144 is the line it crashes on

#

attempt to call a nil value is the error

#

paperback.lua is the file it's in

broken cliff
#

stiff locust
#

so go to paperback.lua, check line 144

neat plover
#

ohhhhhhhh

#

you mean i spent three hours of my life for that?

stiff locust
#

.

#

maybe

#

coding just be like that sometimes

neat plover
#

omg i want to eat an onion and cry

stiff locust
#

you're doing fine as long as you don't let it happen a second time

stoic sedge
#

Also funny as heck it all shifted to tens for the recording lmao

neat plover
neat plover
#

the actual error was a missing n in then

stiff locust
#

oh yeah sometimes it just

#

doesn't tell you the exact line but tells you when it starts causing problems

neat plover
stiff locust
#

what editor are you using

neat plover
neat plover
stiff locust
#

big recommend vscode with the lua plugin

neat plover
#

dont wanna setup vscode because it doesnt work

limpid halo
#

you can usually look further down the crash log and figure out when your code is being called btw

stiff locust
#

oh alright then

broken cliff
neat plover
#

i cant find the plugin

#

and other plugins crash so im happy with what i have

stiff locust
limpid halo
#

uhggg i have to do joker art

#

why hard

stiff locust
limpid halo
broken cliff
#

Especially When u Draw mid and cant do nothin but Have whatever

neat plover
#

AAAGGGGHHH

#

I FORGOT AN END

stoic sedge
stiff locust
#

same

vocal verge
#

this shit so annoying

broken cliff
#

and then I died from the end results

vocal verge
#

I NEED TO RESKIN MY LUCKY CAT WITH MY BEAUTY AND I CANT FIGURE OUT HOW TO DO IT

broken cliff
#

ios?

vocal verge
#

mac os

#

i found this but i'm not sure if im correct

broken cliff
#

do u have steammolded

vocal verge
#

no

broken cliff
minor magnet
broken cliff
vocal verge
# broken cliff

i dont see the mods file even after pressing shift -> command -> .

broken cliff
#

are you at /Users/$USER/Library/Application Support/Balatro/Mods?

vocal verge
#

i dont see the mods folder

normal crest
#

if the Mods folder doesn't exist you should be able to just create it

vocal verge
#

oh ok

neat plover
#

someone tell me how to actually check if played card is a certain rank

normal crest
#

get_id returns a number not a string

#

replace '8' with just 8

neat plover
#

ok

#

well that still doesnt work

#

i wanna cry

minor magnet
#

mm can i see the full code?

neat plover
stoic sedge
#

you need to check for 8 not '8'

neat plover
#

yeah i got that thanks

stoic sedge
#

oh

#

im- blind

normal crest
#

Lol

neat plover
#

its ok

normal crest
neat plover
#

thats exactly what im asking

normal crest
#

I assume the joker doesn't do anything at all?

minor magnet
#

try putting context.other_card in a variable

#

like

#

local _card = context.other_card

#

then run the functions

neat plover
#

ok ill try

vocal verge
#

what da fack

normal crest
#

that will cause issues

neat plover
broken cliff
vocal verge
normal crest
neat plover
#

good to know

broken cliff
vocal verge
#

yes

broken cliff
#

also are you an M-series cpu or Intel based cpu

vocal verge
#

M-series

broken cliff
#

u downloaded lovely-aarch64-apple-darwin.tar.gz right?

vocal verge
#

yes

minor magnet
broken cliff
normal crest
# neat plover here?

also since you're using paperback as a reference, i recommend looking at Jestrica, that one gets upgraded by 8s as well

broken cliff
#

lovely is, after all a DLL injector

minor magnet
#

before "if contex.other_card:get_id == 8 then" you put "local _card = context.other_card"

#

then

broken cliff
minor magnet
#

you replace context.other_card in the checks with _card

broken cliff
#

cant u js do if context.other_card:get_id() == 10 or context.other_card:get_id() == 4 then

#

bcuz it seems to me that ur doing the same G.Event

neat plover
minor magnet
#

ah i see

broken cliff
#

wait so what exactly doesnt work, the message or the mult

#

i quite honestly forgot

vocal verge
#

HUH?????

wintry solar
broken cliff
vocal verge
broken cliff
#

check mods folder

neat plover
vocal verge
#

NOTHING

normal crest
#

what's in the smods-main folder

broken cliff
vocal verge
normal crest
iron socket
#

Anyone know how I could go about selecting a random joker without an edition, and then applying negative to it? Tried copying the code from Wheel of Fortune but it's not working. No errors, but even with guaranteed chance it never triggers.

                    self.eligible_editionless_jokers = EMPTY(self.eligible_editionless_jokers)
                    for k, v in pairs(G.jokers.cards) do
                        if v.ability.set == 'Joker' and (not v.edition) then
                            table.insert(self.eligible_editionless_jokers, v)
                        end
                    end
                    local temp_pool = (self.eligible_editionless_jokers) or {}
                    local over = false
                    local eligible_card = pseudorandom_element(temp_pool, pseudoseed('wheel_of_fortune'))
                    local edition = nil
                    edition = {negative = true}
                    eligible_card:set_edition(edition, true)
                    used_tarot:juice_up(0.3, 0.5)
                return true end }))```
broken cliff
# vocal verge

alr fuck it try from the start uhhh restore the original balatro files and delete the stuff in mods folder

vocal verge
#

should i just

#

reinstall balatro

wintry solar
#

It crashes on launch right?

broken cliff
#

u can js go to steam and check the files completability?(im not native and i dont use english steam)

neat plover
#

yes

broken cliff
#

that will restore them to normal

spring lantern
#

wait no i misunderstood

#

ignore me

wintry solar
#

You have other jokers that work?

broken cliff
#

properties > verify files integrity

neat plover
spring lantern
#

set_edition does the work for you

vocal verge
#

imma just reinstall balatro

broken cliff
#

alr

wintry solar
#

Can you send your main lua file?

spring lantern
wintry solar
#

There’s a utility function for that iirc

neat plover
#

but ok

#

it says line 144 where it loads jokers

normal crest
#

make sure you put your joker_peaks file in Mods/your mod/joker/joker_peaks.lua

wintry solar
#

And can you send the full crash?

neat plover
vocal verge
#

IT WORKED @broken cliff

spring lantern
vocal verge
neat plover
broken cliff
normal crest
vocal verge
#

lucky cat replacement here i come

normal crest
#

So make sure it's in the right folder

neat plover
wintry solar
#

Your file is in the wrong place

spring lantern
#

okay yeah it can't find the file

neat plover
wintry solar
#

It’s not

iron socket
spring lantern
#

if it's there then the name is wrong

neat plover
normal crest
broken cliff
#

@vocal verge alr now install malverk

spring lantern
#

i was just sending an example use lol

iron socket
#

Oh... I'm kinda dense with mod stuff lol

spring lantern
#

np

vocal verge
#

do i just drop malverk into the mods folder

iron socket
#

Well but then how does it pick a joker to apply negative to

broken cliff
#

then see if balatro launches

minor magnet
#

OMFG

#

I LOVE HIM SM

normal crest
# neat plover

Did you rename a previous file? For example the find_jimbo one

#

Or did you create a new file

neat plover
vocal verge
wintry solar
#

Oh there’s an extra bracket in your loc vars return

vocal verge
#

what the fuck do i do

neat plover
#

EVERY SINGLE TIME

wintry solar
#

What a remarkably unhelpful file loading system

spring lantern
north yoke
#

i felt that

broken cliff
normal crest
#

Yeah it's from an old version of Paperback

neat plover
wintry solar
#

It is absolutely on your side for using it

iron socket
vocal verge
#

sigma

#

ty

wintry solar
#

Either way, this is why editing in a program that colours your syntax is useful

neat plover
vocal verge
normal crest
#

yes you should get an actual IDE instead of what I'm assuming is notepad++

neat plover
broken cliff
vocal verge
#

i already have the texture

broken cliff
#

do you have 1x and 2x

vocal verge
#

what

neat plover
broken cliff
#

not u

#

the photochad

wintry solar
#

You need a 71x95 version and a 142x190 version

vocal verge
#

are you telling me i cant just slap this into the game and c

#

NOOOOOO

neat plover
spring lantern
#

LOL

faint plank
#

heres some of my favorite jokers ive been making, just thought id share GravelCheese

spring lantern
#

fire

neat plover
broken cliff
vocal verge
#

ok so i need a 142x190 version of my cat

spring lantern
#

that's your 2x

normal crest
#

it's 69x93 rn

spring lantern
#

wait are the proportions off

#

oof

minor magnet
neat plover
normal crest
#

Missing the 1 pixel paddingg

neat plover
minor magnet
broken cliff
#

@vocal verge heres how ur texture pack folder should look

1x - 71x95 version
2x - 142x190 version
localization - will discuss later
licence - ignore
main.lua - settings for what card ur replacing

#

BTW u dont have to name it AURE_SPECTRAL exactly

#

but its important that 1x and 2x folders have the same png names

faint plank
#

heres all my jokers, the last 4 are unfinished

broken cliff
minor magnet
faint plank
normal crest
minor magnet
broken cliff
faint plank
#

might tweak it yet again

broken cliff
#

(4* 4 * 4* 4*4)

minor magnet
#

even more with retriggers

#

it's insanely cool

broken cliff
#

god bless america

faint plank
# minor magnet hell yeah

oh actually, i wanted to ask, did you get that gender equality card working? i happen to be doing somthing similar

spring lantern
#

the funniest part is you can also lowroll into no mult at all

neat plover
faint plank
#

cant get this to work :P

minor magnet
broken cliff
vocal verge
faint plank
#

ill have a lookie

spring lantern
#

kity

minor magnet
faint plank
#

searching through this chat has been handy

broken cliff
wintry solar
#

the cat is cute

vocal verge
faint plank
#

oh, i love this joker too, just havent gotten it to work quite yet

minor magnet
# faint plank ill have a lookie
function Card:get_id()
  local ret = Getid_old(self)
  if ret == 12 and next(find_joker("j_garb_equality")) then ret = 13 end
  return ret
end```
vocal verge
wintry solar
#

ewww loc jokers

broken cliff
#

i pinged u with what u need in the folder

vocal verge
#

now what do i do to replace lucky cat

broken cliff
#

let me Get u the main.lua file

faint plank
normal crest
vocal verge
#

what do i type to replace with my cat

#

i need to replace lucky cat with my joker

normal crest
#

j_lucky_cat is the lucky cat key

broken cliff
# vocal verge
--- MOD_NAME: casey cat
--- MOD_ID: casey_lucky_cat
--- PREFIX: casey_large
--- MOD_AUTHOR: [cat.bread]
--- MOD_DESCRIPTION: Replaces the texture of the lucky cat.
--- VERSION: 1.0.0
--- DEPENDENCIES: [malverk]

AltTexture{ -- Lucky Cat 
    key = 'casey', -- alt_tex key
    set = 'Jokers', -- set to act upon
    path = 'casey_large.png', -- path of sprites
    keys = { -- keys of objects to change
        'j_lucky_cat'
    },
    localization = { -- keys of objects with new localizations
        'j_lucky_cat'
    }
}

TexturePack{ -- Aure
    key = 'casey', -- texpack key
    textures = { -- keys of AltTextures in this TexturePack
        'casey_large_casey'
    }
}```
#

this is the main.lua

vocal verge
#

sigma

#

now i just throw this into the mods folder

#

and i win?

neat plover
#

YEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEESSSSSSSSSSSSSSSSSSSSSSSSS

wintry solar
#

you should do the lcoalisation within that file tbh

#

change this ```
localization = { -- keys of objects with new localizations
'j_lucky_cat'
}

to 

localization = { -- keys of objects with new localizations
'j_lucky_cat' = {
name = "Casey"
}
}

broken cliff
#

oh u can do that

#

crazy

wintry solar
#

yeah

broken cliff
#

i was about to write a 3 page doctorate localization.txt file

wintry solar
#

Maybe put this on the texturepack object

loc_txt = {
  name = "Casey",
  text = {"Change Lucky Cat"}
}```
rain latch
#

this is the png i have and I am wondering how i would get the image in the 3rd row 2nd spot to appear as the card

#

like that would the pos be for the sheet?

normal crest
#

x = 1, y = 2

rain latch
#

okay cool cool

normal crest
#

top left is 0, 0

rain latch
#

okay so the image just didnt change. what the heck 😐

broken cliff
#

did u save

rain latch
#

yes

spring lantern
#

question, how should i go about checking when cards have their rank changed to a specific rank? is there a function i can hook into

rain latch
spring lantern
#

ohh you need a 2x version

normal crest
wintry solar
#

you need a 2x sprite

rain latch
#

ooooooo shoot i didnt adjust it

#

i just put the sheet in lol

#

time to asperite

normal crest
#

wait it might not be change_base

#

set_base

rain latch
#

okay maybe i made it too big cuz now there is not image lol

#

should i change the size from 100% to 200%?

#

brain is on 5% rn

normal crest
#

it's a 73x97 atlas

rain latch
#

i know i had the 1x version in the 2x section

normal crest
#

you added an extra pixel

rain latch
#

hmmm

normal crest
#

to each

rain latch
#

im the code guy the art is by my friend lol

#

so ill have to get a new one

vocal verge
normal crest
#

what's your code?

vocal verge
#

oh i forgot to change default-lua

rain latch
#

me when the art is the hardest part and not the code

#

as the not artist lol

wintry solar
broken cliff
rain latch
#

ive told them each card has to be 71x95 and they still made it wrong 💀

vocal verge
#

casey_small
casey_large

broken cliff
#

@vocal verge i goofged up

vocal verge
#

casey_small for 1x, casey_large for 2x

broken cliff
#

u goofed up

vocal verge
#

oh are they both supposed to have the same name

broken cliff
#

they should be the same name

vocal verge
#

sigma

languid snow
#

Anyone know how to get the public version of Saturn to work properly?

broken cliff
#

rename them casey_large

neat plover
vocal verge
#

ok

#

i renamed them casey.png

languid snow
broken cliff
#

error screenshot?

languid snow
broken cliff
vocal verge
#

what do i change

#

i think i also have to change default.lua

wintry solar
#

yeah

broken cliff
#

or i might be wrong

wintry solar
#

just change the stuff thats about aura to lucky cat

#

if you want to change the name that is

broken cliff
normal crest
languid snow
broken cliff
#

oh

#

u forgot steammodded

languid snow
#

whoops

vocal verge
#

why the fuck is this shit still crashing

broken cliff
vocal verge
#

@broken cliff

wintry solar
#

saturn doesn't need smods and actually causes a crash when you use smods

vocal verge
#

this is when i tried pressing "textures"

vocal verge
#

this is the current code

broken cliff
wintry solar
#

the set should be Joker

#

not Jokers

broken cliff
spring lantern
#

happens

iron socket
# spring lantern your code would probably be more like - create an empty table for the joker pool...

Coming off this post, anyone able to assist? I think I got the table set up so it grabs all jokers without an edition and puts them in the table. Just not sure how to then grab a random joker from that table

Or maybe I'm completely off

                for i=1, #G.jokers.cards do
                    if i.edition = nil then
                        table.insert(eligible_editionless_jokers_rtarot)
                    end
                end
                if eligible_editionless_jokers_rtarot ~= nil then
                    
                end```
languid snow
#

is it a versioning issue?

neat plover
#

does your saturn file have multiple files in it?

spring lantern
normal crest
iron socket
#

Gotcha, thanks!

normal crest
#

as for your other check, it will never be nil

wintry solar
spring lantern
#

ah i didn't know about this one!

iron socket
#

Okay, so scrap all that I have and use that?

wintry solar
#

it's buried in a jank place

neat plover
wintry solar
#

SMODS.Edition:get_edition_cards(G.jokers, true) should give you all the cards without an edition

#

within the jokers area

chrome widget
#

I still haven't figured out how to get the proper screen coordinates of a sprite. The Sprite:draw_self() function sets love.graphics.scale and then essentially just draws the rect of the sprite at 0,0, seemingly

vocal verge
#

whats it doing now

languid snow
vocal verge
neat plover
spring lantern
wintry solar
#

this might be some prefix jank

#

change your prefix to casey_cat

#

and then the line near the end to 'casey_cat_casey'

vocal verge
#

done

#

also how do i change the name

#

of lucky cat to casey

wintry solar
#

thats in the default.lua file you had

vocal verge
#

is this good?

broken cliff
#

return {
descriptions = {
alt_texture = {
alt_tex_aure_spec_aure = {
name = 'Casey',
}
},
texture_packs = {
texpack_aure_spec_aure = {
name = 'Casey',
text = {
'Replaces the {C:attention}Lucky{} cat',
'with casey'
}
}
}
}
}

wintry solar
#

need to change the texpack and alttex keys

vocal verge
#

what do i change it to

broken cliff
#

return {
descriptions = {
alt_texture = {
alt_tex_casey_cat_casey = {
name = 'Casey',
}
},
texture_packs = {
texpack_casey_cat_casey = {
name = 'Casey',
text = {
'Replaces the {C:attention}Lucky{} cat',
'with casey'
}
}
}
}
}

vocal verge
#

still crashing

broken cliff
#

error?

vocal verge
#

oops

#

wrong error

iron socket
vocal verge
#

current code is
main.lua:

--- MOD_NAME: Casey
--- MOD_ID: casey_cat
--- PREFIX: casey
--- MOD_AUTHOR: [cat.bread]
--- MOD_DESCRIPTION: Replaces Lucky Cat with my cat, Casey. 
--- VERSION: 1.0.0
--- DEPENDENCIES: [malverk]

AltTexture{ -- Lucky Cat 
    key = 'casey', -- alt_tex key
    set = 'Joker', -- set to act upon
    path = 'casey.png', -- path of sprites
    keys = { -- keys of objects to change
        'j_lucky_cat'
    },
    localization = { -- keys of objects with new localizations
        'j_lucky_cat'
    }
}

TexturePack{ -- Aure
    key = 'casey', -- texpack key
    textures = { -- keys of AltTextures in this TexturePack
        'casey_cat_casey'
    }
}```

default.lua:

return {
descriptions = {
alt_texture = {
alt_tex_casey_cat_casey = {
name = 'Casey',
}
},
texture_packs = {
texpack_casey_cat_casey = {
name = 'Casey',
text = {
'Replaces the {C:attention}Lucky{} cat',
'with casey'
}
}
}
}
}```

old bane
#

can i make it so that stickers apply shaders to Jokers?

wintry solar
vocal verge
#

should i just change prefix to cutie

#

so it doesn't get confused

broken cliff
#

wait

#

change prefix to casey_cat?

#

or textyures to casey_casey

wintry solar
#

change the prefix

#

at the top

broken cliff
#

(in main.lua)

vocal verge
#

mod id remains casey_Cat

#

prefix goes to cutie

wintry solar
#

prefix to casey_cat and nothing else needs to change

iron socket
vocal verge
#

IT WORKED

neat plover
#

YESSS

#

BRAAVVOO

broken cliff
vocal verge
#

HELL YEAH

wintry solar
#

@iron socket this one

#

local cards = SMODS.Edition:get_edition_cards(G.jokers, true)

iron socket
#

Right

#

Oh I see

#

ok

vocal verge
#

ok now thats done with

#

time to make the card look nicer

wintry solar
#

oh he isn't renamed 😦

iron socket
#

So the full thing with picking one of them to set as negative would be like this right?

  local picked_card = pseudorandom_element(cards, pseudoseed('editionless_rtarot'))
  picked_card:set_edition('e_negative', true)```

Edit: Okay, hopefully that works...
broken cliff
vocal verge
#

yeah

hushed field
#

Nothing's scarier than encountering a game breaking bug and not being able to reproduce it 😢

broken cliff
languid snow
#

Please someone help me lol. I know the version works with some of the new features in Saturn, but I cannot get it to work for me😂

iron socket
ionic timber
#

how exactly do I allow legendary joker to appear in shop ? G.GAME[("Legendary"):lower() .. '_mod'] = 50 doing this doesn't seem to work, and I think I've got the right key so I don't know, do I need to change the pool for the legendary ?

minor furnace
#

what do you mean no matches, it's literally in the dump file???

wintry solar
#

you have ot match the full line

minor furnace
#

oh, huh

#

interesting

#

so that turns this from an inject after to a replacement

spring lantern
vocal verge
#

ok

#

how do i change names of jokers

vocal verge
#
--- MOD_NAME: Casey
--- MOD_ID: casey_cat
--- PREFIX: casey_cat
--- MOD_AUTHOR: [cat.bread]
--- MOD_DESCRIPTION: Replaces Lucky Cat with my cat, Casey. 
--- VERSION: 1.0.0
--- DEPENDENCIES: [malverk]

AltTexture{ -- Lucky Cat 
    key = 'casey', -- alt_tex key
    set = 'Joker', -- set to act upon
    path = 'casey.png', -- path of sprites
    keys = { -- keys of objects to change
        'j_lucky_cat'
    },
    localization = { -- keys of objects with new localizations
        'j_lucky_cat' = {
            name = "Casey"
        }
    }
}

TexturePack{ -- Aure
    key = 'casey', -- texpack key
    textures = { -- keys of AltTextures in this TexturePack
        'casey_cat_casey'
    }
}```
tepid crow
#

Either remove the quotes or wrap them in square brackets

vocal verge
#

i see

tepid crow
#

Lua no likey keys formatted as strings

vocal verge
#

still crashing

minor furnace
#

Is there a way to conditionally apply a different sprite to a card for an enhancement, based on its suit? Specifically so I don't have to define four different enhancements under the hood for this one enhancement

tepid crow
minor furnace
#

there may also be a better way to implement my idea entirely

vocal verge
#
--- MOD_NAME: Casey
--- MOD_ID: casey_cat
--- PREFIX: casey_cat
--- MOD_AUTHOR: [cat.bread]
--- MOD_DESCRIPTION: Replaces Lucky Cat with my cat, Casey. 
--- VERSION: 1.0.0
--- DEPENDENCIES: [malverk]

AltTexture{ -- Lucky Cat 
    key = 'casey', -- alt_tex key
    set = 'Joker', -- set to act upon
    path = 'casey.png', -- path of sprites
    keys = { -- keys of objects to change
        'j_lucky_cat'
    },
    localization = { -- keys of objects with new localizations
        'j_lucky_cat' = {
            name = [Casey]
         }
     }
}

TexturePack{ -- Aure
    key = 'casey', -- texpack key
    textures = { -- keys of AltTextures in this TexturePack
        'casey_cat_casey'
    }
}```
wintry solar
#

not those quotes

#

the ones on the 'j_lucky_cat' = { line

vocal verge
#

table index is nil

tepid crow
#

What are you changing

vocal verge
#

nvm

#

it booted

wintry solar
#

it should be like this

localization = { -- keys of objects with new localizations
    j_lucky_cat = {
        name = "Casey"
    }
}```
vocal verge
#

❤️

tepid crow
#

Cute

minor furnace
obtuse silo
#

quick question
how do i get this to appear with jokers?
(before you ask, T: tag doesn't work with jokers)

minor furnace
chrome widget
#

Okay yeah, once again asking for help with something.

I have a little screen overlay texture that I'm drawing in screenspace because it's independent of the actual game behaviors, but I want to do a little animation transition where it pops out of the joker to fill the screen

This is the code I'm using to determine the screen position to draw it. Work well enough!

local scale = screen_res.y * 0.75 / width
local in_x_pos = screen_res.x / 2 - width * scale / 2
local in_y_pos = screen_res.y / 2 - height * scale / 2```

However, I *also* need to get the screenspace position of the joker, rather than its local/scaled transform position, in order to lerp between the little window and the final screen size
```local center = card.children.center
local start_pos = {
    x = center.T.x,
    y = center.T.y,
}```

Does anyone know how to transform the base x and y position of a joker to screenspace? Because for example, center.T gives the position of the joker in the image as (4.75, 0), so attempting to do the transition starts at the top left of the screen b/c it's really close to 0, 0 in terms of screen pixels
spring lantern
#

at least i know my hook works

obtuse silo
#

oh yeah it does

#

the doc does it with Perkeo and Negative

spring lantern
#

how can i check if a round is active at the moment? i keep getting this error due to a custom context i'm trying to add when a card's base is changed

left lance
# spring lantern

does this only happen when out of a round, or out of a game entirely?

spring lantern
#

happens as soon as the game loads so i assume when out of the game in general

left lance
#

i mean idk what the exact code is but you can have a return like (if hand and hand) or 0

#

I had a similar issue for a joker that counted the # of jokers and it looked like (if G.jokers and #G.jokers) or 0

spring lantern
#

i just did this

#

also old_card = card i may be stupid

graceful magnet
#

So Diet Cola uses add_tag(Tag('tag_double')), is there a way to use that to create a random tag?

old bane
spring lantern
#

help why do the cards i return here have no get_id function

wintry solar
#

@maiden phoenix fixed the level up thing btw

maiden phoenix
#

Yooo let's go

normal crest
minor furnace
normal crest
#

or that's what I understood from the poll functions

wintry solar
#

oh that is true

#

I have a check later for that

graceful magnet
#

ah, yeah how can I prevent that result?

spring lantern
wintry solar
#

this is my entire block Azzy

graceful magnet
obtuse silo
#

what context would you say a glass card shatters during?

grim remnant
#

question; how do we make a consumable that targets a playing card?

normal crest
spring lantern
#

yup i just figured that out

#

now how do i fetch the actual instances

#

is it just self

normal crest
#

what information do you want in your context

#

the previous rank and suit, and the new rank and suit?

spring lantern
#

yep

normal crest
#

before calling the reference you should store in a local variable rank and suit

#

from self:get_id() and self.base.suit

#

then, after calling the reference you can store the new ones doing the same thing

graceful magnet
normal crest
#

you should do add_tag(Tag(selectedTag))

#

Also you will have problems if it creates an orbital tag

#

Because orbital tags don't have a hand attached to them when they're created for some reason

wintry solar
#

you can assign a blind to the tag iirc which will handle it

#

Tag(selectedTag, 'Small') iirc

#

that might be something I've done locally though

normal crest
#

I think that'd have problems if a mod modifies blinds no?

#

I remember looking at the code and reaching that conclusion

#

was a while back tho

spring lantern
wintry solar
#

only if they directly modify the table it pulls it's hands from

spring lantern
normal crest
#

that's fun

#

glad to be of help

spring lantern
#

:3

#

this joker also spawns from another one that gets mult from how many jacks you have

obtuse silo
spring lantern
#

so i kinda wanted to have a dynamic where when that joker goes banana (extinct) then strengths become extremely valuable

normal crest
spring lantern
#

so this basically

obtuse silo
#

jokers based on ocs my beloved

spring lantern
#

ong

wintry solar
#

unless they're extra blinds in the sense of not the standard gameplay of 3 per ante

#

either way, the table should always have a Small value

scarlet spire
#

card.ability.extra_value is the card's sell value, right? for some reason it's always returning as 0 here

normal crest
frosty dock
scarlet spire
#

ah

#

so what I want to compare with is actually the sell value + extra_value

obtuse silo
#

ok so this joker's ability is to destroy certain cards scored
what's the way of doing that?

old bane
wintry solar
normal crest
#

they're just not in the pool at all?

scarlet spire
#

card.ability.sell_cost is already halved, right

normal crest
#

Oh you're right, but still, if there was never a Small blind in your run, that way of creating an orbital tag would still crash

frosty dock
obtuse silo
scarlet spire
#

ah okay

frosty dock
#

extra_value just exists because it's possible to modify it

old bane
frosty dock
#

modifying sell cost directly would be incorrect as the next set_cost call will just override it

scarlet spire
#

good to know, thanks

scarlet spire
#

extra_value can be negative to reduce price further, right?

obtuse silo
#

though i should probably do it how other cards do it (Immolate, Familiar, etc.)

wintry solar
#

use context.destroying_card

#

don't do it in any other context

#

you will end up with ghost cards

obtuse silo
#

that's when cards are being destroyed
not destroying cards
or maybe i'm misinterpreting what you're saying

wintry solar
#

you want to destroy cards right?

obtuse silo
#

yea

#

i want it to destroy after each card is scored

#

hence why it's all in context.joker_main

wintry solar
#

use destroying_card

iron iron
#

this still aint workin

wintry solar
#

what happens?

iron iron
#

just no wiggle

normal crest
iron iron
#

it works as normal, the joker just wont wiggle

#

also this happened somehow

wintry solar
old bane
#

For some reason when one of my jokers destroys cards, when i come back to the save file the cards come back and I'm back at 52

glad osprey
#

did it save?

old bane
normal crest
#

How are you destroying the cards

wintry solar
scarlet spire
#

do jokers need destroying context too, or can they be destroyed whenever without making ghosts?

wintry solar
#

jokers are fine to destroy

old bane
# normal crest How are you destroying the cards
if context.destroy_card and context.cardarea == G.hand and not context.blueprint then
            for i=1, #context.full_hand do
                local rand_cond = pseudorandom('camera') < (G.GAME.probabilities.normal / card.ability.extra.odds)

                if rand_cond then
                    return {
                        x_mult = card.ability.extra.Xmult,
                        card = G.hand.cards[i],
                    }
                end
            end
        end
normal crest
#

you're not returning remove = true

iron iron
#

lovely is 0.6.0 if that helps

normal crest
#

the latest of both is 1418a and lovely 0.7.1 so you should update

frosty dock
#

you should not be developing on old calc

old bane
#

maybe it's specifcally an issue with the deck mod i have

iron iron
normal crest
#

Oh wait you don't need to loop through full_hand

#

destroy_card is called once for every card

solar eagle
#

is there a context for when a joker is sold?

normal crest
#

context.selling_card

#

and you just check if context.card.ability.set == 'Joker'

old bane
solar eagle
normal crest
#

that's what I'm getting from the wiki yeah

frosty dock
#

the card being sold, yes

solar eagle
#

nice ty

normal crest
old bane
normal crest
#

also context.full_hand is not cards held in hand

#

that's the full played hand

#

either way, you don't need to loop through cards in destroy_card, it is called once for every card

#

and the card being checked to destroy is context.destroy_card

solar eagle
#

how do you check the current hand size? i've only found G.hand:change_size(num) to change it

normal crest
#

G.hand.config.card_limit

#

works for any cardarea

zealous glen
#

New Joker:

Yurika Harako
If first discard of round has at least 2 ranks and 2 suits, give them random Enhancements

tepid crow
grim remnant
#

what are we missing here? trying to make a consumable that can only be used on 1 playing card at a time.

tepid crow
#

You didn't end the function

normal crest
#

you have a syntax error somewhere

#

you really should use an IDE that can tell you about syntax errors

tepid crow
graceful magnet
#

so Erosion checks G.GAME.starting_deck_size, is there like a G.GAME.starting_hand_size? Since Painted deck increases starting hand size

normal crest
#

G.GAME.starting_params.hand_size

#

looks like

grim remnant
#

yeah, 100% set up the condition wrong. it's presently just

        end,```
solar eagle
normal crest
#

yep

solar eagle
#

thats what i thought

zealous glen
normal crest
tepid crow
solar eagle
#

yeah i am aware

rancid charm
#

are there any guides available for creating custom jokers and modding in general?

grim remnant
#

what do i put in can_use to detect "yep, you're selecting 1 playing card"? we're using some stuff from cryptid as a basis and it's missing can_use altogether

tepid crow
solar eagle
#

is what i do

zealous glen
#

Five Spades cards only have one suit among them

wintry solar
#

so don't discard a flush or a Xoak?

tepid crow
#

I dont think the text implies different

#

I think logic implies different

tepid crow
#

The text implies "not stone"

grim remnant
#

well, good news and bad news.
good news: the use works!
bad news: after making the tarot "pop~" sound, IMMEDIATE crash. likely because of the "add a seal" syntax we're unsure of.

zealous glen
zealous glen
tepid crow
#

Because the sentence doesnt really make sense in normal balatro

wintry solar
#

it's technically 1oak

normal crest
#

meant to reply to the message above

#

lol

tepid crow
#

Mythical 1 of a kind pokerhand

grim remnant
#

1 of a kind, yet somehow not your highest card

foggy carbon
#

is there a template for a full-rank suit replacement image for Smods? I tried to just use the default sprites from the game, and then edited it, and I get this in-game

normal crest
#

One of a kind would be a fun hand if it meant like, the card's rank and suit is unique in your entire deck

zealous glen
tepid crow
# zealous glen How so?

Let me rephrase: I think you could reasonably argue a hand of Q, Q, Stone contains 2 ranks

zealous glen
wintry solar
#

personally I think restricting it the other way is more interesting

zealous glen
#

'sides the counterargument is just set theory

normal crest
#

My first thought was 2 different ranks and 2 different suits

tepid crow
#

Sure, but it made me reread the effect to make sure I understood it

wintry solar
#

does Qhearts and Jclubs trigger it?

#

with no other cards?

zealous glen
#

and I think the vanilla rules text for Flush and Straight and XOAK implies the same interpretation that this Joker implies