#💻・modding-dev

1 messages · Page 66 of 1

solid salmon
#

i can't make this crash on purpose

tepid crow
#

brother you gotta fix that indentation

#

also, you have the exact same issue as last time

solid salmon
#

assign a function

#

i always forget the calculate

#

lets gooo

solid salmon
rough furnace
#

You messed up a for loop I think

solid salmon
#

but it's not looped?

rough furnace
#

Show functions/state_events.lua line 731

#

From lovelt dumps

solid salmon
tepid crow
#

actually, could you try updating your steamodded?

wooden sail
#

I've been away for a while, with steamodded is there supoort for the new "Customize deck"? menu?

wintry solar
#

Your if block is broken

#

It’s hittting the bottom block in every context

solid salmon
#

also whats the key for x mult?

opal spade
#

after the newest smods update my lovely patch isnt being applied for some reason despite the update not changing the line im trying to replace with pattern

opal spade
#

apparently the order of injection changed????

muted pier
nocturne garnet
muted pier
#

oh i just haven't given it a rarity lmao

shell timber
#

honestly with this many retriggers it could be legendary tbh

#

like imagine that with triboulet etc.

muted pier
shell timber
#

yeah

regal wolf
#

Or you could even have it just juice up once, and then have the hand text on the side cycle through as it does currently, but the player can still perform actions.

languid mirage
#

the showcase is for the joker, klubi exists for a while now

tepid sky
#

anyone know where in crypid's code i can find the register of "G.GAME.modifiers.cry_big_showdown"

#

or is it only used for crypid's final bosses?

austere schooner
#

this is still happening and it's kind of frustrating me at some point, how would i craft a lovcely patch to actually digure out what's going on since my own attempts do not seem to work

solid salmon
#

whats the key = a_mult for x_mult?

tepid sky
solid salmon
#

ok

tepid sky
#

lmk if it works

solid salmon
#

it didnt so i made my own

#

well not really

tepid sky
#

?

solid salmon
#

like i did

#

if end of the round then x_mult = x_mult + G.Game.dollars / 100

tepid sky
#

hmm xmult money joker

solid salmon
#

yep

tepid sky
#

cool idea :D

solid salmon
#

and it works perfectly to

tepid sky
#

if it works, it works 🤷‍♂️

solid salmon
#

yep

wintry solar
#

Can I see this code because I have no idea how you’ve “made your own”

tepid crow
austere schooner
#

That was the idea with the lovely patch but I don't know how they work enough to make one that actually does anything

tepid crow
#

oh no, you don't need to make it that complicated

#

you can just open the cryptid file in your preferred editor (notepad++ or whatever is fine)

#

find these lines:

  if forced_key and not G.GAME.banned_keys[forced_key] then 
      center = G.P_CENTERS[forced_key]
      _type = (center.set ~= 'Default' and center.set or _type)
  else
      local _pool, _pool_key = get_current_pool(_type, _rarity, legendary, key_append)
      center = pseudorandom_element(_pool, pseudoseed(_pool_key))
      local it = 1
      while center == 'UNAVAILABLE' do
          it = it + 1
          center = pseudorandom_element(_pool, pseudoseed(_pool_key..'_resample'..it))
      end

      -- <- and put a print on this line

      center = G.P_CENTERS[center]
  end
wintry solar
#

It would be better to do sendDebugMessage(tprint(_pool)) for debugging purposes

tepid crow
#

I think the right way to print is using sendInfoMessage(center, "Samario")

#

printing the pool might also be interesting yeah

wintry solar
#

We already know the center is nil though

tepid crow
#

center gets redefined after the line I commented on

wintry solar
#

Alternatively printing _type would help too

#

Oh true

tepid crow
#

_type is "Joker", unless it gets redefined somewhere

wintry solar
#

Yeah I feel like it might not be a joker type causing the crash though

austere schooner
#
INFO - [G] 2024-09-08 13:18:35 :: INFO  :: Samario :: j_lobc_whitenight
INFO - [G] 2024-09-08 13:18:35 :: INFO  :: Samario :: c_cere_ceres_spectral
INFO - [G] 2024-09-08 13:18:35 :: INFO  :: Samario :: l_coll_card_2
INFO - [G] line not found
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] line not found
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2024-09-08 13:18:35 :: ERROR :: StackTrace :: Oops! The game crashed
[SMODS BetmmaAbilities "Betmma_Abilities.lua"]:98: attempt to index local 'center' (a nil value)
#

i think it might be collectors' cards????

#

i need to roll more toconfirm

#

yeah the next crash log mentioned l_coll_magnetic

#

so it's definitely collectors' cards

tepid sky
#

new mod? "flame debuff", just testing on how to manupilate the flame :D

crisp coral
#

what is this supposed to show

tepid sky
#

no flame :>

wintry solar
#

There wouldn’t be a flame there anyway though

crisp coral
#

yeah

#

that gives 420 score

tepid sky
#

then just focus on the high card pickture

crisp coral
#

i don't understand that one either

#

because that's just hc

wintry solar
#

There’s no target either for context

tepid sky
#

basically, i broke the flame, it will never show up

crisp coral
#

lmao

wintry solar
solid salmon
#

YES

#

oops

#

left caps lock on

wintry solar
#

Huh I didn’t realise jokers could just read from the config like that

tepid sky
#

funny

crisp coral
solid salmon
#

how do i make a deck

tepid sky
solid salmon
#

ok

drowsy tulip
#

G.deck.cards[1] will give the next card youre gonna draw right?

solid salmon
#

hey fellow devs

#

rate my art for a joker

wooden nexus
#

Nice work

solid salmon
#

as for how it should work tho

#

mmmm

#

i'd say it can spawn food jokers once the player gets enough money

wooden nexus
#

Add a Use Function to it, On Use: Remove $3, add a random Negative "Unhealthy" Food Joker to the pool

solid salmon
#

but i don't want it to be healthy

#

(i think i gotta make some food jokers)

wooden nexus
#

Burger, Fries, Milkshake, etc

solid salmon
#

is there a way to not let them be in shop

wooden nexus
#

Uh... idk exactly the coding side, I've been working on other stuff

solid salmon
#

ok then

drowsy tulip
#

and if not how can i get the next card ill draw

#

ok this doesnt work

#

nevermind

solid salmon
#

help i can't big mac

crisp elbow
#

Burger already exists

solid salmon
#

where

drowsy tulip
#

is there a context that happens earlier than context.before?

solid salmon
languid mirage
drowsy tulip
#

👹

#

how would i do that

wintry solar
#

where exactly earlier than before are you imagining?

drowsy tulip
#

so im trying to add steel cards into the hand in before but they arent triggering once the hand is scored

wintry solar
#

can I see the code you have to add the cards?

languid mirage
#

huh

#

DNA added cards work

drowsy tulip
#

maybe it doesnt work with draw_card?

languid mirage
#

how does DNA does it?

#

oh it copies

#

you want to draw

drowsy tulip
#

dna creates new cards ig?

languid mirage
#

dna works cuz it does cardarea:emplace instantly

#

draw_card creates an event

#

at least that's what I think is happening

drowsy tulip
#

shit

#

gonna have to figure it out tomorrow

languid mirage
#

you can copy necessary code from this part

#

from function draw_card

wintry solar
#

yeah I thought it would be event shenanigans

solid salmon
#

I added lettuce and highlights

autumn berry
#

is there an steamodded atlas key reference? I can't find any. My seals and the soul aren't working with the "centers" key

#

im replacing the exsisting, not trying to make new ones

tepid sky
opal spade
#

so update on magic trick:
the one big roadblock I have rn are retriggers
once I figure out proper retrigger calc that unifies joker retrigger api with vanilla card retriggers, the only thing left before the first release would be patching the rest of calculate events into card area api

opal spade
tepid sky
#

how would i be able to check if the player is playing a pair (its NOT for a joker)

opal spade
#

after that i'll just need to implement the new retrigger check into smods' calculate joker and the places where the game checks playing cards and i'd be practically done with the framework

tidal edge
#

looking to make something only happen if a card is retriggered

#

like specifically not the first trigger, only if its triggered more than once

opal spade
#

reps[j] ~= 1 in those places is "if not the first trigger"

nimble sequoia
#

does anyone have trouble with the add_joker function? i'm stuck working out why it doesnt work

tepid sky
edgy reef
#

Don't remember ever seeing it.

rough furnace
#

it's defined under common_events

#

it's used in like 5 places

#

it's used for debug spawning jokers and consumables and also seems some kind of sandbox thing

edgy reef
#

The only time it's actually used outside of debug is start_run for challenges.

#

Else is just debug commands and sandbox function.

tepid sky
bitter sand
#

guys i'm trying to make a voucher that is tarot merchant but for another type of cards but i'm confused when i look at the game code

#

found this and don't know if it's what i'm supposed to use

languid mirage
#

first value increases the rate

#

second is for display

#

if you encounter case like this, search for the voucher name in all folders

#

there should be a code piece which handles it

bitter sand
#

okay thx

#

i'll come back to you if i find something (or if i don't)

#

okay found this

#

i'm looking at the wiki and i'm a bit lost

#

idk which function i should use, the same as the vanilla game ?

languid mirage
#

next step is to search where tarot_rate is being used

#

its always a bit of a rabbit hole

#

oh wait, you asked a different thing

#

there should be a method for redeeming voucher

bitter sand
#

oh okay thx

#

so if i want to put it with my own type i have to just replace the tarot_rate with [type]_rate ?

rough furnace
#

ok how do I open a menu?

#

I try running lua G.FUNCS.overlay_menu(create_UIBox_generic_options({ contents = {{ n = G.UIT.R, nodes = {create_tabs({ snap_to_nav = true, colour = G.C.BOOSTER, })} }} })) but it crashes with engine/moveable.lua:278: attempt to index local 'self' (a nil value)

languid mirage
#

¯_(ツ)_/¯

languid mirage
#

:align_to_major()

bitter sand
#

so it means i have to make mine

languid mirage
#

no like where it's being used

#

or where the parent table is being used

#

I assume steamodded might have pool shop rate setting somewhere

#

you can probably find how cryptid does it with their code vouchers

#

ok so yeah

#

it's using consumable type lowercase name + _rate

#

in the G.GAME table

bitter sand
#

so if i make it the same way they did but while using the tarots values (which are the same but i don't want them (my cards) to start appear but appear more often) it should work right ?

rough furnace
#

the button seems to create it this way

#

wait I might be stupid

#

ok no

#

wait yes

#

forgot the object with deinition

#
return G.FUNCS.overlay_menu({
    definition = create_UIBox_generic_options({
        contents = {{
            n = G.UIT.R,
            nodes = {create_tabs({
                snap_to_nav = true,
                colour = G.C.BOOSTER
            })}
        }}
    })
})
rough furnace
#

but run code every x seconds

rough furnace
crisp elbow
#

I think that's nice for auto updated code but idk how it will work for updating assets

rough furnace
#

you can manually reload assets rn

#

pressing M will do it

#

this is more purpose made cause you can't just reload any file without it breaking

#

it basically needs no side effects (or the ability to undo them when rerun) and the game is already loaded when it does it's thing

crisp elbow
#

Ah nice

#

I know there was something that like crashed it when you tried to reload sometimes

#

Idk if that was a mod specific thing when reloading

rough furnace
#

Yeah this is probably more for testing specific stuff designed to be reloaded

#

I plan to make some modes for making a few things easier

#

most noteably, the ability to just do the tab thing, (like SMODS conifg_tab prop) and it renders the ui (instead of the crazy amount of code that it needs right now to do it)

#

I want to see if I can reload jokers mid game, but I doubt SMODS will play nice

#

Maybe I'll add a mode to watch a specific asset and reload when it's updated automatically

#

they might be too big to watch efficently

#

I can't use filesystem events to check for modififcation so I'm just constantly reading the file and comparing

nimble sequoia
#

so instead of j_snoresville_joker_name it became j_snor_j_snoresville_joker_name

#

exciting.

crisp elbow
#

Yeah it's the first 4 letters of your mod name

#

I think to fix it you have to give it a prefix or just use j_snor

nimble sequoia
#

I'll have to evolve with the times ig

nimble sequoia
crisp elbow
#

It's in your mod header

#

lemme grab an example

#
--- PREFIX: example```
#

you would add PREFIX: into your header and then whatever you want the prefix to be.

#

ie

#

--- PREFIX: snore

#

then that makes your jokers j_snore_joker_name

nimble sequoia
#

Excellent, thanks

placid frigate
#

hey I'm trying to have it so my Joker mod take played Heart cards, how do i call for the suit of the cards?

rough furnace
#

Failed to load lovely mods info

placid frigate
rough furnace
#

Just an example

mellow sable
#

today I learned that fractional atlas pos values work completely normally

rough furnace
#

Huh

#

Not sure when you would use that

mellow sable
#

maybe for a cool animation

#

also interesting for placeholder sprites, which is where I saw them being used

fluid lagoon
#

I need help understanding an error I got when trying to put in the mod I was working on

#

never mind, found the stupid error

languid mirage
hardy viper
#

shits from the future

mellow sable
hardy viper
#

real

spare elk
low raft
#

Ok, so I have this idea for a mod that gives specific jokers propper backs (for effects like the acorn).
and I have all the sprites for ir already made.

I have never made a balatro mod before, so my question is, how do i setup whatever i need to make mods, and what do i do to have the backs be replaced wiht this. (I assume the code would be as simple as checking if the joker is one of the specials, if it's flipped, and what deck is used)

mellow sable
#

You’re probably going to have to hook Card:set_sprites to change the sprite used by the back of the card

hardy viper
#

been thinking about how to make balatro utilize more memory because of how greedy retriggers can get

#

all i can really imagine is storing the data using the C memory functions, but idk how you're going to do that with lua data structs (like how do you store a lua function in C and then load it back into lua from that)

#

and i don't even know C so widegladeline2

#

ffi apparently makes it easy but w/e

#

i just can't be bothered so if anybody else has any ideas

low raft
opal spade
#

mods can be made using anything that can edit text files

#

so even the basic windows notepad can do the job

#

although a more specialized tool is preferred

hardy viper
#

i use vsc with a few extensions

opal spade
#

i use notepad++

tepid sky
tepid crow
#

I used notepad++ until I accidentally copy-pasted what was basically a 0-width space and broke my code which took me about 1-1.5 hours to figure out. Switched to VS code after that for editing, but still use notepad++ to search through the game files.

tepid sky
hardy viper
#

well

#

actually idk

#

i think i installed a modified version of luals that's meant for love

tepid sky
#

hmm alrighto's

bitter sand
#

can someone please explain me what k, v, etc... are ? because i'm a bit lost

#

thx

hardy viper
#

uhm

#

context?

bitter sand
#

looking at the game code to see if i can find something useful for my code

hardy viper
#

pairs is an iterator function

#

k is the index v is the value, but you can set those to anything you want

#

e.g. for ind, val in pairs(blahblahtable) do

bitter sand
#

okay thx it's a bit clearer now

hardy viper
#

yeah

#

most that stuff you can find on the lua reference manual

bitter sand
#

btw what i'm trying to do is basically ectoplasm without the -1 hand size (not really but you get the idea)

hardy viper
bitter sand
#

thx

#

oh so the in pairs means "take k and v together"

hardy viper
#

huh

bitter sand
#

maybe i read the stuff wrong

#

surely did

hardy viper
#

ok so
a table is organized like so:
{
a = 1,
b = 3,
ll = "hello"
}
using a for loop with pairs, you can loop through and go through whatever code you put inside that for loop with k and v representing every key/value pair in the table

#

so like, k will be "a", v would be 1, it'd run through the code, then it'll go back, k becomes "b", v becomes 3, runs through the code again, etc

wintry solar
hardy viper
bitter sand
#

oh okay thx

tepid crow
maiden phoenix
#

If you slide your mod folder into VSC it will show you all the files/folders inside

royal ether
#

my balatro workspace in vscode is so chaotic

rough furnace
#

I just have a cursed folder

#

And grep go brrrr

wintry solar
#

I have my mods folder and then the game files folder open

#

Lovely to search through

tepid crow
#

fair 'nough

#

I like to not clutter my vscode

hardy viper
#

i should declutter mine a little

#

and by a little i mean a lot

tepid sky
#

i even close all tabs when i am done 💀

frosty dock
#

I tend to go with just my mods folder because lovely dumps are most of what I need

#

lovely when there's a file that's unmodified or I accidentally edit the dump and I lose my changes

tepid sky
#

;-;

torpid dagger
#

I noticed bunco doesn't have a defined prefix

#

or if it does I wouldn't know

#

if I wanted to reference an edition from bunco

#

let's say glitter for example

#

if the key for glitter was just glitter (haven't checked)

#

would I do either:

#

bunco_glitter

#

or

#

glitter

#

because it doesn't have a prefix?

wintry solar
#

if there's no defined, it'd the first four characters from the id

torpid dagger
#

so it would be bunc?

#

like

wintry solar
#

so e_bunc_glitter

torpid dagger
#

bunc_glitter

#

ah kk

#

is the e_ needed?

#

I have been doing for example

#

cry_astral

tepid crow
#

it's for the edition

torpid dagger
#

just fine

#

AH ok

#

yee ok so I've been doing something to trim that

#

and I forgot

tepid crow
#

it's usually formatted as [item type]_[mod id]_[original key]

torpid dagger
#

👍 thanks both of you ^-^

wintry solar
#

oh yeah I added the e because you were mentioning the edition

#

please don't tell me you're using thunks cursed way of set_edition

torpid dagger
#

Nah lol I'm not

#

What i'm doing right now is setting up a table for a consumable that randomizes the edition of a random joker and I'm trying to add support for cryptid and bunco lol

wintry solar
#

you only need specific editions rather than all?

torpid dagger
#

Yee, I have a few editions I don't want being used

#

Negative being one of them for example

wintry solar
#

fair enough

torpid dagger
#

for soul_rate that is just rate at which it appears in the spectral packs right?

#

and if so is 1 the default rate of everything (except The Soul)?

#

with lower number being lower chance and cap being 1?

#

or wai tsomeone said it's 0.3%

#

is default

#

In addition, how do I get my editions to appear naturally? I don't think they are.

opal spade
#

how does one avoid this w/o hardcoding in specific vars

maiden phoenix
#

Loc_vars?

opal spade
#

how do i get them for info_queue

maiden phoenix
#

What are you trying to do?

torpid dagger
opal spade
#

for balatroAP

#

almost anything can end up there, which is why im trying to find a solution that isn't just hardcoding specific_vars

opal spade
torpid dagger
#

Is there anywhere that has documentation?

#

like for an edition, what is normal weight

#

is a higher or lower number more common

maiden phoenix
#

Higher = more common

opal spade
frosty dock
#

cryptid does this by hardcoding the config values

#

(mostly because of misprint magic I thi)

torpid dagger
maiden phoenix
#

1 means its guaranteed iirc

torpid dagger
#

so 2 would be more than guaranteed?

#

Confused on how higher works then

#

or do you mean

#

0-1 range

#

cause I saw someone have 6 on their weight

#

also I've kinda been brute forcing stuff, is there a good way to debug stuff? like spawning things on command etc.?

torpid dagger
#

I do actually have that but I'm not seeing how to access that menu

#

Oh hold tab

drowsy tulip
#

:v

torpid dagger
#

I got it from the github lol there's no instructions on it

#

So I was kinda just going maybe it's `

#

or /

#

lol

drowsy tulip
#

doesn't it say to hold tab in game

#

lul

torpid dagger
#

Lul nope

#

only mentions how to open the console with /

#

and shift + / for log previews

frosty dock
# torpid dagger cause I saw someone have 6 on their weight

for editions / booster packs / whatever other weighted pools, the meaning of a weight depends fully on the other weights (it's a literal weight). soul_rate is a fixed chance of replacing any one eligible item in a booster pack. For that one, 0 is never and 1 is guaranteed

torpid dagger
frosty dock
#

I don't think it's been added to the edition docs. Not at my PC but I'll check one sec

torpid dagger
#

Where are the docs I've been kinda flying blind

frosty dock
#

foil, holo, poly and negative are 20, 14, 3, 3 respectively

wintry solar
#

Yeah was going to say it should be in the edition docs

#

They have a base 4% chance of appearing, weighted accordingly, but you can modify the weight using the get_weight function if you want it to vary throughout the game, this will extend outside of the 4% range

frosty dock
#

yeah it's in the docs, I just wasn't sure if it was

torpid dagger
#

hmm hermit seems to bug the hell out if you give it editions that modify it's numbers

#

lol

#

Seems to blanket modify every hermit for having 1 hermit edition'd

frosty dock
#

that'd be the edition's implementation's fault

torpid dagger
#

Yeah oversaturated when put on hermit makes all hermits function as $40 max

#

(glitched also has the same issue)

#

i'mma report that rq

opal spade
mellow sable
#

Might need to tweak some values then

hardy viper
#

why is learning C easier than compiling C

#

its literally C youd think after what 50 years i wouldnt have to build a compiler myself

primal robin
#

Well, adding "Cash out" button keybind is a little bit trickier task than I expect lumaangry

hardy viper
#

yeah im pretty sure that specific button you just like.. cant hit

#

G.FUNCS.cash_out({config = {}}) works, but it crashes if you call it when the cashout button isnt already there on the screen

primal robin
#

If you call this function before event sets round money then money will be desynced

tepid crow
#

can't you make it an event that only calls the cash out when the button exists?

#

iirc events loop until returning true

primal robin
#

I want to make complete cash out stage skip now

hardy viper
#

i tried for like 2 hours

frosty dock
#

actually yes

#

just pcall the function

#

or check what it does inside and that might help, but this is easiest

primal robin
#

Button has id actually, but it can't be selected by get_UIE_by_ID somewhat

hardy viper
#

^

frosty dock
#

again refer to what the cash out function does if you want to do it properly, else just pcall it

primal robin
#

My plan is:

  • check is button present
  • if yes, just call cash out function
  • if not, skip stage completely, set money properly, cash out and go to shop
hardy viper
#
if G.STATE == G.STATES.ROUND_EVAL and G.round_eval then
  if G.GAME.current_round.dollars >= 1 then
      G.FUNCS.cash_out({config = {}}) 
      G.GAME.current_round.dollars = 0 
   end
end

this is what i did
maybe it works
maybe it doesn't

primal robin
#

That was initial plan

tepid crow
#

... but?

hardy viper
#

yeah idk why that doesnt work

primal robin
#

It always nil

tepid crow
#

could that be because it's being created only after trying to find it?

hardy viper
#

balatro code is just bad 👍

#

that was my conclusion

tepid crow
#

it's in an event with a delay of 0.5

hardy viper
#

i remember running a script that checked every single \get_UIE_by_id function to see if any of them had a cash_out_button and i think 2 of them did

#

which is so weird

tepid crow
#

that is kinda weird actually

primal robin
languid mirage
tepid crow
#

Oh, I see, you're working with an on-keyboard-input

#

makes sense yeah

primal robin
#

I wait until full eval stage, and press keybind. No button found

tepid crow
#

doesn't it need to be G.round_eval = UIBox{...} for that?

#

last time I used UI code major was basically only alignment stuff

primal robin
#

Damn, you're right

#

Just... why...

languid mirage
#

major is basically parent

primal robin
#

Commented code adds UIBox as a parent so it will work

#

But for some unknown reason he made it like this

tepid crow
#

I get that, but if the parent doesn't know of its child's existence, you can't find it using get_UIE_by_id

languid mirage
#

oh I see

#

didnt realise commented code

#

actually

#

it seems to be like it wasn't going to do that

#

the code just creates UIBox

#

that isnt stored anywhere

tepid crow
#

so unless UIBox does some magic to make the parent aware of its child (I couldnt find anything in my quick search)

tepid crow
languid mirage
#

I think its removed through the cashout function?

hardy viper
#

the button passes itself to the cash out function when you press it

tepid crow
#

ah

#

that's kinda clever lmao

languid mirage
#

nvm actually

#

it's not being used anywhere

#

the passed value

#

nvm

#

it does

#

only this 1 line

hardy viper
#

it almost is, but it's not reeeally used for anything

tepid crow
languid mirage
#

lovely patching time

hardy viper
#

which is why just doing G.FUNCS.cash_out({config={}}) works

hardy viper
languid mirage
hardy viper
#

button removes itself when you press it iirc

tepid crow
hardy viper
#

it hasn't ever caused any issues for me

languid mirage
primal robin
#

Wait. Actually, we don't need this button. We need to check is this button created or not.

hardy viper
#

oh good point that's weird

#

normally when i call that code the button does destroy itself

languid mirage
#

rly?

hardy viper
#

yeah

#

is it possible that it is actually inside round_eval somewhere

#

and cash_out would set round_eval to nil which would kill the button?

languid mirage
#

oh yea it works

#

lol

#

just this works

#

seems like

hardy viper
languid mirage
#

it didnt

#

actually

hardy viper
#

odd

#

i remember it crashing

languid mirage
#

but I assume it didn't cash out everything

hardy viper
#

well if it works it works

#

after all you can always just... not press the keybind unless the button is already there

#

actually

languid mirage
#

explain that to the user 😭

hardy viper
#

why not just check if the event queue is empty

primal robin
#

New plan:

  • When add_round_eval_row called, we set G.GAME.current_round.dollars immidiately, not waiting event.
  • If keybind pressed before button is created, we speed up game by x100, and complete cash out stage, then set speed to normal
  • After button creating, set is_cashout_button_created = true globally
  • If keybind pressed after button is created, just call cash out function as normal
languid mirage
#

it's never empty

hardy viper
#

that's usually empty no?

languid mirage
#

nop

#

always 1 event

hardy viper
#

oh

languid mirage
#

I guess you can check 1+

hardy viper
#

ye

languid mirage
#

but what if some mod adds something that also adds an event like that

#

not very robust

hardy viper
#

true

tepid crow
#

you could hook add_round_eval_row and add a custom event that only fires after?

languid mirage
#

needed to press much earlier

tepid crow
#

this is what I had to do for my code

        G.E_MANAGER:add_event(Event({
            delay = 0.01,  --  because Events suck
            blockable = true,
            trigger = 'after',
            func = function()
                ...
                return true
            end
        }))
primal robin
#

Okay, actually it works. But one problem remains.

#

How to unstuck money counter?

tepid sky
#

how did you even manage that?!

primal robin
#

JangSchna You don't want to know

tepid crow
primal robin
#

Okay I got a satisfied result

tepid crow
#

does it also look good when not skipping animations/on lower speed?

primal robin
#

JangSchna On lower speed works fine

#

With skip animation i'll check rn

#

With unsafe works fine

#

Yea, all looks cool

#

4 patches for cash out button omg

#

And 3 patches for all other part of mod

primal robin
muted pier
#

how does the soul pos thingy work?

#

cus im tryna use it for an enhancement on a card

#

and no luck :(

tepid crow
#

I think? it's only supported on jokers by default?

#

I know cryptid has a consumable that has a soul sprite, but I'm assuming they had to patch stuff for that

muted pier
#

im looking at the lovely dump, and technically it should just work

languid mirage
#

from card:draw

#

the big IF statement there checks if center has soul_pos

#

if self.edition or self.seal or self.ability.eternal or self.ability.rental or self.ability.perishable or self.sticker or self.ability.set == 'Spectral' or self.debuff or self.greyed or self.ability.name == 'The Soul' or self.ability.set == 'Voucher' or self.ability.set == 'Booster' or self.config.center.soul_pos or self.config.center.demo then

#

incredible

#

I always wonder why check for that and then still have each check separately inside of it

#

it's basically 😭

if condition1 or condition2 then
  if condition 1 and ... then
    do smth
  end
  if condition 2 and ... then
    do smth
  end
end```
crisp coral
#

thunk moment

#

because cryptid already patched that line i just wrote my overlays below everything

languid mirage
#

yeah

#

that's basically the easiest way

#

Idk why keep stacking on top of it

muted pier
languid mirage
#

¯_(ツ)_/¯

muted pier
#

wait

languid mirage
#

debug

muted pier
#

i think i might have been silly

#

no nvm i wasn't

#

okay

#

this should be displaying one of two things, an ace of hearts, or a question mark

#

and its using the correct atlas

#

and soul pos is there

crisp coral
#

soul_pos is taken from the enhanced card's center

muted pier
#

ah.

#

right.

muted pier
crisp coral
#

yeah enhancement would be the center theoretically

muted pier
#

oh so im still confused

#

nothing should need to be changed

crisp coral
#

what is the difference

rough furnace
#

this feels like a it was different at one point but was changed

royal ridge
#

wasn't experienced enough yet so i spent a while trying to figure out wtf was different

devout edge
#

hey! uh idk if this is the right channel but i want to make a Balatro mod but i've literally never before, is there a good starting point like a guide or something anywhere or do i just need to try and figure out what the other mods do right and then f around and find out from there?

wintry solar
#

reading the steamodded wiki will let you know some of the things you can do (it's not complete so if you have questions feel free to ask) and looking at some parts of the games source code is useful. other mods are also a good resource to see how they do similar things to what you are trying to do

devout edge
#

ok i have a working balatro mod now

#

it's barebones (as in literally just the mod options) but it works

wintry solar
#

you started with the options page?

devout edge
#

yea

#

ik this is a dumb question but how do i set a custom icon?

#

i went through all of talisman's .lua code (it's the smallest mod with an icon i know) and didn't notice anything relating to it

wintry solar
#

iirc it's an atlas with key = 'modicon'

devout edge
#

alr, i'll try that

#

...although i have no clue what an atlas is but whatever

#

time to find out what those are

maiden phoenix
devout edge
#

ah

#

cool

#

it works

#

i have taken the first step of hundreds

devout edge
#

crap just realized why the bones are there

#

i used the cryptid icon as a base bc of icon size

#

welp time to edit it

#

new icon les go

#

polished the sprite generally and reworked the bones

#

in case you're wondering what i'm gonna use this critter for, that's a good question

#

idk the answer

orchid thunder
#

how can one make it so a joker can onyl destroy certin consumable cards

limpid wing
#

What compressor should you use to decompress and compress the game exe?

tepid crow
#

you can just use 7zip to open the game files

#

you can also "drag them back in" using 7zip

limpid wing
#

ok

tepid crow
#

if you want a programmatic way to do it, I have no clue

rustic flint
gilded narwhal
#

Hey guys

#

Tattered yellow deck

#

Supposed to be golden

gilded narwhal
regal wolf
regal wolf
opal spade
solid salmon
maiden phoenix
#

Is it possible to contact someone on Github? I cannot find them on the Balatro discord or anywhere else.

rough furnace
#

If it's related to a project, making an issue is possible. Otherwise, they might use their email in their commits and you can try that

maiden phoenix
#

The repo doesn't show an Issue tab, I'll see if I can find a commit of theirs

rough furnace
#

Yeah you can git clone the repo and then check the git log

maiden phoenix
#

Thing is... their repo is a fork of mine, and they haven't done anything on it.

rough furnace
#

Who's the user?

maiden phoenix
tepid crow
#

From: Lyn <101982826+Lynekiboo@users.noreply.github.com>
seems like they have their email hidden

maiden phoenix
#

So I guess it's rip

languid mirage
maiden phoenix
#

Yes, but i'm scared they'll just put everything 1:1 into french rather than using a localization method, wasting energy

#

I don't know how's their knowledge of balatro modding

languid mirage
#

well your localization.lua does not exactly support multiple languages

maiden phoenix
#

True, that I want to tell to them too, say I'd help them and update the localization of the mod

bitter sand
#

guys i need some help, this used to work and now it doesn't and i'm pretty sure it's the regex

(and i'm injecting here)

tepid crow
#

I don't think you should be escaping the regex terms?

bitter sand
#

what ?

tepid crow
#

why do you have \\s+

bitter sand
#

idk

#

it's a code i done months ago

tepid crow
#

maybe it was a really old version of lovely?

#

I'm pretty sure you don't escape regex sequences in the latest version

bitter sand
#

lovely updated ?

tepid crow
#

last update was like 3 months ago idk

bitter sand
#

oh so no it's still is the same version :/

tepid crow
#

it's not lovely's fault

#

don't escape your regex sequences

#

no \\ unless you're looking for a backslash

bitter sand
#

i forgot how to use the site

tepid crow
#

what does that even mean

bitter sand
#

i'm bad at regex, and i don't understand how this stupid website works

tepid crow
#

just replace all the \\ with a \ on the pattern line and you're probably good

bitter sand
#

i'm pretty everything isn't supposed to turn bright red

languid mirage
#

change "

#

for pattern

#

on '''

#

so pattern = '''...your pattern...'''

bitter sand
languid mirage
#

can you send your toml file?

#

or just the patch

#

that fails

bitter sand
languid mirage
#
[[patches]]
[patches.regex]
target = 'functions/state_events.lua'
pattern = '''
(?<indent>[\t ]*)for i=1, #G\.jokers\.cards do
[\t ]*--calculate the joker after hand played effects
[\t ]*local effects = eval_card\(G\.jokers\.cards\[i\], \{cardarea = G\.jokers, full_hand = G\.play\.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, after = true\}\)
[\t ]*if effects\.jokers then
[\t ]*card_eval_status_text\(G\.jokers\.cards\[i\], 'jokers', nil, percent, nil, effects\.jokers\)
[\t ]*percent = percent \+ percent_delta
[\t ]*end
[\t ]*end'''
position = 'after'
line_prepend = '$indent'
payload = '''
-- your code
'''```
#

not sure why are you using \s

#

both that and \n are not necessary as they make the pattern unreadable

languid mirage
#

this is the game code your patch is trying to replace

#

so you just copy that

bitter sand
#

i don't want to replace it i want to inject after that

languid mirage
#

yea I meant generally

#

replace/prepend/append

languid mirage
# languid mirage

this is just useful to quickly confirm it works, without having to start up the game every time

bitter sand
#

i still need help 'cause regex is clearly not for me

tepid crow
#

also, I think steamodded's retriggerAPI modifies one of those lines at some point

bitter sand
#

i give up i understand literally nothing and nothing works too

#

it just annoys me

#

thx for your help guys tho

languid mirage
tepid crow
#

try this one instead?

[[patches]]
[patches.regex]
target = 'functions/state_events.lua'
pattern = '''
(?<indent>[\t ]*)for i=1, #G\.jokers\.cards do
[\t ]*--calculate the joker after hand played effects
[\t ]*local effects = eval_card\(G\.jokers\.cards\[i\], \{cardarea = G\.jokers, full_hand = G\.play\.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, after = true, callback = function\(card, ret\) effects = \{jokers = ret\}
[\t ]*if effects\.jokers then
[\t ]*card_eval_status_text\(card, 'jokers', nil, percent, nil, effects\.jokers\)
[\t ]*percent = percent \+ percent_delta
[\t ]*end
[\t ]*end
[\n\t ]*\}\) end'''
position = 'after'
payload = '''--test'''
languid mirage
#

I read a very good regex explanation but it's in my native language so I can't really recommend it

languid mirage
#

ukrainian

#

it's in russian tho

bitter sand
#

oh yeah can't read that

bitter sand
#

i can only read two things english and french

#

at least the --test is here

tepid crow
#

oh wait

#

wow I hate the lovely that modifies this part

#

I modified my regex, can you try again @bitter sand?

bitter sand
#

test isn't there

tepid crow
#

make sure you got the latest steamodded

#

911a

bitter sand
#

it is

tepid crow
#

but it doesn't append the --test anymore?

bitter sand
#

yup

tepid crow
#

can you show that part of the dump?

#

like 1200-1215

bitter sand
#

(i have some other mods so it's 400 lines further)

#

(and i tried without the other mods, still no test)

tepid crow
#

could you copy and paste that for me? 🤔

bitter sand
#

the code ?

tepid crow
#

the dump you just took a screenshot of yes

bitter sand
#
for i=1, #G.jokers.cards do
        --calculate the joker after hand played effects
        local effects = eval_card(G.jokers.cards[i], {cardarea = G.jokers, full_hand = G.play.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, after = true, callback = function(card, ret) effects = {jokers = ret}
        if effects.jokers then
            card_eval_status_text(card, 'jokers', nil, percent, nil, effects.jokers)
            percent = percent + percent_delta
        end
    end
tepid crow
#

... that's a match

#

I'm assuming you already double checked whether you correctly copy-pasted the code I edited?

bitter sand
#

yes

#

plus there's a button to copy

tepid crow
#

very weird

#

dunno what's going on then

bitter sand
#

oof

tepid crow
#

oh I did forget to escape a .

#

(even though that cannot possibly be relevant...)

bitter sand
#

you changed the message ?

tepid crow
#

yes

bitter sand
#

nothing

tepid crow
#

last thing I got is that your system is using some weird \n\r stuff

languid mirage
#

shouldnt matter unless its in the patch itself

tepid crow
#

you'd think so right

#
[[patches]]
[patches.regex]
target = 'functions/state_events.lua'
pattern = '''(?<indent>[\t ]*)for i=1, #G\.jokers\.cards do
[\t ]*--calculate the joker after hand played effects
[\t ]*local effects = eval_card\(G\.jokers\.cards\[i\], \{cardarea = G\.jokers, full_hand = G\.play\.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, after = true, callback = function\(card, ret\) effects = \{jokers = ret\}
[\t ]*if effects\.jokers then
[\t ]*card_eval_status_text\(card, 'jokers', nil, percent, nil, effects\.jokers\)
[\t ]*percent = percent \+ percent_delta
[\t ]*end
[\t ]*end
\s*\}\) end'''
position = 'after'
payload = '''--test'''

try this one anyway

bitter sand
#

nothing

tepid crow
#

Weird. Dunno then, sorry

bitter sand
#

it's okay

tepid crow
#

Also, you could consider inserting in a different spot instead? Lot less code to match in your regex

bitter sand
#

it's not gonna change anything ?

tepid crow
#

Possibly the timing of stuff, but I don't think by a lot. You'll have to try it out to see though

bitter sand
#

okay i'll try that later

drowsy tulip
#

does debugplus have a feature that can change the boss blind to whatever you pick because i dont wanna reroll for 10 years every time

bitter sand
#

oh my bad i read it wrong sorry

#

💀

languid mirage
#

it does

bitter sand
#

oh really ?

languid mirage
#

you go to collection

#

and press 3 on target blind

#

iirc

bitter sand
#

yup

#

it works

#

finisher ante 1

tepid eagle
#

how does one modify a joker sprite and hitbox to be smaller and centered? (like with square and half joker)

limpid wing
#

There is documentation of the code to create jokers?

bitter sand
#

i'm gonna try something

#

is this going to work or i forgot something ?

plain wyvern
#

is there a way to make a joker that could edit the wheel of fortune (and only the wheel of fortune)'s odds or is the wheel/aura/ankh/[what was he thinking] code truly unrecoverable

bitter sand
tepid sky
drowsy tulip
#

im trying to make a blind and i need to get the amount of points a hand will score

#

how can i do that

tepid sky
#

or you could have a look at how other's did it?

drowsy tulip
#

i tried to look at how cryptid did the tax but it was no help

tepid sky
#

maybe try a blind spesific mod?

tepid eagle
tepid sky
#

why not copy the square joker?

#

like quite litterally draw over him?

tepid eagle
#

the base code has hardcoded the square joker hitbox to be different and for it to render in the center so i can't do that unfortunately

tepid sky
#

uuh maybeee

#

its own atlas?

#

change the dimentions a bit?

maiden phoenix
tepid eagle
#

tyty

tepid eagle
static juniper
#

I'm trying to do Lovely patches again (after I completely failed last time), and I'm trying to add a tracker of the previous hand's score. This is what I have right now.

version = "1.0.0"
dump_lua = true
priority = 0

# function Game:init_game_object()
[[patches]]
[patches.pattern]
target = "game.lua"
pattern = '''last_tarot_planet = nil,'''
position = "after"
payload = '''prev_hand_score = 0,'''
match_indent = true

# G.FUNCS.evaulate_play = function(e)
[[patches]]
[patches.pattern]
target = "state_events.lua"
pattern = '''delay(0.8)'''
position = "after"
payload = '''G.GAME.prev_hand_score = hand_chips*mult'''
match_indent = true```
I have no idea if this is actually doing anything or not.  When I try to call G.GAME.prev_hand_score, it gives me ERROR, which I assume means that it doesn't exist.  What am I doing wrong?
limber sparrow
#

how could I get the required chips for the current bind once a round starts?

tepid crow
#

G.GAME.blind.chips I think?

#

(there's also G.ARGS.score_intensity.required_score but you probably should not be using that)

limber sparrow
tepid crow
# limber sparrow why not? out of curiosity

Basically:

  1. G.ARGS.score_intensity.required_score seems to always directly copy the value of G.GAME.blind.chips, so changing required_score does nothing, and will get overwritten by the value of blind.chips
  2. I don't really know what the time frame is for G.ARGS.score_intensity.required_score getting defined or undefined - it might not exist when you want it to, or still exist when you don't expect it to
    So why did I mention it? Dunno, thought it was interesting. I had to use it recently to change the intensity of the flames when you reach the required score
limber sparrow
#

oh cool, thanks :)

limber sparrow
#

is there a way to figure out how long it will take for the animations of counting up a hand's score will take? I'm trying to scale up a number over that whole sequence. is there a way to do this? like with an ease event maybe?

mellow sable
#

DebugPlus can track the number of events in the scoring queue, how that works might be helpful for you

tepid crow
#

also sort of depends on if you want it to be real seconds time-based or trigger based?

gilded narwhal
#

Balanced

spare elk
#

so your goal in Tainted Green Deck is to spend as less as possible? interesting

#

would Rebate just not work for TBlack Deck?

stray orbit
#

these look very fun

#

i have a pretty complicated idea and im not sure what the best way to approach it would be

#

i want to make a mod that generates new random jokers when you open a special pack, like random name and effect and everything

#

i cant tell if its better to have it be one joker that's given random stuff after its created or to try and generate new jokers every time its necessary

#

ive tried both and ran into different problems

#

what do people here think

stray orbit
#

using steamodded btw

gilded narwhal
#

But otherwise just store it in utility

maiden phoenix
#

Is it possible to differentiate whether a joker card is hovered in the joker card area or collection?

#

I'm gonna try an area check

#

Yea that worked

opal spade
#

G.your_collection isnt a card area but rather a set of card areas

opal spade
frosty dock
#

me when I have jokers in G.consumeables

tepid crow
#

me when I have jokers in my deck (I don't know the game code version)

opal spade
#

that's right

#

that's what i can get behind

opal spade
tepid crow
#

oh, right

#

hand area* then?

#

whatever the held in hand area is

opal spade
#

G.jokers - jokers
G.consumeables - consumables
G.hand - held cards
G.play - played cards
G.deck - remaining deck
G.discard - discarded cards

#

there's also G.playing_cards but its not an actual card area, but rather just the list of all playing cards (so everything in hand, play, deck and discard)

opal spade
maiden phoenix
#

Should have won the Jolly Open to make Math work on consumable joker calculation balatrojoker

opal spade
#

i understood some of the words that you said

tepid crow
opal spade
#

currently have a mod that makes math work on stuff outside of G.jokers but it unintentionally turned into retrigger api rewrite the mod so atm im stumped at one retrigger thing but once i get that sorted i should be able to get it out

tepid crow
#

Math is the main developer of cryptid
Jolly Open is a cryptid contest where the person with the highest score could add something to cryptid (I think)

opal spade
#

making math work outside of G.jokers is the easy part and if it werent for my huge ego pushing for the more ambitious implementations i'd have it out weeks ago

opal spade
opal spade
opal spade
tepid crow
#

you're trying to get the number of nodes from a tree?

opal spade
opal spade
#

this specific list isnt that hard to make real but i want a solution that would theoretically handle any depth of retrigger checks

tepid crow
#

probably needs to be recursive

opal spade
#

ye atm what i have is already recursive, i just need to figure out how to translate it from a tree to a list

tepid crow
#

or something fun with a stack, but I've always preferred recursion

opal spade
#

perhaps i could make it so instead of returning a tree the retrigger calc already returns a list so when the function receives a list it just has to create its own list based on the lists it has

#

so something like this?

opal spade
maiden phoenix
#

Sir, sir, more discards please!

opal spade
#

wait

opal spade
tepid eagle
#

sell this joker to get ✨ triple tag ✨

crisp coral
#

oh i thought that was a retriggered card effect from the deck

#

😭

opal spade
#

in vanilla it would be displayed at the bottom but im working on all the weird stuff to look more or less correct

maiden phoenix
#

Imagine a card that retriggers abilities in hand but also in the deck 😄

opal spade
#

might need to tweak the scale a bit but i got it to work

#

:)

#

need to figure out how to portray discard effects and then it'll all be awesome

#

perhaps i could draw the discard effect message above the deck but offset enough to where its obvious that its not from the deck

#

although idk how i should handle deck/discard calc

#

solution A) i code deck/discard calcs as separate contexts, severely limiting their potential

solution B) i code deck/discard as a part of the general calculate_joker/eval_card but make the calc fail if the card's center doesn't have a specific flag/function to check compatibility with deck/discard calcs, which would make this mod even more unoptimized

#

i think i'll go with option B because it's just more fun

tepid sky
#

how would i be able to check for the ante? this looks like it would work but it doesn't? even if i put the 8 between ' '?

primal robin
#

G.GAME.round_resets.ante

tepid sky
#

hmm thanks

opal spade
#

G.GAME.round_resets.ante >= G.GAME.win_ante

#

if you're trying to find out if the player on/after the final ante, you should check against g.game.win_ante because the final ante is a variable

tepid sky
#

thanks! <3

#

it- doesn't work

#

:<

maiden phoenix
#

Does main_end only contains one line or I'm missing something in my nodes?

crisp coral
#

need to be in two separate row nodes

maiden phoenix
crisp coral
#

n = G.UIT.R, ...

maiden phoenix
#

Ooh

#

Ty

crisp coral
#

might not work tho

#

but try

maiden phoenix
#

Will do

#

That worked, thanks again

royal ridge
#

does regex allow midline patching? i can't recall if it does or not

tepid sky
#

next question xd, how does the game select the showdown?

crisp coral
#

find the get_new_boss function

tepid sky
languid mirage
#

that's usually what u use regex for

#

either mid line patching or multi line patching

tepid crow
tepid sky
#

hmm

royal ridge
languid mirage
#

there's no way to hide a button inside UIBox automatically?
like UIBox has func in definition to hide itself, but if I try to add func to a button, it crashes on code in engine/ui.lua that tries to get G.FUNCS[<func>]

austere schooner
#

is there a context for a boss blind function that triggers after all jokers are finished scoring but before score is added up and added to round score

tepid crow
#

basically plasma deck's trigger?

austere schooner
#

pretty much

tepid crow
#

I vaguely recall someone asking a very similar question recently, unless that was you 🤔

#

anyway, I don't think one currently exists - should be very easy to make one though

austere schooner
languid mirage
#

I have UIBox that disappears on setting1 toggle
and inside UIBox I have 4 nodes, 2 of which I want to disappear on setting2 toggle

#

didn't manage to figure it out so I just released without option to hide 2 button nodes

#

the only reasonable solution to this is to remove UIBox and create it again with buttons (that's what I do for zoom slider), but I cba, since it has to be inside config menu from a toggle option

regal wolf
#

Can’t u just use the button property of a regular node?

#

You can use func property inside of that.

languid mirage
#

that's what I do for slider yeah

#

I basically have option to toggle those buttons

#

and I want to have an option that will toggle Show/Hide buttons

wintry solar
#

The back button in galdur toggles off on the first page, perhaps they might help as a reference?

languid mirage
#

maybe if I feel like this is worth the effort (as in someone actually needs this)
so far I only wanted to add this since it seemed useful
but I personally would just have those always on. I don't see why would I have zoom without other visibility options

hearty mesa
#

I'm new to modding and I have (attempted) to make a joker that gives *4 mult if the played hand has all enhanced cards.

The joker exists, but does not give mult (ever)

Any ideas??

        if context.joker_main then
            local add_xmult = true
            for k, v in ipairs(context.scoring_hand) do
                if v.ability.effect ~= nil then
                    add_xmult = false
                end
            end
            if add_xmult then
                return {
                    message = localize{type='variable', key='a_xmult',vars = {card.ability.extra.xmult}},
                    Xmult_mod = card.ability.extra.xmult,
                    card = card
                }
            end
        end
    end```
maiden phoenix
tepid sky
#

thats it cya now

maiden phoenix
#

Also it should probably be ...effect == "Base" so that if there's one non-enhanced card it will be false

royal ridge
#

ugh

#

no lookaround support for lovely regex is murdering me

hearty mesa
#

that worked, thank you

frosty dock
#

(you can set root_capture as a named capture group and with at position it will replace that capture)

#

I assume that's all you'd need?

gilded narwhal
placid frigate
#

When i use my mod in the game the text says what I want it to (being '100 mult') but when the Joker gets played it give Xnil Mult, how would i fix this

opal spade
placid frigate
opal spade
#

strange, codewise it all checks out

hushed cradle
#

can you send the code for your entire joker?

#

also if you use 3 ` before and after your messages its a bit easier to read

#

its the key above tab

#

if you changed the code for your joker to have Xmult in the config after that run was started

#

then starting a new run should fix it

#

provided everything else works

nocturne garnet
#

there should be something like this with your joker

#

but with Xmult instead of the things inside the extra

hushed cradle
#

do editions work similar to enhancements?

#

i just add stuff to an effects table?

wintry solar
#

I think math changed them to work that way when retrigger API was merged but I haven’t looked at them properly since that

hushed cradle
#

im investigating and it looks a bit odd

#

but i might be able to figure it out

wintry solar
#

I know that before that, outside of the supported config options you just had to manually do everything

#

Edition calc died in better calc

hushed cradle
#

so do i add values to edition_val?

#

yk what ill come back to this

wintry solar
#

Potentially, yes

#

I don’t know how it’s handled after this though

hushed cradle
#

i just went the patching route for now

#

tried to see how other mods did it and theyre using patching

tepid sky
#

how could i check if for example if the hook is active?

hushed cradle
#

print something

tepid sky
#

?

hushed cradle
#

oh do you mean the boss

#

my bad

tepid sky
#

also mine for not making it clear :>

hushed cradle
#

do you probably check the name/key of the blind

hushed cradle
#

you can probably do that

tepid sky
#

i tried somethings like this

#

wait

#

i think i found smth-

tepid sky
wintry solar
#

I don’t think you want to be hooking get type for that

tepid sky
#

oh- okays

wintry solar
#

You want the function that sets the blind

tepid sky
#

this one?

wintry solar
#

That would be it yeah

#

Hook it, check what blind is being set and change the colours accordingly

tepid sky
#

👍

wintry solar
#

Also for reference you don’t need rgba values for your colours, use the HEX formula that’s in the files

tepid sky
#

oh-

#

i mean it works like this

#

feels easy

wintry solar
#

Well the game will convert a hex code for you without any jank rounding that’ll change the colour slightly

tepid sky
#

i mean i think i'd rather have it like this so i can also have the opacity changed

#

feels like it should work

surreal marsh
#

is this patch a must to enable cards to give negative mult🤔

#

i think other mods have such cards

tepid sky
#

why not test?

surreal marsh
#

this patch works but maybe there's a more elegant way

tepid sky
tepid sky
wanton palm
#

This might be a stupid question but is there a way to reload the game to see the changes I make to the code without having to restart it every time

crisp coral
languid mirage
#

simple

surreal marsh
wintry solar
#

Isn’t negative mult supported by default?

surreal marsh
wintry solar
#

Oh is this for a hiker type effect?

surreal marsh
#

yeah

tepid sky
drowsy tulip
#

is there a function like modify_hand that triggers after all the cards and joker effects got triggered and if there isnt can i make one

tepid crow
#

at this point it should probably be incorporated into steamodded lmao

#

too many people asking for it

drowsy tulip
#

so i have to make one myself?

tepid crow
#

one does not exist currently within steamodded afaik no

#

you're looking for basically plasma deck's effect timing but for a boss blind right?