#šŸ’»ćƒ»modding-dev

1 messages Ā· Page 201 of 1

onyx sonnet
#

look for jokers with similar effects and check how they accomplish them

granite bane
#

basically I just want the decks function to go through and use a function to set_base a specific number of times, then remove the rest

onyx sonnet
#

šŸ‘

tender python
#

šŸ™ it would be very helpful, I can somewhat understand how code is laid out but don't actually know any languages lol

sturdy compass
#

Well I don't think there's any sort of tool like that unfortunately

old bane
#

OHKO (i couldn't figure out how to make it transition smoothly to the win screen without the game drawing cards to hand smh)

sturdy compass
#

On the bright side though, if you really wanna commit to it, Lua isn't too tricky of a language to pick up, even for a beginner

red flower
onyx sonnet
minor furnace
#

What exactly was your table designed to do? Because essentially what I’m trying to do here is create a blind that randomly changes its effect to a different blind every time you play a hand

old bane
minor furnace
hasty ravine
#

I cant tell if I'm unlucky or if my code isn't working because whenever I play any hand with a pair it isn't leveling up

spring lantern
granite bane
spring lantern
#

so wildly different purpose lol

#

but it should still work fine

onyx sonnet
#

wait nevermind

red flower
old bane
hasty ravine
#

Good point

red flower
sturdy compass
#

behold this longboye of a description

granite bane
#

Would be really nice if someday someone just had a comprehensive list of the functions

old bane
minor furnace
# spring lantern but it should still work fine

At this point, I’m wondering if I can just find a way to create the blind when I load the game instead of storing it, because I can at the very least store its name which persists between reloads

red flower
old bane
hasty ravine
old bane
#

i wouldn't even know where to start there tbh

spring lantern
red flower
spring lantern
#

this is actually the most important bit LOL

#

but i assume you do got that

old bane
hasty ravine
old bane
minor furnace
spring lantern
#

oh oops

hasty ravine
#

Ohh okay

spring lantern
#

init_game_object is where the variables are created

old bane
tender python
spring lantern
sturdy compass
#

oh yeah ur right

#

good call

spring lantern
#

i like how it explains hooks

#

hooks are your friend

old bane
#

i love hooks

onyx sonnet
#

how do i access my joker's config attributes from the lua?

red flower
sturdy compass
spring lantern
#

yeah that's what i was gonna say

onyx sonnet
#

so i should make my own variable inside the lua?

sturdy compass
#

no. this is what the igo hook is for

minor furnace
onyx sonnet
#

igo?

sturdy compass
#

this bit

spring lantern
#

for instance, i have a joker that works similar to to-do list but with xmult rather than money, so i created a variable in init_game_object that stores the name of the hand (by default 'High Card') and then change its value to any of the game's hands in reset_game_globals

#

so every round it picks a random hand

onyx sonnet
#

ah, thank you both!

minor furnace
#

gotcha

#

and I basically need that but on a per-hand basis. And storing a blind instead of a hand lol

tall wharf
#

+4 Mult if hand contains a High Card

red flower
spring lantern
#

so instead of resetting it in reset_game_globals you likely do it while calculating your blind? idk i havent touched custom blinds yet LOL

sturdy compass
#

Here's my code for picking out a random hand type in a reset_game_globals as a reference. You can ignore anything relating to a stop sign or a challenge lmao

minor furnace
old bane
opaque yoke
onyx sonnet
sturdy compass
#

šŸ‘Œ

tall wharf
opaque yoke
#

making a mod manager for Balatro

frosty dock
#

0 days

sturdy compass
#

LMAO

opaque yoke
#

LET ME HAVE FUN DANGIT

old bane
#

oof

tall wharf
graceful magnet
#

when making a challenge, to call one of my modded jokers, will just putting the key as is for id work or do I need to add a prefix or something?

sturdy compass
graceful magnet
#

sweet, thx

sturdy compass
strong jacinth
#

Does anyone know where the run info button and the poput is made.
-# Psst. (And how do I hook/patch it)

red flower
graceful magnet
#

back to putting almost the entire 200 strong Joker list into the banned_cards table tbh_3dexplode

frosty dock
#

-# there are 15 competing standards

tall wharf
#

days since

opaque yoke
#

-# ACE is planned to remain a CLI, mostly because tkinter scares me

frosty dock
#

oh hey, something that no regular user will dare use

sturdy compass
#

unfortunately yeah

opaque yoke
#

i'll make it look pretty i swear cries

kindred heron
#

Okay so quick question
When making a legend like Joker
Does the background and the Joker itself have to be two separate sprites?
If so, hwo do i load them togather?

tall wharf
sturdy compass
#

Yeah skyline's is pretty neat

plain wyvern
#

hopefully this one won't just randomly delete mods clueless

tall wharf
opaque yoke
frosty dock
red flower
frosty dock
opaque yoke
#

Ace will do a lot of the heavy lifting by automatically downloading lovely and creating the mods directory, provided that the person actually has Balatro installed and started it once, if not, it will tell you

tall wharf
tall wharf
#

can't blame me for that

strong jacinth
tall wharf
granite bane
#

Okay so is there any easy way to put things across several luas in the same mod pack or does that involve a lot of complicated coding

sturdy compass
#

btw aure were you responsible for the get_straight override or was that someone else? I'm trying to hook it and I'm lost lmao

old bane
granite bane
#

like having a seperate lua for decks, jokers, etc.

edgy reef
strong jacinth
sturdy compass
#

Oh god the CLI nerds have arrived

red flower
granite bane
fathom thunder
opaque yoke
#

i say """CLI""" loosely here because there're planned to be little menus to navigate in order to get more details on a mod, similar to those that you would get in-game via smods

red flower
sturdy compass
strong jacinth
fathom thunder
red flower
opaque yoke
fathom thunder
granite bane
#

so can I just throw assert(SMODS.load_file('jokers.lua'))() into the main lua or is there a special context i have to do

tall wharf
fathom thunder
tall wharf
#

😭

fathom thunder
opaque yoke
#

-# sifCheeky more like pressing a key, then enter, then pressing another key, then enter...

tall wharf
#

I'm going to assume some people are still scared of task manager

opaque yoke
#

if you're a Windows user, you have to know Task Manager.

tall wharf
#

if that appears for even just a second

#

people will be scared

#

they can't see it

fathom thunder
#

ive seen like a post of some computer science teacher who had students who didnt even know how to create a folder in windows

tall wharf
#

and then they see lovely where the console is always open

strong jacinth
tall wharf
#

the iPad kids are becoming iPad teens

fathom thunder
#

so many people are becoming technologically illiterate because everything just has convenient user friendly uis and does everything for you

#

(ahem phones)

tall wharf
#

there is a reason i don't use Linux

#

on my main PC

opaque yoke
#

skill issue?

tall wharf
#

yeah

#

but actually no

clever abyss
#

got a small idea but still struggling on how to do this properly.

fathom thunder
#

im not entirely against of having stuff be convenient but like its an issue when people stop knowing how to do stuff because of it

tall wharf
#

i have audio firmware issues

#

i still have arch installed on my pc i just don't use it

clever abyss
#

might need a little help

red flower
#

or wait maybe not

strong jacinth
tall wharf
#

?

red flower
fathom thunder
tall wharf
#

i was using pipewire

#

in fact any audio backend has the same issue

fathom thunder
#

that issue being

red flower
clever abyss
#

yeah saw that just not sure how to properly code it and then get it to work

red flower
#
SMODS.Blind({
    -- the rest of the config
    debuff = {h_size_le = 4}
})
#

im pretty sure

tall wharf
clever abyss
red flower
#

yes

#

no end

clever abyss
#

ok

#

is there an easy way to test this

red flower
#

use debugplus to reroll the blind

fathom thunder
tall wharf
red flower
#

oh really

clever abyss
#

actually first i want to see if it actually registers in game though

tall wharf
#

it will change the boss blind to that yeah

sonic cedar
#
if G.jokers.cards[i].config.center_key == 'j_hpfx_cyanosis' then

is this how i would check if this joker is the effect being used

tall wharf
#

this is not Minecraft you don't need to manually register it again

sonic cedar
red flower
#

well, I don't know the context but it looks correct

clever abyss
#

and for me i also got the code right? if so then thanks

#

just gotta do some more things now

red flower
#

if it didn't crash then yes

rose kettle
#

balatro said this part of my code caused a crash anyone see the problem here?

red flower
#

what did it say

rose kettle
frosty dock
#

but I've thought about maybe 10 different implementations of straights recently, so I'm not even sure of the original anymore (and i'm well aware it kinda sucks)

rose kettle
sturdy compass
# frosty dock yeah that would be me

Alright cool. I ask cuz I've been staring at it for a long while and I cannot for the life of me figure out how it ticks. I've added this little bit to it (right after the shortcut check) and it's causing any 5-card hand to register as a straight. Any ideas? Has_face_filled always starts off as false, and this implementation is in a hook that basically clones the base override function

clever abyss
#

ill be back in a bit to check something out

red flower
# rose kettle

I think it's telling you the problem it's in another one of the files that you load but idk

strong jacinth
#

With ui modding how do I create a new menu, kinda like the main menu? (Or is it easier to just create a popup?)

red flower
#

I'm not entirely sure what you want but look into G.FUNCS.overlay_menu

strong jacinth
#

Smods?

red flower
#

no, that's a base game thing

strong jacinth
#

I will, big G

clever abyss
strong jacinth
tender python
#

so I got my first joker to work! but I'm having an issue where instead of incresing xmult (x1 becoming x2 etc) it just stays at x1, any advice?

sturdy compass
#

show code

clever abyss
#

it got recognized so thats a semi positive sign

frosty dock
#

just stop having syntax errors Troll

red flower
#

i think the game should stop expecting '}'

sturdy compass
tender python
sturdy compass
#

Why are you doing that in an event manager?

red flower
#

what's the effect supposed to be?

tender python
#

I just copied stuff idk whats going on tbh šŸ˜” the effect being 1 in 2 chance for xmult to increase by x1 when blind is selected

sturdy compass
#

just realized you're using a G variable too. Hoo boy

frosty dock
#

what even is G.GAME.current_round.Xmult supposed to be and where did you see it

sturdy compass
#

you should be storing your mult in the same place you're storing your chance

tardy wind
#

xmult doesnt exist i believe

#

Unless its something you added

red flower
#

it creates it so it should work, but the return doesn't have xmult either

tender python
#

probably from ai, I copied stuff from other jokers and tried messing with an asked an ai so thats probably where the issue is lol, it will do x1 it is a success but won't effect it so if xmult doesn't exist that would make sense why nothing happens lmao

sturdy compass
#

ai will not yield good results

tender python
#

I figured since this is pretty niche šŸ˜”

tardy wind
#

just check other mods for inspo

#

or balatro source

red flower
tender python
#

🫔 thank you sorry for being dumb fsdsfd

tardy wind
#

that documentation def needs some work tho

red flower
#

I think it's fine

#

the first part literally explains the kind of effect we're talking about

sturdy compass
tardy wind
#

oh yah i mean the page you linked is probably the best one in the wiki so far

sturdy compass
#

I agree with that

graceful magnet
#

nnnnnnnnno I'm pretty sure there are banned cards

#

oh wait

red flower
west mason
#

no idea why it shows an error badge under the joker rarity tho

graceful magnet
#

steel joker whass going on

#

wait

#

2640 not 2460

#

I missed an e lmao

granite bane
#

is this how the set_perishable function would be used?

G.jokers.cards[i]:set_perishable(true)

clear epoch
#

chat what do we think of this fella?

granite bane
#

the function in the source code is function Card:set_perishable(_perishable) self.ability.perishable = nil if self.config.center.perishable_compat and not self.ability.eternal then self.ability.perishable = true self.ability.perish_tally = G.GAME.perishable_rounds end end

#

so how would I use this function to set a joker to be perishable? what would the format be

clear epoch
granite bane
#

which is?

clever abyss
#

new error

graceful magnet
clear epoch
#

aka SMODS.Stickers["perishable"]:apply(card, true)

zealous glen
granite bane
#

so SMODS.Stickers["perishable"]:apply(G.jokers.cards[i], true)

clear epoch
#

it's a hurdle, makes your life harder short-term but rewards you long-term

clear epoch
zealous glen
#

You could overcome a hurdle and get any benefit

#

Why that one?

clear epoch
#

i just thought it would be a cool effect and one worthy of increasing blind size

#

you can get the hurdle while you're strong and save up the fools

#

which can become any other tarot card later on

#

i could just make it a random tarot if i wanted to nerf it

zealous glen
#

But you don’t have too of course

#

Also I’d word it differently

clear epoch
#

what if it was any tarot card so the fool itself wouldn't interfere with the theming?

novel violet
#

x1.2 I suppose

#

Concept is fantastic IMO

zealous glen
zealous glen
#

I’d use the same template that I used for Champion

#

Not Champion’s Belt; Champion is different

zealous glen
clear epoch
#

there we go

sonic cedar
#

i was advised to do this earlier, do you guys know what the best way to store the last mult would be? (on that line)

clear epoch
#

i'll change the formatting later if i feel like it's needed

sturdy compass
spring lantern
#

i wonder how much of a headache coding this will be

zealous glen
#

Yes

#

That’s how much

spring lantern
zealous glen
#

Actually for just Lucky cards you could hardcode it

sturdy compass
spring lantern
#

both

zealous glen
spring lantern
#

or maybe just mult iunno

zealous glen
#

How often is the Mult

#

1 in 5?

spring lantern
#

1 in 5 yeah

zealous glen
#

Multiply it by 5

#

So 5 in 5 and 5 in 20

spring lantern
#

thats what i was thinking

zealous glen
#

Still weak for a Legendary

ionic fractal
#

funny though

spring lantern
#

i could maybe just set odds for both to 1 in 1 lmao

zealous glen
spring lantern
#

i mean

#

20 dollars

zealous glen
#

The issue with both is that you don’t have Lucky Cards

spring lantern
#

but you can add them to your deck

clear epoch
#

100 dollars a hand is not weak

zealous glen
#

If you assume you have Licky Cards then yeah guaranteed is OP

#

But if you don’t have them it’s weak

#

Better than Chicot still

spring lantern
#

so it's contextual

clear epoch
#

lucky cards aren't that hard to achieve though

kindred heron
#

How do i check for every scored card's chip number

spring lantern
#

triboulet is useless for a hack run

#

not all legendaries need to be op all the time

kindred heron
#

How do i know how much chips a playing card has

clear epoch
#

its about the same difficulty as caino

#

you need hanged men for that one

#

and faces

spring lantern
#

yea

zealous glen
#

That’s why I prefer Legendaries that change how you play the game

#

And I’d rather have a Super Rare rarity for stronger effects

spring lantern
#

thing is this mod also has more ways of getting legendaries :v

#

there's a rare booster pack that can give you legendaries

zealous glen
#

Maybe get chip mod helps

zealous glen
clear epoch
#

the effect itself shouldn't be too difficult to add as long as you can take ownership of the lucky card center

spring lantern
#

haven't worked with taking ownership of objects before so i might get a bit lost

spring lantern
zealous glen
zealous glen
spring lantern
#

fair

clear epoch
#

same as all other joker additions

zealous glen
#

Since Legendaries are hard to get, I don’t think they should be ā€œconditionally goodā€ in the sense that the condition is having the deck be built a certain way

#

But they should be conditional on playing a certain way

zealous glen
#

But ye

spring lantern
#

yeah just gotta change the calc function right

#

or maybe even just the config

#

gotta check the vanilla code

clear epoch
unborn wyvern
#

how would i go about using smods to add a new palette to an existing collab deckskin?

spring lantern
#

what was the new func that replaced eval_this() for jokers?

#

calculate_joker?

sturdy compass
#

calculate_effect iirc

zealous glen
#

@clear epoch did you implement Hurdle yet

clear epoch
spring lantern
#

so if i do this i could toggle the cat flag on/off to guarantee lucky hits when the joker is in deck?

zealous glen
#

How did you increment the Blind size

zealous glen
#

either that or have the Joker set a global variable

#

"global"

spring lantern
#

i'm doing a global var rn, didn't know about find_joker

sturdy compass
#

Yeah I think a find_card would work well

zealous glen
#

by "global" I mean per run

sonic cedar
spring lantern
#

would be much easier

clear epoch
# zealous glen How did you increment the Blind size
    key = "hurdle",
    loc_txt = {
        name = "Hurdle",
        text = {
            "Increases blind size by {C:attention}X#1#{}",
            "{C:green}#2# in #3#{} chance to generate a {C:dark_edition}Negative{}",
            "{C:attention}Fool{} upon leaving the shop area."
        }
    },

    config = { extra = { increase = 0.2, chance = 2 } },
    rarity = 2,
    atlas = "Jokers",
    pos = { x = 4, y = 0 },
    cost = 5,

    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.increase + 1, (G.GAME.probabilities.normal or 1), card.ability.extra.chance } }
    end,

    add_to_deck = function(self, card, from_debuff)
        G.GAME.blind.chips = G.GAME.blind.chips * (1+card.ability.extra.increase)
        G.GAME.blind.chip_text = number_format(G.GAME.blind.chips)
    end,

    remove_from_deck = function(self, card, from_debuff)
        G.GAME.blind.chips = G.GAME.blind.chips / (1 + card.ability.extra.increase)
        G.GAME.blind.chip_text = number_format(G.GAME.blind.chips)
    end,

    calculate = function(self, card, context)

        if context.setting_blind then
            G.GAME.blind.chips =  G.GAME.blind.chips * (1+card.ability.extra.increase)
            G.GAME.blind.chip_text = number_format(G.GAME.blind.chips)
        end
        
        if context.ending_shop then
            if pseudorandom("hurdle_j") < G.GAME.probabilities.normal / card.ability.extra.chance then
                local new_card = create_card("Tarot", G.consumeables, nil,nil, nil, nil, "c_fool", "obs")
                new_card:set_edition('e_negative', true)
                new_card:add_to_deck()
                G.consumeables:emplace(new_card)
            end
        end
    end

}
#

the code can probably be optimised a bit more

#

but it does work dynamically(instantly changes the blind size if u sell mid-round)

zealous glen
#

Bunco has a different one

zealous glen
#

my bad

spring lantern
#

this might be the first joker i've ever made that has no calculate function

zealous glen
#

although I think the shrink doesn't quite work unless there's extra code elsewhere

clear epoch
#

it does

#

works even with multiple ones

zealous glen
#

does it win if you shrink under your current score

clever abyss
#

still getting this error even after making sprites

clear epoch
#

not instantly, u gotta play a hand first

#

which is intentional

zealous glen
#

It's unintuitive IMO

#

but anyways

#

I think if you can get the benefit and then sell the Joker then it's not much of a Hurdle

clear epoch
#

i mean its easy to fix, but its to punish not knowing when to sell out of it

#

you lose out on 1 dollar

zealous glen
#

I don't think it's punishing. It just looks like a bug

clear epoch
#

unless you have a judgement its quite punishing to sell midround

zealous glen
zealous glen
clear epoch
#

that's a legendary joker level effect

zealous glen
#

It's rewarding

#

Because you could've sold it earlier

clear epoch
#

but if you had sold it earlier, you still lose out on the joker slot for the round

zealous glen
zealous glen
#

Selling mid-round isn't punishing. Entering the round with it is punishing

#

Selling is rewarding because the Blind is easier

clear epoch
#

balatro itself punishes the player by having them waste the joker slots with junk, this is the same design philosophy

zealous glen
#

what do you mean

clear epoch
#

rental riff raff

zealous glen
#

That's not junk

clear epoch
#

you take it and sell it before the round ends, you didnt lose money, but you won't always take it because of how precious slots are

#

and there's a big chance it does nothing at all

zealous glen
#

and I'm just saying that the punishment in your design isn't in selling it, it's in having it as the round starts

kindred heron
#

How do i remove -1 hand from the player

clear epoch
#

i don't see how this is dfferent

zealous glen
zealous glen
#

So at no point selling is punishing

#

Keeping is punishing

#

Because you neither buy something else and the Blind is higher

hushed field
#

I don't think vanilla has situations in which I'd consider selling a punishment. It's almost always the out for a worse consequence, like the cost of rental at the end of round

tender python
chrome widget
#

General lua question, does the # operator for length on tables not work if the keys for the table entries aren't numerical indeces?

zealous glen
clear epoch
random sleet
#

it doesnt count table entries that do not have numerical indices

zealous glen
#

they should use ease_hands

clear epoch
#

G.GAME.round_resets.hands if you want it as a permanent effect

zealous glen
#

not change the hands directly

#

again see Burglar

clear epoch
#

that works too, i never knew that was a function lmao

chrome widget
#

Shit, okay. Does that also mean it would "miscount" the length of a jagged array. I.E. your table is [1], [3], [5], it would list the length as 5 despite only three entires?

zealous glen
zealous glen
#

not 5

#

not sure

#

1, 2, 3, and 5 would be 3

clear epoch
zealous glen
#

@chrome widget also # isn't the array length operator. It's the "last entry" operator, except more like "last sequential integer entry starting from 1".

#

I think they need to be sequential

#

hence 1 not 5

#

but it might be 5 as it's the last (non-sequential) integer entry

chrome widget
#

point being, for a non-indexed table, I need to get the length manually

zealous glen
#

@clear epoch anyways both my mod and Bunco have different animations to change the Blind size

chrome widget
#

learn something new every day

zealous glen
#

well it's not an array

chrome widget
#

I'm..... aware? But because every data structure is basically a table, you need to use tables as arrays

clear epoch
zealous glen
#

you could construct your own arrays, either using tables or Idk if Lua allows some more basic object

random sleet
#

everything is a table its the most basic object

chrome widget
#

the reason for this question is because G.GAME.hands is not indexed, and I'm just making a simple batch_level function to which black hole would pass that in

zealous glen
clear epoch
#

ĀÆ_(惄)_/ĀÆ

chrome widget
#

like yeah, I gotta. It's annoying, but w/e

zealous glen
#

not ipairs, pairs

#

unless the indices are all sequential integers

clear epoch
#

oh that's the difference

#

i never knew that

#

then pairs it is

chrome widget
#

yeah ipairs is indexed pairs

chrome widget
#

I didn't know that was a thing until you just told me

kindred heron
#

How to detact chips from every card played

chrome widget
#

I pull from vanilla code most of the time

kindred heron
#

I cant find a joker that does that

spring lantern
#

am i doing this wrong

#

i mean of course i am but whats the right way of doing it

zealous glen
clear epoch
spring lantern
#

forgot to pass the card into the calc function sobe

kindred heron
chrome widget
#

There we go, fixed now

clear epoch
#

i think just setting ability.extra to something negative should work the same way unless it's hardcoded somewhere else

chrome widget
#

And if I want to do mod compatibility, I can take the functions of other multi-planet objects and feed them to batch_level_up(). Really the only reason I did this is because I have a card that scales mult with planet levels and I didn't want it to give 12 independent +1 messages for each hand, having added a context for hand upgrades

#

So batch level up exists just to give a single update that says [x] hands were upgraded [y] times so it an say +12

clear epoch
edgy reef
#

Table is just more useful since it allows multiple values

clear epoch
#

for hiker it's a number so

#

ĀÆ_(惄)_/ĀÆ

#

i was just talking about that specific case

kindred heron
#

Cant get it to work noe

#

Will sleep

zealous glen
#

@clear epoch do you have more Jokers

clear epoch
#

yea but i'm currently working on the sticker examples mod

chrome widget
#

this looks awesome as hell, I'm love

sturdy compass
#

Joe's reference

tepid crow
#

is that a mf jojo reference

clear epoch
#

had you made this joker a little bit faster i would've missed out on the reference

hushed field
clear epoch
#

it is indeed

#

but the effect giving holo seems a bit weak

#

since it blocks ecto

chrome widget
#

big thanks to Cauthen, he writes a JoJo fan manga and has been a huge help on the project

zealous glen
zealous glen
chrome widget
#

Inherently all three of the equivalent ones block Ecto yeah

#

And like yeah negative is really good, but is also the least common. So it's a risk to take one of these

zealous glen
clear epoch
chrome widget
#

Just where it stands rn. we talke about swapping Foil and Holographic

clear epoch
#

but it's your call after all

zealous glen
#

I think Peri + Holo and Eternal + Foil would be better

clear epoch
#

also, you could try to make it a selectable joker instead of a random one

zealous glen
#

Foil is the weaker Edition so tying it to Eternal makes sense

clear epoch
#

because both eternal and perishable are very very distructive

zealous glen
#

Poly is stronger so either Rental or Perishable works

chrome widget
#

ultimately Polychrome is with Rental b/c we considered Rental to be the worst of the three IMO

zealous glen
#

makes sense

spring lantern
chrome widget
#

Rental is super difficult to work around especially early game when even small xmult bonuses are really strong

zealous glen
zealous glen
clear epoch
chrome widget
#

But yeah we might switch Holo and Foil. It kinda depends on your opinion on Eternal. IMO I think eternal is the sticker I choose the most, whereas I pass up rental and perishable far more often

zealous glen
chrome widget
#

So if it's the least risk, then it should probably be given Holo, but also my personal experience with bulds leads me to focus on mult far more than chips a lot of the time, so I end up with a lot of mid-late game build that only get chip bonuses from planets

#

I.E. a foil bonus is still "strong" to some degree mid-game

#

But ofc that's anecdotal

#

I could also just be playing wrong most of the time, it's Balatro 😭

zealous glen
#

I think gaining Chips is the weakest effect, and it's weaker mid-game

#

Late game, I can see the argument towards either Chips or Mult being better; both are outclassed by xMult anyways

zealous glen
chrome widget
#

Arguably that makes Ichor the one with the least risk in the late-game too, because if you have decent economy at that point, you're able to circumvent the cost of a guaranteed polychrome

#

But you gotta get there first

zealous glen
#

Maybe

#

I dunno if you want Ichor late-game since you should already have better

chrome widget
#

At that point, yeah, probably

#

But if you don't have editions on some stuff late, it probably won't hurt

clear epoch
#

cuz honestly neither chips nor mult will ever make the perishable worth

#

and unless you can target the eternal i'd also never use it

zealous glen
#

It just tells you that you can't keep the Joker long-term

spring lantern
zealous glen
#

and that might already be the case

clear epoch
#

not at all, especially if it is random

#

i'd never risk my best joker just for 50 chips or 20 mult

chrome widget
#

We might make em targetable, but I'm not sure. We have another Spectral that does specify the leftmost joker and I'm not really sure why it's the odd one out, except that the ideas were floated by different people

zealous glen
#

The random does make it more situational

chrome widget
#

Although this one does inherently make more sense to be targetable anyway

zealous glen
zealous glen
chrome widget
#

Wasn't written by me. The person who made it probably wasn't aware that it would be easier to highlight it

clear epoch
#

that makes sense

chrome widget
#

I'm the lead programmer, but not the sole creator of content for the mod

#

So people sometimes make assumption about what is/is not easy to implement

clear epoch
#

you could suggest this, just for qol sake

chrome widget
#

Definitely will, whenever I get to it

#

I'm working on some legendaries rn

zealous glen
#

what's the mod about

chrome widget
#

It's a collaborative mod for the JoJo's Bizarre Fanworks server, which is a hub for JoJo fanfic/fanmanga/fangames. In addition to some baseline canonical JoJo content (courtesy of BarrierTrio, co-creator of Cardsauce that will also feature some JoJo content), most of the content is stuff from various projects made by the server members, including my own

GitHub

A Balatro mod made for Vinesauce! Contribute to BarrierTrio/Cardsauce development by creating an account on GitHub.

zealous glen
#

Ah I see

#

Explains why they feel JoJo-like but aren't JoJo

ivory coral
#

how do i check for a specific joker when retriggering jokers? im trying to make a joker that retriggers retriggers only specific jokers, so i need a way to check that context.other_card == <specific joker> when retriggering

zealous glen
#

I think JoJo changed my approach to fictional powers/abilities when I found out about it

chrome widget
#

this is my personal favorite addition so far, which is based on an arc in a fic called Streetlight Pursuit where the characters get trapped in an arcade cabinet (Cabinet Man). Unfinished, ofc

zealous glen
spring lantern
#

i have no idea what the fuck im doing in the slightest sober

ivory coral
hushed field
clear epoch
sturdy compass
zealous glen
chrome widget
zealous glen
#

not sure about the other of center and config or if it's config and not something else

chrome widget
#

I basically rewrote its main function to instead use the joker as a frontend, and draw the overlay on the screen, + feeding in input from Love2D

#

And then it checks certain ram locations to gauge whether or not you've win or lost

zealous glen
#

I knew about the old mod that just put this game into Balatro so I wasn't as surprised ^^'

hushed field
#

that's insanely cool

crisp elbow
#

It was Mario Brie

#

*bros

chrome widget
#

Yeye I got the idea from the Super Mario Bros mod/love2D implementation, and then Keku, from Cardsauce, also attempted to use it for a tetris-playing joker before just saying screw it and writing tetris from scratch since it's not a very difficult game to write anyway

clear epoch
chrome widget
#

probably,,,,,,,

zealous glen
chrome widget
#

if we tried hard enough

zealous glen
#

Maybe someone else did Donkey Kong

#

or I'm misremembering

#

I'm tired @_@

chrome widget
#

Regardless, it also plays TMNT II: The Arcade Game and Dragon's Lair, but neither of those are finished yet b/c I was busy on other stuff. I'm gonna have to use a hex editor or something to find some decent ram mapping for the latter which I'm not looking forward with but I guess this is my first foray into romhacking now

clear epoch
zealous glen
#

Bucky?

clear epoch
#

who's bucky 😭

chrome widget
#

(this is a marvel rivals joke)

zealous glen
#

from Marvel Snap?

clear epoch
#

just fortnite because of miku(deadass)

chrome widget
#

based

zealous glen
#

a few years ago I was writing down so many Stand ideas

chrome widget
#

Well if you're interested in throwing stuff around with people, the server's a welcoming place

#

Otherwise, this mod'll be public when it comes out! Hopefully it'll have a decent amount of canon JoJo content too for people not familiar with the fan stuff. That's just more guided by the Cardsauce team than by me

zealous glen
chrome widget
#

šŸ‘€

zealous glen
#

I'd need to find out how to join

plush cove
clear epoch
hushed field
#

Wait, does Bucky have an iconic ult in Marvel Rivals? I don't have an effect yet for the Winter Soldier joker, so I guess a retrigger is a good option šŸ˜‹

edgy reef
#

Yea

plush cove
chrome widget
clear epoch
#

can't you just increase G.GAME.round_resets.shop_rerolls or however that field is called?

minor furnace
# spring lantern

After looking at this for a while, I still don't quite understand how this works or how to use it to do what I'm trying to do šŸ’€

zealous glen
edgy reef
chrome widget
#

I assume it's something related to Hydra actually having some kind of basis as a tentacle monster cult. I'm not familiar enough with it

edgy reef
#

You call SMODS.change_free_rerolls and pass how many to add/remove

ivory coral
#

i am reasonably confident its supposed to be config.center.key from searching this channel at least

clear epoch
edgy reef
#

The issue is that beforehand you'd have to inject since the code to make it work for Chaos would override any changes you'd make to it.

clear epoch
zealous glen
#

I checked just now

#

I feel like 'j_blueprint' should work

clear epoch
#

also yeah it should be center.key not center_key

ivory coral
ivory coral
zealous glen
#

context.other_card.config.center.key == 'j_blueprint'

ivory coral
#

ill try debugging a bit maybe its going wrong somewhere else

zealous glen
#

do you have center.key or center_key

clear epoch
hushed field
ivory coral
clear epoch
#

if nothing happens consider putting a SMODS.juice_up_blind() after the if

#

it might be the code afterwards that is faulty

#

not the if itself

ivory coral
#

currently checking for smth like that

clear epoch
#

oh if you're doing joker retriggers you should probably send over the whole code block since that's a SMODS only feature

#

and unless you've enabled it as an optional feature it won't work

#

i've had a similar issue before as well

ivory coral
#

ill send my calculate though

        if context.retrigger_joker_check and not context.retrigger_joker and context.other_card ~= card then --if triggering another joker
            if context.other_card.config.center.key == 'j_blueprint' or context.other_card.config.center.key == 'j_brainstorm' then --if it's a blueprint/brainstorm
                if card.ability.extra.retriggers < 1 then card.ability.extra.retriggers = 1
                    return {
                        message = localize('k_again_ex'),
                        repetitions = card.ability.extra.retriggers, --retrigger it
                        card = card,
                    }
                end
            end
        end
    end```
#

previously i just had it retrigger any joker but itself but im reworking it a bit now into just blueprints/brainstorms but it never seems to actually pass a check for them

ionic timber
#

I might be stupid but all of a sudden everything that uses a hand level in my code stopped working, was .level changed in the latest SMODS update ?

#

For the sake of example : mult = G.GAME.hands[G.GAME.last_hand_played].level, this used to work, now it doesn't

clear epoch
#

check something else that might've broken

ionic timber
#

hmm now that I think about it, can something like Talisman break things up ?

#

I installed it recently to add x_chips to a joker I created

#

but that's the only thing I can think of

solid surge
#

how can i make a joker that gives money depending on specific cards you play (like golden ticket or rough gem)

#

this is for a joker im working on that has buffed gemstone joker abilities

granite bane
#

how can I make card_eval_status_text happen right when the function is called? is that possible?

The joker I'm making has an event triggering outsinde the normal contexts, but when I call the function it's waiting till whatever context is put in. to display the text

is there a context that means "now"

ionic timber
clear epoch
ivory coral
clear epoch
#

something along those lines

solid surge
#

ohhh! i've just been doing card = card, that might be why it isnt working

ionic timber
granite bane
#

ah

ionic timber
#

a return in this context is used directly on the playing card, baron does that

granite bane
ionic timber
clear epoch
#

u used card.ability.... not other_card

#

so that bit of code messed up

#

cuz it was checking for repetitions on the actual joker not blueprints

ivory coral
solid surge
clear epoch
clear epoch
clear epoch
ivory coral
# clear epoch ah well glad it works XD

one more question though if i may, how do i get the "Again!" message to actually appear on this joker?
both card = card and card = self put it on the joker being retriggered (or on a card triggering the joker effect like arrowhead)

clear epoch
#

card = context.other_card

ivory coral
# clear epoch card = context.other_card

no change
this joker (the one that causes the retrigger) isnt even juicing actually
for reference my return{} is currently

repetitions = card.ability.extra.retriggers, --retrigger it
card = context.other_card,```
clear epoch
#

it might be due to how the retrigger contexts work

#

your code works during the joker retrigger check phase

ivory coral
#

hm you might be right
for retrigger jokers being copied it does kinda work as one would expect
maybe itll just be like that

clear epoch
#

not the actual retriggers

#

i think the retrigger phase happens once for all jokers then the retriggers happen equal to number of repetitions to each individual joker

#

as opposed to card repetitions which they all are seperate from one another at all times

granite bane
#

I'm digging around source code and I just can't find anything

languid rune
#

Anyone know if there's an easy way to force a single or group of custom boss blinds to appear for each ante, Ignoring the default boss blinds. or removing the defaults from the pool?

#

I know the Balatro Multiplayer mod does this, but scrubbing through their code I can't seem to find out how. 😭

clear epoch
#

don't know about forcing blinds but if you want to ban a blind you can do G.GAME.banned_keys["bl_psychic"] = true (replace psychic with any boss key)

minor furnace
#

at this point, I think it would have been faster for me to implement the blind effects manually..

granite bane
#

if there was any way to like create your own context or something

#

that would be valuable

plush cove
#

SMODS.calculate_context({context_name = true})

granite bane
#

okay that should be good thanks

#

wait how would I use that

plush cove
#

make a lovely patch or a hook

granite bane
#

wait so I can't just use that in the mod main lua?

plush cove
#

you can, you'd just have to make a hook

granite bane
#

how do I do that

#

essentially my goal is to have
card_eval_status_text(<custom context here>)

languid rune
clear epoch
#

remember that it works with any key not just bosses

upbeat lark
#

sorry if this is a bloody stupid but the smart one in this project is currently out and i cannot for the life of me figure out why it eats a card when it doesn't trigger

    calculate = function(self, card, context)
        local destroyed_cards = {}
        if context.cardarea == G.play and #context.full_hand == 1 and context.full_hand[1]:get_id() == 6 then
            if pseudorandom('roulette') < G.GAME.probabilities.normal / card.ability.extra.odds then

                for i = #context.scoring_hand, 1, -1 do
                    destroyed_cards[#destroyed_cards + 1] = context.scoring_hand
                end
                return {
                    message = "BANG!",

                    --repetitions = 5,
                    card = card,
                }
            else
                return {
                    message = "click...",

                    card = card,
                }
            end
        end
    end,

unkempt thicket
#

how can i get jokers from game values? Like a table for them

granite bane
#

I'm still just trying to figure out the thing I was on 3 hours ago

tender python
#

is there a list of code for the descriptions of jokers? for changing text color/showing stats/showing current accumulated stat

languid rune
granite bane
#

I might just have to give up on my joker having ui when it upgrades

random sleet
granite bane
#

i literally just want it to trigger card_eval_status_text when I call the function rather than it waiting on a context and it's extremely frustrating that I can't find any way to just do that easily

unkempt thicket
manic rune
#

for the perma stuff

random sleet
#

no thats the other guy

manic rune
#

you can just have a table though

#

šŸ’€

random sleet
#

perman't

manic rune
#

perman

wind arch
#

does anyone know if theres a place to ask things relating to Lovely injector specifically? im trying to figure out something relating to patching

red flower
#

here

manic rune
red flower
#

change self for what the card is

wind arch
#
  • is it only possible to load patches from the mods directory
  • how does the mod loading order of steamodded work? is it random or is there any way for a mod to influence its own ordering
#

tldr im trying to figure out how a balatro modpack and save instance manager akin to something like modded minecraft's prism launcher and i theoretically know how a love2d game's save/mods directory can be switched but im not sure how id actually execute that

stray warren
#

you can change the priority in the metadata.json

red flower
#

Lovely patches need to be in a lovely.toml file in your mod's top level folder or inside a lovely folder if that's what you mean in the first question

glad osprey
#

rate the decks

wind arch
#

like tbh im not even sure if a mod could execute this because if it has to be in the mods directory then at that point it might already be too late in the mod loading process

#

like the first mod loaded by steamodded then switching the mods directory seems unsafe at worst or ineffective at best depending on if it stores that directory to reference beforehand

modern kindle
red flower
random sleet
wind arch
#

šŸ¤” interesting, where can i find more information about .lovelyignore? or where does smods do this as an example

granite bane
random sleet
granite bane
#

like it's waiting till the joker is triggered again

red flower
#

i think that might be a problem with your code

#

mine triggers instantly, I hooked into card:highlight to make it display the msg every time i click it

granite bane
#
    
    if not context.blueprint then
            for i = 1, #G.jokers.cards do
                if G.jokers.cards[i].ability.perishable then
                    if G.jokers.cards[i].ability.perish_tally == 0 then
                        G.jokers.cards[i].ability.perish_tally = -1
                        G.E_MANAGER:add_event(Event({
                            blocking = false,
                            delay = 0.25,
                            blockable = false,
                            func = function()
                        play_sound('tarot1')
                        card:juice_up(0.3, 0.4)
                        card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.x_mult_gain
                        card_eval_status_text(card, 'extra', nil, nil, nil, {message = localize{type='variable',key='a_xmult',vars={card.ability.extra.x_mult}}, colour = G.C.RED})

                        return true;
                            end
                            
                        }))
                    end 
                end
            end
                end```
wind arch
granite bane
#

It's supposed to triggere whenever another card perishes

#

and it does, everything but the card_eval_status_text. the sound, juice_up, and ability effect trigger when it happens

random sleet
red flower
wind arch
#

homestuck reference spotted

tender python
#

is there a list of code for the descriptions of jokers? for changing text color/showing stats/showing current accumulated stat

random sleet
#

this includes summing up all the base chips of all the cards

granite bane
wind arch
#

its funny to see how common homestuck references have seemed in balatro mods lol. it hasnt been a lot but definitely an above average amount

#

i can only guess the card aesthetics lured people in lol

random sleet
#

i got into homestuck from balatro

wind arch
#

oh nice

random sleet
wind arch
#

the cycle of stupidity is complete (refrance)

#

or was it circle idr

random sleet
#

its not complete til i have triple the basegame's joker count

wind arch
#

true

red flower
random sleet
#

its delaying so much because it's triggering on EVERY CONTEXT

red flower
#

yeah also

granite bane
#

couldn't find a context that would just trigger it when a perishable joker perishes so I just have it running constantly.

red flower
#

have you tried printing the context when it triggers to see which one it is

random sleet
#

print(inspect(context))

wind arch
red flower
#

you could try to integrate that directly into smods honestly

red flower
# granite bane

it's probably being called in context.end_of_round now that I see it

#

or maybe not but something just before that

wind arch
#

i thought about writing a feature request or something just to have stuff about the idea written down somewhere that other devs could maybe think about but tbh i have been a bit stuck on knowing if smods could even do what im trying to do. although i guess it could maybe if it made configuration per profile aand then made it so switching profiles reloaded all mods but idk yet if that kind of thing is easier said than done

red flower
granite bane
#

I tried for like an hour

wind arch
#

hmm okay for more clarification is priority handling a thing in steamodded only or can direct lovely mods also have some priority ordering to them or is it mostly just dependent on where youre patching into in the order of code execution

#

(like having to patch somewhere earlier in balatro's initialization or something for example)

cerulean rose
#

lovely patches can have priorities

wind arch
#

oh i see, im blind lol

#

guess thats not surprising it makes sense for a patch system to have that

red flower
# granite bane I tried for like an hour
local card_calculate_perishable_ref = Card.calculate_perishable
function Card:calculate_perishable()
    card_calculate_perishable_ref(self)
    SMODS.calculate_context({card_perished = true, card = self})
end
#

try that

tender python
granite bane
#

in the function or somewhere else

cerulean rose
red flower
red flower
#

then use context.card_perished

granite bane
#

"card_eval_status_text(context.card_perished"

#

that?

red flower
#

if context.card_perished and not context.blueprint then

granite bane
#

where it doesn't trigger the text when the mult is being added, it waits

#

I deleted the delay as well

#

still does it

red flower
#

weird, let me check

granite bane
#
            for i = 1, #G.jokers.cards do
                if G.jokers.cards[i].ability.perishable then
                    if G.jokers.cards[i].ability.perish_tally == 0 then
                    print(inspect(context))
                        G.jokers.cards[i].ability.perish_tally = -1
                        G.E_MANAGER:add_event(Event({
                            blocking = false,
                            blockable = false,
                            func = function()
                        play_sound('tarot1')
                        card:juice_up(0.3, 0.4)
                        card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.x_mult_gain
                        card_eval_status_text(card, 'extra', nil, nil, nil, {message = localize{type='variable',key='a_xmult',vars={card.ability.extra.x_mult}}, colour = G.C.RED})

                        return true;
                            end
                            
                        }))
                    end 
                end
            end
                end```
tender python
#

sorry for the noob questions šŸ™ thank you all

red flower
#

yes

tender python
#

thank you!

red flower
granite bane
#

Everything except the display for the upgrade is working as I want.

#

For some reason that's lagging behind significantly no matter what I do.

minor furnace
#

I might just remove the 'cards drawn facedown' effects from the pool instead of figuring out how to make this work

        if not G.GAME.blind.disabled then
            return G.GAME.blank_obj:stay_flipped(area, card)
        end
    end,```
red flower
vapid cloak
#

how can i make it so certain jokers dont appear in the shop? similar to how legendaries dont appear in the shop

granite bane
plush cove
vapid cloak
#

tyty

red flower
granite bane
#

can you send the code as text so I can copy paste and see if that works

red flower
#
local card_calculate_perishable_ref = Card.calculate_perishable
function Card:calculate_perishable()
    local prev_tally = self.ability.perish_tally
    card_calculate_perishable_ref(self)
    if prev_tally == 1 then
        SMODS.calculate_context({ card_perished = true, card = self })
    end
end
-- in calculate
if context.card_perished then
            return {
                message = localize("k_upgrade_ex")
            }
        end
plush cove
random sleet
#

WHAT is that notation

red flower
#

snake_camelCase

plush cove
random sleet
#

no the colon type notation??? ive never seen that in lua in my life

edgy reef
#

It's just a type hint display, the text isn't actually there.

random sleet
#

oh... kay.....

tepid crow
#

I mean, it's also kinda useless there

#

but yay

wintry idol
#

weird

#

maybe ive been doing it wr

#

oh wait

#

u said tyhe text isnt there

#

šŸ’”

tepid crow
#

the text isn't actually there haha

wintry idol
#

yeah oops LOOL

granite bane
#

Cause I already spent enough time thinking about this lol

hasty ravine
#

Will doing something like this count the number of scored cards in a hand?

hasty ravine
#

Oh my yay

plush cove
#

try it out and see what happens

minor furnace
#

I now have The Blank "working"*

  • could not get the card-flipping blind effects to be compatible
  • it still breaks if you exit in the middle of it, reload, and try to play a hand. It fixes itself if you do this, and then use a consumable or sell a card, which apparently retriggers the blind
#

I don't know what about selling or using a consumable re-enables the blind effect

#

maybe it's some sort of context update

wispy elk
#
        if context.selling_card then
            if card.key == self.key then        
                G.GAME.current_round.indomitable_currentMult = 0.7
                G.GAME.current_round.indomitable_increment = 0.15
            end
        end ```
I did this to try and reset the counters on my joker when the card is sold but that didn't seem to do it, what is the better way to identify if the card being sold is my card?
plush cove
#

if context.selling_self

wispy elk
#

derp

random sleet
#

card.key doesn't exist

wispy elk
#

I entirely missed selling_self when going through the list

minor furnace
#

maybe if I can figure out where it sets the blind from on load save, I can add a check to see if it is The Blank, and then trigger the secondary blind effect? šŸ¤”

red flower
#

isn't it just blind:load

minor furnace
#

yeah that's probably it

#

patch incoming, fingers crossed

#

It solved the problem!

tender python
#

is there a command for debug/debugplus to just add a certain joker?

red flower
tender python
wispy elk
#

Thanks for the help

rapid stag
#

i'm trying to very briefly change the y value in a the soul_pos of a joker i'm working on for a fun little visual effect - in the calculate function, is changing card.config.center.soul_pos.y correct?

hasty ravine
#

Would G.Game.blind.boss.name give me the name of the current boss blind?

hollow plover
#

hello all. im having some difficulty getting the modding API to work at all. im trying to understand the guide, but i think i need someone to walk me through while im doing it. i have the balatro mod manager installed, but i cant get steammodded moved to the right place or the right file where it needs to be

tardy wind
tardy wind
#

But i dont think .boss exists

primal shoal
#

whats the context for a opening a booster like this? ``` if context.booster_open then
-- add mult
end

red flower
primal shoal
#

thx

paper zealot
rapid stag
tardy wind
#

probably

#

hud:recalculate or something ?

#

(no idea how visual effects work)

rapid stag
#

cirThink ...maybe card:set_sprites(card.config.center)?

this was right - i had to do it by adding event manager events:

G.E_MANAGER:add_event(Event({
  trigger = 'immediate',
  delay = 0.01,
  blocking = false,
  func = function()
    card.config.center.soul_pos.y = 2
    card:set_sprites(card.config.center)
                        
    G.E_MANAGER:add_event(Event({
      trigger = 'after',
      delay = 0.3,
      blocking = false,
      func = function()
        card.config.center.soul_pos.y = 1 
        card:set_sprites(card.config.center)
        return true
      end}))
    return true
  end}))
runic pecan
#

What is the context for "taking a joker from a booster pack"?

red flower
#

pretty sure there isn't one

#

you need to patch it here

wind arch
#

if im making a basic lovely patch on its own do I just need ModFolder/lovely/patchname.toml?

#

without steamodded

red flower
#

yes

wind arch
#

hmm okay whats the best way to verify whether a patch is being loaded or not

plush cove
#

check lovely/dump and find your code

red flower
#

that or check the console

#

i think it tells you

wind arch
#

hmm im getting neither so i guess that answers that question

#

i should probably test this in a regular setup first before moving it over to my jank wip modpack setup

paper comet
#

Not sure why this is happening. I got a similar error to this before when i was missing the info_queue parameter in loc_vars, however this seems to be a different reason.

#

... fsr the images arent uploading

#
key = "mediocre_settlement",
    atlas = "mediocre_settlement",
    rarity = 1,
    cost = 2,
    unlocked = true,
    discovered = true,
    blueprint_compat = true,
    eternal_compat = true,
    perishable_compat = true,
    config = { extra = { mult = 4 } },
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.mult } }
    end,
    in_pool = function(self)
        return true
        -- return G.LOBBY.code and G.LOBBY.config.multiplayer_jokers
    end,
    calculate = function(self, card, context)
        if not self.debuff then
            if context.other_joker then
                if context.other_joker.config.center.rarity == 1 and self ~= context.other_joker then
                    G.E_MANAGER:add_event(Event({
                        func = function()
                            context.other_joker:juice_up(0.5, 0.5)
                            return true
                        end
                    }))
                    return {
                        mult_mod = card.ability.extra.mult,
                        message = localize { type = 'variable', key = 'a_mult', vars = { card.ability.extra.mult } }
                    }
                end
            end
        end
    end
#

and the error message was INFO - [G] 2025-02-28 11:31:42 :: ERROR :: StackTrace :: Oops! The game crashed [SMODS ChipOverflow "ChipOverflow.lua"]:86: attempt to index field 'extra' (a nil value)

#

(line 86 is return { vars = { card.ability.extra.mult } } if thats helpful)

normal crest
#

make sure to start a new run

#

Also two things, self is not a card, it's the center of the card, and you don't need to check if your own joker is debuffed

#

calculate won't be called if it's debuffed

paper comet
#

oh ok

#

thanks šŸ˜„

wind arch
#

hmm okay i can confirm my patch works so i guess its an issue with how im trying to get lovely to detect the custom mod directory so far, darn. i think im gonna try forking lovely to get its logging to match the mod-dir location to actually verify its recognizing the directory

glad osprey
#

question, if I have two mod metadatas in one folder would i be able to have two mods or would it break

#

I would like to make two separate versions of a mod, one only containing balanced content and one containing unbalanced content

#

wait I could probably just make that a config nvrm

red flower
#

yeah I was gonna suggest that

glad osprey
#

also is it possible to change the mod badge per object?

red flower
#

maybe using this

clever abyss
#

did some more work, got some progress and now i'm onto ranks. i see that this is for one specific ranks but how would i go about making it multiple ranks?

rapid stag
#

is it not possible to combine {s:#} and {C:inactive}?

glad osprey
red flower
clever abyss
#

ill try that

tall wharf
#

just put them in the same {} separated by comma

red flower
tall wharf
#

-# omg hoshino ai

clever abyss
wind arch
#

...... now i have to do the hard part of making a functional UI

red flower
tall wharf
#

i should rename my mod to Aikoyori's Insanity

#

shenanigans feels a bit weak

red flower
#

Aikoyorinsanity

clever abyss
#

also how do i get different blind sprites to work properly, when i tried it combined the two example sprites into one instead of making it separate

tall wharf
random sleet
#

development resumes tomorrow

#

i only made 8 jokers today smh

old bane
random sleet
#

5 of them are sinful jokers lmao

#

with placeholder art and possibly placeholder names lmao

old bane
#

oh yeah btw i was meaning to ask you

random sleet
#

ohno

old bane
#

do you know how rarities work for like consumables?

random sleet
#

you have to have a consumabletype set up with rarities

#

Oddity api in AMM has an implementation of this

old bane
old bane
tall wharf
#

i don't think I'd ever had to deal with consumable rarity

#

i just use the shop rate

old bane
random sleet
#

AMM also has perma mult/xchips/xmult/hchips/hmult/hxchips/hxmult, suit levels, graveyard, aspect card layer, bottles, joker stamps, subtitles on card names

scarlet spire
#

having an odd issue. this joker calculate function loops over all ranks, and subtracts 0.5 xmult from itself for every unique rank. I have an identical setup for suits that works perfectly, but this doesn't. basically for every rank, it loops over the scoring hand and, if it finds that rank, breaks from the inner loop and moves on to the next suit (after subtracting the xmult)
the first two prints fire correctly- but even if it prints 'Found: 8' and 'Looking for: 8', it'll still never pass the check to make sure they're equal

random sleet
#

are you comparing a string and a number

scarlet spire
#

that could be it

#

how do I avoid this?

random sleet
#

i think get_id() returns a number

#

card.base.value is the string name

old bane
scarlet spire
#

ahh okay

tender python
#

does anyone know a good way to destory suits for a joker effect? I tried to play with the "paranoia" code from paperback but it seems a lot of paperback relies on the altas from that

minor furnace
#

on my way to attempt to understand the entire G.FUNCS.evaluate_play in order to make one singular boss blind effect work

old bane
tender python
old bane
# tender python hand or played, also thank you for replying!

i've literally done something like this before, lmao. Here's an example of the code I used (you don't have to do this word for word, just an example)

if context.destroying_card and context.cardarea == G.play and not context.blueprint then
            local not_heart = false
            for i = 1, #context.full_hand do
                if not context.full_hand[i]:is_suit(card.ability.extra.suit) then
                    not_heart = true
                    break
                end
            end
            if not_heart then
                return context.destroying_card:is_suit(card.ability.extra.suit)
            end
        end
#

you can do something similar for cards held in hand by replacing G.play with G.hand, though you'd also have to switch context.full_hand for G.hand.cards i think

old bane
tender python
#

thank you so much! I'm guessing this would destroy all non-hearts so I would just need to switch that around to fit my needs?

hasty ravine
#

Would hand_name = context.poker_hands, card.ability.extra.ellie_mult = card.abilitiy.extra.ellie_mult + G.GAME.hands[hand_name].level add the current hand level to the mult modifier?

old bane
tender python
old bane
#

np!

hasty ravine
#

I'm not sure what the 'unexpected symbol' is here

plush cove
hasty ravine
#

Ah

#

Thatll do it

red flower
#

it's the comma after poker_hands

rapid stag
hasty ravine
#

Okay, so hand_name = context.poker_hands doesn't seem to work. Is there a better way to go about getting the int value of the current hand level?

rapid stag
tall wharf
hasty ravine
#

Ahh

#

I'll try that

steady smelt
#

i have a custom suit that i've removed from the pools for initial decks, but that removes it from the randomizer pool for erratic deck too. is there a way I can make erratic deck still start with 52 cards but have my suit be in the random suit pool?

tender python
# old bane np!

I think I might be messing up somewhere, I'm still pretty new (just started today) the joker loads in fine but when it activates it crashes

red flower
tender python
old bane