#💻・modding-dev

1 messages · Page 304 of 1

daring fern
#

Also you don't use your prefix when defining the key.

iron haven
runic pecan
#

Is the second pic a thing or should I keep it as the first one?

iron haven
runic pecan
daring fern
iron haven
sturdy compass
#

It really sounds like you should learn some coding basics

runic pecan
iron haven
#

{X:mult,C:red} +#1# {} Mult?

daring fern
iron haven
#

oh

scarlet spire
#

{X:mult,C:white} is for the red border you see on xmult

#

{C:mult} is for regular mult

unborn steeple
#

well... I dunno, a couple reasons, I guess? I like to avoid, like, external dependencies whenever I can when I'm modding stuff, especially when the mod is for a game that I'm already struggling with and the dependency doesn't feel absolutely necessary because the process without the dependency seems fairly well-supported and/or easy and/or simple and/or functional, like it is with Balatro.

like, it seems to me that since all of my packs are working 100% fine as-is except for this specific one, like, based on prior experience, introducing a new dependency (sorry if I'm using that word wrong, also, because I might be) has a high likelihood to create more problems then it would solve. I've had a lot of experience with "let's use [X tool] to make [Y process] simpler" turning into "spending 5 additional hours troubleshooting [X tool]". adding a new dependency for this one minor thing feels like, from what I've experienced before, overkill with a high likelihood of backfiring and just making me more frustrated.

I'm also specifically nervous about learning a new Balatro tool because, in my experience, there are extremely limited online resources for learning and troubleshooting modding for this game. I've kinda been running in circles a bit in making these texture packs because, well, y'know how bad Google has been recently, and I'm finding it really hard to find good tutorials, templates, examples, etc etc etc. Like, someone mentioned earlier that my pack format was for an old version, but it's based on literally the only format template I could find online that had what I needed.

sorry for wall of text. I'm trying to be as clear as I can. thank you for being patient with me.

scarlet spire
#

in this case, mult is just the name of a color

runic pecan
# iron haven how do I do the code `+3 mult` or whatever
    "Gains {C:mult}+#2#{} mult for played {C:attention}Aces{}.",
    "{C:inactive}(Currently {C:mult}+#1#{C:inactive} mult)"
}``````config = { extra = { mult = 0, mult_gain = 1 }},
loc_vars = function(self, info_queue, card)
    return {
        vars = {
            card.ability.extra.mult,
            card.ability.extra.mult_gain,
        }
    }
end,```
iron haven
#

ok now it isn't showing up in the game.

daring fern
iron haven
#

oh I didn't

wintry solar
# unborn steeple well... I dunno, a couple reasons, I guess? I like to avoid, like, external depe...

Malverk is specifically designed to make managing multiple texture packs easier from both an end user and a mod dev perspective. You are currently just hard replacing the files the game uses, with no customisability after installing your mod. Malverk works by creating options for you to select between, meaning once your mod has been installed it never needs to be removed if you want to use other textures. It also allows much more advanced control if that’s something that you’re looking for. The syntax is designed to be reasonably simple, but there are plenty of people here who are familiar enough with it to help you out if you’re struggling.
I would really recommend its use for any texture packs.

iron haven
#

the letterJokers code.

icy oak
#

how do i overwrite the stats of an existing planet card

tepid rock
#
    config = {extra = {Xmult = 0.5, face_cards_played = 0, odds = 1000, cass_rounds = 0, reset_rounds = 5}},
    rarity = 3,
    --sprite location
    atlas = 'Jokers',
    pos = {x = 1, y = 0},        
    cost = 10,
    loc_vars = function(self, info_queue, card)
        return { vars = { 1 + (card.ability.extra.face_cards_played * 0.5), (G.GAME.probabilities.normal), card.ability.extra.odds, card.ability.extra.cass_rounds, card.ability.extra.reset_rounds } }
    end,
    calculate = function(self, card, context)    
    if (card.ability.extra.cass_rounds < card.ability.extra.reset) and context.end_of_round and context.game_over == false and not context.repetition and not context.blueprint then
            card.ability.extra.cass_rounds = 1 + card.ability.extra.cass_rounds
        end
        if (card.ability.extra.cass_rounds >= card.ability.extra.reset) and context.end_of_round and context.game_over == false and not context.repetition and not context.blueprint then
            card.ability.extra.face_cards_played = 0
            card.ability.extra.cass_rounds = 0
        end
    end
``` meant to reset amount of face cards it has detected after 5 rounds (there is a lot more between calc and the if but it doesnt affect it)
runic pecan
iron haven
# runic pecan Yeah

`SMODS.Atlas{
key = 'Jokers',
path = 'LetterJoker.png',
px = 71,
py = 95
}

SMODS.Joker{
key = 'alpha',
loc_txt {
name = 'A',
text = {
"Gains {C:mult}+#2#{} mult for played {C:attention}Aces{}.",
"{C:inactive}(Currently {C:mult}+#1#{C:inactive} mult)"
}
}
atlas = "Jokers",
pos = {x = 0, y = 0}
config = { extra = {
mult = 3,
mult_gain = 1
}
}
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.mult,
card.ability.extra.mult_gain,
}
}
end,
}

`

daring fern
icy oak
#

hmm

#

is it this

daring fern
south lintel
#

this should be pinned in this channel ngl

iron haven
#

hmm

icy oak
#

what about uh, the planet

runic pecan
icy oak
#

whats the class for it

zealous glen
daring fern
icy oak
#

thx ill check

south lintel
zealous glen
iron haven
south lintel
daring fern
iron haven
#

oh

unborn steeple
# wintry solar Malverk is specifically designed to make managing multiple texture packs easier ...

so... this is good, in theory, but I feel like this is kinda a "using a nailgun to put in a thumbtack" kind of situation, if that makes sense? like, I'm not really a programmer, and looking over the Malverk github page, it feels like a bit much to learn a bunch of new coding things just so that I can make my one malfunctioning texture pack out of four work properly.

like, I'm really grateful to everyone in here for offering Malverk as an option, and if I were in a different situation it would absolutely be helpful, but right now I'm not really looking for a full replacement engine so much as I'm just looking for a fix to this one issue I'm facing.

iron haven
#

is there a way to get my joker unlocked?

unborn steeple
#

again, though, thank you for the advice! I'm not trying to accuse you of being unhelpful or anything

daring fern
iron haven
#

where in there?

zealous glen
runic pecan
marble flint
runic pecan
iron haven
#

does this work?

daring fern
runic pecan
tepid rock
unborn steeple
iron haven
daring fern
marble flint
iron haven
#

I think I didn't save it?

runic pecan
tepid rock
#

thank you TwT

unborn steeple
iron haven
#

I'm looking for my joker.

unborn steeple
#

in the meantime, could I get help with my weird little outdated non-Malverk pack format? I don't even necessarily need someone to fix it, I just want to understand why it isn't working/where to start with fixing it

marble flint
#

or well not more effort

daring fern
cursive sentinel
#

hi, quick question about how tags are executed, basically got a joker that creates random tags on skip, although it seems that all tags that should apply dont apply immediatly and instead are delayed either on next shop, or on next post shop phase

tepid rock
#
loc_txt = {
        name = 'Cassette Tape',
        text = {
            "{X:mult,C:white} X0.5 {} Mult per face card played",
            '{C:inactive}(Currently {X:mult,C:white}X#1#{} Mult)',
            "{C:green}#2# in #3#{} chance this card is destroyed",
            "at end of round",
            'After 5 rounds, reset.',
            '{C:inactive}(Currently #4# / #5# rounds)'
        }
    },
    config = {extra = {Xmult = 0.5, face_cards_played = 0, odds = 1000, cass_rounds = 0, reset_rounds = 5}},
    rarity = 3,
    --sprite location
    atlas = 'Jokers',
    pos = {x = 1, y = 0},        
    cost = 10,
    loc_vars = function(self, info_queue, card)
        return { vars = { 1 + (card.ability.extra.face_cards_played * 0.5), (G.GAME.probabilities.normal), card.ability.extra.odds, card.ability.extra.cass_rounds, card.ability.extra.reset_rounds } }
    end,
    calculate = function(self, card, context)        
if (card.ability.extra.cass_rounds < card.ability.extra.reset_rounds) and context.end_of_round and context.game_over == false and not context.repetition and not context.blueprint then
            card.ability.extra.cass_rounds = 1 + card.ability.extra.cass_rounds
            return {
                message = 'Track #4#!'
            }
        end
        if (card.ability.extra.cass_rounds >= card.ability.extra.reset_rounds) and context.end_of_round and context.game_over == false and not context.repetition and not context.blueprint then
            card.ability.extra.face_cards_played = 0
            card.ability.extra.cass_rounds = 0
            return {
                message = 'Reset!'
            }
        end
    end
}
``` it isnt increasing the round number nor resetting nor sending a message
rose dragon
#

better than triboulet?

tepid rock
proud moon
#

ive got a syntax error i cant seem to find for the life of me

iron haven
daring fern
iron haven
#

it didn't calculate it.

#

oh

proud moon
#
SMODS.Atlas {
    key = "Delatro1",
    path = "Delatro1Sprites.png",
    px =71,
    py = 95
}

SMODS.Joker{
    key = 'jambo',
    loc_txt = {
        name = 'Jambo',
        text = {
            "{C:chips}+#1# {} Chips"
        }
    },
    config = { extra = { chips = 20 } },
    loc_vars = function(self, info_queue, card)
        return {
                    vars = {
                       card.ability.extra.chips 
                } 
            }
    end,
    rarity = 1,
    atlas = 'Delatro1',
    pos = {x=0,y=0},
    cost = 2,
    calculate = function(self,card,context)
        if context.joker_main then
            return {
                chips_mod = card.ability.extra.chips,
                message = localize {type = 'variable', key = 'a_chips', vars = {card.ability.extra.chips}}
            }
}

This is the first joker ive written, and i followed the smod examples but i cant figure out where this error is coming from.

#

does anyone know where that dastardly comma is missing from? if thats even the issue

proud moon
#

loc_txt = {

daring fern
iron haven
#

instead of Xmult_Mod, what do I do instead?

proud moon
iron haven
#

this is from the video.

daring fern
daring fern
proud moon
iron haven
# daring fern Use `mult`

`SMODS.Atlas{
key = 'Jokers',
path = 'LetterJoker.png',
px = 71,
py = 95
}

SMODS.Joker{
key = 'alpha',
loc_txt = {
name = 'A',
text = {
"Gains {C:mult}+#2#{} mult for played {C:attention}Aces{}.",
"{C:inactive}(Currently {C:mult}+#1#{C:inactive} mult)"
}
},
atlas = "Jokers",
pos = {x = 0, y = 0},
config = { extra = {
mult = 3,
mult_gain = 1
}
},
unlocked = true,
discovered = true,
rarity = 1,
cost = 4,
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.mult,
card.ability.extra.mult_gain,
}
}
end,
calculate = function(self,card,context)
if context.joker_main then
return(
card = card,
mult_mod = card.ability.extra.mult,
)
end
end
}

` so this is correct?

proud moon
#

oh ok

daring fern
iron haven
#

line 40?

daring fern
iron haven
#

mult = card.ability.extra.mult,

daring fern
iron haven
#

do I need the message part?

#

like do I have to add it?

iron haven
#

or no?

daring fern
iron haven
#

ok

proud moon
iron haven
#

oh

daring fern
iron haven
#

yeah I know

proud moon
icy oak
#

is there a reference guide for what the key for each object is

proud moon
#

lol thank you for the help guys

daring fern
icy oak
#

yes

daring fern
iron haven
icy oak
#

okay

slate bison
#

bro idk what this is i tried to change it so much

#

anyone know why is it giving this error from the source code of the game?

daring fern
iron haven
#

@daring fern update(self, card, dt)?

#

or?

slate bison
#

😭

daring fern
iron haven
daring fern
hard needle
#

yeah

iron haven
hard needle
# iron haven

i dont think you're checking if the card is an ace

iron haven
hard needle
#

you have to check if its rank is 14

iron haven
#

oh

tepid rock
#

if context.other_card:get_id() == 14 then

#

intead of joker main

hard needle
#

yk someone should make steamodded intellisense

#

i need autocomplete smh

daring fern
# iron haven how do I?
if context.individual and context.cardarea == G.play and context.other_card:get_id() == 14 then
    return {
        mult = card.ability.extra.mult,
        card = card
    }
end
iron haven
runic pecan
iron haven
daring fern
iron haven
#

ok

#

now nothing else?

daring fern
iron haven
runic pecan
# tepid rock ```lua loc_txt = { name = 'Cassette Tape', text = { ...

Put into text in case you wanna copy-pastecalculate = function(self, card, context) if context.end_of_round and context.cardarea == G.jokers and not context.blueprint then if card.ability.extra.cass_rounds < card.ability.extra.reset_rounds then card.ability.extra.cass_rounds = 1 + card.ability.extra.cass_rounds return { message = 'Track '..card.ability.extra.cass_rounds..'!' } else card.ability.extra.face_cards_played = 0 card.ability.extra.cass_rounds = 0 return { message = 'Reset!' } end end end

iron haven
#

nvm i fixed it

daring fern
rapid stag
#

i can't hook Game:start_run without the game exploding? girldmSad

tepid rock
iron haven
daring fern
daring fern
iron haven
#

so those five are normal?

daring fern
iron haven
#

ok

tepid rock
rapid stag
proud moon
#

OH i was still having the same issue then i realized i was editing a coppied file. so none of the changes were actually doing anything lol

runic pecan
iron haven
#

two errors.
one (it didn't update): I played 2 aces
two (logic error): not playing aces should also trigger A.

tepid rock
runic pecan
iron haven
# daring fern Show your code.

`SMODS.Atlas{
key = 'Jokers',
path = 'LetterJoker.png',
px = 71,
py = 95
}

SMODS.Joker{
key = 'alpha',
loc_txt = {
name = 'A',
text = {
"Gains {C:mult}+#2#{} mult for played {C:attention}Aces{}.",
"{C:inactive}(Currently {C:mult}+#1#{C:inactive} mult)"
}
},
atlas = "Jokers",
pos = {x = 0, y = 0},
config = { extra = {
mult = 3,
mult_gain = 1
}
},
unlocked = true,
discovered = true,
rarity = 1,
cost = 4,
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.mult,
card.ability.extra.mult_gain,
}
}
end,
calculate = function(self,card,context)
if context.individual and context.cardarea == G.play and context.other_card:get_id() == 14 then
return {
mult = card.ability.extra.mult,
card = card
}
end
end
}`

daring fern
tepid rock
#
    if context.setting_blind then
            if (card.ability.extra.cass_rounds < card.ability.extra.reset_rounds) then
                card.ability.extra.cass_rounds = 1 + card.ability.extra.cass_rounds
                return {
                    message = 'Track '..card.ability.extra.cass_rounds..'!'
                }
            else
                card.ability.extra.face_cards_played = 0
                card.ability.extra.cass_rounds = 0
                return {
                    message = 'Reset!'
                }
            end
        end
    end
``` is my code
runic pecan
tepid rock
runic pecan
tepid rock
#

all good

runic pecan
iron haven
#

I wanted to add the message of you getting +1 mult

rapid stag
daring fern
# iron haven I wanted to add the message of you getting +1 mult
calculate = function(self,card,context)
    if context.individual and context.cardarea == G.play and context.other_card:get_id() == 14 then
          card.ability.extra.mult = card.ability.extra.mult + 1
          return {
              message = 'Upgrade!'
          }
    end
    if context.joker_main and context.cardarea == G.jokers then
         return {
            mult = card.ability.extra.mult,
            card = card
        }
    end
end
iron haven
#

oh upgrade is ok

runic pecan
iron haven
daring fern
tepid rock
runic pecan
iron haven
daring fern
tepid rock
iron haven
# daring fern What does your current code look like?

`SMODS.Atlas{
key = 'Jokers',
path = 'LetterJoker.png',
px = 71,
py = 95
}

SMODS.Joker{
key = 'alpha',
loc_txt = {
name = 'A',
text = {
"Gains {C:mult}+#2#{} mult for played {C:attention}Aces{}.",
"{C:inactive}(Currently {C:mult}+#1#{C:inactive} mult)"
}
},
atlas = "Jokers",
pos = {x = 0, y = 0},
config = { extra = {
mult = 3,
mult_gain = 1
}
},
unlocked = true,
discovered = true,
rarity = 1,
cost = 4,
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.mult,
card.ability.extra.mult_gain,
}
}
end,
if context.individual and context.cardarea == G.play and context.other_card:get_id() == 14 then
card.ability.extra.mult = card.ability.extra.mult + 1
return {
message = 'Upgrade!'
}
end
if context.joker_main and context.cardarea == G.jokers then
return {
mult = card.ability.extra.mult,
card = card
}
end
end
}

`

tepid rock
#

was a problem with my keyboard's s key lmao

daring fern
rapid stag
south lintel
#

this is weird, my joker seems to be able to appear in the shop while I already have it even without a showman. How do I fix this?

daring fern
south lintel
#

oh I did

#

that's what causes it?

daring fern
scarlet spire
#

debugplus spawning doesn't remove stuff from the pool, yeah

south lintel
#

alright, thanks

iron haven
#

@daring fern lol

#

it upgrades the ace and not the joker.

daring fern
runic pecan
iron haven
#

hold on

#

there

#

it still upgraded the joker.

iron haven
# iron haven

it does the message 5 times then the mult shows and adds

#

oh nvm

cursive sentinel
#

hi how could i force tag evaluation?

iron haven
#

@daring fern how do i duplicate playing cards?

daring fern
# iron haven <@696947656986984518> how do i duplicate playing cards?

This is what 'Cryptid' spectral does: ```lua
G.E_MANAGER:add_event(Event({
func = function()
local _first_dissolve = nil
local new_cards = {}
for i = 1, self.ability.extra do
G.playing_card = (G.playing_card and G.playing_card + 1) or 1
local _card = copy_card(G.hand.highlighted[1], nil, nil, G.playing_card)
_card:add_to_deck()
G.deck.config.card_limit = G.deck.config.card_limit + 1
table.insert(G.playing_cards, _card)
G.hand:emplace(_card)
_card:start_materialize(nil, _first_dissolve)
_first_dissolve = true
new_cards[#new_cards+1] = _card
end
playing_card_joker_effects(new_cards)
return true
end
}))

runic pecan
daring fern
#

While hovering over the card.

tall wharf
iron haven
#

oh god

runic pecan
# tall wharf

Please also show them your alphabet joker collection, would you?

iron haven
#

I regret this.

iron haven
#

how do I delete a playing card?

maiden phoenix
#

If you have DebugPlus you can press r on it

iron haven
#

pressing r does nothing.

#

ctrl+r

daring fern
proud moon
#

i have just successfully added my first joker to my first mod and gave it compatibility with jokerdisplay, i just thought id share lol

iron haven
#

don't mind me

olive shoal
#

for a hand of 45 cards your hand seems rather small

#

all huddled up together

iron haven
#

🙂

gusty iron
#

how would i check if a players hand has only 4 cards, and has 1 of every suit?

tepid rock
#

Is there a guide for blueprint capabilities?

gentle rain
gusty iron
#

would this work??

#

also yes i code in notepad

gentle rain
# tepid rock Is there a guide for blueprint capabilities?

you define where you wane blueprint not to trigger. you just put "if not context.blueprint" in the contexts of the abilities that you do not want copied, such as a scaling ability (this joker gains x), and you don't change anything for the contexts you do want, as blueprint copies all abilities by default

tepid rock
gentle rain
gusty iron
#

how would i check the played hand, and not the scoring hand?

#

is it just context.full_hand?

daring fern
gusty iron
#

okay so my joker is just

#

done

#

had to go to roblox to debug my bracket usage but like

#

it works

#

jippie

hard needle
gusty iron
manic rune
gusty iron
#

but tbf im just making htese mainly for my friends so like

gusty iron
manic rune
#

😭

#

-# why

hard needle
#

Vscode is free bro

manic rune
#

the coloring you are using is for XMult

#

you should probably shorten it too

gusty iron
#

so this?

#

"If your hand contains exactly 1 card of each suit, {C:mult}+#1#{} Mult"

manic rune
#

you can remove "your"

gusty iron
#

mehhh

#

it feels wrong

#

might just be me though

hard needle
daring fern
#

How does one draw a shader on a seal?

gusty iron
#

okay wait no

its just me

#

Okay so i legit just made nerfed flower pot okay 😭

manic rune
#

its just stuff like "Held in hand", not "Held in your hand" for instance

#

or you could do something like

+10 Mult if exactly 1 card of each suit is held in hand

which should be pretty accurate to Blackboard's wording imo

gusty iron
#

I need to know how to do these things:

  • Generate a random suit each round

  • Add chips when said suit is scored

zealous glen
manic rune
#

🤔

#

it does?

zealous glen
#

I remember talking about “your graveyard” and there was a counterexample

manic rune
#

welp, my point has been made invalidated, im gonna off myself from this conversation :3

manic rune
#

-# bruh

hard needle
#

xD

manic rune
#

in my defense, balatro's wording is inconsistent as hell

zealous glen
daring fern
zealous glen
#

↗️

manic rune
#

😭

manic rune
#

idk about the first one though, theres definitely a function to create a playing card but i havent used it before

#

so i cant remember it :p

daring fern
manic rune
#

riiiiight :3

#

is it the one that uses smt like, 3_H or smt?

zealous glen
#

Yes

gusty iron
#

does math.random work here

manic rune
#

dont use math.random

gusty iron
#

what do i use then

manic rune
#

use pseudorandom_element instead for consistency

gusty iron
#

suits = {
"Heart",
"Spade",
"Diamond",
"Club"
}
suit = suits[math.random(1,4)]

so what would i do here?

manic rune
#

it chooses a random value from a table:

local randomSuit = pseudorandom_element(suits,pseudoseed("your unique seed here"))
#

but you probably want to change allat to H,S,D,C instead

gusty iron
#

so just

#

pseudorandom_element(suits)?

zealous glen
#

I’d recommend using the list of suits

hushed field
zealous glen
#

So it can work with modded suits

manic rune
#

how do modded suits work with create_playing_card, actually

zealous glen
#

You can also pass no arguments AFAIK

manic rune
#

3_(?)

zealous glen
#

And it automatically creates a card with a random rank and suit

gusty iron
#

so how would i get the suit of the most recently scored card

#

do i just like

#

do a for loop

daring fern
tepid rock
#

Tried to slice, crashed instead

gusty iron
#

config = { extra = { chips = 0, chip_gain = 2, suit = pseudorandom_element(suits, pseudoseed('albuquerque')) } },

i feel kinds stupid but why does this not work??

daring fern
# tepid rock

Your checking that there is no edition and then your checking if its negative.

tepid rock
daring fern
tepid rock
#

thank you

gusty iron
gusty iron
#

its something in the misc_functions thats breaking

#

lemme get the error

wintry solar
#

Have you defined suits?

gusty iron
#

yeah

#

suits = {
"Heart",
"Spade",
"Diamond",
"Club"
},

#

heres the error

daring fern
wintry solar
#

Oh you can’t do that in the config

gusty iron
#

so can i do something like this outside of config
gensuit = pseudorandom_element(suits, pseudoseed('albuquerque'))
then set suit to gensuit in config?

wintry solar
#

No

#

You just set card.ability.extra.suit = pseudorandom…. in the set_ability function

gusty iron
#

okay i got it to work by modifiying some code i found

maiden phoenix
#

Oh reverse castle, kinda silly

tepid rock
#

It aint working nor showing the details (I thought this would be an easy one 😭 )

SMODS.Joker{
    --identifier
    key = 'streamingService',
    --what it says
    loc_txt = {
        name = 'Streaming Service',
        text = {
            '{C:chips}+#1#{} Chips',
            'if 5 cards are played',
            '{C:green}#2# in #3#{} chance',
            'for {C:money}$#4#{}'
        }
    },
    config = {extra = {chips = 100, odds = 1000, money = 1}},
    rarity = 3,
    blueprint_compat = true,
    eternal_compat = false,
    perishable_compat = false,
    --sprite location
    atlas = 'Jokers',
    pos = {x = 1, y = 0},        
    cost = 8,
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.chips } }
    end,
    calculate = function(self, card, context)        
        if h_size_ge == 5 then
            if pseudorandom('streamingService') < G.GAME.probabilities.normal / card.ability.extra.odds then
                return{money = 1}
            end
            return {
                chips = 100,
            }
        end
        
    end
}
manic rune
#

return stuff in loc vars

tepid rock
manic rune
#

nop

#

#G.play.cards is what ur looking for

#

but also, u forgot context

tepid rock
#
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.chips,G.GAME.probabilities.normal, card.ability.extra.odds, card.ability.extra.money } }
    end,
    calculate = function(self, card, context)        
        if context.play.cards.h_size_ge == 5 then
            if pseudorandom('streamingService') < G.GAME.probabilities.normal / card.ability.extra.odds then
                return{money = 1}
            end
            return {
                chips = 100,
            }
        end
        
    end
}```
crashed now
tepid rock
ripe widget
#

Okay thanks a lot man

brazen vigil
#

oh shit this is the wrong channel

#

sorry mods

#

😦

runic pecan
#

Imma post this here for no reason elaborated.

runic pecan
#

What variable name do I call this string? localize('c_planet_x').name?

tepid rock
tall wharf
#

😭

tepid rock
#

give 100 chips if 5 cards are played (like the psychic boss blind) and a 1 in 1000 chance for $1

tall wharf
#

so like

#
if (context.cardarea == G.play and #context.cardarea.cards == 5) then
    if pseudorandom("twitchandytgaming") < G.GAME.probabilities.normal / card.ability.extra.odds then
        return { dollar = card.ability.extra.money, 
        chips = card.ability.extra.chips
}
    else
        return { chips = card.ability.extra.chips }
    end
end
daring fern
#

How does one make a seal only show when the card is facing down?

runic pecan
tall wharf
tepid rock
tall wharf
#

context.joker_main

#

and just remove the card area lol

tepid rock
#

thank you

runic pecan
#

What is the variable name if I want to info_queue[#info_queue+1]= this?

daring fern
#

How could one check that a joker hasn't triggered on the current hand?

runic pecan
daring fern
tepid rock
# tall wharf context.joker_main
loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.chips,G.GAME.probabilities.normal, card.ability.extra.odds, card.ability.extra.money } }
    end,
    calculate = function(self, card, context)        
        if ( context.joker_main and #context.cards == 5) then
            if pseudorandom("streamingService") < G.GAME.probabilities.normal / card.ability.extra.odds then
                return { dollar = card.ability.extra.money, 
                chips = card.ability.extra.chips
        }
            else
                return { chips = card.ability.extra.chips }
            end
        end
        
    end
``` i feel like i did smth wrong
#

wait, i might see it

tall wharf
#

change this to #G.play.cards

#

== 5

runic pecan
# daring fern It needs to check itself.

has_scored = false in your config.extra
card.ability.extra.has_scored = true right before returning scoring table,
card.ability.extra.has_scored = false when you want to reset it.

stark geode
#

where code for planet cards

tepid rock
daring fern
runic pecan
tepid rock
#

made odds 1 in 1

daring fern
runic pecan
cursive sentinel
#

tried to fix this the best i can but, upon creating immediate effect tags, some are triggered and other are triggered on next post-shop phase. Tried fixing it and the only other outcome with them functionally working was them spawning all at the exact same time, i don't know if there is a way to have them visually spawn delayed (this all is in calculate)

if context.skip_blind and not G.FORCE_TAG then
            local _pool, _pool_key = get_current_pool('Tag', nil, nil, nil)
            local _tag_name = pseudorandom_element(_pool, pseudoseed(_pool_key))
            local it = 1
            while _tag_name == 'UNAVAILABLE' or _tag_name == "tag_double" or _tag_name == "tag_orbital" do
                it = it + 1
                _tag_name = pseudorandom_element(_pool, pseudoseed(_pool_key .. '_resample' .. it))
            end
            G.GAME.round_resets.blind_tags = G.GAME.round_resets.blind_tags or {}
            
            local _tag = Tag(_tag_name, nil, G.GAME.blind)
            add_tag(_tag)

            G.E_MANAGER:add_event(Event({
                trigger = 'after',
                delay = 0.2,
                func = function()
                    play_sound('generic1', 0.9 + math.random() * 0.1, 0.8)
                    play_sound('holo1', 1.2 + math.random() * 0.1, 0.4)
                return true
            end}))
        end```
tall wharf
stark geode
#

how do i make a custom planet card

tepid rock
unborn bay
#

half a dollar

runic pecan
primal robin
#

Damn. "Next round" button have id, but "Reroll shop" for some reason don't

unborn bay
#

chat is it time for a lovely patch

stark geode
primal robin
#

No, this means it's time for a bad selector

daring fern
manic rune
#

wait

runic pecan
manic rune
#

nvm

stark geode
primal robin
#

It's localization key

runic pecan
primal robin
#

I need id to select button with get_UIE_by_ID

stark geode
#

ah

runic pecan
primal robin
#

Because I dicide to use buttons instead of just their functions, for better compatibility and events simulation

stark geode
#

caluclate only has things for played hande

primal robin
#

Card usage Trolge

#

I have 150 lines dedicated to card usage only

runic pecan
stark geode
daring fern
tepid rock
#

does seals in everything work on mods that have not coded compatibility with it?

tepid rock
#

Is it easy to make compatible?

daring fern
#

I have to manually code each seal.

daring fern
tepid rock
#

good to know cus the idea is really cool (havent tried it yet cus I'm a bit slow at downloading mods ^^')

tepid rock
tepid rock
#

Like if i wanted to add SOE compatibility to my jokers, is there a way I could do that (similar to how you can with card sleeves)

daring fern
#

I only have to do the seals.

tepid rock
#

gotcha, and thats a you side and not something someone else could code?

#

like if i had a seal, i couldnt make it compatible?

daring fern
tepid rock
#

Cool, thank you

daring fern
#

You would just have to hook Card:calculate_seal like I do and check next(SMODS.find_mod('SealsOnEverything'))

primal robin
#

Man this sucks

tepid rock
#
SMODS.Back{
    name = "Pumpkin Deck",
    key = "Pumpkin",
    Atlas = 'Decks',
    pos = {x = 0, y = 0},
    config = {},
    loc_txt = {
        name = "Pumpkin Deck",
        text = {
            'Only contains Diamonds and Clubs'
        }
    },
    loc_vars = function(deck) 
    end,
    calculate = function(self, back, context)
        G.E_MANAGER:add_event(Event({
        func = function()
              for k, v in pairs(G.playing_cards) do
                 if v.base.suit == 'Spades' then 
                     v:change_suit('Clubs')
                 end
                 if v.base.suit == 'Hearts' then 
                      v:change_suit('Diamonds')
                  end
              end
        return true end
       }))
    end

}```
Stumped (its a reverse of checkered)
#

Gives all cards instead of clubs and diamonds

tepid rock
# daring fern Put it in apply.
apply(self, back) {
        G.E_MANAGER:add_event(Event({
        func = function()
              for k, v in pairs(G.playing_cards) do
                 if v.base.suit == 'Spades' then 
                     v:change_suit('Clubs')
                 end
                 if v.base.suit == 'Hearts' then 
                      v:change_suit('Diamonds')
                  end
              end
        return true end
       }))
    }

}
#

i removed calculate and replaced it with apply

daring fern
tepid rock
#

gotcha, thank you

daring fern
runic pecan
tepid rock
#

Idk if we can do card sleeve this here but having an issue with it if someone can help

--pumpkin sleeve
if CardSleeves then
CardSleeves.Sleeve {
    key = 'pumpkinSleeve',
    prefix_config = {atlas=false},
    atlas = "casl_sleeve_atlas",
    pos = { x = 0, y = 0},
    loc_txt = {
        name = 'Pumpkin Sleeve',
        text = 'Converts all spades into clubs and all hearts into diamonds'
    },
    loc_vars = function(self) 
        return { vars = {}}
    end,
    CardSleeves.Sleeve:apply() == function(self, sleeve)
        G.E_MANAGER:add_event(Event({
        func = function()
              for k, v in pairs(G.playing_cards) do
                 if v.base.suit == 'Spades' then 
                     v:change_suit('Clubs')
                 end
                 if v.base.suit == 'Hearts' then 
                      v:change_suit('Diamonds')
                  end
              end
        return true end
       }))
    end
}
end
runic pecan
tepid rock
#

thank you both

glad osprey
dense jewel
#

Hey chat, any suggestions on how to get into Balatro mod dev?

#

I've got some ideas cooking in my brain I want to try implementing

dense jewel
short mountain
#

I can't edit the jkr file it just says complete action with files, and I need to do it in zarchiver

short mountain
#

I mean the settings.jkr file

#

That

#

Please help

daring fern
short mountain
#

What I'm saying is

#

I click choose file

#

And it says

#

"Choose an action"

#

Files, photo and camera
But I need to do it with zarchiver cuz that's where the file is

short mountain
wary skiff
daring fern
wary skiff
#

Ah

daring fern
short mountain
#

I figured it out but wha5 does this mean

short mountain
daring fern
short mountain
#

What do I do now

wary skiff
#

How is the debuff seal integrated into the game then, if I may ask?

daring fern
short mountain
wary skiff
#

Is it naturally appearing in the shop, is there a Spectral card that attaches it, etc?

wary skiff
#

I see

short mountain
wary skiff
#

Seems like it'd be an interesting addition to normal card packs in a modded higher stake

daring fern
short mountain
#

I wanna see what I can do to my game

#

I'm pretty sure that stuff is in the settings file or am I like dumb as shit

daring fern
short mountain
#

Well where can I edit my save

daring fern
#

It's in the 1 or 2 or 3 folders save.jkr

short mountain
#

I don't have a save.jkr

next timber
#

that means you dont have an ongoing run on that save currently

short mountain
#

Oh

#

Thanos

#

Thanks

next timber
#

thanos

wary skiff
short mountain
#

So

#

It isn't working

next timber
#

how do i modify the list of palettes for the default skin of a custom suit? i need to add options other than low and high contrast

wary skiff
short mountain
#

Haha lmao

stark geode
#

how do i keep the game from restting my globlas on lanch

daring fern
glad osprey
#

y dis no work :(

stark geode
glad osprey
glad osprey
runic pecan
glad osprey
#

..the joekr it was copying does do something

wintry solar
glad osprey
#

so bpcard = card and vice versa?

wintry solar
#

Yeah in the blueprint effect call they’re in the wrong order

glad osprey
runic pecan
wintry solar
#

You don’t need to wrap that

glad osprey
#

works now ty eremel

#

mostly its kinda weird with some jokers

#

trying it with a retrigger and it only retriggers once instead of three times

next timber
#

how do i give a modded suit more palettes? for deckskins you can just add more alongside the lc and hc palettes but that doesnt seem to be an option for the default palette of a modded suit

runic pecan
#

How do I add a sticker desc to info_queue?

glad osprey
glad osprey
wintry solar
#

Oh try returning ret instead

#

That might be scuffed too though

glad osprey
#

works fine now lol

#

ty

stark geode
glad osprey
#

whatever the value is

#

G.GAME is just another table

short mountain
#

I have like a million mods downloaded, I cant delete them or disable them

#

I've got no clue why they keep appearing

#

I wanna play normal balatro

#

But they won't leave me alone

red flower
glad osprey
#

com.unofficial.balatro

short mountain
zealous glen
#

What to name these tags:

When you buy a consumable, get a copy
(Must have room)
and
Next shop, when you buy a card, get another card of the same type
(Must have room)

glad osprey
#

Combo Tag and Hallucination tag

stark geode
zealous glen
glad osprey
#

just aslong as you dont have G.GAME.tablea.value

stark geode
zealous glen
glad osprey
#

hmmm

glad osprey
stark geode
zealous glen
#

Bogo Tag?

glad osprey
stark geode
glad osprey
#

that is because game does not exist at that point

#

you need to wait for the player to be in a game so yea it would have to be in some func

#

probably just hook whtv function is responsible for starting a new run

zealous glen
#

SMODS provides a function for these kinds of effects

#

or you can hook the vanilla one

zealous glen
stark geode
zealous glen
#

It also provides reset_game_globals

stark geode
#

i dont need to do that

zealous glen
#

I think you could just use reset_game_globals and not even hook

stark geode
zealous glen
#

Because you can create the variable at run start

red flower
zealous glen
hard needle
#

is it G.C.Suits["Club"] or G.C.Suits["Clubs"]?

red flower
stark geode
#

it worked

zealous glen
red flower
#

i prefer resetting variables per-card so im not really affected by this lol

runic pecan
#

Which variable do I need to determine whether the player unlocked Planet X or not?

zealous glen
zealous glen
runic pecan
zealous glen
#

Idk then

#

I think centers have unlock condition status

runic pecan
zealous glen
glad osprey
zealous glen
hard needle
glad osprey
#

first one works, second one kinda could be better but idk how it just doesnt convey what it does very well

scarlet spire
#

yellow tags are always money related, I wouldn't use yellow for a non-econ tag

scarlet spire
#

getting another card of the same type?

zealous glen
zealous glen
#

you can sell them

scarlet spire
#

I mean its econ in the same way getting free jokers is econ

glad osprey
zealous glen
#

Yes

scarlet spire
#

....and my point is that those aren't yellow, tags that are fully yellow like that are always the ones that give actual sums of money when they trigger

glad osprey
#

maybe use the silver from buffoon tags

#

but the first one is perfect

zealous glen
glad osprey
glad osprey
hard needle
#

thank you

zealous glen
#

I wonder if I could do something like this

glad osprey
#

i feel like there is a better way of conveying what it does but i just cannot figure out what it is lmao

hard needle
zealous glen
#

You need to use V

runic pecan
zealous glen
#

to access vars.colours

hard needle
zealous glen
zealous glen
hard needle
glad osprey
#

interesting

zealous glen
#

It should all be inside vars

hard needle
#

i forgor 💀

#

oke thanks

zealous glen
#

example

hard needle
zealous glen
#

It was meant to have variables too but this Joker didn't use them

runic pecan
#

Hmmm, why is it ERROR?

zealous glen
runic pecan
zealous glen
runic pecan
#

You know what, screw this, hide_badge=true it is.

runic pecan
zealous glen
#

what other ones

hard needle
#

how do you check if a card has scored?

zealous glen
#

Temporary is a sticker

glad osprey
#

is there a context for when something is bought from the shop

zealous glen
#

yes

glad osprey
#

what isit

runic pecan
glad osprey
#

ty

#

works for everything right?

zealous glen
runic pecan
glad osprey
#

alr cool

hard needle
static field
#

i wanna download the brainstorm mod but i dont see the main file? what do i download

runic pecan
hard needle
runic pecan
static field
hard needle
#

alr

runic pecan
next timber
#

is it possible to make an edition that, instead of applying a shader, replaces the atlas?

hard needle
zealous glen
next timber
#

awesomeeee i lovee shadersssss

wintry solar
#

You could make an edition do that yeah

zealous glen
#

it? didn't blink, that's a zero number of times

next timber
#

THERES NO CLOSED EYE EMOJI

zealous glen
#

😌

wooden nexus
#

Chat, should I keep it red like the original or make it green like the emote

next timber
next timber
icy moss
#

does anyone know a easy way to restart a run on random seed from a joker? (I want to make a stupid one that has a possibility to just delete your run)

#

G:delete_run() just crash everything ahah

wooden nexus
glad osprey
wooden nexus
#

I mean I guess that could work

stark geode
glad osprey
#

exponential perkolating

shell timber
#

high contrast should change to 😡

glad osprey
#

did i cook

runic pecan
#

Are editions exclusive to each other?
I want to make a shader that can apply to any jokers, editioned or not.

glad osprey
#

editions are, but shaders can be stacked i think with enough patience

scarlet thorn
glad osprey
#

dont quote me tho

wintry solar
#

What does the shader do?

runic pecan
scarlet thorn
#

just rotate all jokers

wintry solar
#

No you wouldn’t be able to do that with a shader

#

You can just rotate the cards though

glad osprey
#

i mean technically you could but why

wintry solar
rapid stag
#

i am once again asking for help to figure out help to stop my game exploding when i my run_start() hook runs - given that self is nil is causing it to asplode, i strongly suspect that i'm doing something wrong in my hook, but; i looked through my dump files at the run_start() calls and self is never passed in, so idk what's happening here cirLost

glad osprey
#

oh yea for other shaders

hard needle
#

is context.other_card not a thing anymore

glad osprey
#

occasionally it is but most contexts use card now

hard needle
#

oh y

#

ea

runic pecan
scarlet thorn
stark geode
hard needle
limber blaze
zealous glen
#

What do you think?

thick panther
native vapor
next timber
#

with a deckskin you can define as many palettes as you want, is there a way to do that for the default skin of a custom suit?

wintry solar
zealous glen
zealous glen
glad osprey
#

how do i get hands remaining

wintry solar
#

Yeah I forget they aren’t technically cards

#

But when you redeemed it I expected another as a demo

#

Otherwise why redeem it 😂

maiden phoenix
#

Is it not the proper way to add in an existing pool? Just calling this?

SMODS.ObjectTypes.x:inject_card(joker)
native vapor
hard needle
#

What do you guys think of this?

maiden phoenix
zealous glen
maiden phoenix
#

(I do check if the pool exists first)

glad osprey
zealous glen
zealous glen
native vapor
wintry solar
#

Most tags are bad because you lose a shop right?

hard needle
zealous glen
#

Losing the Blind is the issue

hard needle
#

Definitely depends on the tag

zealous glen
#

Money, interest

hard needle
#

In some cases losing the shop is bad

zealous glen
#

Losing the free Reroll is the main impact of missing a shop IMO

#

So a Tag needs to provide at least $15 to compensate for everything else

sturdy monolith
#

using smods.modify_rank(card, 1) causes it to modify the rank by 2 instead of just 1...?

zealous glen
#

Type:method(args) is equivalent to Type.method(self, args)

#

and AFAIK you can't do Type:method except as a call

sturdy monolith
rapid stag
#

so i need to be passing self in, right?

zealous glen
#

Yes but also you don't want a call AFAIK

sturdy monolith
zealous glen
#

you want a definition

#

and the definition should handle self

#

as it's a method

rapid stag
#

cirLost ...weird. every hook i've done up until this point has worked just fine

glad osprey
#

how do i do to_big correctly

hard needle
sturdy monolith
wooden nexus
#

Suit 2 from Enemies of Jimbo WIP:

zealous glen
glad osprey
#

WHY DOES THIS KEEP CRASHING

#

im just trying to give one hand per five dollars

zealous glen
glad osprey
#

there are so many

sturdy monolith
glad osprey
#

here it is without checking if money is greater than zero

#

it is an issue with talisman

#

i just have no clue what the issue is

rapid stag
zealous glen
rapid stag
#

ahhh

zealous glen
#

you too @balmy needle

balmy needle
hushed field
glad osprey
zealous glen
thick panther
#

Seems about right.

hard needle
hushed field
hushed field
glad osprey
zealous glen
#

Or just good enough?

hushed field
# zealous glen *too* strong?

idk, I'd play around with it. my take is that a skip tag probably's allowed to be stronger than vanilla, to compensate for how disadvantageous skipping is

hushed field
glad osprey
#

most likely the ease hands

#

it doesn't say tho

hushed field
zealous glen
glad osprey
#

the crash is from talisman

hushed field
hushed field
glad osprey
#

nope

hushed field
#

does it still happen if you remove it?

#

or does it change the crash?

glad osprey
hushed field
# glad osprey ya

none of the other code here should be impacted by talisman. But I also haven't seen talisman throw up a crash that signals there is a nil being compared

hushed field
# glad osprey ya

the crash on talisman's part is due to the math relating to ante calc, which is weird. You're not affecting that at all. If you comment out the ease_hands_played, does it not crash?

glad osprey
#

ill test in a min

hasty mist
#

heya, been having trouble with this, i'm trying to make a joker that starts at 3x mult, and takes the factorial of its mult at the end of each round, making that the new mult, but i can't figure out what's wrong

#

it crashes when i end a round

hushed field
# glad osprey yea no crash

hmm, could you print the value of that formula before you pass it to the ease_hands? I don't see why passing a number should result in a nil being passed there

zealous glen
glad osprey
#

wait maybe its because dollars is a table

#

and

#

im putting dollars into ease hand

#

so im giving ease hand a table

#

and it no likey

rapid stag
# zealous glen `Type.method = function(self, args)`

another thing - i wrote this hook with the intent to track all joker encounters (any time a joker spawns) but i just realised that this only covers shop spawns and not things like riff raff or booster packs cirDerp

what should i be hooking for this purpose? emplace()?

hushed field
#

talisman should theoritically take care of that. The latest version should support hand counts that go beyond naninf as well, iirc

glad osprey
limber blaze
limber blaze
#

whats it say

hasty mist
limber blaze
#

tonumber(n) probably doesnt work for bignums

#

you can do to_big(n):to_number() to ensure that all regular and bignums are converted

thick panther
#

Does the steamodded wiki have the different return variables like mult_mod, xmult_mod, etc?

hasty mist
limber blaze
#

thats strange

#

loop is probably too big idk

hasty mist
#

hm

limber blaze
#

you might be better off trying to find a suitable approximation of factorials thats faster

#

since it will get exponentially slower for larger numbers

hasty mist
#

hm

#

damn

#

ill probably put that joker on the backburner then

#

it's a bit out of my reach right now

icy oak
#

ive been stuck on this for quite a while

#

i dont get what im supposed to put there if i want to use it

thick panther
glad osprey
#

how would i make it so every card will automatically have a tooltip if it has a certain ability

icy oak
hushed field
glad osprey
#

make it so that every joker will automatically check for a certain variable and if that exists automatically add the related tooltip to the info_queue

hushed field
#

for that, you'll wanna hook generate_ui, or make a custom generate_ui that all your jokers use

glad osprey
#

Card:generate_ui?

#

or just generate_ui

hushed field
#

Card:generate_ui, yeah

glad osprey
#

i may try and find a more unique way of doing credits instead bcus this is kinda boring

thick panther
glad osprey
#

i would but i wanna try to find smth different first

gentle rain
stark geode
#

close one

wintry solar
iron haven
#

hey guys?

#

how do I add times mult?

red flower
thick panther
thick panther
# iron haven yes

In your Joker's calculate function:

return {
    xmult = 5 -- Any number
}
glad osprey
#

anyone know how i could stop a booster pack from being bought

iron haven
glad osprey
#

also {X:mult,C:white} for the xmult text

iron haven
#

what should I change it to?

glad osprey
#

rare with .025 increase

iron haven
#

but B has to be an uncommon joker.

#

what should i change B to?

#

like what b does

limber blaze
#

what does it mean if my cards keep demanding a sacrifice

urban olive
#

no use in running from the ritual, it has already started, and you must see it through before the Fallen arrive

#

i hope that helps!

sturdy compass
iron haven
#

hey @glad osprey? did you see the spreadsheet of my letter jokers?

#

I have to change the uncommons now....

#

why are there like 96 people watching me fix my spreadsheet?

#

there was

tepid crow
sturdy compass
#

goofy ass banana

iron haven
#

does B work now for being an uncommon?

storm wharf
#

how would y'all make a joker increase hand size?

red flower
#

basically just G.hand:change_size in add_to_deck and remove_from_deck

sturdy monolith
#

is there a way for me to make edition shaders update in real time instead of just when the card it's on is loaded?

#

i want my rtx edition shader to actually have real time reflections

storm wharf
zealous glen
tepid crow
#

bizarre

zealous glen
#

did I convert you to the bazaar

#

@tepid crow

tepid crow
#

I was already watching northernlion videos before that

#

but I think it helped

wintry solar
#

the bazaar is great

#

I am enjoying it a lot

rapid stag
#

wait

#

it's calling the wrong thing, nvm cirDerp

#

reading comprehension is a virtue

#

psa: do not write code at 8AM after having been awake for at least 20 hours

zealous glen
# wintry solar I am enjoying it a lot

I feel like having to play only against bots at the start took the wind out of me. (Also I have too much Balatro in the brain to enjoy a second hobby.)

rapid stag
#

is this not the correct way to destroy cards? the cards aren't destroying cirLost i'd post a clip but it no work atm

iron haven
glad osprey
iron haven
#

oh

rapid stag
#

do i have to do context.other_card:start_dissolve() wrapped in an event manager, in the func var of the return table

glad osprey
#

i think you can do it outside of one

iron haven
rapid stag
#

i'm not confident that the timing would be correct

glad osprey
#

yea it wouldnt

#

but you can do it!

iron haven
#

this is line 257: if context.individual and context.cardarea == G.play and context.other_card:get_id() == 4 or context.other_card:get_id() == 5 then

glad osprey
#

context.card

#

not other card

#

nvrm

iron haven
#

?

glad osprey
#

also you should do context.other_card.base.value

#

not get id

glad osprey
storm wharf
#

can anyone point me in the right direction. I'm trying to make this joker increase hand size

#

idk if i'm using the add to deck and remove from deck functions wrong

glad osprey
#

no that should work

iron haven
limber blaze
#

the issue is that order of operations matters for logic

iron haven
#

oh?

limber blaze
#

if context.individual and context.cardarea == G.play and (context.other_card.base.value == 4 or context.other_card.base.value == 5) then
should work

limber blaze
# iron haven oh?

its checking if everything before the or is true or everything atfer

#

but in some contexts that dont get checked for after the or in the original version other_card doesnt exist

#

so it crashes

storm wharf
#

what is other_card.base.value?

limber blaze
#

amount of chips the card gives

glad osprey
#

the value of ht eother card

limber blaze
#

you should specifically avoid using it unless you wanna check the exact chip amount because of mod compat btw

glad osprey
#

i was told to use it specifically for that reason 😭

limber blaze
#

id is better for this reason

#

since mods can change the chip value

#

other_card.base.id will be the actual rank of the card

iron haven
#

uh

glad osprey
#

also it doesnt give the chips it gives the rank

limber blaze
#

cryptids glitched for example will change the value though

glad osprey
#

ruby i think you hae your things mixed

limber blaze
#

nvm im wrong

iron haven
#

now F doesn't upgrade.

glad osprey
storm wharf
#

wait, so do i need the base value check or nah in this case?

limber blaze
#

i was thinking of nominal

glad osprey
#

we are helping f

storm wharf
#

ohhh

#

my fault

red flower
rapid stag
iron haven
#

guys I have a logic error

glad osprey
storm wharf
iron haven
#

I have a logic error in my F joker.

#

I'll check for more

#

oh

#

nvm I have no idea

red flower
zealous glen
storm wharf
#

gotcha. so i'd have to use if context.joker_main??

red flower
plain apex
red flower
urban olive
#

In the context of hooking generate_card_ui, how does the game generically add the default values that come with a given center? e.g. running eval generate_card_ui(G.P_CENTERS.j_joker).main[1][1].config.text gives you +nil when it preferably should be +3 (just as it appears on the collection)

storm wharf
iron haven
#

so F doesn't upgrade when you play 4's and 5's but B, C, D, and E upgrade when you play the corresponding cards.

icy oak
#

i dont really understand this part, what do i do if i want to remove all hearts from a deck for example?

rapid stag
red flower
zealous glen
urban olive
storm wharf
red flower
#

yeah, I'm not sure if you can do it without hooking or patching
but like I said, it's probably getting added to smods in the next couple of days as a simple function