#💻・modding-dev
1 messages · Page 415 of 1
put the message in the table with the remove
ok
how do i activate debug menu to generate a joker i want to test?
help. pls.
show the full crash screen
worked but not entirely
show code
well i got the crash log. that work?
when the joker is triggered, it gives this error
you've just completely changed the code?
what are you trying to make?
Booster Pack
oh I guess boosters don't get the fake card value, use this instead card and card.ability.choose or self.config.choose
so i tried lowering chances for first half of code to see if oops effect it
so lowered to 1/8 chance of trigger
then added 4 oopses
that worked
but the 2nd half isnt working
it doesnt kill cards
Put it at Line 188-189?
yes, you've completely changed the check I gave you. you also need to move the first pseudorandom check underneath the context check, otherwise you're going to have really weird seed effects, I'd also recommend changing the string you're giving it to something related to your seal
I dunno
yep my bad, now its working
are you sure it's this booster that's crashing?
so, how do i check last seal triggered?
I'm almost certain, I have 5 Booster Jokers to even find the thing to test
And now it says 1 of nil instead of 1 of 3 in the description
was the description fine before?
Yes
On opening
any ideas?
you need a create_card function
i wanna make a seal that checks last triggered seal and copies its effects
You can't.
how do I make a create_card function for the boosters rather than Jokers
create_card = function(self, card)
-- Example
-- return {set = "Joker", area = G.pack_cards, skip_materialize = true, soulable = true, key_append = "buf"}
end,
this is the example function
you just need to change it to what you want to be in the pack
https://github.com/Steamodded/smods/wiki/SMODS.Booster#api-methods
look here for a little bit more information
It's not stored anywhere.
i can store it?? right??
what does key_append do here?
it affects the random seed
ah ok
and if I have a pool of jokers set before, how do I point the function to it?
Is there a good way to double all the values of a consumable
I tried doing something like this based off of Cryptid but it doesn't do anything
calculate = function(self, card, context)
if context.card_added and context.card.ability.consumeable then
for key, entry in pairs(card.ability.consumeable) do
if type(entry) == "number" then
card.ability.consumeable[key] = 2 * entry
elseif type(entry) == "table" then
for subkey, subval in pairs(entry) do
if type(subval) == "number" then
entry[subkey] = 2 * subval
end
end
end
end
end
end
the table you return is passed to SMODS.create_card
or you can create the card yourself and return that
like if i can store it, its possible?
its one of my main seals in mod
it's not the easiest thing to do, but it is possible
Ok, so good news: The description is fixed and no more crashes.
Small issue: I'm getting ALL Jokers, not just those in the pool.
that's because you're telling it to create a card from the pool of all jokers
how do fix?
https://github.com/Steamodded/smods/wiki/Utility#mod-facing-utilities
look at SMODS.create_card here, I don't remember off the top of my head how object pools work fully with it, but I'm 95% sure that you just put the set as the name of the pool
can i find an example or explaniation on how its done?
no
I'm not aware of any effects similar to that
and judging off the code you shared earlier, I'd recommend starting with something a lot simpler whilst you wrap your head around how to program in balatro
i mean, its the hardest part in the code
everything else is easy
So uhh...
your set would be something like common_arya I believe
and that wouldn't just generate 3 of the common_aryas?
I don't have any of those
...should I?
yeah like that 👍
Also
W I D E B O I
-# obviously, I gotta fix that
Is that placeholder art?
Nope. That's the real art I hope to use.
Sadge </3, my autistic ahh brain cant handle that lol
you got any suggestions?
change the background color to balatro black
or black hole black if you really want the darkest color in the game
😁
violet vessel violet
I have a card that shouldn't appear in the shop or the collection
key = 'dwayne_egg_after',
loc_txt = {
name = 'Dwayne The Egg Johnson',
text = {
"EGG."
}
},
rarity = 1,
atlas = 'ModdedVanilla',
pos = { x = 7, y = 0 },
cost = 5,
config = { extra = { } },
calculate = function(self, card, context)
end
}```
but I have no clue how to do that lmao
(A card turns into this)
So the color of the pack itself?
Also, what are the dimensions for a Booster Pack?
exactly the same as any other card in the game
71x95
you just pad out the empty space
how do i do a global variable?
Yeah make it balatro black at darkest and make it actually the same resolution pixel art
Not a problem with your art though, i just strongly prefer mods with a vanilla-ish artstyle
Is there anything I can put in a consumables code to allow that item to appear even if you are holding a copy?
Anyone know how to fix the BG color?
-# and also the ERROR text?
can we see the whole thing?
Got it
if add this
G.LAST_TRIGGERED_SEAL = 'seal key'
in every seal code
wont this save the last triggered seal?
the error is because your loc_txt is empty
I mean if you don't want to have any mod compat, I suppose so
that's where you put the name
I've never messed with the color thing so I'd look at how other mods do itt
and if i want mod compat?
find a better way
You could still have mod compat if you patch it to have that instead of hooking it
will search more
how doth fix artifact
morning/evening :)
can you add "face = true" in an enhancement?
Bump
Probs just check it yourself
Do you have loc vars
give me some genius then...
Genius is when food jokers all of the values double
NO-
:3
I'm getting an error message of trying to index 'center' which is a nil value and I don't know where to start looking to fix it.
I don't see anything that references a center in the card that causes the crash itself so not sure why it happens
cant find where i origanally posted this so i will repost my error pls help me when you can
Look into Card_Character
i dont know what caused this tbh
my mod shows up in the mod list, but it doesnt load the content of it, what should i do?
what should i check?
Err, what the mod do?
Even tho i dont know much of lua, im learning from modding this... Bit by bit
its a mod i made which has only a joker
the joker randomize the score at the last hand played
And the result was, "the score wasnt randomized"?
and the joker doesn't show up? can i see the code?
That be some problem in the things like atlas, key, etc etc wouldnt it?
The... Uhh, "description" for the game to recognize it?
🔥
sure
main.lua
mod,json
{
"id": "cursedcartoons",
"name": "Cursed Cartoons",
"author": ["alessxndra"],
"description": "Random meme mod with rigged jokers and dumb stuff",
"version": "0.0.2",
"main_file": "main.lua",
"prefix": "cursed",
"priority": 0
}
if you have a json you should remove the header
but also this is really old syntax
please use a newer example to base your code on
how do i fix this?
booster pack not working
the keys need to be the full keys
like c_modprefix_key
also you should be specific about what's not working
this is the error
its not showing the spectrals i put in pool
showin joker
how should i do it?
Could be wrong but it might be “C_Medium” for example
yeah it's because of the keys
when i did this, the booster with full key crashed the game
what was the code and the crash
the cards?
yes
i see
also the default should be one of the cards too
no, c_key for vanilla, c_modprefix_key for modded
oh, ok
you can find the keys in the localization files
ty
^
its working but not
it shows spectrals
but cant use them and i dint get random cards from deck to ably them on
this one is copied from you @red flower
SMODS.Atlas({
key = "Booster",
path = "boosters.png",
px = 71,
py = 95
})
SMODS.Booster({
key = "monster_pack",
atlas = "Booster",
pos = { x = 0, y = 1 },
discovered = true,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.choose, card.ability.extra } }
end,
config = {
choose = 1,
extra = 2
},
cost = 4,
weight = 1,
kind = "JoyousSpring",
group_key = "k_joy_booster_group",
create_card = function(self, card)
return SMODS.create_card({
set = "JoyousSpring",
area = G.pack_cards,
})
end,
ease_background_colour = function(self)
local choices = {
G.C.JOY.NORMAL,
G.C.JOY.EFFECT
}
local color = pseudorandom_element(choices, pseudoseed("JoyousSpring"))
ease_colour(G.C.DYN_UI.MAIN, color or G.C.JOY.EFFECT)
ease_background_colour({ new_colour = color, special_colour = G.C.BLACK, contrast = 2 })
end,
})```
original code
i'll go search
the function is draw_hand =True
but where do i put it
SMODS.Booster({
key = "normal1_pack",
atlas = "Booster1",
pos = { x = 0, y = 0 },
discovered = true,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.choose, card.ability.extra } }
end,
config = {
choose = 1,
extra = 2
},
cost = 4,
weight = 1,
kind = "TheSeals",
group_key = "k_seals_booster_group",
create_card = function(self, card)
return SMODS.create_card({
set = "TheSeals",
area = G.pack_cards,
})
end,
})```
anywhere in that table
i put draw_card = true, after discovered
there is also select_card function in docs but not sure what does it do
select_cards is for when you want to save the cards instead of using them
oh then foget that
it's draw_hand
i wanna use them
@red flower the joker still doesn't show up :/
i would love to know i see that a lot
try removing the SMODS.create_card and only return the table inside it
code?
this is... the same code
dude idk atp im getting crazy over ts
remake everything using the structure from the links
didnt work
still have particles
damn
i think you need to return skip_materialize = true too
someone told me to do it and it worked 🤔
it should be card.ability.extra.dollars, and also, start a new run probably
unrelated but update smods too :3
that makes a lot of sense...
Yea, I know.
Very old version 😄
will do
thx
not that old, ive seen people modding with old calc
i have an error:
show me your SMODS.Atlas
Yay, it's fixed.
It's still showing nil, tho
your loc vars is empty
Hi, I got a question. How do you make it so a joker does not appear in shop?
in_pool = function(i forgot the args, check smods documentation)
return false
end,
Thank you
@red flower error
this?
no, i mean
inb4 , expected near forgot
would it be possible to duplicate a joker to the right of another specific joker. like blueprint but instead of just triggering the effects it creates a new copy of that card
sob
yes
straight up ignored me, i feel hurt
how would I go about knowing the identity of the card to my right
i want to store in a global variable which seal triggered last
go through G.jokers.cards, check which joker is itself and the joker to the right will be that position + 1
or check that, yeah
how do i do this ...

do you just have vanillaremade on standby N' sob
i think he has
save to G.GAME.LastTriggeredSeal
doesnt necessarily need to be "LastTriggeredSeal", it can be anything
no, i just have it in my history
that line is the only line i know
wdym by that
i do
damn
lets go step by step
wha
what code do i need to type so i read that seal is triggered
i actually have no clue how to explain further than that, but
to save:
G.GAME.LastTriggeredSeal = card.seal
to read:
if G.GAME.LastTriggeredSeal == card.seal then
print("grind yggdrasil btw")
end
thats how you save to/read from G.GAME, i really dont know what else to tell you
just this????
and i thought it would be much more complicated
^
- this should be posted in #⚙・modding-general instead
- you will probably need to manually turn off each mod to see which one is the cause
like i have a seal the copies the last triggered seal effect
is that for me?
no
oh ok
@junior imp
yeah?
^
hi, I'm trying to change a value in the extra table of a joker when a run is reloaded, but the card is the load function doesn't seem to correspond with the joker (at least not the version)
and I can't find docs for the load function
you might need to do it in an event
ohh, I see, I'll try it now
what context does blueprint use when it triggers?
updating some util functions on the wiki, any that you guys can think of that are missing? I currently have SMODS.destroy_cards, SMODS.add_voucher_to_shop & SMODS.change_voucher_limit (and booster equivalents), SMODS.change_free_rerolls, SMODS.change_play_limit, SMODS.change_discard_limit and SMODS.draw_cards
im bad at modding so that looks good to me
issues when trying to play mods > #⚙・modding-general
issues when making mods > here
then why did modding chat tell me to send the error here?
idk
i mean it's not like a rule but usually people in #⚙・modding-general are the most experienced ones at mod conflicts
ok so i will go there then no clue why they sent me here then
You know, have such a big dedication to reimplement every vanilla stuff by using SMODS is actually impressive
game crashes with this error whenever I start with that deck. The effect where the joker spawns in happens right before that though.
this is truly a vanillaremade
Seeing this impressive work makes me feel like I'm bad in modding
jokers should be a table
no youre not
I tried to make my first joker and failed with attaching sprites on top of card ((
now DrawStep is a thing it's reasonably straight forward
I tried using set_sprites
Maybe I wa unlucky this time, I'll try next time
Good opprotunity to master UI knowledge, specifically sprites, cards and decks
how do i add a custom joker to the shop rotation?
I can send you how I do this, if it's something you need
I need more like soul sprite, but more than 1, with ability to set offset
jokers should appear in the shop unless you set them as legendary
Hi, i made this code to make a joker that modifies the values of others, but i got a crash for calling a table value. Whats a way of getting it to work? lua calculate = function(self,card,context) if context.end_of_round and context.game_over == false and context.main_eval and not context.blueprint then for effect in G.jokers.cards[1].ability.extra do G.jokers.cards[1].ability.extra.effect = G.jokers.cards[1].ability.extra.effect * card.ability.extra.multiplier end end end,
you could do soul sprites in a similar way, and then just layer them
Can I change their offset in update function?
is there a way i can test if thats true?
also its a custom rarity
use the Banner mod to ban all other jokers
aight
it should still show up as long as your set the rarity properly
In short I want to make smth like solar system thing, where joker is a star, and other sprites a planets or smth spinning around joker
I'm not sure how it would interact with an update function, but basing it off the current soul drawstep would probably be a good start
i believe draw_shader has a parameter to set offsets as well
if it's a set movement, there'll be a math function you can plug into the draw_shader call
im new to modding balatro so im unsure whether or not this is correct? do i need to change the weight?
well default_weight 0 means it will never appear yeah haha
ah righto
i figured
common weight is 1 yeah?
ah it is 0.7
do you have a link to this mod?
How do i make a joker decide on destroying one random scored face card, been trying to figure it out but i have no reference to help atm
You would put all scoring face cards in a a table and get a random element from that table.
do i do this in a for loop?
Yes.
idk how it would look like code-wise
local faces = {}
for k, v in pairs(context.scoring_hand) do
if v:is_face() then
table.insert(faces, v)
end
end
local selectedface = pseudorandom_element(faces, pseudoseed('face'))
is there a context for when a joker leaves the lineup, (sold, destroyed or any of that)?
No.
but is there a way I can know if a joker is going?
You would have to make a custom context.
destroying it would work like this?
No.
I have a specific one I want to know, but its guaranteed to not be my own
I see
Improved it a little
if context.before then
local face_count = {}
for _, v in pairs(context.scoring_hand) do
if v:is_face() then
table.insert(face_count, v)
end
end
if #face_count > 0 then
pseudorandom_element(face_count, pseudoseed('exampleseed')).ability.destroyed_by_sizzziii = true
end
end
if context.destroying_card and context.destroying_card.ability.destroyed_by_sizzziii then
return {
remove = true,
-- can put a message here
}
end```
something like this should work
then no, there's not a built in way of identifying that
is there a way to make it so u cant buy a specific joker if u already have a specific other joker?
theres no good way for me to word this lawl
Implemented it
how can I get the key of the card to the right of my joker
anyone knows which mod is giving error?
talisman
talisman is giving error? how do you know? so i know how to identify in the future
attempt to compare number with table is 99% of the time a mod not interacting with talisman correctly
will remove it then ^^ ty
new one, i really have lots of mods and i want to make sure the ones that remain are ok with eachother
it's better to send these to #⚙・modding-general
i sent, they told me to come here
why do people do that lol
Idk who keeps telling people to have their modlists debugged here
it's not like a rule or anything but the people that have more experience with playing mods tend to lurk modding chat more
here is for coding
I did it because I am awesome
can context.retrigger_joker_check not retrigger discard effects? rebate and faceless are not working with my joker
don't if it should go here, but i'm following Zaino's tutorial for installing lovely and steamodded, but for some reason, the lovely folder isn't showing up in my Mods folder. Anyone run into this problem/know a good resource? thanks
help
sure holdd on
here
I think the final } next to the ) at the end of the code isn't doing anything
Code?
its literally the exact same but i removed the end )
👍
return {
{
label = 'My Label',
tab_definition_function = function()
return {
n = G.UIT.ROOT,
config = {
align = "cm",
padding = 0.3,
minw = 10,
minh = 5,
colour = G.C.BLACK,
},
nodes = {
{
n = G.UIT.C,
config = {
align = "cm",
padding = 0.2,
minw = 8,
minh = 5,
},
nodes = {
{
n = G.UIT.T,
config = {
text = "Credits:",
colour = G.C.WHITE,
scale = 0.5,
padding = {bottom = 0.4}
}
},
{
n = G.UIT.T,
config = {
text = "Main Dev and Artist: Astral, Smeared Joker Art: test",
colour = G.C.GREY,
scale = 0.35,
padding = {bottom = 0.2}
}
}
}
}
}
}
end,
}
}
end```
I'm setting it as a column but it's still horizontal?
you need to put the text as nodes of a row
oh
also I think the root is treated as a column
is there a way to dynamically only check for vanilla content, like if i want to know what % of jokers are unlocked
but only vanilla ones
or % decks unlocked
or stakes, and joker stickers, etc
help
how do you create a negative black hole?
@red flower are you free . I need a little help with an idea
depends on the idea
SMODS.add_card({key = "c_black_hole", edition = "e_negative"})
I want to add a new joker card area and a button to switch between the two card areas and hide the other one and debuff the jokers so they don’t scale , and also wants to add an ability to switch jokers from area to area kinda like joyous spring , do you have any idea
How i can implement this
(I hope my idea is clear )
is this correct?
what is the error here i am very confused
i quite literally
removed that last time
and that fixed the last issue
do i need to add it again 😭
I think the hardest part is making one area not calculate but I think that's feasible
For hiding and switching cardareas i would just copy the code from my mod honestly, then you need to patch in the area to add it to the calculation pipeline. To switch jokers between them you can just add a button to each joker to make it switch, I guess. For the part about disabling the area when it's switched out I would probably hook SMODS.get_card_areas and delete the area from the return
I do the first 3 things in my mod if you want examples
Yes please
i added it back and it crashed
wait what the hell is SMODS.get_card_areas, is that new??
switching area: https://github.com/nh6574/JoyousSpring/blob/4513d7a50361889f843ac1dc9796e1b5b8b5883c/src/extra_deck.lua#L77
adding it to calculation: https://github.com/nh6574/JoyousSpring/blob/4513d7a50361889f843ac1dc9796e1b5b8b5883c/lovely/zones.toml#L104
add buttons:
https://github.com/nh6574/JoyousSpring/blob/4513d7a50361889f843ac1dc9796e1b5b8b5883c/src/general_ui.lua#L308
moving them between areas:
https://github.com/nh6574/JoyousSpring/blob/4513d7a50361889f843ac1dc9796e1b5b8b5883c/src/summon.lua#L148
no, it's just only used internally
o
Omg thank you so much
:3
i do want to add a side deck where you can move jokers without using buttons
i will copy aiko's freedom code :3
help
i added the } at the end and it crashed
i removed the } at the end and it crashed
im bad at coding and shit loll
trying to make a booster pack of only modded jokers, but when I open it only +4 mult jokers are inside.
how to add smthing to a list?
bro. 😭
why this aint working?
the flusher variable should be in the joker's config
So I have this code snippet that's supposed to double the value of all bought consumables
calculate = function(self, card, context)
if context.card_added and context.card.ability.consumeable then
for key, entry in pairs(context.card.ability.consumeable) do
if type(entry) == "number" then
context.card.ability.consumeable[key] = 2 * entry
elseif type(entry) == "table" then
for subkey, subval in pairs(entry) do
if type(subval) == "number" then
entry[subkey] = 2 * subval
end
end
end
end
end
end
For some reason instead of upgrading the instance of the item, it upgrades the base of the item
That is to say like
For example, if I get a High Priestess, it now creates 4 planet cards, which is good -- it's what i want to have happen
But if I get another one, it now suddenly creates 8, and the next one creates 16
I don't quite understand why it's doing that when I'm modifying the card instance and not the base card
Cus every card has a reference to its center (aka its base)
So you're multiplying the values of it as well
also i wanna do it so it affects every single card, do i change the context from context.joker_main to context.individual??
Is this code correct?
what does your config extra look like
im suspecting that card.ability.extra might be wrong (depends on how you set config extra up)
but also, id probably recommend having a more unique seed for pseudorandom
wouldn't that be key and not set
unless I'm mistaken
i hate malverk
please help
oh yeah thats correct then, and yeah, what Corobo said, it should be key not set
-# very rare to see a modded joker with card.ability.extra that isnt a table actually
which part should be key? I'm new to this
Try only looping thru consumeable.ability
change set = to key =
SMODS.add_card({key = 'c_black_hole', edition = 'e_negative'})
what's causing this issue? how do i fix it? please help i have no idea
Omg thanks. Also can I ask what the difference between is?
can you show the full crash log
the set is the type of card, the key is the specific card
set refers to things like "joker", "consumeable", etc
while key refers to a specific card
you would usually use set to have an effect that creates a random joker, consumable, stuff like that
OOH Thank you
Thank you
One of your texture keys is wrong
i want to make like a balatro mod but i was wondering if there was any template or if i need to make one form scratch
wait never mind i found the templates
which one
Is there like a specific way of excluding that
I tried doing like
if key == "center" then
goto continue
end
But it didn't work
If you screenshot the full crash instead of a tiny part I can tell you
The deck textures are the issue here
guys when using retro deck and i skip a blind to get an uncommon joker in the shop this happens
hiya! i've got another bugged joker -u-
two bugs
the first is that Blueprinting it crashes:
and the second is, it destroys 2 cards, instead of 1
You are returning a boolean instead of a table.
[it destroys a random card held in hand, if the hand is a Straight]
You need to do return {remove = true}
right
Also you should be doing context.scoring_name == "Straight"
trying
ah oops, sorry, i meant contains
if it contains a straight, not necessarily that it is
Then it would be next(context.poker_hands['Straight'])
cheers ^^ seems to be working now
mm, wait, it's still destroying 2 cards, for some reason
Your loop is misplaced
You mark every card that’s not marked
When using take_ownership to change the localization of a vanilla item, is it preferred to put the new loc text in a localiation file, or use loc_txt in the take_ownership function itself?
hey i am really new to this, and i am trying to learn more about creating custom jokers, is there a context for different suit cards beings scored, so i guess like the arrowhead joker, if its spade it adds chips, i want to make something simple, like if its spades it adds mult instead
I’m pretty sure if you use a loc file you don’t need to take ownership
Point being that I'm taking ownership anyway, because I also need to change the loc_vars function to accommodate
So in the case of multiple mods taking ownership of the same item, is one preferred?
I'm not 100% on how SMODS manages an item being passed around between mods on the back end, and what ends up prioritized if you use a loc file
Oh oops ^^ thanks!
in what way?
how can i refer to the individual card being calculated?
context.other_card
Hi bestie!!!
How do people usually do the make their own ranks be obtainable?
I hope you're doing swimmingly today
table.insert(table, item)
ehh mostly got up, got lunch, now Im working on smth
oo
where
someone please tell me what exactly the problem is
someone said it's an issue with the deck textures but i don't know
what
the problem with them is
or if im stupid
can't be winter without win
or something like that idk
Out of curiosity N', does Vanilla Remade support scaling the highlight limit on consumeables?
A number of consumeables use min_highlighted and max_highlighted without actually being coded to support those having varied values
So rn I'm having to comb through and fix up some of them
What was lunch
hi dilly
Buffalo chicken roller bites from a gas station
There's this one guy out there who's pretty okay, he stole alot of my code for his mod called joyousspring but thats okay
uhhh they just use the vanilla config for it
Hi bepis!!
i want my balatro star rail mod back :3
I love buffalo chicken
like this
32 nickels and 3 dimes plus a milkshake from five guys
im sorry
No yeah most cards are already technically built to handle in. I'm mostly thinking of cards like Aura (which doesn't even use highlight limit) and Cryptid (which is hardcoded to only copy the first selected consumeable)
I wonder if this would be a good SMODS PR for mod support...
Or if it's too niche
does table.find()work exactly the same as table.insert()?
(i mean)
the same parameters
oh both of those are coded like vanilla
i could change it
Basically Im implementing a card that gives +1 highlight limit to all consumeables to which it aplies
most cards are simple, just change the value (enhancements, suits, Death, Hanged Man, etc)
Though they could use tailored loc text when their values are edited, which I'll also do
actually, how can i check if i have an specific key in a list?
you'd just do if list[key]
oh damn
oh damN'
Talisman, Deja Vu, Trance, and Medium also just hardcode G.hand.highlighted[1]
Ugh
Talisman my absolutely detested
Made my life so much more annoying to make shit work equally with and without it
You don't like Gold Seals dilly? 🥺
Oh I thought you meant the mod
Lmao
Oopsie
Cause trance is also a mod I think lmfao
Mfs need to stop naming things like this
But no gold seals are my goat especially on my jokers with my random seal applier
huh?
start a new run
ok
Rule of thumb is to always start a new run
always start a new run when you are testing
so true
wait, can i add joker slots with debugplus
I remember when I didn't know about it and used cheat engine to set my cash to a high amount and rerolled shop until I got it
Yes.
e
Cheat Engine to debug your mod 😭
i mean, i do use the shortcuts 3 2 1
Bro its all I could think of to set my cash high easily
And then I saw people here yap about debugplus
And my life was changed
imagine modding without debugplus though
so then how?
Although, debugplus could use a input field to give me more than 10 dollars
so true
eval G.jokers.config.card_limit = number
use the console
money add 100000
how can i open the console?
eval ease_dollars(100000000)
Buddy I'm a monkey brain let me press the button
or what N' said
or money set 1000000
/
i dont remember the debugplus commands :3
I never use commands really
Last time I used commands for a game was in Skyrim
I just added a patch to the game that does this:
damn so its that kind of keyboard (i forgot its name)
-# patch?
Pass it to my dms queen cause I'm not home to implement it
Modify code of debugplus
am i qualified to make an ui tutorial
please.
Youre qualified to be god of your country
sob
i meant such a small patch
I mean if anyone wants it
Yes
id give everyone a can of pepsi everyday
i dont want it
blocked
I'd give everyone a can of pilk everyday
didnt work i hate my life
One day I should really go through my patch file and see what I dont need anymore
I was talking to bepis and I have like 900 lines of patches
i had to go thru 6 BLINDS just to try it
I've slowly eliminated various patches
WAIT WAIT WAIT WAIT
@red flower I have a PR idea for you
yggdrasil's code is still enough to kill anyone who attempts to read it :3
yay
Nope I already read it
what is it
im sorry dilly
I love reading so I will suffice
hey i dont want to post repeat messages, but i think my message was missed, im wondering if anyone can help me
i am really new to this, and i am trying to learn more about creating custom jokers, is there a context for different suit cards beings scored, so i guess like the arrowhead joker, if its spade it adds chips, i want to make something simple, like if its spades it adds mult instead
I like reading bepis' code
He's so silly billy
what did i do wrong
check vanillaremade
yup that
I wish we had commands we could do for links like this with ease
Ie !vr for remade or !smods for the wiki
yeah
pinning in those channels is super rare
and add a text in here that says CHECK PINS
I saw you already kinda did this in Vanilla Remade, but I think SMODS could def use removing the kinda stupid code that Throwback, Joker Stencil, and Swashbuckler use for determing their mult. B/c in vanilla, they calculate their mult or xmult in UPDATE for some reason, rather than just doing the calculation when needed (on hover/during calculate). Doing so would allow me to remove one of my most personally frustrating patches 😭
if only people know to check the pins in #⚙・modding-general
Even with text and pins nobody checks those
i could but i dont think it would be accepted honestly
bump
thats the thing
I feel like I need to confirm something
Does modifying values in context.card.ability.consumeable modify them for every instance of the card
I can't find an alternative that just modifies it for one singular instance of the card
whats wrong
it's the kind of thing they probably wouldnt change because they dont want to alter vanilla functionality and other people's patches for no good reason
it is supposed to transform into another card when i destroy 7 specific cards, but when it does, it does nothing
also my hands are really cold it's hard to type
But by default isnt it a good reason when its default is poor
isnt it summer
bepis
hii
hows it going
but it works
The original reason I needed to do this is because I have a joker that retains scaling values of scaling jokers, but those three jokers (as well as all five of the handtype Xmult jokers and Ramen) all do something that sets a value immediately upon their creation, causing their ability tables to not match their center definitions. So I had to change them to have a more consistent internal definition for what's considered scaling I.E. that its important, tracked values have been changed. Since there's no reason to track and reset for example Swashbuckler when it'll just immediately change the value upon picking it up
im gud, hbu
there are two hemispheres bepis
My code works but if I posted it here I'm sure half of you would have a stroke
do i look like im smart
yeah but it's thunk
im doing good too
we are obligated to praise thunk for his code else our mods would perish
wait im dumb
imagine next patch he changes the structure
im waiting
and boom
I bet i could eat more chicken wings than thunk
this is deleting the table, right?
everything breaks
nop
Thank you LovelyThunk 🙏🏿
anyway
it removes a value from the table
thunk ports the game to UE5
how to store variables across runs
what am i doing wrong 😭
I want him to port it to unity
G.PROFILES[G.SETTINGS.profile].hi
youre goated btw
is this checking correctly?
does anyone know how I can make a deck that just makes every card have a specific seal (or a template of that I could steal :3)
yggdrasil uses that everywhere lol
ill look into this tho, maybe there's something there that could be done without changing too much
yeah i assumed so, im making a chess ELO system
for balatro
a what
:3
Profiles reminds me that later I want to make tarot cards than spawn your most used cards and least used cards
like you know how theres ratings in chess
yeah i know, but what
no
😭
i dont think you can have an index as a table
so im making a chess mod that has different chess pieces, attack patterns etc, and higher your elo, the more chance you have of seeing those
and more powerful they are
wdym what do i do then
and lower elo is the opposite
how does elo work in a single player game
What I had to do was take ownership of all the relevant items, set some values on them, and then patch out the set values in update
use table.contain or smt instead
The same way elo works against bots on lichess or chess.com
its 1 AM rn so i should probably go sleep, i have school tmr
you gain elo points from beating stakes, completing challenges, amongst other ways
gn everyone
gn bepis
gn
gn
Not allowed to sleep bepis
ahh cool cool,
higher elo point gain for harder stakes and vice versa
fun
reminds me of one of my mod ideas I was gonna make after I figure out what's wrong with this final joker for my current mod
But rest well my friend i hope you dream of large stakes
the lower your elo and higher the stake you beat, the more points you gain
your opponent is basically balatro
whats the joker
and whats the idea
i want to add a health bar
very small joker
I want to add N to my mod
jojo 👀
how to check if a list contains something then?
Bepis made that charging bar i need to implement for something somday
haya is already doing that too late
Someday
Essentially reworking the main game
Instead of antes, you would be facing opponents in a tournament
every boss blind is a Strong Contender and they would have unique mechanics
Not if I am faster
ah yes talisman
hello i'm wondering how do i add an ogv video as a uibox
There's 45 different stands in the mod :3
still not merged into smods 😦
how to be faster: N' +10 mult
Right there with you lmao
oooooooo thats pretty cool
aiko's shenanigans adds different kinds of boss blinds
Beating ante 8 would be equivalent to placing first
then postgame is moving onto higher tournaments
I could flat out explode and none of the smods crew would blink
hmm true
how would this work
like they dont take submissions?
i also want to add a health bar, but i want mine to be the undertale's
Im waiting for winter to release their mod so I can play donkey kong
Yeah you can just play donkey kong dont worry
i mean Rascal has a more general implementation
mine would just be for my yugioh effects
whats rascal
Deadass I'm probably just gonna add a menu item that allows you to play the emulator games directly
Without the play limit
Yknow like those NES Classics GBA games
Yeye
🤔 hmmmmm
I have a simple shader:
extern vec2 screen_size;
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords)
{
vec2 pixelated_coords = floor(screen_coords / pixel_size) * pixel_size;
vec2 tex_coords = pixelated_coords / screen_size;
return Texel(texture, tex_coords) * color;
}```
but it keeps saying "Shader uniform 'mouse_screen_pos' does not exist?
ren's rpg style mod, i dont think its out yet
Me playing Mega Man 3 with my favorite emulator, my own Balatro mod
ah sick
was having this issue again but im bringing it up again here, what's wrong here?
Add cheat support and shader support and filter support and audio support and controller support and other support
me booting up balatro to play wordle, solitaire and mega man 3
One of my most peak purchases was a raphnet adapter
Using my n64 controllers on emulators is so peak
I bought like 4 of them just in case cause they always sell out
looks fine to me, is it maybe a talisman animation skip issue?
my most peak purchase is the MiSTer
Da hwat
MiSTer (also known as MiSTer FPGA) is an open-source project that aims to recreate various classic computers, game consoles and arcade machines, using modern FPGA-based hardware. It allows software and video game images to run as they would on original hardware, using peripherals such as mice, keyboards, joysticks and other game controllers.
it's so good
Oooo
bump
Is that your entire file
What is the issue?
the message doesn't show up
Is it for an edition?
Does mod increase in the card
everything works as intended except the message
return didn't work either
Then it's likely that code is not being executed
how is that possible? i've tried so many different variations of this
it's as simple as it can be
is that a joker
yeah
i assume your comparison with random being equal to 1 is always false
If you uncomment that print statement you have, does it actually print
yes
do other messages work?
strange
you know you can nest if statements right 😭
i think it looks better in vscode
yeah it looks fine when downloaded
yeah it looks scuffed in disc
I think this is the ideal indentation
i have no clue btw
😭 😭 😭
trying to make a deck that sets every card to a certain seal, but this ends up happening beforehand
why is everything wrapped in to_big
try :set_seal("key", true, true)
works thanks
Persona :3
persona
are there any rules of thumb for priority when doing lovely patching?
what code would i add to the last if statement to destroy all cards played, also I would like to make sure this works as I imagine, destroying cards only on full house not flush house.
change context.before to context.destroying_card
hii, does anyone know how i could get a list of every joker key
is that all? nothing goes in the then?
thank you so much!
i tried stealing the idol code from vanilla rmeade but it doenst work for some reaosn
can someone please help, I am new to Lua and even with the .joker github page I am confused, what are the requirements for jokers code wise, this is what I currently have and I don't know what is required besides the text explaining what the joker does
for the most part but you might also want to add blueprint_compat = true,
or false depending on if its compatible
SMODS.Joker {
key = "idol",
unlocked = false,
blueprint_compat = true,
rarity = 2,
cost = 6,
pos = { x = 6, y = 7 },
config = { extra = { xmult = 2 } },
loc_vars = function(self, info_queue, card)
local idol_card = G.GAME.current_round.vremade_idol_card or { rank = 'Ace', suit = 'Spades' }
return { vars = { card.ability.extra.xmult, localize(idol_card.rank, 'ranks'), localize(idol_card.suit, 'suits_plural'), colours = { G.C.SUITS[idol_card.suit] } } }
end,
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play and
context.other_card:get_id() == G.GAME.current_round.vremade_idol_card.id and
context.other_card:is_suit(G.GAME.current_round.vremade_idol_card.suit) then
return {
xmult = card.ability.extra.xmult
}
end
end,
locked_loc_vars = function(self, info_queue, card)
return { vars = { number_format(1000000) } }
end,
check_for_unlock = function(self, args) -- equivalent to `unlock_condition = { type = 'chip_score', chips = 1000000 }`
return args.type == 'chip_score' and args.chips >= 1000000 -- See note about Talisman at the bottom
end
}
G.GAME.current_round.vremade_idol_card = { rank = 'Ace', suit = 'Spades' }
local valid_idol_cards = {}
for _, playing_card in ipairs(G.playing_cards) do
if not SMODS.has_no_suit(playing_card) and not SMODS.has_no_rank(playing_card) then
valid_idol_cards[#valid_idol_cards + 1] = playing_card
end
end
local idol_card = pseudorandom_element(valid_idol_cards, pseudoseed('idol' .. G.GAME.round_resets.ante))
if idol_card then
G.GAME.current_round.vremade_idol_card.rank = idol_card.base.value
G.GAME.current_round.vremade_idol_card.suit = idol_card.base.suit
G.GAME.current_round.vremade_idol_card.id = idol_card.base.id
end
end
vanilla remade's idol code is broken
Broken in what way
it crashes whenever its shows up in a run
"attempt to index field vremade_idol_card (a nil value)
where are you calling reset_vremade_idol_card
oh my god im stupid sorry
I am struggling to correctly make UI elements in-game, would someone be able to sit down with me to fledge it out?
not me, but I can help if you have a specific question
Does modding allow you to double the base value of a playing card through a joker or no?
like double the amount of chips you get is doubled on a card
hitchhiker may have the code for it somewhere
also im sorry for freaking out here as of recently
it was like 12 at night and i didnt get much sleep
how would i prevent a card from being face down
hook card:flip
Can I dm? This might get long 😅
I don't wanna flood the channel
no sorry
i mean the goal is that the card is never facing == 'back' or however thats to be written
im just gonna search through the message history to find where you actually went in depth on that then
since we already joked about it
yeahhhhh
Bump
The audio emulation sucks ass unfortunately and it handles slowdown even worse than the regular hardware I'd think. I can barely have 3 enemies onscreen at once before it starts to lag
Regardless, that's not particularly a worry
What's more worrying is that there's some late-nes hardware things that prevents Dragon's Lair from booting. Oh boy
Try removing .consumeable
this isnt for a joker i should say
Oki
lmao
all cards use card:flip
i know im referring to the SMODS.get_card_areas('jokers') in the code you shared
That seemed to do it 
That makes every joker in my mod complete
Wait
No nvm i spoke too soon
dont copy that code, its very specific to my mod
i was just showing you what i do
No nvm twice? Apparently incantation breaks my mod
Without incantation it works perfectly fine
Which kinda sucks but oh well
love.event.quit()
There is one final issue and then the mod is 100% complete other than art
One of my stickers has the following code in it
calculate = function(self, card, context)
if context.end_of_round and not context.repetition then
SMODS.destroy_cards(card)
end
end
How would I go about making this apply even when the card isn't in hand
im just gonna try smth nonconventional and see if it works
i can run for without needing local right?
is this for the flip thing?
yes
it's literally this
local card_flip_ref = Card.flip
function Card:flip()
if not check_for_your_card(self) then
card_flip_ref(self)
end
end
so if it's in the deck/discard?
yeah
oh yeah btw i made the poker rules card into a joker
frtom hometuck
SMODS.current_mod.optional_features = function()
return {
cardareas = {
discard = true,
deck = true
}
}
end
put this in your mod somewhere
neat
thanks :3
what is check_for_your_card(self) here
a function that checks if self is your card type (that you need to make yourself)
the only caveat is if it is a playing card you might run into problems when it's flipped to be in deck or for the tarot animations
Guys, I'm creating a joker that if it's on the left, all effects apply to chips. Where can I find the joker position functions in the game code? I can't find them or I don't understand.
What are you trying to do
Iterate over the Jokers to find it
maybe something like if G.jokers.cards[1] == card then?
gonna massively reword it here because i had this issue the first time i went through this
i have a sticker and i want it to prevent cards from being drawn face-down
actually no thats better i didnt read the whole thing
I am very happy I'm progressing in my skills to the point I actually have the ability to answer questions instead of ask them for once
oh, you can use context.stay_flipped for that
I’d say to make the Sticker interact with the context.stay_flipped but I’m not sure it would work
But you could patch there and add a check
Or maybe hook
i dont need context.stay_flipped
They didn’t say what the Joker would be to the left of
ok sorry for answering
Why not
true
context.hand_drawn exists
That’s too late
The card would be registered as drawn face-down AFAIK
So it wouldn’t update the UI correctly
is there anyway I can change "if jokerExists" to something that checks if you're on a specific deck?
and i cant just loop through hand drawn to see what cards with the sticker are face-down and set them to be face-up?
Read what I said
G.GAME and G.GAME.selected_back and G.GAME.selected_back.effect.center.key == 'b_modprefix_key'?
ok, context.stay_flipped ig
what do i do there
thanks
can anyone find the documentation for "SMODS.current_mod.reset_game_globals {"
if context.stay_flipped and context.to_area == G.hand and context.other_card == card then
return { prevent_stay_flipped = true }
end
also please be nicer when people are trying to help
sorry
oh wow you werent kidding :(
im still not sure how to say which valuables are being reset
the ones you program inside it
whats the different between lets say chips and additional
can you elaborate
How can I destroy a played card?
if context.destroying_card then
-- check if context.destroying_card is the card you want to destroy
return { remove = true }
end
like lets say i want the text to say "+100 chips per tarot cards used this run", and i want the currently to have a starting base of +50 chips, ive seen different mods use chips and additional but idrk how it works
oh that's not like a code thing, it's just wording on the effects
so instead of starting the scaling on chips = 0 you would start it at chips = 50
i’m sorry but this doesn’t really help
If i wanted to destroy a specific type of card
do I just add the id check?
yes i know i was just confused how it works
ok thanks
yes
what's the part you're confused about specifically or what are you trying to accomplish?
im trying to make it so a hand, suit, and rank resets each round
anything you put in there is run each round
so for example if you have G.GAME.my_variable = pseudorandom("seed", 1, 20) and nothing else it's going to pick a new value between 1 and 20 each round
I have a simple shader that does nothing but it's saying "Shader uniform 'mouse_screen_pos' does not exist."
<@&1133519078540185692>
boomshakalaka
