#💻・modding-dev
1 messages · Page 72 of 1
I mean, you’re not in a Blind out of a round
So if you want the Blind-to-be you need to look at the list of Blinds for the Ante
I guess
undefining it seems like a lot though
or rather, keeping G.GAME.blind defined but not the attributes that define a blind
Doesn’t seem like a lot
Just vacate the memory
I wonder if the burning animation also destroys the Blind
Like it does to Cards
seems like it's the Blind:defeat that does the self:set_blind(nil, nil, true)
then why not vacate G.GAME.blind as a whole at that point
idk I'm just annoyed G.GAME.blind still exists, but not for any useful reasons as far as I can tell
Isn’t it vacated?
no, only the parts of it that define what a blind is
the Small/Big/Boss and name, mostly
What else is there
a lot of UI stuff I think
G.GAME.blind = {
click_offset = table: 0x0713a480,
static_rotation = false,
ambient_tilt = 0.3,
parent = table: 0x06d1b8b0,
mult = 0,
T = table: 0x0713a390,
offset = table: 0x0713b100,
tilt_var = table: 0x0713b270,
last_aligned = -1,
Mid = table: 0x0713a1f0,
colour = table: 0x0713b300,
loc_debuff_text = "",
VT = table: 0x0713a980,
shadow_parrallax = table: 0x0713b160,
ARGS = table: 0x0713a278,
ID = 617,
container = table: 0x06ce8318,
config = table: 0x0713b248,
velocity = table: 0x0713aa70,
disabled = false,
CALCING = true,
dollars = 0,
alignment = table: 0x0713acb0,
prepped = true,
loc_name = "",
blind_set = false,
CT = table: 0x0713a390,
STATIONARY = true,
loc_debuff_lines = table: 0x0713cc40,
chips = 0,
debuff = table: 0x071d8ab0,
zoom = true,
dark_colour = table: 0x0713b358,
sound_pings = 2,
chip_text = "0",
role = table: 0x06fbc960,
layered_parallax = table: 0x0713b1c0,
FRAME = table: 0x0713a690,
NEW_ALIGNMENT = true,
shadow_height = 0.08999916553245,
created_on_pause = false,
RETS = table: 0x0713a2d8,
states = table: 0x0713a6f0,
hover_offset = table: 0x0713a4a8,
last_moved = -1,
pinch = table: 0x0713b0a0,
name = "",
children = table: 0x0713b220,
}
so stuff like name still has a value, but it's empty
Ah, I think that’s just the UI that slides in then
It’s just usually hidden
And the text and sprite is updated when needed
That’s what I would guess
yeah it's probably there to just paste the blind info on top of
so Thunk doesn't have to recreate* the UI element for it
Not only redefine but recreate it
yeah that's what I mean
this took SOOO long to make unlockable
I noticed you removed your config. Are you planning to re-add it and make it a toggle to unlock all?
removed my wut...
https://github.com/Steamopollys/Steamodded/wiki/06.-SMODS.ConsumableType
Questions:
What is key?
How do I set up primary_colour and secondary_colour? Do I use hex codes, RGB, or something else?
Also, what’s the syntax for this? Is it this?
[entries here]
}```
wait I'm getting mixed up I guess
i never had a config?
i would but i dunno how
i'll research it
yeah that'd be cool
You can look at steamodded's internals for that: https://github.com/Steamopollys/Steamodded/blob/d9693396dcd0333b7bba5d02691dc575999b6a05/core/game_object.lua#L893
most colours are G.C.[colour] btw, you can find those at globals.lua:333
I do know how G.C.color works, but if I want a new color, do I just inject globals.lua using lovely?
I also don’t know what the difference between primary and secondary color is in this case
Have you looked at globals.lua yet?
No need to inject, if none of the colors balatro pre-defines are to your liking, you can create a new colour at any time using HEX('')
I unfortunately don't know when the primary/secondary colors get used either 🙃
Oh, okay, so you can just use HEX (not the Spectral card)
yeah just HEX('0047AA') for example
I think the secondary colour gets added to the loc colours table and is used in the collection menu, I have no idea what the primary colour is used for
What is the new cooor for?
does anyone know how to add text to challenge descriptions?
something like Small Blinds dont have shops
yeah, primary colour is used in a single place which is never actually used because it pulls the secondary colour first
YESS
what are you trying to do?
like a custom challenge?
is there a way i could have a joker only spawn in the shop if you already have a certain joker?
sort of like how golden ticket or steel joker works but it needs a joker and not an enhancement
yes_pool
if joker has a yes_pool it'll spawn only if the pool flag for it is set to true
you can use in_pool too
in_pool is a function in your joker
if it returns true, joker can spawn, if it returns false, the joker cant spawn
so here it would be in_pool = function(self) return next(find_card(<key>)) end
okay so in_pool is another function alright
alright
more on it here (although its a bit outdated)
yeah the steammodded github is in general outdated
i wish there was a better balatro modding tutorial out there
i think its still a useful resource for the stuff that it does cover
i KNOW it has something to do with creating the card
but i dont know what
wait shit typo oops
have you considered that it runs for every context
yes, i have
nvm still crashes
oops sorry
hmm this doesnt seem to be working
i just have it as this
in_pool = function(self)
return next(find_card('baka'))
end,
would i need a return function if its false as well or no?
oh so, mod name and all got it
ye
I mean without seeing the full code, you can't expect people to help debug your stuff
it is the full code...
I mean you've said you know its the create card line that your screenshot snips off
so....
its supposed to store the sold joker's card's key and ability, and create it if it doesnt exist
it just has the key
which is just G.GAME.cardboard.key
on the 7th part of create_card
i don't see it ever removing G.GAME.cardboard.card
which means it is running for every context
my mod name is sannyo, it should just be sann_baka right?
yeah that bottom block is going to run on every calculate
do you have a mod prefix set?
j_sann_baka assuming you havent defined a prefix
^
image had a typo, it should be like
if G.GAME.cardboard and G.GAME.cardboard.key and not G.GAME.cardboard.card then ```
so if there is no G.GAME.cardboard.card, it spawns the card
instead of spawning the card if there is G.GAME.cardboard.card
and when are you removing G.GAME.cardboard.card exactly
its being removed when it saves and reloads 🥹
if it werent i would have just put it in the config
.
but what would it be running on said context??
what am i not getting
its supposed to not ever create the card unless there is no card
so it shouldnt ever spawn the card unless there is no card
am i being dumb
am i being blind
still not working. the error im getting is that "find_card" is a nil value
in_pool = function(self)
return next(find_card('j_sann_baka'))
end,
oh
if there is a card, there are no restrictions on when it will spawn the card
use SMODS.find_card()
oops
find card is for avilion
okay, seems like it works!!!
ah oops sorry
your bottom block runs on EVERY context and just creates cards without putting them anywhere
its supposed to copy it tho
it should still exist if theres no cardarea
then why is it copying it endlessly
i dont know why its creating them endlessly!!!
because that block runs on every calculate call, and there's a lot of them
it's probably not the reason it crashes but you should stop that from happening regardless
It probably needs a and not context.blueprint somewhere
Also calling the effect of a different card while selling a card and copying its effect might be tricky
And I think the calculate call of the created Joker might not exist for some reason
feeling really stupid rn but how do i do dependencies again
upd: nvm i just missed one space
infinite fusions api now works
there's still at least 10 more that dont but let me have this one win
How dose the infinite fusion work?
mechanically it just wraps different jokers into a single card
by default it doesnt have custom art or name and instead is just "infinifusion", with the jokers its made up of being shown on the side
in the screenshot are the first two custom artworks to test the api for that
theoretically it works with any jokers, although current implementation is basic so i have a lot of things to fix
rate the challenge
Bunco had a Boss with a similar Shop Skipping effect
yeah, thats where i had the idea from
small blinds dont have shops
big blinds dont have shops
boss blinds dont have shops
there are no shops
shops don't exist
The gaslighter
Disabled cards, run
i wonder how many people downloaded my mod
is there anything to check that on github?
there's https://github.com/art-muncher/Jimbo-s-Pack/graphs/traffic? available for owners only I believe
If you have releases this seems to exist https://qii404.me/github-release-statistics/ for people just cloning there's the github page > insights > traffic
GitHub Release Assets Download Analysis, Download Statistic, GitHub下载数统计
seems uh... missing some stuff
EDIT: ugh, github's API doesn't support source only, that's unfortunate
Homeless Man Challenge
includes the garbage he just took
with his bare hands
how does homeless man become homeful man
he doesnt
capitalism
the has-home man challenge is the shopping spree challenge
for the middle class
now i will make the first class challenge
Start with 10 Million dollars, earn 300% interest, cards cannot be debuffed, do not pay taxes, women love you
GUYS....
That's the spirit
should i draw some sprites (i've been using the same placeholder for 20 years) or focus on adding more jokers
im hella bored rn
nvm i got a really funny idea
DAMOCLES IN BALATRO
The context.individual are killing your jokers
I can't wait to cryptid glitched that down and have oops all 6s
eh just rig it
Oh yeah
instead of destroying all jokers it should just instantly set the blind size to infinity
does anyone know how to make a jokers loc_txt change??
i swear i used to be able to do it but now it doesnt work
i have no idea what that means
i tried making a localization.lua, then setting the loc_txt of the joker to the loc_txt i want, then changing that loc_txt
i swear it used to work
but now it wont??
i dont know why??
this
changing loc_txt never worked bc it's not directly tied to the localization table, it's just a copy
this might be really stupid, but how do i get a card to reference another card like it does with Marble Joker?
You can do so with the loc_vars function like so https://github.com/WilsontheWolf/JamMod/blob/master/Jokers.lua#L103 but with whatever key for what you want to reference
The adding to the info queue part
You can see another example here with adding jokers https://github.com/MathIsFun0/Cryptid/blob/9debd1c4887a8410a1f2a8975179cbc4dc4d6494/Items/M.lua#L89
i think i did something wrong (also why is there text above it, its an enhancement)
info_queue[#info_queue + 1] = {
key = 'dqck_derpyjoker',
set = 'Joker',
config = { extra = { mult = 0, mult_mod = 1 } }
}
return { vars = { center.ability.extra } }
end,```
idk if you need the prefix in the key but it didnt work without the prefix etiher
the code seems to be unrelated to the image?
unless there's 2 seperate questions
the name in the tooltip is a bug that hasn't been fixed yet
the key needs j_ infront of it too
oh
yeah all the other modded enhancements have it too
damn
it's just a cosmetic thing, nothing to worry about really
yeah
I also noticed that that familiar enhancements don't have 'card'
but the vanillia ones do
I guess i should mention that in the familiar thread
you need to set up the loc stuff
pretty sure its specific_vars = {vars = {blablabla}}
could just be specific_vars = {balbla}
no it's not that
my b
try just vars = {mult = 0, mult_mod = 1} in the infoqueue bit
wait no
vars = {0, 1}
nope
If you want your vars to show up in info_queue you'd have to use this
Not sure why it doesn't work for you, can you show your bit of code?
info_queue[#info_queue + 1] = {
key = 'j_dqck_derpyjoker',
set = 'Joker',
vars = { 0, 1 }
}
return { vars = { center.ability.extra } }
end,```
also unless I'm missing something a lot of mods do just do this
you are missing something
using config instead of vars no?
this isn't for the main tooltip
Shoidlnt it be specific_vars and not vars?
you mean specific_vars = { extra = { 0, 1 } }?
Not sure but if that doesn't work try removing the extra part
...hm.
gotta love when you're trying to sift through the source to find something that just isn't turning up
What are you looking for?
i was looking for the money payout of lucky cards, but it was just a PEBCAK issue.
of course i'm not going to find lucky_money if i'm searching for lucky_mult
is there a better way of telling a run is or isn't a challenge run than checking if G.GAME.challenge (defined as args.challenge.id within Game:start_run) exists?
now i cant find a way to change the enhancement of a card 😭
#💻・modding-dev message copies the enhancement of the first scoring card, and applies it to the other scoring cards
it just keeps giving me Oops! The game crashed: card.lua:297: attempt to index field 'config' (a nil value)
you need an "enhancement center"
i have no idea what that means
no worries, I didn't either at first (still don't)
this is Midas Mask's code for example
if self.ability.name == 'Midas Mask' and not context.blueprint then
local faces = {}
for k, v in ipairs(context.scoring_hand) do
if v:is_face() then
faces[#faces+1] = v
v:set_ability(G.P_CENTERS.m_gold, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
v:juice_up()
return true
end
}))
end
end
if #faces > 0 then
return {
message = localize('k_gold'),
colour = G.C.MONEY,
card = self
}
end
end
you can see where Thunk does the v:set_ability(G.P_CENTERS.m_gold, nil, true)
(you can find all the enhancements in game.lua:648-655)
does that help?
so i'm having a bit of lovely trouble. do i have to use patches.regex if i'm attempting to find a line with curly brackets {} in it?
no
yes its no longer giving errors but im not sure the rest of my code is working lol
ah, i figured out the problem
i have to take the line that i want from the balatro executable itself and not the lovely dump's version.
because apparently my mod's lovely file is loaded before steamodded's...?
idk, point is, i fixed it
im not exactly sure how enhancement calculations work
like i dont think any of my code is triggering in the enhancement calculations
very new to this, how would i check if the played hand is a flush in a joker's calculate function?
if it is a flush, or if it contains a flush?
if it is a flush
context.scoring_name == "Flush"
however
this will only trigger on flushes
not straight flushes, flush houses, or flush fives
yea i dont want it to trigger on other types of flushes
its a joker that gives mult buffs but randomizes the suit of played flushes
might change it to containing flushes later but i think its fine as only flushes
and you want those "higher" hands to be exempt?
im kinda neutral on it, but im prolly just gonna keep it as flushes only for now
doesnt change too much either way
that all said, uh... anyone know how to take ownership of a tarot? trying to get used to this newfangled SMODS logic after being out of the loop for... weeks...
whats your calculate function look like?
if someone makes this i will literally drink water https://discord.com/channels/1116389027176787968/1289540009871016025
and lots of sincere thank yous
can someone help with this error? not sure what it's actually expecting since the description seems fine
nvm found it i forgot a comma lmao
if context.individual and context.cardarea == G.play then
return {
x_mult = card.ability.extra.xmult,
colour = G.C.RED,
card = card
}
end
if context.after then
if pseudorandom('copper') < G.GAME.probabilities.normal/card.ability.extra.odds then
card:set_ability(G.P_CENTERS.m_dqck_oxidized, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
card:juice_up()
return true
end
}))
return {
message = 'Oxidized!',
colour = G.C.GREEN,
card = card
}
end
end
end```
but whenever i put anything in there even without an if, it doesnt do anything
you can't return from enhancements
you have to add to the effect table
or use SMODS.eval_this
idk how to do any of that, but shouldnt the card:set_ability(G.P_CENTERS.m_dqck_oxidized, nil, true) still work since its not returning?
uhhh I guess so, yeah
like i just changed it to
card:set_ability(G.P_CENTERS.m_lucky, nil, true)
and put it at the top of the calculate and it does nothing
can you send your entire enhancement code?
key = 'copper',
loc_txt = {
name = 'Copper Card',
text = {
'placeholder'
}
},
pos = { x = 0, y = 0, },
atlas = 'DucktacularEnhancers',
config = {extra = { xmult = 3, odds = 4 },},
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = {
key = 'j_dqck_derpyjoker',
set = 'Joker',
specific_vars = { 0, 1 }
}
return { vars = { card.ability.extra.xmult, ''..(G.GAME and G.GAME.probabilities.normal or 1), card.ability.extra.odds } }
end,
calculate = function(self, card, context, effect)
card:set_ability(G.P_CENTERS.m_lucky, nil, true)
if context.individual and context.cardarea == G.play then
return {
x_mult = card.ability.extra.xmult,
colour = G.C.RED,
card = card
}
end
if context.after then
if pseudorandom('copper') < G.GAME.probabilities.normal/card.ability.extra.odds then
card:set_ability(G.P_CENTERS.m_dqck_oxidized, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
card:juice_up()
return true
end
}))
return {
message = 'Oxidized!',
colour = G.C.GREEN,
card = card
}
end
end
end
}```
if you drop a sendDebugMessage in there, does it trigger?
just sendDebugMessage('test message')?
yeah that'll do
are you loading an old save to test or is it a fresh enhancement?
old save, ill load a new one
weirdly, it didnt do the debug message but it did turn it lucky like it is supposed to in the code
still not doing the changing to my enhancement (i removed the chance element)
make sure your steamodded minimum log level is set to trace?
is the key correct?
would it be m_dqck_oxidized?
also, i put some test messages in places after turning trace on, and its only sending a debug message before the if statements
how do glass cards work then
glass cards aren't a modded item
no
damn
you can lovely patch it though
that's what I do for an enhancement that has an after play effect
lovely patch?
A lovely patch lets you modify the games code. Take a look at https://github.com/ethangreen-dev/lovely-injector?tab=readme-ov-file#patches
is there an alternative to context.after besides patching
i also still dont even know how to add mult and stuff with enhancements
now its saying that card is a nil value 😭
it doesnt like me accessing self.ability.extra.xmult or card.ability.extra.xmult, how am i supposed to get the ability xmult??
Can someone tell me why I'm getting the dreaded attempt to index field 'atlas' (a nil value) error when trying to open the collection page for Upgrades?
Yeah just send the Lua file this is in
upgrades:register()
SMODS.ConsumableType {
key = 'Upgrade',
collection_rows = { 5, 4, 4 },
primary_colour = HEX('D97FCF'),
secondary_colour = HEX('D97FCF'),
loc_txt = {"Upgrades"},
atlas = upgrades
}
SMODS.Consumable {
key = 'mult_upgrade',
set = "Upgrade",
unlocked = true,
discovered = true,
pos = {x = 0, y = 0},
loc_txt = {
name = "Mult Upgrade",
text = {"Upgrades {C:mult}Mult{} Jokers", "by one level"}
},
atlas = upgrades
}```
etc.
But there's definitely a problem in this code, because of `attempt to index field 'atlas' (a nil value)`
Though sending the whole mod makes sense too so people can test if they want
atlas = upgrades
shouldnt that be
atlas = "Upgrade"?
or wait
i might just be dumb lol
idk
oh that works
yay
but now I'm getting a different problem — the dreaded [ERROR] type and empty description.
you need to give it a loc_txt
it already has one
key = 'mult_upgrade',
set = "Upgrade",
unlocked = true,
discovered = true,
pos = {x = 0, y = 0},
loc_txt = {
name = "Mult Upgrade",
text = {"Upgrades {C:mult}Mult{} Jokers", "by one level"}
},
atlas = "Upgrade"
}```
oh, and a loc_vars
or does it have to be localize('text')?
how exactly does loc_vars work?
.
self.config.extra.xmult should work, or you can throw an if card then before the card one
i dont know why its still angry about card
i changed it to SMODS.eval_this(center, { x_mult = self.config.extra.xmult, message = {type = 'variable', key = 'x_mult', vars = {self.config.extra.xmult}} })
can you show the whole function again?
the enhancement or just the calc part?
the calc part and the config values
unfortunately, this still didn't work
config = {extra = { xmult = 3, odds = 4 },},
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = {
key = 'j_dqck_derpyjoker',
set = 'Joker',
specific_vars = { 0, 1 }
}
return { vars = { card.ability.extra.xmult, ''..(G.GAME and G.GAME.probabilities.normal or 1), card.ability.extra.odds } }
end,
calculate = function(self, card, context, effect)
sendDebugMessage('test 1')
if context.cardarea == G.play then
sendDebugMessage('test 2')
SMODS.eval_this(center, {
x_mult = self.config.extra.xmult,
message = {type = 'variable', key = 'x_mult', vars = {self.config.extra.xmult}}
})
end
if context.after then
sendDebugMessage('test 3')
card:set_ability(G.P_CENTERS.m_dqck_oxidized, nil, true)
G.E_MANAGER:add_event(Event({
func = function()
card:juice_up()
return true
end
}))
return {
message = 'Oxidized!',
colour = G.C.GREEN,
card = card
}
end
end```
you should be able to replace the SMODS.eval_this with effect.x_mult = card.ability.extra.xmult
what
oh, add a and not context.repetition to the if statement
ok so now everything is working except for the changing into an oxidized card
oh wait
its not even being triggered 💀
whats not being triggered?
the stupid context.after
like I said earlier, context.after isn't sent to enhancements
[[patches]]
[patches.pattern]
target = 'functions/state_events.lua'
pattern = '''if destroyed then'''
position = 'before'
match_indent = true
payload = '''
if scoring_hand[i].config.center == G.P_CENTERS['m_'..Ortalab.prefix..'_sand'] and not scoring_hand[i].debuff then
end'''
this is the basis of the lovely patch you need for the glass card step
what do i do with that
.
oh fuck it's 3am, I should've been asleep ages ago
you should probably sleep
good luck with your lovely patching!
Partially works now. The Upgrade showed up, but not the description text
upgrades:register()
SMODS.ConsumableType {
key = 'Upgrade',
collection_rows = { 5, 4, 4 },
primary_colour = HEX('D97FCF'),
secondary_colour = HEX('D97FCF'),
loc_txt = {name = "Upgrade"},
loc_vars = (function(self, info_queue, card) end),
atlas = upgrades
}
SMODS.Consumable {
key = 'mult_upgrade',
set = "Upgrade",
unlocked = true,
discovered = true,
pos = {x = 0, y = 0},
loc_txt = {
name = "Mult Upgrade",
text = {"Upgrades {C:mult}Mult{} Jokers", "by one level"}
},
loc_vars = (function(self, info_queue, card) end),
atlas = "Upgrade"
}```
should it be loc_vars = function(self, info_queue, card) end, instead of loc_vars = (function(self, info_queue, card) end), or does that not matter?
neither of these works
hm
not sure if this affects it but you didnt change the atlas in SMODS.ConsumableType to "Upgrade"
no this is irrelevant
i cant think of anything that would be wrong with the loc_txt and loc_vars
This might sound stupid, but does the one you’re hovering over have a loc txt?
it does
key = "enhance_upgrade",
set = "Upgrade",
unlocked = true,
discovered = true,
pos = {x = 3, y = 1},
loc_txt = {
name = "Enhancement Upgrade",
text = {"Upgrades {C:enhanced}Enhancements{}", "by one level"}
},
loc_vars = (function(self, info_queue, card) end),
atlas = "Upgrade"
}```
for some reason name comes through, but not text
functions/common_events.lua:2924: attempt to index local 'cfg' (a nil value)```
im getting this for making my enhancement have a little reference tab thing
Maybe try single quotes rather than double?
that didn't work either
have you made any other consumables of that type? if so, are their loc_txt's working?
and for some reason its only doing this when i reference the Oxidized Enhancmenet and not the Joker
yes, and all of them are not working
thats so weird
the only thing i can think of currently that would make it not work is the loc_var and loc_txt on the consumable type, but i have no idea why that would affect the specific consumable so probably not
apparently it happens with any enhancement
I've been bashing my head against a wall trying to figure out how to make a config tab, if someone could make an example mod me and probably future people would be able to have a better understanding.
Just looking at how other mods do it isn't helping enough?
I figured out the problem. I needed to add this line to generate_card_ui:
localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = specific_vars or {}}```
yeah, unlike other times i look to mods i'm completely lost
how to win the blind in a joker's calculate function🤔 just copy win_blind causes this
anyone know what im doing wrong? still very new to this and i got no clue how to set it up properly
i just kinda copied how another mod seemed to work
put a comma after end🤔
im very intelligent
do i really not need anything after the calculate function similar to how other entries need commas
you need a comma
ah alr
when u sent that screenshot i thought you meant a comma after the atlas line 💀
🤪
holy hell the game opens this is new and unheard of
how do i fix children (floating_sprite/stickers/seals etc) of resized jokers?
anyone know why this is happening now? nothing should be different to other code that works
the scaling part works perfectly fine, but whenever i try to score a hand, it crashes
do you have any other jokers
no i only had the one
oh lmao
replace return with card_eval_status_text instead
yea maybe having it upgrade any time anything happened was a reckless idea
for the scaling part
how do i use that? is it just doing card_eval_status_text = "zeepy zoop"
it's in balatro's functions/common_events.lua
i do realize this makes no sense either way
i think for your purpose it should be card_eval_status_text(card, 'extra', nil, percent, nil, <your current return table>)
although having your code do something for every context w/o any specification is not good in general
why have good ideas when u can have bad ideas
wtf man
corrupted png?
no
i didnt change nothin
that happens when steam is trying to cloud
twas a shitty guess
iirc that's "not enough memory"
Did you fix it yet
This happens sometimes to me. I just open the game again
nope
@opal spade I did it here, let me see if I can find how
It was for 0.9.8 and I haven’t ported it yet
let me know if you find it
So you have to do the same thing you did for the main sprite
At least how I did it was by changing the sprite size inside set_ability
So I could have a wide Joker and a wide floating sprite
How are you doing it
rate my setup
you want to hide those or something else? otherwise you can do it manually. the same way you changed front sprite's dimensions
That’s what I said 😭
for more ideas
didnt see your msg
whats the weirdest thing a card could change
Your mortgage
maybe something like this
self.children.floating_sprite.scale.y = self.children.center.scale.y
this function runs at the end of set_sprites (args is a table of arguments collected within set_sprites as the game is trying to see whether it should use an existing joker sprite or go procedural)
local H = G.CARD_H
local W = G.CARD_W
local scale = args.wee and 0.7 or 1
if args.same_check then
local same_center = G.P_CENTERS[same_check]
if same_center.set_sprites and type(same_center.set_sprites) == 'function' then
card.config.center = same_center
card.ability = card.infinifusion[1].ability
same_center.set_sprites(same_center, card, front)
card.config.center = G.P_CENTERS['j_infus_fused']
card.ability = card.ability_placeholder
return nil
end
if same_check == 'j_half' then
H = H/1.7
end
if same_check == 'j_photograph' then
H = H/1.2
end
end
if args.square then
H = W
end
card.T.h = H*scale
card.T.w = W*scale
card.VT.h = card.T.h
card.VT.w = card.T.w
if args.same_check then
if args.square then
card.children.center.scale.y = card.children.center.scale.x
end
if same_check == 'j_half' then
card.children.center.scale.y = card.children.center.scale.y/1.7
end
if same_check == 'j_photograph' then
card.children.center.scale.y = card.children.center.scale.y/1.2
end
end
end```
right now it just gives random Xmult, mult, chips, randomizes ante or randomizes joker values
for some reason no matter whan i do to the floating_sprite it just stays the way it is
I don’t think you need all that
Lemme paste my code
most of the code there is to account it being procedural
where do you get the args from
ok I'm lbind
The important part is just defining set_ability
Because the Joker only needs to be resized once anyways
i updated the file so its at the current state i have it rn
and it's fine to resize it when setting the ability
its within set_sprites which is run as a part of set_ability
This is how I discovered that the game creates new Jokers on load IIRC
Because it didn't make sense to me this would work
This doing it as I did and see if it works
I think an alternative procedural approach would be to allow width and height parameters in the object constructor and automatically append a resize to set_ability when constructing the Joker object
Try getting it to work in set_ability first
im not sure why that would effect anything
I’m just saying my code worked so maybe try that one 😅
And it will be easier to make progress after getting something to work
rate my setup chat
why is this happening.........
why must i be this bad 😭
its crashing instead of randomizing a random joker
wait
could it be the game undoing this
floating sprites don't resize for undiscovered booster packs, do they?
I'll need to check that when I get back
yeah floating sprites don't resize
oh I thought you were using real sprite but with undiscovered texture
why would you even use vanilla undiscovered sprite?
ah
you can disable it
is there no way to resize it to match?
why is it happening...
you probably can, but turning it off is super simple
on new undiscovered sprites at least
it's not actually undiscovered, it's just taking the textures vanilla uses for undiscovered
it's a joker and it defaults to undiscovered texture if it can't find appropriate one
does it use the soul position to draw the floating sprite?
yes
you should be able to patch card:draw to send a scale to the floating sprite rendering in that case
thank you for the help, now that i noticed what was going on no wonder it didnt work
I think the solution I showed to resize floating sprites worked
it did not but I think I know what to do to solve it now, just need to write the code
Hmmm
Ah, is the floating sprite the same file for all of them?
All resized sprites, I mean
ok the solution didnt work so ig it's time to break out the lovely patches
Mine was made with the same size of the Joker sprite
I remember while trying to make it work, there was some setting to scale the sprite such that it had the correct size, but with stretching of course
Since I made my sprite the correct size, I didn’t want it
So maybe that’s what missing from my solution?
the floating sprite is on a different atlas which i change as a part of my set_sprite code, but all the resizing happens after that
But it’s the same sprite all the time
That does put some limitations on what you can do
tbh i dont understand what you mean
if you mean "joker soul_pos uses the same atlas as joker's pos", then while yes, thats the normal behaviour, my set_sprites changes the floating_sprite's atlas to be different so i can use vanilla's atlases (and vanilla separates undiscovered joker body with undiscovere joker float)
No I’m not talking about a single Joker’s sprite
I’m talking about different Jokers
Since you’re automating it, I imagine you only have a single floating sprite
If a Joker’s sprite is larger than the floating sprite’s atlas, I imagine you’d run into problems if you were trying to cut the texture atlas into the same dimensions
what i think i'll do is remove my joker's soul_pos and instead create the floating sprite myself, then patch it's drawing as a separate chunk of code
That feels unnecessarily complicated
i failed to get this to work so for now i'll just disable floatie for resized sprites
I really do wish mod support came to mobile, hopefully in the future, who watches skootie lite on YT, Cryptid mod is sooooooo overpowered
illegal is (fortunately) an overstatement, unless you didn't mean literally
didnt mean it literally im just silly 
lol you good
I just know some people actually believe that it is or might be, so just checkin
it's not like you can't do it you just can't talk about it here
tbh this is one of the reasons why we should have a seperate purly community modding server.
is there a easy way for a deck to give you a joker at the start of a run?
yes, sdm-0 has decks that do that
split the bottom line of the joker description
#1248287850512781452 updated in repository 
Do you still do tghe state check?
if its in a joker calcualtge you probab;y have tp wait
probably have to do somethibng like semicolon here https://github.com/MathIsFun0/Cryptid/blob/main/Items/CodeCards.lua#L294-L311
instead of sleeping I've been thinking of a way to have multiple blinds active at once but the more i think about it the more impossible it seems thanks to the removal of the blind parameter from Steamodded blind objects
fml
never liked that change and now it's come to bite my ass
it was removed because the only thing that would be passed through the blind param is G.GAME.blind but now i need it to only affect like blinds[1] and nope that's not an option anymore
ok enough ranting back to sleep
Couldn’t you do what Obsidian Orb does?
Although it’s technically not multiple blinds, just a blind with multiple abilities
I might need some help with this one, happends when i try to give myself the card
--Boilerplate from Steamodded
SMODS.Joker {
key = 'j_mystic',
loc_txt = {
name = 'Golden Joker 2',
text = {
"Earn {C:money}$#1#{} at",
"end of round"
}
},
config = { extra = { money = 4 } },
rarity = 1,
SMODS.Sprite:new("MysticJoker.png",
cost = 6,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.money } }
end,
-- SMODS specific function, gives the returned value in dollars at the end of round, double checks that it's greater than 0 before returning.
calc_dollar_bonus = function(self, card)
local bonus = card.ability.extra.money
if bonus > 0 then return bonus end
end
-- Since there's nothing else to calculate, a calculate function is completely unnecessary.
}
-- Adding the Joker
add_joker("j_mystic", nil, true, false)
The Error displays the add_joker function at line 375
function add_joker(joker, edition, silent, eternal)
local _area = G.P_CENTERS[joker].consumeable and G.consumeables or G.jokers
local _T = _area and _area.T or {x = G.ROOM.T.w/2 - G.CARD_W/2, y = G.ROOM.T.h/2 - G.CARD_H/2}
local card = Card(_T.x, _T.y, G.CARD_W, G.CARD_H, G.P_CARDS.empty, G.P_CENTERS[joker],{discover = true, bypass_discovery_center = true, bypass_discovery_ui = true, bypass_back = G.GAME.selected_back.pos })
card:start_materialize(nil, silent)
if _area then card:add_to_deck() end
if edition then card:set_edition{[edition] = true} end
if eternal then card:set_eternal(true) end
if _area and card.ability.set == 'Joker' then _area:emplace(card)
elseif G.consumeables then G.consumeables:emplace(card) end
card.created_on_pause = nil
return card
end
which line is 375 in partcitular
local card = Card(_T.x, _T.y, G.CARD_W, G.CARD_H, G.P_CARDS.empty, G.P_CENTERS[joker],{discover = true, bypass_discovery_center = true, bypass_discovery_ui = true, bypass_back = G.GAME.selected_back.pos })
You don't need add_joker at the bottom
If you want to test a joker in game use DebugPlus
okay
Yeah but i stll can't fix this issue
You might want to remove this line SMODS.Sprite:new("MysticJoker.png",
Not sure what its doing there
okay, but how do i give the joker a sprite?
use SMODS.Atlas
You have to create an Atlas object and refer your joker to said atlas
for example SMODS.Atlas { key = "jokeratlas", -- atlas name path = "jokeratlas.png", -- atlas file px = 71, -- width of each joker sprite, in pixels py = 95 -- height of each joker sprite, in pixels }
okay thanks let me try that :)
still crashes with the same error
do i add the joker wrong?
add_joker("j_mystic", nil, true, false)
is there any particular reason you want to use add_joker instead of any of the debug tools btw?
yeah i want to make a deck that starts with a joker, it works fine with unmodded cards but crashes when i try to add my own card
ah, I see
The current code
SMODS.Atlas {
key = "mysticjoker", -- atlas name
path = "MysticJoker.png", -- atlas file
px = 71, -- width of each joker sprite, in pixels
py = 95 -- height of each joker sprite, in pixels
}
SMODS.Joker {
key = 'j_mystic',
loc_txt = {
name = 'Golden Joker 2',
text = {
"Earn {C:money}$#1#{} at",
"end of round"
}
},
config = { extra = { money = 4 } },
rarity = 1,
atlas = "mysticjoker",
cost = 6,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.money } }
end,
calc_dollar_bonus = function(self, card)
local bonus = card.ability.extra.money
if bonus > 0 then return bonus end
end
}
no need to add j_ to your key
steamodded will do that for you
then that key will be transformed to j_[mod prefix]_mystic iirc
okay good to know
okay i try that
i changed the prefix to xaver with --- PREFIX: xaver in the steamodded header
sounds good
and use add_joker("j_xaver_mystic", nil, true, false) to add the joker
but there is still the error
functions/common_events.lua:375: attempt to index a nil value
Finally. I managed to fix the crash, thanks to everyone who took the time to help me out
Now everything works as aspected
so i'm editing a sticker from another mod and i was trying to exclude it from having rental and itself at the same time, am i incorrectly referring to rental because all of my other changes worked.
might just be an order of operations thing. stickers currently don't natively support being incompatible with each other in steamodded
basically rental doesn't care about applying after your sticker
huh, is there a way i can wait until after rental then?
how can i make a joker destroy itself?
Look at how food jokers does it
ah i see
hello wonderful people can someone teach a brotha how to make mods to this game, made a mod for tboi once, other than that im blind
look at steamodded
it has recourses
but it's hard if you don't know the rules of lua
i think "gain chips" instead of "gain mult"
maybe "Gain chips equal to 100% of all chip values and 500% of all other values"
you guys know the special website for displaying mod content? how do i make one of my own?
i specifically want multiple separate blinds
How would that work?
so no oo ain't cutting it
Because I'm not sure I see how one Blind with multiple abilities is different from multiple Blinds
separate score
How do you score separately?
why do you ask so many questions when it can't even work in theory
I mean, I'm trying to understand what you want to understand why it won't work
I don't know if it works in theory or not if I don't know what it even is
.
sorry if i'm coming out as rude, but i'm still very frustrated
that's all you need to know why it won't work
No, that's what I need to know for why a specific implementation of [something] won't work
But I still don't know what [something] is
because steamodded blinds always affect G.GAME.blind, instead of its own blind instance
so it will never work
I feel like this conversation isn't progressing
anyone know what this error actually means? the curly braces are seemingly fine (yes there is an ending curly brace at the bottom, screenshot couldnt fit it)
There's probably a wrong number of brackets
or there's something else putting a bracket out of scope
you forgot a comma on line 81(?), name = "nia-watcher"
going mentally insane
ty
i really need something to alert me of my stupid commas 😭😭😭
if that ever happens again just start cutting into your own code
isolate it to a couple of lines and it'll be way easier to spot (though to be fair, the error gave you the 3 lines it happened on)
actually it could still work if the blind "switches" during blind effects but that's really messy. hm.
As I said, it was a scope issue
do you want help or do you want to think out loud
if you do have a solution then you can chime in
Again I can't make a suggestion unless I know what you want to do
So far you've only talked about how you want to do something
The only what I know is that there would be multiple scores
which isn't a lot because there's no word on what a player does to score multiple scores and the relationship between them and progressing the game state
Is it like Pokémon where you select a move (hand to play) for each Pokémon (Blind), and only after selecting a move (hand to play) for each it processes what happens?
And so you have a copy of your deck for each Blind?
I guess we will never know 
is there a way to check if a joker is being viewed in the collection
rn it crashes the game since there isnt exactly a deck to view in the main menu
I think you can check what type of card area it is in
But for this sort of thing you should probably check if there is a deck to view
That should work
yw
Dearth?
diamonds and hearts plus an h at the end for fun
is there a way to get the amount of seconds spent in the current ante, similar to Cryptid's The Clock and Lavender Loop? i tried looking at the code for it in Cryptid but i dont really understand any of it
You basically have to set a timer right when the ante starts
Hook Game:update(dt) - that dt is what you add to your timer
Cryptid’s is much more complex because it’s using that dt to calculate the blind size instead of putting it in a timer
so how do i set a timer when the ante starts
Hook ease_ante probably
i dont know how to hook lol
What is the name of the save editor?
anyone know why using card_eval_status_text like this is causing the text to appear in the top left corner of the screen?
like its up here for some reason
I think you can just find it by googling balatro save editor
Try changing self to card
oh alr
Ok, its not for me, its for someone who its save file got corrupted
developer art is best art 🔥
Joker Sample Text
new Cryptid exotic just dropped
dear lord
M
how badly corrupted?
Oh. That's not corrupted, that's just gone
Lorem Ipsum (Exotic)
Create a random hidden consumable when a blind is selected. (The Soul, Black Hole, White Hole, Gateway, POINTER://)
-# just uses placeholder art
gone
And hello world joker when?
For Cryptid that should be like a code card related joker
plaese oh please 🙏 i need MORE POINTERS MORE POINTERS
i have a problem
I imagine something like creating code cards then self destructing
If else card
That’s already planned
didn't someone make a joker with a whole codeblock in it
like a complete if-else statement
alternate idea
creates a consumable that doesnt show what it is at all
but it is a random consumable
-# by the way if we want to be strict about the Latin requirement, it would be called Dolorem Ipsum
waiter waiter !! more m jokers
iocosa balatro
(Balatro is another translation of joker in Latin)
Nice name lore
I had. A sheet me and my friend made and I was going to try to make an exotic based of a very similar name but i never go around to creating an idea and though it would be too much since we already had 1 M exotic
When the electricity comes on, the first thing I will do will be a manual backup of my save file, which I was already afraid of happening to me XD
I've actually started doing that myself too lol
Actually helped me out recently when I accidentally overwrote my normal save file by starting the game with mods like talisman
I've got a spit-bally idea for another M Joker (that could be Exotic, or Legendary if it's too weak), that's a reference to another game, in case y'all want to see it.
Sure I'll take a look
how can you create a custom joker rarity?
you have to do it yourself, i suggest taking code from Cryptid or using the library i eventually release when i figure out how to properly influence shop pools
ah
there's a custom rarity fork of steamodded but it doesn't really work and seems to be more of a complete rework of rarities which isn't really necessary
there's a chance it gets refined and perfected and merged into steamodded but i don't see it happening very soon
then i might hold off for now and just make my op ideas weaker and legendaries
wdym it doesn't work?
You sound like the first person to test the PR besides me.
So I am intrigued.
🤔
I mean. There doesn't really seem to be any existing steamodded api to deal with rarities so idk what it'd be a complete rework of
Cryptid seems to make their own globals for their rarities
And uses a lovely patch to get them to display
The only snods function I see involved is insert_pool
Cryptid also did some hooks which are converted to injections.
technically rarities were heavily messed with but vanilla rarity logic was super hardcoded.
And even then it doesn't turn into that much
I'll go mess with it rq
So yeah it seems like any changes made to how rarities work were just to make a custom rarity api possible at all
apparently infinifusion crashes at engine/particles.lua when being materialized through ankh and im completely stumped with what i could do to avoid it because of how low level its going
nvm it was because there was no rarity
Wait I think I did screw something up one sec
Or did I not...
Ok I was hallucinating
But from some quick testing it does work as intended and the rate normalization math checks out, so I'm not sure what's broken about it.
I presume, so as to not needlessly break every single existing modded joker, that the indices will still work for vanilia rarities
Yea
There's some backwards compat between int/string rarities for vanilla rarities so on paper both should function the same.
makes sense
so i can't refer to jokers like consumables, so i'm wondering how would i in this case?
betmma just made a joker that works as a consumable
check their code
what i'm trying to do is check the consumables the same way abstract joker checks jokers
oh I see
there are jokers that can do that too
there's one in ortalab
that gains chips for both consumables and jokers
thank you! ill check that out right now :)
np :3
https://github.com/GauntletGames-2086/Ortalab-DEMO/blob/test/Objects/Jokers/Joker LuaList/Art Gallery.lua
it's this one if you're having trouble finding it
the newer dev version probably has it in 1.0 format but it's not public
nvm
i guess the old demo was ported
I just kinda presumed it wasn't
thank you so much, you really go the extra mile to help 
no worries :3
just fixed it I think
we where just taking about your mod i think
would you mind testing with https://ptb.discord.com/channels/1116389027176787968/1264396691365302364?
it's one of my favorite non-content (as in no new cards) mods and relies a lot on specific rarities
hmm, sure
(though boosters are definitely content and i wouldn't be surprised if the game treats them as 'cards' too, lol)
All the non-mod specific rarities work (Epic Pack would need to have the rarity set to "cry_epic" instead of 1).
Exotic already uses a string so it's fine
kinda surprised it works even now, lol. I don't use cryptid though so it's not an issue for me
glad it works for what i'd use
i remember talking about this with someone but i don't know how to get this code to overwrite the code of abstract joker
shouldn't your mod take prescedence if it has a negative priority? or does it need to be positive to take ownership of the object in the first place? (totally spitballing as a non-modder)
(it's probably not how priorities work)
so basically i turn a vanilla object into my modded one, it still has all of the same code but i can mess with it
yes that's take_ownership right?
here overwriting delayed grat was easy because i know how to do this kind of return because it's not much code
but with bigger blocks i have no idea how to return it
does returning it the same way as if it was a from-scratch joker not overwrite the original code?
so returning simply sends back the information, and because i'm using the same function as the original code the info sent back goes over the original, that's why text that needs to update constantly or any value, uses return
I mean wouldn't it still work the same way on abstract then? return the mult and it goes over the original?
afaik the variable you're returning is what makes the difference, not how you calculate it
the original code still running and being ignored seems like it's probably a non-issue
though as I said I quite literally have no idea what I'm talking about, lol
tbh I'd think your calculate function would run instead of the original anyway
so this is what i'm returning, what's confusing me is that this should do the trick but abstract isn't acting as my modded version but vanilla, i don't know if my code works because the value isn't behaving like my code.
your return isn't in the calculate function that I can see
at least your ide doesn't seem to think so. I suck at counting "ends"
no it is
actually no, your ide is parsing it as 2 seperate functions. Calculate ends before return starts
(the whole point of the lines the ide draws is so you don't have to guess, lol)
they are faint with your color theme, but there
well notpad++ doesn't track ends properly sometimes and i would be lying if i said i had the whole picture but in drawing i was able to see and fix a big issue
fair enough
I didn't even know np++ had that sort of ide-like feature at all
I wonder what there is on linux that's between a plain text editor and a full-fat ide
neovim
There's a lot actually in the style of NP++
Kate honestly is a pretty good balance
I mean most default linux text editors mostly get there tbh
xed is what comes with mint and it has things like highlighting for specific languages, line numbers, and some other things. Though it doesn't seem about to show the bounds of a function with lines in the margin like that
which would be useful
hi hello I am trying to make a joker that destroys itself and it crashes at end of round and i have no idea why
if context.end_of_round and not context.game_over and not context.repetition then
G.GAME.joker_buffer = G.GAME.joker_buffer - 1
Q(Event({ -- jenlib my beloved
fc = function()
for i=1,2 do
-- insert function to create a card here
-- there is a function here in my code i
-- just omitted it because it's long
end
G.jokers:remove_card(card)
card:remove()
card = nil
end
}))
card_eval_status_text(card, 'extra', nil, nil, nil, { message = "Split!" })
end
end```
oh nvm i figured it out, you just need to remove the G.GAME.joker_buffer = G.GAME.joker_buffer - 1 line
at a glance, shouldn't fc be func?
anyone know why this joker does literally nothing? tried to copy dna's code but just make it work on the whole hand and it doesnt seem to do anything
no crashes, joker exists perfectly fine, its just nothing happens
pretty sure hands_played gets incremented somewhere in that sequence
try including 1
classic oboe
ok well i tried something else that dupes cards and now theres just certain cards that are literally invisible
yeah that happens if yu don't delete (or make I guess) cards a certain way
they're unselectable too right?
i dont know if theyre selected in the first place tbh but
i would assume so, since my joker was supposed to duplicate every played card
and it was duping cards i didnt think i had played
hmm... not sure what to reccomend that you reference. Mika's Mod has a joker that duplicates all played cards in the winning hand but the code is probably not too useful for modern steamodded stuff because it's a pretty old mod
do u keep everydetail of every balatro mod in your mind
lol, I just play /a lot/ of modded balatro
and have over 900 jokers in my game
either way i just decided to scrap that part of the joker and replace it with: discards now destroy all discarded cards, gain a death card for each discarded card
though i may actually make it give cryptid cards so u can make 1 bajillion cards u like
directly destroying cards in calculate_joker does that
misc_functions.lua
i found it in common_events
Check if context.full_hand exists first
for this
how do I do that? (this isn't originally my code, I have no experience modding balatro for real yet. Just frankensteining together existing jokers)
close enough
i figured out how to make it work even though i actually probably did it very stupiodly
i still have the invisible cards so ya seems like im deleting them wrong
idk what the right way is all im doing is this
if context.full_hand then, don't forget the end
Should be put around the CheckForFaces block
like this? or more or less of it?
Im blind I can't see what you changed in your code
posted the wrong picture
sorry
Keep the CheckForFaces = true above the if line
ah yeah that might be why it's not crashing but also not doing anything atm
I'm not sure if context.full_hand exists with context.other_joker
works now :3 thank you
and I managed to do that troubleshooting in the middle of a run, while winning the blind in question, lol
uhm maybe you should try on a new run
see if it crashes again?
because now it's functioning and not crashing
If you modify a modded joker and continue your run it will keep the the old modded joker data
it.... did not seem to
it behaved differently whenever i changed the code
I restarted the game ofc
I don't think that it stores the code anywhere but the lovely dumps, which it regenerates every time you boot the game
so afaik it couldn't reuse the old code if it wanted to
maybe i'm way off
what if you wanted to make a good looking balatro mod but god said "you must have an upscaled version of your cards"
in any case I'll try it on a clean run before I release the fix publicly
just do nearet neighbor, no need to actually make them higher res
i'm not even sure the official jokers do
wdym
as long as it's integer scaling the pixels stay square
it's a scaling algorithm
that doesn't interpolate really
it's good for integer scaling pixel art
no im just saying i dont like the process of adding new great art and then having to make another version of the file
oh you're lazy
i dont really mind how its upscaled too much
yea lmao
i make my jokers for INSTANT gratification
i turned off pixel art smoothing and Bro what
TBH you could make a python script that does it in one click
truee
just restart the game
done turned my jokers into a puzzle 🙏
"lets see you take a crack at it smart guy!"
yea no its still like that
also, what? I know fuck is blocked in some contexts but I don't get this one
i feel like joe biden rn
you can press M to reload atlases
Tbh it looks like the jokers have the wrong sprite size
yea no theyre just like that now
theyre just a big puzzle
The spritesheet in your x1 folder needs to be half the size of the one in x2
yeah it's not the normal no-restart texture bug then
Still your images needs to have the proper dimensions
ill deal with it when i decide my mod should be mid tier quality at best
to f
smods, it doesnt happen in vanilla
it's because of to
vanilla rarity system
what's the parameters for "hide button if condition is not met"
i forgor
wait im an idiot
I really wish mods was on mobile, games like btd6 luck be a landlord and balatro are more fun with mods, arent they?
just play on steam and relay that to your phone somehow? pretty sure that's possible
on my way to make gaycoonie's defused fork of fusion jokers fusable again
Omw making evolutions of fused defused fusions of jokers
defuses your metafusions
What
idk if i'll actually go through the effort of coding in fusion/defused jokers into the main mod, but the api for that will be there
lmao
werent you also making a fusion mod
i can add built-in support for it later if you want
I know it's usually hard to have 2 of the same joker, but what if fusing 2 of the same joker that can evolve fuses into their evolution? 🤔
absolutely possible
when i finish this update all you'll need to do is just add an optional dependecy file to register them as SMODS.InfiniFusion objects
the update is out
what if
Spectral?
its a joker :3
why decimals
thats the joker effect
+, *, - or / -2.25 to 3.25 to all values
is that just misprint deck on a joker
fucked up evil misprint deck
math.ceil prolly exists
waiter more polychrome hearts 😭‼️
i google translated balatro
At least 100 times?
50 times
each
till it was good enough
im working on blinds tags cards seals etc
but the main jokers etc is done
want v1
It's basically ERROR from Cryptid?
balatro mod that makes it look like theres beer in the background
like the iphone app that makes it look like you're drinking a beer
hi, so im working on this idea https://discord.com/channels/1116389027176787968/1280991980574216192
and i need help from someone who knows what they are doing with lua to make a data base or an api or at least a base source of basic joker functions so i can add those to code blocks in a scratch like tool (i chose to make the menu not ingame)
im making the tool itself, i just dont know lua or balatro modding by itself
if anyones intrested in helping
im trying to make a googel translate mod but i want to have a toggle for the descriptions translations how do i do that?
Cursed
I see nothing wrong here
joker without jolly