#💻・modding-dev

1 messages · Page 85 of 1

stiff locust
#

straights do not need the debuff 😭

teal estuary
#

ty

humble gale
#

no, i havent figured it out

humble gale
#

i figured it out. Call the config like this

config_name["config option"]
flat pier
#

I'm working on a joker that gives X Mult, but in calculate, setting the X Mult to anything doesn't change the actual scoring of the card.

#

The message pops up as if it has scored with the value I set, but it does not reflect on the round score

hybrid iris
#

hi! sorry to ask this again but im still struggling with this,
im making a custom poker hand that overrides two pair if the hand contains two black eights and aces, but it just doesn't seem to be loading/crashes

hybrid iris
flat pier
#

Ah, for the joker.

hybrid iris
#

can i see the code?

#

also nice name sjdhsjhd

#

oh oh my god you're literally me (saw the bio)

golden lake
#

chat Balatrostuck is Balatroback

mellow sable
#

having fun refactoring

crisp coral
#

i am so fucking ill right now

#

but i think that worked

#

nevermind i could've done the exact same thing on calculate_joker instead of eval_card

#

it works now yippee 🎉

#

i'm. not gonna bother to change the messages

mystic river
#

"hmm yes i have made a decent amount of progress tonight, I'm going to publish my updates to github now"

entire internet is down
thanks computers.

#

did you know color codes have to be all lowercase even if your mod's prefix contains capital letters. took me days to figure that one out. not unrelatedly my mod's prefix no longer contains capital letters

flat pier
hybrid iris
proper stratus
#

GUYS

#

QUICK

#

HOW DO I REPLACE TEXTURES FOR JOKERS IN BALATRO

#

AND ALSO WHATS THAT ONE MOD THAT LETS YOU SPAWN IN JOKERS FROM THE COLLECTION

crisp coral
#

declare a new SMODS.Atlas

proper stratus
#

also can you change the names for jokers

crisp coral
#

and DebugPlus

#

and yes, make a localization file at YourMod/localization/default.lua, following the format of en-us.lua in the game files

proper stratus
wintry solar
#

alternatively use Malverk so you can turn them on and off at will 😉

proper stratus
#

yeah i heard about malverk

#

does that work for jokers too?

wintry solar
#

yes

proper stratus
#

how do you make a malverk texture pack

#

oh god

wintry solar
#

what does your texture atlas look like?

proper stratus
#

i called upon him

proper stratus
wintry solar
#

the images you're using to replace

proper stratus
#

i have no texture mods if that helps

proper stratus
#

i know that theres a big grid of all jokers

#

what i wanted to do is just replace it in there

wintry solar
#

okay thats cool

#

Malverk will let you replace just that single joker

proper stratus
#

oh sweet

#

..how do i do that :3

wintry solar
#

so are you aware of structuring a mod with the assets folder?

proper stratus
#

not really

wintry solar
#

that's okay, just then I know where to start

#

so you create a new folder in your Mods folder named whatever you want your mod to be called

proper stratus
#

sounds good

#

done

crisp coral
proper stratus
#

its him

#

john malverk

wintry solar
#

then inside that you need a main.lua and a folder named assets

proper stratus
#

how do i get a main.lua file

wintry solar
#

just make a new file

proper stratus
#

does this work

wintry solar
#

looks good

proper stratus
#

i just made a text file then changed the file type

wintry solar
#

right, so inside the assets folder, you need a 1x and a 2x folder

#

inside each of those you need the sprite of your joker in the appropriate sizing

proper stratus
#

alright

#

how big does the 1x vs 2x need to be

wintry solar
#

1x is 71x95, 2x is 142x190

proper stratus
#

ok so i have the 2x

#

also does the image format matter

wintry solar
#

Malverk will actually support any sizes

proper stratus
wintry solar
#

so if you can't scale it down, you can use that as 1x and scale it up for a new 2x size

proper stratus
#

ohhh

#

neat

#

ok so ill just size it up to 2x scale

wintry solar
#

right, now for the main.lua file

proper stratus
#

ok so i have one thats 142x190 and one thats 284 x 380

wintry solar
#

sounds good

proper stratus
#

alright sick

proper stratus
wintry solar
#

I'm not fully clued up on the new structure for mod info so we'll use the old way

proper stratus
#

aye aye

wintry solar
#
--- STEAMODDED HEADER
--- MOD_NAME: 
--- MOD_ID: 
--- PREFIX: 
--- MOD_AUTHOR: [name here]
--- MOD_DESCRIPTION: 
--- BADGE_COLOR: HEXCODE
--- VERSION: 1.0.0
--- DEPENDENCIES: [malverk]
#

you'll need to fill this in

#

at the top of your main.lua

proper stratus
wintry solar
#

yeah that looks good

#

oh, the author needs to be in square brackets

proper stratus
#

done

#

oh, btw

#

with malverk, can you also change the name for the joker

wintry solar
#

yeah

proper stratus
#

perfect

#

alright what now

wintry solar
#

time for the Malverk part

#

what joker are you replacing?

proper stratus
#

the normal jimbo joker

wintry solar
#

does it need a custom description or just name?

proper stratus
#

just a name

wintry solar
#

sweet

#
AltTexture{
  key = 'steve',
  path = 'whateveryourimageis.fileextension',
  set = 'Joker',
  keys = {'j_joker'},
  localization = {
    j_joker = {
      name = 'new name',
    }
  },
  px = 142,
  py = 190
}

TexturePack{
  key = 'steve',
  textures = {'stv_steve'},
  loc_txt = {
    name = 'Name of Texture Pack',
    text = {
      'Brief description'
    }
  }
}
#

I think if you replace the path this'll work

proper stratus
wintry solar
#

give it a try

proper stratus
#

mhm!

wintry solar
#

do the images have the same name in each folder?

proper stratus
#

oops

#

nope

#

fixed

#

didnt change it

#

oh right

#

just a sec

wintry solar
#

did you turn it on?

proper stratus
#

yeah i need to do that

#

YEEEEEEEEESSSSSSSSSSS

wintry solar
#

uhhhh

proper stratus
#

:<

#

this happened when i tried to activate it

#

we're so close! >:3

wintry solar
#

can you send the full crash log? you should be able to copy it from the crash screen

proper stratus
#

lemme launch again

wintry solar
#

you should update your smods btw, it's very old

proper stratus
#

oh sure

wintry solar
#

oh I know why this crashed

proper stratus
#

oh?

wintry solar
#

add this to the altexture definition

loc_txt = {name = 'Steve'},
tepid sky
proper stratus
#

alright

#

let's see if this baby runs

wintry solar
#

where did you put it?

proper stratus
wintry solar
#

it needs to go in the other bit

#

the AltTexture part

proper stratus
#

aha

#

?

wintry solar
#

looks good

proper stratus
wintry solar
#

whats line 34?

proper stratus
#

just

#

the middle one

tepid sky
wintry solar
#

this might sound really weird, but try deleting those brackets at the end and then putting them back

proper stratus
#

i sent the .lua file so if there was somethign like that you could see

#

anyway i did that

#

seemed to work!

wintry solar
#

yeah I'm not at my dev pc so can't check properly, but it seems like it was detecting some dodgy white space or something

proper stratus
#

SEEMS TO WORK

#

YEEESSSSS

#

i think i messed something up with debug

#

lmao

#

im so happy

wintry solar
#

👍

hybrid iris
#

hi! sorry to ask, but is there a way to have a card like blueprint copy multiple other cards?

#

i cant seem to find any examples in the (three) mods i checked sjdhjshd

hybrid iris
#

for some reason none of my jokers seem to be triggering anymore

#

nevermind misspelled consumeable

hardy viper
#

cryptid probably

faint yacht
#

Can two messages be returned if a Joker multiplies both chips and mult?

wintry solar
maiden phoenix
#

Or use SMODS eval_this

#

Iirc

crisp coral
#

why card_eval_status_text when you can eval_this twice

wintry solar
#

I mean returning both values also works

teal estuary
faint yacht
#

What of retriggering every Joker? This one I have also has that, but it ends up retriggering itself after the scoring is finished.

if context.retrigger_joker_check and not context.retrigger_joker and context.other_card ~= self then
    return {
        message = toga_randomruntext(), -- random string output function, don't mind this.
        repetitions = card.ability.extra.retriggers,
        card = card,
    }
end
faint yacht
#

Also, the messages do show, but the multiplication of chips doesn't even occur, only the mult.

#

Here's the calculate part.

crisp coral
#

because xchips doesn't exist

#

SMODS.eval_this only supports chips mult and xmult

faint yacht
#

Right... then would it be better off merging the two into one message into a return?

teal estuary
#

you cant have more then one message in one return, you need to use something like eval_this

faint yacht
#

I more of meant to make a "custom" message, but return both Xchip_mod and Xmult_mod like I did prior to attempting eval_this.

wintry solar
#

you can put both x modifiers in the same return

#

then just put one of the messages in it, and the other in card_eval_status_text

#

or put the xmult in eval_this and the xchips in normal return

faint yacht
#

How would I format card_eval_status_text to include the blue color and the SFX that is made with xchips?

wintry solar
#

the final argument takes a table, you can add a colour = G.C.BLUE to it, but it doesn't look like it supported custom sounds

maiden phoenix
wintry solar
#

yeah that should probably be patched

#

especially in the extra call

crisp coral
#

i thought muting was supported

#

oh wtf it isn't

faint yacht
# wintry solar or put the xmult in `eval_this` and the xchips in normal return

The mult triggers twice in that.

if context.cardarea == G.jokers and not context.before and not context.after then
            if card.ability.extra.x_chips > 0 and card.ability.extra.x_mult > 0 then
                SMODS.eval_this(card, {
                    message = localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.x_mult } }),
                    Xmult_mod = card.ability.extra.x_mult,
                    colour = G.C.MULT
                })
                return {
                    message = localize({ type = "variable", key = "a_xchips", vars = { card.ability.extra.x_chips } }),
                    Xchip_mod = card.ability.extra.x_chips,
                    colour = G.C.CHIPS
                }
            end
        end
wintry solar
#

your context check is wrong

#

you need to check if context.joker_main then

faint yacht
# faint yacht Here's the `calculate` part.

And what else do I add to that check if accounting for the retriggering of other Jokers shown below in the image I've sent earlier to make sure the retrigger doesn't affect itself?

wintry solar
#

does the retrigger bit not work?

faint yacht
#

It retriggers itself, yes... and I want the multiplication of chips and mult to occur once from it.

wintry solar
#

I'm not sure I understand fully what the problem is then

faint yacht
#

The retriggering is meant to affect other Jokers but itself.

wintry solar
#

oh, try ~= card instead of ~= self

faint yacht
#

Perfect, this also fixes the random functionless retriggers. 🙏

weary jungle
#

    key = "Code",
    primary_colour = HEX("480049"),
    secondary_colour = HEX("890062"),
    collection_rows = { 2, 6 }, -- 2 pages for all runes
    shop_rate = 0.2,
    loc_txt = {
        name = "Runes",
        collection = "Runes"
    },
    can_stack = true,
    can_divide = true,

}
``` What am i doing wrong?
#

Oops! The game crashed:
functions/misc_functions.lua:1430: bad argument #1 to 'ipairs' (table expected, got nil)

frosty dock
#

SMODS.ConsumableType { ..., no =

weary jungle
#

let me try that

#

awesome it works!!

#

also, just to know, what is primary color and secondary color used for?

wintry solar
#

secondary colour is the colour that appears in the menu and you can use it as {C:key} in your descriptions

#

I dont remember what primary colour does

faint yacht
#

Funny visual bug with Brainstorm and my Joker - the xchips element is red when on Brainstorm, but is otherwise functional. 😂

teal estuary
#

im pretty sure all brainstorm things are red? but i could be misremebering

faint yacht
#

It copies the Sly Joker's +50 chips just fine. Although might just be my specific thing, as I use eval_this for the Joker's Xmult_mod first, then a return for Xchip_mod.

wintry solar
#

it might be because xchips is a modded value, so it gets confused

weary jungle
#
    object_type = "example",
    ...

SMODS.example{
    ...``` these are the same right?
wintry solar
#

no

weary jungle
#

then what is this?

wintry solar
#

cryptid's cursed way of registering objects

weary jungle
#

what is happening then?

wintry solar
#

they create a load of tables and then put those through the SMODS.example() creators

weary jungle
#

why???

crisp coral
#

eremel described it as cursed for a reason

proper stratus
#

guys

weary jungle
proper stratus
#

will the community accept me if i make a balatro sex update mod

#

because me and a friend are coming up with how to actually make this work

#

we are adding a new type of consumable

#

i will learn coding to make this work

crisp coral
#

...what?

proper stratus
#

dont worry about it

#

im losing my mind

proper stratus
#

I WANT TO PREFICE THIS

#

THERE IS OBVIOUSLY NO SEX

#

its just sexuality and shit like that

#

its a massive shitpost but its all sfw

weary jungle
#

iembed fail :(

tepid eagle
#

they're turning the jimbos gay

crisp coral
weary jungle
#

embed success :)

wintry solar
crisp coral
#

they're called odd todd and even steven

tepid eagle
#

gay marriage legalized, soon to be mandatory

faint yacht
#

And then there's the fusion of the two.

proper stratus
crisp coral
#

😭

proper stratus
weary jungle
#

i am afraid

crisp coral
#

oh i just noticed your nickname

proper stratus
#

i will learn how to mod this game for this bit

crisp coral
#

blocked for hating obelisk
-# /j

proper stratus
#

i will make it's gameplay actual fun

mellow sable
#

lol

weary jungle
#

how do i make a consuumable always negative

hardy viper
#

add a set_ability function to the object which will make the card negative

weary jungle
#

where would i put that

hardy viper
wintry swallow
wintry solar
#
set_ability = function(self, card, initial, delay_sprites)
  card:set_edition(‘e_negative’)
end
wooden nexus
tribal umbra
#

hmmmm

wooden nexus
#

Art logic: It's an inverted color of the negative joker's colors just cleaned up

weary jungle
#

what are the dimensions of a consumable in pixels?

wintry solar
#

71x95 is the canvas, but they’re generally 63x93 iirc

weary jungle
#

so make a 71x95 image, then draw within 63x93?

wooden nexus
#

Or just use this as a base

tribal umbra
wooden nexus
#

then use the consumable texture as a placement template

weary jungle
#

this is not a good rune bro 😭

#

the idea is there

teal estuary
#

whuh???

#

i cannot see anything wrong with this

rough furnace
#

Your extra.chips is nil

#

If your loading a save with the joker created before adding the chips to extra it may cause this

tribal umbra
#

thoughts on how to fill up the background for this card?

#

not sure if this fits in modding dev but its alright

#

i think it does because its developing a card but

tepid sky
tribal umbra
#

🤷🤷 hell if i know

tribal umbra
teal estuary
#

okay

#

that fixes it, but why the fuck does that error in the fitrst place

tepid sky
#

anyone able to say what went wrong with this?

rough furnace
#

The extras on the center are only used when creating the joker

#

After that they aren't touched so they can scale and stuff

teal estuary
#

i mean, thats how that always is - i've just never had an issue with spawning them in

tepid eagle
#

that's like saying "i built a car, and then i added wheels to the blueprint, so why didn't all the cars i already built gain wheels?"

rough furnace
#

I mean if you had some bad code that set the chips to nil at one point it would also do the same

teal estuary
#

to my knowledge, nothing is effecting the value of chips unless its a club card 😭

#

or nothing should be atleast

#

spawning them in and then reloading seems to cause this issue, so yeah

rough furnace
#

The value wouldn't be set to inf or nan by any chance?

weary jungle
#

how do i make a spritesheey

#

can i define each texture sepratley

wintry solar
#

you can but it's not good practice

#

what are you making your art in?

weary jungle
#

pixil art the free onltne pixel art editoe

wintry solar
#

I am unsure if this has a spritesheet exporter, otherwise just add them next to each other in a big image

weary jungle
#

i shoulr use like aesoprite

#

i should not use aesptrite

#

what is a good free way to make the spritsheets

wintry solar
#

aseprite is free if you build it yourself

weary jungle
#

call me a consturuction huy

weary jungle
#

better, but still bad

#

i guess this will work

cerulean rose
#

is there a way to change a joker's sprite based on whether high contrast cards is enabled?

weary jungle
#

what im going for

spare elk
#

PERTHRO JERA HAGALAZ HOLY CRAP ISAAC ARHDHDOAVPQBWPSNCKAOBSKEBV

weary jungle
#

average isac fan

weary jungle
weary jungle
#

runes alert

#

bottom row done

spare elk
#

BERKANO EHWAZ DAGAZ AUEVRVTODHEHEPRKQVDIFBR

weary jungle
#

these runes will NOT be functioning like they do in isaax

wooden nexus
#

Is there a way to make a new card type that goes into the deck? Not count as a playing card unless i want it to

orchid thunder
#

how the hell does text in tabs work

hardy viper
#

nobody knows

#

except eremel probably

orchid thunder
weary jungle
#

how should i export spritesheets?

mystic river
#

unresolved conflicts
i disabled all other mods for testing
// ! No mods in the list may be installed, else this mod will not load.
exact-words brain kicking into gear
do conflicts still apply if a mod is deactivated??

weary jungle
#

why is there 2 and where are my textures

orchid thunder
weary jungle
#

how do i add a texture to a card

#

i dont think i did it correct

tepid crow
weary jungle
#

pos = {x=1}?? is that wrong

orchid thunder
weary jungle
orchid thunder
#

it starts at 0 though

#

no like the ATLAS

weary jungle
tepid crow
orchid thunder
#

hmm you trying to get blank one

weary jungle
#

im trying to get one after blank

weary jungle
tepid crow
#

atlas = 'runes' I believe

#

whatever the key of your SMODS.Atlas was

weary jungle
#

now they are pixelated and also cut off

#

i put 4px padding, do i account for that in px and py?

tepid crow
#

yeah, you'll need to account for the actual sizes in px and py

weary jungle
#

so for 4px padding, itd be 73 x 97?

tepid crow
#

assuming your padding matches that, yeah

weary jungle
#

also is there a keybind to restart balatro?

tepid crow
#

holding M, though maybe that's only with debugplus

weary jungle
#

i sam usingf debug plus so where good

#

we are

#

why is it so pixellated?

#

or like blurry

weary jungle
#

how do i make it use the other sprite? its using the first in the atlas instead of the second

weary jungle
#

everyones asleep 😔

cerulean rose
#

is that the duplicate of the blank rune?

weary jungle
#

what?

#

its the steammoded bug, they are both the same rune

cerulean rose
#

is there not supposed to be a blank rune?

weary jungle
#

there is, but its going to come later

#

i just set the spritesheet weird

cerulean rose
#

so theres not supposed to be a blank rune appearing in-game (yet)

weary jungle
#

i want to use the second item, not the first

#

the straw one

cerulean rose
#

try moving atlas above pos???

#

i'm just as confused as you are

weary jungle
#

does pos mean spritesheet or collection

mystic river
#

your pos is set to 0, 0
it should be 1, 0
and yes it's the position on the spritesheet

weary jungle
#

order is for collection then?

mystic river
#

order is collection position iirc, but i haven't actually checked that

cerulean rose
#

yes

weary jungle
#

its working, but its blurry

mystic river
#

how did you make the 2x

weary jungle
#

image rescaler

cerulean rose
#

make sure when upscaling that your program isn't set to smooth the pixels
"nearest neighbor" usually works

mystic river
#

yes that

weary jungle
#

ill try that

#

aesprite resize 200% would work right?

cerulean rose
#

can you send a screenshot of the resize window

weary jungle
#

oh we are so crisp now

weary jungle
#

mfw my username is too long for the mod tag (i know it should be consumables)

#

crying

#

how would i fix this

mystic river
#

is it possible to put line breaks in the display name?

#

(i don't recall seeing it ever so i'm guessing probably not)

weary jungle
#

that didnt work

#

is it \n ot /n

mystic river
#

reasonably sure it's \n

weary jungle
#

man

#

mfw name to long.....

cerulean rose
#

\n is the line break yes

#

that's really odd that it would display like that though

weary jungle
#

there has to be something for this? it seems like it would be a common problem

mystic river
#

i guess abbreviating the mod name for the tag is the intended solution here

weary jungle
#

man

#

devs hear my plea

cerulean rose
weary jungle
#

i canty even write thatguy's consumables.... the last s gets cut off.....

#

how are we thinking of the acronym

cerulean rose
#

could prob readd the 's

wintry swallow
#

Trying to add a boss - but somehow in the table eligible_bosses it ends up with a true instead of a number, and I have no idea where that comes from

cerulean rose
#

do you use in_pool?

wintry swallow
#

No

#

I guess I have to?

cerulean rose
#

no you don't

#

but that is strange

#

also strange that bl appears twice in the id

wintry swallow
#

Eh I start my keys with bl_circus and I get Steammodded puts another in front?

cerulean rose
#

yes

#

you don't need to prefix all of your keys when defining them

wintry swallow
#

Helps though to pick my own set

weary jungle
#
    set_ability = function(self, card, initial, delay_sprites)
        card:set_edition(e_negative, false, false)
    end,
    unlocked = true,
    discovered = true,
    loc_txt = {
        name = "Laguz",
        text = {"Gain {C:attention}+1{} discard for this round"}
    },
    atlas = "runes",
    set = "Runes",
    name = "runes-laguz",
    key = "laguz",
    pos = {x = 1, y = 0},
    config = {},
    cost = 4,
    order = 1,
    can_use = function(self, card)
        return G.STATE == G.STATES.SELECTING_HAND
    end,
    use = function(self, card, area, copier)
        G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,func = function()
            ease_discard(1)
        return true end }))
    end,
}```this isnt making the rune always negative, how do i fix this
weary jungle
#

what does negative do? it doesnt directly invert?

#

how do i uninvert the sprite

wintry swallow
weary jungle
#

left is inverted atlas, negative

#

right is not inverted

cerulean rose
#

if it's negative, maybe leave the sprite as-is to make it clear that it's negative

weary jungle
#

this isnt a rock though

#

by keep sprite as is, you mean how its looking right now?

#

like this?

#

where is the shader for negative

#

i have my work cut out for me...

#

thats better

#

itll do

cerulean rose
weary jungle
#

but itd look uglrt

cerulean rose
#

thats kinda how negatives be

weary jungle
nocturne garnet
#

chat

#

small question

#

if i wanted to make a checkbox appear next to a joker

#

how would i do it

weary jungle
#

like clickable???

nocturne garnet
#

yea obv

weary jungle
#

that seems hard

magic dawn
#

I'm curious, is it possible to make a boss blind that makes it so cards drawn aren't removed from your deck? So that your deck will always have however many cards it currently has, no matter how many cards you actually draw. Meaning you can draw multiple copies of the same card, but also have the same odds of drawing one particular card no matter how many cards you draw or discard.

cerulean rose
#

sure it is

nocturne garnet
#

oopsies

nocturne garnet
#

problem is i dont know how to get the current pool size

#

so it crashes when the pool runs empty

#

it worksssss

#

now i just gotta work on UI 🥹

abstract lintel
#

Hey guys quick question is modding mobile balatro possible?

frigid flame
#

does nobody read the modding rules channel???

#

this is like the 7th time i've seen someone ask this

tepid sky
tribal umbra
maiden phoenix
#

If I get the size of a scoring hand, does it counts debuffed cards as well? Not sure if it counts them all if I just do #context.scoring_hand

#

And if not are there alternatives do get it?

hardy viper
#

#G.play.cards ig

maiden phoenix
#

Wont g.play.cards give me the unscored cards too? I only want the ones that made the scoring hand

wintry solar
#

Debuffed cards should be in the scoring hand afaik

opal apex
#

hey guys my game keep crashing while i'm trying to installing this mod:
Collabs reimagined by Auto Watto [ID: mod_custom_collabs_deck, Version: 1.0.0]

any helpers?

nocturne garnet
nocturne garnet
#

can someone help me rq?

#

its supposed to display all jokers previously disabled last session as disabled

hardy viper
#

center.key is not a thing?

nocturne garnet
#

it is, though?

hardy viper
#

center is a thing

#

center.key is not

#

unless smods adds it for some reason

nocturne garnet
#

center is a table with a key is it not?

hardy viper
nocturne garnet
#

it is

hardy viper
#

uhm ok if you insist

#

I was assuming you wanted help

#

lol

nocturne garnet
nocturne garnet
#

its not that i didnt want help

#

its just that that was not the problem

hardy viper
#

unfortunately for you you are wrong and refusing to listen

nocturne garnet
hardy viper
#

a center has no key property

#

generally the key is, the key in P_CENTERS

#

but since collections pull from P_CENTER_POOLS.<pool> and those don't have keys the only way to get a key out of it is to iterate through P_CENTERS to look for a matching center

#

and then just take the key from the pair

nocturne garnet
#

the key has always been a thing afaik?

#

never has it not existed for me

hardy viper
#

odd

nocturne garnet
hardy viper
#

it's not a thing in the vanilla objects

#

maybe SMODS adds it but only to the mod-inserted jokers

#

oh nvm

#

there's vanilla jokers there

#

weird

#

typical steamodded jank

frigid flame
#

i'm assuming it was easier to make a menu for all the modded jokers

#

and then add all the vanilla jokers there

nocturne garnet
frigid flame
#

than it was to add the modded jokers to the vanilla meniu

hardy viper
nocturne garnet
#

that is literally from vanilla code

#

self.config.center.key

#

center being yk

#

center

hardy viper
#

must only be in certain objects ive been well through the p_centers table vanilla uses

nocturne garnet
#

it is in cards, that is for sure

hardy viper
#

unless there's some shit code that inserts the keys in there at runtime for no reason

#

i wouldn't be surprised though considering this is balatro

hardy viper
#

the thing i know for sure is that the centers as they are written don't have a key inside them

royal ridge
#

anyone know where the get_x_same modification is located in smod?

crisp coral
#

when in doubt, core/overrides.lua

#

nvm it's lovely/playing_card.toml

royal ridge
#

lmao

#

thanks

hearty sand
#

Hey! I'm currently "TRYING" to work on a Danganronpa Joker mods, but I am learning lua at the same time, so I'm never sure of what I am doing, so I would like to know how I can try my mods in game to check if my code is good

#

There is my code for my first joker

hardy viper
#

for one, that won't compile because you're trying to define a function inside a table

#

and for two you're overriding Card:set_cost

#

which you shouldn't do

#

anyways to test it you launch the game

#

and if you have debugplus or similar you just open collection find the joker and press c or 3 to spawn it in

hearty sand
glossy stone
#

I kinda worked on a little bit of joker art today i guess... maybe it'll be done tomorrow if i have motivation

weary jungle
#

i know about ease_hands and ease_discards, but what other eases are there?

hardy viper
#

ease_dollars

weary jungle
#

thats it? what about hand size

crisp coral
#

G.hand.config.card_limit

weary jungle
#

How would i make something happen after a blind ends

silent pawn
#

ive always used G.hand:change_size(-card.ability.extra.ABILITYNAME)

#

im guessing its based on the context its used in because mines always been under add_to_deck = function(self, card, from_debuff)

crisp coral
#

oh

#

that exists

silent pawn
#

its better if you're using multiple jokers that stack handsize

weary jungle
#

lets say i use a consumable in small blind, how would i, for example, change hand size next blinds

silent pawn
weary jungle
#

what about removing hand size?

silent pawn
#
  G.hand.config.card_limit = G.hand.config.card_limit - n
end```
#

but i use this one second

#
    G.hand:change_size(-card.ability.extra.h_size)
  end,
  remove_from_deck = function(self, card, from_debuff)
    G.hand:change_size(card.ability.extra.h_size)
  end,```
#

where h_size is the amount of hand size

weary jungle
silent pawn
#

on the next blind after using the consumable?

#

i wouldnt know i cant lie

#

you can use this code as reference, it'll need tweaking for your own use case, but i have a joker that increases the handsize based on the amount of skipped blinds

weary jungle
#

i want handsize to decrease, but not on the round you use it on

silent pawn
#
      G.E_MANAGER:add_event(Event({
        func = function() 
          card_eval_status_text(card, 'extra', nil, nil, nil, {
            G.hand:change_size(card.ability.extra.increase),
            message = ("+" .. (G.GAME.skips) .. " Hand Size"),
            colour = G.C.ATTENTION,
            card = card
          }) 
          return true
        end}))
    end```
silent pawn
nocturne garnet
silent pawn
#

you'd have to have some variable that counts the amount of consumables you use during a blind, and then store that

nocturne garnet
#

it saves during the session but everything is erased afterwards

silent pawn
#

and when a blind starts you'd want to affect your handsize using that variable and reset it back to 0

weary jungle
#

itd be a permanent change

silent pawn
#

yeah yeah

#

set the variable back to 0 i mean so that it can count the next blinds consumables

#

what would the change be per consumable used

weary jungle
#

-1 hand size

#

its only one consumable

silent pawn
#

oh is it the consumable that takes the hand size away

weary jungle
#

you use it, gain 1 or 2 discards for this round, but -1 hand size for the rest of the game

silent pawn
#

i was under the impression there was a joker that was doing it whenever you used a consumable by bad

#

oh i see

#

im not sure how you'd apply the -1 hand size on the next round

#

it'd be fairly easy to make if it applied on the same blind as the blind you use it on though

weary jungle
#

is there a function that happens when you win a blind?

#

because i can store the hand size change and change hand size when the blind is won

#

or... will i have to take control of functions (scary)

elder vapor
#

working on a concept for a mod, gonna see if i can get a prototype working once i'm done concepting

weary jungle
#

maybe when the gold cards score is when i can change handsize

crisp coral
silent pawn
weary jungle
#

would this work?

silent pawn
#

i think it might just be context.end_of_round

nocturne garnet
weary jungle
#

dumb question, what does context mean

nocturne garnet
silent pawn
#

oh wait you're making a consumable i forgot

nocturne garnet
weary jungle
#

could i change the blind win function to also change hand size from a variable?

silent pawn
#

what do you mean by the "blind win function"

weary jungle
#

like whatever happens when blind wins

#

there is probably a function for that

#

like gold cards giving money

silent pawn
#

i dont work with consumables too much but contexts might still apply to consumables i have no idea

#

someone else might have to help you cus i mainly make jokers xd

#

sorry

weary jungle
#

CONSUMABLE GODS HEAR MY PLEA!!!!

spare elk
#

THUNK!!!! YOUR MODDER HAS RETURNED!! I COME... SEEKING THE CONTEXT OF AFTERBLIND!!!

weary jungle
#

would G.GAME.blind.defeat(self) work? it seems like it would do things after a blind is defeated,

spare elk
#

modder... you will not get a full view of the context of afterblind

royal ridge
spare elk
#

GRAHHHHH!!! DO NOT DENY ME MY CONTEXT TABLES!!!

weary jungle
#

after you use it?

royal ridge
#

like

#

wdym

#

that's just the function that creates the end round state (gold cards and such)

nocturne garnet
#

idk what im doing wrong 😭

weary jungle
#

you use it, gain 2 discards for this round, then hand size decreases by one for the rest of the game (not the blind you use it on)

royal ridge
#

oh

#

uhhh

silent pawn
#

its making the hand size apply on the next blind that is the pain

#

xd

#

otherwise it would be super simple

weary jungle
#

this would also probably be useful for the rest of the consumables im doing (short term benifits, long term downsides)

royal ridge
#

increment a global game variable (G.GAME.your_consumable_uses, could be anything as long as it's in G.GAME), then hook end_round() to decrement hand size based on how big that variable is, then reset it to 0

tribal umbra
#

how do you edit a lua file

#

do you need a program

#

i dont do mods

weary jungle
#

any text editor would do

silent pawn
#

you CAN use notepad but its not ideal

#

i use vscode but just anything you can use to edit text

tribal umbra
weary jungle
#

notepad ++ is good, visual studio is as well

tribal umbra
#

ah

silent pawn
#

my friend uses notepad++

#

and apparently thats pretty good

tepid crow
#

don't use notepad++ if you're planning to do anything long-term btw, it's fine for a quick edit but not for a whole project

royal ridge
# weary jungle how do i hook a function?,

this is a really simple hook, you can just do something like:

local endroundref = end_round
function end_round()
  endroundref()
  your_code = here
end

what you're basically doing is copying the current end_round function, overwriting it, and then calling the copy from within the function so nothing breaks

weary jungle
#

ok got it

tepid crow
# tribal umbra btw why

VScode, or atom, or sublime, or whatever else you prefer
Notepad++ doesn't actually understand anything about the language you're writing, or does projects afaik. So it can show syntax but that's about it, while other editors can point out errors in advance, give suggestions, etc

nocturne garnet
#

YESS IT WORKS!!!

#

I WILL NOW INTRODUCE THE NEXT BIG HIT MOD!!!!

tribal umbra
#

i mean im just beginning

#

i dont even know where to start

weary jungle
#

what are a list of globals and where would i find them

royal ridge
#

but if you actually want a list of literally every global then idfk lmao

tepid eagle
#

G.GAME.bhefiwhllaaaaaaaaaa is set to 14

weary jungle
#

okasies

cunning barn
silent pawn
weary jungle
#

G.GAME.IHATEOBELISKAHHHH

silent pawn
#

best global

tribal umbra
#

so how do you start with making a mod?

#

do you get your ideas together first

#

well

#

i assume you do that haha

#

but i mean i dont have any programming knowledge, can i still whip up something with enough effort or

silent pawn
#

yea ofc the first step is just come up with ideas

tribal umbra
#

is programming knowledge kind of

#

required

weary jungle
#

you can learn!!!

silent pawn
weary jungle
#

lua is like easy or something

silent pawn
tribal umbra
#

issue is

#

im not very good at modding or anything like that

#

so im scared of fucking up my game LOL

silent pawn
#

you dont really need to be

#

this is the first time ive modded a game xd

#

also, any mods dont affect the actual source code of the vanilla game itself

tribal umbra
#

ah yeah

silent pawn
#

if you break anything and want to fix it you can just remove your mod from your mods folder and it'll be fine

#

by fix it i mean just revert to vanilla

#

mods cant have like permanent effects on the game itself xd

tribal umbra
#

so whats the first step +

#

just creating the base file?

#

the json i assume

silent pawn
#

yeah start by creating the mods directory

#

so you'll have the assets and then your .lua

#

also under assets you'll have a 1x and 2x folder, 2x just being the same sprites but upscaled to 2x

#

you can look at basically any other mod for its directories, but some mods do lay them out differently

tribal umbra
#

making the spritesheet might be fucking impossible

silent pawn
#

heres mine

silent pawn
tribal umbra
#

what is a toml file 😭

hybrid iris
#

dont worry about it

silent pawn
#

you can take a spritesheet from a different mod, and then just overwrite each jokerw ith your own

#

thats what i did

silent pawn
tribal umbra
#

or just a spritesheet template honestly

silent pawn
#

which isnt really important

hybrid iris
tribal umbra
#

i also suck at art

#

🥳🥳

hybrid iris
#

i dunno if its a good time to share this but uh
yippee finally figured out how the patching for after scoring works

hybrid iris
#

thankies

tribal umbra
#

how do you make jokers work? is it too difficult

silent pawn
#

not really

#

a lot of my learning was looking at the code for other mods and learning from them

#

especially looking for jokers with similar effects to the idea i was currently making

hybrid iris
#

also it is surprisingly difficult to modify how hands work

tribal umbra
silent pawn
#

probably just custom base chips/mult

hybrid iris
#

yeahh

tribal umbra
#

i see

hybrid iris
#

basically an instant win

silent pawn
#

xd

tribal umbra
#

damn making custom hands is a nice idea

silent pawn
#

what actually are the stats that it has lol

tribal umbra
#

i might look into like

silent pawn
tribal umbra
#

i thought about an exponential joker

silent pawn
#

yea good luck

#

😭

tribal umbra
#

which has a 1/x chance to square the amount of chips each round

#

but that looks super difficult

hybrid iris
tribal umbra
#

i haven't decided on the chance yet

silent pawn
#

oh to be fair that isnt that bad

tribal umbra
#

it starts at 2

#

thing is

#

if i make it too rare it's gonna take forever to scale

#

but if i make it too common its going to scale so fast

#

2-4-16-256..

silent pawn
#

wait so is it going to be like

#

it has a chance to square an amount, and then that amount is added?

#

or just square the chips in the current hand played entirely

hybrid iris
#

honestly when it comes down to pseudocode writing jokers is just like
"if context.joker_scoring, mult = 20"

tribal umbra
hybrid iris
#

oh that is a really fast scaling

silent pawn
#

yea xd

tribal umbra
hybrid iris
#

what about like

#

when a boss blind is beaten

tribal umbra
#

make it too rare and you're stuck with 4 chips for the entire run

silent pawn
#

oh so it will start out with like a small +chips, and each round/hand played/whatever it has a chance to square that amount

hybrid iris
#

im sure there's code for that in the game

tribal umbra
#

i thought about making it like

#

powers of 2

#

so like 2-4-8-16 etc..

#

but i dont know either

silent pawn
hybrid iris
#

yeaahh

tribal umbra
#

i already have a good powers of 2 idea for a joker

silent pawn
#

it'd be like

tribal umbra
#

in case you're curious

#

it's called lattice

silent pawn
#

if context.end_of_round and G.GAME.blind:get_type() == 'Boss' then

hybrid iris
#

mhm

tribal umbra
#

and whenever a hand with 2 or more cards adding up to a power of 2 is played you get +16 mult permanently on that card

#

or +8

#

thinking

silent pawn
#

by "a power of 2" do you mean a square number

tribal umbra
#

on the joker i mean

tribal umbra
#

adding up to

hybrid iris
tribal umbra
#

2 or 4 or 8 or 16 or 32

silent pawn
#

oh right

tribal umbra
#

don't think you can add up to more

silent pawn
#

i mean you can but not in vanilla

tribal umbra
#

yeah so not very useful

silent pawn
#

depends if you want mod compat or not

tribal umbra
#

not really tbh i think that's too difficult to make

silent pawn
#

depends

tribal umbra
#

some jokers might override others and shit

silent pawn
#

override in what way

tribal umbra
#

like

#

break some jokers

silent pawn
#

yeah maybe

#

depends on how they work

#

most of the time it shouldnt really

tribal umbra
#

i might start making a mod soon ish

#

will have to ask around a LOT tho haha

silent pawn
#

i think if two mods have a global of the same name that might cause issues but other than that i dont think you can really break other mods too much with your own

#

xd

silent pawn
#

i started off asking so many questions but you get there eventually

tribal umbra
#

right

#

mannn i might start later

silent pawn
#

have fun

elder vapor
#

hey i'm having trouble with my mod not loading, should i send the source here?

#

nvm i put a header argument wrong lol

weary jungle
#

you are welcome

#

i hate inconsistencys

hardy viper
#

lua doesn't have compound operators

weary jungle
#

how do i declare a global

weary jungle
hardy viper
#

well

#

if you're setting a value inside a table it's not a declaration

#

so meh

weary jungle
#

line 29

hardy viper
#

G.GAME doesn't exist when the game is loading

#

it exists in the same context that a run exists

weary jungle
#

so where should i put this line

#

or do i not need that declaration

hardy viper
#

you can hook start_run

royal ridge
#

you can also declare the variable when you need it but it requires some janky handling

weary jungle
#

hook ing time

royal ridge
#

start_run requires a more complex hook actually

weary jungle
#

what is the more complex hook?

#

this doesnt work?

royal ridge
#

no it doesn't

hardy viper
#

i don't think start_run has arguments

hardy viper
royal ridge
#

i believe it goes something like

local startRef = Game.start_run
function Game:start_run(args)
  startRef(self, args)
  your_code = here
end
weary jungle
#

what does this mean? (learning so much about lua)

royal ridge
#

no idea

#

colon means like

#

object self argument but it's also contained in that table or something

#

but you're also passing the args down to the copy

weary jungle
#

ok

#

also, we are working!!!!

#

what is extra, and should i use it?

#

it seems to store values related to whatever the thing is doing

wintry solar
#

A colon passes the object before it into the function as the first variable

elder vapor
#

having trouble getting this working, any help?

weary jungle
#

try making shop rate a whole number

#

that helped me

tribal umbra
#

and how do the colors work

#

like what do they do

elder vapor
#

its part of the skeleton

tribal umbra
#

idk what the skeleton is

elder vapor
#

more info in the api documentation

tribal umbra
#

ah

wintry solar
weary jungle
#

how do you check if you are at a boss blind again

tribal umbra
#

just read through the api documentation - what does the config parameter do?

wintry solar
#

Should be loc_txt btw not loc_text

tribal umbra
#

what does it mean by initial values?

#

the basic thing a joker gives?

#

so for example if square joker starts at 0 chips does it settle that in the config parameter

wintry solar
#

Yes

elder vapor
tribal umbra
#

so its like the chips or the mult a joker starts from

#

or stays at?

wintry solar
#

It’ for it to contain the values your joker is using yeah

tribal umbra
#

so its basically like the spine of what your jokers actually do

#

i see

weary jungle
#

why is there 2 of each

royal ridge
#

steamodded bug

#

not your fault

#

i think?

wintry solar
#

Update smods

royal ridge
#

oh

#

definitely your fault then

weary jungle
#

ugh

tribal umbra
royal ridge
weary jungle
#

also where are the color tags for descriptions

tribal umbra
#

wait are mult / chips color tags for descriptions automatically set or do you need them?

weary jungle
#

you need them

tribal umbra
#

damn

weary jungle
#

i only see 0.98

wintry solar
#

Download from source

weary jungle
#

download zip?

wintry solar
#

Yeah

weary jungle
#

i did it

#

2 runes done

wintry solar
#

Do you want them to be actually negative as in not taking up space?

weary jungle
#

yep

tribal umbra
#

again i think laguz is a bit strange

weary jungle
#

its a hold until you need it thing

tribal umbra
#

just one more discard for a single hand trading off hand size

#

idk

#

if it was like permanent+1 discard

#

or longer

weary jungle
#

thats why im not sure about the discard

tribal umbra
#

just one round tho?

weary jungle
#

it could be 2 or 3

#

only one round

primal robin
#

Maybe complete other runes first, then think about balance?

weary jungle
#

temporary gain, long term downsides

#

ok time to do the 23 other ones

tribal umbra
weary jungle
#

24 runes, 25 including blank (spawn last used rune)

wintry solar
#

I don’t think I would ever give up hand size for a temporary discard gain

tribal umbra
#

even ectoplasm has more permanent benefits for hand size

#

and it's not considered super good

weary jungle
#

one idea was that you draw a card less first hand of other blinds

tribal umbra
#

hmm

weary jungle
#

so you draw 7/8, then discard to get 8/8

#

they wanted it so you draw 4/x at first, so you need a discard to find 5 card hands

#

i think that could work but itd be a lot more coding

#

another option is simply +2 discard this round, -1 discards rest of rounds

weary jungle
#

that relates to this

tribal umbra
weary jungle
#

what?

#

it has to be a permanent give up for a short term gain

tribal umbra
#

oh a permanent give up

#

hmmmm

#

i probably wouldn't give up much for that honestly

weary jungle
#

like a rune im thinking of is +x$, -x$ intresst cap

tribal umbra
#

if the x money was good enough

#

so like

#

+15 -1/2 interest cap or something

wintry solar
#

I’m not sure I’d give up anything for discards tbh

tribal umbra
#

^

weary jungle
#

maybe... discards and hand size?

#

gain temporary discards and hand size and give up ___

#

this seems ok

#

i think i will remove the downside

#

is dagaz ok though?

crisp elbow
#

I feel like that's only good if you like

#

have the score to beat the blind

nocturne garnet
#

i HATE vanilla jokers!! NO MORE SPAWNING!!

crisp elbow
#

because you could delete the thing that's inherently stopping you from winning

#

but on post ante 8 scaling it could just fuck you over

tribal umbra
crisp elbow
#

I know for a fact gold stake scaling is insane and can go from like 20 mil to multi billions

weary jungle
#

like reroll bodd blind?

#

i dont get it

weary jungle
tribal umbra
#

you essentially reroll the boss blind

crisp elbow
#

no it's like

#

chicot disabling

weary jungle
#

yeah

tribal umbra
#

?

#

oh

#

just removes it's effect

crisp elbow
#

Yeah

weary jungle
#

yep

crisp elbow
#

Debuffs the boss

hardy viper
weary jungle
#

so is dagaz good?

weary jungle
#

my px might not be right

timid parrot
# weary jungle is dagaz ok though?

Which part are you most attached to? The Luchador effect or +1 Ante? As it stands now, it is never worth it to use Dagaz. The downside directly counteracts the upside.

tribal umbra
#

disabling one ante to get another one

#

which also requires more chips

#

idk..

timid parrot
#

I mean let’s just consider the Wall

#

In most cases this card would make the boss blind bigger than the active Wall would’ve been

#

And even if it doesn’t you’re still an ante ahead now

#

So you’re still likely screwed

timid parrot
#

This card is for when you run into the Plant on a Face Card build, and I still think it’s too punishing

weary jungle
#

The luchador effect

timid parrot
# weary jungle The luchador effect

alright so the precedent right now is that nothing that changes or disables the boss blind should have a permanent drawback. If you still want a drawback, you need something temporary, like messing with money or setting the boss blind requirement to 3X base instead of the usual 2X base

weary jungle
#

Maybe no intrest on that round or no blind beat money for that round

timid parrot
#

yeah that would be good

#

disable the boss blind but it doesn't reward you with its usual $5 guarantee

crisp elbow
#

your px should be 71x95 btw

#

@weary jungle

weary jungle
#

I have 4px padding

cerulean rose
#

these consumables are bigger

crisp elbow
#

Yeah if you want it to be a proper circle the image size has to be within a 71x95 bounding box

weary jungle
#

wait... i drew in 63x93... i dont need padding

#

how do i export my spritesheent!!!

#

its a 71x95 canvas, and i drew within 65x93

#

(i messed up math on sides

#

nvm we good

#

How do i ge t the boss reward "$$$$" text to go away

#

the blind doesnt give money, but the reward text is still there

lament zealot
weary jungle
#

did it, awesomesauce

elder vapor
weary jungle
#

debug+, you hold tab to bring up screeen on right

#

also you can hold m to restart game (useful)

elder vapor
#

ah i didn't realize DebugPlus could do that

#

have the mod installed but never dug deep into it lol

hybrid iris
#

was wondering if anyone knew where the code for the "effective cards in deck" thing is

#

like when you hover over and then it has a yellow number to display how many of each rank there is