#💻・modding-dev

1 messages · Page 271 of 1

open aspen
#

yea its still quite a new thing

hushed field
#

and nobody's getting paid to document everything 😛

open aspen
#

a lot of features seem to be added in PRs that arent yet documented properly

red flower
open aspen
#

ofc thats fair

#

its all volunteering here afaik

hollow marsh
small mango
#

yeah my first guess was to 'copy' from other mods or the source code as well, cheers yall :3

open aspen
#

the source code is also immensely useful

#

not sure if ur familiar with lua or lua modding but you can hook functions that exist in the game and modify them

burnt lance
#

Huh. Thats interesting.

#

I’m not familiar enough with Lua to know that functionality

red flower
# burnt lance I’m not familiar enough with Lua to know that functionality
Klei Entertainment Forums

In LUA, it is a very important concept to understand that everything is a variable and all variables may be edited in runtime. This includes functions. With modding other peoples' LUA files, like Klei's basegame code, you may find yourself wanting to run your code before or after the original fun...

vast lily
#

ive never done anything in lua other than this and i only started this 2 weeks ago

hushed field
#

Lua's in that strange spot where I feel like if you feel comfortable as a programmer, but haven't touched a language like it, you're going to be making a lot of mistakes again, accidentally, haha

red flower
#

i have never made a mistake

#

in my life

open aspen
#

especially because my only experience with lua is roblox lmao

burnt lance
#

Interesting.

vast lily
#

well ive been translating a lot of concepts i know from other languages into this so hopefully i havent screwed anything up

open aspen
#

ive made some cool stuff on there but its not like using lua for modding

burnt lance
#

All of my game coding experience is in C#/c++ and renpy (Python VN engine) Lua is new to me

hushed field
#

N, the rumour is that you're the designer behind Tearlaments and Zoodiacs, tho

red flower
#

i love both of them so yes

hushed field
#

It's mostly that the indexing is different, typing isn't hard set, hooking is a thing. Not difficult to learn, but things you're gonna stumble up against when you assume it'll work like C, haha

burnt lance
#

Yeah, I’m definitely trying to utilize examples more than my regular programming knowledge base.

open aspen
#

^

#

it doesnt help that the documentation aint there (again totally fair)

vast lily
#

the bulk of my experience is in godot's gdscript and p5.js

open aspen
#

i think if the modding api was fully documented magically our lives would be a lot easier

burnt lance
red flower
#

the lsp definitions are a lot more complete

open aspen
#

theres a lot of stuff that isnt documented very well

#

like new PRs are done all the time afaik

#

and they dont come with documentation

burnt lance
#

I will say, after looking at plantain I was able to pretty quickly get a joker into the game (using no assets, so it’s just a description)

This is vouching for using all the resources available rather than just documentation

open aspen
#

i think jokers are better documented

burnt lance
#

Jokers are probably the best documented yeah.

open aspen
#

it was hell to make my sticker work properly (especially because I designed it at twice the size of a regular sticker)

#

so the issue i had was it was twice as big as a regular sticker

gentle rain
#

infinitely useful

open aspen
#

and i ended up having to hook 3 drawing related functions to get it to render properly

gentle rain
#

that and the steamodded wiki

burnt lance
#

The other types of cards aren’t, and adding new card types/seals isn’t easy either.

open aspen
#

like i was able to scale it down easily

open aspen
#

but it rendered like this

#

(green border i added to the sprite for debugging)

manic rune
#

good morning chat

red flower
gentle rain
#

good to know

burnt lance
open aspen
red flower
#

i mean documenting vanilla is a whole other project

open aspen
#

yea no no

#

documentation not being there for this was okay

#

but like i think having more documentation for draw functions could be nice for example

#

ofc again i totally get why stuff isnt documented but it would be nice

red flower
#

i think flowey is doing lsp for vanilla stuff but idk how far is that yet

#

chat how hard would it be to make an individually weighted rarity system

modern kindle
#

hardest thing youve ever done in your life squared

#

(i have no idea)

red flower
#

im going to try

modern kindle
#

also N as youre a ui fella i ahve a question for you

red flower
#

shoot

modern kindle
#

i can make the infoqueue change left to right if theres not enough space in the joker area, but i cant seem to make it give a shit when its in the shop
is there some way i could make it when in shop default at the bottom, but then move left/right like i have it set?

stark geode
#

i keep getting this error when trying to dissolve a card

#

Oops! The game crashed:
[SMODS Perkolator "main.lua"]:56: attempt to index local 'card' (a nil value)

#

i keep getting this error

#
SMODS.Joker{
    key = 'Perkmentia',
    loc_txt = {
        name = 'Perkmentia',
        text = {
            "at the ",
            "destroy a random {C:attention}Consumable{}",
            "replace it with a random {C:dark_edition}Negative{} Consumable"
        }
    },
    calculate = function (self,card,context)
        if context.ending_shop then
            local des_con = true
            if des_con then 
                G.E_MANAGER:add_event(Event({

                    func = function()

                        local card = pseudorandom_element(G.consumeables.cards, pseudoseed('Perkmentia'))
                        card:start_dissolve()
                    end
                }))
                des_con = false
            end
        end
    end
}
#

the joker in question

hushed field
#

Ah, yeah

#

is it crashing when you don't have any items?

stark geode
#

yeah

hushed field
#

add a check

stark geode
#

its also destroying more items then it should

manic rune
#

its running start_dissolve() on nil

#

you need to add if card then too

hushed field
#

ending shop is probably called multiple times

stark geode
manic rune
#

you would need context.main_eval for that one, i think

#

-# or was it just context.cardarea == G.jokers?

hushed field
manic rune
#

i will assume it runs for cardarea G.consumeables too

#

but also, is des_con necessary?

stark geode
#

so im guessing i need it to check if this is the first time the shop end context is closed

hushed field
#

nah just check the cardarea, I reckon

#

i'm forgetting if i have jokers that trigger at that time, lm check what I did, if I did anything

stark geode
#

well it destroys both cards then crashes

hushed field
#

yah, because it's probably triggering more than twice, and the third time there's no card

stark geode
#

my other joker uses the same context but only triggers once

hushed field
#

you want to add the nil check regardless

manic rune
#

i can confirm if context.ending_shop and context.main_eval then is the answer

open aspen
#

this isnt an issue obviously

manic rune
#

at the

open aspen
#

but its nice imo

hushed field
#

hmm no I don't check for cardarea

stark geode
red flower
modern kindle
open aspen
#

i think it might be harder to move everything over but that still works

manic rune
#

-# JOYOUSSPRING IN THE RESCUE 🗣️

hushed field
#

you want to set up localization before you have a lot of text

open aspen
manic rune
#

i agree

hushed field
#

not after, because it's very little effort when it comes to upkeep, and a lot of effort to transfer to one

stark geode
open aspen
open aspen
manic rune
#

my mod has a lot of text, so i can back up that claim

open aspen
#

better to have your joker work before worrying about how the description works

hushed field
#

I can't see why it'd trigger multiple times, though, I'm curious. If you add a print statement to that function, what does it show in the logs?

tall wharf
#

@manic rune :3

manic rune
#

:3 hello

hushed field
#

What's gonna be better, make my config have submenus with buttons at the top, or have each category be an entire pop-up itself?

stark geode
red flower
open aspen
manic rune
#

weird

#

ending_shop only runs once

#

those are all the contexts

hushed field
stark geode
#

i nver added that null check

manic rune
manic rune
#

you must

stark geode
manic rune
#

-# please add the check

stark geode
#

how do

hushed field
#

if card then

manic rune
#
if card then
  card:start_dissolve()
end
#

replace your singular line card:start_dissolve() with that

bold sleet
#

So uh... does anyone know UI wizardy to help me this do... stuff..?

#

Like how do I get it to change idk, variables, call functions, anything I can read later?

stark geode
red flower
midnight coyote
#

does socks and buskin affect held in hand stuff

bold sleet
#

I don't know fuck I am meant to pass.

stark geode
red flower
bold sleet
#

ah

#

so that will change FG.config.special_version?

red flower
#

it should

bold sleet
#

wait why isn't this shit saving hold on a sec

stark geode
#

what is key_append in create_card

stark geode
#

ah

maiden river
#

where is the read the docs gif

manic rune
#

how do i change a sound's time

hushed field
#

the play button, I reckon

manic rune
#

like, i want to make a sound start at 0:50 instead

manic rune
#

like, as the replacement for the boss blind's theme

hushed field
#

i have no clue, i haven't touched sound yet. I should only make annoying jokes when I can also actually answer the questions, haha

stark geode
#

what does this meannnn

hushed field
modern kindle
stark geode
# hushed field centers are basically all objects. You're calling center.[anything] somewhere, b...
SMODS.Joker{
    key = 'Perkmentia',
    loc_txt = {
        name = 'Perkmentia',
        text = {
            "at the ",
            "destroy a random {C:attention}Consumable{}",
            "replace it with a random {C:dark_edition}Negative{} Consumable"
        }
    },
    calculate = function (self,card,context)
        if context.ending_shop and context.main_eval then
            local card = pseudorandom_element(G.consumeables.cards, pseudoseed('Perkmentia'))
            if card then 
                G.E_MANAGER:add_event(Event({
                    func = function()
                        card:start_dissolve()
                        local consumable_types = {'Tarot','Spectral','Planet'}
                        card = create_card(pseudorandom_element(consumable_types, pseudoseed('Perkmentia')),G.consumeables,nil,nil,nil,nil,'Perkmentia')
                        card:add_to_deck()
                        G.consumeables:emplace(card)
                        return true
                    end
                }))
            end
        end
    end
}
hushed field
#

in this case, you're passing things through to a basic function, but you're not passing through correctly

hushed field
stark geode
hushed field
#

never use card as a local inside of a calculate function

stark geode
#

ah

hushed field
#

because card is already one of the arguments of the func

stark geode
#

so this is better?

hushed field
stark geode
#
SMODS.Joker{
    key = 'Perkmentia',
    loc_txt = {
        name = 'Perkmentia',
        text = {
            "at the ",
            "destroy a random {C:attention}Consumable{}",
            "replace it with a random {C:dark_edition}Negative{} Consumable"
        }
    },
    calculate = function (self,card,context)
        if context.ending_shop and context.main_eval then
            local card = pseudorandom_element(G.consumeables.cards, pseudoseed('Perkmentia'))
            if card then 
                G.E_MANAGER:add_event(Event({
                    func = function()
                        card:start_dissolve()
                        local consumable_types = {'Tarot','Spectral','Planet'}
                        local consumeable = create_card(pseudorandom_element(consumable_types, pseudoseed('Perkmentia')),G.consumeables,nil,nil,nil,nil,'Perkmentia')
                        consumeable:add_to_deck()
                        G.consumeables:emplace(card)
                        return true
                    end
                }))
            end
        end
    end
}
hushed field
#

but I suspect you're having an issue with create_card function

red flower
#

please use SMODS.create_card

sturdy compass
#

👆

#

It’s so much nicer

hushed field
#

N, have you messed around with sliders?

red flower
#

nope

stark geode
#

is there documentaion for this

red flower
#

add_card does the emplacing for you too

sturdy compass
stark geode
#

cool

sturdy compass
#

The main point of it is so you don’t have to do the nils lol

hushed field
#

sliders are confounding, just gonna put the idea of a slider as a node on hold, and make a clock indicator for jokers with timers on them

rain slate
#

I've been completely forgetting what a stupid language lua is and writing ```lua
for i = 0, #array do
local item = array[i]
end

#

when array indices start from 1 and not 0 Sob

modern kindle
#

@red flower hi bestie both bepis and i tried breaking it down for how you hooked and we have no clue how to do so lmfao

manic rune
#

sowwe :3

red flower
#

the align thing?

modern kindle
#

yes

manic rune
#

i want this sound specifically to skip to a part

modern kindle
#

you could do the lazy way and just, cut the sound file and treat it as a new sound and then play the cut sound

red flower
# modern kindle yes

is this what you need?

local card_align_h_popup = Card.align_h_popup
function Card:align_h_popup()
    local ret = card_align_h_popup(self)
    local focused_ui = self.children.focused_ui and true or false
    if self.area and self.area == G.shop_jokers then -- add a check for your specific card too
        ret.offset.x = 0
        ret.offset.y = focused_ui and 0.12 or 0.1
        ret.type = 'bm'
    end
    return ret
end
sturdy compass
#

Use add_card

manic rune
#

but surely its not the only way

sturdy compass
#

Same syntax but it emplaces instead

stark geode
#

lmao im dum

#

i did create insted

#

w

#

it workd

hushed field
#

I feel so dumb when I make an indicator by just layering two UIs atop each other but at this point I'm sure base Balatro actually just doesn't have a way to put a uit element atop a sprite

stark geode
#

now i need art

manic rune
#

yall, is this balanced

sturdy compass
stark geode
#

thank you guys

#

i propblably look like an idiot

rain slate
#

what was the localization thing for making the text smaller?

stark geode
#

but this is very new to me

sturdy compass
#

Nah you’ve gotta start somewhere

manic rune
#

{s:0.5}?

rain slate
#

thanks

sturdy compass
#

Doesn’t necessarily have to be 0.5 btw

rain slate
#

obviously

red flower
#

I find anything lower than 0.85 too small in descriptions

rain slate
#

ye 0.5 is a bit small

manic rune
#

true

next timber
open aspen
manic rune
#

its a showdown boss blind's passive

#

i think you should prioritize actually winning the blind instead of fixing your deck

#

💔

next timber
#

ughh literally every single calculate function i have for my edition isnt triggering at the right time

rain slate
manic rune
#

the boss has 3 phases too, sooooo

#

destroy too many cards and you wont have any left to win the other phases

#

:3

next timber
maiden river
#

is there a nice way to make hands not score?

red flower
#

yes there's a new context for that

manic rune
#

context.modify_scoring_hand or something?

#

dunno

red flower
#

context.debuff_hand

manic rune
#

-# fu-

maiden river
#

I see
but say I was making a challenge

maiden river
red flower
next timber
manic rune
red flower
manic rune
#

:3

maiden river
open aspen
#

see this? for some reason the code i have only happens at the same time as my message if i put it in an event

maiden river
#

I'm aware someone else had a similar idea

#

but I'm going to cook trust

open aspen
#

dont even ask me how i figured that out

stark geode
#

Does @here in a thread only ping people who follow it?

open aspen
#

before the change would show up instantly when the hand was played, and the message showed up after scoring

maiden river
#

people who follow it and are online, I believe

open aspen
#

only with the event did both happen at the end of scoring

manic rune
#

hmmm

#

is it weird how

#

if mult gets below 0, then weird visual stuff happens?

open aspen
#

that didnt work either

#

laughable

stark geode
#

So @ everyone in a thread pings the followers

maiden river
#

damn

open aspen
#

i tried a lot of things

rugged pier
#

is there a way to store how many times a particular poker hand is played?

red flower
open aspen
red flower
#

because the event gets put in the queue and it's ran after all the other events

open aspen
#

ohhh

gentle rain
#

i think you should add a perishable jimbo

#

but i quite like the idea of this

open aspen
#

you have splash

#

can u win blind 1 with splash

#

probably not tbh

stray warren
#

With no jokes a high card with 4 aces and a king is 65x1

maiden river
stray warren
#

70x1

gentle rain
next timber
#

lmao

open aspen
#

so it wont score

gentle rain
#

would it just be like, the hand doesnt score at all, or that every hand counts as high card

maiden river
#

btw high card is going to start at a higher level 😭

stray warren
#

I figured it would count as high card

open aspen
#

oh ok

gentle rain
#

mmm you should say that in the challenge desc

maiden river
#

I just started writing it 😭

sturdy compass
#

Huge

#

Very good challenge concept, bravo

maiden river
#

I'm still trying to figure out hooking calculate_context for this

#

hello astra

#

long time no see

sturdy compass
#

Yo

gentle rain
#

you COULD just have it start with 2 plutos

maiden river
#

also true

gentle rain
#

or like i said, perishable jimbo

#

which i think a very temporary bonus is a lot more interesting than two immediate plutos

#

because then it isnt much of a challenge

maiden river
#

just wait until making a splash II drops

crisp coral
maiden river
#

you simply must be joking

gentle rain
#

you must be joker

sturdy compass
manic rune
#

no i was dumb, i tried return{mult = -5} in blind's context.after

#

i dont think ur supposed to do that, i changed the context to context.final_scoring_step :3

maiden river
#

no example for changing hands in the docs blueprint
although it makes sense, since that's pretty specific

bold sleet
#

ayo my shit ain't updating.

red flower
bold sleet
#

@red flower UI wizard guy.

tall wharf
#

😭

open aspen
#

what the fuck have i done

next timber
#

wow

bold sleet
sturdy compass
open aspen
#

oh god

hardy viper
#

looks normal enough

sturdy compass
#

What in the fresh hell

bold sleet
thin anchor
#

balllabalalatrrrorrro

red flower
open aspen
#

ok

red flower
open aspen
#

i really hate this stupid ass vanilla bug ass shit

minor furnace
bold sleet
#

Shit it has to change: FG.config.special_version_active.

open aspen
red flower
open aspen
#

but in the vanilla code, in draw_from, they include an extra parameter which is true

#

even tho the actual function doesnt have that extra parameter normally

#

but since i now added it

#

omfg

#

does that make sense?

bold sleet
open aspen
#

this is my solution (i added a parameter called meh i dont use at all)

#

and then the actual parameter

bold sleet
#

mayball?

open aspen
#

can i report this as a bug that smods should patch

#

how do i report a buf

#

bug

red flower
#

either make an issue on their repo or suggest it in their discord

bold sleet
open aspen
#

its kind of a bug but not really

manic rune
#

what is this supposed to be again?

open aspen
#

you will only encounter this if u hook it the way i did

manic rune
#

i cant remember the name 😭

red flower
tall wharf
bold sleet
tall wharf
#

did you hook ui box

open aspen
#

this function has 4 arguments

#

my hook has a fifth that is a boolean

#

but the vanilla code in sprite.draw_from includes an extra variable

#

see

red flower
#

then make it a sixth argument?

open aspen
#

i did

#

but

#

thats annoying that i had to do that

#

to me this is a minor bug

red flower
#

i don't think dealing with vanilla jank is an smods issue

open aspen
#

fair enough

#

i think its okay

#

i know even if smods would address this, its such a minor thing it would be at the bottom of the priority list

maiden river
#

every hand counts as high card

maiden river
#

I just need to figure out how to make that work 😭

red flower
#

oh that sounds like a different effect then, you probably need to change the evaluate functions

hushed field
#

This whole time I thought I was rendering the 0 atop the ufo sprite, but no, it's underneath it, the beam is just so transparent that it doesn't matter

manic rune
#

car

bold sleet
maiden river
bold sleet
hushed field
#

car. If I get this working, and I end up adding more car jokers, I'll update that clock to be a spedometer

manic rune
#

what would it even be for tho

#

seeing how fast u win a blind?

bold sleet
#

google it and brain:dissolve()

manic rune
#

or how fast u play a hand

#

smt

maiden river
#

I just don't know how to do it 😭

bold sleet
#

gaem sdeep

maiden river
#

I mean the actual logic, not hooking the function

hushed field
#

no, that joker gives 120 chips at the start of the blind, and lowers it by 1/60th every second, so that shows the amount of chips you're gonna get

manic rune
#

oh

#

-# hm

#

my mod does seem quite unbalanced in terms of scaling compared to you guys'

#

maybe except joyousspring

tall wharf
#

bepis

manic rune
#

good morning

tall wharf
#

IT'S MIDNIGHT

manic rune
#

:3

red flower
#

my mod might need talisman compat if i dont start balancing it lol

hushed field
manic rune
#

wait

#

u didnt add talisman compat to ur mod yet, N'?

maiden river
#

I'm going to create the anti-talisman

manic rune
#

istg i ran ur mod with talisman before 😭

maiden river
#

to_small incoming

red flower
#

i did but i never test so idk if theres something broken

manic rune
#

probably not

red flower
#

i think its broken with cryptid

manic rune
#

nah actually

maiden river
#

true

manic rune
#

how about 64

#

a stack of mult

red flower
#

i love terraria

manic rune
#

9999

maiden river
#

another question: if there's a way to tell if you're in a challenge

red flower
#

a mod where you have an starting amount of chips and you need to beat ante 8 without going over it in total score

thin anchor
#

jimbo

#

evil.

red flower
maiden river
#

oh yeah

manic rune
#

is this brutal

#

wait

#

played hand*

tall wharf
#

G.GAME.challenge?

stark geode
tall wharf
#

no time to be homesick

#

development resumes today

maiden river
tall wharf
#

-# (i do miss my home tho)

manic rune
#

i think

#

i miss my wife...

tall wharf
#

look it's not been that long

#

since i went back home

maiden river
#

I do need to reuse this specific modifier tho

next timber
#

is there a keybind to reload shaders as there is to reload atlases?

tall wharf
#

you can use debugpkus to watch shader code

bronze ocean
#

How do you guys balance your mods?

manic rune
#

playtest your mod

bronze ocean
#

Like yes but how do you know if you're just a god gamer or it's too easy

maiden river
#

true!

manic rune
#

orrr let others playtest your mod too

maiden river
#

true

manic rune
#

:true:

#

oh yeah

#

no nitro

#

💔

bronze ocean
#

it's just built different

hushed field
#

If i end up buying the same jokers over and over again, too strong, if I never use a joker outside of testing purposes, probably too weak

maiden river
#
evaluate_ref = SMODS.PokerHand.evaluate
function SMODS.PokerHand.evaluate(parts, hand)
    if G.GAME.modifiers.only_high_card == true then
        return { parts._highest }
    end
    return evaluate_ref(parts, hand)
end

to no one's surprise, this didn't work

#

although this would just only make the first card score anyway, not actually change the hand type

next timber
#

testing editions on playing cards is so annoying cause cycling through them always cycles past negative which adds a new card to the hand and moves them all

vast lily
#

ive been doing a lot of playtesting and balance shifts on my mod in the past week or so, its different for me bc my mod only adds decks and no jokers, but the biggest thing im thinking about for balance is how many different ways a player could strategize a run around the thing that im adding

maiden river
bronze ocean
#

I'm making a custom deck, the idea was to expand on Ace in the Hole.

You begin the game with 4 cards of a random rank (same rank on all 4 suits), and after each round you get the mega card pack so you can build out your deck. Optionally, you get a spectral card on boss defeat

The thing is, it's fairly easy to start farming 5 of a kinds or 5 flush. And even when cards are debuffed, you can generally power through it with a high enough base level

I was thinking a few things:
1.- Increase the required chips, like with the plasma deck
2.- Make it so your hand doesn't score if there's more than 2 debuffed cards
3.- Decreasing base chip and mult for all hands?
4.- Just plain disable 5 of a kind-related hands or make it turn your money to 0 if used (in case of emergency?) and only be usable with >1 $?

vast lily
#

ooh ok ok

bronze ocean
vast lily
#

im using the deprecated trigger effect thing for some stuff and its working fine

#

deprecated doesnt mean it doesnt work. it just means theres a newer, better thing that can be used to the same effect in most scenarios, and thats what the devs are gonna support more instead of the old method

bronze ocean
vast lily
#

oh yea i havent had enough time to invest into this to learn how to do things properly either

bronze ocean
#

n i c e

modern kindle
vast lily
#

ur deck idea is similar in concept to one of mine but with completely different implementation

bronze ocean
vast lily
#

i havent seen that many either

#

lemme put the uhhhhh

manic rune
red flower
modern kindle
#

ah gotcha gotcha, i was fuckin with it since you sent it to me, and i ws like "this is not working' and then set a huge value and saw it mvoes all text lmfao

#

cause i was expecting solely the info queue to move tot he bottom

maiden river
#

it works

bronze ocean
vast lily
#

thats something i did too

#

if ur starting people off with a free 4 of a kind anyway u definitely want to lean into 5 of a kind strategies instead of lean out of them

maiden river
bronze ocean
vast lily
#

u could do something like

#

start with 6 tags that give mega standard packs and 0 cards in deck

bronze ocean
# normal crest What do you have so far

It's working, but it's too easy. I'm trying to balance it out

You begin with 4 cards of the same (by default random, but you can pick any in the config screen) rank on all 4 suits. After every shop, you get to open a mega standard pack

vast lily
#

forcing the player to skip the first blind but triggering the start of deck building that way

#

idk how starting with tags would work from a code perspective thats not something ive ever tried to implement

maiden river
hushed field
#

people should plug their mods more actively, because i have no clue what people are working on if they don't tell me 😛 I'm gonna check your decks out Freeze, they seem fun

normal crest
# bronze ocean

You should define a calculate function within your back definition

vast lily
#

nice

bronze ocean
next timber
#

i think i've successfully implemented the Parasite edition and its accompanying power card Symbiosis?

normal crest
#

Oh

bronze ocean
#

But I am intereted on knowing what it means

normal crest
vast lily
#

theres good documentation on calculate functions in the smods wiki

normal crest
#

I'm on phone so be patient with me wtiting code lol

hushed field
normal crest
#

It's a bit different according to the wiki

bronze ocean
red flower
normal crest
#

Where you call SMODS.Back

vast lily
#

the SMODS.Back function that has all the stuff for ur deck in it

old bane
#

how do i make it so a button exits you out of the config screen? I'm trying to make a reset config button and i want it to either update the values in real time or for the player to automatically be booted out so the UI has a chance to laod in the new values

bronze ocean
#
local old_apply = Back.apply_to_run
function Back.apply_to_run(self)
    old_apply(self)
    if self.effect and self.effect.config and self.effect.config.card_rank ~= nil then
        setup_all_of_one_deck()
    end
end

local Backtrigger_effectref_aces = Back.trigger_effect
function Back.trigger_effect(self, args)
    if self.name == "All_of_One" and args.context == "eval" and G.GAME.round then
        G.E_MANAGER:add_event(Event({
            func = (function()
                add_tag(Tag("tag_standard"))
                return true
            end)
        }))

        if G.GAME.blind.boss and SMODS.Mods.AllOfOne.config.boss_spectral_loot then
            G.E_MANAGER:add_event(Event({
                func = (function()
                    add_tag(Tag("tag_ethereal"))
                    return true
                end)
            }))
        end
    end
    return Backtrigger_effectref_aces(self, args)
end
#

that's everything with Back in it

maiden river
#

is there a way to make something happen when a challenge is started? kinda like how decks have an apply function

normal crest
#

you're not calling SMODS.Back anywhere there

red flower
maiden river
#

back to my old nemesis

#

I just need to level up high card a few times when the run starts

#

I considered just using an orbital tag but apparently that's not a great idea

bronze ocean
sturdy compass
#

I’d once again suggest patching into the area that challenge modifiers are applied in

maiden river
#

no smods?

red flower
bronze ocean
maiden river
#

you should read the docs egg

normal crest
#

Time to start again with SMODS now

bronze ocean
#

it was a 10 minute adventure that's been lasting for the past 2 days I didn't expect to like it so much

sturdy compass
vast lily
#

thats how i feel too LMAO

tall wharf
#

chat am i cooking

vast lily
#

i havent hyperfixated on something as much as balatro modding in literal years

red flower
# bronze ocean it was a 10 minute adventure that's been lasting for the past 2 days I didn't ex...
GitHub

Steamodded example mods. Contribute to Steamodded/examples development by creating an account on GitHub.

GitHub

Steamodded example mods. Contribute to Steamodded/examples development by creating an account on GitHub.

old bane
next timber
#

LETS GO GAMBLING!!! (trying to unlock my new card """naturally""")

maiden river
# maiden river I see

but the level_up_hand function doesn't make the hand name show up + keeps the level and flames up

tall wharf
maiden river
normal crest
maiden river
#

hand it over

#

this is a stickup

manic rune
#

pushed svarog to my mod

#

yipee

maiden river
red flower
maiden river
#

believe me, I try to solve problems on my own first

normal crest
hushed field
#

it is believed that over time, every creature will evolve into a crab. Similarly, every balatro mod will slowly optimize to become JoyousSpring

bronze ocean
red flower
#

i mean i just copied what planet cards do

next timber
#

cardcinisation

manic rune
next timber
next timber
#

has John Aure Smods made any progress with the animated cards recently, i am very eager to add my glitch card

hushed field
next timber
#

real

manic rune
#

so true

rugged pier
rugged pier
#

but balatro comes first

manic rune
#

can we make a big billboard advertising JoyousSpring in honor of his contributions

rugged pier
zealous glen
rugged pier
#

i was just about to put up a question here

red flower
buoyant merlin
#

How do you check if you have a specific joker?

hushed field
#

I'm working on a balatro mod in the off-time of my job, generally, but I think judging by some of the things I'm working on, you'd guess I'm 13 🙂

manic rune
#

no, no 13 would be watching that many movies

zealous glen
next timber
vast lily
zealous glen
#

what's a windowkill

#

defenestration?

manic rune
#

🪟 🔫

next timber
#

hit game by torcado

manic rune
#

im killing the window

zealous glen
#

what's torcado

next timber
#

twinstick shooter, shoot the edge of the window and it expands

hushed field
tall wharf
next timber
#

not enough

#

add trigenometry

#

add factorial

#

add

tall wharf
next timber
#

Lamda Calculus

zealous glen
# next timber not enough

This parody song is actually called "Numbers" like Drowning Pool's "Bodies" but no one calls it that. They just call it "I can only count to four" by Psychostick. I'm sure people called Bodies "Let the bodies hit the floor" all the time. JJJreact #psychostick #songparody

Listen to Psychostick:
Spotify: https://open.spotify.com/artist/2kfVqdz3lJ...

▶ Play video
next timber
#

lamda calculus in aikos shenanigans would actually go hard af

vast lily
open aspen
zealous glen
#

so just balatro

next timber
tall wharf
#

nothing

next timber
#

9830 even

#

damn

#

easiest game ever

open aspen
#

yea

tall wharf
#

you will just lose for free

open aspen
#

wtf

#

oh

next timber
#

why

tall wharf
#

if you are not within a threshold of the value

open aspen
#

do number cards not count together

tall wharf
#

you will lose

open aspen
#

OHHH

next timber
#

ohhh

#

balatro but it's countdown

buoyant merlin
hushed field
#

ah fuck, I didn't index the database numbers for the joker art I made

tall wharf
#

im thinking within 1%

rugged pier
#

could make it dynamic

next timber
#

ayyyyy

#

symbiosis card is real

#

not sure how i feel about the small icon and big image being the same but i can change it later

vast lily
#

i love how we have

#

CHAOS
IMMORTALITY
UMBRAKINESIS
and the most powerful esoteric aspect of reality
S I Z E

rugged pier
red flower
next timber
#

lol

vast lily
#

ive been there

rugged pier
red flower
next timber
#

if anyone can come up with a cool name for the "size" power id be happy to hear it

#

shapeshifting doesnt seem accurate enough

#

lol

next timber
#

makes the card Big

vast lily
#

Gigantism

next timber
#

(takes 2 slots, doubled values)

rugged pier
#

e x p a n d

next timber
#

both good names

tall wharf
rugged pier
#

since you get "fatter" at your grandma's

tall wharf
red flower
tall wharf
#

i have not implemented

#

the get close to the target yet

manic rune
#

creative mode in balatro

#

💔

zealous glen
#

is this the same ren that invented asbestos

tall wharf
#

fluttershy?

zealous glen
zealous glen
next timber
#

thats me

manic rune
#

debuffing flush five hands with this one

next timber
#

my parnter wanted to change mathcing pfps so we changed matching pfps

tall wharf
next timber
#

oh god power

zealous glen
next timber
#

add tetration. do it you coward.

manic rune
#

*gets ren

maiden river
#

the challenge now works as expected

zealous glen
#

Idk much about the Muppets but people make good funny Muppet parodies

chrome widget
next timber
#

no

#

??

#

those are aspects and theyre zodiac signs

#

whos the one making jimbostuck

zealous glen
#

akai

#

and others

next timber
#

get them in here

zealous glen
#

oh my bad

#

there is actually Jimbostuck

#

I was thinking of Balatrostuck

hushed field
next timber
#

the muppets???

#

oh right you're kino yeah

zealous glen
#

I like that the Muppets are canon to SCP

next timber
#

why is that their effect

zealous glen
#

tax evasion

next timber
#

lmao

vast lily
#

u know what

#

thats genius

next timber
#

omg Jumbo

zealous glen
next timber
#

Jumbo Jimbo

zealous glen
#

and unrelated to SCP, there's the Muppet Cypher and the video where Grover goes on a quest to kill god

hushed field
#

I've rewatched all theatrical muppet movies over the last year, Victin, they're generally all good, give them a watch

rugged pier
#

Im trying to upgrade a poker hand every 8th time it is played

here is my calculate function

calculate = function(self, card, context)
        if context.after and context.cardarea == G.play then
            local hand_type = context.poker_hand  
            if hand_type and card.ability.extra.played_hands[hand_type] ~= nil then
                card.ability.extra.played_hands[hand_type] = card.ability.extra.played_hands[hand_type] + 1
                if card.ability.extra.played_hands[hand_type] % card.ability.extra.hands == 0 then
                    return {
                        level_up = true,
                        message = localize('k_level_up_ex')
                    }
                end
            end
        end
    end

this is my config:

config = {
        extra = {
            hands = 8,
            played_hands = {
                high_card = 0,
                pair = 0,
                two_pair = 0,
                three_of_a_kind = 0,
                straight = 0,
                flush = 0,
                full_house = 0,
                four_of_a_kind = 0,
                straight_flush = 0,
                royal_flush = 0,
                five_of_a_kind = 0,
                flush_house = 0,
                flush_five = 0
            }
        }
    },

what am i doing incorrectly

hushed field
onyx sonnet
#

usually level ups are calculated in context.before

zealous glen
red flower
next timber
rugged pier
zealous glen
next timber
#

its so damn catchy

onyx sonnet
red flower
rugged pier
#

as it turns out i dont have to store them altogether so shouldnt be an issue

rugged pier
hushed field
#

lm check

zealous glen
#

however Supernova does

hushed field
zealous glen
#

when is Aiko adding Cookie Monster https://youtu.be/lYIRO97dhII?si=pFblohfsu10Kcl8C

Kermit and Joey are singing the alphabet when Joey sneaks in an extra letter that sounds a lot like Cookie Monster.

--
If you're watching videos with your preschooler and would like to do so in a safe, child-friendly environment, please join us at http://www.sesamestreet.org

Sesame Street is a production of Sesame Workshop, a nonprofit educa...

▶ Play video
rugged pier
#

thats perfect

red flower
#

c is for cookie thats good enough for me

manic rune
#

i need a better laptop 💔

tall wharf
#

n am i cooking

zealous glen
hushed field
#

the goal is to have every potential joker idea in kino so that if someone asks 'how do I do this?' I can just send them a random joker

tall wharf
next timber
#

ok now ive finished symbiosis i really should work on adding some jokers, the whole reason i've held the mod's release back... however.. i can't just leave the power cards on 7, that's not nicely divisible into rows...

rugged pier
#

"how to make a joker play doom in balatro"

manic rune
#

actually

zealous glen
manic rune
# tall wharf

can we have 0/0 creating a black hole spectral card please :3

red flower
# tall wharf

this reminds me of some educational math NES games i played recently

open aspen
#

with a crash effect like cryptid

hushed field
next timber
open aspen
#

so u have to make sure ur expression doesnt evaluate to 0/0

maiden river
#

hater arc

zealous glen
# tall wharf

I like that the 9s have a bar under them so that if I add an effect that rotates cards people will know what number it is

next timber
#

2 hands per round????

#

lmao

maiden river
#

told you it was my hater arc

zealous glen
#

they won't be able to tell L and I apart though

next timber
#

i need to add an upside down card edition

next timber
zealous glen
#

shove their soul into an arcade cabinet

next timber
zealous glen
#

ah they've already shared the updated version

next timber
#

oh wait damn ti literally is

#

its called cabinet man

chrome widget
zealous glen
#

ren has been punished for their asbestos crimes

rugged pier
#

HOLY SHIT

#

THIS IS INSANE

zealous glen
#

finally we can rest in peace knowing their soul is imprisoned inside an arcade cabinet

red flower
#

what's the difference between that and eternal?

chrome widget
#

Get trapped inside Cabinet Man woosh

rugged pier
rugged pier
hushed field
#

if it doesn't work, lmk, I'm probably not reading it thoroughly haha

rugged pier
next timber
#

i am still fine

zealous glen
next timber
#

nuh uh

#

bold of you to assume i have one

zealous glen
#

you dont need to own an arcade cabinet

next timber
#

i sold my soul to get good at programming. i think i got scammed

zealous glen
#

one will be provided

chrome widget
#

Regardless, running doom depends particularly on whether or not someone's already implemented a DOS game emulator in Lua, since I'm not really up to writing one myself

next timber
manic rune
#

nice to table you

zealous glen
#

(╯°□°)╯︵ ┻━┻

#

/tableflip

next timber
zealous glen
#

hello dilly

modern kindle
#

hi vic

zealous glen
#

why's your pfp freaking out

chrome widget
#

Hi dilly!!

next timber
#

get unflipped

modern kindle
next timber
#

hii dilly of dilatro fame

modern kindle
#

hello ren

zealous glen
modern kindle
#

i feel so popular rn

rugged pier
modern kindle
#

idk my pfp vibin

zealous glen
#

@rugged pier do you want to level up a hand?

rugged pier
#

yes

zealous glen
#

you can return {level_up = true}

hushed field
manic rune
#

eeeeeeeeeeee5

zealous glen
#

and SMODS automatically levels up the hand

manic rune
#

gonna work on the other two phases of cocolia tmr

#

ghgh

rugged pier
# zealous glen you can return `{level_up = true}`
calculate = function(self, card, context)
        if context.before and context.cardarea == G.play then
            if G.GAME.hands[context.scoring_name].played % card.ability.extra.hands then
                return {
                    level_up = true,
                    message = localize('k_level_up_ex')
                }
            end
        end
    end
``` this is my implementation
rugged pier
modern kindle
#

go 2 schleep bepis

manic rune
#

thank

#

good night dilly :3

wintry solar
#

You don’t need the area check

modern kindle
#

gngn

hushed field
next timber
#

what do you guys think of the idea of a joker that destroys the highest card of any played straight and reduces the blind by 10%? totally not a hamilton reference i am totally not a hamilton fan trust me guys

wintry solar
#

Assuming this is a joker

#

It’s never in G.play

zealous glen
rugged pier
manic rune
#

gn victin :D

rugged pier
#

okay let me try

wintry solar
#

And context.before is only called once per joker iirc

rugged pier
hushed field
#

oh god yeah, cardarea, i'm clearly tired enough to no longer focus haha

hushed field
rugged pier
#

okay testing now

wintry solar
#

You don’t need the message

rugged pier
wintry solar
#

It should be handled for you

#

I think

rugged pier
#

i see

wintry solar
#

I haven’t been actively working on mods for a few weeks so my memory is bit hazy

#

But generally, and “default” messages are auto applied for you

hushed field
#

SMODS does handle things a lot differently from vanilla at this point, so looking at the source code is handy, but it might not give you the correct answer

tall wharf
#

@manic rune

red flower
#

lets goo

wintry solar
#

Levelling up might be one that doesn’t though, I don’t remember

chrome widget
#

Look at my awful ampersand son. He has every disease

tall wharf
rugged pier
#

okay i found a new problem with my implementation, i need to upgrade poker hand every 8th time but should only start counting from when the joker is owned

#

any ideas?

wintry solar
#

You need to store them as you originally were planning

buoyant merlin
wintry solar
#

But you can have the table be dynamically created

tall wharf
#

there has to be a better way

chrome widget
#

Okay it's not that bad but I still hate it y'know

hushed field
#

you can use the string as a key, so your table doesn't have to be populated when you make it. Setting a table as so hands = {} will allow you to do card.ability.extra.hands[context.scoring_name] = card.ability.extra.hands[context.scoring_name] and card.ability.extra.hands[context.scoring_name] + 1 or 1 or maybe even a more efficient notation

wintry solar
rugged pier
tall wharf
#

how do i make the game error on purpose

rugged pier
#

i love this community

#

will report back

tall wharf
#

i guess

#

😭

vast lily
#

real af

tall wharf
#

are my shenanigans going to far?

vast lily
#

it seems super interesting

buoyant merlin
#

It should do some awesome full-screen shader and THEN crash

open aspen
#

lowkey it would be cool to do something like cryptids crash code card

vast lily
#

normally i dont like when mods feel like a completely different game from the base game but this is such a cool concept that i love it anyway

open aspen
#

its its own deck

#

so i think it works

tall wharf
#

i am not forcing this deck upon anyone

red flower
#

i am, everyone go play it or else

vast lily
#

i added ur mod to my game with like 12 other mods and hit a boss blind that was a word puzzle on a deck that wasnt the letter deck and i couldnt beat it

tall wharf
#

oh wtf

#

wordle boss should not show up if you don't have letter enabled

thin anchor
#

lol

tall wharf
#

did you buy them vouchers

vast lily
#

i wish i remembered better how it happened

thin anchor
tall wharf
thin anchor
#

uhhh

#

well its really cool and creative!

vast lily
#

i have neither of the vouchers ur mod adds discovered @tall wharf

#

so i assume i didnt buy them

tall wharf
#

huh

#

maybe old ahh version idk

rugged pier
#
config = {
        extra = {
            hands = 8,
            played_hands = {}
        }
    },
    loc_vars = function(self, info_queue, card)
        return { 
            vars = { 
                card.ability.extra.hands,
            } 
        }
    end,
    calculate = function(self, card, context)
        if context.before then
            card.ability.played_hands[context.scoring_name] = (card.ability.played_hands[context.scoring_name] or 0) + 1
            if card.ability.played_hands[context.scoring_name] % card.ability.extra.hands == 0 then
                return {
                    level_up = true,
                }
            end
        end
    end

implementing this caused my main file to stop recognizing my joker file 😭

#

@hushed field @wintry solar

red flower
#

card.ability.played_hands[context.scoring_name]d <--- d

wintry solar
#

I think you actually need the message here too 😅

#

Level up seems to not auto add the message

chrome widget
#

Woooooo dragona joestar my transfem queen!!!!!!!

rugged pier
rugged pier
#

let me try

#

broke the game upon playing a high card

red flower
#

card.ability.extra.played_hands

rugged pier
wintry solar
#

You probably need to respawn the card too

rugged pier
rugged pier
red flower
#

there's no table in ability, it's in ability.extra

rugged pier
#

yes

#

it works now, thank you!

red flower
#

time to break everything by implementing a new rarity system

stark geode
#

anyone know how to do the titlescreen thing where you replace the cards

red flower
stark geode
#

how do

chrome widget
#

How can you check for something's suit without using the is_suit() function?

#

self.base.suit?

red flower
#

yes

red flower
uncut grail
#

you probably should stick to it

#

at least try to stick to it

chrome widget
#

If you call is_suit() within a check_enhancements context, the game crashes due to infinite loop, because the modded is_suit checks for quantum wild cards

#

I suppose I could literally disable quantum enhancements and turn it back on lmao

hushed field
#

the hackiness of quantum enhancements is why I've opted out of using them, honestly

uncut grail
#

oh and yeah guys, has anybody ever encountered this issue? (the card stuff appears on top of stone cards)

hushed field
uncut grail
#

so is this just in vanilla balatro

hushed field
#

i haven't played without smods installed in a long while, I'd have to check

open aspen
#

is this correct localization for stickers?

#

cause it aint working

uncut grail
uncut grail
primal robin
#

Nope, localization files exists

uncut grail
#

oh yeah i forgor

open aspen
# uncut grail

yea, but its a custom sticker so idk how info_queue is gonna work with that

#

i mean it worked before and i lost half my project including localization

primal robin
#

descriptions.Other["sticker_key"] = { name = "Sticker", text = { "My sticker" } }

open aspen
#

so i assume i fucked something up now

narrow iron
#

oops

primal robin
#

And also

open aspen
#

uhm

#

well its not working

#

why

primal robin
#

Show me how yiu init sticker

open aspen
#

you want the whole code?

primal robin
#

you key for sticker should be <mod_prefix>_<sticker_key>

tall wharf
#

lmao wtf

open aspen
#

i mean

#

heres whats weird

open aspen
#

only the popout description is an error

#

wtf.....

primal robin
#

well...

open aspen
#

perhaps the error is in here then

#

also for proof its not the wrong key:

primal robin
#

Pass as key a value with mod prefix

#

so key = "untitledtagmod_tagged"

tall wharf
open aspen
primal robin
#

Just here

open aspen
#

i dont think that will fix it

#

but

primal robin
#

At least you should try

open aspen
#

worth a. shot

primal robin
#

This works in my mod at least

open aspen
#

really?

buoyant merlin
#

So I stopped a glass card from being destroyed..... how would I put it back into the discard

#

Its just stuck in the middle of the screen

open aspen
#

i figured it out

#

i wrote description instead of descriptions in my localization fil

primal robin
#

I'm not surprised

open aspen
#

me neither

stark geode
#

how do i call localisations out of a localisation file

open aspen
#

i had to remake my localizations

primal robin
#

G.localization is current localization used

open aspen
#

you just need to make a loc_vars

primal robin
#

So G.localization.descriptions.Other.tagger.name

open aspen
#

if u need to get it do that

red flower
#

or use localize

open aspen
#

anyways if u just mean how to use localization file

#

you just gotta put the right key

primal robin
#

In a right place

open aspen
#

for a sticker its like this

#

this is an example