#💻・modding-dev
1 messages · Page 127 of 1
any ideas why is the return being skipped here?
calculate=function(self,card,context)
local multAdd = 0
if context.remove_playing_cards then
for i= 1, #G.hand.highlighted do
multAdd = multAdd + G.hand.highlighted[i].base.nominal
end
card.ability.extra.mult = card.ability.extra.mult + multAdd
return {
card = card,
message = '+' .. multAdd,
colour = G.C.MULT
}
end
end
have you verified that context.remove_playing_cards is a real thing
yes
because there's no other branches there
the code above the return is being executed
do you have crash avoider installed by chance
no
then it's either that you've seen something wrong or that context doesn't support a return and you need to use card_eval_status_text
id say use SMODS.eval_this but that's apparently deprecated
ok, I'll try that
nope, that also doesn't seem to work:
calculate=function(self,card,context)
local multAdd = 0
if context.remove_playing_cards then
for i= 1, #G.hand.highlighted do
multAdd = multAdd + G.hand.highlighted[i].base.nominal
end
card.ability.extra.mult = card.ability.extra.mult + multAdd
card_eval_status_text(self, 'mult', 0, 0, 'down', {message = '+' .. multAdd})
end
end
in text, you have to add commas after each string
thank you
Whats wrong with this?
Apparently aure merging better calc deleted it (so litterally was removed like the next version)
but its not in the git diff
it's werid
huh
Here https://github.com/Steamodded/smods/blob/2f42d2c4ceadca4dd2f858d2426a04c630549700/src/utils.lua doesn't have it. The previous commit does though https://github.com/Steamodded/smods/blob/74cf5aabcd4fde92d769612b5b3bb8f9347892eb/src/utils.lua
Uh
My Balatro was working
I re-enabled Cryptid
And this happened
What do I do
Only change was enabling Cryptid
free some memory and try again
yo, is there a specific master post I should be looking at if I'm trying to get into mod creation?
closer to truth
use pairs not ipairs
might not be the issue in question but
you should use pairs
This card is SUPPOSED to give 5 mult when a two pair is played, and X10 mult when a four of a kind is played. Instead, it gives those values to every single card that is played instead of the hand itself. Anyone know how to fix this?
Unintentionally way more powerful than anticipated
sadly didn't fix it
for SMODS.Booster, how can I have the suit for all created playing cards be the same (e.g. Hearts)?
create_card = function(self, card, i)
local _card = create_card("Base", G.pack_cards, nil, nil, true, nil)
return _card
end
how am i going to get this to work?
im confused
i want it to gain mult when the consumable is used
SMODS.change_base
if context.other_consumeable and context.other_consumeable.config.center.key == 'c_crv_mp' then
card.ability.extra.mult = card.ability.extra.mult _ card.ability.extra.mult_gain
return {
message = 'Upgraded!'
}
end ```
would this be the same for consumable types?
you could check the type yeah
would I be able to remove stone enhancment using this, or would I need to use something else?
this would not account for stone cards
still did nothing,
what smods version are you on
yeah bettercalc is ready now
What should I use to remove stone enhancement then?
this will only work on better calc
is G.playing_cards correct to get the list of cards in the deck?
I should reword the warning in the install for better calc
better calc?
new steammodded update
I think I fucked up my game
it won't even launch anymore even without mods and after I verified my files
I have no idea why
still needing help with this if anyone knows the solution
Is this better for the warning?
what is the function for redeeming vouchers (not the SMODS one, the one in game)?
ok
it upgrades it if it is in my inventory though
oh you want it when it's used
yeah
context.using_consumeable iirc
aight
instead of other_consumeable
ima try it
how do you add a card to your deck? is it something like G.playing_cards:emplace(_card)?
is there a table in game with all vouchers?
I think so
i replace both right?
I have a Joker that is supposed to give mult or Xmult depending on hand played. It's doing that correctly, but it's making the cards played give the mult or Xmult instead of the Joker, so it ends up retriggering 4 times. Can someone help me fix this?
G.P_CENTERS has them iirc
?
hi sorry im having a weird modding issue i couldnt find a fix for so i figured id come ask here!
im making a stupid texture pack mod but the tarot sheet isnt working properly?
the tarot cards are displaying properly, i tested it in pink but it only replaced 5 of the spectral cards (that i actually changed all of) and none of the planet cards (which i also marked in pink)
ye
does anyone know why I cant access cards properties from G.playing_cards?
how are you changing the sprites code wise?
using a texture pack template mod and just replacing the textures there
it all worked 100% fine until i modified the tarot sprite sheet
so you are just redefininf the atlas?
@wintry solar sorry for the ping
i honestly dont know how any of the code stuff works at all i just wanted to make a silly texture pack
but id assume thats something im doing????
idk
snded code
how do i check how much you have scored at the end of the round? what is the variable and do you need a to_big?
this is all ive got code wise, just what came with the template
shit i probably didnt untag you auugh
got it working
just had to remove using_ from the second one
ew why do I see smods 0.9.8 code
what the hell is going on here 🙏
4 thirteen straight flush
idk when i downloaded steamodded it told me to grab an old vers
and this template is also probably old too lol
is that freddy fazbore
yea lol
im making all the spetral cards fnaf at freddy's cause i thought itd be funny
does the context contain the amount of chips scored
how would one add a new consumable to the collection ui
do you mean a new consumable type
yea
i wanna send you something but technically its against the rules for self advertisement
uhh
`SMODS.ConsumableType {
object_type = "ConsumableType",
key = 'Land',
collection_rows = { 3,4 },
primary_colour = HEX("E08C50"),
secondary_colour = HEX("97572b"),
loc_txt = {
collection = 'Land Cards',
name = 'Land',
label = 'Land',
undiscovered = {
name = "Not Discovered",
text = {
"Purchase or use",
"this card in an",
"unseeded run to",
"learn what it does"
},
},
},
}
SMODS.UndiscoveredSprite {
object_type = "UndiscoveredSprite",
key = "un_magic",
atlas = "un_back.png",
pos = {
x = 0,
y = 0
}
}`
thats the code, and i am unsre what im not doing right
How would I use ease_background_colour(self) for SMODS.Booster to change the background color to a defined one?
this should work if im not mistaken
(im probably mistaken)
is there anything i could maybe be missing?
is there a way to modify the boss blinds chip requirement?
i do belive so
via code btw (as a joker)
would i have to have at least 1 consumable implemented to have it apear
are you trying to modify it additivly or multiplicitive
I am trying to cut the chip requirement in half whenever a boss blind is selected
have you tried refrencing any mods that do something similar
silly little oopsie
no, I should probably try that
nope, couldn't find anything there
stupid question, where do i check base game joker code?
i think in the lovely/dump is where you can find some of it
but using 7zip you can look in the exe file of balatro
ye i knew the second one, i just dont know which file contains joker code
i need to make something similar to dna so looking at the dna code would be of use
i think its card.lua
many thanks :]
@nocturne estuary did you look at data/joker.lua in the SDM_0's stuff
cuz cupidon does a similar thing you are trying to do
yes, but it doesn't have what I'm looking for
how do i add a counter to a joker's description? akin to the one invisible joker has
is there a way to remove this circle question mark here?
if not delete, how can I change it?
looks like it hasn't been discovered yet I think
i know, but i dont want the icon in the middle.
can anyone tell me what is wrong with my code? i am trying to make a joker duplicate played glass cards
I don't think that is how you do for loops (altough I could be wrong)
shouldn't it be?
i am inept in lua, thank you, i will try and see if it works
same here lol
I am also not that good at it
:/
what mod is this
remove the in (sorry that I wrote it, I kinda wasn't thinking)
texture pack template mod
https://github.com/emihead/balatro-texture-pack-template
works, and does clone the glass cards, but crashes right after scoring them
how do you access the level of a modded poker hand?
idk what that could be though, probably check the arguments for the juice_up function?
line 1215 is not related to juice up
what is the juice
imma search it up in the fileù
are you checking the lovely dump?
fixed.
using card = card
instead of card = self
stupid solution but if it works it works
yeah self is your center not your card
how would you do the config for the text field of loc_txt when making a planet card for a modded poker hand?
this might be too cruel
So one thing I noticed is when I resume the run from the menu, all the cards lose the property cs_fake (which makes them score negative)
where are you storing the property
function Card:init(X, Y, W, H, card, center, params)
originalCardInit(self, X, Y, W, H, card, center, params)
self.cs_fake = false
end```
here
ty I'll try that
you might need to wait for Card:set_ability to be called
nto sure the exact specfics of it
We get a bit silly
Name it "What are the odds?!" instead
Cruptid rigged
function Card:set_ability(center, initial, delay_sprites)
original_set_ability(self, center, initial, delay_sprites)
if self.ability then
self.ability.cs_fake = false
end
end```
Worked like a charm, thanks
iirc rigged "only" increases the odds by 1e9
so this would still be about 1 in 10
which is if anything funnier
you can't even rig it
for implementing the use method of SMODS.Consumable, I can get my modded hand to upgrade, but the text above the chips and mult display is blank. It will show the lvl after its leveled up, but the hand name doesnt appear. Why is that?
use = function(self, card, area, copier)
level_up_hand(self, base_mod_flush.key, false, 1)
end
anyone know what i should make this guy do
Can i make a card type that just makes you lose the game
Is it possible to change a value in a joker master after ots created
Like say i made SMODS.Joker{ some stuff }
and then later in the code i change its order value
you can access it's center (if you make it you can just store the result of SMODS.Joker and index it)
Ok
doubles everything but you only have one hand
Im trying to make a table based ordering system for cryptid
to get a modded poker hand's level, do you just call <poker hand>.level? It always displays 1 for me, even when I level it up several times.
how do you get poker hand?
if you get it from G.GAME.hands, that works
I defined it ealier and save it to a var, like local mod_poker_hand = SMODS.PokerHand{}
would I use the hand's key for that?
yes
idk how hands work but if its like centers, this value is jsut used for making the hand (when startign a run in hands case)
exactly
otherwise it would be a mess to reset when starting another run
here's my other thing:lua local zodiac = { object_type = "ConsumableType", key = "Zodiac", primary_colour = HEX("4076cf"), secondary_colour = HEX("5998ff"), collection_rows = { 3, 4 }, shop_rate = 0.0, loc_txt = {}, default = (SMODS.Mods['jen'] or {}).can_load and "c_cry_oboe" or "c_cry_crash", can_stack = true, can_divide = true, }
i don't quite get these lines, could someone explain? (i pulled this from Cryptid)
default = (SMODS.Mods['jen'] or {}).can_load and "c_cry_oboe" or "c_cry_crash",
can_stack = true,
can_divide = true,```
Ortalab moment
can_stack and can_divide are incantation properties that tell it if the card can be stacked or divided
Maybe tartarus should be leap day?
default is the card that gets created when there's nothing available in the pool
nahh it's a reference to the 25th hour (Persona 3)
i.e. if you have every tarot in the consumable slots or shop, arcana packs will default to spawning strength
ahh okay that makes sense
Would it be possible to add a win round condition to my joker? As on the absolute off chance someone gets lucky enough to hit the mult, I would like the game to continue rather than just end.
what does the first part of that line mean? with the jen
also, remind me what those two do again? ^^
its being used to check if the mod with id jen (jen's almnac) can load (aka it's installed and not disabled)
ahh icic
What does the V:1 in the planet's localization do? is that the level coloring? It crashes when I use it.
it's a color variable
if you want to use it, you need to define the color var in your loc_vars
like return { vars = { 'var here', colours = { G.C.WHATEVER } } }
Where do the Planet cards have their level colors? I cant seem to find them.
screencap a level, get the hex color and %hex in VSC
The colors there change based on the poker hand level. Where are those colors stored, because they are probably changed in the update method.
They are put in loc_vars
It appears i have failed
how do i add a card to deck from shop without it showing up on the screen like an ugly roach?
like if i want to add a card on reroll
Which file is that in?
it's part of generate_card_ui in functions/common_events.lua
Awesome, thanks!
is this ok as common
this is very long and takes a minute to process
cool idea though! and i think it fits as common
you mean its too wordy?
I would change the so long as there are any left to just resets when there are no fake cards
6 cards in your deck become Fake
Gains +9 Chips per hand played without Fake cards
Resets if there are no Fake cards in your deck```
the first line doesn't really work
oh unless it is just always the current value
but still needs something to say it adds 6 when obtained
how about that?
I suppose if you manage to destroy all 6 fake cards, you could keep the chip bonus but it wouldnt scale anymore
I almost wonder if it would make sense to get chips per fake card in deck
so if you have like 12 fake cards it scales twice as fast
experiencing a bizarre problem trying to make this joker, error at line 54, } expected (to close { at line 53) near '=' but I'm not seeing a way where the syntax is necessarily wrong
thats not how table names work
hmmm
When this joker is obtained,
6 cards in your deck become Fake.
Gains +9 Chips per consecutive hand
played without a (scoring?) Fake card.
Resets if there are no Fake cards in your deck
hmm, still pretty wordy though
tbh it could lose the resets when there are no fake cards, idk
sorry if you weren't talking to me, but what do you mean?
i'm working with a very low functioning knowledge of the mechanics after running through the SMODS TutorialPack lua file
you are returning a table but you seem to just wwant to be settign values of existing things
ah
you can't just put expressions statements like G.GAME.dollars = 0 inside a table
you only want the message in the return table here
the rest should just be normal statements
the consecutive part is a good substitute
Oh okay
Finally I got them working. I think they turned out good.
other image got messed up.
hello, im trying to check for if a card has any enhancement at all, but i cant seem to figure out how to. i tried a lot of different functions but none of them worked, even checking for a specific enhancement like 'Glass Card' doesnt seem to work for some reason.
this is the computationally more expensive version that accounts for quantum enhancements
if next(SMODS.get_enhancements(card)) then
this is the basic version that doesn't
if card.ability.set == 'Enhanced' then
yoyo! adding packs, and looking at Cryptid's code again, i'm confused about where G.C.SET.Code is defined, and where i need to define my own G.C.SET.Zodiac. and i'm also generally lost. help?
local pack1 = {
object_type = "Booster",
key = "phanta_normal1",
kind = "Zodiac",
atlas = "pack",
pos = { x = 0, y = 0 },
config = { extra = 2, choose = 1 },
cost = 4,
order = 1,
weight = 0.96,
create_card = function(self, card)
return create_card("Zodiac", G.pack_cards, nil, nil, true, true, nil, "phanta_zodiac")
end,
ease_background_colour = function(self)
ease_colour(G.C.DYN_UI.MAIN, G.C.SET.Zodiac)
ease_background_colour({ new_colour = G.C.SET.Zodiac, special_colour = G.C.RED, contrast = 2 })
end,
loc_vars = function(self, info_queue, card)
return { vars = { card.config.center.config.choose, card.ability.extra } }
end,
group_key = "k_phanta_zodiac_pack",
}```
also, i don't get why the weight for normal boosters is 0.96
ive tried both of these and they have not worked either unfortunately
show code
this should work when i use any enhanced card, right?
this gets added automatically through your consumable type's primary_colour
you're checking if the joker is enhanced (which it isn't)
ohh i see
context.other_card is what you should target
thanks!!
np
a follow-up to this now that I've tidied it up and it now 80% works - what exactly would I do to set money to zero? I just shot in the dark with that one
for new calc with a enhancement that does an in hand effect, whats the proper check? I was helping someone and they had if context.cardarea == G.hand and not context.repititon and not card.debuff then. However, this condition matches the check_enhancement check
if context.cardarea == G.hand and context.main_scoring then
Just found out that context.open_booster only happens when the open booster pack animation is finished,
but I need a trigger at the moment you buy a booster pack.
Does anyone know if such thing exists?
if context.end_of_round and not context.repetition and not context.individual then
card.ability.extra.rounds = card.ability.extra.rounds + 1
if card.ability.extra.rounds == card.ability.extra.roundReq then
card.ability.extra.active = true
local eval = function(card) return not card.REMOVED end
juice_card_until(card, eval, true)
end
end```
can someone tell me why this just crashes the game? is it where it's placed in the main code, or something with this chunk itself?
there's a hook that prevent removal when this card has absolute sticker, but how to bypass check if the player sees the deck or collection?
local hooke = Card.start_dissolve
function Card:start_dissolve(...)
if self.ability.unbreakable then
SMODS.eval_this(self, {
message = localize('k_nope_ex')
})
else
hooke(self,...)
end
end
local hooke = Card.shatter
function Card:shatter(...)
if self.ability.unbreakable then
SMODS.eval_this(self, {
message = localize('k_nope_ex')
})
else
hooke(self,...)
end
end
local hooke = Card.explode
function Card:explode(...)
if self.ability.unbreakable then
SMODS.eval_this(self, {
message = localize('k_nope_ex')
})
else
hooke(self,...)
end
end
local hooke = Card.remove
function Card:remove(...)
if self.ability.unbreakable then
SMODS.eval_this(self, {
message = localize('k_nope_ex')
})
else
hooke(self,...)
end
end
local hooke = Card.can_sell_card
function Card:can_sell_card(...)
if self.ability.unbreakable then
return false
else
return hooke(self,...)
end
end
also i'm sorry for message bomb
maybe context.buy_card? but idk for sure
this seems like a terrible idea
you can check the area the card is in
but also things like the card needs to be removed when qutiting tio the title
I used "context.buying_card or context.open_booster" as my if condition but it works on jokers but not on booster packs.
I want to break my mod's main lua file into seperate files for different parts (packs.lua, consumables.lua, etc.). How do I improt them into the main lua file?
Snagged from pokermon.lua on github:
you can also just assert(SMODS.load_file(...))()
how do i fix this
All I'm going to say is that I'm getting REALLY close to figuring playing cards out somewhat
Are you sure you need to hook* Card:remove? I thought that that was more of an internal function?
figuring them out how? How they work?
Would there be any issue if I set G.GAME.reroll_cost to zero/double?
hey gang, so this increases eor_boss_discards by 7 for some reason, I presume because it's activating every frame. How do I fix that?
probably too broad of a context?
either print out your context or look at some vanilla jokers
i need to make some kind of bypass
when it's on view deck window or collection
also if I'm not misunderstood in order to take_ownership of a calculate function it needs to have the exact same contexts correct?
well these are a bit busted aren't they
where did the +5 chip thing go
what +5 chips?
you know when you play a vanilla card it tells you how many chips you gained
bonus rare card
okay what if the joker I'm trying to modify doesn't even have a calculate function, how do I override it's original effect
see i would use a hook for that
How to you ensure a modded tarot works with The Fool? It crashes when I use the modded tarot and hover over the fool with center as a nil value.
oh my fucking god i think i have to set a metatable on context.blind to do what i need to do
you KNOW nothing good can ever come out of me saying 'i have to set a metatable'
if im understanding this right, does this mean I have to use localization to make my tarot work with Fool?
oh god i have to dive into the hellscape that is calculate_joker
if its in the Tarot or Planet set it'll work
Its in Tarot, but it crashes when I hover over Fool after using it.
-# the deck is not in fact colourful, i don't do sprites
i think it sounds nice, would encourage straights or five of a kinds
-# i could add cross-mod support for asc hands
taking sprite suggestions for it btw, rn it's just an orange deck sprite
oooooo im a pixel artist want me to take a crack at it?
sure
mkay! quick questions, what colors are your custom suits
well according to the text colour, moon is dark purple and star is pink
that's more grayish than what i was thinking
they're what
thank you!
the same colors as in the description above
yeah makes sense
looks like this in-game
Well, if the point of the deck is overwriting Moons and Stars, I think the deck should have the Moon suit's color, with the Moon and Star insignia on opposing sides of the center... and then a massive splash of paint in one of the four main suit colors on one of the corners.
Red or Yellow probably, since the Clubs and Spades aren't consistent enough
Hey guys where is the main portion of the cash out screen located?
I am very proud of this Joker
the art hurts my brain
what in the world
Its a makeup less Joker
He's too straight to wear makeup
how did you made custom card that isn't rank or suit or enhancement
not even clown makeup lmao
bro got otherworldly straightness
Is that joker from texas
Yes
Also yes
how to bypass checks
#1318248620125851749 has the files
anyone got an idea for what these fellas could do for their ability? (ignore the unfinished clown hair)
this
UI_definitions.lua
For the American flag one: +20 mult if scored hand contains a J and a 6
Name: Insurrectionist
@viscid bough Also real talk if you aren't doing the idea I just said, can I use that art for that idea in my custom pack that I'm only sharing with friends?
sure, id have to get a 1x size version if you want it
I appreciate it, i appreciate it
Nah i can downscale it myself
I appreciate it though
if you have an issue down scaling it i can send a 1x though just lemme know
Bet
how to fix that thing
hook lua
fixin that thang
how can i detect when a specific consumable card is used?
you could check .ability.name
and how can i detect a consumable being used to check its ability name?
I suggest you check https://github.com/Steamodded/smods/wiki/Guide-‐-Joker-Calculation
should be context.using_consumeable
anyone able to explain what
INFO - [G] :: DEBUG :: Test :: context = {
destroying_card_hand = table: 0x1f3e98d0,
full_hand = table: 0x1f070588,
}
the destroying_card_hand context is? 🤔
the code implies it's supposed to trigger once per joker per played card
it seems to be for... destroying cards held in hand?
idk
that's just by the name
I could be wrong
weird thing is that if I play a 5 card hand my joker receives it 3 times
but if I play high card I get it... 6 7 times?
correction, 7
yeah then it's for cards held in hand
Is there a file where all the possible context values are shown?
not really
this guide is a good start, and better documentation is being worked on
nothing actually organised anyway
that guide's the best we have, the rest you're going to have to go through the code
thank the lords
in the source code it's also not nicely in one place because all sorts of things in the code get calculation contexts, which is unimportant to where they actually are
so that's not the most helpful
but the only thing available beyond those docs so
guess i should also ask about getting the consumable card thats being used when using_consumable is true
Okay guys help me out do you guys think that this deck effectively incentivizes skipping
is that not in the guide I linked?
Moving out of Steamodded's thread, this doesn't show up the messages I need, instead just being two blanks. Still attempting to update for BetterCalc.
return {
x_mult = card.ability.extra.x_mult > 1 and card.ability.extra.x_mult or nil,
xmult_message = card.ability.extra.x_mult > 1 and localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.x_mult } }) or nil,
x_chips = card.ability.extra.x_chips > 1 and card.ability.extra.x_chips or nil,
xchip_message = card.ability.extra.x_chips > 1 and localize({ type = "variable", key = "a_xchips", vars = { card.ability.extra.x_chips } }) or nil
}
you need eval_this to show multiple messages
This is BetterCalc, forgot to mention.
For old-calc, I used eval_this for Xmult and return for Xchips.
I believe you still can't multi-message in bettercalc?
you can use SMODS.calculate_effect({effects}, card) though
(unless extra can do something like that? no clue tbh)
Found it!
lez go
I mean, to get to the shop you need to skip, and since you usually want to get to the shop... I'd say so yeah
Those just show blank duplicates... and I'm not even using any returns, yet the effect occurs independently.
Anyone able to help me figure out my error?
Supposed to be +20 mult when a Jack and a 6 are scored together
It did nothing
I played a two pair with Jacks and 6s
You're checking if a given card is both a Jack and a 6. You should iterate over the scored hand and check if there's a Jack and a 6 outside.
I have no clue what that means if I'm being honest with you
I understood the first sentence
See this as a example for that.
Which Joker should I be looking at?
The link should've highlighted the lines for the function that I use.
y2kbug
It did not
138 - 149 for external function that I use for checking if I had a 2 and a King, 167 - 170 for actual thing.
I'll be honest I'm so new to Lua, I have absolutely no clue what Im looking at
I attempted to throw some of that into my code to see if it works
Did this as soon as I played a hand
Line 411 is...? Show code around that.
I've never done any local functions
So I literally have no clue what I'm looking at
You define local jack, but use jacks.
Also, only incrementing sixpresent in both 6 and Jack checks.
holy shit i fixed madness
i have a challenge that replaces all blinds with boss blinds
does anyone know how would i make a joker add to a (mult) counter after a certain number of rounds?
unfortunately that means madness and other boss blind jokers didn't proc
i solved this with this incredible proxy object
sixes
local sixes, jack
sixes not six
I'm so confused
Why is one of them plural
you named the variable in plural
to sixes
proxy objects could solve so much shit for me in this mod i probably should spin up a tiny library to make them
whichever fr as long as everything matches
ok cool
hey gang how add probability effects to joker
you'd wanna use the pseudorandom function
look at gros michel's code
honestly a good answer to "how do i do X" where X is something thunk did in vanilla is always "look at the code for the X in vanilla"
so it didn't work exactly as I planned
But I'm not going to fix that, I'm just gonna rewrite the text to what it does lmao
Thnx
you also want your locvars to specify half of the chance's fraction
like X/4
(where X is normally 1)
this is for the sake of oops all sixes
I peeped a couple jokers that used chance effects but I didn't realize what the call for the effect was
forgot to elab on this ok so
"{C:mult}+#1#{} Mult in",
"final hand of",
"the round",
"This Joker gains",
"{C:mult}+#2#{} Mult every",
"3 rounds",
"{C:inactive}(Currently {C:mult}+#1#{}{C:inactive} Mult)"
this is the effect of the joker as a whole. i got the first one down (thank you dusk) but i cant figure out how to do the same thing with the second effect? i tried experimenting with invis joker's stuff since it had a counter, but it wasnt for mult so idkkkk
i have been modding this game for like a week and i'm getting into bullshit like proxy objects man this is fun
im excited to be able to do cool stuff like that fr
learn lua!
the only reason i can do this kind of shit is because i've been coding in lua for like a decade
learning!
I think you could be able to get away with it by having a value for a ticker that you initialize at 0, count up once each round in your calculate function under joker_main, and check if it can be divided with a remainder of zero. If it can, then add whateve to your #2# variable
Does that make sense?
I'm new to this but some ooooold old coding knowledge is slowly shaking off some rust
ok let me break it down rq 😭
ok so i would first create the tick before the calc function yeah?
honestly a funner ability than my original idea of giving X3 mult if the hand contains only clubs and hearts
yeah i see you have #1# for the amount of mult you're using, #2# is the amount of mult you're adding to #1#, you're gonna want to have actually two more variables, one for the amount of rounds you want to wait before 2 is added to 1, and one for the ticker
how would one check if a card has a specific suit
there we go, cooked up a simple library for creating proxies
i see i see let me do that
`Island_land = SMODS.Enhancement {
object_type = "Enhantment",
name = "mtg-Island_land",
key = "Island_land",
atlas = "island",
pos = { x = 0, y = 0 },
config = { extra = { Xmult_mod = 1.25 } },
weight = 1,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.Xmult_mod } }
end,
calculate = function(self, card, context, effect)
if context.cardarea == G.play and not context.repetition and not card.debuff then
if card == suit_clubs.key then
return {card.ability.extra.Xmult_mod}
else
SMODS.change_base(G.hand.highlighted[i],suit_clubs.key,nil)
end
end
end
}`
the code for ns_proxy:
-- Nightshade's Proxy Object Library
-- (originally for Balatro)
ns_proxy = {}
function ns_proxy.make_proxy(data)
assert(data.target, 'make_proxy: nil target specified')
assert(data.proxies, 'make_proxy: nil proxies specified')
local obj = {}
local obj_proxy_meta = {
__index = function(self, idx)
if data.proxies[idx] then
return data.proxies[idx](data.target)
end
return rawget(data.target, idx)
end,
__newindex = function(self, idx, val)
if data.set_proxies and
data.set_proxies[idx] then
rawset(data.target, idx, data.set_proxies[idx](data.target, val))
end
rawset(data.target, idx, val)
end
}
setmetatable(obj, obj_proxy_meta)
return obj
end
context for my question
where would i have the ticker go though? it wouldnt be in the joker desc so i wouldnt need a #4#{} would i?
nope you don't need that
yeah no the #1# are "locvars", aka "localisation variables"
yeah counter, that's a better word
they're only pertinent to what the text in game is displayed like
Ohhhhh so you don't need to have any non-visible variables in loc_vars and just initialized under configs?
dont need a locvar if im not showing the counter (it'd get too cramped/bloated? in the desc)
no, loc vars are only for things you want the player to see
gotcha
i fucked with the locvar system a good bunch in my challenge mod for the descriptions for the effects
so i know how it works
comical amount of work went into drawing this little text
checked there many times
oh fr
part of my lovely hook for the challenge description localisation stuff
then there's another hook in localize
then there's ANOTHER hook in loc_colour
just so there's pretty colours when a showdown blind is specified in this modifier
in that case check out the code for castle (the joker), it has to check for suits so it knows what you discarded
oooo
fucking implemented a custom context-sensitive colour tag
imagine it did hex
Arts mostly done, still need to clean up some parts, but a h, glad I got it all working
aint no way
you should specify it in E notation to be funny

one ://SEED and it's over
made two diff vers!
10e1834097
would be funny
files for an atlus or individual .png reference in the code
those are some really pretty deck sprites wow

oh those are pretty wowww
:D thanks it took forever to figure out how to make the circles centered properly on the card in aseperite
ok but what deck
Should I remove the commas, or keep em in?
10e1834097 vs 10e1,834,097

without
real 😭
yayyyyyyy
now give it the xmult box 
im working on coding my first custom jokers (real tame things tbh) wanna see the art?
suree
im making the jokers give x1.5 mult for each card of the corresponding suit held in hand. was gonna go .5 but that would make it divide and i was worried abt that for balance, so i jsut upped the rarity and cost accordingly instead
I just get "nil" when I try to put it in a box
-# ok but where though
are you fr....
oh god its baron for checkered deck
What I have is: "card gives {C:red}#X10e1834097#{} Mult",
What I get in game:
prolly doin it wrong
ah okie okie
if it helps theyre set as 'rare' for rarity
{X:mult, C:white} for the red box with the white yk what i mean iirc
well yeah they are around the same quality so rare should be good
can someone tell me why the note in line 3 is true? Like I don't understand what in that line defines "#1#" with the value put after "Xmult ="
ok so locvars start at #1# and move onward right
this is what i have for code rn, it would be real helpful for a double check b4 i make copies of the code for each suit
key = 'pridefuljoker',
loc_txt = {
name = 'Prideful Joker',
text = {
"{X:red,C:white} X#1.5# {} Mult for each",
"{C:hearts}#2#{} suit held in hand",
}
},
config = { extra = { Xmult = 1.5 } },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.mult } }
end,
rarity = 3,
atlas = 'SinfulJokers',
pos = { x = 0, y = 0 },
cost = 8,
calculate = function(self, card, context)
if context.other_card:get_suit("hearts") then
return {
mult_mod = card.ability.extra.x_mult,
message = localize { type = 'variable', key = 'a_mult', vars = { card.ability.extra.x_mult } }
}
end
end
}```
since the only variable is that one, no others are needed to be returned so #1 is assigned with the Xmult
Oh so any further variables added get assigned with the following number?
did you check ingame first ofc
youd have to do it but yes
How would I make oil lamp blueprint compatible
no i got distracted by pixel art then dinner, but was gonna do that next
#2
#3
etc
Okay, red box works, but the font is still black 
whar
{X:mult, C:white}X10e1834097{} right?
put # aroudn the numbers
you forgot the #...
ah
like X#10e1834097#
okie
Thank you 
im hoping that's not where
because that means he's about to create a variable assigned as
10ebignumber
SMODS.Joker {
key = 'pridefuljoker',
loc_txt = {
name = 'Prideful Joker',
text = {
"{X:red,C:white} X#1.5# {} Mult for each",
"{C:hearts}#2#{} suit held in hand",
}
},
config = { extra = { Xmult = 1.5 } },

this section, where it assigns the description and key and stuff
between the hashtags is the variable not the desc
you use the config to give the variable a value later
tldr change #1.5 to #1#
YOU TOO
define your value in the config section not the loc txt
{X:mult, C:white}#1#{}
etc etc
config = {extra = {Xmult = that big ass number}
nvm fixed
you can tell this is my first time actually coding
but! i think im understanding it i think maybe
literally day 3 right here
i c/p jsut the desc coding section earlier sorry it was confusing
because it needs something to read
How do I add thumbnail to my post in #1209506514763522108?
oh i have no idea i havent even used it
no otherwise your code's fine unless i missed something
just change the 1.5 in the variable section to 1
Should just be this iirc
ah yes the big thumbnail button of course
Sorry, I mean a post I already made
doesnt look like you can
Yeah, I don't believe you can
thank you after staring at the code for a few more moments i understood
Wait actually you can
wait fr
if you send an image in the post chat, it'll prompt you to add it to your cover
well there you go then
does anyone know where the vanilla jokers are located in the lua files? i wanna double check some stuff but i cant figre out what lua file to look in (localization just has the textboxes, not funcionality to my eyes but maybe im missing smth?)
but that has to be the first message....
discord, istg man
😭
I did saw it but I was sharing a screenshot that I didn't want to make it as the post thumbnail so I clicked no.
And that prompt is probably not coming back isn't it
not by the looks of it 😭
im gonna shit my pants
well it's working that's for sure
your scoring doesnt have a high enough limit though
vanilla joker behaviors,,, are hardcoded,,,
darnit
I added a link of my icon into the head post and it worked!
:o
yayyyy
Even better thing is that the link is toward my mod github.
Which means technically I can change it whenever I want.
sickkk
also this is an ad for talisman
I already got talisman dawg
then turn it higher
higher then omega?
[Insert Kylo Ren "MORE" meme]
your number is just that high ig
ok so what you can do insteadddd
im not scrollin all that h
fine i wil
what if you use cryptid and use seed card into this
it always gives 1.0e1834097 mult
it's always 100%
My probability is higher then they accounted for
only thing I know works is the AAAAH?! It's Infinity!? joker from snows mods
Cause that boosts base by 10^300
cryptid is like 10^9
mine is like 10^10
quick q: I'm using card_eval_status_text when my joker copies a playing card to flash the 'Copied!' message. it works, except when the joker is copied by blueprint, the message shows up under the original joker, rather than under blueprint. is anyone more of a card_eval_status_text understander than I am to know what could cause this?
nvm, read some source code and found out about context.blueprint_card
i thought you were using it alr lmao
so i started searching
yeah the one labeled blueprint may or may not help you with blueprint
also remember if you want it to say that it's compatible with blueprint (visually only it's a separate thing), put blueprint_compat = true before your locvars section
yeap, I'd gotten that stuff
kk
Alright no calling me stupid allowed, but simply cannot figure out how to add new variables
This obv aint the way
in what way is it not acting how you hope
#2# doesn't call the variable
what does the body of loc_vars look like
so you need to put the second ability inside of the vars = {blah}
because doing it like that, if I recall my Lua properly, sets it to index 1 or 2 or something you're not wanting
Oh like with the same {}
ye
😔
Oh wait
Nvm I though it was cause I missed a space i have no clue why its crashing
what's the body look like now
odd... those brackets look matched
Thats what im sayinnn
i made it math.huge so it's literal guaranteed
wait what is the difference between center.ability and card.ability
this guy was spitting
nah dude was shittin
not enough apparently
I've used seed and have yet to hit the mult
would this have changed in a recent update?
cause I haven't updated my mods for about 2-3ish days
okay yeah
with seed it becomes 1/10

took me a bit but I finally hit mult
nvm its 1e9
look for a function named calculate_joker
now read it and despair
yes it is the math.huge is largest number and it has higher chance than AAAAH?! It's Infinity!? joker from snows mods, and rigged from cryptid
in fact math.huge is ieee 754 infinity and you can't get any higher than that
Well with snows joker card, it hits every time, with seed it hits 1/10th of the time, so I don't know what to tell you dawg
😭
for example the card that hits 1 over 10^304, seed hits 1 over 10^295, AAAAH?! It's Infinity!? hits 1 over 10^4 and math.huge hits every time
i'm glad i managed to fix the bug where madness was thinking every blind was a boss blind even if it was on the 1st or 2nd blind of the ante
srry for the block of code but is this just like the sound or is it something else
I have a dummy project going on for my mod (trying to inject the "touch controls" on desktop (dragging cards to buy/sell/use) and I have a few questions which might me noob modding/lua questions but:
-
is there a way to write
patches.patternpatch blocks from like, a Git diff? -
I guess it's more of a Lua/Love2D question but: if I want to override the method of a class (let's say
Card) do I need to do it inside ofcard.lua? And can I just add my ownCard:foobar()method and it will take precedence over any existingCard:foobar()method?
i did it by hooking the start of calculate_joker and overwriting context.blind with a proxy object that has its boss field modified depending on whether it's the last blind of the ante (via my custom system that tracks it because that was broken too)
- no, you have to do it manually
- if I wanted to override a method entirely I'd use a Lovely patch to insert a
returnstatement before the rest of the code I didn't want to execute
like uh, inserted code would look like
function Card:foobar(params)
return my_card_foobar(params)
-- rest of original Card:foobar here, which never runs
you can also use position='at' patches
which delete the pattern altogether and replace it with the payload
Seed only gives 1e9 for me man
tryingto make a challenge but i cant get it to give you a joker?
probably set this up wrong can someone help me pls
why don't you understand
I'm just confused about what you are trying to tell me quite honestly. All I said was Seed doesn't work 100% of the time, and it is about a 1/10 chance, The only card I know capable of always hitting the mult is snows infinity dice joker, since it boosts the probability up by e300, not e9 like seed does. So from my point of view, it seems you are trying to say I'm incorrect, when what I am playing with shows otherwise. /nm /gen
gang what this mean
do you want to try my mod where it has true infinity chance to hit?
check my dm
and try increasing tower of babel to 10^304, it will prove this is infinity chance
`Island_land = SMODS.Enhancement {
object_type = "Enhantment",
name = "mtg-Island_land",
key = "Island_land",
atlas = "island",
pos = { x = 0, y = 0 },
config = { extra = { h_x_mult = '1.25' } },
weight = 1,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.h_x_mult } }
end,
calculate = function(self, card, context, effect)
if context.cardarea == G.play and not context.repetition and not card.debuff and context.scoring_hand then
return { card.ability.extra.h_x_mult }
end
end,
}`
am i doing something wrong here?
firstly use tripple backtick for large blocks, its easier and looks better
Island_land = SMODS.Enhancement {
object_type = "Enhantment",
name = "mtg-Island_land",
key = "Island_land",
atlas = "island",
pos = { x = 0, y = 0 },
config = { extra = { h_x_mult = '1.25' } },
weight = 1,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.h_x_mult } }
end,
calculate = function(self, card, context, effect)
if context.cardarea == G.play and not context.repetition and not card.debuff and context.scoring_hand then
return { card.ability.extra.h_x_mult }
end
end,
}
is that all
I think I'm getting carried away with my meme Jokers
how do i check what version is latest of steammodded (like the vers number) so i can put it down right for mod dependences and such?
bc there is no numbered release on github, and the alpha version jsut auto downloaded im not sure where to check? would love if anyone knew
damn
what albums should i add?
rise and fall of a midwest jimbo
this album
for some reason the 5th one looks familiar and I can't put my hands on it
Idk still not placing it
Does anybody know the code to make a Joker add 4 to your hand size?
@dull saddle ?
no idea i started coding today
have you looked at the code for mspaint joker
let me double check the vanilla exapmles mods bc i already have it open
i didnt see anything in that but i could've missed it
i have not
i would reccomend doing that
I don't know what mspaint joker means
its the one you are talking about
Nothing comes up for that on Google
its called MSpaint joker
Is that not a base card?
why would I possibly know that 😭
but the card that adds +1 hand size is called jugeler i belive
Yeah I found it
I'm looking at it right now but I'm lost
Because the "first hand of the blind" part
also why is every variable 0
OH
I see it at the top
Okay
I'll figure out how to work this out
if you know the hand modifier you SHOULD be able to work it out with the vanillajokers smods example pack i think? im not sure
https://github.com/notmario/MoreFluff/blob/main/jokers/hallofmirrors.lua ehres another one with + to hand size hope it helps
does anyone know why this is not scoring the 1.25 Xmult
is there an existing function similar to pseudorandom_element but it selects multiple unique elements from a table instead of just one?
except this is joker in cryptid
For some reason my joker did NOT pop up any messages.
Any suggestions?
well that means that neither return was executed which for an else statement then maybe the context is wrong? i dont know how this stuff works but i do know that the returns should give a message if specified one on correct card
Should I change it to card = self ?
Or the problem isn't that one?
they couldve been executed and the card was just wrong so
try doing a print() to debug in the if and else statements to get more info on if the if statements were done correctly
self is the center, card is the... card
so i dont think so
wait what is pseudorandom do?
a random number from zero to one
and fubuki is a method of randomizing i assume
I... I mean...
It's the string seed for randomization.
But when you put it like that...
you could always do math.random() since without arguments thats the same thing right
or is it like that you need pseudorandom
OHHH ok
pseudorandom makes randomness consistent with seeds
ok cool
im guessing maybe a problem with the contexts so try this to see whats not working
just put a unique print statement on all of the if statements
I yanked this part from vulpix of pokermon
ah ok
math.randomseed(--[[whatever seed]]) before math.random() should do the trick
so pseudorandom just does both of those condensed into one function?
does anyone know how to set conditions that interact with vanilla jokers? i want to set an unlock condition config where it unlocks/is discovered once you play one of the suit jokers (like lusty) but im unsure of all of the stuff i can do with config and i cant find the documentation
would i have to do the weird take ownership thing?
there's some more stuff going on with pseudoseed generating somewhat unique seeds out of the given string for each different game seed
I don't think pseudorandom itself does more than that
ok cools
Guys, I have a joker that gives a random tag at end of shop. Should it be rare or legendary?
That's what I thought too
I have a new Joker working, but it doesn't do the visible effect when triggered.
i am going insane
show code | old calc or new calc?
day 3 of rewriting straight logic
Old calc
try card = card instead of other_card and remove the colour fields
But the colour fields are what show that the Joker's giving chips and mult, yeah?
Nevermind. You were 100% on it.
Thanks for the help
isn't that just Scholar?
Yes and no.
me trying not to utilize sound util and using love's internal sound library and they are complaining that file dosen't exist (even tho this file exists)
you have a double slash in your path
(mod paths are /-terminated)
not even single slash works
i'm not trying to be a bother, but could someone help me out? i am trying to create a joker that works like ceremonial dagger but without the mult, but whenever i try to test it i am met with this error. i don't know how to fix it? i also put my code in for reference.
Also why would you be trying not to use sound util?
your sliced_card is out of scope in the event
this requires extra package and i do not like it
there's sound api in steamodded
we have sound api at home
this may be a stupid question, but how do i make it in scope?
move the code outside of the if statement inside of the if statement
when the if statement ends, all variables created in its scope vanish into clown dust
i see, that makes sense
well, it doesn't crash now, so thank you for helping with that, but nothing gets sliced
everything just kind of keeps living
relatable
i mean, it's not too bad, as the whole point of the joker was to be annoying and while an eternal useless joker is not as annoying as an eternal joker that keep destroying your other jokers, it's still fairly annoying, so thanks guys
how to quick reload in balatro
like i have to make a dummy mod that adds nothing and i need to toggle in order to reload
hold m
ty for adding that as a keybind
is there such a thing as discard retriggers? as in a way to say, get two tarot cards from a purple seal or hit the road getting two hits from one jack
how to unhighlight card?
hello I'm still struggling in making straight logic do i just
i have to put a upper bound to that card
also thanks discord for converting tabs to whitespaces
it exceeds 2000 character limit and this makes fail to send message
I doubt anyone here plays Bohnanza, but I made a card based off Bohnanza's Cocoa Bean
This was my reference image
It functions essentially the exact same as Golden Joker though
Just slightly improved
hey chat, I've been thinking about making a localisation mod, where do I get started?
i weep at this font
ikr, and then not even displaying them in file view
like wdym i have to click view whole file to be shown whitespace
looks alright, but i'd probably make the art take up the whole card like in the original and make the "cocoa bean" text on the card say joker instead

looks like cryptid does not handle create_playing_card and appears as normal card
what...
if the balatro is lagging, the cards (moveables) go crazy
i will go mad by rewriting this over and over again
maybe i needed that 60 suits mod or something to test this
Why are you writing code by hand
why arent you
pseudocode
i was writin that during dinner
balatro modding mid dinner is wild
Opera gx aah theme
Just use vencord at this point
where would i begin with coding my own deck
Hi how to make vouchers
i know this is an older message but do you know how i can import G and Event?
okay, ive got that down, but how do I change the number of a card in the deck
Im getting this crash message
--- STEAMODDED HEADER
--- MOD_NAME: Absolute Deck
--- MOD_ID: AbsoluteDeck
--- MOD_AUTHOR: [Steamo]
--- MOD_DESCRIPTION: Absolute Deck of PolyGlass!
--- DEPENDENCIES: [Steamodded>=1.0.0~ALPHA-0812d]
----------------------------------------------
------------MOD CODE -------------------------
math.randomseed(os.time()) -- Seed random number generator
Cardnumber = {"A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3", "2"}
Rankchoose = {"Spades", "Hearts", "Diamonds", "Clubs"}
function PickRandomCard()
local index = math.random(#Cardnumber) -- Get a random index
return Cardnumber[index] -- Return the card at that index
end
function PickRandomRank()
local index = math.random(#Rankchoose) -- Get a random index
return Rankchoose[index] -- Return the card at that index
end
SMODS.Back{
name = "Absolute Deck",
key = "absolute",
pos = {x = 0, y = 3},
config = {polyglass = true},
loc_txt = {
name = "One of a Kind Deck",
text ={
"Start with a deck with only one kind of card."
},
},
apply = function()
G.E_MANAGER:add_event(Event({
func = function()
local SuitChosen = PickRandomRank()
local NumberChosen = PickRandomCard()
for i = #G.playing_cards, 1, -1 do
G.playing_cards[i]:set_base(i, SuitChosen, NumberChosen)
end
return true
end
}))
end
}
----------------------------------------------
------------MOD CODE END----------------------
would three fingers be a thing that could be modded in
yeah
wdym you could absolutely do that
i have been trying to rewrite the logic for straight for 3 days now
trying to accounting for most cases that would happen to a hand
IS there a way to relock a joker to test it's unlock condition?
Okay, i made it so it no longer crashes, but it just gives me a normal deck
--- STEAMODDED HEADER
--- MOD_NAME: Absolute Deck
--- MOD_ID: AbsoluteDeck
--- MOD_AUTHOR: [Steamo]
--- MOD_DESCRIPTION: Absolute Deck of PolyGlass!
--- DEPENDENCIES: [Steamodded>=1.0.0~ALPHA-0812d]
----------------------------------------------
------------MOD CODE -------------------------
math.randomseed(os.time()) -- Seed random number generator
Cardnumber = SMODS.Suits
Rankchoose = SMODS.Ranks
function PickRandomCard()
local index = math.random(#Cardnumber) -- Get a random index
return Cardnumber[index] -- Return the card at that index
end
function PickRandomRank()
local index = math.random(#Rankchoose) -- Get a random index
return Rankchoose[index] -- Return the card at that index
end
SMODS.Back{
name = "Absolute Deck",
key = "absolute",
pos = {x = 0, y = 3},
config = {polyglass = true},
loc_txt = {
name = "One of a Kind Deck",
text ={
"Start with a deck with only one kind of card."
},
},
apply = function()
G.E_MANAGER:add_event(Event({
func = function()
local SuitChosen = PickRandomRank()
local NumberChosen = PickRandomCard()
for i = #G.playing_cards, 1, -1 do
SMODS.change_base(G.playing_cards[i], SuitChosen, NumberChosen)
end
return true
end
}))
end
}
----------------------------------------------
------------MOD CODE END----------------------
wow it is conflicting with my sticker
Thoughts on this, balancing wise
Light Glyph (uncommon)
Scored Diamonds without enhancements get a random enhancement.
(assume the cycle for each suit)
In the future I want to make a series of jokers with each refers to a song.
Should I sort them by singer or by release date?
Sorting by singer is easier for searching, while sorting by release date can deal with cases when a song is sung by multiple singers.
Def by singer
meh searching is easy either way
as long as the singers are somewhere in the name/description of the joker
I mean as in the sense of code developement and maintainment
or the TMJ metadata that i really should add but haven't yet
if you're gonna have a lot (per singer that is) you could use multiple files, one for each singer
or per year if you wanted to do that instead
Anyone seen this error before when running lovely?
called `Option::unwrap()` on a `None` value
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread '<unnamed>' panicked at core/src/panicking.rs:221:5:
panic in a function that cannot unwind
stack backtrace:
0: 0x101c53af4 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h3d0e24a4535ce4a3
1: 0x101c9614c - core::fmt::write::hd34db2896e39eb13
2: 0x101c484e8 - std::io::Write::write_fmt::h98389850cc502a9b
3: 0x101c539a8 - std::sys::backtrace::BacktraceLock::print::h8c49194dd201ac13
4: 0x101c55e34 - std::panicking::default_hook::{{closure}}::h22169dc05f5fc34f
5: 0x101c55c78 - std::panicking::default_hook::hb4863983bafae804
6: 0x101c56700 - std::panicking::rust_panic_with_hook::hf1bec629684c50de
7: 0x101c5638c - std::panicking::begin_panic_handler::{{closure}}::had7997efec54e09d
8: 0x101c53fb8 - std::sys::backtrace::__rust_end_short_backtrace::h215b9fbcb4f29906
9: 0x101c5606c - _rust_begin_unwind
10: 0x101c92968 - core::panicking::panic_nounwind_fmt::h898482d001fe481b
11: 0x101c929e0 - core::panicking::panic_nounwind::h306994f5812defd0
12: 0x101c92b58 - core::panicking::panic_cannot_unwind::hbdfca1a598de8224
13: 0x1019e9f08 - lovely::construct___rust_ctor___ctor::construct___rust_ctor___ctor::h5a2a7dad8e66a0d9
thread caused non-unwinding panic. aborting.
Just started happening all of a sudden. I tried removing all of my patch files from my mod, but no luck
wtf is a lovely::construct___rust_ctor___ctor::construct___rust_ctor___ctor
And then as I said, which file should I put them if there are multiple singers for a song
if this doesn't happen often you can have a file dedicated to those songs with multiple singers
use the balatro game source
unzip the .love
or whatever it is lmao i omor
like the hit indie video game
no way
yeah im on mac and linux so no exe for me
womp womp ik
real helpful the game crashed with no crash screen
Hello, is there a way to check if the player is in a run or not?
How do I pass variables to a locked Joker's localization?
Open up your favorite unzipping tool (winrar, 7zip, whatever), then use that to open Balatro.exe like you would any other .zip file
how do i get the chips scored after the round
ah, okay
Any help?
It doesn't crash but it doesnt change the cards
Isnt there a locked_loc_vars?
How do I change a card to a custom enhancement?
:set_ability iirc
if the mod prefix is sbc and the enhancement naie is 'fire', then how would I make it?
Exactly?
how do i set a card to a specific suit and rank
try :set_ability(G.P_CENTERS["m_sbc_fire"])
:shock
(this is what i was about to ask too)
calculate = function (self, card, context)
if context.joker_main and G.GAME.current_round.hands_left == 0 then
return{
mult_mod = card.ability.extra.mult,
message = localize{type = 'variable', key = 'a_mult', vars = {card.ability.extra.mult} },
}
end
if context.end_of_round and not context.individual and not context.repetition and not context.blueprint then
card.ability.extra.c_rounds = card.ability.extra.c_rounds + 1
if card.ability.extra.c_rounds >= card.ability.extra.rounds and (card.ability.extra.c_rounds - 1) < card.ability.extra.rounds then
local eval = function(card) return not card.REMOVED end
juice_card_until(card, eval, true)
end
return {
message = (card.ability.extra.c_rounds < card.ability.extra.rounds) and (card.ability.extra.c_rounds..'/'..card.ability.extra.rounds) or localize('k_active_ex'),
colour = G.C.FILTER
}
end
if (card.ability.extra.c_rounds >= card.ability.extra.rounds) and not context.blueprint then
local eval = function(card) return (card.ability.loyalty_remaining == 0) and not G.RESET_JIGGLES end
juice_card_until(card, eval, true)
return{
mult_mod = card.ability.extra.mult_gain,
message = localize{
type = 'variable',
key = 'a_mult',
vars = {card.ability.extra.mult_gain},
},
card = card
}
end
end```
morning, people! can someone tell me why this calculate function isnt working as intended?
intended: the card gains a certain number of mult ONCE every 3 rounds
I'm not super savvy but trying to learn so will attempt to help if you don't mind.
what text do you want the joker to say exactly?
and also what is the joker doing at the moment?
jeez that really isn't what you want

