#💻・modding-dev

1 messages · Page 363 of 1

maiden phoenix
#

Your consumable needs to have a set for if it's a Tarot/Planet/Spectral

onyx sonnet
#

im talking to Blackbox

dull sage
#

I did yeah, I always reload if I make a change to the mod file

onyx sonnet
#

yeah not really sure what is wrong here, deck calc is outside my area of expertise

dull sage
#

Let me try something

daring heron
#

might got it

#

awesome

#

i did got it

dull sage
#

Guess who's an idiot? This guy

#

I was applying the wrong seal

daring heron
#

well it works but i cant use it

onyx sonnet
#

does it work now?

daring heron
#

oh and how do i make it so it only adds one if you have room

dull sage
#

Yeah I see my print message we gucci

onyx sonnet
dull sage
#

"Huh I wonder why I don't see my message"
The Intersex seal I applied to my card: he doesn't know

daring heron
#

but i still cant use it 😔

quartz ravine
daring heron
#

oh that looks very nice

#

i have absolutely no idea how you did that

onyx sonnet
# daring heron but i still cant use it 😔
              calculate = function(self, card, context)
        if context.selling_self and (card.ability.extra.invis_rounds >= card.ability.extra.total_rounds) and not context.blueprint then
            local jokers = {}
            for i = 1, #G.jokers.cards do
                if G.jokers.cards[i] ~= card then
                    jokers[#jokers + 1] = G.jokers.cards[i]
                end
            end
            if #jokers > 0 then
                if #G.jokers.cards <= G.jokers.config.card_limit then
                    local chosen_joker = pseudorandom_element(jokers, pseudoseed('vremade_invisible'))
                    local copied_joker = copy_card(chosen_joker, nil, nil, nil,
                        chosen_joker.edition and chosen_joker.edition.negative)
                    copied_joker:add_to_deck()
                    G.jokers:emplace(copied_joker)
                    return { message = localize('k_duplicated_ex') }
                else
                    return { message = localize('k_no_room_ex') }
                end
            else
                return { message = localize('k_no_other_jokers') }
            end
        end
        if context.end_of_round and context.game_over == false and context.main_eval and not context.blueprint then
            card.ability.extra.invis_rounds = card.ability.extra.invis_rounds + 1
            if card.ability.extra.invis_rounds == card.ability.extra.total_rounds then
                local eval = function(card) return not card.REMOVED end
                juice_card_until(card, eval, true)
            end
            return {
                message = (card.ability.extra.invis_rounds < card.ability.extra.total_rounds) and
                    (card.ability.extra.invis_rounds .. '/' .. card.ability.extra.total_rounds) or
                    localize('k_active_ex'),
                colour = G.C.FILTER
            }
        end
    end,```


Invisible joker code by @red flower remade in SMODs
quartz ravine
#

I have been staring at this shatterfoil XYZ Dragon for like a month trying to get this effect to work

red flower
#

hi

daring heron
#

hi

#

i'm trying to make my tarot card actually usable

onyx sonnet
#

hi N', i was just crediting your vanilla rewrites

daring heron
#

rn it wont let me use it

onyx sonnet
#

oh this is a tarot?

daring heron
#

yeah

onyx sonnet
#

the border made me think it was a joker

#

apologies

quartz ravine
# daring heron i have absolutely no idea how you did that

First I found an example doing something similar to this on GSL.app and I began to adapt and modify it to work with Love2d's shader system.

It was a lot of work, the GSL.app one used a projected light to achieve a shiney affect. I saw how it was done over in Gold seal and adapted that approach

onyx sonnet
#

let me see the code for judgement

daring heron
#

do i perhaps need a can_use?

onyx sonnet
#

yeah

#

i think vanilla calls it can_use_consumeable

quartz ravine
#

@daring heron

The overall steps are

Determine our position, render polygons, and then shade them using the shaders.r and .x values. We use .r which is modified when the card is hovered over and 'skewed' and the .x constantly shifts a small amount frame by frame

Those two values plus the position on the texture are all we need to know which color to overlay then we blend in with the udnerlyign texture

daring heron
#

sounds like a lot of math

#

wait should i put this in the calculation?

#

does this even work lol

#

did i perhaps put it in wrong

#

?

daring fern
daring heron
#

wait is that a function?

daring fern
daring heron
#

oh

#

can you put functions inside of functions?

daring fern
daring heron
#

why does this give an error?

#

i put an end

daring fern
daring heron
#

but i put an end there

daring fern
daring heron
#

it is

#

at the bottom

daring fern
daring heron
#

nvm got it

daring fern
#

Functions need ends.

daring heron
#

i did

#

but i fixed it

#

but it did have an end before

analog spoke
#

🥺 baby's first edition 🥺

#

hehehe

#

I still gotta, like, get the effect for it done and everything, lol

#

not sure how I'm gonna do that yet, lol

frigid blaze
#

Can you tell me if there is any way to make the Joker count last when counting?

daring fern
frigid blaze
#

No, so that he'd be the last one counted.

frigid blaze
daring fern
scarlet thorn
#

context.after

#

depending on what specifically "after" means

hasty mist
#

is it possible to hide the rarity badge

daring fern
weary sentinel
#

I can't be bothered to learn how to code
is there anyone who would want to adopt my jokers or help me make my mod

wild locust
daring fern
wild locust
#

I want to move the cards without the 'ragdoll' effect that the game has

daring fern
hybrid shadow
#

does anyone know what id put in default_weight for custom rarities if i wanted to make the weights equivalent to the weight of vanilla rarities

wild locust
surreal coral
#

Do I need to be mindful of how much I use the update() function in my jokers? Just seems like using that in a lot of things at once could bog the game down since it runs every frame

red flower
#

Yes, I would actually avoid update unless you really really need it

surreal coral
#

Good to know, thanks

fair frost
#

I'm still stumped on this

#

Would anyone have an example rank adding code?

daring fern
fair frost
#

I'll take a look! Thank you

dull sage
#

Is there a way to add a new variable to a card?

tall wharf
zealous glen
zealous glen
#

What would you code in Julia

wild locust
tall wharf
#

what

hasty mist
#

whats wrong here?

zealous glen
#

Imagine using emoji to name a variable

zealous glen
tall wharf
#

i would never

plain apex
#

still dont know how to get this to work

hardy viper
#

🚀🚀🚀

dull sage
tall wharf
zealous glen
wild locust
zealous glen
tall wharf
#

this hurts

#

ow

hasty mist
tall wharf
#

ow

#

this hurts

chrome widget
#

Is there an easier shorthand to using a calculate return table to make a card juice but not give a message?

tall wharf
hasty mist
tall wharf
#

😭

zealous glen
fair frost
#

if handname is not global, it's nil in context

chrome widget
#

handname in vanilla arm is used in modify_hand, which does pass in a handname

#

If you want to do something similar, you should use that function instead

hasty mist
#

alright, how would i do that?

chrome widget
zealous glen
tall wharf
#

context.scoring_hand?

wild locust
zealous glen
wild locust
fair frost
# daring fern Showdown mod?

I copied the rank-adding code from Showdown mod, and it displays the same issue I was facing
Which means this must be handled elsewhere, right?

wild locust
daring fern
plain apex
zealous glen
# wild locust just at dragging a card

Idk, I’d try to find where card click and drag is defined, either in card.lua or node.lua , and go from there. If you want a hacky solution, you could try to do something every frame and remove a dragged card’s tilt before it’s rendered

fair frost
fair frost
daring fern
chrome widget
# zealous glen You can just pass a value to make it juice right?

This is what I've been trying do (this is an overwritten Glass enhancement)

    return {
        func = function()
            for _, v in ipairs(dances) do
                G.FUNCS.csau_flare_stand_aura(v, 0.5)
            end
        end,
        extra = {
            x_mult = self.config.x_mult,
            delay = 0,
            func = function()
                G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0, func = function()
                    for _, v in ipairs(dances) do
                        v:juice_up()
                    end
                return true end }))
            end
        }
    }
end```

But various combinations of extra nesting keep having the juice either occur *way* before it should (at the beginning of scoring) or in combination with the aura after the card has been scored rather than in combination with it, which is what I want
plain apex
#

both the error of spades and nothing would just crash the game if played lol

fair frost
zealous glen
daring fern
fair frost
#

Yep

chrome widget
hasty mist
#

how could i increase the level of the played hand? copying code from the arm doesnt seem to work and i dont know how to make it work properly

zealous glen
#

You can specify which card is juiced

#

And you have extra

#

So you can specify multiple juiced cards

chrome widget
#

juicing doesn't seem to work without a message. I'd need some way to arbitrarily trigger it

fair frost
#

Have you checked where it calls debuff_hand?

chrome widget
#

Regardless, if you have multiple copies of Dance Macabre, I need to juice all of them simultaneously

hasty mist
#

i dont understand what you mean

chrome widget
#

just specifying a card

zealous glen
#

I think it should work

chrome widget
#

Didn't work for me in the past

#

I can try it again

zealous glen
chrome widget
#

But it still doesn't fix the multiple simultaneous card issue since afaik the game doesn't support multiple targets for it

#

I could build an arbitrarily nested table to do it I suppose

placid star
#

can i set a in_pool function for a consumebaletype instead of setting it for each consumebale of that type?

fair frost
# hasty mist i dont understand what you mean
SMODS.Blind({
    key = "blind",
    name = "BlindName",
    debuff_hand = function(self, cards, hand, handname, check)
        if G.GAME.hands[handname].level > 1 then
                  self.triggered = true
                  if not check then
                    level_up_hand(self.children.animatedSprite, handname, nil, -1)
                    self:wiggle()
                  end
                end 
    end
})```
Would something in this lieu work?
chrome widget
#

It seems like the x_mult return is actually still the base glass card one

#

Which is.... annoying

viscid lagoon
#

chat how do i make my edition work 💔

chrome widget
#

Okay yep. I fixed something and now it's giving xmult twice, with correctly timed animations

hasty mist
#

happens when i highlight a card

chrome widget
#

My main issue is how to disable the default config of the glass card without potentially breaking anything else that overwrites base glass cards at a higher priority

fair frost
#

Although
If its crashing on highlight, this wouldn't fix it

daring fern
daring fern
hasty mist
#

that seemed to work

#

thank you!

fair frost
# fair frost

I was silly, and hadn't changed the Showdown prefix inside the localization file to my mod's

#

With that, it all works now

#

Thanks for the help

daring fern
#

The problem here seemed to be that the atlas was nil for some reason?

hasty mist
#

how do i modify base chips and mult like the flint?

daring fern
hasty mist
#

yeah

#

i figured itd be something like this but im not entirely sure

zealous glen
pulsar flower
#

i'm a huge fan of that ui

daring fern
sleek cliff
#

The game does open, but when I try to spawn the necisarry jokers that I need (specifically Ian) it crashes

daring fern
sleek cliff
#

oh

#

what should I replace with it then? or do I just remove it and see what happens

sleek cliff
#

every time Ian Chesterton is triggered, create 1 tarot card

daring fern
sleek cliff
#

ahh

daring fern
# sleek cliff

No, it should stay as context.other_card you just need to check if context.post_trigger then index.

sleek cliff
#

like this?

daring fern
sleek cliff
#

then which line do I put it in

daring fern
sleek cliff
#

oh ok, I just needed to swap around

#

damn it, she still does NOTHING

daring fern
#

Try a single event outside of the return.

sleek cliff
#

Its cause it's copied from the Cartomancer but changed

red flower
#

the reason it's in func in the mod i made is for retriggers

#

i need to find a way to make that clear

sleek cliff
#

oh

red flower
#

it should work anyway

sleek cliff
#

Every time Ian does trigger because of another doctor, she just does not

red flower
#

do you have the post_trigger optional feature enabled?

sleek cliff
#

I believe so

red flower
#

you should have SMODS.current_mod.optional_features somewhere

sleek cliff
#

been there for a bit

#

cause if Ian triggered, than she should too but shes doing jack shite

red flower
#

hmm does it work if you remove the IanC check?

sturdy monolith
red flower
#

(it will do it for all jokers of course but just to test)

sturdy monolith
sleek cliff
red flower
sturdy monolith
#

thanks

red flower
# sleek cliff still nothin

hmm the feature might be wrongly enabled, try doing SMODS.current_mod.optional_features = { post_trigger = true }

hybrid shadow
# red flower

oh so even if your atlas has only one card you still need a pos =

hasty mist
#

what's wrong here

red flower
hybrid shadow
#

oh the issue was that it was an animation table

#

i see

sleek cliff
red flower
#

yeah

#

never really used any of the optional features really

#

really

daring fern
hasty mist
upper juniper
#

question, is there any way for me to change the way foil/holo/poly look in the textures ?

daring fern
upper juniper
#

bc i dint find anything

upper juniper
#

where do i find that, lets say in the hd mod

daring fern
analog spoke
#

quick question, when adding a dependancy, what do I put for the name? only reason I say is cuz I tried myself and it's saying I don't have the mod when I do lol

red flower
daring fern
analog spoke
minor magnet
#

this is stupid, how can i implement this better?

upper juniper
daring fern
upper juniper
#

ok then where are they

#

cuz i cant find them

red flower
minor magnet
red flower
#

always? or does it need to be at those timings?

minor magnet
#

always

#

but

#

i used those timings to avoid

#

issues

sturdy monolith
#

how do i check if a specific boss blind has been defeated

minor magnet
#

(the issues are not being avoided)

#

i did say it was stupid

hasty mist
#

the lua extension is NOT showing syntax errors, its only making text that should be yellow green

daring fern
red flower
# minor magnet (the issues are not being avoided)

What are the issues? I would do something similar to what you're doing but putting all the things in update inside those timings OR changing the hand size directly in update, basically one or the other

minor magnet
#

because it changes it every frame

red flower
minor magnet
#

tried, it adds it more than once

hasty mist
red flower
daring fern
hasty mist
#

first is the main lua, which is referenced in the crash, and the second is the lua that contains the blind, also referenced in the crash

upper juniper
#

so uh resources/shaders/ doesnt exist for me, or im looking in the wrong place

daring fern
upper juniper
#

both

#

the extracted and the steam files

#

or whatever its called

#

(the 2nd one)

daring fern
upper juniper
#

AppData\Roaming\Balatro basically i cant find it there

#

nor in the ec=xtracted

minor magnet
#

ok wait i have an idea

hasty mist
#

why doesnt the lua extension tell me this, all it does is change the color of some text

minor magnet
daring fern
hasty mist
#

it should be default settings

minor magnet
hasty mist
#

this is why i dont use the lua extension

#

it does nothing for me

#

except make my code harder to read

minor magnet
daring fern
hasty mist
#

yeah

#

sumneko

#

first image is with extension, second image is without

#

all it does is change the color of my text

daring fern
hasty mist
#

no

red flower
# minor magnet tried, it adds it more than once

this works for me

update = function(self, card, dt)
        if card.area and card.area == G.jokers then
            local new_limit = G.jokers.config.card_limit - #G.jokers.cards + #SMODS.find_card("joker key")
            if new_limit ~= card.ability.extra.h_size then
                G.hand:change_size(new_limit - card.ability.extra.h_size)
                card.ability.extra.h_size = new_limit
            end
        end
    end,
remove_from_deck = function(self, card, from_debuff)
        G.hand:change_size(-card.ability.extra.h_size)
    end,
analog spoke
daring fern
daring fern
analog spoke
chrome widget
#

What cardarea contexts do consumables receive when they're send calculation contexts?

analog spoke
#

I could go with +discards instead, maybe

#

still not sure how I'd make it work tho, lol

chrome widget
#

I've tried both G.jokers and G.consumeables and neither seems to work

hasty mist
#

i think i managed to get it to show syntax errors

#

i still would really like for it to not change the color of my text though

minor magnet
#

8+5+5 is not 11

daring fern
hasty mist
#

i tried looking for it

upper juniper
red flower
upper juniper
#

so that means i cant change it ?

daring fern
upper juniper
#

or is it all hex values or smth

#

damnit

#

welp

analog spoke
red flower
upper juniper
#

gn chat im too tired for allat, its 1am

analog spoke
minor magnet
#

i'll look into it tomorrow

wintry solar
analog spoke
#

okey, so calculates do work with editions, good to know, thank you 👍

hasty mist
#

but it seems to be extremely broken

#

it's multiplying mult by 10 instead of two

#

and its not even multiplying chips

daring fern
hasty mist
#

😭

#

how do i fix this

daring fern
analog spoke
#

so, I tried to make an edition which lowered reroll costs and it crashes lol, uhm, what do I do to replace the "jokery" parts here with "editiony" stuff? lol

analog spoke
daring fern
analog spoke
#

it used to just give +chips

#

twas a copy of foil

daring fern
analog spoke
daring fern
wintry solar
#

what on earth is on_apply

analog spoke
#

idk if I understood it right, tho, lol

wintry solar
#

oh I see

#

man is that function in a shit place

analog spoke
#

lol

#

wait, do you mean smods wiki or me?

wintry solar
#

it's called before the card gets given any of the properties of the edition

#

I mean the code 🤣

analog spoke
#

lol, hehe

#

lmao, this keeps happening klasnfksdn

daring fern
analog spoke
wintry solar
#

no these functions are basically useless for using values

analog spoke
#

nsdhf

#

so, uhh, does add to deck work here or? lol, idk what to do here lol

#

translating a joker effect into an edition effect is hard lmao hehehe

analog spoke
#

idk what to do now lmaoo hebjdajs

wintry solar
#

do something else and wait until we fix it 🤣

analog spoke
#

lmaoo

#

ok lol, hmm

#

well, back to the drawing board on what to make this effect do I guess lmao

torpid plume
#

hey y’all- looking for anyone willing to help me out w my balatro mod idea in #1371168036740137070. i’m specifically in need of coding expertise since i quite literally dont have the time this summer to learn how to code in this language 💔

split cairn
#

How can I stop this from happening? The joker's effect is instantly winning the blind, like Gaming Chair from Polterworx, but the playing cards always get bugged like this and I don't know what to do

analog spoke
#

ahh, sorry, didn't see u were offline, lol

midnight coyote
#

do i use love.graphics.newShader

#

or just feed the game GLSL code

placid star
#

does G.deck.cards hold an array of every card even whilst some are drawn to hand?

primal robin
#

Wait wait wait, Balatro basically doesn't support multiple text inputs on a screen properly?

#

Like, I'm selecting 1 of 3, all of them became looks like they're selected

#

What a heck

quartz ravine
#

hi dudes, whats the path to the balatro save file for windows? I want to back up my file and then try the mod as a new user to hunt for buggoees

red flower
red flower
red flower
split cairn
red flower
split cairn
#

the delay wasn't working anyway, i forgot to erase that

sleek cliff
#

Are there examples to create a brand new planet card?

red flower
quartz ravine
red flower
proud moon
#

does anyone know if there is a variable or context that watches for then a joker's sell cost has been altered?

red flower
red flower
proud moon
#

youve got quite the number of events queuing up over there lol

split cairn
red flower
#

you can add it in the middle of trigger and after but also that's not what I said at all lol

#

can you copy the code here

sleek cliff
red flower
#

you can create one if you want

sleek cliff
#

oki, just making sure :)

split cairn
# red flower can you copy the code here
   calculate = function(self, card, context)
        if G.STATE ~= G.STATES.SELECTING_HAND then
        G.E_MANAGER:add_event(Event({
            trigger = 'after',
            delay   = 0,  
            func    = function()

                G.GAME.chips        = G.GAME.blind.chips
                G.STATE             = G.STATES.HAND_PLAYED
                G.STATE_COMPLETE    = true
                end_round()      
            return true
            end
        }))
        return true
        end
    end,
``` is this what you wanted?
red flower
#
calculate = function(self, card, context)
    if context.setting_blind and not context.blueprint then
        G.E_MANAGER:add_event(Event({
            trigger  = 'after',
            delay    = 0,
            blocking = false,
            func     = function()
                if G.STATE == G.STATES.SELECTING_HAND then --edit
                    G.GAME.chips     = G.GAME.blind.chips
                    G.STATE          = G.STATES.HAND_PLAYED
                    G.STATE_COMPLETE = true
                    end_round()
                    return true
                end
            end
        }))
    end
end
#

im stupid lol

#

should be G.STATE == G.STATES.SELECTING_HAND

midnight coyote
#

i added an edition, added a shader, but the shader doesnt render

#

i used an example shader so i could see how it works

#

but its not. going on the card

#

thats the shader

#

and here's the edition

#

?? whats uo

#

up**

split cairn
sleek cliff
#

So I have the code in, but the planet card isn't yet showing up

hybrid shadow
# sleek cliff

may be a newbie question but is in_pool true by default if it isnt listed in the code?

sleek cliff
#

uhhhh, idk myself lol, probably is?

hybrid shadow
#

also do you intend for your planet card to be purchased in the shop bc if so then you should probably list a cost

sleek cliff
#

true true

analog spoke
#

I know there's a page of example jokers somewhere, where it's all the base game jokers rewritten through steammodded (or something like that), but, is there an equivalent of it for the base game editions? I'd love to check how Negative is made

#

(I mean the effects of the edition, not the shader btw)

willow plinth
primal robin
#

Supports if you pass extended_corpus = true

midnight coyote
#

vec4 final_color = vec4(color, clamp(test.x, alpha * (1.0 - pow(radius, 2.0)))); why's it bitching about clamp

hybrid shadow
# sleek cliff

idrk what else to say that might help, but make sure you have can_use in there so its usable

midnight coyote
#

okay hm

#

hold on

#

oh i messed up the func

red flower
midnight coyote
#

WHY ARE MY EDITIONS NOT LOADIN G IM GONNA GO BONKKERRRSSS

#

does it need to be a .fs fike

#

file

#

yup

#

it does

#

FUCK

#

not the intended effect but alright

sleek cliff
red flower
sleek cliff
#

Oh, damn

red flower
#

assert(SMODS.load_file("path to file.lua"))()

sleek cliff
#

Ohhh

native zinc
shut crater
#

anyone know how to check if context.other_card is debuffed?

midnight coyote
#

can someone experienced in shader magic explain why this isnt rendering

red flower
shut crater
#

debuff doesn't show up in vscode

red flower
#

.debuff

midnight coyote
#

what the fuuuccckkk

shut crater
#

remember kids, always return in your hooks

#

or else you'll get weird bugs you can't track down

young mirage
#

guys i still can't figure out how to get negative mult to show up

#

i thought it was in scale_number but i guess it's not being called at all??

#

and when i call scale_number from game.lua it just returns nil no matter what

shut crater
#

I can send you my fix but it's likely to be unnecessary soon

young mirage
#

alr ill look at it

shut crater
#

like do you want me to send it

young mirage
#

yea

shut crater
#

hook:

-- hook to fix scaling for negative numbers
local scale_number_ref = scale_number
scale_number = function(number, scale, max, e_switch_point)
  if type(number) == "number" and number < 0 then
    number = math.abs(number) * 10
  end
  return scale_number_ref(number, scale, max, e_switch_point)
end

patches:

# Makes negative chips work
[[patches]]
[patches.pattern]
target = "functions/button_callbacks.lua"
pattern = '''if not G.TAROT_INTERRUPT_PULSE then G.FUNCS.text_super_juice(e, math.max(0,math.floor(math.log10(type(G.GAME.current_round.current_hand.chips) == 'number' and G.GAME.current_round.current_hand.chips or 1)))) end'''
position = "at"
overwrite = true
match_indent = true
payload = '''if not G.TAROT_INTERRUPT_PULSE then G.FUNCS.text_super_juice(e, math.max(0,math.floor(math.log10(type(G.GAME.current_round.current_hand.chips) == 'number' and math.abs(G.GAME.current_round.current_hand.chips) or 1)))) end'''


# Makes negative mult work
[[patches]]
[patches.pattern]
target = "functions/button_callbacks.lua"
pattern = '''if not G.TAROT_INTERRUPT_PULSE then G.FUNCS.text_super_juice(e, math.max(0,math.floor(math.log10(type(G.GAME.current_round.current_hand.mult) == 'number' and G.GAME.current_round.current_hand.mult or 1)))) end'''
position = "at"
overwrite = true
match_indent = true
payload = '''if not G.TAROT_INTERRUPT_PULSE then G.FUNCS.text_super_juice(e, math.max(0,math.floor(math.log10(type(G.GAME.current_round.current_hand.mult) == 'number' and math.abs(G.GAME.current_round.current_hand.mult) or 1)))) end'''
#

I will once again disclaimer that these fixes were rejected by the SMODS team

#

(probably cause they're kinda hacky)

#

but they do, in fact, work

young mirage
#

thanks a lot

#

so you need to put overwrite = true if you want to replace code?

shut crater
#

oh wait

#

you mean for patches

#

yes

young mirage
#

ah

#

that would have been nice to know

shut crater
#

rip

#

idk what position = "at" does if you don't include overwrite = true, I've never checked

#

I've just always seen them together

vast fractal
#

is there a list of keys of all vanilla jokers/consumables/vouchers and such ?

orchid thunder
#

Does iterating through G.deck start from the top of the deck

#

Like is G.deck[1] the next card that is going to be drawn

rustic swallow
#

anyone know why this doesnt work

#

it doesnt add X3 chips when all cards held in hand are hearts or diamonds is what i mean by that

shut crater
#

does it display the message?

rustic swallow
#

no

#

im pretty sure red_suits == all_cards is never true

#

for some reason

shut crater
#

you have a context check inside of a context check

rustic swallow
#

oh

#

i see

#

thanks

torpid plume
#

hey y'all
i'm trying to make a joker that's "two-layered" like the basegame Legendaries, and i have no idea how to code it to grab the right things from the spritesheet. is there anywhere i can find resources for this? i checked the steamodded github wiki but didnt see anything

#

if anyone can help out feel free to dm me

shut crater
#

pos for base sprite, soul_pos for floating layer

#

I eblieve

brisk rose
#

does if not card.edition.type == "negative" or not card.edition then logic right if I want it to act if the edition is anything besides negative, including nothing?

torpid plume
shut crater
#

I think is what you want

#

actually demorgan's law says they're equivalent

#

so yeah go for it

#

except use ~=

#

and also I think the card.edition check needs to come first to nil check

#

does anyone know if there is support to put stuff like chips and mult on a joker the way hiker puts chips on playing cards?

shut crater
brisk rose
#

whoops I'll remove the first if

#

lol

#

the benefits of sharing your code as you work

shut crater
#

I think I was thinking of editions

#

sorry

hybrid shadow
#

its fine

midnight coyote
#

is it negative or e_negative

shut crater
#

in what context

scarlet thorn
torpid plume
#

hey gang, so. for this joker i'm working on, the whole deal with it is "for every stone card destroyed, gain []X mult"
im tryin to figure out where i'd find the code that does that, and i am having very little luck

midnight coyote
#

right

#

and then check the card being destroyed’s enhancement?

shut crater
#

are you looking to do it glass card style where it's cumulative for the whole run, or lucky cat style where the joker needs to be present

torpid plume
#

this is my first foray into balatro modding so unforch im going to be limping along through this
i'm looking to do it Lucky Cat style

#

i have zero coding experience so i am doin my best rn

shut crater
torpid plume
#

i dont know how to do it too well, no 😔
and i would like to learn for myself but i cant seem to find any real definitive guide to it

shut crater
torpid plume
#

yeahh ik :(

#

but i am determined

shut crater
torpid plume
#

👁️ thank you

shut crater
#

basically if you want your joker's effect to trigger at a specific time, you need to use the right context

shut crater
torpid plume
#

im seeing Canio's code listing "remove_playing_cards" as part of its context?

shut crater
#

(when I say "use" a context I just mean have an if statement checking context.something)

torpid plume
#

i see, okay

shut crater
#

I haven't written that specific type of effect before so idk

#

try it and see what's up

#

also install the DebugPlus mod if you haven't

torpid plume
#

ill try n mess around with this stuff a bit before bed. also thank you i will grab that

#

im guessing there isnt a "stone cards" variable like there is a "face_cards", so do you know how i'd check for the enhancement?

shut crater
#

SMODS.has_enhancement(removed_card, "m_stone")

#

oh wait

#

there

#

if you're using canio as a guide

torpid plume
#

would it be okay if i DMed you to continue this so i can try n keep track of this and come back to it later?

shut crater
#

sure, or we can make a thread here

torpid plume
shut crater
#

DMs is fine

torpid plume
#

its not lettin me DM you so i think youll have to start it up

shut crater
#

uhh me either

brisk rose
#

wait

this function is used all the time in sprite.lua, which is y'know in the engine

#

but it's defined outside of the engine folder

#

in misc_functions.lua

#

is it just me or is that a thunk moment?

#

Am I crazy or is the draw_steps routine from the main game literally only ever used on blinda?

#

and thunk does it manually everywhere else?

frigid blaze
#

Can you tell me in which program it is better to make pixelation of your jokers?

timid zinc
#

Is there a way to make an enhancement or edition change the back of the card?

hasty mist
#

how do i check for cards played previously this ante

#

ah figured it out

#

nevermind

#

what did i do wrong here

faint yacht
#

context.other_card?

hasty mist
faint yacht
#

(cardpointer).ability.played_this_ante

hasty mist
#

huh

#

how does that fit into context.other_card

faint yacht
#

context.other_card is the currently evaluated card.

#

context.other_card.ability.played_this_ante

hasty mist
#

i see

#

awesome, works

#

thank you!

flint fern
#

guys how do i texture pack a modded thing (in malverk)

manic rune
#

does CardArea count as an object?

fleet bluff
#

trying to learn lua with balatro modding but im now stuck on trying to retrigger discards (pictured: my non-working solution)

#

keeps crashing here

#

which is THIS line which has nothing to do with discards

#

am i doing something wrong

daring fern
brisk rose
#

hmmm... I might be in a little deep, lol

#

but uh I guess an extern is not a uniform?

marble flint
brisk rose
#

it's for the card exporter thing

#

the code workds fine, it just breaks when i add this send statement

if send and card.edition then shader:send((edition_key or card.edition.type), send) end

#

it's adapted from the draw_shader function in the game

#

oh I see what's wrong I think

#

it must be trying to do this for editions other than foil, but I can't imagaine why

#

I'll share my whole code (I'm a degnerate and using notepad so it's messy), lol

#
 

 local output_root = SMODS.load_file("library/_common/output_root.lua")()


local function draw_sprite(card, sprite, shader, canvas)

         send = sprite.ARGS.send_to_shader or {}      
         local _draw_major = sprite.role.draw_major or sprite

        prep = sprite.ARGS.prep_shader or {}
       prep.cursor_pos = prep.cursor_pos or {}
        prep.cursor_pos[1] = _draw_major.tilt_var and _draw_major.tilt_var.mx*G.CANV_SCALE or G.CONTROLLER.cursor_position.x*G.CANV_SCALE
       prep.cursor_pos[2] = _draw_major.tilt_var and _draw_major.tilt_var.my*G.CANV_SCALE or G.CONTROLLER.cursor_position.y*G.CANV_SCALE

         shader:send('screen_scale', G.TILESCALE*G.TILESIZE*(_draw_major.mouse_damping or 1)*G.CANV_SCALE)
        shader:send('hovering',((_shadow_height  and not tilt_shadow) or _no_tilt) and 0 or (_draw_major.hover_tilt or 0)*(tilt_shadow or 1))
        shader:send("dissolve",math.abs(_draw_major.dissolve or 0))
        shader:send("time",123.33412*(_draw_major.ID/1.14212 or 12.5123152)%3000)
        shader:send("texture_details",sprite:get_pos_pixel())
        shader:send("image_details",sprite:get_image_dims())
        shader:send("burn_colour_1",_draw_major.dissolve_colours and _draw_major.dissolve_colours[1] or G.C.CLEAR)
        shader:send("burn_colour_2",_draw_major.dissolve_colours and _draw_major.dissolve_colours[2] or G.C.CLEAR)
        shader:send("shadow",(not not _shadow_height))
    if send and card.edition then shader:send((edition_key or card.edition.type),  send) end


    love.graphics.setShader(shader)

    love.graphics.draw(
        sprite.atlas.image,
        sprite.sprite,
        0,0,0,2,2)

    love.graphics.setShader()
    return canvas
end

local function output_rendered_image(card)
    local file_path = output_root .. "images/" .. card.config.center.key:gsub("?", "_") .. ".png"
    local w = 71 * G.SETTINGS.GRAPHICS.texture_scaling
    local h = 95 * G.SETTINGS.GRAPHICS.texture_scaling

    local canvas = love.graphics.newCanvas(w, h, { type = '2d', readable = true })
    love.graphics.push()
    local oldCanvas = love.graphics.getCanvas()
    love.graphics.setCanvas(canvas)

    oldshader = love.graphics.getShader()

    local exportsprite = card.children.center

    local shader = love.graphics.setShader()

    if card.edition and card.edition.type and G.SHADERS[card.edition.type] then
        shader = G.SHADERS[card.edition.type]
    else
        if card.edition then
            local edition_key = card.edition.key
            if edition_key and SMODS.Centers[edition_key] and G.SHADERS[SMODS.Centers[edition_key].shader] then
            shader = G.SHADERS[SMODS.Centers[edition_key].shader]
            end
        end
    end

    draw_sprite(card, exportsprite, G.SHADERS.dissolve, canvas)

    if shader then
    draw_sprite(card, exportsprite, shader, canvas)
    end

    
    love.graphics.setCanvas(oldCanvas)
    love.graphics.setShader(oldshader)
    shader = love.graphics.setShader()
    love.graphics.pop()
    if love.filesystem.getInfo(file_path) then
        love.filesystem.remove(file_path)
    end
    canvas:newImageData():encode('png', file_path)
end

return output_rendered_image
marble flint
#

i so desparately want to rewrite balatro's rendering pipeline to be un-shit but it's not worth it

wheat pulsar
#

hi is there any way to mult chips?
or i need to do a new function?

marble flint
brisk rose
brisk rose
runic pecan
#

Which one looks better?

manic rune
#

how do i add text ui on top of a card

#

this one currently doesnt work

weary sentinel
manic rune
#

like, i want it to look something like this

#

🤔

weary sentinel
#

flush locking you into 5 card hands makes it worse in most runs

runic pecan
weary sentinel
#

yeah

#

wild cards sound like they'd go crazy with that

#

is it a voucher or a joker?

wheat pulsar
runic pecan
weary sentinel
#

I want to make a mod but have no experience with lua or coding in general
but I am decent at making joker art and concepts, so if anyone would want to work together on a project let me know

subtle hawk
weary sentinel
#

I spent like two hours trying to figure out why the one joker I tried to impliment wasn't doing anything 😭

#

I'm sure it could be worse but it would be nice just to have someone who knows what they're doing

brisk rose
#

From what I understand, with the shader object, the only way to get its key would be to iterate over the G.SHADERS?

#

more intengentially, I'm just gonna try to pass the draw_sprite funcion a variable for the shader's orginaal name as well

daring heron
#

how do i make this code delay when my tarot gives a joker by like 0.3 seconds like how soul does it?

#

right now it instantly gives it whenever you click use

native zinc
#
poll_question_text

poll_

victor_answer_votes

2

total_votes

3

victor_answer_id

3

victor_answer_text

seal()

victor_answer_emoji_id

1185774063138914364

victor_answer_emoji_name

gold_seal

daring heron
#

tried this but that doesnt work

frosty rampart
weary sentinel
#

could anyone tel me why this joker does nothing whatsoever when scored

frosty rampart
#

for the code snippet i wrote out, note that the delay being 0.4 is pulled from referencing the soul itself, and the function in the event has to return true to indicate that it completed properly

daring heron
#

what part should i replace it with? i tried replacing it with if (#G.jokers.cards + G.GAME.joker_buffer) < G.jokers.config.card_limit then SMODS.add_card{set = 'bananas'} end but that didnt work

frosty rampart
#

my code snippet's if statement is the same as the if statement in your original screenshot, the whole event replaces just the single add_card call

daring heron
#

like this?

frosty rampart
#

no, you don't need the second copy of the if statement

frosty rampart
weary sentinel
#

ohh

daring heron
#

so like this?

frosty rampart
daring heron
#

hm?

frosty rampart
#

it won't affect the code running, but for readability purposes there's some indentation that's off (the first and second ends, as well as the })), should technically each be one tab to the right. i'm kinda just nitpicking but readable code is important)

weary sentinel
#

is there a way to just give yourself a joker with dbugplus

native zinc
#

collection

#

press 3

frosty rampart
#

^ hover over it in the collection and press 3
depending on your settings you might need to press ctrl-3

weary sentinel
#

thank you!

daring heron
#

oh and Q or ctrl-Q to change the edition

daring heron
#

nope haha

weary sentinel
#

you guys are helping so much
also sorry in advance for the really simple questions I've never really worked with code before

daring heron
daring heron
weary sentinel
daring heron
#

yeah you're gonna see that a lot

weary sentinel
#

at least it's doing something now

#

is there a simple fix to this or does that mean something's broken

frosty rampart
# daring heron

thank you for including the line numbers in your screenshot
this is an issue with your add_card call and actually i'll take the blame on this one, i glossed over the fact that it was curly braces instead of parentheses in your initial screenshot

daring heron
#

hah don't worry it happens

#

i'll try to make include the line numbers more often

weary sentinel
#

i've narrowed it down tho this specific pointer

#

card is defined as self two lines under

frosty rampart
weary sentinel
#

alright

#

I don't think that will change anything but it's good to know it's unnecessary lol

daring heron
#

honestly kinda wanna make my own edition but i really dont feel like learning a whole new coding language ngl

weary sentinel
#

changing play and repetition to an or statement fixed the joker not scoring

frosty rampart
daring fern
#

Is it possible to get SMODS.calculate_effect to run when it should instead of before everything?

daring heron
#

last problem, it seems to not be random which joker you get

#

it always gives blue java, red dacca and then just gros michels

daring heron
#

on every seed

weary sentinel
daring fern
weary sentinel
#

updated that, crash persists

frosty rampart
#

you also can still delete the whole context.cardarea == G.play or context.repetition like i told you to already, it's completely unnecessary
i dunno how to fix the actual problem at this point but it's like 2:30 in the morning and i need to get some sleep

daring fern
weary sentinel
frosty rampart
weary sentinel
#

I'm building this off an example joker from a modding tutorial 😭

daring fern
weary sentinel
#

idk what's necessary and not

daring heron
daring fern
# daring heron

Cavendish doesn't show up because it's not in the pool yet, are you 100% confident that it is not random?

daring heron
#

not 100%, but it seems like it, and why isnt cavendish in the pool? i put it in there

daring fern
weary sentinel
brisk rose
daring heron
brisk rose
#

here's how they were all looking yesterday

daring fern
daring heron
#

how do i do that?

daring fern
# daring heron how do i do that?
local bananakeys = {
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
    "j_cavendish",
}
local chosenbanana = pseudorandom_element(bananakeys, pseudoseed('banana'))
SMODS.add_card({key = chosenbanana})
daring heron
#

inside the tarot card or the pool?

daring fern
daring heron
#

alright

weary sentinel
daring fern
daring heron
#

is there any way i can make the pool only on 1 place so i dont have to edit each one?

#

i'm planning on adding multiple that use these

weary sentinel
daring fern
daring fern
weary sentinel
daring heron
#

like i just put this outside of the tarot?

daring fern
daring fern
daring heron
#

awesome

weary sentinel
brisk rose
daring fern
brisk rose
# brisk rose

my message got added to the file, lol, but it's best it sent as a file being so long

#

can anyone help me figure out why the negative simply isn't negativing? it looks like it's applied wice, but idk how or why that'd be

#

is what i said

weary sentinel
daring fern
weary sentinel
# daring fern Yes, go into the lovely window and scroll to above the crash.

(1) Lua local 'handler' at file 'main.lua:612'
Local variables:
msg = string: "[SMODS _ "src/loader.lua"]:563: [SMODS TackyJokers "TackyJokers.lua"]:120: '}' expected (to close '{' at line 55) near 'calculate'"
(*temporary) = Lua function '?' (defined at line 31 of chunk [SMODS _ "src/logging.lua"])
(*temporary) = string: "Oops! The game crashed\

daring fern
#

Then press CTRL F and find it.

faint yacht
daring fern
#

If I were to hook SMODS.find_card and find_joker would that be sufficent for my joker to count as every joker?

weary sentinel
daring fern
faint yacht
#

-# To be fair, we ain't seeing the full thing either.

weary sentinel
#

😭 I've spent 6 hours trying to add one simple joker
I don't think modding is for me

#

it is four in the morning though, so I need to sleep

weary sentinel
#

I'll probably just look to commission someone to make them

weary sentinel
#

premise being a mix between hiker and hack

spice scroll
#

so itd be something like

weary sentinel
#

I used their page for that, yeah

native zinc
#

is there a way to get a random integer between x and y using pseudorandom

daring fern
native zinc
#

thank kyooou.

#

-# why isn't that in the docs

daring fern
spice scroll
# spice scroll so itd be something like
            if table.contains(context.scoring_hand, v) and context.other_card:get_id() >= 2 and context.other_card:get_id() <= 5 then
                v.ability.perma_mult = v.ability.perma_mult or 0
                v.ability.perma_mult = v.ability.perma_mult + card.ability.extra.mult_mod
                card_eval_status_text(v, 'extra', nil, nil, nil, {message = localize('k_upgrade_ex'), colour = G.C.MULT, func = function() card:juice_up() end})
            end
        end```
brisk rose
# brisk rose

and no,skipping the first render with the normal shader doesn't help (it does help some others though)

#

I think "ignore_base_shader" is exposed on editions, i need to add support for that

spice scroll
daring fern
icy oak
vocal cedar
#

hello my moddera

#

no questions today just hello

spice scroll
daring fern
#

Why does this show up sometimes?:

#

^0 Mult

regal ether
#

what's the error for when a card doesnt have loc txt

daring fern
regal ether
#

hm

daring fern
#

Sometimes it crashes.

runic pecan
#

Which side of F's look better?
Edit: 2️⃣ it is! Thanks for voting!

daring fern
#

If I had a joker that was every joker's update function at the same time, would that cause issues?

zealous glen
daring fern
#

Also how does one prevent a joker from being destroyed in all ways?

runic pecan
#

Which one looks better? (Both of these fonts are from vanilla consumeables texture)
Edit: 1️⃣ it is! Thanks for voting!

daring fern
#

Does anyone know what could be causing this crash?

red flower
#

or something

daring fern
slender island
#

why am i always getting broken texture?

daring fern
#

Same with x

slender island
daring fern
slender island
#

||english is not my first language||

slender island
daring fern
# slender island

The pos should not be how many pixels to get to the image, it should be what row and column it needs to look for.

slender island
#

ohh

runic pecan
#

Does the second letter look like a Q enough?

slender island
midnight coyote
#

hmm

#

i see

brisk rose
#

and here's my current code, though it doens't seem to behave much different

#

I've pretty much copied Card:draw, Sprite:draw_shader and Sprite:draw_self exactly, and negativee still isn't negativing

#

I'm beggining to suspect the default values for things like hover and shadow make it invert from the viewing angle

#

also don't know if there's a consistent place where the flag to ignore the base shader is stored

#

for some iof the modded editions that need it

midnight coyote
brisk rose
midnight coyote
brisk rose
# midnight coyote worth a shot if your stumpedd

shiny but no negative. I added

        shader = G.SHADERS.negative_shine
        shadername = "negative_shine"
        draw_sprite(card, exportsprite, shader, canvas, shadername)
    end
    ```

right after the original edition shader draw
midnight coyote
#

hm alrigh

cyan lagoon
#

what am i missing here?

#

this destroys a card but leaves behind some kind of phantom card

red flower
cyan lagoon
#

so i return the local of the random card right?

#

i think i tried that

#

imma give it another shot

cyan lagoon
#

what do i do with that context?

#

return true or...

red flower
#

it says it in the docs

polar star
#

heya! first time making a mod, just wanna add some custom jokers. We wanted to keep the jokers in seperate lua files to avoid a mess, but it seems you need to put a main file in the .json for the mod to work in game. We're not sure how to activate all our joker lua files from a single main file, any advice here? or is it just better to compromise and put everything in one lua file

bold sleet
#

SMODS.load_file(file) well, loads a given file.

brisk rose
#

is there any way y'all know to check the disable_base_shader flag for an edition?

bold sleet
# bold sleet Here an example on how to work out exactly what you just asked.

In the screenshot:

  • main.lua - The file your metadata (.json) file tells SMODS to load by default.
  • mod_contents - A table (list) of every file to load in your mod.
  • content/... - The files containing the code for various things, where your jokers would be.
  • SMODS.load_file - Tells SMODS to load a certain file for your mod. The first (and only in the screenshot) argument tells SMODS where the file is located inside your mod's structure. Not certain if it is relative to the file it is being executed or the root of your mod. In this case, does not matter.
polar star
bold sleet
#

np

bold sleet
bright axle
#

how can know if a pokerhand is alternating betwen two suits?

manic rune
#

what function is run when you enter a blind?

bold sleet
#

calculate, context.setting_blind

manic rune
#

...thats not a function, but i guess i can work with that, thanks

bold sleet
#

hold on

manic rune
#

wuh

bold sleet
#

mm?

prime beacon
#

Hi chat, there's no pinned here which is kinda what I was hoping for. Is there a good starting point?

bold sleet
daring heron
#

how do i make a joker that gives a negative gros michel each blind selected?

prime beacon
#

Apologies, thankyou

daring fern
bold sleet
#

someone beat me to it lmao

slender zenith
daring heron
daring fern
daring heron
#

alright, how do i make this joker not avaliable in the shop?

manic rune
#

...what happened to this card???

#

whats the (?) under it 😭

daring fern
#

In the joker.

bold sleet
#

When does that function execute?

#

Is it executed only when the joker is defined?

daring fern
manic rune
#

why is this one broken

#

but this one isnt

#

what

red flower
#

one is discovered and the other one not?

#

it seems to have the undiscovered ?

primal robin
#

Where's smods thread?

daring heron
#

do i still need this part or is it unnecesary

daring fern
daring heron
#

this is what i want it to do

daring fern
manic rune
daring heron
bold sleet
#

joker code?

light crow
#

Anyone know if there is a way to change the effects of the vanilla decks?

bold sleet
#

Lovely patch, almost certainly.

daring heron
bold sleet
#

Either that or hook functions.

daring fern
robust glacier
#

is there a way to change the size/position of a stake sticker on a joker?

daring heron
daring fern
daring heron
#

well it doesnt make any jokers rn

#

do i need to set the elapsed_round to something else?

daring fern
daring heron
#

huh?

#

oh

#

so like, this?

daring fern
daring heron
#

just doing this over and over again lol

daring fern
brisk rose
#

hmm... experiementing with manyally specifying shader values.... I don't think that's qyuite right

rapid stag
#

what am i doing wrong here? why does context.other_card just refuse to exist within an event? how do i make this work cirLost

i don't know how i can pass context.other_card into the event in a way that will make it exist

daring heron
daring fern
slender zenith
#

im very new, but how would i trigger a joker when a card is enhanced in any way?

daring heron
#

so like this?

daring fern
daring heron
#

okay now i'm confused

#

what do i put where

daring fern
daring heron
#

instead of?

polar star
#

trying to add a joker that gives extra mult to wild cards when scored, while it works without the wild card check, we haven't been able to make it work like this. We also tried using SMODS.has_any_suit(card)

#

so basically if we remove the has_enhancement if statement it activates for every card (as it should)

daring fern
rapid stag
#

you need to check context.other_card

polar star
#

ohh that's what that means 😭

slender zenith
#

i cant find anything on it

daring fern
daring heron
daring fern
rapid stag
red flower
daring heron
#

so like this?

daring fern
polar star
#

I feel stupid 😭

rapid stag
#

all good, we've all been there

polar star
#

it's ok tho, very useful information

#

yeah exactly :p

daring fern
daring fern
daring heron
#

oh, what do i do then

#

i thought i did it

daring fern
rapid stag
red flower
#

don't use context in an event

#

save that to a local

rapid stag
#

cirThink as in, i save the context.other_card to a local and reference that in the event function instead?

daring fern
daring fern
# daring heron okay so this
if context.setting_blind then
    G.E_MANAGER:add_event(Event({
        func = function()
                SMODS.add_card({key = "j_gros_michel", edition = "e_negative"})
            return true
        end
    }))
end
lofty sand
#

yo I'm trying to make a joker that adds chips for destroying cards, kinda like a shitty canio. only problem is, I can't find canio anywhere in the card.lua to reference, does anyone know canio's calculation function or where I could find it?

daring heron
#

so this.

daring fern
lofty sand
#

why localthunk

bold sleet
bold sleet
lofty sand
#

idk what that means but it sounds cool :)

bold sleet
daring heron
#

okay now the hard part, how do i detect how many gros michels have been destroyed specifically this ante and create that amount of negative cavendishes

bold sleet
daring fern
bold sleet
#

Make a variable for that uh... I think there is a context for destroying cards... you can get the destroyed card's key and if it is gross michel then add 1 to the counter...

daring fern
bold sleet
#

ah

#

Then no idea.

#

SMODS.take_ownership()

daring heron
#

wait so is it even possible or not?

daring fern
manic rune
#

patching would be the cleanest solution here

daring heron
#

no idea how to do that

bold sleet
#

Is there a how to patch lovely 101 anywhere?

lofty sand
bold sleet
#

It would be very convenient to know when and how to patch stuff.

manic rune
#

its in the lovely github i think

daring fern
daring heron
#

also this just doesnt display the message

manic rune
#

use SMODS.calculate_effect

bold sleet
#

the message should be outside the event

rapid stag
daring fern
daring heron
#

like this?

daring fern
bold sleet
#
calculate = function(self,card,context)
  if context.setting_blind then
    G.E_MANAGER.(...)
    return {message = ""} -- There are more clever and better ways to do it.
  end
end
rapid stag
wintry solar
#

Don’t use calc effect inside an event

red flower
agile prairie
bold sleet
#

add info queue

daring heron
#

well this doesnt work either

bold sleet
#

Also, {C:attention} for Wild instead of {C:dark_edition}

wintry solar
bold sleet
#

move the return {message = "Created!"} just above the end that closes the if context.setting_blind.

agile prairie
agile prairie
bold sleet
#

Hover over half of the tarot cards.

#

The extra info boxes that appear besides the main one, like for editions.

#

Stickers, etc.

rapid stag
agile prairie
#

ah true, will implement that later, thank you

bold sleet
#
loc_vars = function(self,card,info_queue)
  info_queue[#info_queue+1] = -- whatever
end
-- not 100% certain it is like this
daring heron
#

i think i broke it 😭

red flower
bold sleet