#💻・modding-dev
1 messages · Page 294 of 1
hey thats my idea!!
It works fine for me.
i literally can't be assed to write G.E_MANAGER:add_event(Event{func = blah, trigger = "after", delay = 0.1})
is it possible to make a custom sticker incompatible with another sticker? in this case, eternal?
or, obviously it's possible, I'm just not sure how to do that
is this fair
destroying 3 random cards O_O
ah
its not that bad if u dont fuck up :3
in early antes, probably not
in later antes, may actually be beneficial if player has too many cards in deck
instead i just write AKYRS.simple_event_add(blah, 0.1)
but what if you want to change the trigger type
to like "before" or "immediate"
i will write the whole thing
i usually just want the after so
i need some more testers for the solitaire thing
to see if this at least was close to the windows one
i added the card stacking
thing
also no i didn't end up using major whatever that is
lammmmeeeeee
dontchu want to spend 5 minutes finding a file with an event function to copy it over
how could one make something reroll the shop without increasing the cost? (different from chaos the clown as that's just once)
i think the idea might be to mess with how reroll price increases are done but it's a bit convoluted
First issue is that the window is too large for 16:9 displays, might need to scale or squish the cards down a smidge.
Second, if you do go ahead with extending Card (which i think you should), you could probably disable the card hover tooltip since it's a little distracting and unnecessary
- this is a fair point because i haven't properly tested on 16:9
- maybe i can add some modifier to solitaire who knows
Card shadows on stacks are dodgy, but i guarantee that won't be easy to fix, so probably ignorable
solitaire in my poker game...
Game is arguably too easy when the reserve deck deals one card at a time instead of the standard 3. I haven't been able to lose a game yet
So uhh how do I make a card a Lucky Card using the new documentation?
context.other_card doesnt exist in context.joker_main
change context.joker_main to context.individual
yeah
- Would be as easy as not including the tooltip argument on card creation, I don't think you'd even need to touch HyperCard:hover
context.other_card:set_ability(G.P_CENTERS.m_lucky, nil, true)
also I'd like to redirect your feedback into my server so i can keep track or just my thread
i already had to patch the Game:draw() nothing is real anymore
One small issue that could occur with the solitare
And do I need to worry about having the pseudorandom part in or can that be substituted?
change the key to something more unique
What if somebody had say the 60 suits mod on there
probably doesnt matter
it stays at 4 suits
ok
i locked it to be just the base 52 cards
aiko how are you so cool
no
since it's a chance for the card to become a lucky card, pseudorandom is needed
just for the sake of being evil I'll add 6 suit klondike
what sound does a chainsaw make
probably chainsaw sound
Vbhhhrrrrrrrrrrrrrrrrrrr
thank you aiko
LMAO
saws
randomly selected message everytime
i have literally zero clue on how to implement highlighting cards (not like selecting them but literally making them glow)
❤️
glow??
cause one of my card effects is highlighting the best possible hand (not like scoring wise but just the highest poker hand you can play)
but idk how to add like a glowing outline to cards
true! SMODS.DrawStep my beloved
damn i love shaders
問題がある
but i could probably just make it like
glow the card itself
man
what the hell
i wonder if for this i could just put G.hand.cards into evaluate_poker_hand and then it would return the results 🤔
basically my vision is:
- it evaluates the poker hand using evaluate_poker_hand (a modified version that limits things to five cards if need be)
- it stores the cards in the highest hand possible into an array
- SMODS.DrawStep grabs that array from the Joker and checks if each card is in that array
- if yes, highlight the card
idk if this will work but we have to try
he actually said it
I did the same pattern with my last Joker and that worked.
anyone know how too remove a random joker from the players deck
joker's key 😭
Arya_UncommonRarity.png
thats one hell of a 🔑
decks don't store joker?
just remove a random joker
pseudorandom_element(G.jokers.cards, pseudoseed('your seed here'))
I'll probably clean it up when this isn't just from the start.
G.E_MANAGER:add_event(Event({ --Destroy the marked Joker
func = function()
jokerIsMarked.T.r = -0.2
jokerIsMarked:juice_up(0.3, 0.4)
jokerIsMarked.states.drag.is = true
jokerIsMarked.children.center.pinch.x = true
G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.3, blockable = false,
func = function()
G.jokers:remove_card(jokerIsMarked)
jokerIsMarked:remove()
jokerIsMarked = nil
return true; end}))
return true
end
}))
this is what i do to remove a joker, you can change jokerIsMarked to what joker you want to destroy
and then remove it using start_dissolve()
its not about the prefix
they called the atlas wrong too
its uncommon_arya
right
not the path itself 🥀
you'll also need prefix too
nop
i think you do
nuh
then nevermind then
:3 its a good practice to add your mod's prefix to atlas' key though
but its not mandatory
man i sure love adding blind to my deck
what
nothing
Yeah, none of that worked.
The common variant is the one that works.
So now it's a game of Spot The Difference
Any other ideas?
Wait, my last stable version has way different variables. I'll just rollback and use those.
Yeah, that's what my last stable ver has, so going with it
WE'RE BACK
And the code works first try.
rare
how do you add a delay??
nvm
how can I detect shop start?
@glass scaffold sorry for the ping, needed a small help, I wanted to change a joker's texture, and name, it's only one joker
How can I do it
The name of a joker is dictated via the Name in loc_txt.
For texture, you'll need to have the Atlas and Joker like the one in my example.
So the joker I wanted to change is Shoot the moon, and can I also add those tiny candy-like round tag which mostly shows the name of the mod or the creator of the texture like that
If you're wanting to modify a vanilla Joker, that's a different ballgame since your mod will need to take ownership of it.
The "tiny candy-like" tags are automatically added.
Okay let's forget about those tags I am still a beginner so I barely understand 😅 don't wanna disturb ya too much
So if I copy this text and just replace the name will it work ?
You'll need to have the assets folders (make sure that folder contains an 1x and 2x folder as well with your Joker's .png)
Then have the Atlas in the code point to the .png, and from there, follow the example.
Wait lemme do it and show it to ya, I know about the assets part I just don't know what size should it be
Commonly:
1x is 71 * 95
2x is 142 * 190
However, you don't NEED to follow it as you can make it any size.
Just adjust for it accordingly in your Atlas.
Perfect thanks, a lot!
U left me there again 😭
Owhhh
I get it
= "Mmmmm.png",
px = 710,
py = 950
}
This? @glass scaffold
how do you activate something at the start of the shop
You mean like context.starting_shop?
Note: px and py are how wide and tall your .PNG is respectively.
ill try that
Also, you need the key and path.
So not about sizing
(check the example on how it goes.)
Those 2 variables determine the size of the texture the Joker uses in-game.
It's best to make sure it matches the actual dimensions of your .PNG
I don't need this right?
text = {
"Each played {C:attention}7{}",
"gives {C:chips}+#1#{} Chips and",
"{C:mult}+#2#{} Mult when scored"
}
},
config = {
extra = {
chips = 70,
mult = 7
Btw the example is that a custom joker or the in-game one
this works ty
That part isn't needed in your case.
And that code is for a custom one.
Owh now I get it because yesterday I changed that and the modicon acted weird 😅
@glass scaffold am I correct?
Again, sorry for disturbing you
yoy!!
😅 typing error
Yep, looks good.
Just add the text part in there for the loc_txt.
I'm always wanting to help.
how too add negative too a random joker
I haven't gotten that far yet. Someone else may know.
@tall wharf do you know how too remove a random joker?
❤️🔥 THANK YOU!
No worries.
-# That assumes my advice worked first try, which is rare as hell.
local eligible = {}
for k, v in (G.jokers.cards) do
if not v.ability.eternal then
eligible[#eligible+1] = v
end
end
local randomjoker = pseudorandom_element(eligible, pseudoseed('destroy'))
randomjoker:start_dissolve()
ill see if this works
I have not tested it yet as I am doing everything on mobile 😵💫
it works thanks
@daring fern would you happen too know how too add negative too a random joker?
local eligible = {}
for k, v in (G.jokers.cards) do
if not v.edition.negative then
eligible[#eligible+1] = v
end
end
local randomjoker = pseudorandom_element(eligible, pseudoseed('negative'))
randomjoker:set_edition({negative = true})
@glass scaffold last ping
Correct?
Looks good, but what the hell is the unlock? I haven't seen it, so I can't advise you on it.
I took it out from the games localization 💀
I'll trust in that.
unlock is what it says when it is locked.
I'll add that to my notes for next time.
2nd line attempted too call a table value
Which line?
wait
for k, v in (G.jokers.cards) do
if not v.ability.eternal then
eligible[#eligible+1] = v
end
end
first line of this
@daring fern ?
@glass scaffold 😵💫it added a new joker instead
doesnt your code say smods.joker
that would make it a joker
Replace the first line of that with for k, v in pairs(G.jokers.cards) do
one last thing, How too add eternal too a joker?
card.ability.eternal
I dont think that would work
can you provide more context
A random joker?
i tried this and it didnt work
local eligible = {}
for k, v in (G.jokers.cards) do
if not v.ability.eternal then
eligible[#eligible+1] = v
end
end
local randomjoker = pseudorandom_element(eligible, pseudoseed('negative'))
randomjoker:set_eternal(true)
thanks
youve basically coded this entire joker for me lol
thanks alot
line 50 field edition is nil
@daring fern
Change that to if not v.edition then
it works now
lets gooo
time for art
Good night chat, development {may} resume on the morrow
How can I fix it
I'm not sure what you're trying to make, if it's a consumable then it's SMODS.Consumable
If it's a deck it's SMODS.Back
am trying to replace shoot the moon joker name to look to the moon and the texture that's all
You should probably use malverk for that.
I just wanna make it into a standalone mod
Yea malverk is probably the way
If not couldn't you just use take ownership as well?
It's malverk another mod
Yes.
dont know why i would add a mod icon since this would probably never release but why does it look like that
I just want to make a standalone mod I have already done. Everything just wanna fix one thing
Can you send me the px and py of your code
What's the mod about
Perfect hope it works now
not taking risks punishes you thouugh
🤔
yeppers
Please can someone help me just replace the name and jokers texture
oh this is fun (annoying), the "shiny" shader used on gold stake specifically responds to the saturation component of the sprite, so a more desaturated sprite has barely any shine on it at all
how do I even get past this
I'm actually realizing now that I've dealt with this before when making the silver seal, because that uses the same shader I think, and I was running into this brightness issue before, which I solved by making a custom variant of the shader that's just way brighter
So the math.random() library in Lua works for Balatro modding...
It's not recommended though.
pseudorandom
Well my code uses pseudorandom for the 1 in 10, but uses math.random() for the Mult.
pseudorandom only generates between 0 and 1, so you see the issue there.
Pseudorandom uses math.random but with a seed.
math.floor(pseudorandom("aryamult")*50)/10
Nah, I'd math.random(0.1, 10)
😭😭😭😭
nah that's weaker than a Cavendish
the problem is seeded runs
since math.random ignores that
with some pretty simple math, you can convert a 0-1 range to any possible range you want
true
I'm not gonna worry too much about seeded runs
nvm i just read what it says
then the seed won't behave the same
balatro as a game is kind of built upon deterministic randomness
Pseudorandom has a function specifically to make it pick values between two numbers
As long as it's random (enough), who cares about seeds?
not the horse plinko 💀
You can feed the function a min and max value
But alright, I'll figure that math out a different time.
No need for math at all
I am in pain
is SpongeBob a critique on capitalism? yeah i think you just do what eremel said
platinum stake 😭😭😭
the trecherous blind of
take painkillers
The seed is what keeps your factors consistent when reloading, as well, which is probably more important than seeded runs
...So wait, if you reload it, it won't change the value unless I make it psuedorandom?
stake key is 'stake_silver'. localization in the Stake category is under the entry 'stake_silver'. this still doesnt work
i wonder if prefix is needed
i've tried every combination of prefixes I can think of
i haven't touched stakes yet
Mod prefix pls
i love the ratio of legendaries to normal jokers that i have
ytf_ is the mod prefix
stake_ytf_silver then
ah, stake_ is a whole prefix itself
i'm used to those being one letter for practically everything else
or, I think I tried that at one point, but forgot that class prefixes go before mod prefix
1 am moment
the final thing to figure out here is how to make this custom sticker incompatible with eternal
because. this is not good
isn't there a can_apply
oh, there's should_apply
@glass scaffold small error doesn't replace the card, instead it's adding
😭 anyway to fix it?
how too get the amount of jokers you have
I'd have to look at the code live.
But I gotta sleep soon.
what are you trying to do
#G.jokers.cards
Incorrect ;P
I think I found a different solution
Check DMs
G.GAME.joker_buffer is a thing you need to keep in mind
there's also dollar and consumeable buffers
how would you check a value isnt nil
if value then
okay this is extremely janky and annoying
using should_apply completely ignores the rate and just makes it always appear if true is returned. and also, card.ability.eternal is always returning false for no reason so I can't even check for eternal if I wanted to
why are stickers like this
thanks

Stickers are massively jank I hate them
I get concerned every time i'm glancing at base game code and see individual checks for hard-coded variables dictating each of the stickers separately
anyone know how too add a delay
what should I do for this case, then? I'm not entirely sure what's even going on with the should_apply function, bypass_roll is part of the variables going into the function, and is listed in the docs as doing something, but isn't a value you can actually return, so i'm not sure what this even does? judging by how the function behaves, i'd have to assume it's always active?
Only just saw this message, not sure how far you've gotten, but you might find this helpful.
#💻・modding-dev message
I really would recommend using Malverk, it makes things way easier, and also makes your resource changes much easier for others to use alongside other texture mods
hey im figuring out how to make a joker for the mod im working on
but id like to ask if anyone can maybe walk me through to make sure the joker functions
just got the ante_count thing working but i think im only struggling on the last thing now
SMODS.Joker {
key = "old_joker",
config = {
extra = {
chip_bonus = 35,
mult_bonus = 6,
ante_count = 0,
}
},
loc_txt = {
name = "Old Joker",
text = {
"{C:attention}+#1#{} Chips and {C:mult}+#2#{} Mult",
"per held {C:attention}Ante{} (Current: #3#)"
}
},
rarity = 1,
pos = { x = 19, y = 0 },
atlas = 'joker_atlas',
cost = 4,
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = true,
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.chip_bonus,
card.ability.extra.mult_bonus,
card.ability.extra.ante_count
}
}
end,
calculate = function(self, card, context)
if context.end_of_round and context.main_eval and not context.blueprint then
if G.GAME.blind.boss then
card.ability.extra.ante_count = card.ability.extra.ante_count + 1
return {
message = localize('Ante up!'),
colour = G.C.attention,
card = card
}
end
end
if context.joker_main then
return {
chip_bonus = card.ability.extra.chip_bonus * card.ability.extra.ante_count,
mult_bonus = card.ability.extra.mult_bonus * card.ability.extra.ante_count,
ante_count = card.ability.extra.ante_count
}
end
end
}```
Ohh and as well the message returns an error, lol
it pops up but not in the way i need it to be :p
The final return should just be chips = and mult =
Could you edit this message to wrap it with code tags?
```lua
SMODS.JOKER {
...etc
```
my apologies
i see
how do you add a delay
If you use ```lua instead of ``` it'll also do Lua syntax colouring, which is much easier to read
im having a issue where its turning jokers that are being dissolved into eternal jokers so they dont get destroyed
oh cool! ty
ok fixing it to mult and chips worked, but the chips value isnt doing the intended effect
What’s the intended effect
well i mean it isnt giving a chip bonus :p
the mult is doing what i wanted it to do which is to multiply the mult value with the ante count
Oh i didnt realize that this was also a way to count ante
Show your final return again, you must have typed something wrong
SMODS.Joker {
key = "old_joker",
config = {
extra = {
chip_bonus = 35,
mult_bonus = 6,
ante_count = 0,
}
},
loc_txt = {
name = "Old Joker",
text = {
"{C:blue}+#1#{} Chips and {C:mult}+#2#{} Mult",
"per held {C:attention}Ante{} (Current: #3#)"
}
},
rarity = 1,
pos = { x = 19, y = 0 },
atlas = 'joker_atlas',
cost = 4,
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = true,
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.chip_bonus,
card.ability.extra.mult_bonus,
card.ability.extra.ante_count
}
}
end,
calculate = function(self, card, context)
if context.end_of_round and context.main_eval and not context.blueprint then
if G.GAME.blind.boss then
card.ability.extra.ante_count = card.ability.extra.ante_count + 1
return {
message = localize('Ante up!'),
colour = G.C.attention,
card = card
}
end
end
if context.joker_main then
return {
Chips = card.ability.extra.chip_bonus * card.ability.extra.ante_count,
mult = card.ability.extra.mult_bonus * card.ability.extra.ante_count,
ante_count = card.ability.extra.ante_count
}
end
end
}```
sorry, and again ty
It is chips all lowercase.
just trying to learn and i started a few days ago so im j trying to catch a handle for it
oh.. lmfao
ty
shiny
yeup figured that one out
tysm for the help, i rlly appreciate it
where can i find all the G.GAME functions?
I couldnt find it in the documentation
What does it do?
Oh, the joker is to be gaining 6 mult and 35 chips for each held ante, it’s not complete yet but the last thing I want to do is make it so it always spawns as eternal
I’d rephrase it to something like
When you Ante up, gain…
Or just make it scale off defeating bosses
No
Incorrect
Put it in Card:set_ability
now to figure out what these 2 should do
I was replied to as well that there’s a G.GAME.Ante_reset function that I can use to count / track held ante?
Beautiful art
I don’t think it’s a function
Or maybe it’s not in G.GAME
And I still think “held Ante” is confusing
Where can I find all ‘’G.GAME’’ things?
I couldn’t find it in the steammodded documentation 🥲
Ahhh ok so I’d have to read thru source files ?
Prolly yah
Ok Ty sm for the help again, I appreciate it sm
i should prob nerf this
What does “When rerolling, 10 rolls” means?
the 1 in 4 chance happens 10 times consecutively
i.e 3 missed rolls and 7 landed = $35
Why not say “10 times” then
It looks like it’s talking about shop rerolls otherwise
if context.starting_shop == true then
--below gets a random card that isnt eternal
local eligible = {}
for k, v in pairs(G.jokers.cards) do
if not v.ability.eternal then
eligible[#eligible+1] = v
end
end
--below destroys random joker
local randomjoker = pseudorandom_element(eligible, pseudoseed('seed'))
if randomjoker then
randomjoker:start_dissolve()
end
--below gets a random card that has no edition
local eligible = {}
for k, v in pairs(G.jokers.cards) do
if not v.edition and not dissolve then
eligible[#eligible+1] = v
end
end
--below adds eternal and negative too random card
local randomjoker = pseudorandom_element(eligible, pseudoseed('negative'))
if randomjoker then
randomjoker:set_edition({negative = true})
randomjoker:set_eternal(true)
end
end
end ```
any idea how too stop this from giving eternal and negative too the joker its deleting
i guess
Don't override the original randomjoker, instead make the 2nd one have a different variable name and then compare if the 2nd random joker is not the same as the first one.
Ill implement that thanks
How could one auto buy something from the shop?
I think It would be better too remove destroyed joker from the eligible list,
Or that too.
Also how would one auto cash out?
rarity = 4,
pos = {x = 0, y=0},
cost = 8,
unlocked = true,
discovered = true,
calculate = function(self,card,context)
if context.starting_shop == true then
--below gets a random card that isnt eternal
local eligible = {}
for k, v in pairs(G.jokers.cards) do
if not v.ability.eternal then
eligible[#eligible+1] = v
end
end
--below destroys random joker
local randomjoker = pseudorandom_element(eligible, pseudoseed('seed'))
if randomjoker then
randomjoker:start_dissolve()
end
--below gets a random card that has no editio
for k, v in pairs(G.jokers.cards) do
if not v.edition and v ~= randomjoker then
eligible[#eligible+1] = v
end
end
--below adds eternal and negative too random card
local randomjoker = pseudorandom_element(eligible, pseudoseed('negative'))
if randomjoker then
randomjoker:set_edition({negative = true})
randomjoker:set_eternal(true)
end
end
end ```
@daring fern function/common_events.lua:375: attempt too index a nil value
no clue why this is crashing when It loads my joker
how to execute function after cashout/start of shop ?
context.starting_shop
how do you go about destroying a card BEFORE it scores
if I'm using context.other_joker to trigger a joker, what should I do to make it exclude itself from triggering when it triggers with context.joker_main?
context.other_joker and context.other_joker ~= card
calculate = function(self,card,context)
if G.GAME.blind:get_type() == 'Boss' and context.selling_self then
print("tiggered")
local _card = create_playing_card({
front = G.P_CARDS['A_H'],
center = G.P_CENTERS.m_glass
}, nil, false,false,nil)
_card:add_to_deck()
G.deck.config.card_limit = G.deck.config.card_limit + 1
table.insert(G.playing_cards, _card)
G.hand:emplace(_card)
_card.states.visible = nil
end
end
it creates a blank space in the hand
but not a card
try passing G.hand to the second argument instead of nil
oh also remove the states.visible line probably idk what that's doing but it's probably making it invisible
its code i got from dna
I'm sorry
hi sorry
Are you dad?
Jumprestart.
Seems hard
See if card.getting_sliced = true helps
Or is there a thing to check for that would mean the cash out animation is done?
remove the G.hand:emplace part
kinda hacky but G.FUNCS.cash_out({config={}}) works
When do I call that?
probably in a add_round_eval_row hook
idk if theres a context for the cash out screen
it works thx
I'm trying to make a joker that would behave like a food joker (has xmult that is being lowered and disappears when it reaches 1), but for some reason the game crashes with "attempt to perform arithmetic on a nil value" when I buy a card, why?
can i see the config
config is
config = { extra = { Xmult = 5, Xmult_loss = 0.5 } },
hmm idk what the problem is exactly but all those self inside the event should be card
gotchu, unfortunately it still crashes so it was not that
should this
A. Level up hand by 5
B. Add Xmult to the joker associated with it
C. do something else
D. shut up you suck
I fixed it, I had to define colour using G.C.RED and not a string 😭
oh didn't notice that lol
Thanks to everyone who suggested that I use Malverk, big thanks too @paper zealot
is it possible to rotate an UI
Is there a way to always calculate even at the very start with zero jokers?
Hello, who is very good at making mods. Write in PM pls
it should have a .T.r parameter to rotate it but it depends on what major it's tied to
you can hook SMODS.calculate_context
It depends on what you want to do for the best way to do it
i wonder if anyone has made a joker yet that just turns +Mult to XMult
if someone already did im just gonna do that for chips instead
XChips ,,,,,
does anyone know the add_deck() syntax for creating a card from a certain custom pool?
is it weird how the red part can still be seen despite "h" being 0?
seems to only apply to h
decided to just make it not visible when its below or equal 0 :p
low contrast cards 😭
i apologize
also i am intrigued, whats the function of the break thingy?
here :3
I went mentally bonkers tryna think of a cool unique idea and made this instead
+⁴(4•4⁴) Mult
😭
what do you want to do?
i just want to generate a card from a specific custom pool
and now to make the text sideways
The better way to play
NO
Skill issue
vision issue 😔
Should’ve gotten better eyes in the eye gacha
If you don't care about rarities then just use psedurandom_element on a list of keys and use SMODS.add_card to add that key
If you do care then make an SMODS.ObjectType and pass the set to SMODS.add_card
do i need to use it to rotate the text? since vert only seems to rotate to one side
no idea lol
You're invading my brand I don't appreciate it, Victin ❤️
why am i not in debt
i cant believe you are treating yourself that well
Good schmorning chat
hello dilly
Hello
What's up, Dill
question, isnt r for rounding a corner?
No it puts your car in reverse for rounding a corner just drive a bit slower
you know the drill
no but i know the hammer
What do you mean?
i genuinely question how this can rotate text
I think it rotates from the center no?
Hmmmmm
yeah, but how is that related to rotation
.T.r. and r are different, on a more serious note, if I recall correctly
Hello dilly!
As I said above
I think it rotates from the center no?
:3 i have no clue what that means
Put your finger on the corner of a piece of paper to hold it down then rotate it. Now do the same with your finger in the center
Which mod do I work on tonight? I was gonna go to the cinema but my chronically ill body refuses to let me leave, so I'm here with you Jimbo's. I guess I could see what I can set up for Glue
Glue?
doesa nyone know the syntax for a card destroying itself?
i have destroy_joker = G.jokers.cards[self]:start_dissolve() inside my return but its not liking it
why are you allocating it to a variable
They’re for the size
asamsalas HMMMMM
But might be reused to find the center of rotation
so dont allocate it to a var and it should work?
That won’t make it work, but it will avoid allocating it to a variable
Where is the code
Hi vic!
Hi ice!
Sorry I had typed in here and immediately done other things
#1353866504743161886 it's the thingy that's set up to increase shop size and fix joker spawn rates for when you play with so many mods that there are 400 consumables with a weight of 4
alright so uh, i will just get straight to the point with this one since i dont even know where to go with this
how do i change the rotation of label_node? im guessing i need to change .T.r, and id have known how to if it were to be through a func, but i havent tried directly changing a node through a var before
I was thinking about adding more consumeables and if that would be an issue
It is, haha. The more different types you add, the lower the spawn rate for jokers become, haha
I meant like for my mod specifically
Yeah?
I had the idea of making the spells we discussed into Consumables
did yall's brain signals sync with each other 😭
Are you asking if I’m stealing my identity?
You're confusing me, Bepis
For a frame I was gonna make my name similar to bepis by making it dilpis
But I don't like the sound of that lmfao
Dillepis?
Perchance...
in the config it's rounding but in the transform it's rotation
DepisFever the Bepster
hey guys whats going on
V’
Depis the depster
N’ answered your question Bepis
ah ty n
Now you Bepis can do what Bepis (you) wanted to do
i dont think you can change it before the object is created
will this work
why are you stealing my name
Im starting to contemplate if i should actually use this
false
Why are we doing identity theft
cause its funny
what would it do? I do like the art quite a bit
Balatro: Indetity Theft Arc
truly
im not awake enough for this
anyway i'm changing my name back because I'm getting confused haha. I think I'm gonna set up Glue to allow for making sure buffoon packs always spawn in the shop, as an option
N'_The_Dillster @N'atro/DilousSpring
and make every rarity rate a config option
this was the joke i wanted to go with
In the first shop?
Wait a fuckin second
but it seems clyde wont let me change my nickname to that, sad
i want to finish 48 jokers by today
no, every shop. In the first shop it's already a thing, iirc
Dang why are you so powerful
Yeah and I’m inquiring about making it configurable
Like some mods make the first pack spawn something from their mod
i probably wont it takes me an entire day to write descriptions
bump pls i need help 🙏
But I want to make it so there are shop slots that you can force specific genres of content to spawn in. Like saying 'the first joker slot should always be a joker' and 'the fifth should always be a tarot card'
my suspicion is that decks don't support negative money as a set up option
Development resumes today
Sounds good though should them be indexed or should they be separate CardAreas
they do
yes but i think it's in radians
also the interest config doesnt work
this is so odd, some of my planet cards can be created via a blue seal. But...one of my hands routinely crashes the game
I made a lovely mod to print out whats happening in create_card which proc's from a blue seal.
For one that works, I will see this (from my toml mod)
in create card, attempting to create card with forced key of c_Fox_Meteor
But for ones that crash the game, it's got a valu of forced key of nil
bepis my beloved
Either that or VT
Idk the difference
ahhh that does explain the "r", thanks!
wait wtf
also it might be overwritten by the major's alignment
Dilly your pfp looks awesome today, nice change
i had to check ur profile to make sure ur Victin 😭
Oh Hi @manic rune !
The R is rotation
hello everyone!
thank you :3
my goal is for Glue to be an invisible mod unless you want it not to be, so that it's inclusion in Dimserene's for example is really just a QoL thing, rather than a mod to make yours compatible with. I did consider the idea of it adding more sections to the shop
hmm, let me check again, then
It’s mostly because that might conflict with other mods trying to do the same
Ey chat
if its constantly run in func = ... then will that still be a problem?
no idea
Hello Teto
welp, here goes nothing then
Hey jimbo
god why am i delving so deep into this hole
The goal would be to not have the base game slots be the ones that get forced, unless you really want it to, so that mod conflicts are a user-error 😛
I DONT EVEN KNOW ANYTHING ABOUT UI 🥀
— Alice
no one does
What is Bepis
so true
That's why you just throw someone else ur code who is good at ui
What do you mean?
walks away
N' would immediately run if they see me
HEY
STOP THAT (person with the username of) N
bepis
BEFORE HE GETS AWAY
steals your balls and walks away nonchalantly
dandadan
Uhm
Dan da dan dan da dan dan da dan dan da dan
Edited 😇
oh, is it not because you're only setting loc_vars, which doesn't get read in at a time before config, so it never actually sets the config? I'm not seeing how this would work, per se, because my understanding is that loc_vars wouldn't ever get accessed in the set up period where config is important
puts down my controller, does a 360 and walks away
checking the config in apply shows its there
Hot take mouse and keys are way better than controller
anyways
It's a sleeve, it behaves a little special
Not even close
im ripping my skin back, thanks
THIS NEEDS A REWORK BRO
I kinda like this one, I think I'll keep it
oh, I had no clue it even worked like that. I guess I'll keep that in mind 🤔
wha
I like the effect SIS
Imo if you’re gonna make a joker make it good and worth picking
also this is how the regular sleeves work so idfk whats happening
That’s what I do 😭
You know that if you make a custom apply you have to do everything yourself right?
OH MY GOD IT WORKS
I think Jokers should have an use; but they don’t need to be consistent
Every joker can't just be good i think
I CANT BELIEVE IT ACTUALLY WORKS AND DIDNT SEND MY CREDIT CARD INFO HERE
Yeah i love the art but seriously you always have your discards and hands equal or 1 difference
Also I want it to work with Wrapped Candy
I have a joker that let's you carry over your unused hands and discards, so that would be an interesting use for red hand in synergy alone
But I forget if I actually made the timing work lol
Some jokers are made to pass the low blinds
Some are temporary power
Some are good but need setups
And some are just legendary
I also have one that lets you carry over unused hands
Ah-HA! The key must exactly match between your custom hand and planet card in order for a blue seal to work. That is what I was missing, @modern kindle
Nobody ever has original ideas
You can just call the normal class apply method in your apply method, check the example docs
OH THATS WHAT THATS FOR
If the red hand gave you discards and hands together so if you ran out of discards you can use your hands to discard that will be so much better
god im dense
Ah yea i thought I said that, apologies
But either way we got you working 😎
It was inspired by a TWEWJ Joker that allows carrying over discards
What is twewj
I swear victin is sometimes stewpid
No worries! You probably did, my brain is just stuffed full of 90's cartoon theme songs and candy wrappers
me thinking i have an original joker idea 😄 me seeing everybody else basically make alien abduction jokers 😦
As long as some are kitkats you are free in my books
If Golden Joker gave me $20 it would also be better ;P
If Mr bones insta won the deck for me it'd be better
Golden joker is common
He’s supposed to be ass
Yea i made this cool dlc to my mod called balatro goes kino, you should check it out
I think Mr Bones should have a fee to carry it. For instance, it should halve the interest you earn
Jimbo i’m gonna sue you for making the obelisk a thing
me and @heady siren 😭
This is also common
Who in their right mind thought obelisk and campfire are good jokers
The World Ends with Jimbo
The art looks like a legendary/rare
Oh, this is also a good reminder for me to put the stuff you pointed out yesterday on my QA list, and see if it's causing problems and how to fix those
Campfire is good
i will argue that campfire is not as bad as you think
Worse after the nerf
you can buy consumables and sell them
I've made like 2 other savior jokers
I have a golden fiddle which takes money to save you with a chance to destroy itself
And a sold soul which will destroy all jokers and replace them with 2 rares
I didn’t make the Obelisk, I found it on the moon
Yeah if you have planet merchant or tarot
But it’s not
why 😭
Victin is awesome
I’d say the only good use for campfire is if you have perkeo
true ,,,,
Aiko I'm about to get rid of you permanently
Says larry before i stole his balls
Wish granted (retroactively)
i really like campfire as a concept, though I don't love jokers that are optimally used by being in the shop for a good while, haha
Huh? :?
So we all agree obelisk is bad
I can tell you exactly how I learned to code. Got hired for a job that I thought was going to be just scripting. Turns out everyone else knew c#
I then spent an entire month listening to chillHop essentials on repeat, slamming my head against the wall.
At the end of the month, my skull was shaped differently but I could not code
It's weird
I like setup but then long setup kinda sucks
I don’t use it so I can’t say if it’s good or bad
If you don’t use it that means its bad
Case closed
Inspiring
My secret to coding is screaming at the screen for about 9 hours until I stop crashing
Only to notice the code then doesn't execute at all
Then scream for 5 more hours
Then it works
Hit the road jack is also a bad one unless you build your deck around jacks
anyway time to start coding
At the Scream? From the movie?
With my new skull shape, I now do not care
The hit scream scream who screaming the scream
DAE just look at their commits wondering how it now works?
im trying to add double click
See I do this silly thing where I kinda push fuckin everything
There are times I'll push just a couple of line changes and I feel like I could just wait until i have alot to push
When i code doesn’t work i copy it to chat gpt and suddenly i have 2 more errors now
i vibe code by just telling N what I wanna do and then he links me code I can steal
GOTTA LOVE AI
i have this really bad habit of making code, thinking it'll work first try, then getting stopped by a single syntax error and throwing myself to a nearby trash can i fucking hate programming
RAHHHHHHHHHHHHHHHHH IT WORKS
Why is everyone talking about vibe coding now
RAAAAHHHH
BEPIS
I just go to bepis and say 'this isn't working' and then bepis shoots me 8 times in the chest and then it works
That’s how 10X engineers work
Nice! Can they fill both ways too?
it doesnt even do the funny falling animation? 0/10
Does the break bar fill up?
I'm so excited to steal Bepis' progress bar code and put it on Lightning McQueen, you don't know how bad I need it, man
Im also going to steal it
He made a pr so you can see it on smods requests
I’m also going to steal (your savings)
I am a 0.1 X engineer
Your lungs, hand em over
i can't believe jimbo would do this ,,,,,
I’m also going to steal your balls
I am a -1X engineer
He would do it actually and then be happy about it
me when you play your most played hand and I'm the Ox
The Ox engineer
...oh yeah, gotta account for when you want to fill from bottom to top instead
shouldnt be THAT hard now that i figured how to rotate uis easily though, one sec
-# duh
I’m engineering my limits
I am considering setting Love2D up and just messing around with UI so I can get a better understanding of the engine's UI capabilities. I have some ideas that aren't great to implement in balatro's current ui system, after all
Make a % tho
(like doing anything that'd require a sprite mask)
I had one coworker who took two months of vacation, then came back and said he was getting caught up on training and watching meeting recordings.
Then after doing that for two weeks he announced he was quitting
I would have thought bottom to top would be the default 🤣
Does the cards become disabled when the break bar fills up ? Or what
I don’t think I’ve ever seen a progress bar fill from top to bottom
well, ui seems to like going from top to bottom instead :p
The break bar measures how broken your arm is
At 100% your arm is ground to a fine dust and you lose 1 level
how do i tell balatro to render this deck at the correct width even tho its wider
I can’t tell if you’re messing with me or being serious
Try Superliminal maybe
the break bar illustrates how long until you can take a break from balatro
If I understood UI a bit better I could also probably make my indicators a more cohesive implementation, and maybe make that a pr for other people to use
At some point I want to use your quest stuff but it's so daunting
argh, where the heck do these values come from? The key of my hand in G.GAME.hands is some odd value I can't find in my code anywhere
Does it work if you hand is lv1
isnt it modprefix_key
functionality later 😭
No
It should be included in the description then
I wonder if you can do double clicks using events
The quest stuff is hard to set up in a way that's friendly for people that didn't write it, I'm finding, haha. It also makes files huge, currently, but maybe I should allow you to move quest checking out of a joker's functionality. The legendary jokers in Kino are huge files because of them, haha
It is
“Do A to do B”
If you can’t do A you don’t get B
Id like to link quests to achievements and rewards ideally
Because i think unlocking stuff in game due to them would be cool, and then also granting a reward
copies your balls
Oh, I do think that's basically already the current unlock and achievement system, no?
You have a large ball obsession this is like the 4th ball mentukn I've seen so far today
what does mentukn mean
I don't think for achievements I've gotten a direct run reward for it
Uhh i have a collection
Men tuk @red flower
Just less procedural, but the boon of the quest system in Kino really is just the info_queue and procedural generation of quests (though I'm making that less procedural to make myself less confused when I'm trying to read the code)
everyone should
VBCT vibes based card text
Best kind of card text
Yea ideally i want to set up quests that lead to rewards directly
Ie beginner quests can give money, temp mult, etc
Later on a reward spawns a joker, redeems a voucher, etc
That’s how Marvel Snap works
Legends of Runeterra's 'I CANNOT BE STOPPED' was a nightmare in that community when it was revealed, haha
Skill issue
Hmm, I think it could work for that. I'm considering also adding a separate UI in the vein of DebugPlus, that shows all currently relevant quests (and in this case the jokers that are creating them, but it'd also allow me to make a deck that gives you quests). In that case, quests could be more generally useful
i just realized i need to learn how to make ui code to display jokers for a joker
just seeing the samples for it is giving me average minified json file vibes
Can't you add a ref to any other Joker using [info_queue]
no it's more like a list of jokers
It'd be nice yea, even having a quest button which shows all active quests would be nice to have
I just want a way to make things more useful
It could even be neat to increase the spawn chances of a card by temporarily changing its rarity for x rounds until it returns to its original
like you can actually see the jokers that could be picked
the main idea is that the joker picks an effect from jokers you have already sold
I don't think that'd be too difficult, no? It'd be an info_queue set up like the way the example hands do it, and you just pass the joker keys along to the fake cards thing
Ah, well changing a joker's actual rarity (though in my case it keeps it's displayed rarity) is set up very badly but functional in Kino 😛
you can steal from my press d to see related thing if you want
is that loss
feel free to let me know what ideas you have for quest mechanics. I'm not saying I'll implement them, but I'd want to be able to set up in a way where you setting up a separate quest system for your mod would be able to just work together, without bumping into each other
i thought about just rotating the bar by 180 degrees, so that it fills from the other side
but it doesnt seem plausible now
At this point why don't i have you just implement a nice quest system for me this way lucky number slevin is equalled out 😛
(This is totally a fair trade)
I can do that yea, I'll let you know when I ponder on it for a bit
so the question remains: how do i move the red bar
well not to harsh the vibes but that code broke so badly I needed to rewrite it 😛 (SMODS added a context that made it into an infinite loop)
wait, is rotating it not how you set up the upwards bar?
i tremble at smods updates that may break what i had working perfectly previous versions
however, never forget when blind calc released and made me think my shit was horribly broke until i saw it broke vanilla stuff too 🙃
nope, swapped w and h
:p
i didnt figure out how to rotate ui so that was the easiest way
wait wait wait
oooh, haha. Does love2d work like unity in which you can just sneakily invert things by setting negative widths and heights?
OH I THINK I FIGURED OUT
change align "cl" to "cr", then rotate by 180 degrees
PLEASE WORK
i once again realized the ui rotates from the center of itself, that doesnt matter, what am i even thinking
I do wonder what the best way to go about making systems that others can adapt that don't cause conflict, without making it an SMODS pr. Because that quest system is probably something that someone else besides us would maybe use some day, and it'd be a shame to have them reinvent the wheel. But I don't love the idea of just adding requisite mods
i think writing 50 of these should be considered torture on the level of a war crime
you could do what myst let me do with blind expander and just let them include it in their mod with the requirement of having it listed as a provision
I’ve not looked at the code but I’m assuming it’s a node aligned to the top they grows in height so simulate filling?
just make it extra separate fileset to include
mhm
oh wait
can i just
I mean that works, but I'm not sure if it'd create conflicts if we both make changes to implementations, for example
make it negative height instead
Just align it to the bottom instead, no?
simply explode anyone who does similar changes
realistically if someone is adding something they should be familiar with its implementation so i wouldnt worry about it on your end
I think Paperback might have or want to have a quest system
they can just change their stuff to work with your provision
i was thinking that, but i was afraid it would go like this
BUT i think i can just make the height become negative for the one below instead
so it grows to the opposite direction
god im dumb, i shouldve thought of that
I’m pretty sure the alignment is all you need
oh
It should grow the opposite way because it’s contained within the outer node
icic, thats convenient then, i overthought it too much i suppose
Thinking about adding spells and wondering if this would be better than holding ALT to see a bunch of text boxes
yeah, but if two mods implement basically the same features, I'm suspecting that that might lead into some accidental issues.
but I'm not sure about the details of that, because the only times I've used code directly from other mods, it got turned into an inevitable SMODS pr that I didn't have to worry about anymore, haha
simply create a widely used smods dlc
taliceman
...why did i even overthink it
UI is fun
oh this reminds me that the related UI also has the bug where it sometimes adds the cards to used_jokers lol ill fix that rn
ahhh, now I am getting closer to the root of the problem
Somehow, my consumable and my hand type didn't link to each other
isnt it just writing the hand type in the config
hmm, I should look into how the game handles the info from the config. I'm not sure if I can procedurally generate config options based on the mods you're currently running
ahhhh ha!!!
my config is weird for one of my planet cards
Beautiful
Damned extra curly braces making me type them and waste two hours chasing them down
welp, i think this should be all
how would i get a joker to dissolve AFTER a hand is fully scored, currently my joker just dies when jokers start to score and it looks like no joker is triggering the +mult they give
yessssss. All of my planet cards work now!
Eremel, does a mod's config mainly get handled in SMODS loader.lua? I'm trying to figure out how it works to see what the limits are, but config's a very common term that makes the search all function a bit less useful in tracking down where mod configs are all handled, haha
SMODS.load_mod_config
ah, you gotta manually do that since all it does is providing a tool to easily add progress bars, like create_slider :3
Could "mark" the Joker... and check in context.after for said mark.
oh damn I wasn't expecting that to be in ui. That's set up a lot more concise than I was expecting it to be
mhm
Sounds good, just had a quick look over the code and it can definitely be condensed down to have a lot less repeated code, but seems to have everything it should do
this is how i did so in my case
the horrendous indentation can be blamed on me writing that in a comment block ❤️
would that look smth like this?
kill a joker AFTER a hand fully scores
Goku ?
mm
thats not how you do it then
in context.joker_main, mark the joker, like
Street Fighter reference!
(the joker you want to target).ability["mark"] = true
then in context.after, go through G.jokers.cards and check for what joker has that mark
also, i think you should put that start_dissolve() stuff in an event
since from my experience, sometimes it doesnt actually destroy the joker for some reason when its outside an event
so the marking would look smth like G.jokers.cards[-self-].ability.remove = true?
What’s the condition for marking a card?
doesnt necessarily need to be "remove", but yes
and [-self-] should always be a number if you are choosing a specific order
after the joker has scored once
yeah my code already searches for what index the card is at so my actual code looks something like:
G.jokers.cards[D].ability.remove = true
So the first time this joker scores it destroys a different one?
Or every time this joker scores?
this joker has a chance to be added every round from another joker, then after this joker scores once, it dies
if that makes sense
It removes itself, correct?
yeah
Get rid of all the marking stuff and just put card:start_dissolve() inside the context.after check
if i do that this happens:
so it does function as its supposed to but it doesnt look like how i want it to
as it looks like mult is scoring from nothing
Oh put it in an event
...can pixel_size not exceed the default values if I have something using an atlas with larger height? (i.e. 104 pixels vs 95)
why are there 5 of him 😭
i am very new, what would that look like?
here, check this out
oh you mean why are there 5 young suguru getos? he generates 1 of 3 cursed spirits from his collection, i wanted to make sure i get atleast 1 rainbow dragon
but it should look something like this
G.E_MANAGER:add_event(Event({
trigger = 'before',
delay = 0.1,
func = function()
card:start_dissolve()
return true
end
}))
change trigger and delay until you get the timing you like
okay tysm!
is there a way to manipulate pools easily? i'm trying to make a voucher that requires blank and antimatter, and when purchased, brings the blank and antimatter vouchers back into the pool of purchasable vouchers
would that go in the context.joker_main ?
ahh okay ty
got tired of writing descriptions
@manic rune okay so with that event, the joker will start to dissolve forever
oh yeah
you need to return true in it
there, forgot to mention
:3
if u dont return true then it will keep running
ahh, so will events always keep running until they return true?
From Street Fighter?
now it works tysm!!
np :p
Do I have to modify the drawing functions in order for the enhancement to be drawn properly instead of squished?
SMODS.Enhancement{
...
pixel_size = { w = 71, h = 104 },
...
}
Yep!
Always been one of my favorite moves in gaming! When I ran into enemies who could perform it in Breath of Fire, I was shocked as a kid
The idea is this
My mod is animal themed, so I have a Bear named A kuma
He gives more mult per played tens in your hand. So then I added a new hand, if you play 4 or more 10's, it will be this new hand 'Shun Goku Satsu'
And then....I added a hidden joker who unlocks when you play a five of a kind 10's, Shin A Kuma, who retriggers your played 10's based on how many levels you've put into the unlocked hand
hiya, i have a deck ability requiring cards to be drawn face-down — how would i do that?
for i = 1, #G.hand.cards do
if G.hand.cards[i].facing == 'front' then
G.hand.cards[i]:flip()
end
end
thanks :D
oh this needs to happen when a card is drawn
what's the context for drawing a card?
you can use the SMODS-added Blind context that makes cards be drawn face-down
I don't think this works
but this is a deck
i mean, this would work if my deck's ability happened mid-blind
context.stay_flipped
It wouldn't work because it would flip the cards after they're drawn
Which means you could look at your deck
to see what you drew
i repeat, mid-blind :)
And I repeat you could look at your deck to see what you drew
and i repeat, yeah :)
that's what i said :)
or meant, anyway
grand, i'll give that a go
thanks ^^
The game usually prevents you from knowing what you drew
By hiding the numbers
But only if cards are flipped while they're drawn AFAIK
is there a way to manipulate pools easily? i'm trying to make a voucher that requires blank and antimatter, and when purchased, brings the blank and antimatter vouchers back into the pool of purchasable vouchers
this didn't work — the cards were drawn face-up, then the game crashed
okay so my game crashes when i use this consumable with a legendary in my hand, can anyone see any errors?
you can use SMODS.add_card
would that fix the error?
attempting to make a consumable only useable when youve sold a joker during the run and have an open joker slot: does anyone know why this code doesn't work for that? it seems to always be returning false
i cant find jokers_sold
What's the most effective way to add joker support to make a playing card be considered multiple ranks simultaneously?
I'm not really certain how to effectively address comparisons to the get_id() function in vanilla that are hardcoded
There isn’t
I would have to make an updated function and patch every single vanilla joker I'm guessing
Yikes
that's weird, it might be something introduced by the mod i adapted this code from
probably
But what if... I were to make a PR for SMODS and disguise it as my own cooking?
If you can figure out calculating straights go for it
Still not in love with how extensive that is, yeah
