#💻・modding-dev

1 messages · Page 196 of 1

tepid crow
#

though 1/[2-10] for a legendary seems... insane on a common joker

west mason
#

i had it on common just to see it in the shop more often while testing

broken cliff
#

an idea: check if blueprint is in hand

frosty dock
#

that makes no practical difference

#

in a completely uniform distribution, the probability of hitting a number exactly is zero. This isn't exactly uniform, but the precision is high enough that it's still negligible

grim remnant
tepid crow
broken cliff
#

i feel like context.no_blueprint might not exist at all

grim remnant
#

will try that & if it doesn't work ig i'll circle back to it <-- abt to head out the door

west mason
#

i plan for it to be uncommon and to require 4 or 5 rounds until it triggers

#

idk if thats good balance

tepid crow
#

ah yeah that sounds a bit more reasonable; though 4-5 rounds is a lot haha

#

compared to e.g. invis' 2 rounds

grim remnant
#

post_trigger did not work, at least not the way we used it. gonna look into that later. ;P

atomic edge
#

is there a context that checks if any lucky effects have triggered?

wintry solar
hushed field
#

If I start messing with the probabilities of Lucky cards, how much compatability problems would that potentially cause 🤔

broken cliff
#

or editing global probability

#

like oops all sixes

hushed field
#

I just felt that other mods may mess with lucky card odds already, haha. I guess it's a quick patch then 😄

strong jacinth
#

What do you guys think of making "Balatro" UI online? SO you can test UI elements online, Like put a box, But text and so on

tall wharf
tall wharf
#

i love rhythm game

hardy viper
broken cliff
strong jacinth
#

But no "Gameplay"

broken cliff
#

so basically a ui tester

strong jacinth
#

Basically

#

Yes

tall wharf
#

i will go insane

hushed field
#

I'd dither a bit less with the shading, and first try to just do some polygonal shading, then add detailing to that. Though I'd say that already looks pretty good

manic rune
#

skyblock

tall wharf
#

not skyblock😭

manic rune
#

oneblock

tall wharf
#

i am truly going

#

insaen

manic rune
#

looks the same to me

tall wharf
#

😭

manic rune
tall wharf
#

wtf is that photoshop job

manic rune
#

if it werent for N' help (once again) then i wouldve been here for a couple more DAYS

manic rune
tall wharf
#

chisel n bits

manic rune
#

mhm, that

grim remnant
strong jacinth
#

What do yall think of the idea of an ui tester

red flower
#

i think it would be great

strong jacinth
#

I hope that you aren't ironic (or sarcastic). But isn't that ridiculously hard to make?

red flower
#

Probably not ridiculously hard but it would take a bit to make it

#

And I don't know how many people are messing with UI
I am so it would help me

maiden river
#

is there a way to check which deck is currently being used at the start of the run?

manic rune
#

you would have to manually carry everything ui-related from balatro source code, im guessing

lethal mural
#

this crashes with "attempt to compare table to number" why tho

red flower
#

talisman turns the dollars value into a table

lethal mural
#

shid

#

how do i modify it then

red flower
#

usually you would make a dummy to_big function that turns your numbers into talisman's representation but I don't know if that works with math floor

crystal perch
#

hey quick question how do i get the player's current amount of money and set that to a local var to compare to?

red flower
#

G.GAME.dollars

crystal perch
#

thank you

onyx sonnet
#

Trying to figure out how to create a joker that functions similarly to To Do List
I tried to blindly guess the poker hand to see if its only an issue of the localization not picking up on the variables but nothing has worked so far, and when it "Resets" to a new poker hand it adds the reset popup to everything

strong jacinth
humble girder
strong jacinth
#

It's okay if no, but to make this happen i'll probably need a team

red flower
lethal mural
#

crashes

#

when doing to_big on it

manic rune
onyx sonnet
#

Is that whats causing the issue?

manic rune
#

nope, it looks better that way tho❤️

onyx sonnet
#

Doesnt really matter since the joker cant multiply because it doesnt work

manic rune
#

oh also

#

wheres your loc_vars?

red flower
onyx sonnet
#

oh, i was under the impression they used the config vars

#

thanks

manic rune
humble girder
#

it's all a possibility

red flower
manic rune
#

we love gambling

humble girder
#

well, except serpent

manic rune
#

oh, also

humble girder
#

and wall and vessel, for obvious reasons

manic rune
#

the "+1 joker slot" part

lethal mural
manic rune
#

doesnt it seem like the contract has no upsides to having it in your jokers area?

humble girder
#

the edition is quasi-negative

#

so it's a net +1 slot

manic rune
#

i feel like that should be specified

red flower
humble girder
#

it is, sec

normal crest
onyx sonnet
manic rune
#

before

normal crest
#

I am pretty sure talisman's bignums automatically handle multiplying by a non bignum value

manic rune
#

"wtf is this circling work" pt 3

lethal mural
#

pretty sure it still crashed without math.floor

onyx sonnet
#

ty!

lethal mural
#

but ill try again

normal crest
#

Was the crash the same without math.floor

red flower
lethal mural
#

i believe so "compare table with number'

red flower
#

in calculate

normal crest
#

yeah it's looking like that

#

but that'd be weird

#

isn't that like the whole point

lethal mural
normal crest
#

try making a to_number function the same way you made a to_big one

#

and pass to_number(G.GAME.dollars * whatever)

onyx sonnet
#

it seems like the joker never actually changes the poker hand despite the reset bubble going through

lethal mural
#

technically i just stole it from unstable lmao

onyx sonnet
#

it also never scales the mult

lethal mural
#

but ill try

humble girder
#

it should be clear when you see any other contract that the +1 joker slot(s) in the edition area is separate

manic rune
#

ah i see

red flower
#

idk the xmult part

lethal mural
#

to_number worked

normal crest
humble girder
manic rune
#

make one which x0.5 your mult

humble girder
#

rarities not qualities

#

rip

manic rune
#

and maybe one which makes it so planet cards have 1/2 to not work?

#

❤️

red flower
humble girder
#

yes, that's the plan

red flower
#

cool

manic rune
#

does it reset every round or?

humble girder
#

no, it's not random

manic rune
#

💀

#

dang

jagged mortar
#

god i "love" lua

hushed field
#

Has anyone messed around with SMODS' quantum enhancements? It hard crashes the game when this joker's present. It's the :is_face() call that causes the crash, but I'm not sure how to work around that

manic rune
#

you should make a challenge with 5 pacts in your joker slots lol

humble girder
#

for now there are "unseen" pacts, which apply a minor blind, but you don't know which one, before you pick it, "dangerous" pacts, which always apply a showdown blind as long as one is left in the pool, and "treacherous", which apply a minor blind that you can see before picking but also have an additional downside

#

and of course

onyx sonnet
#

context.scoring_name gives the name of the currently played poker hand right?

humble girder
#

you can always skip

#

🙂

manic rune
hardy viper
humble girder
#

it's +3 mult on red card :^)

manic rune
hardy viper
#

that's evil

manic rune
#

exactly

hardy viper
#

too evil

humble girder
#

maybe, but let me first get this blind system to work, i had to rewrite way too many things for it and i expect literally every boss blind is broken right now

spring lantern
#

okay so i gotta figure out how to check every time a new card is created

manic rune
#

"seen"?

#

what if i go to collection and just

#

scroll through everything lol

spring lantern
#

no

#

cheater

manic rune
#

dang.

humble girder
hushed field
manic rune
#

oof

#

thats odd

hardy viper
#

if not card.area.config.collection

manic rune
#

i personally never touched quantum enhancements before, so that was my best guess

#

cmon guys

#

dont patch my exploit

#

:(

hardy viper
#

teehee

humble girder
humble girder
#

might be a curveball though

spring lantern
spring lantern
#

yea

hardy viper
#

check docs or test it

onyx sonnet
#

which docs

spring lantern
hardy viper
frosty dock
#

I love that gif

spring lantern
#

it's beautiful

humble girder
#

context.scoring_name is the key of the "highest priority" hand being scored (Flush if there is a flush and a pair, Straight Flush if there is a straight and a flush, Straight Flush even if it is a royal flush).

frosty dock
#

however this is a close second

humble girder
#

hi

#

dear john

#

question

frosty dock
#

wasup

onyx sonnet
#

i read the Smods docs and i often dont see stuff that other people are using

humble girder
#

how would we feel about stuff like perma_mult, perma_xmult (I think AMM has it right now) going core

hushed field
# frosty dock

john my game crashes so bad there isn't a crash log 💔

onyx sonnet
#

like context.scoring_name isnt even in smods when i search the git

frosty dock
humble girder
#

for no other reason that me not having to depend on any other mod

frosty dock
crystal perch
#

is there a way to get the context of after you end the round / when you enter the shop?
context.after and context.end_of_round and context.game_over == false doesn't seem to work

frosty dock
crystal perch
#

i looked in there

#

i have the smods wiki permanently attached to my second monitor at all times

frosty dock
#

that wasn't meant for you, sorry

spring lantern
#

you only need context.end_of_round and context.game_over == false i reckon

frosty dock
#

I think we have context.starting_shop as of recently? idr

spring lantern
#

new thing pog?

crystal perch
spring lantern
#

fair

crystal perch
#

and money updates after end round

frosty dock
crystal perch
crystal perch
#

well i havent crashed

#

okay it didn't error but it didn't print any debug info i set it to

frosty dock
#

show code

crystal perch
#

(still making it but the prints have worked with different contexts)

tall wharf
#

i can't art

spring lantern
#

fym you can't art

frosty dock
tall wharf
frosty dock
#

chances are you're not on the absolute latest smods version then, because that's when this was added

spring lantern
# tall wharf

outside of the ones i assume are unfinished these are really solid

tall wharf
#

the observer, quasi connectivity, and both pickaxes are unfinished

spring lantern
#

those are the ones i thought

tall wharf
#

ill make a joker called

frosty dock
tall wharf
#

Please do not the cat

spring lantern
#

perfect

crystal perch
#

oh yeah then i gotta update

spring lantern
crystal perch
#

i'll do it when i get back from lecture

frosty dock
#

kk

tall wharf
#

are there documentation for SMODS.optional_features

hushed field
#

I'd grab a crash report, but the game crashes before it generates one. Somehow this just shuts down the game when quantum_enhancements is enabled, and I can't figure out why.

tall wharf
#

💔

hushed field
tall wharf
#

no

#

i am not that kind of person so ill just patiently wait for the documentation

#

like i wait for portal 3

frosty dock
#

is_face counts as such because it needs to know the enhancements of a card to tell if it even has a rank

hushed field
frosty dock
#

infloops be like that

#

you can eliminate that issue if you solve the halting problem ||(you can't)||

hushed field
#

hmm how about i redesign the very core assumptions that computing is based on 🤔

edgy reef
#

Altho even then idk what precisely post_trigger is.

hushed field
hushed field
tall wharf
spring lantern
onyx sonnet
#

Im trying to scale this joker when a played hand IS the randomly selected poker hand (similarly to To Do List) but i cant get it to increase at all

spring lantern
#

someone fucked up a lovely patch or smth?

edgy reef
#

Update Lovely

spring lantern
#

that could also be it

#

LOL

humble girder
#

so

#

that blind.lua patch was me

#

and also

#

definitely update lovely 😉

spring lantern
#

yup that fixed it lmao

wintry solar
atomic edge
#

how do i change the booster pack so it doesnt use the consumable and instead just puts it into the area

wintry solar
#

Add select_card = “consumeables”

atomic edge
#

and what if i want it to go into a special area

#

thats not in the base game

#

oh nvm

#

got it

#

thanks

wintry solar
#

Change the string to the name of the area

spring lantern
#

okay so i can confirm card.area is not set before calling card.set_ability

#

which might just make my life 100x harder

#

this is what i got rn for contextç

wintry solar
#

What’re you trying to do?

spring lantern
#

by creating a table which stores the names/ids of the cards

#

but actually detecting when a card is seen while it not being in the collection (that would be some major cheese) is pretty hard turns out

wintry solar
#

Can’t you inject into the functions that populate the shop and packs instead?

spring lantern
#

inject as in...

#

patch?

wintry solar
#

Yes

spring lantern
#

😨

humble girder
#

reee blind descriptions don't show up in info_queue

spring lantern
#

i've actually never done a patch before

#

might be necessary here tho...

#

ahw fuck

#

do also need to keep in mind stuff like judgement or skips adding new cards i think

wintry solar
#

Yeah true

quasi comet
#

strange question, but G.STATES.SMODS_BOOSTER_OPENED considers any screen as valid? im using it for a can_use function but it always returns true no matter what screen I'm on, and not just the booster pack screen?

spring lantern
#

maybe i could just use the emplace hook i have already

#

there isn't any instance where a card isn't emplaced in some area right

wintry solar
#

Not that I’m aware of

spring lantern
#

we might be back

wintry solar
#

That’s why it has a squiggly

spring lantern
#

having to write card.ability.extra for every variable is to be fair a pain in the ass

grim remnant
#

okay, well, this is silly. in trying to implement that for loop from earlier, instead of making a blueprint that loops its retriggers based on a variable, we seem to have accidentally made a functioning blueprint with a finite durability.

onyx sonnet
wintry solar
#

@edgy reef oh now I’ve read the git change your old description was much better. Post trigger is just a context to do anything after any joker triggers, it can be on itself or on a different joker

#

Sort of like individual on playing cards but on jokers I guess

edgy reef
#

Ah

tall wharf
grim remnant
#

are we like, on the right track with this, or is this not even close to what we should be doing? (for context: trying to make a joker that operates like blueprint, but then retriggers that joker 3 times instead of just 1)

spring lantern
#

now just let me check if the collection counts or not

normal crest
tall wharf
#

where did my xmult go

grim remnant
#

isn't it xmult instead of x_mult? or is that a talisman change?

normal crest
#

Both are valid

tall wharf
normal crest
tall wharf
#

i did that and it didn't do the thing i wanted it to do

normal crest
#

What is the thing

tall wharf
#

i wanted it to give +15 mult then x1.5 mult after

normal crest
#

what's your card config

wintry solar
#

It’ll do that putting both in

spring lantern
#

i have no idea how i'm gonna be able to condense this description

normal crest
onyx sonnet
wintry solar
#

Yes

onyx sonnet
#

wait

#

wrong screenshot

tall wharf
#

ok i am stupid it's case sensitive

normal crest
normal crest
onyx sonnet
#

Doesnt crash anything

#

and that also isnt the issue im having

normal crest
#

What is the issue you're having

onyx sonnet
#

i cant figure out the appropriate set of contexts to trigger the scaling, only context.before makes sense but it doesnt seem to be working

normal crest
#

Can you send your full joker

onyx sonnet
#
  key = "light_house",
  config = { extra = { x_mult = 1, scaling = 0.2, light_house_poker_hand = 'High Card' } },
  unlocked = true,
  discovered = true, 
  blueprint_compat = true,
  eternal_compat = true,
  perishable_compat = true,
  rarity = 3,
  atlas = "NeatoJokers",
  pos = { x = 1, y = 0 },
  cost = 8,
  
  loc_vars = function(self, info_queue, card)
    return { vars = {card.ability.extra.x_mult,card.ability.extra.scaling, card.ability.extra.light_house_poker_hand}}
  end,
  calculate = function(self, card, context)
    if context.before and context.scoring_name == card.ability.light_house_poker_hand then
      card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.scaling
      return {
          message = localize("X")..card.ability.extra.x_mult,
          colour = G.C.MULT
      }
    end
    if context.end_of_round and context.main_eval and not context.blueprint then
      local _poker_hands = {}
      for k, v in pairs(G.GAME.hands) do
          if v.visible and k ~= card.ability.light_house_poker_hand then _poker_hands[#_poker_hands+1] = k end
      end
      card.ability.extra.light_house_poker_hand = pseudorandom_element(_poker_hands, pseudoseed('light_house'))
      return {
          message = localize('k_reset'),
      }
  end
    if context.joker_main and card.ability.extra.x_mult > 1 then
      return {
          message = localize{type='variable',key='a_xmult',vars={card.ability.extra.x_mult}},
          Xmult_mod = card.ability.extra.x_mult,
          colour = G.C.MULT,
      }
    end
  end
}```
normal crest
#

its card.ability.extra.light_house etc

spring lantern
#

thank fuck the next joker im making is super simple

onyx sonnet
normal crest
#

you forgot the extra in your check

maiden river
onyx sonnet
#

ohhh

#

ty!!

spring lantern
#

it's so hard to make something both creative but also simple and elegant enough to fit into base game

onyx sonnet
#

god i wish vscode could flag stuff like this

spring lantern
maiden river
normal crest
spring lantern
#

probably yeah

tall wharf
normal crest
#

its kind of implied and if not people will learn fast as its easy totry

#

Also parenthesis around the Currently line

spring lantern
#

god i always forget about the brackets on xmult scaling jokers descriptions

grim remnant
# normal crest Once you return you exit the function entirely

okay, that much we get, but by removing that return there, it no longer retriggers and the reset function also just... isn't happening. we're definitely missing something here. at this point we're wondering if it'd be easier to just bite the bullet and try and somehow fit the retriggers in the post-trigger thing we deprecated

maiden river
#

so it doesn't clutch for you like mr. bones

spring lantern
#

i was gonna suggest eval_this() but apparently that's deprecated

normal crest
spring lantern
#

so that's why

#

anyway yeah that

sturdy compass
#

Is anyone familiar with Quantum Ranks? I would like to refactor one of my jokers to use them but I have no clue how they work

edgy reef
#

Well, they don't really exist yet.

sturdy compass
#

Ah I see

edgy reef
#

Just a few people adding their own implementation.

maiden river
#

it's all an illusion

sturdy compass
#

A deception...

normal crest
maiden river
# sturdy compass A deception...

seeing you in the chat reminds me that I should try your mod when I get home lmao
I do have to test inter-mod compatibility at some point lol

sturdy compass
#

Yeah I'm starting to shift focus towards that (inter-mod compat) in the dev cycle so anything you can find would be super helpful

steep cloud
#

oh alright, lemme get the crash for that too

normal crest
sturdy compass
#

There's already a few I know will not work (i.e. pessimistic, soil, group chat, perspective) since those have very specific implementations that I don't know how I would do otherwise lol

maiden river
#

I see

#

luckily most of the friends vs balatro jokers are implemented in a pretty vanilla way

sturdy compass
#

What I mean by that is they'll work with vanilla and maximus jokers, but outside of those they won't

maiden river
#

oh I see

sturdy compass
#

Refrigerator probs falls into that group too

maiden river
#

well the one luck-based thing I added (a seal) doesn't even work with oops all sixes yet balatrojoker vanilla compat out the window already lmao
but yeah I can't imagine any of my jokers have that issue (yet)

sturdy compass
#

Oops compat is pretty easy lmao

tall wharf
#

hello

#

i will buff my tsunagite joker

sturdy compass
#

the huh

tall wharf
maiden river
sturdy compass
#

interesting

sturdy compass
maiden river
#

the seal in question, btw

#

(I've had runs destroyed by this seal before)

#

you'd think you'd never really hit the 0.5, but I have the world's worst luck

sturdy compass
#

oh hey I just realized Maximus now officially has more challenges than Cryptid lmao

#

we ball jimball_roll

tall wharf
#

😭

maiden river
#

oh yeah I should make some challenges at some point

sturdy compass
#

Challenges have been really fun honestly

plain apex
#

i dont think thats supposed to happen lol

sturdy compass
#

fascinating

maiden river
#

I keep just making decks 😭

sturdy compass
#

Challenges are the easiest for me to make cuz I'm not the artist lmaooooo

old bane
#

can i make it so that consumables have a chance to be able to be used again?

plain apex
old bane
tall wharf
maiden river
tall wharf
#

ok where did the final x1.5 come from

#

wtf lmao

#

ah

#

makes sense

wintry solar
tall wharf
atomic edge
#

guys when i put select_card into my booster pack config it gives the card into the area but also activates it

#

how do i prevent it from activating

tall wharf
sturdy compass
#

bruh

#

I guess it is legendary but that's a lot of text

old bane
atomic edge
#

thanks

wintry solar
#

what do you mean it activates it?

humble girder
#

also there's a possible smods contribution here

#

might as well push that in before i forget

atomic edge
#

and when you complete it it rewards you with another card

#

and when i open the booster pack

#

i select it

#

it immidiately rewards me with the card

#

dissolves the quest

#

but its still in the consumables

#

and it says 1/2

wintry solar
#

show the code

tall wharf
#

ok i nerfed it hard

atomic edge
#
    key = "questpack",
    loc_txt = {
        name = 'Quest pack',
        text = {
            "Choose one of up to 3 quest cards"
        },
    },
    atlas = 'quest_booster',
    pos = {x = 0, y = 0},
    discovered = true,
    config = {choose = 1, extra = 3},
    loc_vars = function(self, info_queue, card)
        return {vars = {card.ability.choose, card.ability.extra}}
    end,
    create_card = function(self, card)
        return create_card("Quest", G.pack_cards, nil, nil, true,  true, nil, "questpack")
    end,
    ease_background_colour = function(self)
        ease_colour(G.C.DYN_UI.MAIN, G.C.RED)
        ease_background_colour{new_colour = G.C.RED, special_colour = G.C.BLACK, contrast = 2}
    end,
    group_key = 'janm_quest_pack',
    draw_hand = false,
    cost = 12,
    select_card = "consumeables",
    weight = 1,
    particles = function(self)
        G.booster_pack_sparkles = Particles(1, 1, 0,0, {
            timer = 0.015,
            scale = 0.2,
            initialize = true,
            lifespan = 1,
            speed = 1.1,
            padding = -1,
            attach = G.ROOM_ATTACH,
            colours = {G.C.RED},
            fill = true
        })
        G.booster_pack_sparkles.fade_alpha = 1
        G.booster_pack_sparkles:fade(1, 0)
    end,
})```
wintry solar
#

no of the card

atomic edge
#

oh

#

but there are many quests and it does the same for every one

tall wharf
sturdy compass
#

goodness

wintry solar
sturdy compass
#

btw on the topic of boosters (kinda), how would I change the music of my boosters to the planet pack music?

atomic edge
#

is it maybe because i changed the buttons on the cards

#

the use and sell buttons on the quest itself is altered

#

are

#

could that be the problem?

wintry solar
#

that sounds likely

atomic edge
#

oh okay

#

thanks

#

ill change it around

normal crest
#

so why is it upgrading 10x more

tall wharf
#

feel like doing so

#

no rhyme or reason

#

but you're right

edgy reef
#

I think

sturdy compass
#

what a weird way to handle that

sturdy compass
#

I take it letterPack.ogg is just a copy of the planet music

sturdy compass
#

lmao

tall wharf
#

i recreate the notes in fl with no midi

sturdy compass
#

😭

edgy reef
#

The whole music control looks scuffed but technically works perfectly fine.

sturdy compass
#

I did locate that and was very confused which is why I asked here lmao

grim remnant
wintry solar
#

You don’t need to reduce your value within the loop

sturdy compass
#

I honestly didn't even know celestial packs had different particles

grim remnant
sturdy compass
#

Took a page out of Marie’s book for this one lol

minor furnace
#

I slightly misunderstood, this is like splash but only for high card

sturdy compass
#

Yep

#

And because of the hand type restriction you get the retriggers as a consolation

modern kindle
#

i made something kinda similar kinda not, just made it in the same vein has duo, trio, family, tribe
where instead if the hand contains a high card (lol, lmao) its a x2 mult and retriggers aces

sturdy compass
#

Bruh

#

So what, the solo?

modern kindle
#

i called it the single

minor furnace
#

so it's just strictly better than the duo

modern kindle
#

minus the fact its a worse hand, yea

#

consiering a pair beats a high card

minor furnace
#

every hand contains a high card though

#

so it procs on every single hand

modern kindle
#

depending on your run every hand could contain a pair too

#

ive had runs of nothing but full houses so its not uncommon at all

#

but it being so easily triggered is why its just an x2 mult, realistically x2 is not that significant

#

especially not when i have a card that goes up to x12

minor furnace
#

it's literally a guaranteed x2, but the retrigger on aces is really nice if you turn them into glass

modern kindle
#

i do not super often have glass aces on the regular so ive not run into much of an issue

#

realistically every card that gets you past the midgame is busted if you build for it so i dont see it as a massive issue

minor furnace
#

I mean I think it's balanced, it's just funny that it triggers on every hand you play

modern kindle
#

yeye i agree lmao

#

one of my favored cards is the brokie gamble

#

for every 5 bucks below 0 gain x3 mult

#

so -20 is 12x

minor furnace
#

The Ox kills that build, in the most hilarious way possible

#

on the other hand you'd love to see The Tooth

modern kindle
#

im thinking about making more jokers which increase how much you can go into debt, and they wont spawn unless you own the credit card already

#

but idk how much further to limit the debt

#

maybe first to 50, then 100 and end there

#

but thats alot of mult

minor furnace
#

alternatively, debt voucher?

modern kindle
#

thats true i could prob do that, but i figured the prob with voucher was that its a one time use for it to last the whole run, if i tie it to a joker then make the debt only last for as long as they hold the joker it at leasts costs a slot

#

then if they sell the jokers they can no longe ruse the mult

sturdy compass
modern kindle
#

thats true enough, i guess i just considered it much easier since you just need the card to farm it

strong jacinth
#

Anyone here good at lua and Löve with some freetime that can help me with a thingo (That can take quite a while)

edgy reef
#

what's being cooked

minor furnace
#

I think I'm going to cook a multi-wave finisher blind

west mason
#

i have this concept for a new consumable type for my Pokemon TCG mod, lemme know what you guys think

Legendary Pokemon based cards

Arceus: add 1 of each possible upgrades of your liking to a card.
Giratina: destroy 6 random cards from hand and make 2 random Jokers negative.
Palkia: +4 permanent discards.
Dialga: +4 permanent hands.
Regigigas: debuff selected joker for 3 rounds. Joker gains custom X4 Edition after.
Groudon: +7 hand size.
Kyogre: +7 permanent free shop rolls.
Rayquaza: +1 Joker slot and +2 consumeable slots.
Ho-Oh: Shows you a selection of (7? maybe 8) jokers you've previously had in your possesion and allows you to take 1.
Lugia: First shop each round is free.
Mew: Hand pick any Joker you want.
Mewtwo: Select 1 Joker out of 15 random that are shown and select an Edition for it.
Xerneas: Selected Joker becomes Eternal and negative.
Yveltal: Remove Eternal from selected joker and adds custom X3 Edition.

#

the plan for these are for them to be really really rare

#

like 1 or 2 per run

hushed field
#

+4 hands is basically guaranteeing you win the run

minor furnace
#

I would not call 1 or 2 a run rare

strong jacinth
hushed field
#

except for some hard counter boss blinds

atomic edge
#

does anyone know of a mod that adds a custom consumable area and gets those consumables from a booster pack?

west mason
edgy reef
#

I assume this is more about general Balatro UI?

tepid crow
minor furnace
tepid crow
stiff locust
#

finally some good fucking joker effects

minor furnace
sturdy compass
minor furnace
#

actually, I really like that idea for a legendary joker

west mason
#

i actually had it written as death certificate on my notes lmao

#

i had to elaborate on the description for that message

stiff locust
tepid crow
west mason
stiff locust
#

if my mod has two branches on github and I make a release, how can I make the release use a specific branch's code?

#

more of a github question i'm still kinda stupid with this stuff

minor furnace
minor furnace
#

I replied to the wrong message...

tepid crow
#

yeah imagine not just force pushing everything to main

#

the way linus torvalds intended

strong jacinth
minor furnace
#

I think you're going to have to more clearly define what kinds of features that entails

strong jacinth
#

Hey! Im making a balatro UI tester, like a screenshot of balatro, where you can put ui elements on to see how it looks.

#

In the future you would be able to drag and drop the ui elements and then convert that into code, add paramiters, show ui on click either in a specified place or the whole screen and mush more!

#

Im currently looking for someone to help me make this

#

So any help would be greatly appreciated

#

This should cover it

sturdy compass
#

Thoughts on this challenge? 👀

paper zealot
strong jacinth
#

Both, ive started making it today with lua and löve

#

So a little bit is done, i just dont think I can port all balatro ui stuff alone

paper zealot
fathom thunder
#

i forgot where i saw that but like its funny

edgy reef
#

Kinda true and real

paper zealot
fathom thunder
#

🔥✍️

spring lantern
#

was meant to be only when scored originally but i messed up the code and was like wait it might be more fun like this

stray warren
#

Dollar sign goes in front

spring lantern
#

my european ass really just did that

#

just gotta do the artwork for these and that's 10/15 done

#

damn i'm going fast

hushed field
spring lantern
#

make it my spanish ass then

onyx sonnet
#

Was really hoping this smods update would've added a context for entering a shop

minor magnet
#

i don't like this description, how would i make it better?

onyx sonnet
frosty dock
#

wdym utils

#

it's added by means of a lovely patch

onyx sonnet
#

ohhhh

#

My bad 😞

graceful magnet
#

For making a deck, if I'm doing something like Ghost/Magic deck, what do I need to replace self with in stuff like self.effect.config.consumables

unkempt thicket
#

How can i score a card with SMODS.score_card() with a repetition context?

graceful magnet
neat plover
grim remnant
#

weird bug we discovered with our one blueprint-like joker from earlier; for whatever reason, it just... doesn't work with jokers that retrigger playing cards, like chad. it works just fine with most other jokers, even ones that activate on playing card activation, too, which is weird! any particular reason this isn't working we're just missing?

plain apex
#

me when i make the deck radioactive by accident

neat plover
#

i want to have what he's having

plain apex
#

i mean it doesn't do anything it functions properly

#

there just simply is radioactive particles emitting from the deck

prisma loom
#

Is there a way to adjust the chances of what edition would be chosen?

prisma loom
prisma loom
#

thanks

foggy carbon
unkempt thicket
#

How can i score a card with SMODS.score_card() with a repetition context?

prisma loom
#

1 is 100%?

primal shoal
#

how does the self destruct detect the round score and blind amount

frosty dock
#

if the sum of weights is 10, a weight of 1 means 10% chance

#

if the sum is 3, a weight of 1 means 1/3 chance

minor magnet
minor furnace
prisma loom
#

like e_negative

minor magnet
#

yes but it has a field you can use to not spawn negative

prisma loom
#

for playing cards

#

correction @minor magnet

primal shoal
runic pecan
minor magnet
prisma loom
normal crest
unkempt thicket
#

I did this for that effect card:set_edition(poll_edition('tag', nil, false, true))

#

It creates negative as well

minor magnet
#

if you want no negatives you simply change that false to true

prisma loom
#

I want negatives

#

XD

#

that's why I'm asking

prisma loom
unkempt thicket
crystal perch
keen coral
#

whenever i try to add a localize = message to my joker, i get a really weird error that takes place in common_events.
functions/common_events.lua:1241: attempt to call method 'juice_up' (a nil value).

my joker DOES use juice_up, but the fact that this returns an error from common_events and only when i try to implement a message makes me think that i'm not using the 'return' function properly. any help would be super appreciated!

unkempt thicket
# unkempt thicket

Tag can basically be anything I usual use the jokers key, _mod is usual nil, _no_neg is removes negative from pool when true, and _guaranteed is if its guaranteed (if not that's where _mod comes in).

keen coral
normal crest
keen coral
#

oh okay! is a card= statement even necessary then? i pulled card=self from midas mask's code in the dump, which is where i found the card=self statement

normal crest
#

it's not necessary, no

#

it's generally used to specify what card should do a little jiggle when it's triggered

#

or what card the message should appear on

keen coral
#

yup, just tested it and didn't need it! tysm 🫡

#

ah, but if you use localize within a card's functions then it will already know which card to jiggle?

#

that'd make a lot of sense

normal crest
#

not quite, the default is probably the card that returns the effect

#

might depend on the context tho

keen coral
#

mmm got it got it, thanks!

grim remnant
#

on a walk rn so can't really check but like. could you use SMODS.calculate as like, a VERY hacky way to try to detect repetitions?

chrome widget
#

I believe someone in here a few days ago had some issue with invisible cards after cards are destroyed

#

I'm getting the same thing with this joker

rough furnace
#

Ghost card moment

#

Youre destroying cards during scoring incorrectly

#

There's something specific you have to do

chrome widget
#

Oop, I see it here

rough furnace
foggy carbon
chrome widget
#

Basically

#

Does it not send the destroy_card context to unscored cards?

#

mmm, yep, it only does it for the scoring hand

frosty dock
grim remnant
paper zealot
#

Hm, does Discord not support svg?

grim remnant
#

it does not, no

#

always found it kinda weird it doesn't ngl. like it's one thing to not support BMP as that's largely been overtaken by PNG, but like. SVG is still very frequently used. it's like THE vector graphic file type.

paper zealot
#

That's a shame because it's goddamn beautiful

grim remnant
#

given how long it took them to add audio embeds on mobile that aren't just "download the file", we expect them to add .bmp and .svg embeds in... 2034

paper zealot
# paper zealot

Well, for those who want to bother with downloading and opening this svg in a browser, let me know how it looks and if it's fully functional

#

And more importantly if it displays smoothly or is stuttery

frosty dock
#

looks great, is fully functional and displays smoothly

unkempt thicket
#

How can i make this in the context of repetitions? SMODS.score_card(context.scoring_hand[1], {cardarea = G.play, full_hand = context.full_hand, scoring_hand = context.scoring_hand, scoring_name = context.scoring_name, poker_hands = context.poker_hands})

chrome widget
#

Okay I did enabled unscored cards as a feature, but now I'm running into a separate problem in that I can't seem to get it to function. I cant even get the debug statement to play if I remove the hand size check, but I saw by looking through the SMODS code that it just sets the cardarea to 'unscored' as a string when unscored cards are enabled

    if context.cardarea == G.play and #context.scoring_hand == card.ability.extra.hand_size then
        sendDebugMessage(tostring(context.destroy_card)..' | '..tostring(context.scoring_hand[#context.scoring_hand]))
        if context.destroy_card ~= context.scoring_hand[#context.scoring_hand] then
            return
        end
            
        return {
            delay = 0.45, 
            remove = true,
        }
    elseif context.cardarea == 'unscored' and #context.full_hand == card.ability.extra.hand_size then
        sendDebugMessage(tostring(context.destroy_card)..' | '..tostring(context.full_hand[#context.full_hand]))
        if context.destroy_card ~= context.full_hand[#context.full_hand] then
            return
        end           

        return {
            delay = 0.45, 
            remove = true,
        }
    end        
end```
frosty dock
chrome widget
#

0.9.8. Is this a more recent feature?

frosty dock
#

are you fucking serious

#

0.9.8 is almost a year old

chrome widget
#

Cool?

frosty dock
#

who tf told you to use it

paper zealot
chrome widget
#

You're having a strangely violent reaction to this information

#

Yeah

frosty dock
#

i'm so sorry, i'm just flabbergasted

edgy reef
#

Can Markdown allow you to make this bigger?

#

😭

frosty dock
#

you said you were looking at smods code setting the cardarea to unscored, so it just doesn't even begin to make sense to me

#

like, you were looking at the updated code but are using an old deprecated version??

chrome widget
foggy carbon
frosty dock
#

that's because the feature was added a week ago

#

you should use the same code that you're looking at

foggy carbon
#

I'd sooner search my own smods code with Visual Studio

chrome widget
#

For the record, first balatro mod I've made here, and I created this mod explicitly for compatibility with Cardsauce, which began development roughly a year ago. So that's probably why Cardsauce is/was using 0.9.8, and I myself am not intimately familiar with smods releases

frosty dock
frosty dock
wintry swallow
#

what do people use to make joker art

grim remnant
unkempt thicket
frosty dock
#

any of the above are viable options

wintry swallow
#

oh wait asprite so true

#

i do have that

foggy carbon
grim remnant
#

like, the only option we can think of that wouldn't work is like, MS Paint, just bc paint doesn't have the ability to handle transparency. which if you're using MS Paint in 2025, that's... that's its own entirely separate question. ;P

foggy carbon
#

I generally make my sprites at 2x size, and then Resize to 50% (with nearest neighbor) for the 1x sprites

frosty dock
chrome widget
wintry swallow
#

oh and localthunk made a pinned message about joker art tips thats nice

frosty dock
chrome widget
#

Because I'm a professional game designer and using older/less supported tools is often expected if it means ensuring compatability and not having to bugfix an entire codebase due to an update?

wintry swallow
chrome widget
#

Same reason my past employers used a version of Unity that's like 4-5 years old at this point

frosty dock
#

yeah but there's a big notice that the version is deprecated?

chrome widget
#

and.......? A deprecated tool means it's not supported anymore, not that it's non-functional

#

I'm not gonna turn my nose up at something being deprecated if I'm advised to use it by someone else I'm working with

frosty dock
#

at the same time you want to use a feature that was added a week ago...?

#

that's the part that's confusing me

chrome widget
#

am I supposed to inherently be aware that this feature I didn't know existed until you offered it to me was added a week ago?

#

you didn't give a timestamp

#

you just said use it

frosty dock
#

It's not even the unscored feature in particular

#

destroy_card in the form you're using it is also a more recent feature

chrome widget
#

No no no, don't walk back from that. You told me to use unscored cards, then got weirdly annoyed when my tools didn't support it

#

destroy_card does work by the way

frosty dock
#

destroying_card does. destroy_card is not a thing in 0.9.8

#

i know that because I personally added it a month ago

bold gyro
#

Hey y'all, why is the check for if the playing card's edition is polychrome not working? (I'm guessing the condition is checking if the joker has polychrome currently)

calculate = function(self, card, context)
        if context.individual and context.cardarea == G.play then
      if context.other_card.config.seal == G.P_CENTERS.Gold then
        if SMODS.has_enhancement(context.other_card, 'm_gold') or card.edition == 'e_polychrome' then
          return {
            dollars = card.ability.extra.money,
            card = card
          }
        end
      end
        end
    end
frosty dock
#

since you seem to be working off up to date docs, I'm starting to question if you're using 0.9.8 at all

chrome widget
frosty dock
#

i forgot about that file but we don't maintain it

#

version.lua please

chrome widget
#

Update your manifest please 😭

unkempt thicket
#

How can i make this in the context of repetitions? SMODS.score_card(context.scoring_hand[1], {cardarea = G.play, full_hand = context.full_hand, scoring_hand = context.scoring_hand, scoring_name = context.scoring_name, poker_hands = context.poker_hands})

wintry solar
#

lovely 0.3.1 dependency 👀

frosty dock
#

yeah you're just about a month behind then 😭

#

that file was for thunderstore, which I don't maintain

#

so i forgot that it was a thing

#

so it's just a big misunderstanding we've had, I am so sorry

chrome widget
#

Regardless, I'll see if I can update it to get unscored cards

#

Idk what version cardsauce is running now since it's diverged since I copied it last

plush cove
chrome widget
#

It just says Version 1.0.0~ALPHA-1317a or later, cool

#

So yeah I had gotten what was then the most recent version roughly a month ago when this started, probably right after destroy_card was added

frosty dock
#

from release notes

wintry solar
chrome widget
#

groan they also haven't updated their readme

#

cool, lovely

wintry solar
#

destroy_card is on every card

frosty dock
#

current latest is 1425c for reference

chrome widget
#

should be good to just grab latest then

frosty dock
#

yeah should be fine, I don't think we've done any major breaking changes since then

#

regardless that version would still be too old to have unscored support

chrome widget
#

More like I've probably done some patches over SMODS code that might have self-inflicted breaks. It'll probably be fine tho

frosty dock
#

oh huh I think I see what happened to the manifest. There's been a release workflow on changing this file that I've neglected to change. so it just sort of sat there until I forgot eventually

chrome widget
#

fwiw i'm new to lua/modding itself, so I didn't think to check for the version file. Manifest is more familiar to me from some typescript projects I've used before

frosty dock
#

this is completely my fault

#

alright we have a new manifest

chrome widget
#

So with the update, let's see if the code runs. It was buggy anyway so I think fixed it

frosty dock
#

on an unrelated note, we're officially no longer a mod loader

chrome widget
unkempt thicket
#

How can i make this in the context of repetitions? (so instead of triggering things that retrigger it again like seals it just retriggers the card) SMODS.score_card(context.scoring_hand[1], {cardarea = G.play, full_hand = context.full_hand, scoring_hand = context.scoring_hand, scoring_name = context.scoring_name, poker_hands = context.poker_hands})

frosty dock
grim remnant
#

oh we should probably update our steamodded ASAP come to think of it--

frosty dock
#

-# also it's 2am and I'm tired af so that doesn't help my case

chrome widget
#

It's cool!! I understand the confusion, and I offered incorrect information myself because I didn't really know where to look

unkempt thicket
wintry solar
#

what are you trying to do?

frosty dock
#

and what kind of card is this even

chrome widget
#

but all things considered little scuffles like that just kinda happen a lot in game design from my experience. Not everyone's on the same page and sometimes you just gotta double check and reset everyone's expectations

unkempt thicket
chrome widget
#

So my apologies for causing a stir!! Esp so late, go to bed!

wintry solar
#

what a beautifully vague respose

paper zealot
bold gyro
#

Hey y'all, how do you add specifically the Gold Seal and Negative Playing Card (+1 hand size) tooltips to a Joker?

--gold seal
info_queue[#info_queue+1] = G.P_CENTERS.Gold
--negative playing card edition
info_queue[#info_queue+1] = G.P_CENTERS.e_negative_playing_card```
normal crest
#

G.P_SEALS.Gold

#

For the seal

#

this is how steamodded adds the negative playing card one

#

without the if statement of course

wintry swallow
#

is there a way to make jokers detect other jokers of a certain edition

frosty dock
frosty dock
unkempt thicket
#

I want to fix the problem of it retriggering the seal again on the leftmost card

frosty dock
#

that was 0% clear before

#

I'm not sure of the ability of playing cards to retrigger other playing cards and I'm too tired to think about it

wintry solar
#

yeah I cant recall a way to do it

normal crest
#

I recently did that by hooking into calculate_repetitions

unkempt thicket
#

I believe the problem is that when the card is scored again it goes though reptations again I just want to make it not do that.

normal crest
wintry solar
#

about verdant leaf?

normal crest
#

Yeah

wintry solar
#

I havent looked at any of the blind stuff recently

normal crest
#

I did see some commits were made recently on blind stuff, and I tested it only with debugplus

wintry solar
#

yeah I believe someone rewrote how they're applied but I ahvent had time to look over it

normal crest
#

Looks like it was @humble girder, it only happens with Verdant Leaf

edgy reef
#

Is it the same with Crimson Heart?

normal crest
#

Nop, that one seems to work perfectly fine

#

And the suit debuffing blinds work as well

#

All other showdowns also work

timid lynx
#

Im making a skin pack and the planet cards arent showing up in game. how do I call for them specifically?

edgy reef
normal crest
#

Oh I see, they are not elseifs in the vanilla code

frosty dock
#

uh yeah that's a problem

#

just gotta revert the elseif on crimson heart to an end if

edgy reef
#

Not sure how The Pillar is hit too.

wintry solar
#

the pillar isnt in an elseif

edgy reef
#

referring to this

normal crest
#

The pillar works fine for me actually

#

Just tested it

edgy reef
#

hmm ok

timid lynx
wintry solar
#

oh actual 0.9.8 code

grim remnant
normal crest
#

You should find a way to return the repetitions

old bane
#

how would i be able to save cards from booster cards? i tried using
select_card = 'consumeables' but it doesn't work (unless it means like select_card = 'G.consumeables')

wintry solar
#

update smods

tall tangle
#

Is consumables spelled with an extra e in the code for the game?

wintry solar
#

yes

tall tangle
#

Well that's dumb

#

loud opinion noise

edgy reef
#

Blame LocalThunk

grim remnant
#

(for reference, this is the current calc code)

normal crest
#

Soo I don't know the best way to do this

#

But I was thinking if other_joker_ret has repetitions in it, remove them and store them somewhere else to return after the loop

old bane
#

for some reason i got a crash and i don't know why >_< (maybe it has to do with the fact that i made new boosters? idk)

wintry swallow
#

did i forget to do something why is it so small 😭

frigid elm
#

I am terribly confused, why is my booster pack crashing when I hover over it in the collection?

minor furnace
#

So, I'm trying to set up a blind effect that shuffles the order of the played cards, and I cannot figure out what to call it on. Using G.hand only shuffles the cards that are not highlighted, and this crashes

        if not self.disabled then
            G.E_MANAGER:add_event(Event({ func = function() G.hand.highlighted:shuffle('aajk'); play_sound('cardSlide1', 0.85);return true end }))```
frigid elm
normal crest
#

Its just a list of cards

minor furnace
#

hmmm

#

is there a cardarea for played cards?

manic rune
#

what would i need to do if i want to destroy a joker?

normal crest
# frigid elm

your loc should be in descriptions.Other.p_modprefix_key for booster packs

frigid elm
plush cove
normal crest
minor furnace
normal crest
wintry swallow
runic pecan
wintry swallow
runic pecan
tall tangle
#

😂 no

#

Frighten the children.

wintry swallow
#

lmao

manic rune
#

yeah so uhh

tall tangle
runic pecan
manic rune
#

i got this code working and allat, but the thing is that: the card doesnt seem to destroy itself, so i have to do it manually through the line which was commented

#

but if i do so then it just wipes off the card completely, and the dissolve animation wont run, is there a better way to achieve the same results?

wintry swallow
grim remnant
normal crest
manic rune
#

oh

#

i was looking at madness lol

normal crest
manic rune
#

god i fucking forgot which file has the print function

old bane
# normal crest What is your actual code

I mean idk if this is why but like here's one of my booster packs

-- Basics
SMODS.Booster {
    key = 'bc_basic_1',
    atlas = 'pm_PMBooster',
    pos = {x = 0, y = 0},
    config = { extra = 3, choose = 1 }, -- have 3 cards, choose 1
    group_key = 'pm_battle_card_booster',
    cost = 3,
    weight = 10,
    --weight = 1.5,
    draw_hand = false,
    kind = 'pm_BattleCard',
    select_card = 'consumeables', -- save the cards instead of using them
    loc_vars = function(self, info_queue, card)
        return { vars = { card and card.ability.choose or self.config.choose, card and card.ability.extra or self.config.extra } }
    end,
    create_card = function(self, card)
        return create_card("pm_BattleCard", G.pack_cards, nil, nil, true, true, nil)
    end,
    ease_background_colour = function(self)
        ease_colour(G.C.DYN_UI.MAIN, G.C.RED)
        ease_background_colour({ new_colour = G.C.RED, special_colour = G.C.BLACK, contrast = 2 })
    end,
}
#

and then this is the line that the crash screen says causes the issues
localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = loc_vars}

normal crest
#

That gets done automatically

#

I'm not sure on what the error is besides that

old bane
#

the thing that i got it on was the manacle, and i had two of my custom cards too

#

the game works fine after that tho, i restarted the run and it's fine

normal crest
#

The crash happened when hovering over a card?

edgy reef
#

Probably because the Stack Trace got the line wrong.

#

It's displaying info for calculate_reroll_cost which is a completely different function.

normal crest
#

Tbf they haven't told us when exactly the crash happened

#

I kinda assumed it was hovering a booster pack ngl

manic rune
#

yeah, wtf

#

i cant find that print function at all

#

its not in any of my files

normal crest
#

What function are you looking for?

manic rune
#

thats odd

#

oh, i added print(card) to debug some stuff for my mod earlier

#

but uhhh

#

im pretty sure i deleted all print() in my mod already

#

and its still printing that

normal crest
#

idk, maybe you forgot to save?

manic rune
#

my friend tryna run cryptid

manic rune
normal crest
#

otherwise if you're using vscode press ctrl + shift + f to search for stuff in all files

primal shoal
# manic rune

invaild asset/Atlas
either it named wrong or you misspelled

manic rune
#

im pretty sure its a smods version issue, which is usually the crash reason for cryptid

manic rune
#

im actually gonna go insane

white spade
#

Does anyone know of a mod that adds different save files? For example, I want to play a vanilla file while one save I'd like to play pokermon file

whole hornet
#

ok i did not fix my problem
so i have a joker that i want double the players money when sold, with a max of 100

SMODS.Joker{
      key = 'century_egg',
      loc_txt = {
          name = 'Century Egg',
          text = {
            'Sell card to {C:attention}double{} money',
            'max of $100'
              } 
      },
      rarity = 4,
      atlas = 'century_egg',
      pos = {x = 0, y = 0},
      config = {
        {extra = 100}
      },
      loc_vars = function(self,info_queue,center)
        return {vars = center.ability.extra}
      end,
      calculate = function(self,card,context)
        if context.joker_main then
          self.ability.extra_value = self.ability.extra_value + self.ability.extra
          self:set_cost()
          return {
            card = card,
            color = G.C.MONEY
          }
        end
      end
     }

this is what i got
tbh im just copying from the game files and seeing what sticks

plush cove
#

change "self.ability" to "card.ability"

normal crest
#

self is Not a card

whole hornet
#

oh, dope, duh

old bane
whole hornet
#

i have it named right

#

dont worry

#

im learning

novel violet
#

hey gang -- i tried to follow the perkeo implementation for adding consumables to deck, and i'm having an issue where i believe everything it wants to spawn (including with blueprint/brainstorm) does it all at once (with the only interrupts being messages, which doesn't actually seem to affect the event logic?), which is an issue because, for some reason, that means copies of this card that can't add anything to the deck still give the message indicating that they have

-- draw stiletto on blind selected, if there is room
        if context.setting_blind and #G.consumeables.cards ~=
            G.consumeables.config.card_limit then
            G.E_MANAGER:add_event(Event({
                func = function()
                    if #G.consumeables.cards ~= G.consumeables.config.card_limit then
                        local card = create_card('ESkill', G.consumeables, nil,
                                                 nil, nil, nil,
                                                 'c_Impact_KQSkill', nil)
                        card:add_to_deck()
                        G.consumeables:emplace(card)
                        return true
                    end
                    return true
                end
            }))
            if #G.consumeables.cards ~= G.consumeables.config.card_limit then
                card_eval_status_text(context.blueprint_card or card, 'extra',
                                      nil, nil, nil, {
                    message = 'Incoming!',
                    colour = G.C.PURPLE
                })
            end
        end

i'm probably missing something obvious but i'm a tiny bit puzzled 😭

primal shoal
normal crest
#

that's when creating the atlas

#

when using it in objects you just need the key

whole hornet
#

name is what the game shows
key is in the code

primal shoal
#

ah right

normal crest
#

I guess now we have both Balatro: Star Rail and Balatro: Genshin Impact

novel violet
#

hehehe yep

#

ty! i'll try that

plush cove
#

i sure as hell am not developing that

novel violet
#

we need zenless balatrone zero imo

normal crest
novel violet
old bane
novel violet
novel violet
#

For the record, when there's only 1/2 consumables, it will always trigger the message for every single copy of keqing

#

When consumables full and you start the round it'll correctly do nothing at all

silk wren
#

my apologies if i'm interrupting something, i uhhh. have encountered a mod crash and i'm not all that knowledgable on parsing crash reports. would you all mind if i post it here?

novel violet
#

what the fuck based???

silk wren
novel violet
#

hmmm i'll look into that

normal crest
#

Also you can just do SMODS.add_card { key = 'c_Impact_KQSkill' } to spawn a card instead of using create_card

#

it will handle the adding to deck and emplacing for you as well

novel violet
#

did consider that but i'll optimize everything once it's functional - ty

normal crest
#

in that case I have another suggestion for when it's working, instead of card_eval_status_text, try

SMODS.calculate_effect({
  message = "Incoming!",
  colour = G.C.PURPLE
}, context.blueprint_card or card)

It might make your code easier to understand without needing all those nils

#

behind the scenes it just does the same thing you did

novel violet
#

i actually hadn't encountered calculate_effect in docs yet, thanks!

whole hornet
#

ok still wont work hmmmm

old bane
plush cove
whole hornet
#
      key = 'century_egg',
      loc_txt = {
          name = 'Century Egg',
          text = {
            'Sell card to {C:attention}double{} money',
            'max of $100'
              } 
      },
      rarity = 4,
      atlas = 'century_egg',
      pos = {x = 0, y = 0},
      config = {
        {extra = 100}
      },
      loc_vars = function(self,info_queue,center)
        return {vars = center.ability.extra}
      end,
      calculate = function(self,card,context)
        if context.joker_main then
          card.ability.extra_value = card.ability.extra_value + card.ability.extra
          card:set_cost()
          return {
            card = card,
            color = G.C.MONEY
          }
        end
      end
     }

normal crest
whole hornet
#

do i have to call in the extra_value as well?

normal crest
whole hornet
#

noing nothing

#

the sell is just 1

normal crest
#

try card.ability.extra_value = (card.ability.extra_value or 0) + card.ability.extra

novel violet
# normal crest try the Purple seal code

my implementation is accidentally extremely similar to the purple seal code, only difference is it utilizes G.GAME.consumeable_buffer. that's probably the solution here

#

should be an easy fix

normal crest
#

Hopefully

silk wren
red flower
#

Rather than changing the sell cost of the card

novel violet
#

thanks for recommending looking at purple seal code

#

appreciate you

grim remnant
normal crest
#

After the for loop is over

#

return { repetitions = targetRepetitions * 3 } the * 3 cus it'd copy the card 3 times

#

That was my idea anyway, I'm not sure if it'll work

#

and you probably don't want to have that else branch inside the for loop

#

tho it probably never gets executed

grim remnant
#

yeah, that else isn't doing much. that message never appears.

normal crest
#

yeah cus funk is always 3, unless some cryptid card changes its values lol

grim remnant
novel violet
# manic rune ooo, what does keqing do?

she's not fully finished yet, as i still need to add functionality to the lightning stiletto -- but i've shown off keqing's main ability a few times already
she retriggers the first and last played card if hand is not High Card

grim remnant
#

well... it doesn't crash, but it's retriggering itself, which does... nothing. how could we point this at the target, perhaps? :o

normal crest
#

I don't think it's retriggering itself

#

It looks like it's properly triggering the played card 3 times

manic rune
normal crest
#

I think

#

I'm experimenting as much as you are

novel violet
#

not yet, that functionality hasn't been built yet! but check it

#

oops meant to reply to bepis

#

this is an example of how i want character cards to "synergize" with their respective skill cards

manic rune
#

ooo

#

looks very interesting

whole hornet
#

so

novel violet
#

diamonds will eventually correspond to the Electro element when i implement elemental synergy as well

normal crest
#

Diamonds feel more like geo to me

whole hornet
#

i tried to do what the hermit card does

#
      key = 'century_egg',
      loc_txt = {
          name = 'Century Egg',
          text = {
            'Sell card to {C:attention}double{} money',
            'max of $100'
              } 
      },
      rarity = 4,
      atlas = 'century_egg',
      pos = {x = 0, y = 0},
      config = {
        {extra = 100}
      },
      loc_vars = function(self,info_queue,center)
        return {vars = center.ability.extra}
      end,
      calculate = function(self,card,context)
        if context.joker_main then
          ease_dollars(math.max(0,math.min(G.GAME.dollars, 100)), true)
          return {
            card = card,
            color = G.C.MONEY
          }
        end
      end
     }
#

but nothing happes either

novel violet
#

cryo/hydro/electro were easily in there, tough fight between cryo and dendro for spades but i went with cryo because it was implemented first