#💻・modding-dev

1 messages · Page 39 of 1

wintry solar
#

the bottom function is entirely broken

solid salmon
wintry solar
#

okay

#

so when you redeem your voucher you want to set a global variable to be something

solid salmon
#

i remeber reading about this

wintry solar
#

then in a separate function you want to hook into set_edition

solid salmon
#

a global variable like

#

i = 10

#

(that's the example i got from the book alex sent)

wintry solar
#

I mean

#

I would call it something like FOIL_VOUCHER_REDEEMED

#

and then just make it true when you buy the voucher

solid salmon
#

FOIL_VOUCHER_REDEEMED = true

#

or in this case

#

shiner_foil_redeemed = true

wintry solar
#

it doesn't matter what it's called really, just helps to give it a name that makes sense

solid salmon
#

ok

#

following your example could it look something like this?

kind shadow
#

There should be a cookie clicker mod

solid salmon
#

hmm

solid salmon
kind shadow
#

I'm gonna make a spreadsheet

hallow forge
#

I don’t think that’s how that works

#

I think they are suggesting a seperate mod

solid salmon
#

eh i tried

hallow forge
#

then why add it to balatro

solid salmon
#

i think its cards

kind shadow
#

Yeah I mean having it be cookie clicker themed

hallow forge
#

oh

solid salmon
#

i could maybe add that

kind shadow
#

Like having milk and kittens and stuff

solid salmon
#

yeah maybe

#

but not rn

wintry solar
# solid salmon

this does not look correct to me but I haven't looked at vouchers yet

solid salmon
#

yeah ditto

solid salmon
# kind shadow Like having milk and kittens and stuff
kind shadow
#

again? 😭

#

Eh fine

solid salmon
wintry solar
#

@solid salmon okay you want something like this in your voucher definition

redeem = function(self)
shinier_foil_redeemed = true
end,
#

in fact, you should probably do your updating of editions in here too

kind shadow
solid salmon
#

i copied it and added it to all ZE vouchers

solid salmon
#

well it doesn't crash

#

so that's a big step

wintry solar
#

no get rid of all the set_edition crap

solid salmon
#

the local card_set_edition

#

?

wintry solar
#

yes

solid salmon
#

ok

#

do i also remove card_set_editon_ref?

wintry solar
#

yes

#

your redeem needs to be just what I sent you

solid salmon
solid salmon
#

happy now

wintry solar
#

no

#

why do you have other vouchers being set as redeemed

solid salmon
#

😠

#

happy now

#

also i found out it doesn't work on foil tag jokers

wintry solar
#

yes we haven't finished yet

solid salmon
#

ok

wintry solar
#

I don't know how you possibly expect it to work in this form

#

all you've done is create a voucher

#

you haven't done ANY of the implementation properly

solid salmon
#

okay

wintry solar
#

right

#

you know that other function you had where you iterated over playing_cards?

solid salmon
#

this one

wintry solar
#

yes

#

take the for loop and put it in the redeem function

solid salmon
#

this redeem function

#

i can change it to shinier foil

#

also how i make it loop?

royal ether
#

thats probably in that lua textbook

solid salmon
#

lemme check

wintry solar
#

I've DM'd you

fallen tendon
#

If you want the voucher to work on jokers you have you should make it do the pairs over G.jokers too

atomic falcon
#

any chance anyone knows how i can use a hook to trigger a pack checking function upon opening a pack

#

<3

languid quiver
#

heya, how do i add my own language in the game as a mod? i wanna rename Aces to Haileys for my Hailey Aces mod

royal ether
#

or you can just edit the game's localization in memory when your mod is loaded

#

i cant think of an example of the 2nd option off the top of my head

#

oh wait

#

doing it for aces will be mildly harder though, since there's probably more instances of the word Ace than just the ace cards

fallen tendon
#

Trans spectrans does it too i beleive

royal ether
#

oh thats nice, i thought it was just a texture pack

fallen tendon
#

It actually changes the name of them

#

And trance becomes trans

languid quiver
#

hmmm okay

#

also how do i make a deck in 1.0.0?

#

very simple idea i had in mind: start with two uranus cards (or two pair already at level 3) and -1 discards

royal ether
#

i am also extremely not a smods user so i could be completely wrong

fallen tendon
#

Yeah you kinda are

#

1.0 has very different api

royal ether
#

i guess the migration guide is wrong then

solemn coral
#

I'm having difficulty with making a joker that debuffs cards

#

This joker was working fine, but then I played Incantation and it un-debuffed the current hand and only debuffed the newly Incanted cards

edgy reef
#

The game rechecks if cards should be debuffed when consumables are used.

solemn coral
#

Here's what my code looks like so far

-- In the joker's calculate function
calculate = function(self, card, context)
    if not context.blueprint then
        if context.first_hand_drawn and not self.getting_sliced then
            print("Starting effect")
            for _, v in ipairs(G.deck.cards) do
                if v:is_suit('Spades') or v:is_suit('Clubs') then
                    v.debuff = true
                end
            end
        end
    end
end

-- In my main function
function SMODS.current_mod.set_debuff(card, should_debuff)
    for _, v in ipairs(SMODS.find_card("j_twewy_blackSky", true)) do
        if card:is_suit('Spades') or card:is_suit('Clubs') then
            card.debuff = true
            return true
        end
    end
end
#

Theoretically that second function should be setting the debuffs properly, even if it needs to be recalculated mid-round

#

And I know it's reading it somehow, since it debuffed the newly created 9 of Spades

edgy reef
#

Probably the SMODS.find_card line

#

You don't need to loop over it.

#

Just check for if one exists (#SMODS.find_card("j_twewy_blackSky", true) > 0) and then check for the suit.

sly forge
#

hm, if omit_base_debuff_check ~= nil then return end is actually a bug, it'll stop other mods from setting debuffs

#

also, don't return true from your set_debuff function

#

also, you are counting instances of j_twewy_blackSky even if they're debuffed, is that correct?

solemn coral
#

Hmm no you're right that second argument should be false

sly forge
#

sorry, I can't tell what bug is the one that's actually causing the problem

#

so, you get like 3 bugs at once!

solemn coral
#

I changed it so it's an if statement instead of the for loop, and it no longer returns true, but it still un-debuffs cards whenever I sell something or use a consumable

edgy reef
crisp coral
#

set_debuff is really confusing tbh

edgy reef
#

It needs redone for so many reasons

crisp coral
#

i just give the playing cards an ability ex. scorched_girl_debuff and check that instead of checking for jokers

solemn coral
#

I could try doing that and seeing if that improves things

crisp coral
#

it's not great, but it is a workaround

sly forge
#

trying to fix the per-mod set_debuff function right now

crisp coral
#

what's being changed

sly forge
#

there's a bug if two mods both return true for omit_base_debuff_check

crisp coral
#

mm

sly forge
#

if it's true, the function early returns so the 2nd mod won't get to do anything

#

another problem, the per-mod set_debuff doesn't play well with should_debuff

#

in fact, I believe it's completely wrong, the base game sets the final debuffed/non-debuffed state to should_debuff

#

the logic should be, if should_debuff is true, or the base game perishable check is true, or the mod says we should debuff, then set self.debuff = true

#

having a per-mod debuff function can cause issues- if Tarot DX says spades can't be debuffed, and then another mod debuffs a spade, what is Tarot DX supposed to do about it

#

so, there needs to be some kind of priority system in the returned values, maybe? or each debuff comes with a reason

#

I don't know! it's hard

crisp coral
#

that's why i had the card ability for debuffing, if the ability gets removed all other checks still run

#

plus the two debuffing jokers i had wouldn't play nice with it anyway

sly forge
#

hm, so what happens with an effect like Tarot DX's Spades buff

#

this feels like a problem some card games have, where there's "you can't" and "you can" effects

crisp coral
#

i have not played tarot dx

sly forge
#

oh, there's also miracle milk from Mika

#

undebuffs cards when you score them

#

I definitely think the system needs to support these

#

I was thinking of some kind of priority system

crisp coral
#

that's from mystjokers

sly forge
#

oh, whoops yeah that's yours

crisp coral
#

which i haven't tested in 1.0.0 so that's that

sly forge
#

both of these peoples names start with M

#

ok, what are peoples' opinions on how the per-mod set_debuff function should work?

#

current planned (correct) implementation is, it returns a value, and those values are ORed together for the final debuff

#

there were other considerations: a priority system for effects like Tarot DX's "spades can't be debuffed" effect

#

just pushed the correct implementation, asking for further feedback

edgy reef
# sly forge ok, what are peoples' opinions on how the per-mod set_debuff function should wor...

If a mod wants something debuffed it could be added to a table used as a check (less scuffed). If it's empty, self.debuff = false. If it's not, self.debuff = true.
Effects that want to prevent debuffs can set a var (something like protection or ignore_debuff) that would ignore whatever the debuff table looks like.
I side with debuff prevention taking priority over debuffing as it would be more intuitive to players if a object that debuffed a card got ignored by another object than the other way around (debuff ignore effects would basically be lying to you if mods debuffing objects took priority).

#

Having the debuff/ignore debuff on a priority is also to me a bad solution because it'll be too unclear as to what this priority is in-game.

solemn coral
#

I also definitely agree with debuff prevention always taking precedence

sly forge
#

ok thinking about return value format

#

the most natural would be true, false/nil, or a 3rd value like 'prevent_debuff'

#

it hurts me to have such a type, but it does capture things reasonably.

#

in other functions I have been using the first return as the main return value, and the second as a table of options

solemn coral
#

Another alternative could be a table like return {debuff = true, prevent_debuff = false}

#

That does have the issue that technically people can return the table with both true (but you'd just have the prevent_debuff override it as usual), but most of the time you'd just only return the relevant value like return {prevent_debuff = true}

sly forge
#

the game's edition code used tables with a single key- but that turned out to cause problems

#

I'm going to say the sentinel value version is probably better

solemn coral
#

What problems did that cause, out of curiosity?

sly forge
#

so, the edition code actually sometimes used tables with more than one key, it just checked for specific keys. that was pretty fragile. it's also hard to extend.

crisp elbow
#

Is there any way to get a more verbose log output from Steamodded / Lovely?

sly forge
#

I believe it is as verbose as it gets already

crisp elbow
#

damn

#

'"C:\users\steamuser\AppData\Roaming\Balatro\Mo..."]'

#

trying to see which file this is

sly forge
#

hm, I've never seen that happen actually. Try looking in the terminal itself

#

it might be easier to find/copy what you want there

surreal marsh
#

i think this indicates file loaded by NFS or other functions instead of directly loaded by SMOD

edgy reef
#

It’s the same issue with the terminal

#

Any print of the path on the stack traceback is like this, and iirc it is a “NFS load vs. SMODS load”

#

I wonder what the difference is because last I looked SMODS does use NFS.

brisk pond
#

how can I make a joker upgrade the hand level two times?

#

I know that space jokers upgrades the hand level returning this

return {
   card = self,
   level_up = true,
   message = localize('k_level_up_ex')
}

but it only upgrades once and ends the function

edgy reef
#

That’s because the level_up return only handles one.

brisk pond
#

I tried a different method

#
if context.joker_main then
level_up_hand(card, G.GAME.last_hand_played, nil, 2)
end

it works

queen scroll
#

hey i'm probably stupid but i get this error when trying to run the very newest steamodded alpha version. i just pulled the code directly from github

sly forge
#

uh oh, I've seen this happen before... can you give me the full log output, I want to see what lovely is saying

#

also try lovely beta-6

#

though, that won't fix the issue if it's the same one I've seen before

queen scroll
autumn berry
#

first time using lua, any idea why this doesn't work?

--Update localization
    local Replacements = {}

    if Settings.Value_Name then --this is true
        Replacements["Mult"] = "Bult"
        Replacements["Chips"] = "Bhips"
        Replacements["Money"] = "Boney"
    end

    function CleanLocTable(locTable)
        sendDebugMessage("Hello World!")

        for i, v in ipairs(locTable) do
            sendDebugMessage(locTable[i]) --this doesn't run :(
            for key, value in pairs(Replacements) do
                locTable[i] = v:gsub("%f[{]" .. key .. "%f[^}]", value)
            end
        end

        return locTable
    end

    G.localization.descriptions.Joker.j_greedy_joker["text"] = CleanLocTable(G.localization.descriptions.Joker
        .j_greedy_joker["text"])
zealous glen
#

where do you call CleanLocTable

#

oh, if that's inside your main mod's code, you'll probably want to put it into process_loc_def or whatever it was called

edgy reef
#

process_loc_text.

zealous glen
#

I'm getting a "attempt to call a nil value" error when I try to NFS.load this file. I just modified the _generate_main_end function so I think that's the cause but I can't spot an issue.

frosty dock
#

current_mod.path already has the / at the end

#

so having it at the start of what you append probably gets things messed up

zealous glen
#

For example, this works:

edgy reef
zealous glen
edgy reef
#

I mean to print the err that NFS.load returns.

#

Something like this.

#

Should give a better direction for what's wrong than just knowing that the file part didn't load correctly.

zealous glen
#

No error message. It just crashes.

edgy reef
#

Remove the () part

zealous glen
edgy reef
#

Behind the NFS.load

#

You can set the data after the error check.

zealous glen
#

Ok I think I found the error

#

Now the tooltip works in other languages and I also added face-down support

brisk pond
#

I'm just starting to work with context.blueprint, so I'm not very good with it. This is the scenario that should happen:

  • When Strength is used, this Joker calls rankUp(card) blueprintable
  • IfJoker's rank >= 10, this Joker calls evolve() not blueprintable, else it calls AddJokerSlots() not blueprintable

I have tried this setup but now the function AddJokerSlots isn't called

calculate = function(self,card,context)
 if context.using_consumeable then
  -- Rank Up
  if context.consumeable.ability.name == 'Strength' and card.ability.extra.Rank < 10 then
   PT_rankUp(card)
    if not context.blueprint and card.ability.extra.Rank >= 10 then
     PT_evolve(card,'j_PT_Lavenza')
    else
     if not context.blueprint then
      PT_Twins_AddJokerSlots(card.ability.extra.Rank)
     end
    end            
   end
  end
 end,
remove_from_deck = function(self, card, from_debuff)
 PT_Twins_RemoveJokerSlots(card,card.ability.extra.Rank)
 end,
#

I tried this cleaner version but still AddJokerSlots isn't called

calculate = function(self,card,context)
 if context.using_consumeable then
  -- Rank Up
  if context.consumeable.ability.name == 'Strength' and card.ability.extra.Rank < 10 then
   PT_rankUp(card)
    if context.blueprint == false then
     if card.ability.extra.Rank >= 10 then
      PT_evolve(card,'j_PT_Lavenza')
     else
      PT_Twins_AddJokerSlots(card.ability.extra.Rank)
     end
    end            
   end
  end
 end,
#

here's the function AddJokerSlots for info

function PT_Twins_AddJokerSlots(rank)
    local jokerSlots = G.jokers.config.card_limit
    if rank == 3 then
        jokerSlots = jokerSlots + 1
    end
    if rank == 7 then
        jokerSlots = jokerSlots + 1
    end
    G.jokers.config.card_limit = jokerSlots
end
crisp coral
#

not surprising, you're only checking for rank >= 10 if rank < 10 is true

frosty dock
#

also context.blueprint is never explicitly false iirc

brisk pond
#

how does this context work? I'm just starting to work with it

crisp coral
#

it's nil or a number iirc

frosty dock
#

yep

brisk pond
#

so not context.blueprint?

frosty dock
#

👍

brisk pond
#

ok

#

still

#

joker doesn't work

brisk pond
#

rankUp does rank = rank + 1

#

suppose you are rk9, you use charriot. You enter the using_counsumeable section, you also enter the rank < 10 section, you call rankUp which makes your rank to 10. Then you evolve but just if you are not a brainstorm

#

before starting to use context.blueprint this joker was working fine

crisp coral
#

then don't use context.blueprint

brisk pond
#

but I don't want blueprint to copy the AJS ability

crisp coral
#

logicwise, if you're at 9 and triggers twice, it will always trigger once because of the <10 check

brisk pond
#

oh I get it

#

but how do I solve it

crisp coral
#

remove context.blueprint

brisk pond
#

ok it works

#

the fact that was making me confused was that Blueprint activates before the Joker

#

because it's at its left

solid salmon
#

how do i add gifs into jokers?

#

like the bad apple one

oblique gust
#

thats not gif

#

thats gazillions of pics

solid salmon
#

...

#

how would that even work

iron sphinx
#

exactly how you think it would

solid salmon
#

put all the gif frames into a folder and make it work

oblique gust
#

animation is just bunches of steady pictures played in a row. .gif is basically this too

solid salmon
#

(ngl i just want to do a rick roll)

oblique gust
#

if a rickroll is making ur mod extra large dont do it

#

maybe just make it flip and change texture

solid salmon
#

i accidentally made the entire video into a gif

#

i think i should have kept the iconic part

oblique gust
#

and if you have to do it you can consider compressing it in the most lossy way possible

solid salmon
#

ok

brisk pond
night pagoda
#

heyo chat, any ideas if it is possible to debuff and un-debuff jokers independently of blind or other possible debuffs? By that I mean that I want to have an additional layer of debuffing and I need to sometimes remove it from the card, but the problem is that the card doesn't "know" if the debuff supposed to stay on it (like while in combat with Crimson Heart)

mellow sable
#

Maybe look at how Perishable does it?

night pagoda
#

yeah, but perishable never needs to remove its debuff

#

that was the very first thing I checked, but then it made me realize that it's not what I need

#

a bit more context: I want to make a joker that debuffs one near it. When crimson heart deciedes to pick the already debuffed joker, I can just drag my debuffing joker away and it will negate crimson's heart effect completely

#

(well I kinda made it but this issue happens)

#

awesome

#

wanted to see what happens if I have only perished perishable jokers

#

during crimson heart - it crashes without mods

#

even without steamodded

#

localthunk ??

hallow forge
#

wanted to get an opinion on this, since i'm not sure what would make sense, i have a boss blind which has a chance to permenantly modify drawn cards. should disabling it A. prevent later drawn cards from beung modified, B. all modified cards modified from this boss blind currenlty in hand are unmodified C. all modifications from this boss blind are reveryed

maiden phoenix
#

Like if you sell a Luchador mid boss blind?

hallow forge
#

yeah

maiden phoenix
#

I'd go with A imo

#

Might as well make a poll

hallow forge
#

k ig

zealous glen
#

I'd say it depends if Puzzled is related to the boss or not

hallow forge
#

it's related to teh boss

#

it comes only from the boss

zealous glen
#

If cards can become Puzzled in a different way, 1.

#

But does it persist after the Boss?

hallow forge
#

yes... i capitalized PERMANANTLY

solid salmon
#

hehe

tepid crow
#

no shot

#

how am I supposed to code anything now

#

oh nevermind its fixed

solid salmon
near ivy
# hallow forge

should prevent the boss from applying it to cards and remove the effect from only the ones it applied the effect to this round fight

hallow forge
#

why'd you vote the first one

#

if you think that

near ivy
#

it was the closest thing to what i wanted

hallow forge
#

i mean yeah but like theres a 55 character limit on the poll option

near ivy
#

mhm

hallow forge
#

well based on these results im probably gonna have it not unpuzzle cards at all. since thats what is being voted

near ivy
#

mmkay

charred harbor
#

I have a whole list of Balatro custom content I want to turn into a mod, and a decent amount of programming experience, though none in Lua. Where should I start?

crisp coral
#

if you have prior programming knowledge then lua should be intuitive(?)

#

extract the source code from the Balatro.exe file with winrar or 7zip

fallen tendon
charred harbor
#

And to add, say, a custom joker, what is there to do? I wanna start small. Throw it onto the joker stack list with necessary function, make art and put that in the right place, push it to github?

#

Any glaringly obvious step that I'm missing?

fallen tendon
#

Yeah

#

Just look at 1.0.0 mods to know the steamodded formatting

#

And the calculate function can be mostly inferred from card.lua’s calculate_joker function

zealous glen
brisk pond
#

is there a way I could do something like this?

crisp coral
#

...do you want to do ui bullshit?

wintry solar
#

The answer to that question is always no

zealous glen
#

Could you? Probably. Can you?

#

Can anyone?

fallen tendon
#

Only localthunk could possibly decipher the ui system

hallow forge
#

they can decipher it?

regal shoal
#

Hello people ❤️
I can't remember the parameter for starting jokers in a deck

sonic mortar
hallow forge
vivid eagle
hallow forge
vivid eagle
#

sure it does!
(i dont know how black holes work)

hallow forge
#

the black holes would jus merge into a "bigger" black hold

#

*just

#

*hole

solemn coral
#

How would I copy just the enhancement from one card onto another card? If I do context.other_card.ability.effect, that gives me the name of the enhancement, not the key, and card:set_ability doesn't like that as an argument

crisp coral
#

get context.other_card.config.center.key instead

#

each enhancement has each own center key

#

then you can set_ability the center with that key

solemn coral
#

That works, thank you!

solid salmon
#

hey guys wanna see some nil jokers

fallen tendon
#

no

#

im trying to get this enhancement to upgrade a hand when played, but due to the fact that the game definitely doesnt know how to do that ive had to make a ton of lovely patches, but for some reason they just arent working. anyone know why? (message is too big so ill try to send as txt)

solid salmon
#

idk why but the shader also affects legendaries

#

this is nil not negative

fallen tendon
#

might i be doing something wrong?

#

oof my destroy on discard function doesnt work either

#

i am begging for a calculate for enhancements

#

oh wait is there calculate for enhancements?

wintry solar
#

You need to use regex for multi line patterns

fallen tendon
#

no.

#

i dont have a cat

#

dogs dont walk on keyboards

#

ok maybe theres a reason people havent been making too many enhancements

solid salmon
#

yeah because it's complicated

fallen tendon
#

nah the calculate is just so painful

wintry solar
#

you could take a look at the better-calc branch and see if htat helps

solid salmon
#

how do i make a card pack

fallen tendon
zealous glen
#

I'm trying to make a Blind but it's behaving strangely. First, I tried to define Blind:modify_hand, but that alters the Chips and Mult after cards have been scored. Then I tried Blind:debuff_hand, but it changed the text but not the actual score. I decided to inject directly into evaluate_play to change the score. That works, but I end up with the predicted score being updated inconsistently. Any ideas?

remote coral
zealous glen
frosty dock
#

just self mostly, no more blind since you can just access that as G.GAME.blind

solid salmon
#

wait actually

#

how do i make a booster pack

gilded blaze
#

smod currently only has preliminary support for booster API iirc

#

nvm

#

it might have been a different thing

solemn coral
#

As someone else who was interested in making a custom pack, that's something that will be finished before the full release of 1.0, correct?

gilded blaze
#

Reverie already has custom packs

#

and it's for smod 0.9.8

frosty dock
#

there's been several implementations of booster packs without a steamodded API

#

the current state of 1.0 does have a booster api though as of recently

gilded blaze
#

Reverie does it via lovely patch, right got it

frosty dock
solemn coral
#

Ooooh!

gilded blaze
#

yea I saw the PR a while ago

solemn coral
#

Has the documentation been written for that yet, or should I just look at the PR and figure it out from there?

#

(Not planning on starting work on my booster pack quite yet, but if the API is there then I might work on it in the next day or two)

solid salmon
#

i looked at reverie

wintry solar
#

btw aure, did you get the edition docs?

solid salmon
#

and i just found out it has a pack that lets you choose anythingf

solid salmon
gilded blaze
#

meanwhile me having a fully working localization mod while wiki page hasn't even got Language API

solid salmon
#

it's outdated

frosty dock
#

oops, yeah I saw the edition docs, but wasn't able to add them right when I did and then I just forgot

solid salmon
#

i got editions

frosty dock
#

you have access to just add them though, no?

wintry solar
#

I don't think so

solid salmon
#

not the doc

#

but in my mod

gilded blaze
frosty dock
#

didn't you have write access to the repo?

zealous glen
solid salmon
wintry solar
#

I thought I did but now when I look I don't so I have no idea how I managed to merge into it

frosty dock
#

whatever I'll just put it in

#

I have no clue on how docs should be ordered when finalized tbh

zealous glen
#

this doesn't

frosty dock
#

what steamodded ver?

zealous glen
#

Commit f8f3603

frosty dock
#

there's your issue

#

that's a week old

zealous glen
#

And from the crash message I can see the isse

frosty dock
#

the blind arg was removed after the commit you're on

solid salmon
#

does anyone know a mod that has card packs?

#

and works for 1.0.0

frosty dock
#

bro the booster api was merged 2 days ago

solid salmon
#

but i need to know so i can make it for my mod

frosty dock
#

look at the code and figure it out

zealous glen
frosty dock
#

G.GAME.blind:wiggle()?

solid salmon
#

I can't if i don't know where

frosty dock
#
-- here's an example booster pack
SMODS.Booster {
    key = 'test_booster_pack_2',
    weight = 100,
    loc_txt = {
        name = "Arst",
        text = {
            "This is a test Booster Pack"
        },
        group_name = "Test Pack",
    },
    create_card = function(self, card)
        return create_card("Tarot", G.pack_cards, nil, nil, true, true, nil, 'buf')
    end,
    config = {extra = 5, choose = 5},
    draw_hand = true,
    sparkles = {
        colours = {G.C.WHITE, lighten(G.C.GOLD, 0.2)},
        lifespan = 1
    }
}
zealous glen
#

If self is the Blind, self:wiggle() should work

frosty dock
#

wiggle is on the Blind class

#

which is the object that's no longer passed because you can just use G.GAME.blind instead

#

so G.GAME.blind:wiggle() should do

zealous glen
#

ok

#

thank you

solid salmon
#

does extra mean the amount of cards inside

frosty dock
#

yes

solid salmon
#

ok

zealous glen
#

By the way, aure, what do you think of the suggestion I made in the Steamodded thread?

frosty dock
#

i like the idea, it seems quite powerful

#

but it would probably require rationalizing all existing calculation to do it properly

solid salmon
wintry solar
#

you need to update smods

frosty dock
#

I told you it was merged 2 days ago

#

your steamodded is from 4 days ago

#

adds up?

solid salmon
#

yep

#

apparently betmmas voucher packs also needs updating

crisp coral
#

shoutouts to lobcorp for not needing to update

zealous glen
crisp coral
#

yea?

#

what do you need

zealous glen
frosty dock
zealous glen
#

Sorry, I still don't get it

#

In my mind the idea is just a fancy list plus the injections to iterate over them

crisp coral
#

for that use modify_hand

zealous glen
#

It applies after the cards score

crisp coral
#

it doesn't?

zealous glen
#

It's the first thing I tried

crisp coral
#

then you tried it wrong

zealous glen
#

I copied from your code

#

and vanilla

wintry solar
#

maybe it's because you had an old version?

crisp coral
#

modify_hand is used for The Flint and that clearly doesn't proc after

solid salmon
#

aaaay

#

it works

#

kinda

frosty dock
#

if each vanilla calculation context isn't separately part of your fancy list, the idea is useless for most use cases

solid salmon
frosty dock
#

if everything from vanilla is uniformly prio 0, I can only go all the way before or after

#

which is most likely not what I would want for any given effect

#

i.e. that's what I would not consider "done properly"

zealous glen
#

Currently vanilla only has Jokers

#

(and Consumables sometimes)

frosty dock
#

but a shit ton of contexts for them

wintry solar
#

it has playing cards too

zealous glen
#

that's what the injections are for

#

that was in response to aure

wintry solar
#

I do think a rewrite of the evaluation stack is necessary at some point

#

otherwise it's going to become a large mess of injections

frosty dock
#

that's what I'm saying

#

if you extend each step of the calculation pipeline separately, it'll be a huge mess

#

so the process of a calculation step has to be normalized first

zealous glen
#

The extension follows the structure of the pipeline

#

It injects before and after each eval_card loop (at least the ones for Jokers) to loop over other objects

#

and if we rewrite the evaluation, playing cards, Enhancements, etc. would go into the pipeline as well

solid salmon
zealous glen
crisp coral
#

well yeah

#

what's your return

zealous glen
#

I think the way it (didn't) work before was due to me being in an old commit, but that the fact it still doesn't work is an issue with SMODS

solid salmon
zealous glen
solid salmon
#

1 the message

#

2 i have to pay for them

crisp coral
#

mult gets returned first

zealous glen
#

Oh I got tricked by Scarlet Mist's return

crisp coral
#

yeah Scarlet Mist's has both at the same value

zealous glen
#

I only saw the middle one was mult and didn't check the other one

#

by the way

#

why thunk why

#

the whole game has mult on the right

solid salmon
#

hey guys theres a problem with the voucher packs

edgy reef
#

Is there a specified group_name?

solid salmon
#

for what?

edgy reef
#

To display where the “ERROR” is.

solid salmon
#

oh no it's not an error

#

it's more like taking the vouchers makes me pay for them

#

i pay for the pack

crisp coral
#

hasn't betmma implemented that already

solid salmon
#

betmma's is outdated

#

and confusing

crisp coral
#

💀

solid salmon
#

i loaded the game with his and it crashed

#

after checking the pack

zealous glen
#

Thank you for the help, Myst!

#

New Blind!

The Worm
Base Chips are equal to Poker Hand's level

#

Although I might remake the icon

#

What do you think?

austere schooner
#

bit strong?

royal ridge
sly forge
#

Do you want balance suggestions

#

Great job on the programming part

austere schooner
#

in later antes that base chips is basically going to become a rounding error since like, you're not reasonably going to get hand level over 10 in a normal run

hallow forge
zealous glen
zealous glen
hallow forge
#

The issue with that is that you KNOW the worm is coming

sly forge
#

probably 5x poker hand level, or thereabouts

zealous glen
#

That was my thought if it was too strong

mellow sable
zealous glen
#

That or make it affect Mult

sly forge
#

That’s /4 to /6 chips for large hands

hallow forge
#

Meanwhile I have a blind which sets your chips to 0 and mult to 1

zealous glen
sly forge
#

Also, min ante at least 2, I guess

#

it matters a whole lot

#

If every blind is the club, you just ignore clubs

hallow forge
royal ridge
#

maybe i'm just a hierophant addict

hallow forge
#

I tend to test my blinds by just playing runs until it shows up

sly forge
#

see, this is why I don't give balance advice...

zealous glen
sly forge
zealous glen
#

That's normal gameplay

hallow forge
#

Planets are less important

zealous glen
#

also I beat it with Shoot the Moon and Baron

royal ridge
hallow forge
zealous glen
#

I thought you'd have more inclination

#

That's what I tried to do

hallow forge
#

See, you changed your behavior to adapt to the worm

sly forge
#

but, if you get the plant...

zealous glen
sly forge
#

that's like saying "from observation, the flint isn't so bad"

hallow forge
#

Additionally you know no other blind is coming

sly forge
#

it's the uncommon case, not the common one that matters for a boss blind. it can't be too cruel

zealous glen
royal ridge
#

nukes my level 12 straight gold stake runs for sure

hallow forge
#

I’d disagree you rely on base chips less

#

Which impacts planets

crisp coral
#

you people playtest stuff?

zealous glen
#

this beat it in one hand, also the next shop has Shoot the Moon again lol

crisp coral
#

ngl i never playtested any of mystblinds

zealous glen
#

I mostly just test if it works and sometimes I get carried away playing Balatro

hallow forge
#

You gotta at least play the blind once to get a feel for how damaging/non-damaging it can be

crisp coral
hallow forge
#

in a NORMAL run

crisp coral
#

too bad i don't playtest lol

sly forge
crisp coral
#

thank you for throwing me complaints

hallow forge
#

I like making difficult blinds

crisp coral
#

the one with odd debuffing i've set to a1 because there are many ways to make even ranked hands imo

#

even is a lot more rough

#

for waso idk how i could rework it while still keeping a sticker gimmick

wild gyro
crisp coral
sly forge
hallow forge
sly forge
#

hey, I don't mind making difficult stuff. but I very much am of the philosophy that good balance = good fun and replayability

#

I am very much a stickler for balance

crisp coral
#

i'm not aiming for difficulty in mystblinds so i'll look into reworking that

royal ridge
sly forge
royal ridge
#

but yeah, when balancing jokers/blinds, i try to consider every vanilla thing and try not to powercreep anything

zealous glen
#

Roguelike players when a rare build is good:

#

"What is consistency?"

sly forge
#

sorry, my tone is off. I am debating, not making aggressive statements

royal ridge
#

maaybe a little powercreep for mods is fun? but i try to avoid it anyway

wild gyro
#

canvas though

crisp coral
#

we don't talk about canvas

hallow forge
#

Cryptid isn’t meant to have balance

wild gyro
#

yeah

royal ridge
#

but you're right, early blueprint does not solo

zealous glen
#

What is the right way of adding cards directly to the deck?

sly forge
zealous glen
sly forge
#

ah, then it's hard to say without context, dm me

zealous glen
#

But I have 59/52 cards and they don't show up in the deck screen

sly forge
#

theres a bit of setup and other function calls

zealous glen
sly forge
#

hm, your card is already in the deck with emplace()?

crisp coral
#

check shit like Marble Joker or Certificate

sly forge
#

have you checked out marble joker

zealous glen
#

Wait, that last one should be G.playing_cards

#

That's where I copied from

#

But I changed G.playing_cards

crisp coral
#

G.playing_cards is the table with all cards you have

#

G.playing_card is just a counter

#

iirc

zealous glen
zealous glen
sly forge
#

does Marble Joker not add to the deck????

zealous glen
#

It adds to G.play

#

Oh, and then it draws to the deck

sly forge
#

You may wish to display the Stone card before adding it to the deck like Marble Joker

zealous glen
#

I did want to do that

sly forge
#

just copy Marble Joker, but make sure you put all 7 stone cards into the deck at once at the end

zealous glen
#

Now I have to decide between 7 or 13

sly forge
#

uh, I definitely wouldn't do 13 if you're talking about balance

#

you will probably never recover from 13

zealous glen
#

I could also make it a Blank (Dis)enhancement, but I do like Stone cards have uses

sly forge
#

also, the effect of the blind is permanent and possibly run-changing, maybe extremely beneficial at times. from a design perspective, this is actually great! but the blind should probably be rarer

zealous glen
#

I don't think there's a rarity control, and to be honest I'm not sure I support the idea

austere charm
#

Deck fixing issues? Just add 13 stone cards to the deck
13 stone cards all at once
You definitely won't regret 13 stone cards

zealous glen
#

I already dislike minimum and maximum Antes, although I understand it makes sense for specific effects

sly forge
#

the problem is that if a run-changing effect is too common, you start thinking about it all the time and things may get samey

zealous glen
#

Just add more Blinds balatrojoker

sly forge
#

well yeah. it's the same problem with mystblinds' food + fruit, they just showed up a bit too often. it's not really a balance problem but a minor design problem

#

pretty minor all in all

zealous glen
#

Now I'm curious what you'd think of The Root

sly forge
#

the radical from Mathblinds? sorry?

zealous glen
sly forge
#

seems fine in terms of balance

#

so, yeah, there are design sensibilities at play. but, these are mods, so I actually don't mind wacky designs, as long as it isn't too extreme

wild gyro
zealous glen
wintry solar
#

the best thing about extreme mods is I just don't have to install them

sly forge
#

ok, if I'm trying hard to debate this point, I guess there is a problem with extreme mods that don't have a balanced mode: if too much community effort is monopolized by those extreme mods, you essentially "lock out" people in the community who dislike that style of mod

#

(not a problem right now)

zealous glen
#

I mean, if people like making X type of mods, good for them

#

I don't think there's an issue in that situation

wintry solar
#

I do find it strange how everyone is having to debug their mod to work with cryptid/talisman because of the changes they make to make things extreme

sly forge
#

it's more talisman that is the problem, and talisman is more about not having limits on score rather than directly making extreme scores. and cryptid is just really big

#

so it steps on other mods' toes

frosty dock
sly forge
#

it's just that those mods have code with pervasive effects

zealous glen
hallow forge
#

Ohh talisman discussion

wintry solar
#

You're right, no one is forced to, but there's a lot of people who just post error reports and say they need to support talisman

royal ridge
#

cryptid is the calamity mod of balatro

hallow forge
#

Dw it’s gonna get worse

zealous glen
sly forge
#

participation effects, etc. lots to say

hallow forge
#

Nobody is forced to use 1.0.0 yet people do anyway

sly forge
#

we have a good community here, and everyone is affected by and affects the community

night pagoda
zealous glen
royal ridge
zealous glen
sly forge
#

there is no formal sharing of community effort, but there is a shared social structure that does affect the users

hallow forge
frosty dock
#

a lot of it is stable

zealous glen
frosty dock
#

but a lot of it also doesn't have docs yet

#

but 0.9.8 never had finished docs either

sly forge
#

man, docs. I'm busy fixing bugs; I already did my part to revise the current existing docs

frosty dock
#

either way it's not "stable" in the sense that it's still changing rapidly

wintry solar
#

1.0 has more docs than 0.9.8

frosty dock
#

I can hopefully make some progress on docs next week after I'm done with my oral exams

maiden phoenix
#

Aure about to rap in his oral

frosty dock
#

lol sure

#

not sure it'd help my grade though

solid salmon
#

How do I make my card pack give all the card types?

sly forge
#

that'll require some extra work. check out reverie, maybe

quasi kettle
#

How do I make it so I can generate a specific joker? (I know how to generate a random one)

sly forge
#

have you been using create_card() for a random joker? then, try looking at create_card() for how that works, to figure it out for yourself

#

if you need help message me

zealous glen
sly forge
#

check out reverie

zealous glen
#

Ideally I’d have a pool comprised of different object types

#

Specific ones

sly forge
#

you basically will have to construct a table with all the objects yourself

#

I believe that's what Reverie does?

zealous glen
#

Hmmm

sly forge
#

if you want a 2-level check: type, then object, then you can implement that yourself, again

lusty epoch
#

Does anyone know how to make text move up and down like the Mr. Bones self destruct text

zealous glen
lusty epoch
lusty epoch
#

and it overrides createcard so maybe look at that too

zealous glen
#

Thank you

sly forge
#

check out reverie's code first

solid salmon
#

Ok

solid salmon
#

i found it

fallen tendon
#

anyone know how to increase the rate of negative cards specifically?

wintry solar
#

you can adjust their weight

#

do you just want to blanket increase them across the game?

fallen tendon
#

yeah

#

im having way too many issues with this deck s0o imma do something else though rn

solid salmon
#

somethings wrong with my voucher pack

austere charm
#

looks like there's a problem with the override of create_card

#

either that or the function has been called improperly

solid salmon
#

well i don't know how to do it properly

wintry solar
solid salmon
solid salmon
#

which one

edgy reef
#

create_card doesn’t accept multiple types, only one.

solid salmon
#

then what does accept multiple types?

fallen tendon
#

how do you fix the shader profiling error when you change the name of the shader?

solid salmon
#

you don't

#

well you can

solid salmon
#

but you have to change every name in the shader to match that

fallen tendon
#

i get this when i open the edition menu after renaming my shader

solid salmon
#

yeah

#

the shaders has it's name inside to match the outside

fallen tendon
#

i am not takind advice from you

solid salmon
#

i had the same problem too

fallen tendon
#

well i guess that is it then lol

#

im sorry

wintry solar
#

yes goku is right

#

you need to change the name inside the shader too

#

because the game passes some information to the variable that is the same as your shader name

solid salmon
#

dude i was literally making editions and the shaders

#

how could i not know

#

anyways

#

makes me pay for the vouchers inside it

#

i could ask betmma

#

but i don't think it would work because his packs are outdated

royal ether
#

patch card:redeem if you dont want vouchers to cost money from a pack

solid salmon
fallen tendon
#

im kinda colorblind, is this purple?

solid salmon
#

yes

edgy reef
#

No it’s green 💚

solid salmon
edgy reef
#

(no)

solid salmon
#

ok

fallen tendon
#

i cant tell if its blue or purple

solid salmon
#

PURPLE

fallen tendon
#

ty

solid salmon
#

yw

edgy reef
#

Wait it wasn’t a joke 😭

#

Fml

solid salmon
fallen tendon
#

im actually colorblind

#

protanopia

#

my main pairs of colors i struggle to distinguish are yellow and bright green, orange and dark green, blue and purple, and cyan and white

solid salmon
#

it's a good thing im not

#

so i can help

#

wait Alex what are you making?

fallen tendon
#

edition for cryptid

solid salmon
#

astral

wintry solar
#

it looks good

solid salmon
#

if secondary shaders became supported

#

you could add stars

mellow sable
#

Couldn’t you just add those after applying the first shader

solid salmon
#

i tried

#

it didn't work

wintry solar
#

well that was easy

#

thrown it in a PR for smods for someone with write access to take a look at

fallen tendon
#

how would i add a texture as an extern to a shader?

wintry solar
#

G.SHADERS[_shader or 'dissolve']:send('mouse_screen_pos', self.ARGS.prep_shader.cursor_pos) this is how you format sending stuff

#

I'm not sure what type you'll need to set in your shader for a texture though

stray warren
#

How do you grab the current total chip value? I know about chip_mod for modifying the chips, but how do I access the actual current chip value?

fallen tendon
#

guess astral isnt getting stars

wintry solar
#

you could draw them inside the shader

fallen tendon
#

no way jose

#

too much math

#

how do i do that thing where every joker in the collection has your shader?

solid salmon
#

7 tarots

wintry solar
solid salmon
#

look it's the solar system

#

-saturn

#

and neptune

fallen tendon
mellow sable
wintry solar
#

@fallen tendon self.children.center:draw_shader(shader_key, nil, self.ARGS.send_to_shader)

fallen tendon
#

im running into another issue

#

this is an ^mult edition

#

i have no clue how to make it actually calculate the ^mult

wintry solar
#

don't look at me I just make things look pretty

solid salmon
#

I added the size Wumbo to the booster packs

mellow sable
fallen tendon
#

didnt work

#

can you pinpoint whats wrong about this?

mellow sable
#

you didn't change everything from mosaic to astral

#

@fallen tendon

fallen tendon
#

thanks

#

well thats fun

#

@mellow sable

mellow sable
#

Idk why it’s nil

brisk pond
#

localthunk forgive me for my sins

#

how do i do Xchips?

solid salmon
#

on a scale of screwed to fine how stable is jellymod

royal ether
#

beyond screwed

solid salmon
#

damn

stray warren
oblique gust
#

bunco and cryptid both got Xchips editions

#

(mosaic is just boosted glitter)

stray warren
#

I looked into those, but couldn't figure out where they got the Xchip_mod reference from

sonic mortar
austere charm
#

yeah, chips are never multiplied in vanilla as a way to differentiate them from mult, chips are only additive

maiden phoenix
#

What exactly is the "overwrite" parameter for in a lovely.toml file?

solid salmon
#

help

#

my computer just deleted lovely

vivid eagle
#

yup that happens
gotta reinstall it

solid salmon
#

where

vivid eagle
#

then maybe whitelist it so windows doesn't nuke it again

solid salmon
#

how?

fast badge
zealous glen
maiden phoenix
#

What happens if it's set to "at" but overwrite is set to "false"?

solid salmon
#

i got it

vivid eagle
#

ah gotcha

frosty dock
#

it does nothing

maiden phoenix
#

Wow that's a lot of words to describe it's usefulness 😅

hallow forge
#

the world is spinning pretty fast there

maiden phoenix
#

Around the world around the woooorld

solid salmon
fast badge
#

Do you know what a set is?

hallow forge
#

And say “1 in 3”

solid salmon
#

im just making sure it appears

#

would this work

hallow forge
#

*2

solid salmon
#

what?

hallow forge
#

in loc_vards

#

also no this will not work

solid salmon
#

i can't even use it

hallow forge
#

you need a #1# in #2# and not 1 in 3

solid salmon
fast badge
#

what is blud doing

solid salmon
#

making 1 in 3 that isn't hard coded

fast badge
#

Yeah show your code my guy

hallow forge
#

you are failing

fast badge
#

clearly

hallow forge
fast badge
#

probably did #1# in #3#

hallow forge
#

lol

fast badge
#

and #2# in #3#

#

300 iQ

solid salmon
#

...

fast badge
#

to explain: #1# and #2# are the placeholders for your loc_vars

solid salmon
#

so what i just remove #3#

#

and replace it with 3

fast badge
#

you do what Mathguy told you

solid salmon
#

im trying to make 1 in 3

#

not 1 in 2

fast badge
#

i have no clue what you pass in your loc_vars

solid salmon
#

#2# is 2

fast badge
#

well thats on you what #2# is

hallow forge
#

your loc vars second variable should be 3

#

as in just 3

fast badge
#

shots fired

solid salmon
#

no im making 2 chances

#

1 in 3

#

and 2 in 3

hallow forge
#

ah

solid salmon
#

bruh

hallow forge
#

so you need three variables

fast badge
#

then #3# should be 3

#

aka your third var

#

or your hardcode it

#

doesnt matter atp

hallow forge
#

it's better practice to make it a loc_var tho

solid salmon
#

it works now

#

how do i make it usable

fast badge
#

hurray

hallow forge
solid salmon
#

do i put true in that?

hallow forge
#

return true

#

function() return true end

solid salmon
#

huh

fast badge
#

mfw

#

youre overloading his last two braincells Mathguy

#

watch out

solid salmon
#

jeez

hallow forge
#

can_use = function() return true end,

solid salmon
#

how was i supposed to know that?

fast badge
#

braincells

solid salmon
#

well now i know so thank you

hallow forge
#

np

solid salmon
#

i works perfectly

crisp coral
# solid salmon

me when i get an oa6 and my chances become 2/3 to lose a hand and 4/3 to gain one

solid salmon
#

is there a way to make it unchangable

fast badge
#

||hardcode||

hallow forge
#

just don't add the g.GAMe. probs.uhhhhh thing

#

vars would just be {1,2,3}

brisk pond
#

is there some Debug option to debuff a joker, so I can check its abilities when debuffed?

solid salmon
hallow forge
#

yes

solid salmon
#

okay

crisp coral
#

(no)

solid salmon
#

and how do i make sure only one of it happens?

crisp coral
#

else

solid salmon
#

i did

#

then forgor

#

oh wait it's because red squiggly line

hallow forge
solid salmon
hallow forge
#

ok

solid salmon
brisk pond
solid salmon
#

no

hallow forge
#

else, not elseif pseudorandom('blue_and_red') < 2/3

solid salmon
#

ok

brisk pond
#
if pseudorandom() < 1/3 then
  stuff
else
  otherstuff
end
solid salmon
#

like this

hallow forge
#

do you know lua well?

solid salmon
#

50/50

hallow forge
#

also im notice a lack of an end there

hallow forge
brisk pond
# solid salmon

I just do ease_discard without the G.GAME stuff, @hallow forge knows better than me

hallow forge
#

no they are permantly changing the hands/discards per round

crisp coral
#

ease_discard is temporary

brisk pond
#

oh ok

solid salmon
brisk pond
brisk pond
solid salmon
#

ok

#

i already did

brisk pond
#

also, shouldn't you check if hands/discards >= 1? Otherwise Discard = -1 could happen

solid salmon
#

i think it's fine

#

also hand -1 is the only thing that can happen

#

(trust me i checked)

brisk pond
#

🆗

hallow forge
#

make sure to add a check at start of round for if you have 0 hands

#

because that should lose the round

solid salmon
#

i never used a check before

hallow forge
#

what

crisp coral
#

what

solid salmon
#

wait

#

um

hallow forge
#

we're waiting

solid salmon
#

what

hallow forge
#

you said "wait"

solid salmon
#

i just need a reminder

#

because i may have done it but forgotten

hallow forge
#

you forgot what "check" means?

solid salmon
#

ye

hallow forge
#

to perform a test for it something is correct

solid salmon
#

oh

#

i never did that

#

like if you mean

crisp coral
#

god

solid salmon
#

manually going in the game to see if it works

hallow forge
#

i don't think i can help you

solid salmon
#

💀

brisk pond
crisp coral
#

ping.

solid salmon
#

what..

hallow forge
#

myst doesn't like getting ping replied

solid salmon
#

oh no

#

the rule

#

(unspoken but still there)

hallow forge
#

pretty visible if u ask me

solid salmon
#

i still remember

brisk pond
solid salmon
#

bruh

#

the name is almost the same

solid salmon
hallow forge
#

joke

solid salmon
#

oh

solid salmon
#

...

#

so how's the modding going

brisk pond
#

20/41 jokers

#

now only the scary ones remain

#

like: how the hell do i do Arsène

crisp coral
#

carefully