#💻・modding-dev
1 messages · Page 305 of 1
at the start of the function? 
well now i'm back at my previous problem where it's not destroying the cards.
https://github.com/TheBearodactyl/insolence-balatro/blob/main/src/content/jokers/fingertips.lua
you can use this for reference if you want
it doesn't require patching but it does require a method override
Might be a stupid question, but how do I check what the rightmost played card in a hand is?
I'm assuming it's along the lines of G.play.cards[i], where i=table_len-1 or something like that, but I don't know how to get the length
i would never recommend overriding functions over patching or a hook
reverse the G.play.cards table and then get the first value
Is it #G.play.cards?
Smart
G.play.cards[#G.play.cards]
a lovely patch would overcomplicate it given how small the override is
that's all
I don't think a lovely patch is complicated and the problem is that you're overriding which can create conflicts
the problem is not how difficult it is
- with how small it is, it'd be more complicated than a hook or override
- fair enough
apparently theres both apply and in_pool, idk anymore
i wrote an iterator that goes in reverse to do this with no reallocations (https://github.com/janw4ld/balatro-typist-mod/blob/main/lib/tblutils.lua#L29)
just a tiny bit more memory efficient
like for example your code will probably break stuff with smods once they add the changing play size stuff
can be used with local _, last = next(reversed_ipairs(table)) to pluck just the last element
would i use add_to_hand for increasing xmult with number of jokers?
2 Enemy of Jimbo suits recreated
why is it so big? idk blame LocalThunk for making HD sprites for the card
I have to scale it up for suits and the ace
For context
in_pool is for modded suits, apply is for modded decks. Depending on which one you're making, that's the one you'll need to define
args.source has the source of the card's creation but you need to look at the code to check what sources are which (for example "jud" is judgement)
hmm
how do i make this include unscored cards?
Maybe or context.cardarea == 'unscored'?
why is this creating an error? card.lua:262: attempt to index local 'center'
is it unscored or G.unscored
Hey guys, how do I fix this logic error? SMODS.Joker{ key = 'foxtrot', loc_txt = { name = 'F', text = { "Gains {C:mult}+#2#{} mult for played {C:attention}4's or 5's{}.", "{C:inactive}(Currently {C:mult}+#1#{C:inactive} mult)" } }, atlas = "Jokers", pos = {x = 5, y = 0}, config = { extra = { mult = 5, mult_gain = 2 } }, unlocked = true, discovered = true, rarity = 2, cost = 6, loc_vars = function(self, info_queue, card) return { vars = { card.ability.extra.mult, card.ability.extra.mult_gain, } } end, calculate = function(self,card,context) if context.individual and context.cardarea == G.play and (context.other_card.base.value == 4 or context.other_card.base.value == 5) then card.ability.extra.mult = card.ability.extra.mult + 2 return { message = 'Upgrade!', } end if context.joker_main and context.cardarea == G.jokers then return { mult = card.ability.extra.mult, card = card } end end }
It is 'unscored' as a string.
...that... doesn't feel right, but okay 
F doesn't add mult if you play a 4 or a 5
ok, that was right
wait so that means args is a card's info right
You should be checking get_id()
where do I put it in the code?
guys rq is rarity=1 common?
yes, rarity = 1 is common
thank you
Replace .base.value with :get_id()
question how do i use card:set_ability on a modded joker?
What are you trying to do?
have one modded joker turn into another modded joker
card:set_ability('j_modprefix_jokerkey')
modprefix is MOD_ID?
No, modprefix would be the mods prefix for example cryptid would be cry
It has no relation to the id or name.
how do i find mine?
Do you have a JSON?
no, only main.lua
Do you have a header?
bump
That would be it but I reccomend you change it to something relating to your mod instead of example.
aight
hey, so who told me that i was printing G.GAME.seeded says whether or not the run is seeded? because that isn't true? 
not G.GAME.seeded 
works like a charm (hopefully)
is the argument to SMODS.poll_enhancement correct?
It definitely does.
Have you started a run? G.GAME doesn't exist until then
another question how do i make a joker do the spinny thing that cards do when they get an enchantment?
G.E_MANAGER:add_event(Event({
func = function()
play_sound("tarot1")
highlighted:juice_up(0.3, 0.5)
highlighted:flip()
return true
end,
}))
G.E_MANAGER:add_event(Event({
trigger = "after",
delay = 0.1,
func = function()
if highlighted then
highlighted:set_ability('j_modprefix_jokerkey')
end
return true
end,
}))
delay(0.5)
G.E_MANAGER:add_event(Event({
trigger = "after",
delay = 0.2,
func = function()
play_sound("tarot2")
highlighted:set_cost()
highlighted:flip()
return true
end,
}))
highlighted would be the joker you want to change.
woag
yea i tried printing it just now and it printed m_wild so idk why its not working
my Yurika Joker works so idk maybe try referencing it
hey, I don't know if anyone here at the moment was up 14 hours ago the last time I was in here, but there's a new development:
basically, for complicated reasons, I'm using an older version of the non-Malverk texture pack template, and for some reason my custom planet cards aren't working. all the other texture packs I've made with this same exact method (including the playing card deck, the jokers, and the stickers) are working fine; it's JUST the planet cards that aren't working.
I've been puzzling over this, but I was just playing with the mod technically enabled (although it doesn't do anything, or so I thought) when I saw a weird thing and realized that the texture pack is working totally fine, but for some reason it's just not working on the planet part of Tarots.png? like, it's working on the tarot part -- I'm using a test sprite that just has a big black splodge over most of the image, and the black splodge is showing up on the tarot cards, but not on the planet cards.
can anyone explain how this is happening? aren't they supposed to be drawing from the same PNG? I can't find any reference or mention to the planet card textures being taken at a different time or with a different ID or variable.
this is my code (yeah I know it's an old version but it works on the other packs):
--- MOD_NAME: Adanadhel Planets
--- MOD_ID: AdanadhelPlanets
--- MOD_AUTHOR: [BerryBerryDogberry]
--- MOD_DESCRIPTION: Replaces planet cards with Selena
----------------------------------------------
------------MOD CODE--------------------------
function SMODS.INIT.AdanadhelPlanets()
sendDebugMessage("Launching Adanadhel Planets! Get ready!")
local tpt_mod = SMODS.findModByID("AdanadhelPlanets")
local sprite_tarots = SMODS.Sprite:new("Tarot", tpt_mod.path, "AdanadhelTarots.png", 71, 95, "asset_atli")
sprite_tarots:register()
end
----------------------------------------------
------------MOD CODE END----------------------```
can anyone help me out with this, or at least clue me in to how the game/mod is drawing the correct PNG for the tarot cards but not for the planet cards?
no
just some parameters passed depending on where in_pool is called
by the way, Joker with art
Humbleing Bundle
When you buy a card, get a card of the same type
(Must have room)
You turned the tag into a joker ?
Oh
that screenshot is of the pause menu, during a seeded run
Ah sorry
i am showing the print of it - it very much says false despite the fact the current run is seeded
me, i looked at the code
it works, thank you
why is G.GAME.seeded showing as false when i retrieve it during a seeded run
can someone please help me make this joker actually give times 5 mult? i don't know what could be wrong here.
dunno
you're missing a few extra after the card.ability
Also it should be card.ability.extra.Xmult and not x_mult since you're fetching the values in your config.extra table (it's case-sensitive)
...oh, i was printing not
my bad, G.GAME.seeded is working
thanks
how would i go about making a joker that affects glass card shatter chances (independent of other probabilities)?
You'd need to patch or take ownership of Glass Cards
or you could hack it and give it a chance to destroy Glass separately
can anyone help with this?
basically, why are tarot card and planet card textures separate, and how do I make it not do that?
did you try defining Planet sprites using the same file
that sounds exactly like what I want to do! how do I do that
So, cards like Hiker can add permanent bonus chips to a card using the .ability.perma_bonus parameter of a playing card, but is there an equivalent parameter for adding permanent +mult bonus to a card without having to create a new enhancement effect?
It works now, thank you!
...
there's no goddamn way
oh my god. it worked.
steamodded adds such functionality https://github.com/Steamodded/smods/wiki/Perma-bonuses
Bless
I can't. believe. it was that easy.
I've been losing my mind about this for like. so long.
I was up until like 5am trying to figure out how to get this to work.
all I had to do was change the word "Tarot" to "Planet".
good god.
Happens to the best of us
hey @zealous glen do you want my first-born son or something because dear god what a fuckin save
I was laughing out loud because I misread that as you asking me if I wanted to be your first-born son
I MEAN IF YOU WANNA BE YOU CAN
I AM FOREVER IN YOUR DEBT
anyway.
thank you so much.
🙏
and now farewell
on a blind's in_pool function, ante 1, G.playing_cards hasn't loaded yet and is empty, is there any way around that?
like a true deadbeat dad
what do you need G.playing_cards for
can't you just if G.playing_cards
i did do if G.playing_cards, and its returning true but its empty
i want the blind to show up only if 10% of the deck or more has a specific category of seal, because thats the category it debuffs and if it doesnt debuff that much of the deck its kinda a pointless blind
you can instead also check if it's non-empty
i mean yeah im checking that. but i would quite like for it to be able to appear on ante 1 if the player is using like. cryptid seal deck
or any future goofy decks i myself add
You should use xmult instead of Xmult_mod.
So it should look something like this:
return {
...
xmult = card.ability.x_mult
}
Oh it was already answered lol
How do I set up vscode to start making mods? I installed the lua plugin by sumneko, what else do I need to do?
It might be good to have Balatro's source code in your project and/or the lovely dumps and/or Steamodded source code
Personally I have Balatro source code in my main project and other projects for the other folders
You should also add Steamodded's lsp definitons to lua.workspace.library.
how do I do that?
How do I make it so a joker add moneys?
Return dollars = number or do ease_dollars(number)
"Lua.workspace.library": [
"${workspaceFolder}/smods/lsp_def"
],``` is this right?
do I have to remove what SMODS.Joker{ key = 'golf', loc_txt = { name = 'G', text = { "Gains {C:mult}+#2#{} mult for played {C:attention}5's{}.", "{C:inactive}(Currently {C:mult}+#1#{C:inactive} mult)" } }, atlas = "Jokers", pos = {x = 6, y = 0}, config = { extra = { mult = 3, mult_gain = 2 } }, unlocked = true, discovered = true, rarity = 1, cost = 4, loc_vars = function(self, info_queue, card) return { vars = { card.ability.extra.mult, card.ability.extra.mult_gain, } } end, calculate = function(self,card,context) if context.individual and context.cardarea == G.play and context.other_card:get_id() == 5 then card.ability.extra.mult = card.ability.extra.mult + 2 return { message = 'Upgrade!', } end if context.joker_main and context.cardarea == G.jokers then return { mult = card.ability.extra.mult, card = card } end end }
like what do I replace?
What are you trying to do?
did this work?
I cant tell what its supposed to do
I want it so G gains $3 for when you complete a boss blind (it starts at 2)
I tried but failed to configure LSP so Idk
I used the direct path to the lsp_def directory. It should give autocomplete options when tabbing, such as keys in SMODS.Joker or SMODS.Back. Might change the color of the text. If you hover over it, it should list more info.
whats the direct path?
it depends on where your SMODS is
if you go inside SMODS you should find lsp_def
Direct path to the directory. For example:
Windows: C:\path\to\Balatro\Mods\smods\lsp_def
Unix: path/to/Balatro/Mods/smods/lsp_def
I'm not sure if there is a dynamic way of doing this, but this is what I do.
can you share your file minus your path
I had tried configuring mine but it didn't work
hm
the lsp_dir directory? Or do you mean the vscode config?
something like this?
I put this into modname.luarc.json and it didn't work (inside my mod's folder)
{
"workspace.library": [
"C:/path/to/Balatro/Mods/Steamodded/lsp_def"
],
"diagnostics.disable": [
"undefined-global",
"lowercase-global",
"need-check-nil",
"duplicate-set-field",
"inject-field",
"undefined-field"
],
"runtime.version": "LuaJIT",
"type.weakUnionCheck": true,
"type.weakNilCheck": true
}
or remove the $?
I can share it, but my paths are unix. Where whould I find this file?
I'm kinda confused
Where would you find what @_@
Is there like a SMODS method for adding that compat/incompat box like the Blueprint/Brainstorm?
what does this mean?
I think it means LSP isn't working properly
May I copy your code of that?
I'm bumfuzzled
if you just want something binary try looking at
Ouroboros
Is there a way to make it work?
"explorer.confirmDelete": false,
"workbench.colorTheme": "Catppuccin Mocha",
"workbench.iconTheme": "catppuccin-mocha",
"terminal.integrated.minimumContrastRatio": 1,
"catppuccin.accentColor": "blue",
"[lua]": {
"editor.defaultFormatter": "JohnnyMorganz.stylua"
},
"Lua.runtime.version": "LuaJIT",
"Lua.diagnostics.globals": [
"SMODS"
],
"Lua.workspace.library": [
"C:/Users/Keanu/Documents/vs/Balatro/smods/lsp_def",
],
"Lua.workspace.checkThirdParty": false,
"explorer.confirmDragAndDrop": false,
"security.workspace.trust.untrustedFiles": "open",
}```
from my mod
I couldn't make it work either
maybe try lua.workspace.library instead of workspace.library.
@daring fern I'm bumfuzzled.
This crashed with the log says ability is nil.
Do I just need to add a ability={}, or there's more steps needed to fix it?
Does anyone here have a working LSP in vscode?
do I need to restart vscode? It didn't seem work
first, 99% of the time with SMODS you want to use card
we don't know how to configure it
Maybe. Try and see if it works
Remove everything in calculate and replace it with lua if context.end_of_round and G.GAME.blind.boss then card.ability.extra.money = card.ability.extra.money + 3 return { message = 'Upgrade!', card = card, } end Make sure to define money in config extra.
can you send your config?
me and victin cant get it to work
oh i didnt do that i just open my entire mods folder :3
Godammit, I forgot about that.
Like this?
do you have a working config we can see?
Remove everything else.
In calculate.
Where did calculate go?
how do i do the remove part
I dont know where I would find the config file. Also, I'm not on Windows, so it may not work for you.
so like this?
You need to add an end
bad alignment
oh my godd it took me this long to realise in_pool is an actual property inside smods.suit and i dont have to look somewhere else to find it
im dead
where you put this in id imagine
where?
After end on the if
I just put this in the extension's settings in vscode
@zealous glen i summon thee
I didn't touch any config files outside of it
what line?
307
idk something related to in_pool probably
the function and if on 300 and 301 are sharing the same end
its the same thing, adding that to the settings menu adds it to settings.json
did you add anything else to the settings to make it work?
extension settings?
bc just adding the lsp defs doesnt work for me
does this fix the error?
alignment is still kinda yikes but i suppose it can work
I have to edit the text to...
can you press ctrl p and look for "Preferences: Open User Settings (JSON)" it should have all of your changes in text form
Now put this under it ```lua
calc_dollar_bonus = function(self, card)
local bonus = card.ability.extra.money
if bonus > 0 then return bonus end
end
In the extensions menu, the manage gear on the bottom right of the lua extension, then settings.
what line?
308 and you need to define money in config extra.
Okay but what am I supposed to do there
money = ?
The #s are censoring a number Im not sure what is used for. Again, I'm not on Windows, so I don't know if this format will work for you.
This is the only thing I have defined in my settings.json that involves lua.
I'm creating a scaling joker, I can't get the config to show in the description, though, it just shows nil, does anyone know why this might be?
what should money equal?
What you want it to start at.
okay I figured it out
the format is the same, just the file path is different, but I have the same thing and it just doesnt work for me
2
look for this in the extension's setting
Im not sure then. Thats all I have
You need loc_vars
idk it worked for me
Also I don't need mult and mult_gain and the thing I am highlighting
You still need loc_vars
Did you try restarting vscode?
also 😭
so what do I have to change there?
Remove both in vars and add card.ability.extra.money
does anyone know if Jokers have a unique ID that persists between save loads?
i know there's card.ID but that changes per save load
thank you! cant believe i missed that
yes
I don't know then. Mine just worked, so I'm not sure what the issue would be.
You need a comma on the end from calculate
?
Do you have the lua extension?
yes. it is called letterJokers.lua
No, I meant the vscode extension not the file extension.
hahaha
vscode? this is VSCodium.
should still be there iirc
this is in VSCodium.
There should still be extensions.
ok I installed it.
This one?
yeah
Are there red lines on your code now?
I don't see any.
Is your file name red?
it's white.
Does the game still crash?
The comma should be on the end
when end?
The one above calc_dollar_bonus
Can I remove the highlighted text and also I have to edit lines 277 and 278.
return { vars = {value1, value2,...}}
inside vars is what values you want to be passed onto the text
and the number you use to call the value is the number they are in the return
so value1 would be #1#, value2 would be #2# so on
Yes.
if i wanted to bring xmult to it id do return {vars = {card.ability.xmult}}
Whys there a comma at the end of line 298
how do I change the text to what I want also I removed that comma?
For the return?
i just gave you an in depth description i stg
this
I didn't see it. if you typed it.
^^^^^^^^^^^^^
Line 295 has variables you return. the #1# and #2# are variables that were returned
#1# is card.ability.extra.money
#2# is nothing.
does this work? I made it so it does 2 of them. what do I have to change?
please read what I sent
right here
Hi, I'm trying to make a joker that gives cards held in hand random seals after a certain condition, how would I go about going through each card and giving them seals?
I know it most likely involves the "set_seal" function, but it's the going through each individual card that I'm not sure of how to best do
does that work?
Hey can anyone assist me in making a custom deck?
Loop through G.hand.cards and run the function on each
Heres all of the 'conditions', usually called contexts. https://github.com/Steamodded/smods/wiki/Calculate-Functions
That makes a lot of sense, thanks!
?
Im fairly certain this is the relevant wiki for it. I have never made one so my help will be limited https://github.com/Steamodded/smods/wiki/SMODS.Back
What's the context for cards currently held in hand?
Do you mean calculating held in hand abilities?
context.cardarea == G.hand
Look at the description. #2# is the second variable defined. #1# is the first one.
No, just where to find the cards currently held in hand
Thanks!
Thats.. the code for held in hand...
also money should be {C:money}
Thanks, ill take a look before i start bothering people with questions
What I'm trying to do is this
Loop through G.hand.cards, and run set_seal on them.
And to get a random seal, use SMODS.poll_seal
for x = 1, #G.hand.cards do
local ccard = G.hand.cards[x]
ccard:set_seal(seal here)
end
replace seal here with this
No.
fym no 😭
It should be a loop using pairs
IT LITERALLY DOESNT CHANGE ANYTHING 😭
yeah its literally the same thing
i just prefer to do it like that incase I add cards to the area bcus if you do with pairs it'll be infinite
also change the other money to the correct color please it hurts my eyes 🙏
I did.
then why is it still red 😭
There must be something wrong with your context then, unless you wanted that to happen
It was before I changed it.
add and not context.individual and not context.repetition
to the thingy
if context.end_of_round and G.GAME.blind.boss then so I have to change this?
ya that
oh
I think it would be and context.cardarea == G.jokers
oh yea that may also work
Not for end_of_round
Why not?
i have this snippet for this : P
ok. I have to do something harder for H.
Err well, theres like 20 ways to implement it. The way vanilla campfire does it doesn't include hand.
gains +4 for high card played (starts at +4 mult)
Also looking at the calculate wiki page, G.jokers seems to only be given if its game_over, but who knows if thats truly the case
how do I make it so it checks for high card?
context.scoring_name has it
Does anybody know how to debuff through enhancement calculate? I have an enhancement that debuff itself if held in hand. I only need the debuff functionality
card:set_debuff(true/false)? Is that what you mean?
Ok this works just fine, thanks for the help!
Thanks. Update: Figured it out. It un-debuff itself at end of round.
But now I'd like to do something to make it look nicer, how would I go about making the cards "twirl" when getting the seal? Kinda like how the sigil or ouija cards work when changing suit/rank of the cards in hand
card:juice_up
The arguments being scale and rotation_amount
I think they mean card:flip()
And should that go before or after setting the seal?
Alright I'm still lost. I'm trying to make a few decks. Can someone help me do these things: Start with jokers/tarots/vouchers, change starting money, change ante scaling, change starting hands/discards
sorry for asking for so much
Yes this ^
huh.
What is the problem here? The bottom value automatically being 4?
Actually juice_up was what I had in mind, I just said the wrong thing lol
When I read "twirl" I expected that lol, but Something was right that Ouija uses flip
the side of the joker
Yeah I got the two things mixed up, I forgot that cards only do a little wiggle when getting a seal, not a full flip
set_seal does that automatically.
6
Odd. Im not too sure why that is.
I guess it requires parameters I didn't give it then, cause when I tested it the cards didn't move when getting the seal
misprint
I think I know why
Card:set_seal(_seal, silent, immediate). If silent is true then it wont.
Ah yes, you need to resize it
Weird, I could swear the cards didn't move when I tested without doing juice_up separetely
I don't think I can
Do you have any other mods installed?
I can't....
what iis the size of the pixel art? like, not the one i have to put in the assets put what canvas size is used to do the cards in the app ill make the arts
71x95?
yea
tyty!
71x95 with 1px transparent border
just remembered i had some placeholders saved, just had to check in there lol
How would I make seals on scored cards do things with hand cards?
Only brainstorm and extra credit
you mean scored cards activate some kind of score in hand?
like, if you play a card with a pink seal, all cards with pink seal in hand gives +4 mult for example
?
Yes.
btw where can i find the assets for the enhanced cards bbut without the lots of stuff in the enhancement.png in the balatro files?
I'm not going to judge the mod by its art but like 😭
something that would check for cards with that seal in hand and then score them as h_mult probably
?
the balatro enhancement file have all that, i wanted a image with just the enhancements itself
just to use as a base
no like, with all the enhancements but only them
rock, gold, bonus, mult, wild, lucky etc
all of the enhancements in the same image
in this image i sent there is algso the decks, the soul card thing, seals and etc
Why not remove everything else manually?
yeah just wanted to know if thhere was another file i was missing with only the enhancements first
ok then, tyty!
how can i add a box like on luchador, bp/bs, the fool to my joker description?
that's done through main_end
it's briefly mentioned in https://github.com/Steamodded/smods/wiki/Localization, but you'll need to take a look at the vanilla code or other mods to see how to actually use it
I have a card debuff when the 1 in 3 chance hits when scoring, but it still scores its editions, chips, mults, etc. How do I make it so it debuff itself AND not score any points before being scored in enhancement calcs?
ah thanks
i checked the source code and thought to look at loc_vars and similar places but i just skimmed too fast and didn't see that was there lmao
t ui s pmo sm
what do yall think of this to a fusion of bonus+bonus enhancement?
I have no clue of this is the right place for this question, but I’m trying to get Extra Credit to work and it is asking for a version of Smods that I can’t find anywhere (which is hilariously 404 beta)
I feel like I’m being pranked.
chat, how fix sound weirdness 
You have to use context.destroy_card for destroying played cards.
...eh? 
i don't understand, wouldn't that context only happen if there are cards being destroyed in the first place? i thought there was a calculate() called per joker for the destroy_card context for things like canio's effect
this doesn't make any sense to me 
You would do ```lua
if context.destroy_card and context.destroy_card.markedfordestructionorsomething then
return {remove = true}
end
No, destroy_card is for cards to be destroyed.
Thats context.remove_playing_cards
...so does context.destroy_card always happen every hand regardless of whether or not a card is destroyed? is it just a phase of calculation?
Yes.
oh so all the cards that have to be destroyed per hand HAVE to be destroyed wholesale. it can't be one at a time in sequence?
or can i like...
is this something i can do that'll do what i want? 
or am i right about all cards to be destroyed needing to be destroyed at once
No, you have to put the marked variable in the card.
Also why do you put not context.post_trigger?
because SMODS.optional_features.post_trigger is enabled and this is not something i want to trip in that circumstance
Post trigger is when a joker triggers?
yes, i believe it's when any other joker triggers
Oh hey yo
Yes, but context.post_trigger never happens at the same time with any other context.
and this will do exactly what i showed in the clip minus the sound being weird?
it doesn't?
That would be context.other_context
Can you help me somethingcom
What?
I can't for the life of me delete these mods
I have 50
I need like 7
All of them are just a ton of shit except for the 7 I want
I edit the mods folder I do anything I can
But a carbon copy is made, that is used
And it has all the mods
Did you try disabling them?
Yea
It just crashes
And nothing happens
Nothing?
What mods are not deleting?
Uhh
Let me explain
So if I rename a folder, that folders contents just go to shit right
I renamed the mods file
With the 50 mods
And deleted the mods
Then
"Mods" appears
With the 50 mods
And it's used in the game
What if you deleted lovely?
Wouldn't that fuck up the mods?
Like nopeus talisman
Yada yada
(I don't know shit sorry )
I'll try it anyway though
how do I extend the image by 11 pixels?
What image?
@daring fern this
Why did you draw it missing 11 pixels?
I cropped it but I didn't know the 11 pixels were cropped off until that time I saw it.
What editor do you use?
I did
What now
Open the game.
GIMP.
Where there 0 mods?
i need it to run AMAZING
I can't help you there
There was the 13 pages, I couldn't disable them either
Lovely didn't reappear
can I ask chatgpt to extended it?
Mods don't run without lovely.
No.
This is so fucking weird
I wouldn't
Just extend your canvas
11 pixels
Just take the main image of the ones on the side and put it on a new canvas.
Then recreate what's missing
You can use the Jimbo texture as a template for what's missing
Should I delete every instance of "lovely"
My friend did this shit idk what the fuck is happenin
Or the egg texture
Yes.
Ok
how do I extend it without stretching it?
Like the lovely folders and the toml ones?
the image
You need to remake the sides of the image.
Sould be something like "increase canvas size"
@daring fern
At least that's what it is on asperite
Only the lovely folder.
But I am using GIMP
It's just
oh
Not deleting anything at all
Bumping for people who didn't see my question
See I figured they would use similar terms
oh it is fixed now
@daring fern it isn't even deselecting it, it says "deleting" for like a millisecond and it disappears
Strange.
Am I cooked
Probably.
Fuck
Ngl
All I want is the fucking ff thing
But it's only on one application
How do I resize an image in GIMP?
What do you mean?
I have to make a 2x scale version of the jokers.
doesn't work 
Did you wait?
wait for what?
...oh.
what is this gray bar on the size for?
Your Atlas size is either too big or too small.
You must've not sized it correct.
Jokers are usually 71 x 95.
-# Unless you're me, in which case, I used 710 x 950.
is there a way i can destroy the card during scoring 
trigger = 'after',
delay = 0.3,
blockable = false,
func = function()
G.jokers:remove_card(card)
card:remove()
card = nil
return true;
end
}))```
Here's how Gros Michel destroys itself in SMODS if that helps
Hd textures lol
Destroying played cards is different from destroying jokers.
...Sure, we'll call it that.
the problem with destroying cards in other steps is that it creates ghost cards
...i guess that makes sense 
...can i attach a sprite to a card?
yup.
soul_pos = { x = 1, y = 0 }, in your SMODS.Joker.
...SMODS.Joker for playing cards...?
...nevermind.
hmm
i think you can do card.children.yoursprite = Sprite(...)
now H doesn't add mult when I play a high card.
Hi! I'm working with the post_trigger feature. It seems like, no matter what I do, the return message shows up in the wrong place when using this context. I explicitly tried setting "card" and "focus" to the appropriate Joker, but it will show the message by the Joker that did the trigger or the playing card related to the trigger. Is this a bug or is there a workaround I'm not familiar with?
message_card?
never used post_trigger but have you tried setting message_card
How do I add to the code so that H adds mult when I play a high card?
What does your code look like?
@faint yacht Yes, that worked immediately. This is my 37th Joker. I've never had to set this before. Am I losing my mind?
"High Card"
¯_(ツ)_/¯
it handles it for you most of the time, but it's in the docs
? where is that?
Thanks!
is there anything wrong with image processing, why is Wormy Chaos too black in-game 💀
oh, so remove context.cardarea == G.play?
Yes. And context.individual
ok...
Add context.before
hey guys, im trying to make a joker decrease the level of ur played poker hand and get its +chips and +mult permanently
???
im just trying to know how can i get the +chips and +mults from a played poker hand
To the upgrade if
line 344? and where do I put it?
any updates on this?
that's not how you scale a joker
Replace context.individual and context.cardarea = G.play
take a look at Runner 2
????
replace it with what?
context.before
what's the difference between mine and yours?
the proper way to scale a joker via playing certain hand types is to do so in context.before
you tried to do it in context.individual
this work?
Maybe?
hold on.
Bonus+Bonus = lots, +80 chips
Bonus+Mult = Extra, +30 chips, +4 mult
Bonus+Wild = Untamed, +30 chips, works as any suit
Bonus+Glass = Tempered Glass, X2 chips, 1 in 6 chance to break
Bonus+Steel = Sapphire, X1.5 chips when stays in hands
Bonus+Stone = Cobalt, +100 chips, no suit or rank
Bonus+Gold = Diamond, +6$ if held, gives chips based on current money
nah, diamond should be glass + gold, bonus+gold i feel should be a valuable metal with some kind of use, that is also blue
i forgor now what was glass+gold tbh, lemme try to find what it was
but yeah it makes sense
i dont even remember what it did
sapphire is my favourite metal
in my mod there is a sapphire and a ruby and there is a little easter egg with it
ok but sapphire isn't a metal
yeah but i couldnt think of anything better
i just took steel as a ore
there is even a "Miner" joker that makes the cards you score into random card ores
i just have to code it still
is it me or this looks like a dawg
😭
oooh now i remember, glass+gold was orichalcum, that is a ore that was said in some mythological tales that would bring fortune and wealth to those who have
that makes sense too.
plato also said that this ore was made to build atlanta
even tho looking back now, it looks more like a bonus+gold thing than a glass+gold
yeah imma invert the names
looks delicious
id lowkey try and bite that
same
what is the best way for a sticker to prevent a joker from being sold or destroyed (basically to mimic eternal but under certain conditions)?
Bonus+Gold = Orichalcum, +6$ if held, gives chips based on current money
there you go!
now to the mult ones!
uhhhhhhhhhhhhhhh try
G.GAME.hands['hand name here'] to get the hand - and then in there, it should have... .mult and .chips according to its current level...? not confident about that - can also just get from scoring_hand in your joker's calculate() context: https://github.com/Steamodded/smods/wiki/Calculate-Functions
probably the easier way
and then iirc there's a specific way you can level down a hand which you can look at the blind code for the arm for
honestly that could work
i was about to do the most horrendous thing which is doing an if statement for every poker hand and apply it form there
but i rather try those first
just realized i forgor about the bonus+lucky
doesn't work
i believe there are precious metals that are considered 'lucky'
in fact, doesn't even have to be a metal. jade
oh, bonus
i read gold for whatever reason 
i was thinking of something like a scratch (idk if thats the name lemme check rq
precious metalbrained
scratch card i think
yyeaaah loll
what do you think?
it's good 
how do i test whether a playing card has foil edition?
debugplus
in what context - in a played hand or just held in hand?
īf card.edition.foil
hmm, in the deck; what I want actually is to debuff some un-editioned cards when starting this boss blind
don't set the key! 
oh in the code 😅
@daring fern any insight on this? 
What are you trying to do?
put a sprite on top of a played card if i plan to destroy it
i was gonna wonder if i could just cheat it by making a hidden seal that does nothing but just has the graphic and doing it that way, but then i realised what if the card already has a seal
You didn't show the sprite thing in the image.
is there a hand-level-up context? or any way to trigger something when a hand levels up
hhhhhhhhh i sent the wrong screenshottt
meant to send this one
Arent atlases at G.ASSET_ATLAS
usually, unless they're other types of atlas - but i have a few miscellaneous atlases that i define elsewhere, which receive the return value of SMODS.Atlas()
that's a system that i've already confirmed works
https://cdn.discordapp.com/attachments/1337481918853415085/1360075736438018159/Balatro_Z4DavwXGTB.gif
It works
I have no idea but if you figure it please let me know I still haven't been able to draw a proper second seal on a card.
I copied what you did and this happened. (The blank card is a temp sprite)
It drew it over in the corner.
Start a new run?
i see the issue, yeah. now it's placing it in the wrong position like you showed
how do you get the card's position 
what could mult+gold be?
oh i remember, it was a "Casino" card, you payed 1$ and had the chance to get 10
i think it could be better with glass+lucky actually
not quite red, but
https://www.youtube.com/watch?v=d6Pcp944sRI
💻Thanks to Opera for sponsoring this video! Get a browser that’s literally better at everything, download Opera today: https://opr.as/12-Opera-Browser-NileRed
A few years ago I stumbled onto something called purple gold and I really wanted to buy a pure purple gold ring. However, I was devastated when I found out that it didn't exist...so ...
oooooh i saw this video once!
although that might be better as steel+gold, since the purple gold is an alloy of aluminium and gold 
there is a red gold, is a alloy of copper and gold
yeah, could do that instead
i was thinking of electrum for steel and gold, it is an alloy of steel and gold
its like rose gold
can a challenge force a specific 8th ante boss blind?
but purple gold in number one, i love purple
... 
you have a few options. quick and dirty is you could just ban every finale blind but one, but then that affects all future finale blinds
other way is that you could look at how director's cut rerolls the boss blind and try to use that code as part of a call specific to your challenge to force the blind to be that
probably other, better ways, but
i do recall there being code that decides some future boss blinds?
banning every finale blind would be acceptable hmm, repeating it on ante 16, etc
ah yeah that'll do nicely
You can use perscribed_bosses
(sic)
how we feelin
is it typo'd internally or was that a mistake
lobo corp jokers?!?!
what could mult+lucky be?
lead
maybe prized? as in like a "highlight of the collection" card
true!
i was first thinking of doing a clover but it would be harrd to make it as a rectangle and it would break the collor thing
or just a golden 4 leaf clove yeah
but then
the collors are going so satisfying, adding a gold there would break it 😭
i see
that could be the corresponding joker for it though lol
also would be a little hard to make a golden 4 leaf clove in a rectangle
so bonus + mult is the same as mult + bonus?
totally! ill make jokers that interact with those fusions
yeah!
ngl if you don't call mult+mult a power card I'm rioting
i dont get it but ill rename it because i had no idea what to name so i just said "multy :D"
have the joker just be steroids lol
because you know, (addition) -> multiplication -> taking to a power
OOOOOH
thats so genius
finally finished that factorial mult joker i was struggling on for a few days here (ignore the bad sprite)
this is gonna get insanely high insanely fast
true
i used direct computation for values from 3-720, and approximation for higher numbers so that the values are clean AND fast
sound fun
once it gets into the e's it gains one e per round
first function for smaller numbers, second function for bigger numbers
im very proud of it
btw just to be sure, in the "pos = {X=0,Y=0}" in the X ill just add 72 for the second, then 144 for the third and there it goes right?
well let me tell you it'll get there fast
3! = 6
6! = 720
720! = 2.6*10^1746
Im obsesed with animating cards at the moment so have that be a animated loop would be sick
yep! i've tested it, its insane
getting to ^1746 in 3 rounds is CRAZY
heres the calculate code
it was grueling to figure out how to actually do it 😭
worth it though
completely bug free (to my knowledge)
works with blueprint though
?
forgot to remove my print debugging
I'm making a sticker that a playing card with it gives chips when played instead of when scored, which context timing should I use?
nah it should be pentated by 2 and start at 2
im 99% omeganum.js has a factorial method
pentation is ^^^ btw
does it not use the same system as the jokers? and it 1,2,3,4?
so 2^^^2 is 65k
well i know very little about coding in general so
idk ive never looked into the pos part
you mean referring to the atlas in the joker code? you increment that just by 1 for each next card sprite since the card size is already defined in the atlas itself
is it possible to manually add text inside Custom Rules? Wait, yes it is, just reading balatro vanilla's typecast challenge and its localization
oooh, okok, ty!
at least it should
I just realised you were still talking about the cards
but I don't see why the system shouldn't be the same as with the jokers
i like the way atlas does spritesheet coordinates
this is how omeganum js (what talisman's omeganum was adapted from) does it
i see
so you're not far off!
Searched in this chat for solutions about ghost cards and I am confused. Anyone got any solutions about how to stop ghost cards from being created when shattering in my code?
actually the last return is identical to what you did
btw anyone knows what i could do with wild+wild? i was gonna make it create a "monster" joker that makes steel cards into claw cards (claw card is wild+steel, gives 3X mult but breaks after 3 rounds)
its casically a steel card marked with claws in it
card:start_dissolve()
card = nil
since any suit+any rank is just too hard
I have my mod in the mods folder but does not appear ingame. are there any common things i can look out for?
interesting
yeah idk much about like
is your meta part right?
stuff like libraries
and considering errorfixer isn't touched it's exactly the same
i was following a guide, this is whats inside
maybe acts as a wild card, can never be debuffed?
you still need a meta part
you have a json file?
o ty
how could i make this?
SMODS.Estrogen
gimme
ok we share
the smods.estrogen in question
if card.debuffed then no
idk honestly, I never worked with debuffs
IF CARD.DEBUFFED THEN NO HAD ME ROLLING
you ever implement a whole joker mechanic and then realize it sucks to play with
if card.debuffed then crash
Unless I did something wrong, it still created ghost cards
this is so genius
remove the start dissolve()
if card.debuffed then nuh uh
if card.debuffed then eep
portuguese mentioned🔥
they took over your country and culture only for you to be richer than them later 💔
gato is like one of the few words I know from portugese/spanish lol
Café
now you know 2
thats coffee
🔥
How to say 2 in portuguese
dos?
close
dos is spanish
makes sense
El wee joker +8 chipos lua dois played
G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.1,
func = function()
c:shatter()
c = nil
return true
end
}))
this is how i did it if its still not working
Brasil joker +dois cafés and gatos when scored
LocalThunk hire this woman on the portugese localisation team right now 🔥
programs when a different error occurs:
truly i have made progress
that's the entire point of programming
you just progress through different errors until the code starts working
me with my game fr (I should start working on it again)
i gave up coding in gdscript because it didnt say "you got an error, go back", he just sat there staring at me, balatro says "you are DUMB in this line:"
does anyone know what i gotta do to squash this guy
btw it says with with, did my brain just ignore that
I used your event and it still creates ghost cards. This is for enhancements, which should be just glass card. It might be my contexts
I dread the day someone sends me my first bug report
unfortunately you'll need a lovely patch for your effect
and its the one joker you didn't test all the way though
check line 406 in your code, there's a value there that's nil that you are assigning, maybe send that entire chunk here so we can see it
i mean so far the 3 jokers i made i tested VERY thoroughly
yeah one of my jokers has had really poor behaviour
oh yeah uh i left the defaults in 😭
thats def why
yeah likely that
my leftwards blueprint joker was a pain in the ass to make because it kept getting into a feeback loop with regular blueprint and crashing... until i realized i accidentally disabled the VANILLA function to prevent blueprint from getting into a feedback loop
absolutely maddening
"if not context.blueprint then" is your friend
@digital niche
my factorial joker took like 2 whole days of work and a LOT of print debugging
yep thats how i fixed it
how do i add a playing card to a deck at the start
): Thats like the last thing I need. Is there a way to just remove the playing card in any way after scoring, or does it still need a lovely patch?
if context.shop and value ~= nil then
maybe?
nah this stupid
what are you trying to do?
message above it
if G then G = nil
ah I'm slow
if you have to write G = true here before nil im never learning lua
a bit painful
it does work so i have no complaints
spaghetti
what's the effect?
+5 free rerolls, doubles shop prices
i see
chaos the clown’s big brother
general rule of thumb I have is
variable
variable changes
if statements
functions
just makes it way easier to read
wdym, nothing is wrong with my code
LOLL
hey so, it says im indexing a nil value, how could i change this?
Back hole ahh effect
whats handname?
ohh that may be the problem
my leftwards blueprint joker is put together so poorly but if it works it works™️
Apple
i copyed from the arm blind
sued
that reduces ur hand level
It just works™️ is an apple copywested sentence
i couldve made this like 1/5th the size if i was smarter probably
ooh now i want to make a deck that times your score by -1 and have a bunch of joker that play around that
balatro but you have to get the lowest score possible
no it's totally fineee
Does SMODS.find_mod finds mods that are currently disabled?
ok so what if i want to call the poker hand played? should i say context.hand_info or smth?
I still don't know how to do it. I got it to break the card and such, but it creates a ghost card in its place
i am sated
is there a way to repeat the same enhancement twice in the collections page?
dup it name the key slighty different
tyty!
wdym
the one on the right is the better joker
left one is trash ngl
sell the joker
obviously
the indents ...
how would i upgrade a poker hand using a joker?
The current one that was played or a specific one?
the burnt joker would have that code right?
For this you would return level_up = 1
Change 1 to the number of level ups.
?
behold, the most cursed attempt i've done so far 
whyyy doesn't it stick to the card 
and why does it appear immediately instead of with the timing
maybe i should wrap it in an event manager
Yes.
it does, just the animated doesn't match with it
I think
i think im doing a good jobb with this
how would i make certain items free (booster pack types, jokers/consumable types, etc) with a joker?
how do i get the name of the pokerhand played?
Is that mita from hit game miside
i don't know what this is but it looks awesome
fusions mod! first line is everything +bonus (bonus+bonus, bonus+mult etc etc), the second line is everything +mult
see how the card beneath 'slides' under it? it's not stuck to it.
ooo i see!
sounds very fun
any formatting i need here?
yeaah! i was surprised i never saw someone do
the mod im working on doesnt really have any set direction, its just sort of an outlet for me to express my ideas for content
i would make the odds be var card.extra.ability.odds and G.GAME.probabilities.normal, then make
repetitively roll a {C:green}#1# in #2#{} chance"
#1# being G.GAME.probabilities.normal and #2# being card.extra.ability.odds
balala
i dont think so
Definitely not.
how the joker works is:
roll a 1 in 2
if it hits, level up your most recent hand by one
repeat until the chance doesnt hit
and it would be
loc_vars = function(self, info_queue, card)
return {vars={(G.GAME.probabilities.normal or 1), card.ability.extra.odds}}```
soooo what if i have oops all 6s i just get softlocked
i have that, i just showed the return portion
which is why im making it always be 1 in 2, even with oops all 6
and you would need to add the config = {extra={ odds = 2}}
text = {
"Every time a {C:attention}hand{} is played",
"repetitively roll a{C:green)#1#/#2#{} chance",
"every success {C:attention}Levels up{} hand by one",
}```
best ive got