#💻・modding-dev

1 messages · Page 254 of 1

sonic cedar
#

k

open aspen
sonic cedar
#

no

open aspen
#

it never changes so i dont need to do calculate stuff

gusty iron
#

how do i give myself a bunch of money with debugplus?

red flower
#

it's telling you you forgot to close a bracket
are you using an code editor or just notepad

rancid bridge
#

Notepad...

red flower
sullen fern
#

get vscode!!!!

sonic cedar
sullen fern
#

GET IT NOW!!!!!!

#

please, it will fucking save your life

open aspen
red flower
open aspen
#

is anything im doing here bad practice

rancid bridge
#

guess i'm getting vscode...

slow crater
#

strange, all my mods are updated, still an error

open aspen
open aspen
#

like properly updated

sullen fern
#

but now this is unreachable

open aspen
#

what is going on

stray warren
#

cause you're making it worse lol

red flower
#

send me your file and I'll make it worse

sullen fern
# stray warren Send me your whole file, and I'll try to fix it

SMODS.Joker {
key = 'doise',
loc_txt = {
name = 'The Doise',
text = {
"Gives {C:mult}+#2# Mult{} when",
"even rank cards are scored.",
"All odd rank cards are debuffed.",
"{C:inactive}The Doise is currently{} {C:chips}alive{}{C:inactive}!{}",
"{C:mult, s:0.8}Swaps to being dead on end of round"
}
},
config = { extra = { chips = 0, mult = 35, dead = 0, pos_override = { x = 2, y = 0 }, soul_pos_override = { x = 2, y = 1 } } },
loc_vars = function(self, info_queue, card)
return{
vars = {
card.ability.extra.mult
}
}
end,
if card.ability.extra.dead == 0 then
return {"alive"}
else
return {"dead"}
end
end,
rarity = 4,
atlas = 'atlasjokerlegendary',
pos = { x = 2, y = 0 },
soul_pos = { x = 2, y = 1 },
cost = 20,
calculate = function(self, card, context)
if context.joker_main then
end
end
}

gusty iron
#

is there a way to force a joker to spawn in the shop via debug plus?

open aspen
#

you have an extra end

#

that bottom one is wrong

#

below ur dead if statement

plush cove
red flower
open aspen
#

what is it ending then

red flower
#

the calculate

#

the one on top is ending the if

open aspen
#

ur looking at the wrong place

rancid bridge
#

why are you Red

red flower
# open aspen

ohh that whole if is wrong, that's another problem

open aspen
#

yea

rancid bridge
#

oh

#

oh i am so stupid.

open aspen
#
        return{
            vars = {
                card.ability.extra.mult,
                card.ability.extra.dead == 0 and "alive" or "dead"
            }
        }
    end,```

this would work i think?
stray warren
# sullen fern SMODS.Joker { key = 'doise', loc_txt = { name = 'The Doise', ...
    key = 'doise',
    loc_txt = {
        name = 'The Doise',
        text = {
            "Gives {C:mult}+#1# Mult{} when",
            "even rank cards are scored.",
            "All odd rank cards are debuffed.",
            "{C:inactive}The Doise is currently{} {C:chips}#2#{}{C:inactive}!{}",
            "{C:mult, s:0.8}Swaps to being dead on end of round"
        }
    },
    config = { extra = { chips = 0, mult = 35, dead = 0, pos_override = { x = 2, y = 0 }, soul_pos_override = { x = 2, y = 1 } } },
    loc_vars = function(self, info_queue, card)
        local status = card.ability.extra.dead == 0 and "alive" or "dead"
        return{
            vars = {
                card.ability.extra.mult,
                status
            }
        }
    end,
    rarity = 4,
    atlas = 'atlasjokerlegendary',
    pos = { x = 2, y = 0 },
    soul_pos = { x = 2, y = 1 },
    cost = 20,
    calculate = function(self, card, context)
        if context.joker_main then
        end
    end
}``` Try this
open aspen
open aspen
#

i think that works

sullen fern
#

thank you

rancid bridge
#

i was putting a closing bracket at the end thinking it was closing the whole joker section
Nope! it was just closing loc_txt

sullen fern
#

no more errors! lets go

open aspen
#

is anything here wrong

#

like this crashes my game

stray warren
open aspen
#

in fact it crashes cryptid?!

stray warren
#

Yeah make my changes and it should be good

open aspen
#

+alive

open aspen
#

i just wanna swap the enhancements on two cards

#

not sure if this is even a good way of doing it

sullen fern
#

decided to set "alive!" to #2# since that's the alive or dead var

open aspen
#

yes

stray warren
#

Yeah, that's what I sent lol

rancid bridge
sullen fern
#

okay, NOW i can start coding.

#

fuck me man

rancid bridge
open aspen
#

this whole chat is just PAIN

#

all the time

#

for all devs

#

GOD I JUST WANNA SWAP TWO DAMN ENHANCEMENTS IS THAT SO MUCH TO ASK

#

PELASE

modern kindle
#

usually it doesnt seem that bad but recently it definitely seems like it lmfao

stray warren
#

Give me a minute to analyze it and I'll try to get a solution to you

open aspen
#

ITS NOT EVEN MY MOD

sullen fern
#

now its time to actually have the mult exist

#

and be scored on even cards,

rancid bridge
#

should be fixed now....

sullen fern
#

and have odd rank cards be debuffed.

sullen fern
#

so how do i make the joker give mult only on even rank cards

rancid bridge
#

man what the fuck

analog spoke
#

I'm curious, would it be ok/chill/acceptable to make a thread in #1209506514763522108 for a mod I want to make and concepts for it, even if I don't really know how to do things yet? I have a lot ideas and I think having a page and a name behind my ideas might let me think better lol, or something like that, idk

open aspen
#

so clearly im doing something wrong anyways

stray warren
analog spoke
#

okey :3
I'll keep that in mind hehe, I'll be in there at some point then

sullen fern
rancid bridge
open aspen
#

go ahead

sullen fern
#

now i need to actually do the mult scroing first

#

which should be very easy

open aspen
#

you can do

```

code

```
to format ur message

#

not ' btw, `

#

@rancid bridge

sullen fern
#

the end.

rancid bridge
minor furnace
#

I LOCKED IN

#

I FIGURED IT OUT

open aspen
rancid bridge
#

discord may have fucked it up idk

open aspen
#

it did

modern kindle
#

yea welcome to discord file uploading

sullen fern
open aspen
#

try this

minor furnace
# minor furnace I FIGURED IT OUT

except whenever I click on it it switches between upside-down and normal 💀
however, I know how to implement the hook I need, so I just need to find the right function to patch and I'm golden

sullen fern
modern kindle
rancid bridge
minor furnace
#

I mean I'm more than willing to share how I did it, because I'm sure more poeple are going to have this question in the future

stray warren
open aspen
minor furnace
#

however, my implementation is still incomplete

open aspen
modern kindle
#

no worries people will just scour your git whenever things release

#

my shit isnt perfect but the important thing is that it functions

sullen fern
minor furnace
#

except when they haven't

open aspen
#

that shouldnt be expecting xmult

#

or doing xmult

modern kindle
open aspen
#

you alos dont need the message thing

#

it automatically says mult or whatever i think

sullen fern
#

like this?

open aspen
#

yea that should just work

rancid bridge
open aspen
#

amazing

#

ur doing better than me

#

this is one enhancement and it wont work right

sullen fern
#

there we go, dosie gives mult.

#

but it's for all cards

#

so i need to implement the card debuffing

rancid bridge
#

slight problem (this is in my mod's additions menu):
Yeah I'd Like To See Them.

open aspen
wooden nexus
#

Okay i have a question: how do i make an unlock condition?

I have a global function I wanna use called "tw_check" and it's currently set to 0.

I want to make it so that if tw_check = 1 that the conditions are met and unlocks stuff.

open aspen
#

new one

#

so u don’t fuck your actual profile save

sullen fern
rancid bridge
#

what the

modern kindle
#

your atlas pos isnt correct

rancid bridge
#

damn it!

modern kindle
#

remember that the very top left is considered 0,0

sullen fern
#

at least one of the things here isn't a lie. it sure does give +35 mult

rancid bridge
#

my stupid ass had it on x = 3 when it was supposed to be x = 2

modern kindle
#

ive flipped my x and ys before

#

so i get it

rancid bridge
#

now i gotta check if they work
gotta get debug plus hang on.......

sullen fern
sullen fern
open aspen
#

if it debuffs odd cards can’t it just give mult for all cards

#

because odd ones are debuffed

sullen fern
#

hm, you're right

open aspen
#

so they won’t count anyways

sullen fern
#

i just need to do it for all cards, then debuff the odd ones

stray warren
#

You can do something like:

  -- I don't remember the actual function to get the id
  if context.other_card:get_id() % 2 == 0 then
    return {
      mult = card.ability.extra.mult
    }
  end
end

That will at least score the even ones with mult

sullen fern
#

would modulo 1 equal odd numbers?

open aspen
#

no

#

modulo gives the remainder of division

sullen fern
#

ah

stray warren
#

just do %2 != 0 to get odd

plush cove
#

not !=

#

because lua

open aspen
#

so 2 / 2 is 0 with no remainder

stray warren
#

yeah, i keep forgetting that lol

open aspen
#

it’s 1 i mean

tall wharf
#

i do this too

#

i have to code backend in js

open aspen
#

3/2 is 1 with 1 remainder

#

modulo gives remainder basically

sullen fern
#

so i need to debuff odd rank cards now

rancid bridge
#

okay pillar john's +1 ante does work

open aspen
#

debuff cards where id modulo 2 is equal to 1

sullen fern
#

if context.other_card:get_id() % 2 == 1 then

stray warren
#

@open aspen Can you try this

            context.scoring_hand[index + 1]:set_ability(next(SMODS.get_enhancements(context.scoring_hand[index])));
            card:set_ability(enhanceSave);
stray warren
sullen fern
stray warren
#

although actually n % 2 == 1 does the same thing now that I think about it

open aspen
#

cause it formats weird somehow

manic rune
#

yeah but thats not calculate

#

so even if it should achieve the same thing, its not what im ultimately looking dor

#

for*

minor furnace
#

I now have it only flipping modded sprites upside down lmao

rancid bridge
#

okay something is wrong with the code of mathlete
it doesn't give +25 chips until you have 3 aces
what the fuck is going on

modern kindle
stray warren
modern kindle
#

alas, here we are

manic rune
#

same

open aspen
#

okieee

manic rune
#

:3

sullen fern
rancid bridge
modern kindle
#

if not docs at least i hoped the examples would be populated lmfao

manic rune
#

mhm

open aspen
#

something is terribly wrong

manic rune
#

theres no mod that uses blind calculate afaik

#

yet

sullen fern
open aspen
modern kindle
rancid bridge
open aspen
modern kindle
# manic rune theres no mod that uses blind calculate afaik
   -- Ensure the blind resets every new round
    press_play = function(self)
        self.won_blind = false  -- Reset flag when the player starts a new round
    end,

    calculate = function(self, context)
        -- Ensure the blind only activates once per round
        if G.GAME.chips > 0 and not self.won_blind then  
            self.won_blind = true  -- Set flag immediately to prevent multiple triggers

            if G.GAME.blind and G.GAME.blind.chips then
                local missing_chips = G.GAME.blind.chips - G.GAME.chips
                if missing_chips > 0 then
                    G.GAME.chips = G.GAME.chips + missing_chips  -- Add only missing chips
                end
            end

            -- Force an immediate state change and round end
            G.STATE = G.STATES.HAND_PLAYED
            G.STATE_COMPLETE = true
        end
    end
}```

i did this for a guy earlier, but its not like its super complex
#

for a blind he wanted

manic rune
#

...oh, so it interferes with G.GAME.chips directly?

modern kindle
#

just this did, he wanted it so playing a hand won the blind

#

just any hand

manic rune
#

mm

modern kindle
#

so i just made it do what debug does and set the blind score

sullen fern
modern kindle
#

then do complete

manic rune
#

i mean, i guess that works too, but visually speaking, i dont think its nice

minor furnace
#

my reverse tarots are now upside down, except when I click on them so I'm nearly there

modern kindle
manic rune
#

and probably not the best solution either 💔

modern kindle
#

lmfao

manic rune
minor furnace
#

I pray one more hook is all it takes

manic rune
#

:(

modern kindle
#

i think 'best solution' and 'looking nice' are last place vs functionality
so thats just what i aim for

sullen fern
#

are there any jokers that debuff cards

manic rune
#

what about the "X1.5" message though

sullen fern
#

or can i like
look at a blind that does it

plush cove
sullen fern
#

where are blincs locatred

#

in the balatro source

noble schooner
open aspen
noble schooner
#

once you do, coding becomes SO much easier

modern kindle
open aspen
modern kindle
#

i think as long as your shit is readable and works youre fine

open aspen
#

i think i just need someone knowledgeable to look at my code and my error

#

cause i cannot figure this out at all after spending half the day

noble schooner
#

JUST enough for casuals

#

(which also makes the game obscenely broken for speedrunning, at least on 1.001 lol)

modern kindle
#

hell if you look at thunks code its not like his is perfect

#

but it functions

sullen fern
#

card:set_debuff(true)?

minor furnace
#

time to lock even further in to find the function related to clicking and dragging cards

sullen fern
sullen fern
stray warren
# open aspen at this point

Try this?

            context.scoring_hand[index + 1]:set_ability(next(SMODS.get_enhancements(context.scoring_hand[index])));
            context.scoring_hand[index]:set_ability(enhanceSave);
sullen fern
open aspen
#

i hope that works but at the same time it looks like cards with no enhancements return an empty table

stray warren
#

it returns "c_base" from my testing

open aspen
#

get enhancements?

stray warren
#

yeah

open aspen
#

alrighty I will try it tmrw then ty for all the help

minor furnace
#

I have a feeling what I'm looking for is in moveable.lua

manic rune
#

not biased at all

#

:3

sullen fern
tall wharf
sullen fern
#

it debuffs itself when a card is played

#

which is NOT what i want

open aspen
#

i guess it really is dead now

stray warren
#

context.other_card is what you want

sullen fern
silver gull
#

anyone have tips on how to start modding for balatro?

stray warren
#

context.other_card:set_debuff(true)

rapid stag
#

what if i want to do this method but write {X:mult,C:white} kind of text? how would i do that with this setup?
got an answer in #1349064230825103441 message

sullen fern
#

everything's outta wack

#

it only debuffs odd cards when a card is played

#

which is not what i want

#

it's counting cards in the hand and unscored ones as well

stray warren
#

oh, you need to specify if context.individual and context.cardarea == G.play

sullen fern
stray warren
#

what is the intended effect, btw?

sullen fern
stray warren
#

odd cards are debuffed the entire time this joker is in your possession?

sullen fern
#

yeah

#

actually its intended to swap the ranks it debuffs each round but i haven't implimented that yet

tall wharf
#

feels a bit weak imo

stray warren
#

Ok, I think you need to loop through G.playing_cards in the add_to_deck function and debuff all the odd cards, then remove the debuffs in the remove_from_deck function. And then debuff newly added playing cards if they are odd in that specific function (I don't remember the name)

sullen fern
stray warren
#

ok, let me cook something up for you. Give me like ~10 minutes

#

can you send your whole Joker file

sullen fern
minor furnace
#

I discovered another isue with my methodology...

#

the buttons are on the wrong side (and upside down)

tall wharf
#

π/2

#

degrees

minor furnace
#

π radians

tall wharf
#

I'm stupid

#

what were you trying to do

minor furnace
#

trying to figure out how to rotate only the sprite and not anything else attached to it

tall wharf
#

I think that's VT I don't know actually

minor furnace
#

Because with my reverse tarots, I'm trying to make it so that it will use the current normal tarot sprites, and flip them upside down, instead of using my custom sprite sheet

#

that way it will look nice if other people have modded tarot card sprites

minor furnace
# tall wharf I think that's VT I don't know actually

currently, this is the entire code I have for flipping the card


function CardArea:align_cards()
    align_hook(self)
    if self then
        if #self.cards > 0 then
            for k, card in ipairs(self.cards) do
                if card.config.center.mod then
                    if card.config.center.mod.id == "reverse_tarot" and card.config.center.set == "Tarot" then
                        card.T.r = card.T.r + math.pi
                    end
                end
            end
        end
    end
end```
tall wharf
#

like card.VT

minor furnace
#

I'll try that instead of T

agile thistle
tall wharf
#

idk if that even works

tall wharf
minor furnace
#

VT did not work

agile thistle
#

what if you wrote a shader that flips the input

#

scary idea but

minor furnace
#

I would have to learn how to write a shader

agile thistle
#

This is True

minor furnace
#

it feels like there should be a straightforward way to do this

stray warren
# sullen fern
  key = "doise",
  loc_txt = {
    name = 'The Doise',
    text = {
      "Gives {C:mult}+#1# Mult{} when",
      "even rank cards are scored.",
      "All odd rank cards are debuffed.",
      "{C:inactive}The Doise is currently{} {C:chips}#2#{}{C:inactive}!{}",
      "{C:mult, s:0.8}Swaps to being dead on end of round"
    }
  },
  config = {
    extra = {
      chips = 0,
      mult = 35,
      dead = false,
      pos_override = { x = 2, y = 0 },
      soul_pos_override = { x = 2, y = 1 }
    }
  },
  rarity = 4,
  atlas = 'atlasjokerlegendary',
  pos = { x = 2, y = 0 },
  soul_pos = { x = 2, y = 1 },
  cost = 20,

  loc_vars = function(self, info_queue, card)
    local status = card.ability.extra.dead and "dead" or "alive"

    return {
      vars = {
        card.ability.extra.mult,
        status
      }
    }
  end,

  add_to_deck = function(self, card, from_debuff)
    for k, v in pairs(G.playing_cards) do
      if v:get_id() % 2 == 1 then
        v:set_debuff(true)
      end
    end
  end,

  remove_from_deck = function(self, card, from_debuff)
    for k, v in pairs(G.playing_cards) do
      if v:get_id() % 2 == 1 then
        v:set_debuff(false)
      end
    end
  end,

  calculate = function(self, card, context)
    if not context.blueprint and context.playing_card_added then
      for k, v in pairs(context.cards) do
        if v:get_id() % 2 == 1 then
          v:set_debuff(true)
        end
      end
    end

    if context.individual and context.cardarea == G.play then
      if card.ability.extra.dead then
        if context.other_card:get_id() % 2 == 0 then
          return {
            mult = card.ability.extra.mult
          }
        end
      end
    end
  end
}```
Can you try this?
#

replace if card.ability.extra.dead to if not card.ability.extra.dead in the even number check, I messed that up I think

sullen fern
#

okay

minor furnace
agile thistle
#

yup. its peak.

minor furnace
#

absolute cinema

stray warren
#

I think so. It's hard to tell with the screenshot. Run it and see how it goes

sullen fern
#

uh, they’re not being debuffed.

minor furnace
#

this might be what I'm looking for?

sullen fern
stray warren
#

when you add the joker to your slots, it doesn't debuff the odd cards?

sullen fern
#

it does for like, a split second

#

when i initially add it

stray warren
#

hmm. Sorry, that's all I've got right now, it's getting late

sullen fern
#
    for k, v in pairs(G.playing_cards) do
      if v:get_id() % 2 == 1 then
        v:set_debuff(true)
      end
    end
  end,

  remove_from_deck = function(self, card, from_debuff)
    for k, v in pairs(G.playing_cards) do
      if v:get_id() % 2 == 1 then
        v:set_debuff(false)
      end
    end
  end,

  calculate = function(self, card, context)
    if not context.blueprint and context.playing_card_added then
      for k, v in pairs(context.cards) do
        if v:get_id() % 2 == 1 then
          v:set_debuff(true)
        end
      end
    end

    if context.individual and context.cardarea == G.play then
      if not card.ability.extra.dead then
        if context.other_card:get_id() % 2 == 0 then
          return {
            mult = card.ability.extra.mult
          }
        end
      end
    end
  end```
#

just gonna post this snippet here in case anyone wants to troubleshoot

modern kindle
#

is there a reason a blue seal wouldnt want to spawn a custom planet card?

i seem to just be being told center is a nil value but i haevnt a clue on how to fix that aspect

manic rune
#

:3 im gonna try printing out all the keys of context again

#

and see what im working with

analog spoke
#

going to bed now, but I made a logo for my mod concept hehe :3
gonna @ myself so I remember to come back in da morning and post some stuffs hehe @analog spoke

#

so far I have a couple ideas, specifically, my main thing I'm starting with concept wise is Primordial jokers, a new rarity of joker that are found in a bit of an... interesting way, hehe

normal crest
modern kindle
normal crest
#

could you send your code and the crash

modern kindle
#
SMODS.Consumable {
    object_type = "Consumable",
    set = "Planet",
    name = "Stoner Ascendant",
    key = "stoner_planet",
    pos = { x = 7, y = 2 },
    config = { hand_type = "stoner" },
    cost = 3,
    aurinko = true,
    softlock = true,
    atlas = "tarots",
    order = 11,

    can_use = function(self, card)
        return true
    end,

    loc_txt = {
        name = "Stoner Ascendant",
        text = {
            "Level {C:attention}#1#{}",
            "Levels up the Stoner hand",
            "{C:red}+#2#{} Mult and",
            "{C:blue}+#3#{} Chips"
        }
    },

    loc_vars = function(self, info_queue, center)
        local hand_name = "dilatro_stoner"
        local hand = G.GAME.hands[hand_name]
        local level = hand and hand.level or 1
        local mult = hand and hand.l_mult or 1
        local chips = hand and hand.l_chips or 50

        return { vars = { level, mult, chips } }
    end,

    use = function(self, card, area, copier)
        -- Debug: Print the center of the card
        if card and card.config and card.config.center then
            print("Stoner Ascendant Center:", card.config.center)
        else
            print("Stoner Ascendant has no center assigned!")
        end
    
        print("Listing all registered hands in G.GAME.hands:")
        for hand_key, hand_data in pairs(G.GAME.hands) do
            print("Found hand:", hand_key)
        end
    
        local hand_name = "dilatro_stoner" -- Explicitly use the correct name
    
        if G.GAME.hands[hand_name] then
            update_hand_text({ sound = 'button', volume = 0.7, pitch = 0.8, delay = 0.3 },
                {
                    handname = localize(hand_name, 'poker_hands'),
                    chips = G.GAME.hands[hand_name].chips,
                    mult = G.GAME.hands[hand_name].mult,
                    level = G.GAME.hands[hand_name].level
                }
            )
    
            level_up_hand(card, hand_name)
    
            update_hand_text({ sound = 'button', volume = 0.7, pitch = 1.1, delay = 0.6 },
                {
                    handname = localize(hand_name, 'poker_hands'),
                    chips = G.GAME.hands[hand_name].chips,
                    mult = G.GAME.hands[hand_name].mult,
                    level = G.GAME.hands[hand_name].level
                }
            )
    
            update_hand_text({ sound = 'button', volume = 0.5, pitch = 1.0, delay = 1.5 },
                { mult = 0, chips = 0, handname = '', level = '' }
            )
        else
            print("Stoner hand NOT found in G.GAME.hands!")
        end
    end,
    

    in_pool = function(self)
        local hand_name = "dilatro_stoner"
        return G.GAME.hands[hand_name] and G.GAME.hands[hand_name].visible
    end,

    keep_on_use = function(self, card)
        return false
    end
}
normal crest
#

i meant the code for the consumable

modern kindle
#

oh,m apologies

normal crest
#

but did you start a new run

modern kindle
#

edited for you

#

i did yes

normal crest
#

your hand type needs the mod prefix

#

in the actual config of the consumable

modern kindle
#

ah i see, let me fix that and take a gander

normal crest
#

As for the use function, you might not need one at all

modern kindle
#

no? i thought consumeables required it

normal crest
#

I'm pretty sure if it has a hand_type in config it will default to the use function of vanilla planets

#

so try removing it entirely

modern kindle
#

ah gotcha gotcha, that makes sense yea

#

right you are, use is not needed

normal crest
#

did it help with the blue seal issue

tall apex
#

hey im like half asleep, why is this not calling for the number on the joker's table?

#

-w-

modern kindle
#

i stared at it several times and ws like 'yea, thats it'

#

all of my other consumables even have the prefix idk how i didnt see it

tall apex
#

h

minor furnace
#

Ok, now I simply need to figure out how to set my reverse tarot sprites to the normal tarot sprites

tall apex
#

wait can't you call ability extra numbers in messages?

normal crest
#

The #1# stuff is exclusively for loc vars, aka the text shown when hovering over your card

rose dragon
#

how do i do good balatro-like pixel art? because this is genuinely terrible and should burn.
is there a guide out there somewhere?

gleaming zealot
tall apex
gleaming zealot
normal crest
#

what exactly do you want the message to show

modern kindle
#

my strat has been using a friend, i find it effective

minor furnace
#

real

rose dragon
tall apex
#

thas it really

native zinc
#

idk i just decided to lock in

#

the top middle one took me forever

modern kindle
normal crest
tall apex
#

gotcha, thanks :3

native zinc
modern kindle
native zinc
#

modpack where every mod must have 1 suited up fella that gives money

modern kindle
tall apex
#

hey quick question, is there something im missing here in applying pseudorandom to sound? or is that just not able to be done

#

prob not how it works but i could use some help c:

normal crest
#

pseudorandom_element({'sound1', 'sound2', 'sound3'}, pseudoseed('whatever_you_want'))

vast fractal
#

how to destroy the jokers properly?

tall apex
#

ohh, so just no square brackets just the round and the pointy one

chrome widget
modern kindle
#

Lmfao

gleaming zealot
#

paws at u haiii~ :3

scarlet spire
#

is it possible to make a message appear on command rather than when returning?

#

I have a message I want to occur with a deliberate offset before the mult is applied

minor furnace
#

we are so back

#

and the buttons are where they're supposed to be

hybrid iris
#

i was scrolling through all my mentions and uh

#

yeah kind of actually!

#

its very limited but like its A method of doing it

lament agate
#

how do i check if the player loses the run

#

i want to write a thing so that it plays a random sound whenever the player lose

hybrid iris
#

hmmm,,,

#

try looking into the code for mr bones?

#

though i guess that type of implementation would require like

#

a joker to exist

#

for that effect

eager parcel
#

Hello! I'm new in mod making in Balatro and I want to get started on making them. What IDE do you guys recommend in learning lua?

hybrid iris
#

oooh

#

personally i used visual studio code!

#

the file directory stuff helped me when i was diving through balatro's code and its relatively easy to use

vast fractal
eager parcel
hybrid iris
hybrid iris
#

no prob

lament agate
#

it's an open Source alternative of it

lament agate
#

sorry im new to this whole thing

hybrid iris
#

oh, no worries!

#

uhh

#

so what you want to do i assume is play a sound effect when the game ends, right?

#

like,,, a "you died" sfx similar to dark souls or something

hybrid iris
#

okay! so,,, this implementation requires looking into lovely patching

lament agate
#

dont worry, you can run me through this

hybrid iris
#

you can look into how lovely patching works here

#

ack

lament agate
#

wait

#

how about this?

hybrid iris
#

oh?

#

oh, no thats, a steamodded toml file dedicated to helping the soundengine i believe?

lament agate
#

oh damn

#

fucked up then

#

so what do i type

hybrid iris
#

yeahhh

#

,,,but, uh!!

#

its, hard to explain lovely patching like this sorry 😭

#

its like:

[manifest]
version = "1.0.0"
priority = 0
# these just say that 'hey, this is a lovely file'

[[patches]]
[patches.pattern]
target = "game.lua"
pattern = "self.SPEEDFACTOR = 1"
position = "after"
payload = '''
initSteamodded()
print('{{lovely:var_name}}')
'''
match_indent = true
times = 1

# this is the code that you want to use to modify game files!
# target is the file you want to edit, so for your case, "game.lua"
# pattern is what line of code in the file you want to look for
# position is where you want to inject your own code. after is the line after, before is the line before, and at replaces the line in pattern
# payload is the code that you want to edit!
# match_indent is for cleanliness only i believe
# and times is how many times you want this to happen, if it happens multiple times!
#

sjdhjsdh if you ahve any more questions feel free to like, ask

lament agate
#

imma make this as an example too

hybrid iris
#

OH

#

yeah thats actually a really good example too!

lament agate
#

so like

#

i need to inject it to game.lua

hybrid iris
#

ye

#

you can unzip your balatro file to check out the source code

lament agate
#

do i name it lovely.toml?

hybrid iris
#

yeah!

#

if you're just doing one file then yes

solar eagle
#

how would i access the current game profile?

hybrid iris
#

wdym?

lament agate
#

so i set the target to game

#

and then

#

whats the pattern

solar eagle
#

the one you're playing in

solar eagle
#

need to check some game stats

hybrid iris
#

no clue

#

sorry

solar eagle
#

damn

hybrid iris
solar eagle
#

oh its G.SETTINGS.profile

hybrid iris
#

oh rad

lament agate
#

and ill try to tweak it by myself

hybrid iris
#

okay cool

#

you want to set the pattern to '''play_sound('negative', 0.5, 0.7)''' and the position to either before or after

#

because that pattern's in the middle of the function for when the game ends

lament agate
#

done

#

what do

hybrid iris
#

well

#

now you just edit payload

#

to insert the code to play whatever sound you want

lament agate
#

so

#

i need it to detect game over

#

and then it will play out of 3 or 4 sounds i have saved

hybrid iris
#

oh uh

hybrid iris
#

the location where you're patching to in the code is in the middle of the game over function

#

the 3 or 4 sounds thing is all up to you

#

to figure out how sound playing and stuff works in the api

#

check out this one

lament agate
#

so play_sound(blabla,bla,bla) ?

#

also i already have a main.lua doing this in my mod folder

hybrid iris
#

yea

native zinc
#

what band-aid if statement would fix this

#

ig i can just remove the juice up

#

¯_(ツ)_/¯

stray warren
#

Replace context.other_joker with G.jokers.cards[i+1]

lament agate
#

how do i make it random

gleaming zealot
#

girlsmell

lament agate
#

wrong chat helena

gleaming zealot
lament agate
#

@hybrid iris ?

solar eagle
#

is evaluate_poker_hand still used in smods? i've been trying to patch into it but none of my changes seem to affect anything

hybrid iris
#

but yeah!

solar eagle
#

i can't find a replacement smods function though

#

(and, i can't get lovely to patch into smods...)

#

target = '''=[SMODS _ "src/utils.lua"]'''
this syntax should work from what i've seen but it doesn't

hybrid iris
#

and that time and place is now

gleaming zealot
lament agate
#

so now

#

i just need to make a sound file with that name

hybrid iris
#

yea

lament agate
#

i name them all youdied.wav?

hybrid iris
#

shrug

#

i can only help you with the patching part

#

the actual code, im sure you can figure out yourself

lament agate
#

fair enough

hybrid iris
#

plus i dont know

lament agate
#

OH WAIT

tall wharf
#

i think people should

lament agate
tall wharf
#

be able to understand basic computer functions

lament agate
#

we're not as perfect as you

#

let alone extracting

hybrid iris
#

i prefer to keep it hands off to give them a chance to learn and figure things out

tall wharf
#

like

#

you should know what a computer does at the most basic level

hybrid iris
#

things have been getting more and more anti-user knowledgeable

lament agate
#

things aint user-friendly anymore?

tall wharf
#

it takes shit in and does some shit spits shit out and keeps shit stored

hybrid iris
#

big companies dont Want users to understand what their computer does

#

you cannot fault someone for not knowing

#

only for blatant chosen ignorance

hybrid iris
#

nerd >:O

tall wharf
#

i think the advent of smartphones actually worsens this

#

actually

#

so much abstraction

plush cove
#

chatgpt has ruined programming forever

lament agate
#

aikoyori is atleast 40

hybrid iris
#

hey, ive seen 15 year olds who act this way too

lament agate
#

daddy, i cant zoom in the books

hybrid iris
#

age isnt a qualifier for being an accidental snob sometimes

solar eagle
#

is evaluate_poker_hand just not called anywhere????

#

what on earth replaces it

hybrid iris
#

uh oh

daring fern
#

How could one make more than 2 layers for a joker?

solar eagle
#

game patches

hybrid iris
#

game patches mostly

#

its,,, a lot harder

#

actually wait

#

yeah game patches

hybrid iris
solar eagle
#

actually wait i think i want to patch somewhere else

#

hmm

lament agate
#

so i do this

#

and i do this?

#

or did i fuck something

solar eagle
#

im so confused

hybrid iris
#

,,,hmm

solar eagle
#

why is this patch not working

#

like it patches in but the game doesnt print

lament agate
#

i dont think i need the replace no?

hybrid iris
#

,,,yeah wait i think this is right?

#

i have no clue how appending works

#

but, probably

#

you can test it out

lament agate
#

let me a new sound file real quic

#

4 of them to be exact

solar eagle
#

whyyyyyy

lament agate
#

IDK WHAT THEY PLAYED THOUGH

solar eagle
#

what in the chain has been broken

tall wharf
#

without phone stopping me

hybrid iris
#

yes!!!

#

complain about the devices and the companies

#

not the users

#

they dont know better, its not their fault

#

oh great aiko of yori

#

idk

lament agate
#

oh right i have this game on

solar eagle
#

this function is NOT being called but i dont know why

daring fern
#

Where does cryptid patch for more than 2 layers?

lament agate
solar eagle
#

probably in exotic or something

daring fern
#

There is no exotic lovely file.

solar eagle
#

up to you then

#

trawl them all

daring fern
#

Is this the right one? ```

Draw midground layer

[[patches]]
[patches.pattern]
target = "card.lua"
pattern = "if self.config.center.soul_pos and (self.config.center.discovered or self.bypass_discovery_center) then"
position = "after"
payload = '''
if self.config.center.soul_pos and self.config.center.soul_pos.extra and (self.config.center.discovered or self.bypass_discovery_center) then
local scale_mod = 0.07-- + 0.02math.cos(1.8G.TIMERS.REAL) + 0.00math.cos((G.TIMERS.REAL - math.floor(G.TIMERS.REAL))math.pi14)(1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL)))^3
local rotate_mod = 0--0.05math.cos(1.219G.TIMERS.REAL) + 0.00math.cos((G.TIMERS.REAL)math.pi5)(1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL)))^2
self.children.floating_sprite2:draw_shader('dissolve',0, nil, nil, self.children.center,scale_mod, rotate_mod,nil, 0.1--[[ + 0.03math.cos(1.8G.TIMERS.REAL)--]],nil, 0.6)
self.children.floating_sprite2:draw_shader('dissolve', nil, nil, nil, self.children.center, scale_mod, rotate_mod)
end
'''
match_indent = true

tall wharf
solar eagle
#

HOW DOES THIS WORK

#

evaluate_poker_hand seems to do NOTHING

onyx sonnet
solar eagle
#

i modified it to return nil and the game still functions

#

but what the HELL replaces it

vocal cedar
#

anyone have any good tester mods? like a sandbox that allows me spawn in my own jokers and tarots at will?

#

like

vocal cedar
#

i just need a way to test myshit and summon my joker at will

#

thank you

solar eagle
#

press 2 to unlock

#

press 3 to summon

#

ctrl/cmd+c to copy ignoring limits

#

wheeee

onyx sonnet
#

Polyamory

solar eagle
#

big fan

lament agate
hybrid iris
#

sounds like it works pretty well to me

lament agate
#

its the main.lua thats working

tall wharf
#

i never checked

hybrid iris
lament agate
#

i think i know a fix

hybrid iris
#

oh radical

#

you got this!!

onyx sonnet
#

Unleashing my 2 billion chicots to reach naninf blind req

lament agate
tall wharf
#

i tried going to e308 blind

#

and it just froze and crash the game

#

(jen's almanac number)

lament agate
hybrid iris
#

shrug

#

havent really used audio in my mods so i have

#

no clue

tall wharf
#

hello

hybrid iris
#

i think take ownership exists when you want to change an existing item in balatro?

tall wharf
#

anything that's registered before you

hybrid iris
lament agate
#

where do i put it then

hybrid iris
#

ooh i see

solar eagle
#

is it possible to perform a context.individual check on debuffed cards?

lament agate
solar eagle
#

i assume not without patching

#

not really sure where to look tho

hybrid iris
#

this sounds like @/maratby's territory

tall wharf
#

i think it is in steamodded now

#

not sure

#

when i did it i was using a patch

solar eagle
#

well yeah a lot of stuff is

#

which is incredibly annoying

#

i can't figure out what function they use now instead of evaluate_poker_hand

#

because it doesn't seem to do anything anymore

tall wharf
#

nvm it is not my bad lmao

#

I'm stupid

lament agate
#

oop

#

first crash

tall wharf
#

i might try to make a debuffed card calculate context thing

#

chat

#

I'm not a code wizard

wintry solar
#

Did someone mention a code wizard

tall wharf
#

omg it's the real code wizard

lament agate
#

is it like this

#

or is it like this

pale venture
#

is it possible to use naneinf as a value code-wise? Let's say for example i want to add a joke poker hand with naneinf chips

tall wharf
#

but it won't work with talisman

#

you'll see 1e309 with it still

pale venture
#

yeah that's what i was worried about

#

oh well

tall wharf
#

i don't know if that will create infinity but

#

from my testing if you put the first argument of arrow to be decimal it goes to infinity

pale venture
#

Alright, i'll try that, thank you.

vocal cedar
#

anyone got any specral card templates floating around?

pale venture
gleaming zealot
#

HAAAAAHAAHAHAHAHAHAHAAAAAHA

daring fern
vocal cedar
#

quick question to everyone, is there a function or value i could call to like

#

calculate the amount of cards in my hand when i score a hand

#

like i play a high card and i have 9 cards left in my hand

#

how do i get that '9'

maiden river
#

it's #G.hand.cards

#

the # is the length symbol in Lua

vocal cedar
#

Does that dynamically update? Trying to make a joker that gives +2 mult for each card in hand when you play a hand

vocal cedar
maiden river
#

yeah it does

vocal cedar
#

i am BRAND new at this shit

#

was just trying to make a few sample jokers before tackling some crazy shit

maiden river
#

every time you call it it should update properly

vocal cedar
#

trying to figure out both how to make ^MULT a thing (stealing it from cryptd) and then 2 vouchers

First voucher allows tarot spectral and planet cards come with Editions (foil poly etc) Second voucher increases the chance of them in the shop and when a planet card with an edition is used it ADDS the multiplier of the edition to that upgraded hand

#

like if we have flush at level 10 and say it has like 300 chips and 23 mult every time you play a flush
a holographic jupiter when used would give it the regular upgrade then tack on an ADDITIONAL +10 mult to that hand forever lol

#

should be fun to figure out

#

again might just poke around in cryptd

vocal cedar
red flower
#

^mult is a talisman thing AFAIK

vocal cedar
#

any way to get it from talisman without making my mod dependent on it or should i actually just work my mod with tali

#

LAST question i promise

anyway to get intelisence to work with SMODS? like have VSCODE recognize shit like #G.hand.cards as an actual global game value?

#

cause as of now VS has no damm clue wtf im doing untill i actually throw the mod into balatro lol

vocal cedar
red flower
vocal cedar
#

the git repo?

red flower
#

the mod folder

#

i recommend just opening the mods folder when you're working on a mod

vocal cedar
#

oh word up

#

so if the smods folder is in my workspace its just gonna be chill like that

#

huge

#

massive even

#

onesec

surreal marsh
#

what's the new version of checking G.STATE == G.STATES.TAROT_PACK🤔

primal shoal
#

how can you active a joker when selecting a card

humble girder
#

G.STATE == G.STATES.SMODS_BOOSTER_OPENED

#

validate on SMODS.OPENED_BOOSTER

red flower
primal shoal
#

when can i find how to hook
or what do i need to do?

red flower
rose dragon
humble girder
#

return true from your events lol

rose dragon
#

is there a way to add a calculate function (a function that gets called when something is getting calculated) that is always going regardless of whether there is an active blind, joker, or etc.?

vocal cedar
red flower
faint plank
manic rune
#

wawa

faint plank
#

it tickles my brain

rose dragon
# red flower yes, hook SMODS.calculate_context

why does this crash when loading into the game?

calc_hook = SMODS.calculate_context

function SMODS.calculate_context(context, return_table)
    if context.playing_card_added then
        print(context)
    end

    calc_hook(context, return_table)
end
red flower
#

what's the crash?

rose dragon
red flower
#

i think you need to return the reference

zealous glen
manic rune
#

blind calc, help :3

#

do i need to specify "card = ..." here?

frosty dock
#

uh, shouldn't

manic rune
#

ghghgh

#

i cant seem to figure how how this work, didnt you send a video with the blind doing smt like that 💔

rose dragon
rose dragon
#

oddly enough

frosty dock
#

not sure how that would change things, that line might just need a nil check

manic rune
#

where would i add that nil check...

frosty dock
#

no that's something I need to do

manic rune
#

o

#

:3

#

icic

frosty dock
#

oh I see I'm passing a scored card that doesn't exist

rose dragon
#

why isn't this debuffing?

calc_hook = SMODS.calculate_context

function SMODS.calculate_context(context, return_table)
    local x = calc_hook(context, return_table)

    if context.debuff_card then
        local c = context.debuff_card
        if c.kmod_mem_debuff then
            print("debuffing")
            c:set_debuff(true)
        end
    end

    return x
end
frosty dock
#

that's a very weird way to do that

rose dragon
frosty dock
#

no, the manual call on set_debuff

#

you can do x.debuff = true instead

#

but also there's ways to set permanent debuffs directly with smods (SMODS.set_debuff)

rose dragon
#

yea that works thx

zealous glen
#

how to unset a debuff on itself?

manic rune
#

while true do SMODS.set_debuff(card,true) end until the code fucking breaks and it de-debuffs itself :3

frosty dock
#

unset as in undo a debuff previously inflicted on itself in context.debuff_card or as in prevent debuffs from other sources?

zealous glen
#

also good morning aure how aure you?

frosty dock
#

in that case, stop returning debuff = true in context.debuff_card

#

Also thanks, I'm doing good

manic rune
#

good microwave aure, how table are u today

frosty dock
frosty dock
#

good microwave

#

I'm doing good, ty

manic rune
#

icic, good to know :D

#

-# im gonna go collect more objects on home depot™️

primal shoal
#

whats the var that has the store the amount of booster pack opened?

bold sleet
#

huh what?

#

A TABLE? In my Fool's Gambit, no way!

tall wharf
manic rune
#

oops

frosty dock
tall wharf
#

oops i almost shared my receipt

frosty dock
subtle mason
#

How does smods evaluate what modded booster pack the game has open? Whatever smods pack you open it returns G.state of 999, so how does the game know what cards to place in the pack?
Any clue where I can get the opened pack data from?

vocal cedar
#

this is all im given as well

#

any GLARING errors that you can see?

#

the joker has a 1 in 5 chance to make any played (and scored) cards negative

maiden river
#

wouldn't set_edition just use e_negative

vocal cedar
#

well thats what its SUPPOSED to do at least

vocal cedar
#

it gave me the prompt for negative playing card to

#

i used it lol

frosty dock
#

negative_playing_card is only for tooltip stuff

vocal cedar
#

oh gotcha

#

john smods himself

frosty dock
vocal cedar
#

OH shit that was it!

#

thank you!

#

now to add animations i suppose

#

juice up is the animations thing yeah

tall wharf
vocal cedar
#

it worked now

#

saturn might also be cooked

tall wharf
#

how do you change this dissolve colour

manic rune
#

i thought

#

you can change the color in the function itself

subtle mason
native zinc
#

hey does anyone know how splash works

#

or where it is in the source code

wintry solar
#

What are you trying to do?

native zinc
#

play and retrigger unscored cards

vocal cedar
#

dude i cant even begin to say how usefull it would be if someone rewrote all the base game jokers into the smods editions

#

cause like

tall wharf
#

ok now they do it correctly

vocal cedar
#

i was looking for the exact same thing @vocal cedar

#

@native zinc

#

sorry

#

and source code is rough to read

native zinc
#

yeah lmao

#

please ignore my file sorting management

vocal cedar
#

my room is worse

native zinc
#

but yeah splash isn't in card.lua

vocal cedar
#

i think splash basically runs through each card and adds it to the scoring_hand list

native zinc
#

it would make sense

#

oh there we go

#

thank you Past People

vocal cedar
#

on god

#

this chat itself is a wiki at this point

native zinc
#

the wiki is really unhelpful

#

but that's like the average modding wiki

#

so

#

really reading source code is the best thing i can do

#

also why exactly is splash here?

stiff locust
#

what do you mean why is splash here

#

it's there because it has to be there in a specific scoring step

native zinc
#

oh

#

it's in evaluate play

#

oh wow i recognise you from me looking up "splash" in the search bar

stiff locust
#

i'm famous

hushed field
#

One of the optional features in SMODS is being able to interact with unscored cards, btw, which depending on what you wanna do might make it a whole lot easier!

native zinc
#

i just wanna score and retrigger the cards

#

but yes i am aware! i saw it when i was looking up splash

#

but wow they really need to Write This Down

hushed field
#

Undocumented features are a core feature of smods

hushed field
vocal cedar
#

just have a buncha people work on it

#

id help

#

(once i get better at all of this)

native zinc
#

it's mostly copy paste from source except for all the contexts you need to add

#

and fixing up any god awful source code if elseif elseif elseif elseif elseif elseif elseif elseif

#

when i opened card.lua it was an experience

vocal cedar
#

im going to bed but he is beautiful

animation looks like shit and the randomness is not great at all

like the random seed is straight up not working at all and it basically makes the whole hand negative

need to look at code for like space joker or just figure out a better random algo cause its currently doing a x in x chance to make your whole HAND neg instead of each card

#

but he is still amazinf

#

my goat

native zinc
#

oh for each card just do a for loop

hushed field
#

Tbh a lot of the jokers would be barely any effort, but I think my rewrite would be slightly unhelpful, as I want to do it so I can make vanilla jokers fully compatible with everything my mod does, haha, but it'd be easy enough to then turn that into regular vanilla from there

vocal cedar
#

i did lol

#

the pseudorandom is like

#

not random

native zinc
#

oh hm

vocal cedar
#

it also turns every card negative at the same time instead of a delay at all

#

idk

native zinc
#

why dont you hardcode card.ability.extra.chance

#

to be 3

#

(?)

vocal cedar
#

huh?

#

wydm

#

i do lol

native zinc
#

well yeah but you can just write 3 in the code lmao

vocal cedar
#

its a variable

#

i do it this way so its easy to change

hushed field
vocal cedar
#

anyway it doesnt even have great animations yet unless you count juice up

tall wharf
#

what am i cooking...

hushed field
native zinc
#

oh fair i suppose

vocal cedar
#

i mean i want it to do the same shit the midas mask does in effect

#

but it wouldnt make all cards negatice, each card has a 1 in 6 to become it

hushed field
#

That works with events

vocal cedar
#

i think the pseudorandom seed isnt truly random either so its fuckin with my code

hushed field
vocal cedar
#

regardless im going to bed for now, i made 2 jokers today, thats 2 more jokers than i have ever made in my entire life so we only getting better from here

vocal cedar
#

i might be actually stupid

#

lmfao

#

you right

hushed field
#

You set it up correctly, I reckon you're just reloading a save or something, resetting the odds to be repeated exactly

vocal cedar
#

hmm

#

ill mess with it tmr.

weird question btw

#

why did this code NOT work at all

#

ignore the make_negtative() i didnt know how to change edition

#

why would context played card and context scoring not actually target the card?

hushed field
#

Unless it's from an optional feature I'm not familiar with, context.played_card doesn't exist

vocal cedar
#

tsk tsk
there i go again making my own damm context lol

#

well that clears it up

hushed field
#

You want to do this in context.individual, and just go for context.other_card, as that always is a scoring card

vocal cedar
#

oh gotcha

hushed field
#

But you'll get it fully set up tomorrow, haha, have a good night

vocal cedar
#

so many ways to code this stuff

#

its cool

#

yeah

#

thanks again ice. nice to see a reoccuring face that also manages to help me each time

#

im gonna get better at this shit

hushed field
#

Kinda have to help out, as an Ice, considering you're Mr freese

vocal cedar
#

im just trying to stretch my legs, make a few custom jokers and specral cards that add implementations for players to get negative playing cards in their hands cause i think thats such a cool feature

#

then im gonna tackle that legendary rework i was yapping about

#

i got permission from eaze to merge mods too man its gonna be peak

native zinc
#

hey hold on what context should i be doign

vocal cedar
native zinc
#

i just assumed .before

vocal cedar
#

this for the splash right

native zinc
#

oh i just wanna do splash but retrigger the unscored cards

vocal cedar
#

before seems right to me

native zinc
#

yeah

#

ill see if this works as splash

hushed field
#

You wanna use before and add each unscored card to scoring hand, and I reckon you should mark them with a temporary variable as well, like 'card.splashretrigger = (card.splashretrigger + 1) or 1', so you can check in the individual context if a card has been marked to retrigger

daring fern
#

Would it be possible to have vouchers be purchased to the consumable slot?

hushed field
#

Because vanilla Splash implementation doesn't allow you to easily see which cards originally wouldn't score

native zinc
#

first i would have to detect unscored cards

#

which. hm

#

i guess i can use the smods lmaooo

tall wharf
#

chat what number is this

hushed field
# native zinc first i would have to detect unscored cards

Not that difficult luckily! I don't know if SMODS always has it stored in each context, but you'd iterate through the played_hand (or whatever the proper name for it is) context and check if the current card is in the scoring_hand context. If it isn't, you add it and mark it. Or you don't even add it, just mark it, and then just copy played_hand into scoring_hand

native zinc
#

hm

hushed field
tall wharf
#

ok how clear is the 8

hushed field
hushed field
glacial bloom
hushed field
ruby delta
# hushed field Yoo

Do u know a way I could increase the shop size? Like instead of 2 jokers being sold I could make it sell 4 same for the packs, I mean there is a mod but for some reason it causes the Vouchers to disappear and prevents them to be sold

glacial bloom
tall wharf
zealous glen
tall wharf
#

rite of passage is not a coding thing

zealous glen
#

Historically it could be required for e.g. children to be considered adults

hushed field
tall wharf
#

has learning occured

hushed field
zealous glen
#

maybe there is

daring fern
#

How could one let vouchers appear again after being redeemed?

glacial bloom
tall wharf
#

(my bank account rn 😭)

lament agate
#

how do you expand your consumables slot using debugplus?

tall wharf
#

eval G.consumeables.config.card_limit = 1e300

lament agate
#

thanks

zealous glen
hushed field
#

Oh, you need to grab the played and scoring hands from the context.

native zinc
#

. womp

#

context.played_hand ?

#

eh makes sense

hushed field
#

context.full_hand, I had to check to make sure

#

And context.scoring_hand

native zinc
#

oh right

#

so then i just context.scoring_hand = context.full_hand

wintry solar
#

You can add cards to the scoring hand using context.modify_scoring_hand, you’ll have to look in the lovely dumps to see how to use it though

gusty iron
#

would something like this work?