#💻・modding-dev

1 messages · Page 659 of 1

cerulean aspen
#

i still dont get it

reef bobcat
#

anyone know what i did wrong? the context individual seemed to have caused it to apply to each individual card, but idk how to make it trigger only once for the hand

cerulean aspen
#

wait do i put it here?

winter flower
cerulean aspen
reef bobcat
#

OK

#

NOW

#

it works as intended

cerulean aspen
kindred niche
#

This part crashes the game with the error "attempt to index local 'center' [a nil value]"
My assumption is I am doing the SMODS.add_card function incorrectly

stuck ore
#

I'm having some issues with pools, I'm trying to make a tarot that only spawns jokers from a pool of modded jokers but it isn't working and I'm not sure why SMODS.Consumable { set = "Tarot", key = "hamburger", loc_txt = { name = "Hamburger", text = { "Create a random {C:attention}Hamburger Joker{}", "{C:inactive}(Must have room){}", }, }, pos = { x = 0, y = 0 }, atlas = 'hamburger_1', use = function(self, card, area, copier) G.E_MANAGER:add_event(Event({ trigger = 'after', delay = 0.4, func = function() play_sound('timpani') SMODS.add_card{ set = "food_Hamburger", area = G.jokers } card:juice_up(0.3, 0.5) return true end })) delay(0.6) end, can_use = function(self, card) return G.jokers and #G.jokers.cards < G.jokers.config.card_limit end, }

    key = "food_Hamburger",
    default = "j_hamburger",
    cards = {
        j_hamburger = true,
    },
})```
Shouldn't this work?
stuck ore
stuck ore
#

damn sorry

kindred niche
#

All good

kindred niche
#

The key it is asking for is the full key in the localization file and I was only using what I stored when creating the object

stuck ore
#

ah gotcha

kindred niche
#

Unironically you helped because your 2nd code snippet

stuck ore
#

oh, happy to help

kindred niche
#

Sadly I cannot help with you issue in return

stuck ore
#

no worries

red flower
stuck ore
#

I feel, slightly moronic for such a simple solution but thank you a bunch

#

it worked perfectly, I just feel a bit dumb

kindred niche
#

How is the negative edition's effect calculated if not in the edition object

#

In vanilla remade it has no on_apply or calculate

#

My edition crashes when I enter the collection screen for editions so I am just wondering

torpid flicker
#

can you pause a animated atlas and set its frame?

kindred niche
#

I do not know much but if the atlas has the whole sprite sheet then you should be able to pick out specific ones. Not sure if I fully understand the question or am qualified to help at all though

torpid flicker
#

how do i do that though is the question

kindred niche
#

Oh

kindred niche
kindred niche
kindred niche
#

And if the animation will only pause on a certain frame then you don't need to count the frame its on cause you know exactly where it will be

torpid flicker
#

im trying to make a photosensitvity mode for my mod

#

i just cant get two atlases to work

#

so i thought pausing might

kindred niche
#

So instead of being animated, its paused?

#

I was thinking you wanted it to pause based on some condition

#

Not exactly sure how to implement it, but the frames variable could be based on some global variable

#

Like maybe ```lua
photosens = true -- Based on the player's settings

SMODS.Atlas{
...
atlas_table = function()
if photosens then
return "ASSET_ATLAS"
else
return "ANIMATION_ATLAS"
end
end,
}

#

I am not very experienced with lua so that could be entirely improper

torpid flicker
#

ill figure something out

kindred niche
#

Indubitably

urban wasp
#

any reason this doesn't work when {V:1} is used?

loc_vars = function(self, info_queue, card)
    return { vars = { colours = { HEX("2ecc71") } } }
end,
wintry solar
stuck ore
#

I'm trying to make this joker to only retrigger other jokers in a specific pool but I can't get it to work, how do I detect the set of a joker?

    key = "hamburge",
    loc_txt = {
        name = "hamburge",
        text = {
            "Retriggers all {C:attention}Hamburger{} jokers",
        }
    },
    blueprint_compat = true,
    rarity = 3,
    cost = 8,
    pos = { x = 0, y = 0 },
    atlas = 'jokers_27',
    loc_vars = function(self, info_queue, card)
        return { vars = { } }
    end,
    calculate = function(self, card, context)
        if context.retrigger_joker_check and context.other_card.ability.set == "food_Hamburger" then
            return { repetitions = 1 }
        end
    end
}```
kindred niche
#

its checking its set

stuck ore
#

ah. what would be to check the pool?

kindred niche
#

Based on that I think

if context.retrigger_joker_check and context.other_card.config.center.pools.food_Hamburger then

#

Assuming food is the prefix of your mod

stuck ore
#

I'm not sure but it seems to crash claiming 'pools' [a nil value]

shell condor
#

trying to create a masochistic mod for myself where every blind is replaced with violet vessel. what would be the easiest way to go about this?

for clarity, i mean "every blind is violet vessel", not "every boss blind is violet vessel"

daring fern
kindred niche
#

Yeah that makes sense

stuck ore
#

Thanks a bunch, was getting myself in loops looking at the VanillaRemade but now I know going forward

daring fern
kindred niche
#

While youre at it make it so you can't skip for judgment and joker packs

#

Just to make it even harder if not impossible

#

I dont think without jokers you can even score high enough to win in the first few rounds so scratch my idea

#

Is there naming conventions for spectrals or is it just kinda misc compared to planets and tarots

granite raptor
#

is there a reason why the config doesn't change after a relaunch after changing config.lua? running eval print(SMODS.Mods.mod_id.config) doesn't show any change

daring fern
granite raptor
#

ah @_@ that makes enough sense

shell condor
#

do i just make that my main.lua?

daring fern
shell condor
#

alright

#

works as i expected, ty

loud crescent
#

Alright, thank you! Maybe im wrong, but i doubt that a native rust implementation exists for this particular algorithm they use, so either i write it myself (idk if im all to capable of that) or i just use lua for only the random number generation, which is definitly a lot easier, but requires a huge dependency. Unless you know of a smarter way of doing this i think ill go with the second option first and maybe implement it myself once everything else is done. And again, thank you and @red flower for the help!

#

(that was in reference to this)

stoic void
#

the joker on the right is meant to have a soul on

#

This is the spectrans.lua file

shell condor
wintry solar
stoic void
wintry solar
#

To add a soul sprite you need to tell Malverk which cards should have one

primal robin
#

When I'm calling :take_owership on a card, does this mean I'm blocking it for using on a same card for other mods?

#

I'm using it to setup custom atlas & pos for cards and dont want break other mods

primal robin
#

Okay cool

acoustic drum
#

Is there a way to check the current scoring hand's final score (after every card is triggered and plasma deck has equalized it)?
I need to check if it's over a threshold of chips and I've already setup some code to run on context.after but I'm not sure where I could find the current hand's score at.

wild patrol
#

too much?

#

couldn't figure out how to deal with the jimbo infestation so I set default to copycat

#

copycat joker lets chat vote on what joker it turns into

azure valley
#

Oh sorry you mentioned that

#

Still waking up.

primal robin
#

Example of AltTexture definition

stoic void
#

oh

#

Ive looked at other mods and I know how

#

nvm

#

oh

#

It is fucked up

#

Im just gonna jumble up my spritesheet for this to work

#

It works now!

cerulean aspen
#

i got 2 questions, 1 is why this isnt showing its actual image or joker image, and 2 how would i make it so that niko who spawns a god can let niko who is a god spawn in shop?

#

heres niko who is a god

rigid solar
#

Is there some simple way to check when a card is added to the shop? Like via buying Overstock for example

stoic void
#

both of the atlasses have the same key

cerulean aspen
stoic void
#

why is it hyperchips and hypermult

#

do hands have hyperchips and mult?

cerulean aspen
#

basically scalling ^4

stoic void
#

I dont know if that is how that works

cerulean aspen
#

when a card is scored increase the ^ by one

stoic void
#

it might be

cerulean aspen
#

so the next one its ^^

#

then the next is ^^^

#

and so on

stoic void
#

I know that bit

cerulean aspen
#

yes its made to be broken

#

and overpowered as hell

#

but im trying to make it really hard to get

stoic void
#

I mean to say why is it
not what is

cerulean aspen
#

thats why hes a god

#

(ima change name to niko who is a god and transcends all of time and space)

stoic void
#

im not sure

#

about what is wrong

cerulean aspen
#

okay so

stoic void
#

-# im not the best at this

cerulean aspen
#

it dosent lvl up high card

#

ah makes sense

#

neither am i

#

i messed up like 20 times jsut trying to figure out how to do the thing where if you have another joker THEN this joker can spawn

dapper sun
#

how do i get what card you're hovering over?

cerulean aspen
stoic void
# cerulean aspen heres niko who is a god

lets change the atlas on this:
change:

SMODS.Atlas {
  key = "niko",
  path = "heisgod.png",
  px = 71,
  py = 95 
}

into:

SMODS.Atlas {
  key = "nikogod",
  path = "heisgod.png",
  px = 71,
  py = 95 
}
#

and then in the joker code

stoic void
#

then change the atlas = "niko", into atlas = "nikogod",

cerulean aspen
#

okay ty

#

and then for the other one nikored?

stoic void
cerulean aspen
#

its a seal

stoic void
#

ah ok

cerulean aspen
cerulean aspen
cerulean aspen
stoic void
#

k

cerulean aspen
#

the other one still dosent show the right icon :(

cerulean aspen
stoic void
#

you should

cerulean aspen
stoic void
#

you dont need to

cerulean aspen
stoic void
#

that should work

cerulean aspen
#

oh wow

#

i actually hopefully did it right on my first try

#

nvm

#

it crashed

gaunt folio
#

trying to add a custom card to the title, much like how cryptid does? Something in this breaks, what can fix it

red flower
#

it has this feature

#

it just looks like the key is wrong there however

gaunt folio
#

thats actually sick

cerulean aspen
#

anyone know the correct way to format this? atleast the atlas part

#

or what im doing wrong?

red flower
#

all looks fine to me

#

what's the issue

cerulean aspen
red flower
#

what's the crash

cerulean aspen
#

this is the other joker if this is breaking it

cerulean aspen
red flower
#

ah it's missing a comma

#

before rarity

cerulean aspen
#

😭 i somehow always miss something

cerulean aspen
# red flower before rarity

alr now that we have that how do i make it so that if you have niko who spawns a god lets niko who is a god and transcends all of time and space apear in shop

red flower
#

you need to abbreviate these names lmao

cerulean aspen
#

OKAY

red flower
#

i think they already posted the in_pool function you should use before?

cerulean aspen
#

sorry caps

#

so

winter flower
#

dyslexia final boss
i already said before, use an in_pool function in niko (WIAG)

cerulean aspen
#

hmmm yes

cerulean aspen
red flower
#

that looks like it's inside calculate it needs to be outside

cerulean aspen
#

thius better?

red flower
#

yeah

#

now you're missing a comma before in_pool

#

do you have the lua extension installed

cerulean aspen
#

what extension?

red flower
#

that one

#

you should install it and right click > format

cerulean aspen
#

now im installing it

wintry crater
#

how would i check if someone's scoring is 2x the blind requirement? i know its possible but i dont know how to go about it

cerulean aspen
red flower
#

format document

winter flower
cerulean aspen
#

how did it just get so much shorter what the heck

wintry crater
wintry crater
#

like after you win

red flower
#

ah then it's that

wintry crater
#

if the final score is 2x the required amount

daring fern
wintry crater
#

okay so i messed something up

winter flower
wintry crater
#

yes

winter flower
#

because if you are,
you forgot a return true in the func = function()

wintry crater
#

oh

dapper sun
winter flower
#

holdo n

#

wait

dapper sun
#

is there a reason why you're doing 2 nested events?

cerulean aspen
#

to change sell value per round would i do like card.ablitiy.extra.sellvalue = card.ability.extra.sellvalue * card.ability.extra.change and then set a "sell value" thing in the table to card.ability.extra.sellvalue?

#

wait per hand not per round

wintry crater
daring fern
cerulean aspen
cerulean aspen
# daring fern No, you would add to `card.ability.extra_value`

if context.before and next(context.poker_hands['High Card']) then
card.ability.extra.hypermult = card.ability.extra.hypermult + card.ability.extra.change
card.ability.extra.hyperchips = card.ability.extra.hyperchips + card.ability.extra.change
return {
message = 'Upgraded!',
colour = G.C.RED,
would smth like this work? but instead of chips and mult extra value?

dapper sun
#

yes

cerulean aspen
dapper sun
#

?

#

the code you sent is presumably already in the calculate, right?

cerulean aspen
dapper sun
#

well yes

#

most joker behaviour would go in the calculate function

cerulean aspen
dapper sun
#

you missed an end after the calculate function

cerulean aspen
dapper sun
#

no

cerulean aspen
#

wait so yes comma or no comma?

dapper sun
#

no comma

#

but you can if you want, since it doesn't rly matter at the end of a table

cerulean aspen
#

okzy

#

ohhh okay

dapper sun
#

you should probably try to learn some lua fundamentals

cerulean aspen
#

welp new problem

cerulean aspen
dapper sun
#

you forgot to add a config table

cerulean aspen
#

oh

#

like this?

#

wait

#

i need to change the variables

dapper sun
#

it only needs to contain change

#

also

cerulean aspen
#

oh peak

dapper sun
#

it's just card.ability.extra_value

#

since it's an existing value in the joker

cerulean aspen
dapper sun
cerulean aspen
#

oh

cerulean aspen
dapper sun
#

show code

wintry crater
#

how do i make a challenge have the base blind size be larger than normal?

cerulean aspen
dapper sun
#

are you playing a high card

#

wait you said it gives the msg

#

unselect and reselect the card

#

idk

cerulean aspen
#

and it still dosent add mult

dapper sun
#

mult??

#

you wanted mult???

cerulean aspen
#

oh no

#

😭

dapper sun
#

you said you wanted sell value

cerulean aspen
#

mistpye mb

dapper sun
#

ah

cerulean aspen
#

yeah sell value not mult

dapper sun
#

well your code should make your sell value increase

#

hover over the card rq and type value get into the debugplus console

dapper sun
#

i don't see extra_value

cerulean aspen
dapper sun
#

no

#

that's why i'm confused

#

oh!

#

i just looked at egg's code

cerulean aspen
cerulean aspen
dapper sun
#

add card:set_cost() on the line after you set extra_value

cerulean aspen
#

like this?

dapper sun
#

no

#

empty brackets

cerulean aspen
#

huh

#

ohhh

cerulean aspen
#

and still dosent have extra_value

dreamy thunder
#

extra_value doesn't exist beforehand iirc ?

dapper sun
#

u sure?

dreamy thunder
#

i might be wrong

dapper sun
dreamy thunder
#

idk

#

cause im pretty sure i had an issue with extra_value being nonexistant

wintry crater
dapper sun
#

in that case

dreamy thunder
#

card.ability.extra_value = card.ability.exra_value or 0

#

something something

cerulean aspen
#

uh

#

what have i done wrong

dapper sun
#

?

#

just replace ur config table with this config = { extra = { change = 1 }, extra_value = 0 }

#

and don't forget the comma after

cerulean aspen
#

alr

dreamy thunder
cerulean aspen
#

uh

#

the entire thing is yellow

daring fern
dapper sun
#

you forgot to remove the extra } }

#

which was from the old config table

dreamy thunder
#

i just tested the extra_value being nonexistant

#

i was wrong

#

it does exist

cerulean aspen
dreamy thunder
cerulean aspen
#

and its still not working :(

dreamy thunder
#

that makes sense

#

you're setting it to 0

#

card.ability.extra_value is not the sell cost, rather its the value to add on the sell cost

#

so its always 0

#

if nothing has been done to change that

wintry crater
dreamy thunder
#

so you're doing card.ability.extra_value = 0 * 1

cerulean aspen
#

im trying to think

#

but im not able to think of a solution

dreamy thunder
#

what are you trying to do?

cerulean aspen
#

multiply sell value

dreamy thunder
#

like double it or something?

cerulean aspen
#

and give the sell value of this card at the end of the ante

dreamy thunder
#

i mean you can make the extra_value 1 before doing anything but like

cerulean aspen
#

its suppose to be broken

#

and overpowered

#

bc for some reason it is REALLY hard to find niko who is a god

dreamy thunder
#

no the sell value would only incrase by 1 and then never again

#

if you do that

#

you are till multiplying by 1 so idk

lusty marten
#

how can i draw a wiper in run info?

cerulean aspen
#

i have it so

#

when you play a highcard change increases

#

i hope

#

this is code for it @dreamy thunder

dreamy thunder
#

oh so the change increases then multiplies the sell cost by the increased change

cerulean aspen
#

how would i do that

dreamy thunder
#
  card.ability.extra.change = card.ability.extra.change + 1
  card.ability.extra_value = card.ability.extra_value * card.ability.extra.change
#

probably

#

and change the extra_value = 0 in config to 1

cerulean aspen
#

alr

#

YES IT WORKS

dreamy thunder
#

nice

cerulean aspen
#

thank you

dreamy thunder
#

np

cerulean aspen
# dreamy thunder np

how would i make it give 1/2 of its sell value (or extra value) when beating the boss blind?

dreamy thunder
#
if context.end_of_round and context.main_eval and context.beat_boss then
    return{
        dollars = card.sell_cost/2
    }
end
cerulean aspen
#

ah okay ty

dreamy thunder
#

should be before the underlined end

cerulean aspen
#

idek how i mess up so bad so many times 😭

dreamy thunder
#

probably worse than you

wintry solar
cerulean aspen
#

ah okay

cerulean aspen
dreamy thunder
cerulean aspen
dreamy thunder
#

wdym?

cerulean aspen
#

like

#

lets say for niko who is a god

#

you need to sacrifice 2 jokers to let him actually do anything

#

like before you sacrifice 2 jokers, hyperoperator dosent increase

#

and he dosent addmult or chip

#

but once u do sacrifice he does all that

#

i might be making this a little more complicated then i should

dreamy thunder
#

do you need to use the joker to sacrifice other jokers or can any destruction increase it

cerulean aspen
dreamy thunder
#

you could add a button to it if you want it to destroy cards anytime

#

then increase a value like "change" you used for extra_value to keep track of how many were destroyed

cerulean aspen
#

hmmm okay

dreamy thunder
#

and add an idk if card.ability.extra.value >= 2 before the joker's effects

cerulean aspen
#

hmmm okay

#

ill make it so you can either sacrifice like 15 rare, or reroll of hell to get it

#

, and 2 legendary

dreamy thunder
#

here's the guide for joker buttons

GitHub

Contribute to nh6574/VanillaRemade development by creating an account on GitHub.

#

-# and ofc it requires some UI knowledge

cerulean aspen
short fulcrum
#

how would I change the types of playing cards that can appear in the shop and standard packs? I've been trying to make a Joker that makes it so only Aces can appear, but I've been unable to so far

wild patrol
#

Promise you it's not as confusing as u think

cerulean aspen
wild patrol
#

That's coding baby

#

Even I don't understand half of it

#

It just works

cerulean aspen
cerulean aspen
#

dawg this is too confusing

wild patrol
#

if my dumbass can do it so can you

#

still trying figure out how to remove the damn sell button

lusty marten
#

hey, how can i make a wipe in run info

daring fern
short fulcrum
gilded narwhal
#

how do i make a card debuff itself permanently

#

when i use just set_debuff it only lasts until the end of round

short fulcrum
daring fern
gilded narwhal
#

thats convenient

dreamy thunder
#

before making any new ones

wild patrol
#

I tried didn't work

#

Plus the defuse button has basically been added to the keypad

#

so seems redundant to keep both

dreamy thunder
#

i see

wild patrol
#

plus we agreed on a joke the first bomb to spawn can be sold

#

then the rest are eternal

#

as a small troll

quick scarab
#

Update, I kinda went back to the code and tried doing step by step until I encountered a crash that seems to be related to the re_value of the slider in the config, I don't now what it's causing it

spiral mural
#

i thought that dynatext wasn't supposed to scale 🤔
(translation: dynatext if it was good)

#

ignore the fact it's like that

#

how do i upgrade a hand before its scored

tranquil cypress
#

in context.before you can do
SMODS.smart_level_up_hand(card, "High Card", nil, amount)

#

amount being the amount you want to level it by

daring fern
#

wintry crater
#

since G.GAME.last_tarot_planet only works for vanilla consumables how would i make something similar for my added consumables?

red flower
#

and save it to G.GAME.modprefix_something

loud crescent
#

how is the sort_id of card determined, or specifically in what way is G.P_CARDS sorted in pseudorandom_element(G.P_CARDS, pseudoseed('erratic'))?

dapper sun
#

how do i change the blind requirements?

primal robin
loud crescent
#

oh, and in what order are the cards created at the start of the game? i just assumed that it would be something like the combination of all suits x all ranks, (like 2 of Spades, 3 of Spades, ..., Ace of Diamonds or something like that) but that doesnt seem to be the case as just that gives me a deck of all Aces of Diamonds instead of all 10s of Spades on the bugged eratic deck seeds

primal robin
#

i.e. it creates all hearts, then all clubs, etc

loud crescent
#

oh right, i shouldve just looked it up before asking, sorry 😅

primal robin
#

After that, they're sorted

#

function used for sorting is kinda meh

#

But, in case of erratic deck, it works differently

loud crescent
#

do you mean this?

primal robin
#

Instead of processing cards in order, erratic polls random card, and repeats for every card

#

So basically order is random

#

I mean just check Game:start_run function and scroll down a bit

#

You'll find how they're sorted, and how erratic deck works

loud crescent
#

and how exactly is G.P_CARDS sorted inside of pseudorandom_element(...)? it doesnt have a v.sort_id, right? (sorry if im being an idiot 😭)

primal robin
#

pair of { k = k, v = v } is created, and sorted by a.k < b.k

#

After that, seeded math.random(#entries) is called which returns index we rolled

#

you did that in your code above

#

Or rather literally copy-pasted it

loud crescent
#

and the indexing is trivial, rn im just trying to figure out how to sort the list in an intelligent way because the way the game does it seems kind of... odd, but i still want it to return exactly the same thing as the games function would

primal robin
#

Wdym it's odd

#

it gets entries of table and sort it by key basically

loud crescent
#

yeah its more about the whole sort_id thing and such

#

anyways

#

you helped very much, thanks a lot!

primal robin
#

sort_id used only for cards specifically

#

I.e. if it's card in already existed deck or in hand, in joker slots

#

It's used to make sure hits like wheel is based on joker itself rather than joker's position

#

So it always hit same card regardless of position

#

You're not dealing with cards, only with regular tables of data

loud crescent
#

ohhh yeah that makes sense

sleek valley
#

currently trying to make my card spawn a single tarot card when most played hand is scored
but right now it spawns for every played hand and, if the hand isnt the most played, it spawns two

#

i followed the instructions in the vanilla remade wiki, but it's still messing up

primal robin
#

You're creating a tarot in loop; instead you should make it after the loop, after you calculate most played hand

#

Then do check is hand played is most played and if yes, create card

sleek valley
#

unless you mean smth else?

next timber
#

how do i get a list of all jokers in a certain pool?

daring fern
next timber
#

sick thx

#

and will that be returning the keys of jokers or the actual joker objects

frosty rampart
#

actual joker objects iirc

next timber
#

ok neat

idle plaza
sleek valley
idle plaza
#

👍

rapid stag
#

do jokers not unlock & discover properly when you create them via set_ability?

because i've had two jokers now in my collection fail to properly unlock & discover when obtained this way

wild patrol
#

is there a smod feature for custom card skins?

#

or themes

rapid stag
#

use malverk

#

oh wait

#

do you mean playing cards or other cards

wild patrol
#

yeah that's it thanks

#

might add some deck skins based on streamers

#

just for extra fluff

quick scarab
#

I need help, I'm trying to make a config where if it is disabled, the mult of a certain card is overrided with a custom value by the player, but it keeps crashing when I simply open the game. I got as fair in the coding having issues and attempt reworking it to try to see if it works at any way

#

right now I already have a toggle button and a funtion that uses it but it keeps saying its a nill value despite having it

#

if FNAF.config.freddyimport then
    Freddy_Mult = 63
end    

Config file

return {
    voices = true,
    volumes = 100,
    freddyimport = false,
}

UI file


    local freddy_toggle = create_toggle({
        label = localize('fnaf_save_freddy'),
        ref_table = FNAF.config,
        juice = true,
        ref_value = 'freddyimport', -- what var does this button match
        callback = function()
            FNAF:save_config()
        end
    })

    return {
        n = G.UIT.ROOT, config = { r = 0.15, minw = 15, minh = 7, align = "cm", padding = 0.01, colour = G.C.BLACK },
        nodes = {
            { n = G.UIT.R, config = { align = "tm" },
                nodes = {
                    voice_toggle, -- the option itself
                    voice_slider,
                }
            },

            { n = G.UIT.R, config = { align = "cm" }, nodes = { 
                { n = G.UIT.B, config = { w = 0.5 , h = 0.5 , align = "cm", }}}
            },

            { n = G.UIT.R, config = { align = "cm", padding = 0.1 }, nodes = {
                    {n=G.UIT.T, config={text = localize('fnaf_save'), colour = G.C.UI.TEXT_LIGHT, scale = 0.5}},
                }
            },

            { n = G.UIT.R, config = { align = "cm" },nodes = {
                    { n = G.UIT.C, config = { align = "cl" },
                        nodes = {
                            freddy_toggle,
                        }
                    },
                }
            }
        
        }
    }
quick scarab
red flower
#

you need to define the variable somewhere as FNAF = SMODS.current_mod

quick scarab
#

FNAF = SMODS.current_mod
FNAF.save_config = function(self)
    SMODS.save_mod_config(self)
end

local config = SMODS.current_mod.config
SMODS.current_mod.config_tab = function()
red flower
#

is that before or after you load the files

quick scarab
#

let me switch the load order

red flower
#

make sure it exists before you load this top file

umbral zodiac
#

how would you properly make an editioned playing card remove itself at end of round
i tried context.end_of_round, didn't trigger
same with context.playing_card_end_of_round

#

wait oh i realize is it possibly because its in the discard pile

quick scarab
#

I gonna check if the code that I did works or if I messed something up

umbral zodiac
random basin
#

how do I get the effect of the back button UI where it is disabled and then has a fill effect until it's enabled?

oblique lotus
#

Is there an easy way to add permanent chips to a Joker in a similar way that the Hiker does to a playing card?

#

I imagine that smods doesn't support that functionality but I thought I'd ask

grizzled tide
#

is there a global function which i can run based on time? i have an ability i want to activate every second

idle plaza
grizzled tide
idle plaza
#

It is possible to hook Game:update(dt), but that'll run extra every frame, all the time. Even when you have none of that joker, some extra code would need to be ran to check if the jokers exist or not.

Alternatively, can track the passage of time using using os.time() instead of the provided dt within the Joker's update function. os.time() will always be the same number each time it's called at the exact time.

fading rivet
#

How could I increase the amount of mult individual glass cards give?

grizzled tide
fading rivet
#

I tried changing card.ability.Xmult, but that only seems to change the display

grizzled tide
idle plaza
near coral
#

I forgor is this channel mainly for coding questions or can practical things be asked here too

#

Like if a joker effect is good or not

granite apex
near coral
#

That's just an example

#

My real question is how to better word something

granite apex
#

Would still say general but I guess I didn't make the channel and I dont think it's that important either way

#

dev is mostly coding oriented though

near coral
#

Darn

#

Dagnabbit even

granite apex
#

Looking to reevalute cards in hand from a get_straight hook override, but at the moment, only the hand type changes and it still plays a single card. Anyone got an idea of what's missing with the way I return the hand here? Do I actually need to change another hook to for scoring effects?

random basin
#

is there a way to force a UIbox to close? calling G.FUNCS.exit_overlay_menu() this way doesn't work

        if initialized_frame and not has_voted then
            video_file:play()
            has_voted = true
        end
    end

    local old_update = love.update
    function love.update(dt)
        if old_update then old_update(dt) end

        if not initialized_frame and video_file:tell() >= pausetime then
            video_file:pause()
            initialized_frame = true
        end

        if has_voted and not video_file then
            G.FUNCS.exit_overlay_menu()
        end
    end```
#

or is there a way to disable a button on a boolean instead of a timer

quick scarab
#
local freddy_slider = create_slider({
        min = 0,
        max = 63,
        step = 1,
        w = 5,
        ref_table = FNAF.config,
        ref_value = 'completion',
    })

 return {
        n = G.UIT.ROOT, config = { r = 0.15, minw = 15, minh = 7, align = "cm", padding = 0.01, colour = G.C.BLACK },
        nodes = {
            { n = G.UIT.R, config = { align = "tm" },
                nodes = {
                    voice_toggle, -- the option itself
                    voice_slider,
                }
            },

            { n = G.UIT.R, config = { align = "cm" }, nodes = {
                { n = G.UIT.B, config = { w = 0.5 , h = 0.5 , align = "cm", }}}
            },

            { n = G.UIT.R, config = { align = "cm", padding = 0.1 }, nodes = {
                    {n=G.UIT.T, config={text = localize('fnaf_save'), colour = G.C.UI.TEXT_LIGHT, scale = 0.5}},
                }
            },

            { n = G.UIT.R, config = { align = "cm" },nodes = {
                    { n = G.UIT.C, config = { align = "cl" },
                        nodes = {
                            freddy_toggle,
                            freddy_slider
                        }
                    },
                    { n = G.UIT.C, config = { align = "cr" },
                        nodes = {
                            golden_toggle,
                        }
                    },
                }
            }
        }
    }
#

config file

return {
    voices = true,
    volumes = 100,
    freddyimport = false,
    completion = 63,
    goldenimport = false,
    ucnscore = 10600
}
near coral
#

Is there a way to make things lose sell value without affecting their prices in the shops

#

For bizarro to the moon (called Market Crash)

#

I originally came up with the effect before I learned that shop prices and sell values are connected

lusty marten
#

hey , what is the id of Run Info?

keen atlas
near coral
#

Is it possible to make this happen

#

Or are sell values hardcoded to shop prices

random basin
#

how do I center align text in custom UI?

cerulean aspen
#

how do i make a joker that multiplies the value of the card to the left of it by ^2

#

like gemini but better

elder rune
#

But idk how

timid zinc
#

My blind has a "halo-like" effect around it. In the atlas file it looks normal

near coral
# elder rune Nope, it's possible

So you can reduce a cost value and have the sell value stay the same
And you can reduce a sell value and keep the cost value the same

cerulean aspen
#

anyone know how to make a joker that multiplies the value of the joker to the left by ^2?

elder rune
near coral
#

Oh

elder rune
#

Probably just hook them ig

cerulean aspen
elder rune
cerulean aspen
elder rune
#

Not really, Cryptid is sometimes pretty weird but just so you can see how they manipulate Joker values

cerulean aspen
#

alr

cerulean aspen
elder rune
cerulean aspen
cerulean aspen
elder rune
#

So it first takes the left most joker (position 1 of the table), then checks if that joker has "immutable" as true (immutable meaning unchanging). Then it just does the manipulation

cerulean aspen
elder rune
#

Don't think calling Cryptid.manipulate would be the way. So probably just whatever it calls

cerulean aspen
cerulean aspen
elder rune
#

Gimme a sec

cerulean aspen
#

alr

elder rune
#

Oh

#

Lowkey thought that cryptid called the Smods functions

cerulean aspen
#

heh?

cerulean aspen
elder rune
#

Holdob

random basin
#

create_slider crashes my game with no crash log

elder rune
still hedge
#

bombler scare jump

cerulean aspen
cerulean aspen
cerulean aspen
elder rune
#

Yay

cerulean aspen
#

wait

#

wrong thing

#

@elder rune is this it?

elder rune
#

Uhhh

cerulean aspen
elder rune
elder rune
cerulean aspen
elder rune
#

Scroll down to the joker with the "dadproud" key

#

This function changes the values, the green highlighted is what actually changes them

cerulean aspen
cerulean aspen
#

or how do i implement it

elder rune
#

You can copy paste it idc

cerulean aspen
#

where would i put it?

#

wait

#

it prob dosent have verything so nvm

cerulean aspen
cerulean aspen
#

like the text

elder rune
#

?

cerulean aspen
#

so for this i alr have the #1# setup but i want to change the 4 to whatever hyperside value is

cerulean aspen
elder rune
#

Loc_vars

#

You literally have that function in there so just make it also return hyperside

#

Then do #2#

cerulean aspen
#

do i do after hypermult {...}, {card.ability.extra.hyperside}

#

?

elder rune
#

in loc_vars:
return { vars = { card.ability.extra.hypermult, card.ability.extra.hyperside } }

cerulean aspen
#

ah okay

#

thank u

elder rune
#

Also pretty sure the notation for hyper operations is {n} and not [n]

winter flower
cerulean aspen
cerulean aspen
# elder rune Unlucky

i mean idk if its just unlucky, cause ussually on average i dont even find a niko who can summon a god within about the first 300-400 rerolls

elder rune
#

Why don't you just spawn it in

cerulean aspen
#

i do

cerulean aspen
cerulean aspen
random basin
#

is there a way to stop sliders from hitting non-integers

#
        id = "slider",
        colour = HEX("f5a92c"),
        min = (math.abs(G.GAME.dollars)/2),
        max = math.abs(G.GAME.dollars),
        step = 1,
        w = 5
        minw = 6,
        minh = 1,
        scale = 0.25,
        ref_table = wager,
        ref_value = 'dollars'
    })```
#

I thought I selected 3 when I had $4 but it paid out 3.44

#

I'll just run the final ease_dollars through math_floor ig

sage crater
#

how do I check how long a joker instance has existed for?

#

I’m trying to do joker combining shenanigans, and I want the oldest joker to always be the one to create the new card so the two jokers don’t both create a copy

granite jay
#

Where can I get this from?

#

Is there an ease_(thing) function for Boss Blind chips?

subtle merlin
granite jay
#

I found that when tryna find a different answer

granite jay
glass scaffold
#

Now it's my turn

subtle merlin
granite jay
#

Fair, will do

granite apex
#

Finally feeling like I'm near a solution here: I'm sending my G.Play cards to my get_straights hook, which calculates which played cards will be played under new rules and count them as a straight. I'm then trying to score each of the cards I'm getting sent back manually, which should, in theory, only count my custom straight cards. However, I'm getting a crash on play. Anybody know what's wrong with my call to score_card?

subtle merlin
#

We have not even been here since... December?

Scared us to get a ping here

granite jay
#

Can you make cards larger through enhancements?

#

Or at least if the rank/suit is not shown?

#

Cos I'm tryna make an enhancement where the card has no rank or suit and the enhancement sprite is larger than normal bounds.

#

o wait nvm u just use display_size in smods.enhancement

granite jay
#

no that aint workin

kindred niche
#

Whats the best way to achieve the effect that the plasma deck has on its art

#

Assuming it is not just meticulus detail ofc

thorn ingot
#

Hey guys. do you know how to make a joker not trigger itself while triggering others?

#

I've been able to make it trigger others but it's also triggering itself, with the same ability.

gilded blaze
#

if context.retrigger_joker_check and not context.retrigger_joker then

granite jay
#

Anyone know how to make this card larger to fit? It's an enhancement btw
The size of the card sprite has a greater height than 95 but fsr the game squishes the sprite and display_size does not work

limber aspen
thorn ingot
# daring fern Code?

Here you go. Thanks for replying.
It's a Joker from a mod I wanted to tinker with, usually I just play around with values and lines of code, but this time I wanted to do more and turns out I'm not there yet, haha.

thorn ingot
hidden aspen
#

how to start with a particular jocker so i can test it?

#

do i need to make a custom deck?

kindred niche
hidden aspen
#

ty

kindred niche
#

np

lusty marten
#

hey , how to draw wipe in Run Info?

hidden aspen
frail parcel
#

why doesnt this work
im trying to make a deck that adds chips
it adds the chips then gets instantly reverted

wintry solar
#

You can’t do any mult or chip changes in context before

hidden aspen
#

i figured out how to spawn through the collection using the [3] htokey

frail parcel
#

bruh

shell timber
granite jay
primal robin
#

Unfortunately to make UI things work properly I need just copy SMODS patches for them.
I guess I really should consider license

pale holly
#

⁨```lua
calculate = function(self, card, context)
local my_pos = nil
for i = 1, #G.jokers.cards do
if G.jokers.cards[i] == card then
my_pos = i
break
end
end
if (context.end_of_round or context.ending_shop) and (G.jokers.cards[my_pos - 1] == "j_mii_DSTcactus") or (G.jokers.cards[my_pos + 1] == "j_mii_DSTcactus") then
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.0,
func = function()
SMODS.destroy_cards({card}, nil, nil, true)
anhilated = true
message = "FUUC-"
return true
end
}))

        return true
    end

end,
⁨```

trying to make my joker detect a specific joker if it's either on its left or right but doesn't work, any help please ?

mystic river
#

you're comparing a card object directly to a key

#

that won't work

#

you can get the key out of the card object for a proper comparison, it's in card.config.center.key (and also card.config.center_key for some reason)

normal crest
#

one less table index, yay

ocean remnant
#

I'm pretty new to modding so I hope that this isn't a stupid question, but how can I change the x/y position of a joker?

mystic river
#

which x/y position? the location on screen, the atlas?

daring fern
#

pale holly
# mystic river you can get the key out of the card object for a proper comparison, it's in `car...

so basically i should do something like
⁨```lua
local right_card = {}
local left_card = {}
if (context.end_of_round or context.ending_shop) then
right_card = card.config.center.key[my_pos + 1]
left_card = card.config.center.key[my_pos - 1]

if right_card == "j_mii_DSTcactus" or left_card == "j_mii_DSTcactus" then
⁨```

probably the code on itself is wrong but the rough idea is this right ?

mystic river
#

that's super unnecessary

#

G.jokers.cards[my_pos ± 1] is already a card, you can just get the key out of there

#

(after first confirming that it's not nil, of course)

pale holly
#

lua if (context.end_of_round or context.ending_shop) and (G.jokers.cards[my_pos - 1].config.center.key == "j_mii_DSTcactus") or (G.jokers.cards[my_pos + 1].config.center.key == "j_mii_DSTcactus") then ⁨

so like this then ?

mystic river
#

almost
G.jokers.cards[my_pos - 1] will be nil and crash if my_pos is 1

#

so put in a check for that

pale holly
#

lua if (context.end_of_round or context.ending_shop) and (my_pos ~= 1 and G.jokers.cards[my_pos - 1].config.center.key == "j_mii_DSTcactus") or (G.jokers.cards[my_pos + 1].config.center.key == "j_mii_DSTcactus") then ⁨

i think this should do it

#

set a check so my_pos has to verify it isn't 1 first

tidal hemlock
#

hey devs, how possible would be to program this:
Joker X isnt able to spawn if you have Joker Y, and vice versa, all except if you have Showman

mystic river
#

make x and y's in_pool functions return false if the other exists and showman doesn't

#

use SMODS.showman if you want that to be compatible with any modded showman-alike effects

tidal hemlock
mystic river
#

if one of them is vanilla, take ownership of it and give it an in_pool

#

(no vanilla jokers have that function already, so don't worry about accidentally stomping it)

#

(but if you want to be absolutely sure you're not stomping an in_pool added by some other mod, check whether SMODS.Joker[key].in_pool is a function and if so incorporate its return value however you like)

#

actually strike that i don't think that works the way i thought it did

daring fern
mystic river
#

i don't think it'll have been injected yet at this point in the code

#

okay, after some digging, SMODS.Centers is the correct table

daring fern
mystic river
#

would taking ownership have been reflected by this point in the loading process?

daring fern
mystic river
#

after testing it looks like both of them work as i expected them to, for vanilla jokers at least (modded jokers not tested yet)
i don't know if there's any meaningful difference between looking in one table or the other in that case

pale holly
#

lua if (context.end_of_round or context.ending_shop) and (my_pos ~= 1 and G.jokers.cards[my_pos - 1].config.center.key == "j_mii_DSTcactus") or (G.jokers.cards[my_pos + 1].config.center.key == "j_mii_DSTcactus") then ⁨

well i'm not sure what i did wrong

#

unlless

#

oh

#

shouldn't have just use "my_pos" right ?

pale holly
#

nvm fixed it

mystic river
#

oh, it'll also crash if it's the rightmost joker. silly oversight

#

my_pos ~= #G.jokers.cards

pale holly
#

yeah i just made so a check if the there's a joker left or right to itself, that way it won't crash

mystic river
#

yeah

pale holly
#

⁨```lua
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.0,
func = function()
card.children.center:set_sprite_pos({ x = 0, y = 1 })
SMODS.destroy_cards({card}, nil, nil, true)
anhilated = true
message = "FUUC-"
return true
end
}))

        return true
    end

⁨```

one thing tho, i tried to make my joker have a message like how gros michel goes extinct but it does nothing, the rest yet does work

white hull
#

use SMODS.calculate_effect() to use return table values like message outside of a return table

pale holly
#

How so exactly ? Just SMODS.calculate_effect(message = "FUUC-") ?

daring fern
# pale holly How so exactly ? Just SMODS.calculate_effect(message = "FUUC-") ?

No, it would be: ```lua
return {func = function()
G.E_MANAGER:add_event(Event({
func = function()
card.children.center:set_sprite_pos({ x = 0, y = 1 })
SMODS.destroy_cards({card}, nil, nil, true)
anhilated = true
SMODS.calculate_effect({message = 'message', instant = true}, card)
return true
end
}))
delay(0.9375)
end}

pale holly
#

alrighty then, but what about the delay ?

daring fern
pale holly
#

so like this, it should go all at once no?

pale holly
#

actually i'll update my smods and see

idle plaza
pale holly
#

well i didn't saw any calculate_message in the smods release, so i'll probably try calculate_effect instead

#

well i used calculate effect but now

#

⁨```lua
calculate = function(self, card, context)
local my_pos = nil
for i = 1, #G.jokers.cards do
if G.jokers.cards[i] == card then
my_pos = i
break
end
end
if (context.end_of_round or context.ending_shop) and ((G.jokers.cards[my_pos - 1] and G.jokers.cards[my_pos - 1].config.center.key == "j_mii_DSTcactus") or
(G.jokers.cards[my_pos + 1] and G.jokers.cards[my_pos + 1].config.center.key == "j_mii_DSTcactus")) then
return {func = function()
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.0,
func = function()
card.children.center:set_sprite_pos({ x = 0, y = 1 })
SMODS.destroy_cards({card}, nil, nil, true)
anhilated = true
SMODS.calculate_effect({message = 'message', instant = true})
return true
end
}))
delay(0.9375)
end}

    end

end,
⁨```

idle plaza
pale holly
#

Noted, thanks

cerulean aspen
elder rune
#

just specify a joker smh

cerulean aspen
#

well

#

uh

cerulean aspen
elder rune
#

oh that, just that Balatro handles Joker values differently compared to mods

elder rune
#

idk fix

cerulean aspen
#

ah okay

#

cause uh

#

anything with xmult

#

dosent work

#

but anything without xmult (lust joker lets say) does work

#

cause its + mult

elder rune
#

idk either

cerulean aspen
#

or anything iwth money idk this is confusing

pale holly
daring fern
daring fern
daring fern
cerulean aspen
cerulean aspen
#

wait

#

yeah when i get the joker that ncan manipulate values and another joker it just crashes and gives me this message

#

@daring fern :)

daring fern
cerulean aspen
cerulean aspen
daring fern
cerulean aspen
#

dont mind the ` at the start and end

#

thats just in that msg not in the code

#

@daring fern theres the code

daring fern
bright crane
#

Hi, I'm pretty new to modding - I'm trying to record the last joker sold for a specific consumable that would create a copy of that joker (kinda similar to fool creating a consumable for G.GAME.last_tarot_planet). I hooked Game.start_run to initialize a variable to house that joker key, but I don't know to get it to update when a joker gets sold

cerulean aspen
daring fern
cerulean aspen
daring fern
cerulean aspen
cerulean aspen
#

@daring fern how would i use it?????

daring fern
cerulean aspen
#

in the return section?

cerulean aspen
#

@daring fern

#

or if anyone can help me with it

dapper sun
#

how would i re-enable ui on a menu_cards card

umbral zodiac
dapper sun
#

i'm doing this and it isn't working

ellejokers.mod_data.menu_cards = function()
    return {
        key = "j_elle_elle",
        no_edition = true,
        no_ui = false
    }
end```
umbral zodiac
#

oh idk if create_card takes it as a parameter

white hull
#

why isn't my achievement unlocking? i don't see what the problem is at all

EDIT: unlock_achievement() doesn't do the thing if you're in a challenge, so I had to patch it

cerulean aspen
#

anyone know why this crashes my game when the blind ends?

umbral zodiac
daring fern
wild patrol
#

what do you think

cerulean aspen
cerulean aspen
wild patrol
unkempt badge
#

so like im literally completely new to this, but i want to make a custom language pack, so.. how could i even do that?

daring fern
cerulean aspen
wild patrol
#

what does line 96 in your main file show

daring fern
wild patrol
#

^

cerulean aspen
daring fern
# cerulean aspen ?

The functions are being defined in the calculate function of the SMODS.Joker definition, move them out of both of those.

pale holly
#

If i want to use a custom color for the message of my joker, i know i gotta use loc_colour but should do something like

loc_colour()
G.ARGS.LOC_COLOURS.mii_JJ = HEX('50a96')

outside of my joker and then

SMODS.calculate_effect({message = 'message', colour = G.ARGS.LOC_COLOURS.mii_JJ}, card)

or do i need i need to do differently ?

cerulean aspen
daring fern
pale holly
#

ah alright thanks

cerulean aspen
#

or @daring fern

daring fern
cerulean aspen
cerulean aspen
#

@daring fern wdym like outside of the entire joker or like where????

dapper sun
#

now how do i fix this,,?

cerulean aspen
white hull
#

yes, outside of the joker

cerulean aspen
white hull
#

before, so the code that comes after your functions can use the functions

cerulean aspen
#

that makes more sense

umbral zodiac
#

small note

#

for lsp recognizing your code it should go before

#

but for the purposes of just using the function it can go anywhere

#

since by the time the joker's functions are called, it's already long ago ran through the rest of the file and defined those functions

dapper sun
cerulean aspen
dapper sun
#

ik dw

umbral zodiac
primal robin
#

card.no_ui or smth

cerulean aspen
dapper sun
umbral zodiac
primal robin
#

bypass_discovery_ui

dapper sun
#

ty

umbral zodiac
#

then do the other thing

umbral zodiac
dapper sun
primal robin
dapper sun
#

menu_cards

#
ellejokers.mod_data.menu_cards = function()
    return {
        -- Elle on title card
        {key = "j_elle_elle",
        no_edition = true},
        
        -- Let it have a description
        -- ty @somethingcom515 for this lol
        func = function()
            for k, v in pairs(G.title_top.cards) do
                if v.config.center.key == 'j_elle_elle' then
                    v.no_ui = false
                    v.bypass_discovery_ui = true
                end
            end
        end
    }
end```
primal robin
#

Im not sure can you define it like this

dapper sun
#

yes

#

the no_ui works

#

wdym

primal robin
#

You probably should move bypass_discovery_ui to definition object rather than function

dapper sun
#

ok

cerulean aspen
#

okay so this code i have, yet neither of the jokers which multiply values actually multiply the values

dapper sun
#

still doing it

white hull
#

If there are multiple pattern matches for a lovely patch, does it patch all of them? Or does it not work at all?

cerulean aspen
umbral zodiac
#

without a crashlog i would have no clue

cerulean aspen
slim ferry
primal robin
slim ferry
#

Alongside the ahnd

cerulean aspen
#

it just

#

dosent multiply values of anything

white hull
#

I thought it would crash lol

cerulean aspen
slim ferry
#

Also in the return

dapper sun
cerulean aspen
slim ferry
#

Yes

cerulean aspen
# slim ferry Yes

also can u help me with the multiplying values issue where it dosent actually change the values of anything?

primal robin
slim ferry
cerulean aspen
daring fern
slim ferry
#

Bu

#

By

#

Putting a different card into the function?

cerulean aspen
#

wait do i just change card to joker?

slim ferry
#

Wdym huh

#

No

#

No

cerulean aspen
cerulean aspen
slim ferry
#

you need to

cerulean aspen
#

understand

slim ferry
#

like

daring fern
# cerulean aspen understand
local other_joker = {}
for k, v in pairs(G.jokers.cards) do
    if v == card then other_joker = G.jokers.cards[k-1] end
end
return {func = function() modify_joker_values(other_joker, {['^'] = 2}) end}
slim ferry
#

Actually get another card object as a variable

#

It isnt going to magically do every joker you want

cerulean aspen
cerulean aspen
daring fern
cerulean aspen
#

cause it dosent actually multiply anything when i beat the blind

#

@daring fern

#

or if anyone knows how it works

cerulean aspen
#

@daring fern if u can help

dapper sun
primal robin
#

Oh yea right its locked

#

I missed it with is card discovered

#

My bad

cerulean aspen
cloud thistle
#

how do i set unlocked to false on every joker and consumable (and booster packs if thats possible) of a mod (specifically cryptid) without doing it manually

#

do i have to write a program to generate the code?

daring fern
cerulean aspen
cloud thistle
slim ferry
#

Why dont you just

#

Disable the mod

past kelp
#

I need some help with challenge decks

#

I want to make Jokerless but youu have eternal versions of all legendary jokers

#

Balatro crahes whenever I add the jokers to jokerless

#

{ name = "Jokerless", id = 'c_jokerless_1', rules = { custom = { {id = 'no_shop_jokers'}, }, modifiers = { } }, jokers = { {id = 'j_canio'}, {id = 'j_triboulet'}, {id = 'j_yorick'}, {id = 'j_chicot'}, {id = 'j_perkeo'}, }, consumeables = { }, vouchers = { }, deck = { type = 'Challenge Deck' }, restrictions = { banned_cards = { }, }, banned_tags = { }, banned_other = { } } }

#

(sorry i dont know how to use code snippets)

stoic void
#

what code do you have above this bit?

stoic void
past kelp
#
        name = "Cruelty",
        id = 'c_cruelty_1',
        rules = {
            custom = {
                {id = 'no_reward_specific', value = 'Small'},
                {id = 'no_reward_specific', value = 'Big'},
            },
            modifiers = {
                {id = 'joker_slots', value = 3},
            }
        },
        jokers = {
        },
        consumeables = {
        },
        vouchers = {
        },
        deck = {
            type = 'Challenge Deck'
        },
        restrictions = {
            banned_cards = {
            },
            banned_tags = {
            },
            banned_other = {
            }
        }
    }, ```
stoic void
#

not quite, but close enough

past kelp
#

oops thats cruelty

slim ferry
stoic void
past kelp
#

oh

stoic void
#

yeah... the key was spelt wrong so now everyone has to make that typo

past kelp
#

that is dumb

#

ok let me try that

#

ok thanks that worked

#

is there a way to make the whole deck debuffed?

#

(for a different challenge)

primal robin
#

@rough furnace I seen you Preflight PR which was merged and you know what? As you mentioned, game cannot restart if threads are opened

#

It just closes

#

Fyk I have 2 mods which have threads active all the time

stoic void
#

How do I make the soul on this pulse like the soul crystal?

slim ferry
#

Steal the draw function from vanillaremade soul

#

Or cryptid gateway or smth

#

I think vanillaremade's one might be a bit wierd due to different atlas

wild patrol
past kelp
#
    name = "Jokerless",
    id = 'c_jokerless_1',
    rules = {
        custom = {
            {id = 'no_shop_jokers'},
        },
        modifiers = {
        }
    },
    jokers = {
        {id = 'j_caino'},
        {id = 'j_chicot'},
        {id = 'j_yorick'},
        {id = 'j_pekeo'},
        {id = 'j_triboulet'},
    },
    consumeables = {
    },
    vouchers = {
    },
    deck = {
        type = 'Challenge Deck'
    },
    restrictions = {
        banned_cards = {
            {id = 'c_judgement'},
            {id = 'c_wraith'},
            {id = 'c_soul'},
            {id = 'v_antimatter'},
            {id = 'p_buffoon_normal_1', ids = {
                'p_buffoon_normal_1','p_buffoon_normal_2','p_buffoon_jumbo_1','p_buffoon_mega_1',
            }},
        },
        banned_tags = {
            {id = 'tag_rare'},
            {id = 'tag_uncommon'},
            {id = 'tag_holo'},
            {id = 'tag_polychrome'},
            {id = 'tag_negative'},
            {id = 'tag_foil'},
            {id = 'tag_buffoon'},
            {id = 'tag_top_up'},

        },
        banned_other = {
        }
    }
} ```
I somehow broke it again by adding back jokerless banned items
wild patrol
#

and then use soul_pos = {
x = 4,
y = 0
},

#

x, y being where every the sould is located on ur sprite sheet

stoic void
#

Ive given the base a shader so you can see they are different shaders

stoic void
past kelp
#

ↄoker

stoic void
#

👍

#

it is a joker

past kelp
#

the j juust looks more like ↄ than J

stoic void
#

Its kinda hard to draw something nicely in a small space

past kelp
#

yeah i get it

#

making custom tarot cards with long names is the worst

stoic void
#

there are fonts you can copy

past kelp
#

oh

stoic void
#

the soul on my joker looks different to this

past kelp
#

see if there is a way to modify the draw fuunction to the key for your sprite

stoic void
#

I dont know how

#

time to do smth stupid and hope it works

#

I did not work

past kelp
#

oh i don't either today is my fiirst day modding this game

#

I found out you can mod the appstore version of balatro

stoic void
#

modding rule 4

past kelp
#

it's on computer

stoic void
#

app store on pc?

past kelp
#

yeah mac os

stoic void
#

ah right

past kelp
#

It shouldn't break the rules in my opinion

stoic void
#

yeah I just forgot apple did computers

past kelp
#

yeah

#

do you have the base version of jokerless by chance

#

I broke my code agaiin

stoic void