#đŸ’»ăƒ»modding-dev

1 messages · Page 553 of 1

cursive gazelle
#

Of the delay

next timber
#

which delay, the delay of the event or a delay()

#

i tried both and neither worked for me

agile path
#

so, is it possible to do localize("string1" + "string2),

#

probably not right

frigid elm
agile path
#

two dots?

red flower
#

concatenation is .. yes

unkempt thicket
#

Whats the card area for deck skins?

frigid elm
agile path
#

say i want to make this

"string1" would be the number gain
"string2" is " more people joined in"

that string1 is a number that doesn't remain constant
would i need an if else for every different hand type?

#

so for example
i play a pair it says "4 people joined in"

if i play a 3oak, it says "8 people joined in" and so on

#

i can just hardcode every single hand type lmfao

#

but i'm trying to explore different options

red flower
#

you should save the number to a variable first

#

or make a lookup table

agile path
#

in config?

frigid elm
#

yeah, and you can just concatenate that variable into that string

red flower
#

it can be a local, it depends on what your logic is

agile path
#

so, chip_gain for example?

#

and change that chip_gain after each hand is played to then display on the string

red flower
#

you can do card.ability.extra.chip_gain.. "text"

narrow merlin
agile path
#

i'll try that

red flower
narrow merlin
#

How :3

agile path
#

config = { extra = { chips = 0, chip_gain = 0}, },

#

like so?

red flower
#

add G.GAME.blind and at the beginning of your returns

frigid elm
# narrow merlin Grrr

wait does the mod name imply it changes the music to an epic theme song every time it's predicted that you're completely destroying the blind in one hand?

narrow merlin
#

When u have 1 hand left

#

Music is fast

#

Waow

frigid elm
agile path
#

@narrow merlin i like your pronouns lmfao

narrow merlin
#

I am relatively gay, as you can see from them :3

agile path
#

same

source: my gf

cursive gazelle
#

What’s going on in my modding dev

agile path
#
 if context.before and (context.scoring_name == "Pair") and not context.blueprint  then
            card.ability.extra.chips = card.ability.extra.chips + 4
            card.ability.extra.chip_gain = card.ability.extra.chip_gain == 4
            return{
            message = localize("pride_upgrade"),
            colour = G.C.BLUE,
            }
        end

ignore the message part, i'm sorting the code still lol

frigid elm
red flower
narrow merlin
#

I'll fix

#

They in a folder called assets, so how would I write path

agile path
#
calculate = function(self, card, context)
        if context.before and (context.scoring_name == "Pair") and not context.blueprint  then
            card.ability.extra.chips = card.ability.extra.chips + 4
            card.ability.extra.chip_gain = card.ability.extra.chip_gain == 4
            return{
            message = localize("card.ability.extra.chip_gain".."   ".."pride_upgrade"),
            colour = G.C.BLUE,
            }
        end
        if context.joker_main then
            return {
                chips = card.ability.extra.chips
            }
        end
    end

in the game, (it didn't crash) but it said ERROR lmfao, fuck you jimbo

red flower
#

is it in assets/sounds/music1.ogg

narrow merlin
#

So I need to put them in a sounds folder too?

red flower
#

yes

frigid elm
narrow merlin
#

I said sounds?

red flower
frigid elm
# narrow merlin I said sounds?

it's a small mistake but it's one that's gone unnoticed for the longest time when i was initially implementing sound to experiment with stuff

agile path
agile path
#

Oops, sorry for the double reply

red flower
#

tis fine

narrow merlin
#

I copied it off dusk

frigid elm
agile path
#

I understand now
Localize() is for strings, extra numbers need to be added outside yeah?

#

Cause they're not strings

frigid elm
agile path
#

Message= will convert everything inside into a string, yeah?

red flower
red flower
agile path
#

Oh, i didn't know that

#

Interesting

narrow merlin
red flower
agile path
#

In the localization file

red flower
#

yes

agile path
#

En-us

red flower
#

yeah

agile path
#

Wait, so i can make several different loc files for different languages?

#

And they automatically pull from the right one?

red flower
#

yeah thats what theyre for haha

agile path
#

Time to ask Russian gf to translate everything

#

And use my Portuguese side of things to translate to Portuguese

red flower
#

anything not translated will be taken from english by default as well

agile path
#

That's really cool

#

Hence why it's not a good idea to write the "upgrade" texts in the joker code

red flower
#

yeah

frigid elm
#

it's also handy dandy for localizing variables like +15 mult

red flower
frigid elm
#

heck, i even made my own localized variable called +#1# Odds and it's just easy as throwing in an extra line into a certain area im forgetting the name of atm

agile path
#

Can't wait to see blahaj say "ыжалĐș :3" instead of "Splash :3"

narrow merlin
#

Fsr the boss blind one only works after beating it

#

@red flower

agile path
narrow merlin
agile path
#

I might do that once i get better

#

For my soulslatro mod

slim ferry
narrow merlin
#

Idk wym bud

slim ferry
#

entropy has a boss with phases

red flower
#

play lobotomy corporation

slim ferry
#

the mod

narrow merlin
agile path
#

@red flower

#

message = card.ability.extra.chip_gain .. localize("pride_upgrade"),

slim ferry
#

what does your joker config look like

agile path
#

i missed a =

#

chip_gain = 0 instead of ==0

#

i assume

slim ferry
#

chip_gain == 0 returns a boolean

#

thats just a comparison

agile path
#

what about = 0

slim ferry
#

=0 sets it to 0

agile path
#

config = { extra = { chips = 0, chip_gain = 0}, },

slim ferry
#

whats the joker calculate then

#

because somewhere chip_gain is becoming a boolean

narrow merlin
#

Okay, it's midnight, modding balatro was so yesterday, gn y'all

agile path
#
        if context.before and (context.scoring_name == "Pair") and not context.blueprint  then
            card.ability.extra.chips = card.ability.extra.chips + 4
            card.ability.extra.chip_gain = card.ability.extra.chip_gain == 4
            return{
            message = card.ability.extra.chip_gain .. localize("pride_upgrade"),
            colour = G.C.BLUE,
            }
        end
        if context.joker_main then
            return {
                chips = card.ability.extra.chips
            }
        end
    end```
#

OOPS

#

i saw

#

lmfao

#

==4 lmfao

#

fuck is this

slim ferry
#

== instead of + is certainly something

agile path
#

exactly

#

lmfao

#

but the issue is

#

that number isn't constant

#

i want to set it to 4, not add 4

cursive gazelle
#

=4

slim ferry
#

yeah

#

or just make it 4 to begin with in the config since you arent changing it anywhere else

agile path
#

it's giving me an error i think

agile path
slim ferry
#

oh i see

agile path
#

see, why's it red D:

slim ferry
#

you could just like make a table in the config of hand types and their respective chip gains

#

can i see the whole line

red flower
agile path
#

how do i do that? i have never done that

slim ferry
#

you can make any number of tables in your config

agile path
#

card.ability.extra.chip_gain = card.ability.extra.chip_gain = 4

#

this is what i have

slim ferry
#

just card.ability.extra.chip_gain = 4

red flower
#

you cant assign twice in one line

agile path
#
if context.before and (context.scoring_name == "Pair") and not context.blueprint  then
            card.ability.extra.chips = card.ability.extra.chips + 4
            card.ability.extra.chip_gain = card.ability.extra.chip_gain = 4
            return{
            message = card.ability.extra.chip_gain .. localize("pride_upgrade"),
            colour = G.C.BLUE,
            }
        end

this is the whole thing

narrow merlin
#

Misterprint and Mxprint when?

cursive gazelle
agile path
#

yup, that's what i did

robust marsh
#

how could I make it so a sticker is applied to a random joker at the end of each round? I guess I can put it under context.end_of_round and not context.repetition and not context.individual alongside pseudorandom but that's as much as I'd know. Not sure how I can apply a sticker just like that

red flower
#

card.ability.extra.chip_gain = card.ability.extra.chip_gain = 4 bad
card.ability.extra.chip_gain = 4 good

agile path
#

the one on the top is using for math?

say chips = chips + 4

red flower
#

yes

robust marsh
agile path
#

it works, nice
thank you!

red flower
#

you can probably do pseudorandom_element(SMODS.Stickers,"seed") to get a random one

#

or SMODS.Sticker.obj_buffer

#

one of the two

narrow merlin
#

Thinking of later making Misterprint (random chips) and Mxprint (Random x mult)

robust marsh
red flower
#

ohh

slim ferry
#

pseudoranom_element(G.jokers.cards,"seed") i imagine?

#

to get a random joker

red flower
#

you can use pseudorandom element on G.joker.cards then and then do joker:add_sticker("key", true)

narrow merlin
cursive gazelle
#

Yeah

#

That’s cool

red flower
#

im only good at code

slim ferry
#

type shit

agile path
#

call me Sanji, with how good i'm cooking

willow scroll
#

Speaking of stickers what's the way to check if a sticker is compatible with a joker (ignoring stake difficulties)?

hallow slate
#

Is there any quantum rank support rn?

agile path
zealous glen
hidden notch
#

My Textures have this weird Black Outline and I can't figure out ... why xwx!?

hidden notch
#

Nope

daring fern
hidden notch
#

I'm using the Raw brutality of Paint

zealous glen
hallow slate
#

Aww man. I'll try making some for the time being then

zealous glen
zealous glen
daring fern
zealous glen
#

I know people have implemented stuff

#

But there was still pushback against merging

#

I didn’t see much progress but I haven’t looked at it in a while

#

What’s the current status?

red flower
#

the current PR is supposedly finished but i didnt see people testing it

agile path
#

what are the hand names?
"Three of a kind" or Three of a Kind" 💀
like, how specific do i have to be

hallow slate
#

Three of a Kind

red flower
#

it needs to be specific

agile path
#

Pair
Three of a Kind
Four of a Kind
Five of a Kind
Two Pair
Full House
Flush House
Flush Five
Straight
Straight Flush

?

#

thank you

cursive gazelle
#

Thanks you and ? Aren’t valid hands

red flower
#

u arent a valid hand

willow scroll
willow scroll
willow scroll
#

It kept returning nil

#

I think I tried both true and false for the bypass

agile path
#

chat, stupid question but

willow scroll
willow scroll
zealous glen
#

Class.method denotes that the method is available to instances of Class

agile path
#
if context.joker_main then
            return {
                chips = card.ability.extra.chips,
                xchips = card.ability.extra.max_level
            }
        end

can i have two context.joker_main?
either triggering one or the other

zealous glen
#

So you want to do instance.method

cursive gazelle
#

With pseudorandom

#

Or math.random if you don’t care about seeds

willow scroll
red flower
zealous glen
cursive gazelle
agile path
#

no

cursive gazelle
#

What

zealous glen
#

Why wouldn’t it be a boolean?

cursive gazelle
#

That’s literally what you said lmao

willow scroll
agile path
#

i probably didn't explain correctly

willow scroll
red flower
cursive gazelle
agile path
#

xchips only triggers if a condition has been met

zealous glen
agile path
#

hence why i asked if i could have two joker main

zealous glen
#

It’s hard to tell without seeing the error

red flower
#

just check card.config.center.eternal_compat

zealous glen
# red flower

Oh do the vanilla ones operate differently so the Class allows the entry to be a Boolean?

willow scroll
zealous glen
#

If so that’s kind of an odd implementation

red flower
agile path
#

can i do something like

if context.joker_main and (insert check if a variable equals something) then

red flower
#

yes

zealous glen
#

Depending on the check I recommend just splitting the conditional

red flower
#

i dont

zealous glen
#

What if you have 10,000,000,000 conditions

red flower
#

more identation makes it more illegible

agile path
#

if context.joker_main and card.ability.extra.max_level == 1 then

#

this?

red flower
#

yes

cursive gazelle
rocky plaza
red flower
#

true

cursive gazelle
zealous glen
cursive gazelle
#

Why do you have that many conditions to begin with

zealous glen
#

The conditions being inside the helper function or in the original are still taking space somewhere

zealous glen
red flower
zealous glen
red flower
rocky plaza
#

and besides if all the conditions need to be true you can group them into multiple helper funcs

#

if it is really that bad

#

but if you need more than 5-6 conditions either your card is a tad bit too specific or there's a better way to do it

agile path
#
if card.ability.extra.chips >= 250 then
            return {
                card.ability.extra.max_level == 1
            }
        end

i want it to check if the chips you're getting is 250 or more. if so, the extra xchips buff activates

zealous glen
red flower
#

you would either 1) have the conditions directly in the return, 2) have multiple helpers and/or 3) make the conditions return early

zealous glen
#

That can be easily two or three checks depending on how many nested tables you’re dealing with

agile path
#

max_level is either a yes or a no

red flower
zealous glen
red flower
agile path
#

should it be = 1?

red flower
#

no

zealous glen
#

I think it doesn’t make sense for what you’re trying to do

agile path
#

this whole == and = confuses me D,:

red flower
#

what should it do

zealous glen
#

I’d be something like xChips = value

red flower
#

its not a case of = or ==

willow scroll
agile path
#

you gain chips everytime you gepplay certain hands

willow scroll
#

Because poll sticker doesn't exist

zealous glen
red flower
zealous glen
#

You can read = as “gets” or “is assigned”

agile path
#

if the total chips surpass 250, then it turns max_level from 0 to 1 and you get an extra xchips

#
 -- final joker calculations
        if context.joker_main and card.ability.extra.max_level == 0 then
            return {
                chips = card.ability.extra.chips,
            }
        end
        if context.joker_main and card.ability.extra.max_level == 1 then
            return {
                chips = card.ability.extra.chips,
                xchips = 1.15
            }
        end

hence why i have these

red flower
#
if card.ability.extra.chips >= 250 then
  card.ability.extra.max_level = 1
end
#

this?

rocky plaza
zealous glen
#

Do you want the max level to be set without the bonus being granted?

zealous glen
red flower
#

i agree

willow scroll
zealous glen
#

Oh also

red flower
#

whats wrong with it

zealous glen
#

Another reason I split conditions is to define variables

willow scroll
zealous glen
#

Because I might need those variables after the conditional anyways

willow scroll
#

Because it looks for should_apply

#

The functiom

red flower
#

oh yeah

red flower
agile path
#
calculate = function(self, card, context)
        --hands played
        if context.before and (context.scoring_name == "Pair") and not context.blueprint  then
            card.ability.extra.chips = card.ability.extra.chips + 4
            card.ability.extra.chip_gain = 4
            return{
            message = card.ability.extra.chip_gain .. localize("pride_upgrade"),
            colour = G.C.BLUE,
            }
        end
        if context.before and (context.scoring_name == "Three of a Kind") and not context.blueprint  then
            card.ability.extra.chips = card.ability.extra.chips + 7
            card.ability.extra.chip_gain = 7
            return{
            message = card.ability.extra.chip_gain .. localize("pride_upgrade"),
            colour = G.C.BLUE,
            }
        end
        if context.before and (context.scoring_name == "Four of a Kind") and not context.blueprint  then
            card.ability.extra.chips = card.ability.extra.chips + 10
            card.ability.extra.chip_gain = 10
            return{
            message = card.ability.extra.chip_gain .. localize("pride_upgrade"),
            colour = G.C.BLUE,
            }
        end
        if context.before and (context.scoring_name == "Five of a Kind") and not context.blueprint  then
            card.ability.extra.chips = card.ability.extra.chips + 15
            card.ability.extra.chip_gain = 15
            return{
            message = card.ability.extra.chip_gain .. localize("pride_upgrade"),
            colour = G.C.BLUE,
            }
        end
        ```
#
            card.ability.extra.chips = card.ability.extra.chips + 8
            card.ability.extra.chip_gain = 8
            return{
            message = card.ability.extra.chip_gain .. localize("pride_upgrade"),
            colour = G.C.BLUE,
            }
        end
        if context.before and (context.scoring_name == "Full House") and not context.blueprint  then
            card.ability.extra.chips = card.ability.extra.chips + 20
            card.ability.extra.chip_gain = 20
            return{
            message = card.ability.extra.chip_gain .. localize("pride_upgrade"),
            colour = G.C.BLUE,
            }
        end

        -- check if 
        if card.ability.extra.chips >= 250 then
                card.ability.extra.max_level = 1
        end



        -- final joker calculations
        if context.joker_main and card.ability.extra.max_level == 0 then
            return {
                chips = card.ability.extra.chips,
            }
        end
        if context.joker_main and card.ability.extra.max_level == 1 then
            return {
                chips = card.ability.extra.chips,
                xchips = 1.15
            }
        end
    end
#

this is the whole thing lmfao

#

what a fucking mess

#

seems more organized than my desk tho

red flower
#

this is a good case for nested conditions haha

hidden notch
agile path
red flower
#

dunno im not reading all that :3

#

im going to make lunch

zealous glen
hidden notch
agile path
#

damn, adhd brain was too much for N D:

zealous glen
agile path
#

have a good lunch!

willow scroll
#

So yeah I'll look into a fox when I'm home from work

#

Fix

hidden notch
rotund sable
hidden notch
slim ferry
agile path
#

i have the debug mod. is there any way to add cards to hand?

slim ferry
#

you cant add cards but you can cycle suits/ranks/enhancement/seal/edition of hovered cards with hotkeys

zealous glen
slim ferry
#

thats very strange

zealous glen
hidden notch
#

Ay but now the Issue goes the opposite way.. The white is bleeding into the Texture owo'

zealous glen
#

Holding tab should explain everything anyways

agile path
#

copy. i only use the "3" to add jokers

#

oh, i didn't know this. thank you

zealous glen
zealous glen
slim ferry
#

idk

#

but looking at the 2x asset files in vscode

zealous glen
#

This isn’t an issue with the export

#

It’s an issue with how Balatro renders the art

slim ferry
#

?

zealous glen
#

Well, there’s a minor issue with the export, but it doesn’t matter 99% of the time

slim ferry
#

you literally said exporting introduces the same issue

hidden notch
#

Left is my Texture, Right is Vanilla
There's a very slight white-bleed
In this case it wouldn't be that bad but with lighter colors it gets really bad x'3

zealous glen
#

But it happens because of an “issue” when Aseprite exports at 200% scale

zealous glen
zealous glen
#

Aseprite doesn’t save the color of transparent pixels, or it sets their color to black when exporting at higher size

slim ferry
#

oh so #00000000 causes bleed but #FFFFFF00 doesnt

zealous glen
#

I think both would bleed but differently

#

White versus black bleed

median rose
#

Hi, just wanted clarification of rule 3 "Do not debug source code" #đŸ“œăƒ»modding-rules message . Does that mean it's against the rules to look at the source code with a decompoiler tool. I understand part of the reason is to not pirate the game, but I'm curious how else you would get understanding of the code in order to make a mod

zealous glen
#

I’m not sure

slim ferry
#

i mean the first time i did 2x assets i tried to increase canvas size but that doesnt give me the option to not use some upscaling algortihm

slim ferry
#

just not distribute/discuss edits of it

zealous glen
#

Well I recommend copying the EXE then unzipping the copy

slim ferry
#

extracting with 7zip leaves the original

slim ferry
#

i use aseprite thouggh

zealous glen
#

I think it’s nearest neighbor the one without* interpolation

slim ferry
#

nearest neighbor is still an upscaling algorithm though

#

that still does wierd stuff

zealous glen
#

Nearest neighbor is the one that does what you want

#

It’s not weird

agile path
#

chat, it all works perfectly

zealous glen
#

“Upscale without interpolation” is just nearest neighbor

agile path
#

thank you so much

#

why don't you use a tool to upscale it? i do and it works just fine

zealous glen
#

Aseprite can do it

agile path
zealous glen
#

You’ll see

robust marsh
#
calculate = function(self, card, context)
        local pool = {}
    for _, joker in ipairs(G.jokers.cards) do
        if joker ~= card then
            table.insert(pool, joker)
        end
    end


    if context.end_of_round and not context.repetition and not context.individual then
        if #pool > 0 then
            local selected_joker = pseudorandom_element(pool, card.key)

            if selected_joker then
                selected_joker:add_sticker("tdec_Eroding", true)
            end
        end
    end
end

I'm definitely messing something up majorly but I have no clue what exactly

carmine kiln
#

How does an enhancement even check if the score is on fire?
The only thing working here is the Xchips

slim ferry
#

is the entirety of a blind's config stored in .config.blind?

red flower
#

.config.blind.config i think

#

it should be saved to G.GAME.blind.effect now as well

red flower
median rose
slim ferry
#

just put the game code on a different monitor

#

if you have one

crisp coral
#

it means don't send code to local to fix bugs

cursive gazelle
red flower
#

wdym editing

cursive gazelle
#

Editing the src and compiling it back

red flower
#

i mean it's not allowed to share that obviously but you can do it for personal use

cursive gazelle
#

Yeah

robust marsh
#

hhh how would I check if a card has a specific sticker? Forgor

red flower
#

card.ability.[sticker_key]

robust marsh
#

ty

carmine kiln
red flower
#

remove the context.after and you might need to check manually if its on fire

frail parcel
daring fern
harsh belfry
agile path
#

oops, you're right

frail parcel
agile path
#

let me post it there

fair osprey
#

Hey all! Brand new to modding Balatro and still getting to grips with SMODS and Lua in general. Wondering if any of you know what I’m doing wrong here.

I’m creating a joker that has a certain amount of Xmult according to the level difference between the highest ranked poker hand and the second highest (starts at 1x, has 0.5 extra for each level). Struggling to get the code to work.

#

Here’s the function for finding the level difference (ai assisted - maybe there's something wrong here?)

#

Probably an obvious blunder

willow scroll
#

Justice for pinned

harsh belfry
#

is there any easy way to take a UIElement out of the ui temporarily?

willow scroll
#

Instead just define the function outside the SMODS.Joker and inside calculate call it with find_level_difference(self)

harsh belfry
#

also self isnt even used lol

willow scroll
#

That is also true lol

#

self:find_level_difference would only work if you explicitly defined Card:find_level_difference = function(self) [...] end

#

But that would make it a general function for all cards to just have, when I don't think it needs to

willow scroll
#

Self is center? Dammit

#

Never used it once in my calculation needs

thorn basin
#

I just created a booster pack but for some reason it doesn't show up in balatro.
is there something I'm missing?

thorn basin
thorn basin
#

wait, don't tell me I have to update my steammodded again

red flower
#

are you loading the file

thorn basin
red flower
#

why did you ping me to not answer my question

thorn basin
#

oh wait

#

my bad

#

I just realized

robust marsh
#

This might sound weird but is there a way to make it so you straight up just can't see shops within a run(by finishing a blind, at least)? I don't know if there's anything of that sort but it's kinda what I want my next deck to revolve around.

thorn basin
red flower
robust marsh
#

I'm pretty bad when it comes to patches but i'll try to do it, thank you a lot

thorn basin
#

how can I make it that the booster pack creates jokers that are only from my mod?

red flower
#

make an objecttype with jokers from your mod

thorn basin
#

alright

grim remnant
#

hmm. for whatever reason, my food jokers started borking out in a weird way. the xmult/xchip ones do get eaten, but they "ERROR" instead of properly displaying "Eaten!", meanwhile the emult/echip ones... Just don't do a dang thing. what, exactly, are we missing here?

        if context.joker_main then --score Xmult
            return { 
                xmult = card.ability.extra.Xmult
            }
        end
        
        if context.end_of_round and context.cardarea == G.jokers and not context.blueprint then --is it the end of the round? NOM
            card.ability.extra.Xmult = card.ability.extra.Xmult - card.ability.extra.decay
            if card.ability.extra.Xmult <= 1 then
                card:start_dissolve()
                play_sound('tarot1')
                return { instant = true , message = localize('k_eaten') }
            end
        end
    end```
timid zinc
#

is there a way for a lovelypatch to just straight up replace a pattern instead of adding to it

split saddle
#

What's the localization entry for booster packs? i can't find it anywhere in the docs

agile path
#

let's say you type G.play

what does the G. mean?

split saddle
gaunt folio
#

okay now my comrade joker is balanced

daring fern
agile path
split saddle
#

game

agile path
#

i see

agile path
gaunt folio
#

balance

#

plus nobody just wants to play 300 hours of reroll simulator

agile path
gaunt folio
#

fair

#

but itd be literally infinite if i set reroll price to zero

grim remnant
# daring fern It's `k_eaten_ex`

ah, that makes sense. still unsure why the Emult/Echips version just... fails to eat the food though once it hits 1

        if context.joker_main then --score Emult
            return { 
                emult = card.ability.extra.Emult
                -- message = "TEST",
            }
        end
        
        if context.end_of_round and context.cardarea == G.jokers and not context.blueprint then --is it the end of the round? NOM
            card.ability.extra.Emult = card.ability.extra.Emult - card.ability.extra.decay
            if card.ability.extra.Emult <= 1 then
                card:start_dissolve()
                play_sound('tarot1')
                return { instant = true , message = localize('k_eaten_ex') }
            end
        end
    end```
gaunt folio
#

I made it fair tho so if you sell the joker it removes the penalty

agile path
#

i want to try to make a deck

willow scroll
cursive gazelle
gaunt folio
#

fair enough

agile path
gaunt folio
#

unless you like it why would you want to play balatro thats just reroll simulator

cursive gazelle
#

There’s nothing such as SMODS.Deck LOL

harsh belfry
#

its Back!!!

cursive gazelle
cursive gazelle
agile path
#

to access the atlas of said back, is it the same way?

cursive gazelle
#

Yes

#

atlas =

#

“Atlaskey”

agile path
#

this is how i organize my art

slim ferry
#

im pretty sure atlas functionality is completely identical for everything

vast bridge
#

How to make card get back in hand after scoring?

slim ferry
#

except ig that blinds ignore y position because theyre animated

cursive gazelle
#

Spritesheet is more efficient

agile path
#

not with me

cursive gazelle
agile path
#

brain works differently

#

naming decks d_ and jokers j_

slim ferry
#

the entirely atlas system is definitely built around having larger spritesheets over singular images

agile path
#

brain will get confused

#

how much should the file be?
px and py

cursive gazelle
#

71x95

agile path
#

for deck back?

cursive gazelle
#

Yes

#

For everything actually

agile path
#

so 140 x 190 for 2x

cursive gazelle
#

Only blind icon and mod icon is 34x34

cursive gazelle
agile path
#

oh, i need to design the mod icon too

cursive gazelle
#

For mod icon you just need to make an atlas and name the key “modicon”

#

Smods loads it for you

#

Px and py =34

agile path
#

can i put it in the mod folder itself?

#

where my json file is

stray swan
#

how do you make something happen everytime a joker triggers/a card scores. More specifically, call the play_sound() function.

when putting it before the return of a if context.individual, it just does it once

zealous glen
stray swan
#

yeah but it's like an sfx that's longer and over it

zealous glen
#

If you’re playing sounds inside calculate

stray swan
#
  • there is another function that goes with it
zealous glen
#

I reckon you’re doing it wrong

#

Because the timing wouldn’t work

agile path
#

i was looking at vanilla remade

#

and this looks rather simple

zealous glen
#

Calculation happens before animation

agile path
#

i'll try something before asking for help

#

but it should be SMODS.Atlas and then SMODS.Back right?

zealous glen
#

So the sounds must be playing all at once at the start because you’re just calling the function that plays a sound

#

Instead of integrating it with the event system

stray swan
#

then how do i implement a sound and a G.[variable] change in the event system

zealous glen
#

What variable change are you trying to do

stray swan
#

becahse there is G.[imaganame] = x (where X is the number of frames the image stays on screen) as well as the play_sound

#

its a custom, newly made one

#

i can DM you the code but its kinda complicated since it also handles GIF displays

zealous glen
#

I would rather you describe what you’re trying to do

stray swan
#

okay so i have a joker that does +10 mult for each stone card scored

#

i want it so that everytime a stone card scores/the joker activates, the image displays and the sound plays

#

i may change the joker's effect but it'll still be on scored cards

zealous glen
#

Well, the sound should play at the correct time if you return the sound you’re trying to play

#

I don’t know off the top of my head but I think SMODS has a key for it

stray swan
#

well it only plays the sound/displays the image once but it still waits for it to be the first stone card scored

#

iirc the key is directly sound

zealous glen
stray swan
#

but i kind of want to keep the original mult sound too... I also belive that it won't solve hte image dispay problem

zealous glen
#

{mult, extra = {sound}}

#

Something like this should work

stray swan
zealous glen
#

Do you get the Mult five times?

stray swan
#

lemme show u

#

yes

#

making me doubt

#

gonna retry

#
        if context.individual and context.cardarea == G.play then
            if SMODS.has_enhancement(context.other_card, "m_stone") and not context.other_card.debuffed then
                G.ltg = 60
                play_sound("tao_vineboom")
                return {
                    mult = card.ability.extra.mult, -- Give +10 mult for each stone card scored
                    card = other_card,
                    message = "Pierrin' my shi'"
                }
            end
        end
    end,
zealous glen
stray swan
#

yes cuz im was using the play_sound function since the sound would replace the original sound

zealous glen
#

Does it work if you return the sound?

#

(minus not keeping the Mult sound)

stray swan
#

wait imma first see if the joker actually gives +10 fopr each stone cards

#

yep

#

only 1 img

#

1 sound

#

but all mults

#

like that ?

zealous glen
#

Idk

#

You can try that

agile path
#

okay so, the deck exists, but the atlas didn't work

cursive gazelle
#

Of atlas and deck

zealous glen
agile path
#

yup yup

zealous glen
#

Someone recently had this issue

agile path
#
SMODS.Atlas({
    key = "purplish",
    path = "d_purplish.png",
    px = 71,
    py = 95,
})

SMODS.Back {
    key = "purplish1",
    pos = { x = 0, y = 0 },
    config = { discards = 1 },
    loc_vars = function(self, info_queue, back)
        return { vars = { self.config.discards } }
    end,
    
}
stray swan
#

okay so, sounds plays five time but the image is still once but not sync

zealous glen
stray swan
#

yep but how do i display the image then ?

zealous glen
cursive gazelle
zealous glen
stray swan
#

alr

cursive gazelle
#

And name=“name”

zealous glen
agile path
cursive gazelle
#

In SMODS.back

zealous glen
#

Or well

#

I think you can define localization in the object itself, usually

cursive gazelle
#

Loc_txt

zealous glen
#

I prefer having a single localization file

stray swan
agile path
#

well, i haven't set the localization stuff yet
i want to fix the atlas first
then i'll add the entry in the localization file

cursive gazelle
zealous glen
cursive gazelle
#

Add this to your SMODS.Back

stray swan
#

inverse it like that ?

#

but is the sound key really mult ?

zealous glen
#

Have just the sound outside, and the rest inside

stray swan
#

ohhhh ok

#

like that

zealous glen
#

You forgot the message but yes

stray swan
#

yeah deleted it cuz i realized it did +10 mult then the lessage

#

and doesnt matter for now

#

no custom sound

agile path
stray swan
#

my bad

agile path
#

in SMODS.Back?

zealous glen
#

{sound, message, extra = {
}}

stray swan
#

okok thanks

cursive gazelle
cursive gazelle
stray swan
#

ok it works

#

custom sound and mult sound

agile path
#
SMODS.Back {
    atlas="purplish",
    key = "purplish1",
    pos = { x = 0, y = 0 },
    config = { discards = 1 },
    loc_vars = function(self, info_queue, back)
        return { vars = { self.config.discards } }
    end,
    
}
#

i'm a lil slow sometimes, i'm sorry :,)

stray swan
#

now how in the hell do you display the image knowing that its displayed by G.ltg = 60

agile path
#

like this?

zealous glen
#

But first

zealous glen
#

I need to know how does the image work

stray swan
#

you might wanna switch to DMs since it kinda complicated

#

huge code chunks

zealous glen
#

Just give me an idea of what the variable is doing

#

The answer is about the same

#

But if you want it to look a specific way I’ll know better what to suggest

gaunt folio
#

whats not working? Im trying to make it so a hand with three of a specific rank increases a percent that the joker reduces blind size by

agile path
#

i gotta fix the text first lol

#

then fix the config, but so far so good, thank you!

cursive gazelle
#

Nice art

agile path
#

oh, thank you ^^

stray swan
#

art and idea is cool

#

but the double space before -2 joker slots is freaking me out

harsh belfry
agile path
#

me too

agile path
zealous glen
stray swan
gaunt folio
#

kw i can rework this to suit it probably works better

zealous glen
stray swan
#

oh my bad

#

i will separate them

modern kindle
#

tech you can if you download em

agile path
#

also, what's wrong here

#

... nvm

#

{C:tarot,T:v_wheel_of_fortune}

gilded goblet
#

did someone else make that joke

agile path
stray swan
bold sleet
#

Hello good people, does anyone happen to know how to unrestrict the characters one can add to a text input?

agile path
#

i can't find the consumable tooltip list, is there any?

cursive gazelle
agile path
#

i made the soul tool tip work, but for wheel didn't work

dim rune
#

Hello, how can I print/log things to help find what crashes my game on startup ?

cursive gazelle
agile path
#
b_jgbt_purplish1={
                name={"Purplish Deck"},
                text={
                    "Starts with both a {C:spectral,T:c_soul}Soul{}",
                    "card and a{C:tarot,T:v_wheel_of_fortune} Wheel of Fortune{}",
                    "but gives {C:attention}#1# joker{} slots",
                },
            }
bold sleet
# agile path

Suggestion for a description more in line with the way Local makes 'em:

Start with a Soul and
a Wheel of Fortune
-2 Joker slots
bold sleet
#

I want to know where those are made.

red flower
#

i think bepis knows

bold sleet
#

@manic rune, then.

agile path
#

bro, of fucking course i got chicot from the soul

cursive gazelle
#

Or print

zealous glen
#

@stray swan So I think there’s two (or three) ways to achieve what you want

#

I’m not sure the extent to which they’re different

#

But it’s all about Event timing

#

The easiest one to try first is to return func and have the function set the variable value

bold sleet
#

If you want balala to immediately crash, error, otherwise use print or sendDebugMessage("message","logger")

zealous glen
#

I think in theory it’s supposed to execute function during animation, but I’ve seen it act weirdly

agile path
#

but why isn't the wheel's tooltip working ;-;

cursive gazelle
#

Are you sure

harsh belfry
#

wheel of fortune voucher real

cursive gazelle
#

Also check for Uppercases

stray swan
zealous glen
#

See if the timing works

stray swan
#

can't test it rn, will tell u when its done

gaunt folio
#

after some reworking, hows this

agile path
cursive gazelle
#

C

#

And check for uppercase

agile path
#

in my defense, it copied it from vanilla remade and i messed it up lol

#

hence why v_

gaunt folio
#

why wont this work?

zealous glen
cursive gazelle
#

I love checking nils

red cradle
#

How to get all unlocked hands as table?

cursive gazelle
gaunt folio
#

oh wait think i missed something lmao

zealous glen
red cradle
cursive gazelle
#

Np man

red cradle
zealous glen
red cradle
#

yes

zealous glen
agile path
gaunt folio
#

There we go

zealous glen
#

It handles that internally

cursive gazelle
#

HOW

zealous glen
#

So you should be able to find out how to retrieve a table

agile path
#

brain autocorrected it lmfao

zealous glen
cursive gazelle
#

Would you play my game if it was like balatro but with a lot of glitches

zealous glen
#

I might remove “at least” actually

hidden notch
#

I was wondering how you managed to do that...
I understand now lewxen_Teary_Laugh lewxen_cry

dim rune
#

Yeah I think if we write in a localthunk way it would be "if hand contains 3 scoring Club cards", with 3 in yellow

red cradle
#

So, i just use G.GAME.hands but this doesnt works(

#

SMODS.smart_level_up_hand(card, pseudorandom_element(G.GAME.hands, "othala"), nil, -1)

zealous glen
#

Idk the new SMODS function but it might expect something specific

red cradle
zealous glen
#

Like names

red flower
#

G.GAME.hands is not integer indexed

red cradle
#

G.GAME.hands use names or keys?

dim rune
hidden notch
agile path
#

is it possible to increase the negative chance?

red flower
zealous glen
red flower
#

pseudorandom_element only works on arrays

dim rune
red cradle
#

G.GAME.hands is not array?

harsh belfry
#

no

red flower
#

no

red cradle
#

ok

#

so

#

how can i get random hand

harsh belfry
#

G.handlist would work

red flower
#

check to do list

agile path
#

i ain't going to lie, i figured this would cause a crash 💀

#

time to make half joker viable

red cradle
agile path
#

mine

#

mine's hormone pills

#

my goat

cursive gazelle
agile path
#

4.5x by doing nothing is lovely

harsh belfry
agile path
#

wait, chat
how do i increase negative rate on the shop? i want that to be a feature of my deck, since it only has 3 joker slots

#

can i start off of this?

stray swan
#

ok im back, does it need a return ?

hidden notch
harsh belfry
agile path
zealous glen
#

I had written more about this but I think it was in the localthunk channel

agile path
zealous glen
harsh belfry
zealous glen
#

Also yeah it violates conciseness

#

I wish the localthunk channel existed because I liked how I had written it

#

I had found three words starting with C

#

Clarity, conciseness, and

#

Ah, consistency IIRC

#

I think later I added two non-C words

#

Something like flavor and accuracy maybe

#

But I think clarity and conciseness are the most important

#

Consistency is important to create clarity, but

#

It can also create wording templates that are difficult to parse, thus reducing clarity

agile path
#

but but... how do i make it so that nat negatives in the shop have extra chance...?

zealous glen
#

Naturally you can opt to prioritize consistency over clarity

agile path
#

or is it even possible?

zealous glen
#

I recall reading something in the recent SMODS release

#

But idk if it’s relevant

harsh belfry
#

cryptid does it so check that out ig

zealous glen
#

I think it was about per-item weights

agile path
#

let me see

zealous glen
#

I mean I can imagine how I’d try to do it

#

Which is by manipulating the weight parameter of the Edition

#

But idk if that’s the recommended way of doing it

slim ferry
#

i think you could make the chance of getting a negative when an edition rolls at all higher, but the rate of any edition rolling is a fixed value afaik

agile path
#

i was looking at the tarot merchant to see if i understand how to implement it on my deck (or get an idea from it)

#

defeating a boss blind gives a negative tag

#

would that be possible? since yknow, anaglyph deck

harsh belfry
#

yes

zealous glen
#

Yes

agile path
#

plagiariasm at its finest

        if context.round_eval and G.GAME.last_blind and G.GAME.last_blind.boss then
            G.E_MANAGER:add_event(Event({
                func = function()
                    add_tag(Tag('tag_negative'))
                    play_sound('generic1', 0.9 + math.random() * 0.1, 0.8)
                    play_sound('holo1', 1.2 + math.random() * 0.1, 0.4)
                    return true
                end
            }))
        end
    end

all i did was change tag_double to tag_negative

#

context.round_eval is when you are receiving the money from the boss blind and the last two G.GAME are to specify if you are in the boss blind?

crystal perch
#

anyone know what's causing this crash on my spectral card?

can_use = function(self, card) -- line 17
        local has_ethereal = 0
        for i = 1, #G.jokers.cards do
            if G.jokers.cards[i].ability.chak_ethereal then
                has_ethereal = 1
            end
        end
        return G.jokers and #G.jokers.cards > 0 and has_ethereal = 1
    end,
    use = function(self, card, area, copier)
        local chosen_joker = pseudorandom_element(G.jokers.cards.ability.chak_ethereal, 'realize_choice')
        local deletable_joker = pseudorandom_element(G.jokers.cards not chosen_joker, 'realize_choice')
        local _first_dissolve = nil
        CHAK_UTIL.use_consumable_animatio(deletable_joker, nil, function()
                SMODS.destroy_cards(deletable_joker)
                return true
            end
        )
        CHAK_UTIL.use_consumable_animatio(chosen_joker, nil, function()
                chosen_joker:remove_sticker('chak_ethereal')
                return true
            end
        )
    end
slim ferry
#

G.jokers.cards.ability.chak_ethereal is the sticker ability table, idk why youre doing pseudorandom_element on that

crystal perch
#

well i want it to pick a random ethereal joker

#

but the part that's crashing it is the can_use

slim ferry
#

i mean the crash says that its coming from utilities/misc_functions.lua at line 8

#

could you show that file too?

crystal perch
#

that's just the load file

harsh belfry
#

you specified the path wrong i think

crystal perch
#

the path isn't wrong

#

every crash has that

#

trust me

harsh belfry
#

hmm

crystal perch
#

if i get rid of the can_use it loads

agile path
#

config = {joker_slot = -2, consumables = { 'c_soul' , 'c_wheel_of_fortune' }, chance = 0 },
how do i check what number does chance has? card.ability.extra.chance is only for jokers, no?

slim ferry
#

wdym

crystal perch
#

usually cards use odds

slim ferry
#

you can have any values on any card

agile path
#

bruh, the way i convey words is just so fucking weird

harsh belfry
#

dunno if you can do the variable setting like that

slim ferry
#

ohhh yeah it should be has_ethereal == 1

crystal perch
#

fuuuck

agile path
#

so, when making a joker, in the config, if you want to use any variable, you need to use card.ability.extra.variable_name, correct?

crystal perch
#

i always forget the other =

slim ferry
#

the entire card config field is copied to card.ability

agile path
#

is it the same with decks?

slim ferry
#

yes

agile path
#

thank you, all i needed

slim ferry
#

it should be the same with all centers

vernal path
#

Code should yell at you for trying to set a variable in a statement, lol. Do you have any kind of warning suppression on?

crystal perch
#

i don't have that on because the lua vscode extension doesn't know anything about smods and other misc utils i make myself and i don't care to set it all up lol

vernal path
#

Personally, i just have my workspace to be my Mods folder, it usually makes everything work

crystal perch
#

yeah i do that too

slim ferry
harsh belfry
#

not really

#

the colours just get weird

crystal perch
#

it never screams at me

slim ferry
#

because you cant set variables in a return

vernal path
#

which is usually why I'd avoid doing that

gilded goblet
#

I was wondering how you'd set up definitions for Balatro functions and SMODS functions

#

That'd be super handy

crystal perch
#

this is what my workspace looks like with it on

#

all the code is sound btw

vernal path
harsh belfry
#

thats ugly

crystal perch
vernal path
#

i mean, i have some suppression on for when i hook functions, but thats single line

red cradle
#

Ive finally coded all 24 spectral rune cards

gilded goblet
vernal path
#

i mean, if you suppress everything, you might as well use np++ or something

crystal perch
#

i like the vscode ui

crystal perch
vernal path
#

still, seems like a bad idea

crystal perch
#

it's worked thus far

zealous glen
#

Even though I tried to add Balatro and SMODS so VSCode would know their functions

#

I have Balatro in the same workspace and it still tells me the Balatro functions don’t exist

crystal perch
#

i have balatro, smods, and lovely all in the same workspace

#

apparently all their functions are heresy of the divine lua gods and thusly have no god given right to work

agile path
#
calculate = function(self, back, context)
        if context.setting_blind then
             G.E_MANAGER:add_event(Event({
                func = function()
                    card.ability.extra.chance = math.random(0,1)
                    message = localize("Rolling...")
                end
}))

is this gibberish?

crystal perch
#

according to the lua extension yes

vernal path
#

I mean my vscodium looks like this, i don't have suppression turned on at all, except for some single-line suppression for hooked functions

crystal perch
#

youre one of the luck ones

vernal path
#

or did you mean something else

agile path
#

there is, yes

#

i'm tryna make a 1 in 2 chance of giving a negative tag upon beating a boss blind

cursive gazelle
#

Don’t use math.random

agile path
#
calculate = function(self, back, context)
        if context.setting_blind then
             G.E_MANAGER:add_event(Event({
                func = function()
                    card.ability.extra.chance = math.random(0,1)
                    message = localize("Rolling...")
                end
                }))
        end
        if context.round_eval and G.GAME.last_blind and G.GAME.last_blind.boss and card.ability.extra.chance == 1 then
            G.E_MANAGER:add_event(Event({
                func = function()
                    add_tag(Tag('tag_negative'))
                    play_sound('generic1', 0.9 + math.random() * 0.1, 0.8)
                    play_sound('holo1', 1.2 + math.random() * 0.1, 0.4)
                    return true
                end
            }))
        end
    end,

since i don't know how to do the whole chance part, i'm doing it in other ways, also trying to figure stuff out on my own

vernal path
#

uhhhhh oh uh you dont have card defined

cursive gazelle
#

Use pseudorandom

agile path
#

i figured

agile path
vernal path
#

oh, yeah also dont use math.random lol

agile path
#

gotcha

cursive gazelle
#

Because math.random is always random

agile path
#

can i look at wheel of fortune chance stuff? for the whole 1 in 2?

cursive gazelle
#

But pseudorandom takes a seed which has always the same outcome

zealous glen
#

Take a look at the previous release’s release page

#

It discusses the new probability functionality

vernal path
agile path
#

(SMODS.pseudorandom_probability(x, y, z, w))

something like this?

#

ignore the xywz

#

i got it off of wheel's

slim ferry
#

pseudorandom_probability is for probability effects that can be detected/modified by other cards

agile path
#

got it. oops affects it?

slim ferry
#

yeah

#

if you just want a random number i think you can just use pseudorandom()

agile path
#

interesting
what does each slot do tho?
the x, y, z and the w
SMODS.pseudorandom_probability(card, 'vremade_wheel_of_fortune', 1, card.ability.extra.odds)
originally copied it like this

#

i understand the 1 and extra.odds
what i don't get is card and vremade

vernal path
#

if you have it in vscode, you can hover over the function to see what it does

slim ferry
#

first is the source object, then the identifier/seed, then the numerator and denominator

vernal path
#

because here the 1 wont be updated by oops

agile path
#

this is a deck that has 1 in 2 chances give you a negative tag on beating a boss blind

vernal path
#

okay, well then definitely replace all mentions of card with back, as you aren't making a joker or anything

agile path
#

got it

vernal path
#

tbh i'd look at a mod that has some kind of random functionality (thats updated) to get a better look at it

agile path
#

what about vremade_wheel?

#

oh

vernal path
#

its not updated

agile path
#

shit

vernal path
#

If you want, you can take a peek at mine, since i have one thats properly done

agile path
#

please do show

#

but following the logic

#

(SMODS.pseudorandom_probability(back, b_jgbt_purplish1, 1, 2))
this would technically work?

#

purplish1 is the key of said deck

vernal path
#

the key does not matter, the second argument is just a seed, which is a string. so make sure its a string

agile path
#

"test" got it

vernal path
#

And then after, technically yes, however it would break with an Oops or anything that messes with probability

#

if you just want the numerator to be 1 under most circumstances, you can replace it with G.GAME.probabilities.normal

agile path
#

i don't want it to be affected by oops

vernal path
#

and then for the denominator, you'll want to use a variable, defined like config = { extra = { odds = 2 } }

vernal path
agile path
#

guaranteed neg tag on beating a boss blind on a -2 joker deck
i want it to be a miserable deck /hj

vernal path
#

inconsistency be damned i guess

agile path
#

so it's not card.ability, it's back.ability.extra?

vernal path
#

yes, since card isn't passed, back is.

thorn pumice
#

guyts

#

whats that thing aclled

#

when you look at aj joker

#

and it says like

#

create a tarot card

#

and then displays the tarot card

#

how do i do that

agile path
vernal path
#

info_queue

vernal path
slim ferry
agile path
#

i play balatro, i cannot read :(

vernal path
#

no thats undertale fans

#

who keeps banana reacting

rotund sable
#

The guy above you

vernal path
slim ferry
#

mmm yummy bananan

#

is there anywhere you cant use a gradient in place of a colour? or can it actually be used everywhere where a colour is expected

vernal path
#

tryitandsee

slim ferry
#

good point

agile path
#

it's still crashing, on line 18 still

vernal path
#

unless you post the full code, line 18 is meaningless

agile path
#

how dare you

#

not simply guess

vernal path
#

oh true

agile path
#

0/10 helpful

slim ferry
#

average modding dev interaction

agile path
#

if context.round_eval and G.GAME.last_blind and G.GAME.last_blind.boss and (SMODS.pseudorandom_probability(back, "test", 1, back.ability.extra.chance)) then

#

is that fucking "test"

robust marsh
#

idunno why i felt like saying this but after a few weeks of modding the game I wanted to thank everyone here for helping people all the time u guys are awesome

vernal path
#

can you post the crash log? when is this crashing?

agile path
robust marsh
#

same pretty much

agile path
vernal path
#

the
the full crash log

agile path
#

fuck

vernal path
#

please just post the lovely log

agile path
#

but how ;o; where

#

where from

vernal path
#

its in Mods\lovely\log\ and its the latest one

agile path
#

like so?

vernal path
#

yeah

agile path
#

sorry for being slow lmfao, i was not understanding

vernal path
#

and then can you post the full deck code?

agile path
#

ofc

#
    key = "purplish",
    path = "d_purplish.png",
    px = 71,
    py = 95,
})

SMODS.Back {
    atlas="purplish",
    key = "purplish1",
    pos = { x = 0, y = 0 },
    config = {joker_slot = -2, consumables = { 'c_soul' , 'c_wheel_of_fortune' }, chance = 2  },
    loc_vars = function(self, info_queue, back)
        return { vars = { self.config.joker_slot } }
    end,

    calculate = function(self, back, context)
        if context.round_eval and G.GAME.last_blind and G.GAME.last_blind.boss and (SMODS.pseudorandom_probability(back, "test", 1, back.ability.extra.chance)) then 
            G.E_MANAGER:add_event(Event({
                func = function()
                    add_tag(Tag('tag_negative'))
                    play_sound('generic1', 0.9 + math.random() * 0.1, 0.8)
                    play_sound('holo1', 1.2 + math.random() * 0.1, 0.4)
                    return true
                end
            }))
        end
    end,
    
}```
vernal path
#

uhhh because you need to put extra stuff in extra

#

like i said earlier

#

config = { extra = { odds = 2}}

agile path
#

ooohhh

#

config = extra { {joker_slot = -2, consumables = { 'c_soul' , 'c_wheel_of_fortune' }, chance = 2 }},

this?

vernal path
#

n

#

no

agile path
#

obviously i didn't add a =

drowsy heath
#

okay so my mod crashes on one pc but works on another what on earth is happening its specifically a consumable that triggers the crash i have the crash log if that helps

vernal path
#

config = {joker_slot = -2, consumables = { 'c_soul' , 'c_wheel_of_fortune' }, extra = {chance = 2 } },

agile path
#

the variables should be added with an extra then?

vernal path
vernal path
drowsy heath
#

oh yh hold up

agile path
#

what about the "test" as pseudorandom_probability? do i leave it like "test" lol

vernal path
#

its like putting orange in your minecraft seed when you generate it

agile path
#

changing it to purplish_deck then

drowsy heath
#

idk what is going on with it, or what a new pc is doing wrong

agile path
#

same crash...

vernal path
drowsy heath
#

no i just use them

vernal path
#

turn them off

drowsy heath
#

talisman may be required soon tho with how its looking but okay

red flower
#

if your mod doesnt work with galdur then theres a problem with your mod lol

vernal path
#

i dont even remember what galdur does

drowsy heath
#

yeah these are the things i normally use

agile path
#

galdur's bate

drowsy heath
#

just reinstalled everything on a new pc tho

vernal path
drowsy heath
#

yeah that didnt work

vernal path
#

whats the new crash log?

agile path
drowsy heath
#

im clueless now