#💻・modding-dev

1 messages · Page 273 of 1

rain slate
#

you're using vs code right?

zealous glen
rain slate
#

then it's just an extension

tired skiff
tired skiff
zealous glen
#

no

rain slate
#

if you want to

zealous glen
#

You can choose a Lua one

tired skiff
#

what do i get :<

rain slate
#

you search formatter in the marketplace and get one of those

red flower
heady siren
#

Me: Why is my card freaking out?!?!?!
Also me: puts an event inside of an event

tired skiff
#

what does it do

rain slate
#

it gives you syntax highlighting and code formatting

thin anchor
#

eye see you

zealous glen
rain slate
#

helps you catch syntax errors like the one you just had

heady siren
#

But it stopped freaking out when I didn't put the event inside the event

zealous glen
zealous glen
manic rune
#

i wonder why it doesn't show a yellow line or smt here

zealous glen
#

a common mistake is forgetting return true

rain slate
manic rune
#

without return true, does it just run forever

tired skiff
rain slate
#

if you don't return true it will assume that the event has not yet concluded and continue running it endlessly

zealous glen
manic rune
#

true...

heady siren
#

I've got this code to shove a card into the shop inside a deck back, and it's doing so, but then the card doesn't have the shop UI, can't be highlighted, and you can drag it anywhere on the screen

zealous glen
#

For Events, it notifies the Event Manager that the Event has concluded and should be removed from the Event Queue

thin anchor
#

what are the names of the consumable pools?

manic rune
#

💔

zealous glen
#

use SMODS.add_card

heady siren
zealous glen
#

specify the correct area

midnight coyote
#

channeling all of my creative energy into making more ritual cards

rain slate
midnight coyote
#

i should make cursed cards into a thing

heady siren
midnight coyote
#

so i have the mechanic for later

zealous glen
midnight coyote
#

hey quick question can i have an event display a message on a card

#

like a joker effect

midnight coyote
#

like let’s say my cursed cards activates and debuffs the card

#

can i have a message displaying that for extra effect

#

and if so how can i do that

zealous glen
#

yes

#

but depending on how you do it

#

you don't need an Event

#

just return the message

#

like with Jokers

midnight coyote
#

can i pack it into an event

rain slate
red flower
heady siren
#

Would this work?

rain slate
#

I have no idea how that wouldn't cause a syntax error the way you're doing it right now

red flower
rain slate
#

but guessing by the colors you don't have syntax highlighting

midnight coyote
#

what ide are you using

manic rune
#

actually

rain slate
midnight coyote
#

i can find a plugin

rain slate
#

like if you put mult it will give mult

red flower
#

SMODS.calculate_effect({ message = "your message" }, card)

manic rune
#

can i do SMODS.calculate_effect({mult_mod = 5}, nil)?

red flower
#

yes but it might not like it at the wrong timing

manic rune
#

nice

rain slate
red flower
manic rune
#

oof

tired skiff
#

so now that i have added 1 joker how do i say add another

red flower
#

just do the same thing below that one

tired skiff
#

oh really?

#

ok

thin anchor
#

whats the filename of the png of tarot cards?

rain slate
rain slate
#

literally

thin anchor
#

u

#

hhhhhh

#

😭

rain slate
#

if you mean inside like the .exe, I mean

#

that's what it's called in /resources/textures/1x

thin anchor
#

yeah

limber warren
#

hey, did you ever find a fix for this issue?

#

sorry for the necro post, but im running into a similar problem

scarlet spire
#

was actually gonna ask about it here again, still dealing with it

limber warren
#

bummer

manic rune
#

yall

rain slate
#

I think you need to provide vars

manic rune
#

rate the design of ♾️ from 0 to 10

rain slate
#

somehow

limber warren
#

thats what im thinking but how

rain slate
#

cuz to get perishable and rental stickers working I had to include their vars else they would crash the game ```lua
info_queue[#info_queue + 1] = { key = "eternal", set = "Other" }
info_queue[#info_queue + 1] = { key = "perishable", set = "Other", vars = { G.GAME.perishable_rounds or 1 } }
info_queue[#info_queue + 1] = { key = "rental", set = "Other", vars = { G.GAME.rental_rate or 1 } }

rain slate
#

set is either Joker or Jokers idk which one

limber warren
#

this is the version im dealing with

scarlet spire
#

my issue is that I have an info queue that changes to completely random jokers, so I need a way to fetch that dynamically

limber warren
#

uh oh

rain slate
#

oof

#

maybe you can somehow get their configs and then fetch those values?

lavish lake
limber warren
#

hold on let me send the log

rain slate
#

did you try with Jokers instead of Joker? cuz i wasn't 100% sure about that

limber warren
#

this is kind of pissing me off because this is an easy joker otherwise lmao

lavish lake
rain slate
# lavish lake

I'm voting option number 1 but if it gets dissolved after 3 rounds it should be way stronger

#

because it'd just be a worse polychrome otherwise

limber warren
#
INFO - [G] 2025-03-27 21:53:49 :: ERROR :: StackTrace :: Oops! The game crashed                                         [SMODS BALATRO2 "main.lua"]:545: attempt to perform arithmetic on field 'dollars_per_hand' (a nil value)                Stack Traceback 
#
info_queue[#info_queue+1] = {key = 'tag_handy', set = 'Tag', vars = {self.config.dollars_per_hand, self.config.dollars_per_hand*(G.GAME.hands_played or 0)} }

i just copy pasted tag.lua lmoa

lavish lake
rain slate
#

so self is just the joker or whatever this is on

limber warren
#

true

heady siren
limber warren
#

i tried key.name instead of self but it said key is null

rain slate
#

well yeah that's kinda obvious too

limber warren
#

lol

heady siren
#

I just realized is the whole reason M is a huge part of Cryptid is because you accidentally spam mmmmmmmmm into your text editor when you're holding to restart your game?

rain slate
thin anchor
#

what do yall think

limber warren
#

looks good

thin anchor
#

yay

heady siren
#

A card from RandomDude that actually fits the Balatro style no way

thin anchor
#

😭

limber warren
#

if you want a nitpick you could move the word dart to the right a little bit

#

its a bit off center

thin anchor
#

oh yeah

limber warren
#

by like 2 pixels

tired skiff
#

so Xmult gives Xmult but how do you get a joker to give chips or flat mult

lavish lake
rain slate
#

@scarlet spire I GOT IT

dense adder
#

anyone have the base game tarrots.png?, i overrid the originals when i started modding and never it backed up

limber warren
#

kino?

dense adder
thin anchor
midnight coyote
#

wait black deck is one of the harder ones

rain slate
#
local constellation = G.P_CENTERS.j_constellation

constellation.config = {
  extra = 0.1,
  x_mult = 1
}

info_queue[#info_queue + 1] = constellation
``` this is what I had to do
dense adder
#

thanks

heady siren
scarlet spire
#

you should also probably verify integrity to restore the base files

tired skiff
rain slate
tired skiff
#

i know

#

im just wondering

#

:3

rain slate
#

for chips and flat mult you just do ```lua
return {
chips = 1,
mult = 1
}

scarlet spire
rain slate
#

this is what I did

scarlet spire
#

ah wait, okay, hmm

rain slate
#

there is little documentation as of now, but there is some

scarlet spire
#

okay yeah I don't want to do that for every single joker in the game

#

hmm

rain slate
#

I think the problem is that

#

it can for some reason only properly copy one variable?

#

or smtn

#

so like the first variable shows up fine

#

but every other one after that is just fucked

tired skiff
#

thank you tecci :3

#

so kind

rain slate
#

no problem :3

limber warren
limber warren
#

theoretically maybe you can try to pull a config from somewhere, but i have no idea how you'd do that

red flower
limber warren
scarlet spire
#

I have a key for a random joker that's initialized as j_joker and randomized whenever a hand is played

rain slate
hardy viper
#

i caved im wsling it 😔

red flower
#

i love wsl

scarlet spire
rain slate
#

ok yeah you're right, if I do it with Xmult it doesn't work anymore ??

heady siren
#

There's the RandomDude style I know

thin anchor
#

lmao

rain slate
#

I wonder why that is

heady siren
#

Absolutely peak

thin anchor
#

beauty

heady siren
#

balatrojoker🤚

red flower
thin anchor
tired skiff
#

so why is the function red

#

i litterlay just copyed it from the previouse joker

rain slate
#

whenever you have a function there has to be an end to close it, and same for if statements

tired skiff
#

ahh ofc

heady siren
#

Every function, for, and if needs an end

slender bay
#

Game keeps crashing because extra is a nil value, not sure what to do to fix it

red flower
scarlet spire
stark geode
#

are we allowed to ask the thunk questions

rain slate
heady siren
scarlet spire
#

oh, neat

#

I still need to make it exclude legendaries but that helps

heady siren
scarlet spire
#

my jokers... they're neat

heady siren
#

Oh

red flower
#

neat Oh

#

neato

scarlet spire
#

oh...

heady siren
#

🧠 💥

thin anchor
#

dartboard

heady siren
#

Nevermind

#

I read the documentation wrong

lavish lake
#

Guys how do I enhance cards again? And how do I check what cards are selected?

red flower
#

self is always the center, not the card

rain slate
#
        elseif self.ability.name == 'Constellation' then loc_vars = {self.ability.extra, self.ability.x_mult}

``` oh my god I think I just found out why Xmult doesn't work
#

oh my god this is painful ```lua
if self.ability.name == 'Constellation' and not context.blueprint and context.consumeable.ability.set == 'Planet' then
self.ability.x_mult = self.ability.x_mult + self.ability.extra

red flower
rain slate
#

the centers of some jokers in the game are initialized incorrectly

limber warren
#

thank you thunk

rain slate
#

Constellation's center is initialized as Xmult

#

but then loc_vars and calculate_joker use x_mult

red flower
heady siren
red flower
#

thats why my mod is entirely self contained and doesnt touch vanilla much

rain slate
#

so if you wanna make something like what Wheat is doing display them correctly I think you might have to go through the code and ptach the incorrect ones or something

heady siren
#

Now my own code doesn't replace any functions thanks to N', which means my code is a little bit smarter
-# (but -inf smartness + some is still -inf smartness) [=

rain slate
#

would be better since you don't have to patch it; better compatibility with other mods

heady siren
rain slate
#

? it'd be worse if you patched the original code

red flower
rain slate
#

yeah that's smart

#

but also you'd need a card for that, no?

#

cuz it references self

red flower
#

i would input the values manually but you can also call :create_fake_card

rain slate
#

is that a thing?

red flower
#

i think smods adds it

rain slate
#

no documentation at the very least

red flower
#

i mean i dont think its something most people would use

#

it's used for tooltips

rain slate
#

imo everything no matter how obscure should have documentation, but ofc not the most realistic goal

red flower
#

it has an lsp definition

rain slate
#

oh I see

limber blaze
rain slate
# red flower
create_fake_card = function(self)
            return { ability = copy_table(self.config), fake_card = true }
        end,
#

oops ping

#

I don't think this would work cuz no key

red flower
#

wdym no key

rain slate
#

well that's just a table with ability and fake_card and it needs a key to be localized

#

otherwise it'll just show error

red flower
#

i meant using that instead of self in the loc_vars and then passing those manually

open aspen
#

why is this running twice? i see the tagged return message twice for some reason

trail arrow
#

hi, how would i go about making my own blueprint styled joker?

hexed heath
#

what's the difference between G.play and G.playing_cards?

stark geode
#

You can look at blueprint

spark remnant
#

I'm currently trying to make a joker that allows for 7 card hands to be played, I've got it to allow selecting 7 cards but can't play any hand, I'm guessing cause the vanilla balatro hands are coded for 5 card hands, is there any way I can allow for the vanilla hands to be played with 7 cards instead of 5?

open aspen
#

or all cards in play?

#

what do u want to do

hexed heath
#

add a card to the deck

open aspen
#

i would assume neither of those is what u want then (or at least, not G.play)

#

i think G.deck

#

yea its probably G.deck

#

that is indeed a thing

heady siren
#

How do I get a joker's key from it's card?

#

I've tried .key and .base.key and neither worked, so I might as well just ask

heavy hare
#

game.lua has all the jokers and their "order" number, not sure if that's the key you're needing

heady siren
#

It's internal identifier, not it's key as in keys and values

heady siren
hexed heath
open aspen
heady siren
open aspen
#

i would just check if not context.repetition then right?

red flower
lament agate
#

is it possible to change the vanilla joker with the modded one, as in reworking it

red flower
lament agate
#

oh right

open aspen
#

i assume it still works

red flower
#

no idea 🙂

rugged pier
#

is there a context for cards that are played but not scored?

open aspen
#

ill experiement

#

it was already a big help

#

apologies for somehow missing ur message earlier

red flower
open aspen
#

ok adding that made it do nothing again lol

#

so it probably isnt why its repeating

#

ill figure it out tmrw

red flower
open aspen
#

either that or repetition is the culprit?

limber warren
#

@scarlet spire were any of the other jokers giving you issues with delivery? r just constellation?

open aspen
limber warren
#

maybe you can patch the config with lovely

heady siren
open aspen
#

if. that dont work i gtg sleep etc

open aspen
limber warren
#

my friends and i are trying to fix the problem

open aspen
#

that makes sense

#

thanks for all the help u guys

rugged pier
scarlet spire
open aspen
scarlet spire
#

mostly the scaling jokers

open aspen
#

i just wanna do it with context if possible for clean code

rugged pier
red flower
rugged pier
heady siren
red flower
red flower
heady siren
#

Thank you

lament agate
rugged pier
rugged pier
#

thank you!

red flower
lament agate
#

fair

last sentinel
#

What do people do for "resets every ante" triggers? not seeing the context for it listed nvm just remembered campfire exists

heavy hare
#

also hello again,
i'm looking for a way to spawn a tag (Investment, Negative, etc.) as a part of a new UI element. where do i find the logic that spawns/animates the tag appearing? thanks

trail arrow
rugged pier
#

card id for jacks is 11 yes?

native zinc
#

ye

coral flume
#

Anyone know of a way to randomly select a scored card

ivory coral
coral flume
ivory coral
#

to be more specific pseudorandom_element(table, pseudoseed(seed)) will pull a random entry from the table, and context.scoring_hand is just a table of all your scoring cards

#

glad to help!

trail arrow
daring fern
gilded blaze
#

how do I embed a custom save parameter into save.jkr 💀

#

I'm trying to do stuff similar to Ancient/Idol/Rebate

rugged pier
#
calculate = function(self, card, context)
        if context.individual and context.cardarea == G.play and context.scoring_hand then
            if context.other_card:get_id() == 11 then
                if pseudorandom('tindwyl_one') < G.GAME.probabilities.normal/card.ability.extra.init_odds then
                    G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                        if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
                            local card = context.other_card
                            local suit_prefix = string.sub(card.base.suit, 1, 1)..'_'
                            card:juice_up()
                            card:set_base(G.P_CARDS[suit_prefix..'Q'])
                        else
                            local card = context.other_card
                            local suit_prefix = string.sub(card.base.suit, 1, 1)..'_'
                            card:juice_up()
                            card:set_base(G.P_CARDS[suit_prefix..'K'])
                        end
                        return true end }))
                end 
            end
        end
    end

Trying to convert jacks to either kings or queens but im running into this error message, not sure whats going on

#

local card = context.other_card this seems to be causing an issue

ivory coral
trail arrow
daring fern
tawny narwhal
#
    key = 'singular',
    loc_txt = {
        name = 'Singularity',
        text = {
            "Squares the current {X:mult,C:white}Multiplier{}",
            "{C:inactive}(Currently {X:mult,C:white}x#1#{} {C:inactive}Mult)",
        }
    },
    rarity = 1, -- Rare rarity
    atlas = 'singularity', -- Replace with actual sprite atlas if different
    pos = { x = 0, y = 0 },
    cost = 1, -- Adjust cost as needed

    loc_vars = function(self, info_queue, card)
        return { vars = { "x" .. tostring(info_queue.Xmult * info_queue.Xmult) } }
    end,

    calculate = function(self, card, context)
        if context.joker_main then
            local new_mult = context.Xmult * context.Xmult
            return {
                message = localize { type = 'variable', key = 'a_xmult', vars = { new_mult } },
                Xmult_mod = new_mult
            }
        end
    end
}
#

I'm trying to make a joker that sqiares the mult, but whenever it pops up in the shop I get this error.

gilded blaze
#

the more I know

mystic river
ivory coral
rugged pier
manic rune
#

that is your joker

#

you will have no means to refer to your joker after you do that

trail arrow
#

how does this help me achive my goals?

rugged pier
manic rune
#

oh but also

#

i think the reason why it doesnt work is that

#

it runs "local card = context.other_card" only when the event happens, and by that time, its likely the context.other_card no longer exists

rugged pier
#

i tried to remove the event manager and that made it work but it happens so quickly that i had no way of seeing an animation for it

manic rune
#

put the local stuff outside the event

#

and it should work, i think

rugged pier
#

gotcha

#

okay let me test

manic rune
#
calculate = function(self, card, context)
        if context.individual and context.cardarea == G.play and context.scoring_hand then
            if context.other_card:get_id() == 11 then
                if pseudorandom('tindwyl_one') < G.GAME.probabilities.normal/card.ability.extra.init_odds then
                    local card = context.other_card --just a ref, change the var's name too :3
                    G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                        if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
                            local suit_prefix = string.sub(card.base.suit, 1, 1)..'_'
                            card:juice_up()
                            card:set_base(G.P_CARDS[suit_prefix..'Q'])
                        else
                            local suit_prefix = string.sub(card.base.suit, 1, 1)..'_'
                            card:juice_up()
                            card:set_base(G.P_CARDS[suit_prefix..'K'])
                        end
                        return true end }))
                end 
            end
        end
    end
manic rune
#

i actually dont remember if thats the solution or not :3

ivory coral
manic rune
#

tell me if it doesnt work lol

rugged pier
#

if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
this is line 246

#

oh

manic rune
#

did u change the var's name

rugged pier
#

this is the problem you were talking about

#

lol

#

yup

#

let me fix

manic rune
#

exactly

rugged pier
#

it works!

#

thank you so much @manic rune

ivory coral
manic rune
tawny narwhal
#

yeah I was using another mod for reference and they have a goofy repository

#

or whatever it's called

#

I use python for math, Modding is new ground for me lmao

gilded blaze
#

I'm a bit confused here
it says that G.GAME.current_round.castle2_card should reset every round, but I don't see the end_round() check

ivory coral
rugged pier
# manic rune np :D

If i wanted to add a message on the joker when the change happens, would i do it like this?

calculate = function(self, card, context)
        if context.individual and context.cardarea == G.play and context.scoring_hand then
            if context.other_card:get_id() == 11 then
                if pseudorandom('tindwyl_one') < G.GAME.probabilities.normal/card.ability.extra.init_odds then
                    local jack_card = context.other_card
                    G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                        if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
                            local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                            jack_card:juice_up()
                            jack_card:set_base(G.P_CARDS[suit_prefix..'Q'])
                            message = 'Queened!'
                            message_card = card
                        else
                            local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                            jack_card:juice_up()
                            jack_card:set_base(G.P_CARDS[suit_prefix..'K'])
                            message = 'Kinged!'
                            message_card = card
                        end
                        return true end }))
                end 
            end
        end
    end
trail arrow
tawny narwhal
manic rune
#

message only works when you return it, but you can also do

SMODS.calculate_effect({message = smt}, cardYouWantTheMessageToBeOn)

rugged pier
manic rune
#

mhm

rugged pier
#

awesome let me try

ivory coral
#

also wow i didnt realize they updated the example mods to explain what hooks are

manic rune
#

oh, they didnt have hooks before?

ivory coral
#

well it has the hook

#

it just doesnt explain it

manic rune
#

icic, i started modding a month ago and the example mod already explained hooks

#

its convenient

ivory coral
#

it is very convenient once you learn its a thing

rugged pier
# manic rune message only works when you return it, but you can also do ```SMODS.calculate_e...

tried this

calculate = function(self, card, context)
        if context.individual and context.cardarea == G.play and context.scoring_hand then
            if context.other_card:get_id() == 11 then
                if pseudorandom('tindwyl_one') < G.GAME.probabilities.normal/card.ability.extra.init_odds then
                    local jack_card = context.other_card
                    G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                        if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
                            local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                            jack_card:juice_up()
                            jack_card:set_base(G.P_CARDS[suit_prefix..'Q'])
                            SMODS.calculate_effect({message = 'Queened!'}, card)
                        else
                            local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                            jack_card:juice_up()
                            jack_card:set_base(G.P_CARDS[suit_prefix..'K'])
                            SMODS.calculate_effect({message = 'Kinged!'}, card)
                        end
                        return true end }))
                end 
            end
        end
    end

but the message didnt pop up on my joker

manic rune
#

weird, it should do that

#

maybe bcz its inside an event? i doubt it though

#

can u try running the line outside the event rq

rugged pier
#

i just realised another issue with this, what if the game calculates the hand as a two pair but after it changes the card it becomes a 3 of a kind?

rugged pier
ivory coral
#

ive not actually seen SMODS.calculate_effect() inside an event before, its always outside of it from my experience
so it could be that

manic rune
#

true

#

maybe you need to use the uhhh

#

eval smt smt for the message instead

#

damn, i forgot its name

#

💔

rugged pier
manic rune
#

shit, one dec

#

sec

rugged pier
#

okok

manic rune
#

lemme go find the function's name

rugged pier
ivory coral
#

you should be able to just check a local variable if it gets kinged/queened and add an if outside the event that triggers the message

gilded blaze
manic rune
#

card_eval_status_text(cardInHand, 'extra', nil, nil, nil, {message = d_message})

gilded blaze
#

I just need to inject a custom parameter, the resetting logic can also be defined on my side

manic rune
#

change the d_message with your message, and cardInHand with card

#

maybe it will work?

ivory coral
manic rune
#

but i do suggest Osquo's approach too, actually

#

the timing seems to be more accurate that way

gilded blaze
ivory coral
# rugged pier okay let me try
    func = function()
        toconvert:juice_up() --JUUUUIICEEE
        return true
    end}))
if check then SMODS.calculate_effect({message = localize('osquo_ext_amberconvert'), colour = G.C.ATTENTION}, card) end```
heres an example of how i did it in a mod im making
#

this converts a card but same principle

#

check is a local variable defined earlier

rugged pier
manic rune
#

juice

#

🧃

rugged pier
manic rune
#

probably not

ivory coral
manic rune
#

it wont affect your hand at all

rugged pier
ivory coral
#

itll just calculate as whatever it was when you clicked play

manic rune
#

yeah

rugged pier
#

ah

#

so no way of changing the hand

manic rune
#

it only changes the poker hand when you do it in context.before

#

im pretty sure

rugged pier
#

i will try this next once this message thing is fixed

rugged pier
ivory coral
manic rune
#

maybe u can do stuff like
...message = (checkA and localize("a")) or (checkB and localize("b")) or nil
?

#

im actually not sure what happens when message is nil

#

if it doesn't do anything then i think it looks cleaner :3

rugged pier
#

i think i figured out a solution

#

will report back in a min if it works

#
calculate = function(self, card, context)
        if context.individual and context.cardarea == G.play and context.scoring_hand then
            if context.other_card:get_id() == 11 then
                if pseudorandom('tindwyl_one') < G.GAME.probabilities.normal/card.ability.extra.init_odds then
                    local jack_card = context.other_card
                    if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
                        G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                            local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                            jack_card:juice_up()
                            jack_card:set_base(G.P_CARDS[suit_prefix..'Q'])
                            return true end }))
                        SMODS.calculate_effect({message = 'Queened!'}, jack_card)
                    else
                        G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                            local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                            jack_card:juice_up()
                            jack_card:set_base(G.P_CARDS[suit_prefix..'K'])
                            return true end }))
                        SMODS.calculate_effect({message = 'Kinged!'}, jack_card)
                    end
                end 
            end
        end
    end

technically this uses the SMODS thing outside the event but still inside the if condition

rain slate
#

this is most certainly not what I anticipated would happen

manic rune
#

-# why is it there

rugged pier
rain slate
rugged pier
#

thank you @ivory coral and @manic rune

#

now to see if i can get poker hand to change

manic rune
#

np :D

manic rune
#

bluds think they r part of the team

ivory coral
#

...can you play cards from the joker area?

manic rune
#

i dont think so, no

rain slate
#

I am checking for context.card_destroyed and context.cardarea == G.jokers and context.other_card ~= card with lua SMODS.calculate_context({ card_destroyed = true, cardarea = self.area, other_card = self }, nil) , and yet it triggers when self.area == G.play or self.area == G.hand

manic rune
#

im pretty sure it checks G.hand.highlighted for playing hand

#

those cards are in G.jokers

rain slate
#

yeah that's because uhh

ivory coral
#

would be kinda cool if you could
like you could "reserve" a card for later

rain slate
#

it's copying the card that gets destroyed

#

and placing it into G.jokers

manic rune
#

oh, autumn mood actually had a joker which does that

rain slate
#

but

manic rune
#

butttttt

#

stuff happened

rain slate
#

how the fuck does it even trigger for G.play and G.hand

manic rune
#

:(

manic rune
rain slate
#

well yes, but I am explicitly checking if it's G.jokers

manic rune
#

just that some stuff will break, since they lack vars which code of the respective area checks

#

context.cardarea == G.jokers is wrong here

#

since

#

it kinda means nothing

rain slate
#

how come?

manic rune
#

its telling ur joker to run the effect

#

u know when u add context.cardarea == G.jokers in stuff like context.end_of_round?

rugged pier
rain slate
manic rune
#

its just context.before

manic rune
#

and you are supposed to run a loop through G.play.cards, which refers to your playing hand

rugged pier
#

hmm how do i iterate over full_hand though

tawny narwhal
#

Bruh this coding stuff ain't easy lmao

rain slate
#

cuz it

#

fucking overrides that or smtn

manic rune
#
for _,otherCard in ipairs(G.play.cards) do
    
end
rugged pier
manic rune
#

mhm

#

u got it :D

rugged pier
#

okay let me try

rugged pier
rain slate
#

I'll just check context.other_card.area == G.jokers and context.other_card ~= card

manic rune
#

dw

#

most of the time its just the sheer amount of contexts, functions and stuff that confuse you

tawny narwhal
#

All I'm trying to do is mult * mult and I can't

manic rune
#

when you remember them, they r not that big of a deal

manic rune
rugged pier
# manic rune ```lua for _,otherCard in ipairs(G.play.cards) do end ```
calculate = function(self, card, context)
        if context.before then
            for _,otherCard in ipairs(G.play.cards)
            if otherCard:get_id() == 11 then
                if pseudorandom('tindwyl_one') < G.GAME.probabilities.normal/card.ability.extra.init_odds then
                    local jack_card = otherCard
                    if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
                        G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                            local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                            jack_card:juice_up()
                            jack_card:set_base(G.P_CARDS[suit_prefix..'Q'])
                            return true end }))
                        SMODS.calculate_effect({message = 'Queened!'}, jack_card)
                    else
                        G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                            local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                            jack_card:juice_up()
                            jack_card:set_base(G.P_CARDS[suit_prefix..'K'])
                            return true end }))
                        SMODS.calculate_effect({message = 'Kinged!'}, jack_card)
                    end
                end 
            end
        end
    end

testing this out, moment of truth

tawny narwhal
#

Making a joker that squares mult

manic rune
#

ah

tawny narwhal
#

unbalenced as hell

manic rune
#

i think you should use talisman for that one

#

they support squaring mult and chips within return itself

tawny narwhal
#

Yeah see I would

#

If i knew what that meant

manic rune
#

otherCard, other_card

tawny narwhal
#

I'm just using a prexisting modded joker as a skeleton

#

seems it isn't so simple though

manic rune
#

they also add ^mult and stuff

rugged pier
rain slate
#

ok now it works

#

pog

manic rune
#

nice

rain slate
#

completely forgot about the cardarea thing SMODS does in calculate_context

ivory coral
# tawny narwhal If i knew what that meant

Talisman is a mod that adds new ways to return scoring effects
so instead of just mult or xmult you can do emult which is exponential mult
in this case return { emult = 2 } would square your mult

tall wharf
#

@manic rune

#

math deck

manic rune
#

helo

#

where

#

:3

rugged pier
# manic rune wait wait
calculate = function(self, card, context)
        if context.before then
            for k,v in ipairs(G.play.cards)
            if v:get_id() == 11 then
                if pseudorandom('tindwyl_one') < G.GAME.probabilities.normal/card.ability.extra.init_odds then
                    local jack_card = v
                    if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
                        G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                            local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                            jack_card:juice_up()
                            jack_card:set_base(G.P_CARDS[suit_prefix..'Q'])
                            return true end }))
                        SMODS.calculate_effect({message = 'Queened!'}, jack_card)
                    else
                        G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                            local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                            jack_card:juice_up()
                            jack_card:set_base(G.P_CARDS[suit_prefix..'K'])
                            return true end }))
                        SMODS.calculate_effect({message = 'Kinged!'}, jack_card)
                    end
                end 
            end
        end
    end

this just breaks my game by invalidating my joker file

tall wharf
manic rune
#

oh thats cool

ivory coral
rugged pier
ivory coral
#

since this depends on talisman though you'll have to add it as a dependancy or itll crash without it installed

rugged pier
#

oh wait

tall wharf
#

excuse me

#

are you British

rugged pier
#

i think i figured it out

rugged pier
#

smh

manic rune
#

oof, icic

tall wharf
#

oh no

manic rune
#

you know what

#

i actually wonder if

#

you can do this

rugged pier
#

nvm that didnt fix it either

manic rune
#

would it be mult^2?

ivory coral
tall wharf
ivory coral
#

coolmathgames / balatro crossover

manic rune
#

time to work on cocolia phase 2

#

yipee

rugged pier
#
calculate = function(self, card, context)
        if context.before then
            for k,v in ipairs(G.play.cards)
                if v:get_id() == 11 then
                    if pseudorandom('tindwyl_one') < G.GAME.probabilities.normal/card.ability.extra.init_odds then
                        local jack_card = v
                        if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
                            G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                                local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                                jack_card:juice_up()
                                jack_card:set_base(G.P_CARDS[suit_prefix..'Q'])
                                return true end }))
                            SMODS.calculate_effect({message = 'Queened!'}, jack_card)
                        else
                            G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                                local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                                jack_card:juice_up()
                                jack_card:set_base(G.P_CARDS[suit_prefix..'K'])
                                return true end }))
                            SMODS.calculate_effect({message = 'Kinged!'}, jack_card)
                        end
                    end 
                end
            end
        end
    end

any idea why this would just invalidate my joker file lol

#

any syntax errors?

manic rune
#

whats the crash log

tawny narwhal
rugged pier
manic rune
#

wha

#

thats odd

rugged pier
#

this is the crash log

tawny narwhal
#

In python the equivalent would work, but lua aint python

#

Engineering did't teach me lua...

#

sadge

rugged pier
tawny narwhal
#

There is

manic rune
#

how about this?

manic rune
#

described what google translate does

tawny narwhal
#

It's called being cranked outta your gorg at computers

manic rune
#

💔

rugged pier
#

😔

rugged pier
tawny narwhal
#

Me neither

#

I'm better at sleeping and failing to not play WT

rugged pier
manic rune
#

missing something

rugged pier
rugged pier
manic rune
#

i tried pasting your code in my own file

rugged pier
#

and it works?

manic rune
#

no, the opposite

sonic cedar
#

ending my night with something basic

rugged pier
#

lol

rugged pier
manic rune
#

oh wait

#

ohhh

rugged pier
#

BECAUSE THAT WOULD BE GAME CHANGING FOR MY MOD

manic rune
#

@rugged pier

#

you forgot "do" in the for loop

rugged pier
native zinc
#

card_flip()

sonic cedar
#

you change jokers by changing them
the flip is just to mask it

manic rune
rugged pier
#

this is game changing holy shit thank you

manic rune
#

:flip()

native zinc
#

oop

#

card:flip()*

ivory coral
manic rune
#

yeah, never have your expectations high when you are testing your code

#

be prepared to debug a seemingly simple function like 10 times

rain slate
manic rune
#

before actually getting it to work

rugged pier
sonic cedar
manic rune
#

i

#

need to step up my game

#

yall be making too cool stuff

#

💔

rain slate
sonic cedar
#

it's nothing personal i hate everyone

manic rune
#

its not racism if i hate everyone equally

#

❤️

tawny narwhal
#

That's it

#

I can't fix my own mistakes

rain slate
tawny narwhal
#

My PC is going out the window

ivory coral
manic rune
tawny narwhal
manic rune
#

did you download the lua extension?

rugged pier
#
calculate = function(self, card, context)
        if context.before then
            for k,v in ipairs(G.play.cards) do
                if v:get_id() == 11 then
                    if pseudorandom('tindwyl_one') < G.GAME.probabilities.normal/card.ability.extra.init_odds then
                        local jack_card = v
                        if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
                            G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                                local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                                jack_card:juice_up()
                                jack_card:set_base(G.P_CARDS[suit_prefix..'Q'])
                                return true end }))
                            SMODS.calculate_effect({message = 'Queened!'}, jack_card)
                        else
                            G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                                local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                                jack_card:juice_up()
                                jack_card:set_base(G.P_CARDS[suit_prefix..'K'])
                                return true end }))
                            SMODS.calculate_effect({message = 'Kinged!'}, jack_card)
                        end
                    end 
                end
            end
        end
    end

this works but will NOT change the poker hand @manic rune

tawny narwhal
#

Mainly that I don't know lua

rain slate
sonic cedar
rugged pier
manic rune
#

yes

sonic cedar
#

yes

ivory coral
#

wait what do you mean theres a lua extension for vscode

manic rune
#

it shows whenever your code is wrong

rugged pier
manic rune
#

HOW DO YALL CODE WITHOUT IT

#

💔

tall wharf
#

chat what should i add to the letter deck 😭😭😭

rugged pier
rain slate
rugged pier
tall wharf
#

it's getting less attention from me because it has 0 sunergies

ivory coral
tall wharf
#

math deck also has literally 0 synergies

rugged pier
rain slate
#

where aces were getting counted as face cards when scored after I'd changed their rank in context.before

manic rune
#

wait

rain slate
manic rune
#

isnt there context.modify_scoring_hand?

rugged pier
#

SO REAL

tall wharf
#

belis

manic rune
#

who tf is belis 😭

tall wharf
#

belis

#

it's your name now

#

bepil

rugged pier
#

I have finally installed the lua extention for vscode...

tall wharf
#

bepilus

#

bel

rugged pier
manic rune
#

guess im belis now

sonic cedar
#

belias

tall wharf
#

belis i still have

#

a secret feature i haven't added

rugged pier
#

oh my god i have to uninstall the vscode extention

tall wharf
#

i think i revealed it to exactly 1 person

manic rune
#

not sure

rugged pier
manic rune
#

and did u try myst's new blind :3

ivory coral
sonic cedar
tall wharf
#

she never explained it to me

manic rune
tall wharf
#

nor did any of you

manic rune
#

:3

rain slate
#

I forgot about modify_scoring_hand tbh

manic rune
#

❤️

tall wharf
rugged pier
tall wharf
tawny narwhal
tall wharf
#

JUST EXPLAIN IT TO ME

rain slate
#

I've seen it in auto-completion but hadn't thought about what it might very obviously do

tall wharf
#

I'm missing the fuck out

manic rune
#

get wat

ivory coral
rugged pier
manic rune
#

I LOVE UNDOCUMENTED FUNCTIONS 🗣️

tawny narwhal
radiant plank
#

can someone help me diagnose why my joker isnt showing up in the collection? it works for others but not for me for some reason

manic rune
tawny narwhal
#

holy canoli

manic rune
#

i shall flex

#

a bit

#

:3

rain slate
tall wharf
#

silksong

rugged pier
#

man smods really needs a rework on documentation

tawny narwhal
tawny narwhal
#

I've tried that one

rain slate
#

easy way to get it is to open your entire mods folder as a workspace in VSCode catxdd

rugged pier
#

so would context.modify_scoring_hand solve your problem too @tall wharf ?

manic rune
tawny narwhal
#

I shoulda seen that coming, since it's in your name....

manic rune
#

i mean, do you think its a nickname or smt 😭

tawny narwhal
#

Yknow what...

rain slate
rain slate
#

it should show up

tawny narwhal
#

I'll go back to my theology homework for now

#

I'm coded out

sonic cedar
ivory coral
rain slate
rugged pier
sonic cedar
rugged pier
#

just installed it

rain slate
#

was js an exercise to see if I could do it

sonic cedar
rain slate
#

saw a cool joker on YouTube and wanted to try implement it

rugged pier
#
if context.modify_scoring_hand and context.before then

this is what i would do @manic rune ?

radiant plank
#

if i have in my main.lua

SMODS.Atlas{
    key = 'Jokers',
    path = 'Jokers.png',
    px = 71,
    py = 95
}
SMODS.Joker{
  key = 'Redboard',
  loc_txt = {
    name = 'Redboard',
    text = {
      '{X:mult,C:white}X#1#{} Mult If all',
      'cards held in hand',
      'are Hearts or Diamonds'
    },
  },
  atlas = 'Jokers',
...

and my folder structure looks like

Redboard/
├── assets
│   ├── 1x
│   │   └── Jokers.png
│   └── 2x
│       └── Jokers.png
└── main.lua

why might my joker not show up in the collection? it works for a friend but not for me

manic rune
#

what is love

radiant plank
rain slate
daring fern
rain slate
#

json file or whatever

#

with your mod prefix and shit

#

pretty sure SMODS needs that to load it

radiant plank
#

wait no i never did any of that

rain slate
#

since you need to specify your main file in there

rugged pier
#
calculate = function(self, card, context)
        if context.modify_scoring_hand then
            for k,v in ipairs(G.play.cards) do
                if v:get_id() == 11 then
                    if pseudorandom('tindwyl_one') < G.GAME.probabilities.normal/card.ability.extra.init_odds then
                        local jack_card = v
                        if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
                            G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                                local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                                jack_card:juice_up()
                                jack_card:set_base(G.P_CARDS[suit_prefix..'Q'])
                                return true end }))
                            SMODS.calculate_effect({message = 'Queened!'}, jack_card)
                        else
                            G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                                local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                                jack_card:juice_up()
                                jack_card:set_base(G.P_CARDS[suit_prefix..'K'])
                                return true end }))
                            SMODS.calculate_effect({message = 'Kinged!'}, jack_card)
                        end
                    end 
                end
            end
        end
    end

so i did this, it modified the card 3 times and then did NOT change the playing hand? lol
any ideas?

rain slate
radiant plank
radiant plank
ivory coral
rain slate
manic rune
#

i only remember that it exists

#

😭

rugged pier
#

this is what i found

manic rune
#

i love undocumented functions for god sake

rugged pier
rain slate
#

well yeah, but, it's still after a delay

#

maybe the poker hand gets set somewhere there, and you're supposed to change it immediately?

ivory coral
tall wharf
#

belis

ivory coral
#

i dont really know how it works either
personally i recommend bashing rocks together until it works

ivory coral
#

oh really

manic rune
#

belis

rugged pier
#

wait

ivory coral
#

should be line 1385

rugged pier
#

i searched for modify_scoring_hand and it shows now

ivory coral
#

nice

rugged pier
#

SMODS.calculate_context({modify_scoring_hand = true, other_card = G.play.cards[i], full_hand = G.play.cards, scoring_hand = scoring_hand}

rain slate
#

Look at the surrounding code

#

It'll tell you what kind of context (not like calculation context) you're in

rugged pier
#
for i=1, #G.play.cards do
    local splashed = SMODS.always_scores(G.play.cards[i]) or next(find_joker('Splash'))
    local unsplashed = SMODS.never_scores(G.play.cards[i])
    if not splashed then
        for _, card in pairs(scoring_hand) do
            if card == G.play.cards[i] then splashed = true end
        end
    end
    local effects = {}
    SMODS.calculate_context({modify_scoring_hand = true, other_card =  G.play.cards[i], full_hand = G.play.cards, scoring_hand = scoring_hand}, effects)
    SMODS.trigger_effects(effects, G.play.cards[i])
    for _, eval in pairs(effects) do
        if type(eval) == 'table' then
            for key, eval2 in pairs(eval) do
                if key == 'add_to_hand' or (type(eval2) == 'table' and eval2.add_to_hand) then splashed = true end
                if key == 'remove_from_hand' or (type(eval2) == 'table' and eval2.remove_from_hand) then unsplashed = true end
            end
        end
    end
    if splashed and not unsplashed then table.insert(final_scoring_hand, G.play.cards[i]) end
end
-- TARGET: adding to hand effects
scoring_hand = final_scoring_hand
'''```
#

i think its not a context but something i add? to the calculate function?

rain slate
#

oh it's only for like

ivory coral
rugged pier
#

i could be fully wrong

rain slate
#

adding and removing ?

tawny narwhal
#

NVM we're so back

rugged pier
ivory coral
#

i thiiiink it makes a new table of cards to be scored and just modifies the scoring_hand table
at least thats how id intuitively assume it works

rugged pier
#

i think i have to set the variable to true

rain slate
#

I think it's some return table bullshit

rugged pier
#

modify_scoring_hand

manic rune
#

probably return a table with all the modified cards in order

rain slate
#

Look at the add_to_hand and remove_from_hand thingy

manic rune
#

my mom took my pc to do her work

#

:/

rugged pier
tall wharf
manic rune
#

no excuses harmonious, mine is too

sturdy compass
#

LOL

tall wharf
#

I'm sorry astra

rugged pier
tall wharf
#

i can't say these i made Minecraft mods before

manic rune
#

first time im modding a game, but def not the first time im coding smt

ivory coral
rain slate
#

it calculates that context, gets its return table (i.e. the table you return in calculate), calculates it individually per card (i think) and then it also does something with add_to_hand or remove_from_hand if its5in the table

ivory coral
#

so i think this is used to add/remove specific cards from scoring?

manic rune
#

are we breaking down the modify_scoring_hand's code

edgy reef
rain slate
#

oh my god yeah this is probably only for the scoring hand

rugged pier
manic rune
#

if only a smods god is here rn

rain slate
#

so it can't like change the type of poker hand or smtn

rugged pier
#

since scoring hand is decided when you hit play

ivory coral
rugged pier
edgy reef
manic rune
#

😭

rain slate
rugged pier
rain slate
#

like not literally the whole hand, just the ones that score

#

like what the Splash joker does in vanilla

rugged pier
#

okay that makes sense

manic rune
#

in that case

rugged pier
#

but you cant really change the exact scoring hand

#

hmm

manic rune
#

youd probably need a hook or a patch

rugged pier
ivory coral
#

only thing i can think of is that one code card from cryptid that forces a certain hand to be calculated as [x] poker hand

rain slate
#

Yeah this seems like something that isn't covered by SMODS

manic rune
#

pretty surprised smods doesn't have smt to support this

tall wharf
#

played cards are permanently debuffed

manic rune
#

wtf aiko

rain slate
rugged pier
manic rune
tall wharf
rugged pier
rain slate
#

when will we get context.rank_changed and context.suit_changed by default 😭

manic rune
#

nop

tall wharf
#

what's wrong belis

manic rune
#

:3

#

check out myst's blind

ivory coral
manic rune
#

is good

tall wharf
#

any triggered cards are permanently debuffed

manic rune
#

i ran out of gifs

#

so

#

heres an alien image

rugged pier
#

how do i get rid of these messages holy shit

rain slate
tall wharf
#

red seal steel king build killer

ivory coral
rugged pier
tall wharf
#

mario

rain slate
#

I'd do it so this runs before stuff like midas mask or vampire so like before before if that makes sense

edgy reef
rugged pier
rain slate
manic rune
#

smods too

rain slate
#

midas mask was just an example

rugged pier
#

i see

#

youre right actually

rain slate
#

it should run before stuff in context.before or smtn

rugged pier
#

for other things that trigger with kings and queens

#

yes

#

okay done

rain slate
#

like you play the hand and then your stuff triggers and changes the stuff

tall wharf
rugged pier
rain slate
rugged pier
rain slate
#

what

#

no it's not gonna be this easy

rugged pier
#

like i had context.before implemented before i tried to do the other stuff

rain slate
#

yeah but that's not what I meant...

#

whatever

rugged pier
#

am i dumb

#

what did you mean

rain slate
#

doesn't matter

rugged pier
#

this is going to keep me up at night

rain slate
#

you still have to patch stuff because it can't be done by default

#

I think

rugged pier
rain slate
#

or you can look into the code that gets called when a hand is played

#

and somehow change the poker hand by referencing that

rugged pier
#

what you meant

#

i thought you meant like as a temporary thing, you were telling me to just do context.before and not change the poker hand

#

but yeah

#

ill look more into it later

manic rune
#

back

heady siren
#

Is this a good Plasma Deck-like sound for my rare joker that turns every flushable hand into it's flush variant and turns all played cards into wild cards?

rugged pier
#
calculate = function(self, card, context)
        if context.before then
            for k,v in ipairs(G.play.cards) do
                if v:get_id() == 11 then
                    if pseudorandom('tindwyl_one') < G.GAME.probabilities.normal/card.ability.extra.init_odds then
                        local jack_card = v
                        if pseudorandom('tindwyl_two') < G.GAME.probabilities.normal/card.ability.extra.end_odds then
                            G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                                local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                                jack_card:juice_up()
                                jack_card:set_base(G.P_CARDS[suit_prefix..'Q'])
                                return true end }))
                            SMODS.calculate_effect({message = 'Queened!'}, jack_card)
                        else
                            G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
                                local suit_prefix = string.sub(jack_card.base.suit, 1, 1)..'_'
                                jack_card:juice_up()
                                jack_card:set_base(G.P_CARDS[suit_prefix..'K'])
                                return true end }))
                            SMODS.calculate_effect({message = 'Kinged!'}, jack_card)
                        end
                    end 
                end
            end
        end
    end

how do i make sure it only converts those jacks that are being scored

#

for k,v in ipairs(G.play.cards) -> for k,v in ipairs(context.scoring_hand)?

manic rune
#

mhm

rugged pier
#

awesome

sacred eagle
#

Hi! I'm making a custom texture pack for friends and I got all the art done but I have no clue how to implement this in a way that'd be easy for others to download other than manually replacing the sprites with 7zip. All I really want to do is replace the base cards front and back sprites.

I'm extremely new to lua so any and all help would be appreciated if possible KiuberPray

heady siren
ivory coral
tall wharf
#

hello chat

tall wharf
#

no need for malverk

heady siren
rugged pier
sacred eagle
tall wharf
#

back?

#

oh i missed that

heady siren
rugged pier
#

it sounds really cool

heady siren
rugged pier
tall wharf
#

i only wish

heady siren
#

The Seance force trigger just straight up steals the Seance code to make it work, because I can't figure out how to make it just use the same code

tawny narwhal
#

Okay, not sure what I've done wrong now

#

(Lines 25 and 26) loc_vars = function(self, info_queue, card) return { vars = { card.ability.extra.Xmult } }

rugged pier
heady siren
rugged pier
heady siren
#

Just a tip, it isn't compatible with Space Joker, and I don't know how to make it compatible

tawny narwhal
rugged pier
heady siren
#

It'll trigger for the base hand and the modified hand in that case, which isn't desirable

rugged pier
rugged pier
heady siren
tawny narwhal
#

Goober moment

heady siren
rugged pier
rugged pier
heady siren
rugged pier
# heady siren

why are different jokers displaying messages for same functionality?

heady siren
#

Those are 3 different jokers, I don't have art for any of my jokers yet

rugged pier
#

ah okay makes sense

#

but this is really cool, amazing idea

tawny narwhal
#

OKay now it's working

heady siren
#

That last one gives X0.1 mult for all 4 suits played in sequence

tawny narwhal
#

I just need an effiecent way to have it square the mult in the function

rugged pier
heady siren
#

So Spades > Hearts > Clubs > Diamonds = +X0.1